Using the window style and the new tracker pending_state/current_state to decide on the necessary changes.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/window.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 58fc99275f4..46006874dfa 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2398,17 +2398,19 @@ void X11DRV_SystrayDockClear( HWND hwnd ) BOOL X11DRV_SystrayDockRemove( HWND hwnd ) { struct x11drv_win_data *data; - BOOL ret; + BOOL ret = FALSE;
- /* make sure we don't try to unmap it, it confuses some systray docks */ if ((data = get_win_data( hwnd ))) { - if ((ret = data->embedded)) data->mapped = FALSE; + if ((ret = data->embedded)) + { + window_set_wm_state( data, WithdrawnState ); + data->mapped = FALSE; + } release_win_data( data ); - return ret; }
- return FALSE; + return ret; }
From: Rémi Bernon rbernon@codeweavers.com
Making the changes computation more readable, matching styles between the last requested (pending_state) style and the current style. --- dlls/winex11.drv/window.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 46006874dfa..d75afa33ff9 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2773,13 +2773,21 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, BOOL { struct x11drv_thread_data *thread_data; struct x11drv_win_data *data; - UINT new_style = NtUserGetWindowLongW( hwnd, GWL_STYLE ); + UINT new_style = NtUserGetWindowLongW( hwnd, GWL_STYLE ), old_style; struct window_rects old_rects; BOOL was_fullscreen; int event_type;
if (!(data = get_win_data( hwnd ))) return;
+ /* Compute the necessary changes to transition from the last requested + * window state (old_style), to the desired window state (new_style). + */ + old_style = new_style & ~(WS_VISIBLE | WS_MINIMIZE | WS_MAXIMIZE); + if (data->pending_state.wm_state == IconicState) old_style |= WS_MINIMIZE; + if (data->pending_state.wm_state != WithdrawnState) old_style |= WS_VISIBLE; + if (data->pending_state.net_wm_state & (1 << NET_WM_STATE_MAXIMIZED)) old_style |= WS_MAXIMIZE; + thread_data = x11drv_thread_data();
old_rects = data->rects; @@ -2816,7 +2824,7 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, BOOL event_type = 0; /* ignore other events */ }
- if (data->mapped && event_type != ReparentNotify) + if ((old_style & WS_VISIBLE) && event_type != ReparentNotify) { if (((swp_flags & SWP_HIDEWINDOW) && !(new_style & WS_VISIBLE)) || (!event_type && !(new_style & WS_MINIMIZE) && @@ -2853,7 +2861,7 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, BOOL if ((new_style & WS_VISIBLE) && ((new_style & WS_MINIMIZE) || is_window_rect_mapped( &new_rects->window ))) { - if (!data->mapped) + if (!(old_style & WS_VISIBLE)) { BOOL needs_icon = !data->icon_pixmap; BOOL needs_map = TRUE; @@ -2866,7 +2874,7 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, BOOL if (needs_map) map_window( hwnd, new_style ); return; } - else if ((swp_flags & SWP_STATECHANGED) && (!data->iconic != !(new_style & WS_MINIMIZE))) + else if ((swp_flags & SWP_STATECHANGED) && (old_style & WS_MINIMIZE) != (new_style & WS_MINIMIZE)) { set_wm_hints( data ); data->iconic = (new_style & WS_MINIMIZE) != 0;
From: Rémi Bernon rbernon@codeweavers.com
Making the changes computation more readable, matching styles between the current Win32 style and the current X11 (current_state) style. --- dlls/winex11.drv/event.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 21bc5fc2813..2a95552b8d6 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -1062,9 +1062,8 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev ) struct x11drv_win_data *data; RECT rect; POINT pos = {event->x, event->y}; - UINT flags; + UINT flags, old_style, new_style; int cx, cy, x, y; - DWORD style;
if (!hwnd) return FALSE; if (!(data = get_win_data( hwnd ))) return FALSE; @@ -1083,6 +1082,15 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev ) SetRect( &rect, pos.x, pos.y, pos.x + event->width, pos.y + event->height ); window_configure_notify( data, event->serial, &rect );
+ /* Compute the necessary changes to transition from the current Win32 + * window state (old_style), to the current X11 window state (new_style). + */ + old_style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); + new_style = old_style & ~(WS_VISIBLE | WS_MINIMIZE | WS_MAXIMIZE); + if (data->current_state.wm_state == IconicState) new_style |= WS_MINIMIZE; + if (data->current_state.wm_state != WithdrawnState) new_style |= WS_VISIBLE; + if (data->current_state.net_wm_state & (1 << NET_WM_STATE_MAXIMIZED)) new_style |= WS_MAXIMIZE; + if (!data->mapped || data->iconic) goto done; if (!data->whole_window || !data->managed) goto done; if (data->configure_serial && (long)(data->configure_serial - event->serial) > 0) @@ -1124,13 +1132,12 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev ) hwnd, (int)(data->rects.window.right - data->rects.window.left), (int)(data->rects.window.bottom - data->rects.window.top), cx, cy );
- style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); - if ((style & WS_CAPTION) == WS_CAPTION || !data->is_fullscreen) + if ((old_style & WS_CAPTION) == WS_CAPTION || !data->is_fullscreen) { data->net_wm_state = get_window_net_wm_state( event->display, data->whole_window ); - if ((data->net_wm_state & (1 << NET_WM_STATE_MAXIMIZED))) + if ((new_style & WS_MAXIMIZE)) { - if (!(style & WS_MAXIMIZE)) + if (!(old_style & WS_MAXIMIZE)) { TRACE( "win %p/%lx is maximized\n", data->hwnd, data->whole_window ); release_win_data( data ); @@ -1138,7 +1145,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev ) return TRUE; } } - else if (style & WS_MAXIMIZE) + else if (old_style & WS_MAXIMIZE) { TRACE( "window %p/%lx is no longer maximized\n", data->hwnd, data->whole_window ); release_win_data( data );
From: Rémi Bernon rbernon@codeweavers.com
Making the changes computation more readable, matching styles between the current Win32 style and the current X11 (current_state) style. --- dlls/winex11.drv/event.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 2a95552b8d6..088a124654e 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -1226,12 +1226,21 @@ static int get_window_xembed_info( Display *display, Window window ) static void handle_wm_state_notify( HWND hwnd, XPropertyEvent *event, BOOL update_window ) { struct x11drv_win_data *data; - UINT style, value = 0; + UINT old_style, new_style, value = 0;
if (!(data = get_win_data( hwnd ))) return; if (event->state == PropertyNewValue) value = get_window_wm_state( event->display, event->window ); if (update_window) window_wm_state_notify( data, event->serial, value );
+ /* Compute the necessary changes to transition from the current Win32 + * window state (old_style), to the current X11 window state (new_style). + */ + old_style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); + new_style = old_style & ~(WS_VISIBLE | WS_MINIMIZE | WS_MAXIMIZE); + if (data->current_state.wm_state == IconicState) new_style |= WS_MINIMIZE; + if (data->current_state.wm_state != WithdrawnState) new_style |= WS_VISIBLE; + if (data->current_state.net_wm_state & (1 << NET_WM_STATE_MAXIMIZED)) new_style |= WS_MAXIMIZE; + switch(event->state) { case PropertyDelete: @@ -1257,48 +1266,46 @@ static void handle_wm_state_notify( HWND hwnd, XPropertyEvent *event, BOOL updat
if (!update_window || !data->managed || !data->mapped) goto done;
- style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); - - if (data->iconic && data->wm_state == NormalState) /* restore window */ + if ((old_style & WS_MINIMIZE) && !(new_style & WS_MINIMIZE)) /* restore window */ { data->iconic = FALSE; data->net_wm_state = get_window_net_wm_state( event->display, data->whole_window ); - if ((style & WS_CAPTION) == WS_CAPTION && (data->net_wm_state & (1 << NET_WM_STATE_MAXIMIZED))) + if ((old_style & WS_CAPTION) == WS_CAPTION && (new_style & WS_MAXIMIZE)) { - if ((style & WS_MAXIMIZEBOX) && !(style & WS_DISABLED)) + if ((old_style & WS_MAXIMIZEBOX) && !(old_style & WS_DISABLED)) { TRACE( "restoring to max %p/%lx\n", data->hwnd, data->whole_window ); release_win_data( data ); send_message( hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 ); return; } - TRACE( "not restoring to max win %p/%lx style %08x\n", data->hwnd, data->whole_window, style ); + TRACE( "window %p/%lx style %#x not restoring to max\n", data->hwnd, data->whole_window, old_style ); } else { - if (style & (WS_MINIMIZE | WS_MAXIMIZE)) + if (old_style & (WS_MINIMIZE | WS_MAXIMIZE)) { TRACE( "restoring win %p/%lx\n", data->hwnd, data->whole_window ); release_win_data( data ); - if ((style & (WS_MINIMIZE | WS_VISIBLE)) == (WS_MINIMIZE | WS_VISIBLE)) + if ((old_style & (WS_MINIMIZE | WS_VISIBLE)) == (WS_MINIMIZE | WS_VISIBLE)) NtUserSetActiveWindow( hwnd ); send_message( hwnd, WM_SYSCOMMAND, SC_RESTORE, 0 ); return; } - TRACE( "not restoring win %p/%lx style %08x\n", data->hwnd, data->whole_window, style ); + TRACE( "window %p/%lx style %#x not restoring\n", data->hwnd, data->whole_window, old_style ); } } - else if (!data->iconic && data->wm_state == IconicState) + else if (!(old_style & WS_MINIMIZE) && (new_style & WS_MINIMIZE)) { data->iconic = TRUE; - if ((style & WS_MINIMIZEBOX) && !(style & WS_DISABLED)) + if ((old_style & WS_MINIMIZEBOX) && !(old_style & WS_DISABLED)) { TRACE( "minimizing win %p/%lx\n", data->hwnd, data->whole_window ); release_win_data( data ); send_message( hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0 ); return; } - TRACE( "not minimizing win %p/%lx style %08x\n", data->hwnd, data->whole_window, style ); + TRACE( "window %p/%lx style %#x not minimizing\n", data->hwnd, data->whole_window, old_style ); } done: release_win_data( data );
From: Rémi Bernon rbernon@codeweavers.com
The mapped and iconic flags should match the last requested state at all time. Unless we've missed sending an update this should match the current Win32 state, and we should be able use it instead as a more accurate source of information about the supposed window state.
When receiving config changes, we don't want to apply changes to a window which is supposed to be hidden or minimized. When receiving state changes, we don't want to apply changes to a window which is supposed to be hidden, regardless of the X11 believes. --- dlls/winex11.drv/event.c | 4 ++-- dlls/winex11.drv/window.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 088a124654e..5e4e1e458dd 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -1091,7 +1091,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev ) if (data->current_state.wm_state != WithdrawnState) new_style |= WS_VISIBLE; if (data->current_state.net_wm_state & (1 << NET_WM_STATE_MAXIMIZED)) new_style |= WS_MAXIMIZE;
- if (!data->mapped || data->iconic) goto done; + if (!(old_style & WS_VISIBLE) || (old_style & WS_MINIMIZE)) goto done; if (!data->whole_window || !data->managed) goto done; if (data->configure_serial && (long)(data->configure_serial - event->serial) > 0) { @@ -1264,7 +1264,7 @@ static void handle_wm_state_notify( HWND hwnd, XPropertyEvent *event, BOOL updat break; }
- if (!update_window || !data->managed || !data->mapped) goto done; + if (!update_window || !data->managed || !(old_style & WS_VISIBLE)) goto done;
if ((old_style & WS_MINIMIZE) && !(new_style & WS_MINIMIZE)) /* restore window */ { diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index d75afa33ff9..0bb7175c29c 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1613,7 +1613,7 @@ static void sync_window_position( struct x11drv_win_data *data, UINT swp_flags ) DWORD ex_style = NtUserGetWindowLongW( data->hwnd, GWL_EXSTYLE ); BOOL above = FALSE;
- if (data->managed && data->iconic) return; + if (data->managed && (style & WS_MINIMIZE)) return;
if (!(swp_flags & SWP_NOZORDER) || (swp_flags & SWP_SHOWWINDOW)) { @@ -2927,7 +2927,7 @@ UINT X11DRV_ShowWindow( HWND hwnd, INT cmd, RECT *rect, UINT swp ) } goto done; } - if (!data->managed || !data->mapped || data->iconic) goto done; + if (!data->managed || !(style & WS_VISIBLE) || (style & WS_MINIMIZE)) goto done;
/* only fetch the new rectangle if the ShowWindow was a result of a window manager event */
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/window.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 0bb7175c29c..035f8d5cf0b 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1187,7 +1187,7 @@ static void update_net_wm_fullscreen_monitors( struct x11drv_win_data *data ) && !data->net_wm_fullscreen_monitors_set) return;
- if (!data->mapped) + if (data->pending_state.wm_state == WithdrawnState) { XChangeProperty( data->display, data->whole_window, x11drv_atom(_NET_WM_FULLSCREEN_MONITORS), XA_CARDINAL, 32, PropModeReplace, (unsigned char *)monitors, 4 ); @@ -1215,7 +1215,7 @@ static void window_set_net_wm_state( struct x11drv_win_data *data, UINT new_stat
if (!data->whole_window) return; /* no window, nothing to update */
- if (!data->mapped) /* set the _NET_WM_STATE atom directly */ + if (data->pending_state.wm_state == WithdrawnState) /* set the _NET_WM_STATE atom directly */ { Atom atoms[NB_NET_WM_STATES + 1];
@@ -3272,7 +3272,7 @@ void X11DRV_FlashWindowEx( FLASHWINFO *pfinfo ) if (!data) return;
- if (data->mapped) + if (data->pending_state.wm_state != WithdrawnState) { xev.type = ClientMessage; xev.xclient.window = data->whole_window;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/event.c | 2 +- dlls/winex11.drv/window.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 5e4e1e458dd..11e93a3a100 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -998,7 +998,7 @@ static BOOL X11DRV_MapNotify( HWND hwnd, XEvent *event )
if (!(data = get_win_data( hwnd ))) return FALSE;
- if (!data->managed && !data->embedded && data->mapped) + if (!data->managed && !data->embedded && data->pending_state.wm_state == NormalState) { HWND hwndFocus = get_focus(); if (hwndFocus && NtUserIsChild( hwnd, hwndFocus )) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 035f8d5cf0b..dcba464daf8 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1448,7 +1448,7 @@ static void map_window( HWND hwnd, DWORD new_style )
if (!(data = get_win_data( hwnd ))) return;
- if (data->whole_window && !data->mapped) + if (data->whole_window && data->pending_state.wm_state == WithdrawnState) { TRACE( "win %p/%lx\n", data->hwnd, data->whole_window );
@@ -1479,7 +1479,7 @@ static void unmap_window( HWND hwnd )
if (!(data = get_win_data( hwnd ))) return;
- if (data->mapped) + if (data->pending_state.wm_state != WithdrawnState) { TRACE( "win %p/%lx\n", data->hwnd, data->whole_window ); window_set_wm_state( data, WithdrawnState ); @@ -3018,7 +3018,7 @@ void X11DRV_SetLayeredWindowAttributes( HWND hwnd, COLORREF key, BYTE alpha, DWO sync_window_opacity( data->display, data->whole_window, alpha, flags );
data->layered = TRUE; - if (!data->mapped) /* mapping is delayed until attributes are set */ + if (data->pending_state.wm_state == WithdrawnState) /* mapping is delayed until attributes are set */ { DWORD style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE );
@@ -3054,7 +3054,7 @@ void X11DRV_UpdateLayeredWindow( HWND hwnd, UINT flags ) BOOL mapped;
if (!(data = get_win_data( hwnd ))) return; - mapped = data->mapped; + mapped = data->pending_state.wm_state != WithdrawnState; release_win_data( data );
/* layered windows are mapped only once their attributes are set */ @@ -3206,7 +3206,7 @@ LRESULT X11DRV_SysCommand( HWND hwnd, WPARAM wparam, LPARAM lparam ) if (wparam == SC_SCREENSAVE && hwnd == NtUserGetDesktopWindow()) return start_screensaver(); return -1; } - if (!data->whole_window || !data->managed || !data->mapped) goto failed; + if (!data->whole_window || !data->managed || data->pending_state.wm_state == WithdrawnState) goto failed;
switch (wparam & 0xfff0) {
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/event.c | 8 ++------ dlls/winex11.drv/window.c | 34 ++++++++-------------------------- dlls/winex11.drv/x11drv.h | 3 --- 3 files changed, 10 insertions(+), 35 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 11e93a3a100..ccbf4f43688 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -1134,7 +1134,6 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
if ((old_style & WS_CAPTION) == WS_CAPTION || !data->is_fullscreen) { - data->net_wm_state = get_window_net_wm_state( event->display, data->whole_window ); if ((new_style & WS_MAXIMIZE)) { if (!(old_style & WS_MAXIMIZE)) @@ -1268,8 +1267,6 @@ static void handle_wm_state_notify( HWND hwnd, XPropertyEvent *event, BOOL updat
if ((old_style & WS_MINIMIZE) && !(new_style & WS_MINIMIZE)) /* restore window */ { - data->iconic = FALSE; - data->net_wm_state = get_window_net_wm_state( event->display, data->whole_window ); if ((old_style & WS_CAPTION) == WS_CAPTION && (new_style & WS_MAXIMIZE)) { if ((old_style & WS_MAXIMIZEBOX) && !(old_style & WS_DISABLED)) @@ -1297,7 +1294,6 @@ static void handle_wm_state_notify( HWND hwnd, XPropertyEvent *event, BOOL updat } else if (!(old_style & WS_MINIMIZE) && (new_style & WS_MINIMIZE)) { - data->iconic = TRUE; if ((old_style & WS_MINIMIZEBOX) && !(old_style & WS_DISABLED)) { TRACE( "minimizing win %p/%lx\n", data->hwnd, data->whole_window ); @@ -1376,9 +1372,9 @@ void wait_for_withdrawn_state( HWND hwnd, BOOL set ) if (!(data = get_win_data( hwnd ))) break; if (!data->managed || data->embedded || data->display != display) break; if (!(window = data->whole_window)) break; - if (!data->mapped == !set) + if ((data->pending_state.wm_state == WithdrawnState) == !set) { - TRACE( "window %p/%lx now %smapped\n", hwnd, window, data->mapped ? "" : "un" ); + TRACE( "window %p/%lx now %smapped\n", hwnd, window, (data->pending_state.wm_state != WithdrawnState) ? "" : "un" ); break; } if ((data->wm_state == WithdrawnState) != !set) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index dcba464daf8..8d7c5dd4b1c 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1155,13 +1155,13 @@ static void update_desktop_fullscreen( Display *display )
/* Update _NET_WM_FULLSCREEN_MONITORS when _NET_WM_STATE_FULLSCREEN is set to support fullscreen * windows spanning multiple monitors */ -static void update_net_wm_fullscreen_monitors( struct x11drv_win_data *data ) +static void update_net_wm_fullscreen_monitors( struct x11drv_win_data *data, UINT style ) { long monitors[4]; XEvent xev;
- if (!(data->net_wm_state & (1 << NET_WM_STATE_FULLSCREEN)) || is_virtual_desktop() - || NtUserGetWindowLongW( data->hwnd, GWL_STYLE ) & WS_MINIMIZE) + if (!(data->pending_state.net_wm_state & (1 << NET_WM_STATE_FULLSCREEN)) || + is_virtual_desktop() || (style & WS_MINIMIZE)) return;
/* If the current display device handler cannot detect dynamic device changes, do not use @@ -1322,7 +1322,7 @@ static void update_net_wm_states( struct x11drv_win_data *data )
style = NtUserGetWindowLongW( data->hwnd, GWL_STYLE ); if (style & WS_MINIMIZE) - new_state |= data->net_wm_state & ((1 << NET_WM_STATE_FULLSCREEN)|(1 << NET_WM_STATE_MAXIMIZED)); + new_state |= data->pending_state.net_wm_state & ((1 << NET_WM_STATE_FULLSCREEN)|(1 << NET_WM_STATE_MAXIMIZED)); if (data->is_fullscreen) { if ((style & WS_MAXIMIZE) && (style & WS_CAPTION) == WS_CAPTION) @@ -1346,8 +1346,7 @@ static void update_net_wm_states( struct x11drv_win_data *data ) }
window_set_net_wm_state( data, new_state ); - data->net_wm_state = new_state; - update_net_wm_fullscreen_monitors( data ); + update_net_wm_fullscreen_monitors( data, style ); }
/*********************************************************************** @@ -1460,9 +1459,7 @@ static void map_window( HWND hwnd, DWORD new_style ) window_set_wm_state( data, (new_style & WS_MINIMIZE) ? IconicState : NormalState ); XFlush( data->display );
- data->mapped = TRUE; - data->iconic = (new_style & WS_MINIMIZE) != 0; - update_net_wm_fullscreen_monitors( data ); + update_net_wm_fullscreen_monitors( data, new_style ); } release_win_data( data ); } @@ -1478,14 +1475,7 @@ static void unmap_window( HWND hwnd ) wait_for_withdrawn_state( hwnd, FALSE );
if (!(data = get_win_data( hwnd ))) return; - - if (data->pending_state.wm_state != WithdrawnState) - { - TRACE( "win %p/%lx\n", data->hwnd, data->whole_window ); - window_set_wm_state( data, WithdrawnState ); - data->mapped = FALSE; - data->net_wm_state = 0; - } + window_set_wm_state( data, WithdrawnState ); release_win_data( data ); }
@@ -1594,7 +1584,6 @@ void make_window_embedded( struct x11drv_win_data *data ) { /* the window cannot be mapped before being embedded */ window_set_wm_state( data, WithdrawnState ); - data->net_wm_state = 0; data->embedded = TRUE; data->managed = TRUE; sync_window_style( data ); @@ -2006,8 +1995,6 @@ static void destroy_whole_window( struct x11drv_win_data *data, BOOL already_des data->whole_window = data->client_window = 0; data->whole_colormap = 0; data->wm_state = WithdrawnState; - data->net_wm_state = 0; - data->mapped = FALSE;
memset( &data->pending_state, 0, sizeof(data->pending_state) ); memset( &data->current_state, 0, sizeof(data->current_state) ); @@ -2402,11 +2389,7 @@ BOOL X11DRV_SystrayDockRemove( HWND hwnd )
if ((data = get_win_data( hwnd ))) { - if ((ret = data->embedded)) - { - window_set_wm_state( data, WithdrawnState ); - data->mapped = FALSE; - } + if ((ret = data->embedded)) window_set_wm_state( data, WithdrawnState ); release_win_data( data ); }
@@ -2877,7 +2860,6 @@ void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags, BOOL else if ((swp_flags & SWP_STATECHANGED) && (old_style & WS_MINIMIZE) != (new_style & WS_MINIMIZE)) { set_wm_hints( data ); - data->iconic = (new_style & WS_MINIMIZE) != 0; window_set_wm_state( data, (new_style & WS_MINIMIZE) ? IconicState : NormalState ); update_net_wm_states( data ); } diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 86749b1211f..c440fb73aea 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -622,8 +622,6 @@ struct x11drv_win_data struct host_window *parent; /* the host window parent, frame or embedder, NULL if root_window */ XIC xic; /* X input context */ UINT managed : 1; /* is window managed? */ - UINT mapped : 1; /* is window mapped? (in either normal or iconic state) */ - UINT iconic : 1; /* is window in iconic state? */ UINT embedded : 1; /* is window an XEMBED client? */ UINT shaped : 1; /* is window using a custom region shape? */ UINT layered : 1; /* is window layered and with valid attributes? */ @@ -634,7 +632,6 @@ struct x11drv_win_data UINT is_fullscreen : 1; /* is the window visible rect fullscreen */ UINT parent_invalid : 1; /* is the parent host window possibly invalid */ int wm_state; /* current value of the WM_STATE property */ - DWORD net_wm_state; /* bit mask of active x11drv_net_wm_state values */ Window embedder; /* window id of embedder */ Pixmap icon_pixmap; Pixmap icon_mask;
Closing this, I will keep the old fields around for now.
This merge request was closed by Rémi Bernon.