From 5bcbdb44dd1cd4f0ed0a69a92a27634616e8df3e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 12 Jun 2013 13:28:11 +0200 Subject: [PATCH 24/35] cheese: Use cheese_gtk_init_with_args Currently our --help output only shows gstreamer related info: [hans@shalem cheese]$ cheese --help Usage: cheese [OPTION...] - GStreamer initialization Help Options: -h, --help Show help options --help-all Show all help options --help-gst Show GStreamer Options This is caused by this gstreamer bug: https://bugzilla.gnome.org/show_bug.cgi?id=702089 Besides suffering from this bug, our commandline parsing code also is not exactly pretty, and not a good example of how to do commandline parsing for other libcheese using applications. Also adding all the various option_groups manually is rather error prone ie currently the cogl group is missing. This patch fixes all this (including working around the --help issue) by using cheese_gtk_init_with_args, resulting in much simpler code. Signed-off-by: Hans de Goede --- src/cheese-main.vala | 124 +++++++++++++-------------------------------------- 1 file changed, 30 insertions(+), 94 deletions(-) diff --git a/src/cheese-main.vala b/src/cheese-main.vala index ac5ba6f..5905597 100644 --- a/src/cheese-main.vala +++ b/src/cheese-main.vala @@ -24,12 +24,21 @@ using Gtk; using Clutter; using Gst; +static bool wide; +static string device; +static bool version; +static bool fullscreen; + +const OptionEntry[] options = { + {"wide", 'w', 0, OptionArg.NONE, ref wide, N_("Start in wide mode"), null }, + {"device", 'd', 0, OptionArg.FILENAME, ref device, N_("Device to use as a camera"), N_("DEVICE")}, + {"version", 'v', 0, OptionArg.NONE, ref version, N_("Output version information and exit"), null }, + {"fullscreen", 'f', 0, OptionArg.NONE, ref fullscreen, N_("Start in fullscreen mode"), null }, + {null} +}; + public class Cheese.Main : Gtk.Application { - static bool wide; - static string device; - static bool version; - static bool fullscreen; static MainWindow main_window; @@ -47,14 +56,6 @@ public class Cheese.Main : Gtk.Application { "quit", on_quit } }; - const OptionEntry[] options = { - {"wide", 'w', 0, OptionArg.NONE, ref wide, N_("Start in wide mode"), null }, - {"device", 'd', 0, OptionArg.FILENAME, ref device, N_("Device to use as a camera"), N_("DEVICE")}, - {"version", 'v', 0, OptionArg.NONE, ref version, N_("Output version information and exit"), null }, - {"fullscreen", 'f', 0, OptionArg.NONE, ref fullscreen, N_("Start in fullscreen mode"), null }, - {null} - }; - public Main (string app_id, ApplicationFlags flags) { GLib.Object (application_id: app_id, flags: flags); @@ -140,87 +141,6 @@ public class Cheese.Main : Gtk.Application } } - /** - * Overridden method of GApplication, to handle the arguments locally. - * - * @param arguments the command-line arguments - * @param exit_status the exit status to return to the OS - * @return true if the arguments were successfully processed, false otherwise - */ - public override bool local_command_line ([CCode (array_null_terminated = true, array_length = false)] - ref unowned string[] arguments, - out int exit_status) - { - // Try to register. - try - { - register(); - } - catch (Error e) - { - stdout.printf ("Error: %s\n", e.message); - exit_status = 1; - return true; - } - - // Workaround until bug 642885 is solved. - unowned string[] local_args = arguments; - - // Check command line parameters. - int n_args = local_args.length; - if (n_args <= 1) - { - Gst.init (ref local_args); - activate (); - exit_status = 0; - } - else - { - // Set parser. - try - { - var context = new OptionContext (_("- Take photos and videos from your webcam")); - context.set_translation_domain (Config.GETTEXT_PACKAGE); - context.set_help_enabled (true); - context.add_main_entries (options, null); - context.add_group (Gtk.get_option_group (true)); - context.add_group (Clutter.get_option_group ()); - context.add_group (Gst.init_get_option_group ()); - context.parse (ref local_args); - } - catch (OptionError e) - { - stdout.printf ("%s\n", e.message); - stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), arguments[0]); - exit_status = 1; - return true; - } - - if (version) - { - stdout.printf ("%s %s\n", Config.PACKAGE_NAME, Config.PACKAGE_VERSION); - exit_status = 1; - return true; - } - - //Remote instance process commands locally. - if (get_is_remote ()) - { - stdout.printf (_("Another instance of Cheese is currently running\n")); - exit_status = 1; - return true; - } - //Primary instance. - else - { - Gst.init (ref local_args); - activate (); - exit_status=0; - } - } - return true; - } - /** * Setup the camera listed in GSettings. * @@ -543,8 +463,24 @@ public class Cheese.Main : Gtk.Application Intl.bind_textdomain_codeset (Config.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain (Config.GETTEXT_PACKAGE); - if (!Cheese.gtk_init (ref args)) + try + { + Cheese.gtk_init_with_args (ref args, + _("- Take photos and videos from your webcam"), + options, Config.GETTEXT_PACKAGE); + } + catch (OptionError e) + { + stdout.printf ("%s\n", e.message); + stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); return Posix.EXIT_FAILURE; + } + + if (version) + { + stdout.printf ("%s %s\n", Config.PACKAGE_NAME, Config.PACKAGE_VERSION); + return Posix.EXIT_SUCCESS; + } Cheese.Main app; app = new Cheese.Main ("org.gnome.Cheese", ApplicationFlags.FLAGS_NONE); -- 1.8.2.1