Mercurial > audlegacy
view src/audacious/ui_legacy.c @ 4790:7d2882c8a37a
You have to include an XPM if you want to use it.
Do you guys even test what you commit? Or even try to build it? This is
one that didn't even build, you to at least try to build it before
comitting!
author | Jonathan Schleifer <js-audacious@webkeks.org> |
---|---|
date | Thu, 02 Oct 2008 23:25:25 +0200 |
parents | 6584bba8de63 |
children |
line wrap: on
line source
/* Audacious - Cross-platform multimedia player * Copyright (C) 2005-2007 Audacious development team. * * Based on BMP: * Copyright (C) 2003-2004 BMP development team. * * Based on XMMS: * Copyright (C) 1998-2003 XMMS development team. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; under version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses>. * * The Audacious team does not consider modular code linking to * Audacious or using our public API to be a derived work. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "main.h" #include <glib.h> #include <glib/gi18n.h> #include <glib/gprintf.h> #include <gdk/gdk.h> #include <stdlib.h> #include <string.h> #include <getopt.h> #include <ctype.h> #include <time.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <signal.h> #ifdef USE_SAMPLERATE # include <samplerate.h> #endif #include "platform/smartinclude.h" #include "configdb.h" #include "vfs.h" #include "auddrct.h" #include "build_stamp.h" #include "dnd.h" #include "input.h" #include "logger.h" #include "output.h" #include "playback.h" #include "playlist.h" #include "pluginenum.h" #include "signals.h" #include "legacy/ui_skin.h" #include "legacy/ui_equalizer.h" #include "ui_fileinfo.h" #include "legacy/ui_hints.h" #include "legacy/ui_main.h" #include "legacy/ui_manager.h" #include "legacy/ui_playlist.h" #include "ui_preferences.h" #include "legacy/ui_skinselector.h" #include "util.h" #include "libSAD.h" #ifdef USE_EGGSM #include "eggsmclient.h" #include "eggdesktopfile.h" #endif #include "icons-stock.h" #include "ui_new.h" static void resume_playback_on_startup(void) { gint i; if (!cfg.resume_playback_on_startup || cfg.resume_playback_on_startup_time == -1 || playlist_get_length(playlist_get_active()) <= 0) return; while (gtk_events_pending()) gtk_main_iteration(); playback_initiate(); /* Busy wait; loop is fairly tight to minimize duration of * "frozen" GUI. Feel free to tune. --chainsaw */ for (i = 0; i < 20; i++) { g_usleep(1000); if (!ip_data.playing) break; } playback_seek(cfg.resume_playback_on_startup_time / 1000); } static void run_load_skin_error_dialog(const gchar * skin_path) { const gchar *markup = N_("<b><big>Unable to load skin.</big></b>\n" "\n" "Check that skin at '%s' is usable and default skin is properly " "installed at '%s'\n"); GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _(markup), skin_path, BMP_DEFAULT_SKIN_PATH); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } #ifdef GDK_WINDOWING_QUARTZ #include "images/audacious_player.xpm" static void set_dock_icon(void) { GdkPixbuf *icon, *pixbuf; CGColorSpaceRef colorspace; CGDataProviderRef data_provider; CGImageRef image; gpointer data; gint rowstride, pixbuf_width, pixbuf_height; gboolean has_alpha; icon = gdk_pixbuf_new_from_xpm_data((const gchar **) audacious_player_xpm); pixbuf = gdk_pixbuf_scale_simple(icon, 128, 128, GDK_INTERP_BILINEAR); data = gdk_pixbuf_get_pixels(pixbuf); pixbuf_width = gdk_pixbuf_get_width(pixbuf); pixbuf_height = gdk_pixbuf_get_height(pixbuf); rowstride = gdk_pixbuf_get_rowstride(pixbuf); has_alpha = gdk_pixbuf_get_has_alpha(pixbuf); /* create the colourspace for the CGImage. */ colorspace = CGColorSpaceCreateDeviceRGB(); data_provider = CGDataProviderCreateWithData(NULL, data, pixbuf_height * rowstride, NULL); image = CGImageCreate(pixbuf_width, pixbuf_height, 8, has_alpha ? 32 : 24, rowstride, colorspace, has_alpha ? kCGImageAlphaLast : 0, data_provider, NULL, FALSE, kCGRenderingIntentDefault); /* release the colourspace and data provider, we have what we want. */ CGDataProviderRelease(data_provider); CGColorSpaceRelease(colorspace); /* set the dock tile images */ SetApplicationDockTileImage(image); #if 0 /* and release */ CGImageRelease(image); g_object_unref(icon); g_object_unref(pixbuf); #endif } #endif gboolean _ui_initialize(void) { g_message("GUI and skin setup"); #ifdef GDK_WINDOWING_QUARTZ set_dock_icon(); #endif gtk_accel_map_load(aud_paths[BMP_PATH_ACCEL_FILE]); if (!init_skins(cfg.skin)) { run_load_skin_error_dialog(cfg.skin); exit(EXIT_FAILURE); } GDK_THREADS_ENTER(); /* this needs to be called after all 3 windows are created and * input plugins are setup'ed * but not if we're running headless --nenolod */ mainwin_setup_menus(); gint h_vol[2]; input_get_volume(&h_vol[0], &h_vol[1]); hook_call("volume set", h_vol); /* FIXME: delayed, because it deals directly with the plugin * interface to set menu items */ create_prefs_window(); if (cfg.player_visible) mainwin_show(TRUE); else if (!cfg.playlist_visible && !cfg.equalizer_visible) { /* all of the windows are hidden... warn user about this */ mainwin_show_visibility_warning(); } if (cfg.equalizer_visible) equalizerwin_show(TRUE); if (cfg.playlist_visible) playlistwin_show(); hint_set_always(cfg.always_on_top); resume_playback_on_startup(); g_message("Entering Gtk+ main loop!"); gtk_main(); GDK_THREADS_LEAVE(); return TRUE; } static gboolean _ui_finalize() { gtk_widget_hide(equalizerwin); gtk_widget_hide(playlistwin); gtk_widget_hide(mainwin); gtk_accel_map_save(aud_paths[BMP_PATH_ACCEL_FILE]); gtk_main_quit(); cleanup_skins(); return TRUE; } static Interface legacy_interface = { .id = "legacy", .desc = N_("Legacy Interface"), .init = _ui_initialize, .fini = _ui_finalize }; void ui_populate_legacy_interface(void) { interface_register(&legacy_interface); }