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 faa896642d
commit 2aad89ab9b
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",