ptk-file-menu.c
来自「台湾人开发的Linux下的文件管理器」· C语言 代码 · 共 641 行 · 第 1/2 页
C
641 行
open = gtk_image_menu_item_new_with_mnemonic( _( "E_xecute" ) ); app_img = gtk_image_new_from_stock( GTK_STOCK_EXECUTE, GTK_ICON_SIZE_MENU ); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( open ), app_img ); } else { /* FIXME: Only show default app name when all selected files have the same type. */ if ( /* same_file_type( info, sel_files ) && */ default_app_name ) { open_title = g_strdup_printf( _( "_Open with \"%s\"" ), default_app_name ); open = gtk_image_menu_item_new_with_mnemonic( open_title ); g_free( open_title ); if ( open_icon ) { app_img = gtk_image_new_from_pixbuf( open_icon ); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( open ), app_img ); } } else { open = gtk_image_menu_item_new_with_mnemonic( _( "_Open" ) ); } } } else { open = gtk_image_menu_item_new_with_mnemonic( _( "_Open" ) ); app_img = gtk_image_new_from_icon_name( "gnome-fs-directory", GTK_ICON_SIZE_MENU ); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( open ), app_img ); } gtk_widget_show( open ); g_signal_connect( open, "activate", G_CALLBACK( on_popup_open_activate ), data ); gtk_menu_shell_insert( GTK_MENU_SHELL( popup ), open, 0 ); if ( open_icon ) gdk_pixbuf_unref( open_icon ); /* Compress & Extract */ if ( ! ptk_file_archiver_is_format_supported( mime_type, TRUE ) ) { /* This is not a supported archive format */ gtk_widget_destroy( extract ); } vfs_mime_type_unref( mime_type ); return popup;}voidon_popup_open_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ GList* sel_files = data->sel_files; if( ! sel_files ) sel_files = g_list_prepend( sel_files, data->info ); ptk_open_files_with_app( data->cwd, sel_files, NULL, data->browser ); if( sel_files != data->sel_files ) g_list_free( sel_files );}voidon_popup_open_with_another_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ char * app = NULL; GtkTreeModel* model; GtkTreeIter it; GList* sel_files; PtkFileBrowser* browser = data->browser; VFSFileInfo* file; VFSMimeType* mime_type; if ( data->info ) { mime_type = vfs_file_info_get_mime_type( data->info ); if ( G_LIKELY( ! mime_type ) ) { mime_type = vfs_mime_type_get_from_type( XDG_MIME_TYPE_UNKNOWN ); } } else { mime_type = vfs_mime_type_get_from_type( XDG_MIME_TYPE_DIRECTORY ); } app = ptk_choose_app_for_mime_type( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( browser ) ) ), mime_type ); if ( app ) { GList* sel_files = data->sel_files; if( ! sel_files ) sel_files = g_list_prepend( sel_files, data->info ); ptk_open_files_with_app( data->cwd, sel_files, app, data->browser ); if( sel_files != data->sel_files ) g_list_free( sel_files ); g_free( app ); } vfs_mime_type_unref( mime_type );}void on_popup_run_app( GtkMenuItem *menuitem, PtkFileMenu* data ){ VFSAppDesktop * desktop_file; const char* app = NULL; GList* sel_files; desktop_file = ( VFSAppDesktop* ) g_object_get_data( G_OBJECT( menuitem ), "desktop_file" ); if ( !desktop_file ) return ; app = vfs_app_desktop_get_name( desktop_file ); sel_files = data->sel_files; if( ! sel_files ) sel_files = g_list_prepend( sel_files, data->info ); ptk_open_files_with_app( data->cwd, sel_files, app, data->browser ); if( sel_files != data->sel_files ) g_list_free( sel_files );}void on_popup_open_in_new_tab_activate( GtkMenuItem *menuitem, PtkFileMenu* data ){ GList * sel; VFSFileInfo* file; char* full_path; if ( data->sel_files ) { for ( sel = data->sel_files; sel; sel = sel->next ) { file = ( VFSFileInfo* ) sel->data; full_path = g_build_filename( data->cwd, vfs_file_info_get_name( file ), NULL ); if ( g_file_test( full_path, G_FILE_TEST_IS_DIR ) ) { ptk_file_browser_emit_open( data->browser, full_path, PTK_OPEN_NEW_TAB ); } g_free( full_path ); } } else { ptk_file_browser_emit_open( data->browser, data->file_path, PTK_OPEN_NEW_TAB ); }}void on_popup_open_in_terminal_activate( GtkMenuItem *menuitem, PtkFileMenu* data ){ ptk_file_browser_open_terminal( data->browser );}void on_popup_open_in_new_win_activate( GtkMenuItem *menuitem, PtkFileMenu* data ){ GList * sel; GList* sel_files = data->sel_files; VFSFileInfo* file; char* full_path; if ( sel_files ) { for ( sel = sel_files; sel; sel = sel->next ) { file = ( VFSFileInfo* ) sel->data; full_path = g_build_filename( data->cwd, vfs_file_info_get_name( file ), NULL ); if ( g_file_test( full_path, G_FILE_TEST_IS_DIR ) ) { ptk_file_browser_emit_open( data->browser, full_path, PTK_OPEN_NEW_WINDOW ); } g_free( full_path ); } } else { ptk_file_browser_emit_open( data->browser, data->file_path, PTK_OPEN_NEW_WINDOW ); }}voidon_popup_cut_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( data->sel_files ) ptk_clipboard_cut_or_copy_files( data->cwd, data->sel_files, FALSE );}voidon_popup_copy_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( data->sel_files ) ptk_clipboard_cut_or_copy_files( data->cwd, data->sel_files, TRUE );}voidon_popup_paste_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( data->sel_files ) { char* dest_dir; GtkWidget* parent; parent = gtk_widget_get_toplevel( GTK_WIDGET( data->browser ) ); dest_dir = g_build_filename( data->cwd, vfs_file_info_get_name( data->info ), NULL ); if( ! g_file_test( dest_dir, G_FILE_TEST_IS_DIR ) ) { g_free( dest_dir ); dest_dir = NULL; } ptk_clipboard_paste_files( GTK_WINDOW( parent ), dest_dir ? dest_dir : data->cwd ); }}voidon_popup_delete_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( data->sel_files ) { GtkWidget* parent_win; parent_win = gtk_widget_get_toplevel( GTK_WIDGET(data->browser) ); ptk_delete_files( GTK_WINDOW(parent_win), data->cwd, data->sel_files ); }}voidon_popup_rename_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( data->info ) { GtkWidget* parent = gtk_widget_get_toplevel( GTK_WIDGET(data->browser) ); ptk_rename_file( GTK_WINDOW(parent), data->cwd, data->info ); }}void on_popup_compress_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( ! data->browser ) return ; ptk_file_archiver_create( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( data->browser ) ) ), data->cwd, data->sel_files );}void on_popup_extract_to_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( ! data->browser ) return ; ptk_file_archiver_extract( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( data->browser ) ) ), data->cwd, data->sel_files, NULL );}void on_popup_extract_here_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ if ( ! data->browser ) return ; ptk_file_archiver_extract( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( data->browser ) ) ), data->cwd, data->sel_files, data->cwd );}static voidcreate_new_file( PtkFileMenu* data, gboolean create_dir ){ if ( data->cwd ) { char* cwd; GtkWidget* parent; parent = gtk_widget_get_toplevel( GTK_WIDGET(data->browser) ); if( data->file_path && g_file_test( data->file_path, G_FILE_TEST_IS_DIR ) ) cwd = data->file_path; else cwd = data->cwd; ptk_create_new_file( GTK_WINDOW( parent ), cwd, create_dir ); }}voidon_popup_new_folder_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ create_new_file( data, TRUE );}voidon_popup_new_text_file_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ create_new_file( data, FALSE );}voidon_popup_file_properties_activate ( GtkMenuItem *menuitem, PtkFileMenu* data ){ GtkWidget* parent; parent = gtk_widget_get_toplevel( GTK_WIDGET(data->browser) ); ptk_show_file_properties( GTK_WINDOW( parent ), data->cwd, data->sel_files );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?