all repos — openbox @ 0e3ce9e407ed8e3fb554c0b25b65c0e8146bd1c6

openbox fork - make it a bit more like ryudo

if we get an event on a subwindow of root that we don't know about, but it is related to a press we received on the root window, then process the event (Fixes bug #3702)
Dana Jansens danakj@orodu.net
commit

0e3ce9e407ed8e3fb554c0b25b65c0e8146bd1c6

parent

d3ca5d5b4c36f6b3e5f64e5332e907471ee2196e

1 files changed, 16 insertions(+), 11 deletions(-)

jump to
M openbox/event.copenbox/event.c

@@ -719,22 +719,27 @@ }

#endif if (e->type == ButtonPress || e->type == ButtonRelease) { + ObWindow *w; + static guint pressed = 0; + static Window pressed_win = None; + /* If the button press was on some non-root window, or was physically - on the root window, then process it */ + on the root window... */ if (window != obt_root(ob_screen) || - e->xbutton.subwindow == None) + e->xbutton.subwindow == None || + /* ...or if it is related to the last button press we handled... */ + pressed == e->xbutton.button || + /* ...or it if it was physically on an openbox + internal window... */ + ((w = window_find(e->xbutton.subwindow)) && + WINDOW_IS_INTERNAL(w))) + /* ...then process the event, otherwise ignore it */ { used = event_handle_user_input(client, e); - } - /* Otherwise only process it if it was physically on an openbox - internal window */ - else { - ObWindow *w; - if ((w = window_find(e->xbutton.subwindow)) && - WINDOW_IS_INTERNAL(w)) - { - used = event_handle_user_input(client, e); + if (e->type == ButtonPress) { + pressed = e->xbutton.button; + pressed_win = e->xbutton.subwindow; } } }