Daniel Brötzmann pushed to branch mainwindow at gajim / gajim


Commits:
76ff8ab1 by wurstsalat at 2021-09-05T12:47:35+02:00
Add back chat selection via Ctrl(+Shft)+Tab

- - - - -


4 changed files:

- gajim/gtk/chat_list.py
- gajim/gtk/chat_stack.py
- gajim/gtk/controls/base.py
- gajim/gtk/main.py


Changes:

=====================================
gajim/gtk/chat_list.py
=====================================
@@ -181,6 +181,57 @@ def select_chat(self, account, jid):
         row = self._chats[(account, jid)]
         self.select_row(row)
 
+    def select_next_chat(self, forwards):
+        # Selects the next chat, but prioritizes chats with unread messages.
+        # Direction is forwards (True) or backwards (False)
+        row = self.get_selected_chat()
+        if row is None:
+            row = self.get_row_at_index(0)
+            if row is not None:
+                self.select_chat(row.account, row.jid)
+                return
+
+        index = row.get_index()
+        current = index
+        unread_found = False
+        # Loop until finding a chat with unread count or completing a cycle
+        while True:
+            if forwards:
+                index += 1
+                if index >= len(self.get_children()):
+                    index = 0
+            else:
+                index -= 1
+                if index < 0:
+                    index = len(self.get_children()) - 1
+
+            row = self.get_row_at_index(index)
+            if row.unread_count > 0:
+                unread_found = True
+                break
+            if index == current:
+                break
+
+        if unread_found:
+            self.select_chat(row.account, row.jid)
+            return
+
+        index = row.get_index()
+        if forwards:
+            next_row = self.get_row_at_index(index + 1)
+        else:
+            next_row = self.get_row_at_index(index - 1)
+        if next_row is None:
+            if forwards:
+                next_row = self.get_row_at_index(0)
+            else:
+                last = len(self.get_children()) - 1
+                next_row = self.get_row_at_index(last)
+            self.select_chat(next_row.account, next_row.jid)
+            return
+
+        self.select_chat(next_row.account, next_row.jid)
+
     def toggle_chat_pinned(self, account, jid):
         row = self._chats[(account, jid)]
         row.toggle_pinned()


=====================================
gajim/gtk/chat_stack.py
=====================================
@@ -14,6 +14,7 @@
 
 import logging
 
+from gi.repository import GLib
 from gi.repository import Gtk
 
 from gajim.common import ged
@@ -94,6 +95,8 @@ def remove_chat(self, account, jid):
 
     def show_chat(self, account, jid):
         self.set_visible_child_name(f'{account}:{jid}')
+        control = self.get_control(account, jid)
+        GLib.idle_add(control.focus)
 
     def clear(self):
         self.set_visible_child_name('empty')


=====================================
gajim/gtk/controls/base.py
=====================================
@@ -831,8 +831,7 @@ def _on_message_textview_key_press_event(self, textview, 
event):
         if event.get_state() & Gdk.ModifierType.SHIFT_MASK:
             if (event.get_state() & Gdk.ModifierType.CONTROL_MASK and
                     event.keyval == Gdk.KEY_ISO_Left_Tab):
-                # TODO:
-                self.parent_win.move_to_next_unread_tab(False)
+                app.window.select_next_chat(False)
                 return True
 
             if event.keyval in (Gdk.KEY_Page_Down, Gdk.KEY_Page_Up):
@@ -841,8 +840,7 @@ def _on_message_textview_key_press_event(self, textview, 
event):
 
         if event.get_state() & Gdk.ModifierType.CONTROL_MASK:
             if event.keyval == Gdk.KEY_Tab:
-                # TODO
-                self.parent_win.move_to_next_unread_tab(True)
+                app.window.select_next_chat(True)
                 return True
 
         message_buffer = self.msg_textview.get_buffer()


=====================================
gajim/gtk/main.py
=====================================
@@ -339,6 +339,12 @@ def select_chat(self, account, jid):
         self._main_stack.show_chat_page()
         self._chat_page.select_chat(account, jid)
 
+    def select_next_chat(self, forwards):
+        chat_list_stack = self._chat_page.get_chat_list_stack()
+        chat_list = chat_list_stack.get_current_chat_list()
+        if chat_list is not None:
+            chat_list.select_next_chat(forwards)
+
     @staticmethod
     def _add_to_roster(_action, param):
         _workspace, account, jid = param.unpack()



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/76ff8ab14c1cbc0feaa3495f2c35b9c557005f45

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/76ff8ab14c1cbc0feaa3495f2c35b9c557005f45
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to