X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmouse.c;h=a7601f69112cf5f2d9b6469dd469245e8860683b;hb=d179d6428ae585a3b8a13479bfe4586e41de2ff9;hp=ae9a6fc299b88a6877e53efeb470e504dab711c5;hpb=b01dd0b20fedb27681ceda53deb8c7f2f83eabc3;p=chaz%2Fopenbox diff --git a/openbox/mouse.c b/openbox/mouse.c index ae9a6fc2..a7601f69 100644 --- a/openbox/mouse.c +++ b/openbox/mouse.c @@ -37,12 +37,6 @@ typedef struct { GSList *actions[OB_NUM_MOUSE_ACTIONS]; /* lists of Action pointers */ } ObMouseBinding; -#define FRAME_CONTEXT(co, cl) ((cl && cl->type != OB_CLIENT_TYPE_DESKTOP) ? \ - co == OB_FRAME_CONTEXT_FRAME : FALSE) -#define CLIENT_CONTEXT(co, cl) ((cl && cl->type == OB_CLIENT_TYPE_DESKTOP) ? \ - co == OB_FRAME_CONTEXT_DESKTOP : \ - co == OB_FRAME_CONTEXT_CLIENT) - /* Array of GSList*s of ObMouseBinding*s. */ static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS]; /* TRUE when we have a grab on the pointer and need to replay the pointer event @@ -161,7 +155,7 @@ void mouse_unbind_all(void) actions_act_unref(jt->data); g_slist_free(b->actions[j]); } - g_free(b); + g_slice_free(ObMouseBinding, b); } g_slist_free(bound_contexts[i]); bound_contexts[i] = NULL; @@ -202,7 +196,7 @@ static gboolean fire_binding(ObMouseAction a, ObFrameContext context, return TRUE; } -void mouse_replay_pointer() +void mouse_replay_pointer(void) { if (replay_pointer_needed) { /* replay the pointer event before any windows move */ @@ -211,12 +205,13 @@ void mouse_replay_pointer() } } -void mouse_event(ObClient *client, XEvent *e) +gboolean mouse_event(ObClient *client, XEvent *e) { static Time ltime; static guint button = 0, state = 0, lbutton = 0; static Window lwindow = None; static gint px, py, pwx = -1, pwy = -1; + gboolean used = FALSE; ObFrameContext context; gboolean click = FALSE; @@ -252,10 +247,10 @@ void mouse_event(ObClient *client, XEvent *e) if (CLIENT_CONTEXT(context, client)) replay_pointer_needed = TRUE; - fire_binding(OB_MOUSE_ACTION_PRESS, context, - client, e->xbutton.state, - e->xbutton.button, - e->xbutton.x_root, e->xbutton.y_root); + used = fire_binding(OB_MOUSE_ACTION_PRESS, context, + client, e->xbutton.state, + e->xbutton.button, + e->xbutton.x_root, e->xbutton.y_root) || used; /* if the bindings grab the pointer, there won't be a ButtonRelease event for us */ @@ -317,23 +312,23 @@ void mouse_event(ObClient *client, XEvent *e) state = 0; ltime = e->xbutton.time; } - fire_binding(OB_MOUSE_ACTION_RELEASE, context, - client, e->xbutton.state, - e->xbutton.button, - e->xbutton.x_root, - e->xbutton.y_root); + used = fire_binding(OB_MOUSE_ACTION_RELEASE, context, + client, e->xbutton.state, + e->xbutton.button, + e->xbutton.x_root, + e->xbutton.y_root) || used; if (click) - fire_binding(OB_MOUSE_ACTION_CLICK, context, - client, e->xbutton.state, - e->xbutton.button, - e->xbutton.x_root, - e->xbutton.y_root); + used = fire_binding(OB_MOUSE_ACTION_CLICK, context, + client, e->xbutton.state, + e->xbutton.button, + e->xbutton.x_root, + e->xbutton.y_root) || used; if (dclick) - fire_binding(OB_MOUSE_ACTION_DOUBLE_CLICK, context, - client, e->xbutton.state, - e->xbutton.button, - e->xbutton.x_root, - e->xbutton.y_root); + used = fire_binding(OB_MOUSE_ACTION_DOUBLE_CLICK, context, + client, e->xbutton.state, + e->xbutton.button, + e->xbutton.x_root, + e->xbutton.y_root) || used; break; case MotionNotify: @@ -353,8 +348,8 @@ void mouse_event(ObClient *client, XEvent *e) context == OB_FRAME_CONTEXT_CLOSE) break; - fire_binding(OB_MOUSE_ACTION_MOTION, context, - client, state, button, px, py); + used = fire_binding(OB_MOUSE_ACTION_MOTION, context, + client, state, button, px, py); button = 0; state = 0; } @@ -364,6 +359,7 @@ void mouse_event(ObClient *client, XEvent *e) default: g_assert_not_reached(); } + return used; } gboolean mouse_bind(const gchar *buttonstr, const gchar *contextstr, @@ -375,13 +371,13 @@ gboolean mouse_bind(const gchar *buttonstr, const gchar *contextstr, GSList *it; if (!translate_button(buttonstr, &state, &button)) { - g_message(_("Invalid button '%s' in mouse binding"), buttonstr); + g_message(_("Invalid button \"%s\" in mouse binding"), buttonstr); return FALSE; } context = frame_context_from_string(contextstr); if (!context) { - g_message(_("Invalid context '%s' in mouse binding"), contextstr); + g_message(_("Invalid context \"%s\" in mouse binding"), contextstr); return FALSE; } @@ -394,7 +390,7 @@ gboolean mouse_bind(const gchar *buttonstr, const gchar *contextstr, } /* add the binding */ - b = g_new0(ObMouseBinding, 1); + b = g_slice_new0(ObMouseBinding); b->state = state; b->button = button; b->actions[mact] = g_slist_append(NULL, action);