diff pidgin/gtkblist.c @ 29819:10bf97a36be0

propagate from branch 'im.pidgin.pidgin' (head 96b27a20c7250b87761a8bd4f5540bf1fa32b6f4) to branch 'im.pidgin.cpw.malu.ft_thumbnails' (head 230fd6c21fdf1ed459a653bcd9808880a36204c3)
author Marcus Lundblad <ml@update.uu.se>
date Tue, 09 Mar 2010 21:41:55 +0000
parents b0cb194dc139
children 41c53be0e8b5
line wrap: on
line diff
--- a/pidgin/gtkblist.c	Sun Feb 28 22:56:50 2010 +0000
+++ b/pidgin/gtkblist.c	Tue Mar 09 21:41:55 2010 +0000
@@ -7818,20 +7818,29 @@
 static void
 edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields)
 {
-	PurpleRequestField *f;
+	PurpleRequestField *mood_field, *text_field;
 	GList *l;
 
-	f = purple_request_fields_get_field(fields, "mood");
-	l = purple_request_field_list_get_selected(f);
+	mood_field = purple_request_fields_get_field(fields, "mood");
+	text_field = purple_request_fields_get_field(fields, "text");
+	l = purple_request_field_list_get_selected(mood_field);
 
 	if (l) {
-		const char *mood = purple_request_field_list_get_data(f, l->data);
+		const char *mood = purple_request_field_list_get_data(mood_field, l->data);
+		const char *text = purple_request_field_string_get_value(text_field);
 		PurpleAccount *account = purple_connection_get_account(gc);
 
 		if (mood != NULL && !purple_strequal(mood, "")) {
-			purple_account_set_status(account, "mood", TRUE,
-			                          PURPLE_MOOD_NAME, mood,
-			                          NULL);
+			if (text) {
+				purple_account_set_status(account, "mood", TRUE,
+			                          	PURPLE_MOOD_NAME, mood,
+				    				  	PURPLE_MOOD_COMMENT, text,
+			                          	NULL);
+			} else {
+				purple_account_set_status(account, "mood", TRUE,
+			                          	PURPLE_MOOD_NAME, mood,
+			                          	NULL);
+			}
 		} else {
 			purple_account_set_status(account, "mood", FALSE, NULL);
 		}
@@ -7847,7 +7856,6 @@
 	PurpleRequestFields *fields;
 	PurpleRequestFieldGroup *g;
 	PurpleRequestField *f;
-	char* na_fn;
 	PurpleConnection *gc = purple_account_get_connection(account);
 	PurplePluginProtocolInfo *prpl_info;
 	PurpleMood *mood;
@@ -7861,19 +7869,10 @@
 	g = purple_request_field_group_new(NULL);
 	f = purple_request_field_list_new("mood", _("Please select your mood from the list"));
 
-	na_fn = g_build_filename("pixmaps", "pidgin", "emblems", "16", "not-authorized.png", NULL);
-
-	purple_request_field_list_add_icon(f, _("None"), na_fn, NULL);
+	purple_request_field_list_add(f, _("None"), "");
 	if (current_mood == NULL)
 		purple_request_field_list_add_selected(f, _("None"));
 
-	g_free(na_fn);
-
-	/* first item is an empty one for unsetting the mood */
-	purple_request_field_list_add(f, "", "");
-	if (purple_strequal(current_mood, ""))
-		purple_request_field_list_add_selected(f, "");
-	
 	/* TODO: rlaager wants this sorted. */
 	for (mood = prpl_info->get_moods(account);
 	     mood->mood != NULL ; mood++) {
@@ -7894,6 +7893,15 @@
 
 	purple_request_fields_add_group(fields, g);
 
+	/* if the connection allows setting a mood message */
+	if (gc->flags & PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES) {
+		g = purple_request_field_group_new(NULL);
+		f = purple_request_field_string_new("text",
+		    _("Message (optional)"), NULL, FALSE);
+		purple_request_field_group_add_field(g, f);
+		purple_request_fields_add_group(fields, g);
+	}
+
 	purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"),
                               NULL, fields,
                               _("OK"), G_CALLBACK(edit_mood_cb),
@@ -8026,8 +8034,10 @@
 		if (prpl_info &&
 		    (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_moods) ||
 			 PURPLE_PLUGIN_HAS_ACTIONS(plugin))) {
-			if (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_moods)) {
+			if (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_moods) &&
+			    gc->flags & PURPLE_CONNECTION_SUPPORT_MOODS) {
 				GList *types;
+
 				for (types = purple_account_get_status_types(account);
 			     	types != NULL ; types = types->next) {
 					PurpleStatusType *type = types->data;