diff options
Diffstat (limited to 'main/src/ui')
| -rw-r--r-- | main/src/ui/conversation_selector/conversation_selector_row.vala | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/main/src/ui/conversation_selector/conversation_selector_row.vala b/main/src/ui/conversation_selector/conversation_selector_row.vala index fd5814fa..11107c57 100644 --- a/main/src/ui/conversation_selector/conversation_selector_row.vala +++ b/main/src/ui/conversation_selector/conversation_selector_row.vala @@ -13,6 +13,7 @@ namespace Dino.Ui { public class ConversationSelectorRow : ListBoxRow { [GtkChild] protected unowned AvatarPicture picture; + [GtkChild] protected unowned DrawingArea account_color_indicator; [GtkChild] protected unowned Label name_label; [GtkChild] protected unowned Label time_label; [GtkChild] protected unowned Label nick_label; @@ -63,6 +64,7 @@ public class ConversationSelectorRow : ListBoxRow { last_content_item = stream_interactor.get_module(ContentItemStore.IDENTITY).get_latest(conversation); picture.model = new ViewModel.CompatAvatarPictureModel(stream_interactor).set_conversation(conversation); + account_color_indicator.set_draw_func(draw_account_color); conversation.notify["read-up-to-item"].connect(() => update_read()); conversation.notify["pinned"].connect(() => { update_pinned_icon(); }); @@ -73,9 +75,31 @@ public class ConversationSelectorRow : ListBoxRow { connect_signals_weak(this); } + private static void draw_account_color(DrawingArea area, Cairo.Context context, int width, int height) { + ConversationSelectorRow? row = area.get_ancestor(typeof(ConversationSelectorRow)) as ConversationSelectorRow; + if (row == null) return; + + Gdk.RGBA color = Gdk.RGBA(); + if (!color.parse(Dino.Application.get_default().settings.get_account_color(row.conversation.account))) return; + + Gdk.cairo_set_source_rgba(context, color); + context.rectangle(0, 0, width, height); + context.fill(); + } + private static void connect_signals_weak(ConversationSelectorRow local_self) { var self_weak = WeakRef(local_self); + var settings = Dino.Application.get_default().settings; + ulong account_color_changed_handler_id = 0; + account_color_changed_handler_id = settings.account_color_changed.connect((account, color) => { + ConversationSelectorRow? self = self_weak.get() as ConversationSelectorRow?; + if (self == null) return; + if (self.conversation.account.equals(account)) { + self.account_color_indicator.queue_draw(); + } + }); + ulong room_info_updated_handler_id = 0; if (local_self.conversation.type_ == Conversation.Type.GROUPCHAT) { room_info_updated_handler_id = local_self.stream_interactor.get_module(MucManager.IDENTITY).room_info_updated.connect((account, jid) => { @@ -116,6 +140,7 @@ public class ConversationSelectorRow : ListBoxRow { local_self.weak_ref((self_obj) => { ConversationSelectorRow self = (ConversationSelectorRow) self_obj; + settings.disconnect(account_color_changed_handler_id); if (room_info_updated_handler_id != 0) { self.stream_interactor.get_module(MucManager.IDENTITY).disconnect(room_info_updated_handler_id); } |
