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
This commit is contained in:
Alexander Larsson 2011-10-25 16:13:47 +02:00
parent 538ab4fca7
commit 36a28d616f
4 changed files with 19 additions and 2 deletions

View File

@ -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:

View File

@ -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;

View File

@ -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;

View File

@ -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);