void ghb_load_icons() { #if GTK_CHECK_VERSION(3, 14, 0) ghb_icons_register_resource(); gtk_icon_theme_add_resource_path(gtk_icon_theme_get_default(), "/fr/handbrake/ghb/icons"); #else ghb_icons_register_resource(); GResource *icon_res = ghb_icons_get_resource(); char ** children = g_resource_enumerate_children(icon_res, "/fr/handbrake/ghb/icons/scalable/apps", 0, NULL); if (children == NULL) { g_warning("No icons in resources!"); return; } int ii; for (ii = 0; children[ii] != NULL; ii++) { char * path; path = g_strdup_printf("/fr/handbrake/ghb/icons/scalable/apps/%s", children[ii]); GBytes *gbytes = g_resource_lookup_data(icon_res, path, 0, NULL); gsize data_size; gconstpointer data = g_bytes_get_data(gbytes, &data_size); g_free(path); char *pos; char *name = g_strdup(children[ii]); pos = g_strstr_len(name, -1, "."); if (pos != NULL) *pos = '\0'; int jj; int sizes[] = {16, 22, 24, 32, 48, 64, 128, 256, 0}; for (jj = 0; sizes[jj]; jj++) { GdkPixbuf *pb; GInputStream *gis; int size; gis = g_memory_input_stream_new_from_data(data, data_size, NULL); pb = gdk_pixbuf_new_from_stream_at_scale(gis, sizes[jj], sizes[jj], TRUE, NULL, NULL); g_input_stream_close(gis, NULL, NULL); size = gdk_pixbuf_get_height(pb); gtk_icon_theme_add_builtin_icon(name, size, pb); g_object_unref(pb); } g_bytes_unref(gbytes); } g_strfreev(children); #endif }
static void list_resource (GResource *resource, const gchar *path, const gchar *section, const gchar *prefix, gboolean details) { gchar **children; gsize size; guint32 flags; gint i; gchar *child; GError *error = NULL; gint len; children = g_resource_enumerate_children (resource, path, 0, &error); if (error) { g_printerr ("%s\n", error->message); g_error_free (error); return; } for (i = 0; children[i]; i++) { child = g_strconcat (path, children[i], NULL); len = MIN (strlen (child), strlen (prefix)); if (strncmp (child, prefix, len) != 0) { g_free (child); continue; } if (g_resource_get_info (resource, child, 0, &size, &flags, NULL)) { if (details) g_print ("%s%s%6"G_GSIZE_FORMAT " %s %s\n", section, section[0] ? " " : "", size, flags & G_RESOURCE_FLAGS_COMPRESSED ? "c" : "u", child); else g_print ("%s\n", child); } else list_resource (resource, child, section, prefix, details); g_free (child); } g_strfreev (children); }
/** \brief Intialize the GResource binary blob handling * * First tries to load from src/arch/gtk3/data and then from VICEDIR/data. * Loading from VICEDIR/data will fail, the vice.gresource file doesn't get * copied there yet with a make install, nor does the VICEDIR/data dir exist. * * \return bool */ int uidata_init(void) { GError *err = NULL; #ifdef HAVE_DEBUG_GTK3UI char **files; int i; #endif char *path; char *dir; /* try directory with VICE's data files */ dir = archdep_get_vice_datadir(); debug_gtk3("trying archdep_get_vice_datadir() (%s).", dir); path = archdep_join_paths(dir, "vice.gresource", NULL); lib_free(dir); gresource = g_resource_load(path, &err); if (gresource == NULL && err != NULL) { debug_gtk3("failed to load resource data '%s': %s.", path, err->message); g_clear_error(&err); lib_free(path); return 0; } lib_free(path); g_resources_register(gresource); /* debugging: show files in the resource blob */ #ifdef HAVE_DEBUG_GTK3UI files = g_resource_enumerate_children( gresource, UIDATA_ROOT_PATH, G_RESOURCE_LOOKUP_FLAGS_NONE, &err); if (files == NULL && err != NULL) { debug_gtk3("couldn't enumerate children: %s.", err->message); g_clear_error(&err); return 0; } debug_gtk3("Listing files in the GResource file:"); for (i = 0; files[i] != NULL; i++) { debug_gtk3("%d: %s.", i, files[i]); } #endif return 1; }