aboutsummaryrefslogtreecommitdiff
path: root/xwayland
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-12-14 11:20:38 +0100
committeremersion <contact@emersion.fr>2017-12-14 11:20:38 +0100
commit6ef021976384163cf9fde90d635a2e22479d107a (patch)
tree2c426fa4ce6b30b29bed1fb567ffc74a7d60009f /xwayland
parent4da404818957d37fba4c0d6346a5f2f8a8e6db38 (diff)
parenta9fb071d49b244b72846b384a9e2ef2d9b03a05f (diff)
Merge branch 'master' into xwm-selection
Diffstat (limited to 'xwayland')
-rw-r--r--xwayland/selection.c2
-rw-r--r--xwayland/xwayland.c2
-rw-r--r--xwayland/xwm.c7
-rw-r--r--xwayland/xwm.h105
4 files changed, 8 insertions, 108 deletions
diff --git a/xwayland/selection.c b/xwayland/selection.c
index ba386341..220736d4 100644
--- a/xwayland/selection.c
+++ b/xwayland/selection.c
@@ -7,7 +7,7 @@
#include <fcntl.h>
#include "wlr/util/log.h"
#include "wlr/types/wlr_data_device.h"
-#include "xwm.h"
+#include "wlr/xwm.h"
static const size_t incr_chunk_size = 64 * 1024;
diff --git a/xwayland/xwayland.c b/xwayland/xwayland.c
index 4db30985..c884dc63 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 f1add638..4027b77e 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>
@@ -946,6 +946,11 @@ 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;
+ }
+
if (xwm_handle_selection_event(xwm, event)) {
free(event);
continue;
diff --git a/xwayland/xwm.h b/xwayland/xwm.h
deleted file mode 100644
index 47e674c0..00000000
--- a/xwayland/xwm.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef XWAYLAND_INTERNALS_H
-#define XWAYLAND_INTERNALS_H
-
-#include <xcb/render.h>
-#include <wayland-server-core.h>
-#include <wlr/xwayland.h>
-
-enum atom_name {
- WL_SURFACE_ID,
- WM_DELETE_WINDOW,
- WM_PROTOCOLS,
- WM_HINTS,
- WM_NORMAL_HINTS,
- WM_SIZE_HINTS,
- MOTIF_WM_HINTS,
- UTF8_STRING,
- WM_S0,
- NET_SUPPORTED,
- NET_WM_S0,
- NET_WM_PID,
- NET_WM_NAME,
- NET_WM_STATE,
- NET_WM_WINDOW_TYPE,
- WM_TAKE_FOCUS,
- WINDOW,
- _NET_ACTIVE_WINDOW,
- _NET_WM_MOVERESIZE,
- _NET_WM_NAME,
- _NET_SUPPORTING_WM_CHECK,
- _NET_WM_STATE_FULLSCREEN,
- _NET_WM_STATE_MAXIMIZED_VERT,
- _NET_WM_STATE_MAXIMIZED_HORZ,
- WM_STATE,
- CLIPBOARD,
- WL_SELECTION,
- TARGETS,
- CLIPBOARD_MANAGER,
- INCR,
- TEXT,
- TIMESTAMP,
- ATOM_LAST,
-};
-
-extern const char *atom_map[ATOM_LAST];
-
-enum net_wm_state_action {
- NET_WM_STATE_REMOVE = 0,
- NET_WM_STATE_ADD = 1,
- NET_WM_STATE_TOGGLE = 2,
-};
-
-struct wlr_xwm {
- struct wlr_xwayland *xwayland;
- struct wl_event_source *event_source;
- struct wlr_seat *seat;
-
- xcb_atom_t atoms[ATOM_LAST];
- xcb_connection_t *xcb_conn;
- xcb_screen_t *screen;
- xcb_window_t window;
- xcb_visualid_t visual_id;
- xcb_colormap_t colormap;
- xcb_render_pictformat_t render_format_id;
- xcb_cursor_t cursor;
-
- // selection properties
- xcb_window_t selection_window;
- xcb_selection_request_event_t selection_request;
- xcb_window_t selection_owner;
- xcb_timestamp_t selection_timestamp;
- int incr;
- int data_source_fd;
- int property_start;
- xcb_get_property_reply_t *property_reply;
- struct wl_event_source *property_source;
- int flush_property_on_delete;
- struct wl_array source_data;
- xcb_atom_t selection_target;
- bool selection_property_set;
-
- struct wlr_xwayland_surface *focus_surface;
-
- struct wl_list surfaces; // wlr_xwayland_surface::link
- struct wl_list unpaired_surfaces; // wlr_xwayland_surface::unpaired_link
-
- const xcb_query_extension_reply_t *xfixes;
-
- struct wl_listener compositor_surface_create;
- struct wl_listener seat_selection_change;
-};
-
-struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland);
-
-void xwm_destroy(struct wlr_xwm *xwm);
-
-void xwm_set_cursor(struct wlr_xwm *xwm, const uint8_t *pixels, uint32_t stride,
- uint32_t width, uint32_t height, int32_t hotspot_x, int32_t hotspot_y);
-
-int xwm_handle_selection_event(struct wlr_xwm *xwm, xcb_generic_event_t *event);
-
-void xwm_selection_init(struct wlr_xwm *xwm);
-
-void xwm_set_seat(struct wlr_xwm *xwm, struct wlr_seat *seat);
-
-#endif