all repos — openbox @ f5d7952a9470f132a612d71b8c86a1279ea3efa3

openbox fork - make it a bit more like ryudo

big scary g_assert(). interactive actions should never move focus until they're done.
Dana Jansens danakj@orodu.net
commit

f5d7952a9470f132a612d71b8c86a1279ea3efa3

parent

f9fe78d970fa1ef62d56160db7a82fa6948643b6

2 files changed, 22 insertions(+), 19 deletions(-)

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

@@ -2399,11 +2399,13 @@

return FALSE; } -void client_show(ObClient *self) +gboolean client_show(ObClient *self) { + gboolean show = FALSE; if (client_should_show(self)) { frame_show(self->frame); + show = TRUE; } /* According to the ICCCM (sec 4.1.3.1) when a window is not visible, it

@@ -2411,27 +2413,30 @@ needs to be in IconicState. This includes when it is on another

desktop! */ client_change_wm_state(self); + return show; } -void client_hide(ObClient *self) +gboolean client_hide(ObClient *self) { - if (!client_should_show(self)) + gboolean hide = FALSE; + + if (!client_should_show(self)) { frame_hide(self->frame); + hide = TRUE; + } /* According to the ICCCM (sec 4.1.3.1) when a window is not visible, it needs to be in IconicState. This includes when it is on another desktop! */ client_change_wm_state(self); + return hide; } void client_showhide(ObClient *self) { - - if (client_should_show(self)) - frame_show(self->frame); - else - frame_hide(self->frame); + if (!client_show(self)) + client_hide(self); /* According to the ICCCM (sec 4.1.3.1) when a window is not visible, it needs to be in IconicState. This includes when it is on another

@@ -3338,15 +3343,13 @@ ob_debug_type(OB_DEBUG_FOCUS,

"Focusing client \"%s\" at time %u\n", self->title, event_curtime); - /* if there is a grab going on, then we need to cancel it. if we move - focus during the grab, applications will get NotifyWhileGrabbed events - and ignore them ! + /* if we move focus during a grab, applications will get + NotifyWhileGrabbed events and ignore them ! - actions should not rely on being able to move focus during an - interactive grab. + interactive actions should not do anything that can move focus until + their finishing. */ - if (keyboard_interactively_grabbed()) - keyboard_interactive_cancel(); + g_assert(keyboard_interactively_grabbed()); error = FALSE; xerror_set_ignore(TRUE);
M openbox/client.hopenbox/client.h

@@ -493,11 +493,11 @@ desktop has been changed. Generally this should be FALSE.

*/ void client_set_desktop(ObClient *self, guint target, gboolean donthide); -/*! Show the client if it should be shown. */ -void client_show(ObClient *self); +/*! Show the client if it should be shown. Returns if the window is shown. */ +gboolean client_show(ObClient *self); -/*! Show the client if it should be shown. */ -void client_hide(ObClient *self); +/*! Show the client if it should be shown. Returns if the window is hidden. */ +gboolean client_hide(ObClient *self); /*! Show the client if it should be shown, and hide it if it should be hidden. This is for example, when switching desktops.