diff --git a/imgsrc/srv/window-restore.svg b/imgsrc/srv/window-restore.svg new file mode 100644 index 0000000000..d0d3c7e076 --- /dev/null +++ b/imgsrc/srv/window-restore.svg @@ -0,0 +1 @@ + diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 119d1777b8..4f486a736d 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -176,6 +176,7 @@ class EbookViewer(MainWindow): 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.quit.connect(self.quit, type=Qt.QueuedConnection) self.web_view.shortcuts_changed.connect(self.shortcuts_changed) self.actions_toolbar.initialize(self.web_view, self.search_dock.toggleViewAction()) self.setCentralWidget(self.web_view) diff --git a/src/calibre/gui2/viewer/web_view.py b/src/calibre/gui2/viewer/web_view.py index 6dd4923ee8..9002c84287 100644 --- a/src/calibre/gui2/viewer/web_view.py +++ b/src/calibre/gui2/viewer/web_view.py @@ -270,6 +270,7 @@ class ViewerBridge(Bridge): print_book = from_js() clear_history = from_js() reset_interface = from_js() + quit = from_js() customize_toolbar = from_js() create_view = to_js() @@ -440,6 +441,7 @@ class WebView(RestartingWebEngineView): show_error = pyqtSignal(object, object, object) print_book = pyqtSignal() reset_interface = pyqtSignal() + quit = pyqtSignal() customize_toolbar = pyqtSignal() shortcuts_changed = pyqtSignal(object) paged_mode_changed = pyqtSignal() @@ -487,6 +489,7 @@ class WebView(RestartingWebEngineView): 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.quit.connect(self.quit) self.bridge.customize_toolbar.connect(self.customize_toolbar) self.bridge.export_shortcut_map.connect(self.set_shortcut_map) self.shortcut_map = {} diff --git a/src/pyj/read_book/overlay.pyj b/src/pyj/read_book/overlay.pyj index e223d4c221..0de46604c5 100644 --- a/src/pyj/read_book/overlay.pyj +++ b/src/pyj/read_book/overlay.pyj @@ -339,7 +339,9 @@ class MainOverlay: # {{{ ac(_('Inspector'), _('Show the content inspector'), 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'), + def(): self.overlay.hide(), ui_operations.reset_interface();, 'window-restore'), + ac(_('Quit'), _('Close the viewer'), + def(): self.overlay.hide(), ui_operations.quit();, '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 4f47f8381d..0899da7a53 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -361,6 +361,8 @@ if window is window.top: sd.set('footer', defaults.footer) view.update_header_footer() to_python.reset_interface() + ui_operations.quit = def(): + to_python.quit() ui_operations.toggle_lookup = def(): to_python.toggle_lookup() ui_operations.selection_changed = def(selected_text):