[maemo-commits] [maemo-commits] r8759 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Dec 14 17:51:26 EET 2006
- Previous message: [maemo-commits] r8758 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop libhildonwm
- Next message: [maemo-commits] r8760 - in projects/haf/branches/hildon-fm/1.x: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: lucasr Date: 2006-12-14 17:51:24 +0200 (Thu, 14 Dec 2006) New Revision: 8759 Added: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.h Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.c projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.h projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-manager.c Log: 2006-12-14 Lucas Rocha <lucas.rocha at nokia.com> * src/hd-plugin-loader-factory.c: add support for new API plugin loader. * src/hd-plugin-manager.[ch], src/hd-plugin-loader.[ch]: conform to new Plugin Loader API. * src/hd-plugin-loader-legacy.[ch]: make HDPluginLoaderLegacy work with HDPluginLoader API. Use constants from hd-config.h.Some GObject tiny cleanups. * src/hd-config.h: add legacy plugin desktop file key entries. * src/Makefile.am: add new files to the game. * libhildondesktop/hildon-desktop-plugin.[ch]: complete implementation of GTypeModule to create the new API loader (aka HDPluginLoaderDefault). * configure.ac: general cleanups to improve readability. * src/hd-plugin-loader-default.[ch]: plugin loader for new API plugins. Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2006-12-14 15:51:24 UTC (rev 8759) @@ -1,3 +1,20 @@ +2006-12-14 Lucas Rocha <lucas.rocha at nokia.com> + + * src/hd-plugin-loader-factory.c: add support for new API plugin + loader. + * src/hd-plugin-manager.[ch], src/hd-plugin-loader.[ch]: conform to + new Plugin Loader API. + * src/hd-plugin-loader-legacy.[ch]: make HDPluginLoaderLegacy work + with HDPluginLoader API. Use constants from hd-config.h.Some GObject + tiny cleanups. + * src/hd-config.h: add legacy plugin desktop file key entries. + * src/Makefile.am: add new files to the game. + * libhildondesktop/hildon-desktop-plugin.[ch]: complete implementation of + GTypeModule to create the new API loader (aka HDPluginLoaderDefault). + * configure.ac: general cleanups to improve readability. + * src/hd-plugin-loader-default.[ch]: plugin loader for new API + plugins. + 2006-12-14 Moises Martinez <moises.martinez at nokia.com> * libhildondesktop/hn-app-switcher.c: Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac 2006-12-14 15:51:24 UTC (rev 8759) @@ -111,37 +111,30 @@ AC_SUBST(ALL_LINGUAS) AM_GLIB_GNU_GETTEXT -hildonnavigatorlibdir=${libdir}/hildon-navigator -hildonstatusbarmainlibdir=${libdir}/hildon-status-bar -hildonstatusbarlibdir=${libdir}/hildon-status-bar -hildonhomelibdir=${libdir}/hildon-home -hildonhomedesktopentrydir=${datadir}/applications/hildon-home -AC_SUBST(hildonhomedesktopentrydir) - hildondesktopentrydir=`pkg-config osso-af-settings --variable=desktopentrydir` -AC_SUBST(hildondesktopentrydir) - +hildondesktoplibdir=${libdir}/hildon-desktop hildondesktopconfdir=${sysconfdir}/hildon-desktop +AC_SUBST(hildondesktopentrydir) +AC_SUBST(hildondesktoplibdir) AC_SUBST(hildondesktopconfdir) -hildoncpdesktopentrydir=${datadir}/applications/hildon-control-panel -AC_SUBST(hildoncpdesktopentrydir) - hildonnavigatordesktopentrydir=${datadir}/applications/hildon-navigator +hildonnavigatorlibdir=${libdir}/hildon-navigator AC_SUBST(hildonnavigatordesktopentrydir) - -AC_SUBST(localedir) AC_SUBST(hildonnavigatorlibdir) -AC_SUBST(localedir) +hildonhomedesktopentrydir=${datadir}/applications/hildon-home +hildonhomelibdir=${libdir}/hildon-home +AC_SUBST(hildonhomedesktopentrydir) AC_SUBST(hildonhomelibdir) -AC_SUBST(localedir) -AC_SUBST(hildonstatusbarlibdir) - hildonstatusbardesktopentrydir=${datadir}/applications/hildon-status-bar +hildonstatusbarlibdir=${libdir}/hildon-status-bar AC_SUBST(hildonstatusbardesktopentrydir) +AC_SUBST(hildonstatusbarlibdir) +hildoncpdesktopentrydir=${datadir}/applications/hildon-control-panel +AC_SUBST(hildoncpdesktopentrydir) AC_OUTPUT(Makefile \ libhildonwm/Makefile \ Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.c 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.c 2006-12-14 15:51:24 UTC (rev 8759) @@ -28,6 +28,11 @@ #include <config.h> #include <gmodule.h> +#define HILDON_DESKTOP_PLUGIN_GET_PRIVATE(object) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((object), HILDON_DESKTOP_TYPE_PLUGIN, HildonDesktopPluginPrivate)) + +G_DEFINE_TYPE (HildonDesktopPlugin, hildon_desktop_plugin, G_TYPE_TYPE_MODULE); + enum { PROP_0, @@ -36,12 +41,11 @@ struct _HildonDesktopPluginPrivate { - gchar *path; - GModule *library; + gchar *path; + GModule *library; - void (*load) (HildonDesktopPlugin *plugin); - void (*query) (HildonDesktopPlugin *plugin); - void (*unload) (HildonDesktopPlugin *plugin); + void (*load) (HildonDesktopPlugin *plugin); + void (*unload) (HildonDesktopPlugin *plugin); }; static void hildon_desktop_plugin_get_property (GObject *object, @@ -58,8 +62,6 @@ static gboolean hildon_desktop_plugin_load (GTypeModule *gmodule); static void hildon_desktop_plugin_unload (GTypeModule *gmodule); -G_DEFINE_TYPE (HildonDesktopPlugin, hildon_desktop_plugin, G_TYPE_TYPE_MODULE); - static void hildon_desktop_plugin_class_init (HildonDesktopPluginClass *class) { @@ -90,7 +92,7 @@ static void hildon_desktop_plugin_init (HildonDesktopPlugin *plugin) { - plugin->priv = HDPLUGIN_GET_PRIVATE (plugin); + plugin->priv = HILDON_DESKTOP_PLUGIN_GET_PRIVATE (plugin); plugin->priv->path = NULL; plugin->priv->library = NULL; @@ -122,6 +124,7 @@ case HDPLUGIN_PATH_PROP: g_value_set_string (value,plugin->priv->path); break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -156,6 +159,7 @@ if (plugin->priv->path == NULL) { g_warning ("Module path not set"); + return FALSE; } @@ -165,10 +169,10 @@ if (!plugin->priv->library) { g_warning (g_module_error ()); + return FALSE; } - if (!g_module_symbol (plugin->priv->library, "hildon_desktop_plugin_load", (gpointer *) &plugin->priv->load) || @@ -177,7 +181,9 @@ (gpointer *) &plugin->priv->unload)) { g_warning (g_module_error ()); + g_module_close (plugin->priv->library); + return FALSE; } @@ -196,25 +202,38 @@ g_module_close (plugin->priv->library); - plugin->priv->library = NULL; - plugin->priv->load = NULL; - plugin->priv->query = NULL; - plugin->priv->unload = NULL; + plugin->priv->library = NULL; + plugin->priv->load = NULL; + plugin->priv->unload = NULL; } HildonDesktopPlugin * -hildon_desktop_plugin_new (GType module_type, const gchar *path) +hildon_desktop_plugin_new (const gchar *path) { HildonDesktopPlugin *plugin; - g_return_val_if_fail (g_type_is_a (module_type, HILDON_DESKTOP_TYPE_PLUGIN), NULL); g_return_val_if_fail (path != NULL, NULL); - plugin = g_object_new (module_type, "path", path); + plugin = g_object_new (HILDON_DESKTOP_TYPE_PLUGIN, "path", path); return plugin; } +GList * +hildon_desktop_plugin_get_objects (HildonDesktopPlugin *plugin) +{ + GList *objects = NULL, *iter; + + for (iter = plugin->gtypes; iter; iter = g_list_next (iter)) + { + GObject *object = g_object_new ((GType) GPOINTER_TO_INT (iter->data), NULL); + + objects = g_list_append (objects, object); + } + + return objects; +} + void hildon_desktop_plugin_add_type (HildonDesktopPlugin *plugin, GType type) { Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.h 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-desktop-plugin.h 2006-12-14 15:51:24 UTC (rev 8759) @@ -28,54 +28,51 @@ #include <glib-object.h> -#define HILDON_DESKTOP_TYPE_PLUGIN (hildon_desktop_plugin_get_type ()) +G_BEGIN_DECLS + +typedef struct _HildonDesktopPlugin HildonDesktopPlugin; +typedef struct _HildonDesktopPluginClass HildonDesktopPluginClass; +typedef struct _HildonDesktopPluginPrivate HildonDesktopPluginPrivate; + +#define HILDON_DESKTOP_TYPE_PLUGIN (hildon_desktop_plugin_get_type ()) #define HILDON_DESKTOP_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), HILDON_DESKTOP_TYPE_PLUGIN, HildonDesktopPlugin)) #define HILDON_DESKTOP_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), HILDON_DESKTOP_TYPE_PLUGIN, HildonDesktopPluginClass)) #define HILDON_DESKTOP_IS_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), HILDON_DESKTOP_TYPE_PLUGIN)) #define HILDON_DESKTOP_IS_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), HILDON_DESKTOP_TYPE_PLUGIN)) #define HILDON_DESKTOP_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), HILDON_DESKTOP_TYPE_PLUGIN, HildonDesktopPluginClass)) -#define HDPLUGIN_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HILDON_DESKTOP_TYPE_PLUGIN, HildonDesktopPluginPrivate)) #define HILDON_DESKTOP_PLUGIN_SYMBOLS(o) \ static void hildon_desktop_plugin_load (HildonDesktopPlugin *plugin) \ { \ - hildon_desktop_plugin_add (plugin,o##_get_type()); \ + hildon_desktop_plugin_add_type (plugin, o##_get_type()); \ } \ static void hildon_desktop_plugin_unload (HildonDesktopPlugin *plugin) \ { \ } -G_BEGIN_DECLS - -typedef struct _HildonDesktopPlugin HildonDesktopPlugin; -typedef struct _HildonDesktopPluginClass HildonDesktopPluginClass; -typedef struct _HildonDesktopPluginPrivate HildonDesktopPluginPrivate; - struct _HildonDesktopPlugin { - GTypeModule parent; + GTypeModule parent; - GList *gtypes; + GList *gtypes; - HildonDesktopPluginPrivate *priv; + HildonDesktopPluginPrivate *priv; }; struct _HildonDesktopPluginClass { GTypeModuleClass parent_class; - - /* */ }; -GType -hildon_desktop_plugin_get_type (void); +GType hildon_desktop_plugin_get_type (void); -HildonDesktopPlugin * -hildon_desktop_plugin_new (GType module_type, const gchar *path); +HildonDesktopPlugin *hildon_desktop_plugin_new (const gchar *path); -void -hildon_desktop_plugin_add_type (HildonDesktopPlugin *plugin, GType type); +GList *hildon_desktop_plugin_get_objects (HildonDesktopPlugin *plugin); +void hildon_desktop_plugin_add_type (HildonDesktopPlugin *plugin, + GType type); + G_END_DECLS -#endif/*__HILDON_DESKTOP_PLUGIN_H__*/ +#endif /*__HILDON_DESKTOP_PLUGIN_H__*/ Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am 2006-12-14 15:51:24 UTC (rev 8759) @@ -28,6 +28,7 @@ -DLOCALEDIR=\"$(localedir)\" \ -I$(top_srcdir) \ -DHD_DESKTOP_CONFIG_PATH=\"$(hildondesktopconfdir)\" \ + -DHD_DESKTOP_MODULE_PATH=\"$(hildondesktoplibdir)\" \ -DHD_PLUGIN_LOADER_LEGACY_HOME_MODULE_PATH=\"$(hildonhomelibdir)\" \ -DHD_PLUGIN_LOADER_LEGACY_NAVIGATOR_MODULE_PATH=\"$(hildonnavigatorlibdir)\" @@ -47,6 +48,8 @@ hd-plugin-loader-factory.h \ hd-plugin-loader.c \ hd-plugin-loader.h \ + hd-plugin-loader-default.c \ + hd-plugin-loader-default.h \ hd-plugin-loader-legacy.c \ hd-plugin-loader-legacy.h \ hd-select-plugins-dialog.c \ Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-config.h 2006-12-14 15:51:24 UTC (rev 8759) @@ -46,5 +46,11 @@ #define HD_PLUGIN_CONFIG_GROUP "Desktop Entry" #define HD_PLUGIN_CONFIG_KEY_NAME "Name" #define HD_PLUGIN_CONFIG_KEY_TYPE "Type" +#define HD_PLUGIN_CONFIG_KEY_PATH "X-Path" +#define HD_PLUGIN_CONFIG_KEY_HOME_APPLET "X-home-applet" +#define HD_PLUGIN_CONFIG_KEY_HOME_APPLET_RESIZABLE "X-home-applet-resizable" + +#define HD_PLUGIN_CONFIG_KEY_TN "X-task-navigator-plugin" + #endif Added: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.c 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.c 2006-12-14 15:51:24 UTC (rev 8759) @@ -0,0 +1,160 @@ +/* + * This file is part of hildon-desktop + * + * Copyright (C) 2006 Nokia Corporation. + * + * Author: Lucas Rocha <lucas.rocha at nokia.com> + * Contact: Karoliina Salminen <karoliina.t.salminen at nokia.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include <libhildondesktop/hildon-desktop-plugin.h> + +#include "hd-plugin-loader-default.h" +#include "hd-config.h" + +#define HD_PLUGIN_LOADER_DEFAULT_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HD_TYPE_PLUGIN_LOADER_DEFAULT, HDPluginLoaderDefaultPrivate)) + +G_DEFINE_TYPE (HDPluginLoaderDefault, hd_plugin_loader_default, HD_TYPE_PLUGIN_LOADER); + +static GList * +hd_plugin_loader_default_open_module (HDPluginLoaderDefault *loader, + GError **error) +{ + HildonDesktopPlugin *plugin; + GKeyFile *keyfile; + GList *objects = NULL; + GError *keyfile_error = NULL; + gchar *module_file = NULL; + gchar *module_path = NULL; + + keyfile = hd_plugin_loader_get_key_file (HD_PLUGIN_LOADER (loader)); + + module_file = g_key_file_get_string (keyfile, + HD_PLUGIN_CONFIG_GROUP, + HD_PLUGIN_CONFIG_KEY_PATH, + &keyfile_error); + + if (keyfile_error) + { + g_propagate_error (error, keyfile_error); + + return NULL; + } + + if (module_file && module_file[0] == G_DIR_SEPARATOR) + { + module_path = module_file; + } + else + { + module_path = g_build_filename (HD_DESKTOP_MODULE_PATH, + module_file, + NULL); + + g_free (module_file); + } + + plugin = hildon_desktop_plugin_new (module_path); + + if (g_type_module_use (G_TYPE_MODULE (plugin)) == FALSE) + { + g_warning ("Error loading module at %s", module_path); + + g_free (module_path); + + return NULL; + } + + objects = hildon_desktop_plugin_get_objects (plugin); + + g_type_module_unuse (G_TYPE_MODULE (plugin)); + + g_free (module_path); + + return objects; +} + +static GList * +hd_plugin_loader_default_load (HDPluginLoader *loader, GError **error) +{ + GList *objects = NULL; + GKeyFile *keyfile; + GError *local_error = NULL; + + g_return_val_if_fail (loader, NULL); + + keyfile = hd_plugin_loader_get_key_file (loader); + + if (!keyfile) + { + g_set_error (error, + hd_plugin_loader_error_quark (), + HD_PLUGIN_LOADER_ERROR_KEYFILE, + "A keyfile required to load plugins"); + + return NULL; + } + + /* Open the module and return plugin instances */ + objects = + hd_plugin_loader_default_open_module (HD_PLUGIN_LOADER_DEFAULT (loader), + &local_error); + + if (local_error) + { + g_propagate_error (error, local_error); + + if (objects) + { + g_list_foreach (objects, (GFunc) gtk_widget_destroy, NULL); + g_list_free (objects); + } + + return NULL; + } + + return objects; +} + +static void +hd_plugin_loader_default_finalize (GObject *loader) +{ + G_OBJECT_CLASS (hd_plugin_loader_default_parent_class)->finalize (loader); +} + +static void +hd_plugin_loader_default_init (HDPluginLoaderDefault *loader) +{ +} + +static void +hd_plugin_loader_default_class_init (HDPluginLoaderDefaultClass *class) +{ + GObjectClass *object_class; + HDPluginLoaderClass *loader_class; + + object_class = G_OBJECT_CLASS (class); + loader_class = HD_PLUGIN_LOADER_CLASS (class); + + object_class->finalize = hd_plugin_loader_default_finalize; + + loader_class->load = hd_plugin_loader_default_load; +} + Added: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.h 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-default.h 2006-12-14 15:51:24 UTC (rev 8759) @@ -0,0 +1,58 @@ +/* + * This file is part of hildon-desktop + * + * Copyright (C) 2006 Nokia Corporation. + * + * Author: Lucas Rocha <lucas.rocha at nokia.com> + * Contact: Karoliina Salminen <karoliina.t.salminen at nokia.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#ifndef __HD_PLUGIN_LOADER_DEFAULT_H__ +#define __HD_PLUGIN_LOADER_DEFAULT_H__ + +#include "hd-plugin-loader.h" + +G_BEGIN_DECLS + +typedef struct _HDPluginLoaderDefault HDPluginLoaderDefault; +typedef struct _HDPluginLoaderDefaultClass HDPluginLoaderDefaultClass; +typedef struct _HDPluginLoaderDefaultPrivate HDPluginLoaderDefaultPrivate; + +#define HD_TYPE_PLUGIN_LOADER_DEFAULT (hd_plugin_loader_default_get_type ()) +#define HD_PLUGIN_LOADER_DEFAULT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HD_TYPE_PLUGIN_LOADER_DEFAULT, HDPluginLoaderDefault)) +#define HD_IS_PLUGIN_LOADER_DEFAULT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HD_TYPE_PLUGIN_LOADER_DEFAULT)) +#define HD_PLUGIN_LOADER_DEFAULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HD_TYPE_PLUGIN_LOADER_DEFAULT_CLASS, HDPluginLoaderDefaultClass)) +#define HD_IS_PLUGIN_LOADER_DEFAULT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HD_TYPE_PLUGIN_LOADER_DEFAULT_CLASS)) +#define HD_PLUGIN_LOADER_DEFAULT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HD_TYPE_PLUGIN_LOADER_DEFAULT, HDPluginLoaderDefaultClass)) + +struct _HDPluginLoaderDefaultClass +{ + HDPluginLoaderClass parent_class; +}; + +struct _HDPluginLoaderDefault +{ + HDPluginLoader parent; +}; + +GType hd_plugin_loader_default_get_type (void); + +G_END_DECLS + +#endif Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.c 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.c 2006-12-14 15:51:24 UTC (rev 8759) @@ -24,9 +24,10 @@ #include <glib-object.h> +#include "hd-plugin-loader-factory.h" #include "hd-plugin-loader.h" +#include "hd-plugin-loader-default.h" #include "hd-plugin-loader-legacy.h" -#include "hd-plugin-loader-factory.h" #include "hd-config.h" #define HD_PLUGIN_LOADER_FACTORY_GET_PRIVATE(object) \ @@ -138,7 +139,7 @@ error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND) { /* If no Type= assume old API */ - type = g_strdup (HD_PLUGIN_LOADER_OLD_API); + type = g_strdup (HD_PLUGIN_LOADER_TYPE_OLD_API); g_error_free (error); } else @@ -148,18 +149,26 @@ return NULL; } } + loader = (HDPluginLoader *) g_hash_table_lookup (priv->registry, type); if (!loader) { - if (!g_ascii_strcasecmp (type, HD_PLUGIN_LOADER_OLD_API) || - !g_ascii_strcasecmp (type, HD_PLUGIN_LOADER_OLD_API_HOME)) + if (!g_ascii_strcasecmp (type, HD_PLUGIN_LOADER_TYPE_OLD_API) || + !g_ascii_strcasecmp (type, HD_PLUGIN_LOADER_TYPE_OLD_API_HOME)) { /* Create instance of Old API plugin loader and add to registry for later use */ loader = g_object_new (HD_TYPE_PLUGIN_LOADER_LEGACY, NULL); g_hash_table_insert (priv->registry, type, loader); } + else if (!g_ascii_strcasecmp (type, HD_PLUGIN_LOADER_TYPE_DEFAULT)) + { + /* Create instance of Default API plugin loader and + add to registry for later use */ + loader = g_object_new (HD_TYPE_PLUGIN_LOADER_DEFAULT, NULL); + g_hash_table_insert (priv->registry, type, loader); + } else { g_warning ("Unknown Plugin Loader type: %s", type); Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.h 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.h 2006-12-14 15:51:24 UTC (rev 8759) @@ -42,8 +42,9 @@ #define HD_IS_PLUGIN_LOADER_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HD_TYPE_PLUGIN_LOADER_FACTORY)) #define HD_PLUGIN_LOADER_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HD_TYPE_PLUGIN_LOADER_FACTORY, HDPluginLoaderFactoryClass)) -#define HD_PLUGIN_LOADER_OLD_API "old_api" -#define HD_PLUGIN_LOADER_OLD_API_HOME "HildonHomeApplet" +#define HD_PLUGIN_LOADER_TYPE_DEFAULT "default" +#define HD_PLUGIN_LOADER_TYPE_OLD_API "old_api" +#define HD_PLUGIN_LOADER_TYPE_OLD_API_HOME "HildonHomeApplet" struct _HDPluginLoaderFactory { Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.c 2006-12-14 15:51:24 UTC (rev 8759) @@ -23,23 +23,19 @@ * */ -#include "hd-plugin-loader-legacy.h" #include <libhildondesktop/hildon-home-applet.h> #include <libhildondesktop/tasknavigator-item-wrapper.h> #include <glib/gkeyfile.h> #include <string.h> /* strcmp */ +#include "hd-plugin-loader-legacy.h" +#include "hd-config.h" + #define HD_PLUGIN_LOADER_LEGACY_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HD_TYPE_PLUGIN_LOADER_LEGACY, HDPluginLoaderLegacyPrivate)) G_DEFINE_TYPE (HDPluginLoaderLegacy, hd_plugin_loader_legacy, HD_TYPE_PLUGIN_LOADER); -#define HD_PLUGIN_LOADER_LEGACY_GROUP "Desktop Entry" -#define HD_PLUGIN_LOADER_LEGACY_KEY_TYPE "Type" -#define HD_PLUGIN_LOADER_LEGACY_KEY_X_HOME_APPLET "X-home-applet" -#define HD_PLUGIN_LOADER_LEGACY_KEY_X_HOME_APPLET_RESIZABLE "X-home-applet-resizable" -#define HD_PLUGIN_LOADER_LEGACY_KEY_X_TN "X-task-navigator-plugin" - /* Type of legacy plugin */ typedef enum { HD_PLUGIN_LOADER_LEGACY_TYPE_UNKNOWN = 0, @@ -57,7 +53,7 @@ typedef GtkWidget * (*HDPluginLoaderLegacyInitFunc) (HDPluginLoaderLegacy *l, GError **error); -typedef struct _HDPluginLoaderLegacyPrivate +struct _HDPluginLoaderLegacyPrivate { GModule *module; HDPluginLoaderLegacyType plugin_type; @@ -67,7 +63,7 @@ const gchar *library_key; const gchar *module_dir; -} HDPluginLoaderLegacyPrivate; +}; static const SymbolMapping home_symbol_mapping[] = { {"hildon_home_applet_lib_initialize", NULL}, @@ -99,7 +95,7 @@ HD_PLUGIN_LOADER_LEGACY_NAVIGATOR_N_SYMBOLS }; -static GtkWidget * +static GList * hd_plugin_loader_legacy_load (HDPluginLoader *loader, GError **error); static void @@ -148,7 +144,7 @@ g_type_class_add_private (object_class, sizeof (HDPluginLoaderLegacyPrivate)); } -static GtkWidget * +static GList * hd_plugin_loader_legacy_load (HDPluginLoader *loader, GError **error) { HDPluginLoaderLegacyPrivate *priv; @@ -178,14 +174,14 @@ case HD_PLUGIN_LOADER_LEGACY_TYPE_HOME: priv->symbol_mapping = (SymbolMapping *)home_symbol_mapping; priv->init_func = hd_plugin_loader_legacy_home_init; - priv->library_key = HD_PLUGIN_LOADER_LEGACY_KEY_X_HOME_APPLET; + priv->library_key = HD_PLUGIN_CONFIG_KEY_HOME_APPLET; priv->module_dir = HD_PLUGIN_LOADER_LEGACY_HOME_MODULE_PATH; break; case HD_PLUGIN_LOADER_LEGACY_TYPE_NAVIGATOR: priv->symbol_mapping = (SymbolMapping *)navigator_symbol_mapping; priv->init_func = hd_plugin_loader_legacy_navigator_init; - priv->library_key = HD_PLUGIN_LOADER_LEGACY_KEY_X_TN; + priv->library_key = HD_PLUGIN_CONFIG_KEY_TN; priv->module_dir = HD_PLUGIN_LOADER_LEGACY_NAVIGATOR_MODULE_PATH; break; default: @@ -212,7 +208,7 @@ &local_error); if (local_error) goto error; - return item; + return g_list_append (NULL, item); error: @@ -242,7 +238,7 @@ keyfile = hd_plugin_loader_get_key_file (HD_PLUGIN_LOADER (loader)); module_file = g_key_file_get_string (keyfile, - HD_PLUGIN_LOADER_LEGACY_GROUP, + HD_PLUGIN_CONFIG_GROUP, priv->library_key, &keyfile_error); @@ -331,8 +327,8 @@ /* Check for the Type = (which is only used for legacy Home applet */ value = g_key_file_get_string (keyfile, - HD_PLUGIN_LOADER_LEGACY_GROUP, - HD_PLUGIN_LOADER_LEGACY_KEY_TYPE, + HD_PLUGIN_CONFIG_GROUP, + HD_PLUGIN_CONFIG_KEY_TYPE, NULL); if (value && strcmp (value, "HildonHomeApplet") == 0) @@ -346,8 +342,8 @@ /* Check for the X-task-navigator-plugin = field */ value = g_key_file_get_string (keyfile, - HD_PLUGIN_LOADER_LEGACY_GROUP, - HD_PLUGIN_LOADER_LEGACY_KEY_X_TN, + HD_PLUGIN_CONFIG_GROUP, + HD_PLUGIN_CONFIG_KEY_TN, NULL); if (value) Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.h 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-legacy.h 2006-12-14 15:51:24 UTC (rev 8759) @@ -30,6 +30,10 @@ G_BEGIN_DECLS +typedef struct _HDPluginLoaderLegacy HDPluginLoaderLegacy; +typedef struct _HDPluginLoaderLegacyClass HDPluginLoaderLegacyClass; +typedef struct _HDPluginLoaderLegacyPrivate HDPluginLoaderLegacyPrivate; + #define HD_TYPE_PLUGIN_LOADER_LEGACY (hd_plugin_loader_legacy_get_type ()) #define HD_PLUGIN_LOADER_LEGACY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HD_TYPE_PLUGIN_LOADER_LEGACY, HDPluginLoaderLegacy)) #define HD_IS_PLUGIN_LOADER_LEGACY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HD_TYPE_PLUGIN_LOADER_LEGACY)) @@ -37,17 +41,17 @@ #define HD_IS_PLUGIN_LOADER_LEGACY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HD_TYPE_PLUGIN_LOADER_LEGACY_CLASS)) #define HD_PLUGIN_LOADER_LEGACY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HD_TYPE_PLUGIN_LOADER_LEGACY, HDPluginLoaderLegacyClass)) -typedef struct _HDPluginLoaderLegacyClass +struct _HDPluginLoaderLegacyClass { - HDPluginLoaderClass parent_class; -} HDPluginLoaderLegacyClass; + HDPluginLoaderClass parent_class; +}; -typedef struct _HDPluginLoaderLegacy +struct _HDPluginLoaderLegacy { - HDPluginLoader parent; -} HDPluginLoaderLegacy; + HDPluginLoader parent; +}; -GType hd_plugin_loader_legacy_get_type (void); +GType hd_plugin_loader_legacy_get_type (void); G_END_DECLS Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.c 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.c 2006-12-14 15:51:24 UTC (rev 8759) @@ -169,7 +169,7 @@ } } -GtkWidget * +GList * hd_plugin_loader_load (HDPluginLoader *loader, GError **error) { return HD_PLUGIN_LOADER_GET_CLASS (loader)->load (loader, error); Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.h 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader.h 2006-12-14 15:51:24 UTC (rev 8759) @@ -63,8 +63,8 @@ { GObjectClass parent_class; - GtkWidget *(* load) (HDPluginLoader *loader, - GError **error); + GList *(* load) (HDPluginLoader *loader, + GError **error); }; GType hd_plugin_loader_get_type (void); @@ -76,7 +76,7 @@ void hd_plugin_loader_set_key_file (HDPluginLoader *loader, GKeyFile *keyfile); -GtkWidget* hd_plugin_loader_load (HDPluginLoader *loader, +GList* hd_plugin_loader_load (HDPluginLoader *loader, GError **error); G_END_DECLS Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-manager.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-manager.c 2006-12-14 15:31:18 UTC (rev 8758) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-manager.c 2006-12-14 15:51:24 UTC (rev 8759) @@ -48,7 +48,7 @@ GtkContainer *container) { HDPluginLoader *loader; - GtkWidget *plugin; + GList *plugins, *iter; GError *error = NULL; g_return_if_fail (pm != NULL); @@ -72,7 +72,7 @@ return; } - plugin = hd_plugin_loader_load (loader, &error); + plugins = hd_plugin_loader_load (loader, &error); if (error) { @@ -82,14 +82,17 @@ return; } - g_object_set (G_OBJECT (plugin), - "id", plugin_path, - NULL); + for (iter = plugins; iter; iter = g_list_next (iter)) + { + GtkWidget *widget = GTK_WIDGET (iter->data); - gtk_widget_show (plugin); + g_object_set (G_OBJECT (widget), + "id", plugin_path, + NULL); - gtk_container_add (container, plugin); - + gtk_widget_show (widget); + gtk_container_add (container, widget); + } } static gint
- Previous message: [maemo-commits] r8758 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop libhildonwm
- Next message: [maemo-commits] r8760 - in projects/haf/branches/hildon-fm/1.x: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]