X-Git-Url: https://git.stderr.nl/gitweb?p=rodin%2Fchimara.git;a=blobdiff_plain;f=tests%2Fglulxercise.c;h=3f3b3933bcdef15ca33a4c0ee6e41cf7781fac51;hp=3db6bba753e3a8b02439aa921218c38f483994dc;hb=1cf1a0b599423e4c8960f2021bceb90e85d4695c;hpb=57ceef742182d6f0d1f7844256863a37c2d80d6a diff --git a/tests/glulxercise.c b/tests/glulxercise.c index 3db6bba..3f3b393 100644 --- a/tests/glulxercise.c +++ b/tests/glulxercise.c @@ -1,7 +1,6 @@ #include #include #include -#include "error.h" #define LOAD_WIDGET(name) GTK_WIDGET(gtk_builder_get_object(builder, name)) @@ -31,12 +30,13 @@ on_go_clicked(GtkButton *go, Widgets *w) gchar *fullpath = g_build_filename(PACKAGE_SRC_DIR, filename, NULL); if( !chimara_if_run_game(CHIMARA_IF(w->interp), fullpath, &error) ) - { - error_dialog(GTK_WINDOW(w->window), error, "Error starting Glk library: "); - gtk_main_quit(); - } + g_error("Error starting Glk library: %s", error->message); g_free(fullpath); +} +void +on_interp_started(ChimaraGlk *glk, Widgets *w) +{ gtk_widget_set_sensitive(w->go, FALSE); gtk_widget_set_sensitive(w->stop, TRUE); gtk_widget_set_sensitive(w->test_picker, FALSE); @@ -47,7 +47,11 @@ on_stop_clicked(GtkButton *stop, Widgets *w) { chimara_glk_stop( CHIMARA_GLK(w->interp) ); chimara_glk_wait( CHIMARA_GLK(w->interp) ); +} +void +on_interp_stopped(ChimaraGlk *glk, Widgets *w) +{ gtk_widget_set_sensitive(w->stop, FALSE); gtk_widget_set_sensitive(w->go, TRUE); gtk_widget_set_sensitive(w->test_picker, TRUE); @@ -79,20 +83,21 @@ main(int argc, char *argv[]) GtkBuilder *builder = gtk_builder_new(); if(!gtk_builder_add_from_file(builder, PACKAGE_SRC_DIR "/glulxercise.ui", &error)) - { - error_dialog(NULL, error, "Failed to build interface: "); - return 1; - } + g_error("Failed to build interface: %s", error->message); Widgets *w = g_slice_new0(Widgets); w->window = LOAD_WIDGET("window"); GtkWidget *vbox = LOAD_WIDGET("vbox"); w->test_picker = LOAD_WIDGET("test_picker"); + gtk_combo_box_set_active(GTK_COMBO_BOX(w->test_picker), 0); w->go = LOAD_WIDGET("go"); w->stop = LOAD_WIDGET("stop"); w->interp = chimara_if_new(); + gtk_widget_set_size_request(w->interp, 500, 600); gtk_box_pack_end_defaults(GTK_BOX(vbox), w->interp); gtk_builder_connect_signals(builder, w); + g_signal_connect(w->interp, "started", G_CALLBACK(on_interp_started), w); + g_signal_connect(w->interp, "stopped", G_CALLBACK(on_interp_stopped), w); gtk_widget_show_all(w->window); gdk_threads_enter();