diff options
| author | Dana Jansens <danakj@orodu.net> | 2008-02-02 11:22:17 -0500 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2008-02-02 11:22:17 -0500 |
| commit | 746859c1017e9cdf73eb91470e795f0c4b98b21a (patch) | |
| tree | ff950342cdfb0290505b68a541864aa18d25279f /openbox/mouse.c | |
| parent | c64be9066eaae89839bb59c4d4e9539f2a7e8fc1 (diff) | |
if windows on screen are going to be moved, then do the ReplayPointer before that occurs, so it goes to the right window. if they are not, then just wait until after the actions are run (for kdesktop's sake really)
Diffstat (limited to 'openbox/mouse.c')
| -rw-r--r-- | openbox/mouse.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/openbox/mouse.c b/openbox/mouse.c index 66615585..711317ec 100644 --- a/openbox/mouse.c +++ b/openbox/mouse.c @@ -225,6 +225,17 @@ void mouse_event(ObClient *client, XEvent *e) button = e->xbutton.button; state = e->xbutton.state; + /* if the binding was in a client context, then we need to call + XAllowEvents with ReplayPointer at some point, to send the event + through to the client. when this happens though depends. if + windows are going to be moved on screen, then the click will end + up going somewhere wrong, so have the action system perform the + ReplayPointer for us if that is the case. */ + if (CLIENT_CONTEXT(context, client)) + actions_set_need_pointer_replay_before_move(TRUE); + else + actions_set_need_pointer_replay_before_move(FALSE); + fire_binding(OB_MOUSE_ACTION_PRESS, context, client, e->xbutton.state, e->xbutton.button, @@ -235,11 +246,14 @@ void mouse_event(ObClient *client, XEvent *e) if (grab_on_pointer()) button = 0; - if (CLIENT_CONTEXT(context, client)) { - /* Replay the event, so it goes to the client*/ + /* replay the pointer event if it hasn't been replayed yet (i.e. no + windows were moved) */ + if (actions_get_need_pointer_replay_before_move()) XAllowEvents(ob_display, ReplayPointer, event_curtime); - /* Fall through to the release case! */ - } else + + /* in the client context, we won't get a button release because of the + way it is grabbed, so just fake one */ + if (!CLIENT_CONTEXT(context, client)) break; case ButtonRelease: |
