commit 4c168abbad5d0e4f50735e1c380d05596c7af222
parent b357c3b93e69f90077bfb7c3884b91e5c0ac45e1
Author: Andrej Kacian <ticho@claws-mail.org>
Date: Tue, 27 Feb 2018 20:19:37 +0100
Make the gtkut_tree_view_get_selected_pointer() more versatile.
It can now be used also for non-trivial use cases, where
the caller needs to further work with the model and/or
selection, or if a string value needs to be read from the
model.
Diffstat:
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c
@@ -1991,12 +1991,14 @@ gboolean auto_configure_service_sync(const gchar *service, const gchar *domain,
#endif
gpointer gtkut_tree_view_get_selected_pointer(GtkTreeView *view,
- gint column)
+ gint column, GtkTreeModel **_model, GtkTreeSelection **_selection,
+ GtkTreeIter *_iter)
{
GtkTreeIter iter;
GtkTreeModel *model;
GtkTreeSelection *sel;
gpointer ptr;
+ GType type;
cm_return_val_if_fail(view != NULL, NULL);
cm_return_val_if_fail(column >= 0, NULL);
@@ -2013,11 +2015,20 @@ gpointer gtkut_tree_view_get_selected_pointer(GtkTreeView *view,
cm_return_val_if_fail(
gtk_tree_model_get_n_columns(model) > column,
NULL);
+
+ type = gtk_tree_model_get_column_type(model, column);
cm_return_val_if_fail(
- gtk_tree_model_get_column_type(model, column) == G_TYPE_POINTER,
+ type == G_TYPE_POINTER || type == G_TYPE_STRING,
NULL);
gtk_tree_model_get(model, &iter, column, &ptr, -1);
+ if (_model != NULL)
+ *_model = model;
+ if (_selection != NULL)
+ *_selection = sel;
+ if (_iter != NULL)
+ *_iter = iter;
+
return ptr;
}
diff --git a/src/gtk/gtkutils.h b/src/gtk/gtkutils.h
@@ -233,9 +233,15 @@ gboolean auto_configure_service_sync(const gchar *service, const gchar *domain,
#endif
/* Returns pointer stored in selected row of a tree view's model
- * in a given column. The column has to be of type G_TYPE_POINTER. */
+ * in a given column. The column has to be of type G_TYPE_POINTER
+ * or G_TYPE_STRING (in this case, the returned value has to be
+ * freed by the caller.
+ * _model, _selection and _iter parameters are optional, and if
+ * not NULL, they will be set to point to corresponding GtkTreeModel,
+ * GtkTreeSelection, and GtkTreeIter of the selected row. */
gpointer gtkut_tree_view_get_selected_pointer(GtkTreeView *view,
- gint column);
+ gint column, GtkTreeModel **_model, GtkTreeSelection **_selection,
+ GtkTreeIter *_iter);
#if GTK_CHECK_VERSION (3, 2, 0)
#define GTK_TYPE_VBOX GTK_TYPE_BOX