Add File Manager Integration page to welcome wizard
This commit is contained in:
@@ -35,6 +35,9 @@ fn build_welcome_dialog() -> adw::Dialog {
|
|||||||
let skill_page = build_skill_page(&nav_view);
|
let skill_page = build_skill_page(&nav_view);
|
||||||
nav_view.add(&skill_page);
|
nav_view.add(&skill_page);
|
||||||
|
|
||||||
|
let fm_page = build_file_manager_page(&nav_view);
|
||||||
|
nav_view.add(&fm_page);
|
||||||
|
|
||||||
let output_page = build_output_page(&dialog);
|
let output_page = build_output_page(&dialog);
|
||||||
nav_view.add(&output_page);
|
nav_view.add(&output_page);
|
||||||
|
|
||||||
@@ -150,7 +153,7 @@ fn build_skill_page(nav_view: &adw::NavigationView) -> adw::NavigationPage {
|
|||||||
};
|
};
|
||||||
let _ = store.save(&cfg);
|
let _ = store.save(&cfg);
|
||||||
}
|
}
|
||||||
nav.push_by_tag("output-location");
|
nav.push_by_tag("file-manager");
|
||||||
});
|
});
|
||||||
|
|
||||||
content.append(&title);
|
content.append(&title);
|
||||||
@@ -165,6 +168,98 @@ fn build_skill_page(nav_view: &adw::NavigationView) -> adw::NavigationPage {
|
|||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn build_file_manager_page(nav_view: &adw::NavigationView) -> adw::NavigationPage {
|
||||||
|
let content = gtk::Box::builder()
|
||||||
|
.orientation(gtk::Orientation::Vertical)
|
||||||
|
.spacing(12)
|
||||||
|
.margin_top(24)
|
||||||
|
.margin_bottom(24)
|
||||||
|
.margin_start(24)
|
||||||
|
.margin_end(24)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let title = gtk::Label::builder()
|
||||||
|
.label("File Manager Integration")
|
||||||
|
.css_classes(["title-2"])
|
||||||
|
.halign(gtk::Align::Start)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let subtitle = gtk::Label::builder()
|
||||||
|
.label("Add 'Process with Pixstrip' to your file manager's right-click menu.")
|
||||||
|
.css_classes(["dim-label"])
|
||||||
|
.halign(gtk::Align::Start)
|
||||||
|
.wrap(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let group = adw::PreferencesGroup::builder()
|
||||||
|
.title("Detected File Managers")
|
||||||
|
.description("Toggle integration for each file manager")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// Detect installed file managers
|
||||||
|
let file_managers = [
|
||||||
|
("Nautilus", "org.gnome.Nautilus", "system-file-manager-symbolic"),
|
||||||
|
("Nemo", "org.nemo.Nemo", "system-file-manager-symbolic"),
|
||||||
|
("Thunar", "thunar", "system-file-manager-symbolic"),
|
||||||
|
("Dolphin", "org.kde.dolphin", "system-file-manager-symbolic"),
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut found_any = false;
|
||||||
|
for (name, desktop_id, icon) in &file_managers {
|
||||||
|
// Check if the file manager is installed by looking for its .desktop file
|
||||||
|
let is_installed = gtk::gio::AppInfo::all()
|
||||||
|
.iter()
|
||||||
|
.any(|info| {
|
||||||
|
info.id()
|
||||||
|
.map(|id| id.as_str().contains(desktop_id))
|
||||||
|
.unwrap_or(false)
|
||||||
|
});
|
||||||
|
|
||||||
|
if is_installed {
|
||||||
|
found_any = true;
|
||||||
|
let row = adw::SwitchRow::builder()
|
||||||
|
.title(*name)
|
||||||
|
.subtitle(format!("Add right-click menu to {}", name))
|
||||||
|
.active(false)
|
||||||
|
.build();
|
||||||
|
row.add_prefix(>k::Image::from_icon_name(icon));
|
||||||
|
group.add(&row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found_any {
|
||||||
|
let row = adw::ActionRow::builder()
|
||||||
|
.title("No supported file managers found")
|
||||||
|
.subtitle("You can configure this later in Settings")
|
||||||
|
.build();
|
||||||
|
row.add_prefix(>k::Image::from_icon_name("dialog-information-symbolic"));
|
||||||
|
group.add(&row);
|
||||||
|
}
|
||||||
|
|
||||||
|
let next_button = gtk::Button::builder()
|
||||||
|
.label("Continue")
|
||||||
|
.halign(gtk::Align::Center)
|
||||||
|
.build();
|
||||||
|
next_button.add_css_class("suggested-action");
|
||||||
|
next_button.add_css_class("pill");
|
||||||
|
|
||||||
|
let nav = nav_view.clone();
|
||||||
|
next_button.connect_clicked(move |_| {
|
||||||
|
nav.push_by_tag("output-location");
|
||||||
|
});
|
||||||
|
|
||||||
|
content.append(&title);
|
||||||
|
content.append(&subtitle);
|
||||||
|
content.append(&group);
|
||||||
|
content.append(&next_button);
|
||||||
|
|
||||||
|
adw::NavigationPage::builder()
|
||||||
|
.title("File Manager")
|
||||||
|
.tag("file-manager")
|
||||||
|
.child(&content)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
fn build_output_page(dialog: &adw::Dialog) -> adw::NavigationPage {
|
fn build_output_page(dialog: &adw::Dialog) -> adw::NavigationPage {
|
||||||
let content = gtk::Box::builder()
|
let content = gtk::Box::builder()
|
||||||
.orientation(gtk::Orientation::Vertical)
|
.orientation(gtk::Orientation::Vertical)
|
||||||
|
|||||||
Reference in New Issue
Block a user