diff --git a/dicons.c b/dicons.c index bb30d91..3c231a4 100644 --- a/dicons.c +++ b/dicons.c @@ -60,57 +60,31 @@ static GtkListStore *create_desktop_list(void) return GTK_LIST_STORE(store); } -// static void setup_listitem_cb(GtkListItemFactory *factory, GtkListItem *list_item) -// { -// GtkWidget *box; -// GtkWidget *image; -// GtkWidget *label; -// -// box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12); -// image = gtk_image_new(); -// gtk_image_set_icon_size(GTK_IMAGE(image), GTK_ICON_SIZE_LARGE); -// gtk_box_append(GTK_BOX(box), image); -// label = gtk_label_new(""); -// gtk_box_append(GTK_BOX(box), label); -// gtk_list_item_set_child(list_item, box); -// } -// -// static void bind_listitem_cb(GtkListItemFactory *factory, GtkListItem *list_item) -// { -// GtkWidget *image; -// GtkWidget *label; -// GFile *file; -// GFileInfo *file_info; -// -// image = gtk_widget_get_first_child(gtk_list_item_get_child(list_item)); -// label = gtk_widget_get_next_sibling(image); -// file = gtk_list_item_get_item(list_item); -// file_info = g_file_query_info(file, "standard::*,ownser::user", 0, 0, 0); -// -// gtk_image_set_from_gicon(GTK_IMAGE(image), g_file_info_get_icon(file_info)); -// gtk_label_set_label(GTK_LABEL(label), g_file_info_get_display_name(file_info)); -// } -// -// static void activate_cb(GtkGridView *list, guint position, gpointer unused) -// { -// GdkAppLaunchContext *context; -// GFile *file; -// char* file_uri = g_file_get_uri(file); -// -// file = g_list_model_get_item(G_LIST_MODEL(gtk_grid_view_get_model(list)), position); -// printf("uri %s\n", file_uri); -// -// g_app_info_launch_default_for_uri(file_uri, 0, 0); -// -// g_object_unref(file); -// } +static void activate_cb(GtkIconView *icon_view, GtkTreePath *tree_path, gpointer user_data) +{ + GtkListStore *store; + GtkTreeIter iter; + GFile *file; + char* file_uri; + store = GTK_LIST_STORE (user_data); + + gtk_tree_model_get_iter (GTK_TREE_MODEL (store), + &iter, tree_path); + + gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, + COL_FILE, &file, + -1); + + file_uri = g_file_get_uri(file); + printf("uri %s\n", file_uri); + + g_app_info_launch_default_for_uri(file_uri, 0, 0); +} static void activate (GtkApplication* app, gpointer user_data) { GtkWidget *window, *icon_view; - // , *gridview; GtkListStore *model; - // GtkListItemFactory *factory; window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW (window), "Window"); @@ -119,10 +93,6 @@ static void activate (GtkApplication* app, gpointer user_data) gtk_layer_init_for_window(GTK_WINDOW(window)); gtk_layer_set_layer(GTK_WINDOW(window), GTK_LAYER_SHELL_LAYER_BOTTOM); - // factory = gtk_signal_list_item_factory_new(); - // g_signal_connect(factory, "setup", G_CALLBACK(setup_listitem_cb), NULL); - // g_signal_connect(factory, "bind", G_CALLBACK(bind_listitem_cb), NULL); - model = create_desktop_list(); icon_view = gtk_icon_view_new_with_model(GTK_TREE_MODEL(model)); @@ -130,15 +100,12 @@ static void activate (GtkApplication* app, gpointer user_data) GTK_SELECTION_MULTIPLE); gtk_icon_view_set_text_column(GTK_ICON_VIEW (icon_view), COL_DISPLAY_NAME); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW (icon_view), COL_PIXBUF); - // gridview = gtk_grid_view_new(GTK_SELECTION_MODEL(gtk_single_selection_new(model)), factory); - // g_signal_connect(gridview, "activate", G_CALLBACK(activate_cb), NULL); + g_signal_connect(icon_view, "item-activated", G_CALLBACK(activate_cb), model); gtk_container_add(GTK_CONTAINER(window), icon_view); gtk_widget_grab_focus (icon_view); - // gtk_window_present(GTK_WINDOW (window)); - gtk_widget_show_all (window); }