[maemo-commits] [maemo-commits] r8892 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Dec 29 16:19:05 EET 2006
- Previous message: [maemo-commits] r8891 - projects/haf/branches/maemo-af-desktop/hildon-desktop/src
- Next message: [maemo-commits] r8894 - projects/haf/trunk/libosso/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: lucasr Date: 2006-12-29 16:19:03 +0200 (Fri, 29 Dec 2006) New Revision: 8892 Added: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.c projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.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/src/Makefile.am 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/main.c Log: 2006-12-29 Lucas Rocha <lucas.rocha at nokia.com> Support for python plugins. * src/hd-plugin-loader-factory.[ch]: plugin loader for python plugins. * src/hd-plugin-loader-factory.[cg]: added python plugin loader. * src/Makefile.am: update to get new files into the build process. * configure.ac: complete reorganization and python checks added. Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2006-12-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog 2006-12-29 14:19:03 UTC (rev 8892) @@ -1,7 +1,15 @@ +2006-12-29 Lucas Rocha <lucas.rocha at nokia.com> + + Support for python plugins. + + * src/hd-plugin-loader-factory.[ch]: plugin loader for python plugins. + * src/hd-plugin-loader-factory.[cg]: added python plugin loader. + * src/Makefile.am: update to get new files into the build process. + * configure.ac: complete reorganization and python checks added. + 2006-12-29 Johan Bilien <johan.bilien at nokia.com> - * src/hd-home-background-dialog.[ch]: - - added + * src/hd-home-background-dialog.[ch]: added - import and large rewrite from maemo-af-desktop * background-manager/Makefile.am: Add object remote object definition to the exported header Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac 2006-12-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/configure.ac 2006-12-29 14:19:03 UTC (rev 8892) @@ -1,21 +1,9 @@ AC_INIT(Makefile.am) -AM_INIT_AUTOMAKE(maemo-af-desktop, 3.9) -AM_CONFIG_HEADER(config.h) -AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[Debug (default=no)])], - [hildon_use_debug=yes],[hildon_use_debug=no]) +AM_INIT_AUTOMAKE(hildon-desktop, 3.9) -AC_ARG_ENABLE(timestamping, - [AC_HELP_STRING([--enable-timestamping], - [Define HILDON_USE_TIMESTAMPING (default=no)])], - [hildon_use_timestamping=yes],[hildon_use_timestamping=no]) +AM_CONFIG_HEADER(config.h) -AC_ARG_ENABLE(instrumenting, - [AC_HELP_STRING([--enable-instrumenting], - [Compile with instrumentation flags (default=no)])], - [hildon_use_instrumenting=yes], - [hildon_use_instrumenting=no]) - AC_CANONICAL_HOST AC_PROG_CC @@ -23,38 +11,70 @@ AC_PROG_INSTALL AC_PROG_LIBTOOL +AC_HEADER_STDC + AC_PATH_X AC_PATH_XTRA AC_SUBST(X_CFLAGS) -AC_HEADER_STDC +#+++++++++++++++ +# Misc programs +#+++++++++++++++ AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool) -if test foobar${hildon_use_timestamping} = foobaryes +#++++++++++++++++++ +# Misc build flags +#++++++++++++++++++ + +AC_ARG_ENABLE(debug, + [AC_HELP_STRING([--enable-debug],[Debug (default=no)])], + [hildon_use_debug=yes],[hildon_use_debug=no]) + +AC_ARG_ENABLE(timestamping, + [AC_HELP_STRING([--enable-timestamping],[Define HILDON_USE_TIMESTAMPING (default=no)])], + [hildon_use_timestamping=yes],[hildon_use_timestamping=no]) + +AC_ARG_ENABLE(instrumenting, + [AC_HELP_STRING([--enable-instrumenting],[Compile with instrumentation flags (default=no)])], + [hildon_use_instrumenting=yes],[hildon_use_instrumenting=no]) + +if test "x${hildon_use_timestamping}" = "xyes" then CFLAGS="$CFLAGS -DHILDON_USE_TIMESTAMPING" fi -ALL_LINGUAS="en_GB" -AC_SUBST(ALL_LINGUAS) -AM_GLIB_GNU_GETTEXT +if test "x${hildon_use_instrumenting}" = "xyes" +then + CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wmissing-declarations -Werror -Wno-format-extra-args -g -finstrument-functions" +else + CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wmissing-declarations -Werror -Wno-format-extra-args" +fi # D-BUS headers do not compile with -pedantic. Once they are fixed, #return the flag #CFLAGS="$CFLAGS -Wall -ansi -pedantic -Wmissing-prototypes -Wmissing-declarations -Werror" #CFLAGS="$CFLAGS -Wall -ansi -Wmissing-prototypes -Wmissing-declarations -Werror" -if test foobar${hildon_use_instrumenting} = foobaryes -then - CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wmissing-declarations -Werror -Wno-format-extra-args -g -finstrument-functions" -else - CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wmissing-declarations -Werror -Wno-format-extra-args" -fi - AC_SUBST(CFLAGS) +#++++++++++++ +# i18n setup +#++++++++++++ + +ALL_LINGUAS="en_GB" +AC_SUBST(ALL_LINGUAS) +AM_GLIB_GNU_GETTEXT + +PKG_CHECK_MODULES(OSSOSETTINGS, osso-af-settings >= 0.8.1) +localedir=`pkg-config osso-af-settings --variable=localedir` +AC_SUBST(localedir) + +#+++++++++++++++++++++ +# Dependencies checks +#+++++++++++++++++++++ + PKG_CHECK_MODULES(ESD, esound) AC_SUBST(ESD_LIBS) AC_SUBST(ESD_CFLAGS) @@ -63,12 +83,10 @@ AC_SUBST(XTEST_LIBS) AC_SUBST(XTEST_CFLAGS) - PKG_CHECK_MODULES(HILDON_FM,hildon-fm >= 0.15 ) AC_SUBST(HILDON_FM_LIBS) AC_SUBST(HILDON_FM_CFLAGS) - PKG_CHECK_MODULES(LIBXML,libxml-2.0 ) AC_SUBST(LIBXML_LIBS) AC_SUBST(LIBXML_CFLAGS) @@ -104,10 +122,6 @@ PKG_CHECK_MODULES(GDK, gdk-2.0 >= 1.3.12) AC_SUBST(GDK_LIBS) -PKG_CHECK_MODULES(OSSOSETTINGS, osso-af-settings >= 0.8.1) -localedir=`pkg-config osso-af-settings --variable=localedir` -AC_SUBST(localedir) - PKG_CHECK_MODULES(XLIBS, x11) AC_SUBST(XLIBS_CFLAGS) AC_SUBST(XLIBS_ERROR_LIBS) @@ -116,9 +130,9 @@ AC_SUBST(OSSO_HELP_CFLAGS) AC_SUBST(OSSO_HELP_LIBS) -ALL_LINGUAS="en_GB" -AC_SUBST(ALL_LINGUAS) -AM_GLIB_GNU_GETTEXT +#+++++++++++++++++++ +# Directories setup +#+++++++++++++++++++ hildondesktopentrydir=`pkg-config osso-af-settings --variable=desktopentrydir` hildondesktoplibdir=${libdir}/hildon-desktop @@ -148,21 +162,80 @@ hildoncpdesktopentrydir=${datadir}/applications/hildon-control-panel AC_SUBST(hildoncpdesktopentrydir) +#++++++++++++++++++++ +# Background Manager +#++++++++++++++++++++ + HILDON_BACKGROUND_MANAGER_SERVICE="org.maemo.hildon.background_manager" +HILDON_BACKGROUND_MANAGER_OBJECT_PATH="/org/maemo/hildon/background_manager" +HILDON_BACKGROUND_MANAGER_INTERFACE="org.maemo.hildon.background_manager" AC_SUBST(HILDON_BACKGROUND_MANAGER_SERVICE) -HILDON_BACKGROUND_MANAGER_OBJECT_PATH="/org/maemo/hildon/background_manager" AC_SUBST(HILDON_BACKGROUND_MANAGER_OBJECT_PATH) -HILDON_BACKGROUND_MANAGER_INTERFACE="org.maemo.hildon.background_manager" AC_SUBST(HILDON_BACKGROUND_MANAGER_INTERFACE) -AC_OUTPUT(Makefile \ - libhildonwm/Makefile \ - libhildonwm/libhildonwm.pc \ - libhildondesktop/Makefile \ - libhildondesktop/libhildondesktop.pc \ - background-manager/Makefile \ - background-manager/hildon-background-manager.service \ - background-manager/background-manager.xml \ - background-manager/background-manager-dbus.h \ - data/Makefile \ - src/Makefile) +#++++++++ +# Python +#++++++++ + +AC_MSG_CHECKING([whether Python support is requested]) +AC_ARG_ENABLE(python, + AS_HELP_STRING([--enable-python],[Enable python support]), + [enable_python=$enableval have_python=$enableval], + [enable_python=autodetect have_python=yes]) +AC_MSG_RESULT([$enable_python]) + +if test "x$have_python" != "xno"; then + AM_PATH_PYTHON([2.3],[],[no]) + if test "x$PYTHON" = "x:"; then + have_python=no + fi +fi + +dnl if test "x$have_python" != "xno"; then +dnl AM_CHECK_PYTHON_HEADERS([],[have_python=no]) +dnl fi + +if test "x$have_python" != "xno"; then + PYTHON_LIBS="-lpython$PYTHON_VERSION" + PYTHON_LIB_LOC="-L$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/config" + PYTHON_CFLAGS="-I$PYTHON_PREFIX/include/python$PYTHON_VERSION" + AC_SUBST(PYTHON_LIBS) + AC_SUBST(PYTHON_LIB_LOC) + AC_SUBST(PYTHON_CFLAGS) + + PKG_CHECK_MODULES(PYGOBJECT, pygobject-2.0 >= 2.6) + AC_SUBST(PYGOBJECT_LIBS) + AC_SUBST(PYGOBJECT_CFLAGS) + + PKG_CHECK_MODULES(PYGTK, pygtk-2.0 >= 2.6) + AC_SUBST(PYGTK_CFLAGS) + AC_SUBST(PYGTK_LIBS) +fi + +if test "x$have_python" != "xyes"; then + if test "x$enable_python" = "xyes"; then + AC_MSG_ERROR([Python not found]) + elif test "x$enable_python" = "xautodetect"; then + enable_python=no + AC_MSG_WARN([Python not found, disabling python support]) + fi +elif test "x$enable_python" != "xno"; then + enable_python=yes + AC_DEFINE([ENABLE_PYTHON],[1],[Define to compile with python support]) +fi + +AM_CONDITIONAL([ENABLE_PYTHON],[test "x$enable_python" = "xyes"]) + +AC_OUTPUT([ +Makefile +libhildonwm/Makefile +libhildonwm/libhildonwm.pc +libhildondesktop/Makefile +libhildondesktop/libhildondesktop.pc +background-manager/Makefile +background-manager/hildon-background-manager.service +background-manager/background-manager.xml +background-manager/background-manager-dbus.h +data/Makefile +src/Makefile +]) 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-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/Makefile.am 2006-12-29 14:19:03 UTC (rev 8892) @@ -23,28 +23,45 @@ hildon_desktop_CPPFLAGS = \ $(HILDON_CFLAGS) \ - $(HILDON_FM_CFLAGS) \ + $(HILDON_FM_CFLAGS) \ $(OSSO_CFLAGS) \ $(OSSO_HELP_CFLAGS) \ -DLOCALEDIR=\"$(localedir)\" \ -I$(top_srcdir) \ -DHD_DESKTOP_CONFIG_PATH=\"$(hildondesktopconfdir)\" \ -DHD_DESKTOP_MODULE_PATH=\"$(hildondesktoplibdir)\" \ + -DHD_DESKTOP_BACKGROUNDS_PATH=\"$(hildondesktopbackgroundsdir)\" \ -DHD_PLUGIN_LOADER_LEGACY_HOME_MODULE_PATH=\"$(hildonhomelibdir)\" \ - -DHD_PLUGIN_LOADER_LEGACY_NAVIGATOR_MODULE_PATH=\"$(hildonnavigatorlibdir)\"\ - -DHD_DESKTOP_BACKGROUNDS_PATH=\"$(hildondesktopbackgroundsdir)\" + -DHD_PLUGIN_LOADER_LEGACY_NAVIGATOR_MODULE_PATH=\"$(hildonnavigatorlibdir)\" +if ENABLE_PYTHON +hildon_desktop_CPPFLAGS += \ + $(PYTHON_CFLAGS) \ + $(PYGOBJECT_CFLAGS) \ + $(PYGTK_CFLAGS) +endif + hildon_desktop_LDFLAGS = \ $(HILDON_LIBS) \ $(HILDON_FM_LIBS) \ $(OSSO_LIBS) \ $(OSSO_HELP_LIBS) +if ENABLE_PYTHON +hildon_desktop_LDFLAGS += \ + $(PYTHON_LIBS) \ + $(PYTHON_LIB_LOC) \ + $(PYGOBJECT_LIBS) \ + $(PYGTK_LIBS) +endif + hildon_desktop_LDADD = $(top_srcdir)/libhildondesktop/libhildondesktop.la +PYTHON_SOURCES = \ + hd-plugin-loader-python.c \ + hd-plugin-loader-python.h + PLUGIN_MANAGER_SOURCES = \ - hd-desktop.c \ - hd-desktop.h \ hd-plugin-manager.c \ hd-plugin-manager.h \ hd-plugin-loader-factory.c \ @@ -54,18 +71,25 @@ 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 \ - hd-select-plugins-dialog.h \ - hd-config.h + hd-plugin-loader-legacy.h +if ENABLE_PYTHON +PLUGIN_MANAGER_SOURCES += $(PYTHON_SOURCES) +endif + HOME_SOURCES = \ - hd-home-window.c \ - hd-home-window.h \ + hd-home-window.c \ + hd-home-window.h \ hd-home-background-dialog.c \ hd-home-background-dialog.h -hildon_desktop_SOURCES = \ - $(HOME_SOURCES) \ - $(PLUGIN_MANAGER_SOURCES) \ - main.c +hildon_desktop_SOURCES = \ + $(HOME_SOURCES) \ + $(PLUGIN_MANAGER_SOURCES) \ + hd-desktop.c \ + hd-desktop.h \ + hd-select-plugins-dialog.c \ + hd-select-plugins-dialog.h \ + hd-config.h \ + main.c + 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-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.c 2006-12-29 14:19:03 UTC (rev 8892) @@ -22,6 +22,10 @@ * */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + #include <glib-object.h> #include "hd-plugin-loader-factory.h" @@ -30,6 +34,10 @@ #include "hd-plugin-loader-legacy.h" #include "hd-config.h" +#ifdef ENABLE_PYTHON +#include "hd-plugin-loader-python.h" +#endif + #define HD_PLUGIN_LOADER_FACTORY_GET_PRIVATE(object) \ (G_TYPE_INSTANCE_GET_PRIVATE ((object), HD_TYPE_PLUGIN_LOADER_FACTORY, HDPluginLoaderFactoryPrivate)) @@ -165,6 +173,12 @@ { loader = g_object_new (HD_TYPE_PLUGIN_LOADER_DEFAULT, NULL); } +#ifdef ENABLE_PYTHON + else if (!g_ascii_strcasecmp (type, HD_PLUGIN_LOADER_TYPE_PYTHON)) + { + loader = g_object_new (HD_TYPE_PLUGIN_LOADER_PYTHON, NULL); + } +#endif 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-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-factory.h 2006-12-29 14:19:03 UTC (rev 8892) @@ -45,6 +45,9 @@ #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" +#ifdef ENABLE_PYTHON +#define HD_PLUGIN_LOADER_TYPE_PYTHON "python" +#endif struct _HDPluginLoaderFactory { Added: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.c 2006-12-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.c 2006-12-29 14:19:03 UTC (rev 8892) @@ -0,0 +1,280 @@ +/* + * 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 <Python.h> +#include <pygobject.h> +#include <pygtk/pygtk.h> +#include <libhildondesktop/hildon-desktop-plugin.h> + +#include "hd-plugin-loader-python.h" +#include "hd-config.h" + +#define HD_PLUGIN_LOADER_PYTHON_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HD_TYPE_PLUGIN_LOADER_PYTHON, HDPluginLoaderPythonPrivate)) + +G_DEFINE_TYPE (HDPluginLoaderPython, hd_plugin_loader_python, HD_TYPE_PLUGIN_LOADER); + +struct _HDPluginLoaderPythonPrivate +{ + gboolean initialised; +}; + +static GList * +hd_plugin_loader_python_open_module (HDPluginLoaderPython *loader, + GError **error) +{ + HDPluginLoaderPythonPrivate *priv; + PyObject *pModules, *pModule, *pReload, *pDict, *pFunc, *pList; + GKeyFile *keyfile; + GList *objects = NULL; + GError *keyfile_error = NULL; + gchar *module_file = NULL; + gchar *module_name = NULL; + + g_return_val_if_fail (HD_IS_PLUGIN_LOADER_PYTHON (loader), NULL); + + priv = loader->priv; + + 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 (g_path_is_absolute (module_file)) + { + module_name = g_path_get_basename (module_file); + + g_free (module_file); + } + else + { + module_name = module_file; + } + + pModules = PySys_GetObject ("modules"); + + g_assert (pModules != NULL); + + pModule = PyDict_GetItemString (pModules, module_name); + + if (pModule == NULL) + { + pModule = PyImport_ImportModule (module_name); + + if (pModule == NULL) + { + PyErr_Print (); + PyErr_Clear (); + + g_warning ("Could not initialize Python module '%s'", + module_name); + } + } + else + { + pReload = PyImport_ReloadModule (pModule); + + if (pReload == NULL) + { + PyErr_Print (); + PyErr_Clear (); + + g_warning ("Could not reload Python module '%s'\n" + "Falling back to previous version", + module_name); + } + else + { + Py_DECREF (pReload); + } + } + + if (pModule != NULL) + { + pDict = PyModule_GetDict (pModule); + + pFunc = PyDict_GetItemString (pDict, "hd_plugin_get_objects"); + + if (pFunc && PyCallable_Check (pFunc)) + { + pList = PyObject_CallObject (pFunc, NULL); + + if (pList != NULL && PyList_Check (pList)) + { + int i; + + for (i = 0; i < PyList_Size (pList); i++) + { + PyObject *pObject = PyList_GetItem (pList, i); + + /* FIXME: add type checking here */ + if (pObject != NULL) + { + objects = g_list_append (objects, ((PyGObject *) pObject)->obj); + } + } + } + else + { + Py_DECREF(pList); + Py_DECREF(pFunc); + Py_DECREF(pModule); + + PyErr_Print (); + PyErr_Clear (); + + g_warning ("hd_plugin_get_objects call failed in python module"); + + return NULL; + } + } + else + { + if (PyErr_Occurred ()) + { + PyErr_Print (); + PyErr_Clear (); + } + + g_warning ("Cannot find function \"%s\"\n", "hd_plugin_get_objects"); + } + + Py_XDECREF(pFunc); + Py_DECREF(pModule); + } + else + { + PyErr_Print (); + PyErr_Clear (); + + g_warning ("Failed to load \"%s\"\n", module_name); + } + + g_free (module_name); + + return objects; +} + +static GList * +hd_plugin_loader_python_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; + } + + objects = + hd_plugin_loader_python_open_module (HD_PLUGIN_LOADER_PYTHON (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_python_finalize (GObject *loader) +{ + HDPluginLoaderPythonPrivate *priv; + + g_return_if_fail (loader != NULL); + g_return_if_fail (HD_IS_PLUGIN_LOADER_PYTHON (loader)); + + priv = HD_PLUGIN_LOADER_PYTHON (loader)->priv; + + if (priv->initialised) + { + Py_Finalize (); + } + + G_OBJECT_CLASS (hd_plugin_loader_python_parent_class)->finalize (loader); +} + +static void +hd_plugin_loader_python_init (HDPluginLoaderPython *loader) +{ + PyObject *pPath, *pStr; + + loader->priv = HD_PLUGIN_LOADER_PYTHON_GET_PRIVATE (loader); + + Py_Initialize (); + loader->priv->initialised = TRUE; + + init_pygobject (); + init_pygtk (); + + pStr = PyString_FromString (HD_DESKTOP_MODULE_PATH); + pPath = PySys_GetObject ("path"); + PyList_Append (pPath, pStr); +} + +static void +hd_plugin_loader_python_class_init (HDPluginLoaderPythonClass *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_python_finalize; + + loader_class->load = hd_plugin_loader_python_load; + + g_type_class_add_private (object_class, sizeof (HDPluginLoaderPythonPrivate)); +} Added: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.h =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.h 2006-12-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/hd-plugin-loader-python.h 2006-12-29 14:19:03 UTC (rev 8892) @@ -0,0 +1,60 @@ +/* + * 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_PYTHON_H__ +#define __HD_PLUGIN_LOADER_PYTHON_H__ + +#include "hd-plugin-loader.h" + +G_BEGIN_DECLS + +typedef struct _HDPluginLoaderPython HDPluginLoaderPython; +typedef struct _HDPluginLoaderPythonClass HDPluginLoaderPythonClass; +typedef struct _HDPluginLoaderPythonPrivate HDPluginLoaderPythonPrivate; + +#define HD_TYPE_PLUGIN_LOADER_PYTHON (hd_plugin_loader_python_get_type ()) +#define HD_PLUGIN_LOADER_PYTHON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HD_TYPE_PLUGIN_LOADER_PYTHON, HDPluginLoaderPython)) +#define HD_IS_PLUGIN_LOADER_PYTHON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HD_TYPE_PLUGIN_LOADER_PYTHON)) +#define HD_PLUGIN_LOADER_PYTHON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HD_TYPE_PLUGIN_LOADER_PYTHON_CLASS, HDPluginLoaderPythonClass)) +#define HD_IS_PLUGIN_LOADER_PYTHON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HD_TYPE_PLUGIN_LOADER_PYTHON_CLASS)) +#define HD_PLUGIN_LOADER_PYTHON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HD_TYPE_PLUGIN_LOADER_PYTHON, HDPluginLoaderPythonClass)) + +struct _HDPluginLoaderPython +{ + HDPluginLoader parent; + + HDPluginLoaderPythonPrivate *priv; +}; + +struct _HDPluginLoaderPythonClass +{ + HDPluginLoaderClass parent_class; +}; + +GType hd_plugin_loader_python_get_type (void); + +G_END_DECLS + +#endif Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/src/main.c =================================================================== --- projects/haf/branches/maemo-af-desktop/hildon-desktop/src/main.c 2006-12-29 13:29:33 UTC (rev 8891) +++ projects/haf/branches/maemo-af-desktop/hildon-desktop/src/main.c 2006-12-29 14:19:03 UTC (rev 8892) @@ -25,6 +25,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif + #include <locale.h> #include <glib/gi18n.h> #include <gtk/gtk.h>
- Previous message: [maemo-commits] r8891 - projects/haf/branches/maemo-af-desktop/hildon-desktop/src
- Next message: [maemo-commits] r8894 - projects/haf/trunk/libosso/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]