Fix a problem pointed out by clang
[dana/openbox.git] / openbox / client.c
index 1d78a65..03bbfe4 100644 (file)
@@ -247,6 +247,7 @@ void client_manage(Window window, ObPrompt *prompt)
     gboolean transient = FALSE;
     Rect place, *monitor;
     Time launch_time, map_time;
+    guint32 user_time;
 
     grab_server(TRUE);
 
@@ -344,6 +345,9 @@ void client_manage(Window window, ObPrompt *prompt)
     /* tell startup notification that this app started */
     launch_time = sn_app_started(self->startup_id, self->class, self->name);
 
+    if (!PROP_GET32(self->window, net_wm_user_time, cardinal, &user_time))
+        user_time = map_time;
+
     /* do this after we have a frame.. it uses the frame to help determine the
        WM_STATE to apply. */
     client_change_state(self);
@@ -360,6 +364,8 @@ void client_manage(Window window, ObPrompt *prompt)
         /* this means focus=true for window is same as config_focus_new=true */
         ((config_focus_new || (settings && settings->focus == 1)) ||
          client_search_focus_tree_full(self)) &&
+        /* NET_WM_USER_TIME 0 when mapping means don't focus */
+        (user_time != 0) &&
         /* this checks for focus=false for the window */
         (!settings || settings->focus != 0) &&
         focus_valid_target(self, FALSE, FALSE, TRUE, FALSE, FALSE))
@@ -3898,12 +3904,15 @@ static void client_present(ObClient *self, gboolean here, gboolean raise,
     client_focus(self);
 }
 
-/* this function exists to map to the client_activate message in the ewmh,
-   the user arg is unused because nobody uses it correctly anyway. */
+/* this function exists to map to the net_active_window message in the ewmh */
 void client_activate(ObClient *self, gboolean here, gboolean raise,
                      gboolean unshade, gboolean user)
 {
-    client_present(self, here, raise, unshade);
+    if (user || (self->desktop == DESKTOP_ALL ||
+                 self->desktop == screen_desktop))
+        client_present(self, here, raise, unshade);
+    else
+        client_hilite(self, TRUE);
 }
 
 static void client_bring_windows_recursive(ObClient *self,