diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index b0252210e3..88bbae6c41 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -196,6 +196,7 @@ class CoverFlowMixin(object): def show_cover_browser(self): d = CBDialog(self, self.cover_flow) + d.addAction(self.cb_splitter.action_toggle) self.cover_flow.setVisible(True) self.cover_flow.setFocus(Qt.OtherFocusReason) d.show() diff --git a/src/calibre/gui2/jobs.py b/src/calibre/gui2/jobs.py index 4b00d39877..e92a502daa 100644 --- a/src/calibre/gui2/jobs.py +++ b/src/calibre/gui2/jobs.py @@ -14,7 +14,8 @@ from Queue import Empty, Queue from PyQt4.Qt import QAbstractTableModel, QVariant, QModelIndex, Qt, \ QTimer, pyqtSignal, QIcon, QDialog, QAbstractItemDelegate, QApplication, \ QSize, QStyleOptionProgressBarV2, QString, QStyle, QToolTip, QFrame, \ - QHBoxLayout, QVBoxLayout, QSizePolicy, QLabel, QCoreApplication + QHBoxLayout, QVBoxLayout, QSizePolicy, QLabel, QCoreApplication, QAction, \ + QByteArray from calibre.utils.ipc.server import Server from calibre.utils.ipc.job import ParallelJob @@ -281,6 +282,7 @@ class JobsButton(QFrame): self.pi = ProgressIndicator(self, size) self._jobs = QLabel(''+_('Jobs:')+' 0') self._jobs.mouseReleaseEvent = self.mouseReleaseEvent + self.shortcut = _('Shift+Alt+J') if horizontal: self.setLayout(QHBoxLayout()) @@ -297,15 +299,24 @@ class JobsButton(QFrame): self.layout().setMargin(0) self._jobs.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.setCursor(Qt.PointingHandCursor) - self.setToolTip(_('Click to see list of active jobs.')) + b = _('Click to see list of jobs') + self.setToolTip(b + u' (%s)'%self.shortcut) + self.action_toggle = QAction(b, parent) + parent.addAction(self.action_toggle) + self.action_toggle.setShortcut(self.shortcut) + self.action_toggle.triggered.connect(self.toggle) def initialize(self, jobs_dialog, job_manager): self.jobs_dialog = jobs_dialog job_manager.job_added.connect(self.job_added) job_manager.job_done.connect(self.job_done) + self.jobs_dialog.addAction(self.action_toggle) def mouseReleaseEvent(self, event): + self.toggle() + + def toggle(self, *args): if self.jobs_dialog.isVisible(): self.jobs_dialog.hide() else: @@ -372,6 +383,10 @@ class JobsDialog(QDialog, Ui_JobsDialog): except: pass + geom = gprefs.get('jobs_dialog_geometry', bytearray('')) + self.restoreGeometry(QByteArray(geom)) + + def show_job_details(self, index): row = index.row() job = self.jobs_view.model().row_to_job(row) @@ -397,6 +412,8 @@ class JobsDialog(QDialog, Ui_JobsDialog): try: state = bytearray(self.jobs_view.horizontalHeader().saveState()) gprefs['jobs view column layout'] = state + geom = bytearray(self.saveGeometry()) + gprefs['jobs_dialog_geometry'] = geom except: pass e.accept() diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 1b918e679e..95cccb72a5 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -132,7 +132,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ # Jobs Button {{{ self.job_manager = JobManager() self.jobs_dialog = JobsDialog(self, self.job_manager) - self.jobs_button = JobsButton(horizontal=True) + self.jobs_button = JobsButton(horizontal=True, parent=self) self.jobs_button.initialize(self.jobs_dialog, self.job_manager) # }}} diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 54cb526750..dbb3947d4c 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -871,14 +871,14 @@ class LayoutButton(QToolButton): def set_state_to_show(self, *args): self.setChecked(False) label =_('Show') - self.setText(label + ' ' + self.label + ' ' + self.shortcut) + self.setText(label + ' ' + self.label + u' (%s)'%self.shortcut) self.setToolTip(self.text()) self.setStatusTip(self.text()) def set_state_to_hide(self, *args): self.setChecked(True) label = _('Hide') - self.setText(label + ' ' + self.label+ ' ' + self.shortcut) + self.setText(label + ' ' + self.label+ u' (%s)'%self.shortcut) self.setToolTip(self.text()) self.setStatusTip(self.text()) @@ -941,7 +941,10 @@ class Splitter(QSplitter): @property def is_side_index_hidden(self): sizes = list(self.sizes()) - return sizes[self.side_index] == 0 + try: + return sizes[self.side_index] == 0 + except IndexError: + return True @property def save_name(self):