summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorРуслан Ижбулатов <lrn1986@gmail.com>2016-03-17 20:07:33 +0000
committerРуслан Ижбулатов <lrn1986@gmail.com>2016-03-18 07:49:39 +0000
commit7d2a7a56267b8444ba1756a9a6a52157fd931758 (patch)
tree24a4cce19f00a9bf4eff4faa7e7836794df9c586 /gdk
parent54d36efa6138a1f30fd7e2d76d3a28b4fab6ad19 (diff)
downloadgtk+-7d2a7a56267b8444ba1756a9a6a52157fd931758.tar.gz
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
Diffstat (limited to 'gdk')
-rw-r--r--gdk/win32/gdkwindow-win32.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index d112d32d00..bedf5351ea 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -224,16 +224,24 @@ static void
gdk_win32_window_apply_queued_move_resize (GdkWindow *window,
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),
+ SWP_NOZORDER_SPECIFIED,
+ window_rect.left, window_rect.top,
+ window_rect.right - window_rect.left,
+ window_rect.bottom - window_rect.top,
+ SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOREDRAW));
- API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window),
- SWP_NOZORDER_SPECIFIED,
- window_rect.left, window_rect.top,
- window_rect.right - window_rect.left,
- window_rect.bottom - window_rect.top,
- SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOREDRAW));
+ GDK_NOTE (EVENTS, g_print (" ... set window position\n"));
+
+ return;
+ }
- GDK_NOTE (EVENTS, g_print (" ... set window position\n"));
+ /* Don't move iconic windows */
+ /* TODO: use SetWindowPlacement() to change non-minimized window position */
}
static gboolean
@@ -349,6 +357,14 @@ gdk_win32_window_end_paint (GdkWindow *window)
cairo_surface_flush (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 */
API_CALL (UpdateLayeredWindow, (GDK_WINDOW_HWND (window), NULL,
&window_position, &window_size,