Avoid an interaction between GApplication and GOption

When using GOption to handle commandlines, we need to disable
the builtin help handling, since it calls exit(). Also mention
this particular pitfall in the docs.
This commit is contained in:
Matthias Clasen 2011-04-08 07:13:54 -04:00
parent 3498d58289
commit edaf99be86
2 changed files with 15 additions and 1 deletions

View File

@ -106,7 +106,10 @@ G_DEFINE_TYPE (GApplicationCommandLine, g_application_command_line, G_TYPE_OBJEC
* </para>
* <para>
* This example also shows how to use #GOptionContext for parsing the
* commandline arguments.
* commandline arguments. Note that it is necessary to disable the
* built-in help-handling of #GOptionContext, since it calls exit()
* after printing help, which is not what you want to happen in
* the primary instance.
* </para>
* <programlisting>
* <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gapplication-example-cmdline3.c">

View File

@ -11,10 +11,12 @@ my_cmdline_handler (gpointer data)
gint argc;
gint arg1;
gboolean arg2;
gboolean help;
GOptionContext *context;
GOptionEntry entries[] = {
{ "arg1", 0, 0, G_OPTION_ARG_INT, &arg1, NULL, NULL },
{ "arg2", 0, 0, G_OPTION_ARG_NONE, &arg2, NULL, NULL },
{ "help", '?', 0, G_OPTION_ARG_NONE, &help, NULL, NULL },
{ NULL }
};
GError *error;
@ -30,10 +32,12 @@ my_cmdline_handler (gpointer data)
argv[i] = args[i];
context = g_option_context_new (NULL);
g_option_context_set_help_enabled (context, FALSE);
g_option_context_add_main_entries (context, entries, NULL);
arg1 = 0;
arg2 = FALSE;
help = FALSE;
error = NULL;
if (!g_option_context_parse (context, &argc, &argv, &error))
{
@ -41,6 +45,13 @@ my_cmdline_handler (gpointer data)
g_error_free (error);
g_application_command_line_set_exit_status (cmdline, 1);
}
else if (help)
{
gchar *text;
text = g_option_context_get_help (context, FALSE, NULL);
g_application_command_line_print (cmdline, "%s", text);
g_free (text);
}
else
{
g_application_command_line_print (cmdline, "arg1 is %d and arg2 is %s\n",