[glib/wip/menus-rebase2] gmenu: Switch to using strings for public API



commit 8d9ba17f22bf31a2210a11a8ecd9646a78051da1
Author: Colin Walters <walters verbum org>
Date:   Fri Nov 18 14:38:23 2011 -0500

    gmenu: Switch to using strings for public API
    
    This is more introspection friendly, since we don't have to invoke the
    quark functions.

 gio/gmenu.c            |   42 +++++++------
 gio/gmenu.h            |    6 +-
 gio/gmenuexporter.c    |    4 +-
 gio/gmenumarkup.c      |   12 +---
 gio/gmenumodel.c       |  154 ++++++++++++++++-------------------------------
 gio/gmenumodel.h       |   43 ++++++--------
 gio/gmenuproxy.c       |    4 +-
 gio/tests/gmenumodel.c |   24 ++++----
 8 files changed, 118 insertions(+), 171 deletions(-)
---
diff --git a/gio/gmenu.c b/gio/gmenu.c
index b47fceb..59ea3bb 100644
--- a/gio/gmenu.c
+++ b/gio/gmenu.c
@@ -104,24 +104,24 @@ g_menu_get_n_items (GMenuModel *model)
 static void
 g_menu_get_item_attributes (GMenuModel  *model,
                             gint         position,
-                            GHashTable **quark_table,
+                            GHashTable **attr_table,
                             GHashTable **string_table,
                             GVariant   **dictionary)
 {
   GMenu *menu = G_MENU (model);
 
-  *quark_table = g_hash_table_ref (g_array_index (menu->items, struct item, position).attributes);
+  *attr_table = g_hash_table_ref (g_array_index (menu->items, struct item, position).attributes);
 }
 
 static void
 g_menu_get_item_links (GMenuModel  *model,
                        gint         position,
-                       GHashTable **quark_table,
-                       GHashTable **string_table)
+                       GHashTable **attr_table,
+		       GHashTable **string_table)
 {
   GMenu *menu = G_MENU (model);
 
-  *quark_table = g_hash_table_ref (g_array_index (menu->items, struct item, position).links);
+  *attr_table = g_hash_table_ref (g_array_index (menu->items, struct item, position).links);
 }
 
 /**
@@ -570,18 +570,22 @@ g_menu_item_class_init (GMenuItemClass *class)
  **/
 void
 g_menu_item_set_attribute_value (GMenuItem *menu_item,
-                                 GQuark     attribute,
+                                 const gchar *attribute,
                                  GVariant  *value)
 {
+  GQuark attribute_q;
+
   g_return_if_fail (G_IS_MENU_ITEM (menu_item));
-  g_return_if_fail (attribute != 0);
+  g_return_if_fail (attribute != NULL);
+
+  attribute_q = g_quark_from_string (attribute);
 
   g_menu_item_clear_cow (menu_item);
 
   if (value != NULL)
-    g_hash_table_insert (menu_item->attributes, GINT_TO_POINTER (attribute), g_variant_ref_sink (value));
+    g_hash_table_insert (menu_item->attributes, GINT_TO_POINTER (attribute_q), g_variant_ref_sink (value));
   else
-    g_hash_table_remove (menu_item->attributes, GINT_TO_POINTER (attribute));
+    g_hash_table_remove (menu_item->attributes, GINT_TO_POINTER (attribute_q));
 }
 
 /**
@@ -605,7 +609,7 @@ g_menu_item_set_attribute_value (GMenuItem *menu_item,
  **/
 void
 g_menu_item_set_attribute (GMenuItem   *menu_item,
-                           GQuark       attribute,
+                           const gchar *attribute,
                            const gchar *format_string,
                            ...)
 {
@@ -628,33 +632,33 @@ g_menu_item_set_attribute (GMenuItem   *menu_item,
 /**
  * g_menu_item_set_link:
  * @menu_item: a #GMenuItem
- * @link: a #GQuark naming the link to establish or unset
+ * @link: type of link to establish or unset
  * @model: (allow-none): the #GMenuModel to link to (or %NULL to unset)
  *
  * Creates a link from @menu_item to @link if non-%NULL, or unsets it.
  *
- * @link is a #GQuark that, when converted to a string, gives the
- * name of the link to set.  Some commonly-used link quarks are provided
- * as constants, such as %G_MENU_LINK_SUBMENU and %G_MENU_LINK_SECTION.
- *
  * Links are used to establish a relationship between a particular menu
  * item and another menu.  For example, %G_MENU_LINK_SUBMENU is used to
  * associate a submenu with a particular menu item.
  **/
 void
 g_menu_item_set_link (GMenuItem  *menu_item,
-                      GQuark      link,
+                      const gchar *link,
                       GMenuModel *model)
 {
+  GQuark link_q;
+
   g_return_if_fail (G_IS_MENU_ITEM (menu_item));
-  g_return_if_fail (link != 0);
+  g_return_if_fail (link != NULL);
+
+  link_q = g_quark_from_string (link);
 
   g_menu_item_clear_cow (menu_item);
 
   if (model != NULL)
-    g_hash_table_insert (menu_item->links, GINT_TO_POINTER (link), g_object_ref (model));
+    g_hash_table_insert (menu_item->links, GINT_TO_POINTER (link_q), g_object_ref (model));
   else
-    g_hash_table_remove (menu_item->links, GINT_TO_POINTER (link));
+    g_hash_table_remove (menu_item->links, GINT_TO_POINTER (link_q));
 }
 
 /**
diff --git a/gio/gmenu.h b/gio/gmenu.h
index d1cd630..716832f 100644
--- a/gio/gmenu.h
+++ b/gio/gmenu.h
@@ -101,14 +101,14 @@ GMenuItem *             g_menu_item_new_section                         (const g
                                                                          GMenuModel         *section);
 
 void                    g_menu_item_set_attribute_value                 (GMenuItem          *menu_item,
-                                                                         GQuark              attribute,
+                                                                         const char         *attribute,
                                                                          GVariant           *value);
 void                    g_menu_item_set_attribute                       (GMenuItem          *menu_item,
-                                                                         GQuark              attribute,
+                                                                         const char         *attribute,
                                                                          const gchar        *format_string,
                                                                          ...);
 void                    g_menu_item_set_link                            (GMenuItem          *menu_item,
-                                                                         GQuark              link,
+                                                                         const char         *link,
                                                                          GMenuModel         *model);
 void                    g_menu_item_set_label                           (GMenuItem          *menu_item,
                                                                          const gchar        *label);
diff --git a/gio/gmenuexporter.c b/gio/gmenuexporter.c
index 4c0fa45..2bcd40c 100644
--- a/gio/gmenuexporter.c
+++ b/gio/gmenuexporter.c
@@ -158,7 +158,7 @@ g_menu_exporter_menu_create_links (GMenuExporterMenu *menu,
 {
   GMenuExporterLink *list = NULL;
   GMenuLinkIter *iter;
-  const gchar *name;
+  const char *name;
   GMenuModel *model;
 
   iter = g_menu_model_iterate_item_links (menu->model, position);
@@ -195,7 +195,7 @@ g_menu_exporter_menu_describe_item (GMenuExporterMenu *menu,
   GVariantBuilder builder;
   GSequenceIter *iter;
   GMenuExporterLink *link;
-  const gchar *name;
+  const char *name;
   GVariant *value;
 
   g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
diff --git a/gio/gmenumarkup.c b/gio/gmenumarkup.c
index 4fc09b8..6b2ff02 100644
--- a/gio/gmenumarkup.c
+++ b/gio/gmenumarkup.c
@@ -124,8 +124,7 @@ add_string_attributes (GMenuItem    *item,
 
   for (i = 0; names[i]; i++)
     {
-      GQuark attribute = g_quark_from_string (names[i]);
-      g_menu_item_set_attribute (item, attribute, "s", values[i]);
+      g_menu_item_set_attribute (item, names[i], "s", values[i]);
     }
 }
 
@@ -258,13 +257,10 @@ g_menu_markup_start_element (GMarkupParseContext  *context,
           if (COLLECT (STRING,            "name", &name,
                        STRING | OPTIONAL, "id",   &id))
             {
-              GQuark link;
               GMenu *menu;
 
-              link = g_quark_from_string (name);
-
               menu = g_menu_new ();
-              g_menu_item_set_link (state->frame.item, link, G_MENU_MODEL (menu));
+              g_menu_item_set_link (state->frame.item, name, G_MENU_MODEL (menu));
               g_menu_markup_push_frame (state, menu, NULL);
 
               if (id != NULL)
@@ -334,7 +330,7 @@ g_menu_markup_end_element (GMarkupParseContext  *context,
                 }
             }
 
-          g_menu_item_set_attribute_value (state->frame.item, state->attribute, value);
+          g_menu_item_set_attribute_value (state->frame.item, g_quark_to_string (state->attribute), value);
           g_variant_unref (value);
         }
 
@@ -602,7 +598,7 @@ g_menu_markup_print_string (GString    *string,
 
       while (g_menu_attribute_iter_next (attr_iter))
         {
-          const gchar *name = g_menu_attribute_iter_get_name (attr_iter);
+          const char *name = g_menu_attribute_iter_get_name (attr_iter);
           GVariant *value = g_menu_attribute_iter_get_value (attr_iter);
 
           if (g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
diff --git a/gio/gmenumodel.c b/gio/gmenumodel.c
index e9f8b95..9079448 100644
--- a/gio/gmenumodel.c
+++ b/gio/gmenumodel.c
@@ -112,7 +112,7 @@ G_DEFINE_TYPE (GMenuLinkHashIter, g_menu_link_hash_iter, G_TYPE_MENU_LINK_ITER)
 
 static gboolean
 g_menu_link_hash_iter_get_next (GMenuLinkIter  *link_iter,
-                                const gchar   **name,
+                                const gchar   **out_name,
                                 GMenuModel    **value)
 {
   GMenuLinkHashIter *iter = (GMenuLinkHashIter *) link_iter;
@@ -122,10 +122,9 @@ g_menu_link_hash_iter_get_next (GMenuLinkIter  *link_iter,
     return FALSE;
 
   if (iter->is_quarks)
-    *name = g_quark_to_string (GPOINTER_TO_INT (keyptr));
+    *out_name = g_quark_to_string (GPOINTER_TO_INT (keyptr));
   else
-    *name = keyptr;
-
+    *out_name = keyptr;
   *value = g_object_ref (valueptr);
 
   return TRUE;
@@ -268,51 +267,6 @@ G_DEFINE_ABSTRACT_TYPE (GMenuModel, g_menu_model, G_TYPE_OBJECT)
 
 guint g_menu_model_items_changed_signal;
 
-#define MAKE_QUARK(str) \
-  GQuark                                                \
-  g_menu_model_get_ ## str ## _quark (void)             \
-  {                                                     \
-    static GQuark quark;                                \
-    if G_UNLIKELY (quark == 0)                          \
-      quark = g_quark_from_static_string (#str);        \
-    return quark;                                       \
-  }
-
-/**
- * G_MENU_ATTRIBUTE_ACTION:
- *
- * The "action" attribute.
- **/
-MAKE_QUARK(action)
-
-/**
- * G_MENU_ATTRIBUTE_TARGET:
- *
- * The "target" attribute.
- **/
-MAKE_QUARK(target)
-
-/**
- * G_MENU_ATTRIBUTE_LABEL:
- *
- * The "label" attribute.
- **/
-MAKE_QUARK(label)
-
-/**
- * G_MENU_LINK_SUBMENU:
- *
- * The "submenu" link.
- **/
-MAKE_QUARK(submenu)
-
-/**
- * G_MENU_LINK_SECTION:
- *
- * The "section" link.
- **/
-MAKE_QUARK(section)
-
 static GMenuAttributeIter *
 g_menu_model_real_iterate_item_attributes (GMenuModel *model,
                                            gint        item_index)
@@ -333,7 +287,6 @@ g_menu_model_real_iterate_item_attributes (GMenuModel *model,
       iter->is_quarks = TRUE;
       result = G_MENU_ATTRIBUTE_ITER (iter);
     }
-
   else if (string_table)
     {
       GMenuAttributeHashIter *iter = g_object_new (g_menu_attribute_hash_iter_get_type (), NULL);
@@ -342,7 +295,6 @@ g_menu_model_real_iterate_item_attributes (GMenuModel *model,
       iter->is_quarks = FALSE;
       result = G_MENU_ATTRIBUTE_ITER (iter);
     }
-
   else if (dictionary)
     {
       GMenuAttributeDictIter *iter = g_object_new (g_menu_attribute_dict_iter_get_type (), NULL);
@@ -350,7 +302,6 @@ g_menu_model_real_iterate_item_attributes (GMenuModel *model,
       iter->dict = g_variant_ref (dictionary);
       result = G_MENU_ATTRIBUTE_ITER (iter);
     }
-
   else
     {
       g_critical ("GMenuModel implementation '%s' doesn't override iterate_item_attributes() "
@@ -372,9 +323,10 @@ g_menu_model_real_iterate_item_attributes (GMenuModel *model,
 static GVariant *
 g_menu_model_real_get_item_attribute_value (GMenuModel         *model,
                                             gint                item_index,
-                                            GQuark              attribute,
+                                            const gchar        *attribute,
                                             const GVariantType *expected_type)
 {
+  GQuark attribute_q = g_quark_from_string (attribute);
   GHashTable *string_table = NULL;
   GHashTable *quark_table = NULL;
   GVariant *dictionary = NULL;
@@ -385,7 +337,7 @@ g_menu_model_real_get_item_attribute_value (GMenuModel         *model,
 
   if (quark_table != NULL)
     {
-      value = g_hash_table_lookup (quark_table, GINT_TO_POINTER (attribute));
+      value = g_hash_table_lookup (quark_table, GINT_TO_POINTER (attribute_q));
 
       if (value != NULL)
         {
@@ -395,10 +347,9 @@ g_menu_model_real_get_item_attribute_value (GMenuModel         *model,
             value = NULL;
         }
     }
-
   else if (string_table != NULL)
     {
-      value = g_hash_table_lookup (string_table, g_quark_to_string (attribute));
+      value = g_hash_table_lookup (string_table, attribute);
 
       if (value != NULL)
         {
@@ -408,9 +359,10 @@ g_menu_model_real_get_item_attribute_value (GMenuModel         *model,
             value = NULL;
         }
     }
-
   else if (dictionary != NULL)
-    value = g_variant_lookup_value (dictionary, g_quark_to_string (attribute), expected_type);
+    value = g_variant_lookup_value (dictionary, attribute, expected_type);
+  else
+    g_assert_not_reached ();
 
   if (string_table != NULL)
     g_hash_table_unref (string_table);
@@ -420,7 +372,6 @@ g_menu_model_real_get_item_attribute_value (GMenuModel         *model,
     g_variant_unref (dictionary);
 
   return value;
-  return NULL;
 }
 
 static GMenuLinkIter *
@@ -442,7 +393,6 @@ g_menu_model_real_iterate_item_links (GMenuModel *model,
       iter->is_quarks = TRUE;
       result = G_MENU_LINK_ITER (iter);
     }
-
   else if (string_table)
     {
       GMenuLinkHashIter *iter = g_object_new (g_menu_link_hash_iter_get_type (), NULL);
@@ -451,7 +401,6 @@ g_menu_model_real_iterate_item_links (GMenuModel *model,
       iter->is_quarks = FALSE;
       result = G_MENU_LINK_ITER (iter);
     }
-
   else
     {
       g_critical ("GMenuModel implementation '%s' doesn't override iterate_item_links() "
@@ -471,8 +420,9 @@ g_menu_model_real_iterate_item_links (GMenuModel *model,
 static GMenuModel *
 g_menu_model_real_get_item_link (GMenuModel *model,
                                  gint        item_index,
-                                 GQuark      link)
+                                 const gchar *link)
 {
+  GQuark link_q = g_quark_from_string (link);
   GHashTable *string_table = NULL;
   GHashTable *quark_table = NULL;
   GMenuModel *value = NULL;
@@ -481,10 +431,11 @@ g_menu_model_real_get_item_link (GMenuModel *model,
     ->get_item_links (model, item_index, &quark_table, &string_table);
 
   if (quark_table != NULL)
-    value = g_hash_table_lookup (quark_table, GINT_TO_POINTER (link));
-
+    value = g_hash_table_lookup (quark_table, GINT_TO_POINTER (link_q));
   else if (string_table != NULL)
-    value = g_hash_table_lookup (string_table, g_quark_to_string (link));
+    value = g_hash_table_lookup (string_table, link);
+  else
+    g_assert_not_reached ();
 
   if (string_table != NULL)
     g_hash_table_unref (string_table);
@@ -651,7 +602,7 @@ g_menu_model_iterate_item_attributes (GMenuModel *model,
 GVariant *
 g_menu_model_get_item_attribute_value (GMenuModel         *model,
                                        gint                item_index,
-                                       GQuark              attribute,
+                                       const gchar        *attribute,
                                        const GVariantType *expected_type)
 {
   return G_MENU_MODEL_GET_CLASS (model)
@@ -683,7 +634,7 @@ g_menu_model_get_item_attribute_value (GMenuModel         *model,
 gboolean
 g_menu_model_get_item_attribute (GMenuModel  *model,
                                  gint         item_index,
-                                 GQuark       attribute,
+                                 const gchar *attribute,
                                  const gchar *format_string,
                                  ...)
 {
@@ -742,7 +693,7 @@ g_menu_model_iterate_item_links (GMenuModel *model,
 GMenuModel *
 g_menu_model_get_item_link (GMenuModel *model,
                             gint        item_index,
-                            GQuark      link)
+                            const gchar *link)
 {
   return G_MENU_MODEL_GET_CLASS (model)
     ->get_item_link (model, item_index, link);
@@ -784,7 +735,7 @@ G_DEFINE_ABSTRACT_TYPE (GMenuAttributeIter, g_menu_attribute_iter, G_TYPE_OBJECT
 
 struct _GMenuAttributeIterPrivate
 {
-  const gchar *name;
+  GQuark name;
   GVariant *value;
   gboolean valid;
 };
@@ -792,7 +743,7 @@ struct _GMenuAttributeIterPrivate
 /**
  * g_menu_attribute_iter_get_next:
  * @iter: a #GMenuAttributeIter
- * @name: (out) (allow-none) (transfer none): the name of the attribute
+ * @out_name: (out) (allow-none) (transfer none): the type of the attribute
  * @value: (out) (allow-none) (transfer full): the attribute value
  *
  * This function combines g_menu_attribute_iter_next() with
@@ -816,9 +767,11 @@ struct _GMenuAttributeIterPrivate
  **/
 gboolean
 g_menu_attribute_iter_get_next (GMenuAttributeIter  *iter,
-                                const gchar        **name,
+				const gchar        **out_name,
                                 GVariant           **value)
 {
+  const gchar *name;
+
   if (iter->priv->value)
     {
       g_variant_unref (iter->priv->value);
@@ -826,12 +779,13 @@ g_menu_attribute_iter_get_next (GMenuAttributeIter  *iter,
     }
 
   iter->priv->valid = G_MENU_ATTRIBUTE_ITER_GET_CLASS (iter)
-    ->get_next (iter, &iter->priv->name, &iter->priv->value);
+    ->get_next (iter, &name, &iter->priv->value);
 
   if (iter->priv->valid)
     {
-      if (name)
-        *name = iter->priv->name;
+      iter->priv->name = g_quark_from_string (name);
+      if (out_name)
+        *out_name = g_quark_to_string (iter->priv->name);
 
       if (value)
         *value = g_variant_ref (iter->priv->value);
@@ -866,22 +820,19 @@ g_menu_attribute_iter_next (GMenuAttributeIter *iter)
  * g_menu_attribute_iter_get_name:
  * @iter: a #GMenuAttributeIter
  *
- * Gets the name of the attribute at the current iterator position,
- * as a string.
+ * Gets the name of the attribute at the current iterator position, as
+ * a string.
  *
  * The iterator is not advanced.
  *
- * The string is owned by the iterator and remains valid for as long
- * as the iterator is at the current position.
- *
- * Returns: (transfer none): the name of the attribute
+ * Returns: the name of the attribute
  **/
 const gchar *
 g_menu_attribute_iter_get_name (GMenuAttributeIter *iter)
 {
-  g_return_val_if_fail (iter->priv->valid, NULL);
+  g_return_val_if_fail (iter->priv->valid, 0);
 
-  return iter->priv->name;
+  return g_quark_to_string (iter->priv->name);
 }
 
 /**
@@ -934,7 +885,7 @@ G_DEFINE_ABSTRACT_TYPE (GMenuLinkIter, g_menu_link_iter, G_TYPE_OBJECT)
 
 struct _GMenuLinkIterPrivate
 {
-  const gchar *name;
+  GQuark name;
   GMenuModel *value;
   gboolean valid;
 };
@@ -942,7 +893,7 @@ struct _GMenuLinkIterPrivate
 /**
  * g_menu_link_iter_get_next:
  * @iter: a #GMenuLinkIter
- * @name: (out) (allow-none) (transfer none): the name of the link
+ * @out_name: (out) (allow-none) (transfer none): the name of the link
  * @value: (out) (allow-none) (transfer full): the linked #GMenuModel
  *
  * This function combines g_menu_link_iter_next() with
@@ -951,12 +902,12 @@ struct _GMenuLinkIterPrivate
  * First the iterator is advanced to the next (possibly first) link.  If
  * that fails, then %FALSE is returned and there are no other effects.
  *
- * If successful, @name and @value are set to the name and #GMenuModel
+ * If successful, @out_name and @value are set to the name and #GMenuModel
  * of the link that has just been advanced to.  At this point,
  * g_menu_item_get_name() and g_menu_item_get_value() will return the
  * same values again.
  *
- * The value returned in @name remains valid for as long as the iterator
+ * The value returned in @out_name remains valid for as long as the iterator
  * remains at the current position.  The value returned in @value must
  * be unreffed using g_object_unref() when it is no longer in use.
  *
@@ -964,9 +915,11 @@ struct _GMenuLinkIterPrivate
  **/
 gboolean
 g_menu_link_iter_get_next (GMenuLinkIter  *iter,
-                           const gchar   **name,
+                           const gchar   **out_name,
                            GMenuModel    **value)
 {
+  const gchar *name;
+
   if (iter->priv->value)
     {
       g_object_unref (iter->priv->value);
@@ -974,12 +927,15 @@ g_menu_link_iter_get_next (GMenuLinkIter  *iter,
     }
 
   iter->priv->valid = G_MENU_LINK_ITER_GET_CLASS (iter)
-    ->get_next (iter, &iter->priv->name, &iter->priv->value);
+    ->get_next (iter, &name, &iter->priv->value);
 
   if (iter->priv->valid)
     {
-      if (name)
-        *name = iter->priv->name;
+      g_assert (name != NULL);
+
+      iter->priv->name = g_quark_from_string (name);
+      if (out_name)
+        *out_name = g_quark_to_string (iter->priv->name);
 
       if (value)
         *value = g_object_ref (iter->priv->value);
@@ -1013,22 +969,18 @@ g_menu_link_iter_next (GMenuLinkIter *iter)
  * g_menu_link_iter_get_name:
  * @iter: a #GMenuLinkIter
  *
- * Gets the name of the link at the current iterator position, as a
- * string.
+ * Gets the name of the link at the current iterator position.
  *
  * The iterator is not advanced.
  *
- * The string is owned by the iterator and remains valid for as long as
- * the iterator is at the current position.
- *
- * Returns: (transfer none): the name of the link
+ * Returns: the type of the link
  **/
 const gchar *
 g_menu_link_iter_get_name (GMenuLinkIter *iter)
 {
-  g_return_val_if_fail (iter->priv->valid, NULL);
+  g_return_val_if_fail (iter->priv->valid, 0);
 
-  return iter->priv->name;
+  return g_quark_to_string (iter->priv->name);
 }
 
 /**
@@ -1115,7 +1067,7 @@ g_menu_model_item_iterate_attributes (GMenuModelItem *item)
  **/
 GVariant *
 g_menu_model_item_get_attribute_value (GMenuModelItem     *item,
-                                       GQuark              attribute,
+                                       const gchar        *attribute,
                                        const GVariantType *expected_type)
 {
   return g_menu_model_get_item_attribute_value (item->model, item->position, attribute, expected_type);
@@ -1143,7 +1095,7 @@ g_menu_model_item_get_attribute_value (GMenuModelItem     *item,
  **/
 gboolean
 g_menu_model_item_get_attribute (GMenuModelItem *item,
-                                 GQuark          attribute,
+                                 const gchar    *attribute,
                                  const gchar    *format_string,
                                  ...)
 {
@@ -1195,7 +1147,7 @@ g_menu_model_item_iterate_links (GMenuModelItem *item)
  **/
 GMenuModel *
 g_menu_model_item_get_link (GMenuModelItem *item,
-                            GQuark          link)
+                            const gchar    *link)
 {
   return g_menu_model_get_item_link (item->model, item->position, link);
 }
diff --git a/gio/gmenumodel.h b/gio/gmenumodel.h
index 154cc69..fe26b5b 100644
--- a/gio/gmenumodel.h
+++ b/gio/gmenumodel.h
@@ -25,21 +25,16 @@
 #include <glib-object.h>
 
 #include <gio/giotypes.h>
+#include <gio/gioenumtypes.h>
 
 G_BEGIN_DECLS
 
-#define G_MENU_ATTRIBUTE_ACTION                             (g_menu_model_get_action_quark ())
-#define G_MENU_ATTRIBUTE_TARGET                             (g_menu_model_get_target_quark ())
-#define G_MENU_ATTRIBUTE_LABEL                              (g_menu_model_get_label_quark ())
-#define G_MENU_LINK_SUBMENU                                 (g_menu_model_get_submenu_quark ())
-#define G_MENU_LINK_SECTION                                 (g_menu_model_get_section_quark ())
-
-GQuark                  g_menu_model_get_action_quark                   (void) G_GNUC_CONST;
-GQuark                  g_menu_model_get_target_quark                   (void) G_GNUC_CONST;
-GQuark                  g_menu_model_get_label_quark                    (void) G_GNUC_CONST;
-GQuark                  g_menu_model_get_submenu_quark                  (void) G_GNUC_CONST;
-GQuark                  g_menu_model_get_section_quark                  (void) G_GNUC_CONST;
+#define G_MENU_ATTRIBUTE_ACTION "action"
+#define G_MENU_ATTRIBUTE_TARGET "target"
+#define G_MENU_ATTRIBUTE_LABEL "label"
 
+#define G_MENU_LINK_SUBMENU "submenu"
+#define G_MENU_LINK_SECTION "section"
 
 #define G_TYPE_MENU_MODEL                                   (g_menu_model_get_type ())
 #define G_MENU_MODEL(inst)                                  (G_TYPE_CHECK_INSTANCE_CAST ((inst),                     \
@@ -88,18 +83,18 @@ struct _GMenuModelClass
                                                               gint                item_index);
   GVariant *            (*get_item_attribute_value)         (GMenuModel          *model,
                                                              gint                 item_index,
-                                                             GQuark               attribute,
+                                                             const gchar          *attribute,
                                                              const GVariantType  *expected_type);
 
   void                  (*get_item_links)                   (GMenuModel          *model,
                                                              gint                 item_index,
                                                              GHashTable         **quark_table,
-                                                             GHashTable         **string_table);
+                                                             GHashTable        **string_table);
   GMenuLinkIter *       (*iterate_item_links)               (GMenuModel          *model,
                                                              gint                 item_index);
   GMenuModel *          (*get_item_link)                    (GMenuModel          *model,
                                                              gint                 item_index,
-                                                             GQuark               link);
+                                                             const gchar          *link);
 };
 
 GType                   g_menu_model_get_type                           (void) G_GNUC_CONST;
@@ -114,18 +109,18 @@ GMenuAttributeIter *    g_menu_model_iterate_item_attributes            (GMenuMo
                                                                          gint                item_index);
 GVariant *              g_menu_model_get_item_attribute_value           (GMenuModel         *model,
                                                                          gint                item_index,
-                                                                         GQuark              attribute,
+                                                                         const gchar         *attribute,
                                                                          const GVariantType *expected_type);
 gboolean                g_menu_model_get_item_attribute                 (GMenuModel         *model,
                                                                          gint                item_index,
-                                                                         GQuark              attribute,
+                                                                         const gchar         *attribute,
                                                                          const gchar        *format_string,
                                                                          ...);
 GMenuLinkIter *         g_menu_model_iterate_item_links                 (GMenuModel         *model,
                                                                          gint                item_index);
 GMenuModel *            g_menu_model_get_item_link                      (GMenuModel         *model,
                                                                          gint                item_index,
-                                                                         GQuark              link);
+                                                                         const gchar         *link);
 
 void                    g_menu_model_items_changed                      (GMenuModel         *model,
                                                                          gint                position,
@@ -156,14 +151,14 @@ struct _GMenuAttributeIterClass
   GObjectClass parent_class;
 
   gboolean      (*get_next) (GMenuAttributeIter  *iter,
-                             const gchar        **name,
+                             const gchar         **out_type,
                              GVariant           **value);
 };
 
 GType                   g_menu_attribute_iter_get_type                  (void) G_GNUC_CONST;
 
 gboolean                g_menu_attribute_iter_get_next                  (GMenuAttributeIter  *iter,
-                                                                         const gchar        **name,
+                                                                         const gchar         **out_type,
                                                                          GVariant           **value);
 gboolean                g_menu_attribute_iter_next                      (GMenuAttributeIter  *iter);
 const gchar *           g_menu_attribute_iter_get_name                  (GMenuAttributeIter  *iter);
@@ -193,14 +188,14 @@ struct _GMenuLinkIterClass
   GObjectClass parent_class;
 
   gboolean      (*get_next) (GMenuLinkIter  *iter,
-                             const gchar   **name,
+			     const gchar   **out_name,
                              GMenuModel    **value);
 };
 
 GType                   g_menu_link_iter_get_type                       (void) G_GNUC_CONST;
 
 gboolean                g_menu_link_iter_get_next                       (GMenuLinkIter  *iter,
-                                                                         const gchar   **name,
+									 const gchar    **out_link,
                                                                          GMenuModel    **value);
 gboolean                g_menu_link_iter_next                           (GMenuLinkIter  *iter);
 const gchar *           g_menu_link_iter_get_name                       (GMenuLinkIter  *iter);
@@ -215,15 +210,15 @@ struct _GMenuModelItem
 
 GMenuAttributeIter *    g_menu_model_item_iterate_attributes            (GMenuModelItem     *item);
 GVariant *              g_menu_model_item_get_attribute_value           (GMenuModelItem     *item,
-                                                                         GQuark              attribute,
+                                                                         const gchar         *attribute,
                                                                          const GVariantType *expected_type);
 gboolean                g_menu_model_item_get_attribute                 (GMenuModelItem     *item,
-                                                                         GQuark              attribute,
+                                                                         const gchar         *attribute,
                                                                          const gchar        *format_string,
                                                                          ...);
 GMenuLinkIter *         g_menu_model_item_iterate_links                 (GMenuModelItem     *item);
 GMenuModel *            g_menu_model_item_get_link                      (GMenuModelItem     *item,
-                                                                         GQuark              link);
+                                                                         const gchar         *link);
 
 G_END_DECLS
 
diff --git a/gio/gmenuproxy.c b/gio/gmenuproxy.c
index 18d4285..029fa47 100644
--- a/gio/gmenuproxy.c
+++ b/gio/gmenuproxy.c
@@ -722,7 +722,7 @@ g_menu_proxy_get_n_items (GMenuModel *model)
 static void
 g_menu_proxy_get_item_attributes (GMenuModel  *model,
                                   gint         item_index,
-                                  GHashTable **quark_table,
+                                  GHashTable **attr_table,
                                   GHashTable **string_table,
                                   GVariant   **dictionary)
 {
@@ -745,7 +745,7 @@ g_menu_proxy_get_item_attributes (GMenuModel  *model,
 static void
 g_menu_proxy_get_item_links (GMenuModel  *model,
                              gint         item_index,
-                             GHashTable **quark_table,
+                             GHashTable **attr_table,
                              GHashTable **string_table)
 {
   GMenuProxy *proxy = G_MENU_PROXY (model);
diff --git a/gio/tests/gmenumodel.c b/gio/tests/gmenumodel.c
index 77bbaa2..3c63570 100644
--- a/gio/tests/gmenumodel.c
+++ b/gio/tests/gmenumodel.c
@@ -67,7 +67,7 @@ random_menu_get_n_items (GMenuModel *model)
 static void
 random_menu_get_item_attributes (GMenuModel  *model,
                                  gint         position,
-                                 GHashTable **quark_table,
+                                 GHashTable **quarks_table,
                                  GHashTable **string_table,
                                  GVariant   **dictionary)
 {
@@ -81,14 +81,14 @@ random_menu_get_item_attributes (GMenuModel  *model,
 static void
 random_menu_get_item_links (GMenuModel  *model,
                             gint         position,
-                            GHashTable **quark_table,
-                            GHashTable **string_table)
+                            GHashTable **quarks_table,
+			    GHashTable **string_table)
 {
   RandomMenu *menu = (RandomMenu *) model;
   TestItem *item;
 
   item = g_sequence_get (g_sequence_get_iter_at_pos (menu->items, position));
-  *quark_table = g_hash_table_ref (item->links);
+  *quarks_table = g_hash_table_ref (item->links);
 }
 
 static void
@@ -163,7 +163,7 @@ random_menu_change (RandomMenu *menu,
       if (menu->order > 0 && g_rand_boolean (rand))
         {
           RandomMenu *child;
-          GQuark subtype;
+	  const gchar *subtype;
 
           child = random_menu_new (rand, menu->order - 1);
 
@@ -183,7 +183,7 @@ random_menu_change (RandomMenu *menu,
               label = "Submenu";
             }
 
-          g_hash_table_insert (links, GINT_TO_POINTER (subtype), child);
+          g_hash_table_insert (links, GINT_TO_POINTER (g_quark_from_string (subtype)), child);
         }
       else
         /* label all terminals */
@@ -247,7 +247,7 @@ mirror_menu_get_n_items (GMenuModel *model)
 static void
 mirror_menu_get_item_attributes (GMenuModel  *model,
                                  gint         position,
-                                 GHashTable **quark_table,
+                                 GHashTable **quarks_table,
                                  GHashTable **string_table,
                                  GVariant   **dictionary)
 {
@@ -261,7 +261,7 @@ mirror_menu_get_item_attributes (GMenuModel  *model,
 static void
 mirror_menu_get_item_links (GMenuModel  *model,
                             gint         position,
-                            GHashTable **quark_table,
+                            GHashTable **quarks_table,
                             GHashTable **string_table)
 {
   MirrorMenu *menu = (MirrorMenu *) model;
@@ -407,7 +407,7 @@ check_menus_equal (GMenuModel *a,
       attr_iter = g_menu_model_iterate_item_attributes (a, i);
       while (g_menu_attribute_iter_get_next (attr_iter, &name, &a_value))
         {
-          b_value = g_menu_model_get_item_attribute_value (b, i, g_quark_from_string (name), NULL);
+          b_value = g_menu_model_get_item_attribute_value (b, i, name, NULL);
           equal &= b_value && g_variant_equal (a_value, b_value);
           if (b_value)
             g_variant_unref (b_value);
@@ -418,7 +418,7 @@ check_menus_equal (GMenuModel *a,
       attr_iter = g_menu_model_iterate_item_attributes (b, i);
       while (g_menu_attribute_iter_get_next (attr_iter, &name, &b_value))
         {
-          a_value = g_menu_model_get_item_attribute_value (a, i, g_quark_from_string (name), NULL);
+          a_value = g_menu_model_get_item_attribute_value (a, i, name, NULL);
           equal &= a_value && g_variant_equal (a_value, b_value);
           if (a_value)
             g_variant_unref (a_value);
@@ -429,7 +429,7 @@ check_menus_equal (GMenuModel *a,
       link_iter = g_menu_model_iterate_item_links (a, i);
       while (g_menu_link_iter_get_next (link_iter, &name, &a_menu))
         {
-          b_menu = g_menu_model_get_item_link (b, i, g_quark_from_string (name));
+          b_menu = g_menu_model_get_item_link (b, i, name);
           equal &= b_menu && check_menus_equal (a_menu, b_menu);
           if (b_menu)
             g_object_unref (b_menu);
@@ -440,7 +440,7 @@ check_menus_equal (GMenuModel *a,
       link_iter = g_menu_model_iterate_item_links (b, i);
       while (g_menu_link_iter_get_next (link_iter, &name, &b_menu))
         {
-          a_menu = g_menu_model_get_item_link (a, i, g_quark_from_string (name));
+          a_menu = g_menu_model_get_item_link (a, i, name);
           equal &= a_menu && check_menus_equal (a_menu, b_menu);
           if (a_menu)
             g_object_unref (a_menu);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]