[gthumb] moved GthApplication to its own file
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] moved GthApplication to its own file
- Date: Wed, 17 Aug 2016 19:19:32 +0000 (UTC)
commit fed9a15e2c09187827dced89e9fe85182311cfcc
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Aug 17 21:05:50 2016 +0200
moved GthApplication to its own file
gthumb/Makefile.am | 2 +
gthumb/gth-application.c | 460 +++++++++++++++++++++++++++++++++++++++++++++
gthumb/gth-application.h | 33 ++++
gthumb/main.c | 464 ++--------------------------------------------
4 files changed, 507 insertions(+), 452 deletions(-)
---
diff --git a/gthumb/Makefile.am b/gthumb/Makefile.am
index 6c2499b..445aaa3 100644
--- a/gthumb/Makefile.am
+++ b/gthumb/Makefile.am
@@ -132,6 +132,7 @@ PRIVATE_HEADER_FILES = \
dlg-preferences-browser.h \
dlg-preferences-extensions.h \
dlg-preferences-general.h \
+ gth-application.h \
gth-browser-actions-callbacks.h \
gth-browser-actions-entries.h \
gth-file-details.h \
@@ -171,6 +172,7 @@ gthumb_SOURCES = \
gio-utils.c \
glib-utils.c \
gsignature.c \
+ gth-application.c \
gth-auto-paned.c \
gth-async-task.c \
gth-browser.c \
diff --git a/gthumb/gth-application.c b/gthumb/gth-application.c
new file mode 100644
index 0000000..6eb18fd
--- /dev/null
+++ b/gthumb/gth-application.c
@@ -0,0 +1,460 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * GThumb
+ *
+ * Copyright (C) 2001-2010 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <glib/gi18n.h>
+#include <glib/gprintf.h>
+#include <gio/gdesktopappinfo.h>
+#ifdef HAVE_GSTREAMER
+# include <gst/gst.h>
+#endif
+#ifdef HAVE_CLUTTER
+# include <clutter/clutter.h>
+# include <clutter-gtk/clutter-gtk.h>
+#endif
+#include "glib-utils.h"
+#include "gth-application.h"
+#include "gth-browser.h"
+#include "gth-browser-actions-callbacks.h"
+#include "gth-file-data.h"
+#include "gth-file-source-vfs.h"
+#include "gth-main.h"
+#include "gth-preferences.h"
+#include "gtk-utils.h"
+#include "main.h"
+#include "main-migrate.h"
+
+
+static char ** remaining_args = NULL;
+static gboolean version = FALSE;
+
+
+static const GOptionEntry options[] = {
+ { "new-window", 'n', 0, G_OPTION_ARG_NONE, &NewWindow,
+ N_("Open a new window"),
+ 0 },
+
+ { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, &StartInFullscreen,
+ N_("Start in fullscreen mode"),
+ 0 },
+
+ { "slideshow", 's', 0, G_OPTION_ARG_NONE, &StartSlideshow,
+ N_("Automatically start a slideshow"),
+ 0 },
+
+ { "import-photos", 'i', 0, G_OPTION_ARG_NONE, &ImportPhotos,
+ N_("Automatically import digital camera photos"),
+ 0 },
+
+ { "version", 'v', 0, G_OPTION_ARG_NONE, &version,
+ N_("Show version"), NULL },
+
+ { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &remaining_args,
+ NULL,
+ NULL },
+
+ { NULL }
+};
+
+
+typedef GtkApplication GthApplication;
+typedef GtkApplicationClass GthApplicationClass;
+
+GType gth_application_get_type (void);
+
+
+G_DEFINE_TYPE (GthApplication, gth_application, GTK_TYPE_APPLICATION);
+
+
+static void
+gth_application_finalize (GObject *object)
+{
+ gth_main_release ();
+ gth_pref_release ();
+
+ G_OBJECT_CLASS (gth_application_parent_class)->finalize (object);
+}
+
+
+static void
+gth_application_init (GthApplication *app)
+{
+#ifdef GDK_WINDOWING_X11
+
+ GDesktopAppInfo *app_info;
+
+ app_info = g_desktop_app_info_new ("gthumb.desktop");
+ if (app_info == NULL)
+ return;
+
+ if (g_desktop_app_info_has_key (app_info, "Name")) {
+ char *app_name;
+
+ app_name = g_desktop_app_info_get_string (app_info, "Name");
+ g_set_application_name (app_name);
+
+ g_free (app_name);
+ }
+
+ if (g_desktop_app_info_has_key (app_info, "Icon")) {
+ char *icon;
+
+ icon = g_desktop_app_info_get_string (app_info, "Icon");
+ if (g_path_is_absolute (icon))
+ gtk_window_set_default_icon_from_file (icon, NULL);
+ else
+ gtk_window_set_default_icon_name (icon);
+
+ g_free (icon);
+ }
+
+ g_object_unref (app_info);
+
+#else
+
+ /* manually set name and icon */
+
+ g_set_application_name (_("gThumb"));
+ gtk_window_set_default_icon_name ("gthumb");
+
+#endif
+}
+
+
+static const GActionEntry app_menu_entries[] = {
+ { "new-window", gth_application_activate_new_window },
+ { "preferences", gth_application_activate_preferences },
+ { "shortcuts", gth_application_activate_show_shortcuts },
+ { "help", gth_application_activate_show_help },
+ { "about", gth_application_activate_about },
+ { "quit", gth_application_activate_quit }
+};
+
+
+static void
+_gth_application_initialize_app_menu (GApplication *application)
+{
+ GtkBuilder *builder;
+
+ g_action_map_add_action_entries (G_ACTION_MAP (application),
+ app_menu_entries,
+ G_N_ELEMENTS (app_menu_entries),
+ application);
+
+ builder = _gtk_builder_new_from_resource ("app-menu.ui");
+ gtk_application_set_app_menu (GTK_APPLICATION (application),
+ G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
+
+ g_object_unref (builder);
+}
+
+
+static void
+migrate_data (void)
+{
+ migrate_catalogs_from_2_10 ();
+}
+
+
+static void
+gth_application_startup (GApplication *application)
+{
+ G_APPLICATION_CLASS (gth_application_parent_class)->startup (application);
+
+ g_object_set (gtk_settings_get_default (), "gtk-application-prefer-dark-theme", TRUE, NULL);
+
+ _gth_application_initialize_app_menu (application);
+ gth_pref_initialize ();
+ migrate_data ();
+ gth_main_initialize ();
+ gth_main_register_default_hooks ();
+ gth_main_register_file_source (GTH_TYPE_FILE_SOURCE_VFS);
+ gth_main_register_default_sort_types ();
+ gth_main_register_default_tests ();
+ gth_main_register_default_types ();
+ gth_main_register_default_metadata ();
+ gth_main_activate_extensions ();
+ gth_hook_invoke ("initialize", NULL);
+}
+
+
+static GOptionContext *
+gth_application_create_option_context (void)
+{
+ GOptionContext *context;
+ static gsize initialized = FALSE;
+
+ context = g_option_context_new (N_("- Image browser and viewer"));
+ g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
+ g_option_context_set_ignore_unknown_options (context, TRUE);
+ g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
+
+ if (g_once_init_enter (&initialized)) {
+ g_option_context_add_group (context, gtk_get_option_group (TRUE));
+#ifdef HAVE_CLUTTER
+ g_option_context_add_group (context, clutter_get_option_group_without_init ());
+ g_option_context_add_group (context, gtk_clutter_get_option_group ());
+#endif
+#ifdef HAVE_GSTREAMER
+ g_option_context_add_group (context, gst_init_get_option_group ());
+#endif
+ g_once_init_leave (&initialized, TRUE);
+ }
+
+ return context;
+}
+
+
+static void
+open_browser_window (GFile *location,
+ GFile *file_to_select,
+ gboolean force_new_window)
+{
+ gboolean reuse_active_window;
+ GtkWidget *window;
+
+ if (! force_new_window) {
+ GSettings *settings;
+
+ settings = g_settings_new (GTHUMB_BROWSER_SCHEMA);
+ reuse_active_window = g_settings_get_boolean (settings, PREF_BROWSER_REUSE_ACTIVE_WINDOW);
+ g_object_unref (settings);
+ }
+ else
+ reuse_active_window = FALSE;
+
+ window = NULL;
+
+ if (reuse_active_window) {
+ GList *windows = gtk_application_get_windows (Main_Application);
+ if (windows != NULL)
+ window = windows->data;
+ }
+
+ if (window == NULL)
+ window = gth_browser_new (location, file_to_select);
+ else if (file_to_select != NULL)
+ gth_browser_go_to (GTH_BROWSER (window), location, file_to_select);
+ else
+ gth_browser_load_location (GTH_BROWSER (window), location);
+
+ if (! StartSlideshow)
+ gtk_window_present (GTK_WINDOW (window));
+}
+
+
+static void
+import_photos_from_location (GFile *location)
+{
+ GtkWidget *window;
+
+ window = gth_browser_new (NULL, NULL);
+ gth_browser_set_close_with_task (GTH_BROWSER (window), TRUE);
+ gth_hook_invoke ("import-photos", window, location, NULL);
+}
+
+
+static int
+gth_application_command_line (GApplication *application,
+ GApplicationCommandLine *command_line)
+{
+ char **argv;
+ int argc;
+ GOptionContext *context;
+ GError *error = NULL;
+ const char *arg;
+ int i;
+ GList *files;
+ GList *dirs;
+ GFile *location;
+ gboolean singleton;
+ GList *scan;
+
+ argv = g_application_command_line_get_arguments (command_line, &argc);
+
+ /* parse command line options */
+
+ context = gth_application_create_option_context ();
+ if (! g_option_context_parse (context, &argc, &argv, &error)) {
+ g_critical ("Failed to parse arguments: %s", error->message);
+ g_error_free (error);
+ g_option_context_free (context);
+ return EXIT_FAILURE;
+ }
+ g_option_context_free (context);
+
+ gdk_notify_startup_complete ();
+
+ /* exec the command line */
+
+ if (ImportPhotos) {
+ GFile *location = NULL;
+
+ if (remaining_args != NULL)
+ location = g_file_new_for_commandline_arg (remaining_args[0]);
+ import_photos_from_location (location);
+
+ return 0;
+ }
+
+ if (remaining_args == NULL) { /* No location specified. */
+ GFile *location;
+ GSettings *settings;
+ char *file_to_select_uri;
+ GFile *file_to_select;
+
+ location = g_file_new_for_uri (gth_pref_get_startup_location ());
+ settings = g_settings_new (GTHUMB_BROWSER_SCHEMA);
+ file_to_select_uri = _g_settings_get_uri (settings, PREF_BROWSER_STARTUP_CURRENT_FILE);
+ if (file_to_select_uri != NULL)
+ file_to_select = g_file_new_for_uri (file_to_select_uri);
+ else
+ file_to_select = NULL;
+
+ open_browser_window (location, file_to_select, TRUE);
+
+ _g_object_unref (file_to_select);
+ g_free (file_to_select_uri);
+ g_object_unref (settings);
+ g_object_unref (location);
+
+ return 0;
+ }
+
+ /* At least a location was specified */
+
+ files = NULL;
+ dirs = NULL;
+ for (i = 0; (arg = remaining_args[i]) != NULL; i++) {
+ GFile *location;
+ GFileType file_type;
+
+ location = g_file_new_for_commandline_arg (arg);
+ file_type = _g_file_get_standard_type (location);
+ if (file_type == G_FILE_TYPE_REGULAR)
+ files = g_list_prepend (files, location);
+ else
+ dirs = g_list_prepend (dirs, location);
+ }
+ files = g_list_reverse (files);
+ dirs = g_list_reverse (dirs);
+
+ location = gth_hook_invoke_get ("command-line-files", files);
+ if (location != NULL) {
+ open_browser_window (location, NULL, FALSE);
+ g_object_unref (location);
+ }
+ else {
+ /* Open each file in a new window */
+
+ singleton = (files != NULL) && (files->next == NULL);
+ for (scan = files; scan; scan = scan->next)
+ open_browser_window ((GFile *) scan->data, NULL, ! singleton);
+ }
+
+ /* Open each dir in a new window */
+
+ for (scan = dirs; scan; scan = scan->next)
+ open_browser_window ((GFile *) scan->data, NULL, TRUE);
+
+ _g_object_list_unref (dirs);
+ _g_object_list_unref (files);
+
+ return 0;
+}
+
+
+static gboolean
+gth_application_local_command_line (GApplication *application,
+ char ***arguments,
+ int *exit_status)
+{
+ char **local_argv;
+ int local_argc;
+ GOptionContext *context;
+ GError *error = NULL;
+ gboolean handled_locally = FALSE;
+
+ *exit_status = 0;
+
+ local_argv = g_strdupv (*arguments);
+ local_argc = g_strv_length (local_argv);
+ context = gth_application_create_option_context ();
+ if (! g_option_context_parse (context, &local_argc, &local_argv, &error)) {
+ *exit_status = EXIT_FAILURE;
+ g_critical ("Failed to parse arguments: %s", error->message);
+ g_clear_error (&error);
+ handled_locally = TRUE;
+ }
+ g_strfreev (local_argv);
+
+ /* substitute the dot with the local current folder */
+
+ local_argv = *arguments;
+ if ((local_argv != NULL) && (local_argv[0] != NULL)) {
+ int i;
+
+ for (i = 1; local_argv[i] != NULL; i++) {
+ if (strstr (local_argv[i], ".") != NULL) {
+ GFile *location = g_file_new_for_commandline_arg (local_argv[i]);
+ g_free (local_argv[i]);
+ local_argv[i] = g_file_get_uri (location);
+ g_object_unref (location);
+ }
+ }
+ }
+
+ if (version) {
+ g_printf ("%s %s, Copyright © 2001-2010 Free Software Foundation, Inc.\n", PACKAGE_NAME,
PACKAGE_VERSION);
+ handled_locally = TRUE;
+ }
+
+ g_option_context_free (context);
+
+ return handled_locally;
+}
+
+
+static void
+gth_application_class_init (GthApplicationClass *klass)
+{
+ GObjectClass *object_class;
+ GApplicationClass *application_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = gth_application_finalize;
+
+ application_class = G_APPLICATION_CLASS (klass);
+ application_class->startup = gth_application_startup;
+ application_class->command_line = gth_application_command_line;
+ application_class->local_command_line = gth_application_local_command_line;
+}
+
+
+GtkApplication *
+gth_application_new (void)
+{
+ return g_object_new (gth_application_get_type (),
+ "application-id", "org.gnome.Gthumb",
+ "register-session", TRUE, /* required to call gtk_application_inhibit */
+ "flags", G_APPLICATION_HANDLES_COMMAND_LINE,
+ NULL);
+}
diff --git a/gthumb/gth-application.h b/gthumb/gth-application.h
new file mode 100644
index 0000000..fddc8e7
--- /dev/null
+++ b/gthumb/gth-application.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * GThumb
+ *
+ * Copyright (C) 2001-2016 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GTH_APPLICATION_H
+#define GTH_APPLICATION_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+GtkApplication * gth_application_new (void);
+
+G_END_DECLS
+
+#endif /* GTH_APPLICATION_H */
diff --git a/gthumb/main.c b/gthumb/main.c
index 849ac4a..a754d75 100644
--- a/gthumb/main.c
+++ b/gthumb/main.c
@@ -20,463 +20,26 @@
*/
#include <config.h>
-#include <glib/gi18n.h>
-#include <glib/gprintf.h>
#include <gtk/gtk.h>
-#include <gio/gdesktopappinfo.h>
-#ifdef HAVE_GSTREAMER
-# include <gst/gst.h>
-#endif
-#ifdef HAVE_CLUTTER
-# include <clutter/clutter.h>
-# include <clutter-gtk/clutter-gtk.h>
-#endif
-#include "glib-utils.h"
-#include "gth-browser.h"
-#include "gth-browser-actions-callbacks.h"
-#include "gth-file-data.h"
-#include "gth-file-source-vfs.h"
+#include "gth-application.h"
#include "gth-main.h"
-#include "gth-preferences.h"
-#include "gtk-utils.h"
+#include "gth-window.h"
#include "main.h"
-#include "main-migrate.h"
-GtkApplication *Main_Application = NULL;
-gboolean NewWindow = FALSE;
-gboolean StartInFullscreen = FALSE;
-gboolean StartSlideshow = FALSE;
-gboolean ImportPhotos = FALSE;
-static char **remaining_args;
-static const char *program_argv0; /* argv[0] from main(); used as the command to restart the program */
-static gboolean Restart = FALSE;
-static gboolean version = FALSE;
-
-
-static const GOptionEntry options[] = {
- { "new-window", 'n', 0, G_OPTION_ARG_NONE, &NewWindow,
- N_("Open a new window"),
- 0 },
-
- { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, &StartInFullscreen,
- N_("Start in fullscreen mode"),
- 0 },
-
- { "slideshow", 's', 0, G_OPTION_ARG_NONE, &StartSlideshow,
- N_("Automatically start a slideshow"),
- 0 },
-
- { "import-photos", 'i', 0, G_OPTION_ARG_NONE, &ImportPhotos,
- N_("Automatically import digital camera photos"),
- 0 },
-
- { "version", 'v', 0, G_OPTION_ARG_NONE, &version,
- N_("Show version"), NULL },
-
- { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &remaining_args,
- NULL,
- NULL },
-
- { NULL }
-};
-
-
-static void
-open_browser_window (GFile *location,
- GFile *file_to_select,
- gboolean force_new_window)
-{
- gboolean reuse_active_window;
- GtkWidget *window;
-
- if (! force_new_window) {
- GSettings *settings;
-
- settings = g_settings_new (GTHUMB_BROWSER_SCHEMA);
- reuse_active_window = g_settings_get_boolean (settings, PREF_BROWSER_REUSE_ACTIVE_WINDOW);
- g_object_unref (settings);
- }
- else
- reuse_active_window = FALSE;
-
- window = NULL;
-
- if (reuse_active_window) {
- GList *windows = gtk_application_get_windows (Main_Application);
- if (windows != NULL)
- window = windows->data;
- }
-
- if (window == NULL)
- window = gth_browser_new (location, file_to_select);
- else if (file_to_select != NULL)
- gth_browser_go_to (GTH_BROWSER (window), location, file_to_select);
- else
- gth_browser_load_location (GTH_BROWSER (window), location);
-
- if (! StartSlideshow)
- gtk_window_present (GTK_WINDOW (window));
-}
-
-
-static void
-import_photos_from_location (GFile *location)
-{
- GtkWidget *window;
-
- window = gth_browser_new (NULL, NULL);
- gth_browser_set_close_with_task (GTH_BROWSER (window), TRUE);
- gth_hook_invoke ("import-photos", window, location, NULL);
-}
-
-
-static void
-migrate_data (void)
-{
- migrate_catalogs_from_2_10 ();
-}
-
-
-/* -- main application -- */
-
-
-typedef GtkApplication GthApplication;
-typedef GtkApplicationClass GthApplicationClass;
-
-static gpointer gth_application_parent_class;
-
-
-GType gth_application_get_type (void);
-
-
-G_DEFINE_TYPE (GthApplication, gth_application, GTK_TYPE_APPLICATION)
-
-
-static void
-gth_application_finalize (GObject *object)
-{
- G_OBJECT_CLASS (gth_application_parent_class)->finalize (object);
-}
-
-
-static void
-gth_application_init (GthApplication *app)
-{
-#ifdef GDK_WINDOWING_X11
-
- GDesktopAppInfo *app_info;
-
- app_info = g_desktop_app_info_new ("gthumb.desktop");
- if (app_info == NULL)
- return;
-
- if (g_desktop_app_info_has_key (app_info, "Name")) {
- char *app_name;
-
- app_name = g_desktop_app_info_get_string (app_info, "Name");
- g_set_application_name (app_name);
-
- g_free (app_name);
- }
-
- if (g_desktop_app_info_has_key (app_info, "Icon")) {
- char *icon;
-
- icon = g_desktop_app_info_get_string (app_info, "Icon");
- if (g_path_is_absolute (icon))
- gtk_window_set_default_icon_from_file (icon, NULL);
- else
- gtk_window_set_default_icon_name (icon);
-
- g_free (icon);
- }
-
- g_object_unref (app_info);
-
-#else
-
- /* manually set name and icon */
-
- g_set_application_name (_("gThumb"));
- gtk_window_set_default_icon_name ("gthumb");
-
-#endif
-}
-
-
-static const GActionEntry app_menu_entries[] = {
- { "new-window", gth_application_activate_new_window },
- { "preferences", gth_application_activate_preferences },
- { "shortcuts", gth_application_activate_show_shortcuts },
- { "help", gth_application_activate_show_help },
- { "about", gth_application_activate_about },
- { "quit", gth_application_activate_quit }
-};
-
-
-static void
-_gth_application_initialize_app_menu (GApplication *application)
-{
- GtkBuilder *builder;
-
- g_action_map_add_action_entries (G_ACTION_MAP (application),
- app_menu_entries,
- G_N_ELEMENTS (app_menu_entries),
- application);
-
- builder = _gtk_builder_new_from_resource ("app-menu.ui");
- gtk_application_set_app_menu (GTK_APPLICATION (application),
- G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
-
- g_object_unref (builder);
-}
-
-
-static void
-gth_application_startup (GApplication *application)
-{
- G_APPLICATION_CLASS (gth_application_parent_class)->startup (application);
-
- g_object_set (gtk_settings_get_default (), "gtk-application-prefer-dark-theme", TRUE, NULL);
-
- _gth_application_initialize_app_menu (application);
- gth_pref_initialize ();
- migrate_data ();
- gth_main_initialize ();
- gth_main_register_default_hooks ();
- gth_main_register_file_source (GTH_TYPE_FILE_SOURCE_VFS);
- gth_main_register_default_sort_types ();
- gth_main_register_default_tests ();
- gth_main_register_default_types ();
- gth_main_register_default_metadata ();
- gth_main_activate_extensions ();
- gth_hook_invoke ("initialize", NULL);
-}
-
-
-static GOptionContext *
-gth_application_create_option_context (void)
-{
- GOptionContext *context;
- static gsize initialized = FALSE;
-
- context = g_option_context_new (N_("- Image browser and viewer"));
- g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
- g_option_context_set_ignore_unknown_options (context, TRUE);
- g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
-
- if (g_once_init_enter (&initialized)) {
- g_option_context_add_group (context, gtk_get_option_group (TRUE));
-#ifdef HAVE_CLUTTER
- g_option_context_add_group (context, clutter_get_option_group_without_init ());
- g_option_context_add_group (context, gtk_clutter_get_option_group ());
-#endif
-#ifdef HAVE_GSTREAMER
- g_option_context_add_group (context, gst_init_get_option_group ());
-#endif
- g_once_init_leave (&initialized, TRUE);
- }
-
- return context;
-}
-
-
-static int
-gth_application_command_line (GApplication *application,
- GApplicationCommandLine *command_line)
-{
- char **argv;
- int argc;
- GOptionContext *context;
- GError *error = NULL;
- const char *arg;
- int i;
- GList *files;
- GList *dirs;
- GFile *location;
- gboolean singleton;
- GList *scan;
-
- argv = g_application_command_line_get_arguments (command_line, &argc);
-
- /* parse command line options */
-
- context = gth_application_create_option_context ();
- if (! g_option_context_parse (context, &argc, &argv, &error)) {
- g_critical ("Failed to parse arguments: %s", error->message);
- g_error_free (error);
- g_option_context_free (context);
- return EXIT_FAILURE;
- }
- g_option_context_free (context);
-
- gdk_notify_startup_complete ();
-
- /* exec the command line */
-
- if (ImportPhotos) {
- GFile *location = NULL;
-
- if (remaining_args != NULL)
- location = g_file_new_for_commandline_arg (remaining_args[0]);
- import_photos_from_location (location);
-
- return 0;
- }
-
- if (remaining_args == NULL) { /* No location specified. */
- GFile *location;
- GSettings *settings;
- char *file_to_select_uri;
- GFile *file_to_select;
-
- location = g_file_new_for_uri (gth_pref_get_startup_location ());
- settings = g_settings_new (GTHUMB_BROWSER_SCHEMA);
- file_to_select_uri = _g_settings_get_uri (settings, PREF_BROWSER_STARTUP_CURRENT_FILE);
- if (file_to_select_uri != NULL)
- file_to_select = g_file_new_for_uri (file_to_select_uri);
- else
- file_to_select = NULL;
-
- open_browser_window (location, file_to_select, TRUE);
-
- _g_object_unref (file_to_select);
- g_free (file_to_select_uri);
- g_object_unref (settings);
- g_object_unref (location);
-
- return 0;
- }
-
- /* At least a location was specified */
-
- files = NULL;
- dirs = NULL;
- for (i = 0; (arg = remaining_args[i]) != NULL; i++) {
- GFile *location;
- GFileType file_type;
-
- location = g_file_new_for_commandline_arg (arg);
- file_type = _g_file_get_standard_type (location);
- if (file_type == G_FILE_TYPE_REGULAR)
- files = g_list_prepend (files, location);
- else
- dirs = g_list_prepend (dirs, location);
- }
- files = g_list_reverse (files);
- dirs = g_list_reverse (dirs);
-
- location = gth_hook_invoke_get ("command-line-files", files);
- if (location != NULL) {
- open_browser_window (location, NULL, FALSE);
- g_object_unref (location);
- }
- else {
- /* Open each file in a new window */
-
- singleton = (files != NULL) && (files->next == NULL);
- for (scan = files; scan; scan = scan->next)
- open_browser_window ((GFile *) scan->data, NULL, ! singleton);
- }
-
- /* Open each dir in a new window */
-
- for (scan = dirs; scan; scan = scan->next)
- open_browser_window ((GFile *) scan->data, NULL, TRUE);
-
- _g_object_list_unref (dirs);
- _g_object_list_unref (files);
-
- return 0;
-}
-
-
-static gboolean
-gth_application_local_command_line (GApplication *application,
- char ***arguments,
- int *exit_status)
-{
- char **local_argv;
- int local_argc;
- GOptionContext *context;
- GError *error = NULL;
- gboolean handled_locally = FALSE;
-
- *exit_status = 0;
-
- local_argv = g_strdupv (*arguments);
- local_argc = g_strv_length (local_argv);
- context = gth_application_create_option_context ();
- if (! g_option_context_parse (context, &local_argc, &local_argv, &error)) {
- *exit_status = EXIT_FAILURE;
- g_critical ("Failed to parse arguments: %s", error->message);
- g_clear_error (&error);
- handled_locally = TRUE;
- }
- g_strfreev (local_argv);
-
- /* substitute the dot with the local current folder */
-
- local_argv = *arguments;
- if ((local_argv != NULL) && (local_argv[0] != NULL)) {
- int i;
-
- for (i = 1; local_argv[i] != NULL; i++) {
- if (strstr (local_argv[i], ".") != NULL) {
- GFile *location = g_file_new_for_commandline_arg (local_argv[i]);
- g_free (local_argv[i]);
- local_argv[i] = g_file_get_uri (location);
- g_object_unref (location);
- }
- }
- }
-
- if (version) {
- g_printf ("%s %s, Copyright © 2001-2010 Free Software Foundation, Inc.\n", PACKAGE_NAME,
PACKAGE_VERSION);
- handled_locally = TRUE;
- }
-
- g_option_context_free (context);
-
- return handled_locally;
-}
-
-
-static void
-gth_application_class_init (GthApplicationClass *klass)
-{
- GObjectClass *object_class;
- GApplicationClass *application_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gth_application_finalize;
-
- application_class = G_APPLICATION_CLASS (klass);
- application_class->startup = gth_application_startup;
- application_class->command_line = gth_application_command_line;
- application_class->local_command_line = gth_application_local_command_line;
-}
-
-
-static GtkApplication *
-gth_application_new (void)
-{
- return g_object_new (gth_application_get_type (),
- "application-id", "org.gnome.Gthumb",
- "register-session", TRUE, /* required to call gtk_application_inhibit */
- "flags", G_APPLICATION_HANDLES_COMMAND_LINE,
- NULL);
-}
-
-
-/* -- main -- */
+GtkApplication * Main_Application = NULL;
+gboolean NewWindow = FALSE;
+gboolean StartInFullscreen = FALSE;
+gboolean StartSlideshow = FALSE;
+gboolean ImportPhotos = FALSE;
+static gboolean Restart = FALSE;
int
main (int argc, char *argv[])
{
- int status;
+ const char *program_argv0;
+ int status;
program_argv0 = argv[0];
@@ -490,9 +53,6 @@ main (int argc, char *argv[])
Main_Application = gth_application_new ();
status = g_application_run (G_APPLICATION (Main_Application), argc, argv);
-
- gth_main_release ();
- gth_pref_release ();
g_object_unref (Main_Application);
/* restart if requested by the user */
@@ -510,10 +70,10 @@ gth_quit (gboolean restart)
GList *windows;
GList *scan;
+ Restart = restart;
+
windows = g_list_copy (gtk_application_get_windows (Main_Application));
for (scan = windows; scan; scan = scan->next)
gth_window_close (GTH_WINDOW (scan->data));
g_list_free (windows);
-
- Restart = restart;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]