mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-30 00:15:58 +01:00
Merge pull request #486 from acrisci/feature/xwm-custom-event-loop
xwm: user custom event handler
This commit is contained in:
commit
16ee728f57
5 changed files with 16 additions and 3 deletions
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue