From: Nathan W. <fac...@us...> - 2003-09-24 17:10:21
|
Update of /cvsroot/gaim/gaim/src In directory sc8-pr-cvs1:/tmp/cvs-serv3253 Modified Files: gtkblist.c Log Message: sort by status works again Index: gtkblist.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkblist.c,v retrieving revision 1.86 retrieving revision 1.87 diff -u -d -p -r1.86 -r1.87 --- gtkblist.c 19 Sep 2003 16:42:01 -0000 1.86 +++ gtkblist.c 24 Sep 2003 17:10:17 -0000 1.87 @@ -1593,8 +1593,8 @@ void gaim_gtk_blist_setup_sort_methods() { gaim_gtk_blist_sort_method_reg("none", _("None"), sort_method_none); gaim_gtk_blist_sort_method_reg("alphabetical", _("Alphabetical"), sort_method_alphabetical); - /* gaim_gtk_blist_sort_method_reg("status", _("By status"), sort_method_status); + /* gaim_gtk_blist_sort_method_reg("log_size", _("By log size"), sort_method_log); */ gaim_gtk_blist_sort_method_set(gaim_prefs_get_string("/gaim/gtk/blist/sort_type")); @@ -2681,59 +2681,64 @@ static GtkTreeIter sort_method_alphabeti return iter; } -/* XXX: fix this, it knows not about chats, or contacts, and will probably - * crash horribly */ static GtkTreeIter sort_method_status(GaimBlistNode *node, struct gaim_buddy_list *blist, GtkTreeIter groupiter, GtkTreeIter *cur) { GtkTreeIter more_z, iter; GaimBlistNode *n; - GtkTreePath *newpath; GValue val = {0,}; - struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; - if (cur && (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter) == 1)) - return *cur; + GaimBuddy *my_buddy, *this_buddy; - if (cur) + if(cur && (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter) == 1)) + return *cur; + if(cur) gaim_gtk_blist_hide_node(blist, node); + if(GAIM_BLIST_NODE_IS_CONTACT(node)) { + my_buddy = gaim_contact_get_priority_buddy((GaimContact*)node); + } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { + gtk_tree_store_append(gtkblist->treemodel, &iter, &groupiter); + return iter; + } else { + return sort_method_none(node, blist, groupiter, NULL); + } + + if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { gtk_tree_store_insert(gtkblist->treemodel, &iter, &groupiter, 0); - newpath = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); - gtknode->row = gtk_tree_row_reference_new(GTK_TREE_MODEL(gtkblist->treemodel), newpath); - gtk_tree_path_free(newpath); return iter; } - do { gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); n = g_value_get_pointer(&val); - if (n && GAIM_BLIST_NODE_IS_BUDDY(n)) { - GaimBuddy *new = (GaimBuddy*)node, *it = (GaimBuddy*)n; - /* This is the worst if statement ever. */ - if ((it->present < new->present) || - ((it->present == new->present) && (it->uc & UC_UNAVAILABLE) > (new->uc & UC_UNAVAILABLE)) || - ((it->present == new->present) && ((it->uc & UC_UNAVAILABLE) == (new->uc & UC_UNAVAILABLE)) && - ((it->idle && !new->idle) || (it->idle && (it->idle < new->idle)))) || - ((it->present == new->present) && (it->uc & UC_UNAVAILABLE) == (new->uc & UC_UNAVAILABLE) && (it->idle == new->idle) && - (gaim_utf8_strcasecmp(gaim_get_buddy_alias((GaimBuddy*)node), gaim_get_buddy_alias((GaimBuddy*)n)) < 0))) - { - gtk_tree_store_insert_before(gtkblist->treemodel, &iter, &groupiter, &more_z); - newpath = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); - gtknode->row = gtk_tree_row_reference_new(GTK_TREE_MODEL(gtkblist->treemodel), newpath); - gtk_tree_path_free(newpath); - return iter; - } - g_value_unset(&val); + if(GAIM_BLIST_NODE_IS_CONTACT(n)) { + this_buddy = gaim_contact_get_priority_buddy((GaimContact*)n); + } else { + this_buddy = NULL; + } + + /* Hideous */ + if(!this_buddy || + ((my_buddy->present > this_buddy->present) || + (my_buddy->present == this_buddy->present && + (((my_buddy->uc & UC_UNAVAILABLE) < (this_buddy->uc & UC_UNAVAILABLE)) || + (((my_buddy->uc & UC_UNAVAILABLE) == (this_buddy->uc & UC_UNAVAILABLE)) && + (((my_buddy->idle == 0) && (this_buddy->idle != 0)) || + (my_buddy->idle < this_buddy->idle) || + ((my_buddy->idle == this_buddy->idle) && + gaim_utf8_strcasecmp(gaim_get_buddy_alias(my_buddy), + gaim_get_buddy_alias(this_buddy)) < 0))))))) { + gtk_tree_store_insert_before(gtkblist->treemodel, &iter, &groupiter, + &more_z); + return iter; + } + g_value_unset(&val); } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); gtk_tree_store_append(gtkblist->treemodel, &iter, &groupiter); - newpath = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); - gtknode->row = gtk_tree_row_reference_new(GTK_TREE_MODEL(gtkblist->treemodel), newpath); - gtk_tree_path_free(newpath); return iter; } |