# HG changeset patch # User andrew.victor@mxit.com # Date 1317474218 0 # Node ID c39583aad67c8d71560656ed70896e50dc07b7e3 # Parent fe20ff3d4e7aab53562610a488881d317c0df88f Hide struct _PurpleConvChatBuddy. Add accessor methods: * purple_conv_chat_cb_get_alias * purple_conv_chat_cb_get_flags * purple_conv_chat_cb_is_buddy * purple_conv_chat_cb_get_ui_data * purple_conv_chat_cb_set_ui_data diff -r fe20ff3d4e7a -r c39583aad67c ChangeLog.API --- a/ChangeLog.API Sat Oct 01 11:35:15 2011 +0000 +++ b/ChangeLog.API Sat Oct 01 13:03:38 2011 +0000 @@ -4,6 +4,11 @@ libpurple: Added: * pidgin_create_webview + * purple_conv_chat_cb_get_alias + * purple_conv_chat_cb_get_flags + * purple_conv_chat_cb_is_buddy + * purple_conv_chat_cb_get_ui_data + * purple_conv_chat_cb_set_ui_data * purple_conversation_get_ui_data * purple_conversation_set_ui_data * purple_notify_searchresult_column_is_visible @@ -188,6 +193,7 @@ * struct _PidginImPane * struct _PurpleAttentionType * struct _PurpleConvChat + * struct _PurpleConvChatBuddy * struct _PurpleConvIm * struct _PurpleMenuAction * struct _PurplePounce diff -r fe20ff3d4e7a -r c39583aad67c finch/gntconv.c --- a/finch/gntconv.c Sat Oct 01 11:35:15 2011 +0000 +++ b/finch/gntconv.c Sat Oct 01 13:03:38 2011 +0000 @@ -1084,10 +1084,10 @@ for (iter = users; iter; iter = iter->next) { PurpleConvChatBuddy *cbuddy = iter->data; - char *str; + const char *str; - if ((str = cbuddy->alias) == NULL) - str = cbuddy->name; + if ((str = purple_conv_chat_cb_get_alias(cbuddy)) == NULL) + str = purple_conv_chat_cb_get_name(cbuddy); g_string_append_printf(string, "[ %s ]", str); } @@ -1100,10 +1100,10 @@ { PurpleConvChatBuddy *cbuddy = users->data; GntTree *tree = GNT_TREE(ggc->u.chat->userlist); - gnt_entry_add_suggest(entry, cbuddy->name); - gnt_entry_add_suggest(entry, cbuddy->alias); - gnt_tree_add_row_after(tree, g_strdup(cbuddy->name), - gnt_tree_create_row(tree, chat_flag_text(cbuddy->flags), cbuddy->alias), NULL, NULL); + gnt_entry_add_suggest(entry, purple_conv_chat_cb_get_name(cbuddy)); + gnt_entry_add_suggest(entry, purple_conv_chat_cb_get_alias(cbuddy)); + gnt_tree_add_row_after(tree, g_strdup(purple_conv_chat_cb_get_name(cbuddy)), + gnt_tree_create_row(tree, chat_flag_text(purple_conv_chat_cb_get_flags(cbuddy)), purple_conv_chat_cb_get_alias(cbuddy)), NULL, NULL); } } @@ -1122,7 +1122,7 @@ gnt_entry_add_suggest(entry, new_n); gnt_entry_add_suggest(entry, new_a); gnt_tree_add_row_after(tree, g_strdup(new_n), - gnt_tree_create_row(tree, chat_flag_text(cb->flags), new_a), NULL, NULL); + gnt_tree_create_row(tree, chat_flag_text(purple_conv_chat_cb_get_flags(cb)), new_a), NULL, NULL); } static void @@ -1143,7 +1143,7 @@ { PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), user); FinchConv *ggc = FINCH_CONV(conv); - gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(cb->flags)); + gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(purple_conv_chat_cb_get_flags(cb))); } static void diff -r fe20ff3d4e7a -r c39583aad67c libpurple/conversation.c --- a/libpurple/conversation.c Sat Oct 01 11:35:15 2011 +0000 +++ b/libpurple/conversation.c Sat Oct 01 13:03:38 2011 +0000 @@ -70,6 +70,47 @@ PurpleBuddyIcon *icon; /**< The buddy icon. */ }; +/** + * Data for "Chat Buddies" + */ +struct _PurpleConvChatBuddy +{ + /** The chat participant's name in the chat. */ + char *name; + + /** The chat participant's alias, if known; @a NULL otherwise. */ + char *alias; + + /** + * A string by which this buddy will be sorted, or @c NULL if the + * buddy should be sorted by its @c name. (This is currently always + * @c NULL. + */ + char *alias_key; + + /** + * @a TRUE if this chat participant is on the buddy list; + * @a FALSE otherwise. + */ + gboolean buddy; + + /** + * A bitwise OR of flags for this participant, such as whether they + * are a channel operator. + */ + PurpleConvChatBuddyFlags flags; + + /** + * A hash table of attributes about the user, such as real name, + * user\@host, etc. + */ + GHashTable *attributes; + + /** The UI can put whatever it wants here. */ + gpointer ui_data; +}; + + static GList *conversations = NULL; static GList *ims = NULL; static GList *chats = NULL; @@ -2219,14 +2260,51 @@ g_free(cb); } +void purple_conv_chat_cb_set_ui_data(PurpleConvChatBuddy *cb, gpointer ui_data) +{ + g_return_if_fail(cb != NULL); + + cb->ui_data = ui_data; +} + +gpointer purple_conv_chat_cb_get_ui_data(const PurpleConvChatBuddy *cb) +{ + g_return_val_if_fail(cb != NULL, NULL); + + return cb->ui_data; +} + const char * -purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb) +purple_conv_chat_cb_get_alias(const PurpleConvChatBuddy *cb) +{ + g_return_val_if_fail(cb != NULL, NULL); + + return cb->alias; +} + +const char * +purple_conv_chat_cb_get_name(const PurpleConvChatBuddy *cb) { g_return_val_if_fail(cb != NULL, NULL); return cb->name; } +PurpleConvChatBuddyFlags +purple_conv_chat_cb_get_flags(const PurpleConvChatBuddy *cb) +{ + g_return_val_if_fail(cb != NULL, PURPLE_CBFLAGS_NONE); + + return cb->flags; +} + +gboolean purple_conv_chat_cb_is_buddy(const PurpleConvChatBuddy *cb) +{ + g_return_val_if_fail(cb != NULL, FALSE); + + return cb->buddy; +} + const char * purple_conv_chat_cb_get_attribute(PurpleConvChatBuddy *cb, const char *key) { diff -r fe20ff3d4e7a -r c39583aad67c libpurple/conversation.h --- a/libpurple/conversation.h Sat Oct 01 11:35:15 2011 +0000 +++ b/libpurple/conversation.h Sat Oct 01 13:03:38 2011 +0000 @@ -250,46 +250,6 @@ }; /** - * Data for "Chat Buddies" - */ -struct _PurpleConvChatBuddy -{ - /** The chat participant's name in the chat. */ - char *name; - - /** The chat participant's alias, if known; @a NULL otherwise. */ - char *alias; - - /** - * A string by which this buddy will be sorted, or @c NULL if the - * buddy should be sorted by its @c name. (This is currently always - * @c NULL. - */ - char *alias_key; - - /** - * @a TRUE if this chat participant is on the buddy list; - * @a FALSE otherwise. - */ - gboolean buddy; - - /** - * A bitwise OR of flags for this participant, such as whether they - * are a channel operator. - */ - PurpleConvChatBuddyFlags flags; - - /** - * A hash table of attributes about the user, such as real name, - * user\@host, etc. - */ - GHashTable *attributes; - - /** The UI can put whatever it wants here. */ - gpointer ui_data; -}; - -/** * Description of a conversation message */ struct _PurpleConvMessage @@ -1364,13 +1324,59 @@ PurpleConvChatBuddy *purple_conv_chat_cb_find(PurpleConvChat *chat, const char *name); /** + * Set the UI data associated with this chat buddy. + * + * @param cb The chat buddy + * @param ui_data A pointer to associate with this chat buddy. + */ +void purple_conv_chat_cb_set_ui_data(PurpleConvChatBuddy *cb, gpointer ui_data); + +/** + * Get the UI data associated with this chat buddy. + * + * @param cb The chat buddy. + * + * @return The UI data associated with this chat buddy. This is a + * convenience field provided to the UIs--it is not + * used by the libpurple core. + */ +gpointer purple_conv_chat_cb_get_ui_data(const PurpleConvChatBuddy *conv); + +/** + * Get the alias of a chat buddy + * + * @param cb The chat buddy. + * + * @return The alias of the chat buddy. + */ +const char *purple_conv_chat_cb_get_alias(const PurpleConvChatBuddy *cb); + +/** * Get the name of a chat buddy * * @param cb The chat buddy. * * @return The name of the chat buddy. */ -const char *purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb); +const char *purple_conv_chat_cb_get_name(const PurpleConvChatBuddy *cb); + +/** + * Get the flags of a chat buddy. + * + * @param cb The chat buddy. + * + * @return The flags of the chat buddy. + */ +PurpleConvChatBuddyFlags purple_conv_chat_cb_get_flags(const PurpleConvChatBuddy *cb); + +/** + * Indicates if this chat buddy is on the buddy list. + * + * @param cb The chat buddy. + * + * @return TRUE if the chat buddy is on the buddy list. + */ +gboolean purple_conv_chat_cb_is_buddy(const PurpleConvChatBuddy *cb); /** * Destroys a chat buddy diff -r fe20ff3d4e7a -r c39583aad67c libpurple/protocols/irc/msgs.c --- a/libpurple/protocols/irc/msgs.c Sat Oct 01 11:35:15 2011 +0000 +++ b/libpurple/protocols/irc/msgs.c Sat Oct 01 13:03:38 2011 +0000 @@ -457,12 +457,12 @@ g_free(userhost); g_free(realname); - flags = cb->flags; + flags = purple_conv_chat_cb_get_flags(cb); if (args[6][0] == 'G' && !(flags & PURPLE_CBFLAGS_AWAY)) { - purple_conv_chat_user_set_flags(chat, cb->name, flags | PURPLE_CBFLAGS_AWAY); + purple_conv_chat_user_set_flags(chat, purple_conv_chat_cb_get_name(cb), flags | PURPLE_CBFLAGS_AWAY); } else if(args[6][0] == 'H' && (flags & PURPLE_CBFLAGS_AWAY)) { - purple_conv_chat_user_set_flags(chat, cb->name, flags & ~PURPLE_CBFLAGS_AWAY); + purple_conv_chat_user_set_flags(chat, purple_conv_chat_cb_get_name(cb), flags & ~PURPLE_CBFLAGS_AWAY); } } } diff -r fe20ff3d4e7a -r c39583aad67c pidgin/gtkconv.c --- a/pidgin/gtkconv.c Sat Oct 01 11:35:15 2011 +0000 +++ b/pidgin/gtkconv.c Sat Oct 01 13:03:38 2011 +0000 @@ -4027,10 +4027,11 @@ static void deleting_chat_buddy_cb(PurpleConvChatBuddy *cb) { - if (cb->ui_data) { - GtkTreeRowReference *ref = cb->ui_data; + GtkTreeRowReference *ref = purple_conv_chat_cb_get_ui_data(cb); + + if (ref) { gtk_tree_row_reference_free(ref); - cb->ui_data = NULL; + purple_conv_chat_cb_set_ui_data(cb, NULL); } } @@ -4049,13 +4050,14 @@ GtkTreeIter iter; gboolean is_me = FALSE; gboolean is_buddy; - gchar *tmp, *alias_key, *name, *alias; + const gchar *name, *alias; + gchar *tmp, *alias_key; PurpleConvChatBuddyFlags flags; GdkColor *color = NULL; - alias = cb->alias; - name = cb->name; - flags = cb->flags; + alias = purple_conv_chat_cb_get_alias(cb); + name = purple_conv_chat_cb_get_name(cb); + flags = purple_conv_chat_cb_get_flags(cb); chat = PURPLE_CONV_CHAT(conv); gtkconv = PIDGIN_CONVERSATION(conv); @@ -4073,7 +4075,7 @@ if (!strcmp(purple_conv_chat_get_nick(chat), purple_normalize(conv->account, old_name != NULL ? old_name : name))) is_me = TRUE; - is_buddy = cb->buddy; + is_buddy = purple_conv_chat_cb_is_buddy(cb); tmp = g_utf8_casefold(alias, -1); alias_key = g_utf8_collate_key(tmp, -1); @@ -4114,13 +4116,13 @@ CHAT_USERS_WEIGHT_COLUMN, is_buddy ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, -1); - if (cb->ui_data) { - GtkTreeRowReference *ref = cb->ui_data; + if (purple_conv_chat_cb_get_ui_data(cb)) { + GtkTreeRowReference *ref = purple_conv_chat_cb_get_ui_data(cb); gtk_tree_row_reference_free(ref); } newpath = gtk_tree_model_get_path(tm, &iter); - cb->ui_data = gtk_tree_row_reference_new(tm, newpath); + purple_conv_chat_cb_set_ui_data(cb, gtk_tree_row_reference_new(tm, newpath)); gtk_tree_path_free(newpath); if (is_me && color) @@ -4150,7 +4152,7 @@ */ static void tab_complete_process_item(int *most_matched, const char *entered, gsize entered_bytes, char **partial, char *nick_partial, - GList **matches, char *name) + GList **matches, const char *name) { memcpy(nick_partial, name, entered_bytes); if (purple_utf8_strcasecmp(nick_partial, entered)) @@ -4272,7 +4274,7 @@ /* Users */ for (; l != NULL; l = l->next) { tab_complete_process_item(&most_matched, entered, entered_bytes, &partial, nick_partial, - &matches, ((PurpleConvChatBuddy *)l->data)->name); + &matches, purple_conv_chat_cb_get_name((PurpleConvChatBuddy *)l->data)); } @@ -6445,7 +6447,7 @@ static gboolean get_iter_from_chatbuddy(PurpleConvChatBuddy *cb, GtkTreeIter *iter) { - GtkTreeRowReference *ref = cb->ui_data; + GtkTreeRowReference *ref = purple_conv_chat_cb_get_ui_data(cb); GtkTreePath *path; GtkTreeModel *model; @@ -6531,11 +6533,11 @@ old_cbuddy = purple_conv_chat_cb_find(chat, old_name); if (get_iter_from_chatbuddy(old_cbuddy, &iter)) { - GtkTreeRowReference *ref = old_cbuddy->ui_data; + GtkTreeRowReference *ref = purple_conv_chat_cb_get_ui_data(old_cbuddy); gtk_list_store_remove(GTK_LIST_STORE(model), &iter); gtk_tree_row_reference_free(ref); - old_cbuddy->ui_data = NULL; + purple_conv_chat_cb_set_ui_data(old_cbuddy, NULL); } if ((tag = get_buddy_tag(conv, old_name, 0, FALSE))) @@ -6629,10 +6631,10 @@ cbuddy = purple_conv_chat_cb_find(chat, user); if (get_iter_from_chatbuddy(cbuddy, &iter)) { - GtkTreeRowReference *ref = cbuddy->ui_data; + GtkTreeRowReference *ref = purple_conv_chat_cb_get_ui_data(cbuddy); gtk_list_store_remove(GTK_LIST_STORE(model), &iter); gtk_tree_row_reference_free(ref); - cbuddy->ui_data = NULL; + purple_conv_chat_cb_set_ui_data(cbuddy, NULL); } if (cbuddy)