all repos — openbox @ 962f0b30624c62b0f6255c65128683ef4f09386b

openbox fork - make it a bit more like ryudo

save the client and context during drags since a pointer grab will change them
Dana Jansens danakj@orodu.net
commit

962f0b30624c62b0f6255c65128683ef4f09386b

parent

450c21d0cac6c95b44fb1f85ad74a9896dabd687

1 files changed, 15 insertions(+), 9 deletions(-)

jump to
M plugins/mouse/mouse.cplugins/mouse/mouse.c

@@ -211,6 +211,8 @@ static int px, py, cx, cy, cw, ch, dx, dy;

static guint button = 0, state = 0, lbutton = 0; static gboolean drag = FALSE, drag_used = FALSE; static Corner corner = Corner_TopLeft; + static Client *drag_client = NULL; + static Context drag_context = Context_None; gboolean click = FALSE; gboolean dclick = FALSE; Context context;

@@ -225,6 +227,9 @@ grab_for_client(e->data.c.client, FALSE);

break; case Event_X_ButtonPress: + context = frame_context(e->data.x.client, + e->data.x.e->xbutton.window); + if (!button) { if (e->data.x.client != NULL) { cx = e->data.x.client->frame->area.x;

@@ -244,9 +249,9 @@ corner = pick_corner(px, py, cx, cy, cw, ch);

} button = e->data.x.e->xbutton.button; state = e->data.x.e->xbutton.state; + drag_context = context; + drag_client = e->data.x.client; } - context = frame_context(e->data.x.client, - e->data.x.e->xbutton.window); fire_button(MouseAction_Press, context, e->data.x.client, e->data.x.e->xbutton.state,

@@ -266,10 +271,12 @@ e->data.x.e->xbutton.window);

if (e->data.x.e->xbutton.button == button) { /* end drags */ if (drag_used) { - fire_motion(MouseAction_Motion, context, - e->data.x.client, state, button, + fire_motion(MouseAction_Motion, drag_context, + drag_client, state, button, cx, cy, cw, ch, dx, dy, TRUE, corner); drag = drag_used = FALSE; + drag_context = Context_None; + drag_client = NULL; lbutton = 0; } else {

@@ -322,13 +329,12 @@ if (button) {

dx = e->data.x.e->xmotion.x_root - px; dy = e->data.x.e->xmotion.y_root - py; if (!drag && - (ABS(dx) >= threshold || ABS(dy) >= threshold)) + (ABS(dx) >= threshold || ABS(dy) >= threshold)) { drag = TRUE; + } if (drag) { - context = frame_context(e->data.x.client, - e->data.x.e->xbutton.window); - drag_used = fire_motion(MouseAction_Motion, context, - e->data.x.client, + drag_used = fire_motion(MouseAction_Motion, drag_context, + drag_client, state, button, cx, cy, cw, ch, dx, dy, FALSE, corner); }