Add gtkut_tree_view_get_selected_pointer() helper function.
[claws.git] / src / gtk / gtkutils.c
index 7aa516702c38e0d79b9779e040cd4d00701a3f00..689af3735ef5e45a423edba63255871860506445 100644 (file)
@@ -1508,12 +1508,14 @@ gboolean gtkut_tree_model_text_iter_prev(GtkTreeModel *model,
                gtk_tree_model_get(model, &cur_iter, 0, &cur_value, -1);
 
                if (strcmp(text, cur_value) == 0) {
+                       g_free(cur_value);
                        if (count <= 0)
                                return FALSE;
 
                        return gtk_tree_model_iter_nth_child(model, iter, NULL, count - 1);
                }
 
+               g_free(cur_value);
                valid = gtk_tree_model_iter_next(model, &cur_iter);
                count++;
        }
@@ -1987,3 +1989,35 @@ gboolean auto_configure_service_sync(const gchar *service, const gchar *domain,
        return result;
 }
 #endif
+
+gpointer gtkut_tree_view_get_selected_pointer(GtkTreeView *view,
+               gint column)
+{
+       GtkTreeIter iter;
+       GtkTreeModel *model;
+       GtkTreeSelection *sel;
+       gpointer ptr;
+
+       cm_return_val_if_fail(view != NULL, NULL);
+       cm_return_val_if_fail(column >= 0, NULL);
+
+       sel = gtk_tree_view_get_selection(view);
+
+       cm_return_val_if_fail(
+                       gtk_tree_selection_count_selected_rows(sel) == 1,
+                       NULL);
+
+       if (!gtk_tree_selection_get_selected(sel, &model, &iter))
+               return NULL; /* No row selected */
+
+       cm_return_val_if_fail(
+                       gtk_tree_model_get_n_columns(model) > column,
+                       NULL);
+       cm_return_val_if_fail(
+                       gtk_tree_model_get_column_type(model, column) == G_TYPE_POINTER,
+                       NULL);
+
+       gtk_tree_model_get(model, &iter, column, &ptr, -1);
+
+       return ptr;
+}