diff options
author | Alexander Larsson <alexl@redhat.com> | 2011-10-25 16:13:47 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2011-11-10 17:41:00 +0100 |
commit | 36a28d616ff62275781083d70ad89da1ebd63768 (patch) | |
tree | 6ef72e511c19d24fc374bf0e5b9b1c7d732d37a3 /gdk/win32 | |
parent | 538ab4fca7822eadbe87987877a8f835964e10ae (diff) | |
download | gtk+-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.c | 13 | ||||
-rw-r--r-- | gdk/win32/gdkglobals-win32.c | 1 | ||||
-rw-r--r-- | gdk/win32/gdkprivate-win32.h | 2 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 5 |
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); |