diff --git a/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp b/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp index 1aa5010a1b..7b7b9bc3d9 100644 --- a/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp +++ b/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.cpp @@ -1,46 +1,54 @@ #include "global.h" -#include "LoadingWindow_Gtk.h" - +#include "RageLog.h" #include "StepMania.h" -#include -#include "loading.xpm" +#include "LoadingWindow_Gtk.h" +#include "LoadingWindow_GtkModule.h" -static GtkWidget *label; -static GtkWidget *window; +#include + +static void *Handle = NULL; +static INIT Module_Init; +static SHUTDOWN Module_Shutdown; +static SETTEXT Module_SetText; LoadingWindow_Gtk::LoadingWindow_Gtk() { - GdkPixmap *loadmap; - GtkWidget *vbox; - GtkWidget *loadimage; +try { + ASSERT( Handle == NULL ); + + Handle = dlopen( DirOfExecutable + "/" + "GtkModule.so", RTLD_NOW ); + if( Handle == NULL ) + RageException::Throw("dlopen(): %s", dlerror()); - gtk_init(&g_argc,&g_argv); - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_widget_realize(window); - loadmap = gdk_pixmap_create_from_xpm_d(window->window,NULL,NULL,loading); - loadimage = gtk_image_new_from_pixmap(loadmap,NULL); - label = gtk_label_new(NULL); - gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_CENTER); - vbox = gtk_vbox_new(FALSE,5); - gtk_container_add(GTK_CONTAINER(window),vbox); - gtk_box_pack_start(GTK_BOX(vbox),loadimage,FALSE,FALSE,0); - gtk_box_pack_end(GTK_BOX(vbox),label,TRUE,TRUE,0); + Module_Init = (INIT) dlsym(Handle, "Init"); + if( !Module_Init ) + RageException::ThrowNonfatal( "Couldn't load symbol Module_Init" ); + Module_Shutdown = (SHUTDOWN) dlsym(Handle, "Shutdown"); + if( !Module_Shutdown ) + RageException::ThrowNonfatal( "Couldn't load symbol Module_Shutdown" ); + Module_SetText = (SETTEXT) dlsym(Handle, "SetText"); + if( !Module_SetText ) + RageException::ThrowNonfatal( "Couldn't load symbol Module_SetText" ); - gtk_widget_show_all(window); - gtk_main_iteration_do(FALSE); + const char *ret = Module_Init( &g_argc, &g_argv ); + if( ret != NULL ) + RageException::ThrowNonfatal( ret ); +} catch(...) { + dlclose( Handle ); + Handle = NULL; + throw; +} } LoadingWindow_Gtk::~LoadingWindow_Gtk() { - gtk_widget_hide_all(window); - g_signal_emit_by_name (G_OBJECT (window), "destroy"); - while( gtk_events_pending() ) - gtk_main_iteration_do(FALSE); + Module_Shutdown(); + + dlclose( Handle ); + Handle = NULL; } void LoadingWindow_Gtk::SetText( CString s ) { - gtk_label_set_text(GTK_LABEL(label), s); - gtk_widget_show(label); - gtk_main_iteration_do(FALSE); + Module_SetText( s ); } diff --git a/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.h b/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.h index c3887ca20d..fef4b01803 100644 --- a/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.h +++ b/stepmania/src/arch/LoadingWindow/LoadingWindow_Gtk.h @@ -12,7 +12,6 @@ public: void Paint() { } }; -#undef ARCH_LOADING_WINDOW -#define ARCH_LOADING_WINDOW LoadingWindow_Gtk +#define HAVE_LOADING_WINDOW_GTK #endif