[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.org
Date: Thu Dec 14 17:51:26 EET 2006
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


More information about the maemo-commits mailing list