diff --git a/ChangeLog b/ChangeLog index 774345b7..171572dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-03-16 Bart Hakvoort + + * include/Win_GParted.h, + src/Win_GParted.cc: added submenu with mountpoints to 'mount' in + partitionmenu. (see also #330327) + 2006-03-16 Bart Hakvoort * compose/.cvsignore: added *.swp diff --git a/include/Win_GParted.h b/include/Win_GParted.h index fa93c2ad..974e31d6 100644 --- a/include/Win_GParted.h +++ b/include/Win_GParted.h @@ -99,7 +99,7 @@ private: menu_partition .items()[ 10 ] .set_sensitive( b ); } void allow_info( bool b ) { - menu_partition .items()[ 12 ] .set_sensitive( b ); } + menu_partition .items()[ 13 ] .set_sensitive( b ); } void allow_undo( bool b ) { toolbar_main .get_nth_item( 8 ) ->set_sensitive( b ); @@ -114,7 +114,7 @@ private: //threads.. void thread_refresh_devices() ; void thread_unmount_partition( bool * succes, Glib::ustring * error ) ; - void thread_mount_partition( bool * succes, Glib::ustring * error ) ; + void thread_mount_partition( Glib::ustring mountpoint, bool * succes, Glib::ustring * error ) ; void thread_toggle_swap( bool * succes, Glib::ustring * error ) ; //signal handlers @@ -147,6 +147,7 @@ private: void activate_info(); void activate_format( GParted::FILESYSTEM new_fs ); void toggle_swap_mount_state() ; + void activate_mount_partition( unsigned int index ) ; void activate_disklabel() ; void activate_undo(); diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc index 97e5c263..eaaf234e 100644 --- a/src/Win_GParted.cc +++ b/src/Win_GParted.cc @@ -252,7 +252,11 @@ void Win_GParted::init_partition_menu() menu_partition .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("unmount"), sigc::mem_fun( *this, &Win_GParted::toggle_swap_mount_state ) ) ); - + + /*TO TRANSLATORS: menuitem which holds a submenu with mountpoints.. */ + menu_partition .items() .push_back( + Gtk::Menu_Helpers::MenuElem( _("mount on"), * manage( new Gtk::Menu() ) ) ) ; + menu_partition .items() .push_back( Gtk::Menu_Helpers::SeparatorElem() ); menu_partition .items() .push_back( @@ -293,7 +297,7 @@ Gtk::Menu * Win_GParted::create_format_menu() return menu ; } - + void Win_GParted::init_device_info() { vbox_info.set_spacing( 5 ); @@ -665,7 +669,9 @@ void Win_GParted::set_valid_operations() allow_info( false ) ; dynamic_cast(menu_partition .items()[ 10 ] .get_child() ) ->set_label( _("unmount") ) ; - + menu_partition .items()[ 10 ] .show() ; + menu_partition .items()[ 11 ] .hide() ; + //no partition selected... if ( ! selected_partition .get_paths() .size() ) return ; @@ -692,16 +698,11 @@ void Win_GParted::set_valid_operations() } //only unmount is allowed (if ! extended) - if ( selected_partition .busy ) + if ( selected_partition .busy ) { if ( selected_partition .type != GParted::TYPE_EXTENDED ) - { allow_toggle_swap_mount_state( true ) ; - dynamic_cast(menu_partition .items()[ 10 ] .get_child() ) - ->set_label( _("unmount") ) ; - } - return ; } @@ -759,12 +760,19 @@ void Win_GParted::set_valid_operations() if ( selected_partition .get_mountpoints() .size() ) { allow_toggle_swap_mount_state( true ) ; + + menu = menu_partition .items()[ 11 ] .get_submenu() ; + menu ->items() .clear() ; + for ( unsigned int t = 0 ; t < selected_partition .get_mountpoints() .size() ; t++ ) + menu ->items() .push_back( + Gtk::Menu_Helpers::MenuElem( + selected_partition .get_mountpoints()[ t ], + sigc::bind( sigc::mem_fun(*this, &Win_GParted::activate_mount_partition), t ) ) ); + - dynamic_cast(menu_partition .items()[ 10 ] .get_child() ) - ->set_label( _("mount") ) ; + menu_partition .items()[ 10 ] .hide() ; + menu_partition .items()[ 11 ] .show() ; } - - return ; } } @@ -949,7 +957,7 @@ void Win_GParted::menu_gparted_refresh_devices() } } -void Win_GParted::menu_gparted_filesystems( ) +void Win_GParted::menu_gparted_filesystems() { Dialog_Filesystems dialog ; dialog .set_transient_for( *this ) ; @@ -973,7 +981,7 @@ void Win_GParted::menu_gparted_quit() this ->hide(); } -void Win_GParted::menu_view_harddisk_info( ) +void Win_GParted::menu_view_harddisk_info() { if ( static_cast( & menubar_main .items()[ 2 ] .get_submenu() ->items()[ 0 ] ) ->get_active() ) { //open harddisk information @@ -1403,24 +1411,14 @@ void Win_GParted::thread_unmount_partition( bool * succes, Glib::ustring * error pulse = false ; } -void Win_GParted::thread_mount_partition( bool * succes, Glib::ustring * error ) +void Win_GParted::thread_mount_partition( Glib::ustring mountpoint, bool * succes, Glib::ustring * error ) { Glib::ustring dummy ; std::vector errors ; - - *succes = true ; - for ( unsigned int t = 0 ; t < selected_partition .get_mountpoints() .size() ; t++ ) - if ( Utils::execute_command( - "mount -v " + selected_partition .get_path() + " " + selected_partition .get_mountpoints()[ t ], - dummy, - *error ) ) - { - *succes = false ; - errors .push_back( *error ) ; - } - if ( ! *succes ) - *error = "" + Glib::build_path( "\n", errors ) + "" ; + *succes = ! Utils::execute_command( "mount -v " + selected_partition .get_path() + " " + mountpoint, + dummy, + *error ) ; pulse = false ; } @@ -1469,29 +1467,17 @@ void Win_GParted::toggle_swap_mount_state() dialog.run() ; } } - else + else if ( selected_partition .busy ) { - if ( selected_partition .busy ) - { - thread = Glib::Thread::create( sigc::bind( - sigc::mem_fun( *this, &Win_GParted::thread_unmount_partition ), &succes, &error ), true ) ; + thread = Glib::Thread::create( sigc::bind( + sigc::mem_fun( *this, &Win_GParted::thread_unmount_partition ), &succes, &error ), true ) ; - show_pulsebar( String::ucompose( _("Unmounting %1"), selected_partition .get_path() ) ) ; - } - else - { - thread = Glib::Thread::create( sigc::bind( - sigc::mem_fun( *this, &Win_GParted::thread_mount_partition ), &succes, &error ), true ) ; - - show_pulsebar( String::ucompose( _("mounting %1"), selected_partition .get_path() ) ) ; - } - - + show_pulsebar( String::ucompose( _("Unmounting %1"), selected_partition .get_path() ) ) ; + if ( ! succes ) { Gtk::MessageDialog dialog( *this, - String::ucompose( selected_partition .busy ? _("Could not unmount %1") : _("Could not mount %1"), - selected_partition .get_path() ), + String::ucompose( _("Could not unmount %1"), selected_partition .get_path() ), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, @@ -1505,6 +1491,41 @@ void Win_GParted::toggle_swap_mount_state() menu_gparted_refresh_devices() ; } + +void Win_GParted::activate_mount_partition( unsigned int index ) +{ + bool succes = false ; + Glib::ustring error ; + + thread = Glib::Thread::create( sigc::bind( + sigc::mem_fun( *this, &Win_GParted::thread_mount_partition ), + selected_partition .get_mountpoints()[ index ], + &succes, + &error ), + true ) ; + + show_pulsebar( String::ucompose( _("mounting %1 on %2"), + selected_partition .get_path(), + selected_partition .get_mountpoints()[ index ] ) ) ; + + if ( ! succes ) + { + Gtk::MessageDialog dialog( *this, + String::ucompose( _("Could not mount %1 on %2"), + selected_partition .get_path(), + selected_partition .get_mountpoints()[ index ] ), + false, + Gtk::MESSAGE_ERROR, + Gtk::BUTTONS_OK, + true ); + + dialog .set_secondary_text( error, true ) ; + + dialog.run() ; + } + + menu_gparted_refresh_devices() ; +} void Win_GParted::activate_disklabel() {