diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 8d84f69249..048b6e6235 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -20,8 +20,7 @@ from calibre.gui2.dialogs.choose_format import ChooseFormatDialog from calibre.utils.ipc.job import BaseJob from calibre.devices.scanner import DeviceScanner from calibre.gui2 import config, error_dialog, Dispatcher, dynamic, \ - warning_dialog, \ - question_dialog, info_dialog, choose_dir + warning_dialog, info_dialog, choose_dir from calibre.ebooks.metadata import authors_to_string from calibre import preferred_encoding, prints, force_unicode from calibre.utils.filenames import ascii_filename @@ -665,6 +664,16 @@ class DeviceMixin(object): # {{{ if tweaks['auto_connect_to_folder']: self.connect_to_folder_named(tweaks['auto_connect_to_folder']) + def auto_convert_question(self, msg, autos): + autos = u'\n'.join(map(unicode, map(force_unicode, autos))) + return self.ask_a_yes_no_question( + _('No suitable formats'), msg, + buttons=QMessageBox.Yes|QMessageBox.Cancel, + ans_when_user_unavailable=True, + det_msg=autos, + show_copy_button=False + ) + def set_default_thumbnail(self, height): img = I('book.png', data=True) self.default_thumbnail = thumbnail(img, height, height) @@ -978,11 +987,9 @@ class DeviceMixin(object): # {{{ bad += auto else: autos = [self.library_view.model().db.title(id, index_is_id=True) for id in auto] - autos = '\n'.join('%s'%i for i in autos) - if question_dialog(self, _('No suitable formats'), + if self.auto_convert_question( _('Auto convert the following books before sending via ' - 'email?'), det_msg=autos, - buttons=QMessageBox.Yes|QMessageBox.Cancel): + 'email?'), autos): self.iactions['Convert Books'].auto_convert_mail(to, fmts, delete_from_library, auto, format) if bad: @@ -1085,11 +1092,9 @@ class DeviceMixin(object): # {{{ break if format is not None: autos = [self.library_view.model().db.title(id, index_is_id=True) for id in auto] - autos = '\n'.join('%s'%i for i in autos) - if question_dialog(self, _('No suitable formats'), + if self.auto_convert_question( _('Auto convert the following books before uploading to ' - 'the device?'), det_msg=autos, - buttons=QMessageBox.Yes|QMessageBox.Cancel): + 'the device?'), autos): self.iactions['Convert Books'].auto_convert_catalogs(auto, format) files = [f for f in files if f is not None] if not files: @@ -1170,11 +1175,9 @@ class DeviceMixin(object): # {{{ break if format is not None: autos = [self.library_view.model().db.title(id, index_is_id=True) for id in auto] - autos = '\n'.join('%s'%i for i in autos) - if question_dialog(self, _('No suitable formats'), + if self.auto_convert_question( _('Auto convert the following books before uploading to ' - 'the device?'), det_msg=autos, - buttons=QMessageBox.Yes|QMessageBox.Cancel): + 'the device?'), autos): self.iactions['Convert Books'].auto_convert_news(auto, format) files = [f for f in files if f is not None] for f in files: @@ -1289,11 +1292,9 @@ class DeviceMixin(object): # {{{ bad += auto else: autos = [self.library_view.model().db.title(id, index_is_id=True) for id in auto] - autos = '\n'.join('%s'%i for i in autos) - if question_dialog(self, _('No suitable formats'), + if self.auto_convert_question( _('Auto convert the following books before uploading to ' - 'the device?'), det_msg=autos, - buttons=QMessageBox.Yes|QMessageBox.Cancel): + 'the device?'), autos): self.iactions['Convert Books'].auto_convert(auto, on_card, format) if bad: diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 0ae15b0caa..d6d534dd40 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -26,7 +26,8 @@ from calibre.utils.ipc.server import Server from calibre.library.database2 import LibraryDatabase2 from calibre.customize.ui import interface_actions from calibre.gui2 import error_dialog, GetMetadata, open_local_file, \ - gprefs, max_available_height, config, info_dialog, Dispatcher + gprefs, max_available_height, config, info_dialog, Dispatcher, \ + question_dialog from calibre.gui2.cover_flow import CoverFlowMixin from calibre.gui2.widgets import ProgressIndicator from calibre.gui2.update import UpdateMixin @@ -181,9 +182,8 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ self.connect(self.donate_action, SIGNAL('triggered(bool)'), self.donate) self.connect(self.restore_action, SIGNAL('triggered()'), self.show_windows) - self.connect(self.system_tray_icon, - SIGNAL('activated(QSystemTrayIcon::ActivationReason)'), - self.system_tray_icon_activated) + self.system_tray_icon.activated.connect( + self.system_tray_icon_activated) ####################### Start spare job server ######################## @@ -250,7 +250,6 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ self.keyboard_interrupt.connect(self.quit, type=Qt.QueuedConnection) - self.read_settings() self.finalize_layout() if self.tool_bar.showing_donate: @@ -301,6 +300,16 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ else: self.show_windows() + @property + def is_minimized_to_tray(self): + return getattr(self, '__systray_minimized', False) + + def ask_a_yes_no_question(self, title, msg, **kwargs): + awu = kwargs.pop('ans_when_user_unavailable', True) + if self.is_minimized_to_tray: + return awu + return question_dialog(self, title, msg, **kwargs) + def hide_windows(self): for window in QApplication.topLevelWidgets(): if isinstance(window, (MainWindow, QDialog)) and \