diff --git a/src/calibre/gui2/viewer/toolbars.py b/src/calibre/gui2/viewer/toolbars.py index 949cb94c18..b8b325135c 100644 --- a/src/calibre/gui2/viewer/toolbars.py +++ b/src/calibre/gui2/viewer/toolbars.py @@ -41,7 +41,6 @@ class ActionsToolBar(ToolBar): def __init__(self, parent=None): ToolBar.__init__(self, parent) self.setObjectName('actions_toolbar') - self.update_visibility() def initialize(self, web_view): shortcut_action = self.create_shortcut_action diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 235e248f27..e35345005e 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -14,7 +14,7 @@ from threading import Thread from PyQt5.Qt import ( QApplication, QDockWidget, QEvent, QMimeData, QModelIndex, QPixmap, QScrollBar, - Qt, QUrl, QVBoxLayout, QWidget, pyqtSignal + Qt, QToolBar, QUrl, QVBoxLayout, QWidget, pyqtSignal ) from calibre import prints @@ -160,11 +160,13 @@ class EbookViewer(MainWindow): self.web_view.show_loading_message.connect(self.show_loading_message) self.web_view.show_error.connect(self.show_error) self.web_view.print_book.connect(self.print_book, type=Qt.QueuedConnection) + self.web_view.reset_interface.connect(self.reset_interface, type=Qt.QueuedConnection) self.web_view.shortcuts_changed.connect(self.shortcuts_changed) self.actions_toolbar.initialize(self.web_view) self.setCentralWidget(self.web_view) self.loading_overlay = LoadingOverlay(self) self.restore_state() + self.actions_toolbar.update_visibility() if continue_reading: self.continue_reading() @@ -300,6 +302,19 @@ class EbookViewer(MainWindow): from .printing import print_book print_book(set_book_path.pathtoebook, book_title=self.current_book_data['metadata']['title'], parent=self) + def reset_interface(self): + for dock in self.findChildren(QDockWidget): + dock.setFloating(False) + area = self.dock_defs[dock.objectName().partition('-')[0]].initial_area + self.removeDockWidget(dock) + self.addDockWidget(area, dock) + dock.setVisible(False) + + for toolbar in self.findChildren(QToolBar): + toolbar.setVisible(False) + self.removeToolBar(toolbar) + self.addToolBar(Qt.LeftToolBarArea, toolbar) + def ask_for_open(self, path=None): if path is None: files = choose_files( diff --git a/src/calibre/gui2/viewer/web_view.py b/src/calibre/gui2/viewer/web_view.py index f965b557af..c860654b06 100644 --- a/src/calibre/gui2/viewer/web_view.py +++ b/src/calibre/gui2/viewer/web_view.py @@ -255,6 +255,7 @@ class ViewerBridge(Bridge): export_shortcut_map = from_js(object) print_book = from_js() clear_history = from_js() + reset_interface = from_js() create_view = to_js() start_book_load = to_js() @@ -400,6 +401,7 @@ class WebView(RestartingWebEngineView): show_loading_message = pyqtSignal(object) show_error = pyqtSignal(object, object, object) print_book = pyqtSignal() + reset_interface = pyqtSignal() shortcuts_changed = pyqtSignal(object) paged_mode_changed = pyqtSignal() standalone_misc_settings_changed = pyqtSignal(object) @@ -436,6 +438,7 @@ class WebView(RestartingWebEngineView): self.bridge.show_error.connect(self.show_error) self.bridge.print_book.connect(self.print_book) self.bridge.clear_history.connect(self.clear_history) + self.bridge.reset_interface.connect(self.reset_interface) self.bridge.export_shortcut_map.connect(self.set_shortcut_map) self.shortcut_map = {} self.bridge.report_cfi.connect(self.call_callback) diff --git a/src/pyj/read_book/overlay.pyj b/src/pyj/read_book/overlay.pyj index ec0c69927b..28e92f3073 100644 --- a/src/pyj/read_book/overlay.pyj +++ b/src/pyj/read_book/overlay.pyj @@ -313,7 +313,9 @@ class MainOverlay: # {{{ actions_div.appendChild(E.ul( ac(_('Inspector'), _('Show the content inspector'), - def(): self.overlay.hide(), ui_operations.toggle_inspector();, 'bug') + def(): self.overlay.hide(), ui_operations.toggle_inspector();, 'bug'), + ac(_('Reset interface'), _('Reset viewer panels, toolbars and scrollbars to defaults'), + def(): self.overlay.hide(), ui_operations.reset_interface();, 'remove'), )) container.appendChild(set_css(E.div(class_=MAIN_OVERLAY_TS_CLASS, # top section onclick=def (evt):evt.stopPropagation();, diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index 06cc8469ea..39cc53e9d5 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -8,7 +8,7 @@ from gettext import gettext as _, install import initialize # noqa: unused-import from ajax import ajax -from book_list.globals import set_session_data +from book_list.globals import get_session_data, set_session_data from book_list.library_data import library_data from book_list.theme import get_color from dom import get_widget_css, set_css @@ -20,7 +20,7 @@ from read_book.globals import runtime, ui_operations from read_book.iframe import main as iframe_main from read_book.shortcuts import add_standalone_viewer_shortcuts from read_book.view import View -from session import session_defaults, local_storage +from session import local_storage, session_defaults from utils import encode_query_with_path, parse_url_params from viewer.constants import FAKE_HOST, FAKE_PROTOCOL, READER_BACKGROUND_URL @@ -322,6 +322,14 @@ if window is window.top: to_python.toggle_bookmarks() ui_operations.toggle_inspector = def(): to_python.toggle_inspector() + ui_operations.reset_interface = def(): + sd = get_session_data() + m = sd.get('standalone_misc_settings', {}) + v'delete m.show_actions_toolbar' + sd.set('standalone_misc_settings', m) + sd.set('book_scrollbar', False) + view.book_scrollbar.apply_visibility() + to_python.reset_interface() ui_operations.toggle_lookup = def(): to_python.toggle_lookup() ui_operations.selection_changed = def(selected_text):