diff --git a/qutebrowser/utils/qtutils.py b/qutebrowser/utils/qtutils.py index 17d97cecd..2fd810dee 100644 --- a/qutebrowser/utils/qtutils.py +++ b/qutebrowser/utils/qtutils.py @@ -37,6 +37,7 @@ import contextlib from PyQt5.QtCore import (qVersion, QEventLoop, QDataStream, QByteArray, QIODevice, QSaveFile) +from PyQt5.QtWidgets import QApplication MAXVALS = { @@ -200,6 +201,21 @@ def savefile_open(filename, binary=False, encoding='utf-8'): raise OSError(f.errorString()) +@contextlib.contextmanager +def unset_organization(): + """Temporarily unset QApplication.organizationName(). + + This is primarily needed in config.py. + """ + qapp = QApplication.instance() + orgname = qapp.organizationName() + qapp.setOrganizationName(None) + try: + yield + finally: + qapp.setOrganizationName(orgname) + + class PyQIODevice(io.BufferedIOBase): """Wrapper for a QIODevice which provides a python interface. diff --git a/qutebrowser/utils/standarddir.py b/qutebrowser/utils/standarddir.py index ea8935e21..96fbd858f 100644 --- a/qutebrowser/utils/standarddir.py +++ b/qutebrowser/utils/standarddir.py @@ -24,21 +24,13 @@ import os.path from PyQt5.QtCore import QCoreApplication, QStandardPaths -from qutebrowser.utils import log +from qutebrowser.utils import log, qtutils def _writable_location(typ): """Wrapper around QStandardPaths.writableLocation.""" - qapp = QCoreApplication.instance() - orgname = qapp.organizationName() - # We need to temporarily unset the organisationname here since the - # webinspector wants it to be set to store its persistent data correctly, - # but we don't want that to happen. - qapp.setOrganizationName(None) - try: + with qtutils.unset_organization(): path = QStandardPaths.writableLocation(typ) - finally: - qapp.setOrganizationName(orgname) if not path: raise ValueError("QStandardPaths returned an empty value!") # Qt seems to use '/' as path separator even on Windows...