Mercurial > pidgin.yaz
comparison libpurple/savedstatuses.c @ 18111:02f39842d28b
fixes #590 by allowing one to use the delete key to delete transient status,
also introduced signals to repopulate the status lists when the statuses
are added/deleted/modified
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 17 Jun 2007 18:03:03 +0000 |
parents | f2d8658b3a86 |
children | 09eb621782bc |
comparison
equal
deleted
inserted
replaced
18110:463aba76c5b6 | 18111:02f39842d28b |
---|---|
567 | 567 |
568 saved_statuses = g_list_insert_sorted(saved_statuses, status, saved_statuses_sort_func); | 568 saved_statuses = g_list_insert_sorted(saved_statuses, status, saved_statuses_sort_func); |
569 | 569 |
570 schedule_save(); | 570 schedule_save(); |
571 | 571 |
572 purple_signal_emit(purple_savedstatuses_get_handle(), "savedstatus-added", | |
573 status); | |
574 | |
572 return status; | 575 return status; |
573 } | 576 } |
574 | 577 |
575 void | 578 void |
576 purple_savedstatus_set_title(PurpleSavedStatus *status, const char *title) | 579 purple_savedstatus_set_title(PurpleSavedStatus *status, const char *title) |
582 | 585 |
583 g_free(status->title); | 586 g_free(status->title); |
584 status->title = g_strdup(title); | 587 status->title = g_strdup(title); |
585 | 588 |
586 schedule_save(); | 589 schedule_save(); |
590 | |
591 purple_signal_emit(purple_savedstatuses_get_handle(), | |
592 "savedstatus-modified", status); | |
587 } | 593 } |
588 | 594 |
589 void | 595 void |
590 purple_savedstatus_set_type(PurpleSavedStatus *status, PurpleStatusPrimitive type) | 596 purple_savedstatus_set_type(PurpleSavedStatus *status, PurpleStatusPrimitive type) |
591 { | 597 { |
592 g_return_if_fail(status != NULL); | 598 g_return_if_fail(status != NULL); |
593 | 599 |
594 status->type = type; | 600 status->type = type; |
595 | 601 |
596 schedule_save(); | 602 schedule_save(); |
603 purple_signal_emit(purple_savedstatuses_get_handle(), | |
604 "savedstatus-modified", status); | |
597 } | 605 } |
598 | 606 |
599 void | 607 void |
600 purple_savedstatus_set_message(PurpleSavedStatus *status, const char *message) | 608 purple_savedstatus_set_message(PurpleSavedStatus *status, const char *message) |
601 { | 609 { |
606 status->message = NULL; | 614 status->message = NULL; |
607 else | 615 else |
608 status->message = g_strdup(message); | 616 status->message = g_strdup(message); |
609 | 617 |
610 schedule_save(); | 618 schedule_save(); |
619 | |
620 purple_signal_emit(purple_savedstatuses_get_handle(), | |
621 "savedstatus-modified", status); | |
611 } | 622 } |
612 | 623 |
613 void | 624 void |
614 purple_savedstatus_set_substatus(PurpleSavedStatus *saved_status, | 625 purple_savedstatus_set_substatus(PurpleSavedStatus *saved_status, |
615 const PurpleAccount *account, | 626 const PurpleAccount *account, |
635 substatus->type = type; | 646 substatus->type = type; |
636 g_free(substatus->message); | 647 g_free(substatus->message); |
637 substatus->message = g_strdup(message); | 648 substatus->message = g_strdup(message); |
638 | 649 |
639 schedule_save(); | 650 schedule_save(); |
651 purple_signal_emit(purple_savedstatuses_get_handle(), | |
652 "savedstatus-modified", saved_status); | |
640 } | 653 } |
641 | 654 |
642 void | 655 void |
643 purple_savedstatus_unset_substatus(PurpleSavedStatus *saved_status, | 656 purple_savedstatus_unset_substatus(PurpleSavedStatus *saved_status, |
644 const PurpleAccount *account) | 657 const PurpleAccount *account) |
658 g_free(substatus->message); | 671 g_free(substatus->message); |
659 g_free(substatus); | 672 g_free(substatus); |
660 return; | 673 return; |
661 } | 674 } |
662 } | 675 } |
676 | |
677 purple_signal_emit(purple_savedstatuses_get_handle(), | |
678 "savedstatus-modified", saved_status); | |
663 } | 679 } |
664 | 680 |
665 /* | 681 /* |
666 * This gets called when an account is deleted. We iterate through | 682 * This gets called when an account is deleted. We iterate through |
667 * all of our saved statuses and delete any substatuses that may | 683 * all of our saved statuses and delete any substatuses that may |
681 status = (PurpleSavedStatus *)iter->data; | 697 status = (PurpleSavedStatus *)iter->data; |
682 purple_savedstatus_unset_substatus(status, account); | 698 purple_savedstatus_unset_substatus(status, account); |
683 } | 699 } |
684 } | 700 } |
685 | 701 |
686 gboolean | 702 void |
687 purple_savedstatus_delete(const char *title) | 703 purple_savedstatus_delete_by_status(PurpleSavedStatus *status) |
688 { | 704 { |
689 PurpleSavedStatus *status; | |
690 time_t creation_time, current, idleaway; | 705 time_t creation_time, current, idleaway; |
691 | 706 |
692 status = purple_savedstatus_find(title); | 707 g_return_if_fail(status != NULL); |
693 | |
694 if (status == NULL) | |
695 return FALSE; | |
696 | 708 |
697 saved_statuses = g_list_remove(saved_statuses, status); | 709 saved_statuses = g_list_remove(saved_statuses, status); |
698 creation_time = purple_savedstatus_get_creation_time(status); | 710 creation_time = purple_savedstatus_get_creation_time(status); |
699 g_hash_table_remove(creation_times, &creation_time); | 711 g_hash_table_remove(creation_times, &creation_time); |
700 free_saved_status(status); | 712 free_saved_status(status); |
710 purple_prefs_set_int("/purple/savedstatus/default", 0); | 722 purple_prefs_set_int("/purple/savedstatus/default", 0); |
711 | 723 |
712 idleaway = purple_prefs_get_int("/purple/savedstatus/idleaway"); | 724 idleaway = purple_prefs_get_int("/purple/savedstatus/idleaway"); |
713 if (idleaway == creation_time) | 725 if (idleaway == creation_time) |
714 purple_prefs_set_int("/purple/savedstatus/idleaway", 0); | 726 purple_prefs_set_int("/purple/savedstatus/idleaway", 0); |
727 | |
728 purple_signal_emit(purple_savedstatuses_get_handle(), | |
729 "savedstatus-deleted", status); | |
730 } | |
731 | |
732 gboolean | |
733 purple_savedstatus_delete(const char *title) | |
734 { | |
735 PurpleSavedStatus *status; | |
736 | |
737 status = purple_savedstatus_find(title); | |
738 | |
739 if (status == NULL) | |
740 return FALSE; | |
741 | |
742 if (purple_savedstatus_get_current() == status) | |
743 return FALSE; | |
744 | |
745 purple_savedstatus_delete_by_status(status); | |
715 | 746 |
716 return TRUE; | 747 return TRUE; |
717 } | 748 } |
718 | 749 |
719 const GList * | 750 const GList * |
1169 purple_value_new(PURPLE_TYPE_SUBTYPE, | 1200 purple_value_new(PURPLE_TYPE_SUBTYPE, |
1170 PURPLE_SUBTYPE_SAVEDSTATUS), | 1201 PURPLE_SUBTYPE_SAVEDSTATUS), |
1171 purple_value_new(PURPLE_TYPE_SUBTYPE, | 1202 purple_value_new(PURPLE_TYPE_SUBTYPE, |
1172 PURPLE_SUBTYPE_SAVEDSTATUS)); | 1203 PURPLE_SUBTYPE_SAVEDSTATUS)); |
1173 | 1204 |
1205 purple_signal_register(handle, "savedstatus-added", | |
1206 purple_marshal_VOID__POINTER, NULL, 1, | |
1207 purple_value_new(PURPLE_TYPE_SUBTYPE, | |
1208 PURPLE_SUBTYPE_SAVEDSTATUS)); | |
1209 | |
1210 purple_signal_register(handle, "savedstatus-deleted", | |
1211 purple_marshal_VOID__POINTER, NULL, 1, | |
1212 purple_value_new(PURPLE_TYPE_SUBTYPE, | |
1213 PURPLE_SUBTYPE_SAVEDSTATUS)); | |
1214 | |
1215 purple_signal_register(handle, "savedstatus-modified", | |
1216 purple_marshal_VOID__POINTER, NULL, 1, | |
1217 purple_value_new(PURPLE_TYPE_SUBTYPE, | |
1218 PURPLE_SUBTYPE_SAVEDSTATUS)); | |
1219 | |
1174 purple_signal_connect(purple_accounts_get_handle(), "account-removed", | 1220 purple_signal_connect(purple_accounts_get_handle(), "account-removed", |
1175 handle, | 1221 handle, |
1176 PURPLE_CALLBACK(purple_savedstatus_unset_all_substatuses), | 1222 PURPLE_CALLBACK(purple_savedstatus_unset_all_substatuses), |
1177 NULL); | 1223 NULL); |
1178 } | 1224 } |