]> Pileus Git - ~andy/gtk/commitdiff
feature a new commandline option --gtk-with-module=<module> that allows
authorTim Janik <timj@gtk.org>
Mon, 17 Aug 1998 02:41:42 +0000 (02:41 +0000)
committerTim Janik <timj@src.gnome.org>
Mon, 17 Aug 1998 02:41:42 +0000 (02:41 +0000)
Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>

        * gtk/gtkmain.c (gtk_init): feature a new commandline option
        --gtk-with-module=<module> that allows additional loading and
        initialization of modules (e.g. GLE).

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkmain.c
gtk/gtkmain.h

index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index e675d2e8807bfa66a0288c0146b5dd15ce91ee22..1c115cfc6a7a6e085f78bf095ff77a9a74343f45 100644 (file)
@@ -1,3 +1,9 @@
+Mon Aug 17 03:47:55 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkmain.c (gtk_init): feature a new commandline option
+       --gtk-with-module=<module> that allows additional loading and
+       initialization of modules (e.g. GLE).
+
 Mon Aug 17 01:40:00 1998  Tim Janik  <timj@gtk.org>
 
        * configure.in: version bump to 1.1.1, binary age 0, interface age 0.
index 657e50fd590b919d40c47664469f4e6de1bc67dd..1c315b326207124044ed97ab7a54c49285eb82a3 100644 (file)
@@ -20,6 +20,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <gmodule.h>
 #include "gtkbutton.h"
 #include "gtkfeatures.h"
 #include "gtkhscrollbar.h"
@@ -233,6 +234,7 @@ void
 gtk_init (int   *argc,
          char ***argv)
 {
+  GSList *gtk_modinit_funcs = NULL;
   gchar *current_locale;
 
   if (gtk_initialized)
@@ -307,6 +309,48 @@ gtk_init (int       *argc,
                }
              (*argv)[i] = NULL;
            }
+         else if (strcmp ("--gtk-with-module", (*argv)[i]) == 0 ||
+                  strncmp ("--gtk-with-module=", (*argv)[i], 18) == 0)
+           {
+             GModule *module = NULL;
+             GtkModuleInitFunc modinit_func = NULL;
+             gchar *module_name = (*argv)[i] + 17;
+
+             if (*module_name == '=')
+               module_name++;
+             else
+               {
+                 (*argv)[i] = NULL;
+                 i += 1;
+                 module_name = (*argv)[i];
+               }
+             if (module_name[0] == '/' ||
+                 (module_name[0] == 'l' &&
+                  module_name[1] == 'i' &&
+                  module_name[2] == 'b'))
+               module_name = g_strdup (module_name);
+             else
+               module_name = g_strconcat ("lib", module_name, ".so");
+             (*argv)[i] = NULL;
+             
+             if (g_module_supported ())
+               {
+                 module = g_module_open (module_name, G_MODULE_BIND_LAZY);
+                 if (module &&
+                     g_module_symbol (module, "gtk_module_init", (gpointer*) &modinit_func) &&
+                     modinit_func)
+                   gtk_modinit_funcs = g_slist_prepend (gtk_modinit_funcs, modinit_func);
+               }
+             if (!modinit_func)
+               {
+                 g_warning ("Failed to load module \"%s\": %s",
+                            module ? g_module_name (module) : module_name,
+                            g_module_error ());
+                 if (module)
+                   g_module_close (module);
+               }
+             g_free (module_name);
+           }
          else if (strcmp ("--g-fatal-warnings", (*argv)[i]) == 0)
            {
              GLogLevelFlags fatal_levels;
@@ -425,6 +469,25 @@ gtk_init (int       *argc,
   /* Set the 'initialized' flag.
    */
   gtk_initialized = TRUE;
+
+  /* initialize modules
+   */
+  if (gtk_modinit_funcs)
+    {
+      GSList *slist;
+
+      slist = gtk_modinit_funcs;
+      while (slist)
+       {
+         GtkModuleInitFunc modinit;
+
+         modinit = slist->data;
+         modinit (argc, argv);
+         slist = slist->next;
+       }
+      
+      g_slist_free (gtk_modinit_funcs);
+    }
 }
 
 void
index abbf5f428479bd33da905c9c1e2cfe9108396502..05aa261ac1e6a2d85725a3ae799fdcf00c071b73 100644 (file)
@@ -34,6 +34,8 @@ extern "C" {
 #define GTK_PRIORITY_DEFAULT    0
 #define GTK_PRIORITY_LOW       10
 
+typedef void   (*GtkModuleInitFunc)    (gint           *argc,
+                                        gchar        ***argv);
 typedef gint   (*GtkKeySnoopFunc)      (GtkWidget      *grab_widget,
                                         GdkEventKey    *event,
                                         gpointer        func_data);