Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwurstsalat <mailtrash@posteo.de>2022-10-09 00:35:30 +0300
committerwurstsalat <mailtrash@posteo.de>2022-10-12 00:05:55 +0300
commit99d3a6777ece113271835756ae386f2794bc794b (patch)
treeb33362e9b0d8b085a77da20f85bf5d7c6a34e051
parent073de0f68010449deb8891663212cada9c74c321 (diff)
imprv: Workspaces: Add 'Mark as read' menu itemworkspace-mark-as-read
Fixes #11198
-rw-r--r--gajim/gtk/chat_list.py8
-rw-r--r--gajim/gtk/const.py1
-rw-r--r--gajim/gtk/main.py26
-rw-r--r--gajim/gtk/menus.py9
4 files changed, 42 insertions, 2 deletions
diff --git a/gajim/gtk/chat_list.py b/gajim/gtk/chat_list.py
index 4cb9479cc..514d69fbd 100644
--- a/gajim/gtk/chat_list.py
+++ b/gajim/gtk/chat_list.py
@@ -107,8 +107,12 @@ class ChatList(Gtk.ListBox, EventHelper):
def workspace_id(self) -> str:
return self._workspace_id
- def get_unread_count(self) -> int:
- return sum(chats.unread_count for chats in self._chats.values())
+ def get_unread_count(self, include_silent: bool = False) -> int:
+ if include_silent:
+ return sum(chat.get_real_unread_count() for
+ chat in self._chats.values())
+
+ return sum(chat.unread_count for chat in self._chats.values())
def get_chat_unread_count(self,
account: str,
diff --git a/gajim/gtk/const.py b/gajim/gtk/const.py
index fc89baff9..dbc6446d7 100644
--- a/gajim/gtk/const.py
+++ b/gajim/gtk/const.py
@@ -248,6 +248,7 @@ MAIN_WIN_ACTIONS = [
('edit-workspace', 's', True),
('remove-workspace', 's', True),
('activate-workspace', 's', True),
+ ('mark-workspace-as-read', 's', True),
('add-chat', 'a{sv}', True),
('add-group-chat', 'as', True),
('add-to-roster', 'a{sv}', True),
diff --git a/gajim/gtk/main.py b/gajim/gtk/main.py
index 5f234af5c..b707c3888 100644
--- a/gajim/gtk/main.py
+++ b/gajim/gtk/main.py
@@ -186,6 +186,22 @@ class MainWindow(Gtk.ApplicationWindow, EventHelper):
self.deiconify()
self.present_with_time(Gtk.get_current_event_time())
+ def mark_workspace_as_read(self, workspace: str) -> None:
+ chat_list_stack = self._chat_page.get_chat_list_stack()
+ chat_list = chat_list_stack.get_chatlist(workspace)
+ open_chats = chat_list.get_open_chats()
+ for chat in open_chats:
+ self.mark_as_read(chat['account'], chat['jid'])
+
+ def _mark_workspace_as_read(self,
+ _action: Gio.SimpleAction,
+ param: GLib.Variant
+ ) -> None:
+
+ workspace_id = param.get_string() or None
+ if workspace_id is not None:
+ self.mark_workspace_as_read(workspace_id)
+
def _prepare_window(self) -> None:
window_width = app.settings.get('mainwin_width')
window_height = app.settings.get('mainwin_height')
@@ -370,6 +386,7 @@ class MainWindow(Gtk.ApplicationWindow, EventHelper):
('edit-workspace', self._edit_workspace),
('remove-workspace', self._remove_workspace),
('activate-workspace', self._activate_workspace),
+ ('mark-workspace-as-read', self._mark_workspace_as_read),
('add-chat', self._add_chat),
('add-group-chat', self._add_group_chat),
('add-to-roster', self._add_to_roster),
@@ -839,6 +856,15 @@ class MainWindow(Gtk.ApplicationWindow, EventHelper):
chat_list_stack = self._chat_page.get_chat_list_stack()
return chat_list_stack.get_total_unread_count()
+ def get_workspace_unread_count(self,
+ workspace: str,
+ include_silent: bool = False
+ ) -> int:
+
+ chat_list_stack = self._chat_page.get_chat_list_stack()
+ chat_list = chat_list_stack.get_chatlist(workspace)
+ return chat_list.get_unread_count(include_silent)
+
def get_chat_unread_count(self,
account: str,
jid: JID,
diff --git a/gajim/gtk/menus.py b/gajim/gtk/menus.py
index 8b22d43b8..a852c3130 100644
--- a/gajim/gtk/menus.py
+++ b/gajim/gtk/menus.py
@@ -597,6 +597,15 @@ def get_workspace_menu(workspace_id: str) -> GajimMenu:
(_('Remove'), remove_action, f'"{workspace_id}"'),
]
+ unread_count = app.window.get_workspace_unread_count(
+ workspace_id, include_silent=True)
+ if unread_count:
+ menuitems.insert(
+ 0,
+ (_('Mark as read'),
+ 'win.mark-workspace-as-read',
+ f'"{workspace_id}"'))
+
return GajimMenu.from_list(menuitems)