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:
parent
ed4d0ca31a
commit
198aab2b71
3 changed files with 16 additions and 8 deletions
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue