通过用户输入更新GTK + 3中的面板

时间:2015-11-29 07:53:45

标签: c gtk3 file-browser

我是GTK的新手,并不太明白如何使用g_signal_connect()。我正在构建一个基本的文件浏览器到目前为止它有两个面板,一个带有目录视图,另一个带有文件视图

#include <pwd.h>
#include <sys/types.h>
#include <string.h>
#include <gtk/gtk.h>
#include <errno.h>
#include <dirent.h>
#include <limits.h>

#include "ListView/buildList.h"
#include "TreeView/buildTree.h"

#define MAX_PATH 1024

int main(int argc, char **argv) {
    gtk_init (&argc, &argv);
    GtkTreeStore *store_tree = gtk_tree_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
    GtkTreeStore *store_list = gtk_tree_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
    char *working_dir = getenv("HOMEs");
    if (working_dir != NULL) {
        printf("Home dir in enviroment ");
        printf("%s\n", working_dir);
    }
    else {
        working_dir = pwd();
        if(working_dir != NULL){
            printf("Failed to find Home using current directory \n");
        }
        else{
            printf("Directory error terminate");
            exit(0);
        }
    }

    GtkTreeIter iter_p;
    if(list_dir(store_tree, working_dir, iter_p, 0) != 0){
        printf ("Error building tree");
        return 1;
    }
    if(build_list(store_list, working_dir) != 0){
        printf ("Error building tree");
        return 1;
    }
    //build first two views, tree and list.
    GtkWidget *treeview = gtk_tree_view_new ();
    GtkWidget *listview = gtk_tree_view_new ();
    build_treeview(treeview);
    build_listview(listview);

    GtkTreeSelection *selection;
    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview));
    g_signal_connect (G_OBJECT(selection), "changed", 
                      G_CALLBACK(item_selected), NULL);

    gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store_tree));
    gtk_tree_view_set_model (GTK_TREE_VIEW (listview), GTK_TREE_MODEL (store_list));

    g_object_unref (store_tree);
    g_object_unref (store_list);

    display (treeview, listview);

    gtk_main ();
    return 0;
} 

我希望能够检测用户何时选择目录并更改文件面板以显示新文件。现在当它检测到更改时,它只是输出到控制台,由selection给出的一些信息查看文档看起来像G_CALLBACK只能给两个参数指向数据和选择。

我想知道是否有某种方法可以使用GTK等待更改目录并更新文件面板

/ * notes

treeview:是一列是gtk_tree结构

list_dir:recursivly从store_tree

中的某个路径创建目录子树

listview:一列是名称,其中包含文件的名称

build_list:选择后的树视图可以返回该目录的路径。将所有文件存储在gtk_store store_list

目录中

1 个答案:

答案 0 :(得分:0)

在显示应用程序窗口之前,您的gtk_tree_view_get_selection会被执行。因此它总是(!)为空,因为永远不会改变空选择,所以你永远不会收到"changed"信号。

信号连接本身是正确的。