diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt index ddede2451..57e053348 100644 --- a/docs/reference/glib/glib-sections.txt +++ b/docs/reference/glib/glib-sections.txt @@ -2538,6 +2538,7 @@ g_node_destroy Quarks quarks GQuark +G_DEFINE_QUARK g_quark_from_string g_quark_from_static_string g_quark_to_string diff --git a/glib/gquark.c b/glib/gquark.c index 2afbf8aff..782388a8e 100644 --- a/glib/gquark.c +++ b/glib/gquark.c @@ -92,6 +92,18 @@ static gint quark_block_offset = 0; * particular string. A GQuark value of zero is associated to %NULL. **/ +/** + * G_DEFINE_QUARK: + * @QN: the string to return a #GQuark for + * @q_n: prefix for the function name + * + * A convenience macro which defines a function returning the + * #GQuark for the string @QN. The function will be named + * @q_n_quark(). + * + * Since: 2.34 + */ + /** * g_quark_try_string: * @string: (allow-none): a string. diff --git a/glib/gquark.h b/glib/gquark.h index 78b9546be..76894476c 100644 --- a/glib/gquark.h +++ b/glib/gquark.h @@ -44,6 +44,19 @@ GQuark g_quark_from_static_string (const gchar *string); GQuark g_quark_from_string (const gchar *string); const gchar * g_quark_to_string (GQuark quark) G_GNUC_CONST; +#define G_DEFINE_QUARK(QN, q_n) \ +GQuark \ +q_n##_quark (void) \ +{ \ + static volatile gsize g_define_quark__volatile = 0; \ + if (g_once_init_enter (&g_define_quark__volatile)) \ + { \ + GQuark g_define_quark = g_quark_from_string (#QN); \ + g_once_init_leave (&g_define_quark__volatile, g_define_quark); \ + } \ + return g_define_quark__volatile; \ +} + const gchar * g_intern_string (const gchar *string); const gchar * g_intern_static_string (const gchar *string);