]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
only show falling back msg when its true
[chaz/openbox] / openbox / client.c
index 0701d3fa3b7d40c616a085b4bd2829e8cbe98efc..d3db024bb7170235566cc32651b5836269b4a581 100644 (file)
@@ -349,10 +349,11 @@ void client_manage(Window window)
          client_search_focus_tree_full(self)) &&
         /* this checks for focus=false for the window */
         (!settings || settings->focus != 0) &&
-        /* note the check against Type_Normal/Dialog, not client_normal(self),
-           which would also include other types. in this case we want more
-           strict rules for focus */
+        /* note the check against type Normal/Dialog/Utility,
+           not client_normal(self), which would also include other types.
+           in this case we want more strict rules for focus */
         (self->type == OB_CLIENT_TYPE_NORMAL ||
+         self->type == OB_CLIENT_TYPE_UTILITY ||
          self->type == OB_CLIENT_TYPE_DIALOG))
     {
         activate = TRUE;
@@ -390,6 +391,8 @@ void client_manage(Window window)
                      "program + user specified" :
                      "BADNESS !?")))), placew, placeh);
 
+        /* splash screens are also returned as TRUE for transient,
+           and so will be forced on screen below */
         transient = place_client(self, &placex, &placey, settings);
 
         /* make sure the window is visible. */
@@ -403,7 +406,11 @@ void client_manage(Window window)
                                 place.c or by the user are allowed partially
                                 off-screen and on xinerama divides (ie,
                                 it is up to the placement routines to avoid
-                                the xinerama divides) */
+                                the xinerama divides)
+
+                                splash screens get "transient" set to TRUE by
+                                the place_client call
+                             */
                              transient ||
                              (!(self->positioned & USPosition) &&
                               client_normal(self) &&
@@ -414,7 +421,11 @@ void client_manage(Window window)
        the visible screen area on its monitor. Use basically the same rules
        for forcing the window on screen in the client_find_onscreen call.
 
-       do this after place_client, it chooses the monitor! */
+       do this after place_client, it chooses the monitor!
+
+       splash screens get "transient" set to TRUE by
+       the place_client call
+    */
     if (transient ||
         (!(self->sized & USSize) &&
          client_normal(self) &&
@@ -2840,8 +2851,8 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h,
         SIZE_SET(self->logical_size, logicalw, logicalh);
 
     /* figure out if we moved or resized or what */
-    moved = x != self->area.x || y != self->area.y;
-    resized = w != self->area.width || h != self->area.height;
+    moved = (x != self->area.x || y != self->area.y);
+    resized = (w != self->area.width || h != self->area.height);
 
     oldw = self->area.width;
     oldh = self->area.height;
@@ -2907,8 +2918,12 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h,
                    FALSE, StructureNotifyMask, &event);
     }
 
-    /* if the client is shrinking, then resize the frame before the client */
-    if (send_resize_client && (w <= oldw && h <= oldh)) {
+    /* if the client is shrinking, then resize the frame before the client.
+
+       both of these resize sections may run, because the top one only resizes
+       in the direction that is growing
+     */
+    if (send_resize_client && (w <= oldw || h <= oldh)) {
         frame_adjust_client_area(self->frame);
         XResizeWindow(ob_display, self->window, w, h);
     }
@@ -3595,29 +3610,35 @@ void client_activate(ObClient *self, gboolean here, gboolean user)
 static void client_bring_windows_recursive(ObClient *self,
                                            guint desktop,
                                            gboolean helpers,
-                                           gboolean modals)
+                                           gboolean modals,
+                                           gboolean iconic)
 {
     GSList *it;
 
     for (it = self->transients; it; it = g_slist_next(it))
-        client_bring_windows_recursive(it->data, desktop, helpers, modals);
+        client_bring_windows_recursive(it->data, desktop,
+                                       helpers, modals, iconic);
 
     if (((helpers && client_helper(self)) ||
-         (modals && self->modal))&&
-        self->desktop != desktop && self->desktop != DESKTOP_ALL)
+         (modals && self->modal)) &&
+        ((self->desktop != desktop && self->desktop != DESKTOP_ALL) ||
+         (iconic && self->iconic)))
     {
-        client_set_desktop(self, desktop, FALSE);
+        if (iconic && self->iconic)
+            client_iconify(self, FALSE, TRUE, FALSE);
+        else
+            client_set_desktop(self, desktop, FALSE);
     }
 }
 
 void client_bring_helper_windows(ObClient *self)
 {
-    client_bring_windows_recursive(self, self->desktop, TRUE, FALSE);
+    client_bring_windows_recursive(self, self->desktop, TRUE, FALSE, FALSE);
 }
 
 void client_bring_modal_windows(ObClient *self)
 {
-    client_bring_windows_recursive(self, self->desktop, FALSE, TRUE);
+    client_bring_windows_recursive(self, self->desktop, FALSE, TRUE, TRUE);
 }
 
 gboolean client_focused(ObClient *self)
This page took 0.02777 seconds and 4 git commands to generate.