Updating branch refs/heads/master to f428709f174ec2bdba5d4acebe010ffd33e1ea56 (commit) from 3de3a71f4fb26c3c77802d5dd25f241cc216245f (commit)
commit f428709f174ec2bdba5d4acebe010ffd33e1ea56 Author: Christian Dywan <christ...@twotoasts.de> Date: Sat Mar 23 12:37:27 2013 +0100 Accept setting=value in activate_action/ --execute --help-execute lists supported settings and values. midori/main.c | 49 ++++++++++++++++++++++++++++++++++++++++++---- midori/midori-browser.c | 29 +++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/midori/main.c b/midori/main.c index f0ea8a0..adc93b0 100644 --- a/midori/main.c +++ b/midori/main.c @@ -192,14 +192,16 @@ main (int argc, GtkActionGroup* action_group = midori_browser_get_action_group (browser); GList* actions = gtk_action_group_list_actions (action_group); GList* temp = actions; + GObjectClass* class = G_OBJECT_GET_CLASS (midori_browser_get_settings (browser)); + guint i, n_properties; + GParamSpec** pspecs = g_object_class_list_properties (class, &n_properties); guint length = 1; gchar* space; for (; temp; temp = g_list_next (temp)) - { - GtkAction* action = temp->data; - length = MAX (length, 1 + strlen (gtk_action_get_name (action))); - } + length = MAX (length, 1 + strlen (gtk_action_get_name (temp->data))); + for (i = 0; i < n_properties; i++) + length = MAX (length, 1 + strlen (g_param_spec_get_name (pspecs[i]))); space = g_strnfill (length, ' '); for (; actions; actions = g_list_next (actions)) @@ -217,8 +219,45 @@ main (int argc, g_free (label); g_free (stripped); } - g_free (space); g_list_free (actions); + g_print ("\n"); + + for (i = 0; i < n_properties; i++) + { + GParamSpec* pspec = pspecs[i]; + if (!(pspec->flags & G_PARAM_WRITABLE)) + continue; + const gchar* property = g_param_spec_get_name (pspec); + gchar* padding = g_strndup (space, strlen (space) - strlen (property)); + GType type = G_PARAM_SPEC_TYPE (pspec); + const gchar* tname; + GString* tname_string = NULL; + if (type == G_TYPE_PARAM_STRING) + tname = "string"; + else if (type == G_TYPE_PARAM_BOOLEAN) + tname = "true/ false"; + else if (type == G_TYPE_PARAM_ENUM) + { + GEnumClass* enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type)); + gint j = 0; + tname_string = g_string_new (""); + for (j = 0; j < enum_class->n_values; j++) + { + g_string_append (tname_string, enum_class->values[j].value_name); + g_string_append (tname_string, j == 2 ? "\n " : " "); + } + tname = tname_string->str; + } + else + tname = "number"; + g_print ("%s%s%s\n", property, padding, tname); + if (tname_string != NULL) + g_string_free (tname_string, TRUE); + g_free (padding); + } + g_free (pspecs); + + g_free (space); gtk_widget_destroy (GTK_WIDGET (browser)); return 0; } diff --git a/midori/midori-browser.c b/midori/midori-browser.c index d9b70f0..c8981c1 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -536,6 +536,35 @@ _midori_browser_activate_action (MidoriBrowser* browser, GtkAction* action = _action_by_name (browser, name); if (action) gtk_action_activate (action); + else if (strchr (name, '=')) + { + gchar** parts = g_strsplit (name, "=", 0); + GObjectClass* class = G_OBJECT_GET_CLASS (browser->settings); + GParamSpec* pspec = g_object_class_find_property (class, parts[0]); + GType type = pspec ? G_PARAM_SPEC_TYPE (pspec) : G_TYPE_INVALID; + if (type == G_TYPE_PARAM_BOOLEAN && !strcmp ("true", parts[1])) + g_object_set (browser->settings, parts[0], TRUE, NULL); + else if (type == G_TYPE_PARAM_BOOLEAN && !strcmp ("false", parts[1])) + g_object_set (browser->settings, parts[0], FALSE, NULL); + else if (type == G_TYPE_PARAM_STRING) + g_object_set (browser->settings, parts[0], parts[1], NULL); + else if (type == G_TYPE_PARAM_INT || type == G_TYPE_PARAM_UINT) + g_object_set (browser->settings, parts[0], atoi (parts[1]), NULL); + else if (type == G_TYPE_PARAM_FLOAT) + g_object_set (browser->settings, parts[0], g_ascii_strtod (parts[1], NULL), NULL); + else if (type == G_TYPE_PARAM_ENUM) + { + GEnumClass* enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type)); + GEnumValue* enum_value = g_enum_get_value_by_name (enum_class, parts[1]); + if (enum_value != NULL) + g_object_set (browser->settings, parts[0], enum_value->value, NULL); + else + g_warning (_("Value '%s' is invalid for %s"), parts[1], parts[0]); + } + else if (pspec != NULL) + g_warning (_("Value '%s' is invalid for %s"), parts[1], parts[0]); + g_strfreev (parts); + } else g_warning (_("Unexpected action '%s'."), name); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits