diff options
author | mjk <mjk@disroot.org> | 2023-05-01 16:39:44 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2023-05-09 21:47:24 +0300 |
commit | 0ecae706ca7fc094398be32d28b393b77c3bfa97 (patch) | |
tree | 8aee2c92df82ea20c42ae472a417c359ffd19413 | |
parent | 3e1fa2e9055197acafa349d55359cf0afa498c52 (diff) |
imprv: Notifications: Withdraw all when a corresponding chat is read
Fixes #11030
-rw-r--r-- | gajim/common/events.py | 7 | ||||
-rw-r--r-- | gajim/gtk/chat_list.py | 3 | ||||
-rw-r--r-- | gajim/gtk/notification.py | 6 |
3 files changed, 14 insertions, 2 deletions
diff --git a/gajim/common/events.py b/gajim/common/events.py index 92496c5b0..ba5b19e52 100644 --- a/gajim/common/events.py +++ b/gajim/common/events.py @@ -123,6 +123,13 @@ class Notification(ApplicationEvent): @dataclass +class ChatRead(ApplicationEvent): + name: str = field(init=False, default='chat-read') + account: str + jid: JID + + +@dataclass class StanzaSent(ApplicationEvent): name: str = field(init=False, default='stanza-sent') account: str diff --git a/gajim/gtk/chat_list.py b/gajim/gtk/chat_list.py index 23046225d..c2a9feba8 100644 --- a/gajim/gtk/chat_list.py +++ b/gajim/gtk/chat_list.py @@ -163,8 +163,9 @@ class ChatList(Gtk.ListBox, EventHelper): def mark_as_read(self, account: str, jid: JID) -> None: chat = self._chats.get((account, jid)) - if chat is not None: + if chat is not None and chat.get_real_unread_count() > 0: chat.reset_unread() + app.ged.raise_event(events.ChatRead(account=account, jid=jid)) def toggle_chat_pinned(self, account: str, jid: JID) -> None: row = self._chats[(account, jid)] diff --git a/gajim/gtk/notification.py b/gajim/gtk/notification.py index b31a2d504..092420f52 100644 --- a/gajim/gtk/notification.py +++ b/gajim/gtk/notification.py @@ -83,7 +83,8 @@ class NotificationBackend(EventHelper): self.register_events([ ('notification', ged.GUI2, self._on_notification), - ('account-enabled', ged.GUI2, self._on_account_enabled) + ('account-enabled', ged.GUI2, self._on_account_enabled), + ('chat-read', ged.GUI2, self._on_chat_read) ]) for client in app.get_clients(): @@ -111,6 +112,9 @@ class NotificationBackend(EventHelper): client = app.get_client(event.account) client.connect_signal('state-changed', self._on_client_state_changed) + def _on_chat_read(self, event: events.ChatRead) -> None: + self._withdraw(['new-message', event.account, event.jid]) + def _on_client_state_changed(self, client: Client, _signal_name: str, |