changeset 20048:e478efce3d8b

merge of '02b9fa9cd591c94c082a8ff02ea27fe33b278a0a' and 'dff1e047523fa59edadc01b808a8d2c2d528f47a'
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sat, 15 Sep 2007 07:39:38 +0000
parents 4fdf9c1212e2 (diff) faf39a913c61 (current diff)
children f6abebd4d0ff
files
diffstat 12 files changed, 172 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Sep 15 07:39:25 2007 +0000
+++ b/ChangeLog	Sat Sep 15 07:39:38 2007 +0000
@@ -1,5 +1,12 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+Version 2.2.1:
+	http://developer.pidgin.im/query?status=closed&milestone=2.2.1
+	
+	Pidgin:
+	* When aliasing someone to an alias that already exists in the
+	  same group, offer to merge the buddies into the same contact
+
 Version 2.2.0 (09/13/2007):
 	http://developer.pidgin.im/query?status=closed&milestone=2.2.0
 
--- a/configure.ac	Sat Sep 15 07:39:25 2007 +0000
+++ b/configure.ac	Sat Sep 15 07:39:38 2007 +0000
@@ -46,8 +46,8 @@
 m4_define([purple_lt_current], [2])
 m4_define([purple_major_version], [2])
 m4_define([purple_minor_version], [2])
-m4_define([purple_micro_version], [0])
-m4_define([purple_version_suffix], [])
+m4_define([purple_micro_version], [1])
+m4_define([purple_version_suffix], [devel])
 m4_define([purple_version],
           [purple_major_version.purple_minor_version.purple_micro_version])
 m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
@@ -55,8 +55,8 @@
 m4_define([gnt_lt_current], [2])
 m4_define([gnt_major_version], [2])
 m4_define([gnt_minor_version], [2])
-m4_define([gnt_micro_version], [0])
-m4_define([gnt_version_suffix], [])
+m4_define([gnt_micro_version], [1])
+m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
 m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
@@ -352,13 +352,19 @@
 	dnl #######################################################################
 	if test "x$with_x" = "xyes" ; then
 		PKG_CHECK_MODULES(X11, x11,
-			[AC_DEFINE(HAVE_X, 1, [Define to 1 if you have X11])],
+			[AC_DEFINE(HAVE_X11, 1, [Define to 1 if you have X11])],
 			[AC_MSG_RESULT(no)
-			with_x=no])
+				if test "x$x_incpath_add" != "x" -a "x$x_libpath_add" != "x"; then
+					X11_LIBS="$x_libpath_add"
+					X11_CFLAGS="$x_incpath_add"
+				else
+					with_x=no
+				fi
+			])
 		AC_SUBST(X11_LIBS)
 		AC_SUBST(X11_CFLAGS)
 	fi
-	
+
 	dnl #######################################################################
 	dnl # Check for XScreenSaver
 	dnl #######################################################################
--- a/libpurple/accountopt.h	Sat Sep 15 07:39:25 2007 +0000
+++ b/libpurple/accountopt.h	Sat Sep 15 07:39:38 2007 +0000
@@ -49,8 +49,10 @@
 
 	} default_value;
 
-	gboolean masked;
-
+	gboolean masked;        /**< Whether the value entered should be
+	                         *   obscured from view (for passwords and
+	                         *   similar options)
+	                         */
 } PurpleAccountOption;
 
 /**
@@ -184,10 +186,12 @@
 											const char *value);
 
 /**
- * Sets the masking for an account option.
+ * Sets the masking for an account option. Setting this to %TRUE acts
+ * as a hint to the UI that the option's value should be obscured from
+ * view, like a password.
  *
  * @param option The account option.
- * @param masked  The masking.
+ * @param masked The masking.
  */
 void
 purple_account_option_set_masked(PurpleAccountOption *option, gboolean masked);
@@ -282,11 +286,13 @@
 	const PurpleAccountOption *option);
 
 /**
- * Returns the masking for an account option.
+ * Returns whether an option's value should be masked from view, like a
+ * password.  If so, the UI might display each character of the option
+ * as a '*' (for example).
  *
  * @param option The account option.
  *
- * @return The masking.
+ * @return %TRUE if the option's value should be obscured.
  */
 gboolean
 purple_account_option_get_masked(const PurpleAccountOption *option);
--- a/libpurple/protocols/msn/msn.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat Sep 15 07:39:38 2007 +0000
@@ -2196,8 +2196,7 @@
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 											   option);
 
-	/* TODO: Mark translatable as soon as 2.2.0 is released and we're not string frozen */
-	option = purple_account_option_string_new("HTTP Method Server",
+	option = purple_account_option_string_new(_("HTTP Method Server"),
 										  "http_method_server", MSN_HTTPCONN_SERVER);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 											   option);
--- a/libpurple/protocols/myspace/Makefile.am	Sat Sep 15 07:39:25 2007 +0000
+++ b/libpurple/protocols/myspace/Makefile.am	Sat Sep 15 07:39:38 2007 +0000
@@ -2,7 +2,7 @@
 
 pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
-SOURCES = markup.c \
+MSIMSOURCES = markup.c \
 	  markup.h \
 	  message.c \
 	  message.h \
@@ -24,14 +24,14 @@
 
 st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES     = libmyspace.a
-libmyspace_a_SOURCES = $(SOURCES)
+libmyspace_a_SOURCES = $(MSIMSOURCES)
 libmyspace_a_CFLAGS  = $(AM_CFLAGS)
 
 else
 
 st =
 pkg_LTLIBRARIES       = libmyspace.la
-libmyspace_la_SOURCES = $(SOURCES)
+libmyspace_la_SOURCES = $(MSIMSOURCES)
 libmyspace_la_LIBADD  = $(GLIB_LIBS)
 
 endif
--- a/libpurple/proxy.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/libpurple/proxy.c	Sat Sep 15 07:39:38 2007 +0000
@@ -400,7 +400,7 @@
  	 */
 	if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data))
 		return;
-	
+
 	purple_debug_info("proxy", "Connected to %s:%d.\n",
 					connect_data->host, connect_data->port);
 
@@ -1992,6 +1992,13 @@
 		proxy_pref_cb, NULL);
 	purple_prefs_connect_callback(handle, "/purple/proxy/password",
 		proxy_pref_cb, NULL);
+
+	/* Load the initial proxy settings */
+	purple_prefs_trigger_callback("/purple/proxy/type");
+	purple_prefs_trigger_callback("/purple/proxy/host");
+	purple_prefs_trigger_callback("/purple/proxy/port");
+	purple_prefs_trigger_callback("/purple/proxy/username");
+	purple_prefs_trigger_callback("/purple/proxy/password");
 }
 
 void
--- a/libpurple/status.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/libpurple/status.c	Sat Sep 15 07:39:38 2007 +0000
@@ -1668,6 +1668,14 @@
 	purple_prefs_connect_callback(handle, "/purple/status/scores/offline_msg",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(SCORE_OFFLINE_MESSAGE));
+
+	purple_prefs_trigger_callback("/purple/status/scores/offline");
+	purple_prefs_trigger_callback("/purple/status/scores/available");
+	purple_prefs_trigger_callback("/purple/status/scores/invisible");
+	purple_prefs_trigger_callback("/purple/status/scores/away");
+	purple_prefs_trigger_callback("/purple/status/scores/extended_away");
+	purple_prefs_trigger_callback("/purple/status/scores/idle");
+	purple_prefs_trigger_callback("/purple/status/scores/offline_msg");
 }
 
 void
--- a/pidgin.spec.in	Sat Sep 15 07:39:25 2007 +0000
+++ b/pidgin.spec.in	Sat Sep 15 07:39:38 2007 +0000
@@ -363,8 +363,6 @@
 %{_bindir}/pidgin
 %{_datadir}/pixmaps/pidgin
 %{_datadir}/icons/hicolor/*/apps/pidgin.*
-%dir %{_datadir}/sounds/pidgin
-%{_datadir}/sounds/pidgin/*
 %{_datadir}/applications/*
 %{_sysconfdir}/gconf/schemas/purple.schemas
 
@@ -374,6 +372,8 @@
 
 %{_libdir}/libpurple.so.*
 %dir %{_libdir}/purple-2
+%{_datadir}/purple
+%{_datadir}/sounds/purple
 %attr(755, root, root) %{perl_vendorarch}/Purple.pm
 %attr(755, root, root) %{perl_vendorarch}/auto/Purple
 
@@ -427,7 +427,7 @@
 %endif
 
 %if 0%{?_with_mono:1}
-%files libpurple-mono
+%files -n libpurple-mono
 %defattr(-, root, root)
 
 %{_libdir}/purple-2/mono.so
@@ -457,6 +457,9 @@
 %endif
 
 %changelog
+* Fri Sep 14 2007 Stu Tomlinson <stu@nosnilmot.com>
+- Fix spec file for moved sounds & new CA certificates
+
 * Thu Jul 12 2007 Stu Tomlinson <stu@nosnilmot.com>
 - Don't hardcode silc header locations, rely on pkg-config for those,
   because I think I broke non-pkg-config detection of older silc
--- a/pidgin/gtkblist.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/pidgin/gtkblist.c	Sat Sep 15 07:39:38 2007 +0000
@@ -137,6 +137,7 @@
 static void redo_buddy_list(PurpleBuddyList *list, gboolean remove, gboolean rerender);
 static void pidgin_blist_collapse_contact_cb(GtkWidget *w, PurpleBlistNode *node);
 static char *pidgin_get_group_title(PurpleBlistNode *gnode, gboolean expanded);
+static void pidgin_blist_expand_contact_cb(GtkWidget *w, PurpleBlistNode *node);
 
 struct _pidgin_blist_node {
 	GtkTreeRowReference *row;
@@ -394,6 +395,102 @@
 }
 #endif
 
+static void
+gtk_blist_do_personize(GList *merges)
+{
+	PurpleBlistNode *contact = NULL;
+	int max = 0;
+	GList *tmp;
+
+	/* First, we find the contact to merge the rest of the buddies into.
+ 	 * This will be the contact with the most buddies in it; ties are broken
+ 	 * by which contact is higher in the list
+ 	 */
+	for (tmp = merges; tmp; tmp = tmp->next) {
+		PurpleBlistNode *node = tmp->data;
+		PurpleBlistNode *b;
+		int i = 0;
+
+		if (node->type == PURPLE_BLIST_BUDDY_NODE)
+			node = node->parent;
+
+		if (node->type != PURPLE_BLIST_CONTACT_NODE)
+			continue;
+		
+
+		for (b = node->child; b; b = b->next)
+			i++;
+		if (i > max) {
+			contact = node;
+			max = i;
+		}
+	}
+
+	if (contact == NULL)
+		return;
+
+	/* Merge all those buddies into this contact */
+	for (tmp = merges; tmp; tmp = tmp->next) {
+		PurpleBlistNode *node = tmp->data;
+		if (node->type == PURPLE_BLIST_BUDDY_NODE)
+			node = node->parent;
+
+		if (node == contact)
+			continue;
+
+		purple_blist_merge_contact(node, contact);
+	}
+	
+	/* And show the expanded contact, so the people know what's going on */
+	pidgin_blist_expand_contact_cb(NULL, contact);
+	g_list_free(merges);
+}
+
+static void
+gtk_blist_auto_personize(PurpleBlistNode *group, const char *alias)
+{
+	PurpleBlistNode *contact;
+	PurpleBlistNode *buddy;
+	GList *merges = NULL;
+	int i = 0;
+	char *a = g_utf8_casefold(alias, -1);
+	char *msg;
+
+	for (contact = group->child; contact; contact = contact->next) {
+		char *node_alias;
+		if (contact->type != PURPLE_BLIST_CONTACT_NODE)
+			continue;
+		
+		node_alias = g_utf8_casefold(purple_contact_get_alias(contact), -1);
+		if (node_alias && !g_utf8_collate(node_alias, a)) {
+			merges = g_list_append(merges, contact);
+			i++;
+			g_free(node_alias);
+			continue;
+		}
+		g_free(node_alias);
+
+		for (buddy = contact->child; buddy; buddy = buddy->next) {
+			if (buddy->type != PURPLE_BLIST_BUDDY_NODE)
+				continue;
+	
+			node_alias = g_utf8_casefold(purple_buddy_get_alias(buddy), -1);
+			if (node_alias && !g_utf8_collate(node_alias, a)) {
+				merges = g_list_append(merges, buddy);
+				i++;
+			}
+			g_free(node_alias);
+		}
+	}
+	g_free(a);
+	
+	msg = g_strdup_printf(ngettext("You can't merge one contact. That doesn't make any sense. You should never see this message ever", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias);
+	if (i > 1)
+		purple_request_action(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. "
+							 "You can separate them again by choosing 'Expand' from the contact's context menu"), 0, NULL, NULL, NULL,
+				      merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free));
+}
+
 static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1,
 					 char *arg2, PurpleBuddyList *list)
 {
@@ -420,13 +517,14 @@
 				PurpleContact *contact = (PurpleContact *)node;
 				struct _pidgin_blist_node *gtknode = (struct _pidgin_blist_node *)node->ui_data;
 
-				if (contact->alias || gtknode->contact_expanded)
+				if (contact->alias || gtknode->contact_expanded) {
 					purple_blist_alias_contact(contact, arg2);
-				else
-				{
+					gtk_blist_auto_personize(node->parent, arg2);
+				} else {
 					PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact);
 					purple_blist_alias_buddy(buddy, arg2);
 					serv_alias_buddy(buddy);
+					gtk_blist_auto_personize(node->parent, arg2);
 				}
 			}
 			break;
@@ -434,6 +532,7 @@
 		case PURPLE_BLIST_BUDDY_NODE:
 			purple_blist_alias_buddy((PurpleBuddy*)node, arg2);
 			serv_alias_buddy((PurpleBuddy *)node);
+			gtk_blist_auto_personize(node->parent->parent, arg2);
 			break;
 		case PURPLE_BLIST_GROUP_NODE:
 			dest = purple_find_group(arg2);
@@ -2264,18 +2363,19 @@
 		if (prpl_info && prpl_info->icon_spec.scale_rules & PURPLE_ICON_SCALE_DISPLAY)
 			purple_buddy_icon_get_scale_size(&prpl_info->icon_spec, &scale_width, &scale_height);
 
-		if (scaled) {
+		if (scaled || scale_height > 200 || scale_width > 200) {
+			float scale_size = scaled ? 32.0 : 200.0;
 			if(scale_height > scale_width) {
-				scale_width = 32.0 * (double)scale_width / (double)scale_height;
-				scale_height = 32;
+				scale_width = scale_size * (double)scale_width / (double)scale_height;
+				scale_height = scale_size;
 			} else {
-				scale_height = 32.0 * (double)scale_height / (double)scale_width;
-				scale_width = 32;
+				scale_height = scale_size * (double)scale_height / (double)scale_width;
+				scale_width = scale_size;
 			}
 
-			ret = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 32, 32);
+			ret = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, scale_size, scale_size);
 			gdk_pixbuf_fill(ret, 0x00000000);
-			gdk_pixbuf_scale(buf, ret, (32-scale_width)/2, (32-scale_height)/2, scale_width, scale_height, (32-scale_width)/2, (32-scale_height)/2, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR);
+			gdk_pixbuf_scale(buf, ret, (scale_size-scale_width)/2, (scale_size-scale_height)/2, scale_width, scale_height, (scale_size-scale_width)/2, (scale_size-scale_height)/2, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR);
 			if (pidgin_gdk_pixbuf_is_opaque(ret))
 				pidgin_gdk_pixbuf_make_round(ret);
 		} else {
--- a/pidgin/gtkdialogs.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/pidgin/gtkdialogs.c	Sat Sep 15 07:39:38 2007 +0000
@@ -365,7 +365,7 @@
 	filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "logo.png", NULL);
 	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 	g_free(filename);
-#ifdef 0  /* Don't versionize the logo when the logo has the version in it */
+#if 0  /* Don't versionize the logo when the logo has the version in it */
 	pidgin_logo_versionize(&pixbuf, logo);
 #endif
 	gtk_widget_destroy(logo);
--- a/pidgin/gtkimhtmltoolbar.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Sat Sep 15 07:39:38 2007 +0000
@@ -739,11 +739,11 @@
 		while (it != NULL)
 		{
 			it_tmp = it;
-			gtk_box_pack_start(GTK_BOX(line), it->button, TRUE, TRUE, 0);
+			gtk_box_pack_start(GTK_BOX(line), it->button, FALSE, FALSE, 0);
 			gtk_widget_show(it->button);
 			line_width += it->width;
 			if (line_width >= max_line_width) {
-				gtk_box_pack_start(GTK_BOX(smiley_table), line, FALSE, TRUE, 0);
+				gtk_box_pack_start(GTK_BOX(smiley_table), line, FALSE, FALSE, 0);
 				line = gtk_hbox_new(FALSE, 0);
 				line_width = 0;
 				col = 0;
--- a/pidgin/gtkprefs.c	Sat Sep 15 07:39:25 2007 +0000
+++ b/pidgin/gtkprefs.c	Sat Sep 15 07:39:38 2007 +0000
@@ -1093,7 +1093,7 @@
 	const char *proxy = value;
 
 	if (strcmp(proxy, "none") && strcmp(proxy, "envvar"))
-	        gtk_widget_show_all(frame);
+		gtk_widget_show_all(frame);
 	else
 		gtk_widget_hide(frame);
 }