From 12b9b1a4bdf00742cc510c2329c7a66c649b3ab0 Mon Sep 17 00:00:00 2001 From: emersion Date: Thu, 5 Oct 2017 22:23:37 +0200 Subject: [PATCH] Copy xcb_icccm structs into wlroots --- include/wlr/xwayland.h | 35 +++++++++++++++++++++++++++-------- xwayland/xwm.c | 17 +++++++++++++---- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h index 1f2d7acb..09f9fbac 100644 --- a/include/wlr/xwayland.h +++ b/include/wlr/xwayland.h @@ -39,6 +39,30 @@ enum wlr_xwayland_surface_decorations { WLR_XWAYLAND_SURFACE_DECORATIONS_NO_TITLE = 2, }; +struct wlr_xwayland_surface_hints { + uint32_t flags; + uint32_t input; + int32_t initial_state; + xcb_pixmap_t icon_pixmap; + xcb_window_t icon_window; + int32_t icon_x, icon_y; + xcb_pixmap_t icon_mask; + xcb_window_t window_group; +}; + +struct wlr_xwayland_surface_size_hints { + uint32_t flags; + int32_t x, y; + int32_t width, height; + int32_t min_width, min_height; + int32_t max_width, max_height; + int32_t width_inc, height_inc; + int32_t base_width, base_height; + int32_t min_aspect_num, min_aspect_den; + int32_t max_aspect_num, max_aspect_den; + uint32_t win_gravity; +}; + struct wlr_xwayland_surface { xcb_window_t window_id; uint32_t surface_id; @@ -64,14 +88,9 @@ struct wlr_xwayland_surface { size_t protocols_len; uint32_t decorations; - - #ifdef HAS_XCB_ICCCM - xcb_icccm_wm_hints_t *hints; - xcb_size_hints_t *size_hints; - #else - void *hints; - void *size_hints; - #endif + struct wlr_xwayland_surface_hints *hints; + uint32_t hints_urgency; + struct wlr_xwayland_surface_size_hints *size_hints; struct { struct wl_signal destroy; diff --git a/xwayland/xwm.c b/xwayland/xwm.c index 120c1ae8..a4091d1f 100644 --- a/xwayland/xwm.c +++ b/xwayland/xwm.c @@ -288,12 +288,16 @@ static void read_surface_hints(struct wlr_xwm *xwm, return; } + xcb_icccm_wm_hints_t hints; + xcb_icccm_get_wm_hints_from_reply(&hints, reply); + free(surface->hints); - surface->hints = calloc(1, sizeof(xcb_icccm_wm_hints_t)); + surface->hints = calloc(1, sizeof(struct wlr_xwayland_surface_hints)); if (surface->hints == NULL) { return; } - xcb_icccm_get_wm_hints_from_reply(surface->hints, reply); + memcpy(surface->hints, &hints, sizeof(struct wlr_xwayland_surface_hints)); + surface->hints_urgency = xcb_icccm_wm_hints_get_urgency(&hints); wlr_log(L_DEBUG, "WM_HINTS (%d)", reply->value_len); } @@ -311,12 +315,17 @@ static void read_surface_normal_hints(struct wlr_xwm *xwm, return; } + xcb_size_hints_t size_hints; + xcb_icccm_get_wm_size_hints_from_reply(&size_hints, reply); + free(surface->size_hints); - surface->size_hints = calloc(1, sizeof(xcb_size_hints_t)); + surface->size_hints = + calloc(1, sizeof(struct wlr_xwayland_surface_size_hints)); if (surface->size_hints == NULL) { return; } - xcb_icccm_get_wm_size_hints_from_reply(surface->size_hints, reply); + memcpy(surface->size_hints, &size_hints, + sizeof(struct wlr_xwayland_surface_size_hints)); wlr_log(L_DEBUG, "WM_NORMAL_HINTS (%d)", reply->value_len); }