From a2ea7b40e23f9a28a97f6c9011b7f236c297b8bf Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 15 Nov 2022 16:49:59 +0100 Subject: [PATCH] Don't reload document if opening the same (#1242) --- novelwriter/gui/doceditor.py | 7 ++++--- novelwriter/gui/noveltree.py | 6 +++--- novelwriter/gui/outline.py | 4 ++-- novelwriter/gui/projtree.py | 10 +++++----- novelwriter/guimain.py | 17 ++++++++++++----- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 8eded68e..b2641ce6 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -417,7 +417,7 @@ class GuiDocEditor(QTextEdit): else: self.setCursorPosition(self._nwItem.cursorPos) elif isinstance(tLine, int): - self.setCursorLine(tLine - 1) + self.setCursorLine(tLine) if self.mainConf.scrollPastEnd > 0: fSize = QFontMetrics(self.font()).lineSpacing() @@ -691,8 +691,9 @@ class GuiDocEditor(QTextEdit): if not isinstance(lineNo, int): return False - if lineNo >= 0: - theBlock = self.document().findBlockByLineNumber(lineNo) + lineIdx = lineNo - 1 # Block index is 0 offset, lineNo is 1 offset + if lineIdx >= 0: + theBlock = self.document().findBlockByLineNumber(lineIdx) if theBlock: self.setCursorPosition(theBlock.position()) logger.debug("Cursor moved to line %d", lineNo) diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index 2a022bb0..12ff53ad 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -59,7 +59,7 @@ class GuiNovelView(QWidget): # Signals for user interaction with the novel tree selectedItemChanged = pyqtSignal(str) - openDocumentRequest = pyqtSignal(str, Enum, str) + openDocumentRequest = pyqtSignal(str, Enum, str, bool) def __init__(self, mainGui): super().__init__(parent=mainGui) @@ -594,7 +594,7 @@ class GuiNovelTree(QTreeWidget): if tHandle is None: return - self.novelView.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, sTitle or "") + self.novelView.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, sTitle or "", False) return @@ -637,7 +637,7 @@ class GuiNovelTree(QTreeWidget): document editor. """ tHandle, sTitle = self.getSelectedHandle() - self.novelView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, sTitle or "") + self.novelView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, sTitle or "", True) return ## diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index bc2763d7..98d3b36e 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -55,7 +55,7 @@ logger = logging.getLogger(__name__) class GuiOutlineView(QWidget): loadDocumentTagRequest = pyqtSignal(str, Enum) - openDocumentRequest = pyqtSignal(str, Enum, str) + openDocumentRequest = pyqtSignal(str, Enum, str, bool) def __init__(self, mainGui): super().__init__(parent=mainGui) @@ -545,7 +545,7 @@ class GuiOutlineTree(QTreeWidget): tHandle, sTitle = self.getSelectedHandle() if tHandle is None: return - self.outlineView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, sTitle or "") + self.outlineView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, sTitle or "", True) return @pyqtSlot() diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index 92bdea27..3b6a38f0 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -60,7 +60,7 @@ class GuiProjectView(QWidget): # Signals for user interaction with the project tree selectedItemChanged = pyqtSignal(str) - openDocumentRequest = pyqtSignal(str, Enum, str) + openDocumentRequest = pyqtSignal(str, Enum, str, bool) # Requests for the main GUI projectSettingsRequest = pyqtSignal(int) @@ -1144,7 +1144,7 @@ class GuiProjectTree(QTreeWidget): return if tItem.isFileType(): - self.projView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "") + self.projView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "", True) else: trItem.setExpanded(not trItem.isExpanded()) @@ -1190,11 +1190,11 @@ class GuiProjectTree(QTreeWidget): if isFile: aOpenDoc = ctxMenu.addAction(self.tr("Open Document")) aOpenDoc.triggered.connect( - lambda: self.projView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "") + lambda: self.projView.openDocumentRequest.emit(tHandle, nwDocMode.EDIT, "", True) ) aViewDoc = ctxMenu.addAction(self.tr("View Document")) aViewDoc.triggered.connect( - lambda: self.projView.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "") + lambda: self.projView.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "", False) ) ctxMenu.addSeparator() @@ -1324,7 +1324,7 @@ class GuiProjectTree(QTreeWidget): return if tItem.isFileType(): - self.projView.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "") + self.projView.openDocumentRequest.emit(tHandle, nwDocMode.VIEW, "", False) return diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 92b7c9cf..3a5d278d 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -596,14 +596,21 @@ class GuiMain(QMainWindow): logger.debug("Requested item '%s' is not a document", tHandle) return False + cHandle = self.docEditor.docHandle() + if cHandle == tHandle: + self.docEditor.setCursorLine(tLine) + if changeFocus: + self.docEditor.setFocus() + return True + self.closeDocument(beforeOpen=True) self._changeView(nwView.EDITOR) if self.docEditor.loadText(tHandle, tLine): - if changeFocus: - self.docEditor.setFocus() self.theProject.data.setLastHandle(tHandle, "editor") self.projView.setSelectedHandle(tHandle, doScroll=doScroll) self.novelView.setActiveHandle(tHandle) + if changeFocus: + self.docEditor.setFocus() else: return False @@ -1476,8 +1483,8 @@ class GuiMain(QMainWindow): self.viewDocument(tHandle=tHandle, sTitle=sTitle) return - @pyqtSlot(str, Enum, str) - def _openDocument(self, tHandle, tMode, sTitle): + @pyqtSlot(str, Enum, str, bool) + def _openDocument(self, tHandle, tMode, sTitle, setFocus): """Handle an open document request from one of the tree views. """ if tHandle is not None: @@ -1486,7 +1493,7 @@ class GuiMain(QMainWindow): hItem = self.theProject.index.getItemHeader(tHandle, sTitle) if hItem is not None: tLine = hItem.line - self.openDocument(tHandle, tLine=tLine, changeFocus=False) + self.openDocument(tHandle, tLine=tLine, changeFocus=setFocus) elif tMode == nwDocMode.VIEW: self.viewDocument(tHandle=tHandle, sTitle=sTitle) return