From 962f0b30624c62b0f6255c65128683ef4f09386b Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 17 Apr 2003 02:11:46 +0000 Subject: [PATCH] save the client and context during drags since a pointer grab will change them --- plugins/mouse/mouse.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/plugins/mouse/mouse.c b/plugins/mouse/mouse.c index 2a0b4ecc..694b2cbd 100644 --- a/plugins/mouse/mouse.c +++ b/plugins/mouse/mouse.c @@ -211,6 +211,8 @@ static void event(ObEvent *e, void *foo) 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 @@ static void event(ObEvent *e, void *foo) 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 @@ static void event(ObEvent *e, void *foo) } 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 @@ static void event(ObEvent *e, void *foo) 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 @@ static void event(ObEvent *e, void *foo) 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); } -- 2.39.2