comparison src/gtkstatusselector.c @ 10485:58ab47ed31bf

[gaim-migrate @ 11775] i think this is something like what we want committer: Tailor Script <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Sat, 08 Jan 2005 18:53:49 +0000
parents 6d4f02da1cef
children d51f8280b507
comparison
equal deleted inserted replaced
10484:ec82cbb21fe8 10485:58ab47ed31bf
506 gboolean single_prpl = TRUE; 506 gboolean single_prpl = TRUE;
507 GList *accounts; 507 GList *accounts;
508 gboolean enabled = FALSE; 508 gboolean enabled = FALSE;
509 GaimAccount *first_account = NULL; 509 GaimAccount *first_account = NULL;
510 const char *first_prpl_type = NULL; 510 const char *first_prpl_type = NULL;
511 GList *l; 511 const GList *l;
512 512
513 g_return_if_fail(selector != NULL); 513 g_return_if_fail(selector != NULL);
514 g_return_if_fail(GAIM_GTK_IS_STATUS_SELECTOR(selector)); 514 g_return_if_fail(GAIM_GTK_IS_STATUS_SELECTOR(selector));
515 515
516 #if GTK_CHECK_VERSION(2,4,0) 516 #if GTK_CHECK_VERSION(2,4,0)
576 single_prpl = FALSE; 576 single_prpl = FALSE;
577 } 577 }
578 578
579 if (single_prpl) 579 if (single_prpl)
580 { 580 {
581 const GList *l;
582
583 for (l = gaim_account_get_status_types(first_account); 581 for (l = gaim_account_get_status_types(first_account);
584 l != NULL; 582 l != NULL;
585 l = l->next) 583 l = l->next)
586 { 584 {
587 GaimStatusType *status_type = (GaimStatusType *)l->data; 585 GaimStatusType *status_type = (GaimStatusType *)l->data;
603 load_icon(filename)); 601 load_icon(filename));
604 } 602 }
605 } 603 }
606 else 604 else
607 { 605 {
608 /* TODO: Add "online" and "offline" here? */ 606 /* what follows is either really ugly, or brilliant depending on
609 add_item(selector, "available", _("Available"), 607 * how you look at it, and how much you've had to drink */
610 load_icon("online.png")); 608 int i;
611 add_item(selector, "away", _("Away"), load_icon("away.png")); 609 int num_accounts = 0;
610 int options[GAIM_STATUS_NUM_PRIMITIVES];
611 GaimAccount *acct_options[GAIM_STATUS_NUM_PRIMITIVES];
612
613 for(i=0; i<GAIM_STATUS_NUM_PRIMITIVES; i++) {
614 options[i] = 0;
615 acct_options[i] = NULL;
616 }
617
618 for(accounts = gaim_accounts_get_all(); accounts != NULL; accounts = accounts->next) {
619 GaimAccount *account = accounts->data;
620
621 if (!gaim_account_get_enabled(account, GAIM_GTK_UI))
622 continue;
623
624 num_accounts++;
625
626 for(l = gaim_account_get_status_types(account); l != NULL; l = l->next) {
627 GaimStatusType *status_type = l->data;
628
629 if (!gaim_status_type_is_user_settable(status_type))
630 continue;
631
632 acct_options[gaim_status_type_get_primitive(status_type)] = account;
633 }
634
635 for(i=0; i<GAIM_STATUS_NUM_PRIMITIVES; i++) {
636 gaim_debug_misc("gtkstatusselector", "account=%p, acct_options[%d]=%p\n", account, i, acct_options[i]);
637 if(acct_options[i] == account)
638 options[i]++;
639 }
640 }
641
642 for(i=0; i<GAIM_STATUS_NUM_PRIMITIVES; i++) {
643 gaim_debug_misc("gtkstatusselector", "%s has %d accounts\n", gaim_primitive_get_name_from_type(i), options[i]);
644 if(options[i] == num_accounts) {
645 char *filename = g_strdup_printf("%s.png", gaim_primitive_get_id_from_type(i));
646 add_item(selector, gaim_primitive_get_id_from_type(i), gaim_primitive_get_name_from_type(i), load_icon(filename));
647 g_free(filename);
648 }
649 }
612 } 650 }
613 651
614 /* TODO: Add saved statuses here? */ 652 /* TODO: Add saved statuses here? */
615 653
616 add_item(selector, NULL, _("New Status"), 654 add_item(selector, NULL, _("New Status"),