static void load_session (gboolean use_factory, GNOME_GThumb_Application app, CORBA_Environment *env) { int i, n; gnome_config_push_prefix (gnome_client_get_config_prefix (master_client)); n = gnome_config_get_int ("Session/locations"); for (i = 0; i < n; i++) { char *key; char *location; key = g_strdup_printf ("Session/location%d", i); location = gnome_config_get_string (key); if (uri_scheme_is_file (location) && path_is_file (location)) open_viewer_window (location, use_factory, app, env); else open_browser_window (location, TRUE, use_factory, app, env); g_free (location); g_free (key); } gnome_config_pop_prefix (); }
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); g_strfreev (argv); 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; }
/* Create the windows. */ static void prepare_app (void) { CORBA_Object factory; gboolean use_factory = FALSE; CORBA_Environment env; GNOME_GThumb_Application app; GList *scan; factory = bonobo_activation_activate_from_id ("OAFIID:GNOME_GThumb_Application_Factory", Bonobo_ACTIVATION_FLAG_EXISTING_ONLY, NULL, NULL); if (factory != NULL) { use_factory = TRUE; CORBA_exception_init (&env); app = bonobo_activation_activate_from_id ("OAFIID:GNOME_GThumb_Application", 0, NULL, &env); } if (session_is_restored ()) { load_session (use_factory, app, &env); return; } if (ImportPhotos) { if (use_factory) GNOME_GThumb_Application_import_photos (app, &env); else gth_browser_activate_action_file_camera_import (NULL, NULL); } else if (! view_comline_catalog && (n_dir_urls == 0) && (n_file_urls == 0)) { open_browser_window (NULL, TRUE, use_factory, app, &env); } else if (view_single_image) { if (use_factory && eel_gconf_get_boolean (PREF_SINGLE_WINDOW, FALSE)) { GNOME_GThumb_Application_load_image (app, file_urls->data, &env); } else { if (UseViewer) open_viewer_window (file_urls->data, use_factory, app, &env); else open_browser_window (file_urls->data, TRUE, use_factory, app, &env); } } else if (view_comline_catalog) { char *catalog_path; char *catalog_uri; ViewFirstImage = TRUE; HideSidebar = TRUE; catalog_path = get_command_line_catalog_path (); catalog_uri = g_strconcat ("catalog://", remove_host_from_uri (catalog_path), NULL); open_browser_window (catalog_uri, TRUE, use_factory, app, &env); g_free (catalog_path); g_free (catalog_uri); } for (scan = dir_urls; scan; scan = scan->next) { /* Go to the specified directory. */ open_browser_window (scan->data, TRUE, use_factory, app, &env); } path_list_free (file_urls); path_list_free (dir_urls); /**/ if (use_factory) { bonobo_object_release_unref (app, &env); CORBA_exception_free (&env); gdk_notify_startup_complete (); exit (0); } else gth_application = gth_application_new (gdk_screen_get_default ()); }