@ -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 ;
}
}