diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala index 132705cf..ca78c735 100644 --- a/main/src/ui/application.vala +++ b/main/src/ui/application.vala @@ -132,6 +132,16 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application { }); add_action(conference_action); set_accels_for_action("app.add_conference", new string[]{"G"}); + + SimpleAction loop_conversations_action = new SimpleAction("loop_conversations", null); + loop_conversations_action.activate.connect(() => {controller.loop_conversations(false);}); + add_action(loop_conversations_action); + set_accels_for_action("app.loop_conversations", new string[]{"Tab"}); + + SimpleAction loop_conversations_bw_action = new SimpleAction("loop_conversations_bw", null); + loop_conversations_bw_action.activate.connect(() => {controller.loop_conversations(true);}); + add_action(loop_conversations_bw_action); + set_accels_for_action("app.loop_conversations_bw", new string[]{"Tab"}); } public bool use_csd() { diff --git a/main/src/ui/unified_window_controller.vala b/main/src/ui/unified_window_controller.vala index bef6b7dc..ce15ecc9 100644 --- a/main/src/ui/unified_window_controller.vala +++ b/main/src/ui/unified_window_controller.vala @@ -142,6 +142,15 @@ public class UnifiedWindowController : Object { } } + public void loop_conversations(bool backwards = false) { + Gee.List conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations(); + conversations.sort((a, b) => { return b.last_active.compare(a.last_active); }); + int index = conversations.index_of(this.conversation); + index += backwards ? -1 : 1; + select_conversation(conversations.get(index % conversations.size)); + } + + private void update_conversation_display_name() { conversation_display_name = Util.get_conversation_display_name(stream_interactor, conversation); }