X-Git-Url: https://git.stderr.nl/gitweb?p=projects%2Fchimara%2Fchimara.git;a=blobdiff_plain;f=libchimara%2Fchimara-glk.c;h=4bbb3aa4e87cfd838bc9843de8322068195ceb31;hp=718562218509b149f13656612c4847f96550436d;hb=523811df4155ac5a10b206cb16374d1383e108fc;hpb=4cea653ead429cf0dbc0b07f24bd791181176e03 diff --git a/libchimara/chimara-glk.c b/libchimara/chimara-glk.c index 7185622..4bbb3aa 100644 --- a/libchimara/chimara-glk.c +++ b/libchimara/chimara-glk.c @@ -680,46 +680,64 @@ chimara_glk_class_init(ChimaraGlkClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * ChimaraGlk::char-input: - * @glk: The widget that received the signal + * @self: The widget that received the signal * @window_rock: The rock value of the window that received character input * (see Rocks) - * @keysym: The key that was typed, in the form of a key symbol from + * @window_id_string: A string value uniquely identifying the window that + * received character input + * @keysym: The key that was typed, in the form of a key symbol from * gdk/gdkkeysyms.h - * + * * Emitted when a Glk window receives character input. + * The @window_rock can be used to identify the window. + * However, rock values in Glk are allowed to be identical for different + * windows, so Chimara also provides a string value with which the window + * can be uniquely identified. */ chimara_glk_signals[CHAR_INPUT] = g_signal_new("char-input", G_OBJECT_CLASS_TYPE(klass), 0, G_STRUCT_OFFSET(ChimaraGlkClass, char_input), NULL, NULL, - _chimara_marshal_VOID__UINT_UINT, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); + _chimara_marshal_VOID__UINT_STRING_UINT, + G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT); /** * ChimaraGlk::line-input: - * @glk: The widget that received the signal + * @self: The widget that received the signal * @window_rock: The rock value of the window that received line input (see * Rocks) + * @window_id_string: A string value uniquely identifying the window that + * received the input * @text: The text that was typed - * + * * Emitted when a Glk window receives line input. + * The @window_rock can be used to identify the window. + * However, rock values in Glk are allowed to be identical for different + * windows, so Chimara also provides a string value with which the window + * can be uniquely identified. */ chimara_glk_signals[LINE_INPUT] = g_signal_new("line-input", G_OBJECT_CLASS_TYPE(klass), 0, G_STRUCT_OFFSET(ChimaraGlkClass, line_input), NULL, NULL, - _chimara_marshal_VOID__UINT_STRING, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); + _chimara_marshal_VOID__UINT_STRING_STRING, + G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING); /** * ChimaraGlk::text-buffer-output: - * @glk: The widget that received the signal + * @self: The widget that received the signal * @window_rock: The rock value of the window that was printed to (see Rocks) - * + * @window_id_string: A string value uniquely identifying the window that + * was printed to + * * Emitted when text is printed to a text buffer window. + * The @window_rock can be used to identify the window. + * However, rock values in Glk are allowed to be identical for different + * windows, so Chimara also provides a string value with which the window + * can be uniquely identified. */ chimara_glk_signals[TEXT_BUFFER_OUTPUT] = g_signal_new("text-buffer-output", G_OBJECT_CLASS_TYPE(klass), 0, G_STRUCT_OFFSET(ChimaraGlkClass, text_buffer_output), NULL, NULL, - _chimara_marshal_VOID__UINT_STRING, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); + _chimara_marshal_VOID__UINT_STRING_STRING, + G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING); /** * ChimaraGlk::iliad-screen-update: * @self: The widget that received the signal @@ -1188,7 +1206,10 @@ chimara_glk_run(ChimaraGlk *glk, const gchar *plugin, int argc, char *argv[], GE /* Set the program name */ priv->program_name = g_path_get_basename(plugin); g_object_notify(G_OBJECT(glk), "program-name"); - + + /* Set Glk styles to defaults */ + style_reset_glk(glk); + /* Run in a separate thread */ priv->thread = g_thread_try_new("glk", (GThreadFunc)glk_enter, startup, error); @@ -1298,6 +1319,7 @@ chimara_glk_unload_plugin(ChimaraGlk *glk) CHIMARA_GLK_USE_PRIVATE(glk, priv); if( priv->program && !g_module_close(priv->program) ) g_warning( "Error closing module :%s", g_module_error() ); + priv->program = NULL; } /**