From 5e8892ee7c688758515c40b5bb3ef454a10c8a25 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:39:29 +0200 Subject: [PATCH] Rewrite the tree view focus switch (#1949) --- novelwriter/guimain.py | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 1732e113..8e25e25d 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -1006,21 +1006,34 @@ class GuiMain(QMainWindow): def _switchFocus(self, paneNo: nwFocus) -> None: """Switch focus between main GUI views.""" if paneNo == nwFocus.TREE: - if self.projStack.currentWidget() is self.projView: - if self.projView.treeHasFocus(): - self._changeView(nwView.NOVEL) - self.novelView.setTreeFocus() - else: - self.projView.setTreeFocus() - elif self.projStack.currentWidget() is self.novelView: - if self.novelView.treeHasFocus(): - self._changeView(nwView.PROJECT) - self.projView.setTreeFocus() - else: - self.novelView.setTreeFocus() + # Decision Matrix + # vM | vP | fP | vN | fN | Focus + # ----|----|----|----|----|--------- + # T | T | T | F | F | Novel + # T | T | F | F | F | Project + # T | F | F | T | T | Project + # T | F | F | T | F | Novel + # T | F | F | F | F | Project + # F | T | T | F | F | Project + # F | T | F | F | F | Project + # F | F | F | T | T | Novel + # F | F | F | T | F | Novel + # F | F | F | F | F | Project + + vM = self.mainStack.currentWidget() is self.splitMain + vP = self.projStack.currentWidget() is self.projView + vN = self.projStack.currentWidget() is self.novelView + fP = self.projView.treeHasFocus() + fN = self.novelView.treeHasFocus() + + self._changeView(nwView.EDITOR) + if (vM and (vP and fP or vN and not fN)) or (not vM and vN): + self._changeView(nwView.NOVEL) + self.novelView.setTreeFocus() else: self._changeView(nwView.PROJECT) self.projView.setTreeFocus() + elif paneNo == nwFocus.DOCUMENT: self._changeView(nwView.EDITOR) hasViewer = self.splitView.isVisible() @@ -1030,9 +1043,11 @@ class GuiMain(QMainWindow): self.docEditor.setFocus() else: self.docEditor.setFocus() + elif paneNo == nwFocus.OUTLINE: self._changeView(nwView.OUTLINE) self.outlineView.setTreeFocus() + return @pyqtSlot(bool, bool, bool, bool)