# HG changeset patch # User Eric Warmenhoven # Date 1001920587 0 # Node ID 86c9b44a35ae799d0a66948f6cba677836d6e2c7 # Parent 596f14073f4f3b7f18a503526d020b7cc595c4be [gaim-migrate @ 2414] multi.h no longer depends on gtk. committer: Tailor Script diff -r 596f14073f4f -r 86c9b44a35ae src/gaim.h --- a/src/gaim.h Mon Oct 01 07:09:09 2001 +0000 +++ b/src/gaim.h Mon Oct 01 07:16:27 2001 +0000 @@ -895,6 +895,9 @@ extern void open_url_nw(GtkWidget *, char *); extern void add_bookmark(GtkWidget *, char *); +/* Functions in multi.c */ +extern void account_editor(GtkWidget *, GtkWidget *); + /* fucntions in ticker.c */ void SetTickerPrefs(); void BuddyTickerSignOff(); diff -r 596f14073f4f -r 86c9b44a35ae src/multi.h --- a/src/multi.h Mon Oct 01 07:09:09 2001 +0000 +++ b/src/multi.h Mon Oct 01 07:16:27 2001 +0000 @@ -22,12 +22,11 @@ #ifndef _GAIMMULTI_H_ #define _GAIMMULTI_H_ -#include #include "gaim.h" /* ok. now the fun begins. first we create a connection structure */ struct gaim_connection { - int edittype; + int edittype; /* CUI: this is ui-specific and should be removed */ /* we need to do either oscar or TOC */ /* we make this as an int in case if we want to add more protocols later */ @@ -58,7 +57,7 @@ int options; /* same as aim_user options */ guint keepalive; /* stuff needed for per-connection idle times */ - guint idle_timer; + guint idle_timer; /* CUI: we need to figure out what to do about idle reporting */ time_t login_time; time_t lastsent; int is_idle; @@ -74,10 +73,6 @@ int evil; gboolean wants_to_die; /* defaults to FALSE */ - - /* email notification (MSN and Yahoo) */ - GtkWidget *email_win; - GtkWidget *email_label; }; struct proto_user_opt { @@ -107,7 +102,6 @@ struct gaim_connection *new_gaim_conn(struct aim_user *); void destroy_gaim_conn(struct gaim_connection *); -void account_editor(GtkWidget *, GtkWidget *); void regenerate_user_list(); void account_online(struct gaim_connection *); diff -r 596f14073f4f -r 86c9b44a35ae src/prpl.c --- a/src/prpl.c Mon Oct 01 07:09:09 2001 +0000 +++ b/src/prpl.c Mon Oct 01 07:16:27 2001 +0000 @@ -341,82 +341,105 @@ } } -static void des_email_win(GtkWidget *w, struct gaim_connection *yd) +struct mail_notify { + struct gaim_connection *gc; + GtkWidget *email_win; + GtkWidget *email_label; +}; +GSList *mailnots = NULL; + +static struct mail_notify *find_mail_notify(struct gaim_connection *gc) { - gtk_widget_destroy(yd->email_win); - if (yd->email_win == w) - yd->email_win = NULL; - yd->email_label = NULL; + GSList *m = mailnots; + while (m) { + if (((struct mail_notify *)m->data)->gc == gc) + return m->data; + m = m->next; + } + return NULL; +} + +static void des_email_win(GtkWidget *w, struct mail_notify *mn) +{ + gtk_widget_destroy(mn->email_win); + mailnots = g_slist_remove(mailnots, mn); + g_free(mn); } void connection_has_mail(struct gaim_connection *gc, int count, const char *from, const char *subject) { + struct mail_notify *mn; char buf[2048]; if (!(gc->user->options & OPT_USR_MAIL_CHECK)) return; + if (!(mn = find_mail_notify(gc))) { + mn = g_new0(struct mail_notify, 1); + mn->gc = gc; + } + if (count < 0 && from && subject) { g_snprintf(buf, sizeof buf, "%s has mail from %s: %s", gc->username, from, subject); - if (!gc->email_win) { + if (!mn->email_win) { GtkWidget *close; - gc->email_win = gtk_dialog_new(); - gtk_window_set_policy(GTK_WINDOW(gc->email_win), 0, 0, 1); - gtk_container_set_border_width(GTK_CONTAINER(gc->email_win), 5); - gtk_window_set_title(GTK_WINDOW(gc->email_win), "New Mail"); - gtk_signal_connect(GTK_OBJECT(gc->email_win), "destroy", - GTK_SIGNAL_FUNC(des_email_win), gc); - gtk_widget_realize(gc->email_win); - aol_icon(gc->email_win->window); + mn->email_win = gtk_dialog_new(); + gtk_window_set_policy(GTK_WINDOW(mn->email_win), 0, 0, 1); + gtk_container_set_border_width(GTK_CONTAINER(mn->email_win), 5); + gtk_window_set_title(GTK_WINDOW(mn->email_win), "New Mail"); + gtk_signal_connect(GTK_OBJECT(mn->email_win), "destroy", + GTK_SIGNAL_FUNC(des_email_win), mn); + gtk_widget_realize(mn->email_win); + aol_icon(mn->email_win->window); - gc->email_label = gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(gc->email_win)->vbox), - gc->email_label, 0, 0, 5); - gtk_widget_show(gc->email_label); + mn->email_label = gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mn->email_win)->vbox), + mn->email_label, 0, 0, 5); + gtk_widget_show(mn->email_label); - close = picture_button(gc->email_win, _("Close"), cancel_xpm); - gtk_window_set_focus(GTK_WINDOW(gc->email_win), close); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(gc->email_win)->action_area), + close = picture_button(mn->email_win, _("Close"), cancel_xpm); + gtk_window_set_focus(GTK_WINDOW(mn->email_win), close); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mn->email_win)->action_area), close, 0, 0, 5); gtk_signal_connect(GTK_OBJECT(close), "clicked", - GTK_SIGNAL_FUNC(des_email_win), gc); + GTK_SIGNAL_FUNC(des_email_win), mn); - gtk_widget_show(gc->email_win); + gtk_widget_show(mn->email_win); } - gtk_label_set_text(GTK_LABEL(gc->email_label), buf); + gtk_label_set_text(GTK_LABEL(mn->email_label), buf); } else if (count) { g_snprintf(buf, sizeof buf, "%s has %d new message%s.", gc->username, count, count == 1 ? "" : "s"); - if (!gc->email_win) { + if (!mn->email_win) { GtkWidget *close; - gc->email_win = gtk_dialog_new(); - gtk_window_set_policy(GTK_WINDOW(gc->email_win), 0, 0, 1); - gtk_container_set_border_width(GTK_CONTAINER(gc->email_win), 5); - gtk_window_set_title(GTK_WINDOW(gc->email_win), "New Mail"); - gtk_signal_connect(GTK_OBJECT(gc->email_win), "destroy", - GTK_SIGNAL_FUNC(des_email_win), gc); - gtk_widget_realize(gc->email_win); - aol_icon(gc->email_win->window); + mn->email_win = gtk_dialog_new(); + gtk_window_set_policy(GTK_WINDOW(mn->email_win), 0, 0, 1); + gtk_container_set_border_width(GTK_CONTAINER(mn->email_win), 5); + gtk_window_set_title(GTK_WINDOW(mn->email_win), "New Mail"); + gtk_signal_connect(GTK_OBJECT(mn->email_win), "destroy", + GTK_SIGNAL_FUNC(des_email_win), mn); + gtk_widget_realize(mn->email_win); + aol_icon(mn->email_win->window); - gc->email_label = gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(gc->email_win)->vbox), - gc->email_label, 0, 0, 5); - gtk_widget_show(gc->email_label); + mn->email_label = gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mn->email_win)->vbox), + mn->email_label, 0, 0, 5); + gtk_widget_show(mn->email_label); - close = picture_button(gc->email_win, _("Close"), cancel_xpm); - gtk_window_set_focus(GTK_WINDOW(gc->email_win), close); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(gc->email_win)->action_area), + close = picture_button(mn->email_win, _("Close"), cancel_xpm); + gtk_window_set_focus(GTK_WINDOW(mn->email_win), close); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mn->email_win)->action_area), close, 0, 0, 5); gtk_signal_connect(GTK_OBJECT(close), "clicked", - GTK_SIGNAL_FUNC(des_email_win), gc); + GTK_SIGNAL_FUNC(des_email_win), mn); - gtk_widget_show(gc->email_win); + gtk_widget_show(mn->email_win); } - gtk_label_set_text(GTK_LABEL(gc->email_label), buf); - } else if (gc->email_win) - gtk_widget_destroy(gc->email_win); + gtk_label_set_text(GTK_LABEL(mn->email_label), buf); + } else if (mn->email_win) + gtk_widget_destroy(mn->email_win); } struct icon_data {