From 10d4dcb1278b8ff01d5338aa58d50fa38978a9d5 Mon Sep 17 00:00:00 2001 From: okan Date: Thu, 2 Jan 2014 21:30:20 +0000 Subject: bring mousefunc closer to kbfunc --- calmwm.h | 31 +++++++++++++++++++------------ conf.c | 31 +++++++++++++++++-------------- mousefunc.c | 22 +++++++++++----------- xevents.c | 2 +- 4 files changed, 48 insertions(+), 38 deletions(-) diff --git a/calmwm.h b/calmwm.h index 97ecf0c..2e49846 100644 --- a/calmwm.h +++ b/calmwm.h @@ -255,7 +255,8 @@ TAILQ_HEAD(keybinding_q, keybinding); struct mousebinding { TAILQ_ENTRY(mousebinding) entry; - void (*callback)(struct client_ctx *, void *); + void (*callback)(struct client_ctx *, union arg *); + union arg argument; u_int modmask; u_int button; #define MOUSEBIND_CTX_ROOT 0x0001 @@ -483,19 +484,25 @@ void kbfunc_term(struct client_ctx *, union arg *); void kbfunc_tile(struct client_ctx *, union arg *); void mousefunc_client_cyclegroup(struct client_ctx *, - void *); + union arg *); void mousefunc_client_grouptoggle(struct client_ctx *, - void *); -void mousefunc_client_hide(struct client_ctx *, void *); -void mousefunc_client_lower(struct client_ctx *, void *); -void mousefunc_client_move(struct client_ctx *, void *); -void mousefunc_client_raise(struct client_ctx *, void *); + union arg *); +void mousefunc_client_hide(struct client_ctx *, + union arg *); +void mousefunc_client_lower(struct client_ctx *, + union arg *); +void mousefunc_client_move(struct client_ctx *, + union arg *); +void mousefunc_client_raise(struct client_ctx *, + union arg *); void mousefunc_client_rcyclegroup(struct client_ctx *, - void *); -void mousefunc_client_resize(struct client_ctx *, void *); -void mousefunc_menu_cmd(struct client_ctx *, void *); -void mousefunc_menu_group(struct client_ctx *, void *); -void mousefunc_menu_unhide(struct client_ctx *, void *); + union arg *); +void mousefunc_client_resize(struct client_ctx *, + union arg *); +void mousefunc_menu_cmd(struct client_ctx *, union arg *); +void mousefunc_menu_group(struct client_ctx *, union arg *); +void mousefunc_menu_unhide(struct client_ctx *, + union arg *); struct menu *menu_filter(struct screen_ctx *, struct menu_q *, char *, char *, int, diff --git a/conf.c b/conf.c index 426170f..606d088 100644 --- a/conf.c +++ b/conf.c @@ -535,22 +535,24 @@ conf_unbind_kbd(struct conf *c, struct keybinding *unbind) } static struct { - char *tag; - void (*handler)(struct client_ctx *, void *); - int flags; + char *tag; + void (*handler)(struct client_ctx *, union arg *); + int flags; + union arg argument; } name_to_mousefunc[] = { - { "window_move", mousefunc_client_move, MOUSEBIND_CTX_WIN }, - { "window_resize", mousefunc_client_resize, MOUSEBIND_CTX_WIN }, + { "window_move", mousefunc_client_move, MOUSEBIND_CTX_WIN, {0} }, + { "window_resize", mousefunc_client_resize, MOUSEBIND_CTX_WIN, {0} }, { "window_grouptoggle", mousefunc_client_grouptoggle, - MOUSEBIND_CTX_WIN }, - { "window_lower", mousefunc_client_lower, MOUSEBIND_CTX_WIN }, - { "window_raise", mousefunc_client_raise, MOUSEBIND_CTX_WIN }, - { "window_hide", mousefunc_client_hide, MOUSEBIND_CTX_WIN }, - { "cyclegroup", mousefunc_client_cyclegroup, MOUSEBIND_CTX_ROOT }, - { "rcyclegroup", mousefunc_client_rcyclegroup, MOUSEBIND_CTX_ROOT }, - { "menu_group", mousefunc_menu_group, MOUSEBIND_CTX_ROOT }, - { "menu_unhide", mousefunc_menu_unhide, MOUSEBIND_CTX_ROOT }, - { "menu_cmd", mousefunc_menu_cmd, MOUSEBIND_CTX_ROOT }, + MOUSEBIND_CTX_WIN, {0} }, + { "window_lower", mousefunc_client_lower, MOUSEBIND_CTX_WIN, {0} }, + { "window_raise", mousefunc_client_raise, MOUSEBIND_CTX_WIN, {0} }, + { "window_hide", mousefunc_client_hide, MOUSEBIND_CTX_WIN, {0} }, + { "cyclegroup", mousefunc_client_cyclegroup, MOUSEBIND_CTX_ROOT, {0} }, + { "rcyclegroup", mousefunc_client_rcyclegroup, + MOUSEBIND_CTX_ROOT, {0} }, + { "menu_group", mousefunc_menu_group, MOUSEBIND_CTX_ROOT, {0} }, + { "menu_unhide", mousefunc_menu_unhide, MOUSEBIND_CTX_ROOT, {0} }, + { "menu_cmd", mousefunc_menu_cmd, MOUSEBIND_CTX_ROOT, {0} }, }; static unsigned int mouse_btns[] = { @@ -597,6 +599,7 @@ conf_bind_mouse(struct conf *c, char *name, char *binding) current_binding->callback = name_to_mousefunc[i].handler; current_binding->flags = name_to_mousefunc[i].flags; + current_binding->argument = name_to_mousefunc[i].argument; TAILQ_INSERT_TAIL(&c->mousebindingq, current_binding, entry); return (1); } diff --git a/mousefunc.c b/mousefunc.c index 2506678..3bc7f1d 100644 --- a/mousefunc.c +++ b/mousefunc.c @@ -66,7 +66,7 @@ mousefunc_sweep_draw(struct client_ctx *cc) } void -mousefunc_client_resize(struct client_ctx *cc, void *arg) +mousefunc_client_resize(struct client_ctx *cc, union arg *arg) { XEvent ev; Time ltime = 0; @@ -120,7 +120,7 @@ mousefunc_client_resize(struct client_ctx *cc, void *arg) } void -mousefunc_client_move(struct client_ctx *cc, void *arg) +mousefunc_client_move(struct client_ctx *cc, union arg *arg) { XEvent ev; Time ltime = 0; @@ -173,50 +173,50 @@ mousefunc_client_move(struct client_ctx *cc, void *arg) } void -mousefunc_client_grouptoggle(struct client_ctx *cc, void *arg) +mousefunc_client_grouptoggle(struct client_ctx *cc, union arg *arg) { group_sticky_toggle_enter(cc); } void -mousefunc_client_lower(struct client_ctx *cc, void *arg) +mousefunc_client_lower(struct client_ctx *cc, union arg *arg) { client_ptrsave(cc); client_lower(cc); } void -mousefunc_client_raise(struct client_ctx *cc, void *arg) +mousefunc_client_raise(struct client_ctx *cc, union arg *arg) { client_raise(cc); } void -mousefunc_client_hide(struct client_ctx *cc, void *arg) +mousefunc_client_hide(struct client_ctx *cc, union arg *arg) { client_hide(cc); } void -mousefunc_client_cyclegroup(struct client_ctx *cc, void *arg) +mousefunc_client_cyclegroup(struct client_ctx *cc, union arg *arg) { group_cycle(cc->sc, CWM_CYCLE); } void -mousefunc_client_rcyclegroup(struct client_ctx *cc, void *arg) +mousefunc_client_rcyclegroup(struct client_ctx *cc, union arg *arg) { group_cycle(cc->sc, CWM_RCYCLE); } void -mousefunc_menu_group(struct client_ctx *cc, void *arg) +mousefunc_menu_group(struct client_ctx *cc, union arg *arg) { group_menu(cc->sc); } void -mousefunc_menu_unhide(struct client_ctx *cc, void *arg) +mousefunc_menu_unhide(struct client_ctx *cc, union arg *arg) { struct screen_ctx *sc = cc->sc; struct client_ctx *old_cc; @@ -258,7 +258,7 @@ mousefunc_menu_unhide(struct client_ctx *cc, void *arg) } void -mousefunc_menu_cmd(struct client_ctx *cc, void *arg) +mousefunc_menu_cmd(struct client_ctx *cc, union arg *arg) { struct screen_ctx *sc = cc->sc; struct menu *mi; diff --git a/xevents.c b/xevents.c index e3d17fd..09232c3 100644 --- a/xevents.c +++ b/xevents.c @@ -246,7 +246,7 @@ xev_handle_buttonpress(XEvent *ee) cc->sc = screen_fromroot(e->window); } - (*mb->callback)(cc, e); + (*mb->callback)(cc, &mb->argument); } static void -- cgit 1.4.1