make binding fallback for mouse clicks less restrictive. if you dont have a binding for the same button AND STATE then fallback.

This commit is contained in:
Dana Jansens 2007-05-19 22:03:12 +00:00
parent ed4d0ca31a
commit 198aab2b71
3 changed files with 16 additions and 8 deletions

View file

@ -772,7 +772,8 @@ static void event_handle_client(ObClient *client, XEvent *e)
{ {
/* use where the press occured */ /* use where the press occured */
con = frame_context(client, e->xbutton.window, px, py); con = frame_context(client, e->xbutton.window, px, py);
con = mouse_button_frame_context(con, e->xbutton.button); con = mouse_button_frame_context(con, e->xbutton.button,
e->xbutton.state);
if (e->type == ButtonRelease && e->xbutton.button == pb) if (e->type == ButtonRelease && e->xbutton.button == pb)
pb = 0, px = py = -1; pb = 0, px = py = -1;

View file

@ -48,7 +48,8 @@ typedef struct {
static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS]; static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS];
ObFrameContext mouse_button_frame_context(ObFrameContext context, ObFrameContext mouse_button_frame_context(ObFrameContext context,
guint button) guint button,
guint state)
{ {
GSList *it; GSList *it;
ObFrameContext x = context; ObFrameContext x = context;
@ -56,7 +57,7 @@ ObFrameContext mouse_button_frame_context(ObFrameContext context,
for (it = bound_contexts[context]; it; it = g_slist_next(it)) { for (it = bound_contexts[context]; it; it = g_slist_next(it)) {
ObMouseBinding *b = it->data; ObMouseBinding *b = it->data;
if (b->button == button) if (b->button == button && b->state == state)
return context; return context;
} }
@ -90,7 +91,11 @@ ObFrameContext mouse_button_frame_context(ObFrameContext context,
g_assert_not_reached(); g_assert_not_reached();
} }
return x; /* allow for multiple levels of fall-through */
if (x != context)
return mouse_button_frame_context(x, button, state);
else
return x;
} }
void mouse_grab_for_client(ObClient *client, gboolean grab) void mouse_grab_for_client(ObClient *client, gboolean grab)
@ -192,7 +197,8 @@ void mouse_event(ObClient *client, XEvent *e)
case ButtonPress: case ButtonPress:
context = frame_context(client, e->xbutton.window, context = frame_context(client, e->xbutton.window,
e->xbutton.x, e->xbutton.y); e->xbutton.x, e->xbutton.y);
context = mouse_button_frame_context(context, e->xbutton.button); context = mouse_button_frame_context(context, e->xbutton.button,
e->xbutton.state);
px = e->xbutton.x_root; px = e->xbutton.x_root;
py = e->xbutton.y_root; py = e->xbutton.y_root;
@ -222,7 +228,8 @@ void mouse_event(ObClient *client, XEvent *e)
case ButtonRelease: case ButtonRelease:
/* use where the press occured in the window */ /* use where the press occured in the window */
context = frame_context(client, e->xbutton.window, pwx, pwy); context = frame_context(client, e->xbutton.window, pwx, pwy);
context = mouse_button_frame_context(context, e->xbutton.button); context = mouse_button_frame_context(context, e->xbutton.button,
e->xbutton.state);
if (e->xbutton.button == button) if (e->xbutton.button == button)
pwx = pwy = -1; pwx = pwy = -1;
@ -289,7 +296,7 @@ void mouse_event(ObClient *client, XEvent *e)
case MotionNotify: case MotionNotify:
if (button) { if (button) {
context = frame_context(client, e->xmotion.window, pwx, pwy); context = frame_context(client, e->xmotion.window, pwx, pwy);
context = mouse_button_frame_context(context, button); context = mouse_button_frame_context(context, button, state);
if (ABS(e->xmotion.x_root - px) >= config_mouse_threshold || if (ABS(e->xmotion.x_root - px) >= config_mouse_threshold ||
ABS(e->xmotion.y_root - py) >= config_mouse_threshold) { ABS(e->xmotion.y_root - py) >= config_mouse_threshold) {

View file

@ -37,6 +37,6 @@ void mouse_event(struct _ObClient *client, XEvent *e);
void mouse_grab_for_client(struct _ObClient *client, gboolean grab); void mouse_grab_for_client(struct _ObClient *client, gboolean grab);
ObFrameContext mouse_button_frame_context(ObFrameContext context, ObFrameContext mouse_button_frame_context(ObFrameContext context,
guint button); guint button, guint state);
#endif #endif