GDK W32: Don't move iconic windows
Using UpdateLayeredWindow() on iconic windows brings them *back* from their iconic (minimized) state. That is bad. As a precaution, also don't use SetWindowPos() on iconic windows. This means that iconic windows can't be moved. That is fixable by using SetWindowPlacement(), but there is no pressing need to do so, as there are very few cases when windows need to be moved while minimized. https://bugzilla.gnome.org/show_bug.cgi?id=763835
This commit is contained in:
@ -224,16 +224,24 @@ static void
|
|||||||
gdk_win32_window_apply_queued_move_resize (GdkWindow *window,
|
gdk_win32_window_apply_queued_move_resize (GdkWindow *window,
|
||||||
RECT window_rect)
|
RECT window_rect)
|
||||||
{
|
{
|
||||||
GDK_NOTE (EVENTS, g_print ("Setting window position ... "));
|
if (!IsIconic (GDK_WINDOW_HWND (window)))
|
||||||
|
{
|
||||||
|
GDK_NOTE (EVENTS, g_print ("Setting window position ... "));
|
||||||
|
|
||||||
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window),
|
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window),
|
||||||
SWP_NOZORDER_SPECIFIED,
|
SWP_NOZORDER_SPECIFIED,
|
||||||
window_rect.left, window_rect.top,
|
window_rect.left, window_rect.top,
|
||||||
window_rect.right - window_rect.left,
|
window_rect.right - window_rect.left,
|
||||||
window_rect.bottom - window_rect.top,
|
window_rect.bottom - window_rect.top,
|
||||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOREDRAW));
|
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOREDRAW));
|
||||||
|
|
||||||
GDK_NOTE (EVENTS, g_print (" ... set window position\n"));
|
GDK_NOTE (EVENTS, g_print (" ... set window position\n"));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't move iconic windows */
|
||||||
|
/* TODO: use SetWindowPlacement() to change non-minimized window position */
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -349,6 +357,14 @@ gdk_win32_window_end_paint (GdkWindow *window)
|
|||||||
cairo_surface_flush (impl->cache_surface);
|
cairo_surface_flush (impl->cache_surface);
|
||||||
hdc = cairo_win32_surface_get_dc (impl->cache_surface);
|
hdc = cairo_win32_surface_get_dc (impl->cache_surface);
|
||||||
|
|
||||||
|
/* Don't use UpdateLayeredWindow on minimized windows */
|
||||||
|
if (IsIconic (GDK_WINDOW_HWND (window)))
|
||||||
|
{
|
||||||
|
gdk_win32_window_apply_queued_move_resize (window, window_rect);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Move, resize and redraw layered window in one call */
|
/* Move, resize and redraw layered window in one call */
|
||||||
API_CALL (UpdateLayeredWindow, (GDK_WINDOW_HWND (window), NULL,
|
API_CALL (UpdateLayeredWindow, (GDK_WINDOW_HWND (window), NULL,
|
||||||
&window_position, &window_size,
|
&window_position, &window_size,
|
||||||
|
|||||||
Reference in New Issue
Block a user