]> Dogcows Code - chaz/openbox/commitdiff
big scary g_assert(). interactive actions should never move focus until they're done.
authorDana Jansens <danakj@orodu.net>
Mon, 14 May 2007 23:21:53 +0000 (23:21 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 14 May 2007 23:21:53 +0000 (23:21 +0000)
openbox/client.c
openbox/client.h

index e51ad65eba00d29cb0c8df196979dabaa4de5122..b3f1368498a322d88a9e8275e46e99ed89da9e47 100644 (file)
@@ -2399,11 +2399,13 @@ gboolean client_should_show(ObClient *self)
     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 @@ void client_show(ObClient *self)
        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 @@ gboolean client_focus(ObClient *self)
                   "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);
index aaebceaa66855b32d03af90701a591927649b7ed..5526c282ddf6d9cc242b445206c4fa3c460d8a05 100644 (file)
@@ -493,11 +493,11 @@ void client_kill(ObClient *self);
 */
 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.
This page took 0.029523 seconds and 4 git commands to generate.