diff options
author | Orangerot <purple@orangerot.dev> | 2023-04-05 22:45:08 +0200 |
---|---|---|
committer | Orangerot <purple@orangerot.dev> | 2023-04-05 22:45:08 +0200 |
commit | 9e35e33edeb5d572b34e602bd2b18a2eddcc5010 (patch) | |
tree | 7b844f9be9d1c764ba0c4b1f27c89e87385da9b9 /dicons.c | |
parent | ceadebf0052c9ecec261bb85ce444a43db900525 (diff) |
open default app for file on double click
Diffstat (limited to 'dicons.c')
-rw-r--r-- | dicons.c | 75 |
1 files changed, 21 insertions, 54 deletions
@@ -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); } |