}
DLOG("Configure request!\n");
- if (con_is_floating(con) && con_is_leaf(con)) {
+
+ Con *workspace = con_get_workspace(con),
+ *fullscreen = NULL;
+
+ /* There might not be a corresponding workspace for dock cons, therefore we
+ * have to be careful here. */
+ if (workspace) {
+ fullscreen = con_get_fullscreen_con(workspace, CF_OUTPUT);
+ if (!fullscreen)
+ fullscreen = con_get_fullscreen_con(workspace, CF_GLOBAL);
+ }
+
+ if (fullscreen != con && con_is_floating(con) && con_is_leaf(con)) {
/* find the height for the decorations */
int deco_height = config.font.height + 5;
/* we actually need to apply the size/position changes to the *parent*
return;
}
+ Con *ws = con_get_workspace(con);
+ if (!workspace_is_visible(ws)) {
+ DLOG("Workspace not visible, ignoring _NET_ACTIVE_WINDOW\n");
+ return;
+ }
+
+ if (ws != con_get_workspace(focused))
+ workspace_show(ws);
+
con_focus(con);
tree_render();
} else if (event->type == A_I3_SYNC) {
}
/* Update the flag on the client directly */
- con->urgent = (xcb_icccm_wm_hints_get_urgency(&hints) != 0);
+ bool hint_urgent = (xcb_icccm_wm_hints_get_urgency(&hints) != 0);
+
+ if (con->urgency_timer == NULL) {
+ con->urgent = hint_urgent;
+ } else
+ DLOG("Discarding urgency WM_HINT because timer is running\n");
+
//CLIENT_LOG(con);
if (con->window) {
if (con->urgent) {
con->window->urgent.tv_usec = 0;
}
}
+
+ con_update_parents_urgency(con);
+
LOG("Urgency flag changed to %d\n", con->urgent);
Con *ws;
switch (type) {
case XCB_KEY_PRESS:
+ case XCB_KEY_RELEASE:
handle_key_press((xcb_key_press_event_t*)event);
break;