break;
}
- g_string_append_printf (cmd, " %s", uri);
-
cmdline = g_string_free (cmd, FALSE);
app = g_app_info_create_from_commandline (cmdline, NULL, 0, &error);
if (app != NULL) {
+ GList uri_list;
+
ctx = gdk_display_get_app_launch_context (gdk_screen_get_display (screen));
gdk_app_launch_context_set_screen (ctx, screen);
gdk_app_launch_context_set_timestamp (ctx, timestamp);
- g_app_info_launch (app, NULL,
- G_APP_LAUNCH_CONTEXT (ctx), &error);
+ /* Some URIs can be changed when passed through a GFile
+ * (for instance unsupported uris with strange formats like mailto:),
+ * so if you have a textual uri you want to pass in as argument,
+ * consider using g_app_info_launch_uris() instead.
+ * See https://bugzilla.gnome.org/show_bug.cgi?id=644604
+ */
+ uri_list.data = (gchar *)uri;
+ uri_list.prev = uri_list.next = NULL;
+ g_app_info_launch_uris (app, &uri_list,
+ G_APP_LAUNCH_CONTEXT (ctx), &error);
g_object_unref (app);
g_object_unref (ctx);
"screen",
g_variant_new_int32 (gdk_screen_get_number (data->screen)));
if (data->dest) {
- g_variant_builder_add (&builder, "{sv}",
- "page-label",
- g_variant_new_string (ev_link_dest_get_page_label (data->dest)));
+ const gchar *page_label = ev_link_dest_get_page_label (data->dest);
+
+ if (page_label) {
+ g_variant_builder_add (&builder, "{sv}",
+ "page-label",
+ g_variant_new_string (page_label));
+ } else {
+ g_variant_builder_add (&builder, "{sv}",
+ "page-index",
+ g_variant_new_uint32 (ev_link_dest_get_page (data->dest)));
+ }
}
if (data->search_string) {
g_variant_builder_add (&builder, "{sv}",
while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
if (strcmp (key, "display") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
display = ev_display_open_if_needed (g_variant_get_string (value, NULL));
- } else if (strcmp (key, "screen") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
+ } else if (strcmp (key, "screen") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_INT32) {
screen_number = g_variant_get_int32 (value);
} else if (strcmp (key, "mode") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_UINT32) {
- mode = g_variant_get_uint32 (value);
+ mode = g_variant_get_uint32 (value);
} else if (strcmp (key, "page-label") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
dest = ev_link_dest_new_page_label (g_variant_get_string (value, NULL));
+ } else if (strcmp (key, "page-index") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_UINT32) {
+ dest = ev_link_dest_new_page (g_variant_get_uint32 (value));
} else if (strcmp (key, "find-string") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
search_string = g_variant_get_string (value, NULL);
}