| 62 { PIDGIN_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, |
62 { PIDGIN_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, |
| 63 { PIDGIN_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, |
63 { PIDGIN_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, |
| 64 { PIDGIN_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, |
64 { PIDGIN_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, |
| 65 { PIDGIN_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, |
65 { PIDGIN_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, |
| 66 { PIDGIN_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, |
66 { PIDGIN_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, |
| |
67 { PIDGIN_STOCK_ADD, NULL, GTK_STOCK_ADD }, |
| 67 #if GTK_CHECK_VERSION(2,6,0) |
68 #if GTK_CHECK_VERSION(2,6,0) |
| 68 { PIDGIN_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, |
69 { PIDGIN_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, |
| 69 #else |
70 #else |
| 70 { PIDGIN_STOCK_PAUSE, "buttons", "pause.png" }, |
71 { PIDGIN_STOCK_PAUSE, "buttons", "pause.png" }, |
| 71 #endif |
72 #endif |
| 88 { PIDGIN_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, |
89 { PIDGIN_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, |
| 89 { PIDGIN_STOCK_CLOSE_TABS, N_("Close _tabs"), 0, 0, NULL }, |
90 { PIDGIN_STOCK_CLOSE_TABS, N_("Close _tabs"), 0, 0, NULL }, |
| 90 { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, N_("I_M"), 0, 0, NULL }, |
91 { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, N_("I_M"), 0, 0, NULL }, |
| 91 { PIDGIN_STOCK_TOOLBAR_USER_INFO, N_("_Get Info"), 0, 0, NULL }, |
92 { PIDGIN_STOCK_TOOLBAR_USER_INFO, N_("_Get Info"), 0, 0, NULL }, |
| 92 { PIDGIN_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, |
93 { PIDGIN_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, |
| 93 { PIDGIN_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, |
94 { PIDGIN_STOCK_MODIFY, N_("_Modify..."), 0, 0, NULL }, |
| |
95 { PIDGIN_STOCK_ADD, N_("_Add..."), 0, 0, NULL }, |
| 94 { PIDGIN_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, |
96 { PIDGIN_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, |
| 95 { PIDGIN_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, |
97 { PIDGIN_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, |
| 96 { PIDGIN_STOCK_EDIT, N_("_Edit"), 0, 0, NULL } |
98 { PIDGIN_STOCK_EDIT, N_("_Edit"), 0, 0, NULL } |
| 97 }; |
99 }; |
| 98 |
100 |
| 208 { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
210 { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| 209 { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
211 { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| 210 { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } |
212 { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } |
| 211 }; |
213 }; |
| 212 |
214 |
| |
215 static void |
| |
216 add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
| |
217 gboolean rtl, const char *size, const char *file, |
| |
218 gboolean translucent); |
| |
219 |
| |
220 static gchar * |
| |
221 find_file_common(const char *name) |
| |
222 { |
| |
223 gchar *filename; |
| |
224 #if GLIB_CHECK_VERSION(2,6,0) |
| |
225 const gchar *userdir; |
| |
226 const gchar * const *sysdirs; |
| |
227 |
| |
228 userdir = g_get_user_data_dir(); |
| |
229 filename = g_build_filename(userdir, name, NULL); |
| |
230 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
| |
231 return filename; |
| |
232 g_free(filename); |
| |
233 |
| |
234 sysdirs = g_get_system_data_dirs(); |
| |
235 for (; *sysdirs; sysdirs++) { |
| |
236 filename = g_build_filename(*sysdirs, name, NULL); |
| |
237 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
| |
238 return filename; |
| |
239 g_free(filename); |
| |
240 } |
| |
241 #endif |
| |
242 filename = g_build_filename(DATADIR, name, NULL); |
| |
243 if (g_file_test(filename, G_FILE_TEST_EXISTS)) |
| |
244 return filename; |
| |
245 g_free(filename); |
| |
246 return NULL; |
| |
247 } |
| |
248 |
| 213 static gchar * |
249 static gchar * |
| 214 find_file(const char *dir, const char *base) |
250 find_file(const char *dir, const char *base) |
| 215 { |
251 { |
| 216 char *filename; |
252 char *filename; |
| |
253 char *ret; |
| 217 |
254 |
| 218 if (base == NULL) |
255 if (base == NULL) |
| 219 return NULL; |
256 return NULL; |
| 220 |
257 |
| 221 if (!strcmp(dir, "pidgin")) |
258 if (!strcmp(dir, "pidgin")) |
| 222 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", base, NULL); |
259 filename = g_build_filename("pixmaps", "pidgin", base, NULL); |
| 223 else |
260 else |
| 224 { |
261 filename = g_build_filename("pixmaps", "pidgin", dir, base, NULL); |
| 225 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, |
262 |
| 226 base, NULL); |
263 ret = find_file_common(filename); |
| 227 } |
264 g_free(filename); |
| 228 |
265 return ret; |
| 229 return filename; |
|
| 230 } |
266 } |
| 231 |
267 |
| 232 static void |
268 static void |
| 233 add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
269 add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
| 234 gboolean rtl, const char *size, const char *file) |
270 gboolean rtl, const char *size, const char *file) |
| 235 { |
271 { |
| 236 char *filename; |
272 add_sized_icon_common(iconset, sizeid, dir, rtl, size, file, FALSE); |
| 237 GtkIconSource *source; |
|
| 238 |
|
| 239 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL); |
|
| 240 source = gtk_icon_source_new(); |
|
| 241 gtk_icon_source_set_filename(source, filename); |
|
| 242 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); |
|
| 243 gtk_icon_source_set_direction_wildcarded(source, !rtl); |
|
| 244 gtk_icon_source_set_size(source, sizeid); |
|
| 245 gtk_icon_source_set_size_wildcarded(source, FALSE); |
|
| 246 gtk_icon_source_set_state_wildcarded(source, TRUE); |
|
| 247 gtk_icon_set_add_source(iconset, source); |
|
| 248 gtk_icon_source_free(source); |
|
| 249 |
|
| 250 if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { |
|
| 251 source = gtk_icon_source_new(); |
|
| 252 gtk_icon_source_set_filename(source, filename); |
|
| 253 gtk_icon_source_set_direction_wildcarded(source, TRUE); |
|
| 254 gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); |
|
| 255 gtk_icon_source_set_size_wildcarded(source, FALSE); |
|
| 256 gtk_icon_source_set_state_wildcarded(source, TRUE); |
|
| 257 gtk_icon_set_add_source(iconset, source); |
|
| 258 gtk_icon_source_free(source); |
|
| 259 } |
|
| 260 g_free(filename); |
|
| 261 |
|
| 262 if (rtl) { |
|
| 263 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, "rtl", file, NULL); |
|
| 264 source = gtk_icon_source_new(); |
|
| 265 gtk_icon_source_set_filename(source, filename); |
|
| 266 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); |
|
| 267 gtk_icon_source_set_size(source, sizeid); |
|
| 268 gtk_icon_source_set_size_wildcarded(source, FALSE); |
|
| 269 gtk_icon_source_set_state_wildcarded(source, TRUE); |
|
| 270 gtk_icon_set_add_source(iconset, source); |
|
| 271 g_free(filename); |
|
| 272 gtk_icon_source_free(source); |
|
| 273 } |
|
| 274 |
|
| 275 |
|
| 276 } |
273 } |
| 277 |
274 |
| 278 /* Altered from do_colorshift in gnome-panel */ |
275 /* Altered from do_colorshift in gnome-panel */ |
| 279 static void |
276 static void |
| 280 do_alphashift (GdkPixbuf *dest, GdkPixbuf *src) |
277 do_alphashift (GdkPixbuf *dest, GdkPixbuf *src) |
| 309 *(pixdest++) = a / 2; |
306 *(pixdest++) = a / 2; |
| 310 } |
307 } |
| 311 } |
308 } |
| 312 } |
309 } |
| 313 |
310 |
| 314 /* TODO: This is almost certainly not the best way to do this, but it's late, I'm tired, |
|
| 315 * we're a few hours from getting this thing out, and copy/paste is EASY. |
|
| 316 */ |
|
| 317 static void |
311 static void |
| 318 add_translucent_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
312 add_translucent_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
| 319 gboolean rtl, const char *size, const char *file) |
313 gboolean rtl, const char *size, const char *file) |
| 320 { |
314 { |
| 321 char *filename; |
315 add_sized_icon_common(iconset, sizeid, dir, rtl, size, file, TRUE); |
| 322 GtkIconSource *source; |
316 } |
| |
317 |
| |
318 static void |
| |
319 add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
| |
320 gboolean rtl, const char *size, const char *file, |
| |
321 gboolean translucent) |
| |
322 { |
| |
323 char *filename, *subpath; |
| |
324 GtkIconSource *source; |
| 323 GdkPixbuf *pixbuf; |
325 GdkPixbuf *pixbuf; |
| 324 |
326 |
| 325 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL); |
327 subpath = g_build_filename("pixmaps", "pidgin", dir, size, file, NULL); |
| |
328 filename = find_file_common(subpath); |
| |
329 g_free(subpath); |
| |
330 if (!filename) |
| |
331 return; |
| |
332 |
| 326 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
333 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
| 327 do_alphashift(pixbuf, pixbuf); |
334 if (translucent) |
| |
335 do_alphashift(pixbuf, pixbuf); |
| 328 |
336 |
| 329 source = gtk_icon_source_new(); |
337 source = gtk_icon_source_new(); |
| 330 gtk_icon_source_set_pixbuf(source, pixbuf); |
338 gtk_icon_source_set_pixbuf(source, pixbuf); |
| 331 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); |
339 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); |
| 332 gtk_icon_source_set_direction_wildcarded(source, !rtl); |
340 gtk_icon_source_set_direction_wildcarded(source, !rtl); |
| 333 gtk_icon_source_set_size(source, sizeid); |
341 gtk_icon_source_set_size(source, sizeid); |
| 334 gtk_icon_source_set_size_wildcarded(source, FALSE); |
342 gtk_icon_source_set_size_wildcarded(source, FALSE); |
| 335 gtk_icon_source_set_state_wildcarded(source, TRUE); |
343 gtk_icon_source_set_state_wildcarded(source, TRUE); |
| 336 gtk_icon_set_add_source(iconset, source); |
344 gtk_icon_set_add_source(iconset, source); |
| 337 gtk_icon_source_free(source); |
345 gtk_icon_source_free(source); |
| 338 |
346 |
| 339 if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { |
347 if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { |
| 340 source = gtk_icon_source_new(); |
348 source = gtk_icon_source_new(); |
| 341 gtk_icon_source_set_pixbuf(source, pixbuf); |
349 gtk_icon_source_set_pixbuf(source, pixbuf); |
| 342 gtk_icon_source_set_direction_wildcarded(source, TRUE); |
350 gtk_icon_source_set_direction_wildcarded(source, TRUE); |
| 343 gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); |
351 gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); |
| 344 gtk_icon_source_set_size_wildcarded(source, FALSE); |
352 gtk_icon_source_set_size_wildcarded(source, FALSE); |
| 345 gtk_icon_source_set_state_wildcarded(source, TRUE); |
353 gtk_icon_source_set_state_wildcarded(source, TRUE); |
| 346 gtk_icon_set_add_source(iconset, source); |
354 gtk_icon_set_add_source(iconset, source); |
| 347 gtk_icon_source_free(source); |
355 gtk_icon_source_free(source); |
| 348 } |
356 } |
| 349 g_free(filename); |
357 g_free(filename); |
| 350 g_object_unref(pixbuf); |
358 g_object_unref(pixbuf); |
| 351 |
359 |
| 352 if (rtl) { |
360 if (rtl) { |
| 353 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, "rtl", file, NULL); |
361 subpath = g_build_filename("pixmaps", "pidgin", dir, size, "rtl", file, NULL); |
| 354 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
362 filename = find_file_common(subpath); |
| 355 do_alphashift(pixbuf, pixbuf); |
363 g_free(subpath); |
| |
364 if (!filename) |
| |
365 return; |
| |
366 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
| |
367 if (translucent) |
| |
368 do_alphashift(pixbuf, pixbuf); |
| 356 source = gtk_icon_source_new(); |
369 source = gtk_icon_source_new(); |
| 357 gtk_icon_source_set_pixbuf(source, pixbuf); |
370 gtk_icon_source_set_pixbuf(source, pixbuf); |
| 358 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); |
371 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); |
| 359 gtk_icon_source_set_size(source, sizeid); |
372 gtk_icon_source_set_size(source, sizeid); |
| 360 gtk_icon_source_set_size_wildcarded(source, FALSE); |
373 gtk_icon_source_set_size_wildcarded(source, FALSE); |
| 361 gtk_icon_source_set_state_wildcarded(source, TRUE); |
374 gtk_icon_source_set_state_wildcarded(source, TRUE); |
| 362 gtk_icon_set_add_source(iconset, source); |
375 gtk_icon_set_add_source(iconset, source); |
| 363 g_free(filename); |
376 g_free(filename); |
| 364 g_object_unref(pixbuf); |
377 g_object_unref(pixbuf); |
| 365 gtk_icon_source_free(source); |
378 gtk_icon_source_free(source); |
| 366 } |
379 } |
| 367 |
380 } |
| 368 |
|
| 369 } |
|
| 370 |
|
| 371 |
381 |
| 372 void |
382 void |
| 373 pidgin_stock_init(void) |
383 pidgin_stock_init(void) |
| 374 { |
384 { |
| 375 static gboolean stock_initted = FALSE; |
385 static gboolean stock_initted = FALSE; |