[meld/ui-next] Move open-externally to GAction



commit 9f2394c9ab3612ae169d7d01f6d1abf083a0dd04
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Fri Feb 22 11:48:44 2019 +1000

    Move open-externally to GAction

 data/ui/dirdiff-ui.xml      |  3 ---
 data/ui/filediff-ui.xml     |  4 ----
 data/ui/vcview-ui.xml       |  4 ----
 meld/dirdiff.py             | 11 ++++-------
 meld/filediff.py            | 12 ++++++------
 meld/melddoc.py             |  3 ---
 meld/meldwindow.py          |  7 -------
 meld/resources/gtk/menus.ui |  7 +++++++
 meld/vcview.py              | 15 +++++----------
 9 files changed, 22 insertions(+), 44 deletions(-)
---
diff --git a/data/ui/dirdiff-ui.xml b/data/ui/dirdiff-ui.xml
index d7299842..8aaebd29 100644
--- a/data/ui/dirdiff-ui.xml
+++ b/data/ui/dirdiff-ui.xml
@@ -17,7 +17,6 @@
         <menuitem action="DirDelete" />
         <separator/>
         <menuitem action="DirCompare" />
-        <menuitem action="OpenExternal" />
       </placeholder>
     </menu>
 
@@ -51,8 +50,6 @@
     <menuitem action="DirCopyLeft" />
     <menuitem action="DirCopyRight" />
     <menuitem action="DirDelete" />
-    <separator/>
-    <menuitem action="OpenExternal" />
   </popup>
 
   <popup name="CustomPopup">
diff --git a/data/ui/filediff-ui.xml b/data/ui/filediff-ui.xml
index 55c69509..f5b0be0d 100644
--- a/data/ui/filediff-ui.xml
+++ b/data/ui/filediff-ui.xml
@@ -25,8 +25,6 @@
         <menuitem action="MergeFromLeft"/>
         <menuitem action="MergeFromRight"/>
         <menuitem action="MergeAll"/>
-        <separator/>
-        <menuitem action="OpenExternal"/>
       </placeholder>
     </menu>
     <menu action="ViewMenu">
@@ -50,8 +48,6 @@
     <separator/>
     <menuitem action="SplitAdd"/>
     <menuitem action="SplitClear"/>
-    <separator/>
-    <menuitem action="OpenExternal" />
   </popup>
 
 </ui>
diff --git a/data/ui/vcview-ui.xml b/data/ui/vcview-ui.xml
index 3f86bc40..005c14b5 100644
--- a/data/ui/vcview-ui.xml
+++ b/data/ui/vcview-ui.xml
@@ -14,8 +14,6 @@
         <menuitem action="VcDeleteLocally" />
         <separator/>
         <menuitem action="VcResolved" />
-        <separator/>
-        <menuitem action="OpenExternal" />
       </placeholder>
     </menu>
     <menu action="ViewMenu">
@@ -71,8 +69,6 @@
     <menuitem action="VcDeleteLocally" />
     <separator/>
     <menuitem action="VcResolved" />
-    <separator/>
-    <menuitem action="OpenExternal" />
   </popup>
 </ui>
 
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index 23059d68..b85621d9 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -413,6 +413,7 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
         # Manually handle GAction additions
         actions = (
             ('next-change', self.action_next_change),
+            ('open-external', self.action_open_external),
             ('previous-change', self.action_previous_change),
             ('refresh', self.action_refresh),
         )
@@ -1155,16 +1156,12 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
                 is_valid and not busy and pane > 0)
             get_action("DirCopyRight").set_sensitive(
                 is_valid and not busy and pane + 1 < self.num_panes)
-            if self.main_actiongroup:
-                act = self.main_actiongroup.get_action("OpenExternal")
-                act.set_sensitive(is_valid)
+            self.set_action_enabled("open-external", is_valid)
         else:
             for action in ("DirCompare", "DirCopyLeft", "DirCopyRight",
                            "DirDelete", "Hide"):
                 get_action(action).set_sensitive(False)
-            if self.main_actiongroup:
-                act = self.main_actiongroup.get_action("OpenExternal")
-                act.set_sensitive(False)
+            self.set_action_enabled("open-external", False)
 
     @Template.Callback()
     def on_treeview_cursor_changed(self, view):
@@ -1352,7 +1349,7 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
     def on_button_delete_clicked(self, button):
         self.delete_selected()
 
-    def open_external(self):
+    def action_open_external(self, *args):
         pane = self._get_focused_pane()
         if pane is None:
             return
diff --git a/meld/filediff.py b/meld/filediff.py
index 86fe49aa..79ddb9be 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -280,6 +280,7 @@ class FileDiff(Gtk.VBox, MeldDoc):
         actions = (
             ('format-as-patch', self.action_format_as_patch),
             ('next-change', self.action_next_change),
+            ('open-external', self.action_open_external),
             ('previous-change', self.action_previous_change),
             ('refresh', self.action_refresh),
             ('revert', self.action_revert),
@@ -902,12 +903,11 @@ class FileDiff(Gtk.VBox, MeldDoc):
         self.move_cursor_pane(pane, new_pane)
 
     def _set_external_action_sensitivity(self):
+        # FIXME: This sensitivity is very confused. Essentially, it's always
+        # enabled because we don't unset focus_pane, but the action uses the
+        # current pane focus (i.e., _get_focused_pane) instead of focus_pane.
         have_file = self.focus_pane is not None
-        try:
-            self.main_actiongroup.get_action("OpenExternal").set_sensitive(
-                have_file)
-        except AttributeError:
-            pass
+        self.set_action_enabled("open-external", have_file)
 
     def on_textview_drag_data_received(
             self, widget, context, x, y, selection_data, info, time):
@@ -1113,7 +1113,7 @@ class FileDiff(Gtk.VBox, MeldDoc):
         self.recompute_label()
 
     @with_focused_pane
-    def open_external(self, pane):
+    def action_open_external(self, pane, *args):
         if not self.textbuffer[pane].data.gfile:
             return
         pos = self.textbuffer[pane].props.cursor_position
diff --git a/meld/melddoc.py b/meld/melddoc.py
index 74939519..b7249d9e 100644
--- a/meld/melddoc.py
+++ b/meld/melddoc.py
@@ -169,9 +169,6 @@ class MeldDoc(LabeledObjectMixin, GObject.GObject):
             f.query_info_async(query_attrs, 0, GLib.PRIORITY_LOW, None,
                                open_cb, None)
 
-    def open_external(self):
-        pass
-
     def on_find_activate(self, *extra):
         pass
 
diff --git a/meld/meldwindow.py b/meld/meldwindow.py
index 051245ae..bbc90cae 100644
--- a/meld/meldwindow.py
+++ b/meld/meldwindow.py
@@ -86,10 +86,6 @@ class MeldWindow(Gtk.ApplicationWindow):
                 self.on_menu_go_to_line_activate),
 
             ("ChangesMenu", None, _("_Changes")),
-            ("OpenExternal", None, _("Open Externally"), None,
-                _("Open selected file or directory in the default external "
-                  "application"),
-                self.on_open_external),
 
             ("ViewMenu", None, _("_View")),
             ("FileStatus", None, _("File Status")),
@@ -374,9 +370,6 @@ class MeldWindow(Gtk.ApplicationWindow):
     def on_menu_edit_up_activate(self, *args):
         self.current_doc().next_diff(Gdk.ScrollDirection.UP)
 
-    def on_open_external(self, *args):
-        self.current_doc().open_external()
-
     def action_stop(self, *args):
         self.current_doc().action_stop()
 
diff --git a/meld/resources/gtk/menus.ui b/meld/resources/gtk/menus.ui
index 8a0f8709..f262fa7b 100644
--- a/meld/resources/gtk/menus.ui
+++ b/meld/resources/gtk/menus.ui
@@ -55,6 +55,13 @@
       <attribute name="id">submenu-section</attribute>
       <submenu>
         <attribute name="label" translatable="yes">Tools</attribute>
+        <section>
+          <attribute name="id">document-tool-section</attribute>
+          <item>
+            <attribute name="label" translatable="yes">Open Externally</attribute>
+            <attribute name="action">view.open-external</attribute>
+          </item>
+        </section>
         <section>
           <attribute name="id">tool-section</attribute>
           <item>
diff --git a/meld/vcview.py b/meld/vcview.py
index d983af90..f5a16105 100644
--- a/meld/vcview.py
+++ b/meld/vcview.py
@@ -196,6 +196,7 @@ class VcView(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
         # Manually handle GAction additions
         actions = (
             ('next-change', self.action_next_change),
+            ('open-external', self.action_open_external),
             ('previous-change', self.action_previous_change),
             ('refresh', self.action_refresh),
         )
@@ -251,20 +252,14 @@ class VcView(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
                 self.actiongroup.get_action(
                     self.state_actions[s][0]).set_active(True)
 
-    def _set_external_action_sensitivity(self, focused):
-        try:
-            self.main_actiongroup.get_action("OpenExternal").set_sensitive(
-                focused)
-        except AttributeError:
-            pass
-
     def on_container_switch_in_event(self, ui, window):
         super().on_container_switch_in_event(ui, window)
-        self._set_external_action_sensitivity(True)
+        # FIXME: open-external should be tied to having a treeview selection
+        self.set_action_enabled("open-external", True)
         self.scheduler.add_task(self.on_treeview_cursor_changed)
 
     def on_container_switch_out_event(self, ui, window):
-        self._set_external_action_sensitivity(False)
+        self.set_action_enabled("open-external", False)
         super().on_container_switch_out_event(ui, window)
 
     def populate_vcs_for_location(self, location):
@@ -744,7 +739,7 @@ class VcView(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
         for f in files:
             self.run_diff(f)
 
-    def open_external(self):
+    def action_open_external(self, *args):
         self._open_files(self._get_selected_files())
 
     def refresh(self):


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