diff options
author | Orestis Floros <orestisflo@gmail.com> | 2021-09-25 13:53:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-25 13:53:22 +0200 |
commit | eada44be1e3caf4f3e7ebea3060732a869e0b3c3 (patch) | |
tree | bdfa8fac7d775a3b9182027b97bafcadd80b4d12 | |
parent | 535da94536a005fb60e29f7bf902e49390b9cc10 (diff) | |
parent | 16b09672c8e6fd3b9713da0b2c7250598d452d32 (diff) | |
download | i3-eada44be1e3caf4f3e7ebea3060732a869e0b3c3.tar.gz i3-eada44be1e3caf4f3e7ebea3060732a869e0b3c3.zip |
Merge pull request #4538 from psychon/log-focus-out
Log FocusOut events
-rw-r--r-- | src/handlers.c | 74 |
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; |