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 | |
| parent | ceadebf0052c9ecec261bb85ce444a43db900525 (diff) | |
open default app for file on double click
| -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);  } | 
