| 521 |
521 |
| 522 logs = logs->next; |
522 logs = logs->next; |
| 523 } |
523 } |
| 524 } |
524 } |
| 525 |
525 |
| 526 static PidginLogViewer *display_log_viewer(GtkWindow *parent, struct log_viewer_hash_t *ht, GList *logs, |
526 static PidginLogViewer *display_log_viewer(struct log_viewer_hash_t *ht, GList *logs, |
| 527 const char *title, GtkWidget *icon, int log_size) |
527 const char *title, GtkWidget *icon, int log_size) |
| 528 { |
528 { |
| 529 PidginLogViewer *lv; |
529 PidginLogViewer *lv; |
| 530 GtkWidget *title_box; |
530 GtkWidget *title_box; |
| 531 char *text; |
531 char *text; |
| 567 |
567 |
| 568 if (ht != NULL) |
568 if (ht != NULL) |
| 569 g_hash_table_insert(log_viewers, ht, lv); |
569 g_hash_table_insert(log_viewers, ht, lv); |
| 570 |
570 |
| 571 /* Window ***********/ |
571 /* Window ***********/ |
| 572 lv->window = gtk_dialog_new_with_buttons(title, parent, 0, |
572 lv->window = gtk_dialog_new_with_buttons(title, NULL, 0, |
| 573 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); |
573 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); |
| 574 #ifdef _WIN32 |
574 #ifdef _WIN32 |
| 575 /* Steal the "HELP" response and use it to trigger browsing to the logs folder */ |
575 /* Steal the "HELP" response and use it to trigger browsing to the logs folder */ |
| 576 gtk_dialog_add_button(GTK_DIALOG(lv->window), _("_Browse logs folder"), GTK_RESPONSE_HELP); |
576 gtk_dialog_add_button(GTK_DIALOG(lv->window), _("_Browse logs folder"), GTK_RESPONSE_HELP); |
| 577 #endif |
577 #endif |
| 674 |
674 |
| 675 return lv; |
675 return lv; |
| 676 } |
676 } |
| 677 |
677 |
| 678 void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) { |
678 void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) { |
| 679 pidgin_log_show_with_parent(NULL, type, screenname, account); |
|
| 680 } |
|
| 681 |
|
| 682 void pidgin_log_show_with_parent(GtkWindow *parent, PurpleLogType type, const char *screenname, PurpleAccount *account) { |
|
| 683 struct log_viewer_hash_t *ht; |
679 struct log_viewer_hash_t *ht; |
| 684 PidginLogViewer *lv = NULL; |
680 PidginLogViewer *lv = NULL; |
| 685 const char *name = screenname; |
681 const char *name = screenname; |
| 686 char *title; |
682 char *title; |
| |
683 GdkPixbuf *prpl_icon; |
| 687 |
684 |
| 688 g_return_if_fail(account != NULL); |
685 g_return_if_fail(account != NULL); |
| 689 g_return_if_fail(screenname != NULL); |
686 g_return_if_fail(screenname != NULL); |
| 690 |
687 |
| 691 ht = g_new0(struct log_viewer_hash_t, 1); |
688 ht = g_new0(struct log_viewer_hash_t, 1); |
| 719 name = purple_buddy_get_contact_alias(buddy); |
716 name = purple_buddy_get_contact_alias(buddy); |
| 720 |
717 |
| 721 title = g_strdup_printf(_("Conversations with %s"), name); |
718 title = g_strdup_printf(_("Conversations with %s"), name); |
| 722 } |
719 } |
| 723 |
720 |
| 724 display_log_viewer(parent, ht, purple_log_get_logs(type, screenname, account), |
721 prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM); |
| 725 title, gtk_image_new_from_pixbuf(pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM)), |
722 |
| |
723 display_log_viewer(ht, purple_log_get_logs(type, screenname, account), |
| |
724 title, gtk_image_new_from_pixbuf(prpl_icon), |
| 726 purple_log_get_total_size(type, screenname, account)); |
725 purple_log_get_total_size(type, screenname, account)); |
| |
726 |
| |
727 if (prpl_icon) |
| |
728 g_object_unref(prpl_icon); |
| 727 g_free(title); |
729 g_free(title); |
| 728 } |
730 } |
| 729 |
731 |
| 730 void pidgin_log_show_contact(PurpleContact *contact) { |
732 void pidgin_log_show_contact(PurpleContact *contact) { |
| 731 pidgin_log_show_contact_with_parent(NULL, contact); |
|
| 732 } |
|
| 733 |
|
| 734 void pidgin_log_show_contact_with_parent(GtkWindow *parent, PurpleContact *contact) { |
|
| 735 struct log_viewer_hash_t *ht = g_new0(struct log_viewer_hash_t, 1); |
733 struct log_viewer_hash_t *ht = g_new0(struct log_viewer_hash_t, 1); |
| 736 PurpleBlistNode *child; |
734 PurpleBlistNode *child; |
| 737 PidginLogViewer *lv = NULL; |
735 PidginLogViewer *lv = NULL; |
| 738 GList *logs = NULL; |
736 GList *logs = NULL; |
| 739 GdkPixbuf *pixbuf; |
737 GdkPixbuf *pixbuf; |
| 783 if (name == NULL) |
781 if (name == NULL) |
| 784 name = ""; |
782 name = ""; |
| 785 } |
783 } |
| 786 |
784 |
| 787 title = g_strdup_printf(_("Conversations with %s"), name); |
785 title = g_strdup_printf(_("Conversations with %s"), name); |
| 788 display_log_viewer(parent, ht, logs, title, image, total_log_size); |
786 display_log_viewer(ht, logs, title, image, total_log_size); |
| 789 g_free(title); |
787 g_free(title); |
| 790 } |
788 } |
| 791 |
789 |
| 792 void pidgin_syslog_show(void) |
790 void pidgin_syslog_show() |
| 793 { |
|
| 794 pidgin_syslog_show_with_parent(NULL); |
|
| 795 } |
|
| 796 |
|
| 797 void pidgin_syslog_show_with_parent(GtkWindow *parent) |
|
| 798 { |
791 { |
| 799 GList *accounts = NULL; |
792 GList *accounts = NULL; |
| 800 GList *logs = NULL; |
793 GList *logs = NULL; |
| 801 |
794 |
| 802 if (syslog_viewer != NULL) { |
795 if (syslog_viewer != NULL) { |
| 812 |
805 |
| 813 logs = g_list_concat(purple_log_get_system_logs(account), logs); |
806 logs = g_list_concat(purple_log_get_system_logs(account), logs); |
| 814 } |
807 } |
| 815 logs = g_list_sort(logs, purple_log_compare); |
808 logs = g_list_sort(logs, purple_log_compare); |
| 816 |
809 |
| 817 syslog_viewer = display_log_viewer(parent, NULL, logs, _("System Log"), NULL, 0); |
810 syslog_viewer = display_log_viewer(NULL, logs, _("System Log"), NULL, 0); |
| 818 } |
811 } |
| 819 |
812 |
| 820 /**************************************************************************** |
813 /**************************************************************************** |
| 821 * GTK+ LOG SUBSYSTEM ******************************************************* |
814 * GTK+ LOG SUBSYSTEM ******************************************************* |
| 822 ****************************************************************************/ |
815 ****************************************************************************/ |