From 07303ce2cb13f207df69b05a4b012a1bbb5263cb Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Fri, 16 Jun 2023 23:50:20 +0200 Subject: [PATCH 1/4] core: added proper event handling for XESetWireToEvent --- src/event.c | 5 +++-- src/meson.build | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/event.c b/src/event.c index afaa02c4..da350b95 100644 --- a/src/event.c +++ b/src/event.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "atom.h" #include "common.h" @@ -687,9 +688,9 @@ void ev_handle(session_t *ps, xcb_generic_event_t *ev) { // For even more details, see: // https://bugs.freedesktop.org/show_bug.cgi?id=35945 // https://lists.freedesktop.org/archives/xcb/2011-November/007337.html - auto proc = XESetWireToEvent(ps->dpy, ev->response_type, 0); + auto proc = XESetWireToEvent(ps->dpy, XCB_EVENT_RESPONSE_TYPE(ev), 0); if (proc) { - XESetWireToEvent(ps->dpy, ev->response_type, proc); + XESetWireToEvent(ps->dpy, XCB_EVENT_RESPONSE_TYPE(ev), proc); XEvent dummy; // Stop Xlib from complaining about lost sequence numbers. diff --git a/src/meson.build b/src/meson.build index 0cd87c89..a7f25b02 100644 --- a/src/meson.build +++ b/src/meson.build @@ -31,6 +31,8 @@ foreach i : required_xcb_packages base_deps += [dependency(i, version: '>=1.12.0', required: true)] endforeach +base_deps += [dependency('xcb-util', version: '>=0.4.0', required: true)] + if not cc.has_header('uthash.h') error('Dependency uthash not found') endif From 56745b64d7a2b4875ce3fa14dc168fd1314ece9f Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Sat, 17 Jun 2023 01:08:47 +0200 Subject: [PATCH 2/4] core: event code refactoring --- src/event.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/event.c b/src/event.c index da350b95..b1400828 100644 --- a/src/event.c +++ b/src/event.c @@ -107,7 +107,7 @@ static inline xcb_window_t attr_pure ev_window(session_t *ps, xcb_generic_event_ static inline const char *ev_name(session_t *ps, xcb_generic_event_t *ev) { static char buf[128]; - switch (ev->response_type & 0x7f) { + switch (XCB_EVENT_RESPONSE_TYPE(ev)) { CASESTRRET(FocusIn); CASESTRRET(FocusOut); CASESTRRET(CreateNotify); @@ -666,7 +666,7 @@ ev_selection_clear(session_t *ps, xcb_selection_clear_event_t attr_unused *ev) { } void ev_handle(session_t *ps, xcb_generic_event_t *ev) { - if ((ev->response_type & 0x7f) != KeymapNotify) { + if (XCB_EVENT_RESPONSE_TYPE(ev) != KeymapNotify) { discard_pending(ps, ev->full_sequence); } @@ -688,9 +688,10 @@ void ev_handle(session_t *ps, xcb_generic_event_t *ev) { // For even more details, see: // https://bugs.freedesktop.org/show_bug.cgi?id=35945 // https://lists.freedesktop.org/archives/xcb/2011-November/007337.html - auto proc = XESetWireToEvent(ps->dpy, XCB_EVENT_RESPONSE_TYPE(ev), 0); + auto response_type = XCB_EVENT_RESPONSE_TYPE(ev); + auto proc = XESetWireToEvent(ps->dpy, response_type, 0); if (proc) { - XESetWireToEvent(ps->dpy, XCB_EVENT_RESPONSE_TYPE(ev), proc); + XESetWireToEvent(ps->dpy, response_type, proc); XEvent dummy; // Stop Xlib from complaining about lost sequence numbers. @@ -709,6 +710,7 @@ void ev_handle(session_t *ps, xcb_generic_event_t *ev) { // XXX redraw needs to be more fine grained queue_redraw(ps); + // the events sent from SendEvent will be ignored switch (ev->response_type) { case FocusIn: ev_focus_in(ps, (xcb_focus_in_event_t *)ev); break; case FocusOut: ev_focus_out(ps, (xcb_focus_out_event_t *)ev); break; From c065ad1b8d8f7b0dc1db2b9f5a716d96440a62d4 Mon Sep 17 00:00:00 2001 From: Nikolay Borodin Date: Sat, 17 Jun 2023 01:15:38 +0200 Subject: [PATCH 3/4] Refactored meson.build --- src/meson.build | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/meson.build b/src/meson.build index a7f25b02..98c50664 100644 --- a/src/meson.build +++ b/src/meson.build @@ -20,7 +20,7 @@ required_xcb_packages = [ ] required_packages = [ - 'x11', 'x11-xcb', 'xcb-renderutil', 'xcb-image', 'xext', 'pixman-1' + 'x11', 'x11-xcb', 'xcb-renderutil', 'xcb-image', 'xext', 'pixman-1', 'xcb-util' ] foreach i : required_packages @@ -31,8 +31,6 @@ foreach i : required_xcb_packages base_deps += [dependency(i, version: '>=1.12.0', required: true)] endforeach -base_deps += [dependency('xcb-util', version: '>=0.4.0', required: true)] - if not cc.has_header('uthash.h') error('Dependency uthash not found') endif From 73a366ffe04484b68e7596d89dd0e28ceb787286 Mon Sep 17 00:00:00 2001 From: Monsterovich Date: Sat, 17 Jun 2023 01:27:20 +0200 Subject: [PATCH 4/4] Added xcb-util to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b7ea2a18..5b358bbe 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Assuming you already have all the usual building tools installed (e.g. gcc, pyth * libXext * xproto * xcb +* xcb-util * xcb-damage * xcb-dpms * xcb-xfixes