From: <aar...@us...> - 2006-07-25 04:08:32
|
Revision: 16568 Author: aaronsheldon Date: 2006-07-24 21:08:19 -0700 (Mon, 24 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16568&view=rev Log Message: ----------- Fixes bugs with gtkblist and privacy settings. Privacy.c changes in this commit are a more efficient and accurate way to handle blocking/unblocking buddies, and is mostly thanks to Sadrul. Modified Paths: -------------- branches/soc-2006-blist-efficiency/src/gtkblist.c branches/soc-2006-blist-efficiency/src/privacy.c Modified: branches/soc-2006-blist-efficiency/src/gtkblist.c =================================================================== --- branches/soc-2006-blist-efficiency/src/gtkblist.c 2006-07-25 02:46:26 UTC (rev 16567) +++ branches/soc-2006-blist-efficiency/src/gtkblist.c 2006-07-25 04:08:19 UTC (rev 16568) @@ -128,7 +128,7 @@ static char *gaim_get_tooltip_text(GaimBlistNode *node, gboolean full); static const char *item_factory_translate_func (const char *path, gpointer func_data); static gboolean get_iter_from_node(GaimBlistNode *node, GtkTreeIter *iter); -static void redo_buddy_list(GaimBuddyList *list, gboolean remove); +static void redo_buddy_list(GaimBuddyList *list, gboolean remove, gboolean rerender); static void gaim_gtk_blist_collapse_contact_cb(GtkWidget *w, GaimBlistNode *node); static void gaim_gtk_blist_tooltip_destroy(void); @@ -3582,7 +3582,7 @@ gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1); } - redo_buddy_list(gaim_get_blist(), FALSE); + redo_buddy_list(gaim_get_blist(), FALSE, FALSE); #if GTK_CHECK_VERSION(2,6,0) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(gtkblist->treeview)); #endif @@ -4122,7 +4122,7 @@ gaim_signal_emit(handle, "gtkblist-created", list); } -static void redo_buddy_list(GaimBuddyList *list, gboolean remove) +static void redo_buddy_list(GaimBuddyList *list, gboolean remove, gboolean rerender) { GaimBlistNode *node = list->root; @@ -4135,7 +4135,7 @@ gaim_gtk_blist_hide_node(list, node, FALSE); if (GAIM_BLIST_NODE_IS_BUDDY(node)) - gaim_gtk_blist_update_buddy(list, node, FALSE); + gaim_gtk_blist_update_buddy(list, node, rerender); else if (GAIM_BLIST_NODE_IS_CHAT(node)) gaim_gtk_blist_update(list, node); node = gaim_blist_node_next(node, FALSE); @@ -4151,7 +4151,7 @@ void gaim_gtk_blist_refresh(GaimBuddyList *list) { - redo_buddy_list(list, FALSE); + redo_buddy_list(list, FALSE, TRUE); } void @@ -5498,9 +5498,9 @@ return; } if (!strcmp(id, "none")) { - redo_buddy_list(gaim_get_blist(), TRUE); + redo_buddy_list(gaim_get_blist(), TRUE, FALSE); } else { - redo_buddy_list(gaim_get_blist(), FALSE); + redo_buddy_list(gaim_get_blist(), FALSE, FALSE); } } Modified: branches/soc-2006-blist-efficiency/src/privacy.c =================================================================== --- branches/soc-2006-blist-efficiency/src/privacy.c 2006-07-25 02:46:26 UTC (rev 16567) +++ branches/soc-2006-blist-efficiency/src/privacy.c 2006-07-25 04:08:19 UTC (rev 16568) @@ -42,18 +42,18 @@ name = g_strdup(gaim_normalize(account, who)); for (l = account->permit; l != NULL; l = l->next) { - if (!gaim_utf8_strcasecmp(name, gaim_normalize(account, (char *)l->data))) + if (!gaim_utf8_strcasecmp(name, (char *)l->data)) break; } - buddy = gaim_find_buddy(account, name); - g_free(name); + if (l != NULL) + { + g_free(name); + return FALSE; + } - if (l != NULL) - return FALSE; + account->permit = g_slist_append(account->permit, name); - account->permit = g_slist_append(account->permit, g_strdup(who)); - if (!local_only && gaim_account_is_connected(account)) serv_add_permit(gaim_account_get_connection(account), who); @@ -63,6 +63,7 @@ gaim_blist_schedule_save(); /* This lets the UI know a buddy has had its privacy setting changed */ + buddy = gaim_find_buddy(account, name); if (buddy != NULL) { gaim_signal_emit(gaim_blist_get_handle(), "buddy-privacy-changed", buddy); @@ -81,17 +82,13 @@ g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); - name = g_strdup(gaim_normalize(account, who)); + name = gaim_normalize(account, who); for (l = account->permit; l != NULL; l = l->next) { - if (!gaim_utf8_strcasecmp(name, gaim_normalize(account, (char *)l->data))) + if (!gaim_utf8_strcasecmp(name, (char *)l->data)) break; } - buddy = gaim_find_buddy(account, name); - - g_free(name); - if (l == NULL) return FALSE; @@ -106,6 +103,7 @@ gaim_blist_schedule_save(); + buddy = gaim_find_buddy(account, name); if (buddy != NULL) { gaim_signal_emit(gaim_blist_get_handle(), "buddy-privacy-changed", buddy); @@ -119,7 +117,7 @@ { GSList *l; char *name; - GaimBuddy *buddy = NULL; + GaimBuddy *buddy; g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); @@ -131,14 +129,13 @@ break; } - buddy = gaim_find_buddy(account, name); - - g_free(name); - if (l != NULL) + { + g_free(name); return FALSE; + } - account->deny = g_slist_append(account->deny, g_strdup(who)); + account->deny = g_slist_append(account->deny, name); if (!local_only && gaim_account_is_connected(account)) serv_add_deny(gaim_account_get_connection(account), who); @@ -148,6 +145,7 @@ gaim_blist_schedule_save(); + buddy = gaim_find_buddy(account, name); if (buddy != NULL) { gaim_signal_emit(gaim_blist_get_handle(), "buddy-privacy-changed", buddy); @@ -161,22 +159,20 @@ { GSList *l; char *name; - GaimBuddy *buddy = NULL; + GaimBuddy *buddy; g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); - name = g_strdup(gaim_normalize(account, who)); + name = gaim_normalize(account, who); for (l = account->deny; l != NULL; l = l->next) { - if (!gaim_utf8_strcasecmp(name, gaim_normalize(account, (char *)l->data))) + if (!gaim_utf8_strcasecmp(name, (char *)l->data)) break; } buddy = gaim_find_buddy(account, name); - g_free(name); - if (l == NULL) return FALSE; @@ -187,12 +183,13 @@ serv_rem_deny(gaim_account_get_connection(account), name); if (privacy_ops != NULL && privacy_ops->deny_removed != NULL) - privacy_ops->deny_removed(account, name); + privacy_ops->deny_removed(account, who); if (buddy != NULL) { gaim_signal_emit(gaim_blist_get_handle(), "buddy-privacy-changed", buddy); } + g_free(name); gaim_blist_schedule_save(); @@ -212,15 +209,17 @@ return FALSE; case GAIM_PRIVACY_ALLOW_USERS: + who = gaim_normalize(account, who); for (list=account->permit; list!=NULL; list=list->next) { - if (!gaim_utf8_strcasecmp(who, gaim_normalize(account, (char *)list->data))) + if (!gaim_utf8_strcasecmp(who, (char *)list->data)) return TRUE; } return FALSE; case GAIM_PRIVACY_DENY_USERS: + who = gaim_normalize(account, who); for (list=account->deny; list!=NULL; list=list->next) { - if (!gaim_utf8_strcasecmp(who, gaim_normalize( account, (char *)list->data ))) + if (!gaim_utf8_strcasecmp(who, (char *)list->data )) return FALSE; } return TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |