close popover when button is pressed (#62)

This commit is contained in:
nyx
2024-11-02 08:45:22 -04:00
committed by GitHub
parent 4c9a1ab9ff
commit f182f4f003
2 changed files with 78 additions and 45 deletions

View File

@@ -175,56 +175,72 @@ impl ConfigGUI {
pub fn setup_config_buttons(gui: Rc<RefCell<ConfigGUI>>) {
let gui_clone = Rc::clone(&gui);
gui.borrow().load_config_button.connect_clicked(move |_| {
let gui = Rc::clone(&gui_clone);
glib::MainContext::default().spawn_local(async move {
let file_chooser = gtk::FileChooserDialog::new(
Some("Load HyprGUI Config"),
Some(&gui.borrow().window),
gtk::FileChooserAction::Open,
&[
("Cancel", gtk::ResponseType::Cancel),
("Open", gtk::ResponseType::Accept),
],
);
if file_chooser.run_future().await == gtk::ResponseType::Accept {
if let Some(file) = file_chooser.file() {
if let Some(path) = file.path() {
gui.borrow_mut().load_hyprgui_config(&path);
}
gui.borrow()
.load_config_button
.connect_clicked(move |button| {
if let Some(popover) = button.ancestor(gtk::Popover::static_type()) {
if let Some(popover) = popover.downcast_ref::<gtk::Popover>() {
popover.popdown();
}
}
file_chooser.close();
let gui = Rc::clone(&gui_clone);
glib::MainContext::default().spawn_local(async move {
let file_chooser = gtk::FileChooserDialog::new(
Some("Load HyprGUI Config"),
Some(&gui.borrow().window),
gtk::FileChooserAction::Open,
&[
("Cancel", gtk::ResponseType::Cancel),
("Open", gtk::ResponseType::Accept),
],
);
if file_chooser.run_future().await == gtk::ResponseType::Accept {
if let Some(file) = file_chooser.file() {
if let Some(path) = file.path() {
gui.borrow_mut().load_hyprgui_config(&path);
}
}
}
file_chooser.close();
});
});
});
let gui_clone = Rc::clone(&gui);
gui.borrow().save_config_button.connect_clicked(move |_| {
let gui = Rc::clone(&gui_clone);
glib::MainContext::default().spawn_local(async move {
let file_chooser = gtk::FileChooserDialog::new(
Some("Save HyprGUI Config"),
Some(&gui.borrow().window),
gtk::FileChooserAction::Save,
&[
("Cancel", gtk::ResponseType::Cancel),
("Save", gtk::ResponseType::Accept),
],
);
file_chooser.set_current_name("hyprgui_config.json");
if file_chooser.run_future().await == gtk::ResponseType::Accept {
if let Some(file) = file_chooser.file() {
if let Some(path) = file.path() {
gui.borrow_mut().save_hyprgui_config(&path);
}
gui.borrow()
.save_config_button
.connect_clicked(move |button| {
if let Some(popover) = button.ancestor(gtk::Popover::static_type()) {
if let Some(popover) = popover.downcast_ref::<gtk::Popover>() {
popover.popdown();
}
}
file_chooser.close();
let gui = Rc::clone(&gui_clone);
glib::MainContext::default().spawn_local(async move {
let file_chooser = gtk::FileChooserDialog::new(
Some("Save HyprGUI Config"),
Some(&gui.borrow().window),
gtk::FileChooserAction::Save,
&[
("Cancel", gtk::ResponseType::Cancel),
("Save", gtk::ResponseType::Accept),
],
);
file_chooser.set_current_name("hyprgui_config.json");
if file_chooser.run_future().await == gtk::ResponseType::Accept {
if let Some(file) = file_chooser.file() {
if let Some(path) = file.path() {
gui.borrow_mut().save_hyprgui_config(&path);
}
}
}
file_chooser.close();
});
});
});
}
fn load_hyprgui_config(&mut self, path: &PathBuf) {

View File

@@ -44,7 +44,12 @@ fn build_ui(app: &Application) {
gui.borrow_mut().load_config(&parsed_config);
let gui_clone = gui.clone();
gui.borrow().save_button.connect_clicked(move |_| {
gui.borrow().save_button.connect_clicked(move |button| {
if let Some(popover) = button.ancestor(gtk::Popover::static_type()) {
if let Some(popover) = popover.downcast_ref::<gtk::Popover>() {
popover.popdown();
}
}
save_config_file(gui_clone.clone());
});
@@ -52,12 +57,24 @@ fn build_ui(app: &Application) {
let copy_button = Button::with_label("Copyright");
let gui_clone = gui.clone();
undo_button.connect_clicked(move |_| {
undo_button.connect_clicked(move |button| {
if let Some(popover) = button.ancestor(gtk::Popover::static_type()) {
if let Some(popover) = popover.downcast_ref::<gtk::Popover>() {
popover.popdown();
}
}
undo_changes(gui_clone.clone());
});
let gui_clone = gui.clone();
copy_button.connect_clicked(move |_| {
copy_button.connect_clicked(move |button| {
if let Some(popover) = button.ancestor(gtk::Popover::static_type()) {
if let Some(popover) = popover.downcast_ref::<gtk::Popover>() {
popover.popdown();
}
}
gui_clone.borrow_mut().custom_info_popup(
"Copyright (C) 2024 HyprUtils",
"This program is free software; you can redistribute it and/or