[meld/ui-next] filediff: Re-add cut/copy/paste actions for context menu use
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld/ui-next] filediff: Re-add cut/copy/paste actions for context menu use
- Date: Sat, 23 Mar 2019 02:04:34 +0000 (UTC)
commit e3f5075dce8ec60d3d26d2049cad6b1925625738
Author: Kai Willadsen <kai willadsen gmail com>
Date: Sun Mar 17 06:23:02 2019 +1000
filediff: Re-add cut/copy/paste actions for context menu use
We can't sanely trigger these from a context menu without first creating
actual GActions for them, so here we are.
meld/filediff.py | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index 859e641f..7d119ceb 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -288,6 +288,8 @@ class FileDiff(Gtk.VBox, MeldDoc):
actions = (
('add-sync-point', self.add_sync_point),
('clear-sync-point', self.clear_sync_points),
+ ('copy', self.action_copy),
+ ('cut', self.action_cut),
('file-previous-conflict', self.action_previous_conflict),
('file-next-conflict', self.action_next_conflict),
('file-push-left', self.action_push_change_left),
@@ -311,6 +313,7 @@ class FileDiff(Gtk.VBox, MeldDoc):
('next-change', self.action_next_change),
('next-pane', self.action_next_pane),
('open-external', self.action_open_external),
+ ('paste', self.action_paste),
('previous-change', self.action_previous_change),
('previous-pane', self.action_prev_pane),
('redo', self.action_redo),
@@ -343,7 +346,10 @@ class FileDiff(Gtk.VBox, MeldDoc):
for buf in self.textbuffer:
buf.undo_sequence = self.undosequence
+ buf.connect(
+ 'notify::has-selection', self.update_text_actions_sensitivity)
buf.data.file_changed_signal.connect(self.notify_file_changed)
+ self.update_text_actions_sensitivity()
self.findbar = FindBar(self.grid)
self.grid.attach(self.findbar, 0, 2, 10, 1)
@@ -1145,6 +1151,18 @@ class FileDiff(Gtk.VBox, MeldDoc):
path = self.textbuffer[pane].data.gfile.get_path()
self._open_files([path], line)
+ def update_text_actions_sensitivity(self, *args):
+ widget = self.focus_pane
+ if not widget:
+ cut, copy, paste = False, False, False
+ else:
+ cut = copy = widget.get_buffer().get_has_selection()
+ paste = widget.get_editable()
+
+ for action, enabled in zip(
+ ('cut', 'copy', 'paste'), (cut, copy, paste)):
+ self.set_action_enabled(action, enabled)
+
@with_focused_pane
def get_selected_text(self, pane):
"""Returns selected text of active pane"""
@@ -2084,6 +2102,32 @@ class FileDiff(Gtk.VBox, MeldDoc):
self.queue_draw()
self.recompute_label()
+ @with_focused_pane
+ def action_cut(self, pane, *args):
+ buffer = self.textbuffer[pane]
+ view = self.textview[pane]
+
+ clipboard = view.get_clipboard(Gdk.SELECTION_CLIPBOARD)
+ buffer.cut_clipboard(clipboard, view.get_editable())
+ view.scroll_to_mark(buffer.get_insert(), 0.1, False, 0, 0)
+
+ @with_focused_pane
+ def action_copy(self, pane, *args):
+ buffer = self.textbuffer[pane]
+ view = self.textview[pane]
+
+ clipboard = view.get_clipboard(Gdk.SELECTION_CLIPBOARD)
+ buffer.copy_clipboard(clipboard)
+
+ @with_focused_pane
+ def action_paste(self, pane, *args):
+ buffer = self.textbuffer[pane]
+ view = self.textview[pane]
+
+ clipboard = view.get_clipboard(Gdk.SELECTION_CLIPBOARD)
+ buffer.paste_clipboard(clipboard, None, view.get_editable())
+ view.scroll_to_mark(buffer.get_insert(), 0.1, False, 0, 0)
+
def copy_chunk(self, src, dst, chunk, copy_up):
b0, b1 = self.textbuffer[src], self.textbuffer[dst]
start = b0.get_iter_at_line_or_eof(chunk.start_a)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]