Bonjour à toutes et à tous.

Je viens vers vous pour un petit souci d'utilisation de GOptionContext*.

Je désire parser la ligne de commande dont certaines options attentent plusieurs arguments. J'ai donc déclaré entre autres options ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
...
static gchar **context_viewport = NULL;
...
Puis, dans le GOption Entry :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
static GOptionEntry entries[] =
    {
      ...
      {"viewport", 0, 0, G_OPTION_ARG_CALLBACK, (GOptionArgFunc*)callback_viewport, "Set the viewport for the current graph", "xmin ymin xmax ymax"},
       {NULL}
    };
J'ai initialisé tout ce petit monde comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifdef G_OS_WIN32
  args = g_win32_get_command_line ();
#else
  args = g_strdupv (argv);
#endif
 
  context = g_option_context_new ("");
  g_option_context_add_main_entries (context, entries, NULL); 
  g_option_context_add_group (context, gtk_get_option_group (TRUE));
  if (!g_option_context_parse_strv (context, &args, &error))
    {
      g_printerr ("option parsing failed: %s\n", error->message);
      g_error_free (error);
      g_strfreev (args);
      exit (1);
    }
  g_strfreev (args);
Pour finir voici le callback associé à "--viewport" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static gboolean
callback_viewport (const gchar *option_name, const gchar *value, gpointer data, GError **error)
{
  if (*error)
    {
      g_printerr ("callback viewport error : %s\n", (*error)->message);
      g_error_free (*error);
 
      return FALSE;
    }
 
  g_printerr ("callback viewport : %s, %s\n", option_name, value);
 
  return TRUE;
}
Tout fonctionne correctement sauf que je désire, comme vous pouvez le voir dans la description des arguments à transmettre à "--viewport" quatre arguments. Si j'écris ceci en ligne de commande je n'obtiens que le premier argument.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
./test --viewport 12 34 56 78
 
callback viewport : --viewport, 12
Comment faire pour récupérer tout ce petit monde ?

En vous remerciant par avance,

Gérald