]> git.sur5r.net Git - i3/i3/commitdiff
support _NET_STARTUP_ID on the client leader window
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 10 Oct 2011 12:30:52 +0000 (13:30 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 10 Oct 2011 14:54:17 +0000 (15:54 +0100)
(necessary for GIMP, geeqie, …)

src/startup.c
testcases/t/175-startup-notification.t

index 30932e33dcad89398073c961e6decd5672fdbb4c..dca7b999d39a38a47b480500e37915049ad36c40 100644 (file)
@@ -129,10 +129,21 @@ char *startup_workspace_for_window(i3Window *cwindow, xcb_get_property_reply_t *
     /* The _NET_STARTUP_ID is only needed during this function, so we get it
      * here and don’t save it in the 'cwindow'. */
     if (startup_id_reply == NULL || xcb_get_property_value_length(startup_id_reply) == 0) {
-        DLOG("No _NET_STARTUP_ID set on this window\n");
-        /* TODO: check the leader, if any */
         FREE(startup_id_reply);
-        return NULL;
+        DLOG("No _NET_STARTUP_ID set on this window\n");
+        if (cwindow->leader == XCB_NONE)
+            return NULL;
+
+        xcb_get_property_cookie_t cookie;
+        cookie = xcb_get_property(conn, false, cwindow->leader, A__NET_STARTUP_ID, XCB_GET_PROPERTY_TYPE_ANY, 0, 512);
+        DLOG("Checking leader window 0x%08x\n", cwindow->leader);
+        startup_id_reply = xcb_get_property_reply(conn, cookie, NULL);
+
+        if (startup_id_reply == NULL || xcb_get_property_value_length(startup_id_reply) == 0) {
+            DLOG("No _NET_STARTUP_ID set on the leader either\n");
+            FREE(startup_id_reply);
+            return NULL;
+        }
     }
 
     char *startup_id;
index 710b3af753b3fa1eb2e03e4dc28028991f6059e5..560887192371f888ef8cff4cf8e47e2a7ce62869 100644 (file)
@@ -106,7 +106,17 @@ sync_with_i3($x);
 is(@{get_ws_content($second_ws)}, 0, 'still no containers on the second workspace');
 is(@{get_ws_content($first_ws)}, 1, 'one container on the first workspace');
 
-# TODO: the same thing, but in a CLIENT_LEADER situation
+######################################################################
+# same thing, but with _NET_STARTUP_ID set on the leader
+######################################################################
+
+my $leader = open_window($x, { dont_map => 1 });
+mark_window($leader->id);
+
+$win = open_window($x, { client_leader => $leader });
+
+is(@{get_ws_content($second_ws)}, 0, 'still no containers on the second workspace');
+is(@{get_ws_content($first_ws)}, 2, 'two containers on the first workspace');
 
 ######################################################################
 # 2) open another window after the startup process is completed