From 0baa7b56120d29820c1d3f0b95f73bfb7663ac8e Mon Sep 17 00:00:00 2001 From: John Stebbins Date: Mon, 18 Sep 2017 11:33:59 -0700 Subject: [PATCH] LinGui: allow preset delete when list selection is not highlighted Previously, you could only delete the currently highlighted item. Now you can delete the current item in the presets menu button, even if settings have been modified and the list item is not highlighted. --- gtk/src/presets.c | 127 +++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/gtk/src/presets.c b/gtk/src/presets.c index d4344591c..5e2622c77 100644 --- a/gtk/src/presets.c +++ b/gtk/src/presets.c @@ -2241,75 +2241,80 @@ G_MODULE_EXPORT void preset_remove_action_cb(GSimpleAction *action, GVariant *param, signal_user_data_t *ud) { - GtkTreeView *treeview; - GtkTreeSelection *selection; - GtkTreeModel *store; - GtkTreeIter iter; - gchar *preset; + + const char * fullname; + hb_preset_index_t * path; + + fullname = ghb_dict_get_string(ud->settings, "PresetFullName"); + if (fullname == NULL) + { + return; + } + path = hb_preset_search_index(fullname, 0); + if (path == NULL) + { + return; + } + + GtkWindow * hb_window; + GtkWidget * dialog; + gboolean is_folder; GtkResponseType response; + const char * name; - treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); - selection = gtk_tree_view_get_selection (treeview); - if (gtk_tree_selection_get_selected(selection, &store, &iter)) + name = ghb_dict_get_string(ud->settings, "PresetName"); + is_folder = preset_is_folder(path); + hb_window = GTK_WINDOW(GHB_WIDGET(ud->builder, "hb_window")); + dialog = gtk_message_dialog_new(hb_window, GTK_DIALOG_MODAL, + GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, + _("Confirm deletion of %s:\n\n%s"), + is_folder ? _("folder") : _("preset"), + name); + response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + if (response == GTK_RESPONSE_YES) { - GtkWindow *hb_window; - GtkWidget *dialog; - gboolean is_folder; - hb_preset_index_t *path; + GtkTreeView * treeview; + GtkTreeSelection * selection; + gboolean valid = TRUE; + hb_value_t * preset; - gtk_tree_model_get(store, &iter, 0, &preset, -1); - - path = ghb_tree_get_index(store, &iter); - is_folder = preset_is_folder(path); - hb_window = GTK_WINDOW(GHB_WIDGET(ud->builder, "hb_window")); - dialog = gtk_message_dialog_new(hb_window, GTK_DIALOG_MODAL, - GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - _("Confirm deletion of %s:\n\n%s"), - is_folder ? _("folder") : _("preset"), - preset); - response = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy (dialog); - if (response == GTK_RESPONSE_YES) - { - GtkTreeIter nextIter = iter; - gboolean valid = TRUE; - // Determine which preset to highlight after deletion done - if (!gtk_tree_model_iter_next(store, &nextIter)) + // Determine which preset to highlight after deletion done + hb_preset_index_t new_path = *path; + // Try next + new_path.index[path->depth - 1] = path->index[path->depth - 1] + 1; + preset = hb_preset_get(&new_path); + if (preset == NULL) + { + // Try previous + new_path.index[path->depth - 1] = + path->index[path->depth - 1] - 1; + preset = hb_preset_get(&new_path); + if (preset == NULL) { - nextIter = iter; - if (!gtk_tree_model_iter_previous(store, &nextIter)) - { - nextIter = iter; - if (!gtk_tree_model_iter_parent(store, &nextIter, &iter)) - { - nextIter = iter; - valid = gtk_tree_model_get_iter_first(store, &nextIter); - } - } + valid = FALSE; } + } - // Remove the selected item - // First unselect it so that selecting the new item works properly - gtk_tree_selection_unselect_iter(selection, &iter); - if (hb_preset_delete(path) >= 0) - { - store_presets(); - presets_list_remove(ud, path); - ghb_presets_menu_reinit(ud); - } - if (valid) - { - hb_preset_index_t *path; + // Remove the selected item + // First unselect it so that selecting the new item works properly + treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); + selection = gtk_tree_view_get_selection(treeview); + gtk_tree_selection_unselect_all(selection); - path = ghb_tree_get_index(store, &nextIter); - select_preset2(ud, path); - free(path); - } + if (hb_preset_delete(path) >= 0) + { + store_presets(); + presets_list_remove(ud, path); + ghb_presets_menu_reinit(ud); + } + if (valid) + { + select_preset2(ud, &new_path); } - free(path); - g_free(preset); } + free(path); } // controls where valid drop locations are @@ -2650,9 +2655,7 @@ ghb_get_current_preset(signal_user_data_t *ud) G_MODULE_EXPORT void presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t *ud) { - GSimpleAction * action; hb_preset_index_t * path; - gboolean sensitive = FALSE; path = get_selected_path(ud); if (path != NULL) @@ -2681,12 +2684,8 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_ G_ACTION_MAP(ud->app), "preset-reset")); g_simple_action_set_enabled(action, FALSE); } - sensitive = TRUE; free(path); } - action = G_SIMPLE_ACTION(g_action_map_lookup_action(G_ACTION_MAP(ud->app), - "preset-remove")); - g_simple_action_set_enabled(action, sensitive); } void -- 2.40.0