diff options
author | Timm Bäder <mail@baedert.org> | 2015-10-07 11:26:53 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-10-10 17:29:15 -0400 |
commit | 7aa2bfdc774bde4ac58f18533f03679cd5833421 (patch) | |
tree | ed182ec9179feeceaaa8f9446620227a5a647993 /gtk/gtk-query-settings.c | |
parent | bddc524cd84b76d1c25c7700eca9d3a25db30cf6 (diff) | |
download | gtk+-7aa2bfdc774bde4ac58f18533f03679cd5833421.tar.gz |
Add gtk-query-settings
A small utility binary to query all properties of GtkSettings.
https://bugzilla.gnome.org/show_bug.cgi?id=756174
Diffstat (limited to 'gtk/gtk-query-settings.c')
-rw-r--r-- | gtk/gtk-query-settings.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gtk/gtk-query-settings.c b/gtk/gtk-query-settings.c new file mode 100644 index 0000000000..cf1e476db9 --- /dev/null +++ b/gtk/gtk-query-settings.c @@ -0,0 +1,70 @@ +#include <glib.h> +#include <gtk/gtk.h> +#include <string.h> + + +int +main (int argc, char **argv) +{ + GtkSettings *settings; + GParamSpec **props; + guint n_properties; + int i; + int max_prop_name_length = 0; + gchar *pattern = NULL; + + gtk_init (&argc, &argv); + + if (argc > 1) + pattern = argv[1]; + + settings = gtk_settings_get_default (); + props = g_object_class_list_properties (G_OBJECT_GET_CLASS (settings), &n_properties); + + for (i = 0; i < n_properties; i ++) + { + int len = strlen (props[i]->name); + + if (len > max_prop_name_length) + max_prop_name_length = len; + } + + + for (i = 0; i < n_properties; i ++) + { + GValue value = {0}; + GParamSpec *prop = props[i]; + gchar *value_str; + int spacing = max_prop_name_length - strlen (prop->name); + + if (pattern && !g_strrstr (prop->name, pattern)) + continue; + + g_value_init (&value, prop->value_type); + g_object_get_property (G_OBJECT (settings), prop->name, &value); + + if (G_VALUE_HOLDS_ENUM (&value)) + { + GEnumClass *enum_class = G_PARAM_SPEC_ENUM (prop)->enum_class; + GEnumValue *enum_value = g_enum_get_value (enum_class, g_value_get_enum (&value)); + + value_str = g_strdup (enum_value->value_name); + } + else + { + value_str = g_strdup_value_contents (&value); + } + + for (; spacing >= 0; spacing --) + printf (" "); + + printf ("%s: %s\n", prop->name, value_str); + + g_free (value_str); + g_value_unset (&value); + } + + g_free (props); + + return 0; +} |