From f182f4f003d722aa0340fb14dc18c5851331cf92 Mon Sep 17 00:00:00 2001 From: nyx Date: Sat, 2 Nov 2024 08:45:22 -0400 Subject: [PATCH] close popover when button is pressed (#62) --- src/gui.rs | 100 ++++++++++++++++++++++++++++++---------------------- src/main.rs | 23 ++++++++++-- 2 files changed, 78 insertions(+), 45 deletions(-) diff --git a/src/gui.rs b/src/gui.rs index ba88f90..f0322ae 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -175,56 +175,72 @@ impl ConfigGUI { pub fn setup_config_buttons(gui: Rc>) { 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::() { + 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::() { + 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) { diff --git a/src/main.rs b/src/main.rs index 4d79928..4f30600 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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::() { + 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::() { + 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::() { + popover.popdown(); + } + } + gui_clone.borrow_mut().custom_info_popup( "Copyright (C) 2024 HyprUtils", "This program is free software; you can redistribute it and/or