Reset Glk style hints at beginning of program
[projects/chimara/chimara.git] / libchimara / chimara-glk.c
index 90f9e9c90096ebcab438e30da7724b52f7146591..4bbb3aa4e87cfd838bc9843de8322068195ceb31 100644 (file)
@@ -621,36 +621,6 @@ chimara_glk_started(ChimaraGlk *self)
        priv->running = TRUE;
 }
 
-static void
-chimara_glk_waiting(ChimaraGlk *self)
-{
-       /* Default signal handler */
-}
-
-static void
-chimara_glk_char_input(ChimaraGlk *self, guint window_rock, guint keysym)
-{
-       /* Default signal handler */
-}
-
-static void
-chimara_glk_line_input(ChimaraGlk *self, guint window_rock, gchar *text)
-{
-       /* Default signal handler */
-}
-
-static void
-chimara_glk_text_buffer_output(ChimaraGlk *self, guint window_rock, gchar *text)
-{
-       /* Default signal handler */
-}
-
-static void
-chimara_glk_iliad_screen_update(ChimaraGlk *self, gboolean typing)
-{
-       /* Default signal handler */
-}
-
 static void
 chimara_glk_class_init(ChimaraGlkClass *klass)
 {
@@ -674,11 +644,6 @@ chimara_glk_class_init(ChimaraGlkClass *klass)
     /* Signals */
     klass->stopped = chimara_glk_stopped;
     klass->started = chimara_glk_started;
-    klass->waiting = chimara_glk_waiting;
-    klass->char_input = chimara_glk_char_input;
-    klass->line_input = chimara_glk_line_input;
-    klass->text_buffer_output = chimara_glk_text_buffer_output;
-    klass->iliad_screen_update = chimara_glk_iliad_screen_update;
 
     /**
      * ChimaraGlk::stopped:
@@ -715,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 <link linkend="chimara-Rocks">Rocks</link>)
-        * @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
         * <filename class="headerfile">gdk/gdkkeysyms.h</filename>
-        * 
+        *
         * 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
         * <link linkend="chimara-Rocks">Rocks</link>)
+        * @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 <link
         * linkend="chimara-Rocks">Rocks</link>)
-        * 
+        * @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
@@ -1223,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);
 
@@ -1333,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;
 }
 
 /**