Mercurial > pidgin.yaz
comparison pidgin/gtkblist.c @ 29486:4da3415a8df6
Hmm, I misread that check. Now we compile.
author | John Bailey <rekkanoryo@rekkanoryo.org> |
---|---|
date | Sun, 23 Aug 2009 16:57:51 +0000 |
parents | 48ea900ee72a |
children | 6e9917e067e6 |
comparison
equal
deleted
inserted
replaced
29485:48ea900ee72a | 29486:4da3415a8df6 |
---|---|
7405 gtk_tree_store_insert_after(gtkblist->treemodel, iter, | 7405 gtk_tree_store_insert_after(gtkblist->treemodel, iter, |
7406 node->parent ? &parent_iter : NULL, | 7406 node->parent ? &parent_iter : NULL, |
7407 sibling ? &sibling_iter : NULL); | 7407 sibling ? &sibling_iter : NULL); |
7408 } | 7408 } |
7409 | 7409 |
7410 static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) | |
7411 { | |
7412 GtkTreeIter more_z; | |
7413 | |
7414 const char *my_name; | |
7415 | |
7416 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { | |
7417 my_name = purple_contact_get_alias((PurpleContact*)node); | |
7418 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) { | |
7419 my_name = purple_chat_get_name((PurpleChat*)node); | |
7420 } else { | |
7421 sort_method_none(node, blist, groupiter, cur, iter); | |
7422 return; | |
7423 } | |
7424 | |
7425 | |
7426 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { | |
7427 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); | |
7428 return; | |
7429 } | |
7430 | |
7431 do { | |
7432 GValue val; | |
7433 PurpleBlistNode *n; | |
7434 const char *this_name; | |
7435 int cmp; | |
7436 | |
7437 val.g_type = 0; | |
7438 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); | |
7439 n = g_value_get_pointer(&val); | |
7440 | |
7441 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { | |
7442 this_name = purple_contact_get_alias((PurpleContact*)n); | |
7443 } else if(PURPLE_BLIST_NODE_IS_CHAT(n)) { | |
7444 this_name = purple_chat_get_name((PurpleChat*)n); | |
7445 } else { | |
7446 this_name = NULL; | |
7447 } | |
7448 | |
7449 cmp = purple_utf8_strcasecmp(my_name, this_name); | |
7450 | |
7451 if(this_name && (cmp < 0 || (cmp == 0 && node < n))) { | |
7452 if(cur) { | |
7453 gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); | |
7454 *iter = *cur; | |
7455 return; | |
7456 } else { | |
7457 gtk_tree_store_insert_before(gtkblist->treemodel, iter, | |
7458 &groupiter, &more_z); | |
7459 return; | |
7460 } | |
7461 } | |
7462 g_value_unset(&val); | |
7463 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); | |
7464 | |
7465 if(cur) { | |
7466 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); | |
7467 *iter = *cur; | |
7468 return; | |
7469 } else { | |
7470 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); | |
7471 return; | |
7472 } | |
7473 } | |
7474 | |
7475 static void sort_method_status(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) | |
7476 { | |
7477 GtkTreeIter more_z; | |
7478 | |
7479 PurpleBuddy *my_buddy, *this_buddy; | |
7480 | |
7481 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { | |
7482 my_buddy = purple_contact_get_priority_buddy((PurpleContact*)node); | |
7483 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) { | |
7484 if (cur != NULL) { | |
7485 *iter = *cur; | |
7486 return; | |
7487 } | |
7488 | |
7489 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); | |
7490 return; | |
7491 } else { | |
7492 sort_method_none(node, blist, groupiter, cur, iter); | |
7493 return; | |
7494 } | |
7495 | |
7496 | |
7497 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { | |
7498 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); | |
7499 return; | |
7500 } | |
7501 | |
7502 do { | |
7503 GValue val; | |
7504 PurpleBlistNode *n; | |
7505 gint name_cmp; | |
7506 gint presence_cmp; | |
7507 | |
7508 val.g_type = 0; | |
7509 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); | |
7510 n = g_value_get_pointer(&val); | |
7511 | |
7512 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { | |
7513 this_buddy = purple_contact_get_priority_buddy((PurpleContact*)n); | |
7514 } else { | |
7515 this_buddy = NULL; | |
7516 } | |
7517 | |
7518 name_cmp = purple_utf8_strcasecmp( | |
7519 purple_contact_get_alias(purple_buddy_get_contact(my_buddy)), | |
7520 (this_buddy | |
7521 ? purple_contact_get_alias(purple_buddy_get_contact(this_buddy)) | |
7522 : NULL)); | |
7523 | |
7524 presence_cmp = purple_presence_compare( | |
7525 purple_buddy_get_presence(my_buddy), | |
7526 this_buddy ? purple_buddy_get_presence(this_buddy) : NULL); | |
7527 | |
7528 if (this_buddy == NULL || | |
7529 (presence_cmp < 0 || | |
7530 (presence_cmp == 0 && | |
7531 (name_cmp < 0 || (name_cmp == 0 && node < n))))) | |
7532 { | |
7533 if (cur != NULL) | |
7534 { | |
7535 gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); | |
7536 *iter = *cur; | |
7537 return; | |
7538 } | |
7539 else | |
7540 { | |
7541 gtk_tree_store_insert_before(gtkblist->treemodel, iter, | |
7542 &groupiter, &more_z); | |
7543 return; | |
7544 } | |
7545 } | |
7546 | |
7547 g_value_unset(&val); | |
7548 } | |
7549 while (gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel), | |
7550 &more_z)); | |
7551 | |
7552 if (cur) { | |
7553 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); | |
7554 *iter = *cur; | |
7555 return; | |
7556 } else { | |
7557 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); | |
7558 return; | |
7559 } | |
7560 } | |
7561 | |
7562 static void sort_method_log_activity(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) | |
7563 { | |
7564 GtkTreeIter more_z; | |
7565 | |
7566 int activity_score = 0, this_log_activity_score = 0; | |
7567 const char *buddy_name, *this_buddy_name; | |
7568 | |
7569 if(cur && (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter) == 1)) { | |
7570 *iter = *cur; | |
7571 return; | |
7572 } | |
7573 | |
7574 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { | |
7575 PurpleBlistNode *n; | |
7576 PurpleBuddy *buddy; | |
7577 for (n = node->child; n; n = n->next) { | |
7578 buddy = (PurpleBuddy*)n; | |
7579 activity_score += purple_log_get_activity_score(PURPLE_LOG_IM, buddy->name, buddy->account); | |
7580 } | |
7581 buddy_name = purple_contact_get_alias((PurpleContact*)node); | |
7582 } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) { | |
7583 /* we don't have a reliable way of getting the log filename | |
7584 * from the chat info in the blist, yet */ | |
7585 if (cur != NULL) { | |
7586 *iter = *cur; | |
7587 return; | |
7588 } | |
7589 | |
7590 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); | |
7591 return; | |
7592 } else { | |
7593 sort_method_none(node, blist, groupiter, cur, iter); | |
7594 return; | |
7595 } | |
7596 | |
7597 | |
7598 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { | |
7599 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); | |
7600 return; | |
7601 } | |
7602 | |
7603 do { | |
7604 GValue val; | |
7605 PurpleBlistNode *n; | |
7606 PurpleBlistNode *n2; | |
7607 PurpleBuddy *buddy; | |
7608 int cmp; | |
7609 | |
7610 val.g_type = 0; | |
7611 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); | |
7612 n = g_value_get_pointer(&val); | |
7613 this_log_activity_score = 0; | |
7614 | |
7615 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { | |
7616 for (n2 = n->child; n2; n2 = n2->next) { | |
7617 buddy = (PurpleBuddy*)n2; | |
7618 this_log_activity_score += purple_log_get_activity_score(PURPLE_LOG_IM, buddy->name, buddy->account); | |
7619 } | |
7620 this_buddy_name = purple_contact_get_alias((PurpleContact*)n); | |
7621 } else { | |
7622 this_buddy_name = NULL; | |
7623 } | |
7624 | |
7625 cmp = purple_utf8_strcasecmp(buddy_name, this_buddy_name); | |
7626 | |
7627 if (!PURPLE_BLIST_NODE_IS_CONTACT(n) || activity_score > this_log_activity_score || | |
7628 ((activity_score == this_log_activity_score) && | |
7629 (cmp < 0 || (cmp == 0 && node < n)))) { | |
7630 if (cur != NULL) { | |
7631 gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); | |
7632 *iter = *cur; | |
7633 return; | |
7634 } else { | |
7635 gtk_tree_store_insert_before(gtkblist->treemodel, iter, | |
7636 &groupiter, &more_z); | |
7637 return; | |
7638 } | |
7639 } | |
7640 g_value_unset(&val); | |
7641 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); | |
7642 | |
7643 if (cur != NULL) { | |
7644 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); | |
7645 *iter = *cur; | |
7646 return; | |
7647 } else { | |
7648 gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); | |
7649 return; | |
7650 } | |
7651 } | |
7652 | |
7410 static void | 7653 static void |
7411 plugin_act(GtkObject *obj, PurplePluginAction *pam) | 7654 plugin_act(GtkObject *obj, PurplePluginAction *pam) |
7412 { | 7655 { |
7413 if (pam && pam->callback) | 7656 if (pam && pam->callback) |
7414 pam->callback(pam); | 7657 pam->callback(pam); |