Skip to content

Commit d952a78

Browse files
committed
feat: automatic close of popup
1 parent 2c7f6b4 commit d952a78

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

src/popup_menu.rs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,32 @@ use std::rc::Rc;
1111
pub fn get_empty_right_click(content_area: &gtk4::Box, fmstate: Rc<RefCell<FmState>>) -> Popover {
1212
let popover = Popover::new();
1313
popover.set_parent(content_area);
14+
1415
let vbox = GtkBox::new(Orientation::Vertical, 0);
1516

1617
let new_folder = Button::with_label("New Folder");
1718
let open_terminal = Button::with_label("Open Terminal Here");
1819

19-
new_folder.connect_clicked(|_| {
20+
new_folder.connect_clicked(glib::clone!(#[weak] popover, move |_| {
2021
println!("New Folder clicked");
21-
});
22+
popover.popdown();
23+
}));
2224

23-
open_terminal.connect_clicked(move |_| {
25+
open_terminal.connect_clicked(glib::clone!(#[weak] popover, #[strong] fmstate, move |_| {
2426
let terminal_cmd = env::var("TERMINAL").unwrap_or_else(|_| "xterm".to_string());
2527
let path = &fmstate.borrow().current_path;
2628

2729
if let Err(err) = Command::new(&terminal_cmd).current_dir(path).spawn() {
2830
eprintln!("Failed to open terminal '{}': {}", terminal_cmd, err);
2931
}
30-
});
32+
33+
popover.popdown();
34+
}));
3135

3236
vbox.append(&new_folder);
3337
vbox.append(&open_terminal);
3438

3539
popover.set_child(Some(&vbox));
36-
3740
popover
3841
}
3942

@@ -43,6 +46,7 @@ pub fn get_file_right_click(content_area: &gtk4::Box, fmstate: Rc<RefCell<FmStat
4346

4447
popover.connect_show(glib::clone!(
4548
#[strong] fmstate,
49+
#[weak] files_list,
4650
move |popover| {
4751
let vbox = GtkBox::new(Orientation::Vertical, 0);
4852

@@ -55,25 +59,38 @@ pub fn get_file_right_click(content_area: &gtk4::Box, fmstate: Rc<RefCell<FmStat
5559

5660
open_in_terminal.connect_clicked(glib::clone!(
5761
#[strong] fmstate,
62+
#[weak] popover,
5863
move |_| {
5964
let terminal_cmd = env::var("TERMINAL").unwrap_or_else(|_| "xterm".to_string());
6065
if let Some(path) = &fmstate.borrow().popup_focused_file {
6166
if let Err(err) = Command::new(&terminal_cmd).current_dir(path).spawn() {
6267
eprintln!("Failed to open terminal '{}': {}", terminal_cmd, err);
6368
}
6469
};
70+
71+
popover.popdown();
6572
}
6673
));
6774

6875
move_to_trash.connect_clicked(glib::clone!(
6976
#[strong] fmstate,
77+
#[weak] popover,
78+
#[weak] files_list,
7079
move |_| {
7180
if let Some(path) = &fmstate.borrow().popup_focused_file {
7281
let file = gio::File::for_path(path);
73-
if let Err(e) = file.trash(None::<&gio::Cancellable>) {
74-
eprintln!("Error while moving to trash: {}", e);
82+
match file.trash(None::<&gio::Cancellable>) {
83+
Ok(_) => {
84+
crate::files_panel::populate_files_list(
85+
&files_list,
86+
Path::new(&fmstate.borrow().current_path),
87+
);
88+
}
89+
Err(e) => eprintln!("Error while moving to trash: {}", e),
7590
}
7691
}
92+
93+
popover.popdown();
7794
}
7895
));
7996

0 commit comments

Comments
 (0)