aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_selector/conversation_selector.vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2023-01-11 19:54:02 +0100
committerfiaxh <git@lightrise.org>2023-01-11 19:54:02 +0100
commit75500dc767f2cf657c0fbb5d2a4d4557183ed2e9 (patch)
tree87f67a933f0459f966932531b427944bb9f67a1f /main/src/ui/conversation_selector/conversation_selector.vala
parentcb3b19b01deb8460627578b885339e7528411f6f (diff)
downloaddino-75500dc767f2cf657c0fbb5d2a4d4557183ed2e9.tar.gz
dino-75500dc767f2cf657c0fbb5d2a4d4557183ed2e9.zip
Support pinning of conversations (locally)
fixes #290 fixes #1330
Diffstat (limited to 'main/src/ui/conversation_selector/conversation_selector.vala')
-rw-r--r--main/src/ui/conversation_selector/conversation_selector.vala8
1 files changed, 8 insertions, 0 deletions
diff --git a/main/src/ui/conversation_selector/conversation_selector.vala b/main/src/ui/conversation_selector/conversation_selector.vala
index 609e1be1..8a4506f3 100644
--- a/main/src/ui/conversation_selector/conversation_selector.vala
+++ b/main/src/ui/conversation_selector/conversation_selector.vala
@@ -75,6 +75,8 @@ public class ConversationSelector : Widget {
private void add_conversation(Conversation conversation) {
ConversationSelectorRow row;
if (!rows.has_key(conversation)) {
+ conversation.notify["pinned"].connect(list_box.invalidate_sort);
+
row = new ConversationSelectorRow(stream_interactor, conversation);
rows[conversation] = row;
list_box.append(row);
@@ -119,6 +121,8 @@ public class ConversationSelector : Widget {
private async void remove_conversation(Conversation conversation) {
select_fallback_conversation(conversation);
if (rows.has_key(conversation)) {
+ conversation.notify["pinned"].disconnect(list_box.invalidate_sort);
+
yield rows[conversation].colapse();
list_box.remove(rows[conversation]);
rows.unset(conversation);
@@ -149,6 +153,10 @@ public class ConversationSelector : Widget {
if (cr1 != null && cr2 != null) {
Conversation c1 = cr1.conversation;
Conversation c2 = cr2.conversation;
+
+ int pin_comp = c2.pinned - c1.pinned;
+ if (pin_comp != 0) return pin_comp;
+
if (c1.last_active == null) return -1;
if (c2.last_active == null) return 1;
int comp = c2.last_active.compare(c1.last_active);