[meld] Move undo-related logic to FileDiff and improve undo signal handling
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Move undo-related logic to FileDiff and improve undo signal handling
- Date: Sat, 5 May 2012 21:20:52 +0000 (UTC)
commit c8eb4d65c0bbbf3168250a2672c1f786e650cd67
Author: Kai Willadsen <kai willadsen gmail com>
Date: Wed Sep 28 14:14:14 2011 +1000
Move undo-related logic to FileDiff and improve undo signal handling
Previously the undo logic relied on only ever getting an undo signal
from the currently focussed tab, but connected to everything. With this
change, we only listen to the current tab.
meld/filediff.py | 11 +++++++++++
meld/melddoc.py | 10 ----------
meld/meldwindow.py | 28 ++++++++++++++++++++--------
3 files changed, 31 insertions(+), 18 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index fbbca86..1eaaee0 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -38,6 +38,7 @@ import melddoc
import patchdialog
import paths
import merge
+import undo
from meldapp import app
from util.sourceviewer import srcviewer
@@ -158,6 +159,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
self.textview_overwrite_handlers = [ t.connect("toggle-overwrite", self.on_textview_toggle_overwrite) for t in self.textview ]
self.textbuffer = [v.get_buffer() for v in self.textview]
self.buffer_texts = [meldbuffer.BufferLines(b) for b in self.textbuffer]
+ self.undosequence = undo.UndoSequence()
self.text_filters = []
self.create_text_filters()
app.connect("text-filters-changed", self.on_text_filters_changed)
@@ -743,6 +745,15 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
#
# text buffer undo/redo
#
+
+ def on_undo_activate(self):
+ if self.undosequence.can_undo():
+ self.undosequence.undo()
+
+ def on_redo_activate(self):
+ if self.undosequence.can_redo():
+ self.undosequence.redo()
+
def on_textbuffer__begin_user_action(self, *buffer):
self.undosequence.begin_group()
diff --git a/meld/melddoc.py b/meld/melddoc.py
index b1fad18..82b191a 100644
--- a/meld/melddoc.py
+++ b/meld/melddoc.py
@@ -21,7 +21,6 @@ import sys
import gobject
import task
-import undo
import gtk
import os
from gettext import gettext as _
@@ -48,7 +47,6 @@ class MeldDoc(gobject.GObject):
def __init__(self, prefs):
gobject.GObject.__init__(self)
- self.undosequence = undo.UndoSequence()
self.scheduler = task.FifoScheduler()
self.prefs = prefs
self.prefs.notify_add(self.on_preference_changed)
@@ -91,14 +89,6 @@ class MeldDoc(gobject.GObject):
def open_external(self):
pass
- def on_undo_activate(self):
- if self.undosequence.can_undo():
- self.undosequence.undo()
-
- def on_redo_activate(self):
- if self.undosequence.can_redo():
- self.undosequence.redo()
-
def on_refresh_activate(self, *extra):
self.on_reload_activate(self, *extra)
diff --git a/meld/meldwindow.py b/meld/meldwindow.py
index aa6bfc2..31a7814 100644
--- a/meld/meldwindow.py
+++ b/meld/meldwindow.py
@@ -218,6 +218,7 @@ class MeldWindow(gnomeglade.Component):
self.ui.ensure_update()
self.widget.show()
self.diff_handler = None
+ self.undo_handlers = tuple()
self.widget.connect('focus_in_event', self.on_focus_change)
self.widget.connect('focus_out_event', self.on_focus_change)
@@ -314,15 +315,30 @@ class MeldWindow(gnomeglade.Component):
self.actiongroup.get_action("MoveTabNext").set_sensitive(have_next_tab)
def on_switch_page(self, notebook, page, which):
- newdoc = notebook.get_nth_page(which).get_data("pyobject")
- newseq = newdoc.undosequence
oldidx = notebook.get_current_page()
if oldidx >= 0:
olddoc = notebook.get_nth_page(oldidx).get_data("pyobject")
olddoc.disconnect(self.diff_handler)
olddoc.on_container_switch_out_event(self.ui)
- self.actiongroup.get_action("Undo").set_sensitive(newseq.can_undo())
- self.actiongroup.get_action("Redo").set_sensitive(newseq.can_redo())
+ if self.undo_handlers:
+ undoseq = olddoc.undosequence
+ for handler in self.undo_handlers:
+ undoseq.disconnect(handler)
+ self.undo_handlers = tuple()
+
+ newdoc = notebook.get_nth_page(which).get_data("pyobject")
+ try:
+ undoseq = newdoc.undosequence
+ can_undo = undoseq.can_undo()
+ can_redo = undoseq.can_redo()
+ undo_handler = undoseq.connect("can-undo", self.on_can_undo)
+ redo_handler = undoseq.connect("can-redo", self.on_can_redo)
+ self.undo_handlers = (undo_handler, redo_handler)
+ except AttributeError:
+ can_undo, can_redo = False, False
+ self.actiongroup.get_action("Undo").set_sensitive(can_undo)
+ self.actiongroup.get_action("Redo").set_sensitive(can_redo)
+
nbl = self.notebook.get_tab_label( newdoc.widget )
self.widget.set_title(nbl.get_label_text() + " - Meld")
self.statusbar.set_doc_status("")
@@ -614,10 +630,6 @@ class MeldWindow(gnomeglade.Component):
doc = filemerge.FileMerge(app.prefs, 3)
else:
doc = filediff.FileDiff(app.prefs, len(files))
- seq = doc.undosequence
- seq.clear()
- seq.connect("can-undo", self.on_can_undo)
- seq.connect("can-redo", self.on_can_redo)
self._append_page(doc, "text-x-generic")
doc.set_files(files)
return doc
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]