From b21e8de0a40adfd69d9bf307085aab84125bdb49 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 22 Dec 2023 14:23:37 +0530 Subject: [PATCH] Get quickview working --- src/calibre/gui2/actions/show_quickview.py | 25 ++++++++++++++++------ src/calibre/gui2/central.py | 2 ++ src/calibre/gui2/dialogs/quickview.py | 5 +++-- src/calibre/gui2/ui.py | 2 ++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/actions/show_quickview.py b/src/calibre/gui2/actions/show_quickview.py index ac396c1a19..6670ae54ed 100644 --- a/src/calibre/gui2/actions/show_quickview.py +++ b/src/calibre/gui2/actions/show_quickview.py @@ -28,17 +28,15 @@ def get_quickview_action_plugin(): class ShowQuickviewAction(InterfaceAction): name = 'Quickview' - action_spec = (_('Quickview'), 'quickview.png', None, None) + action_spec = (_('Quickview'), 'quickview.png', _('Toggle Quickview'), 'Q') dont_add_to = frozenset(('context-menu-device',)) action_type = 'current' current_instance = None def genesis(self): - self.gui.keyboard.register_shortcut('Toggle Quickview', _('Toggle Quickview'), - description=_('Open/close the Quickview panel/window'), - default_keys=('Q',), action=self.qaction, - group=self.action_spec[0]) + self.menuless_qaction.changed.connect(self.update_layout_button) + self.qaction.triggered.connect(self.toggle_quick_view) self.focus_action = QAction(self.gui) self.gui.addAction(self.focus_action) self.gui.keyboard.register_shortcut('Focus To Quickview', _('Focus to Quickview'), @@ -73,13 +71,26 @@ class ShowQuickviewAction(InterfaceAction): group=self.action_spec[0]) self.search_action.triggered.connect(self.search_quickview) + def update_layout_button(self): + self.qv_button.update_shortcut(self.menuless_qaction) + + def toggle_quick_view(self): + if self.current_instance and not self.current_instance.is_closed: + self._hide_quickview() + else: + self._show_quickview() + @property def qv_button(self): return self.gui.layout_container.quick_view_button def initialization_complete(self): set_quickview_action_plugin(self) - self.qv_button.update_shortcut(self.qaction) + self.qv_button.toggled.connect(self.toggle_quick_view) + + def show_on_startup(self): + self.gui.hide_panel('quick_view') + self._show_quickview() def _hide_quickview(self): ''' @@ -103,7 +114,9 @@ class ShowQuickviewAction(InterfaceAction): _('Quickview is not available for books ' 'on the device.')).exec() return + self.qv_button.blockSignals(True) self.qv_button.set_state_to_hide() + self.qv_button.blockSignals(False) index = self.gui.library_view.currentIndex() self.current_instance = Quickview(self.gui, index, self.qaction.shortcut(), focus_booklist_shortcut=self.focus_bl_action.shortcut()) diff --git a/src/calibre/gui2/central.py b/src/calibre/gui2/central.py index 150e72d3f1..95651ee6f1 100644 --- a/src/calibre/gui2/central.py +++ b/src/calibre/gui2/central.py @@ -320,6 +320,8 @@ class CentralContainer(QWidget): def layout_button_toggled(self): if not self.ignore_button_toggles: b = self.sender() + if b.name == 'quick_view': + return self.set_visibility_of(b.name, b.isChecked()) self.relayout() diff --git a/src/calibre/gui2/dialogs/quickview.py b/src/calibre/gui2/dialogs/quickview.py index 6b3894f2a9..f1e0c633a2 100644 --- a/src/calibre/gui2/dialogs/quickview.py +++ b/src/calibre/gui2/dialogs/quickview.py @@ -863,9 +863,10 @@ class Quickview(QDialog, Ui_Quickview): self._reject() def _reject(self): + gui = self.gui if self.is_pane: - self.gui.hide_panel('quick_view') - self.gui.library_view.setFocus(Qt.FocusReason.ActiveWindowFocusReason) + gui.hide_panel('quick_view') + gui.library_view.setFocus(Qt.FocusReason.ActiveWindowFocusReason) self._close() QDialog.reject(self) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 2f6f9ed5ff..a4d7087d9e 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -437,6 +437,8 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ def post_initialize_actions(self): # Various post-initialization actions after an event loop tick + if self.layout_container.is_visible.quick_view: + self.iactions['Quickview'].show_on_startup() self.listener.start_listening() self.start_smartdevice() # Collect cycles now