[Glade-devel] [glade3, patch] load library module before calling *_get_type ()
bighead@users.sourceforge.net
bighead@users.sourceforge.net
08 Jan 2004 12:53:07 -0500
Nice :-) (although I didn't try this patch, you'll have to wait for others
to commit).
Anyways hope you stick around glade-3 Tommi (could make you famous). :-)
Here's to another contributer. Yay!
Archit
Tommi Komulainen <tommi.komulainen@nokia.com> writes:
> Hi,
>
> Please find attached a patch that moves loading of the library module
> before the call to foo_get_type() that's supposedly in that library.
> With the patch I was able to get custom widgets to appear in glade
> palette.
>
>
> --
> Tommi Komulainen <tommi.komulainen@nokia.com>
>
> --- ChangeLog 2003-11-29 15:44:43.000000000 +0200
> +++ ChangeLog 2004-01-08 18:14:27.000000000 +0200
> @@ -1,3 +1,9 @@
> +2004-01-08 Tommi Komulainen <tommi.komulainen@nokia.com>
> +
> + * src/glade-widget-class.c: load the library module before attempting
> + to call *_get_type since the function could be located in dependent
> + libraries.
> +
> 2003-11-29 Paolo Borelli <pborelli@katamail.com>
>
> * widgets/gtkmenubar.xml: override fill_empty with ignore.
> --- src/glade-widget-class.c 2003-11-19 18:24:10.000000000 +0200
> +++ src/glade-widget-class.c 2004-01-08 16:34:05.000000000 +0200
> @@ -498,6 +498,7 @@ glade_widget_class_new (const char *name
> char *filename = NULL;
> char *library = NULL;
> char *init_function_name = NULL;
> + GModule *module = NULL;
> GType parent_type;
>
> g_return_val_if_fail (name != NULL, NULL);
> @@ -526,10 +527,19 @@ glade_widget_class_new (const char *name
> g_warning (_("Not enough memory."));
> goto lblError;
> }
> +
> + module = g_module_open (library, G_MODULE_BIND_LAZY);
> + if (!module)
> + {
> + g_warning (_("Unable to open the module %s."), library);
> + goto lblError;
> + }
> }
>
> widget_class = g_new0 (GladeWidgetClass, 1);
>
> + widget_class->module = module;
> +
> widget_class->generic_name = generic_name ? g_strdup (generic_name) : NULL;
> widget_class->name = g_strdup (name);
> widget_class->in_palette = generic_name ? TRUE : FALSE;
> @@ -564,16 +574,6 @@ glade_widget_class_new (const char *name
>
> widget_class->icon = glade_widget_class_create_icon (widget_class);
>
> - if (library)
> - {
> - widget_class->module = g_module_open (library, G_MODULE_BIND_LAZY);
> - if (!widget_class->module)
> - {
> - g_warning (_("Unable to open the module %s."), library);
> - goto lblError;
> - }
> - }
> -
> g_free (init_function_name);
>
> for (parent_type = g_type_parent (widget_class->type);