Linux: Disable the optional system tray icon in linux because of bugs in the system tray icon implementation in Qt 5 on linux. See #1360652 (calibre 2.0 system tray icon missing, cannot quit)

https://bugreports.qt-project.org/browse/QTBUG-31762
This commit is contained in:
Kovid Goyal 2014-08-23 23:52:35 +05:30
parent 46832dea12
commit 3f290112a2
2 changed files with 9 additions and 2 deletions

View File

@ -14,6 +14,7 @@ from PyQt5.Qt import (
QWidget, QSizePolicy, QBrush, QPixmap, QSize, QPushButton, QVBoxLayout) QWidget, QSizePolicy, QBrush, QPixmap, QSize, QPushButton, QVBoxLayout)
from calibre import human_readable from calibre import human_readable
from calibre.constants import islinux, isbsd
from calibre.gui2.preferences import ConfigWidgetBase, test_widget, CommaSeparatedList from calibre.gui2.preferences import ConfigWidgetBase, test_widget, CommaSeparatedList
from calibre.gui2.preferences.look_feel_ui import Ui_Form from calibre.gui2.preferences.look_feel_ui import Ui_Form
from calibre.gui2 import config, gprefs, qt_app, open_local_file, question_dialog from calibre.gui2 import config, gprefs, qt_app, open_local_file, question_dialog
@ -179,6 +180,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
r('show_avg_rating', config) r('show_avg_rating', config)
r('disable_animations', config) r('disable_animations', config)
r('systray_icon', config, restart_required=True) r('systray_icon', config, restart_required=True)
if islinux or isbsd:
self.opt_systray_icon.setEnabled(False)
self.opt_systray_icon.setText(_('System tray icon is disabled because of bugs in Qt 5'))
r('show_splash_screen', gprefs) r('show_splash_screen', gprefs)
r('disable_tray_notification', config) r('disable_tray_notification', config)
r('use_roman_numerals_for_series_number', config) r('use_roman_numerals_for_series_number', config)

View File

@ -21,7 +21,7 @@ from PyQt5.Qt import (Qt, QTimer, QHelpEvent, QAction,
QDialog, QSystemTrayIcon, QApplication) QDialog, QSystemTrayIcon, QApplication)
from calibre import prints, force_unicode from calibre import prints, force_unicode
from calibre.constants import __appname__, isosx, filesystem_encoding, DEBUG from calibre.constants import __appname__, isosx, filesystem_encoding, DEBUG, islinux, isbsd
from calibre.utils.config import prefs, dynamic from calibre.utils.config import prefs, dynamic
from calibre.utils.ipc.server import Server from calibre.utils.ipc.server import Server
from calibre.db.legacy import LibraryDatabase from calibre.db.legacy import LibraryDatabase
@ -271,7 +271,10 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{
self.system_tray_icon.setToolTip('calibre') self.system_tray_icon.setToolTip('calibre')
self.system_tray_icon.tooltip_requested.connect( self.system_tray_icon.tooltip_requested.connect(
self.job_manager.show_tooltip) self.job_manager.show_tooltip)
if not config['systray_icon']: systray_ok = config['systray_icon'] and not (islinux or isbsd)
# System tray icons are broken on linux, see
# https://bugreports.qt-project.org/browse/QTBUG-31762
if not systray_ok:
self.system_tray_icon.hide() self.system_tray_icon.hide()
else: else:
self.system_tray_icon.show() self.system_tray_icon.show()