diff --git a/src/app/apps.rs b/src/app/apps.rs index 7b6624d..90d615c 100644 --- a/src/app/apps.rs +++ b/src/app/apps.rs @@ -213,11 +213,12 @@ impl App { let name = self.search_name.clone(); let theme_clone = theme.clone(); + let is_favourite = self.ranking == -1; row = row.push( Button::new(Text::new("♥️").width(Length::Fill).align_x(Alignment::End)) .on_press_with(move || Message::ToggleFavouriteApp(name.clone())) .width(Length::Fill) - .style(move |_, status| favourite_button_style(&theme_clone, status)), + .style(move |_, status| favourite_button_style(&theme_clone, status, is_favourite)), ); let msg = on_press.or(match self.open_command.clone() { diff --git a/src/app/tile.rs b/src/app/tile.rs index 02e029a..05c4166 100644 --- a/src/app/tile.rs +++ b/src/app/tile.rs @@ -109,16 +109,14 @@ impl AppIndex { } fn get_favourites(&self) -> Vec { - self.by_name + let mut favs: Vec = self + .by_name .values() - .filter_map(|x| { - if x.ranking == -1 { - Some(x.to_owned()) - } else { - None - } - }) - .collect() + .filter(|x| x.ranking == -1) + .cloned() + .collect(); + favs.sort_by(|a, b| a.display_name.cmp(&b.display_name)); + favs } fn empty() -> AppIndex { diff --git a/src/styles.rs b/src/styles.rs index 3972b9a..91861f8 100644 --- a/src/styles.rs +++ b/src/styles.rs @@ -75,12 +75,21 @@ pub fn result_button_style(theme: &ConfigTheme) -> button::Style { } } -pub fn favourite_button_style(theme: &ConfigTheme, status: button::Status) -> button::Style { +pub fn favourite_button_style( + theme: &ConfigTheme, + status: button::Status, + is_favourite: bool, +) -> button::Style { + let (base, pressed, hovered) = if is_favourite { + (1.0, 0.8, 0.9) + } else { + (0.1, 1.0, 0.5) + }; + let text_color = match status { - button::Status::Pressed => theme.text_color(1.), - button::Status::Hovered => theme.text_color(0.5), - button::Status::Active => theme.text_color(0.1), - button::Status::Disabled => theme.text_color(0.1), + button::Status::Pressed => theme.text_color(pressed), + button::Status::Hovered => theme.text_color(hovered), + _ => theme.text_color(base), }; button::Style {