commit b7e39594374d6d5fc08430a8cc83e83fd655eee4
parent 01f71039837bafaeaa491754e2ca94bdb6225c2f
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
@@ -2004,12 +2004,14 @@ gboolean gtkut_pointer_is_grabbed(GtkWidget *widget)
}
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);
@@ -2026,11 +2028,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
@@ -235,8 +235,14 @@ gboolean auto_configure_service_sync(const gchar *service, const gchar *domain,
gboolean gtkut_pointer_is_grabbed(GtkWidget *widget);
/* 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);
#endif /* __GTKUTILS_H__ */