From 25f9f0519f1e5a88b4d63c449dec0138a5990caa Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 30 Jul 2023 19:55:47 +0200 Subject: [PATCH 1/8] Fix raise window issue on Mac --- novelwriter/__init__.py | 2 +- novelwriter/guimain.py | 3 --- novelwriter/tools/manussettings.py | 6 ++++++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/novelwriter/__init__.py b/novelwriter/__init__.py index 2e591ee6..4731b73b 100644 --- a/novelwriter/__init__.py +++ b/novelwriter/__init__.py @@ -189,7 +189,7 @@ def main(sysArgs=None): errDlg = QErrorMessage() errDlg.resize(500, 300) errDlg.showMessage(( - "

A critical error has been encountered

" + "

A critical error was encountered

" "

novelWriter cannot start due to the following issues:

" "

 - %s

" "

Shutting down ...

" diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 2b536b8a..c0a66402 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -301,9 +301,6 @@ class GuiMain(QMainWindow): # Forward Functions self.setStatus = self.mainStatus.setStatus - # Force a show of the GUI - self.show() - # Check that config loaded fine self.reportConfErr() diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 6a031bf0..c69eb679 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -75,6 +75,7 @@ class GuiBuildSettings(QDialog): logger.debug("Create: GuiBuildSettings") self.setObjectName("GuiBuildSettings") + self.guiParent = parent self.mainGui = mainGui self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject @@ -208,8 +209,10 @@ class GuiBuildSettings(QDialog): elif role == QDialogButtonBox.AcceptRole: self._emitBuildData() self.close() + self.guiParent.raise_() # Issue #1494 elif role == QDialogButtonBox.RejectRole: self.close() + self.guiParent.raise_() # Issue #1494 return ## @@ -941,6 +944,7 @@ class _FormatTab(QWidget): def __init__(self, buildMain: GuiBuildSettings, build: BuildSettings): super().__init__(parent=buildMain) + self.buildMain = buildMain self.mainGui = buildMain.mainGui self.mainTheme = buildMain.mainGui.mainTheme @@ -1160,6 +1164,8 @@ class _FormatTab(QWidget): if theStatus: self.textFont.setText(theFont.family()) self.textSize.setValue(theFont.pointSize()) + self.buildMain.guiParent.raise_() # Issue #1494 + self.buildMain.raise_() # Issue #1494 return @pyqtSlot(int) From 1d19a900b152c53eb0c967e1568f28e99d701528 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 30 Jul 2023 21:57:27 +0200 Subject: [PATCH 2/8] Handle raise parent on all close events in build tools --- novelwriter/tools/manusbuild.py | 4 ++++ novelwriter/tools/manussettings.py | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py index 6f1b0d16..abbc51a6 100644 --- a/novelwriter/tools/manusbuild.py +++ b/novelwriter/tools/manusbuild.py @@ -65,6 +65,7 @@ class GuiManuscriptBuild(QDialog): logger.debug("Create: GuiManuscriptBuild") self.setObjectName("GuiManuscriptBuild") + self.guiParent = parent self.mainGui = mainGui self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject @@ -249,6 +250,7 @@ class GuiManuscriptBuild(QDialog): """ self._saveSettings() event.accept() + self.guiParent.raise_() # Issue #1494 self.deleteLater() return @@ -276,6 +278,8 @@ class GuiManuscriptBuild(QDialog): ) if savePath: self.buildPath.setText(savePath) + self.guiParent.raise_() # Issue #1494 + self.raise_() # Issue #1494 return @pyqtSlot() diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index c69eb679..e1ca2b05 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -209,10 +209,8 @@ class GuiBuildSettings(QDialog): elif role == QDialogButtonBox.AcceptRole: self._emitBuildData() self.close() - self.guiParent.raise_() # Issue #1494 elif role == QDialogButtonBox.RejectRole: self.close() - self.guiParent.raise_() # Issue #1494 return ## @@ -227,6 +225,7 @@ class GuiBuildSettings(QDialog): self._askToSaveBuild() self._saveSettings() event.accept() + self.guiParent.raise_() # Issue #1494 self.deleteLater() return From c41a104eca5bfcef9705173b7a5e3fd56857b30f Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 30 Jul 2023 22:06:25 +0200 Subject: [PATCH 3/8] Fix version number for mac build --- docs/source/int_source.rst | 8 +------- pkgutils.py | 8 ++++++-- setup/macos/build.sh | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/source/int_source.rst b/docs/source/int_source.rst index e9ae6cec..13838d82 100644 --- a/docs/source/int_source.rst +++ b/docs/source/int_source.rst @@ -4,7 +4,6 @@ Running from Source ******************* -.. _main website: https://novelwriter.io .. _GitHub: https://github.com/vkbo/novelWriter/releases .. _PyPi: https://pypi.org/project/novelWriter/ .. _Sphinx Docs: https://www.sphinx-doc.org/ @@ -25,11 +24,6 @@ by running: python pkgutils.py help -.. warning:: - - Calling ``setup.py install`` has been deprecated for a while, and this approach is no longer - actively supported in novelWriter either. - .. _a_source_depend: @@ -92,7 +86,7 @@ With the tool installed, run the following command from the root of the novelWri This should generate two files in the ``dist/`` folder at your current location. One with file extension ``.tar.gz`` and one with extension ``.whl``. The latter is the package you want to -install, here with example version number 2.0.7, but your may be different: +install, here with example version number 2.0.7, but yours may be different: .. code-block:: bash diff --git a/pkgutils.py b/pkgutils.py index f7e99955..499ca952 100755 --- a/pkgutils.py +++ b/pkgutils.py @@ -1857,7 +1857,7 @@ if __name__ == "__main__": "", " help Print the help message.", " pip Install all package dependencies for novelWriter using pip.", - " version Print the novelWriter version.", + " version Print the novelWriter version. Add -c for short version.", " build-clean Will attempt to delete 'build' and 'dist' folders.", "", "Additional Builds:", @@ -1914,7 +1914,11 @@ if __name__ == "__main__": if "version" in sys.argv: sys.argv.remove("version") numVers, _, _ = extractVersion(beQuiet=True) - print(numVers, end=None) + if "-c" in sys.argv: + sys.argv.remove("-c") + print(compactVersion(numVers), end=None) + else: + print(numVers, end=None) sys.exit(0) if "pip" in sys.argv: diff --git a/setup/macos/build.sh b/setup/macos/build.sh index 2915730c..4606e419 100755 --- a/setup/macos/build.sh +++ b/setup/macos/build.sh @@ -24,7 +24,7 @@ echo "Build Dir: $BUILD_DIR" pushd "$SRC_DIR" || exit 1 -VERSION="$(python3 pkgutils.py version)" +VERSION="$(python3 pkgutils.py version -c)" echo "novelWriter Version: $VERSION" # --- Prepare Files ----------------------------------------------------------------------------- # From 9d8d25fbb5c9601f5aad6d43657c80ff0ce52729 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:23:07 +0200 Subject: [PATCH 4/8] Add a util function to restack the windows --- novelwriter/guimain.py | 24 +++++++++++++++++++++++- novelwriter/tools/manusbuild.py | 5 ++--- novelwriter/tools/manussettings.py | 5 ++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index c0a66402..51a345a1 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -21,6 +21,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ +from __future__ import annotations import sys import logging @@ -31,7 +32,7 @@ from pathlib import Path from datetime import datetime from PyQt5.QtCore import Qt, QTimer, QThreadPool, pyqtSlot -from PyQt5.QtGui import QCursor, QIcon, QKeySequence +from PyQt5.QtGui import QCursor, QIcon, QKeySequence, QWindow from PyQt5.QtWidgets import ( qApp, QDialog, QFileDialog, QMainWindow, QMessageBox, QShortcut, QSplitter, QStackedWidget, QVBoxLayout, QWidget @@ -349,6 +350,27 @@ class GuiMain(QMainWindow): return True + def restackGUI(self): + """Reorder the visibility of windows.""" + subOne: list[QWindow] = [] + subTwo: list[QWindow] = [] + for window in qApp.allWindows(): + name = window.objectName() + if name == "GuiManuscriptWindow": + subOne.append(window) + elif name == "GuiBuildSettingsWindow": + subTwo.append(window) + elif name == "GuiManuscriptBuildWindow": + subTwo.append(window) + self.raise_() + for window in subOne: + if window.isExposed(): + window.raise_() + for window in subTwo: + if window.isExposed(): + window.raise_() + return + def initMain(self): """Initialise elements that depend on user settings. """ diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py index abbc51a6..4fa0afca 100644 --- a/novelwriter/tools/manusbuild.py +++ b/novelwriter/tools/manusbuild.py @@ -250,7 +250,7 @@ class GuiManuscriptBuild(QDialog): """ self._saveSettings() event.accept() - self.guiParent.raise_() # Issue #1494 + self.mainGui.restackGUI() self.deleteLater() return @@ -278,8 +278,7 @@ class GuiManuscriptBuild(QDialog): ) if savePath: self.buildPath.setText(savePath) - self.guiParent.raise_() # Issue #1494 - self.raise_() # Issue #1494 + self.mainGui.restackGUI() return @pyqtSlot() diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index e1ca2b05..989ea003 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -225,7 +225,7 @@ class GuiBuildSettings(QDialog): self._askToSaveBuild() self._saveSettings() event.accept() - self.guiParent.raise_() # Issue #1494 + self.mainGui.restackGUI() self.deleteLater() return @@ -1163,8 +1163,7 @@ class _FormatTab(QWidget): if theStatus: self.textFont.setText(theFont.family()) self.textSize.setValue(theFont.pointSize()) - self.buildMain.guiParent.raise_() # Issue #1494 - self.buildMain.raise_() # Issue #1494 + self.mainGui.restackGUI() return @pyqtSlot(int) From 71b3694399d28b004bfcdbf9d86b1545773abb0e Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:31:05 +0200 Subject: [PATCH 5/8] Try setting build non-modal dialogs as tools --- novelwriter/guimain.py | 23 +---------------------- novelwriter/tools/manusbuild.py | 2 -- novelwriter/tools/manuscript.py | 2 ++ novelwriter/tools/manussettings.py | 4 ++-- 4 files changed, 5 insertions(+), 26 deletions(-) diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 51a345a1..72dff170 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -32,7 +32,7 @@ from pathlib import Path from datetime import datetime from PyQt5.QtCore import Qt, QTimer, QThreadPool, pyqtSlot -from PyQt5.QtGui import QCursor, QIcon, QKeySequence, QWindow +from PyQt5.QtGui import QCursor, QIcon, QKeySequence from PyQt5.QtWidgets import ( qApp, QDialog, QFileDialog, QMainWindow, QMessageBox, QShortcut, QSplitter, QStackedWidget, QVBoxLayout, QWidget @@ -350,27 +350,6 @@ class GuiMain(QMainWindow): return True - def restackGUI(self): - """Reorder the visibility of windows.""" - subOne: list[QWindow] = [] - subTwo: list[QWindow] = [] - for window in qApp.allWindows(): - name = window.objectName() - if name == "GuiManuscriptWindow": - subOne.append(window) - elif name == "GuiBuildSettingsWindow": - subTwo.append(window) - elif name == "GuiManuscriptBuildWindow": - subTwo.append(window) - self.raise_() - for window in subOne: - if window.isExposed(): - window.raise_() - for window in subTwo: - if window.isExposed(): - window.raise_() - return - def initMain(self): """Initialise elements that depend on user settings. """ diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py index 4fa0afca..69d29a8b 100644 --- a/novelwriter/tools/manusbuild.py +++ b/novelwriter/tools/manusbuild.py @@ -250,7 +250,6 @@ class GuiManuscriptBuild(QDialog): """ self._saveSettings() event.accept() - self.mainGui.restackGUI() self.deleteLater() return @@ -278,7 +277,6 @@ class GuiManuscriptBuild(QDialog): ) if savePath: self.buildPath.setText(savePath) - self.mainGui.restackGUI() return @pyqtSlot() diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index 53671fa7..e5ffa5b0 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -69,6 +69,8 @@ class GuiManuscript(QDialog): logger.debug("Create: GuiManuscript") self.setObjectName("GuiManuscript") + if CONFIG.osDarwin: + self.setWindowFlag(Qt.WindowType.Tool) self.mainGui = mainGui self.mainTheme = mainGui.mainTheme diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 989ea003..d13f344b 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -74,6 +74,8 @@ class GuiBuildSettings(QDialog): logger.debug("Create: GuiBuildSettings") self.setObjectName("GuiBuildSettings") + if CONFIG.osDarwin: + self.setWindowFlag(Qt.WindowType.Tool) self.guiParent = parent self.mainGui = mainGui @@ -225,7 +227,6 @@ class GuiBuildSettings(QDialog): self._askToSaveBuild() self._saveSettings() event.accept() - self.mainGui.restackGUI() self.deleteLater() return @@ -1163,7 +1164,6 @@ class _FormatTab(QWidget): if theStatus: self.textFont.setText(theFont.family()) self.textSize.setValue(theFont.pointSize()) - self.mainGui.restackGUI() return @pyqtSlot(int) From 993205701ce0dda8b0a7f2a74280834759251bec Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 30 Jul 2023 23:39:29 +0200 Subject: [PATCH 6/8] Define all non-modal dialogs as tools --- novelwriter/guimain.py | 2 +- novelwriter/tools/lipsum.py | 2 ++ novelwriter/tools/writingstats.py | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 72dff170..90904cc8 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -1000,7 +1000,7 @@ class GuiMain(QMainWindow): dlgDetails = GuiProjectDetails(self) assert isinstance(dlgDetails, GuiProjectDetails) - dlgDetails.setModal(False) + dlgDetails.setModal(True) dlgDetails.show() dlgDetails.raise_() dlgDetails.updateValues() diff --git a/novelwriter/tools/lipsum.py b/novelwriter/tools/lipsum.py index 5c6d41ca..c78e20de 100644 --- a/novelwriter/tools/lipsum.py +++ b/novelwriter/tools/lipsum.py @@ -46,6 +46,8 @@ class GuiLipsum(QDialog): logger.debug("Create: GuiLipsum") self.setObjectName("GuiLipsum") + if CONFIG.osDarwin: + self.setWindowFlag(Qt.WindowType.Tool) self.mainGui = mainGui self.mainTheme = mainGui.mainTheme diff --git a/novelwriter/tools/writingstats.py b/novelwriter/tools/writingstats.py index 7d224469..c2d1b892 100644 --- a/novelwriter/tools/writingstats.py +++ b/novelwriter/tools/writingstats.py @@ -69,6 +69,8 @@ class GuiWritingStats(QDialog): logger.debug("Create: GuiWritingStats") self.setObjectName("GuiWritingStats") + if CONFIG.osDarwin: + self.setWindowFlag(Qt.WindowType.Tool) self.mainGui = mainGui self.mainTheme = mainGui.mainTheme From f09851b889dae98add649acae0bdc98e0afba0db Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 31 Jul 2023 00:18:03 +0200 Subject: [PATCH 7/8] Remove beta part of version number for macOS build --- pkgutils.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/pkgutils.py b/pkgutils.py index 499ca952..840ffef7 100755 --- a/pkgutils.py +++ b/pkgutils.py @@ -50,8 +50,8 @@ def extractVersion(beQuiet=False): theBits = theString.partition("=") return theBits[2].strip().strip('"') - numVers = "Unknown" - hexVers = "Unknown" + numVers = "0" + hexVers = "0x0" relDate = "Unknown" initFile = os.path.join("novelwriter", "__init__.py") try: @@ -396,17 +396,15 @@ def buildQtI18nTS(sysArgs): def genMacOSPlist(): """Set necessary values for .plist file for MacOS build.""" - numVers, _, _ = extractVersion() - pkgVers = compactVersion(numVers) outDir = "setup/macos" - + numVers = extractVersion()[0].partition("-")[0] copyrightYear = datetime.datetime.now().year # These keys are no longer used but are present for compatability - pkgVersMaj, pkgVersMin = pkgVers.split(".")[:2] + pkgVersMaj, pkgVersMin = numVers.split(".")[:2] plistXML = readFile(f"{outDir}/Info.plist.template").format( - macosBundleSVers=pkgVers, + macosBundleSVers=numVers, macosBundleVers=numVers, macosBundleVersMajor=pkgVersMaj, macosBundleVersMinor=pkgVersMin, From 4ce18611bd593ca78511efdfe7455f0b5d62d4b9 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 31 Jul 2023 00:44:30 +0200 Subject: [PATCH 8/8] Remove redundant references to GUI parent --- novelwriter/tools/manusbuild.py | 1 - novelwriter/tools/manussettings.py | 1 - 2 files changed, 2 deletions(-) diff --git a/novelwriter/tools/manusbuild.py b/novelwriter/tools/manusbuild.py index 69d29a8b..6f1b0d16 100644 --- a/novelwriter/tools/manusbuild.py +++ b/novelwriter/tools/manusbuild.py @@ -65,7 +65,6 @@ class GuiManuscriptBuild(QDialog): logger.debug("Create: GuiManuscriptBuild") self.setObjectName("GuiManuscriptBuild") - self.guiParent = parent self.mainGui = mainGui self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index d13f344b..d2666e42 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -77,7 +77,6 @@ class GuiBuildSettings(QDialog): if CONFIG.osDarwin: self.setWindowFlag(Qt.WindowType.Tool) - self.guiParent = parent self.mainGui = mainGui self.mainTheme = mainGui.mainTheme self.theProject = mainGui.theProject