support _NET_STARTUP_ID on the client leader window
(necessary for GIMP, geeqie, …)
This commit is contained in:
parent
4204b8e2b0
commit
6ac098a45e
|
@ -129,11 +129,22 @@ 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
|
/* The _NET_STARTUP_ID is only needed during this function, so we get it
|
||||||
* here and don’t save it in the 'cwindow'. */
|
* here and don’t save it in the 'cwindow'. */
|
||||||
if (startup_id_reply == NULL || xcb_get_property_value_length(startup_id_reply) == 0) {
|
if (startup_id_reply == NULL || xcb_get_property_value_length(startup_id_reply) == 0) {
|
||||||
|
FREE(startup_id_reply);
|
||||||
DLOG("No _NET_STARTUP_ID set on this window\n");
|
DLOG("No _NET_STARTUP_ID set on this window\n");
|
||||||
/* TODO: check the leader, if any */
|
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);
|
FREE(startup_id_reply);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char *startup_id;
|
char *startup_id;
|
||||||
if (asprintf(&startup_id, "%.*s", xcb_get_property_value_length(startup_id_reply),
|
if (asprintf(&startup_id, "%.*s", xcb_get_property_value_length(startup_id_reply),
|
||||||
|
|
|
@ -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($second_ws)}, 0, 'still no containers on the second workspace');
|
||||||
is(@{get_ws_content($first_ws)}, 1, 'one container on the first 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
|
# 2) open another window after the startup process is completed
|
||||||
|
|
Loading…
Reference in New Issue