changeset 32133:8e1ec44ede75

Clean up this WebKit stuff. Fix up broken merging, mark unfinished work with FIXME/TODO, and fix this ungodly formatting.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Thu, 08 Sep 2011 22:04:35 +0000
parents 7b1a94adc33f
children 6c814cf24b04
files pidgin/gtkconv.c pidgin/gtklog.c pidgin/gtknotify.c pidgin/gtkwebview.c pidgin/gtkwebview.h pidgin/plugins/adiumthemes/message-style.c pidgin/plugins/adiumthemes/message-style.h pidgin/plugins/adiumthemes/webkit.c pidgin/smileyparser.c pidgin/smileyparser.h
diffstat 10 files changed, 871 insertions(+), 725 deletions(-) [+]
line wrap: on
line diff
--- a/pidgin/gtkconv.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/gtkconv.c	Thu Sep 08 22:04:35 2011 +0000
@@ -175,8 +175,6 @@
 static GList *away_list = NULL;
 static GList *busy_list = NULL;
 static GList *xa_list = NULL;
-static GList *login_list = NULL;
-static GList *logout_list = NULL;
 static GList *offline_list = NULL;
 static GHashTable *prpl_lists = NULL;
 
@@ -316,6 +314,15 @@
 }
 
 static void
+conversation_entry_clear(PidginConversation *gtkconv)
+{
+	GtkIMHtml *imhtml = GTK_IMHTML(gtkconv->entry);
+	gtk_source_undo_manager_begin_not_undoable_action(imhtml->undo_manager);
+	gtk_imhtml_clear(imhtml);
+	gtk_source_undo_manager_end_not_undoable_action(imhtml->undo_manager);
+}
+
+static void
 clear_formatting_cb(GtkIMHtml *imhtml, PidginConversation *gtkconv)
 {
 	default_formatize(gtkconv);
@@ -425,15 +432,16 @@
 }
 
 static void clear_conversation_scrollback_cb(PurpleConversation *conv,
-		void *data)
+                                             void *data)
 {
 	PidginConversation *gtkconv = NULL;
 
 	gtkconv = PIDGIN_CONVERSATION(conv);
 
 	if (PIDGIN_CONVERSATION(conv))
-		webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (gtkconv->webview), "", "");
-}
+		webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(gtkconv->webview), "", "");
+}
+
 static PurpleCmdRet
 clear_command_cb(PurpleConversation *conv,
                  const char *cmd, char **args, char **error, void *data)
@@ -613,7 +621,7 @@
 	account = purple_conversation_get_account(conv);
 
 	if (check_for_and_do_command(conv)) {
-		gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry));
+		conversation_entry_clear(gtkconv);
 		return;
 	}
 
@@ -668,7 +676,7 @@
 	g_free(clean);
 	g_free(buf);
 
-	gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry));
+	conversation_entry_clear(gtkconv);
 	gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE);
 }
 
@@ -797,9 +805,9 @@
 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info)
 {
 	const char *buddy, *message;
-	PidginConversation *gtkconv;
-
-	gtkconv = PIDGIN_CONVERSATION(info->conv);
+	PurpleConversation *conv;
+
+	conv = info->conv;
 
 	if (resp == GTK_RESPONSE_OK) {
 		buddy   = gtk_entry_get_text(GTK_ENTRY(info->entry));
@@ -808,8 +816,8 @@
 		if (!g_ascii_strcasecmp(buddy, ""))
 			return;
 
-		serv_chat_invite(purple_conversation_get_gc(info->conv),
-						 purple_conv_chat_get_id(PURPLE_CONV_CHAT(info->conv)),
+		serv_chat_invite(purple_conversation_get_gc(conv),
+						 purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv)),
 						 message, buddy);
 	}
 
@@ -903,7 +911,6 @@
 	InviteBuddyInfo *info = NULL;
 
 	if (invite_dialog == NULL) {
-		PurpleConnection *gc;
 		PidginWindow *gtkwin;
 		GtkWidget *label;
 		GtkWidget *vbox, *hbox;
@@ -916,7 +923,6 @@
 		info = g_new0(InviteBuddyInfo, 1);
 		info->conv = conv;
 
-		gc        = purple_conversation_get_gc(conv);
 		gtkwin    = pidgin_conv_get_window(gtkconv);
 
 		/* Create the new dialog. */
@@ -1583,8 +1589,19 @@
 static void
 menu_last_said_cb(GtkWidget *w, PidginConversation *gtkconv)
 {
-	/* I don't know what this is! */
-	return;
+/* FIXME: This doesn't work yet, of course... */
+#if 0
+	GtkTextMark *mark;
+	const char *who;
+
+	who = g_object_get_data(G_OBJECT(w), "user_data");
+	mark = get_mark_for_user(gtkconv, who);
+
+	if (mark != NULL)
+		gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(gtkconv->imhtml), mark, 0.1, FALSE, 0, 0);
+	else
+		g_return_if_reached();
+#endif
 }
 
 static GtkWidget *
@@ -1789,10 +1806,13 @@
 		chat_do_im(gtkconv, who);
 	} else if (event->button == 2 && event->type == GDK_BUTTON_PRESS) {
 		/* Move to user's anchor */
-		//GtkTextMark *mark = get_mark_for_user(gtkconv, who);
-
-		//if(mark != NULL)
-		//	gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(gtkconv->imhtml), mark, 0.1, FALSE, 0, 0);
+/* FIXME: This isn't implemented yet. */
+#if 0
+		GtkTextMark *mark = get_mark_for_user(gtkconv, who);
+
+		if(mark != NULL)
+			gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(gtkconv->imhtml), mark, 0.1, FALSE, 0, 0);
+#endif
 	} else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
 		GtkWidget *menu = create_chat_menu (conv, who, gc);
 		gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
@@ -2126,14 +2146,20 @@
 			break;
 
 		case GDK_Page_Up:
- 		case GDK_KP_Page_Up:
-			//gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml));
+		case GDK_KP_Page_Up:
+/* FIXME: Write this. */
+#if 0
+			gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml));
+#endif
 			return TRUE;
 			break;
 
 		case GDK_Page_Down:
- 		case GDK_KP_Page_Down:
-			//gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml));
+		case GDK_KP_Page_Down:
+/* FIXME: Write this. */
+#if 0
+			gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml));
+#endif
 			return TRUE;
 			break;
 
@@ -2243,7 +2269,7 @@
 	entry = GTK_IMHTML(gtkconv->entry);
 	protocol_name = purple_account_get_protocol_name(conv->account);
 	gtk_imhtml_set_protocol_name(entry, protocol_name);
-	//gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol_name);
+	/* FIXME: gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol_name); */
 
 	if (!(conv->features & PURPLE_CONNECTION_HTML))
 		gtk_imhtml_clear_formatting(GTK_IMHTML(gtkconv->entry));
@@ -2608,7 +2634,6 @@
 	PidginConversation *gtkconv = (PidginConversation *)data;
 	PurpleConversation *conv = gtkconv->active_conv;
 	PurpleAccount *account;
-	PurplePluginProtocolInfo *prpl_info = NULL;
 
 	GdkPixbuf *buf;
 	GdkPixbuf *scale;
@@ -3633,7 +3658,41 @@
 static void
 update_typing_message(PidginConversation *gtkconv, const char *message)
 {
-	/* this is not handled at all */
+	/* FIXME: this is not handled at all */
+#if 0
+	GtkTextBuffer *buffer;
+	GtkTextMark *stmark, *enmark;
+
+	if (g_object_get_data(G_OBJECT(gtkconv->imhtml), "disable-typing-notification"))
+		return;
+
+	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml));
+	stmark = gtk_text_buffer_get_mark(buffer, "typing-notification-start");
+	enmark = gtk_text_buffer_get_mark(buffer, "typing-notification-end");
+	if (stmark && enmark) {
+		GtkTextIter start, end;
+		gtk_text_buffer_get_iter_at_mark(buffer, &start, stmark);
+		gtk_text_buffer_get_iter_at_mark(buffer, &end, enmark);
+		gtk_text_buffer_delete_mark(buffer, stmark);
+		gtk_text_buffer_delete_mark(buffer, enmark);
+		gtk_text_buffer_delete(buffer, &start, &end);
+	} else if (message && *message == '\n' && message[1] == ' ' && message[2] == '\0')
+		message = NULL;
+
+#ifdef RESERVE_LINE
+	if (!message)
+		message = "\n ";   /* The blank space is required to avoid a GTK+/Pango bug */
+#endif
+
+	if (message) {
+		GtkTextIter iter;
+		gtk_text_buffer_get_end_iter(buffer, &iter);
+		gtk_text_buffer_create_mark(buffer, "typing-notification-start", &iter, TRUE);
+		gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, message, -1, "TYPING-NOTIFICATION", NULL);
+		gtk_text_buffer_get_end_iter(buffer, &iter);
+		gtk_text_buffer_create_mark(buffer, "typing-notification-end", &iter, TRUE);
+	}
+#endif
 }
 
 static void
@@ -4979,17 +5038,17 @@
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_EMBLEM_COLUMN, NULL);
 	g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL);
 
-	/* Setup the gtkimhtml widget */
+	/* Setup the webkit widget */
 	/* TODO: create a pidgin_create_webview() function in utils*/
-	webview_sw = gtk_scrolled_window_new (NULL, NULL);
+	webview_sw = gtk_scrolled_window_new(NULL, NULL);
 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(webview_sw), GTK_SHADOW_IN);
-        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (webview_sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
-	gtkconv->webview = gtk_webview_new ();
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(webview_sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+	gtkconv->webview = gtk_webview_new();
 	gtk_webview_set_vadjustment(GTK_WEBVIEW(gtkconv->webview),
 			gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(webview_sw)));
-	gtk_container_add (GTK_CONTAINER (webview_sw), gtkconv->webview);
-	
+	gtk_container_add(GTK_CONTAINER(webview_sw), gtkconv->webview);
+
 	gtk_widget_set_size_request(gtkconv->webview, -1, 0);
 
 	if (chat) {
@@ -5737,11 +5796,8 @@
 	PidginConversation *gtkconv;
 	PurpleConnection *gc;
 	PurpleAccount *account;
-	PurplePluginProtocolInfo *prpl_info;
 	int gtk_font_options = 0;
 	int gtk_font_options_all = 0;
-	int max_scrollback_lines;
-	int line_count;
 	char buf2[BUF_LONG];
 	gboolean show_date;
 	char *mdate;
@@ -5809,12 +5865,9 @@
 	}
 	length = strlen(displaying) + 1;
 
-
-	prpl_info = gc ? PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl) : NULL;
-
 	/* if the buffer is not empty add a <br> */
-	if (!gtk_webview_is_empty (GTK_WEBVIEW(gtkconv->webview)))
-		gtk_webview_append_html (GTK_WEBVIEW(gtkconv->webview), "<br />");
+	if (!gtk_webview_is_empty(GTK_WEBVIEW(gtkconv->webview)))
+		gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<br />");
 
 	/* First message in a conversation. */
 	if (gtkconv->newday == 0)
@@ -5870,7 +5923,7 @@
 
 	/* TODO: These colors should not be hardcoded so log.c can use them */
 	if (flags & PURPLE_MESSAGE_RAW) {
-		gtk_webview_append_html (GTK_WEBVIEW(gtkconv->webview), message);
+		gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), message);
 	} else if (flags & PURPLE_MESSAGE_SYSTEM) {
 		g_snprintf(buf2, sizeof(buf2),
 			   "<font %s><font size=\"2\"><span class='timestamp'>%s</span></font><b>%s</b></font>",
@@ -5985,10 +6038,10 @@
 
 		g_free(str);
 
-		if(gc){
+		if (gc) {
 			char *pre = g_strdup_printf("<font %s>", sml_attrib ? sml_attrib : "");
 			char *post = "</font>";
-			with_font_tag = g_strdup_printf ("%s%s%s", pre, new_message, post);
+			with_font_tag = g_strdup_printf("%s%s%s", pre, new_message, post);
 			g_free(pre);
 		} else
 			with_font_tag = g_memdup(new_message, length);
@@ -6110,7 +6163,6 @@
 	GtkTreeIter iter;
 	GtkTreeModel *model;
 	GtkTextTag *tag;
-	int f = 1;
 
 	chat    = PURPLE_CONV_CHAT(conv);
 	gtkconv = PIDGIN_CONVERSATION(conv);
@@ -6904,7 +6956,6 @@
 	int size = 0;
 
 	PurpleAccount *account;
-	PurplePluginProtocolInfo *prpl_info = NULL;
 
 	PurpleBuddyIcon *icon;
 
@@ -6921,8 +6972,6 @@
 		return;
 
 	account = purple_conversation_get_account(conv);
-	if(account && account->gc)
-		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl);
 
 	/* Remove the current icon stuff */
 	children = gtk_container_get_children(GTK_CONTAINER(gtkconv->u.im->icon_container));
@@ -6971,7 +7020,6 @@
 
 	if (data == NULL) {
 		icon = purple_conv_im_get_icon(PURPLE_CONV_IM(conv));
-
 		if (icon == NULL)
 		{
 			gtk_widget_set_size_request(gtkconv->u.im->icon_container,
@@ -6980,7 +7028,6 @@
 		}
 
 		data = purple_buddy_icon_get_data(icon, &len);
-
 		if (data == NULL)
 		{
 			gtk_widget_set_size_request(gtkconv->u.im->icon_container,
@@ -7248,8 +7295,11 @@
 		        GTK_CHECK_MENU_ITEM(win->menu.show_timestamps),
 		        (gboolean)GPOINTER_TO_INT(value));
 
-		gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->webview),
+/* FIXME: Use WebKit version of this. */
+#if 0
+		gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
 			(gboolean)GPOINTER_TO_INT(value));
+#endif
 	}
 }
 
@@ -9879,12 +9929,9 @@
 static void
 conv_placement_by_group(PidginConversation *conv)
 {
-	PurpleConversationType type;
 	PurpleGroup *group = NULL;
 	GList *wl, *cl;
 
-	type = purple_conversation_get_type(conv->active_conv);
-
 	group = conv_get_group(conv);
 
 	/* Go through the list of IMs and find one with this group. */
--- a/pidgin/gtklog.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/gtklog.c	Thu Sep 08 22:04:35 2011 +0000
@@ -130,7 +130,7 @@
 		populate_log_tree(lv);
 		g_free(lv->search);
 		lv->search = NULL;
-		webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(lv->web_view)); 
+		webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(lv->web_view));
 		select_first_log(lv);
 		return;
 	}
@@ -138,7 +138,7 @@
 	if (lv->search != NULL && !strcmp(lv->search, search_term))
 	{
 		/* Searching for the same term acts as "Find Next" */
-		webkit_web_view_search_text (WEBKIT_WEB_VIEW(lv->web_view), lv->search, FALSE, TRUE, TRUE);
+		webkit_web_view_search_text(WEBKIT_WEB_VIEW(lv->web_view), lv->search, FALSE, TRUE, TRUE);
 		return;
 	}
 
@@ -148,7 +148,7 @@
 	lv->search = g_strdup(search_term);
 
 	gtk_tree_store_clear(lv->treestore);
-	webkit_web_view_open (WEBKIT_WEB_VIEW (lv->web_view), "about:blank"); /* clear the view */
+	webkit_web_view_open(WEBKIT_WEB_VIEW(lv->web_view), "about:blank"); /* clear the view */
 
 	for (logs = lv->logs; logs != NULL; logs = logs->next) {
 		char *read = purple_log_read((PurpleLog*)logs->data, NULL);
@@ -419,9 +419,9 @@
 static gboolean search_find_cb(gpointer data)
 {
 	PidginLogViewer *viewer = data;
-	webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (viewer->web_view), viewer->search, FALSE, 0);
-	webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (viewer->web_view), TRUE);
-	webkit_web_view_search_text (WEBKIT_WEB_VIEW (viewer->web_view), viewer->search, FALSE, TRUE, TRUE);
+	webkit_web_view_mark_text_matches(WEBKIT_WEB_VIEW(viewer->web_view), viewer->search, FALSE, 0);
+	webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(viewer->web_view), TRUE);
+	webkit_web_view_search_text(WEBKIT_WEB_VIEW(viewer->web_view), viewer->search, FALSE, TRUE, TRUE);
 	return FALSE;
 }
 
@@ -462,11 +462,11 @@
 	read = purple_log_read(log, &flags);
 	viewer->flags = flags;
 
-	webkit_web_view_open (WEBKIT_WEB_VIEW(viewer->web_view), "about:blank");
+	webkit_web_view_open(WEBKIT_WEB_VIEW(viewer->web_view), "about:blank");
 
 	purple_signal_emit(pidgin_log_get_handle(), "log-displaying", viewer, log);
 
-	webkit_web_view_load_html_string (WEBKIT_WEB_VIEW(viewer->web_view), read, "");
+	webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(viewer->web_view), read, "");
 	g_free(read);
 
 	if (viewer->search != NULL) {
@@ -614,7 +614,7 @@
 	col = gtk_tree_view_column_new_with_attributes ("time", rend, "markup", 0, NULL);
 	gtk_tree_view_append_column (GTK_TREE_VIEW(lv->treeview), col);
 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (lv->treeview), FALSE);
-	gtk_paned_add1(GTK_PANED(pane), 
+	gtk_paned_add1(GTK_PANED(pane),
 		pidgin_make_scrollable(lv->treeview, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS, GTK_SHADOW_IN, -1, -1));
 
 	populate_log_tree(lv);
@@ -649,7 +649,7 @@
 	gtk_paned_add2(GTK_PANED(pane), vbox);
 
 	/* Viewer ************/
-	/*
+	/* FIXME:
 	sw = gtk_scrolled_window_new (NULL, NULL);
 	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
 	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
--- a/pidgin/gtknotify.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/gtknotify.c	Thu Sep 08 22:04:35 2011 +0000
@@ -856,11 +856,11 @@
 
 	/* Add the webview */
 	scrolled_window = gtk_scrolled_window_new (NULL, NULL);
-        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
-	web_view = gtk_webview_new ();
-	gtk_container_add (GTK_CONTAINER (scrolled_window), web_view);
+	web_view = gtk_webview_new();
+	gtk_container_add(GTK_CONTAINER(scrolled_window), web_view);
 
 	gtk_widget_set_name(web_view, "pidgin_notify_webview");
 	gtk_widget_set_size_request(web_view, 300, 250);
@@ -878,7 +878,7 @@
 
 	/* Make sure URLs are clickable */
 	linked_text = purple_markup_linkify(text);
-	webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (web_view), linked_text, "");
+	webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(web_view), linked_text, "");
 	g_free(linked_text);
 
 	g_object_set_data(G_OBJECT(window), "webview-widget", web_view);
@@ -1138,9 +1138,8 @@
 	if (pinfo != NULL) {
 		GtkWidget *webview = g_object_get_data(G_OBJECT(pinfo->window), "webview-widget");
 		char *linked_text = purple_markup_linkify(info);
-		g_assert (webview);
-		printf ("%s\n", linked_text);
-		gtk_webview_load_html_string_with_imgstore (GTK_WEBVIEW (webview), linked_text);
+		g_assert(webview);
+		gtk_webview_load_html_string_with_imgstore(GTK_WEBVIEW(webview), linked_text);
 		g_free(linked_text);
 		g_free(key);
 		ui_handle = pinfo->window;
@@ -1640,7 +1639,7 @@
 	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
 	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(vbox), 
+	gtk_box_pack_start(GTK_BOX(vbox),
 		pidgin_make_scrollable(spec_dialog->treeview, GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS, GTK_SHADOW_IN, -1, -1),
 		TRUE, TRUE, 2);
 
--- a/pidgin/gtkwebview.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/gtkwebview.c	Thu Sep 08 22:04:35 2011 +0000
@@ -10,7 +10,7 @@
  * source distribution.
  *
  * This program is free software; you can redistribute it and/or modify
- * under the terms of the GNU General Public License as published by
+ * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
@@ -53,82 +53,85 @@
 	GTimer *scroll_time;
 };
 
-GtkWidget* gtk_webview_new (void)
+GtkWidget *
+gtk_webview_new(void)
 {
-	GtkWebView* ret = GTK_WEBVIEW (g_object_new(gtk_webview_get_type(), NULL));
-	return GTK_WIDGET (ret);
+	GtkWebView* ret = GTK_WEBVIEW(g_object_new(gtk_webview_get_type(), NULL));
+	return GTK_WIDGET(ret);
 }
 
-static char*
-get_image_filename_from_id (GtkWebView* view, int id)
+static char *
+get_image_filename_from_id(GtkWebView* view, int id)
 {
 	char *filename = NULL;
 	FILE *file;
 	PurpleStoredImage* img;
 
 	if (!view->priv->images)
-		view->priv->images = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
-	
-	filename = (char*) g_hash_table_lookup (view->priv->images, GINT_TO_POINTER (id));
-	if (filename) return filename;
-			
+		view->priv->images = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free);
+
+	filename = (char *)g_hash_table_lookup(view->priv->images, GINT_TO_POINTER(id));
+	if (filename)
+		return filename;
+
 	/* else get from img store */
-	file = purple_mkstemp (&filename, TRUE);
+	file = purple_mkstemp(&filename, TRUE);
 
-	img = purple_imgstore_find_by_id (id);
+	img = purple_imgstore_find_by_id(id);
 
-	fwrite (purple_imgstore_get_data (img), purple_imgstore_get_size (img), 1, file);
-	g_hash_table_insert (view->priv->images, GINT_TO_POINTER (id), filename);
-	fclose (file);
+	fwrite(purple_imgstore_get_data(img), purple_imgstore_get_size(img), 1, file);
+	g_hash_table_insert(view->priv->images, GINT_TO_POINTER(id), filename);
+	fclose(file);
 	return filename;
 }
 
 static void
-clear_single_image (gpointer key, gpointer value, gpointer userdata)
+clear_single_image(gpointer key, gpointer value, gpointer userdata)
 {
-	g_unlink ((char*) value);
+	g_unlink((char *)value);
 }
 
 static void
-clear_images (GtkWebView* view)
+clear_images(GtkWebView *view)
 {
-	if (!view->priv->images) return;
-	g_hash_table_foreach (view->priv->images, clear_single_image, NULL);
-	g_hash_table_unref (view->priv->images);
+	if (!view->priv->images)
+		return;
+	g_hash_table_foreach(view->priv->images, clear_single_image, NULL);
+	g_hash_table_unref(view->priv->images);
 }
 
 /*
  * Replace all <img id=""> tags with <img src="">. I hoped to never
- * write any HTML parsing code, but I'm forced to do this, until 
+ * write any HTML parsing code, but I'm forced to do this, until
  * purple changes the way it works.
  */
-static char*
-replace_img_id_with_src (GtkWebView *view, const char* html)
+static char *
+replace_img_id_with_src(GtkWebView *view, const char *html)
 {
-	GString *buffer = g_string_sized_new (strlen (html));
+	GString *buffer = g_string_sized_new(strlen(html));
 	const char* cur = html;
 	char *id;
 	int nid;
 
 	while (*cur) {
-		const char* img = strstr (cur, "<img");
+		const char *img = strstr(cur, "<img");
 		if (!img) {
-			g_string_append (buffer, cur);
+			g_string_append(buffer, cur);
 			break;
 		} else
-			g_string_append_len (buffer, cur, img - cur);
+			g_string_append_len(buffer, cur, img - cur);
 
-		cur = strstr (img, "/>");
+		cur = strstr(img, "/>");
 		if (!cur)
-			cur = strstr (img, ">");
+			cur = strstr(img, ">");
 
 		if (!cur) { /* invalid html? */
-			g_string_printf (buffer, "%s", html);
+			g_string_printf(buffer, "%s", html);
 			break;
 		}
 
-		if (strstr (img, "src=") || !strstr (img, "id=")) {
-			g_string_printf (buffer, "%s", html);
+		if (strstr(img, "src=") || !strstr(img, "id=")) {
+			g_string_printf(buffer, "%s", html);
 			break;
 		}
 
@@ -138,46 +141,46 @@
 		 * '=' cannot appear in parameters.
 		 */
 
-		id = strstr (img, "id=") + 3; 
+		id = strstr(img, "id=") + 3;
 
 		/* *id can't be \0, since a ">" appears after this */
-		if (isdigit (*id)) 
-			nid = atoi (id);
-		else 
-			nid = atoi (id+1);
+		if (isdigit(*id))
+			nid = atoi(id);
+		else
+			nid = atoi(id + 1);
 
 		/* let's dump this, tag and then dump the src information */
-		g_string_append_len (buffer, img, cur - img);
+		g_string_append_len(buffer, img, cur - img);
 
-		g_string_append_printf (buffer, " src='file://%s' ", get_image_filename_from_id (view, nid));
+		g_string_append_printf(buffer, " src='file://%s' ", get_image_filename_from_id(view, nid));
 	}
 
-	return g_string_free (buffer, FALSE);
+	return g_string_free(buffer, FALSE);
 }
 
 static void
-gtk_webview_finalize (GObject *view)
+gtk_webview_finalize(GObject *view)
 {
 	gpointer temp;
-	
-	while ((temp = g_queue_pop_head (GTK_WEBVIEW(view)->priv->js_queue)))
-		g_free (temp);
-	g_queue_free (GTK_WEBVIEW(view)->priv->js_queue);
 
-	clear_images (GTK_WEBVIEW (view));
-	g_free (GTK_WEBVIEW(view)->priv);
-	G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT(view));
+	while ((temp = g_queue_pop_head(GTK_WEBVIEW(view)->priv->js_queue)))
+		g_free(temp);
+	g_queue_free(GTK_WEBVIEW(view)->priv->js_queue);
+
+	clear_images(GTK_WEBVIEW(view));
+	g_free(GTK_WEBVIEW(view)->priv);
+	G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(view));
 }
 
 static void
-gtk_webview_class_init (GtkWebViewClass *klass, gpointer userdata)
+gtk_webview_class_init(GtkWebViewClass *klass, gpointer userdata)
 {
-	parent_class = g_type_class_ref (webkit_web_view_get_type ());
-	G_OBJECT_CLASS (klass)->finalize = gtk_webview_finalize;
+	parent_class = g_type_class_ref(webkit_web_view_get_type());
+	G_OBJECT_CLASS(klass)->finalize = gtk_webview_finalize;
 }
 
 static gboolean
-webview_link_clicked (WebKitWebView *view,
+webview_link_clicked(WebKitWebView *view,
 		      WebKitWebFrame *frame,
 		      WebKitNetworkRequest *request,
 		      WebKitWebNavigationAction *navigation_action,
@@ -186,13 +189,13 @@
 	const gchar *uri;
 	WebKitWebNavigationReason reason;
 
-	uri = webkit_network_request_get_uri (request);
+	uri = webkit_network_request_get_uri(request);
 	reason = webkit_web_navigation_action_get_reason(navigation_action);
 
 	if (reason == WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) {
 		/* the gtk imhtml way was to create an idle cb, not sure
 		 * why, so right now just using purple_notify_uri directly */
-		purple_notify_uri (NULL, uri);
+		purple_notify_uri(NULL, uri);
 	}
 
 	webkit_web_policy_decision_use(policy_decision);
@@ -201,129 +204,131 @@
 }
 
 static gboolean
-process_js_script_queue (GtkWebView *view)
+process_js_script_queue(GtkWebView *view)
 {
 	char *script;
-	if (view->priv->is_loading) return FALSE; /* we will be called when loaded */
-	if (!view->priv->js_queue || g_queue_is_empty (view->priv->js_queue))
+	if (view->priv->is_loading)
+		return FALSE; /* we will be called when loaded */
+	if (!view->priv->js_queue || g_queue_is_empty(view->priv->js_queue))
 		return FALSE; /* nothing to do! */
 
-	script = g_queue_pop_head (view->priv->js_queue);
-	webkit_web_view_execute_script (WEBKIT_WEB_VIEW(view), script);
-	g_free (script);
+	script = g_queue_pop_head(view->priv->js_queue);
+	webkit_web_view_execute_script(WEBKIT_WEB_VIEW(view), script);
+	g_free(script);
 
 	return TRUE; /* there may be more for now */
 }
 
 static void
-webview_load_started (WebKitWebView *view,
+webview_load_started(WebKitWebView *view,
 		      WebKitWebFrame *frame,
 		      gpointer userdata)
 {
 	/* is there a better way to test for is_loading? */
-	GTK_WEBVIEW(view)->priv->is_loading = true;
+	GTK_WEBVIEW(view)->priv->is_loading = TRUE;
 }
 
 static void
-webview_load_finished (WebKitWebView *view,
+webview_load_finished(WebKitWebView *view,
 		       WebKitWebFrame *frame,
 		       gpointer userdata)
 {
-	GTK_WEBVIEW(view)->priv->is_loading = false;
-	g_idle_add ((GSourceFunc) process_js_script_queue, view);
+	GTK_WEBVIEW(view)->priv->is_loading = FALSE;
+	g_idle_add((GSourceFunc)process_js_script_queue, view);
 }
 
 void
-gtk_webview_safe_execute_script (GtkWebView *view, const char* script)
+gtk_webview_safe_execute_script(GtkWebView *view, const char *script)
 {
-	g_queue_push_tail (view->priv->js_queue, g_strdup (script));
-	g_idle_add ((GSourceFunc)process_js_script_queue, view);
+	g_queue_push_tail(view->priv->js_queue, g_strdup(script));
+	g_idle_add((GSourceFunc)process_js_script_queue, view);
 }
 
 static void
-gtk_webview_init (GtkWebView *view, gpointer userdata)
+gtk_webview_init(GtkWebView *view, gpointer userdata)
 {
-	view->priv = g_new0 (struct GtkWebViewPriv, 1);
-	g_signal_connect (view, "navigation-policy-decision-requested",
-			  G_CALLBACK (webview_link_clicked),
+	view->priv = g_new0(struct GtkWebViewPriv, 1);
+	g_signal_connect(view, "navigation-policy-decision-requested",
+			  G_CALLBACK(webview_link_clicked),
 			  view);
 
-	g_signal_connect (view, "load-started",
-			  G_CALLBACK (webview_load_started),
+	g_signal_connect(view, "load-started",
+			  G_CALLBACK(webview_load_started),
 			  view);
 
-	g_signal_connect (view, "load-finished",
-			  G_CALLBACK (webview_load_finished),
+	g_signal_connect(view, "load-finished",
+			  G_CALLBACK(webview_load_finished),
 			  view);
 
 	view->priv->empty = TRUE;
-	view->priv->js_queue = g_queue_new ();
+	view->priv->js_queue = g_queue_new();
 }
 
 
 void
-gtk_webview_load_html_string_with_imgstore (GtkWebView* view, const char* html)
+gtk_webview_load_html_string_with_imgstore(GtkWebView *view, const char *html)
 {
-	char* html_imged;
-	
-	clear_images (view);
-	html_imged = replace_img_id_with_src (view, html);
-	printf ("%s\n", html_imged);
-	webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (view), html_imged, "file:///");
-	g_free (html_imged);
+	char *html_imged;
+
+	clear_images(view);
+	html_imged = replace_img_id_with_src(view, html);
+	webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(view), html_imged, "file:///");
+	g_free(html_imged);
 }
 
-char *gtk_webview_quote_js_string(const char *text)
+char *
+gtk_webview_quote_js_string(const char *text)
 {
-        GString *str = g_string_new("\"");
-        const char *cur = text;
+	GString *str = g_string_new("\"");
+	const char *cur = text;
 
-        while (cur && *cur) {
-                switch (*cur) {
-                case '\\':
-                        g_string_append(str, "\\\\");
-                        break;
-                case '\"':
-                        g_string_append(str, "\\\"");
-                        break;
-                case '\r':
-                        g_string_append(str, "<br/>");
-                        break;
-                case '\n':
-                        break;
-                default:
-			g_string_append_c(str, *cur);
+	while (cur && *cur) {
+		switch (*cur) {
+			case '\\':
+				g_string_append(str, "\\\\");
+				break;
+			case '\"':
+				g_string_append(str, "\\\"");
+				break;
+			case '\r':
+				g_string_append(str, "<br/>");
+				break;
+			case '\n':
+				break;
+			default:
+				g_string_append_c(str, *cur);
 		}
-		cur ++;
+		cur++;
 	}
-	g_string_append_c (str, '"');
-	return g_string_free (str, FALSE);
+	g_string_append_c(str, '"');
+	return g_string_free(str, FALSE);
 }
 
-void gtk_webview_set_vadjustment(GtkWebView *webview, GtkAdjustment *vadj)
+void
+gtk_webview_set_vadjustment(GtkWebView *webview, GtkAdjustment *vadj)
 {
 	webview->priv->vadj = vadj;
 }
 
-/* this is a "hack", my plan is to eventually handle this 
+/* this is a "hack", my plan is to eventually handle this
  * correctly using a signals and a plugin: the plugin will have
  * the information as to what javascript function to call. It seems
  * wrong to hardcode that here.
  */
 void
-gtk_webview_append_html (GtkWebView* view, const char* html)
+gtk_webview_append_html(GtkWebView *view, const char *html)
 {
-	char* escaped = gtk_webview_quote_js_string (html);
-	char* script = g_strdup_printf ("document.write(%s)", escaped);
-	printf ("script: %s\n", script);
-	webkit_web_view_execute_script (WEBKIT_WEB_VIEW (view), script);
+	char *escaped = gtk_webview_quote_js_string(html);
+	char *script = g_strdup_printf("document.write(%s)", escaped);
+	webkit_web_view_execute_script(WEBKIT_WEB_VIEW(view), script);
 	view->priv->empty = FALSE;
 	gtk_webview_scroll_to_end(view, TRUE);
-	g_free (script);
-	g_free (escaped);
+	g_free(script);
+	g_free(escaped);
 }
 
-gboolean gtk_webview_is_empty (GtkWebView *view)
+gboolean
+gtk_webview_is_empty(GtkWebView *view)
 {
 	return view->priv->empty;
 }
@@ -336,7 +341,8 @@
  *
  * @return TRUE if the window needs to be scrolled further, FALSE if we're at the bottom.
  */
-static gboolean smooth_scroll_cb(gpointer data)
+static gboolean
+smooth_scroll_cb(gpointer data)
 {
 	struct GtkWebViewPriv *priv = data;
 	GtkAdjustment *adj = priv->vadj;
@@ -360,18 +366,20 @@
 	return TRUE;
 }
 
-static gboolean scroll_idle_cb(gpointer data)
+static gboolean
+scroll_idle_cb(gpointer data)
 {
 	struct GtkWebViewPriv *priv = data;
 	GtkAdjustment *adj = priv->vadj;
-	if(adj) {
+	if (adj) {
 		gtk_adjustment_set_value(adj, adj->upper - adj->page_size);
 	}
 	priv->scroll_src = 0;
 	return FALSE;
 }
 
-void gtk_webview_scroll_to_end(GtkWebView *webview, gboolean smooth)
+void
+gtk_webview_scroll_to_end(GtkWebView *webview, gboolean smooth)
 {
 	struct GtkWebViewPriv *priv = webview->priv;
 	if (priv->scroll_time)
@@ -387,24 +395,26 @@
 	}
 }
 
-GType gtk_webview_get_type (void)
+GType
+gtk_webview_get_type(void)
 {
 	static GType mview_type = 0;
-	if (G_UNLIKELY (mview_type == 0)) {
+	if (G_UNLIKELY(mview_type == 0)) {
 		static const GTypeInfo mview_info = {
-			sizeof (GtkWebViewClass),
+			sizeof(GtkWebViewClass),
 			NULL,
 			NULL,
 			(GClassInitFunc) gtk_webview_class_init,
 			NULL,
 			NULL,
-			sizeof (GtkWebView),
+			sizeof(GtkWebView),
 			0,
 			(GInstanceInitFunc) gtk_webview_init,
 			NULL
 		};
-		mview_type = g_type_register_static(webkit_web_view_get_type (),
+		mview_type = g_type_register_static(webkit_web_view_get_type(),
 				"GtkWebView", &mview_info, 0);
 	}
 	return mview_type;
 }
+
--- a/pidgin/gtkwebview.h	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/gtkwebview.h	Thu Sep 08 22:04:35 2011 +0000
@@ -3,12 +3,14 @@
  * @ingroup pidgin
  */
 
-/* Pidgin is the legal property of its developers, whose names are too numerous
+/* pidgin
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
  * This program is free software; you can redistribute it and/or modify
- * under the terms of the GNU General Public License as published by
+ * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
@@ -20,6 +22,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
  */
 
 #ifndef _PIDGIN_WEBVIEW_H_
@@ -45,7 +48,7 @@
 	WebKitWebView webkit_web_view;
 
 	/*< private >*/
-	struct GtkWebViewPriv* priv;
+	struct GtkWebViewPriv *priv;
 };
 
 typedef struct _GtkWebView GtkWebView;
@@ -63,14 +66,14 @@
  *
  * @return the GType for GtkWebView widget
  */
-GType gtk_webview_get_type (void);
+GType gtk_webview_get_type(void);
 
 /**
  * Create a new GtkWebView object
  *
  * @return a GtkWidget corresponding to the GtkWebView object
  */
-GtkWidget* gtk_webview_new (void);
+GtkWidget *gtk_webview_new(void);
 
 /**
  * Set the vertical adjustment for the GtkWebView.
@@ -87,7 +90,7 @@
  * @param webview The GtkWebView object
  * @param markup  The html markup to append
  */
-void gtk_webview_append_html (GtkWebView *webview, const char* markup);
+void gtk_webview_append_html(GtkWebView *webview, const char *markup);
 
 /**
  * Rather than use webkit_webview_load_string, this routine
@@ -97,47 +100,48 @@
  * @param webview The GtkWebView object
  * @param html    The HTML content to load
  */
-void gtk_webview_load_html_string_with_imgstore (GtkWebView* webview, const char* html);
+void gtk_webview_load_html_string_with_imgstore(GtkWebView *webview, const char *html);
 
 /**
- * (To be changed, right now it just tests whether an append has been
+ * FIXME: (To be changed, right now it just tests whether an append has been
  * called since the last clear or since the Widget was created. So it
  * does not test for load_string's called in between.
  *
  * @param webview The GtkWebView object
- * 
+ *
  * @return gboolean indicating whether the webview is empty.
  */
-gboolean gtk_webview_is_empty (GtkWebView *webview);
+gboolean gtk_webview_is_empty(GtkWebView *webview);
 
 /**
  * Execute the JavaScript only after the webkit_webview_load_string
  * loads completely. We also guarantee that the scripts are executed
- * in the order they are called here.This is useful to avoid race
- * conditions when calls JS functions immediately after opening the
+ * in the order they are called here. This is useful to avoid race
+ * conditions when calling JS functions immediately after opening the
  * page.
  *
  * @param webview the GtkWebView object
  * @param script   the script to execute
  */
-void gtk_webview_safe_execute_script (GtkWebView *webview, const char* script);
+void gtk_webview_safe_execute_script(GtkWebView *webview, const char *script);
 
 /**
- * A convenience routine to quote a string for use as a JavaScript 
+ * A convenience routine to quote a string for use as a JavaScript
  * string. For instance, "hello 'world'" becomes "'hello \\'world\\''"
  *
  * @param str The string to escape and quote
  *
  * @return the quoted string.
  */
-char* gtk_webview_quote_js_string (const char* str);
+char *gtk_webview_quote_js_string(const char *str);
 
 /**
  * Scrolls the Webview to the end of its contents.
  *
  * @param webview The GtkWebView.
- * @param smoth   A boolean indicating if smooth scrolling should be used.
+ * @param smooth   A boolean indicating if smooth scrolling should be used.
  */
 void gtk_webview_scroll_to_end(GtkWebView *webview, gboolean smooth);
 
 #endif /* _PIDGIN_WEBVIEW_H_ */
+
--- a/pidgin/plugins/adiumthemes/message-style.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/plugins/adiumthemes/message-style.c	Thu Sep 08 22:04:35 2011 +0000
@@ -1,21 +1,23 @@
-/*
- * Adium Message Styles
- * Copyright (C) 2009  Arnold Noronha <arnstein87@gmail.com>
+/* pidgin
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
  */
 
 #include "message-style.h"
@@ -28,42 +30,42 @@
 #include <util.h>
 
 static void
-glist_free_all_string (GList *list)
+glist_free_all_string(GList *list)
 {
 	GList *first = list;
-	for (; list; list = g_list_next (list)) 
-		g_free (list->data);
-	g_list_free (first);
+	for (; list; list = g_list_next(list))
+		g_free(list->data);
+	g_list_free(first);
 }
 
-static
-PidginMessageStyle* pidgin_message_style_new (const char* styledir)
+static PidginMessageStyle *
+pidgin_message_style_new(const char *styledir)
 {
-	PidginMessageStyle* ret = g_new0 (PidginMessageStyle, 1);
+	PidginMessageStyle *ret = g_new0(PidginMessageStyle, 1);
 
 	ret->ref_counter = 1;
-	ret->style_dir = g_strdup (styledir);
-	
+	ret->style_dir = g_strdup(styledir);
+
 	return ret;
 }
 
 /**
- * deallocate any memory used for info.plist options 
+ * deallocate any memory used for info.plist options
  */
 static void
-pidgin_message_style_unset_info_plist (PidginMessageStyle *style)
+pidgin_message_style_unset_info_plist(PidginMessageStyle *style)
 {
 	style->message_view_version = 0;
-	g_free (style->cf_bundle_name);
+	g_free(style->cf_bundle_name);
 	style->cf_bundle_name = NULL;
 
-	g_free (style->cf_bundle_identifier);
+	g_free(style->cf_bundle_identifier);
 	style->cf_bundle_identifier = NULL;
 
-	g_free (style->cf_bundle_get_info_string);
+	g_free(style->cf_bundle_get_info_string);
 	style->cf_bundle_get_info_string = NULL;
 
-	g_free (style->default_font_family);
+	g_free(style->default_font_family);
 	style->default_font_family = NULL;
 
 	style->default_font_size = 0;
@@ -72,112 +74,127 @@
 	style->default_background_is_transparent = FALSE;
 	style->disable_custom_background = FALSE;
 
-	g_free (style->default_background_color);
+	g_free(style->default_background_color);
 	style->default_background_color = NULL;
-	
+
 	style->allow_text_colors = TRUE;
-	
-	g_free (style->image_mask);
+
+	g_free(style->image_mask);
 	style->image_mask = NULL;
-	g_free (style->default_variant);
+	g_free(style->default_variant);
 	style->default_variant = NULL;
 }
 
 
-void pidgin_message_style_unref (PidginMessageStyle *style)
+void
+pidgin_message_style_unref(PidginMessageStyle *style)
 {
-	if (!style) return;
+	if (!style)
+		return;
 	g_assert (style->ref_counter > 0);
 
 	style->ref_counter--;
-	if (style->ref_counter) return;
+	if (style->ref_counter)
+		return;
+
+	g_free(style->style_dir);
+	g_free(style->template_path);
 
-	g_free (style->style_dir);
-	g_free (style->template_path);
-	
-	g_free (style->template_html);
-	g_free (style->incoming_content_html);
-	g_free (style->outgoing_content_html);
-	g_free (style->outgoing_next_content_html);
-	g_free (style->status_html);
-	g_free (style->basestyle_css);
+	g_free(style->template_html);
+	g_free(style->incoming_content_html);
+	g_free(style->outgoing_content_html);
+	g_free(style->outgoing_next_content_html);
+	g_free(style->status_html);
+	g_free(style->basestyle_css);
 
-	g_free (style);
+	g_free(style);
 
-	pidgin_message_style_unset_info_plist (style);
+	pidgin_message_style_unset_info_plist(style);
 }
 
 void
-pidgin_message_style_save_state (const PidginMessageStyle *style)
+pidgin_message_style_save_state(const PidginMessageStyle *style)
 {
-	char *prefname = g_strdup_printf ("/plugins/gtk/adiumthemes/%s", style->cf_bundle_identifier);
-	char *variant = g_strdup_printf ("%s/variant", prefname);
+	char *prefname = g_strdup_printf("/plugins/gtk/adiumthemes/%s", style->cf_bundle_identifier);
+	char *variant = g_strdup_printf("%s/variant", prefname);
 
-	purple_debug_info ("webkit", "saving state with variant %s\n", style->variant);
-	purple_prefs_add_none (prefname);
-	purple_prefs_add_string (variant, "");
-	purple_prefs_set_string (variant, style->variant);
-	
-	g_free (prefname);
-	g_free (variant);
+	purple_debug_info("webkit", "saving state with variant %s\n", style->variant);
+	purple_prefs_add_none(prefname);
+	purple_prefs_add_string(variant, "");
+	purple_prefs_set_string(variant, style->variant);
+
+	g_free(prefname);
+	g_free(variant);
 }
 
 static void
-pidgin_message_style_load_state (PidginMessageStyle *style)
+pidgin_message_style_load_state(PidginMessageStyle *style)
 {
-	char *prefname = g_strdup_printf ("/plugins/gtk/adiumthemes/%s", style->cf_bundle_identifier);
-	char *variant = g_strdup_printf ("%s/variant", prefname);
+	char *prefname = g_strdup_printf("/plugins/gtk/adiumthemes/%s", style->cf_bundle_identifier);
+	char *variant = g_strdup_printf("%s/variant", prefname);
+
+	const char* value = purple_prefs_get_string(variant);
+	gboolean changed = !style->variant || !g_str_equal(style->variant, value);
 
-	const char* value = purple_prefs_get_string (variant);
-	gboolean changed = !style->variant || !g_str_equal (style->variant, value);
+	g_free(style->variant);
+	style->variant = g_strdup(value);
 
-	g_free (style->variant);
-	style->variant = g_strdup (value);
+	if (changed)
+		pidgin_message_style_read_info_plist(style, style->variant);
 
-	if (changed) pidgin_message_style_read_info_plist (style, style->variant);
-
-	g_free (prefname);
+	g_free(prefname);
 	g_free(variant);
 }
 
 
 static gboolean
-parse_info_plist_key_value (xmlnode* key, gpointer destination, const char* expected)
+parse_info_plist_key_value(xmlnode* key, gpointer destination, const char* expected)
 {
 	xmlnode *val = key->next;
 
-	for (; val && val->type != XMLNODE_TYPE_TAG; val = val->next);
-	if (!val) return FALSE;
-	
-	if (expected == NULL || g_str_equal (expected, "string")) {
-		char** dest = (char**) destination;
-		if (!g_str_equal (val->name, "string")) return FALSE;
-		if (*dest) g_free (*dest);
-		*dest = xmlnode_get_data_unescaped (val);
-	} else if (g_str_equal (expected, "integer")) {
-		int* dest = (int*) destination;
-		char* value = xmlnode_get_data_unescaped (val);
+	for (; val && val->type != XMLNODE_TYPE_TAG; val = val->next)
+		;
+	if (!val)
+		return FALSE;
 
-		if (!g_str_equal (val->name, "integer")) return FALSE;
-		*dest = atoi (value);
-		g_free (value);
-	} else if (g_str_equal (expected, "boolean")) {
-		gboolean *dest = (gboolean*) destination;
-		if (g_str_equal (val->name, "true")) *dest = TRUE;
-		else if (g_str_equal (val->name, "false")) *dest = FALSE;
-		else return FALSE;
+	if (expected == NULL || g_str_equal(expected, "string")) {
+		char **dest = (char **)destination;
+		if (!g_str_equal(val->name, "string"))
+			return FALSE;
+		if (*dest)
+			g_free(*dest);
+		*dest = xmlnode_get_data_unescaped(val);
+	} else if (g_str_equal(expected, "integer")) {
+		int *dest = (int *)destination;
+		char *value = xmlnode_get_data_unescaped(val);
+
+		if (!g_str_equal(val->name, "integer"))
+			return FALSE;
+		*dest = atoi(value);
+		g_free(value);
+	} else if (g_str_equal(expected, "boolean")) {
+		gboolean *dest = (gboolean *)destination;
+		if (g_str_equal(val->name, "true"))
+			*dest = TRUE;
+		else if (g_str_equal(val->name, "false"))
+			*dest = FALSE;
+		else
+			return FALSE;
 	} else return FALSE;
-	
+
 	return TRUE;
 }
 
-static
-gboolean str_for_key (const char *key, const char *found, const char *variant){
-	if (g_str_equal (key, found)) return TRUE;
-	if (!variant) return FALSE;
-	return (g_str_has_prefix (found, key) 
-		&& g_str_has_suffix (found, variant)
-		&& strlen (found) == strlen (key) + strlen (variant) + 1);
+static gboolean
+str_for_key(const char *key, const char *found, const char *variant)
+{
+	if (g_str_equal(key, found))
+		return TRUE;
+	if (!variant)
+		return FALSE;
+	return (g_str_has_prefix(found, key)
+		&& g_str_has_suffix(found, variant)
+		&& strlen(found) == strlen(key) + strlen(variant) + 1);
 }
 
 /**
@@ -185,55 +202,55 @@
  * the keys that take precedence depend on the value of the current variant.
  */
 void
-pidgin_message_style_read_info_plist (PidginMessageStyle *style, const char* variant)
+pidgin_message_style_read_info_plist(PidginMessageStyle *style, const char *variant)
 {
 	/* note that if a variant is used the option:VARIANTNAME takes precedence */
-	char *contents = g_build_filename (style->style_dir, "Contents", NULL);
-	xmlnode *plist = xmlnode_from_file (contents, "Info.plist", "Info.plist", "webkit"), *iter;
-	xmlnode *dict = xmlnode_get_child (plist, "dict");
+	char *contents = g_build_filename(style->style_dir, "Contents", NULL);
+	xmlnode *plist = xmlnode_from_file(contents, "Info.plist", "Info.plist", "webkit"), *iter;
+	xmlnode *dict = xmlnode_get_child(plist, "dict");
 
 	g_assert (dict);
-	for (iter = xmlnode_get_child (dict, "key"); iter; iter = xmlnode_get_next_twin (iter)) {
-		char* key = xmlnode_get_data_unescaped (iter);
+	for (iter = xmlnode_get_child(dict, "key"); iter; iter = xmlnode_get_next_twin(iter)) {
+		char* key = xmlnode_get_data_unescaped(iter);
 		gboolean pr = TRUE;
 
-		if (g_str_equal ("MessageViewVersion", key)) 
-			pr = parse_info_plist_key_value (iter, &style->message_view_version, "integer");
-		else if (g_str_equal ("CFBundleName", key))
-			pr = parse_info_plist_key_value (iter, &style->cf_bundle_name, "string");
-		else if (g_str_equal ("CFBundleIdentifier", key))
-			pr = parse_info_plist_key_value (iter, &style->cf_bundle_identifier, "string");
-		else if (g_str_equal ("CFBundleGetInfoString", key))
-			pr = parse_info_plist_key_value (iter, &style->cf_bundle_get_info_string, "string");
-		else if (str_for_key ("DefaultFontFamily", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->default_font_family, "string");
-		else if (str_for_key ("DefaultFontSize", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->default_font_size, "integer");
-		else if (str_for_key ("ShowsUserIcons", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->shows_user_icons, "boolean");
-		else if (str_for_key ("DisableCombineConsecutive", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->disable_combine_consecutive, "boolean");
-		else if (str_for_key ("DefaultBackgroundIsTransparent", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->default_background_is_transparent, "boolean");
-		else if (str_for_key ("DisableCustomBackground", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->disable_custom_background, "boolean");
-		else if (str_for_key ("DefaultBackgroundColor", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->default_background_color, "string");
-		else if (str_for_key ("AllowTextColors", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->allow_text_colors, "integer");
-		else if (str_for_key ("ImageMask", key, variant))
-			pr = parse_info_plist_key_value (iter, &style->image_mask, "string");
+		if (g_str_equal("MessageViewVersion", key))
+			pr = parse_info_plist_key_value(iter, &style->message_view_version, "integer");
+		else if (g_str_equal("CFBundleName", key))
+			pr = parse_info_plist_key_value(iter, &style->cf_bundle_name, "string");
+		else if (g_str_equal("CFBundleIdentifier", key))
+			pr = parse_info_plist_key_value(iter, &style->cf_bundle_identifier, "string");
+		else if (g_str_equal("CFBundleGetInfoString", key))
+			pr = parse_info_plist_key_value(iter, &style->cf_bundle_get_info_string, "string");
+		else if (str_for_key("DefaultFontFamily", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->default_font_family, "string");
+		else if (str_for_key("DefaultFontSize", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->default_font_size, "integer");
+		else if (str_for_key("ShowsUserIcons", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->shows_user_icons, "boolean");
+		else if (str_for_key("DisableCombineConsecutive", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->disable_combine_consecutive, "boolean");
+		else if (str_for_key("DefaultBackgroundIsTransparent", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->default_background_is_transparent, "boolean");
+		else if (str_for_key("DisableCustomBackground", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->disable_custom_background, "boolean");
+		else if (str_for_key("DefaultBackgroundColor", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->default_background_color, "string");
+		else if (str_for_key("AllowTextColors", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->allow_text_colors, "integer");
+		else if (str_for_key("ImageMask", key, variant))
+			pr = parse_info_plist_key_value(iter, &style->image_mask, "string");
 
 		if (!pr)
-			purple_debug_warning ("webkit", "Failed to parse key %s\n", key);
-		g_free (key);
+			purple_debug_warning("webkit", "Failed to parse key %s\n", key);
+		g_free(key);
 	}
 
-	xmlnode_free (plist);
+	xmlnode_free(plist);
 }
 
-PidginMessageStyle*
-pidgin_message_style_load (const char* styledir)
+PidginMessageStyle *
+pidgin_message_style_load(const char *styledir)
 {
 	/*
 	 * the loading process described:
@@ -247,14 +264,11 @@
 	 * and if that does not exist, we choose the first one in the
 	 * directory.
 	 */
-	
-	/* is this style already loaded? */
-	char   *file; /* temporary variable */
+	char *file;
 	PidginMessageStyle *style = NULL;
 
-	/* else we need to load it */
-	style = pidgin_message_style_new (styledir);
-	
+	style = pidgin_message_style_new(styledir);
+
 	/* load all other files */
 
 	/* The template path can either come from the theme, or can
@@ -262,187 +276,187 @@
 	style->template_path = g_build_filename(styledir, "Contents", "Resources", "Template.html", NULL);
 
 	if (!g_file_test(style->template_path, G_FILE_TEST_EXISTS)) {
-		g_free (style->template_path);
+		g_free(style->template_path);
 		style->template_path = g_build_filename(DATADIR, "pidgin", "webkit", "Template.html", NULL);
 	}
 
 	if (!g_file_get_contents(style->template_path, &style->template_html, NULL, NULL)) {
-		purple_debug_error ("webkit", "Could not locate a Template.html (%s)\n", style->template_path);
-		pidgin_message_style_unref (style);
+		purple_debug_error("webkit", "Could not locate a Template.html (%s)\n", style->template_path);
+		pidgin_message_style_unref(style);
 		return NULL;
 	}
 
 	file = g_build_filename(styledir, "Contents", "Resources", "Status.html", NULL);
 	if (!g_file_get_contents(file, &style->status_html, NULL, NULL)) {
-		purple_debug_info ("webkit", "%s could not find Resources/Status.html", styledir);
-		pidgin_message_style_unref (style);
-		g_free (file);
+		purple_debug_info("webkit", "%s could not find Resources/Status.html", styledir);
+		pidgin_message_style_unref(style);
+		g_free(file);
 		return NULL;
 	}
-	g_free (file);
+	g_free(file);
 
 	file = g_build_filename(styledir, "Contents", "Resources", "main.css", NULL);
 	if (!g_file_get_contents(file, &style->basestyle_css, NULL, NULL))
-		style->basestyle_css = g_strdup ("");
-	g_free (file);
-	
+		style->basestyle_css = g_strdup("");
+	g_free(file);
+
 	file = g_build_filename(styledir, "Contents", "Resources", "Header.html", NULL);
 	if (!g_file_get_contents(file, &style->header_html, NULL, NULL))
-		style->header_html = g_strdup ("");
-	g_free (file);
+		style->header_html = g_strdup("");
+	g_free(file);
 
 	file = g_build_filename(styledir, "Contents", "Resources", "Footer.html", NULL);
 	if (!g_file_get_contents(file, &style->footer_html, NULL, NULL))
-		style->footer_html = g_strdup ("");
-	g_free (file);
+		style->footer_html = g_strdup("");
+	g_free(file);
 
 	file = g_build_filename(styledir, "Contents", "Resources", "Incoming", "Content.html", NULL);
 	if (!g_file_get_contents(file, &style->incoming_content_html, NULL, NULL)) {
-		purple_debug_info ("webkit", "%s did not have a Incoming/Content.html\n", styledir);
-		pidgin_message_style_unref (style);
-		g_free (file);
+		purple_debug_info("webkit", "%s did not have a Incoming/Content.html\n", styledir);
+		pidgin_message_style_unref(style);
+		g_free(file);
 		return NULL;
 	}
-	g_free (file);
+	g_free(file);
 
 
 	/* according to the spec, the following are optional files */
 	file = g_build_filename(styledir, "Contents", "Resources", "Incoming", "NextContent.html", NULL);
 	if (!g_file_get_contents(file, &style->incoming_next_content_html, NULL, NULL)) {
-		style->incoming_next_content_html = g_strdup (style->incoming_content_html);
+		style->incoming_next_content_html = g_strdup(style->incoming_content_html);
 	}
-	g_free (file);
+	g_free(file);
 
 	file = g_build_filename(styledir, "Contents", "Resources", "Outgoing", "Content.html", NULL);
 	if (!g_file_get_contents(file, &style->outgoing_content_html, NULL, NULL)) {
 		style->outgoing_content_html = g_strdup(style->incoming_content_html);
 	}
-	g_free (file);
+	g_free(file);
 
 	file = g_build_filename(styledir, "Contents", "Resources", "Outgoing", "NextContent.html", NULL);
 	if (!g_file_get_contents(file, &style->outgoing_next_content_html, NULL, NULL)) {
-		style->outgoing_next_content_html = g_strdup (style->outgoing_content_html);
+		style->outgoing_next_content_html = g_strdup(style->outgoing_content_html);
 	}
 
-	pidgin_message_style_read_info_plist (style, NULL);
-	pidgin_message_style_load_state (style);
+	pidgin_message_style_read_info_plist(style, NULL);
+	pidgin_message_style_load_state(style);
 
 	/* non variant dependent Info.plist checks */
 	if (style->message_view_version < 3) {
-		purple_debug_info ("webkit", "%s is a legacy style (version %d) and will not be loaded\n", style->cf_bundle_name, style->message_view_version);
-		pidgin_message_style_unref (style);
+		purple_debug_info("webkit", "%s is a legacy style (version %d) and will not be loaded\n", style->cf_bundle_name, style->message_view_version);
+		pidgin_message_style_unref(style);
 		return NULL;
 	}
 
 	if (!style->variant)
 	{
-		GList *variants = pidgin_message_style_get_variants (style);
+		GList *variants = pidgin_message_style_get_variants(style);
 
 		if (variants)
-			pidgin_message_style_set_variant (style, variants->data);
+			pidgin_message_style_set_variant(style, variants->data);
 
-		glist_free_all_string (variants);
+		glist_free_all_string(variants);
 	}
 
 	return style;
 }
 
-PidginMessageStyle*
-pidgin_message_style_copy (const PidginMessageStyle *style)
+PidginMessageStyle *
+pidgin_message_style_copy(const PidginMessageStyle *style)
 {
-	/* it's at times like this that I miss C++ */
-	PidginMessageStyle *ret = pidgin_message_style_new (style->style_dir);
+	PidginMessageStyle *ret = pidgin_message_style_new(style->style_dir);
 
-	ret->variant = g_strdup (style->variant);
+	ret->variant = g_strdup(style->variant);
 	ret->message_view_version = style->message_view_version;
-	ret->cf_bundle_name = g_strdup (style->cf_bundle_name);
-	ret->cf_bundle_identifier = g_strdup (style->cf_bundle_identifier);
-	ret->cf_bundle_get_info_string = g_strdup (style->cf_bundle_get_info_string);
-	ret->default_font_family = g_strdup (style->default_font_family);
+	ret->cf_bundle_name = g_strdup(style->cf_bundle_name);
+	ret->cf_bundle_identifier = g_strdup(style->cf_bundle_identifier);
+	ret->cf_bundle_get_info_string = g_strdup(style->cf_bundle_get_info_string);
+	ret->default_font_family = g_strdup(style->default_font_family);
 	ret->default_font_size = style->default_font_size;
 	ret->shows_user_icons = style->shows_user_icons;
 	ret->disable_combine_consecutive = style->disable_combine_consecutive;
 	ret->default_background_is_transparent = style->default_background_is_transparent;
 	ret->disable_custom_background = style->disable_custom_background;
-	ret->default_background_color = g_strdup (style->default_background_color);
+	ret->default_background_color = g_strdup(style->default_background_color);
 	ret->allow_text_colors = style->allow_text_colors;
-	ret->image_mask = g_strdup (style->image_mask);
-	ret->default_variant = g_strdup (style->default_variant);
-	
-	ret->template_path = g_strdup (style->template_path);
-	ret->template_html = g_strdup (style->template_html);
-	ret->header_html = g_strdup (style->header_html);
-	ret->footer_html = g_strdup (style->footer_html);
-	ret->incoming_content_html = g_strdup (style->incoming_content_html);
-	ret->outgoing_content_html = g_strdup (style->outgoing_content_html);
-	ret->incoming_next_content_html = g_strdup (style->incoming_next_content_html);
-	ret->outgoing_next_content_html = g_strdup (style->outgoing_next_content_html);
-	ret->status_html = g_strdup (style->status_html);
-	ret->basestyle_css = g_strdup (style->basestyle_css);
+	ret->image_mask = g_strdup(style->image_mask);
+	ret->default_variant = g_strdup(style->default_variant);
+
+	ret->template_path = g_strdup(style->template_path);
+	ret->template_html = g_strdup(style->template_html);
+	ret->header_html = g_strdup(style->header_html);
+	ret->footer_html = g_strdup(style->footer_html);
+	ret->incoming_content_html = g_strdup(style->incoming_content_html);
+	ret->outgoing_content_html = g_strdup(style->outgoing_content_html);
+	ret->incoming_next_content_html = g_strdup(style->incoming_next_content_html);
+	ret->outgoing_next_content_html = g_strdup(style->outgoing_next_content_html);
+	ret->status_html = g_strdup(style->status_html);
+	ret->basestyle_css = g_strdup(style->basestyle_css);
 	return ret;
 }
 
 void
-pidgin_message_style_set_variant (PidginMessageStyle *style, const char *variant)
+pidgin_message_style_set_variant(PidginMessageStyle *style, const char *variant)
 {
 	/* I'm not going to test whether this variant is valid! */
-	g_free (style->variant);
-	style->variant = g_strdup (variant);
+	g_free(style->variant);
+	style->variant = g_strdup(variant);
 
-	pidgin_message_style_read_info_plist (style, variant);
-	
+	pidgin_message_style_read_info_plist(style, variant);
+
 	/* todo, the style has "changed". Ideally, I would like to use signals at this point. */
 }
 
-char* pidgin_message_style_get_variant (PidginMessageStyle *style)
+char *
+pidgin_message_style_get_variant(PidginMessageStyle *style)
 {
-	return g_strdup (style->variant);
+	return g_strdup(style->variant);
 }
 
 /**
  * Get a list of variants supported by the style.
  */
 GList*
-pidgin_message_style_get_variants (PidginMessageStyle *style) 
+pidgin_message_style_get_variants(PidginMessageStyle *style)
 {
 	GList *ret = NULL;
-        GDir *variants;
+	GDir *variants;
 	const char *css_file;
 	char *css;
 	char *variant_dir;
 
-	g_assert (style->style_dir);
+	g_assert(style->style_dir);
 	variant_dir = g_build_filename(style->style_dir, "Contents", "Resources", "Variants", NULL);
 
 	variants = g_dir_open(variant_dir, 0, NULL);
-	if (!variants) return NULL;
+	if (!variants)
+		return NULL;
 
 	while ((css_file = g_dir_read_name(variants)) != NULL) {
-		if (!g_str_has_suffix (css_file, ".css"))
+		if (!g_str_has_suffix(css_file, ".css"))
 			continue;
 
-		css = g_strndup (css_file, strlen (css_file) - 4);
+		css = g_strndup(css_file, strlen(css_file) - 4);
 		ret = g_list_append(ret, css);
 	}
 
 	g_dir_close(variants);
 	g_free(variant_dir);
 
-	ret = g_list_sort (ret, (GCompareFunc)g_strcmp0);
-	return ret;	
+	ret = g_list_sort(ret, (GCompareFunc)g_strcmp0);
+	return ret;
 }
 
-
-char* pidgin_message_style_get_css (PidginMessageStyle *style)
+char *
+pidgin_message_style_get_css(PidginMessageStyle *style)
 {
 	if (!style->variant) {
-		return g_build_filename (style->style_dir, "Contents", "Resources", "main.css", NULL);
+		return g_build_filename(style->style_dir, "Contents", "Resources", "main.css", NULL);
 	} else {
-		char *file = g_strdup_printf ("%s.css", style->variant);
-		char *ret = g_build_filename (style->style_dir, "Contents", "Resources", "Variants",  file, NULL);
-		g_free (file);
+		char *file = g_strdup_printf("%s.css", style->variant);
+		char *ret = g_build_filename(style->style_dir, "Contents", "Resources", "Variants",  file, NULL);
+		g_free(file);
 		return ret;
 	}
 }
 
-
--- a/pidgin/plugins/adiumthemes/message-style.h	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/plugins/adiumthemes/message-style.h	Thu Sep 08 22:04:35 2011 +0000
@@ -1,3 +1,24 @@
+/* pidgin
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
+ */
 
 #include <glib.h>
 
@@ -47,13 +68,14 @@
 	char    *basestyle_css;
 } PidginMessageStyle;
 
-PidginMessageStyle* pidgin_message_style_load (const char* styledir);
-PidginMessageStyle* pidgin_message_style_copy (const PidginMessageStyle *style);
-void pidgin_message_style_save_state (const PidginMessageStyle *style);
-void pidgin_message_style_unref (PidginMessageStyle *style);
-void pidgin_message_style_read_info_plist (PidginMessageStyle *style, const char* variant);
-char* pidgin_message_style_get_variant (PidginMessageStyle *style);
-GList* pidgin_message_style_get_variants (PidginMessageStyle *style);
-void pidgin_message_style_set_variant (PidginMessageStyle *style, const char *variant);
+PidginMessageStyle *pidgin_message_style_load(const char *styledir);
+PidginMessageStyle *pidgin_message_style_copy(const PidginMessageStyle *style);
+void pidgin_message_style_save_state(const PidginMessageStyle *style);
+void pidgin_message_style_unref(PidginMessageStyle *style);
+void pidgin_message_style_read_info_plist(PidginMessageStyle *style, const char *variant);
+char *pidgin_message_style_get_variant(PidginMessageStyle *style);
+GList *pidgin_message_style_get_variants(PidginMessageStyle *style);
+void pidgin_message_style_set_variant(PidginMessageStyle *style, const char *variant);
 
-char* pidgin_message_style_get_css (PidginMessageStyle *style);
+char *pidgin_message_style_get_css(PidginMessageStyle *style);
+
--- a/pidgin/plugins/adiumthemes/webkit.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/plugins/adiumthemes/webkit.c	Thu Sep 08 22:04:35 2011 +0000
@@ -1,33 +1,34 @@
-/*
- * Adium Message Styles
- * Copyright (C) 2009  Arnold Noronha <arnstein87@gmail.com>
- * Copyright (C) 2007
+/* pidgin
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
  */
 
 #define PLUGIN_ID		"gtk-webview-adium-ims"
 #define PLUGIN_NAME		"webview-adium-ims"
 
 /*
- * A lot of this was originally written by Sean Egan, but I think I've 
- * rewrote enough to replace the author for now. 
+ * A lot of this was originally written by Sean Egan, but I think I've
+ * rewrote enough to replace the author for now.
  */
 #define PLUGIN_AUTHOR		"Arnold Noronha <arnstein87@gmail.com>"
-#define PURPLE_PLUGINS          "Hell yeah"
+#define PURPLE_PLUGINS		"Hell yeah"
 
 /* System headers */
 #include <string.h>
@@ -59,38 +60,36 @@
 static char  *cur_style_dir = NULL;
 static void  *handle = NULL;
 
-static inline char* get_absolute_path (const char *path)
+static inline char *
+get_absolute_path(const char *path)
 {
-	if (g_path_is_absolute (path)) return g_strdup (path);
+	if (g_path_is_absolute(path))
+		return g_strdup(path);
 	else {
-		char* cwd = g_get_current_dir (), *ret;
-		ret = g_build_filename (cwd, path, NULL);
-		g_free (cwd);
+		char *cwd, *ret;
+		cwd = g_get_current_dir();
+		ret = g_build_filename(cwd, path, NULL);
+		g_free(cwd);
 		return ret;
 	}
 }
 
-static void
-glist_free_all_string (GList *list)
+static void webkit_on_webview_destroy(GtkObject* obj, gpointer data);
+
+static void *
+webkit_plugin_get_handle(void)
 {
-	GList *first = list;
-	for (; list; list = g_list_next (list))
-		g_free (list->data);
-	g_list_free (first);
+	if (handle)
+		return handle;
+	else
+		return (handle = g_malloc(1));
 }
 
-static void webkit_on_webview_destroy (GtkObject* obj, gpointer data);
-
-static void* webkit_plugin_get_handle ()
+static void
+webkit_plugin_free_handle(void)
 {
-	if (handle) return handle;
-	else return (handle = g_malloc (1));
-}
-
-static void webkit_plugin_free_handle ()
-{
-	purple_signals_disconnect_by_handle (handle);
-	g_free (handle);
+	purple_signals_disconnect_by_handle(handle);
+	g_free(handle);
 }
 
 static char *
@@ -242,12 +241,13 @@
 }
 
 static char *
-replace_template_tokens(PidginMessageStyle *style, char *text, int len, char *header, char *footer) {
+replace_template_tokens(PidginMessageStyle *style, char *text, int len, char *header, char *footer)
+{
 	GString *str = g_string_new_len(NULL, len);
 
 	char **ms = g_strsplit(text, "%@", 6);
 	char *base = NULL;
-	char *csspath = pidgin_message_style_get_css (style);
+	char *csspath = pidgin_message_style_get_css(style);
 	if (ms[0] == NULL || ms[1] == NULL || ms[2] == NULL || ms[3] == NULL || ms[4] == NULL || ms[5] == NULL) {
 		g_strfreev(ms);
 		g_string_free(str, TRUE);
@@ -256,9 +256,9 @@
 
 	g_string_append(str, ms[0]);
 	g_string_append(str, "file://");
-	base = g_build_filename (style->style_dir, "Contents", "Resources", "Template.html", NULL);
+	base = g_build_filename(style->style_dir, "Contents", "Resources", "Template.html", NULL);
 	g_string_append(str, base);
-	g_free (base);
+	g_free(base);
 
 	g_string_append(str, ms[1]);
 
@@ -269,8 +269,6 @@
 	g_string_append(str, "file://");
 	g_string_append(str, csspath);
 
-
-
 	g_string_append(str, ms[3]);
 	if (header)
 		g_string_append(str, header);
@@ -280,8 +278,8 @@
 	g_string_append(str, ms[5]);
 
 	g_strfreev(ms);
-	g_free (csspath);
-	return g_string_free (str, FALSE);
+	g_free(csspath);
+	return g_string_free(str, FALSE);
 }
 
 static GtkWidget *
@@ -295,33 +293,34 @@
 		return gtkconv->webview;
 }
 
-static void set_theme_webkit_settings (WebKitWebView *webview, PidginMessageStyle *style)
+static void
+set_theme_webkit_settings(WebKitWebView *webview, PidginMessageStyle *style)
 {
 	WebKitWebSettings *settings;
 
-	g_object_get (G_OBJECT(webview), "settings", &settings, NULL);
+	g_object_get(G_OBJECT(webview), "settings", &settings, NULL);
 	if (style->default_font_family)
-		g_object_set (G_OBJECT (settings), "default-font-family", style->default_font_family, NULL);
+		g_object_set(G_OBJECT(settings), "default-font-family", style->default_font_family, NULL);
 
 	if (style->default_font_size)
-		g_object_set (G_OBJECT (settings), "default-font-size", GINT_TO_POINTER (style->default_font_size), NULL);
+		g_object_set(G_OBJECT(settings), "default-font-size", GINT_TO_POINTER(style->default_font_size), NULL);
 
 	/* this does not work :( */
-	webkit_web_view_set_transparent (webview, style->default_background_is_transparent);
+	webkit_web_view_set_transparent(webview, style->default_background_is_transparent);
 }
 
 /*
  * The style specification says that if the conversation is a group
- * chat then the <div id="Chat"> element will be given a class 
- * 'groupchat'. I can't add another '%@' in Template.html because 
+ * chat then the <div id="Chat"> element will be given a class
+ * 'groupchat'. I can't add another '%@' in Template.html because
  * that breaks style-specific Template.html's. I have to either use libxml
  * or conveniently play with WebKit's javascript engine. The javascript
  * engine should work, but it's not an identical behavior.
  */
 static void
-webkit_set_groupchat (GtkWebView *webview)
+webkit_set_groupchat(GtkWebView *webview)
 {
-	gtk_webview_safe_execute_script (webview, "document.getElementById('Chat').className = 'groupchat'");
+	gtk_webview_safe_execute_script(webview, "document.getElementById('Chat').className = 'groupchat'");
 }
 
 
@@ -329,7 +328,7 @@
  * Called when either a new PurpleConversation is created
  * or when a PidginConversation changes its active PurpleConversation
  * This will not change the theme if the theme is already set.
- * (This is to prevent accidental theme changes if a new 
+ * (This is to prevent accidental theme changes if a new
  * PurpleConversation gets added.
  *
  * FIXME: it's not at all clear to me as to how
@@ -337,7 +336,7 @@
  * changes.
  */
 static void
-init_theme_for_webkit (PurpleConversation *conv, char *style_dir)
+init_theme_for_webkit(PurpleConversation *conv, char *style_dir)
 {
 	GtkWidget *webkit = PIDGIN_CONVERSATION(conv)->webview;
 	char *header, *footer;
@@ -346,67 +345,70 @@
 	char* basedir;
 	char* baseuri;
 	PidginMessageStyle *style, *oldStyle;
-	oldStyle = g_object_get_data (G_OBJECT(webkit), MESSAGE_STYLE_KEY);
+	PidginMessageStyle *copy;
 
-	if (oldStyle) return;
+	oldStyle = g_object_get_data(G_OBJECT(webkit), MESSAGE_STYLE_KEY);
+	if (oldStyle)
+		return;
 
-	purple_debug_info ("webkit", "loading %s\n", style_dir);
-	style = pidgin_message_style_load (style_dir);
-	g_assert (style);
-	g_assert (style->template_html); /* debugging test? */
+	purple_debug_info("webkit", "loading %s\n", style_dir);
+	style = pidgin_message_style_load(style_dir);
+	g_assert(style);
+	g_assert(style->template_html); /* debugging test? */
 
-	basedir = g_build_filename (style->style_dir, "Contents", "Resources", "Template.html", NULL);
-	baseuri = g_strdup_printf ("file://%s", basedir);
+	basedir = g_build_filename(style->style_dir, "Contents", "Resources", "Template.html", NULL);
+	baseuri = g_strdup_printf("file://%s", basedir);
 	header = replace_header_tokens(style->header_html, strlen(style->header_html), conv);
-	g_assert (style);
+	g_assert(style);
 	footer = replace_header_tokens(style->footer_html, strlen(style->footer_html), conv);
 	template = replace_template_tokens(style, style->template_html, strlen(style->template_html) + strlen(style->header_html), header, footer);
 
 	g_assert(template);
 
-	purple_debug_info ("webkit", "template: %s\n", template);
+	purple_debug_info("webkit", "template: %s\n", template);
 
-	set_theme_webkit_settings (WEBKIT_WEB_VIEW(webkit), style);
+	set_theme_webkit_settings(WEBKIT_WEB_VIEW(webkit), style);
 	webkit_web_view_load_string(WEBKIT_WEB_VIEW(webkit), template, "text/html", "UTF-8", baseuri);
 
-	PidginMessageStyle *copy = pidgin_message_style_copy (style);
-	g_object_set_data (G_OBJECT(webkit), MESSAGE_STYLE_KEY, copy);
+	copy = pidgin_message_style_copy(style);
+	g_object_set_data(G_OBJECT(webkit), MESSAGE_STYLE_KEY, copy);
 
-	pidgin_message_style_unref (style);
+	pidgin_message_style_unref(style);
 	/* I need to unref this style when the webkit object destroys */
-	g_signal_connect (G_OBJECT(webkit), "destroy", G_CALLBACK(webkit_on_webview_destroy), copy);
+	g_signal_connect(G_OBJECT(webkit), "destroy", G_CALLBACK(webkit_on_webview_destroy), copy);
 
-	if (purple_conversation_get_type (conv) == PURPLE_CONV_TYPE_CHAT)
-		webkit_set_groupchat (GTK_WEBVIEW (webkit));
-	g_free (basedir);
-	g_free (baseuri);
-	g_free (header);
-	g_free (footer);
-	g_free (template);
+	if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
+		webkit_set_groupchat(GTK_WEBVIEW(webkit));
+	g_free(basedir);
+	g_free(baseuri);
+	g_free(header);
+	g_free(footer);
+	g_free(template);
 }
 
 
 /* restore the non theme version of the conversation window */
 static void
-finalize_theme_for_webkit (PurpleConversation *conv)
+finalize_theme_for_webkit(PurpleConversation *conv)
 {
 	GtkWidget *webview = PIDGIN_CONVERSATION(conv)->webview;
-	PidginMessageStyle *style = g_object_get_data (G_OBJECT(webview), MESSAGE_STYLE_KEY);
+	PidginMessageStyle *style = g_object_get_data(G_OBJECT(webview), MESSAGE_STYLE_KEY);
 
 	webkit_web_view_load_string(WEBKIT_WEB_VIEW(webview), "", "text/html", "UTF-8", "");
 
-	g_object_set_data (G_OBJECT(webview), MESSAGE_STYLE_KEY, NULL);
-	pidgin_message_style_unref (style);
+	g_object_set_data(G_OBJECT(webview), MESSAGE_STYLE_KEY, NULL);
+	pidgin_message_style_unref(style);
 }
 
 static void
-webkit_on_webview_destroy (GtkObject *object, gpointer data)
+webkit_on_webview_destroy(GtkObject *object, gpointer data)
 {
-	pidgin_message_style_unref ((PidginMessageStyle*) data);
-	g_object_set_data (G_OBJECT(object), MESSAGE_STYLE_KEY, NULL);
+	pidgin_message_style_unref((PidginMessageStyle *)data);
+	g_object_set_data(G_OBJECT(object), MESSAGE_STYLE_KEY, NULL);
 }
 
-static gboolean webkit_on_displaying_im_msg (PurpleAccount *account,
+static gboolean
+webkit_on_displaying_im_msg(PurpleAccount *account,
 						 const char* name,
 						 char **pmessage,
 						 PurpleConversation *conv,
@@ -423,17 +425,16 @@
 	char *script;
 	char *func = "appendMessage";
 	char *smileyed;
-	time_t mtime = time (NULL); /* FIXME: this should come from the write_conv calback, but the signal doesn't pass this to me */
+	time_t mtime = time(NULL); /* FIXME: this should come from the write_conv calback, but the signal doesn't pass this to me */
 
 	PurpleMessageFlags old_flags = GPOINTER_TO_INT(purple_conversation_get_data(conv, "webkit-lastflags"));
 	PidginMessageStyle *style;
 
-	fprintf (stderr, "hmm.. here %s %s\n", name, message);
 	webkit = get_webkit(conv);
 	stripped = g_strdup(message);
 
-	style = g_object_get_data (G_OBJECT (webkit), MESSAGE_STYLE_KEY);
-	g_assert (style);
+	style = g_object_get_data(G_OBJECT(webkit), MESSAGE_STYLE_KEY);
+	g_assert(style);
 
 	if (flags & PURPLE_MESSAGE_SEND && old_flags & PURPLE_MESSAGE_SEND) {
 		message_html = style->outgoing_next_content_html;
@@ -452,11 +453,11 @@
 
 	smileyed = smiley_parse_markup(stripped, conv->account->protocol_id);
 	msg = replace_message_tokens(message_html, 0, conv, name, alias, smileyed, flags, mtime);
-	escape = gtk_webview_quote_js_string (msg);
+	escape = gtk_webview_quote_js_string(msg);
 	script = g_strdup_printf("%s(%s)", func, escape);
 
-	purple_debug_info ("webkit", "JS: %s\n", script);
-	gtk_webview_safe_execute_script (GTK_WEBVIEW (webkit), script);
+	purple_debug_info("webkit", "JS: %s\n", script);
+	gtk_webview_safe_execute_script(GTK_WEBVIEW(webkit), script);
 
 	g_free(script);
 	g_free(smileyed);
@@ -467,7 +468,8 @@
 	return TRUE; /* GtkConv should not handle this IM */
 }
 
-static gboolean webkit_on_displaying_chat_msg (PurpleAccount *account,
+static gboolean
+webkit_on_displaying_chat_msg(PurpleAccount *account,
 					       const char *who,
 					       char **message,
 					       PurpleConversation *conv,
@@ -475,43 +477,43 @@
 					       gpointer userdata)
 {
 	/* handle exactly like an IM message for now */
-	return webkit_on_displaying_im_msg (account, who, message, conv, flags, NULL);
+	return webkit_on_displaying_im_msg(account, who, message, conv, flags, NULL);
 }
 
 static void
-webkit_on_conversation_displayed (PidginConversation *gtkconv, gpointer data)
+webkit_on_conversation_displayed(PidginConversation *gtkconv, gpointer data)
 {
-	init_theme_for_webkit (gtkconv->active_conv, cur_style_dir);
+	init_theme_for_webkit(gtkconv->active_conv, cur_style_dir);
 }
 
 static void
-webkit_on_conversation_switched (PurpleConversation *conv, gpointer data)
+webkit_on_conversation_switched(PurpleConversation *conv, gpointer data)
 {
-	init_theme_for_webkit (conv, cur_style_dir);
+	init_theme_for_webkit(conv, cur_style_dir);
 }
 
 static void
-webkit_on_conversation_hiding (PidginConversation *gtkconv, gpointer data)
+webkit_on_conversation_hiding(PidginConversation *gtkconv, gpointer data)
 {
-	/* 
+	/*
 	 * I'm not sure if I need to do anything here, but let's keep
-	 * this anyway. 
+	 * this anyway.
 	 */
 }
 
-static GList*
-get_dir_dir_list (const char* dirname)
+static GList *
+get_dir_dir_list(const char *dirname)
 {
 	GList *ret = NULL;
-	GDir  *dir = g_dir_open (dirname, 0, NULL);
+	GDir  *dir = g_dir_open(dirname, 0, NULL);
 	const char* subdir;
 
 	if (!dir) return NULL;
-	while ((subdir = g_dir_read_name (dir))) {
-		ret = g_list_append (ret, g_build_filename (dirname, subdir, NULL));
+	while ((subdir = g_dir_read_name(dir))) {
+		ret = g_list_append(ret, g_build_filename(dirname, subdir, NULL));
 	}
 
-	g_dir_close (dir);
+	g_dir_close(dir);
 	return ret;
 }
 
@@ -520,40 +522,40 @@
  * directories. I don't guarrantee that these are valid themes, just
  * that they are in the directories for themes.
  */
-static GList*
-get_style_directory_list ()
+static GList *
+get_style_directory_list(void)
 {
 	char *user_dir, *user_style_dir, *global_style_dir;
 	GList *list1, *list2;
 
-	user_dir = get_absolute_path (purple_user_dir ());
+	user_dir = get_absolute_path(purple_user_dir());
 
-	user_style_dir = g_build_filename (user_dir, "styles", NULL);
-	global_style_dir = g_build_filename (DATADIR, "pidgin", "styles", NULL);
+	user_style_dir = g_build_filename(user_dir, "styles", NULL);
+	global_style_dir = g_build_filename(DATADIR, "pidgin", "styles", NULL);
 
-	list1 = get_dir_dir_list (user_style_dir);
-	list2 = get_dir_dir_list (global_style_dir);
+	list1 = get_dir_dir_list(user_style_dir);
+	list2 = get_dir_dir_list(global_style_dir);
 
-	g_free (global_style_dir);
-	g_free (user_style_dir);
-	g_free (user_dir);
+	g_free(global_style_dir);
+	g_free(user_style_dir);
+	g_free(user_dir);
 
-	return g_list_concat (list1, list2);
+	return g_list_concat(list1, list2);
 }
 
 /**
- * use heuristics or previous user options to figure out what 
+ * use heuristics or previous user options to figure out what
  * theme to use as default in this Pidgin instance.
  */
 static void
-style_set_default ()
+style_set_default(void)
 {
-	GList* styles = get_style_directory_list (), *iter;
-	const char *stylepath = purple_prefs_get_string ("/plugins/gtk/adiumthemes/stylepath");
-	g_assert (cur_style_dir == NULL);
+	GList *styles = get_style_directory_list(), *iter;
+	const char *stylepath = purple_prefs_get_string("/plugins/gtk/adiumthemes/stylepath");
+	g_assert(cur_style_dir == NULL);
 
 	if (stylepath && *stylepath)
-		styles = g_list_prepend (styles, g_strdup (stylepath));
+		styles = g_list_prepend(styles, g_strdup(stylepath));
 	else {
 		purple_notify_error(handle, _("Webkit themes"),
 			_("Can't find installed styles"),
@@ -563,62 +565,63 @@
 
 	/* pick any one that works. Note that we have first preference
 	 * for the one in the userdir */
-	for (iter = styles; iter; iter = g_list_next (iter)) {
-		PidginMessageStyle *style = pidgin_message_style_load (iter->data);
+	for (iter = styles; iter; iter = g_list_next(iter)) {
+		PidginMessageStyle *style = pidgin_message_style_load(iter->data);
 		if (style) {
-			cur_style_dir = (char*) g_strdup (iter->data);
-			pidgin_message_style_unref (style);
+			cur_style_dir = (char *)g_strdup(iter->data);
+			pidgin_message_style_unref(style);
 			break;
 		}
-		purple_debug_info ("webkit", "Style %s is invalid\n", (char*) iter->data);
+		purple_debug_info("webkit", "Style %s is invalid\n", (char *)iter->data);
 	}
 
-	for (iter = styles; iter; iter = g_list_next (iter))
-		g_free (iter->data);
-	g_list_free (styles);
+	for (iter = styles; iter; iter = g_list_next(iter))
+		g_free(iter->data);
+	g_list_free(styles);
 }
 
 static gboolean
 plugin_load(PurplePlugin *plugin)
 {
-	style_set_default ();
-	if (!cur_style_dir) return FALSE; /* couldn't find a style */
+	style_set_default();
+	if (!cur_style_dir)
+		return FALSE; /* couldn't find a style */
 
-	purple_signal_connect (pidgin_conversations_get_handle (),
+	purple_signal_connect(pidgin_conversations_get_handle(),
 			       "displaying-im-msg",
-			       webkit_plugin_get_handle (),
+			       webkit_plugin_get_handle(),
 			       PURPLE_CALLBACK(webkit_on_displaying_im_msg),
 			       NULL);
 
-	purple_signal_connect (pidgin_conversations_get_handle (),
+	purple_signal_connect(pidgin_conversations_get_handle(),
 			       "displaying-chat-msg",
-			       webkit_plugin_get_handle (),
+			       webkit_plugin_get_handle(),
 			       PURPLE_CALLBACK(webkit_on_displaying_chat_msg),
 			       NULL);
 
-	purple_signal_connect (pidgin_conversations_get_handle (),
+	purple_signal_connect(pidgin_conversations_get_handle(),
 			       "conversation-displayed",
-			       webkit_plugin_get_handle (),
+			       webkit_plugin_get_handle(),
 			       PURPLE_CALLBACK(webkit_on_conversation_displayed),
 			       NULL);
 
-	purple_signal_connect (pidgin_conversations_get_handle (),
+	purple_signal_connect(pidgin_conversations_get_handle(),
 			       "conversation-switched",
-			       webkit_plugin_get_handle (),
+			       webkit_plugin_get_handle(),
 			       PURPLE_CALLBACK(webkit_on_conversation_switched),
 			       NULL);
 
-	purple_signal_connect (pidgin_conversations_get_handle (),
+	purple_signal_connect(pidgin_conversations_get_handle(),
 			       "conversation-hiding",
-			       webkit_plugin_get_handle (),
+			       webkit_plugin_get_handle(),
 			       PURPLE_CALLBACK(webkit_on_conversation_hiding),
 			       NULL);
 
 	/* finally update each of the existing conversation windows */
 	{
-		GList* list = purple_get_conversations ();
+		GList *list = purple_get_conversations();
 		for (;list; list = g_list_next(list))
-			init_theme_for_webkit (list->data, cur_style_dir);
+			init_theme_for_webkit(list->data, cur_style_dir);
 
 	}
 	return TRUE;
@@ -629,9 +632,9 @@
 {
 	GList *list;
 
-	webkit_plugin_free_handle ();
+	webkit_plugin_free_handle();
 	cur_style_dir = NULL;
-	list = purple_get_conversations ();
+	list = purple_get_conversations();
 	while (list) {
 		finalize_theme_for_webkit(list->data);
 		list = g_list_next(list);
@@ -645,156 +648,155 @@
  */
 
 static void
-style_changed (GtkWidget* combobox, gpointer null)
+style_changed(GtkWidget *combobox, gpointer null)
 {
-	char *name = gtk_combo_box_get_active_text (GTK_COMBO_BOX(combobox));
+	char *name = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combobox));
 	GtkWidget *dialog;
-	GList *styles = get_style_directory_list (), *iter;
+	GList *styles = get_style_directory_list(), *iter;
 
 	/* find the full path for this name, I wish I could store this info in the combobox itself. :( */
 	for (iter = styles; iter; iter = g_list_next(iter)) {
-		char* basename = g_path_get_basename (iter->data);
-		if (g_str_equal (basename, name)) {
-			g_free (basename);
+		char *basename = g_path_get_basename(iter->data);
+		if (g_str_equal(basename, name)) {
+			g_free(basename);
 			break;
 		}
-		g_free (basename);
+		g_free(basename);
 	}
 
-	g_assert (iter);
-	g_free (name);
-	g_free (cur_style_dir);
-	cur_style_dir = g_strdup (iter->data);;
-	purple_prefs_set_string ("/plugins/gtk/adiumthemes/stylepath", cur_style_dir);
+	g_assert(iter);
+	g_free(name);
+	g_free(cur_style_dir);
+	cur_style_dir = g_strdup(iter->data);;
+	purple_prefs_set_string("/plugins/gtk/adiumthemes/stylepath", cur_style_dir);
 
 	/* inform the user that existing conversations haven't changed */
-	dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "The style for existing conversations have not been changed. Please close and re-open the conversation for the changes to take effect.");
-	g_assert (dialog);
-	gtk_widget_show (dialog);
-	g_signal_connect_swapped (dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog);
+	dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "The style for existing conversations have not been changed. Please close and re-open the conversation for the changes to take effect.");
+	g_assert(dialog);
+	gtk_widget_show(dialog);
+	g_signal_connect_swapped(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog);
 }
 
-static GtkWidget*
-get_style_config_frame ()
+static GtkWidget *
+get_style_config_frame(void)
 {
-	GtkWidget *combobox = gtk_combo_box_new_text ();
-	GList *styles = get_style_directory_list (), *iter;
+	GtkWidget *combobox = gtk_combo_box_new_text();
+	GList *styles = get_style_directory_list(), *iter;
 	int index = 0, selected = 0;
 
-	for (iter = styles; iter; iter = g_list_next (iter)) {
-		PidginMessageStyle *style = pidgin_message_style_load (iter->data);
+	for (iter = styles; iter; iter = g_list_next(iter)) {
+		PidginMessageStyle *style = pidgin_message_style_load(iter->data);
 
 		if (style) {
-			char *text = g_path_get_basename (iter->data);
-			gtk_combo_box_append_text (GTK_COMBO_BOX(combobox), text);
-			g_free (text);
+			char *text = g_path_get_basename(iter->data);
+			gtk_combo_box_append_text(GTK_COMBO_BOX(combobox), text);
+			g_free(text);
 
-			if (g_str_equal (iter->data, cur_style_dir))
+			if (g_str_equal(iter->data, cur_style_dir))
 				selected = index;
 			index++;
-			pidgin_message_style_unref (style);
+			pidgin_message_style_unref(style);
 		}
 	}
-	gtk_combo_box_set_active (GTK_COMBO_BOX(combobox), selected);
-	g_signal_connect_after (G_OBJECT(combobox), "changed", G_CALLBACK(style_changed), NULL);
+	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), selected);
+	g_signal_connect_after(G_OBJECT(combobox), "changed", G_CALLBACK(style_changed), NULL);
 	return combobox;
 }
 
 static void
-variant_update_conversation (PurpleConversation *conv)
+variant_update_conversation(PurpleConversation *conv)
 {
-	PidginConversation *gtkconv = PIDGIN_CONVERSATION (conv);
-	WebKitWebView *webview = WEBKIT_WEB_VIEW (gtkconv->webview);
-	PidginMessageStyle *style = (PidginMessageStyle*) g_object_get_data (G_OBJECT(webview), MESSAGE_STYLE_KEY);
+	PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
+	WebKitWebView *webview = WEBKIT_WEB_VIEW(gtkconv->webview);
+	PidginMessageStyle *style = (PidginMessageStyle *)g_object_get_data(G_OBJECT(webview), MESSAGE_STYLE_KEY);
 	char *script;
 
-	g_assert (style);
+	g_assert(style);
 
-	script = g_strdup_printf ("setStylesheet(\"mainStyle\",\"%s\")", pidgin_message_style_get_css (style));
-	gtk_webview_safe_execute_script (GTK_WEBVIEW(webview), script);
+	script = g_strdup_printf("setStylesheet(\"mainStyle\",\"%s\")", pidgin_message_style_get_css(style));
+	gtk_webview_safe_execute_script(GTK_WEBVIEW(webview), script);
 
-	set_theme_webkit_settings (WEBKIT_WEB_VIEW (gtkconv->webview), style);
-	g_free (script);
+	set_theme_webkit_settings(WEBKIT_WEB_VIEW(gtkconv->webview), style);
+	g_free(script);
 }
 
 static void
-variant_changed (GtkWidget* combobox, gpointer null)
+variant_changed(GtkWidget* combobox, gpointer null)
 {
 	char *name;
 	GList *list;
-	PidginMessageStyle *style = pidgin_message_style_load (cur_style_dir);
+	PidginMessageStyle *style = pidgin_message_style_load(cur_style_dir);
 
-	g_assert (style);
-	name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combobox));
-	pidgin_message_style_set_variant (style, name);
-	pidgin_message_style_save_state (style);
+	g_assert(style);
+	name = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combobox));
+	pidgin_message_style_set_variant(style, name);
+	pidgin_message_style_save_state(style);
 
 	/* update conversations */
-	list = purple_get_conversations ();
+	list = purple_get_conversations();
 	while (list) {
-		variant_update_conversation (list->data);
+		variant_update_conversation(list->data);
 		list = g_list_next(list);
 	}
 
-	g_free (name);
-	pidgin_message_style_unref (style);
+	g_free(name);
+	pidgin_message_style_unref(style);
 }
 
 static GtkWidget *
 get_variant_config_frame()
 {
-	PidginMessageStyle *style = pidgin_message_style_load (cur_style_dir);
-	GList *variants = pidgin_message_style_get_variants (style), *iter;
-	char *cur_variant = pidgin_message_style_get_variant (style);
+	PidginMessageStyle *style = pidgin_message_style_load(cur_style_dir);
+	GList *variants = pidgin_message_style_get_variants(style), *iter;
+	char *cur_variant = pidgin_message_style_get_variant(style);
 	GtkWidget *combobox = gtk_combo_box_new_text();
 	int def = -1, index = 0;
 
-	pidgin_message_style_unref (style);
+	pidgin_message_style_unref(style);
 
-	for (iter = variants; iter; iter = g_list_next (iter)) {
-		gtk_combo_box_append_text (GTK_COMBO_BOX(combobox), iter->data);
+	for (iter = variants; iter; iter = g_list_next(iter)) {
+		gtk_combo_box_append_text(GTK_COMBO_BOX(combobox), iter->data);
 
-		if (g_str_equal (cur_variant, iter->data))
+		if (g_str_equal(cur_variant, iter->data))
 			def = index;
 		index ++;
 
 	}
 
-	gtk_combo_box_set_active (GTK_COMBO_BOX(combobox), def);
-	g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(variant_changed), NULL);
+	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), def);
+	g_signal_connect(G_OBJECT(combobox), "changed", G_CALLBACK(variant_changed), NULL);
 
 	return combobox;
 }
 
 static void
-style_changed_reset_variants (GtkWidget* combobox, gpointer table)
+style_changed_reset_variants(GtkWidget* combobox, gpointer table)
 {
 	/* I hate to do this, I swear. But I don't know how to cleanly clean an existing combobox */
-	GtkWidget* variants = g_object_get_data (G_OBJECT(table), "variants-cbox");
-	gtk_widget_destroy (variants);
-	variants = get_variant_config_frame ();
-	gtk_table_attach_defaults (GTK_TABLE (table), variants, 1, 2, 1, 2);
-	gtk_widget_show_all (GTK_WIDGET(table));
+	GtkWidget* variants = g_object_get_data(G_OBJECT(table), "variants-cbox");
+	gtk_widget_destroy(variants);
+	variants = get_variant_config_frame();
+	gtk_table_attach_defaults(GTK_TABLE(table), variants, 1, 2, 1, 2);
+	gtk_widget_show_all(GTK_WIDGET(table));
 
-	g_object_set_data (G_OBJECT(table), "variants-cbox", variants);
+	g_object_set_data(G_OBJECT(table), "variants-cbox", variants);
 }
 
 static GtkWidget*
 get_config_frame(PurplePlugin* plugin)
 {
-	GtkWidget *table = gtk_table_new (2, 2, FALSE);
-	GtkWidget *style_config = get_style_config_frame ();
-	GtkWidget *variant_config = get_variant_config_frame ();
+	GtkWidget *table = gtk_table_new(2, 2, FALSE);
+	GtkWidget *style_config = get_style_config_frame();
+	GtkWidget *variant_config = get_variant_config_frame();
 
-	gtk_table_attach_defaults (GTK_TABLE(table), gtk_label_new ("Message Style"), 0, 1, 0, 1);
-	gtk_table_attach_defaults (GTK_TABLE(table), style_config, 1, 2, 0, 1);
-	gtk_table_attach_defaults (GTK_TABLE(table), gtk_label_new ("Style Variant"), 0, 1, 1, 2);
-	gtk_table_attach_defaults (GTK_TABLE(table), variant_config, 1, 2, 1, 2);
+	gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new("Message Style"), 0, 1, 0, 1);
+	gtk_table_attach_defaults(GTK_TABLE(table), style_config, 1, 2, 0, 1);
+	gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new("Style Variant"), 0, 1, 1, 2);
+	gtk_table_attach_defaults(GTK_TABLE(table), variant_config, 1, 2, 1, 2);
 
-
-	g_object_set_data (G_OBJECT(table), "variants-cbox", variant_config);
+	g_object_set_data(G_OBJECT(table), "variants-cbox", variant_config);
 	/* to clarify, this is a second signal connected on style config */
-	g_signal_connect_after (G_OBJECT(style_config), "changed", G_CALLBACK(style_changed_reset_variants), table);
+	g_signal_connect_after(G_OBJECT(style_config), "changed", G_CALLBACK(style_changed_reset_variants), table);
 
 	return table;
 }
@@ -818,7 +820,7 @@
 	PURPLE_MAJOR_VERSION,		/* Purple Major Version	*/
 	PURPLE_MINOR_VERSION,		/* Purple Minor Version	*/
 	PURPLE_PLUGIN_STANDARD,		/* plugin type			*/
-PIDGIN_PLUGIN_TYPE,			/* ui requirement		*/
+	PIDGIN_PLUGIN_TYPE,			/* ui requirement		*/
 	0,							/* flags				*/
 	NULL,						/* dependencies			*/
 	PURPLE_PRIORITY_DEFAULT,	/* priority				*/
@@ -851,10 +853,11 @@
 	info.summary = "Adium-like IMs with Pidgin";
 	info.description = "You can chat in Pidgin using Adium's WebKit view.";
 
-	purple_prefs_add_none ("/plugins");
-	purple_prefs_add_none ("/plugins/gtk");
-	purple_prefs_add_none ("/plugins/gtk/adiumthemes");
-	purple_prefs_add_string ("/plugins/gtk/adiumthemes/stylepath", "");
+	purple_prefs_add_none("/plugins");
+	purple_prefs_add_none("/plugins/gtk");
+	purple_prefs_add_none("/plugins/gtk/adiumthemes");
+	purple_prefs_add_string("/plugins/gtk/adiumthemes/stylepath", "");
 }
 
 PURPLE_INIT_PLUGIN(webkit, init_plugin, info)
+
--- a/pidgin/smileyparser.c	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/smileyparser.c	Thu Sep 08 22:04:35 2011 +0000
@@ -1,140 +1,165 @@
+/* pidgin
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
+ */
 
 #include <gtk/gtk.h>
+#include <debug.h>
 #include "smileyparser.h"
 #include <smiley.h>
 #include <string.h>
 #include "gtkthemes.h"
 
-static char* get_fullpath (const char* filename)
+static char *
+get_fullpath(const char *filename)
 {
-	if (g_path_is_absolute (filename)) return g_strdup (filename);
-	else return g_build_path (g_get_current_dir (), filename, NULL);
+	if (g_path_is_absolute(filename))
+		return g_strdup(filename);
+	else
+		return g_build_path(g_get_current_dir(), filename, NULL);
 }
 
 static void
-parse_for_shortcut_plaintext (const char* text, const char* shortcut, const char* file, GString* ret) 
+parse_for_shortcut_plaintext(const char *text, const char *shortcut, const char *file, GString *ret)
 {
 	const char *tmp = text;
 
-	for(;*tmp;) {
-		const char *end = strstr (tmp, shortcut);
+	for (;*tmp;) {
+		const char *end = strstr(tmp, shortcut);
 		char *path;
 		char *escaped_path;
 
 		if (end == NULL) {
-			g_string_append (ret, tmp);
+			g_string_append(ret, tmp);
 			break;
 		}
-		path = get_fullpath (file);
-		escaped_path = g_markup_escape_text (path, -1);
+		path = get_fullpath(file);
+		escaped_path = g_markup_escape_text(path, -1);
 
-		g_string_append_len (ret, tmp, end-tmp);
-		g_string_append_printf (ret,"<img alt='%s' src='%s' />",
+		g_string_append_len(ret, tmp, end-tmp);
+		g_string_append_printf(ret,"<img alt='%s' src='%s' />",
 					shortcut, escaped_path);
-		g_free (path);
-		g_free (escaped_path);
-		g_assert (strlen (tmp) >= strlen (shortcut));
-		tmp = end + strlen (shortcut);
+		g_free(path);
+		g_free(escaped_path);
+		g_assert(strlen(tmp) >= strlen(shortcut));
+		tmp = end + strlen(shortcut);
 	}
 }
 
-static char*
-parse_for_shortcut (const char* markup, const char* shortcut, const char* file)
+static char *
+parse_for_shortcut(const char *markup, const char *shortcut, const char *file)
 {
-	GString* ret = g_string_new ("");
-	char *local_markup = g_strdup (markup);
-	char *escaped_shortcut = g_markup_escape_text (shortcut, -1);
+	GString* ret = g_string_new("");
+	char *local_markup = g_strdup(markup);
+	char *escaped_shortcut = g_markup_escape_text(shortcut, -1);
 
 	char *temp = local_markup;
-	
+
 	for (;*temp;) {
-		char *end = strchr (temp, '<');
+		char *end = strchr(temp, '<');
 		char *end_of_tag;
 
 		if (!end) {
-			parse_for_shortcut_plaintext (temp, escaped_shortcut, file, ret);
+			parse_for_shortcut_plaintext(temp, escaped_shortcut, file, ret);
 			break;
 		}
 
 		*end = 0;
-		parse_for_shortcut_plaintext (temp, escaped_shortcut, file, ret);
+		parse_for_shortcut_plaintext(temp, escaped_shortcut, file, ret);
 		*end = '<';
 
 		/* if this is well-formed, then there should be no '>' within
 		 * the tag. TODO: handle a comment tag better :( */
-		end_of_tag = strchr (end, '>');
+		end_of_tag = strchr(end, '>');
 		if (!end_of_tag) {
-			g_string_append (ret, end);
+			g_string_append(ret, end);
 			break;
 		}
 
-		g_string_append_len (ret, end, end_of_tag-end+1);
+		g_string_append_len(ret, end, end_of_tag - end + 1);
 
 		temp = end_of_tag + 1;
 	}
-	g_free (local_markup);
-	g_free (escaped_shortcut);
-	return g_string_free (ret, FALSE);
+	g_free(local_markup);
+	g_free(escaped_shortcut);
+	return g_string_free(ret, FALSE);
 }
 
-static char*
-parse_for_purple_smiley (const char* markup, PurpleSmiley *smiley)
+static char *
+parse_for_purple_smiley(const char *markup, PurpleSmiley *smiley)
 {
-	char *file = purple_smiley_get_full_path (smiley);
-	char *ret = parse_for_shortcut (markup, purple_smiley_get_shortcut (smiley), file);
-	g_free (file);
+	char *file = purple_smiley_get_full_path(smiley);
+	char *ret = parse_for_shortcut(markup, purple_smiley_get_shortcut(smiley), file);
+	g_free(file);
 	return ret;
 }
 
-static char*
-parse_for_smiley_list (const char* markup, GHashTable* smileys)
+static char *
+parse_for_smiley_list(const char *markup, GHashTable *smileys)
 {
 	GHashTableIter iter;
 	char *key, *value;
-	char *ret = g_strdup (markup);
+	char *ret = g_strdup(markup);
 
-	g_hash_table_iter_init (&iter, smileys);
-	while (g_hash_table_iter_next (&iter, (gpointer*)&key, (gpointer*)&value))
+	g_hash_table_iter_init(&iter, smileys);
+	while (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value))
 	{
-		char* temp = parse_for_shortcut (ret, key, value);
-		g_free (ret);
+		char *temp = parse_for_shortcut(ret, key, value);
+		g_free(ret);
 		ret = temp;
 	}
+
 	return ret;
 }
 
-char*
-smiley_parse_markup (const char* markup, const char *proto_id) 
+char *
+smiley_parse_markup(const char *markup, const char *proto_id)
 {
-	GList *smileys = purple_smileys_get_all ();
-	char *temp = g_strdup (markup), *temp2;
+	GList *smileys = purple_smileys_get_all();
+	char *temp = g_strdup(markup), *temp2;
 	struct smiley_list *list;
 	const char *proto_name = "default";
 
 	if (proto_id != NULL) {
 		PurplePlugin *proto;
-		proto = purple_find_prpl (proto_id);
+		proto = purple_find_prpl(proto_id);
 		proto_name = proto->info->name;
 	}
 
 	/* unnecessarily slow, but lets manage for now. */
-	for (; smileys; smileys = g_list_next (smileys)) {
-		temp2 = parse_for_purple_smiley (temp, PURPLE_SMILEY (smileys->data));
-		g_free (temp);
+	for (; smileys; smileys = g_list_next(smileys)) {
+		temp2 = parse_for_purple_smiley(temp, PURPLE_SMILEY(smileys->data));
+		g_free(temp);
 		temp = temp2;
 	}
 
 	/* now for each theme smiley, observe that this does look nasty */
-	
 	if (!current_smiley_theme || !(current_smiley_theme->list)) {
-		printf ("theme does not exist\n");
+		purple_debug_warning("smiley", "theme does not exist\n");
 		return temp;
 	}
 
 	for (list = current_smiley_theme->list; list; list = list->next) {
-		if (g_str_equal (list->sml, proto_name)) {
-			temp2 = parse_for_smiley_list (temp, list->files);
-			g_free (temp);
+		if (g_str_equal(list->sml, proto_name)) {
+			temp2 = parse_for_smiley_list(temp, list->files);
+			g_free(temp);
 			temp = temp2;
 		}
 	}
--- a/pidgin/smileyparser.h	Thu Sep 08 05:13:53 2011 +0000
+++ b/pidgin/smileyparser.h	Thu Sep 08 22:04:35 2011 +0000
@@ -1,3 +1,25 @@
+/* pidgin
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ *
+ */
 
-char*
-smiley_parse_markup (const char* markup, const char* sml);
+char *
+smiley_parse_markup(const char *markup, const char *sml);
+