diff --git a/src/calibre/gui2/viewer/toolbars.py b/src/calibre/gui2/viewer/toolbars.py index 2fc11dc6ed..27de1c8434 100644 --- a/src/calibre/gui2/viewer/toolbars.py +++ b/src/calibre/gui2/viewer/toolbars.py @@ -147,11 +147,14 @@ class ActionsToolBar(ToolBar): self.next_action = shortcut_action('next') self.previous_action = shortcut_action('previous') - self.toc_action = shortcut_action('toc') - self.bookmarks_action = shortcut_action('bookmarks') + self.toc_action = a = shortcut_action('toc') + a.setCheckable(True) + self.bookmarks_action = a = shortcut_action('bookmarks') + a.setCheckable(True) self.reference_action = a = shortcut_action('reference') a.setCheckable(True) - self.lookup_action = shortcut_action('lookup') + self.lookup_action = a = shortcut_action('lookup') + a.setCheckable(True) self.chrome_action = shortcut_action('chrome') self.mode_action = a = shortcut_action('mode') @@ -187,6 +190,11 @@ class ActionsToolBar(ToolBar): def update_reference_mode_action(self, enabled): self.reference_action.setChecked(enabled) + def update_dock_actions(self, visibility_map): + for k in ('toc', 'bookmarks', 'lookup'): + ac = getattr(self, '{}_action'.format(k)) + ac.setChecked(visibility_map[k]) + def set_tooltips(self, rmap): for sc, a in iteritems(self.shortcut_actions): if a.isCheckable(): diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 4da692158f..2fc4d8445b 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -118,6 +118,7 @@ class EbookViewer(MainWindow): ans.setObjectName(name) self.addDockWidget(area, ans) ans.setVisible(False) + ans.visibilityChanged.connect(self.dock_visibility_changed) return ans for dock_def in itervalues(self.dock_defs): @@ -170,6 +171,7 @@ class EbookViewer(MainWindow): self.loading_overlay = LoadingOverlay(self) self.restore_state() self.actions_toolbar.update_visibility() + self.dock_visibility_changed() if continue_reading: self.continue_reading() @@ -289,6 +291,10 @@ class EbookViewer(MainWindow): md.setImageData(img) md.setUrls([url]) QApplication.instance().clipboard().setMimeData(md) + + def dock_visibility_changed(self): + vmap = {dock.objectName().partition('-')[0]: dock.toggleViewAction().isChecked() for dock in self.dock_widgets} + self.actions_toolbar.update_dock_actions(vmap) # }}} # Load book {{{ @@ -307,8 +313,12 @@ class EbookViewer(MainWindow): from .printing import print_book print_book(set_book_path.pathtoebook, book_title=self.current_book_data['metadata']['title'], parent=self) + @property + def dock_widgets(self): + return self.findChildren(QDockWidget, options=Qt.FindDirectChildrenOnly) + def reset_interface(self): - for dock in self.findChildren(QDockWidget): + for dock in self.dock_widgets: dock.setFloating(False) area = self.dock_defs[dock.objectName().partition('-')[0]].initial_area self.removeDockWidget(dock)