From 45016319d02546f71a6b9220cc8c8f4ac83d4a4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20=C3=96gren?= Date: Tue, 31 Aug 2004 19:10:49 +0000 Subject: [PATCH] On Win32, do not produce tablet motion or button events while a window is MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2004-08-28 Robert Ögren On Win32, do not produce tablet motion or button events while a window is being moved or resized. (#151090, reported by Shaneyfelt) * gdk/win32/gdkprivate-win32.h * gdk/win32/gdkglobals-win32.c * gdk/win32/gdkevents-win32.c: Rename the variable resizing to _sizemove_in_progress and make it extern. * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Ignore motion and button events if _sizemove_in_progress is true. --- ChangeLog | 13 +++++++++++++ ChangeLog.pre-2-10 | 13 +++++++++++++ ChangeLog.pre-2-6 | 13 +++++++++++++ ChangeLog.pre-2-8 | 13 +++++++++++++ gdk/win32/gdkevents-win32.c | 9 ++++----- gdk/win32/gdkglobals-win32.c | 2 ++ gdk/win32/gdkinput-win32.c | 9 ++++++++- gdk/win32/gdkprivate-win32.h | 3 +++ 8 files changed, 69 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index bef8308c0b..595cf7e83d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2004-08-28 Robert Ögren + + On Win32, do not produce tablet motion or button events while a + window is being moved or resized. (#151090, reported by Shaneyfelt) + + * gdk/win32/gdkprivate-win32.h + * gdk/win32/gdkglobals-win32.c + * gdk/win32/gdkevents-win32.c: Rename the variable resizing to + _sizemove_in_progress and make it extern. + + * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Ignore + motion and button events if _sizemove_in_progress is true. + 2004-08-26 Bill Haneman * gtk/gtktreeview: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index bef8308c0b..595cf7e83d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,16 @@ +2004-08-28 Robert Ögren + + On Win32, do not produce tablet motion or button events while a + window is being moved or resized. (#151090, reported by Shaneyfelt) + + * gdk/win32/gdkprivate-win32.h + * gdk/win32/gdkglobals-win32.c + * gdk/win32/gdkevents-win32.c: Rename the variable resizing to + _sizemove_in_progress and make it extern. + + * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Ignore + motion and button events if _sizemove_in_progress is true. + 2004-08-26 Bill Haneman * gtk/gtktreeview: diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index bef8308c0b..595cf7e83d 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,16 @@ +2004-08-28 Robert Ögren + + On Win32, do not produce tablet motion or button events while a + window is being moved or resized. (#151090, reported by Shaneyfelt) + + * gdk/win32/gdkprivate-win32.h + * gdk/win32/gdkglobals-win32.c + * gdk/win32/gdkevents-win32.c: Rename the variable resizing to + _sizemove_in_progress and make it extern. + + * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Ignore + motion and button events if _sizemove_in_progress is true. + 2004-08-26 Bill Haneman * gtk/gtktreeview: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index bef8308c0b..595cf7e83d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,16 @@ +2004-08-28 Robert Ögren + + On Win32, do not produce tablet motion or button events while a + window is being moved or resized. (#151090, reported by Shaneyfelt) + + * gdk/win32/gdkprivate-win32.h + * gdk/win32/gdkglobals-win32.c + * gdk/win32/gdkevents-win32.c: Rename the variable resizing to + _sizemove_in_progress and make it extern. + + * gdk/win32/gdkinput-win32.c (_gdk_input_other_event): Ignore + motion and button events if _sizemove_in_progress is true. + 2004-08-26 Bill Haneman * gtk/gtktreeview: diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 4c0f5062dc..3fd4d1099f 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -159,7 +159,6 @@ static HKL latin_locale = NULL; #endif static gboolean in_ime_composition = FALSE; -static gboolean resizing = FALSE; static UINT resize_timer; static int debug_indent = 0; @@ -2054,7 +2053,7 @@ resize_timer_proc (HWND hwnd, UINT id, DWORD time) { - if (resizing) + if (_sizemove_in_progress) handle_stuff_while_moving_or_resizing (); } @@ -2968,12 +2967,12 @@ gdk_event_translate (GdkDisplay *display, break; case WM_ENTERSIZEMOVE: - resizing = TRUE; + _sizemove_in_progress = TRUE; resize_timer = SetTimer (NULL, 0, 20, resize_timer_proc); break; case WM_EXITSIZEMOVE: - resizing = FALSE; + _sizemove_in_progress = FALSE; KillTimer (NULL, resize_timer); break; @@ -2981,7 +2980,7 @@ gdk_event_translate (GdkDisplay *display, /* Once we've entered the moving or sizing modal loop, we won't * return to the main loop until we're done sizing or moving. */ - if (resizing && + if (_sizemove_in_progress && GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && !GDK_WINDOW_DESTROYED (window)) { diff --git a/gdk/win32/gdkglobals-win32.c b/gdk/win32/gdkglobals-win32.c index 523d5791e7..3c62647cf1 100644 --- a/gdk/win32/gdkglobals-win32.c +++ b/gdk/win32/gdkglobals-win32.c @@ -66,3 +66,5 @@ DWORD _windows_version; gint _gdk_input_ignore_wintab = TRUE; gint _gdk_max_colors = 0; + +gboolean _sizemove_in_progress = FALSE; diff --git a/gdk/win32/gdkinput-win32.c b/gdk/win32/gdkinput-win32.c index c5534d8df1..33997535e9 100644 --- a/gdk/win32/gdkinput-win32.c +++ b/gdk/win32/gdkinput-win32.c @@ -695,7 +695,7 @@ _gdk_input_enter_event (GdkWindow *window) input_window->root_y = root_y; } -/** +/* * Get the currently active keyboard modifiers (ignoring the mouse buttons) * We could use gdk_window_get_pointer but that function does a lot of other * expensive things besides getting the modifiers. This code is somewhat based @@ -781,6 +781,13 @@ _gdk_input_other_event (GdkEvent *event, switch (msg->message) { case WT_PACKET: + /* Don't produce any button or motion events while a window is being + * moved or resized, see bug #151090. */ + if (_sizemove_in_progress) + { + GDK_NOTE (EVENTS_OR_INPUT, g_print ("...ignored when moving/sizing\n")); + return FALSE; + } if (window == _gdk_parent_root && x_grab_window == NULL) { GDK_NOTE (EVENTS_OR_INPUT, g_print ("...is root\n")); diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h index a950c58ec0..78ce8e8739 100644 --- a/gdk/win32/gdkprivate-win32.h +++ b/gdk/win32/gdkprivate-win32.h @@ -497,6 +497,9 @@ extern gint _gdk_max_colors; #define GDK_WIN32_COLORMAP_DATA(cmap) ((GdkColormapPrivateWin32 *) GDK_COLORMAP (cmap)->windowing_data) +/* TRUE while a user-initiated window move or resize operation is in progress */ +extern gboolean _sizemove_in_progress; + /* Initialization */ void _gdk_windowing_window_init (void); void _gdk_visual_init (void);