changeset 25351:5dedfe149cb3

Pass only the URL scheme to gtkimhtml and let it add the colon automatically.
author Richard Laager <rlaager@wiktel.com>
date Mon, 01 Dec 2008 19:23:23 +0000
parents 103d0d6ffab6
children 48cf0a545621
files pidgin/gtkimhtml.c pidgin/gtkimhtml.h pidgin/gtkutils.c
diffstat 3 files changed, 35 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/pidgin/gtkimhtml.c	Mon Dec 01 17:05:40 2008 +0000
+++ b/pidgin/gtkimhtml.c	Mon Dec 01 19:23:23 2008 +0000
@@ -2641,7 +2641,7 @@
 	c = text;
 	len = strlen(text);
 	ws = g_malloc(len + 1);
-	ws[0] = 0;
+	ws[0] = '\0';
 
 	gtk_text_buffer_begin_user_action(imhtml->text_buffer);
 	while (pos < len) {
@@ -3287,8 +3287,7 @@
 				ws[wpos] = '\n';
 				wpos++;
 				gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
-				ws[0] = '\0';
-				wpos = 0;
+				ws[0] = '\0'; wpos = 0;
 				/* NEW_BIT (NEW_TEXT_BIT); */
 			} else if (!br) {  /* Don't insert a space immediately after an HTML break */
 				/* A newline is defined by HTML as whitespace, which means we have to replace it with a word boundary.
@@ -3299,8 +3298,7 @@
 				ws[wpos] = ' ';
 				wpos++;
 				gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
-				ws[0] = '\0';
-				wpos = 0;
+				ws[0] = '\0'; wpos = 0;
 			}
 			c++;
 			pos++;
@@ -3308,15 +3306,14 @@
 			br = FALSE;
 			if (wpos > 0) {
 				gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
-				ws[0] = '\0';
-				wpos = 0;
+				ws[0] = '\0'; wpos = 0;
 			}
-			while(len_protocol--){
-				/* Skip the next len_protocol characters, but make sure they're
-				   copied into the ws array.
-				*/
-				 ws [wpos++] = *c++;
-				 pos++;
+			while (len_protocol--) {
+				/* Skip the next len_protocol characters, but
+				 * make sure they're copied into the ws array.
+				 */
+				ws [wpos++] = *c++;
+				pos++;
 			}
 			if (!imhtml->edit.link) {
 				while (*c && *c != ' ') {
@@ -3364,8 +3361,7 @@
 		ws[wpos]  = '\0';
 		gtk_text_buffer_insert(imhtml->text_buffer, &line_iter, ws, wpos);
 		gtk_text_buffer_get_end_iter(gtk_text_iter_get_buffer(&line_iter), iter);
-		ws[0] = '\0';
-		wpos = 0;
+		ws[0] = '\0'; wpos = 0;
 	}
 
 	while (fonts) {
@@ -5753,13 +5749,16 @@
 {
 	GtkIMHtmlClass *klass;
 	GtkIMHtmlProtocol *proto;
+	char *protocol;
 
 	g_return_val_if_fail(name, FALSE);
 
 	klass = g_type_class_ref(GTK_TYPE_IMHTML);
 	g_return_val_if_fail(klass, FALSE);
 
-	if ((proto = imhtml_find_protocol(name))) {
+	protocol = g_strdup_printf("%s:", name);
+	if ((proto = imhtml_find_protocol(protocol))) {
+		g_free(protocol);
 		g_return_val_if_fail(!activate, FALSE);
 		g_free(proto->name);
 		g_free(proto);
@@ -5770,8 +5769,8 @@
 	}
 
 	proto = g_new0(GtkIMHtmlProtocol, 1);
-	proto->name = g_strdup(name);
-	proto->length = strlen(name);
+	proto->name = protocol;
+	proto->length = strlen(protocol);
 	proto->activate = activate;
 	proto->context_menu = context_menu;
 	klass->protocols = g_list_prepend(klass->protocols, proto);
--- a/pidgin/gtkimhtml.h	Mon Dec 01 17:05:40 2008 +0000
+++ b/pidgin/gtkimhtml.h	Mon Dec 01 19:23:23 2008 +0000
@@ -892,7 +892,7 @@
  * Register a protocol with the GtkIMHtml widget. Registering a protocol would
  * allow certain text to be clickable.
  *
- * @param name      The name of the protocol (e.g. http://)
+ * @param name      The name of the protocol (e.g. http)
  * @param activate  The callback to trigger when the protocol text is clicked.
  *                  Removes any current protocol definition if @c NULL. The
  *                  callback should return @c TRUE if the link was activated
--- a/pidgin/gtkutils.c	Mon Dec 01 17:05:40 2008 +0000
+++ b/pidgin/gtkutils.c	Mon Dec 01 19:23:23 2008 +0000
@@ -3569,7 +3569,7 @@
 	return TRUE;
 }
 
-gboolean
+static gboolean
 register_gnome_url_handlers()
 {
 	char *tmp;
@@ -3621,10 +3621,12 @@
 				}
 
 				start += sizeof("/desktop/gnome/url-handlers/") - 1;
-				protocol = g_strdup_printf("%s:", start);
+				protocol = g_strdup(start);
 				gnome_url_handlers = g_list_prepend(gnome_url_handlers, protocol);
 
-				if (!strcmp(protocol, "mailto:"))
+				purple_debug_info("url-handlers", "Registering handler for %s.\n", protocol);
+
+				if (!strcmp(protocol, "mailto"))
 					gtk_imhtml_class_register_protocol(protocol, url_clicked_cb, copy_email_address);
 				else
 					gtk_imhtml_class_register_protocol(protocol, url_clicked_cb, link_context_menu);
@@ -3638,22 +3640,22 @@
 
 void pidgin_utils_init(void)
 {
-	gtk_imhtml_class_register_protocol("open://", open_dialog, dummy);
+	gtk_imhtml_class_register_protocol("open", open_dialog, dummy);
 
 	/* If we're under GNOME, try registering the system URL handlers. */
 	if (purple_running_gnome() && register_gnome_url_handlers())
 		return;
 
-	gtk_imhtml_class_register_protocol("http://", url_clicked_cb, link_context_menu);
-	gtk_imhtml_class_register_protocol("https://", url_clicked_cb, link_context_menu);
-	gtk_imhtml_class_register_protocol("ftp://", url_clicked_cb, link_context_menu);
-	gtk_imhtml_class_register_protocol("gopher://", url_clicked_cb, link_context_menu);
-	gtk_imhtml_class_register_protocol("mailto:", url_clicked_cb, copy_email_address);
+	gtk_imhtml_class_register_protocol("http",   url_clicked_cb, link_context_menu);
+	gtk_imhtml_class_register_protocol("https",  url_clicked_cb, link_context_menu);
+	gtk_imhtml_class_register_protocol("ftp",    url_clicked_cb, link_context_menu);
+	gtk_imhtml_class_register_protocol("gopher", url_clicked_cb, link_context_menu);
+	gtk_imhtml_class_register_protocol("mailto", url_clicked_cb, copy_email_address);
 }
 
 void pidgin_utils_uninit(void)
 {
-	gtk_imhtml_class_register_protocol("open://", NULL, NULL);
+	gtk_imhtml_class_register_protocol("open", NULL, NULL);
 
 	/* If we have GNOME handlers registered, unregister them. */
 	if (gnome_url_handlers)
@@ -3669,10 +3671,10 @@
 		return;
 	}
 
-	gtk_imhtml_class_register_protocol("http://", NULL, NULL);
-	gtk_imhtml_class_register_protocol("https://", NULL, NULL);
-	gtk_imhtml_class_register_protocol("ftp://", NULL, NULL);
-	gtk_imhtml_class_register_protocol("mailto:", NULL, NULL);
-	gtk_imhtml_class_register_protocol("gopher://", NULL, NULL);
+	gtk_imhtml_class_register_protocol("http",   NULL, NULL);
+	gtk_imhtml_class_register_protocol("https",  NULL, NULL);
+	gtk_imhtml_class_register_protocol("ftp",    NULL, NULL);
+	gtk_imhtml_class_register_protocol("mailto", NULL, NULL);
+	gtk_imhtml_class_register_protocol("gopher", NULL, NULL);
 }