mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-03 17:56:17 +01:00
goption: Add boxed type for GOptionGroup
This would allow bindings to use _get_option_group() functions, which would then allow them to use GOption parsing. This also adds introspection annotations to g_option_context_add_group(), g_option_context_set_main_group() and g_option_context_get_main_group(). https://bugzilla.gnome.org/show_bug.cgi?id=743349
This commit is contained in:
parent
93f2998765
commit
43df97ab86
@ -267,6 +267,8 @@ struct _GOptionGroup
|
|||||||
gchar *description;
|
gchar *description;
|
||||||
gchar *help_description;
|
gchar *help_description;
|
||||||
|
|
||||||
|
gint ref_count;
|
||||||
|
|
||||||
GDestroyNotify destroy_notify;
|
GDestroyNotify destroy_notify;
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
|
|
||||||
@ -382,10 +384,10 @@ void g_option_context_free (GOptionContext *context)
|
|||||||
{
|
{
|
||||||
g_return_if_fail (context != NULL);
|
g_return_if_fail (context != NULL);
|
||||||
|
|
||||||
g_list_free_full (context->groups, (GDestroyNotify) g_option_group_free);
|
g_list_free_full (context->groups, (GDestroyNotify) g_option_group_unref);
|
||||||
|
|
||||||
if (context->main_group)
|
if (context->main_group)
|
||||||
g_option_group_free (context->main_group);
|
g_option_group_unref (context->main_group);
|
||||||
|
|
||||||
free_changes_list (context, FALSE);
|
free_changes_list (context, FALSE);
|
||||||
free_pending_nulls (context, FALSE);
|
free_pending_nulls (context, FALSE);
|
||||||
@ -549,13 +551,11 @@ g_option_context_get_strict_posix (GOptionContext *context)
|
|||||||
/**
|
/**
|
||||||
* g_option_context_add_group:
|
* g_option_context_add_group:
|
||||||
* @context: a #GOptionContext
|
* @context: a #GOptionContext
|
||||||
* @group: the group to add
|
* @group: (transfer full): the group to add
|
||||||
*
|
*
|
||||||
* Adds a #GOptionGroup to the @context, so that parsing with @context
|
* Adds a #GOptionGroup to the @context, so that parsing with @context
|
||||||
* will recognize the options in the group. Note that the group will
|
* will recognize the options in the group. Note that this will take
|
||||||
* be freed together with the context when g_option_context_free() is
|
* ownership of the @group and thus the @group should not be freed.
|
||||||
* called, so you must not free the group yourself after adding it
|
|
||||||
* to a context.
|
|
||||||
*
|
*
|
||||||
* Since: 2.6
|
* Since: 2.6
|
||||||
**/
|
**/
|
||||||
@ -587,7 +587,7 @@ g_option_context_add_group (GOptionContext *context,
|
|||||||
/**
|
/**
|
||||||
* g_option_context_set_main_group:
|
* g_option_context_set_main_group:
|
||||||
* @context: a #GOptionContext
|
* @context: a #GOptionContext
|
||||||
* @group: the group to set as main group
|
* @group: (transfer full): the group to set as main group
|
||||||
*
|
*
|
||||||
* Sets a #GOptionGroup as main group of the @context.
|
* Sets a #GOptionGroup as main group of the @context.
|
||||||
* This has the same effect as calling g_option_context_add_group(),
|
* This has the same effect as calling g_option_context_add_group(),
|
||||||
@ -619,9 +619,9 @@ g_option_context_set_main_group (GOptionContext *context,
|
|||||||
*
|
*
|
||||||
* Returns a pointer to the main group of @context.
|
* Returns a pointer to the main group of @context.
|
||||||
*
|
*
|
||||||
* Returns: the main group of @context, or %NULL if @context doesn't
|
* Returns: (transfer none): the main group of @context, or %NULL if
|
||||||
* have a main group. Note that group belongs to @context and should
|
* @context doesn't have a main group. Note that group belongs to
|
||||||
* not be modified or freed.
|
* @context and should not be modified or freed.
|
||||||
*
|
*
|
||||||
* Since: 2.6
|
* Since: 2.6
|
||||||
**/
|
**/
|
||||||
@ -2232,7 +2232,7 @@ g_option_context_parse (GOptionContext *context,
|
|||||||
* Creates a new #GOptionGroup.
|
* Creates a new #GOptionGroup.
|
||||||
*
|
*
|
||||||
* Returns: a newly created option group. It should be added
|
* Returns: a newly created option group. It should be added
|
||||||
* to a #GOptionContext or freed with g_option_group_free().
|
* to a #GOptionContext or freed with g_option_group_unref().
|
||||||
*
|
*
|
||||||
* Since: 2.6
|
* Since: 2.6
|
||||||
**/
|
**/
|
||||||
@ -2247,6 +2247,7 @@ g_option_group_new (const gchar *name,
|
|||||||
GOptionGroup *group;
|
GOptionGroup *group;
|
||||||
|
|
||||||
group = g_new0 (GOptionGroup, 1);
|
group = g_new0 (GOptionGroup, 1);
|
||||||
|
group->ref_count = 1;
|
||||||
group->name = g_strdup (name);
|
group->name = g_strdup (name);
|
||||||
group->description = g_strdup (description);
|
group->description = g_strdup (description);
|
||||||
group->help_description = g_strdup (help_description);
|
group->help_description = g_strdup (help_description);
|
||||||
@ -2265,27 +2266,67 @@ g_option_group_new (const gchar *name,
|
|||||||
* which have been added to a #GOptionContext.
|
* which have been added to a #GOptionContext.
|
||||||
*
|
*
|
||||||
* Since: 2.6
|
* Since: 2.6
|
||||||
|
*
|
||||||
|
* Deprecated: 2.44: Use g_option_group_unref() instead.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
g_option_group_free (GOptionGroup *group)
|
g_option_group_free (GOptionGroup *group)
|
||||||
{
|
{
|
||||||
g_return_if_fail (group != NULL);
|
g_option_group_unref (group);
|
||||||
|
|
||||||
g_free (group->name);
|
|
||||||
g_free (group->description);
|
|
||||||
g_free (group->help_description);
|
|
||||||
|
|
||||||
g_free (group->entries);
|
|
||||||
|
|
||||||
if (group->destroy_notify)
|
|
||||||
(* group->destroy_notify) (group->user_data);
|
|
||||||
|
|
||||||
if (group->translate_notify)
|
|
||||||
(* group->translate_notify) (group->translate_data);
|
|
||||||
|
|
||||||
g_free (group);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_option_group_ref:
|
||||||
|
* @group: a #GOptionGroup
|
||||||
|
*
|
||||||
|
* Increments the reference count of @group by one.
|
||||||
|
*
|
||||||
|
* Returns: a #GoptionGroup
|
||||||
|
*
|
||||||
|
* Since: 2.44
|
||||||
|
*/
|
||||||
|
GOptionGroup *
|
||||||
|
g_option_group_ref (GOptionGroup *group)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (group != NULL, NULL);
|
||||||
|
|
||||||
|
group->ref_count++;
|
||||||
|
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_option_group_unref:
|
||||||
|
* @group: a #GOptionGroup
|
||||||
|
*
|
||||||
|
* Decrements the reference count of @group by one.
|
||||||
|
* If the reference count drops to 0, the @group will be freed.
|
||||||
|
* and all memory allocated by the @group is released.
|
||||||
|
*
|
||||||
|
* Since: 2.44
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
g_option_group_unref (GOptionGroup *group)
|
||||||
|
{
|
||||||
|
g_return_if_fail (group != NULL);
|
||||||
|
|
||||||
|
if (--group->ref_count == 0)
|
||||||
|
{
|
||||||
|
g_free (group->name);
|
||||||
|
g_free (group->description);
|
||||||
|
g_free (group->help_description);
|
||||||
|
|
||||||
|
g_free (group->entries);
|
||||||
|
|
||||||
|
if (group->destroy_notify)
|
||||||
|
(* group->destroy_notify) (group->user_data);
|
||||||
|
|
||||||
|
if (group->translate_notify)
|
||||||
|
(* group->translate_notify) (group->translate_data);
|
||||||
|
|
||||||
|
g_free (group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_option_group_add_entries:
|
* g_option_group_add_entries:
|
||||||
|
@ -364,8 +364,12 @@ void g_option_group_set_parse_hooks (GOptionGroup *group,
|
|||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
void g_option_group_set_error_hook (GOptionGroup *group,
|
void g_option_group_set_error_hook (GOptionGroup *group,
|
||||||
GOptionErrorFunc error_func);
|
GOptionErrorFunc error_func);
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_DEPRECATED_IN_2_44
|
||||||
void g_option_group_free (GOptionGroup *group);
|
void g_option_group_free (GOptionGroup *group);
|
||||||
|
GLIB_AVAILABLE_IN_2_44
|
||||||
|
GOptionGroup *g_option_group_ref (GOptionGroup *group);
|
||||||
|
GLIB_AVAILABLE_IN_2_44
|
||||||
|
void g_option_group_unref (GOptionGroup *group);
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
void g_option_group_add_entries (GOptionGroup *group,
|
void g_option_group_add_entries (GOptionGroup *group,
|
||||||
const GOptionEntry *entries);
|
const GOptionEntry *entries);
|
||||||
|
@ -165,6 +165,8 @@ G_DEFINE_BOXED_TYPE (GMarkupParseContext, g_markup_parse_context, g_markup_parse
|
|||||||
G_DEFINE_BOXED_TYPE (GThread, g_thread, g_thread_ref, g_thread_unref)
|
G_DEFINE_BOXED_TYPE (GThread, g_thread, g_thread_ref, g_thread_unref)
|
||||||
G_DEFINE_BOXED_TYPE (GChecksum, g_checksum, g_checksum_copy, g_checksum_free)
|
G_DEFINE_BOXED_TYPE (GChecksum, g_checksum, g_checksum_copy, g_checksum_free)
|
||||||
|
|
||||||
|
G_DEFINE_BOXED_TYPE (GOptionGroup, g_option_group, g_option_group_ref, g_option_group_unref)
|
||||||
|
|
||||||
/* This one can't use G_DEFINE_BOXED_TYPE (GStrv, g_strv, g_strdupv, g_strfreev) */
|
/* This one can't use G_DEFINE_BOXED_TYPE (GStrv, g_strv, g_strdupv, g_strfreev) */
|
||||||
GType
|
GType
|
||||||
g_strv_get_type (void)
|
g_strv_get_type (void)
|
||||||
|
@ -288,6 +288,15 @@ typedef gsize GType;
|
|||||||
*/
|
*/
|
||||||
#define G_TYPE_CHECKSUM (g_checksum_get_type ())
|
#define G_TYPE_CHECKSUM (g_checksum_get_type ())
|
||||||
|
|
||||||
|
/**
|
||||||
|
* G_TYPE_OPTION_GROUP:
|
||||||
|
*
|
||||||
|
* The #GType for a boxed type holding a #GOptionGroup.
|
||||||
|
*
|
||||||
|
* Since: 2.44
|
||||||
|
*/
|
||||||
|
#define G_TYPE_OPTION_GROUP (g_option_group_get_type ())
|
||||||
|
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
GType g_date_get_type (void) G_GNUC_CONST;
|
GType g_date_get_type (void) G_GNUC_CONST;
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
@ -342,6 +351,8 @@ GLIB_AVAILABLE_IN_2_36
|
|||||||
GType g_markup_parse_context_get_type (void) G_GNUC_CONST;
|
GType g_markup_parse_context_get_type (void) G_GNUC_CONST;
|
||||||
GLIB_AVAILABLE_IN_2_40
|
GLIB_AVAILABLE_IN_2_40
|
||||||
GType g_mapped_file_get_type (void) G_GNUC_CONST;
|
GType g_mapped_file_get_type (void) G_GNUC_CONST;
|
||||||
|
GLIB_AVAILABLE_IN_2_44
|
||||||
|
GType g_option_group_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
GLIB_DEPRECATED_FOR('G_TYPE_VARIANT')
|
GLIB_DEPRECATED_FOR('G_TYPE_VARIANT')
|
||||||
GType g_variant_get_gtype (void) G_GNUC_CONST;
|
GType g_variant_get_gtype (void) G_GNUC_CONST;
|
||||||
|
Loading…
Reference in New Issue
Block a user