| 370 |
370 |
| 371 return status_type->independent; |
371 return status_type->independent; |
| 372 } |
372 } |
| 373 |
373 |
| 374 gboolean |
374 gboolean |
| |
375 gaim_status_type_is_exclusive(const GaimStatusType *status_type) |
| |
376 { |
| |
377 g_return_val_if_fail(status_type != NULL, FALSE); |
| |
378 |
| |
379 return !status_type->independent; |
| |
380 } |
| |
381 |
| |
382 gboolean |
| 375 gaim_status_type_is_available(const GaimStatusType *status_type) |
383 gaim_status_type_is_available(const GaimStatusType *status_type) |
| 376 { |
384 { |
| 377 GaimStatusPrimitive primitive; |
385 GaimStatusPrimitive primitive; |
| 378 |
386 |
| 379 g_return_val_if_fail(status_type != NULL, FALSE); |
387 g_return_val_if_fail(status_type != NULL, FALSE); |
| 617 if (status->active == active) |
625 if (status->active == active) |
| 618 return; |
626 return; |
| 619 |
627 |
| 620 status_type = gaim_status_get_type(status); |
628 status_type = gaim_status_get_type(status); |
| 621 |
629 |
| 622 if (!active && !gaim_status_type_is_independent(status_type)) |
630 if (!active && gaim_status_type_is_exclusive(status_type)) |
| 623 { |
631 { |
| 624 gaim_debug_error("status", |
632 gaim_debug_error("status", |
| 625 "Cannot deactivate an exclusive status (%s).\n", |
633 "Cannot deactivate an exclusive status (%s).\n", |
| 626 gaim_status_type_get_id(status_type)); |
634 gaim_status_type_get_id(status_type)); |
| 627 return; |
635 return; |
| 628 } |
636 } |
| 629 |
637 |
| 630 presence = gaim_status_get_presence(status); |
638 presence = gaim_status_get_presence(status); |
| 631 old_status = gaim_presence_get_active_status(presence); |
639 old_status = gaim_presence_get_active_status(presence); |
| 632 |
640 |
| 633 if (!gaim_status_type_is_independent(status_type)) |
641 if (gaim_status_type_is_exclusive(status_type)) |
| 634 { |
642 { |
| 635 const GList *l; |
643 const GList *l; |
| 636 |
644 |
| 637 for (l = gaim_presence_get_statuses(presence); l != NULL; l = l->next) |
645 for (l = gaim_presence_get_statuses(presence); l != NULL; l = l->next) |
| 638 { |
646 { |
| 771 |
779 |
| 772 return gaim_status_type_is_independent(gaim_status_get_type(status)); |
780 return gaim_status_type_is_independent(gaim_status_get_type(status)); |
| 773 } |
781 } |
| 774 |
782 |
| 775 gboolean |
783 gboolean |
| |
784 gaim_status_is_exclusive(const GaimStatus *status) |
| |
785 { |
| |
786 g_return_val_if_fail(status != NULL, FALSE); |
| |
787 |
| |
788 return gaim_status_type_is_exclusive(gaim_status_get_type(status)); |
| |
789 } |
| |
790 |
| |
791 gboolean |
| 776 gaim_status_is_available(const GaimStatus *status) |
792 gaim_status_is_available(const GaimStatus *status) |
| 777 { |
793 { |
| 778 g_return_val_if_fail(status != NULL, FALSE); |
794 g_return_val_if_fail(status != NULL, FALSE); |
| 779 |
795 |
| 780 return gaim_status_type_is_available(gaim_status_get_type(status)); |
796 return gaim_status_type_is_available(gaim_status_get_type(status)); |
| 1078 |
1094 |
| 1079 status = gaim_presence_get_status(presence, status_id); |
1095 status = gaim_presence_get_status(presence, status_id); |
| 1080 |
1096 |
| 1081 g_return_if_fail(status != NULL); |
1097 g_return_if_fail(status != NULL); |
| 1082 |
1098 |
| 1083 if (!gaim_status_is_independent(status)) |
1099 if (gaim_status_is_exclusive(status)) |
| 1084 { |
1100 { |
| 1085 if (!active) |
1101 if (!active) |
| 1086 { |
1102 { |
| 1087 gaim_debug_warning("status", |
1103 gaim_debug_warning("status", |
| 1088 "Attempted to set a non-independent status " |
1104 "Attempted to set a non-independent status " |