summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2023-04-05 22:45:08 +0200
committerOrangerot <purple@orangerot.dev>2023-04-05 22:45:08 +0200
commit9e35e33edeb5d572b34e602bd2b18a2eddcc5010 (patch)
tree7b844f9be9d1c764ba0c4b1f27c89e87385da9b9
parentceadebf0052c9ecec261bb85ce444a43db900525 (diff)
open default app for file on double click
-rw-r--r--dicons.c75
1 files changed, 21 insertions, 54 deletions
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);
}