From 875e8c9d4dba378155fd9f7d3a33b7b02fce859c Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 10 Sep 2022 01:59:32 +0400 Subject: [PATCH] Move code to separate modules --- Makefile | 1 + src/config/cursors.c | 21 +++++++++++++++++++++ src/config/cursors.h | 17 +++++++++++++++++ src/drw.c | 23 ----------------------- src/drw.h | 8 -------- src/dwm.c | 12 +++--------- src/dwm.h | 1 + src/dwm/spaghetti/interaction.c | 4 ++-- 8 files changed, 45 insertions(+), 42 deletions(-) create mode 100644 src/config/cursors.c create mode 100644 src/config/cursors.h diff --git a/Makefile b/Makefile index 19a289b..5fb723b 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,7 @@ RUST_APIS = \ src/settings.h MODULES_SRC = \ + src/config/cursors.c \ src/config/keys.c \ src/config/buttons.c \ src/config/layouts.c \ diff --git a/src/config/cursors.c b/src/config/cursors.c new file mode 100644 index 0000000..b03850f --- /dev/null +++ b/src/config/cursors.c @@ -0,0 +1,21 @@ +#include "cursors.h" + +#include + +const Cursor cursors[CURSORS_COUNT] = { 0, 0, 0 }; + +void cursors_create(Display *const display) +{ + Cursor *const cursors_ptr = (Cursor*)cursors; + cursors_ptr[CURSOR_NORMAL] = XCreateFontCursor(display, XC_left_ptr); + cursors_ptr[CURSOR_RESIZE] = XCreateFontCursor(display, XC_sizing); + cursors_ptr[CURSOR_MOVE] = XCreateFontCursor(display, XC_fleur); +} + +void cursors_destroy(Display *const display) +{ + Cursor *const cursors_ptr = (Cursor*)cursors; + XFreeCursor(display, cursors_ptr[CURSOR_NORMAL]); + XFreeCursor(display, cursors_ptr[CURSOR_RESIZE]); + XFreeCursor(display, cursors_ptr[CURSOR_MOVE]); +} diff --git a/src/config/cursors.h b/src/config/cursors.h new file mode 100644 index 0000000..4da97c9 --- /dev/null +++ b/src/config/cursors.h @@ -0,0 +1,17 @@ +#ifndef _CONFIG_CURSORS_H +#define _CONFIG_CURSORS_H + +#include + +#define CURSOR_NORMAL 0 +#define CURSOR_RESIZE 1 +#define CURSOR_MOVE 2 + +#define CURSORS_COUNT 3 + +extern const Cursor cursors[CURSORS_COUNT]; + +void cursors_create(Display *display); +void cursors_destroy(Display *display); + +#endif // _CONFIG_CURSORS_H diff --git a/src/drw.c b/src/drw.c index 1a7e6da..8c9af58 100644 --- a/src/drw.c +++ b/src/drw.c @@ -65,26 +65,3 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) drw_clr_create(drw, &ret[i], clrnames[i]); return ret; } - -Cur * -drw_cur_create(Drw *drw, int shape) -{ - Cur *cur; - - if (!drw || !(cur = ecalloc(1, sizeof(Cur)))) - return NULL; - - cur->cursor = XCreateFontCursor(drw->dpy, shape); - - return cur; -} - -void -drw_cur_free(Drw *drw, Cur *cursor) -{ - if (!cursor) - return; - - XFreeCursor(drw->dpy, cursor->cursor); - free(cursor); -} diff --git a/src/drw.h b/src/drw.h index 8433b3b..1bdc93b 100644 --- a/src/drw.h +++ b/src/drw.h @@ -1,10 +1,6 @@ #ifndef _DRW_H #define _DRW_H -typedef struct { - Cursor cursor; -} Cur; - enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */ typedef XftColor Clr; @@ -25,8 +21,4 @@ void drw_free(Drw *drw); /* Colorscheme abstraction */ Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); -/* Cursor abstraction */ -Cur *drw_cur_create(Drw *drw, int shape); -void drw_cur_free(Drw *drw, Cur *cursor); - #endif // _DRW_H diff --git a/src/dwm.c b/src/dwm.c index 0597e4d..bd00742 100644 --- a/src/dwm.c +++ b/src/dwm.c @@ -154,7 +154,6 @@ static Unit global_unit = NULL; static const char broken[] = "broken"; static unsigned int numlockmask = 0; static int running = 1; -static Cur *cursor[CurLast]; static Clr **scheme; static Drw *drw; static Monitor *mons, *selmon; @@ -225,9 +224,7 @@ int dwm_main(const char *const new_program_title) updategeom(); /* init cursors */ - cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); - cursor[CurResize] = drw_cur_create(drw, XC_sizing); - cursor[CurMove] = drw_cur_create(drw, XC_fleur); + cursors_create(drw->dpy); /* init appearance */ scheme_create(); @@ -252,7 +249,7 @@ int dwm_main(const char *const new_program_title) ); /* select events */ - wa.cursor = cursor[CurNormal]->cursor; + wa.cursor = cursors[CURSOR_NORMAL]; wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ButtonPressMask | PointerMotionMask | EnterWindowMask | LeaveWindowMask | @@ -289,10 +286,7 @@ int dwm_main(const char *const new_program_title) monitor_destroy(mons); } - for (size_t i = 0; i < CurLast; i++) { - drw_cur_free(drw, cursor[i]); - } - + cursors_destroy(drw->dpy); scheme_destroy(); wmcheckwin_destroy(); diff --git a/src/dwm.h b/src/dwm.h index de08f91..85f9952 100644 --- a/src/dwm.h +++ b/src/dwm.h @@ -2,6 +2,7 @@ #define _DWM_H #include "config/buttons.h" +#include "config/cursors.h" #include "config/keys.h" #include "config/layouts.h" diff --git a/src/dwm/spaghetti/interaction.c b/src/dwm/spaghetti/interaction.c index 7ffd7a2..aee8034 100644 --- a/src/dwm/spaghetti/interaction.c +++ b/src/dwm/spaghetti/interaction.c @@ -126,7 +126,7 @@ void movemouse(__attribute__((unused)) const Arg *arg) GrabModeAsync, GrabModeAsync, None, - cursor[CurMove]->cursor, + cursors[CURSOR_MOVE], CurrentTime ) != GrabSuccess ) { @@ -357,7 +357,7 @@ void resizemouse(__attribute__((unused)) const Arg *arg) GrabModeAsync, GrabModeAsync, None, - cursor[CurResize]->cursor, + cursors[CURSOR_RESIZE], CurrentTime ) != GrabSuccess ) {