From: Rémi Bernon <rbernon@codeweavers.com> Avoiding invisible padding in the structure that could make memcmp to constantly fail when comparing old / new values. --- dlls/winex11.drv/window.c | 4 ++-- dlls/winex11.drv/x11drv.h | 5 +++-- dlls/winex11.drv/xinerama.c | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 33d8ceee438..a83359b2d74 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1318,7 +1318,7 @@ static void window_set_net_wm_fullscreen_monitors( struct x11drv_win_data *data, * windows spanning multiple monitors */ static void update_net_wm_fullscreen_monitors( struct x11drv_win_data *data ) { - struct monitor_indices monitors; + struct monitor_indices monitors = {0}; /* If the current display device handler cannot detect dynamic device changes, do not use * _NET_WM_FULLSCREEN_MONITORS because xinerama_get_fullscreen_monitors() may report wrong @@ -1736,7 +1736,7 @@ static UINT window_update_client_config( struct x11drv_win_data *data ) { static const UINT fullscreen_mask = (1 << NET_WM_STATE_MAXIMIZED) | (1 << NET_WM_STATE_FULLSCREEN); RECT rect, old_rect = data->rects.window, new_rect; - unsigned int old_generation, generation; + unsigned long old_generation, generation; long old_monitors[4], monitors[4]; UINT flags; diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 9f38ceba0df..8b0c0a62f91 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -635,7 +635,8 @@ enum x11drv_net_wm_state struct monitor_indices { - unsigned int generation; + /* compared with memcmp, make sure there's no padding */ + unsigned long generation; long indices[4]; }; @@ -763,7 +764,7 @@ extern POINT virtual_screen_to_root( INT x, INT y ); extern POINT root_to_virtual_screen( INT x, INT y ); extern RECT get_host_primary_monitor_rect(void); extern RECT get_work_area( const RECT *monitor_rect ); -extern BOOL xinerama_get_fullscreen_monitors( const RECT *rect, unsigned int *generation, long *indices ); +extern BOOL xinerama_get_fullscreen_monitors( const RECT *rect, unsigned long *generation, long *indices ); extern void xinerama_init( unsigned int width, unsigned int height ); extern void init_recursive_mutex( pthread_mutex_t *mutex ); extern void init_icm_profile(void); diff --git a/dlls/winex11.drv/xinerama.c b/dlls/winex11.drv/xinerama.c index 81f739285e0..d6478fcd03a 100644 --- a/dlls/winex11.drv/xinerama.c +++ b/dlls/winex11.drv/xinerama.c @@ -126,7 +126,7 @@ static inline int query_screens(void) /* Get xinerama monitor indices required for _NET_WM_FULLSCREEN_MONITORS. Return FALSE if rect is * not fullscreen */ -BOOL xinerama_get_fullscreen_monitors( const RECT *rect, unsigned int *generation, long *indices ) +BOOL xinerama_get_fullscreen_monitors( const RECT *rect, unsigned long *generation, long *indices ) { RECT window_rect, intersected_rect, monitor_rect; BOOL ret = FALSE; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10598