From 0a733025548fd5e2b59eecfd2e8d00dce662b1db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Sun, 27 Mar 2022 12:48:17 +0200 Subject: [PATCH] sidebar: Fix room highlight --- src/session/room/highlight_flags.rs | 8 +----- src/session/room/mod.rs | 2 +- src/session/sidebar/room_row.rs | 42 +++++++++++++---------------- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/session/room/highlight_flags.rs b/src/session/room/highlight_flags.rs index d4d09616..72b803b4 100644 --- a/src/session/room/highlight_flags.rs +++ b/src/session/room/highlight_flags.rs @@ -2,18 +2,12 @@ use gtk::glib; #[glib::flags(name = "HighlightFlags")] pub enum HighlightFlags { - #[flags_value(name = "NONE")] - NONE = 0b00000000, - #[flags_value(name = "HIGHLIGHT")] HIGHLIGHT = 0b00000001, - #[flags_value(name = "BOLD")] BOLD = 0b00000010, - #[flags_value(skip)] - HIGHLIGHT_BOLD = Self::HIGHLIGHT.bits() | Self::BOLD.bits(), } impl Default for HighlightFlags { fn default() -> Self { - HighlightFlags::NONE + HighlightFlags::empty() } } diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs index 720b6e68..3c8d0bb0 100644 --- a/src/session/room/mod.rs +++ b/src/session/room/mod.rs @@ -639,7 +639,7 @@ impl Room { if count > 0 { HighlightFlags::HIGHLIGHT } else { - HighlightFlags::NONE + HighlightFlags::empty() } } diff --git a/src/session/sidebar/room_row.rs b/src/session/sidebar/room_row.rs index fee66a87..c8c960e7 100644 --- a/src/session/sidebar/room_row.rs +++ b/src/session/sidebar/room_row.rs @@ -187,44 +187,40 @@ impl RoomRow { priv_.signal_handler.replace(Some(room.connect_notify_local( Some("highlight"), clone!(@weak self as obj => move |_, _| { - obj.set_highlight(); + obj.update_highlight(); }), ))); if room.category() == RoomType::Left { priv_.display_name.add_css_class("dim-label"); } - - self.set_highlight(); } priv_.room.replace(room); + self.update_highlight(); self.update_actions(); self.notify("room"); } - fn set_highlight(&self) { + fn update_highlight(&self) { let priv_ = self.imp(); if let Some(room) = &*priv_.room.borrow() { - match room.highlight() { - HighlightFlags::NONE => { - priv_.notification_count.remove_css_class("highlight"); - priv_.display_name.remove_css_class("bold"); - } - HighlightFlags::HIGHLIGHT => { - priv_.notification_count.add_css_class("highlight"); - priv_.display_name.remove_css_class("bold"); - } - HighlightFlags::BOLD => { - priv_.display_name.add_css_class("bold"); - priv_.notification_count.remove_css_class("highlight"); - } - HighlightFlags::HIGHLIGHT_BOLD => { - priv_.notification_count.add_css_class("highlight"); - priv_.display_name.add_css_class("bold"); - } - _ => {} - }; + let flags = room.highlight(); + + if flags.contains(HighlightFlags::HIGHLIGHT) { + priv_.notification_count.add_css_class("highlight"); + } else { + priv_.notification_count.remove_css_class("highlight"); + } + + if flags.contains(HighlightFlags::BOLD) { + priv_.display_name.add_css_class("bold"); + } else { + priv_.display_name.remove_css_class("bold"); + } + } else { + priv_.notification_count.remove_css_class("highlight"); + priv_.display_name.remove_css_class("bold"); } }