[evince] Do not fail to open external uri links that are relative paths
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evince] Do not fail to open external uri links that are relative paths
- Date: Sun, 20 Dec 2009 17:33:29 +0000 (UTC)
commit 4703212e1b44d4d385dc894cfbdc037db6e2112b
Author: Carlos Garcia Campos <carlosgc gnome org>
Date: Sun Dec 20 18:26:27 2009 +0100
Do not fail to open external uri links that are relative paths
If an external uri is not a valid uri (it doesn't contain :// nor
mailto:) we assume it's http if it starts with www, otherwise we build a
new uri for the relative path with the document uri as base.
Fixes bgo#604716.
shell/ev-window.c | 33 +++++++++++++++++++++++++--------
1 files changed, 25 insertions(+), 8 deletions(-)
---
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 11e3c12..95c2191 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -5594,18 +5594,35 @@ launch_external_uri (EvWindow *window, EvLinkAction *action)
if (!g_strstr_len (uri, strlen (uri), "://") &&
!g_str_has_prefix (uri, "mailto:")) {
- gchar *http;
-
- /* Not a valid uri, assuming it's http */
- http = g_strdup_printf ("http://%s", uri);
- ret = g_app_info_launch_default_for_uri (http, context, &error);
- g_free (http);
+ gchar *new_uri;
+
+ /* Not a valid uri, assume http if it starts with www */
+ if (g_str_has_prefix (uri, "www.")) {
+ new_uri = g_strdup_printf ("http://%s", uri);
+ } else {
+ GFile *file, *parent;
+
+ file = g_file_new_for_uri (window->priv->uri);
+ parent = g_file_get_parent (file);
+ g_object_unref (file);
+ if (parent) {
+ gchar *parent_uri = g_file_get_uri (parent);
+
+ new_uri = g_build_filename (parent_uri, uri, NULL);
+ g_free (parent_uri);
+ g_object_unref (parent);
+ } else {
+ new_uri = g_strdup_printf ("file:///%s", uri);
+ }
+ }
+ ret = g_app_info_launch_default_for_uri (new_uri, context, &error);
+ g_free (new_uri);
} else {
ret = g_app_info_launch_default_for_uri (uri, context, &error);
}
-
+
if (ret == FALSE) {
- ev_window_error_message (window, error,
+ ev_window_error_message (window, error,
"%s", _("Unable to open external link"));
g_error_free (error);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]