]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtksettings.c
add _gtk_tree_view_column_get_editable_cell and
[~andy/gtk] / gtk / gtksettings.c
index bd666813de36a5ea893f3bd765329bcce2e20a98..f5f02eea0c0113e1c48ba959265bcea0768ea608 100644 (file)
@@ -29,7 +29,9 @@ enum {
   PROP_SPLIT_CURSOR,
   PROP_THEME_NAME,
   PROP_KEY_THEME_NAME,
-  PROP_MENU_BAR_ACCEL
+  PROP_MENU_BAR_ACCEL,
+  PROP_DND_DRAG_THRESHOLD,
+  PROP_FONT_NAME
 };
 
 
@@ -177,7 +179,7 @@ gtk_settings_class_init (GtkSettingsClass *class)
                                              g_param_spec_string ("gtk-theme-name",
                                                                   _("Theme Name"),
                                                                   _("Name of theme RC file to load"),
-                                                                 NULL,
+                                                                 "Default",
                                                                  G_PARAM_READWRITE),
                                              NULL);
   g_assert (result == PROP_THEME_NAME);
@@ -197,8 +199,26 @@ gtk_settings_class_init (GtkSettingsClass *class)
                                                                   "F10",
                                                                   G_PARAM_READWRITE),
                                              NULL);
-
   g_assert (result == PROP_MENU_BAR_ACCEL);
+
+  result = settings_install_property_parser (class,
+                                            g_param_spec_int ("gtk-dnd-drag-threshold",
+                                                              _("Drag threshold"),
+                                                              _("Number of pixels the cursor can move before dragging"),
+                                                              1, G_MAXINT, 8,
+                                                               G_PARAM_READWRITE),
+                                            NULL);
+  g_assert (result == PROP_DND_DRAG_THRESHOLD);
+
+  result = settings_install_property_parser (class,
+                                             g_param_spec_string ("gtk-font-name",
+                                                                  _("Font Name"),
+                                                                  _("Name of default font to use"),
+                                                                 "Sans 10",
+                                                                 G_PARAM_READWRITE),
+                                             NULL);
+  g_assert (result == PROP_FONT_NAME);
 }
 
 static void
@@ -266,8 +286,15 @@ gtk_settings_get_property (GObject     *object,
                           GParamSpec  *pspec)
 {
   GtkSettings *settings = GTK_SETTINGS (object);
+  GType value_type = G_VALUE_TYPE (value);
+  GType fundamental_type = G_TYPE_FUNDAMENTAL (value_type);
 
-  if (g_value_type_transformable (G_TYPE_INT, G_VALUE_TYPE (value)) ||
+  /* For enums and strings, we need to get the value as a string,
+   * not as an int, since we support using names/nicks as the setting
+   * value.
+   */
+  if ((g_value_type_transformable (G_TYPE_INT, value_type) &&
+       !(fundamental_type == G_TYPE_ENUM || fundamental_type == G_TYPE_FLAGS)) ||
       g_value_type_transformable (G_TYPE_STRING, G_VALUE_TYPE (value)) ||
       g_value_type_transformable (GDK_TYPE_COLOR, G_VALUE_TYPE (value)))
     {
@@ -292,8 +319,7 @@ gtk_settings_get_property (GObject     *object,
         {
           GValue tmp_value = { 0, };
           GValue gstring_value = { 0, };
-          GtkRcPropertyParser parser = g_param_spec_get_qdata (pspec,
-                                                               quark_property_parser);
+          GtkRcPropertyParser parser = (GtkRcPropertyParser) g_param_spec_get_qdata (pspec, quark_property_parser);
           
           g_value_init (&gstring_value, G_TYPE_GSTRING);
 
@@ -399,8 +425,17 @@ _gtk_settings_parse_convert (GtkRcPropertyParser parser,
       if (free_gstring)
        g_string_free (gstring, TRUE);
     }
-  else if (!G_VALUE_HOLDS (src_value, G_TYPE_GSTRING) &&
-          g_value_type_transformable (G_VALUE_TYPE (src_value), G_VALUE_TYPE (dest_value)))
+  else if (G_VALUE_HOLDS (src_value, G_TYPE_GSTRING))
+    {
+      if (G_VALUE_HOLDS (dest_value, G_TYPE_STRING))
+       {
+         GString *gstring = g_value_get_boxed (src_value);
+
+         g_value_set_string (dest_value, gstring ? gstring->str : NULL);
+         success = !g_param_value_validate (pspec, dest_value);
+       }
+    }
+  else if (g_value_type_transformable (G_VALUE_TYPE (src_value), G_VALUE_TYPE (dest_value)))
     success = g_param_value_convert (pspec, src_value, dest_value, TRUE);
 
   return success;
@@ -412,7 +447,7 @@ apply_queued_setting (GtkSettings      *data,
                      GtkSettingsValue *qvalue)
 {
   GValue tmp_value = { 0, };
-  GtkRcPropertyParser parser = g_param_spec_get_qdata (pspec, quark_property_parser);
+  GtkRcPropertyParser parser = (GtkRcPropertyParser) g_param_spec_get_qdata (pspec, quark_property_parser);
 
   g_value_init (&tmp_value, G_PARAM_SPEC_VALUE_TYPE (pspec));
   if (_gtk_settings_parse_convert (parser, &qvalue->value,
@@ -420,7 +455,7 @@ apply_queued_setting (GtkSettings      *data,
     g_object_set_property (G_OBJECT (data), pspec->name, &tmp_value);
   else
     {
-      gchar *debug = g_strdup_value_contents (&tmp_value);
+      gchar *debug = g_strdup_value_contents (&qvalue->value);
       
       g_message ("%s: failed to retrieve property `%s' of type `%s' from rc file value \"%s\" of type `%s'",
                 qvalue->origin,
@@ -472,7 +507,7 @@ settings_install_property_parser (GtkSettingsClass   *class,
     g_object_freeze_notify (node->data);
 
   g_object_class_install_property (G_OBJECT_CLASS (class), ++class_n_properties, pspec);
-  g_param_spec_set_qdata (pspec, quark_property_parser, parser);
+  g_param_spec_set_qdata (pspec, quark_property_parser, (gpointer) parser);
 
   for (node = object_list; node; node = node->next)
     {
@@ -519,7 +554,7 @@ _gtk_rc_property_parser_from_type (GType type)
 void
 gtk_settings_install_property (GParamSpec  *pspec)
 {
-  GtkRcPropertyParser parser = NULL;
+  GtkRcPropertyParser parser;
 
   g_return_if_fail (G_IS_PARAM_SPEC (pspec));
 
@@ -549,9 +584,9 @@ free_value (gpointer data)
 }
 
 void
-gtk_settings_set_property_value  (GtkSettings            *settings,
-                                 const gchar            *prop_name,
-                                 const GtkSettingsValue *new_value)
+gtk_settings_set_property_value (GtkSettings            *settings,
+                                const gchar            *prop_name,
+                                const GtkSettingsValue *new_value)
 {
   GtkSettingsValue *qvalue;
   GParamSpec *pspec;
@@ -574,11 +609,8 @@ gtk_settings_set_property_value  (GtkSettings            *settings,
   
   name = g_strdup (prop_name);
   g_strcanon (name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-", '-');
-  name_quark = g_quark_try_string (name);
-  if (name_quark)
-    g_free (name);
-  else
-    name_quark = g_quark_from_string (name);
+  name_quark = g_quark_from_string (name);
+  g_free (name);
 
   qvalue = g_datalist_id_get_data (&settings->queued_settings, name_quark);
   if (!qvalue)
@@ -909,7 +941,6 @@ gtk_rc_property_parse_border (const GParamSpec *pspec,
   return success;
 }
 
-
 void
 _gtk_settings_handle_event (GdkEventSetting *event)
 {