X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=tests%2Fglulxercise.c;h=a389d8948d0a16b857b04767c9e6826e7945b731;hb=224e54373b084f5246e19abebb7e9a6337798918;hp=3c786a922655139250adfd95a00294328283b410;hpb=05083a0ec75bbe2f9a80af09fa9469f64c7bb3f0;p=rodin%2Fchimara.git diff --git a/tests/glulxercise.c b/tests/glulxercise.c index 3c786a9..a389d89 100644 --- a/tests/glulxercise.c +++ b/tests/glulxercise.c @@ -9,13 +9,6 @@ typedef struct { GtkWidget *window, *test_picker, *go, *stop, *interp; } Widgets; -gboolean -on_window_delete_event() -{ - gtk_main_quit(); - return TRUE; -} - void on_go_clicked(GtkButton *go, Widgets *w) { @@ -28,12 +21,19 @@ on_go_clicked(GtkButton *go, Widgets *w) gtk_tree_model_get(model, &iter, 1, &filename, -1); g_object_unref(model); - if( !chimara_if_run_game(CHIMARA_IF(w->interp), filename, &error) ) + 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_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); @@ -44,7 +44,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); @@ -75,7 +79,7 @@ main(int argc, char *argv[]) gtk_init(&argc, &argv); GtkBuilder *builder = gtk_builder_new(); - if(!gtk_builder_add_from_file(builder, "glulxercise.ui", &error)) + if(!gtk_builder_add_from_file(builder, PACKAGE_SRC_DIR "/glulxercise.ui", &error)) { error_dialog(NULL, error, "Failed to build interface: "); return 1; @@ -85,11 +89,15 @@ main(int argc, char *argv[]) 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();