static void set_window_icon() { fs_log("setting _NET_WM_ICON from icon images\n"); int max_size = (16 * 16 + 32 * 32 + 48 * 48 + 64 * 64 + 128 * 128) * \ sizeof(unsigned long); // add space for width, height cardinals max_size += 2 * 5 * sizeof(unsigned long); unsigned long *icon_data = (unsigned long *) g_malloc(max_size); unsigned long *op = icon_data; int card_count = 0; int sizes[] = {128, 64, 48, 32, 16, 0}; for(int *size = sizes; *size; size++) { char *rel = g_strdup_printf("icons/hicolor/%dx%d/apps/fs-uae.png", *size, *size); char *path = fs_get_data_file(rel); g_free(rel); if (!path) { fs_log("did not find icon for %dx%d\n", *size, *size); continue; } fs_image *image = fs_image_new_from_file(path); if (!image) { fs_log("could not load icon from %s\n", path); continue; } g_free(path); //printf("%d\n", image->width); int pixel_count = image->width * image->height; unsigned char *p = image->data; *op++ = image->width; *op++ = image->height; for (int i = 0; i < pixel_count; i++) { //*op = 0xffff0000; *op = (((unsigned long) p[3]) << 24) | (p[0] << 16) | (p[1] << 8) | p[2]; p += 4; op++; } card_count += 2 + pixel_count; fs_unref(image); // FIXME } Atom _NET_WM_ICON = XInternAtom(g_display, "_NET_WM_ICON", False); XChangeProperty(g_display, g_window, _NET_WM_ICON, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) icon_data, card_count); g_free(icon_data); }
static void init_i18n() { if (fs_config_get_boolean("localization") == 0) { fs_log("localization was forced off\n"); return; } char *locale = setlocale(LC_MESSAGES, ""); if (locale) { fs_log("locale is set to %s\n", locale); } else { fs_log("failed to set current locale\n"); } const char *language = fs_config_get_const_string("language"); if (language) { fs_log("setting LANGUAGE=%s\n", language); char *env_str = g_strdup_printf("LANGUAGE=%s", language); #ifdef WINDOWS _putenv(env_str); #else putenv(env_str); #endif // don't free env_str, it's put directly in the environment } #ifndef ANDROID textdomain("fs-uae"); char *path = fs_get_data_file("fs-uae/share-dir"); if (path) { fs_log("using data dir \"%s\"\n", path); // remove "fs-uae/share-dir" from the returned path int len = strlen(path); if (len > 16) { path[len - 16] = '\0'; } char *locale_base = g_build_filename(path, "locale", NULL); fs_log("using locale dir \"%s\"\n", locale_base); bindtextdomain("fs-uae", locale_base); free(locale_base); free(path); } bind_textdomain_codeset("fs-uae", "UTF-8"); #endif }