[gtk/matthiasc/for-master: 7/7] inspector: Show some information about expressions
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master: 7/7] inspector: Show some information about expressions
- Date: Tue, 14 Jul 2020 00:50:58 +0000 (UTC)
commit 2b5dd0082d0fd87d6302a0c87ae1846eea40426f
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jul 13 20:49:56 2020 -0400
inspector: Show some information about expressions
This is not too useful, but better than nothing.
gtk/inspector/prop-editor.c | 72 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
---
diff --git a/gtk/inspector/prop-editor.c b/gtk/inspector/prop-editor.c
index c182f1c958..c557e4206f 100644
--- a/gtk/inspector/prop-editor.c
+++ b/gtk/inspector/prop-editor.c
@@ -768,6 +768,67 @@ font_changed (GObject *object, GParamSpec *pspec, gpointer data)
pango_font_description_free (fb_font_desc);
}
+static char *
+describe_expression (GtkExpression *expression)
+{
+ if (expression == NULL)
+ return NULL;
+
+ if (G_TYPE_CHECK_INSTANCE_TYPE (expression, GTK_TYPE_CONSTANT_EXPRESSION))
+ {
+ const GValue *value = gtk_constant_expression_get_value (expression);
+ GValue dest = G_VALUE_INIT;
+
+ g_value_init (&dest, G_TYPE_STRING);
+ if (g_value_transform (value, &dest))
+ {
+ char *res = g_strdup_printf (_("%s with value \"%s\""),
+ g_type_name (G_TYPE_FROM_INSTANCE (expression)),
+ g_value_get_string (&dest));
+ g_value_unset (&dest);
+ return res;
+ }
+ else
+ {
+ return g_strdup_printf (_("%s with type %s"),
+ g_type_name (G_TYPE_FROM_INSTANCE (expression)),
+ g_type_name (G_VALUE_TYPE (value)));
+ }
+ }
+ else if (G_TYPE_CHECK_INSTANCE_TYPE (expression, GTK_TYPE_OBJECT_EXPRESSION))
+ {
+ gpointer obj = gtk_object_expression_get_object (expression);
+
+ if (obj)
+ return g_strdup_printf (_("%s for %s %p"),
+ g_type_name (G_TYPE_FROM_INSTANCE (expression)),
+ G_OBJECT_TYPE_NAME (obj), obj);
+ else
+ return g_strdup_printf (_("%s"),
+ g_type_name (G_TYPE_FROM_INSTANCE (expression)));
+ }
+ else if (G_TYPE_CHECK_INSTANCE_TYPE (expression, GTK_TYPE_PROPERTY_EXPRESSION))
+ {
+ GParamSpec *pspec = gtk_property_expression_get_pspec (expression);
+ GtkExpression *expr = gtk_property_expression_get_expression (expression);
+ char *str;
+ char *res;
+
+ str = describe_expression (expr);
+ res = g_strdup_printf ("%s for property %s:%s on: %s",
+ g_type_name (G_TYPE_FROM_INSTANCE (expression)),
+ g_type_name (pspec->owner_type),
+ pspec->name,
+ str);
+ g_free (str);
+ return res;
+ }
+ else
+ return g_strdup_printf (_("%s with value type %s"),
+ g_type_name (G_TYPE_FROM_INSTANCE (expression)),
+ g_type_name (gtk_expression_get_value_type (expression)));
+}
+
static GtkWidget *
property_editor (GObject *object,
GParamSpec *spec,
@@ -1034,6 +1095,17 @@ property_editor (GObject *object,
gtk_widget_set_halign (prop_edit, GTK_ALIGN_START);
gtk_widget_set_valign (prop_edit, GTK_ALIGN_CENTER);
}
+ else if (type == GTK_TYPE_PARAM_SPEC_EXPRESSION)
+ {
+ GtkExpression *expression;
+ g_object_get (object, spec->name, &expression, NULL);
+ msg = describe_expression (expression);
+ prop_edit = gtk_label_new (msg);
+ g_free (msg);
+ g_clear_pointer (&expression, gtk_expression_unref);
+ gtk_widget_set_halign (prop_edit, GTK_ALIGN_START);
+ gtk_widget_set_valign (prop_edit, GTK_ALIGN_CENTER);
+ }
else
{
msg = g_strdup_printf (_("Uneditable property type: %s"),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]