From becdf4ef9f24a7e1e564b59b7bdd4380fa23bf26 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 5 Jan 2024 20:28:21 +0530 Subject: [PATCH] Fix QV widget not correctly parented when switching layout from one with QV closed to one with QV open --- src/calibre/gui2/actions/show_quickview.py | 3 +++ src/calibre/gui2/central.py | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/actions/show_quickview.py b/src/calibre/gui2/actions/show_quickview.py index 6670ae54ed..dc77e14733 100644 --- a/src/calibre/gui2/actions/show_quickview.py +++ b/src/calibre/gui2/actions/show_quickview.py @@ -117,6 +117,9 @@ class ShowQuickviewAction(InterfaceAction): self.qv_button.blockSignals(True) self.qv_button.set_state_to_hide() self.qv_button.blockSignals(False) + self._create_current_instance() + + def _create_current_instance(self): 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 f0f56a75aa..7ed6cc7a7d 100644 --- a/src/calibre/gui2/central.py +++ b/src/calibre/gui2/central.py @@ -396,10 +396,27 @@ class CentralContainer(QWidget): layout = Layout.wide if is_wide else Layout.narrow if layout is self.layout: return False + ss = self.serialized_settings() + before = ss[self.layout.name + '_visibility'] + after = ss[layout.name + '_visibility'] gui.book_details.vertical = is_wide self.layout = layout self.write_settings() - self.relayout() + # apply visibility changes by clicking buttons to ensure button + # state is correct and also deals with the case of the QV widget not + # being initialised + changes = set() + if before != after: + for k in before: + if before[k] != after[k]: + changes.add(k) + setattr(self.is_visible, k, before[k]) + if changes: + for k in changes: + button = getattr(self, k + '_button') + button.click() + else: + self.relayout() return True def serialized_settings(self):