Mercurial > pidgin
comparison finch/gntblist.c @ 22217:ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sat, 26 Jan 2008 22:33:08 +0000 |
parents | 2b426862ffbf |
children | 797230b3e48e |
comparison
equal
deleted
inserted
replaced
22216:b99d6d21cd79 | 22217:ad357ca94de9 |
---|---|
154 { | 154 { |
155 gboolean offline = purple_prefs_get_bool(PREF_ROOT "/showoffline"); | 155 gboolean offline = purple_prefs_get_bool(PREF_ROOT "/showoffline"); |
156 | 156 |
157 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { | 157 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
158 PurpleBuddy *buddy = (PurpleBuddy*)node; | 158 PurpleBuddy *buddy = (PurpleBuddy*)node; |
159 FinchBlistNode *fnode = node->ui_data; | 159 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
160 if (!purple_buddy_get_contact(buddy)) | 160 if (!purple_buddy_get_contact(buddy)) |
161 return FALSE; /* When a new buddy is added and show-offline is set */ | 161 return FALSE; /* When a new buddy is added and show-offline is set */ |
162 if (PURPLE_BUDDY_IS_ONLINE(buddy)) | 162 if (PURPLE_BUDDY_IS_ONLINE(buddy)) |
163 return TRUE; /* The buddy is online */ | 163 return TRUE; /* The buddy is online */ |
164 if (!purple_account_is_connected(purple_buddy_get_account(buddy))) | 164 if (!purple_account_is_connected(purple_buddy_get_account(buddy))) |
311 static GList *managers; | 311 static GList *managers; |
312 | 312 |
313 static FinchBlistNode * | 313 static FinchBlistNode * |
314 create_finch_blist_node(PurpleBlistNode *node, gpointer row) | 314 create_finch_blist_node(PurpleBlistNode *node, gpointer row) |
315 { | 315 { |
316 FinchBlistNode *fnode = node->ui_data; | 316 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
317 if (!fnode) { | 317 if (!fnode) { |
318 fnode = g_new0(FinchBlistNode, 1); | 318 fnode = g_new0(FinchBlistNode, 1); |
319 fnode->signed_timer = 0; | 319 fnode->signed_timer = 0; |
320 node->ui_data = fnode; | 320 FINCH_SET_DATA(node, fnode); |
321 } | 321 } |
322 fnode->row = row; | 322 fnode->row = row; |
323 return fnode; | 323 return fnode; |
324 } | 324 } |
325 | 325 |
326 static void | 326 static void |
327 reset_blist_node_ui_data(PurpleBlistNode *node) | 327 reset_blist_node_ui_data(PurpleBlistNode *node) |
328 { | 328 { |
329 FinchBlistNode *fnode = node->ui_data; | 329 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
330 if (fnode == NULL) | 330 if (fnode == NULL) |
331 return; | 331 return; |
332 if (fnode->signed_timer) | 332 if (fnode->signed_timer) |
333 purple_timeout_remove(fnode->signed_timer); | 333 purple_timeout_remove(fnode->signed_timer); |
334 g_free(fnode); | 334 g_free(fnode); |
335 node->ui_data = NULL; | 335 FINCH_SET_DATA(node, NULL); |
336 } | 336 } |
337 | 337 |
338 static int | 338 static int |
339 get_display_color(PurpleBlistNode *node) | 339 get_display_color(PurpleBlistNode *node) |
340 { | 340 { |
363 | 363 |
364 static GntTextFormatFlags | 364 static GntTextFormatFlags |
365 get_blist_node_flag(PurpleBlistNode *node) | 365 get_blist_node_flag(PurpleBlistNode *node) |
366 { | 366 { |
367 GntTextFormatFlags flag = 0; | 367 GntTextFormatFlags flag = 0; |
368 FinchBlistNode *fnode = node->ui_data; | 368 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
369 | 369 |
370 if (ggblist->tagged && g_list_find(ggblist->tagged, node)) | 370 if (ggblist->tagged && g_list_find(ggblist->tagged, node)) |
371 flag |= GNT_TEXT_FLAG_BOLD; | 371 flag |= GNT_TEXT_FLAG_BOLD; |
372 | 372 |
373 if (fnode && fnode->signed_timer) | 373 if (fnode && fnode->signed_timer) |
374 flag |= GNT_TEXT_FLAG_BLINK; | 374 flag |= GNT_TEXT_FLAG_BLINK; |
375 else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { | 375 else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
376 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact *)node); | 376 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact *)node); |
377 fnode = node->ui_data; | 377 fnode = FINCH_GET_DATA(node); |
378 if (fnode && fnode->signed_timer) | 378 if (fnode && fnode->signed_timer) |
379 flag |= GNT_TEXT_FLAG_BLINK; | 379 flag |= GNT_TEXT_FLAG_BLINK; |
380 } | 380 } |
381 | 381 |
382 return flag; | 382 return flag; |
394 is_contact_online(PurpleContact *contact) | 394 is_contact_online(PurpleContact *contact) |
395 { | 395 { |
396 PurpleBlistNode *node; | 396 PurpleBlistNode *node; |
397 for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)contact)); node; | 397 for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)contact)); node; |
398 node = purple_blist_node_get_sibling_next(node)) { | 398 node = purple_blist_node_get_sibling_next(node)) { |
399 FinchBlistNode *fnode = node->ui_data; | 399 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
400 if (PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) || | 400 if (PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) || |
401 (fnode && fnode->signed_timer)) | 401 (fnode && fnode->signed_timer)) |
402 return TRUE; | 402 return TRUE; |
403 } | 403 } |
404 return FALSE; | 404 return FALSE; |
426 } | 426 } |
427 | 427 |
428 static void | 428 static void |
429 add_node(PurpleBlistNode *node, FinchBlist *ggblist) | 429 add_node(PurpleBlistNode *node, FinchBlist *ggblist) |
430 { | 430 { |
431 if (node->ui_data) | 431 if (FINCH_GET_DATA(node)) |
432 return; | 432 return; |
433 | 433 |
434 if (!ggblist->manager->can_add_node(node)) | 434 if (!ggblist->manager->can_add_node(node)) |
435 return; | 435 return; |
436 | 436 |
460 } | 460 } |
461 | 461 |
462 static void | 462 static void |
463 node_remove(PurpleBuddyList *list, PurpleBlistNode *node) | 463 node_remove(PurpleBuddyList *list, PurpleBlistNode *node) |
464 { | 464 { |
465 FinchBlist *ggblist = list->ui_data; | 465 FinchBlist *ggblist = FINCH_GET_DATA(list); |
466 PurpleBlistNode *parent; | 466 PurpleBlistNode *parent; |
467 | 467 |
468 if (ggblist == NULL || node->ui_data == NULL) | 468 if (ggblist == NULL || FINCH_GET_DATA(node)== NULL) |
469 return; | 469 return; |
470 | 470 |
471 gnt_tree_remove(GNT_TREE(ggblist->tree), node); | 471 gnt_tree_remove(GNT_TREE(ggblist->tree), node); |
472 reset_blist_node_ui_data(node); | 472 reset_blist_node_ui_data(node); |
473 if (ggblist->tagged) | 473 if (ggblist->tagged) |
494 /* It really looks like this should never happen ... but it does. | 494 /* It really looks like this should never happen ... but it does. |
495 This will at least emit a warning to the log when it | 495 This will at least emit a warning to the log when it |
496 happens, so maybe someone will figure it out. */ | 496 happens, so maybe someone will figure it out. */ |
497 g_return_if_fail(node != NULL); | 497 g_return_if_fail(node != NULL); |
498 | 498 |
499 if (list->ui_data == NULL) | 499 if (FINCH_GET_DATA(list)== NULL) |
500 return; /* XXX: this is probably the place to auto-join chats */ | 500 return; /* XXX: this is probably the place to auto-join chats */ |
501 | 501 |
502 if (ggblist->window == NULL) | 502 if (ggblist->window == NULL) |
503 return; | 503 return; |
504 | 504 |
505 if (node->ui_data != NULL) { | 505 if (FINCH_GET_DATA(node)!= NULL) { |
506 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, | 506 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, |
507 0, get_display_name(node)); | 507 0, get_display_name(node)); |
508 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); | 508 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); |
509 blist_update_row_flags(node); | 509 blist_update_row_flags(node); |
510 if (gnt_tree_get_parent_key(GNT_TREE(ggblist->tree), node) != | 510 if (gnt_tree_get_parent_key(GNT_TREE(ggblist->tree), node) != |
512 node_remove(list, node); | 512 node_remove(list, node); |
513 } | 513 } |
514 | 514 |
515 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { | 515 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
516 PurpleBuddy *buddy = (PurpleBuddy*)node; | 516 PurpleBuddy *buddy = (PurpleBuddy*)node; |
517 add_node((PurpleBlistNode*)buddy, list->ui_data); | 517 add_node((PurpleBlistNode*)buddy, FINCH_GET_DATA(list)); |
518 node_update(list, purple_blist_node_get_parent(node)); | 518 node_update(list, purple_blist_node_get_parent(node)); |
519 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { | 519 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
520 add_node(node, list->ui_data); | 520 add_node(node, FINCH_GET_DATA(list)); |
521 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { | 521 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
522 if (node->ui_data == NULL) { | 522 if (FINCH_GET_DATA(node)== NULL) { |
523 /* The core seems to expect the UI to add the buddies. */ | 523 /* The core seems to expect the UI to add the buddies. */ |
524 for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node)) | 524 for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node)) |
525 add_node(node, list->ui_data); | 525 add_node(node, FINCH_GET_DATA(list)); |
526 } | 526 } |
527 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { | 527 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
528 if (!ggblist->manager->can_add_node(node)) | 528 if (!ggblist->manager->can_add_node(node)) |
529 node_remove(list, node); | 529 node_remove(list, node); |
530 else | 530 else |
531 add_node(node, list->ui_data); | 531 add_node(node, FINCH_GET_DATA(list)); |
532 } | 532 } |
533 } | 533 } |
534 | 534 |
535 static void | 535 static void |
536 new_list(PurpleBuddyList *list) | 536 new_list(PurpleBuddyList *list) |
537 { | 537 { |
538 if (ggblist) | 538 if (ggblist) |
539 return; | 539 return; |
540 | 540 |
541 ggblist = g_new0(FinchBlist, 1); | 541 ggblist = g_new0(FinchBlist, 1); |
542 list->ui_data = ggblist; | 542 FINCH_SET_DATA(list, ggblist); |
543 ggblist->manager = finch_blist_manager_find(purple_prefs_get_string(PREF_ROOT "/grouping")); | 543 ggblist->manager = finch_blist_manager_find(purple_prefs_get_string(PREF_ROOT "/grouping")); |
544 if (!ggblist->manager) | 544 if (!ggblist->manager) |
545 ggblist->manager = &default_manager; | 545 ggblist->manager = &default_manager; |
546 } | 546 } |
547 | 547 |
761 static void | 761 static void |
762 add_group(PurpleGroup *group, FinchBlist *ggblist) | 762 add_group(PurpleGroup *group, FinchBlist *ggblist) |
763 { | 763 { |
764 gpointer parent; | 764 gpointer parent; |
765 PurpleBlistNode *node = (PurpleBlistNode *)group; | 765 PurpleBlistNode *node = (PurpleBlistNode *)group; |
766 if (node->ui_data) | 766 if (FINCH_GET_DATA(node)) |
767 return; | 767 return; |
768 parent = ggblist->manager->find_parent((PurpleBlistNode*)group); | 768 parent = ggblist->manager->find_parent((PurpleBlistNode*)group); |
769 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, | 769 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, |
770 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), | 770 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), |
771 parent, NULL)); | 771 parent, NULL)); |
834 static void | 834 static void |
835 add_chat(PurpleChat *chat, FinchBlist *ggblist) | 835 add_chat(PurpleChat *chat, FinchBlist *ggblist) |
836 { | 836 { |
837 gpointer parent; | 837 gpointer parent; |
838 PurpleBlistNode *node = (PurpleBlistNode *)chat; | 838 PurpleBlistNode *node = (PurpleBlistNode *)chat; |
839 if (node->ui_data) | 839 if (FINCH_GET_DATA(node)) |
840 return; | 840 return; |
841 if (!purple_account_is_connected(chat->account)) | 841 if (!purple_account_is_connected(chat->account)) |
842 return; | 842 return; |
843 | 843 |
844 parent = ggblist->manager->find_parent((PurpleBlistNode*)chat); | 844 parent = ggblist->manager->find_parent((PurpleBlistNode*)chat); |
853 { | 853 { |
854 gpointer parent; | 854 gpointer parent; |
855 PurpleBlistNode *node = (PurpleBlistNode*)contact; | 855 PurpleBlistNode *node = (PurpleBlistNode*)contact; |
856 const char *name; | 856 const char *name; |
857 | 857 |
858 if (node->ui_data) | 858 if (FINCH_GET_DATA(node)) |
859 return; | 859 return; |
860 | 860 |
861 name = get_display_name(node); | 861 name = get_display_name(node); |
862 if (name == NULL) | 862 if (name == NULL) |
863 return; | 863 return; |
876 { | 876 { |
877 gpointer parent; | 877 gpointer parent; |
878 PurpleBlistNode *node = (PurpleBlistNode *)buddy; | 878 PurpleBlistNode *node = (PurpleBlistNode *)buddy; |
879 PurpleContact *contact; | 879 PurpleContact *contact; |
880 | 880 |
881 if (node->ui_data) | 881 if (FINCH_GET_DATA(node)) |
882 return; | 882 return; |
883 | 883 |
884 contact = purple_buddy_get_contact(buddy); | 884 contact = purple_buddy_get_contact(buddy); |
885 parent = ggblist->manager->find_parent((PurpleBlistNode*)buddy); | 885 parent = ggblist->manager->find_parent((PurpleBlistNode*)buddy); |
886 | 886 |
934 if (!conv) { | 934 if (!conv) { |
935 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, | 935 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, |
936 purple_buddy_get_account(buddy), | 936 purple_buddy_get_account(buddy), |
937 purple_buddy_get_name(buddy)); | 937 purple_buddy_get_name(buddy)); |
938 } else { | 938 } else { |
939 FinchConv *ggconv = conv->ui_data; | 939 FinchConv *ggconv = FINCH_GET_DATA(conv); |
940 gnt_window_present(ggconv->window); | 940 gnt_window_present(ggconv->window); |
941 } | 941 } |
942 finch_conversation_set_active(conv); | 942 finch_conversation_set_active(conv); |
943 } | 943 } |
944 else if (PURPLE_BLIST_NODE_IS_CHAT(node)) | 944 else if (PURPLE_BLIST_NODE_IS_CHAT(node)) |
1810 static void | 1810 static void |
1811 reset_blist_window(GntWidget *window, gpointer null) | 1811 reset_blist_window(GntWidget *window, gpointer null) |
1812 { | 1812 { |
1813 PurpleBlistNode *node; | 1813 PurpleBlistNode *node; |
1814 purple_signals_disconnect_by_handle(finch_blist_get_handle()); | 1814 purple_signals_disconnect_by_handle(finch_blist_get_handle()); |
1815 purple_get_blist()->ui_data = NULL; | 1815 FINCH_SET_DATA(purple_get_blist(), NULL); |
1816 | 1816 |
1817 node = purple_blist_get_root(); | 1817 node = purple_blist_get_root(); |
1818 while (node) { | 1818 while (node) { |
1819 reset_blist_node_ui_data(node); | 1819 reset_blist_node_ui_data(node); |
1820 node = purple_blist_node_next(node, TRUE); | 1820 node = purple_blist_node_next(node, TRUE); |
2322 | 2322 |
2323 static gboolean | 2323 static gboolean |
2324 buddy_recent_signed_on_off(gpointer data) | 2324 buddy_recent_signed_on_off(gpointer data) |
2325 { | 2325 { |
2326 PurpleBlistNode *node = data; | 2326 PurpleBlistNode *node = data; |
2327 FinchBlistNode *fnode = node->ui_data; | 2327 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
2328 | 2328 |
2329 purple_timeout_remove(fnode->signed_timer); | 2329 purple_timeout_remove(fnode->signed_timer); |
2330 fnode->signed_timer = 0; | 2330 fnode->signed_timer = 0; |
2331 | 2331 |
2332 if (!ggblist->manager->can_add_node(node)) { | 2332 if (!ggblist->manager->can_add_node(node)) { |
2342 | 2342 |
2343 static gboolean | 2343 static gboolean |
2344 buddy_signed_on_off_cb(gpointer data) | 2344 buddy_signed_on_off_cb(gpointer data) |
2345 { | 2345 { |
2346 PurpleBlistNode *node = data; | 2346 PurpleBlistNode *node = data; |
2347 FinchBlistNode *fnode = node->ui_data; | 2347 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
2348 if (!ggblist || !fnode) | 2348 if (!ggblist || !fnode) |
2349 return FALSE; | 2349 return FALSE; |
2350 | 2350 |
2351 if (fnode->signed_timer) | 2351 if (fnode->signed_timer) |
2352 purple_timeout_remove(fnode->signed_timer); | 2352 purple_timeout_remove(fnode->signed_timer); |