X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-application.c;h=caa943b855d78d8f2373c2ed008239e965df8659;hb=6a34ad367a49ad20710d3b575b5fa21182164fa9;hp=0c65eec286f809d040d850b7d7ba2f240c99fb35;hpb=6935cbce7dce37600abe92eec6344ffde0cc6bae;p=evince.git diff --git a/shell/ev-application.c b/shell/ev-application.c index 0c65eec2..caa943b8 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -283,18 +283,26 @@ ev_spawn (const char *uri, 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); @@ -461,9 +469,17 @@ on_register_uri_cb (GObject *source_object, "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}", @@ -762,12 +778,14 @@ method_call_cb (GDBusConnection *connection, 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); } 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); }