Im новое для GTK и не совсем понимаю, как использовать g_signal_connect(). Я строй основного файлового браузера до сих пор имеет две панели одна с видом каталога и один с видом файлаОбновление панели в GTK + 3 с помощью пользовательского ввода
#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 может быть предоставлен только двум аргументам указатель на данные и выбор.
Im интересно, если есть какой-то способ использовать GTK ждать изменения каталогов и обновить панель файлов
/* отмечает
TreeView: это один столбец, который является структурой gtk_tree
list_dir: recursivly создает поддерева каталогов из некоторого пути в store_tree
ListView: один столбец, который содержит имя, которое имена файла
build_list: treeview, если выбрано, может возвращать путь к этому каталогу. хранить все файлы в каталоге в gtk_store store_list
«G_CALLBACK», принимающий два аргумента, является следствием ввода указателей на функцию. На самом деле обработчик сигналов должен иметь любые аргументы, которые должна сигнализировать вам документация. Но вы передали его с помощью 'G_CALLBACK()', чтобы он соответствовал сигнатуре 'g_signal_connect()'. – ptomato