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