[meld/deprecation-cleanup: 2/48] vcview: Update popup handling for 3.22 deprecations



commit 5c9d81ef661fcc8fc63573d0d69f64171682ddfc
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Thu Nov 29 06:26:32 2018 +1000

    vcview: Update popup handling for 3.22 deprecations
    
    Normally I wouldn't care that much, but these dump CRITICALs to the
    terminal *constantly* under Wayland, which is extremely annoying.

 meld/vcview.py | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)
---
diff --git a/meld/vcview.py b/meld/vcview.py
index b8ad2c69..12ed6289 100644
--- a/meld/vcview.py
+++ b/meld/vcview.py
@@ -493,25 +493,36 @@ class VcView(MeldDoc, Component):
         self.emit("create-diff",
                   [Gio.File.new_for_path(d) for d in diffs], kwargs)
 
-    def popup_treeview_menu(self, widget, event):
-        if event:
-            button = event.button
-            time = event.time
-        else:
-            button = 0
-            time = Gtk.get_current_event_time()
-        self.popup_menu.popup(None, None, None, None, button, time)
-
     def on_treeview_popup_menu(self, treeview):
-        self.popup_treeview_menu(treeview, None)
+        cursor_path, cursor_col = treeview.get_cursor()
+        if not cursor_path:
+            self.popup_menu.popup_at_pointer(Gtk.get_current_event())
+            return True
+
+        # We always want to pop up to the right of the first column,
+        # ignoring the actual cursor column location.
+        rect = treeview.get_background_area(
+            cursor_path, treeview.get_column(0))
+
+        self.popup_menu.popup_at_rect(
+            treeview.get_bin_window(),
+            rect,
+            Gdk.Gravity.SOUTH_EAST,
+            Gdk.Gravity.NORTH_WEST,
+            Gtk.get_current_event(),
+        )
         return True
 
     def on_button_press_event(self, treeview, event):
         if (event.triggers_context_menu() and
                 event.type == Gdk.EventType.BUTTON_PRESS):
+
+            treeview.grab_focus()
+
             path = treeview.get_path_at_pos(int(event.x), int(event.y))
             if path is None:
                 return False
+
             selection = treeview.get_selection()
             model, rows = selection.get_selected_rows()
 
@@ -520,7 +531,7 @@ class VcView(MeldDoc, Component):
                 selection.select_path(path[0])
                 treeview.set_cursor(path[0])
 
-            self.popup_treeview_menu(treeview, event)
+            self.popup_menu.popup_at_pointer(event)
             return True
         return False
 


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