Remove support for older GLib and GTK versions
[projects/chimara/chimara.git] / libchimara / chimara-glk.c
index 33c64e8642d62fb34338fa7c3808bdcd63cedd9d..90f9e9c90096ebcab438e30da7724b52f7146591 100644 (file)
  * url="http://www.gnu.org/software/libtool/manual/html_node/Finding-the-dlname.html">
  * Libtool manual</ulink>).
  *
- * You need to initialize multithreading in any program you use a #ChimaraGlk
- * widget in. This means including the following incantation at the beginning
- * of your program:
- * |[
- * if(!g_thread_supported())
- *     g_thread_init(NULL);
- * gdk_threads_init();
- * ]|
- * This initialization must take place <emphasis>before</emphasis> the call to
- * gtk_init(). In addition to this, you must also protect your call to 
- * gtk_main() by calling gdk_threads_enter() right before it, and 
- * gdk_threads_leave() right after it.
+ * You need to initialize GDK threading in any program you use a #ChimaraGlk
+ * widget in.
+ * This means calling gdk_threads_init() at the beginning of your program,
+ * <emphasis>before</emphasis> the call to gtk_init().
+ * In addition to this, you must also protect your call to gtk_main() by calling
+ * gdk_threads_enter() right before it, and gdk_threads_leave() right after it.
  *
  * The following sample program shows how to initialize and construct a simple 
  * GTK window that runs a Glk program:
@@ -79,8 +73,6 @@
  *     gchar *plugin_argv[] = { "plugin.so", "-option" };
  *
  *     /<!---->* Initialize threads and GTK *<!---->/
- *     if(!g_thread_supported())
- *         g_thread_init(NULL);
  *     gdk_threads_init();
  *     gtk_init(&argc, &argv);
  *     
@@ -162,9 +154,8 @@ chimara_glk_init(ChimaraGlk *self)
        priv->glk_styles = g_new0(StyleSet,1);
        priv->final_message = g_strdup("[ The game has finished ]");
     priv->event_queue = g_queue_new();
-       priv->char_input_queue = g_async_queue_new();
-       priv->line_input_queue = g_async_queue_new();
-       /* FIXME Should be g_async_queue_new_full(g_free); but only in GTK >= 2.16 */
+       priv->char_input_queue = g_async_queue_new_full(g_free);
+       priv->line_input_queue = g_async_queue_new_full(g_free);
 
        g_mutex_init(&priv->event_lock);
        g_mutex_init(&priv->abort_lock);
@@ -1120,7 +1111,7 @@ free_startup_data(struct StartupData *startup)
        while(i < startup->args.argc)
                g_free(startup->args.argv[i++]);
        g_free(startup->args.argv);
-       g_free(startup);
+       g_slice_free(struct StartupData, startup);
 }
 
 /* glk_enter() is the actual function called in the new thread in which
@@ -1128,8 +1119,8 @@ glk_main() runs. Takes ownership of @startup and will free it. */
 static gpointer
 glk_enter(struct StartupData *startup)
 {
-       extern GPrivate *glk_data_key;
-       g_private_set(glk_data_key, startup->glk_data);
+       extern GPrivate glk_data_key;
+       g_private_set(&glk_data_key, startup->glk_data);
 
        /* Acquire the Glk thread's references to the input queues */
        g_async_queue_ref(startup->glk_data->char_input_queue);
@@ -1150,7 +1141,6 @@ glk_enter(struct StartupData *startup)
        /* Run main function */
        glk_main_t glk_main = startup->glk_main;
 
-       /* COMPAT: avoid usage of slices */
        g_signal_emit_by_name(startup->glk_data->self, "started");
        glk_main();
        free_startup_data(startup);
@@ -1193,9 +1183,8 @@ chimara_glk_run(ChimaraGlk *glk, const gchar *plugin, int argc, char *argv[], GE
     
     ChimaraGlkPrivate *priv = CHIMARA_GLK_PRIVATE(glk);
 
-       /* COMPAT: avoid usage of slices */
-       struct StartupData *startup = g_new0(struct StartupData,1);
-       
+       struct StartupData *startup = g_slice_new0(struct StartupData);
+
     g_assert( g_module_supported() );
        /* If there is already a module loaded, free it first -- you see, we want to
         * keep modules loaded as long as possible to avoid crashes in stack unwinding */