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