[gtk/win32.modal: 278/278] gdk/Win32: Fix mouse pointer capture
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/win32.modal: 278/278] gdk/Win32: Fix mouse pointer capture
- Date: Fri, 16 Oct 2020 02:04:49 +0000 (UTC)
commit 2cc650ced267e5659c4f6435484bafdf5543b3ba
Author: Chun-wei Fan <fanchunwei src gnome org>
Date: Thu Oct 8 15:55:29 2020 +0800
gdk/Win32: Fix mouse pointer capture
Call SetCapture() explcitly for the (new) modal window so that we make the
modal window respond to mouse input, and also call SetCapture() to the parent
of the transient window that we are destroying so that mouse input capture is
returned to the parent window.
This attempts to fix the following:
* Upon creating a new modal window, the new modal window does not receive
pointer input unless one switches to another program and back
* Upon closing a transient window, the parent window that activated the
transient window does not receive pointer input unless one switches to
another and back
gdk/win32/gdkevents-win32.c | 5 ++++-
gdk/win32/gdksurface-win32.c | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 24c300f932..8652f8c5f3 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -2901,7 +2901,10 @@ gdk_event_translate (MSG *msg,
if (impl->transient_owner &&
GetForegroundWindow () == GDK_SURFACE_HWND (window))
- SetForegroundWindow (GDK_SURFACE_HWND (impl->transient_owner));
+ {
+ SetForegroundWindow (GDK_SURFACE_HWND (impl->transient_owner));
+ SetCapture (GDK_SURFACE_HWND (impl->transient_owner));
+ }
}
if (!(windowpos->flags & SWP_NOCLIENTSIZE))
diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c
index 9ecbb6dbad..076e18aac1 100644
--- a/gdk/win32/gdksurface-win32.c
+++ b/gdk/win32/gdksurface-win32.c
@@ -4828,7 +4828,10 @@ gdk_win32_toplevel_set_property (GObject *object,
GDK_SURFACE (surface)->modal_hint = g_value_get_boolean (value);
if (GDK_SURFACE (surface)->modal_hint)
- _gdk_push_modal_window (surface);
+ {
+ SetCapture (GDK_SURFACE_HWND (surface));
+ _gdk_push_modal_window (surface);
+ }
g_object_notify_by_pspec (G_OBJECT (surface), pspec);
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]