Mercurial > pidgin.yaz
annotate src/gtkstock.c @ 12278:25d7ef365dbf
[gaim-migrate @ 14582]
sf patch #1370473, from Sadrul Habib Chowdhury
"This patch fixes the idle time tracking for systems
that don't use xscreensaver."
Seems like it would just get rid of some warnings? But
whatever, definitely an improvement
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 01 Dec 2005 01:01:26 +0000 |
parents | e0b512d67792 |
children | 3169cd6727ad |
rev | line source |
---|---|
10297 | 1 /** |
2 * @file gtkstock.c GTK+ Stock resources | |
3 * @ingroup gtkui | |
4 * | |
5 * gaim | |
6 * | |
7 * Gaim is the legal property of its developers, whose names are too numerous | |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 * | |
25 */ | |
26 #include "internal.h" | |
27 #include "gtkgaim.h" | |
28 | |
29 #include "gtkstock.h" | |
30 | |
31 static struct StockIcon | |
32 { | |
33 const char *name; | |
34 const char *dir; | |
35 const char *filename; | |
36 | |
37 } const stock_icons[] = | |
38 { | |
39 { GAIM_STOCK_ABOUT, "buttons", "about_menu.png" }, | |
40 { GAIM_STOCK_ACCOUNTS, "buttons", "accounts.png" }, | |
12191
bc2b9f925979
[gaim-migrate @ 14493]
Richard Laager <rlaager@wiktel.com>
parents:
12170
diff
changeset
|
41 { GAIM_STOCK_ACTION, NULL, GTK_STOCK_EXECUTE }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
42 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
43 { GAIM_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
44 #else |
10297 | 45 { GAIM_STOCK_ALIAS, "buttons", "edit.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
46 #endif |
10297 | 47 { GAIM_STOCK_BGCOLOR, "buttons", "change-bgcolor-small.png" }, |
48 { GAIM_STOCK_BLOCK, NULL, GTK_STOCK_STOP }, | |
49 { GAIM_STOCK_CHAT, NULL, GTK_STOCK_JUMP_TO }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
50 { GAIM_STOCK_CLEAR, NULL, GTK_STOCK_CLEAR }, |
12163
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
51 #if GTK_CHECK_VERSION(2,6,0) |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
52 { GAIM_STOCK_CONNECT, NULL, GTK_STOCK_CONNECT }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
53 #else |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
54 { GAIM_STOCK_CONNECT, "icons", "stock_connect_16.png" }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
55 #endif |
12191
bc2b9f925979
[gaim-migrate @ 14493]
Richard Laager <rlaager@wiktel.com>
parents:
12170
diff
changeset
|
56 { GAIM_STOCK_DEBUG, NULL, GTK_STOCK_PROPERTIES }, |
10297 | 57 { GAIM_STOCK_DOWNLOAD, NULL, GTK_STOCK_GO_DOWN }, |
58 { GAIM_STOCK_DIALOG_AUTH, "dialogs", "gaim_auth.png" }, | |
59 { GAIM_STOCK_DIALOG_COOL, "dialogs", "gaim_cool.png" }, | |
60 { GAIM_STOCK_DIALOG_ERROR, "dialogs", "gaim_error.png" }, | |
61 { GAIM_STOCK_DIALOG_INFO, "dialogs", "gaim_info.png" }, | |
62 { GAIM_STOCK_DIALOG_QUESTION, "dialogs", "gaim_question.png" }, | |
63 { GAIM_STOCK_DIALOG_WARNING, "dialogs", "gaim_warning.png" }, | |
12163
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
64 #if GTK_CHECK_VERSION(2,6,0) |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
65 { GAIM_STOCK_DISCONNECT, NULL, GTK_STOCK_DISCONNECT }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
66 #else |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
67 { GAIM_STOCK_DISCONNECT, "icons", "stock_disconnect_16.png" }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
68 #endif |
10297 | 69 { GAIM_STOCK_FGCOLOR, "buttons", "change-fgcolor-small.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
70 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
71 { GAIM_STOCK_EDIT, NULL, GTK_STOCK_EDIT }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
72 #else |
10297 | 73 { GAIM_STOCK_EDIT, "buttons", "edit.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
74 #endif |
10297 | 75 { GAIM_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, |
76 { GAIM_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, | |
77 { GAIM_STOCK_FILE_TRANSFER, NULL, GTK_STOCK_REVERT_TO_SAVED }, | |
78 { GAIM_STOCK_ICON_AWAY, "icons", "away.png" }, | |
79 { GAIM_STOCK_ICON_AWAY_MSG, "icons", "msgpend.png" }, | |
80 { GAIM_STOCK_ICON_CONNECT, "icons", "connect.png" }, | |
81 { GAIM_STOCK_ICON_OFFLINE, "icons", "offline.png" }, | |
82 { GAIM_STOCK_ICON_ONLINE, "icons", "online.png" }, | |
83 { GAIM_STOCK_ICON_ONLINE_MSG, "icons", "msgunread.png" }, | |
84 { GAIM_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, | |
11271
b33eccbc3a10
[gaim-migrate @ 13454]
Richard Laager <rlaager@wiktel.com>
parents:
10871
diff
changeset
|
85 { GAIM_STOCK_IM, "buttons", "send-im.png" }, |
10297 | 86 { GAIM_STOCK_IMAGE, "buttons", "insert-image-small.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
87 #if GTK_CHECK_VERSION(2,8,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
88 { GAIM_STOCK_INFO, NULL, GTK_STOCK_INFO }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
89 #else |
12255
e0b512d67792
[gaim-migrate @ 14557]
Richard Laager <rlaager@wiktel.com>
parents:
12191
diff
changeset
|
90 { GAIM_STOCK_INFO, "buttons", "info.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
91 #endif |
10297 | 92 { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, |
93 { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, | |
12191
bc2b9f925979
[gaim-migrate @ 14493]
Richard Laager <rlaager@wiktel.com>
parents:
12170
diff
changeset
|
94 { GAIM_STOCK_LOG, NULL, GTK_STOCK_DND_MULTIPLE }, |
10297 | 95 { GAIM_STOCK_LOGO, "gaim", "logo.png" }, |
96 { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
97 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
98 { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
99 #else |
10297 | 100 { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
101 #endif |
12170
51c194ca6016
[gaim-migrate @ 14471]
Richard Laager <rlaager@wiktel.com>
parents:
12163
diff
changeset
|
102 { GAIM_STOCK_PENDING, "buttons", "send-im.png" }, |
12163
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
103 #if GTK_CHECK_VERSION(2,6,0) |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
104 { GAIM_STOCK_PLUGIN, NULL, GTK_STOCK_DISCONNECT }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
105 #else |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
106 { GAIM_STOCK_PLUGIN, "icons", "stock_disconnect_16.png" }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
107 #endif |
12191
bc2b9f925979
[gaim-migrate @ 14493]
Richard Laager <rlaager@wiktel.com>
parents:
12170
diff
changeset
|
108 { GAIM_STOCK_POUNCE, NULL, GTK_STOCK_REDO }, |
10297 | 109 { GAIM_STOCK_OPEN_MAIL, NULL, GTK_STOCK_JUMP_TO }, |
110 { GAIM_STOCK_SEND, "buttons", "send-im.png" }, | |
111 { GAIM_STOCK_SIGN_ON, NULL, GTK_STOCK_EXECUTE }, | |
112 { GAIM_STOCK_SIGN_OFF, NULL, GTK_STOCK_CLOSE }, | |
113 { GAIM_STOCK_SMILEY, "buttons", "insert-smiley-small.png" }, | |
114 { GAIM_STOCK_TEXT_BIGGER, "buttons", "text_bigger.png" }, | |
115 { GAIM_STOCK_TEXT_NORMAL, "buttons", "text_normal.png" }, | |
116 { GAIM_STOCK_TEXT_SMALLER, "buttons", "text_smaller.png" }, | |
117 { GAIM_STOCK_TYPED, "gaim", "typed.png" }, | |
118 { GAIM_STOCK_TYPING, "gaim", "typing.png" }, | |
12024 | 119 { GAIM_STOCK_VOICE_CHAT, "gaim", "phone.png" }, |
10643 | 120 { GAIM_STOCK_STATUS_ONLINE, "gaim", "status-online.png" }, |
121 { GAIM_STOCK_STATUS_OFFLINE, "gaim", "status-offline.png" }, | |
122 { GAIM_STOCK_STATUS_AWAY, "gaim", "status-away.png" }, | |
123 { GAIM_STOCK_STATUS_INVISIBLE,"gaim", "status-invisible.png" }, | |
124 { GAIM_STOCK_STATUS_TYPING0, "gaim", "status-typing0.png" }, | |
125 { GAIM_STOCK_STATUS_TYPING1, "gaim", "status-typing1.png" }, | |
126 { GAIM_STOCK_STATUS_TYPING2, "gaim", "status-typing2.png" }, | |
127 { GAIM_STOCK_STATUS_TYPING3, "gaim", "status-typing3.png" }, | |
128 { GAIM_STOCK_STATUS_CONNECT0, "gaim", "status-connect0.png" }, | |
129 { GAIM_STOCK_STATUS_CONNECT1, "gaim", "status-connect1.png" }, | |
130 { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, | |
131 { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, | |
10297 | 132 { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP }, |
133 { GAIM_STOCK_WARN, NULL, GTK_STOCK_DIALOG_WARNING } | |
134 }; | |
135 | |
10871 | 136 static const GtkStockItem stock_items[] = |
10297 | 137 { |
138 { GAIM_STOCK_ALIAS, N_("_Alias"), 0, 0, NULL }, | |
139 { GAIM_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, | |
140 { GAIM_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, | |
141 { GAIM_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, | |
142 { GAIM_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, | |
143 { GAIM_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, | |
144 { GAIM_STOCK_WARN, N_("_Warn"), 0, 0, NULL } | |
145 }; | |
146 | |
147 static gchar * | |
148 find_file(const char *dir, const char *base) | |
149 { | |
150 char *filename; | |
151 | |
152 if (base == NULL) | |
153 return NULL; | |
154 | |
155 if (!strcmp(dir, "gaim")) | |
156 filename = g_build_filename(DATADIR, "pixmaps", "gaim", base, NULL); | |
157 else | |
158 { | |
159 filename = g_build_filename(DATADIR, "pixmaps", "gaim", dir, | |
160 base, NULL); | |
161 } | |
162 | |
163 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) | |
164 { | |
165 g_critical("Unable to load stock pixmap %s\n", base); | |
166 | |
167 g_free(filename); | |
168 | |
169 return NULL; | |
170 } | |
171 | |
172 return filename; | |
173 } | |
174 | |
175 static void | |
176 gaim_gtk_stock_versionize(GdkPixbuf **original, GtkWidget *widget) { | |
177 GdkPixmap *pixmap; | |
178 GtkStyle *style; | |
179 PangoContext *context; | |
180 PangoLayout *layout; | |
181 gchar *markup; | |
182 gint width, height; | |
183 gint lwidth = 0, lheight = 0; | |
184 | |
185 style = gtk_widget_get_style(widget); | |
186 | |
187 gdk_pixbuf_render_pixmap_and_mask(*original, &pixmap, NULL, 255); | |
188 width = gdk_pixbuf_get_width(*original); | |
189 height = gdk_pixbuf_get_height(*original); | |
190 g_object_unref(G_OBJECT(*original)); | |
191 | |
192 context = gtk_widget_get_pango_context(widget); | |
193 layout = pango_layout_new(context); | |
194 | |
195 markup = g_strdup_printf("<span foreground=\"#FFFFFF\" size=\"larger\">%s</span>", VERSION); | |
196 pango_layout_set_font_description(layout, style->font_desc); | |
197 pango_layout_set_markup(layout, markup, strlen(markup)); | |
198 g_free(markup); | |
199 | |
200 pango_layout_get_pixel_size(layout, &lwidth, &lheight); | |
201 gdk_draw_layout(GDK_DRAWABLE(pixmap), style->bg_gc[GTK_STATE_NORMAL], | |
202 width - (lwidth + 3), height - (lheight + 1), layout); | |
203 g_object_unref(G_OBJECT(layout)); | |
204 | |
205 *original = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, | |
206 0, 0, 0, 0, | |
207 width, height); | |
208 g_object_unref(G_OBJECT(pixmap)); | |
209 } | |
210 | |
211 void | |
212 gaim_gtk_stock_init(void) | |
213 { | |
214 static gboolean stock_initted = FALSE; | |
215 GtkIconFactory *icon_factory; | |
12255
e0b512d67792
[gaim-migrate @ 14557]
Richard Laager <rlaager@wiktel.com>
parents:
12191
diff
changeset
|
216 size_t i; |
10297 | 217 GtkWidget *win; |
218 | |
219 if (stock_initted) | |
220 return; | |
221 | |
222 stock_initted = TRUE; | |
223 | |
224 /* Setup the icon factory. */ | |
225 icon_factory = gtk_icon_factory_new(); | |
226 | |
227 gtk_icon_factory_add_default(icon_factory); | |
228 | |
229 /* Er, yeah, a hack, but it works. :) */ | |
230 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
231 gtk_widget_realize(win); | |
232 | |
233 for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) | |
234 { | |
235 GdkPixbuf *pixbuf; | |
236 GtkIconSet *iconset; | |
237 gchar *filename; | |
238 | |
239 if (stock_icons[i].dir == NULL) | |
240 { | |
241 /* GTK+ Stock icon */ | |
242 iconset = gtk_style_lookup_icon_set(gtk_widget_get_style(win), | |
243 stock_icons[i].filename); | |
244 } | |
245 else | |
246 { | |
247 filename = find_file(stock_icons[i].dir, stock_icons[i].filename); | |
248 | |
249 if (filename == NULL) | |
250 continue; | |
251 | |
252 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | |
253 | |
254 g_free(filename); | |
255 | |
256 if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) | |
257 gaim_gtk_stock_versionize(&pixbuf, win); | |
258 | |
259 iconset = gtk_icon_set_new_from_pixbuf(pixbuf); | |
260 | |
261 g_object_unref(G_OBJECT(pixbuf)); | |
262 } | |
263 | |
264 gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); | |
265 | |
266 gtk_icon_set_unref(iconset); | |
267 } | |
268 | |
269 gtk_widget_destroy(win); | |
270 | |
271 /* register custom icon sizes */ | |
272 gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); | |
273 gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); | |
10643 | 274 gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); |
10297 | 275 |
276 g_object_unref(G_OBJECT(icon_factory)); | |
277 | |
278 /* Register the stock items. */ | |
279 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); | |
280 } |