Possible fix for offscreen dialogs on windows

See https://bugreports.qt.io/browse/QTBUG-77385
This commit is contained in:
Kovid Goyal 2019-12-27 09:21:25 +05:30
parent 55dc27c9fa
commit 02343fd965
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
39 changed files with 78 additions and 65 deletions

View file

@ -147,7 +147,8 @@ def size_dialog():
if geom is None:
config_dialog.resize(config_dialog.sizeHint())
else:
config_dialog.restoreGeometry(geom)
from PyQt5.Qt import QApplication
QApplication.instance().safe_restore_geometry(config_dialog, geom)
button_box.accepted.connect(config_dialog.accept)
button_box.rejected.connect(config_dialog.reject)

View file

@ -973,6 +973,19 @@ def __init__(self, args, force_calibre_style=False, override_program_name=None,
if cft >= 0:
self.setCursorFlashTime(int(cft))
def safe_restore_geometry(self, widget, geom):
# See https://bugreports.qt.io/browse/QTBUG-77385
if not geom:
return
restored = widget.restoreGeometry(geom)
screen_rect = self.desktop().availableGeometry(widget)
if not widget.geometry().intersects(screen_rect):
w = min(widget.width(), screen_rect.width() - 10)
h = min(widget.height(), screen_rect.height() - 10)
widget.resize(w, h)
widget.move((screen_rect.width() - w) // 2, (screen_rect.height() - h) // 2)
return restored
def setup_ui_font(self):
f = QFont(QApplication.font())
q = (f.family(), f.pointSize())

View file

@ -7,7 +7,7 @@
import shutil
from PyQt5.Qt import QModelIndex, QDialog
from PyQt5.Qt import QModelIndex, QDialog, QApplication
from calibre.gui2.convert.single import Config, GroupModel, gprefs
from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
@ -63,7 +63,7 @@ def __init__(self, parent, db, preferred_output_format=None,
geom = gprefs.get('convert_bulk_dialog_geom', None)
if geom:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
else:
self.resize(self.sizeHint())

View file

@ -7,7 +7,7 @@
import os
from PyQt5.Qt import (QDialog, QWidget, QDialogButtonBox,
from PyQt5.Qt import (QDialog, QWidget, QDialogButtonBox, QApplication,
QBrush, QTextCursor, QTextEdit, QByteArray, Qt, pyqtSignal)
from calibre.gui2.convert.regex_builder_ui import Ui_RegexBuilder
@ -52,7 +52,7 @@ def __init__(self, db, book_id, regex, doc=None, parent=None):
self.match_locs = []
geom = gprefs.get('regex_builder_geometry', None)
if geom is not None:
self.restoreGeometry(QByteArray(geom))
QApplication.instance().safe_restore_geometry(self, QByteArray(geom))
self.finished.connect(self.save_state)
def save_state(self, result):

View file

@ -10,7 +10,7 @@
QAbstractListModel, QCheckBox, QComboBox, QCoreApplication, QDialog,
QDialogButtonBox, QFont, QFrame, QGridLayout, QHBoxLayout, QIcon, QLabel,
QListView, QModelIndex, QScrollArea, QSize, QSizePolicy, QSpacerItem,
Qt, QTextEdit, QWidget
Qt, QTextEdit, QWidget, QApplication
)
from calibre.customize.conversion import OptionRecommendation
@ -94,7 +94,7 @@ def __init__(self, parent, db, book_id,
self.groups.setMouseTracking(True)
geom = gprefs.get('convert_single_dialog_geom', None)
if geom:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
else:
self.resize(self.sizeHint())

View file

@ -12,7 +12,7 @@
import sys, os, time
from PyQt5.Qt import (QImage, QSizePolicy, QTimer, QDialog, Qt, QSize, QAction,
QStackedLayout, QLabel, pyqtSignal, QKeySequence, QFont)
QStackedLayout, QLabel, pyqtSignal, QKeySequence, QFont, QApplication)
from calibre import plugins
from calibre.ebooks.metadata import rating_to_stars
@ -243,7 +243,7 @@ def __init__(self, parent, cover_flow):
self.layout().addWidget(cover_flow)
geom = gprefs.get('cover_browser_dialog_geometry', None)
if not geom or not self.restoreGeometry(geom):
if not geom or not QApplication.instance().safe_restore_geometry(self, geom):
h, w = available_height()-60, int(available_width()/1.5)
self.resize(w, h)
self.action_fs_toggle = a = QAction(self)
@ -279,7 +279,7 @@ def closeEvent(self, *args):
def show_normal(self):
self.showNormal()
if self.pre_fs_geom is not None:
self.restoreGeometry(self.pre_fs_geom)
QApplication.instance().safe_restore_geometry(self, self.pre_fs_geom)
self.pre_fs_geom = None
def show_fullscreen(self):
@ -454,7 +454,7 @@ def sync_listview_to_cf(self, row):
def test():
from PyQt5.Qt import QApplication, QMainWindow
from PyQt5.Qt import QMainWindow
app = QApplication([])
w = QMainWindow()
cf = CoverFlow()
@ -475,7 +475,7 @@ def main(args=sys.argv):
if __name__ == '__main__':
from PyQt5.Qt import QApplication, QMainWindow
from PyQt5.Qt import QMainWindow
app = QApplication([])
w = QMainWindow()
cf = CoverFlow()

View file

@ -10,7 +10,7 @@
from PyQt5.Qt import (
QWidget, QHBoxLayout, QTabWidget, QLabel, QSizePolicy, QSize, QFormLayout,
QSpinBox, pyqtSignal, QPixmap, QDialog, QVBoxLayout, QDialogButtonBox,
QListWidget, QListWidgetItem, Qt, QGridLayout, QPushButton, QIcon,
QListWidget, QListWidgetItem, Qt, QGridLayout, QPushButton, QIcon, QApplication,
QColorDialog, QToolButton, QLineEdit, QColor, QFrame, QTimer, QCheckBox)
from calibre.ebooks.covers import all_styles, cprefs, generate_cover, override_prefs, default_color_themes
@ -530,7 +530,7 @@ def __init__(self, mi=None, prefs=None, parent=None):
self.resize(self.sizeHint())
geom = gprefs.get('cover_settings_dialog_geom', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.prefs_for_rendering = None
def restore_defaults(self):

View file

@ -159,7 +159,7 @@ def __init__(self, all_authors, current_authors, parent=None):
self.resize(self.sizeHint() + QSize(150, 100))
geom = gprefs.get('authors-edit-geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.author.setFocus(Qt.OtherFocusReason)
def save_geometry(self):

View file

@ -8,7 +8,7 @@
QBrush, QCheckBox, QCoreApplication, QDialog, QGridLayout, QHBoxLayout, QIcon,
QKeySequence, QLabel, QListView, QModelIndex, QPalette, QPixmap, QPushButton,
QShortcut, QSize, QSplitter, Qt, QTimer, QToolButton, QVBoxLayout, QWidget,
pyqtSignal
pyqtSignal, QApplication
)
from calibre import fit_image
@ -192,7 +192,7 @@ def __init__(self, parent, view, row, link_delegate):
saved_layout = gprefs.get('book_info_dialog_layout', None)
if saved_layout is not None:
try:
self.restoreGeometry(saved_layout[0])
QApplication.instance().safe_restore_geometry(self, saved_layout[0])
self.splitter.restoreState(saved_layout[1])
except Exception:
pass

View file

@ -8,7 +8,7 @@
import os, sys, importlib, weakref
from PyQt5.Qt import QDialog, QCoreApplication, QSize, QScrollArea
from PyQt5.Qt import QDialog, QCoreApplication, QSize, QScrollArea, QApplication
from calibre.customize.ui import config
from calibre.gui2.dialogs.catalog_ui import Ui_Dialog
@ -130,7 +130,7 @@ def __init__(self, parent, dbspec, ids, db):
geom = dynamic.get('catalog_window_geom', None)
if geom is not None:
self.restoreGeometry(bytes(geom))
QApplication.instance().safe_restore_geometry(self, bytes(geom))
else:
self.resize(self.sizeHint())
d = QCoreApplication.instance().desktop()

View file

@ -5,7 +5,7 @@
__docformat__ = 'restructuredtext en'
__license__ = 'GPL v3'
from PyQt5.Qt import Qt, QDialog, QDialogButtonBox, QVBoxLayout, QPlainTextEdit, QSize
from PyQt5.Qt import Qt, QDialog, QDialogButtonBox, QVBoxLayout, QPlainTextEdit, QSize, QApplication
from calibre.gui2 import gprefs, Application
from calibre.gui2.dialogs.comments_dialog_ui import Ui_CommentsDialog
@ -35,7 +35,7 @@ def __init__(self, parent, text, column_name=None):
geom = gprefs.get('comments_dialog_geom', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
def save_geometry(self):
gprefs.set('comments_dialog_geom', bytearray(self.saveGeometry()))

View file

@ -63,7 +63,7 @@ def __init__(self, db, duplicates, parent=None):
self.resize(self.sizeHint())
geom = gprefs.get('duplicates-question-dialog-geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.exec_()
def copy_to_clipboard(self):

View file

@ -41,7 +41,7 @@ def __init__(self, parent, db, id_to_select, select_sort, select_link):
gprefs.get('manage_authors_table_widths', None)
geom = gprefs.get('manage_authors_dialog_geometry', None)
if geom:
self.restoreGeometry(QByteArray(geom))
QApplication.instance().safe_restore_geometry(self, QByteArray(geom))
except Exception:
pass

View file

@ -60,7 +60,7 @@ def __init__(self, gui, view, id_, row_index):
gprefs.get('match_books_dialog_books_table_widths', None)
geom = gprefs.get('match_books_dialog_geometry', None)
if geom:
self.restoreGeometry(QByteArray(geom))
QApplication.instance().safe_restore_geometry(self, QByteArray(geom))
except:
pass

View file

@ -217,7 +217,7 @@ def __init__(self, title, html, parent=None, unique_name=None):
self.resize(QSize(700, 500))
geom = gprefs.get(self.unique_name, None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.setModal(False)
self.setWindowTitle(title)

View file

@ -552,7 +552,7 @@ def __init__(self, window, rows, model, tab, refresh_books):
self.central_widget.setCurrentIndex(tab)
geom = gprefs.get('bulk_metadata_window_geometry', None)
if geom is not None:
self.restoreGeometry(bytes(geom))
QApplication.instance().safe_restore_geometry(self, bytes(geom))
else:
self.resize(self.sizeHint())
ct = gprefs.get('bulk_metadata_window_tab', 0)

View file

@ -10,7 +10,7 @@
from lxml import html
from PyQt5.Qt import (Qt, QUrl, QFrame, QVBoxLayout, QLabel, QBrush, QTextEdit,
QComboBox, QAbstractItemView, QHBoxLayout, QDialogButtonBox,
QAbstractTableModel, QTableView, QModelIndex,
QAbstractTableModel, QTableView, QModelIndex, QApplication,
QSortFilterProxyModel, QAction, QIcon, QDialog,
QFont, QPixmap, QSize, QLineEdit)
@ -156,7 +156,7 @@ def resize_dialog(self):
if self.geom is None:
self.resize(self.sizeHint()+self.initial_extra_size)
else:
self.restoreGeometry(self.geom)
QApplication.instance().safe_restore_geometry(self, self.geom)
def dialog_closing(self, result):
geom = bytearray(self.saveGeometry())

View file

@ -157,7 +157,7 @@ def __init__(self, gui, row):
if not self.is_pane:
geom = gprefs.get('quickview_dialog_geometry', None)
if geom:
self.restoreGeometry(QByteArray(geom))
QApplication.instance().safe_restore_geometry(self, QByteArray(geom))
except:
pass

View file

@ -13,7 +13,7 @@
from collections import OrderedDict
from PyQt5.Qt import (
QDialog, Qt, QTime, QObject, QMenu, QHBoxLayout, QAction, QIcon, QMutex,
QDialog, Qt, QTime, QObject, QMenu, QHBoxLayout, QAction, QIcon, QMutex, QApplication,
QTimer, pyqtSignal, QWidget, QGridLayout, QCheckBox, QTimeEdit, QLabel,
QLineEdit, QDoubleSpinBox, QSize, QTreeView, QSizePolicy, QToolButton,
QScrollArea, QFrame, QVBoxLayout, QTabWidget, QSpacerItem, QGroupBox,
@ -373,7 +373,7 @@ def __init__(self, recipe_model, parent=None):
geom = gprefs.get('scheduler_dialog_geometry')
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
def sizeHint(self):
return QSize(800, 600)
@ -729,7 +729,6 @@ def check(self):
if __name__ == '__main__':
from PyQt5.Qt import QApplication
app = QApplication([])
d = SchedulerDialog(RecipeModel())
d.exec_()

View file

@ -3,7 +3,7 @@
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
from PyQt5.Qt import Qt, QDialog, QAbstractItemView
from PyQt5.Qt import Qt, QDialog, QAbstractItemView, QApplication
from calibre.gui2.dialogs.tag_editor_ui import Ui_TagEditor
from calibre.gui2 import question_dialog, error_dialog, gprefs
@ -92,7 +92,7 @@ def __init__(self, window, db, id_=None, key=None, current_tags=None):
geom = gprefs.get('tag_editor_geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
def edit_box_changed(self, which):
gprefs['tag_editor_last_filter'] = which

View file

@ -4,7 +4,7 @@
from __future__ import absolute_import, division, print_function, unicode_literals
from PyQt5.Qt import (Qt, QDialog, QTableWidgetItem, QIcon, QByteArray, QSize,
QDialogButtonBox, QTableWidget, QItemDelegate)
QDialogButtonBox, QTableWidget, QItemDelegate, QApplication)
from calibre.gui2.dialogs.tag_list_editor_ui import Ui_TagListEditor
from calibre.gui2.dialogs.confirm_delete import confirm
@ -169,7 +169,7 @@ def __init__(self, window, cat_name, tag_to_match, get_book_ids, sorter):
try:
geom = gprefs.get('tag_list_editor_dialog_geometry', None)
if geom is not None:
self.restoreGeometry(QByteArray(geom))
QApplication.instance().safe_restore_geometry(self, QByteArray(geom))
else:
self.resize(self.sizeHint()+QSize(150, 100))
except:

View file

@ -62,7 +62,7 @@ def __init__(self, img_data, parent=None):
self.resize(QSize(900, 600))
geom = gprefs.get('image-trim-dialog-geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.setWindowIcon(self.trim_action.icon())
self.image_data = None

View file

@ -164,7 +164,7 @@ def __call__(self, use_exec=False):
self.resize(QSize(int(geom.width()/2.5), geom.height()-50))
geom = gprefs.get(self.geom_name, None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
try:
self.current_image_name = unicode_type(self.current_url.toString(NO_URL_FORMATTING)).rpartition('/')[-1]
except AttributeError:

View file

@ -645,7 +645,7 @@ def restore_state(self):
try:
geom = gprefs.get('jobs_dialog_geometry', None)
if geom:
self.restoreGeometry(QByteArray(geom))
QApplication.instance().safe_restore_geometry(self, QByteArray(geom))
state = gprefs.get('jobs view column layout3', None)
if state is not None:
self.jobs_view.horizontalHeader().restoreState(QByteArray(state))

View file

@ -608,7 +608,7 @@ def __init__(self, ids, get_metadata, field_metadata, parent=None,
self.resize(QSize(width, height))
geom = gprefs.get('diff_dialog_geom', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
b.setFocus(Qt.OtherFocusReason)
self.next_called = False

View file

@ -10,7 +10,7 @@
from datetime import datetime
from functools import partial
from PyQt5.Qt import (Qt, QVBoxLayout, QHBoxLayout, QWidget, QPushButton,
from PyQt5.Qt import (Qt, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QApplication,
QGridLayout, pyqtSignal, QDialogButtonBox, QScrollArea, QFont, QCoreApplication,
QTabWidget, QIcon, QToolButton, QSplitter, QGroupBox, QSpacerItem, QInputDialog,
QSizePolicy, QFrame, QSize, QKeySequence, QMenu, QShortcut, QDialog)
@ -120,7 +120,7 @@ def setupUi(self, *args): # {{{
self.do_layout()
geom = gprefs.get('metasingle_window_geometry3', None)
if geom is not None:
self.restoreGeometry(bytes(geom))
QApplication.instance().safe_restore_geometry(self, bytes(geom))
else:
self.resize(self.sizeHint())
self.restore_widget_settings()
@ -1219,8 +1219,8 @@ def edit_metadata(db, row_list, current_row, parent=None, view_slot=None, edit_s
if __name__ == '__main__':
from calibre.gui2 import Application as QApplication
app = QApplication([])
from calibre.gui2 import Application
app = Application([])
from calibre.library import db
db = db()
row_list = list(range(len(db.data)))

View file

@ -1066,7 +1066,7 @@ def __init__(self, current_cover=None, parent=None):
self.resize(850, 600)
geom = gprefs.get('metadata_single_gui_geom', None)
if geom is not None and geom:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.finished.connect(self.cleanup)
@ -1168,7 +1168,7 @@ def __init__(self, current_cover=None, parent=None):
geom = gprefs.get('single-cover-fetch-dialog-geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
def cleanup(self):
self.covers_widget.cleanup()

View file

@ -8,7 +8,7 @@
import textwrap
from PyQt5.Qt import (QWidget, pyqtSignal, QCheckBox, QAbstractSpinBox,
from PyQt5.Qt import (QWidget, pyqtSignal, QCheckBox, QAbstractSpinBox, QApplication,
QLineEdit, QComboBox, Qt, QIcon, QDialog, QVBoxLayout,
QDialogButtonBox)
@ -382,7 +382,7 @@ def onchange():
w.genesis(gui)
w.initialize()
if geom is not None:
d.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(d, geom)
d.exec_()
geom = bytearray(d.saveGeometry())
gprefs[conf_name] = geom

View file

@ -224,7 +224,7 @@ def __init__(self, gui, initial_plugin=None, close_after_initial=False):
geom = gprefs.get('preferences dialog geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
# Center
if islinux:

View file

@ -10,7 +10,7 @@
from random import shuffle
from PyQt5.Qt import (Qt, QDialog, QDialogButtonBox, QTimer, QCheckBox, QLabel,
QVBoxLayout, QIcon, QWidget, QTabWidget, QGridLayout)
QVBoxLayout, QIcon, QWidget, QTabWidget, QGridLayout, QApplication)
from calibre.gui2 import JSONConfig, info_dialog, error_dialog
from calibre.gui2.dialogs.choose_format import ChooseFormatDialog
@ -264,7 +264,7 @@ def save_state(self):
def restore_state(self):
geometry = self.config.get('geometry', None)
if geometry:
self.restoreGeometry(geometry)
QApplication.instance().safe_restore_geometry(self, geometry)
splitter_state = self.config.get('store_splitter_state', None)
if splitter_state:
@ -333,7 +333,7 @@ def do_config(self):
# Restore dialog state.
geometry = self.config.get('config_dialog_geometry', None)
if geometry:
d.restoreGeometry(geometry)
QApplication.instance().safe_restore_geometry(d, geometry)
else:
d.resize(800, 600)
tab_index = self.config.get('config_dialog_tab_index', 0)

View file

@ -7,7 +7,7 @@
__docformat__ = 'restructuredtext en'
from PyQt5.Qt import (Qt, QDialog, QIcon, QComboBox)
from PyQt5.Qt import (Qt, QDialog, QIcon, QComboBox, QApplication)
from calibre.gui2.store.stores.mobileread.adv_search_builder import AdvSearchBuilderDialog
from calibre.gui2.store.stores.mobileread.models import BooksModel
@ -58,7 +58,7 @@ def build_adv_search(self):
def restore_state(self):
geometry = self.plugin.config.get('dialog_geometry', None)
if geometry:
self.restoreGeometry(geometry)
QApplication.instance().safe_restore_geometry(self, geometry)
results_cwidth = self.plugin.config.get('dialog_results_view_column_width')
if results_cwidth:

View file

@ -10,7 +10,7 @@
from PyQt5.Qt import (
QHBoxLayout, QIcon, QLabel, QProgressBar, QPushButton, QSize, QUrl, QVBoxLayout,
QWidget, pyqtSignal
QWidget, pyqtSignal, QApplication
)
from PyQt5.QtWebEngineWidgets import QWebEngineProfile, QWebEngineView
@ -140,7 +140,7 @@ def __init__(self, data):
self.setCentralWidget(c)
geometry = gprefs.get('store_dialog_main_window_geometry')
if geometry is not None:
self.restoreGeometry(geometry)
QApplication.instance().safe_restore_geometry(self, geometry)
self.go_to(data['detail_url'] or None)
def sizeHint(self):

View file

@ -11,7 +11,7 @@
from threading import Thread
from PyQt5.Qt import (
QCheckBox, QCursor, QDialog, QDialogButtonBox, QFrame, QGridLayout, QIcon,
QCheckBox, QCursor, QDialog, QDialogButtonBox, QFrame, QGridLayout, QIcon, QApplication,
QInputDialog, QItemSelectionModel, QKeySequence, QLabel, QMenu, QPushButton,
QSize, QSizePolicy, QStackedWidget, Qt, QToolButton, QTreeWidget,
QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal
@ -1031,7 +1031,7 @@ def __init__(self, pathtobook, title=None, parent=None, prefs=None):
self.resize(950, 630)
geom = self.prefs.get('toc_editor_window_geom', None)
if geom is not None:
self.restoreGeometry(bytes(geom))
QApplication.instance().safe_restore_geometry(self, bytes(geom))
self.stacks.currentChanged.connect(self.update_history_buttons)
self.update_history_buttons()

View file

@ -17,7 +17,7 @@
from PyQt5.Qt import (
QDialog, QGridLayout, QStackedWidget, QDialogButtonBox, QListWidget,
QListWidgetItem, QIcon, QWidget, QSize, QFormLayout, Qt, QSpinBox,
QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel, QFont,
QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel, QFont, QApplication,
QFontComboBox, QPushButton, QSizePolicy, QHBoxLayout, QGroupBox,
QToolButton, QVBoxLayout, QSpacerItem, QTimer)
from PyQt5.QtWebEngineWidgets import QWebEngineSettings
@ -710,7 +710,7 @@ def __init__(self, gui, initial_panel=None):
self.resize(800, 600)
geom = tprefs.get('preferences_geom', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
self.keyboard_panel = ShortcutConfig(self)
self.keyboard_panel.initialize(gui.keyboard)

View file

@ -56,7 +56,7 @@ def __init__(self, title=None, parent=None):
self.resize(950, 630)
geom = tprefs.get('toc_editor_window_geom', None)
if geom is not None:
self.restoreGeometry(bytes(geom))
QApplication.instance().safe_restore_geometry(self, bytes(geom))
def add_new_item(self, item, where):
self.item_edit(item, where)

View file

@ -800,7 +800,7 @@ def save_state(self):
def restore_state(self):
geom = tprefs.get('main_window_geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
state = tprefs.get('main_window_state', None)
if state is not None:
self.restoreState(state, self.STATE_VERSION)

View file

@ -911,7 +911,7 @@ def job_exception(self, job, dialog_title=_('Conversion error'), retry_func=None
def read_settings(self):
geometry = config['main_window_geometry']
if geometry is not None:
self.restoreGeometry(geometry)
QApplication.instance().safe_restore_geometry(self, geometry)
self.read_layout_settings()
def write_settings(self):

View file

@ -509,7 +509,7 @@ def restore_state(self):
state = vprefs['main_window_state']
geom = vprefs['main_window_geometry']
if geom and get_session_pref('remember_window_geometry', default=False):
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
if state:
self.restoreState(state, self.MAIN_WINDOW_STATE_VERSION)
self.inspector_dock.setVisible(False)

View file

@ -174,7 +174,7 @@ def __init__(self, title, name, parent=None, prefs=gprefs):
self.resize(self.sizeHint())
geom = self.prefs_for_persistence.get(name + '-geometry', None)
if geom is not None:
self.restoreGeometry(geom)
QApplication.instance().safe_restore_geometry(self, geom)
if hasattr(self, 'splitter'):
state = self.prefs_for_persistence.get(name + '-splitter-state', None)
if state is not None: