亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ptk-dir-tree.c

?? 臺灣人開發(fā)的Linux下的文件管理器
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**  C Implementation: ptk-dir-tree** Description: *** Author: Hong Jen Yee (PCMan) <pcman.tw (AT) gmail.com>, (C) 2006** Copyright: See COPYING file that comes with this distribution**/#include "ptk-dir-tree.h"#include <gdk/gdk.h>#include <glib/gi18n.h>#include <string.h>#include "vfs-file-info.h"#include "vfs-file-monitor.h"#include "glib-mem.h"struct _PtkDirTreeNode{    VFSFileInfo* file;    PtkDirTreeNode* children;    int n_children;    VFSFileMonitor* monitor;    int n_expand;    PtkDirTreeNode* parent;    PtkDirTreeNode* next;    PtkDirTreeNode* prev;    PtkDirTreeNode* last;    PtkDirTree* tree;   /* FIXME: This is a waste of memory :-( */};static void ptk_dir_tree_init ( PtkDirTree *tree );static void ptk_dir_tree_class_init ( PtkDirTreeClass *klass );static void ptk_dir_tree_tree_model_init ( GtkTreeModelIface *iface );static void ptk_dir_tree_drag_source_init ( GtkTreeDragSourceIface *iface );static void ptk_dir_tree_drag_dest_init ( GtkTreeDragDestIface *iface );static void ptk_dir_tree_finalize ( GObject *object );static GtkTreeModelFlags ptk_dir_tree_get_flags ( GtkTreeModel *tree_model );static gint ptk_dir_tree_get_n_columns ( GtkTreeModel *tree_model );static GType ptk_dir_tree_get_column_type ( GtkTreeModel *tree_model,                                            gint index );static gboolean ptk_dir_tree_get_iter ( GtkTreeModel *tree_model,                                        GtkTreeIter *iter,                                        GtkTreePath *path );static GtkTreePath *ptk_dir_tree_get_path ( GtkTreeModel *tree_model,                                            GtkTreeIter *iter );static void ptk_dir_tree_get_value ( GtkTreeModel *tree_model,                                     GtkTreeIter *iter,                                     gint column,                                     GValue *value );static gboolean ptk_dir_tree_iter_next ( GtkTreeModel *tree_model,                                         GtkTreeIter *iter );static gboolean ptk_dir_tree_iter_children ( GtkTreeModel *tree_model,                                             GtkTreeIter *iter,                                             GtkTreeIter *parent );static gboolean ptk_dir_tree_iter_has_child ( GtkTreeModel *tree_model,                                              GtkTreeIter *iter );static gint ptk_dir_tree_iter_n_children ( GtkTreeModel *tree_model,                                           GtkTreeIter *iter );static gboolean ptk_dir_tree_iter_nth_child ( GtkTreeModel *tree_model,                                              GtkTreeIter *iter,                                              GtkTreeIter *parent,                                              gint n );static gboolean ptk_dir_tree_iter_parent ( GtkTreeModel *tree_model,                                           GtkTreeIter *iter,                                           GtkTreeIter *child );static gint ptk_dir_tree_node_compare( PtkDirTree* tree,                                       PtkDirTreeNode* a,                                       PtkDirTreeNode* b );static void ptk_dir_tree_insert_child( PtkDirTree* tree,                                       PtkDirTreeNode* parent,                                       const char* file_path,                                       const char* name );static void ptk_dir_tree_delete_child( PtkDirTree* tree,                                       PtkDirTreeNode* child );/* signal handlers */static void on_file_monitor_event ( VFSFileMonitor* fm,                                    VFSFileMonitorEvent event,                                    const char* file_name,                                    gpointer user_data );static PtkDirTreeNode* ptk_dir_tree_node_new( PtkDirTree* tree,                                              PtkDirTreeNode* parent,                                              const char* path,                                              const char* base_name );static void ptk_dir_tree_node_free( PtkDirTreeNode* node );static GObjectClass* parent_class = NULL;static GType column_types[ N_DIR_TREE_COLS ];GType ptk_dir_tree_get_type ( void ){    static GType type = 0;    if ( G_UNLIKELY( !type ) )    {        static const GTypeInfo type_info =            {                sizeof ( PtkDirTreeClass ),                NULL,                                           /* base_init */                NULL,                                           /* base_finalize */                ( GClassInitFunc ) ptk_dir_tree_class_init,                NULL,                                           /* class finalize */                NULL,                                           /* class_data */                sizeof ( PtkDirTree ),                0,                                             /* n_preallocs */                ( GInstanceInitFunc ) ptk_dir_tree_init            };        static const GInterfaceInfo tree_model_info =            {                ( GInterfaceInitFunc ) ptk_dir_tree_tree_model_init,                NULL,                NULL            };        static const GInterfaceInfo drag_src_info =            {                ( GInterfaceInitFunc ) ptk_dir_tree_drag_source_init,                NULL,                NULL            };        static const GInterfaceInfo drag_dest_info =            {                ( GInterfaceInitFunc ) ptk_dir_tree_drag_dest_init,                NULL,                NULL            };        type = g_type_register_static ( G_TYPE_OBJECT, "PtkDirTree",                                        &type_info, ( GTypeFlags ) 0 );        g_type_add_interface_static ( type, GTK_TYPE_TREE_MODEL, &tree_model_info );        g_type_add_interface_static ( type, GTK_TYPE_TREE_DRAG_SOURCE, &drag_src_info );        g_type_add_interface_static ( type, GTK_TYPE_TREE_DRAG_DEST, &drag_dest_info );    }    return type;}void ptk_dir_tree_init ( PtkDirTree *tree ){    PtkDirTreeNode* child;    tree->root = g_slice_new0( PtkDirTreeNode );    tree->root->tree = tree;    tree->root->n_children = 1;    child = ptk_dir_tree_node_new( tree, tree->root, "/", "/" );    vfs_file_info_set_disp_name( child->file, _("File System") );    tree->root->children = child;    /*    child = ptk_dir_tree_node_new( tree, tree->root, g_get_home_dir(), NULL );    vfs_file_info_set_name( child->file, g_get_home_dir() );    tree->root->children->next = child;    */    /* Random int to check whether an iter belongs to our model */    tree->stamp = g_random_int();}void ptk_dir_tree_class_init ( PtkDirTreeClass *klass ){    GObjectClass * object_class;    parent_class = ( GObjectClass* ) g_type_class_peek_parent ( klass );    object_class = ( GObjectClass* ) klass;    object_class->finalize = ptk_dir_tree_finalize;}void ptk_dir_tree_tree_model_init ( GtkTreeModelIface *iface ){    iface->get_flags = ptk_dir_tree_get_flags;    iface->get_n_columns = ptk_dir_tree_get_n_columns;    iface->get_column_type = ptk_dir_tree_get_column_type;    iface->get_iter = ptk_dir_tree_get_iter;    iface->get_path = ptk_dir_tree_get_path;    iface->get_value = ptk_dir_tree_get_value;    iface->iter_next = ptk_dir_tree_iter_next;    iface->iter_children = ptk_dir_tree_iter_children;    iface->iter_has_child = ptk_dir_tree_iter_has_child;    iface->iter_n_children = ptk_dir_tree_iter_n_children;    iface->iter_nth_child = ptk_dir_tree_iter_nth_child;    iface->iter_parent = ptk_dir_tree_iter_parent;    column_types [ COL_DIR_TREE_ICON ] = GDK_TYPE_PIXBUF;    column_types [ COL_DIR_TREE_DISP_NAME ] = G_TYPE_STRING;    column_types [ COL_DIR_TREE_INFO ] = G_TYPE_POINTER;}void ptk_dir_tree_drag_source_init ( GtkTreeDragSourceIface *iface ){    /* FIXME: Unused. Will this cause any problem? */}void ptk_dir_tree_drag_dest_init ( GtkTreeDragDestIface *iface ){    /* FIXME: Unused. Will this cause any problem? */}void ptk_dir_tree_finalize ( GObject *object ){    PtkDirTree *tree = ( PtkDirTree* ) object;    if( tree->root )        ptk_dir_tree_node_free( tree->root );    /* must chain up - finalize parent */    ( * parent_class->finalize ) ( object );}PtkDirTree *ptk_dir_tree_new (){    PtkDirTree * tree;    tree = ( PtkDirTree* ) g_object_new ( PTK_TYPE_DIR_TREE, NULL );    return tree;}GtkTreeModelFlags ptk_dir_tree_get_flags ( GtkTreeModel *tree_model ){    g_return_val_if_fail ( PTK_IS_DIR_TREE( tree_model ), ( GtkTreeModelFlags ) 0 );    return GTK_TREE_MODEL_ITERS_PERSIST;}gint ptk_dir_tree_get_n_columns ( GtkTreeModel *tree_model ){    return N_DIR_TREE_COLS;}GType ptk_dir_tree_get_column_type ( GtkTreeModel *tree_model,                                     gint index ){    g_return_val_if_fail ( PTK_IS_DIR_TREE( tree_model ), G_TYPE_INVALID );    g_return_val_if_fail ( index < G_N_ELEMENTS( column_types ) && index >= 0, G_TYPE_INVALID );    return column_types[ index ];}static PtkDirTreeNode* get_nth_node( PtkDirTreeNode* parent, int n ){    PtkDirTreeNode* node;    if ( n >= parent->n_children || n < 0 )        return NULL;    node = parent->children;    while( n > 0 && node )    {        node = node->next;        --n;    }    return node;}gboolean ptk_dir_tree_get_iter ( GtkTreeModel *tree_model,                                 GtkTreeIter *iter,                                 GtkTreePath *path ){    PtkDirTree *tree;    gint *indices, i, depth;    PtkDirTreeNode* node;    g_assert(PTK_IS_DIR_TREE(tree_model));    g_assert(path!=NULL);    tree = PTK_DIR_TREE(tree_model);    if( !tree || !tree->root )        return FALSE;    indices = gtk_tree_path_get_indices(path);    depth   = gtk_tree_path_get_depth(path);    node = tree->root;    for( i = 0; i < depth; ++i )    {        node = get_nth_node( node, indices[i] );        if( !node )            return FALSE;    }    /* We simply store a pointer in the iter */    iter->stamp = tree->stamp;    iter->user_data  = node;    iter->user_data2 = NULL;    iter->user_data3 = NULL;   /* unused */    return TRUE;}static int get_node_index( PtkDirTreeNode* parent, PtkDirTreeNode* child ){    PtkDirTreeNode* node;    int i;    if( !parent || !child )        return -1;    for( i = 0, node = parent->children; node; node = node->next )    {        if( node == child )        {            return i;        }        ++i;    }    return -1;}GtkTreePath *ptk_dir_tree_get_path ( GtkTreeModel *tree_model,                                     GtkTreeIter *iter ){    PtkDirTreeNode* node;    GtkTreePath* path;    int i;    PtkDirTree* tree = PTK_DIR_TREE(tree_model);    g_return_val_if_fail (tree, NULL);    g_return_val_if_fail (iter->stamp == tree->stamp, NULL);    g_return_val_if_fail (iter != NULL, NULL);    g_return_val_if_fail (iter->user_data != NULL, NULL);    path = gtk_tree_path_new();    node = (PtkDirTreeNode*)iter->user_data;    g_return_val_if_fail( node->parent != NULL, (GtkTreePath *)(-1) );    while( node != tree->root )    {        i = get_node_index( node->parent, node );        if( i == -1 )        {            gtk_tree_path_free( path );            return NULL;        }        gtk_tree_path_prepend_index( path, i );        node = node->parent;    }    return path;}void ptk_dir_tree_get_value ( GtkTreeModel *tree_model,                              GtkTreeIter *iter,                              gint column,                              GValue *value ){    PtkDirTree* tree = PTK_DIR_TREE(tree_model);    VFSFileInfo* info;    GdkPixbuf* icon;    PtkDirTreeNode* node;    g_return_if_fail (PTK_IS_DIR_TREE (tree_model));    g_return_if_fail (iter != NULL);    g_return_if_fail (column < G_N_ELEMENTS(column_types) );    g_value_init (value, column_types[column] );    node = (PtkDirTreeNode*) iter->user_data;    g_return_if_fail ( node != NULL );    info = node->file;    switch(column)    {    case COL_DIR_TREE_ICON:        if( G_UNLIKELY( !info ) )            return;        icon = vfs_file_info_get_small_icon( info );        if( icon )        {            g_value_set_object( value, icon );            gdk_pixbuf_unref( icon );        }        break;    case COL_DIR_TREE_DISP_NAME:        if( G_LIKELY( info ) )            g_value_set_string( value, vfs_file_info_get_disp_name(info) );        else            g_value_set_string( value, _("No Sub Folder") );        break;    case COL_DIR_TREE_INFO:        if( G_UNLIKELY( !info ) )            return;        vfs_file_info_ref( info );        g_value_set_pointer( value, info );        break;    }}gboolean ptk_dir_tree_iter_next ( GtkTreeModel *tree_model,                                  GtkTreeIter *iter ){    PtkDirTreeNode* node;    PtkDirTree* tree;    g_return_val_if_fail (PTK_IS_DIR_TREE (tree_model), FALSE);    if (iter == NULL || iter->user_data == NULL)        return FALSE;    tree = PTK_DIR_TREE(tree_model);    node = (PtkDirTreeNode *) iter->user_data;    /* Is this the last child in the parent node? */    if ( ! node->next )        return FALSE;    iter->stamp = tree->stamp;    iter->user_data = node->next;    iter->user_data2 = NULL;    iter->user_data3 = NULL;    return TRUE;}gboolean ptk_dir_tree_iter_children ( GtkTreeModel *tree_model,                                      GtkTreeIter *iter,                                      GtkTreeIter *parent ){    PtkDirTree* tree;    PtkDirTreeNode* parent_node;    PtkDirTreeNode* node;    g_return_val_if_fail ( parent == NULL || parent->user_data != NULL, FALSE );    g_return_val_if_fail ( PTK_IS_DIR_TREE ( tree_model ), FALSE );    tree = PTK_DIR_TREE( tree_model );    if ( parent )        parent_node = (PtkDirTreeNode*)parent->user_data;    else    {        /* parent == NULL is a special case; we need to return the first top-level row */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人dvd| xfplay精品久久| 国产成a人亚洲| 夜夜精品视频一区二区| 91精品国产综合久久国产大片| 国内精品在线播放| 亚洲午夜一二三区视频| 国产精品每日更新| 日韩美一区二区三区| 欧美视频一区二| 成人动漫精品一区二区| 国产一区二区毛片| 麻豆精品视频在线观看视频| 一区二区三区在线观看网站| 中文字幕一区二| 国产精品丝袜一区| 国产亚洲精品资源在线26u| 日韩精品专区在线影院重磅| 欧美一级免费观看| 激情五月婷婷综合网| 亚洲国产成人av好男人在线观看| 国产亚洲欧美色| 国产午夜精品福利| 国产欧美一区二区精品性色| 欧美zozo另类异族| 色94色欧美sute亚洲线路一ni| 国产丶欧美丶日本不卡视频| 韩国av一区二区三区| 精品一区二区三区影院在线午夜| 日韩1区2区3区| 久久精品99国产国产精| 久久99精品国产麻豆婷婷洗澡| 久久精品久久久精品美女| 韩国理伦片一区二区三区在线播放 | 奇米影视7777精品一区二区| 日本网站在线观看一区二区三区| 男女男精品视频| 国内精品久久久久影院色| 国产精品99久久久久久似苏梦涵| 懂色av中文字幕一区二区三区| 99国产精品国产精品毛片| 欧美成人精品3d动漫h| 日韩一区二区电影在线| 欧美国产精品一区二区| 亚洲精品视频免费看| 青娱乐精品视频| av电影天堂一区二区在线观看| 日韩精品电影在线观看| 三级久久三级久久| 国产成人午夜片在线观看高清观看| 成人av免费观看| 一本久久a久久精品亚洲| 99久精品国产| 日韩免费在线观看| 亚洲视频在线观看一区| 亚洲伦理在线免费看| 黄色日韩三级电影| 欧美精品粉嫩高潮一区二区| 久久亚洲精精品中文字幕早川悠里| 国产日产欧产精品推荐色 | 99久久er热在这里只有精品15| 国产黑丝在线一区二区三区| 欧美日韩国产a| 中文字幕在线不卡一区二区三区 | www.亚洲在线| 精品国一区二区三区| 日韩av电影免费观看高清完整版 | jvid福利写真一区二区三区| 亚洲精品一区二区三区四区高清| 国产精品久久久久久久久久免费看| 免费欧美在线视频| 亚洲人成精品久久久久| 九九在线精品视频| 日韩欧美精品在线| 老司机午夜精品| 精品国产亚洲在线| 韩国精品一区二区| 2021国产精品久久精品| 亚洲欧美成人一区二区三区| 中文字幕不卡的av| 成人自拍视频在线| 中文久久乱码一区二区| caoporn国产一区二区| 一区二区三区中文在线观看| 美腿丝袜亚洲色图| 国产亚洲精品精华液| 99视频热这里只有精品免费| 一区二区三区影院| 欧美性色黄大片手机版| 免费日韩伦理电影| 久久久影院官网| 色综合色狠狠综合色| 亚洲观看高清完整版在线观看| 久久精品国产亚洲aⅴ| 国产精品水嫩水嫩| 欧美日韩一区二区在线观看 | 水蜜桃久久夜色精品一区的特点 | 99re视频精品| 免费不卡在线观看| 亚洲色图在线视频| 欧美一级片在线| 91免费版在线| 午夜成人免费视频| 成人欧美一区二区三区黑人麻豆| 欧美美女网站色| caoporm超碰国产精品| 蜜臂av日日欢夜夜爽一区| 中文字幕亚洲综合久久菠萝蜜| 欧美一三区三区四区免费在线看 | 精品久久久久久久久久久久久久久 | 色婷婷综合久久久久中文一区二区| 亚洲bt欧美bt精品| 亚洲精品网站在线观看| 久久人人爽人人爽| 精品日韩av一区二区| 7777女厕盗摄久久久| 色婷婷久久久久swag精品| 狠狠v欧美v日韩v亚洲ⅴ| 婷婷夜色潮精品综合在线| 亚洲国产精品久久人人爱蜜臀| 亚洲丝袜美腿综合| 亚洲人午夜精品天堂一二香蕉| 久久久久久99久久久精品网站| 91精品国产免费| 在线播放/欧美激情| 成人免费的视频| 一区二区三区av电影| 一区二区三区四区五区视频在线观看| 精品国产乱码久久久久久闺蜜| 欧美午夜不卡视频| 正在播放亚洲一区| 日韩欧美电影在线| 久久久精品免费观看| 国产精品丝袜久久久久久app| 国产亚洲女人久久久久毛片| 亚洲色图视频网| 亚洲成人久久影院| 丝袜美腿亚洲一区二区图片| 日韩精品电影在线| 激情综合网激情| 99久久久久久| 欧美人成免费网站| 久久亚洲精华国产精华液 | 国产色91在线| 18欧美亚洲精品| 日韩高清不卡在线| 丁香另类激情小说| 欧美区在线观看| 成人永久免费视频| 国产一区二区三区视频在线播放| 高清成人在线观看| 欧美日韩国产天堂| 久久午夜羞羞影院免费观看| 亚洲色图欧洲色图婷婷| 精品综合免费视频观看| 欧美怡红院视频| 欧美激情综合五月色丁香小说| 亚洲1区2区3区视频| 风流少妇一区二区| 欧美一区二区精品在线| 中文字幕中文在线不卡住| 美女免费视频一区二区| 日本大香伊一区二区三区| 国产日产欧美一区| 日日骚欧美日韩| 精品视频123区在线观看| 中文字幕亚洲区| 成人小视频免费在线观看| 日韩一区二区在线观看视频播放| 亚洲欧美日韩久久精品| 风间由美一区二区三区在线观看 | 91视频免费看| 26uuu亚洲综合色| 韩国v欧美v亚洲v日本v| 精品国免费一区二区三区| 久久电影网电视剧免费观看| 91激情在线视频| 亚洲第一狼人社区| 91成人免费在线| 亚洲成人av免费| 91久久国产最好的精华液| 18欧美乱大交hd1984| 91在线国产观看| 国产女人18毛片水真多成人如厕 | 日本一区二区三区久久久久久久久不 | 亚洲三级在线观看| 91视视频在线直接观看在线看网页在线看 | 欧美在线一区二区| 亚洲二区视频在线| 欧美一级日韩免费不卡| 国产一区二区伦理片| 亚洲人成人一区二区在线观看| 91久久国产最好的精华液| 亚洲大片精品永久免费| 欧美人与性动xxxx| 久久精品国产精品亚洲精品| 欧美va亚洲va香蕉在线| 欧美日韩国产大片| 精品一二三四区| 亚洲女性喷水在线观看一区|