Mercurial > pidgin
comparison src/prpl.c @ 5538:f7dc3f656f03
[gaim-migrate @ 5938]
No more connection_has_mail()!
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Tue, 27 May 2003 08:09:10 +0000 |
| parents | cce2d7868c78 |
| children | 9eb5b13fd412 |
comparison
equal
deleted
inserted
replaced
| 5537:3becf79500d2 | 5538:f7dc3f656f03 |
|---|---|
| 201 act = g_list_next(act); | 201 act = g_list_next(act); |
| 202 } | 202 } |
| 203 c = g_slist_next(c); | 203 c = g_slist_next(c); |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 } | |
| 207 | |
| 208 struct mail_notify { | |
| 209 struct gaim_connection *gc; | |
| 210 GtkWidget *email_win; | |
| 211 GtkWidget *email_label; | |
| 212 char *url; | |
| 213 }; | |
| 214 GSList *mailnots = NULL; | |
| 215 | |
| 216 static struct mail_notify *find_mail_notify(struct gaim_connection *gc) | |
| 217 { | |
| 218 GSList *m = mailnots; | |
| 219 while (m) { | |
| 220 if (((struct mail_notify *)m->data)->gc == gc) | |
| 221 return m->data; | |
| 222 m = m->next; | |
| 223 } | |
| 224 return NULL; | |
| 225 } | |
| 226 | |
| 227 static void des_email_win(GtkWidget *w, struct mail_notify *mn) | |
| 228 { | |
| 229 if (w != mn->email_win) { | |
| 230 gtk_widget_destroy(mn->email_win); | |
| 231 return; | |
| 232 } | |
| 233 | |
| 234 gaim_debug(GAIM_DEBUG_INFO, "prpl", "Removing mail notification.\n"); | |
| 235 | |
| 236 mailnots = g_slist_remove(mailnots, mn); | |
| 237 if (mn->url) | |
| 238 g_free(mn->url); | |
| 239 g_free(mn); | |
| 240 } | |
| 241 | |
| 242 void connection_has_mail(struct gaim_connection *gc, int count, const char *from, const char *subject, const char *url) | |
| 243 { | |
| 244 GtkWidget *hbox; | |
| 245 GtkWidget *vbox; | |
| 246 GtkWidget *urlbut; | |
| 247 GtkWidget *close; | |
| 248 | |
| 249 struct mail_notify *mn; | |
| 250 char buf[2048]; | |
| 251 | |
| 252 if (!(gc->account->options & OPT_ACCT_MAIL_CHECK)) | |
| 253 return; | |
| 254 | |
| 255 if (!(mn = find_mail_notify(gc))) { | |
| 256 mn = g_new0(struct mail_notify, 1); | |
| 257 mn->gc = gc; | |
| 258 mailnots = g_slist_append(mailnots, mn); | |
| 259 } | |
| 260 | |
| 261 if (count < 0) { | |
| 262 if (from && subject) | |
| 263 g_snprintf(buf, sizeof buf, _("%s has mail from %s: %s"), gc->username, from, *subject ? subject : _("No Subject")); | |
| 264 else | |
| 265 g_snprintf(buf, sizeof buf, _("%s has new mail."), gc->username); | |
| 266 } else if (count > 0) { | |
| 267 g_snprintf(buf, sizeof buf, | |
| 268 ngettext("%s has %d new message.","%s has %d new messages.",count), gc->username, count); | |
| 269 } else if (mn->email_win) { | |
| 270 gtk_widget_destroy(mn->email_win); | |
| 271 return; | |
| 272 } else | |
| 273 return; | |
| 274 | |
| 275 if (mn->email_win) { | |
| 276 gtk_label_set_text(GTK_LABEL(mn->email_label), buf); | |
| 277 return; | |
| 278 } | |
| 279 | |
| 280 | |
| 281 GAIM_DIALOG(mn->email_win); | |
| 282 gtk_window_set_role(GTK_WINDOW(mn->email_win), "mail"); | |
| 283 gtk_window_set_resizable(GTK_WINDOW(mn->email_win), TRUE); | |
| 284 gtk_window_set_title(GTK_WINDOW(mn->email_win), _("Gaim - New Mail")); | |
| 285 g_signal_connect(G_OBJECT(mn->email_win), "destroy", | |
| 286 G_CALLBACK(des_email_win), mn); | |
| 287 gtk_widget_realize(mn->email_win); | |
| 288 | |
| 289 vbox = gtk_vbox_new(FALSE, 5); | |
| 290 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); | |
| 291 gtk_container_add(GTK_CONTAINER(mn->email_win), vbox); | |
| 292 | |
| 293 mn->email_label = gtk_label_new(buf); | |
| 294 gtk_label_set_text(GTK_LABEL(mn->email_label), buf); | |
| 295 gtk_label_set_line_wrap(GTK_LABEL(mn->email_label), TRUE); | |
| 296 gtk_box_pack_start(GTK_BOX(vbox), mn->email_label, FALSE, TRUE, 5); | |
| 297 | |
| 298 hbox = gtk_hbox_new(FALSE, 5); | |
| 299 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
| 300 | |
| 301 if (url) { | |
| 302 mn->url = g_strdup(url); | |
| 303 urlbut = gaim_pixbuf_button_from_stock(_("Open Mail"), GTK_STOCK_JUMP_TO, GAIM_BUTTON_HORIZONTAL); | |
| 304 gtk_box_pack_end(GTK_BOX(hbox), urlbut, 0, 0, 5); | |
| 305 g_signal_connect(G_OBJECT(urlbut), "clicked", | |
| 306 G_CALLBACK(open_url), mn->url); | |
| 307 g_signal_connect(G_OBJECT(urlbut), "clicked", | |
| 308 G_CALLBACK(des_email_win), mn); | |
| 309 } | |
| 310 | |
| 311 close = gaim_pixbuf_button_from_stock(_("Close"), GTK_STOCK_CLOSE, GAIM_BUTTON_HORIZONTAL); | |
| 312 gtk_window_set_focus(GTK_WINDOW(mn->email_win), close); | |
| 313 gtk_box_pack_end(GTK_BOX(hbox), close, 0, 0, 5); | |
| 314 g_signal_connect(G_OBJECT(close), "clicked", | |
| 315 G_CALLBACK(des_email_win), mn); | |
| 316 | |
| 317 gtk_widget_show_all(mn->email_win); | |
| 318 } | 206 } |
| 319 | 207 |
| 320 struct icon_data { | 208 struct icon_data { |
| 321 struct gaim_connection *gc; | 209 struct gaim_connection *gc; |
| 322 char *who; | 210 char *who; |
