pidgin/pidginstock.c

branch
vv
changeset 26167
8f14e4edae9c
parent 26128
a989b1f827a0
parent 24696
33d0b1c4806a
child 26171
85b43bce42f1
equal deleted inserted replaced
26166:ad7d09fef256 26167:8f14e4edae9c
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;
414 source = gtk_icon_source_new(); 424 source = gtk_icon_source_new();
415 gtk_icon_source_set_filename(source, filename); 425 gtk_icon_source_set_filename(source, filename);
416 gtk_icon_source_set_direction_wildcarded(source, TRUE); 426 gtk_icon_source_set_direction_wildcarded(source, TRUE);
417 gtk_icon_source_set_size_wildcarded(source, TRUE); 427 gtk_icon_source_set_size_wildcarded(source, TRUE);
418 gtk_icon_source_set_state_wildcarded(source, TRUE); 428 gtk_icon_source_set_state_wildcarded(source, TRUE);
419
420 429
421 iconset = gtk_icon_set_new(); 430 iconset = gtk_icon_set_new();
422 gtk_icon_set_add_source(iconset, source); 431 gtk_icon_set_add_source(iconset, source);
423 432
424 gtk_icon_source_free(source); 433 gtk_icon_source_free(source);

mercurial