2 * vim:ts=4:sw=4:et:cindent:cino=(0
12 #include "maemo-tweaks-types.h"
13 #include "libmaemo-tweaks-section/maemo-tweaks-module.h"
14 #include "maemo-tweaks-module-manager.h"
25 maemo_tweaks_module_manager_constructor (GType type,
27 GObjectConstructParam *params);
29 maemo_tweaks_module_manager_finalize (GObject *object);
32 maemo_tweaks_module_manager_get_property (GObject *object,
38 maemo_tweaks_module_manager_set_property (GObject *object,
44 maemo_tweaks_module_manager_query_modules
45 (MaemoTweaksModuleManager *manager);
48 G_DEFINE_TYPE (MaemoTweaksModuleManager, maemo_tweaks_module_manager,
53 maemo_tweaks_module_manager_class_init (MaemoTweaksModuleManagerClass *klass)
55 GObjectClass *object_class = G_OBJECT_CLASS (klass);
57 object_class->constructor = maemo_tweaks_module_manager_constructor;
58 object_class->finalize = maemo_tweaks_module_manager_finalize;
59 object_class->get_property = maemo_tweaks_module_manager_get_property;
60 object_class->set_property = maemo_tweaks_module_manager_set_property;
62 g_object_class_install_property
63 (object_class, PROP_MODULE_PATH,
64 g_param_spec_string ("module-path",
66 "The path where to look for modules",
69 G_PARAM_CONSTRUCT_ONLY));
73 maemo_tweaks_module_manager_init (MaemoTweaksModuleManager *manager)
75 manager->module_path = NULL;
76 manager->modules = NULL;
80 maemo_tweaks_module_manager_constructor (GType type,
82 GObjectConstructParam *params)
85 MaemoTweaksModuleManager *manager;
87 object = G_OBJECT_CLASS
88 (maemo_tweaks_module_manager_parent_class)->constructor (type,
92 manager = MAEMO_TWEAKS_MODULE_MANAGER (object);
94 if (manager->module_path)
95 maemo_tweaks_module_manager_query_modules (manager);
101 maemo_tweaks_module_manager_finalize (GObject *object)
103 MaemoTweaksModuleManager *manager = MAEMO_TWEAKS_MODULE_MANAGER (object);
105 g_free (manager->module_path);
107 /* GTypeModules most not be finalized, don't unref them */
108 g_list_free (manager->modules);
110 G_OBJECT_CLASS (maemo_tweaks_module_manager_parent_class)->
115 maemo_tweaks_module_manager_get_property (GObject *object,
120 MaemoTweaksModuleManager *manager = MAEMO_TWEAKS_MODULE_MANAGER (object);
124 case PROP_MODULE_PATH:
125 g_value_set_string (value, manager->module_path);
128 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
134 maemo_tweaks_module_manager_set_property (GObject *object,
139 MaemoTweaksModuleManager *manager = MAEMO_TWEAKS_MODULE_MANAGER (object);
143 case PROP_MODULE_PATH:
144 manager->module_path = g_value_dup_string (value);
147 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
153 maemo_tweaks_module_manager_is_valid_module_name (const gchar *name)
155 return g_str_has_suffix (name, ".so");
159 maemo_tweaks_module_manager_query_modules (MaemoTweaksModuleManager *manager)
163 GError *error = NULL;
165 dir = g_dir_open (manager->module_path, 0, &error);
169 g_printerr ("Error while opening module dir: %s\n", error->message);
170 g_clear_error (&error);
174 while ((name = g_dir_read_name (dir)))
176 if (maemo_tweaks_module_manager_is_valid_module_name (name))
178 MaemoTweaksModule *module;
181 path = g_build_filename (manager->module_path, name, NULL);
182 module = maemo_tweaks_module_new (path);
184 if (! g_type_module_use (G_TYPE_MODULE (module)))
186 g_printerr ("Failed to load module: %s\n", path);
187 g_object_unref (module);
194 g_type_module_unuse (G_TYPE_MODULE (module));
196 manager->modules = g_list_prepend (manager->modules, module);