xwm: user custom event handler

This commit is contained in:
Tony Crisci 2017-12-13 17:54:19 -05:00
parent 96f09c7492
commit ea4b871e16
5 changed files with 16 additions and 3 deletions

View file

@ -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;
};

View file

@ -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)

View file

@ -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) {

View file

@ -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);