X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=tests%2Fglulxercise.c;h=fc9a9b1c93d49f7021f71f2bf74f632d90ca24c7;hb=41316dd53848f7670369f041ce49587a1552e5a5;hp=3c786a922655139250adfd95a00294328283b410;hpb=b64abc3eac8a01faf1f217b02658826b523da977;p=projects%2Fchimara%2Fchimara.git diff --git a/tests/glulxercise.c b/tests/glulxercise.c index 3c786a9..fc9a9b1 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)) @@ -28,12 +27,16 @@ 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) ) - { - error_dialog(GTK_WINDOW(w->window), error, "Error starting Glk library: "); - gtk_main_quit(); - } + gchar *fullpath = g_build_filename(PACKAGE_SRC_DIR, filename, NULL); + if( !chimara_if_run_game(CHIMARA_IF(w->interp), fullpath, &error) ) + 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); @@ -44,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); @@ -75,21 +82,25 @@ main(int argc, char *argv[]) gtk_init(&argc, &argv); GtkBuilder *builder = gtk_builder_new(); - if(!gtk_builder_add_from_file(builder, "glulxercise.ui", &error)) - { - error_dialog(NULL, error, "Failed to build interface: "); - return 1; - } + if(!gtk_builder_add_from_file(builder, PACKAGE_SRC_DIR "/glulxercise.ui", &error)) + 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_box_pack_end_defaults(GTK_BOX(vbox), w->interp); + gtk_widget_set_size_request(w->interp, 500, 600); + gtk_box_pack_end(GTK_BOX(vbox), w->interp, TRUE, TRUE, 0); + chimara_glk_set_css_from_string(CHIMARA_GLK(w->interp), + "buffer { font-size: 12; } buffer.input { color: #00a; font-style: italic; }"); + chimara_glk_set_spacing(CHIMARA_GLK(w->interp), 1); 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();