static void theme_delete_cb (GtkWidget *button, AppearanceData *data) { GtkIconView *icon_view = GTK_ICON_VIEW (appearance_capplet_get_widget (data, "theme_list")); GList *selected = gtk_icon_view_get_selected_items (icon_view); if (selected) { GtkTreePath *path = selected->data; GtkTreeModel *model = gtk_icon_view_get_model (icon_view); GtkTreeIter iter; gchar *name = NULL; if (gtk_tree_model_get_iter (model, &iter, path)) gtk_tree_model_get (model, &iter, COL_NAME, &name, -1); if (name != NULL && strcmp (name, data->theme_custom->name) && theme_delete (name, THEME_TYPE_META)) { /* remove theme from the model, too */ GtkTreeIter child; if (gtk_tree_model_iter_next (model, &iter) || theme_model_iter_last (model, &iter)) theme_select_iter (icon_view, &iter); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_sort_convert_iter_to_child_iter ( GTK_TREE_MODEL_SORT (model), &child, &iter); gtk_list_store_remove (data->theme_store, &child); } g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL); g_list_free (selected); g_free (name); } }
static void generic_theme_delete (const gchar *tv_name, ThemeType type, AppearanceData *data) { GtkTreeView *treeview = GTK_TREE_VIEW (appearance_capplet_get_widget (data, tv_name)); GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview); GtkTreeModel *model; GtkTreeIter iter; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gchar *name; gtk_tree_model_get (model, &iter, COL_NAME, &name, -1); if (name != NULL && theme_delete (name, type)) { /* remove theme from the model, too */ GtkTreeIter child; GtkTreePath *path; path = gtk_tree_model_get_path (model, &iter); gtk_tree_model_sort_convert_iter_to_child_iter ( GTK_TREE_MODEL_SORT (model), &child, &iter); gtk_list_store_remove (GTK_LIST_STORE ( gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model))), &child); if (gtk_tree_model_get_iter (model, &iter, path) || theme_model_iter_last (model, &iter)) { gtk_tree_path_free (path); path = gtk_tree_model_get_path (model, &iter); gtk_tree_selection_select_path (selection, path); gtk_tree_view_scroll_to_cell (treeview, path, NULL, FALSE, 0, 0); } gtk_tree_path_free (path); } g_free (name); } }