mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-30 00:15:58 +01:00
xwayland: parse normal hints
This commit is contained in:
parent
ef5914bdb6
commit
ed9796ec68
4 changed files with 25 additions and 3 deletions
|
@ -6,6 +6,10 @@
|
||||||
#include <wlr/types/wlr_compositor.h>
|
#include <wlr/types/wlr_compositor.h>
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
|
|
||||||
|
#ifdef HAS_XCB_ICCCM
|
||||||
|
#include <xcb/xcb_icccm.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
struct wlr_xwm;
|
struct wlr_xwm;
|
||||||
|
|
||||||
struct wlr_xwayland {
|
struct wlr_xwayland {
|
||||||
|
@ -54,6 +58,9 @@ struct wlr_xwayland_surface {
|
||||||
size_t protocols_len;
|
size_t protocols_len;
|
||||||
|
|
||||||
uint32_t motif_hints[5];
|
uint32_t motif_hints[5];
|
||||||
|
#ifdef HAS_XCB_ICCCM
|
||||||
|
xcb_size_hints_t size_hints;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
struct wl_signal destroy;
|
struct wl_signal destroy;
|
||||||
|
|
|
@ -45,12 +45,17 @@ udev = dependency('libudev')
|
||||||
pixman = dependency('pixman-1')
|
pixman = dependency('pixman-1')
|
||||||
xcb = dependency('xcb')
|
xcb = dependency('xcb')
|
||||||
xcb_composite = dependency('xcb-composite')
|
xcb_composite = dependency('xcb-composite')
|
||||||
|
xcb_icccm = dependency('xcb-icccm', required: false)
|
||||||
x11_xcb = dependency('x11-xcb')
|
x11_xcb = dependency('x11-xcb')
|
||||||
libcap = dependency('libcap', required: false)
|
libcap = dependency('libcap', required: false)
|
||||||
systemd = dependency('libsystemd', required: false)
|
systemd = dependency('libsystemd', required: false)
|
||||||
elogind = dependency('libelogind', required: false)
|
elogind = dependency('libelogind', required: false)
|
||||||
math = cc.find_library('m', required: false)
|
math = cc.find_library('m', required: false)
|
||||||
|
|
||||||
|
if xcb_icccm.found()
|
||||||
|
add_project_arguments('-DHAS_XCB_ICCCM', language: 'c')
|
||||||
|
endif
|
||||||
|
|
||||||
if libcap.found() and get_option('enable_libcap')
|
if libcap.found() and get_option('enable_libcap')
|
||||||
add_project_arguments('-DHAS_LIBCAP', language: 'c')
|
add_project_arguments('-DHAS_LIBCAP', language: 'c')
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -6,5 +6,5 @@ lib_wlr_xwayland = static_library(
|
||||||
'xwm.c',
|
'xwm.c',
|
||||||
),
|
),
|
||||||
include_directories: wlr_inc,
|
include_directories: wlr_inc,
|
||||||
dependencies: [wayland_server, xcb, xcb_composite, pixman],
|
dependencies: [wayland_server, xcb, xcb_composite, xcb_icccm, pixman],
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
#include "wlr/xwayland.h"
|
#include "wlr/xwayland.h"
|
||||||
#include "xwm.h"
|
#include "xwm.h"
|
||||||
|
|
||||||
|
#ifdef HAS_XCB_ICCCM
|
||||||
|
#include <xcb/xcb_icccm.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *atom_map[ATOM_LAST] = {
|
const char *atom_map[ATOM_LAST] = {
|
||||||
"WL_SURFACE_ID",
|
"WL_SURFACE_ID",
|
||||||
"WM_DELETE_WINDOW",
|
"WM_DELETE_WINDOW",
|
||||||
|
@ -272,17 +276,23 @@ static void read_surface_protocols(struct wlr_xwm *xwm,
|
||||||
wlr_log(L_DEBUG, "WM_PROTOCOLS (%zu)", atoms_len);
|
wlr_log(L_DEBUG, "WM_PROTOCOLS (%zu)", atoms_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAS_XCB_ICCCM
|
||||||
static void read_surface_normal_hints(struct wlr_xwm *xwm,
|
static void read_surface_normal_hints(struct wlr_xwm *xwm,
|
||||||
struct wlr_xwayland_surface *surface, xcb_get_property_reply_t *reply) {
|
struct wlr_xwayland_surface *surface, xcb_get_property_reply_t *reply) {
|
||||||
if (reply->type != xwm->atoms[WM_SIZE_HINTS]) {
|
if (reply->type != xwm->atoms[WM_SIZE_HINTS]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: xcb_icccm_get_wm_size_hints_from_reply
|
xcb_icccm_get_wm_size_hints_from_reply(&surface->size_hints, reply);
|
||||||
// See https://github.com/i3/i3/blob/55bc6741796e8b179b6111a721a3e9631934bb86/src/handlers.c#L994
|
|
||||||
|
|
||||||
wlr_log(L_DEBUG, "WM_NORMAL_HINTS (%d)", reply->value_len);
|
wlr_log(L_DEBUG, "WM_NORMAL_HINTS (%d)", reply->value_len);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static void read_surface_normal_hints(struct wlr_xwm *xwm,
|
||||||
|
struct wlr_xwayland_surface *surface, xcb_get_property_reply_t *reply) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void read_surface_motif_hints(struct wlr_xwm *xwm,
|
static void read_surface_motif_hints(struct wlr_xwm *xwm,
|
||||||
struct wlr_xwayland_surface *surface, xcb_get_property_reply_t *reply) {
|
struct wlr_xwayland_surface *surface, xcb_get_property_reply_t *reply) {
|
||||||
|
|
Loading…
Reference in a new issue