pidgin/pidginlog.c

changeset 39660
4ddb9885a38b
parent 39628
52c772b30a1c
child 39824
aefdb7ab2475
equal deleted inserted replaced
39659:e4dfb99b0cef 39660:4ddb9885a38b
81 81
82 static GHashTable *log_viewers = NULL; 82 static GHashTable *log_viewers = NULL;
83 static void populate_log_tree(PidginLogViewer *lv); 83 static void populate_log_tree(PidginLogViewer *lv);
84 static PidginLogViewer *syslog_viewer = NULL; 84 static PidginLogViewer *syslog_viewer = NULL;
85 85
86 struct log_viewer_hash_t { 86 struct log_viewer_hash {
87 PurpleLogType type; 87 PurpleLogType type;
88 char *buddyname; 88 char *buddyname;
89 PurpleAccount *account; 89 PurpleAccount *account;
90 PurpleContact *contact; 90 PurpleContact *contact;
91 }; 91 };
92 92
93 static guint log_viewer_hash(gconstpointer data) 93 static guint log_viewer_hash(gconstpointer data)
94 { 94 {
95 const struct log_viewer_hash_t *viewer = data; 95 const struct log_viewer_hash *viewer = data;
96 96
97 if (viewer->contact != NULL) 97 if (viewer->contact != NULL)
98 return g_direct_hash(viewer->contact); 98 return g_direct_hash(viewer->contact);
99 99
100 return g_str_hash(viewer->buddyname) + 100 return g_str_hash(viewer->buddyname) +
101 g_str_hash(purple_account_get_username(viewer->account)); 101 g_str_hash(purple_account_get_username(viewer->account));
102 } 102 }
103 103
104 static gboolean log_viewer_equal(gconstpointer y, gconstpointer z) 104 static gboolean log_viewer_equal(gconstpointer y, gconstpointer z)
105 { 105 {
106 const struct log_viewer_hash_t *a, *b; 106 const struct log_viewer_hash *a, *b;
107 int ret; 107 int ret;
108 char *normal; 108 char *normal;
109 109
110 a = y; 110 a = y;
111 b = z; 111 b = z;
215 215
216 select_first_log(lv); 216 select_first_log(lv);
217 pidgin_clear_cursor(GTK_WIDGET(lv)); 217 pidgin_clear_cursor(GTK_WIDGET(lv));
218 } 218 }
219 219
220 static void destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash_t *ht) { 220 static void
221 destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash *ht)
222 {
221 PidginLogViewer *lv = syslog_viewer; 223 PidginLogViewer *lv = syslog_viewer;
222 224
223 #ifdef _WIN32 225 #ifdef _WIN32
224 if (resp == GTK_RESPONSE_HELP) { 226 if (resp == GTK_RESPONSE_HELP) {
225 GtkTreeSelection *sel; 227 GtkTreeSelection *sel;
580 g_date_time_unref(dt); 582 g_date_time_unref(dt);
581 logs = logs->next; 583 logs = logs->next;
582 } 584 }
583 } 585 }
584 586
585 static PidginLogViewer *display_log_viewer(struct log_viewer_hash_t *ht, GList *logs, 587 static PidginLogViewer *
586 const char *title, GtkWidget *icon, int log_size) 588 display_log_viewer(struct log_viewer_hash *ht, GList *logs, const char *title,
589 GtkWidget *icon, int log_size)
587 { 590 {
588 PidginLogViewer *lv; 591 PidginLogViewer *lv;
589 592
590 if (logs == NULL) 593 if (logs == NULL)
591 { 594 {
716 /**************************************************************************** 719 /****************************************************************************
717 * Public API 720 * Public API
718 ****************************************************************************/ 721 ****************************************************************************/
719 722
720 void pidgin_log_show(PurpleLogType type, const char *buddyname, PurpleAccount *account) { 723 void pidgin_log_show(PurpleLogType type, const char *buddyname, PurpleAccount *account) {
721 struct log_viewer_hash_t *ht; 724 struct log_viewer_hash *ht;
722 PidginLogViewer *lv = NULL; 725 PidginLogViewer *lv = NULL;
723 const char *name = buddyname; 726 const char *name = buddyname;
724 char *title; 727 char *title;
725 GdkPixbuf *protocol_icon; 728 GdkPixbuf *protocol_icon;
726 729
727 g_return_if_fail(account != NULL); 730 g_return_if_fail(account != NULL);
728 g_return_if_fail(buddyname != NULL); 731 g_return_if_fail(buddyname != NULL);
729 732
730 ht = g_new0(struct log_viewer_hash_t, 1); 733 ht = g_new0(struct log_viewer_hash, 1);
731 734
732 ht->type = type; 735 ht->type = type;
733 ht->buddyname = g_strdup(buddyname); 736 ht->buddyname = g_strdup(buddyname);
734 ht->account = account; 737 ht->account = account;
735 738
770 g_object_unref(protocol_icon); 773 g_object_unref(protocol_icon);
771 g_free(title); 774 g_free(title);
772 } 775 }
773 776
774 void pidgin_log_show_contact(PurpleContact *contact) { 777 void pidgin_log_show_contact(PurpleContact *contact) {
775 struct log_viewer_hash_t *ht; 778 struct log_viewer_hash *ht;
776 PurpleBlistNode *child; 779 PurpleBlistNode *child;
777 PidginLogViewer *lv = NULL; 780 PidginLogViewer *lv = NULL;
778 GList *logs = NULL; 781 GList *logs = NULL;
779 GdkPixbuf *pixbuf; 782 GdkPixbuf *pixbuf;
780 GtkWidget *image; 783 GtkWidget *image;
782 char *title; 785 char *title;
783 int total_log_size = 0; 786 int total_log_size = 0;
784 787
785 g_return_if_fail(contact != NULL); 788 g_return_if_fail(contact != NULL);
786 789
787 ht = g_new0(struct log_viewer_hash_t, 1); 790 ht = g_new0(struct log_viewer_hash, 1);
788 ht->type = PURPLE_LOG_IM; 791 ht->type = PURPLE_LOG_IM;
789 ht->contact = contact; 792 ht->contact = contact;
790 793
791 if (log_viewers == NULL) { 794 if (log_viewers == NULL) {
792 log_viewers = g_hash_table_new(log_viewer_hash, log_viewer_equal); 795 log_viewers = g_hash_table_new(log_viewer_hash, log_viewer_equal);

mercurial