Commit 2bbeda64 authored by Peter Tyser's avatar Peter Tyser Committed by Kai Willadsen

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: 's avatarPeter Tyser <ptyser@gmail.com>
parent e3dbf8d2
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment