2 * vim:ts=4:sw=4:et:cindent:cino=(0
8 #include "tweakr-module.h"
18 static void tweakr_module_finalize (GObject *object);
19 static void tweakr_module_get_property (GObject *object,
23 static void tweakr_module_set_property (GObject *object,
27 static gboolean tweakr_module_load_module (GTypeModule *gmodule);
28 static void tweakr_module_unload_module (GTypeModule *gmodule);
31 G_DEFINE_TYPE (TweakrModule, tweakr_module, G_TYPE_TYPE_MODULE);
35 tweakr_module_class_init (TweakrModuleClass *class)
37 GObjectClass *object_class = G_OBJECT_CLASS (class);
38 GTypeModuleClass *type_module_class = G_TYPE_MODULE_CLASS (class);
40 object_class->finalize = tweakr_module_finalize;
41 object_class->get_property = tweakr_module_get_property;
42 object_class->set_property = tweakr_module_set_property;
44 type_module_class->load = tweakr_module_load_module;
45 type_module_class->unload = tweakr_module_unload_module;
47 g_object_class_install_property
48 (object_class, PROP_FILENAME,
49 g_param_spec_string ("filename",
51 "The filaname of the module",
54 G_PARAM_CONSTRUCT_ONLY));
58 tweakr_module_init (TweakrModule *module)
60 module->filename = NULL;
61 module->library = NULL;
63 module->unload = NULL;
67 tweakr_module_finalize (GObject *object)
69 TweakrModule *module = TWEAKR_MODULE (object);
71 g_free (module->filename);
73 G_OBJECT_CLASS (tweakr_module_parent_class)->finalize (object);
77 tweakr_module_get_property (GObject *object,
82 TweakrModule *module = TWEAKR_MODULE (object);
87 g_value_set_string (value, module->filename);
90 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
96 tweakr_module_set_property (GObject *object,
101 TweakrModule *module = TWEAKR_MODULE (object);
106 g_free (module->filename);
107 module->filename = g_value_dup_string (value);
110 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
116 tweakr_module_load_module (GTypeModule *gmodule)
118 TweakrModule *module = TWEAKR_MODULE (gmodule);
120 if (!module->filename)
122 g_warning ("Module path not set");
126 module->library = g_module_open (module->filename, 0);
128 if (!module->library)
130 g_printerr ("%s\n", g_module_error ());
134 /* Make sure that the loaded library contains the required methods */
135 if (! g_module_symbol (module->library,
136 "tweakr_module_load",
137 (gpointer) &module->load) ||
138 ! g_module_symbol (module->library,
139 "tweakr_module_unload",
140 (gpointer) &module->unload))
142 g_printerr ("%s\n", g_module_error ());
143 g_module_close (module->library);
148 /* Initialize the loaded module */
149 module->load (module);
155 tweakr_module_unload_module (GTypeModule *gmodule)
157 TweakrModule *module = TWEAKR_MODULE (gmodule);
159 module->unload (module);
161 g_module_close (module->library);
162 module->library = NULL;
165 module->unload = NULL;
169 tweakr_module_new (const gchar *filename)
171 TweakrModule *module;
173 g_return_val_if_fail (filename != NULL, NULL);
175 module = g_object_new (TWEAKR_TYPE_MODULE,
176 "filename", filename,