[meld: 1/2] Closes: https://gitlab.gnome.org/GNOME/meld/-/issues/694




commit 53349c298b94aa571048cfed0bf86de8b69abd43
Author: Dmytro Bagrii <dimich dmb gmail com>
Date:   Fri Jul 29 21:33:43 2022 +0300

    Closes: https://gitlab.gnome.org/GNOME/meld/-/issues/694
    
    Some window managers may grab Button1. This causes LeaveNotify and
    immediate EnterNotify events delivery before ButtonPress event when
    left button pressed.
    
    Handle EnterNotify and update pointer chunk the same way as for MotionNotify.
    
    Signed-off-by: Dmytro Bagrii <dimich dmb gmail com>

 meld/actiongutter.py | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/meld/actiongutter.py b/meld/actiongutter.py
index 1abc23db..e9ea5bc3 100644
--- a/meld/actiongutter.py
+++ b/meld/actiongutter.py
@@ -174,6 +174,7 @@ class ActionGutter(Gtk.DrawingArea):
 
     def do_realize(self):
         self.set_events(
+            Gdk.EventMask.ENTER_NOTIFY_MASK |
             Gdk.EventMask.LEAVE_NOTIFY_MASK |
             Gdk.EventMask.POINTER_MOTION_MASK |
             Gdk.EventMask.BUTTON_PRESS_MASK |
@@ -187,14 +188,14 @@ class ActionGutter(Gtk.DrawingArea):
 
         return Gtk.DrawingArea.do_realize(self)
 
-    def do_motion_notify_event(self, event):
+    def update_pointer_chunk(self, x, y):
         # This is the simplest button/intersection implementation in
         # the world, but it basically works for our purposes.
         for button in self.buttons:
             x1, y1, x2, y2, chunk = button
 
             # Check y first; it's more likely to be out of range
-            if y1 <= event.y <= y2 and x1 <= event.x <= x2:
+            if y1 <= y <= y2 and x1 <= x <= x2:
                 new_pointer_chunk = chunk
                 break
         else:
@@ -204,6 +205,12 @@ class ActionGutter(Gtk.DrawingArea):
             self.pointer_chunk = new_pointer_chunk
             self.queue_draw()
 
+    def do_motion_notify_event(self, event):
+        self.update_pointer_chunk(event.x, event.y)
+
+    def do_enter_notify_event(self, event):
+        self.update_pointer_chunk(event.x, event.y)
+
     def do_leave_notify_event(self, event):
         if self.pointer_chunk:
             self.pointer_chunk = None


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