static UniqueResponse unique_app_message_cb (UniqueApp *unique_app, gint command, UniqueMessageData *data, guint timestamp, gpointer user_data) { GtkWindow *window = user_data; DEBUG ("Other instance launched, presenting the main window. " "Command=%d, timestamp %u", command, timestamp); if (command == COMMAND_ACCOUNTS_DIALOG) { show_accounts_ui (window, TRUE); } else { /* We're requested to show stuff again, disable the start hidden global * in case the accounts wizard wants to pop up. */ start_hidden = FALSE; show_accounts_ui (window, FALSE); gtk_window_set_screen (GTK_WINDOW (window), unique_message_data_get_screen (data)); gtk_window_set_startup_id (GTK_WINDOW (window), unique_message_data_get_startup_id (data)); gtk_window_present_with_time (GTK_WINDOW (window), timestamp); } return UNIQUE_RESPONSE_OK; }
static gboolean exo_open_launch_category (const gchar *category, const gchar *parameters) { GtkWidget *dialog; GError *error = NULL; #ifndef NDEBUG g_debug ("category='%s', wd='%s', parameters='%s'", category, opt_working_directory, parameters); #endif /* run the preferred application */ if (!exo_execute_preferred_application (category, parameters, opt_working_directory, NULL, &error)) { /* display an error dialog */ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Failed to launch preferred application for category \"%s\"."), category); if (startup_id != NULL) gtk_window_set_startup_id (GTK_WINDOW (dialog), startup_id); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s.", error->message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_error_free (error); return FALSE; } return TRUE; }
void nemo_application_open_location (NemoApplication *application, GFile *location, GFile *selection, const char *startup_id) { NemoWindow *window; GList *sel_list = NULL; window = nemo_application_create_window (application, gdk_screen_get_default ()); gtk_window_set_startup_id (GTK_WINDOW (window), startup_id); if (selection != NULL) { sel_list = g_list_prepend (sel_list, nemo_file_get (selection)); } nemo_window_slot_open_location (nemo_window_get_active_slot (window), location, 0, sel_list); if (sel_list != NULL) { nemo_file_list_free (sel_list); } }
JNIEXPORT void JNICALL Java_org_gnome_gtk_GtkWindow_gtk_1window_1set_1startup_1id ( JNIEnv* env, jclass cls, jlong _self, jstring _startupId ) { GtkWindow* self; const gchar* startupId; // convert parameter self self = (GtkWindow*) _self; // convert parameter startupId startupId = (const gchar*) bindings_java_getString(env, _startupId); if (startupId == NULL) { return; // Java Exception already thrown } // call function gtk_window_set_startup_id(self, startupId); // cleanup parameter self // cleanup parameter startupId bindings_java_releaseString(startupId); }
void nautilus_application_open_location (NautilusApplication *application, GFile *location, GFile *selection, const char *startup_id) { NautilusWindow *window; NautilusWindowSlot *slot; GList *sel_list = NULL; nautilus_profile_start (NULL); slot = get_window_slot_for_location (application, location); if (!slot) { window = nautilus_application_create_window (application, gdk_screen_get_default ()); slot = nautilus_window_get_active_slot (window); } else { window = nautilus_window_slot_get_window (slot); nautilus_window_set_active_slot (window, slot); gtk_window_present (GTK_WINDOW (window)); } if (selection != NULL) { sel_list = g_list_prepend (sel_list, nautilus_file_get (selection)); } gtk_window_set_startup_id (GTK_WINDOW (window), startup_id); nautilus_window_slot_open_location_full (slot, location, 0, sel_list, NULL, NULL); if (sel_list != NULL) { nautilus_file_list_free (sel_list); } nautilus_profile_end (NULL); }
static gboolean terminal_factory_impl_create_instance (TerminalFactory *factory, GDBusMethodInvocation *invocation, GVariant *options) { TerminalApp *app = terminal_app_get (); TerminalSettingsList *profiles_list; GDBusObjectManagerServer *object_manager; TerminalWindow *window; TerminalScreen *screen; TerminalReceiverImpl *impl; TerminalObjectSkeleton *skeleton; char *object_path; GSettings *profile = NULL; const char *profile_uuid, *title, *encoding; gboolean zoom_set = FALSE; gdouble zoom = 1.0; guint window_id; gboolean show_menubar; gboolean active; gboolean have_new_window, present_window, present_window_set; GError *err = NULL; /* Look up the profile */ if (!g_variant_lookup (options, "profile", "&s", &profile_uuid)) profile_uuid = NULL; if (!g_variant_lookup (options, "encoding", "&s", &encoding)) encoding = NULL; /* use profile encoding */ profiles_list = terminal_app_get_profiles_list (app); profile = terminal_profiles_list_ref_profile_by_uuid (profiles_list, profile_uuid, &err); if (profile == NULL) { g_dbus_method_invocation_return_gerror (invocation, err); g_error_free (err); goto out; } if (g_variant_lookup (options, "window-id", "u", &window_id)) { GtkWindow *win; win = gtk_application_get_window_by_id (GTK_APPLICATION (app), window_id); if (!TERMINAL_IS_WINDOW (win)) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "Nonexisting window %u referenced", window_id); goto out; } window = TERMINAL_WINDOW (win); have_new_window = FALSE; } else { const char *startup_id, *display_name, *role; gboolean start_maximized, start_fullscreen; int screen_number; GdkScreen *gdk_screen; /* Create a new window */ if (!g_variant_lookup (options, "display", "^&ay", &display_name)) { g_dbus_method_invocation_return_error_literal (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No display specified"); goto out; } screen_number = 0; gdk_screen = terminal_util_get_screen_by_display_name (display_name, screen_number); if (gdk_screen == NULL) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No screen %d on display \"%s\"", screen_number, display_name); goto out; } window = terminal_app_new_window (app, gdk_screen); if (g_variant_lookup (options, "desktop-startup-id", "^&ay", &startup_id)) gtk_window_set_startup_id (GTK_WINDOW (window), startup_id); /* Overwrite the default, unique window role set in terminal_window_init */ if (g_variant_lookup (options, "role", "&s", &role)) gtk_window_set_role (GTK_WINDOW (window), role); if (g_variant_lookup (options, "show-menubar", "b", &show_menubar)) terminal_window_set_menubar_visible (window, show_menubar); if (g_variant_lookup (options, "fullscreen-window", "b", &start_fullscreen) && start_fullscreen) { gtk_window_fullscreen (GTK_WINDOW (window)); } if (g_variant_lookup (options, "maximize-window", "b", &start_maximized) && start_maximized) { gtk_window_maximize (GTK_WINDOW (window)); } have_new_window = TRUE; } g_assert (window != NULL); if (!g_variant_lookup (options, "title", "&s", &title)) title = NULL; if (g_variant_lookup (options, "zoom", "d", &zoom)) zoom_set = TRUE; screen = terminal_screen_new (profile, encoding, NULL, title, NULL, NULL, zoom_set ? zoom : 1.0); terminal_window_add_screen (window, screen, -1); object_path = get_object_path_for_screen (window, screen); g_assert (g_variant_is_object_path (object_path)); skeleton = terminal_object_skeleton_new (object_path); impl = terminal_receiver_impl_new (screen); terminal_object_skeleton_set_receiver (skeleton, TERMINAL_RECEIVER (impl)); g_object_unref (impl); object_manager = terminal_app_get_object_manager (app); g_dbus_object_manager_server_export (object_manager, G_DBUS_OBJECT_SKELETON (skeleton)); g_object_set_data_full (G_OBJECT (screen), RECEIVER_IMPL_SKELETON_DATA_KEY, skeleton, (GDestroyNotify) g_object_unref); g_signal_connect (screen, "destroy", G_CALLBACK (screen_destroy_cb), app); if (g_variant_lookup (options, "active", "b", &active) && active) { terminal_window_switch_screen (window, screen); gtk_widget_grab_focus (GTK_WIDGET (screen)); } if (g_variant_lookup (options, "present-window", "b", &present_window)) present_window_set = TRUE; else present_window_set = FALSE; if (have_new_window) { const char *geometry; if (g_variant_lookup (options, "geometry", "&s", &geometry) && !terminal_window_parse_geometry (window, geometry)) _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY, "Invalid geometry string \"%s\"", geometry); } if (have_new_window || (present_window_set && present_window)) gtk_window_present (GTK_WINDOW (window)); terminal_factory_complete_create_instance (factory, invocation, object_path); g_free (object_path); out: if (profile) g_object_unref (profile); return TRUE; /* handled */ }
gint main (gint argc, gchar **argv) { GOptionContext *context; GtkWidget *dialog; GError *err = NULL; gchar *parameter, *quoted; gint result = EXIT_SUCCESS; GString *join; guint i; gchar *uri; #ifdef GETTEXT_PACKAGE /* setup i18n support */ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); #endif /* steal the startup id, before gtk tries to grab it */ startup_id = g_strdup (g_getenv ("DESKTOP_STARTUP_ID")); if (startup_id != NULL) g_unsetenv ("DESKTOP_STARTUP_ID"); /* try to parse the command line parameters */ context = g_option_context_new (NULL); g_option_context_set_help_enabled (context, FALSE); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); g_option_context_set_ignore_unknown_options (context, TRUE); if (!g_option_context_parse (context, &argc, &argv, &err)) { g_fprintf (stderr, "exo-open: %s.\n", err->message); g_error_free (err); return EXIT_FAILURE; } /* restore the startup-id for the child environment */ if (startup_id != NULL) g_setenv ("DESKTOP_STARTUP_ID", startup_id, TRUE); /* setup default icon for windows */ gtk_window_set_default_icon_name ("preferences-desktop-default-applications"); /* check what to do */ if (G_UNLIKELY (opt_help)) { usage (); } else if (G_UNLIKELY (opt_version)) { g_print ("%s %s\n\n", g_get_prgname (), PACKAGE_VERSION); g_print (_("Copyright (c) %s\n" " os-cillation e.K. All rights reserved.\n\n" "Written by Benedikt Meurer <*****@*****.**>.\n\n"), "2005-2007"); g_print (_("%s comes with ABSOLUTELY NO WARRANTY,\n" "You may redistribute copies of %s under the terms of\n" "the GNU Lesser General Public License which can be found in the\n" "%s source package.\n\n"), g_get_prgname (), g_get_prgname (), PACKAGE_TARNAME); g_print (_("Please report bugs to <%s>.\n"), PACKAGE_BUGREPORT); } else if (G_LIKELY (opt_launch != NULL)) { if (argc > 1) { /* NOTE: see the comment at the top of this document! */ /* combine all specified parameters to one parameter string */ join = g_string_new (NULL); for (i = 1; argv[i] != NULL; i++) { /* separate the arguments */ if (i > 1) join = g_string_append_c (join, ' '); /* only quote arguments with spaces if there are multiple * arguments to be merged, this is a bit of magic to make * common cares work property, see sample above with xfrun4 */ if (argc > 2 && strchr (argv[i], ' ') != NULL) { quoted = g_shell_quote (argv[i]); join = g_string_append (join, quoted); g_free (quoted); } else { join = g_string_append (join, argv[i]); } } parameter = g_string_free (join, FALSE); } else { parameter = NULL; } /* run the preferred application */ if (!exo_open_launch_category (opt_launch, parameter)) result = EXIT_FAILURE; g_free (parameter); } else if (argc > 1) { /* open all specified urls */ for (argv += 1; result == EXIT_SUCCESS && *argv != NULL; ++argv) { if (g_str_has_suffix (*argv, ".desktop") && exo_open_launch_desktop_file (*argv)) { /* successfully launched a desktop file */ continue; } else if (exo_str_looks_like_an_uri (*argv)) { /* use the argument directly */ uri = g_strdup (*argv); } else { /* try to build a valid uri */ uri = exo_open_find_scheme (*argv); } #ifndef NDEBUG g_debug ("opening the following uri: %s", uri); #endif if (uri == NULL) { /* display an error dialog */ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Unable to detect the URI-scheme of \"%s\"."), *argv); if (startup_id != NULL) gtk_window_set_startup_id (GTK_WINDOW (dialog), startup_id); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); result = EXIT_FAILURE; } else if (!exo_open_uri (uri, &err)) { if (err != NULL) { /* display an error dialog */ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Failed to open URI \"%s\"."), uri); if (startup_id != NULL) gtk_window_set_startup_id (GTK_WINDOW (dialog), startup_id); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s.", err->message); g_error_free (err); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } result = EXIT_FAILURE; } g_free (uri); } } else { result = EXIT_FAILURE; usage (); } return result; }