Merge pull request #486 from acrisci/feature/xwm-custom-event-loop

xwm: user custom event handler
This commit is contained in:
Drew DeVault 2017-12-13 19:33:01 -05:00 committed by GitHub
commit 16ee728f57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 3 deletions

View file

@ -32,6 +32,13 @@ struct wlr_xwayland {
struct wl_signal new_surface; struct wl_signal new_surface;
} events; } 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; void *data;
}; };

View file

@ -87,7 +87,7 @@ if get_option('enable_xwayland')
wlr_parts += [lib_wlr_xwayland] wlr_parts += [lib_wlr_xwayland]
conf_data.set('WLR_HAS_XWAYLAND', true) conf_data.set('WLR_HAS_XWAYLAND', true)
else else
exclude_files += ['xwayland.h'] exclude_files += ['xwayland.h', 'xwm.h']
endif endif
configure_file(output: 'config.h', install_dir: 'include/wlr', configuration: conf_data) configure_file(output: 'config.h', install_dir: 'include/wlr', configuration: conf_data)
install_subdir('include/wlr', install_dir: 'include', exclude_files: exclude_files) install_subdir('include/wlr', install_dir: 'include', exclude_files: exclude_files)

View file

@ -19,7 +19,7 @@
#include "wlr/util/log.h" #include "wlr/util/log.h"
#include "wlr/xwayland.h" #include "wlr/xwayland.h"
#include "sockets.h" #include "sockets.h"
#include "xwm.h" #include "wlr/xwm.h"
#ifdef __FreeBSD__ #ifdef __FreeBSD__
static inline int clearenv(void) { static inline int clearenv(void) {

View file

@ -12,7 +12,7 @@
#include "wlr/types/wlr_surface.h" #include "wlr/types/wlr_surface.h"
#include "wlr/xwayland.h" #include "wlr/xwayland.h"
#include "wlr/xcursor.h" #include "wlr/xcursor.h"
#include "xwm.h" #include "wlr/xwm.h"
#ifdef HAS_XCB_ICCCM #ifdef HAS_XCB_ICCCM
#include <xcb/xcb_icccm.h> #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))) { while ((event = xcb_poll_for_event(xwm->xcb_conn))) {
count++; count++;
if (xwm->xwayland->user_event_handler &&
xwm->xwayland->user_event_handler(xwm, event)) {
break;
}
switch (event->response_type & XCB_EVENT_RESPONSE_TYPE_MASK) { switch (event->response_type & XCB_EVENT_RESPONSE_TYPE_MASK) {
case XCB_CREATE_NOTIFY: case XCB_CREATE_NOTIFY:
xwm_handle_create_notify(xwm, (xcb_create_notify_event_t *)event); xwm_handle_create_notify(xwm, (xcb_create_notify_event_t *)event);