diff --git a/gotify_tray/gui/MainApplication.py b/gotify_tray/gui/MainApplication.py index 3df6d56..52030fb 100644 --- a/gotify_tray/gui/MainApplication.py +++ b/gotify_tray/gui/MainApplication.py @@ -266,6 +266,10 @@ class MainApplication(QtWidgets.QApplication): def new_message_callback(self, message: gotify.GotifyMessageModel): self.add_message_to_model(message) + # Change the tray icon to show there are unread notifications + if not self.main_window.isActiveWindow(): + self.tray.set_icon_unread() + # Show a notification if ( message.priority < settings.value("tray/notifications/priority", type=int) @@ -385,6 +389,7 @@ class MainApplication(QtWidgets.QApplication): self.main_window.delete_message.connect(self.delete_message_callback) self.main_window.image_popup.connect(self.image_popup_callback) self.main_window.hidden.connect(self.main_window_hidden_callback) + self.main_window.activated.connect(self.tray.revert_icon) self.watchdog.closed.connect(lambda: self.listener_closed_callback(None, None)) diff --git a/gotify_tray/gui/images/tray-unread-macos.png b/gotify_tray/gui/images/tray-unread-macos.png new file mode 100644 index 0000000..f9edb2c Binary files /dev/null and b/gotify_tray/gui/images/tray-unread-macos.png differ diff --git a/gotify_tray/gui/images/tray-unread.png b/gotify_tray/gui/images/tray-unread.png new file mode 100644 index 0000000..5d397d7 Binary files /dev/null and b/gotify_tray/gui/images/tray-unread.png differ diff --git a/gotify_tray/gui/widgets/MainWindow.py b/gotify_tray/gui/widgets/MainWindow.py index 0992c38..683f2a4 100644 --- a/gotify_tray/gui/widgets/MainWindow.py +++ b/gotify_tray/gui/widgets/MainWindow.py @@ -23,12 +23,15 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): application_selection_changed = QtCore.pyqtSignal(QtGui.QStandardItem) image_popup = QtCore.pyqtSignal(str, QtCore.QPoint) hidden = QtCore.pyqtSignal() + activated = QtCore.pyqtSignal() def __init__( self, application_model: ApplicationModel, messages_model: MessagesModel ): super(MainWindow, self).__init__() self.setupUi(self) + + self.installEventFilter(self) self.setWindowTitle(__title__) @@ -177,3 +180,9 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def closeEvent(self, e: QtGui.QCloseEvent) -> None: self.hide() self.hidden.emit() + + def eventFilter(self, object: QtCore.QObject, event: QtCore.QEvent) -> bool: + if event.type() == QtCore.QEvent.Type.WindowActivate: + self.activated.emit() + + return super().eventFilter(object, event) diff --git a/gotify_tray/gui/widgets/Tray.py b/gotify_tray/gui/widgets/Tray.py index 6339d0c..ab77124 100644 --- a/gotify_tray/gui/widgets/Tray.py +++ b/gotify_tray/gui/widgets/Tray.py @@ -44,7 +44,18 @@ class Tray(QtWidgets.QSystemTrayIcon): self.setContextMenu(menu) def set_icon_ok(self): + self.icon_error = False self.setIcon(QtGui.QIcon(get_icon("tray"))) def set_icon_error(self): + self.icon_error = True self.setIcon(QtGui.QIcon(get_icon("tray-error"))) + + def set_icon_unread(self): + self.setIcon(QtGui.QIcon(get_icon("tray-unread"))) + + def revert_icon(self): + if self.icon_error: + self.set_icon_error() + else: + self.set_icon_ok()