diff --git a/src/calibre/customize/__init__.py b/src/calibre/customize/__init__.py index 3da9230dff..3bdf4a5f67 100644 --- a/src/calibre/customize/__init__.py +++ b/src/calibre/customize/__init__.py @@ -1,9 +1,13 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import os, sys, zipfile, importlib, enum +import enum +import importlib +import os +import sys +import zipfile -from calibre.constants import numeric_version, iswindows, ismacos +from calibre.constants import ismacos, iswindows, numeric_version from calibre.ptempfile import PersistentTemporaryFile if iswindows: @@ -141,8 +145,11 @@ class Plugin: # {{{ True if the user clicks OK, False otherwise. The changes are automatically applied. ''' - from qt.core import QDialog, QDialogButtonBox, QVBoxLayout, \ - QLabel, Qt, QLineEdit + from qt.core import ( + QApplication, QDialog, QDialogButtonBox, QLabel, QLineEdit, QScrollArea, Qt, + QVBoxLayout, QSize + ) + from calibre.gui2 import gprefs prefname = 'plugin config dialog:'+self.type + ':' + self.name @@ -164,9 +171,18 @@ class Plugin: # {{{ return False if config_widget is not None: - v.addWidget(config_widget) + class SA(QScrollArea): + def sizeHint(self): + sz = self.widget().sizeHint() + fw = 2 * self.frameWidth() + return QSize(sz.width() + self.verticalScrollBar().sizeHint().width() + fw, sz.height() + fw) + sa = SA(config_dialog) + sa.setWidget(config_widget) + sa.setWidgetResizable(True) + v.addWidget(sa) v.addWidget(button_box) - config_dialog.restore_geometry(gprefs, prefname) + if not config_dialog.restore_geometry(gprefs, prefname): + QApplication.instance().ensure_window_on_screen(config_dialog) config_dialog.exec() if config_dialog.result() == QDialog.DialogCode.Accepted: @@ -176,8 +192,7 @@ class Plugin: # {{{ else: self.save_settings(config_widget) else: - from calibre.customize.ui import plugin_customization, \ - customize_plugin + from calibre.customize.ui import customize_plugin, plugin_customization help_text = self.customization_help(gui=True) help_text = QLabel(help_text, config_dialog) help_text.setWordWrap(True) @@ -273,8 +288,9 @@ class Plugin: # {{{ import something ''' if self.plugin_path is not None: - from calibre.utils.zipfile import ZipFile from importlib.machinery import EXTENSION_SUFFIXES + + from calibre.utils.zipfile import ZipFile with ZipFile(self.plugin_path) as zf: extensions = {x.lower() for x in EXTENSION_SUFFIXES} zip_safe = True diff --git a/src/calibre/gui2/preferences/plugins.py b/src/calibre/gui2/preferences/plugins.py index 7316c897ad..3e21f2829d 100644 --- a/src/calibre/gui2/preferences/plugins.py +++ b/src/calibre/gui2/preferences/plugins.py @@ -472,6 +472,6 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): if __name__ == '__main__': - from qt.core import QApplication - app = QApplication([]) + from calibre.gui2 import Application + app = Application([]) test_widget('Advanced', 'Plugins')