diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-05-09 16:57:17 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-05-09 16:57:17 +0000 |
| commit | f26f23de50cb7941a7702198e3b4d1b2f9de062e (patch) | |
| tree | ec1d73c8e977d86e9231676c51e684a3415e7a0e /plugins/mouse | |
| parent | 60065663ba9dc448dcf90fd200cd459bcdb9ef9c (diff) | |
all my changes while i was offline.
better alt-tabbing. better transient handling. i dont even know. lots of fucking cool shit so WATCH the FUCK OUT.
Diffstat (limited to 'plugins/mouse')
| -rw-r--r-- | plugins/mouse/mouse.c | 75 | ||||
| -rw-r--r-- | plugins/mouse/mouse.h | 2 |
2 files changed, 41 insertions, 36 deletions
diff --git a/plugins/mouse/mouse.c b/plugins/mouse/mouse.c index caf4e554..8df8e2a0 100644 --- a/plugins/mouse/mouse.c +++ b/plugins/mouse/mouse.c @@ -96,9 +96,13 @@ static void clearall() int j; MouseBinding *b = it->data; - for (j = 0; j < NUM_MOUSEACTION; ++j) - if (b->action[j] != NULL) - action_free(b->action[j]); + for (j = 0; j < NUM_MOUSEACTION; ++j) { + GSList *it; + for (it = b->actions[j]; it; it = it->next) { + action_free(it->data); + } + g_slist_free(b->actions[j]); + } g_free(b); } g_slist_free(bound_contexts[i]); @@ -119,17 +123,20 @@ static void fire_button(MouseAction a, Context context, Client *c, guint state, /* if not bound, then nothing to do! */ if (it == NULL) return; - if (b->action[a] != NULL && b->action[a]->func != NULL) { - b->action[a]->data.any.c = c; + for (it = b->actions[a]; it; it = it->next) { + Action *act = it->data; + if (act->func != NULL) { + act->data.any.c = c; - g_assert(b->action[a]->func != action_moveresize); + g_assert(act->func != action_moveresize); - if (b->action[a]->func == action_showmenu) { - b->action[a]->data.showmenu.x = x; - b->action[a]->data.showmenu.y = y; - } + if (act->func == action_showmenu) { + act->data.showmenu.x = x; + act->data.showmenu.y = y; + } - b->action[a]->func(&b->action[a]->data); + act->func(&act->data); + } } } @@ -148,24 +155,27 @@ static void fire_motion(MouseAction a, Context context, Client *c, /* if not bound, then nothing to do! */ if (it == NULL) return; - if (b->action[a] != NULL && b->action[a]->func != NULL) { - b->action[a]->data.any.c = c; - - if (b->action[a]->func == action_moveresize) { - b->action[a]->data.moveresize.x = x_root; - b->action[a]->data.moveresize.y = y_root; - b->action[a]->data.moveresize.button = button; - if (!(b->action[a]->data.moveresize.corner == - prop_atoms.net_wm_moveresize_move || - b->action[a]->data.moveresize.corner == - prop_atoms.net_wm_moveresize_move_keyboard || - b->action[a]->data.moveresize.corner == - prop_atoms.net_wm_moveresize_size_keyboard)) - b->action[a]->data.moveresize.corner = corner; - } else - g_assert_not_reached(); + for (it = b->actions[a]; it; it = it->next) { + Action *act = it->data; + if (act->func != NULL) { + act->data.any.c = c; + + if (act->func == action_moveresize) { + act->data.moveresize.x = x_root; + act->data.moveresize.y = y_root; + act->data.moveresize.button = button; + if (!(act->data.moveresize.corner == + prop_atoms.net_wm_moveresize_move || + act->data.moveresize.corner == + prop_atoms.net_wm_moveresize_move_keyboard || + act->data.moveresize.corner == + prop_atoms.net_wm_moveresize_size_keyboard)) + act->data.moveresize.corner = corner; + } else + g_assert_not_reached(); - b->action[a]->func(&b->action[a]->data); + act->func(&act->data); + } } } @@ -338,12 +348,7 @@ gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact, for (it = bound_contexts[context]; it != NULL; it = it->next){ b = it->data; if (b->state == state && b->button == button) { - /* already bound */ - if (b->action[mact] != NULL) { - g_warning("duplicate binding"); - return FALSE; - } - b->action[mact] = action; + b->actions[mact] = g_slist_append(b->actions[mact], action); return TRUE; } } @@ -354,7 +359,7 @@ gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact, b = g_new0(MouseBinding, 1); b->state = state; b->button = button; - b->action[mact] = action; + b->actions[mact] = g_slist_append(NULL, action); bound_contexts[context] = g_slist_append(bound_contexts[context], b); grab_all_clients(TRUE); diff --git a/plugins/mouse/mouse.h b/plugins/mouse/mouse.h index 832ada1f..408ae964 100644 --- a/plugins/mouse/mouse.h +++ b/plugins/mouse/mouse.h @@ -15,7 +15,7 @@ typedef enum { typedef struct { guint state; guint button; - Action *action[NUM_MOUSEACTION]; + GSList *actions[NUM_MOUSEACTION]; /* lists of Action pointers */ } MouseBinding; gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact, |
