+#undef I3__FILE__
+#define I3__FILE__ "handlers.c"
/*
* vim:ts=4:sw=4:expandtab
*
Con *con;
if ((con = con_by_frame_id(event->event)) == NULL) {
+ DLOG("MotionNotify for an unknown container, checking if it crosses screen boundaries.\n");
check_crossing_screen_boundary(event->root_x, event->root_y);
return;
}
}
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*
randr_query_outputs();
+ scratchpad_fix_resolution();
+
ipc_send_event("output", I3_IPC_EVENT_OUTPUT, "{\"change\":\"unspecified\"}");
return;
con_toggle_fullscreen(con, CF_OUTPUT);
}
+ tree_render();
+ } else if (event->type == A__NET_ACTIVE_WINDOW) {
+ DLOG("_NET_ACTIVE_WINDOW: Window 0x%08x should be activated\n", event->window);
+ Con *con = con_by_window_id(event->window);
+ if (con == NULL) {
+ DLOG("Could not get window for client message\n");
+ 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) {
xcb_window_t window = event->data.data32[0];
}
/* 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;