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=21f7a3a285dfa1420ae25d70f2211e8f0053d9f3;hpb=2bcc52f832a05b0d4145940cb501143f2530ad56;p=evince.git diff --git a/shell/ev-application.c b/shell/ev-application.c index 21f7a3a2..caa943b8 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -293,6 +293,12 @@ ev_spawn (const char *uri, gdk_app_launch_context_set_screen (ctx, screen); gdk_app_launch_context_set_timestamp (ctx, timestamp); + /* 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, @@ -463,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}", @@ -764,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); }