summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Stebbins <[email protected]>2017-09-18 11:33:59 -0700
committerJohn Stebbins <[email protected]>2017-11-06 08:19:49 -0800
commit0baa7b56120d29820c1d3f0b95f73bfb7663ac8e (patch)
tree7436fea995315daaa336194197d138b55df44b8e
parent296dea8e43c7f0bd8e6c564222c6bdd87c8b3f17 (diff)
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.
-rw-r--r--gtk/src/presets.c127
1 files 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