forked from AuroraMiddleware/gtk
win32: Send window-state-changes before configure events
This is requires to that the state of the window is right when you get the configure event (and to match what X does). Fixes bug #169811
This commit is contained in:
parent
8f50944904
commit
ab615105b6
@ -2738,36 +2738,6 @@ gdk_event_translate (MSG *msg,
|
||||
_gdk_win32_append_event (event);
|
||||
}
|
||||
|
||||
/* Show, New size or position => configure event */
|
||||
if (!(windowpos->flags & SWP_NOCLIENTMOVE) ||
|
||||
!(windowpos->flags & SWP_NOCLIENTSIZE) ||
|
||||
(windowpos->flags & SWP_SHOWWINDOW))
|
||||
{
|
||||
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&
|
||||
!IsIconic (msg->hwnd) &&
|
||||
!GDK_WINDOW_DESTROYED (window))
|
||||
handle_configure_event (msg, window);
|
||||
|
||||
if (window->extension_events != 0)
|
||||
_gdk_device_wintab_update_window_coords (window);
|
||||
}
|
||||
|
||||
if ((windowpos->flags & SWP_HIDEWINDOW) &&
|
||||
!GDK_WINDOW_DESTROYED (window))
|
||||
{
|
||||
/* Send UNMAP events */
|
||||
event = gdk_event_new (GDK_UNMAP);
|
||||
event->any.window = window;
|
||||
_gdk_win32_append_event (event);
|
||||
|
||||
/* Make transient parent the forground window when window unmaps */
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
if (impl->transient_owner &&
|
||||
GetForegroundWindow () == GDK_WINDOW_HWND (window))
|
||||
SetForegroundWindow (GDK_WINDOW_HWND (impl->transient_owner));
|
||||
}
|
||||
|
||||
/* Update window state */
|
||||
if (windowpos->flags & (SWP_STATECHANGED | SWP_SHOWWINDOW | SWP_HIDEWINDOW))
|
||||
{
|
||||
@ -2813,6 +2783,36 @@ gdk_event_translate (MSG *msg,
|
||||
ensure_stacking_on_unminimize (msg);
|
||||
}
|
||||
|
||||
/* Show, New size or position => configure event */
|
||||
if (!(windowpos->flags & SWP_NOCLIENTMOVE) ||
|
||||
!(windowpos->flags & SWP_NOCLIENTSIZE) ||
|
||||
(windowpos->flags & SWP_SHOWWINDOW))
|
||||
{
|
||||
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&
|
||||
!IsIconic (msg->hwnd) &&
|
||||
!GDK_WINDOW_DESTROYED (window))
|
||||
handle_configure_event (msg, window);
|
||||
|
||||
if (window->extension_events != 0)
|
||||
_gdk_device_wintab_update_window_coords (window);
|
||||
}
|
||||
|
||||
if ((windowpos->flags & SWP_HIDEWINDOW) &&
|
||||
!GDK_WINDOW_DESTROYED (window))
|
||||
{
|
||||
/* Send UNMAP events */
|
||||
event = gdk_event_new (GDK_UNMAP);
|
||||
event->any.window = window;
|
||||
_gdk_win32_append_event (event);
|
||||
|
||||
/* Make transient parent the forground window when window unmaps */
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
if (impl->transient_owner &&
|
||||
GetForegroundWindow () == GDK_WINDOW_HWND (window))
|
||||
SetForegroundWindow (GDK_WINDOW_HWND (impl->transient_owner));
|
||||
}
|
||||
|
||||
if (!(windowpos->flags & SWP_NOCLIENTSIZE))
|
||||
{
|
||||
if (window->resize_count > 1)
|
||||
|
@ -2720,14 +2720,15 @@ gdk_win32_window_fullscreen (GdkWindow *window)
|
||||
g_object_set_data (G_OBJECT (window), "fullscreen-info", fi);
|
||||
fi->style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE);
|
||||
|
||||
/* Send state change before configure event */
|
||||
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
|
||||
|
||||
SetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE,
|
||||
(fi->style & ~WS_OVERLAPPEDWINDOW) | WS_POPUP);
|
||||
|
||||
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), HWND_TOP,
|
||||
x, y, width, height,
|
||||
SWP_NOCOPYBITS | SWP_SHOWWINDOW));
|
||||
|
||||
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2743,6 +2744,8 @@ gdk_win32_window_unfullscreen (GdkWindow *window)
|
||||
{
|
||||
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
|
||||
|
||||
impl->hint_flags = fi->hint_flags;
|
||||
SetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE, fi->style);
|
||||
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), HWND_NOTOPMOST,
|
||||
@ -2753,7 +2756,6 @@ gdk_win32_window_unfullscreen (GdkWindow *window)
|
||||
g_object_set_data (G_OBJECT (window), "fullscreen-info", NULL);
|
||||
g_free (fi);
|
||||
|
||||
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user