add option to change notification click behavior

This commit is contained in:
dries.k
2022-09-03 12:43:52 +02:00
parent 4f6ce0db56
commit 548b49f610
5 changed files with 82 additions and 58 deletions

View File

@@ -14,6 +14,7 @@ DEFAULT_SETTINGS = {
"tray/notifications/priority": 5, "tray/notifications/priority": 5,
"tray/notifications/duration_ms": 5000, "tray/notifications/duration_ms": 5000,
"tray/notifications/icon/show": True, "tray/notifications/icon/show": True,
"tray/notifications/click": True,
"watchdog/interval/s": 60, "watchdog/interval/s": 60,
"MessageWidget/image/size": 33, "MessageWidget/image/size": 33,
"MainWindow/label/size": 25, "MainWindow/label/size": 25,

View File

@@ -335,6 +335,10 @@ class MainApplication(QtWidgets.QApplication):
closed_callback=self.listener_closed_callback, closed_callback=self.listener_closed_callback,
) )
def tray_notification_clicked_callback(self):
if settings.value("tray/notifications/click", type=bool):
self.main_window.bring_to_front()
def tray_activated_callback( def tray_activated_callback(
self, reason: QtWidgets.QSystemTrayIcon.ActivationReason self, reason: QtWidgets.QSystemTrayIcon.ActivationReason
): ):
@@ -349,7 +353,7 @@ class MainApplication(QtWidgets.QApplication):
self.tray.actionSettings.triggered.connect(self.settings_callback) self.tray.actionSettings.triggered.connect(self.settings_callback)
self.tray.actionShowWindow.triggered.connect(self.main_window.bring_to_front) self.tray.actionShowWindow.triggered.connect(self.main_window.bring_to_front)
self.tray.actionReconnect.triggered.connect(self.reconnect_callback) self.tray.actionReconnect.triggered.connect(self.reconnect_callback)
self.tray.messageClicked.connect(self.main_window.bring_to_front) self.tray.messageClicked.connect(self.tray_notification_clicked_callback)
self.tray.activated.connect(self.tray_activated_callback) self.tray.activated.connect(self.tray_activated_callback)
self.main_window.refresh.connect(self.refresh_callback) self.main_window.refresh.connect(self.refresh_callback)

View File

@@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object): class Ui_Dialog(object):
def setupUi(self, Dialog): def setupUi(self, Dialog):
Dialog.setObjectName("Dialog") Dialog.setObjectName("Dialog")
Dialog.resize(384, 274) Dialog.resize(384, 285)
self.gridLayout = QtWidgets.QGridLayout(Dialog) self.gridLayout = QtWidgets.QGridLayout(Dialog)
self.gridLayout.setObjectName("gridLayout") self.gridLayout.setObjectName("gridLayout")
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
@@ -30,32 +30,35 @@ class Ui_Dialog(object):
self.groupBox_notifications.setObjectName("groupBox_notifications") self.groupBox_notifications.setObjectName("groupBox_notifications")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_notifications) self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_notifications)
self.gridLayout_4.setObjectName("gridLayout_4") self.gridLayout_4.setObjectName("gridLayout_4")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) self.cb_notify = QtWidgets.QCheckBox(self.groupBox_notifications)
self.gridLayout_4.addItem(spacerItem, 0, 2, 1, 1) self.cb_notify.setObjectName("cb_notify")
self.label_notification_duration_ms = QtWidgets.QLabel(self.groupBox_notifications) self.gridLayout_4.addWidget(self.cb_notify, 2, 0, 1, 3)
self.label_notification_duration_ms.setObjectName("label_notification_duration_ms")
self.gridLayout_4.addWidget(self.label_notification_duration_ms, 1, 2, 1, 1)
self.label_notification_priority = QtWidgets.QLabel(self.groupBox_notifications)
self.label_notification_priority.setObjectName("label_notification_priority")
self.gridLayout_4.addWidget(self.label_notification_priority, 0, 0, 1, 1)
self.label_notification_duration = QtWidgets.QLabel(self.groupBox_notifications) self.label_notification_duration = QtWidgets.QLabel(self.groupBox_notifications)
self.label_notification_duration.setObjectName("label_notification_duration") self.label_notification_duration.setObjectName("label_notification_duration")
self.gridLayout_4.addWidget(self.label_notification_duration, 1, 0, 1, 1) self.gridLayout_4.addWidget(self.label_notification_duration, 1, 0, 1, 1)
self.spin_duration = QtWidgets.QSpinBox(self.groupBox_notifications) self.label_notification_duration_ms = QtWidgets.QLabel(self.groupBox_notifications)
self.spin_duration.setMinimum(500) self.label_notification_duration_ms.setObjectName("label_notification_duration_ms")
self.spin_duration.setMaximum(30000) self.gridLayout_4.addWidget(self.label_notification_duration_ms, 1, 2, 1, 1)
self.spin_duration.setSingleStep(100)
self.spin_duration.setObjectName("spin_duration")
self.gridLayout_4.addWidget(self.spin_duration, 1, 1, 1, 1)
self.spin_priority = QtWidgets.QSpinBox(self.groupBox_notifications) self.spin_priority = QtWidgets.QSpinBox(self.groupBox_notifications)
self.spin_priority.setMinimum(1) self.spin_priority.setMinimum(1)
self.spin_priority.setMaximum(10) self.spin_priority.setMaximum(10)
self.spin_priority.setProperty("value", 5) self.spin_priority.setProperty("value", 5)
self.spin_priority.setObjectName("spin_priority") self.spin_priority.setObjectName("spin_priority")
self.gridLayout_4.addWidget(self.spin_priority, 0, 1, 1, 1) self.gridLayout_4.addWidget(self.spin_priority, 0, 1, 1, 1)
self.cb_notify = QtWidgets.QCheckBox(self.groupBox_notifications) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.cb_notify.setObjectName("cb_notify") self.gridLayout_4.addItem(spacerItem, 0, 2, 1, 1)
self.gridLayout_4.addWidget(self.cb_notify, 2, 0, 1, 3) self.label_notification_priority = QtWidgets.QLabel(self.groupBox_notifications)
self.label_notification_priority.setObjectName("label_notification_priority")
self.gridLayout_4.addWidget(self.label_notification_priority, 0, 0, 1, 1)
self.spin_duration = QtWidgets.QSpinBox(self.groupBox_notifications)
self.spin_duration.setMinimum(500)
self.spin_duration.setMaximum(30000)
self.spin_duration.setSingleStep(100)
self.spin_duration.setObjectName("spin_duration")
self.gridLayout_4.addWidget(self.spin_duration, 1, 1, 1, 1)
self.cb_notification_click = QtWidgets.QCheckBox(self.groupBox_notifications)
self.cb_notification_click.setObjectName("cb_notification_click")
self.gridLayout_4.addWidget(self.cb_notification_click, 3, 0, 1, 3)
self.verticalLayout_4.addWidget(self.groupBox_notifications) self.verticalLayout_4.addWidget(self.groupBox_notifications)
self.groupBox_server_info = QtWidgets.QGroupBox(self.tab_general) self.groupBox_server_info = QtWidgets.QGroupBox(self.tab_general)
self.groupBox_server_info.setObjectName("groupBox_server_info") self.groupBox_server_info.setObjectName("groupBox_server_info")
@@ -153,10 +156,11 @@ class Ui_Dialog(object):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog")) Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.groupBox_notifications.setTitle(_translate("Dialog", "Notifications")) self.groupBox_notifications.setTitle(_translate("Dialog", "Notifications"))
self.cb_notify.setText(_translate("Dialog", "Show a notification for missed messages after reconnecting"))
self.label_notification_duration.setText(_translate("Dialog", "Notification duration:"))
self.label_notification_duration_ms.setText(_translate("Dialog", "ms")) self.label_notification_duration_ms.setText(_translate("Dialog", "ms"))
self.label_notification_priority.setText(_translate("Dialog", "Minimum priority to show notifications:")) self.label_notification_priority.setText(_translate("Dialog", "Minimum priority to show notifications:"))
self.label_notification_duration.setText(_translate("Dialog", "Notification duration:")) self.cb_notification_click.setText(_translate("Dialog", "Clicking the notification pop-up opens the main window"))
self.cb_notify.setText(_translate("Dialog", "Show a notification for missed messages after reconnecting"))
self.groupBox_server_info.setTitle(_translate("Dialog", "Server info")) self.groupBox_server_info.setTitle(_translate("Dialog", "Server info"))
self.pb_change_server_info.setText(_translate("Dialog", "Change server info")) self.pb_change_server_info.setText(_translate("Dialog", "Change server info"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_general), _translate("Dialog", "General")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_general), _translate("Dialog", "General"))

View File

@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>384</width> <width>384</width>
<height>274</height> <height>285</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -40,30 +40,10 @@
<string>Notifications</string> <string>Notifications</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_4"> <layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="2"> <item row="2" column="0" colspan="3">
<spacer name="horizontalSpacer_3"> <widget class="QCheckBox" name="cb_notify">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_notification_duration_ms">
<property name="text"> <property name="text">
<string>ms</string> <string>Show a notification for missed messages after reconnecting</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_notification_priority">
<property name="text">
<string>Minimum priority to show notifications:</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -74,16 +54,10 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="2">
<widget class="QSpinBox" name="spin_duration"> <widget class="QLabel" name="label_notification_duration_ms">
<property name="minimum"> <property name="text">
<number>500</number> <string>ms</string>
</property>
<property name="maximum">
<number>30000</number>
</property>
<property name="singleStep">
<number>100</number>
</property> </property>
</widget> </widget>
</item> </item>
@@ -100,10 +74,43 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="3"> <item row="0" column="2">
<widget class="QCheckBox" name="cb_notify"> <spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_notification_priority">
<property name="text"> <property name="text">
<string>Show a notification for missed messages after reconnecting</string> <string>Minimum priority to show notifications:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spin_duration">
<property name="minimum">
<number>500</number>
</property>
<property name="maximum">
<number>30000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QCheckBox" name="cb_notification_click">
<property name="text">
<string>Clicking the notification pop-up opens the main window</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -56,6 +56,10 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
settings.value("message/check_missed/notify", type=bool) settings.value("message/check_missed/notify", type=bool)
) )
self.cb_notification_click.setChecked(
settings.value("tray/notifications/click", type=bool)
)
# Logging # Logging
self.combo_logging.addItems( self.combo_logging.addItems(
[ [
@@ -149,6 +153,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
self.spin_priority.valueChanged.connect(self.settings_changed_callback) self.spin_priority.valueChanged.connect(self.settings_changed_callback)
self.spin_duration.valueChanged.connect(self.settings_changed_callback) self.spin_duration.valueChanged.connect(self.settings_changed_callback)
self.cb_notify.stateChanged.connect(self.settings_changed_callback) self.cb_notify.stateChanged.connect(self.settings_changed_callback)
self.cb_notification_click.stateChanged.connect(self.settings_changed_callback)
# Server info # Server info
self.pb_change_server_info.clicked.connect(self.change_server_info_callback) self.pb_change_server_info.clicked.connect(self.change_server_info_callback)
@@ -180,6 +185,9 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
settings.setValue("tray/notifications/priority", self.spin_priority.value()) settings.setValue("tray/notifications/priority", self.spin_priority.value())
settings.setValue("tray/notifications/duration_ms", self.spin_duration.value()) settings.setValue("tray/notifications/duration_ms", self.spin_duration.value())
settings.setValue("message/check_missed/notify", self.cb_notify.isChecked()) settings.setValue("message/check_missed/notify", self.cb_notify.isChecked())
settings.setValue(
"tray/notifications/click", self.cb_notification_click.isChecked()
)
# Logging # Logging
selected_level = self.combo_logging.currentText() selected_level = self.combo_logging.currentText()