Revert "Copy xcb_icccm structs into wlroots"

The original commit introduced a bug by transposing the order of
some of the fields in xcb_size_hints_t.  Since XCB ICCCM support is
required now, we can just eliminate the duplicate structs.

With minor changes:
- Remove #ifdef HAS_XCB_ICCCM guards
- Fix #includes
- Fix references to local size_hints struct

This reverts commit 12b9b1a4bd.
This commit is contained in:
John Lindgren 2022-04-16 13:24:11 -04:00 committed by Simon Ser
parent d3a2ea33e5
commit 640f3b9f21
2 changed files with 11 additions and 45 deletions

View File

@ -15,6 +15,7 @@
#include <wlr/types/wlr_compositor.h> #include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_seat.h> #include <wlr/types/wlr_seat.h>
#include <xcb/xcb.h> #include <xcb/xcb.h>
#include <xcb/xcb_icccm.h>
struct wlr_xwm; struct wlr_xwm;
struct wlr_xwayland_cursor; struct wlr_xwayland_cursor;
@ -96,30 +97,6 @@ enum wlr_xwayland_surface_decorations {
WLR_XWAYLAND_SURFACE_DECORATIONS_NO_TITLE = 2, 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;
};
/** /**
* This represents the input focus described as follows: * This represents the input focus described as follows:
* *
@ -176,9 +153,8 @@ struct wlr_xwayland_surface {
size_t protocols_len; size_t protocols_len;
uint32_t decorations; uint32_t decorations;
struct wlr_xwayland_surface_hints *hints; xcb_icccm_wm_hints_t *hints;
uint32_t hints_urgency; xcb_size_hints_t *size_hints;
struct wlr_xwayland_surface_size_hints *size_hints;
bool pinging; bool pinging;
struct wl_event_source *ping_timer; struct wl_event_source *ping_timer;

View File

@ -15,7 +15,6 @@
#include <xcb/composite.h> #include <xcb/composite.h>
#include <xcb/render.h> #include <xcb/render.h>
#include <xcb/res.h> #include <xcb/res.h>
#include <xcb/xcb_icccm.h>
#include <xcb/xfixes.h> #include <xcb/xfixes.h>
#include "util/signal.h" #include "util/signal.h"
#include "xwayland/xwm.h" #include "xwayland/xwm.h"
@ -662,17 +661,12 @@ static void read_surface_hints(struct wlr_xwm *xwm,
return; return;
} }
xcb_icccm_wm_hints_t hints;
xcb_icccm_get_wm_hints_from_reply(&hints, reply);
free(xsurface->hints); free(xsurface->hints);
xsurface->hints = calloc(1, sizeof(struct wlr_xwayland_surface_hints)); xsurface->hints = calloc(1, sizeof(xcb_icccm_wm_hints_t));
if (xsurface->hints == NULL) { if (xsurface->hints == NULL) {
return; return;
} }
xcb_icccm_get_wm_hints_from_reply(xsurface->hints, reply);
memcpy(xsurface->hints, &hints, sizeof(struct wlr_xwayland_surface_hints));
xsurface->hints_urgency = xcb_icccm_wm_hints_get_urgency(&hints);
if (!(xsurface->hints->flags & XCB_ICCCM_WM_HINT_INPUT)) { if (!(xsurface->hints->flags & XCB_ICCCM_WM_HINT_INPUT)) {
// The client didn't specify whether it wants input. // The client didn't specify whether it wants input.
@ -690,20 +684,16 @@ static void read_surface_normal_hints(struct wlr_xwm *xwm,
return; return;
} }
xcb_size_hints_t size_hints;
xcb_icccm_get_wm_size_hints_from_reply(&size_hints, reply);
free(xsurface->size_hints); free(xsurface->size_hints);
xsurface->size_hints = xsurface->size_hints = calloc(1, sizeof(xcb_size_hints_t));
calloc(1, sizeof(struct wlr_xwayland_surface_size_hints));
if (xsurface->size_hints == NULL) { if (xsurface->size_hints == NULL) {
return; return;
} }
memcpy(xsurface->size_hints, &size_hints, xcb_icccm_get_wm_size_hints_from_reply(xsurface->size_hints, reply);
sizeof(struct wlr_xwayland_surface_size_hints));
bool has_min_size_hints = (size_hints.flags & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE) != 0; int32_t flags = xsurface->size_hints->flags;
bool has_base_size_hints = (size_hints.flags & XCB_ICCCM_SIZE_HINT_BASE_SIZE) != 0; bool has_min_size_hints = (flags & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE) != 0;
bool has_base_size_hints = (flags & XCB_ICCCM_SIZE_HINT_BASE_SIZE) != 0;
/* ICCCM says that if absent, min size is equal to base size and vice versa */ /* ICCCM says that if absent, min size is equal to base size and vice versa */
if (!has_min_size_hints && !has_base_size_hints) { if (!has_min_size_hints && !has_base_size_hints) {
xsurface->size_hints->min_width = -1; xsurface->size_hints->min_width = -1;
@ -718,7 +708,7 @@ static void read_surface_normal_hints(struct wlr_xwm *xwm,
xsurface->size_hints->min_height = xsurface->size_hints->base_height; xsurface->size_hints->min_height = xsurface->size_hints->base_height;
} }
if ((size_hints.flags & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE) == 0) { if ((flags & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE) == 0) {
xsurface->size_hints->max_width = -1; xsurface->size_hints->max_width = -1;
xsurface->size_hints->max_height = -1; xsurface->size_hints->max_height = -1;
} }