evolution r37063 - trunk/mail



Author: msuman
Date: Tue Jan 13 03:41:19 2009
New Revision: 37063
URL: http://svn.gnome.org/viewvc/evolution?rev=37063&view=rev

Log:
Patch from Felix Riemann  <friemann svn gnome org> ** Fix for bug #563867 (Unescape "&amp;" when passing the link to browsers).

Modified:
   trunk/mail/ChangeLog
   trunk/mail/em-folder-view.c
   trunk/mail/em-popup.c
   trunk/mail/em-utils.c
   trunk/mail/em-utils.h

Modified: trunk/mail/em-folder-view.c
==============================================================================
--- trunk/mail/em-folder-view.c	(original)
+++ trunk/mail/em-folder-view.c	Tue Jan 13 03:41:19 2009
@@ -2734,37 +2734,6 @@
 	}
 }
 
-static gchar *
-url_unescape_amp (const gchar *url)
-{
-	gchar *buff;
-	int i, j, amps;
-
-	if (!url)
-		return NULL;
-
-	amps = 0;
-	for (i = 0; url [i]; i++) {
-		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
-			amps++;
-	}
-
-	buff = g_strdup (url);
-
-	if (!amps)
-		return buff;
-
-	for (i = 0, j = 0; url [i]; i++, j++) {
-		buff [j] = url [i];
-
-		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
-			i += 4;
-	}
-	buff [j] = 0;
-
-	return buff;
-}
-
 static void
 emp_uri_popup_link_copy(EPopup *ep, EPopupItem *pitem, void *data)
 {
@@ -2772,7 +2741,7 @@
 	struct _EMFolderViewPrivate *p = emfv->priv;
 
 	g_free(p->selection_uri);
-	p->selection_uri = url_unescape_amp(pitem->user_data);
+	p->selection_uri = em_utils_url_unescape_amp(pitem->user_data);
 
 	gtk_selection_owner_set(p->invisible, GDK_SELECTION_PRIMARY, gtk_get_current_event_time());
 	gtk_selection_owner_set(p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time());

Modified: trunk/mail/em-popup.c
==============================================================================
--- trunk/mail/em-popup.c	(original)
+++ trunk/mail/em-popup.c	Tue Jan 13 03:41:19 2009
@@ -585,9 +585,11 @@
 emp_uri_popup_link_open(EPopup *ep, EPopupItem *item, void *data)
 {
 	EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target;
+	gchar *unescaped_uri = em_utils_url_unescape_amp (t->uri);
 
 	/* FIXME Pass a parent window. */
-	e_show_uri (NULL, t->uri);
+	e_show_uri (NULL, unescaped_uri);
+	g_free (unescaped_uri);
 }
 
 static void

Modified: trunk/mail/em-utils.c
==============================================================================
--- trunk/mail/em-utils.c	(original)
+++ trunk/mail/em-utils.c	Tue Jan 13 03:41:19 2009
@@ -2442,3 +2442,34 @@
 		g_signal_connect(widget, "response", G_CALLBACK(error_response), NULL);
 	e_activity_handler_make_error (handler, "mail", E_LOG_WARNINGS, widget);
 }
+
+gchar *
+em_utils_url_unescape_amp (const gchar *url)
+{
+	gchar *buff;
+	int i, j, amps;
+
+	if (!url)
+		return NULL;
+
+	amps = 0;
+	for (i = 0; url [i]; i++) {
+		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
+			amps++;
+	}
+
+	buff = g_strdup (url);
+
+	if (!amps)
+		return buff;
+
+	for (i = 0, j = 0; url [i]; i++, j++) {
+		buff [j] = url [i];
+
+		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
+			i += 4;
+	}
+	buff [j] = 0;
+
+	return buff;
+}

Modified: trunk/mail/em-utils.h
==============================================================================
--- trunk/mail/em-utils.h	(original)
+++ trunk/mail/em-utils.h	Tue Jan 13 03:41:19 2009
@@ -117,6 +117,9 @@
 /* clears flag 'get_password_canceled' at every known accounts, so if needed, get_password will show dialog */
 void em_utils_clear_get_password_canceled_accounts_flag (void);
 
+/* Unescapes &amp; back to a real & in URIs */
+gchar *em_utils_url_unescape_amp (const gchar *url);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]