[gimp] Bug 780979 - Fullscreen windows with WS_EX_NOACTIVATE | WS_EX_TRANSPARENT ...



commit fb5354c9e55a789f0b908d7361fdc41c70e08d57
Author: Ell <ell_se yahoo com>
Date:   Sun Oct 29 15:08:07 2017 -0400

    Bug 780979 - Fullscreen windows with WS_EX_NOACTIVATE | WS_EX_TRANSPARENT ...
    
    ... interfere with GIMP UI events
    
    Add a GTK+ patch to ignore top-level transparent windows when
    looking for the top-level GDK window at a certain pointer location,
    in the Win32 GDK backend.

 build/windows/patches/gtk+-2.24-bug780979.patch |   32 +++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)
---
diff --git a/build/windows/patches/gtk+-2.24-bug780979.patch b/build/windows/patches/gtk+-2.24-bug780979.patch
new file mode 100644
index 0000000..40c726e
--- /dev/null
+++ b/build/windows/patches/gtk+-2.24-bug780979.patch
@@ -0,0 +1,32 @@
+--- a/gdk/win32/gdkwindow-win32.c
++++ b/gdk/win32/gdkwindow-win32.c
+@@ -2767,6 +2767,10 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
+        * WindowFromPoint() can find our windows, we follow similar logic
+        * here, and ignore invisible and disabled windows.
+        */
++      UINT cwp_flags = CWP_SKIPDISABLED  |
++                       CWP_SKIPINVISIBLE |
++                       CWP_SKIPTRANSPARENT;
++
+       hwnd = GetDesktopWindow ();
+       do {
+         window = gdk_win32_handle_table_lookup ((GdkNativeWindow) hwnd);
+@@ -2777,8 +2781,7 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
+           break;
+ 
+         screen_to_client (hwnd, screen_pt, &client_pt);
+-        hwndc = ChildWindowFromPointEx (hwnd, client_pt, CWP_SKIPDISABLED  |
+-                                                         CWP_SKIPINVISIBLE);
++        hwndc = ChildWindowFromPointEx (hwnd, client_pt, cwp_flags);
+ 
+       /* Verify that we're really inside the client area of the window */
+       if (hwndc != hwnd)
+@@ -2789,6 +2792,8 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
+             hwndc = hwnd;
+         }
+ 
++        /* Only ignore top-level transparent windows */
++        cwp_flags &= ~CWP_SKIPTRANSPARENT;
+       } while (hwndc != hwnd && (hwnd = hwndc, 1));
+ 
+     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]