all repos — openbox @ 281c1edb4206b7e7874990b1bd5f66e1e7e43ede

openbox fork - make it a bit more like ryudo

kill enter events without using pointer grabs
Dana Jansens danakj@orodu.net
commit

281c1edb4206b7e7874990b1bd5f66e1e7e43ede

parent

b1076c93330d98d93bf6b775f90dca78daf3a1a3

4 files changed, 16 insertions(+), 22 deletions(-)

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

@@ -3272,10 +3272,6 @@ }

} } - /* Grab pointer across these, so it is the same as actions. Enter events - won't be generated by the windows moving around */ - grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); - if (max_horz != self->max_horz || max_vert != self->max_vert) { if (max_horz != self->max_horz && max_vert != self->max_vert) { /* toggling both */

@@ -3313,19 +3309,11 @@ /* when a window changes modality, then its stacking order with its

transients needs to change */ stacking_raise(CLIENT_AS_WINDOW(self)); - /* These things below can change focus so we can't grab pointer for - them. Note how we have two ungrab_pointers.. */ - ungrab_pointer(); - /* it also may get focused. if something is focused that shouldn't be focused anymore, then move the focus */ if (focus_client && client_focus_target(focus_client) != focus_client) client_focus(focus_client); } - else - /* These things below can change focus so we can't grab pointer for - them. Note how we have two ungrab_pointers.. */ - ungrab_pointer(); if (iconic != self->iconic) client_iconify(self, iconic, FALSE, FALSE);
M openbox/client_menu.copenbox/client_menu.c

@@ -24,6 +24,7 @@ #include "client.h"

#include "openbox.h" #include "frame.h" #include "moveresize.h" +#include "event.h" #include "prop.h" #include "gettext.h"

@@ -118,15 +119,19 @@ client_iconify(c, TRUE, FALSE, FALSE);

break; case CLIENT_RESTORE: client_maximize(c, FALSE, 0); + event_ignore_queued_enters(); break; case CLIENT_MAXIMIZE: client_maximize(c, TRUE, 0); + event_ignore_queued_enters(); break; case CLIENT_SHADE: client_shade(c, !c->shaded); + event_ignore_queued_enters(); break; case CLIENT_DECORATE: client_set_undecorated(c, !c->undecorated); + event_ignore_queued_enters(); break; case CLIENT_MOVE: /* this needs to grab the keyboard so hide the menu */

@@ -211,6 +216,8 @@ break;

default: g_assert_not_reached(); } + + event_ignore_queued_enters(); /* update the menu cuz stuff can have changed */ if (f) {
M openbox/event.copenbox/event.c

@@ -1082,11 +1082,10 @@ }

if (config) { client_find_onscreen(client, &x, &y, w, h, FALSE); + client_configure(client, x, y, w, h, FALSE, TRUE); - /* don't create enter events from clients moving themselves */ - grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); - client_configure(client, x, y, w, h, FALSE, TRUE); - ungrab_pointer(); + /* ignore enter events caused by these like ob actions do */ + event_ignore_queued_enters(); } break; }

@@ -1180,6 +1179,9 @@ e->xclient.data.l[1], e->xclient.data.l[2],

client->window); client_set_state(client, e->xclient.data.l[0], e->xclient.data.l[1], e->xclient.data.l[2]); + + /* ignore enter events caused by these like ob actions do */ + event_ignore_queued_enters(); } else if (msgtype == prop_atoms.net_close_window) { ob_debug("net_close_window for 0x%lx\n", client->window); client_close(client);

@@ -1264,10 +1266,10 @@ e->xclient.data.l[0] & 1 << 9, y);

client_convert_gravity(client, grav, &x, &y, w, h); client_find_onscreen(client, &x, &y, w, h, FALSE); - /* don't create enter events from clients moving themselves */ - grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); client_configure(client, x, y, w, h, FALSE, TRUE); - ungrab_pointer(); + + /* ignore enter events caused by these like ob actions do */ + event_ignore_queued_enters(); } else if (msgtype == prop_atoms.net_restack_window) { if (e->xclient.data.l[0] != 2) { ob_debug_type(OB_DEBUG_APP_BUGS,
M openbox/event.hopenbox/event.h

@@ -51,7 +51,4 @@ /*! Compare t1 and t2, taking into account wraparound. True if t1

comes at the same time or later than t2. */ gboolean event_time_after(Time t1, Time t2); -/*! Used with XCheckIfEvent to find a focusin event on a client window */ -Bool event_look_for_focusin_client(Display *d, XEvent *e, XPointer arg); - #endif