X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=blobdiff_plain;f=src%2Fview_file%2Fview_file_list.c;h=c65fd899cc3897cd0caefd0e3d39f5f89066e379;hp=86cb6123b07e0914c6a452df22a8e5cb175c557c;hb=e0ad96c18c2eaafac5d70ac4342db5a1b0bac448;hpb=e7c45a6fc20c21622ed6af044c5261d8bc835012 diff --git a/src/view_file/view_file_list.c b/src/view_file/view_file_list.c index 86cb6123..c65fd899 100644 --- a/src/view_file/view_file_list.c +++ b/src/view_file/view_file_list.c @@ -498,6 +498,77 @@ gboolean vflist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat ViewFile *vf = data; GtkTreePath *tpath; + // DO NOT SUBMIT + // TODO(xsdg): these key combos should be handled by the standard, configurable mechanism. + + if (event->keyval == GDK_KEY_Insert || event->keyval == GDK_KEY_F2) + { + // First off, get the selected FDs + GList *selected_fds = NULL; + { + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vf->listview)); + if (event->keyval == GDK_KEY_Insert) + { + if (gtk_tree_selection_count_selected_rows(selection) < 2) + { + g_warning("Need at least two items selected to create a cluster."); + return TRUE; + } + } + else + { + if (gtk_tree_selection_count_selected_rows(selection) < 1) + { + g_warning("Must have a node selected to flip show_children."); + return TRUE; + } + } + + // List of GtkTreePath + GList *selected_rows = gtk_tree_selection_get_selected_rows(selection, NULL); + GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)); + GtkTreeIter iter; + for (GList *work = selected_rows; work; work = work->next) + { + FileData *fd; + GtkTreePath *select_path = work->data; + gtk_tree_model_get_iter(store, &iter, select_path); + gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1); + selected_fds = g_list_prepend(selected_fds, file_data_ref(fd)); + } + + selected_fds = g_list_reverse(selected_fds); + g_list_free_full(selected_rows, (GDestroyNotify)gtk_tree_path_free); + } + + if (event->keyval == GDK_KEY_Insert) + { + g_warning("Starting a cluster!"); + FileCluster *fc = fileclusterlist_create_cluster(vf->cluster_list, selected_fds); + if (fc) + { + // TODO(xsdg): mark as in a cluster somehow? + vf_refresh(vf); + } + } + else if (event->keyval == GDK_KEY_F2) + { + FileData *fd = selected_fds->data; + if (fd) + { + g_warning("Flipping show_children!"); + FileCluster *fc = g_hash_table_lookup(vf->cluster_list->clusters, fd); + if (fc) + { + filecluster_toggle_show_children(fc); + vf_refresh(vf); + } + } + } + + return TRUE; // Handled event; stop propagating. + } + if (event->keyval != GDK_KEY_Menu) return FALSE; gtk_tree_view_get_cursor(GTK_TREE_VIEW(vf->listview), &tpath, NULL);