aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrestis Floros <orestisflo@gmail.com>2021-09-25 13:53:22 +0200
committerGitHub <noreply@github.com>2021-09-25 13:53:22 +0200
commiteada44be1e3caf4f3e7ebea3060732a869e0b3c3 (patch)
treebdfa8fac7d775a3b9182027b97bafcadd80b4d12
parent535da94536a005fb60e29f7bf902e49390b9cc10 (diff)
parent16b09672c8e6fd3b9713da0b2c7250598d452d32 (diff)
downloadi3-eada44be1e3caf4f3e7ebea3060732a869e0b3c3.tar.gz
i3-eada44be1e3caf4f3e7ebea3060732a869e0b3c3.zip
Merge pull request #4538 from psychon/log-focus-out
Log FocusOut events
-rw-r--r--src/handlers.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/handlers.c b/src/handlers.c
index c5b09d7e..86859ebc 100644
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -1059,6 +1059,76 @@ static void handle_focus_in(xcb_focus_in_event_t *event) {
}
/*
+ * Log FocusOut events.
+ *
+ */
+static void handle_focus_out(xcb_focus_in_event_t *event) {
+ Con *con = con_by_window_id(event->event);
+ const char *window_name, *mode, *detail;
+
+ if (con != NULL) {
+ window_name = con->name;
+ if (window_name == NULL) {
+ window_name = "<unnamed con>";
+ }
+ } else if (event->event == root) {
+ window_name = "<the root window>";
+ } else {
+ window_name = "<unknown window>";
+ }
+
+ switch (event->mode) {
+ case XCB_NOTIFY_MODE_NORMAL:
+ mode = "Normal";
+ break;
+ case XCB_NOTIFY_MODE_GRAB:
+ mode = "Grab";
+ break;
+ case XCB_NOTIFY_MODE_UNGRAB:
+ mode = "Ungrab";
+ break;
+ case XCB_NOTIFY_MODE_WHILE_GRABBED:
+ mode = "WhileGrabbed";
+ break;
+ default:
+ mode = "<unknown>";
+ break;
+ }
+
+ switch (event->detail) {
+ case XCB_NOTIFY_DETAIL_ANCESTOR:
+ detail = "Ancestor";
+ break;
+ case XCB_NOTIFY_DETAIL_VIRTUAL:
+ detail = "Virtual";
+ break;
+ case XCB_NOTIFY_DETAIL_INFERIOR:
+ detail = "Inferior";
+ break;
+ case XCB_NOTIFY_DETAIL_NONLINEAR:
+ detail = "Nonlinear";
+ break;
+ case XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL:
+ detail = "NonlinearVirtual";
+ break;
+ case XCB_NOTIFY_DETAIL_POINTER:
+ detail = "Pointer";
+ break;
+ case XCB_NOTIFY_DETAIL_POINTER_ROOT:
+ detail = "PointerRoot";
+ break;
+ case XCB_NOTIFY_DETAIL_NONE:
+ detail = "NONE";
+ break;
+ default:
+ detail = "unknown";
+ break;
+ }
+
+ DLOG("focus change out: window 0x%08x (con %p, %s) lost focus with detail=%s, mode=%s\n", event->event, con, window_name, detail, mode);
+}
+
+/*
* Handles ConfigureNotify events for the root window, which are generated when
* the monitor configuration changed.
*
@@ -1434,6 +1504,10 @@ void handle_event(int type, xcb_generic_event_t *event) {
handle_focus_in((xcb_focus_in_event_t *)event);
break;
+ case XCB_FOCUS_OUT:
+ handle_focus_out((xcb_focus_out_event_t *)event);
+ break;
+
case XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t *e = (xcb_property_notify_event_t *)event;
last_timestamp = e->time;