changeset 29818:2c95b7c57ebb

Fix up the X-Status code in many ways: * Clean up the descriptions to be consistently of the form, "I am _____." * Properly mark the descriptions for translation. * Utilize the files from small smiley theme as much as possible. Through a Makefile rule, they will be copied from emotes/small/16/ to emblems/16 at build time and then installed as usual. This is slightly hackish, but ensures that our icons are consistent and saves manual copying work and duplication of source files in the repository. + As part of this, mobile.png was moved to emotes/small/16, as it is needed in both places. * Call these things "Custom Status Icon"s (adding "Status") in the UI. * Add icqmood0 = shopping, based on testing with ICQ6. Thanks John!!! * Change the xstatus_crap icon to xstatus_typing to match ICQ 6. The other typing icon was left alone, except that the name was set to NULL so we wouldn't get duplicates in the list. * Change the xstatus_iron (Pro7 TV icon) to xstatus_suit, using the 'person wearing a suit' icon from N3fr0n to match ICQ6. I named this icon, somewhat arbitrarily, "At the office". * The PDA icon is now the same as the hiptop, but hopefully that won't cause any confusion. Also, the custom icon is now higher priority than the hiptop icon. * The music icon is the ("tune") emblem, not the emoticon. This seems more consistent, given that we're talking about buddy list emblems. * The "Googling" icon has been renamed to "Searching the web" to avoid the trademark. * The "zzz" icon is now an icon for smoking, which seems to fit with the official client's icon as posted in #4508. Other clients may show a marijuana leaf. Oh well.
author Richard Laager <rlaager@wiktel.com>
date Sun, 16 Nov 2008 08:39:34 +0000
parents ef7e87ada472
children 5f8fc6e7466a
files .mtn-ignore libpurple/protocols/oscar/family_locate.c libpurple/protocols/oscar/oscar.c pidgin/pixmaps/Makefile.am pidgin/pixmaps/emblems/16/mobile.png pidgin/pixmaps/emotes/small/16/Makefile.am pidgin/pixmaps/emotes/small/16/mobile.png pidgin/pixmaps/emotes/small/16/small.theme.in po/POTFILES.in
diffstat 9 files changed, 184 insertions(+), 106 deletions(-) [+]
line wrap: on
line diff
--- a/.mtn-ignore	Sun Nov 16 08:24:37 2008 +0000
+++ b/.mtn-ignore	Sun Nov 16 08:39:34 2008 +0000
@@ -37,6 +37,28 @@
 pidgin-.*.tar.bz2
 pidgin-*.*.*-win32bin$
 pidgin/pidgin$
+pidgin/pixmaps/emblems/16/angry.png
+pidgin/pixmaps/emblems/16/beer.png
+pidgin/pixmaps/emblems/16/busy.png
+pidgin/pixmaps/emblems/16/camera.png
+pidgin/pixmaps/emblems/16/cigarette.png
+pidgin/pixmaps/emblems/16/coffee.png
+pidgin/pixmaps/emblems/16/console.png
+pidgin/pixmaps/emblems/16/love.png
+pidgin/pixmaps/emblems/16/meeting.png
+pidgin/pixmaps/emblems/16/mobile.png
+pidgin/pixmaps/emblems/16/musical-note.png
+pidgin/pixmaps/emblems/16/party.png
+pidgin/pixmaps/emblems/16/phone.png
+pidgin/pixmaps/emblems/16/plate.png
+pidgin/pixmaps/emblems/16/question.png
+pidgin/pixmaps/emblems/16/search.png
+pidgin/pixmaps/emblems/16/sick.png
+pidgin/pixmaps/emblems/16/sleepy.png
+pidgin/pixmaps/emblems/16/smile-big.png
+pidgin/pixmaps/emblems/16/thinking.png
+pidgin/pixmaps/emblems/16/tv.png
+pidgin/pixmaps/emblems/16/yawn.png
 pidgin/pixmaps/emotes/default/24/theme
 pidgin/pixmaps/emotes/none/theme
 pidgin/pixmaps/emotes/small/16/theme
--- a/libpurple/protocols/oscar/family_locate.c	Sun Nov 16 08:24:37 2008 +0000
+++ b/libpurple/protocols/oscar/family_locate.c	Sun Nov 16 08:39:34 2008 +0000
@@ -264,139 +264,146 @@
 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
 
-	{"xstatus_thinking", "Thinking",
+	{"thinking", N_("Thinking"),
 	 {0x3f, 0xb0, 0xbd, 0x36, 0xaf, 0x3b, 0x4a, 0x60,
 	  0x9e, 0xef, 0xcf, 0x19, 0x0f, 0x6a, 0x5a, 0x7f}},
 
-	{"xstatus_busy", "Busy",
+	{"busy", N_("Busy"),
 	 {0x48, 0x8e, 0x14, 0x89, 0x8a, 0xca, 0x4a, 0x08,
 	  0x82, 0xaa, 0x77, 0xce, 0x7a, 0x16, 0x52, 0x08}},
 
-	{"xstatus_shopping", "Shopping",
+	{"xstatus_shopping", N_("Shopping"),
 	 {0x63, 0x62, 0x73, 0x37, 0xa0, 0x3f, 0x49, 0xff,
 	  0x80, 0xe5, 0xf7, 0x09, 0xcd, 0xe0, 0xa4, 0xee}},
 
-	{"xstatus_typing", "Typing",
+	/* This was in the original patch, but isn't what the official client
+	 * (ICQ 6) sets when you choose its typewriter icon. */
+	{"xstatus_typing", NULL,
 	 {0x63, 0x4f, 0x6b, 0xd8 ,0xad, 0xd2, 0x4a, 0xa1,
 	  0xaa, 0xb9, 0x11, 0x5b, 0xc2, 0x6d, 0x05, 0xa1}},
 
-	{"xstatus_question", "Question Mark",
+	{"question", N_("Questioning"),
 	 {0x63, 0x14, 0x36, 0xff, 0x3f, 0x8a, 0x40, 0xd0,
 	  0xa5, 0xcb, 0x7b, 0x66, 0xe0, 0x51, 0xb3, 0x64}},
 
-	{"xstatus_angry", "Angry",
+	{"angry", N_("Angry"),
 	 {0x01, 0xd8, 0xd7, 0xee, 0xac, 0x3b, 0x49, 0x2a,
 	  0xa5, 0x8d, 0xd3, 0xd8, 0x77, 0xe6, 0x6b, 0x92}},
 
-	{"xstatus_eating", "Eating",
+	{"plate", N_("Eating"),
 	 {0xf8, 0xe8, 0xd7, 0xb2, 0x82, 0xc4, 0x41, 0x42,
 	  0x90, 0xf8, 0x10, 0xc6, 0xce, 0x0a, 0x89, 0xa6}},
-	  
-	{"xstatus_cinema", "Cinema",
+
+	/* Shooting Film (or Pictures) */
+	{"camera", N_("Shooting"),
 	 {0x10, 0x7a, 0x9a, 0x18, 0x12, 0x32, 0x4d, 0xa4,
 	  0xb6, 0xcd, 0x08, 0x79, 0xdb, 0x78, 0x0f, 0x09}},
-	
-	{"xstatus_sick", "Sick",
+
+	{"sick", N_("Sick"),
 	 {0x1f, 0x7a, 0x40, 0x71, 0xbf, 0x3b, 0x4e, 0x60,
 	  0xbc, 0x32, 0x4c, 0x57, 0x87, 0xb0, 0x4c, 0xf1}},
-	
-	{"xstatus_crap", "Unknown 1",
+
+	{"xstatus_typing", N_("Typing"),
 	 {0x2c, 0xe0, 0xe4, 0xe5, 0x7c, 0x64, 0x43, 0x70,
 	  0x9c, 0x3a, 0x7a, 0x1c, 0xe8, 0x78, 0xa7, 0xdc}},
-	  
-	{"xstatus_iron", "Unknown 2",
+
+	{"xstatus_suit", N_("At the office"),
 	 {0xb7, 0x08, 0x67, 0xf5, 0x38, 0x25, 0x43, 0x27,
 	  0xa1, 0xff, 0xcf, 0x4c, 0xc1, 0x93, 0x97, 0x97}},
-	
-	{"xstatus_bathing", "Bathing",
+
+	{"xstatus_bathing", N_("Taking a bath"),
 	 {0x5a, 0x58, 0x1e, 0xa1, 0xe5, 0x80, 0x43, 0x0c,
 	  0xa0, 0x6f, 0x61, 0x22, 0x98, 0xb7, 0xe4, 0xc7}},
-	  
-	{"xstatus_tv", "Watching TV",
+
+	{"tv", N_("Watching TV"),
 	 {0x80, 0x53, 0x7d, 0xe2, 0xa4, 0x67, 0x4a, 0x76,
 	  0xb3, 0x54, 0x6d, 0xfd, 0x07, 0x5f, 0x5e, 0xc6}},
-	
-	{"xstatus_fun", "Having fun",
+
+	{"smile-big", N_("Having fun"),
 	 {0x6f, 0x49, 0x30, 0x98, 0x4f, 0x7c, 0x4a, 0xff,
 	  0xa2, 0x76, 0x34, 0xa0, 0x3b, 0xce, 0xae, 0xa7}},
 
-	{"xstatus_sleeping", "Sleeping",
+	{"sleepy", N_("Sleeping"),
 	 {0x78, 0x5e, 0x8c, 0x48, 0x40, 0xd3, 0x4c, 0x65,
 	  0x88, 0x6f, 0x04, 0xcf, 0x3f, 0x3f, 0x43, 0xdf}},
-	
-	{"xstatus_pda", "PDA device",
+
+	{"hiptop", N_("Using a PDA"),
 	 {0x10, 0x11, 0x17, 0xc9, 0xa3, 0xb0, 0x40, 0xf9,
 	  0x81, 0xac, 0x49, 0xe1, 0x59, 0xfb, 0xd5, 0xd4}},
 
-	{"xstatus_heart", "In love",
+	{"love", N_("In love"),
 	 {0xdd, 0xcf, 0x0e, 0xa9, 0x71, 0x95, 0x40, 0x48,
 	  0xa9, 0xc6, 0x41, 0x32, 0x06, 0xd6, 0xf2, 0x80}},
 
-	{"xstatus_tired", "Tired",
+	/* Sleepy / Tired */
+	{"yawn", N_("Sleepy"),
 	 {0x83, 0xc9, 0xb7, 0x8e, 0x77, 0xe7, 0x43, 0x78,
 	  0xb2, 0xc5, 0xfb, 0x6c, 0xfc, 0xc3, 0x5b, 0xec}},
 
-	{"xstatus_friends", "Friends",
+	{"meeting", N_("Meeting friends"),
 	 {0xf1, 0x8a, 0xb5, 0x2e, 0xdc, 0x57, 0x49, 0x1d,
 	  0x99, 0xdc, 0x64, 0x44, 0x50, 0x24, 0x57, 0xaf}},
 
-	{"xstatus_phone", "On the phone",
+	{"phone", N_("On the phone"),
 	 {0x12, 0x92, 0xe5, 0x50, 0x1b, 0x64, 0x4f, 0x66,
 	  0xb2, 0x06, 0xb2, 0x9a, 0xf3, 0x78, 0xe4, 0x8d}},
 
-	{"xstatus_surfing", "Surfing",
+	{"xstatus_surfing", N_("Surfing"),
 	 {0xa6, 0xed, 0x55, 0x7e, 0x6b, 0xf7, 0x44, 0xd4,
 	  0xa5, 0xd4, 0xd2, 0xe7, 0xd9, 0x5c, 0xe8, 0x1f}},
 
-	{"xstatus_mobile", "Cell phone",
+	/* "I am mobile." / "John is mobile." */
+	{"mobile", N_("Mobile"),
 	 {0x16, 0x0c, 0x60, 0xbb, 0xdd, 0x44, 0x43, 0xf3,
 	  0x91, 0x40, 0x05, 0x0f, 0x00, 0xe6, 0xc0, 0x09}},
 
-	{"xstatus_google", "Googling",
+	{"search", N_("Searching the web"),
 	 {0xd4, 0xe2, 0xb0, 0xba, 0x33, 0x4e, 0x4f, 0xa5,
 	  0x98, 0xd0, 0x11, 0x7d, 0xbf, 0x4d, 0x3c, 0xc8}},
 
-	{"xstatus_party", "Party",
+	{"party", N_("At a party"),
 	 {0xe6, 0x01, 0xe4, 0x1c, 0x33, 0x73, 0x4b, 0xd1,
 	  0xbc, 0x06, 0x81, 0x1d, 0x6c, 0x32, 0x3d, 0x81}},
 
-	{"xstatus_coffee", "Coffee",
+	{"coffee", N_("Having Coffee"),
 	 {0x1b, 0x78, 0xae, 0x31, 0xfa, 0x0b, 0x4d, 0x38,
 	  0x93, 0xd1, 0x99, 0x7e, 0xee, 0xaf, 0xb2, 0x18}},
 
-	{"xstatus_gaming", "Playing",
+	/* Playing video games */
+	{"console", N_("Gaming"),
 	 {0xd4, 0xa6, 0x11, 0xd0, 0x8f, 0x01, 0x4e, 0xc0,
 	  0x92, 0x23, 0xc5, 0xb6, 0xbe, 0xc6, 0xcc, 0xf0}},
-	
-	{"xstatus_internet", "Internet",
+
+	{"xstatus_internet", N_("Browsing the web"),
 	 {0x12, 0xd0, 0x7e, 0x3e, 0xf8, 0x85, 0x48, 0x9e,
 	  0x8e, 0x97, 0xa7, 0x2a, 0x65, 0x51, 0xe5, 0x8d}},
-	
-	{"xstatus_zzz", "Snoozing",
+
+	{"cigarette", N_("Smoking"),
 	 {0x64, 0x43, 0xc6, 0xaf, 0x22, 0x60, 0x45, 0x17,
 	  0xb5, 0x8c, 0xd7, 0xdf, 0x8e, 0x29, 0x03, 0x52}},
-	
-	{"xstatus_writing", "Writing",
+
+	{"xstatus_writing", N_("Writing"),
 	 {0x00, 0x72, 0xd9, 0x08, 0x4a, 0xd1, 0x43, 0xdd,
 	  0x91, 0x99, 0x6f, 0x02, 0x69, 0x66, 0x02, 0x6f}},
-	
-	{"xstatus_beer", "Drinking",
+
+	/* Drinking [Alcohol] */
+	{"beer", N_("Drinking"),
 	 {0x8c, 0x50, 0xdb, 0xae, 0x81, 0xed, 0x47, 0x86,
 	  0xac, 0xca, 0x16, 0xcc, 0x32, 0x13, 0xc7, 0xb7}},
-	
-	{"xstatus_music", "Music",
+
+	{"music", N_("Listening to music"),
 	 {0x61, 0xbe, 0xe0, 0xdd, 0x8b, 0xdd, 0x47, 0x5d,
 	  0x8d, 0xee, 0x5f, 0x4b, 0xaa, 0xcf, 0x19, 0xa7}},
-	
-	{"xstatus_studying", "Studying",
+
+	{"xstatus_studying", N_("Studying"),
 	 {0x60, 0x9d, 0x52, 0xf8, 0xa2, 0x9a, 0x49, 0xa6,
 	  0xb2, 0xa0, 0x25, 0x24, 0xc5, 0xe9, 0xd2, 0x60}},
-	
-	{"xstatus_engineering", "Engineering",
+
+	{"xstatus_working", N_("Working"),
 	 {0xba, 0x74, 0xdb, 0x3e, 0x9e, 0x24, 0x43, 0x4b,
 	  0x87, 0xb6, 0x2f, 0x6b, 0x8d, 0xfe, 0xe5, 0x0f}},
-	
-	{"xstatus_crapping", "In the restroom",
+
+	{"xstatus_restroom", N_("In the restroom"),
 	 {0x16, 0xf5, 0xb7, 0x6f, 0xa9, 0xd2, 0x40, 0x35,
 	  0x8c, 0xc5, 0xc0, 0x84, 0x70, 0x3c, 0x98, 0xfa}}
 };
@@ -652,7 +659,7 @@
 
 		for (i = 1; i < AIM_CUSTOM_ICONS_COUNT; i++) {
 			if (memcmp(&aim_custom_icons[i].data, cap, 0x10) == 0) {
-				purple_debug_misc("oscar", "Custom user icon: %s\n", aim_custom_icons[i].descriptivename);		
+				purple_debug_misc("oscar", "Custom status icon: %s\n", aim_custom_icons[i].descriptivename);		
 				result = i;
 				break; /* should only match once... */
 			}
@@ -759,6 +766,7 @@
 	char *mood;
 	gint32 icon_num;
 } icqmoods[ICQMOODS_COUNT] = {
+	{"icqmood0", 3},
 	{"icqmood1", 12},
 	{"icqmood2", 18},
 	{"icqmood3", 24},
@@ -1082,6 +1090,15 @@
 
 						mood = byte_stream_getstr(bs, length2);
 
+						/* The official clients allow
+						 * you to set your custom icon
+						 * to the "default" icon, to
+						 * allow setting a status
+						 * message.  We'll ignore it.
+						 */
+						if (!*mood)
+							break;
+
 						for (i = 0; i < ICQMOODS_COUNT; i++)
 							if (!strcmp(mood, icqmoods[i].mood)) {
 								icon_num = icqmoods[i].icon_num;
@@ -1091,7 +1108,7 @@
 						if (icon_num >= 0)
 							outinfo->customicon = icon_num;
 						else
-							purple_debug_warning("oscar", "Unknown icqmood: %s", mood);
+							purple_debug_warning("oscar", "Unknown icqmood: %s\n", mood);
 
 						g_free(mood);
 					} break;
--- a/libpurple/protocols/oscar/oscar.c	Sun Nov 16 08:24:37 2008 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sun Nov 16 08:39:34 2008 +0000
@@ -2458,25 +2458,28 @@
 
 	else if (args->type & OSCAR_CAPABILITY_ICQSERVERRELAY)
 	{
-		purple_debug_error("oscar", "Got an ICQ Server Relay message of "
+		purple_debug_info("oscar", "Got an ICQ Server Relay message of "
 				"type %d\n", args->info.rtfmsg.msgtype);
-		purple_debug_error("oscar", "Sending X-Status Reply\n");
+		purple_debug_info("oscar", "Sending X-Status Reply\n");
 
 		if(args->info.rtfmsg.msgtype == 26)
 		icq_relay_xstatus(od, userinfo->sn, args->cookie);
 		
 		if(args->info.rtfmsg.msgtype == 1)
 		{
-		if(rtfmsg)
-		serv_got_im(gc, userinfo->sn, rtfmsg, flags,
-		time(NULL));
-		else
-		serv_got_im(gc, userinfo->sn, args->info.rtfmsg.rtfmsg, flags,
-		time(NULL));
-		
+			if(rtfmsg)
+			{
+				serv_got_im(gc, userinfo->sn, rtfmsg, flags,
+				            time(NULL));
+			}
+			else
+			{
+				serv_got_im(gc, userinfo->sn,
+				            args->info.rtfmsg.rtfmsg, flags,
+				            time(NULL));
+			}
 		}
 	}
-
 	else
 	{
 		purple_debug_error("oscar", "Unknown request class %hu\n",
@@ -5850,17 +5853,19 @@
 	}
 
 	if (userinfo != NULL ) {
+		const char *icon;
 		if (userinfo->flags & AIM_FLAG_ADMINISTRATOR)
 			return "admin";
 		if (userinfo->flags & AIM_FLAG_ACTIVEBUDDY)
 			return "bot";
-		if (userinfo->capabilities & OSCAR_CAPABILITY_HIPTOP)
-			return "hiptop";
 		if (userinfo->capabilities & OSCAR_CAPABILITY_SECUREIM)
 			return "secure";
 		if (userinfo->icqinfo.status & AIM_ICQ_STATE_BIRTHDAY)
 			return "birthday";
-		return aim_get_custom_icon_filename(userinfo->customicon);
+		if ((icon = aim_get_custom_icon_filename(userinfo->customicon)))
+			return icon;
+		if (userinfo->capabilities & OSCAR_CAPABILITY_HIPTOP)
+			return "hiptop";
 	}
 	return NULL;
 }
@@ -6782,33 +6787,44 @@
 
 	g = purple_request_field_group_new(NULL);
 	
-	f = purple_request_field_list_new("customicon", _("XStatus"));
+	f = purple_request_field_list_new("customicon", _("Choose a custom status icon"));
 
 	na_fn = g_build_filename("pixmaps", "pidgin", "emblems", "16", "not-authorized.png", NULL);
 
 	purple_request_field_list_add_icon(f, _("None"), na_fn, GINT_TO_POINTER(-1));
 	if (customicon == 0)
 		purple_request_field_list_add_selected(f, _("None"));
-	
+
 	g_free(na_fn);
-	
+
+	/* TODO: rlaager wants this sorted. */
 	for (i = 1; i < aim_get_custom_icons_count(); i++) {
-		char* icon_path = g_strdup_printf("%s.png", aim_get_custom_icon_filename(i));
-		char* filename = g_build_filename("pixmaps", "pidgin", "emblems", "16", icon_path, NULL);
-
-		purple_request_field_list_add_icon(f, _(aim_get_custom_icon_descriptivename(i)), filename, GINT_TO_POINTER(i));
+		const char *icon_filename = aim_get_custom_icon_filename(i);
+		const char *icon_desc = aim_get_custom_icon_descriptivename(i);
+		char *icon_path;
+		char *filename;
+
+		if (icon_filename == NULL || icon_desc == NULL)
+			continue;
+
+		icon_path = g_strdup_printf("%s.png", icon_filename);
+		filename = g_build_filename("pixmaps", "pidgin",
+		                            "emblems", "16",
+		                             icon_path, NULL);
+		g_free(icon_path);
+
+		purple_request_field_list_add_icon(f, _(icon_desc),
+				filename, GINT_TO_POINTER(i));
+		g_free(filename);
 
 		if (customicon == i)
-			purple_request_field_list_add_selected(f, _(aim_get_custom_icon_descriptivename(i)));
-
-		g_free(filename);
-		g_free(icon_path);
+			purple_request_field_list_add_selected(f, _(icon_desc));
 	}
 	purple_request_field_group_add_field(g, f);
 	
 	purple_request_fields_add_group(fields, g);
 	
-	purple_request_fields(gc, _("Set Custom Icon"), _("Set Custom Icon"),
+	purple_request_fields(gc, _("Custom Status Icon"), _("Custom Status Icon"),
 						NULL, fields,
 						_("OK"), G_CALLBACK(oscar_show_icq_custom_icons_cb),
 						_("Cancel"), NULL,
@@ -6860,7 +6876,7 @@
 				oscar_show_icq_privacy_opts);
 		menu = g_list_prepend(menu, act);
 		
-		act = purple_plugin_action_new(_("Set Custom Icon..."),
+		act = purple_plugin_action_new(_("Set Custom Status Icon..."),
 				oscar_show_icq_custom_icons);
 		menu = g_list_prepend(menu, act);
 	}
--- a/pidgin/pixmaps/Makefile.am	Sun Nov 16 08:24:37 2008 +0000
+++ b/pidgin/pixmaps/Makefile.am	Sun Nov 16 08:39:34 2008 +0000
@@ -106,7 +106,51 @@
 		emblems/16/scalable/video.svg \
 		emblems/16/scalable/voice.svg
 
+
+# Magic to copy files from emotes/small/16 to emblems/16.
+# This is necessary because UIs expect emblems in one place and
+# smiley themes in another, but we don't want to duplicate these
+# images in the source.
+emblems/16/%.png: emotes/small/16/%.png
+	rm -f $@
+	cp -f $< $@
+
+emblems/16/busy.png: status/16/busy.png
+	rm -f $@
+	cp -f $< $@
+
+# The copied emblems.
+# Ensure these are in .mtn-ignore.
+EMBLEMS_16_COPIED = \
+		emblems/16/angry.png \
+		emblems/16/busy.png \
+		emblems/16/beer.png \
+		emblems/16/camera.png \
+		emblems/16/cigarette.png \
+		emblems/16/coffee.png \
+		emblems/16/console.png \
+		emblems/16/love.png \
+		emblems/16/meeting.png \
+		emblems/16/mobile.png \
+		emblems/16/musical-note.png \
+		emblems/16/party.png \
+		emblems/16/phone.png \
+		emblems/16/plate.png \
+		emblems/16/question.png \
+		emblems/16/search.png \
+		emblems/16/sick.png \
+		emblems/16/sleepy.png \
+		emblems/16/smile-big.png \
+		emblems/16/thinking.png \
+		emblems/16/tv.png \
+		emblems/16/yawn.png
+
+
+# Non-copied emblems.
+# Ensure these filenames don't clash with files in emotes/small/16 or
+# bad things will happen!
 EMBLEMS_16 = \
+		$(EMBLEMS_16_COPIED) \
 		emblems/16/aol-client.png \
 		emblems/16/birthday.png \
 		emblems/16/blocked.png \
@@ -128,40 +172,16 @@
 		emblems/16/unavailable.png \
 		emblems/16/video.png \
 		emblems/16/voice.png \
-		emblems/16/xstatus_angry.png \
 		emblems/16/xstatus_bathing.png \
-		emblems/16/xstatus_beer.png \
-		emblems/16/xstatus_busy.png \
-		emblems/16/xstatus_cinema.png \
-		emblems/16/xstatus_coffee.png \
-		emblems/16/xstatus_crap.png \
-		emblems/16/xstatus_crapping.png \
-		emblems/16/xstatus_eating.png \
-		emblems/16/xstatus_engineering.png \
-		emblems/16/xstatus_friends.png \
-		emblems/16/xstatus_fun.png \
-		emblems/16/xstatus_gaming.png \
-		emblems/16/xstatus_google.png \
-		emblems/16/xstatus_heart.png \
 		emblems/16/xstatus_internet.png \
-		emblems/16/xstatus_iron.png \
-		emblems/16/xstatus_mobile.png \
-		emblems/16/xstatus_music.png \
-		emblems/16/xstatus_party.png \
-		emblems/16/xstatus_pda.png \
-		emblems/16/xstatus_phone.png \
-		emblems/16/xstatus_question.png \
+		emblems/16/xstatus_restroom.png \
 		emblems/16/xstatus_shopping.png \
-		emblems/16/xstatus_sick.png \
-		emblems/16/xstatus_sleeping.png \
 		emblems/16/xstatus_studying.png \
+		emblems/16/xstatus_suit.png \
 		emblems/16/xstatus_surfing.png \
-		emblems/16/xstatus_thinking.png \
-		emblems/16/xstatus_tired.png \
-		emblems/16/xstatus_tv.png \
 		emblems/16/xstatus_typing.png \
-		emblems/16/xstatus_writing.png \
-		emblems/16/xstatus_zzz.png
+		emblems/16/xstatus_working.png \
+		emblems/16/xstatus_writing.png
 
 
 EMOTES_DEFAULT_24_SCALABLE = \
Binary file pidgin/pixmaps/emblems/16/mobile.png has changed
--- a/pidgin/pixmaps/emotes/small/16/Makefile.am	Sun Nov 16 08:24:37 2008 +0000
+++ b/pidgin/pixmaps/emotes/small/16/Makefile.am	Sun Nov 16 08:39:34 2008 +0000
@@ -18,6 +18,7 @@
     kiss.png \
     love.png \
     meeting.png \
+    mobile.png \
     musical-note.png \
     nerdy.png \
     neutral.png \
Binary file pidgin/pixmaps/emotes/small/16/mobile.png has changed
--- a/pidgin/pixmaps/emotes/small/16/small.theme.in	Sun Nov 16 08:24:37 2008 +0000
+++ b/pidgin/pixmaps/emotes/small/16/small.theme.in	Sun Nov 16 08:39:34 2008 +0000
@@ -57,6 +57,7 @@
 beer.png            (B)     (b)
 sick.png            +o(
 plate.png           (pl)
+mobile.png          (mp)
 dont-know.png       :^)
 thinking.png        *-)
 party.png           <:o)
--- a/po/POTFILES.in	Sun Nov 16 08:24:37 2008 +0000
+++ b/po/POTFILES.in	Sun Nov 16 08:39:34 2008 +0000
@@ -124,6 +124,7 @@
 libpurple/protocols/novell/nmuser.c
 libpurple/protocols/novell/novell.c
 libpurple/protocols/oscar/family_chatnav.c
+libpurple/protocols/oscar/family_locate.c
 libpurple/protocols/oscar/flap_connection.c
 libpurple/protocols/oscar/libaim.c
 libpurple/protocols/oscar/libicq.c