⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ptk-file-browser.c

📁 台湾人开发的Linux下的文件管理器
💻 C
📖 第 1 页 / 共 5 页
字号:
gboolean ptk_file_browser_is_busy( PtkFileBrowser* file_browser ){    return file_browser->busy;}gboolean ptk_file_browser_can_back( PtkFileBrowser* file_browser ){    /* there is back history */    return ( file_browser->curHistory && file_browser->curHistory->prev );}void ptk_file_browser_go_back( PtkFileBrowser* file_browser ){    const char * path;    /*    * FIXME:    * Do nothing when there is unfinished task running in the    * working thread.    * This should be fixed with a better way in the future.    */    if ( file_browser->busy )        return ;    /* there is no back history */    if ( ! file_browser->curHistory || ! file_browser->curHistory->prev )        return ;    path = ( const char* ) file_browser->curHistory->prev->data;    if ( ptk_file_browser_chdir( file_browser, path, FALSE ) )    {        file_browser->curHistory = file_browser->curHistory->prev;    }}gboolean ptk_file_browser_can_forward( PtkFileBrowser* file_browser ){    /* If there is forward history */    return ( file_browser->curHistory && file_browser->curHistory->next );}void ptk_file_browser_go_forward( PtkFileBrowser* file_browser ){    const char * path;    /*    * FIXME:    * Do nothing when there is unfinished task running in the    * working thread.    * This should be fixed with a better way in the future.      */    if ( file_browser->busy )        return ;    /* If there is no forward history */    if ( ! file_browser->curHistory || ! file_browser->curHistory->next )        return ;    path = ( const char* ) file_browser->curHistory->next->data;    if ( ptk_file_browser_chdir( file_browser, path, FALSE ) )    {        file_browser->curHistory = file_browser->curHistory->next;    }}GtkWidget* ptk_file_browser_get_folder_view( PtkFileBrowser* file_browser ){    return file_browser->folder_view;}/* FIXME: unused function */GtkTreeView* ptk_file_browser_get_dir_tree( PtkFileBrowser* file_browser ){    return NULL;}void ptk_file_browser_select_all( PtkFileBrowser* file_browser ){    GtkTreeSelection * tree_sel;    if ( file_browser->view_mode == FBVM_ICON_VIEW )    {        ptk_icon_view_select_all( PTK_ICON_VIEW( file_browser->folder_view ) );    }    else if ( file_browser->view_mode == FBVM_LIST_VIEW )    {        tree_sel = gtk_tree_view_get_selection( GTK_TREE_VIEW( file_browser->folder_view ) );        gtk_tree_selection_select_all( tree_sel );    }}static gbooleaninvert_selection ( GtkTreeModel* model,                   GtkTreePath *path,                   GtkTreeIter* it,                   PtkFileBrowser* file_browser ){    GtkTreeSelection * tree_sel;    if ( file_browser->view_mode == FBVM_ICON_VIEW )    {        if ( ptk_icon_view_path_is_selected ( PTK_ICON_VIEW( file_browser->folder_view ), path ) )            ptk_icon_view_unselect_path ( PTK_ICON_VIEW( file_browser->folder_view ), path );        else            ptk_icon_view_select_path ( PTK_ICON_VIEW( file_browser->folder_view ), path );    }    else if ( file_browser->view_mode == FBVM_LIST_VIEW )    {        tree_sel = gtk_tree_view_get_selection( GTK_TREE_VIEW( file_browser->folder_view ) );        if ( gtk_tree_selection_path_is_selected ( tree_sel, path ) )            gtk_tree_selection_unselect_path ( tree_sel, path );        else            gtk_tree_selection_select_path ( tree_sel, path );    }    return FALSE;}void ptk_file_browser_invert_selection( PtkFileBrowser* file_browser ){    GtkTreeModel * model;    if ( file_browser->view_mode == FBVM_ICON_VIEW )    {        model = ptk_icon_view_get_model( PTK_ICON_VIEW( file_browser->folder_view ) );        g_signal_handlers_block_matched( file_browser->folder_view,                                          G_SIGNAL_MATCH_FUNC,                                         0, 0, NULL,                                          on_folder_view_item_sel_change, NULL );        gtk_tree_model_foreach ( model,                                 ( GtkTreeModelForeachFunc ) invert_selection, file_browser );        g_signal_handlers_unblock_matched( file_browser->folder_view,                                            G_SIGNAL_MATCH_FUNC,                                           0, 0, NULL,                                            on_folder_view_item_sel_change, NULL );        on_folder_view_item_sel_change( PTK_ICON_VIEW( file_browser->folder_view ),                                        file_browser );    }    else if ( file_browser->view_mode == FBVM_LIST_VIEW )    {        GtkTreeSelection* tree_sel;        tree_sel = gtk_tree_view_get_selection(GTK_TREE_VIEW( file_browser->folder_view ));        g_signal_handlers_block_matched( tree_sel,                                          G_SIGNAL_MATCH_FUNC,                                         0, 0, NULL,                                          on_folder_view_item_sel_change, NULL );        model = gtk_tree_view_get_model( GTK_TREE_VIEW( file_browser->folder_view ) );        gtk_tree_model_foreach ( model,                                 ( GtkTreeModelForeachFunc ) invert_selection, file_browser );        g_signal_handlers_unblock_matched( tree_sel,                                            G_SIGNAL_MATCH_FUNC,                                           0, 0, NULL,                                            on_folder_view_item_sel_change, NULL );        on_folder_view_item_sel_change( (PtkIconView*)tree_sel,                                        file_browser );    }}/* signal handlers */voidon_folder_view_item_activated ( PtkIconView *iconview,                                GtkTreePath *path,                                PtkFileBrowser* file_browser ){    ptk_file_browser_open_selected_files_with_app( file_browser, NULL );}voidon_folder_view_row_activated ( GtkTreeView *tree_view,                               GtkTreePath *path,                               GtkTreeViewColumn* col,                               PtkFileBrowser* file_browser ){    ptk_file_browser_open_selected_files_with_app( file_browser, NULL );}void on_folder_view_item_sel_change ( PtkIconView *iconview,                                      PtkFileBrowser* file_browser ){    GList * sel_files;    GList* sel;    GtkTreeIter it;    GtkTreeSelection* tree_sel;    GtkTreeModel* model;    VFSFileInfo* file;    file_browser->n_sel_files = 0;    file_browser->sel_size = 0;    sel_files = folder_view_get_selected_items( file_browser, &model );    for ( sel = sel_files; sel; sel = g_list_next( sel ) )    {        if ( gtk_tree_model_get_iter( model, &it, ( GtkTreePath* ) sel->data ) )        {            gtk_tree_model_get( model, &it, COL_FILE_INFO, &file, -1 );            if ( file )            {                file_browser->sel_size += vfs_file_info_get_size( file );                vfs_file_info_unref( file );            }            ++file_browser->n_sel_files;        }    }    g_list_foreach( sel_files,                    ( GFunc ) gtk_tree_path_free,                    NULL );    g_list_free( sel_files );    g_signal_emit( file_browser, signals[ SEL_CHANGE_SIGNAL ], 0 );}gbooleanon_folder_view_key_press_event ( GtkWidget *widget,                                 GdkEventKey *event,                                 PtkFileBrowser* file_browser ){    int modifier = ( event->state & ( GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK ) );    if ( ! gtk_widget_is_focus( widget ) )        return FALSE;    if ( modifier == GDK_CONTROL_MASK )    {        switch ( event->keyval )        {        case GDK_x:            ptk_file_browser_cut( file_browser );            break;        case GDK_c:            ptk_file_browser_copy( file_browser );            break;        case GDK_v:            ptk_file_browser_paste( file_browser );            return TRUE;            break;        case GDK_i:            ptk_file_browser_invert_selection( file_browser );            break;        case GDK_a:            ptk_file_browser_select_all( file_browser );            break;        case GDK_h:            ptk_file_browser_show_hidden_files(                file_browser,                ! file_browser->show_hidden_files );            break;        default:            return FALSE;        }    }    else if ( modifier == GDK_MOD1_MASK )    {        switch ( event->keyval )        {        case GDK_Return:            ptk_file_browser_file_properties( file_browser );            break;        default:            return FALSE;        }    }    else if ( modifier == 0 )    {        switch ( event->keyval )        {        case GDK_F2:            ptk_file_browser_rename_selected_file( file_browser );            break;        case GDK_Delete:            ptk_file_browser_delete( file_browser );            break;        default:            return FALSE;        }    }    else    {        return FALSE;    }    return TRUE;}gbooleanon_folder_view_button_release_event ( GtkWidget *widget,                                      GdkEventButton *event,                                      PtkFileBrowser* file_browser ){    GtkTreeSelection * tree_sel;    GtkTreePath* tree_path;    GList* sel_files;    VFSFileInfo* file;    char* file_path;    if ( file_browser->view_mode == FBVM_LIST_VIEW && !can_folder_view_sel_change )    {        can_folder_view_sel_change = TRUE;        tree_sel = gtk_tree_view_get_selection( GTK_TREE_VIEW( widget ) );        gtk_tree_view_get_path_at_pos( GTK_TREE_VIEW( widget ),                                       event->x, event->y, &tree_path, NULL, NULL, NULL );        if ( tree_path )        {            if ( gtk_tree_selection_path_is_selected( tree_sel, tree_path ) )            {                gtk_tree_selection_unselect_all( tree_sel );                gtk_tree_selection_select_path( tree_sel, tree_path );            }            gtk_tree_path_free( tree_path );        }    }    return FALSE;}static void show_popup_menu( PtkFileBrowser* file_browser,                             GdkEventButton *event ){    const char * cwd;    char* dir_name = NULL;    guint32 time;    gint button;    GtkWidget* popup;    char* file_path = NULL;    VFSFileInfo* file;    GList* sel_files;    cwd = ptk_file_browser_get_cwd( file_browser );    sel_files = ptk_file_browser_get_selected_files( file_browser );    if( ! sel_files )    {        file = vfs_file_info_new();        vfs_file_info_get( file, cwd, NULL );        vfs_file_info_ref( file );        sel_files = g_list_prepend( NULL, file );        file_path = g_strdup( cwd );        dir_name = g_path_get_dirname( cwd );    }    else    {        file = (VFSFileInfo*)sel_files->data;        vfs_file_info_ref( file );        file_path = g_build_filename( cwd, vfs_file_info_get_name( file ), NULL );    }    if ( g_file_test( file_path, G_FILE_TEST_EXISTS ) )    {        if ( event )        {            button = event->button;            time = event->time;        }        else        {            button = 0;            time = gtk_get_current_event_time();        }        popup = ptk_file_menu_new(                    file_path, file,                    dir_name ? dir_name : cwd,                    sel_files, file_browser );        gtk_menu_popup( GTK_MENU( popup ), NULL, NULL,                        NULL, NULL, button, time );    }    vfs_file_info_unref( file );    g_free( file_path );    g_free( dir_name );}/* invoke popup menu via shortcut key */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -