[meld] Only transfer focus once when opening multiple file diffs



commit 2bbeda648e6291fcf956162cfc36afe3a1dca09e
Author: Peter Tyser <ptyser gmail com>
Date:   Wed Apr 11 01:10:51 2012 -0500

    Only transfer focus once when opening multiple file diffs
    
    Currently if a user opens multiple file diffs at the same time from a
    DirDiff or VcView the following happens:
    - the 1st diff is opened in a new tab and focus is moved to this tab
    - the 2nd diff is opened in a new tab and focus is moved to this tab
    - the 3rd diff is opened in a new tab and focus is moved to this tab
    - etc...
    
    This behavior has 2 shortcomings:
    1. The user is presented with a window that cycles focus through
       multiple diff tabs which is visually jarring.
    2. During this period of time when tabs are being cycled through the
       user can't interact with Meld - the focus shifts too fast to allow
       the user to do anything.  This is especially painful if the user
       initiates a large number of diffs, the diffs are on a slow filesystem
       (eg over a slow NFS share), or if the diffs are of version-controlled
       files (VC-diffs have more overhead, which slows them down).
    
    To resolve these issues, only transfer focus to a new tab if the current
    tab is a DirDiff or VcView.  This results in the following behavior:
    - the 1st diff is opened in a new tab and focus is moved to this tab
    - the 2nd diff is opened in a new background tab
    - the 3rd diff is opened in a new background tab
    - etc...
    
    While the background tabs are being opened Meld is still usable.
    
    Signed-off-by: Peter Tyser <ptyser gmail com>

 meld/meldwindow.py |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)
---
diff --git a/meld/meldwindow.py b/meld/meldwindow.py
index 55e3061..5fe6ce5 100644
--- a/meld/meldwindow.py
+++ b/meld/meldwindow.py
@@ -578,7 +578,14 @@ class MeldWindow(gnomeglade.Component):
     def _append_page(self, page, icon):
         nbl = notebooklabel.NotebookLabel(icon, "", lambda b: self.try_remove_page(page))
         self.notebook.append_page( page.widget, nbl)
-        self.notebook.set_current_page( self.notebook.page_num(page.widget) )
+
+        # Change focus to the newly created page only if the user is on a
+        # DirDiff or VcView page.  This prevents cycling through X pages
+        # when X diffs are initiated.
+        if isinstance(self.current_doc(), dirdiff.DirDiff) or \
+           isinstance(self.current_doc(), vcview.VcView):
+            self.notebook.set_current_page(self.notebook.page_num(page.widget))
+
         self.scheduler.add_scheduler(page.scheduler)
         page.connect("label-changed", self.on_notebook_label_changed)
         page.connect("file-changed", self.on_file_changed)



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