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 + -
显示快捷键?