summaryrefslogtreecommitdiff
path: root/gdk/win32
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2011-10-25 16:13:47 +0200
committerAlexander Larsson <alexl@redhat.com>2011-11-10 17:41:00 +0100
commit36a28d616ff62275781083d70ad89da1ebd63768 (patch)
tree6ef72e511c19d24fc374bf0e5b9b1c7d732d37a3 /gdk/win32
parent538ab4fca7822eadbe87987877a8f835964e10ae (diff)
downloadgtk+-36a28d616ff62275781083d70ad89da1ebd63768.tar.gz
win32: Ignore client requested window move/size during SIZEMOVE
This will just be fighting the user like in e.g. https://bugzilla.gnome.org/show_bug.cgi?id=64428
Diffstat (limited to 'gdk/win32')
-rw-r--r--gdk/win32/gdkevents-win32.c13
-rw-r--r--gdk/win32/gdkglobals-win32.c1
-rw-r--r--gdk/win32/gdkprivate-win32.h2
-rw-r--r--gdk/win32/gdkwindow-win32.c5
4 files changed, 19 insertions, 2 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index bc2f8a5204..3777910b06 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -2660,13 +2660,19 @@ gdk_event_translate (MSG *msg,
case WM_ENTERSIZEMOVE:
case WM_ENTERMENULOOP:
+ if (msg->message == WM_ENTERSIZEMOVE)
+ _modal_move_resize_window = msg->hwnd;
+
_gdk_win32_begin_modal_call ();
break;
case WM_EXITSIZEMOVE:
case WM_EXITMENULOOP:
if (_modal_operation_in_progress)
- _gdk_win32_end_modal_call ();
+ {
+ _modal_move_resize_window = NULL;
+ _gdk_win32_end_modal_call ();
+ }
break;
case WM_CAPTURECHANGED:
@@ -2674,7 +2680,10 @@ gdk_event_translate (MSG *msg,
select move/size in the menu and then click somewhere without
moving/resizing. We work around this using WM_CAPTURECHANGED. */
if (_modal_operation_in_progress)
- _gdk_win32_end_modal_call ();
+ {
+ _modal_move_resize_window = NULL;
+ _gdk_win32_end_modal_call ();
+ }
break;
case WM_WINDOWPOSCHANGING:
diff --git a/gdk/win32/gdkglobals-win32.c b/gdk/win32/gdkglobals-win32.c
index f9b2c024a5..1a876d0ec2 100644
--- a/gdk/win32/gdkglobals-win32.c
+++ b/gdk/win32/gdkglobals-win32.c
@@ -79,6 +79,7 @@ gint _gdk_input_ignore_wintab = FALSE;
gint _gdk_max_colors = 0;
gboolean _modal_operation_in_progress = FALSE;
+HWND _modal_move_resize_window = NULL;
gboolean _ignore_destroy_clipboard = FALSE;
HGLOBAL _delayed_rendering_data = NULL;
diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h
index 0bfcd3fd9b..9ecfc6e3f9 100644
--- a/gdk/win32/gdkprivate-win32.h
+++ b/gdk/win32/gdkprivate-win32.h
@@ -343,6 +343,8 @@ extern gint _gdk_max_colors;
/* TRUE while a modal sizing, moving, or dnd operation is in progress */
extern gboolean _modal_operation_in_progress;
+extern HWND _modal_move_resize_window;
+
/* TRUE when we are emptying the clipboard ourselves */
extern gboolean _ignore_destroy_clipboard;
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index 449a286d64..b08d74b570 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -1201,6 +1201,11 @@ gdk_win32_window_move_resize (GdkWindow *window,
gint width,
gint height)
{
+ /* We ignore changes to the window being moved or resized by the
+ user, as we don't want to fight the user */
+ if (GDK_WINDOW_HWND (window) == _modal_move_resize_window)
+ return;
+
if (with_move && (width < 0 && height < 0))
{
gdk_win32_window_move (window, x, y);