static void skinlist_add(const gchar * filename) { SkinNode *node; gchar *basename; g_return_if_fail(filename != NULL); node = g_slice_new0(SkinNode); node->path = g_strdup(filename); basename = g_path_get_basename(filename); if (file_is_archive(filename)) { node->name = archive_basename(basename); node->desc = _("Archived Winamp 2.x skin"); g_free(basename); } else { node->name = basename; node->desc = _("Unarchived Winamp 2.x skin"); } skinlist = g_list_prepend(skinlist, node); }
static gboolean scan_skindir_func(const gchar * path, const gchar * basename, gpointer data) { if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) { if (file_is_archive(path)) { skinlist_add(path); } } else if (g_file_test(path, G_FILE_TEST_IS_DIR)) { skinlist_add(path); } return FALSE; }
static GdkPixbuf * skin_get_preview(const gchar * path) { GdkPixbuf *preview = NULL; gchar *dec_path, *preview_path; gboolean is_archive = FALSE; gint i = 0; gchar buf[60]; /* gives us lots of room */ if (file_is_archive(path)) { if (!(dec_path = archive_decompress(path))) return NULL; is_archive = TRUE; } else { dec_path = g_strdup(path); } for (i = 0; i < EXTENSION_TARGETS; i++) { sprintf(buf, "main.%s", ext_targets[i]); if ((preview_path = find_file_case_path (dec_path, buf)) != NULL) break; } if (preview_path) { preview = gdk_pixbuf_new_from_file(preview_path, NULL); g_free(preview_path); } if (is_archive) del_directory(dec_path); g_free(dec_path); return preview; }
void on_skin_view_drag_data_received(GtkWidget * widget, GdkDragContext * context, gint x, gint y, GtkSelectionData * selection_data, guint info, guint time, gpointer user_data) { const gchar * data = (const gchar *) gtk_selection_data_get_data (selection_data); g_return_if_fail (data); const gchar * end = strchr (data, '\r'); if (! end) end = strchr (data, '\n'); if (! end) end = data + strlen (data); gchar * path = g_strndup (data, end - data); if (strstr (path, "://")) { gchar * path2 = uri_to_filename (path); if (path2) { g_free (path); path = path2; } } if (file_is_archive(path)) { if (! active_skin_load (path)) return; skin_install_skin(path); if (skin_view) skin_view_update ((GtkTreeView *) skin_view); } }