Skip to content

Commit f27f0f6

Browse files
committed
Improve custom image selector
1 parent 7b4400b commit f27f0f6

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

src/dialogs/create_distrobox_dialog.rs

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::sidebar_row::SidebarRow;
1212
use std::path::PathBuf;
1313
use std::{cell::RefCell, rc::Rc};
1414

15-
use crate::image_row_item;
15+
use crate::{distro_icon, image_row_item};
1616
use glib::clone;
1717
use gtk::glib::{derived_properties, Properties};
1818

@@ -534,17 +534,18 @@ impl CreateDistroboxDialog {
534534
let stack = gtk::Stack::new();
535535
stack.add_named(&scrolled_window, Some("list"));
536536

537-
let empty_page = adw::StatusPage::new();
538-
empty_page.set_title("No images found");
539-
empty_page.set_description(Some("You can use a custom image"));
540-
empty_page.set_icon_name(Some("system-search-symbolic"));
541-
542-
let custom_image_btn = gtk::Button::with_label("Use custom image");
543-
custom_image_btn.add_css_class("pill");
544-
custom_image_btn.add_css_class("suggested-action");
545-
custom_image_btn.set_halign(gtk::Align::Center);
537+
let empty_page = gtk::Box::new(gtk::Orientation::Vertical, 4);
538+
539+
let custom_list = gtk::ListBox::new();
540+
custom_list.add_css_class("navigation-sidebar");
541+
custom_list.set_selection_mode(gtk::SelectionMode::None);
542+
543+
let custom_row_item = image_row_item::ImageRowItem::new();
544+
distro_icon::remove_color(&custom_row_item.imp().icon);
546545

547-
empty_page.set_child(Some(&custom_image_btn));
546+
custom_list.append(&custom_row_item);
547+
548+
empty_page.append(&custom_list);
548549
stack.add_named(&empty_page, Some("empty"));
549550

550551
view.set_content(Some(&stack));
@@ -564,33 +565,34 @@ impl CreateDistroboxDialog {
564565
stack.set_visible_child_name("empty");
565566
}
566567

567-
// Update button label
568+
// Update custom row
568569
search_entry.connect_search_changed(clone!(
569570
#[weak]
570-
custom_image_btn,
571+
custom_row_item,
572+
#[weak]
573+
custom_list,
571574
move |entry| {
572575
let text = entry.text();
573576
if text.is_empty() {
574-
custom_image_btn.set_label("Use custom image");
575-
custom_image_btn.set_sensitive(false);
577+
custom_list.set_sensitive(false);
576578
} else {
577-
custom_image_btn.set_label(&format!("Use '{}'", text));
578-
custom_image_btn.set_sensitive(true);
579+
custom_list.set_sensitive(true);
580+
custom_row_item.set_image(&text);
579581
}
580582
}
581583
));
582584
// Initial button state
583585
if search_entry.text().is_empty() {
584-
custom_image_btn.set_sensitive(false);
586+
custom_list.set_sensitive(false);
585587
}
586588

587589
// Handle custom image selection
588-
custom_image_btn.connect_clicked(clone!(
590+
custom_list.connect_row_activated(clone!(
589591
#[weak(rename_to=this)]
590592
self,
591593
#[weak]
592594
search_entry,
593-
move |_| {
595+
move |_, _| {
594596
let image = search_entry.text();
595597
if !image.is_empty() {
596598
this.imp().selected_image.replace(image.to_string());

src/distro_icon.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ pub fn setup(image_widget: &gtk::Image) {
77
image_widget.add_css_class("distro-color-fg");
88
}
99

10+
pub fn remove_color(image_widget: &gtk::Image) {
11+
image_widget.remove_css_class("distro-color-fg");
12+
}
13+
1014
pub fn set_image(image_widget: &gtk::Image, container_image: &str) {
1115
let distro = known_distro_by_image(container_image);
1216
if let Some(distro) = &distro {
@@ -21,7 +25,7 @@ pub fn set_image(image_widget: &gtk::Image, container_image: &str) {
2125
);
2226

2327
image_widget.set_paintable(Some(&icon));
24-
image_widget.add_css_class(&distro.name());
28+
image_widget.add_css_class(format!("distro-{}", &distro.name()).as_str());
2529
} else {
2630
image_widget.set_icon_name(Some(KnownDistro::default_icon_name()));
2731
}

src/known_distros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ pub fn generate_css() -> String {
105105
let name = distro.name();
106106
let color = distro.color();
107107
out.push_str(&format!(
108-
".{name} {{
108+
".distro-{name} {{
109109
--distro-color: {color};
110110
}}"
111111
))

src/window.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ impl DistroShelfWindow {
395395
header_box.append(&text_box);
396396

397397
if let Some(distro) = container.distro() {
398-
header_box.add_css_class(&distro.name());
398+
header_box.add_css_class(format!("distro-{}", &distro.name()).as_str());
399399
icon.set_icon_name(Some(&distro.name()));
400400
}
401401

0 commit comments

Comments
 (0)