@@ -11,29 +11,32 @@ use std::rc::Rc;
1111pub 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: >k4::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: >k4::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