aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/xwayland.h7
-rw-r--r--include/wlr/xwm.h (renamed from xwayland/xwm.h)0
-rw-r--r--meson.build2
-rw-r--r--xwayland/xwayland.c2
-rw-r--r--xwayland/xwm.c8
5 files changed, 16 insertions, 3 deletions
diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h
index 792d2b88..9a89661b 100644
--- a/include/wlr/xwayland.h
+++ b/include/wlr/xwayland.h
@@ -32,6 +32,13 @@ struct wlr_xwayland {
struct wl_signal new_surface;
} events;
+ /**
+ * Add a custom event handler to xwayland. Return 1 if the event was
+ * handled or 0 to use the default wlr-xwayland handler. wlr-xwayland will
+ * free the event.
+ */
+ int (*user_event_handler)(struct wlr_xwm *xwm, xcb_generic_event_t *event);
+
void *data;
};
diff --git a/xwayland/xwm.h b/include/wlr/xwm.h
index c350b6e2..c350b6e2 100644
--- a/xwayland/xwm.h
+++ b/include/wlr/xwm.h
diff --git a/meson.build b/meson.build
index addea930..a3f5e7f9 100644
--- a/meson.build
+++ b/meson.build
@@ -87,7 +87,7 @@ if get_option('enable_xwayland')
wlr_parts += [lib_wlr_xwayland]
conf_data.set('WLR_HAS_XWAYLAND', true)
else
- exclude_files += ['xwayland.h']
+ exclude_files += ['xwayland.h', 'xwm.h']
endif
configure_file(output: 'config.h', install_dir: 'include/wlr', configuration: conf_data)
install_subdir('include/wlr', install_dir: 'include', exclude_files: exclude_files)
diff --git a/xwayland/xwayland.c b/xwayland/xwayland.c
index ecec785c..eb06bd57 100644
--- a/xwayland/xwayland.c
+++ b/xwayland/xwayland.c
@@ -19,7 +19,7 @@
#include "wlr/util/log.h"
#include "wlr/xwayland.h"
#include "sockets.h"
-#include "xwm.h"
+#include "wlr/xwm.h"
#ifdef __FreeBSD__
static inline int clearenv(void) {
diff --git a/xwayland/xwm.c b/xwayland/xwm.c
index a86fbd0e..54092cda 100644
--- a/xwayland/xwm.c
+++ b/xwayland/xwm.c
@@ -12,7 +12,7 @@
#include "wlr/types/wlr_surface.h"
#include "wlr/xwayland.h"
#include "wlr/xcursor.h"
-#include "xwm.h"
+#include "wlr/xwm.h"
#ifdef HAS_XCB_ICCCM
#include <xcb/xcb_icccm.h>
@@ -938,6 +938,12 @@ static int x11_event_handler(int fd, uint32_t mask, void *data) {
while ((event = xcb_poll_for_event(xwm->xcb_conn))) {
count++;
+
+ if (xwm->xwayland->user_event_handler &&
+ xwm->xwayland->user_event_handler(xwm, event)) {
+ break;
+ }
+
switch (event->response_type & XCB_EVENT_RESPONSE_TYPE_MASK) {
case XCB_CREATE_NOTIFY:
xwm_handle_create_notify(xwm, (xcb_create_notify_event_t *)event);