[gaim-migrate @ 14623]

Sun, 04 Dec 2005 17:54:43 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Sun, 04 Dec 2005 17:54:43 +0000
changeset 12319
42a0e8cecea3
parent 12318
942b7c089acb
child 12320
94fd7ff44885

[gaim-migrate @ 14623]
Improve Handling of Aliasing with respect to Contacts

Basically, if you choose "Alias", your changes will be saved to whichever text field you saw. This makes sense, given we're doing inline editing. Also, because we're doing inline editing, I think it's weird to have Alias offered in a buddy submenu (as choosing it causes the text to change pre-edit and post-edit, making you feel like your changes weren't saved). I've removed it. If you need to alias a buddy that's not currently online, you can always expand the contact.

plugins/ChangeLog.API file | annotate | diff | comparison | revisions
src/blist.c file | annotate | diff | comparison | revisions
src/blist.h file | annotate | diff | comparison | revisions
src/gtkblist.c file | annotate | diff | comparison | revisions
--- a/plugins/ChangeLog.API	Sun Dec 04 17:47:37 2005 +0000
+++ b/plugins/ChangeLog.API	Sun Dec 04 17:54:43 2005 +0000
@@ -178,6 +178,7 @@
 	* gaim_account_request_add: Notifies the user that they were added to
 	                            someone's buddy list, and offers them the choice
 	                            of adding that person to their buddy list.
+	* gaim_blist_alias_contact()
 
 	Signals - Changed:  (See the Doxygen docs for details on all signals.)
 	* Signal propagation now stops after a handler returns a non-NULL value.
--- a/src/blist.c	Sun Dec 04 17:47:37 2005 +0000
+++ b/src/blist.c	Sun Dec 04 17:54:43 2005 +0000
@@ -832,6 +832,40 @@
 		ops->update(gaimbuddylist, (GaimBlistNode *)buddy);
 }
 
+void gaim_blist_alias_contact(GaimContact *contact, const char *alias)
+{
+	GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
+	GaimConversation *conv;
+	char *old_alias = contact->alias;
+	GaimBlistNode *bnode;
+
+	g_return_if_fail(contact != NULL);
+
+	if ((alias != NULL) && (*alias != '\0'))
+		contact->alias = g_strdup(alias);
+	else
+		contact->alias = NULL;
+
+	gaim_blist_schedule_save();
+
+	if (ops && ops->update)
+		ops->update(gaimbuddylist, (GaimBlistNode *)contact);
+
+	for(bnode = ((GaimBlistNode *)contact)->child; bnode != NULL; bnode = bnode->next)
+	{
+		GaimBuddy *buddy = (GaimBuddy *)bnode;
+
+		conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, buddy->name,
+												   buddy->account);
+		if (conv)
+			gaim_conversation_autoset_title(conv);
+	}
+
+	gaim_signal_emit(gaim_blist_get_handle(), "blist-node-aliased",
+					 contact, old_alias);
+	g_free(old_alias);
+}
+
 void gaim_blist_alias_chat(GaimChat *chat, const char *alias)
 {
 	GaimBlistUiOps *ops = gaimbuddylist->ui_ops;
--- a/src/blist.h	Sun Dec 04 17:47:37 2005 +0000
+++ b/src/blist.h	Sun Dec 04 17:54:43 2005 +0000
@@ -271,6 +271,13 @@
  */
 void gaim_blist_rename_buddy(GaimBuddy *buddy, const char *name);
 
+/**
+ * Aliases a contact in the buddy list.
+ *
+ * @param contact The contact whose alias will be changed.
+ * @param alias   The contact's alias.
+ */
+void gaim_blist_alias_contact(GaimContact *contact, const char *alias);
 
 /**
  * Aliases a buddy in the buddy list.
--- a/src/gtkblist.c	Sun Dec 04 17:47:37 2005 +0000
+++ b/src/gtkblist.c	Sun Dec 04 17:54:43 2005 +0000
@@ -290,21 +290,32 @@
 	node = g_value_get_pointer(&val);
 	gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), TRUE);
 	g_object_set(G_OBJECT(gtkblist->text_rend), "editable", FALSE, NULL);
-	switch (node->type){
-	case GAIM_BLIST_CONTACT_NODE:
-		gaim_blist_alias_buddy(gaim_contact_get_priority_buddy((GaimContact*)node), arg2);
-		break;
-	case GAIM_BLIST_BUDDY_NODE:
-		gaim_blist_alias_buddy((GaimBuddy*)node, arg2);
-		break;
-	case GAIM_BLIST_GROUP_NODE:
-		gaim_blist_rename_group((GaimGroup*)node, arg2);
-		break;
-	case GAIM_BLIST_CHAT_NODE:
-		gaim_blist_alias_chat((GaimChat*)node, arg2);
-		break;
-	default:
-		break;
+
+	switch (node->type)
+	{
+		case GAIM_BLIST_CONTACT_NODE:
+			{
+				GaimContact *contact = (GaimContact *)node;
+				struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data;
+
+				if (contact->alias || gtknode->contact_expanded)
+					gaim_blist_alias_contact(contact, arg2);
+				else
+					gaim_blist_alias_buddy(gaim_contact_get_priority_buddy(contact), arg2);
+			}
+			break;
+
+		case GAIM_BLIST_BUDDY_NODE:
+			gaim_blist_alias_buddy((GaimBuddy*)node, arg2);
+			break;
+		case GAIM_BLIST_GROUP_NODE:
+			gaim_blist_rename_group((GaimGroup*)node, arg2);
+			break;
+		case GAIM_BLIST_CHAT_NODE:
+			gaim_blist_alias_chat((GaimChat*)node, arg2);
+			break;
+		default:
+			break;
 	}
 }
 
@@ -327,7 +338,7 @@
 		text = gaim_buddy_get_alias((GaimBuddy *)node);
 		break;
 	case GAIM_BLIST_CONTACT_NODE:
-		text = gaim_buddy_get_alias(gaim_contact_get_priority_buddy((GaimContact *)node));
+		text = gaim_contact_get_alias((GaimContact *)node);
 		break;
 	case GAIM_BLIST_GROUP_NODE:
 		text = ((GaimGroup *)node)->name;
@@ -1022,20 +1033,18 @@
 										  (GaimBlistNode *)buddy);
 	gaim_gtk_append_blist_node_extended_menu(menu, (GaimBlistNode *)buddy);
 
-	gaim_separator(menu);
-
-	if(((GaimBlistNode*)buddy)->parent->child->next && !sub && !contact_expanded) {
-		gaim_new_item_from_stock(menu, _("_Alias Buddy..."), GAIM_STOCK_ALIAS,
-				G_CALLBACK(gtk_blist_menu_alias_cb), buddy, 0, 0, NULL);
-		gaim_new_item_from_stock(menu, _("_Remove Buddy"), GTK_STOCK_REMOVE,
-				G_CALLBACK(gaim_gtk_blist_remove_cb), buddy, 0, 0, NULL);
-		gaim_new_item_from_stock(menu, _("Alias Contact..."), GAIM_STOCK_ALIAS,
+	if (((GaimBlistNode*)buddy)->parent->child->next && !sub && !contact_expanded) {
+		gaim_separator(menu);
+
+		gaim_new_item_from_stock(menu, _("Alias..."), GAIM_STOCK_ALIAS,
 				G_CALLBACK(gtk_blist_menu_alias_cb),
 				contact, 0, 0, NULL);
-		gaim_new_item_from_stock(menu, _("Remove Contact"), GTK_STOCK_REMOVE,
+		gaim_new_item_from_stock(menu, _("Remove"), GTK_STOCK_REMOVE,
 				G_CALLBACK(gaim_gtk_blist_remove_cb),
 				contact, 0, 0, NULL);
-	} else {
+	} else if (!sub || contact_expanded) {
+		gaim_separator(menu);
+
 		gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS,
 				G_CALLBACK(gtk_blist_menu_alias_cb), buddy, 0, 0, NULL);
 		gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE,

mercurial