src/gtknotify.c

Sun, 25 May 2003 13:41:02 +0000

author
Nathan Walp <nwalp@pidgin.im>
date
Sun, 25 May 2003 13:41:02 +0000
changeset 5511
0b53e12e845e
parent 5476
6f863ea68018
child 5519
5ac50d7f3689
permissions
-rw-r--r--

[gaim-migrate @ 5910]
I think this is better

5437
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file gtknotify.c GTK+ Notification API
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 * @ingroup gtkui
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 * gaim
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * (at your option) any later version.
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * GNU General Public License for more details.
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 */
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 #include "gtknotify.h"
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 #include "stock.h"
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 #include <gtk/gtk.h>
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
26
5476
6f863ea68018 [gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents: 5437
diff changeset
27 static void *gaim_gtk_notify_emails(size_t count, const char **subjects,
6f863ea68018 [gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents: 5437
diff changeset
28 const char **froms, const char **tos,
6f863ea68018 [gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents: 5437
diff changeset
29 const char **urls, GCallback cb,
6f863ea68018 [gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents: 5437
diff changeset
30 void *user_data);
6f863ea68018 [gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents: 5437
diff changeset
31
5437
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
32 static void *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33 gaim_gtk_notify_message(GaimNotifyMsgType type, const char *title,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 const char *primary, const char *secondary,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 GCallback cb, void *user_data)
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37 GtkWidget *dialog;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38 GtkWidget *hbox;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 GtkWidget *label;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 GtkWidget *img = NULL;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41 char label_text[2048];
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 const char *icon_name = NULL;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 switch (type) {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
45 case GAIM_NOTIFY_MSG_ERROR:
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46 icon_name = GAIM_STOCK_DIALOG_ERROR;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 break;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 case GAIM_NOTIFY_MSG_WARNING:
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 icon_name = GAIM_STOCK_DIALOG_WARNING;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 break;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53 case GAIM_NOTIFY_MSG_INFO:
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54 icon_name = GAIM_STOCK_DIALOG_INFO;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 break;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 default:
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58 icon_name = NULL;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 break;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60 }
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
61
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62 if (icon_name != NULL) {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63 img = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_DIALOG);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 }
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 dialog = gtk_dialog_new_with_buttons("", NULL, 0,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69 NULL);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70 g_signal_connect(G_OBJECT(dialog), "response",
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 G_CALLBACK(gtk_widget_destroy), NULL);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), 12);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
77 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 6);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
79 hbox = gtk_hbox_new(FALSE, 12);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
80 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82 if (img != NULL)
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 g_snprintf(label_text, sizeof(label_text),
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86 "<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
87 primary, (secondary ? secondary : ""));
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89 label = gtk_label_new(NULL);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91 gtk_label_set_markup(GTK_LABEL(label), label_text);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96 gtk_widget_show_all(dialog);
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98 return dialog;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 }
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101 static void *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102 gaim_gtk_notify_email(const char *subject, const char *from,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103 const char *to, const char *url,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104 GCallback cb, void *user_data)
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
105 {
5476
6f863ea68018 [gaim-migrate @ 5872]
Christian Hammond <chipx86@chipx86.com>
parents: 5437
diff changeset
106 return gaim_gtk_notify_emails(1, &subject, &from, &to, &url, cb, user_data);
5437
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
107 }
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
108
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
109 static void *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110 gaim_gtk_notify_emails(size_t count, const char **subjects,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111 const char **froms, const char **tos,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
112 const char **urls, GCallback cb, void *user_data)
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113 {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
114 return NULL;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
115 }
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
116
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
117 static void
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
118 gaim_gtk_close_notify(GaimNotifyType type, void *ptr)
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
119 {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
120 gtk_widget_destroy(GTK_WIDGET(ptr));
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121 }
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
122
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123 static GaimNotifyUiOps ops =
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
124 {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
125 gaim_gtk_notify_message,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
126 gaim_gtk_notify_email,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
127 gaim_gtk_notify_emails,
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
128 gaim_gtk_close_notify
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
129 };
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
130
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
131 GaimNotifyUiOps *
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
132 gaim_get_gtk_notify_ui_ops(void)
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
133 {
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
134 return &ops;
4bd5c5d271e6 [gaim-migrate @ 5819]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
135 }

mercurial