]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
debug print in focus.c
[chaz/openbox] / openbox / client.c
index bcd510051a5d069fbeac5c78645a28ecb9a68171..9c8b2ee172cd3fd183ed85d433c676e75ed85091 100644 (file)
@@ -369,7 +369,7 @@ void client_manage(Window window)
     placex = self->area.x;
     placey = self->area.y;
 
-    /* figure out placement for the window */
+    /* figure out placement for the window if the window is new */
     if (ob_state() == OB_STATE_RUNNING) {
         gboolean transient;
 
@@ -381,6 +381,30 @@ void client_manage(Window window)
 
         transient = place_client(self, &placex, &placey, settings);
 
+        /* if the window isn't user-positioned, then make it fit inside
+           the visible screen area on its monitor.
+
+           the monitor is chosen by place_client! */
+        if (!(self->positioned & USPosition)) {
+            /* make a copy to modify */
+            Rect a = *screen_area_monitor(self->desktop, client_monitor(self));
+
+            /* shrink by the frame's area */
+            a.width -= self->frame->size.left + self->frame->size.right;
+            a.height -= self->frame->size.top + self->frame->size.bottom;
+
+            /* fit the window inside the area */
+            self->area.width = MIN(self->area.width, a.width);
+            self->area.height = MIN(self->area.height, a.height);
+
+            ob_debug("setting window size to %dx%d\n",
+                     self->area.width, self->area.height);
+
+            /* adjust the frame to the client's new size */
+            frame_adjust_area(self->frame, FALSE, TRUE, FALSE);
+            frame_adjust_client_area(self->frame);
+        }
+
         /* make sure the window is visible. */
         client_find_onscreen(self, &placex, &placey,
                              self->area.width, self->area.height,
@@ -462,10 +486,24 @@ void client_manage(Window window)
                               "Not focusing the window because the time is "
                               "too old\n");
             }
+            /* If its a transient (and parents aren't focused) and the time
+               is ambiguous (either the current focus target doesn't have
+               a timestamp, or they are the same (we probably inherited it
+               from them) */
+            else if (self->transient_for != NULL &&
+                     (!last_time || self->user_time == last_time))
+            {
+                activate = FALSE;
+                ob_debug_type(OB_DEBUG_FOCUS,
+                              "Not focusing the window because it is a "
+                              "transient, and the time is very ambiguous\n");
+            }
             /* Don't steal focus from globally active clients.
                I stole this idea from KWin. It seems nice.
              */
-            if (!(focus_client->can_focus || focus_client->focus_notify)) {
+            else if (!(focus_client->can_focus ||
+                       focus_client->focus_notify))
+            {
                 activate = FALSE;
                 ob_debug_type(OB_DEBUG_FOCUS,
                               "Not focusing the window because a globally "
@@ -1947,8 +1985,14 @@ void client_update_title(ObClient *self)
               PROP_GETS(self->window, wm_icon_name, utf8, &data)))
             data = g_strdup(self->title);
 
-    PROP_SETS(self->window, net_wm_visible_icon_name, data);
-    self->icon_title = data;
+    if (self->client_machine) {
+        visible = g_strdup_printf("%s (%s)", data, self->client_machine);
+        g_free(data);
+    } else
+        visible = data;
+
+    PROP_SETS(self->window, net_wm_visible_icon_name, visible);
+    self->icon_title = visible;
 }
 
 void client_update_strut(ObClient *self)
@@ -2958,9 +3002,8 @@ static void client_iconify_recursive(ObClient *self,
                 self->iconic = iconic;
 
                 /* update the focus lists.. iconic windows go to the bottom of
-                   the list, put the new iconic window at the 'top of the
-                   bottom'. */
-                focus_order_to_top(self);
+                   the list */
+                focus_order_to_bottom(self);
 
                 changed = TRUE;
             }
This page took 0.024679 seconds and 4 git commands to generate.