[meld/ui-next] filediff: Move merge actions to GAction



commit d05744b7e969a6180fdda842c3d3781a68253bf7
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Fri Mar 1 08:57:29 2019 +1000

    filediff: Move merge actions to GAction

 data/ui/filediff-ui.xml       |  4 ----
 meld/filediff.py              | 26 ++++++++++++--------------
 meld/resources/gtk/menus.ui   | 15 +++++++++++++++
 meld/resources/ui/filediff.ui | 21 ---------------------
 4 files changed, 27 insertions(+), 39 deletions(-)
---
diff --git a/data/ui/filediff-ui.xml b/data/ui/filediff-ui.xml
index 28679a08..a8ec4564 100644
--- a/data/ui/filediff-ui.xml
+++ b/data/ui/filediff-ui.xml
@@ -15,10 +15,6 @@
         <menuitem action="CopyLeftDown"/>
         <menuitem action="CopyRightUp"/>
         <menuitem action="CopyRightDown"/>
-        <separator/>
-        <menuitem action="MergeFromLeft"/>
-        <menuitem action="MergeFromRight"/>
-        <menuitem action="MergeAll"/>
       </placeholder>
     </menu>
   </menubar>
diff --git a/meld/filediff.py b/meld/filediff.py
index d58f98dc..b3c883dc 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -292,6 +292,9 @@ class FileDiff(Gtk.VBox, MeldDoc):
             ('add-sync-point', self.add_sync_point),
             ('clear-sync-point', self.clear_sync_points),
             ('format-as-patch', self.action_format_as_patch),
+            ('merge-all-left', self.action_pull_all_changes_left),
+            ('merge-all-right', self.action_pull_all_changes_right),
+            ('merge-all', self.action_merge_all_changes),
             ('next-change', self.action_next_change),
             ('next-pane', self.action_next_pane),
             ('open-external', self.action_open_external),
@@ -773,18 +776,15 @@ class FileDiff(Gtk.VBox, MeldDoc):
             self._sync_vscroll(self.scrolledwindow[src].get_vadjustment(), src)
         self.scheduler.add_task(resync)
 
-    @Template.Callback()
     def action_pull_all_changes_left(self, *args):
         src, dst = self.get_action_panes(PANE_LEFT, reverse=True)
         self.pull_all_non_conflicting_changes(src, dst)
 
-    @Template.Callback()
     def action_pull_all_changes_right(self, *args):
         src, dst = self.get_action_panes(PANE_RIGHT, reverse=True)
         self.pull_all_non_conflicting_changes(src, dst)
 
-    @Template.Callback()
-    def merge_all_non_conflicting_changes(self, *args):
+    def action_merge_all_changes(self, *args):
         dst = 1
         merger = Merger()
         merger.differ = self.linediffer
@@ -1476,25 +1476,23 @@ class FileDiff(Gtk.VBox, MeldDoc):
         self.scheduler.add_task(self._diff_files(refresh=True))
 
     def _set_merge_action_sensitivity(self):
-        pane = self._get_focused_pane()
-        if pane != -1:
-            editable = self.textview[pane].get_editable()
-            mergeable = self.linediffer.has_mergeable_changes(pane)
+        if self.focus_pane:
+            editable = self.focus_pane.get_editable()
+            pane_idx = self.textview.index(self.focus_pane)
+            mergeable = self.linediffer.has_mergeable_changes(pane_idx)
         else:
             editable = False
             mergeable = (False, False)
 
-        # TODO: We need this helper everywhere.
-        def set_action_enabled(action, enabled):
-            self.actiongroup.get_action(action).set_sensitive(enabled)
+        self.set_action_enabled('merge-all-left', mergeable[0] and editable)
+        self.set_action_enabled('merge-all-right', mergeable[1] and editable)
 
-        set_action_enabled("MergeFromLeft", mergeable[0] and editable)
-        set_action_enabled("MergeFromRight", mergeable[1] and editable)
         if self.num_panes == 3 and self.textview[1].get_editable():
             mergeable = self.linediffer.has_mergeable_changes(1)
         else:
             mergeable = (False, False)
-        set_action_enabled("MergeAll", mergeable[0] or mergeable[1])
+
+        self.set_action_enabled('merge-all', mergeable[0] or mergeable[1])
 
     def on_diffs_changed(self, linediffer, chunk_changes):
 
diff --git a/meld/resources/gtk/menus.ui b/meld/resources/gtk/menus.ui
index e5a2635c..da58bfcc 100644
--- a/meld/resources/gtk/menus.ui
+++ b/meld/resources/gtk/menus.ui
@@ -60,6 +60,21 @@
       </submenu>
       <submenu>
         <attribute name="label" translatable="yes">Comparison</attribute>
+        <section>
+          <attribute name="id">merge-section</attribute>
+          <item>
+            <attribute name="label">Merge All from Left</attribute>
+            <attribute name="action">view.merge-all-left</attribute>
+          </item>
+          <item>
+            <attribute name="label">Merge All from Reft</attribute>
+            <attribute name="action">view.merge-all-right</attribute>
+          </item>
+          <item>
+            <attribute name="label">Merge All</attribute>
+            <attribute name="action">view.merge-all</attribute>
+          </item>
+        </section>
         <section>
           <attribute name="id">synchronisation-section</attribute>
           <item>
diff --git a/meld/resources/ui/filediff.ui b/meld/resources/ui/filediff.ui
index 1a64814c..e6e13605 100644
--- a/meld/resources/ui/filediff.ui
+++ b/meld/resources/ui/filediff.ui
@@ -824,26 +824,5 @@
       </object>
       <accelerator key="Delete" modifiers="GDK_MOD1_MASK"/>
     </child>
-    <child>
-      <object class="GtkAction" id="MergeFromLeft">
-        <property name="label" translatable="yes">Merge All from Left</property>
-        <property name="tooltip" translatable="yes">Merge all non-conflicting changes from the 
left</property>
-        <signal name="activate" handler="action_pull_all_changes_left" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkAction" id="MergeFromRight">
-        <property name="label" translatable="yes">Merge All from Right</property>
-        <property name="tooltip" translatable="yes">Merge all non-conflicting changes from the 
right</property>
-        <signal name="activate" handler="action_pull_all_changes_right" swapped="no"/>
-      </object>
-    </child>
-    <child>
-      <object class="GtkAction" id="MergeAll">
-        <property name="label" translatable="yes">Merge All</property>
-        <property name="tooltip" translatable="yes">Merge all non-conflicting changes from left and right 
panes</property>
-        <signal name="activate" handler="merge_all_non_conflicting_changes" swapped="no"/>
-      </object>
-    </child>
   </object>
 </interface>


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