Angel Ezquerra  committed d533e14

reporegistry: Make sure that the item corresponding to the active tab is visible

This also modifies the reporegistry.expand() method so that it can receive an
optional repotreeitem that will be expanded. If no item is passed, the behaviour
is the same as before (i.e. the top level items are expanded).

  • Participants
  • Parent commits 0b1377c
  • Branches stable

Comments (0)

Files changed (1)

File tortoisehg/hgqt/

         self._pendingReloadModel = False
-    def expand(self):
-        self.tview.expandToDepth(0)
+    def expand(self, it=None):
+        if not it:
+            self.tview.expandToDepth(0)
+        else:
+            # Create a list of ancestors (including the selected item)
+            from repotreeitem import RepoGroupItem
+            itchain = [it]
+            while(not isinstance(itchain[-1], RepoGroupItem)):
+                itchain.append(itchain[-1].parent())
+            # Starting from the topmost ancestor (a root item), expand the
+            # ancestors one by one
+            m = self.tview.model()
+            idx = self.tview.rootIndex()
+            for it in reversed(itchain):
+                idx = m.index(it.row(), 0, idx)
+                self.tview.expand(idx)
     def addRepo(self, root):
         'workbench has opened a new repowidget, ensure it is in the registry'
             self.tview.dataChanged(QModelIndex(), QModelIndex())
+            # Make sure that the active tab is visible by expanding its parent
+            self.expand(it.parent())
     def showPaths(self, show):
         self.tview.setColumnHidden(1, not show)
         self.tview.setHeaderHidden(not show)
     def removeSelected(self):
     @pyqtSlot(QString, QString)
     def shortNameChanged(self, uroot, uname):
         it = self.tview.model().getRepoItem(hglib.fromunicode(uroot))