Consistency with helper/modal windows and multiple desktops.
authorDana Jansens <danakj@orodu.net>
Wed, 5 Oct 2011 17:25:46 +0000 (13:25 -0400)
committerDana Jansens <danakj@orodu.net>
Wed, 5 Oct 2011 17:32:09 +0000 (13:32 -0400)
When focusing a window, bring its helper windows.  This happened before when
switching its desktop, but if you have 2 windows on different desktops and
switch between them, the helpers should come to both when they are being used.

When a new helper/modal window maps on a different desktop and you are using
the application, then the helper/modal window is moved to the current desktop
to be with the application you are using.

openbox/client.c

index e3d3013..e4d8534 100644 (file)
@@ -256,6 +256,15 @@ void client_manage(Window window, ObPrompt *prompt)
     /* the session should get the last say though */
     client_restore_session_state(self);
 
+    /* don't put helper/modal windows on a different desktop if they are
+       related to the focused window.  */
+    if (!screen_compare_desktops(self->desktop, screen_desktop) &&
+        focus_client && client_search_transient(focus_client, self)  &&
+        (client_helper(self) || self->modal))
+    {
+        self->desktop = screen_desktop;
+    }
+
     /* tell startup notification that this app started */
     launch_time = sn_app_started(self->startup_id, self->class, self->name);
 
@@ -3928,6 +3937,9 @@ gboolean client_focus(ObClient *self)
         return FALSE;
     }
 
+    /* if we have helper windows they should be there with the window */
+    client_bring_helper_windows(self);
+
     ob_debug_type(OB_DEBUG_FOCUS,
                   "Focusing client \"%s\" (0x%x) at time %u",
                   self->title, self->window, event_time());
@@ -4020,7 +4032,7 @@ static void client_bring_windows_recursive(ObClient *self,
 
     if (((helpers && client_helper(self)) ||
          (modals && self->modal)) &&
-        ((self->desktop != desktop && self->desktop != DESKTOP_ALL) ||
+        (!screen_compare_desktops(self->desktop, desktop) ||
          (iconic && self->iconic)))
     {
         if (iconic && self->iconic)