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/76ff8ab14c1cbc0feaa3495f2c35b9c55...