[beryl-commits] r1523 - in trunk/beryl-python: . src

svn at server.beryl-project.org svn at server.beryl-project.org
Mon Dec 4 03:43:02 CET 2006


Author: svn
Date: 2006-12-04 03:43:01 +0100 (Mon, 04 Dec 2006)
New Revision: 1523

Added:
   trunk/beryl-python/src/berylsettings.pyx
Removed:
   trunk/beryl-python/src/berylsettings.c
Modified:
   trunk/beryl-python/ChangeLog
   trunk/beryl-python/configure.ac
   trunk/beryl-python/src/Makefile.am
Log:


Modified: trunk/beryl-python/ChangeLog
===================================================================
--- trunk/beryl-python/ChangeLog	2006-12-04 02:09:20 UTC (rev 1522)
+++ trunk/beryl-python/ChangeLog	2006-12-04 02:43:01 UTC (rev 1523)
@@ -1,3 +1,10 @@
+2006-12-03  Travis Watkins  <alleykat at gmail.com>
+
+	* src/berylsettings.c: removed
+	* src/berylsettings.pyx:
+	  configure.ac:
+	  src/Makefile.am: rewrite in pyrex
+
 2006-11-29  Travis Watkins  <alleykat at gmail.com>
 
 	* src/berylsettings.c: initial write support, doesn't quite work

Modified: trunk/beryl-python/configure.ac
===================================================================
--- trunk/beryl-python/configure.ac	2006-12-04 02:09:20 UTC (rev 1522)
+++ trunk/beryl-python/configure.ac	2006-12-04 02:43:01 UTC (rev 1523)
@@ -26,6 +26,11 @@
 PKG_CHECK_MODULES(PYBERYL, $PYBERYL_REQUIRES)
 AC_SUBST(PYBERYL_REQUIRES)
 
+AC_CHECK_PROGS(PYREX, pyrexc)
+if test -z "$PYREX" ; then
+	AC_MSG_ERROR([Couldn't find Pyrex])
+fi
+
 AC_CONFIG_FILES([
 	Makefile
 	src/Makefile

Modified: trunk/beryl-python/src/Makefile.am
===================================================================
--- trunk/beryl-python/src/Makefile.am	2006-12-04 02:09:20 UTC (rev 1522)
+++ trunk/beryl-python/src/Makefile.am	2006-12-04 02:43:01 UTC (rev 1523)
@@ -22,5 +22,6 @@
 berylsettings_la_LIBADD = @PYBERYL_LIBS@
 berylsettings_la_SOURCES = berylsettings.c
 
+berylsettings.c:
+	-pyrexc berylsettings.pyx
 
-

Deleted: trunk/beryl-python/src/berylsettings.c
===================================================================
--- trunk/beryl-python/src/berylsettings.c	2006-12-04 02:09:20 UTC (rev 1522)
+++ trunk/beryl-python/src/berylsettings.c	2006-12-04 02:43:01 UTC (rev 1523)
@@ -1,827 +0,0 @@
-/*
- *   beryl-python - python wrapper for libberylsettings
- *   Copyright (C) 2006  Travis Watkins
- *
- *   This library is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU Library General Public
- *   License as published by the Free Software Foundation; either
- *   version 2 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
- *   Library General Public License for more details.
- *
- *   You should have received a copy of the GNU Library General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <config.h>
-
-#include <Python.h>
-#include <beryl-settings.h>
-#include <glib.h>
-
-#define REGISTER_TYPE(t, n)  G_STMT_START              \
-	{                                                  \
-		PyType_Ready (&t);                             \
-		PyModule_AddObject (mod, n, (PyObject *)&t);  \
-	} G_STMT_END
-
-typedef struct
-{
-	PyObject_HEAD
-	BerylSettingsContext *context;
-} PyBerylSettingsContext;
-
-typedef struct
-{
-	PyObject_HEAD
-	BerylSettingsContext *context;
-	BerylSettingsPlugin *plugin;
-	PyObject *setting_names;
-} PyBerylSettingsPlugin;
-
-typedef struct
-{
-	PyListObject list;
-} PyBerylSettingsList;
-
-static PyTypeObject PyBerylSettingsList_Type;
-
-static void      pyberylsettings_context_dealloc            (PyBerylSettingsContext*);
-static PyBerylSettingsContext *pyberylsettings_context_wrap (BerylSettingsContext*);
-static PyObject *pyberylsettings_context_getattro           (PyBerylSettingsContext*, PyObject*);
-
-static PyBerylSettingsPlugin *pyberylsettings_plugin_wrap (BerylSettingsPlugin*, BerylSettingsContext*);
-static PyObject *pyberylsettings_plugin_getattro          (PyBerylSettingsPlugin*, PyObject*);
-static int       pyberylsettings_plugin_setattro          (PyBerylSettingsPlugin*, PyObject*, PyObject*);
-
-static int       pyberylsettings_list_setattro        (PyBerylSettingsList*, PyObject*, PyObject*);
-
-void initberylsettings (void);
-
-gint modifiers[] = 
-{
-	ShiftMask,
-	ControlMask,
-	CompAltMask,
-	CompSuperMask,
-	CompHyperMask,
-	CompMetaMask,
-	CompModeSwitchMask,
-	Mod1Mask,
-	Mod2Mask,
-	Mod3Mask,
-	Mod4Mask,
-	Mod5Mask,
-};
-
-gchar * modifier_names[] = 
-{
-    "Shift",
-    "Control",
-    "Alt",
-    "Super",
-    "Hyper",
-    "Meta",
-    "Mode",
-    "Mod1",
-    "Mod2",
-    "Mod3",
-    "Mod4",
-    "Mod5",
-};
-#define NMODIFIERS (sizeof(modifier_names)/sizeof(gchar *))
-
-static inline PyObject *
-lookup_item_type_str (const char *item_type_str)
-{
-	PyObject *module;
-	module = PyDict_GetItemString (PyImport_GetModuleDict (), "berylsettings");
-	return PyDict_GetItemString (PyModule_GetDict (module), item_type_str);
-}
-
-static PyObject *
-get_py_type_for_value(BerylSettingValue *value, BerylSettingType type)
-{
-	gboolean bool_data;
-	int int_data;
-	gdouble float_data;
-	const gchar *str_data;
-	GSList * list_data;
-	gint keysym, keymods, button, buttonmods, edgemask;
-	gboolean bell, key_enabled, button_enabled;
-	BerylSettingColorValue color_data;
-	BerylSetting *setting = value->parent;
-	BerylSettingType list_type;
-	PyObject *color_list = PyObject_NEW (PyBerylSettingsList, &PyBerylSettingsList_Type);
-	int i;
-	PyObject *str_list;
-	gchar *binding_string;
-	PyObject *binding_list = PyList_New(4);
-	// populate tuple with None
-	PyList_SetItem(binding_list, 0, Py_None);
-	PyList_SetItem(binding_list, 1, Py_None);
-	PyList_SetItem(binding_list, 2, Py_None);
-	PyList_SetItem(binding_list, 3, Py_None);
-
-	switch (type)
-	{
-	case BERYL_SETTING_TYPE_BOOL:
-		if (beryl_setting_value_get_bool(value, &bool_data))
-		{
-			return PyBool_FromLong(bool_data);
-		}
-		break;
-	case BERYL_SETTING_TYPE_INT:
-		if (beryl_setting_value_get_int(value, &int_data))
-		{
-			return PyInt_FromLong(int_data);
-		}
-		break;
-	case BERYL_SETTING_TYPE_FLOAT:
-		if (beryl_setting_value_get_float(value, &float_data))
-		{
-			return PyFloat_FromDouble(float_data);
-		}
-		break;
-	case BERYL_SETTING_TYPE_STRING:
-		if (beryl_setting_value_get_string(value, &str_data))
-		{
-			return PyString_FromString(str_data);
-		}
-		break;
-	case BERYL_SETTING_TYPE_COLOR:
-		if (beryl_setting_value_get_color(value, &color_data))
-		{
-			color_list = PyList_New(4);
-			//set red, green, blue, and alpha to list
-			PyList_SetItem(color_list, 0, PyLong_FromLong(((gdouble)color_data.array.array[0]/0xffff)));
-			PyList_SetItem(color_list, 1, PyLong_FromLong(((gdouble)color_data.array.array[1]/0xffff)));
-			PyList_SetItem(color_list, 2, PyLong_FromLong(((gdouble)color_data.array.array[2]/0xffff)));
-			PyList_SetItem(color_list, 3, PyLong_FromLong(((gdouble)color_data.array.array[3]/0xffff)));
-			return color_list;
-		}
-		break;
-	case BERYL_SETTING_TYPE_BINDING:
-		if (beryl_setting_get_can_set_button(setting, &bool_data) && bool_data)
-		{
-			binding_string = g_strdup("");
-			beryl_setting_value_get_button_enabled(value, &button_enabled);
-			if (!button_enabled)
-			{
-				PyList_SetItem(binding_list, 0, PyString_FromString("Disabled"));
-			}
-			else
-			{
-				gchar *temp;
-				beryl_setting_value_get_buttonmods(value, &buttonmods);
-				for(i=0;i<NMODIFIERS;i++)
-				{
-					if ((buttonmods & modifiers[i]))
-					{
-						temp = g_strconcat(binding_string, g_strdup_printf("<%s>", modifier_names[i]), NULL);
-						g_free(binding_string);
-						binding_string = temp;
-					}
-				}
-				beryl_setting_value_get_button(value, &button);
-				temp = g_strconcat(binding_string, g_strdup_printf("Button%d", button), NULL);
-				g_free(binding_string);
-				PyList_SetItem(binding_list, 0, PyString_FromString(temp));
-				g_free(temp);
-			}
-		}
-		if (beryl_setting_get_can_set_key(setting, &bool_data) && bool_data)
-		{
-			binding_string = g_strdup("");
-			beryl_setting_value_get_key_enabled(value, &key_enabled);
-			if (!key_enabled)
-			{
-				PyList_SetItem(binding_list, 1, PyString_FromString("Disabled"));
-			}
-			else
-			{
-				gchar *temp;
-				beryl_setting_value_get_keymods(value, &keymods);
-				for(i=0;i<NMODIFIERS;i++)
-				{
-					if ((keymods & modifiers[i]))
-					{
-						temp = g_strconcat(binding_string, g_strdup_printf("<%s>", modifier_names[i]), NULL);
-						g_free(binding_string);
-						binding_string = temp;
-					}
-				}
-				beryl_setting_value_get_keysym(value, &keysym);
-				if (!XKeysymToString(keysym))
-				{
-					temp = g_strconcat(binding_string, "None", NULL);
-				}
-				else
-				{
-					temp = g_strconcat(binding_string, XKeysymToString(keysym), NULL);
-				}
-				g_free(binding_string);
-				PyList_SetItem(binding_list, 1, PyString_FromString(temp));
-				g_free(temp);
-			}
-		}
-		if (beryl_setting_get_can_set_edgemask(setting, &bool_data) && bool_data)
-		{
-			beryl_setting_value_get_edgemask(value, &edgemask);
-			if (!edgemask)
-			{
-				PyList_SetItem(binding_list, 2, PyString_FromString("Disabled"));
-			}
-			else
-			{
-				for (i=0;i<SCREEN_EDGE_NUM;i++)
-				{
-					if (edgemask & (1<<i))
-					{
-						if (i == 0)
-							PyList_SetItem(binding_list, 2, PyString_FromString("Left"));
-						if (i == 1)
-							PyList_SetItem(binding_list, 2, PyString_FromString("Right"));
-						if (i == 2)
-							PyList_SetItem(binding_list, 2, PyString_FromString("Top"));
-						if (i == 3)
-							PyList_SetItem(binding_list, 2, PyString_FromString("Bottom"));
-						if (i == 4)
-							PyList_SetItem(binding_list, 2, PyString_FromString("TopLeft"));
-						if (i == 5)
-							PyList_SetItem(binding_list, 2, PyString_FromString("TopRight"));
-						if (i == 6)
-							PyList_SetItem(binding_list, 2, PyString_FromString("BottomLeft"));
-						if (i == 7)
-							PyList_SetItem(binding_list, 2, PyString_FromString("BottomRight"));
-					}
-				}
-			}
-		}
-		if (beryl_setting_get_can_set_bell(setting, &bool_data) && bool_data)
-		{
-			beryl_setting_value_get_bell(value, &bell);
-			PyList_SetItem(binding_list, 3, PyBool_FromLong(bell));
-		}
-		return binding_list;
-		break;
-	case BERYL_SETTING_TYPE_LIST:
-		beryl_setting_get_list_type(setting, &list_type);
-		if (list_type == BERYL_SETTING_TYPE_STRING)
-		{
-			beryl_setting_value_get_value_list(value, &list_data);
-			str_list = PyList_New(g_slist_length(list_data));
-
-			i = 0;
-			while (list_data)
-			{
-				beryl_setting_value_get_string(list_data->data, &str_data);
-				PyList_SetItem(str_list, i, PyString_FromString(str_data));
-				list_data = list_data->next;
-				i++;
-			}
-			return str_list;
-		}
-		break;
-	}
-	Py_INCREF (Py_None);
-	return Py_None;
-}
-
-static int
-set_value_for_py_type (BerylSetting *setting, PyObject *value)
-{
-	printf("setting things, oh no!\n");
-	gboolean bool_data;
-	gint int_data;
-	gdouble float_data;
-	const gchar *str_data;
-	BerylSettingColorValue color_data;
-
-	switch (setting->type)
-	{
-		case BERYL_SETTING_TYPE_BOOL:
-			if (!PyBool_Check(value))
-			{
-				return -1;
-			}
-			bool_data = PyInt_AsLong(value);
-			beryl_setting_value_set_bool(&setting->value, &bool_data);
-			break;
-		case BERYL_SETTING_TYPE_INT:
-			if (!PyInt_Check(value))
-			{
-				return -1;
-			}
-			int_data = (gint)PyInt_AsLong(value);
-			beryl_setting_value_set_int(&setting->value, &int_data);
-			break;
-		case BERYL_SETTING_TYPE_FLOAT:
-			if (!PyInt_Check(value))
-			{
-				return -1;
-			}
-			float_data = PyInt_AsLong(value);
-			beryl_setting_value_set_float(&setting->value, &float_data);
-			break;
-		case BERYL_SETTING_TYPE_STRING:
-			if (!PyString_Check(value))
-			{
-				return -1;
-			}
-			str_data = PyString_AsString(value);
-			beryl_setting_value_set_string(&setting->value, &str_data);
-			break;
-		case BERYL_SETTING_TYPE_COLOR:
-			if (!PyList_Check(value) && PyList_Size(value) != 4)
-			{
-				return -1;
-			}
-			if (!PyInt_Check(PyList_GetItem(value, 0)) &&
-				!PyInt_Check(PyList_GetItem(value, 1)) &&
-				!PyInt_Check(PyList_GetItem(value, 2)) &&
-				!PyInt_Check(PyList_GetItem(value, 3)))
-			{
-				return -1;
-			}
-			color_data.color.red = PyInt_AsLong(PyList_GetItem(value, 0)) * 0xffff;
-			color_data.color.green = PyInt_AsLong(PyList_GetItem(value, 1)) * 0xffff;
-			color_data.color.blue = PyInt_AsLong(PyList_GetItem(value, 2)) * 0xffff;
-			color_data.color.alpha = PyInt_AsLong(PyList_GetItem(value, 3)) * 0xffff;
-			beryl_setting_value_set_color(&setting->value, &color_data);
-            break;
-	}
-	return 0;
-}
-
-static PyObject *
-pyberylsettings_context_find_plugin (PyBerylSettingsContext *self, PyObject *args)
-{
-	BerylSettingsPlugin    *plugin;
-	PyBerylSettingsPlugin  *retval;
-	char *name;
-
-	if (!PyArg_ParseTuple (args, "s:berylsettings.Context.find_plugin", &name))
-		return NULL;
-
-	if ((strcmp(name, "general")==0))
-	{
-		name = NULL;
-	}
-	plugin = beryl_settings_context_find_plugin (self->context, name);
-	if (plugin == NULL)
-	{
-		Py_INCREF (Py_None);
-		return Py_None;
-	}
-
-	retval = pyberylsettings_plugin_wrap (plugin, self->context);
-	return (PyObject *)retval;
-}
-
-static PyObject *
-pyberylsettings_context_get_plugins(PyBerylSettingsContext *self, PyObject *args)
-{
-	GSList *cur;
-	PyObject *tuple;
-	PyBerylSettingsPlugin *plugin;
-
-	cur = beryl_settings_context_get_plugins(self->context);
-	tuple = PyTuple_New (g_slist_length(cur));
-
-	int i = 0;
-	for (;cur; cur = cur->next)
-	{
-		plugin = pyberylsettings_plugin_wrap(cur->data, self->context);
-		PyTuple_SetItem (tuple, i, (PyObject *)plugin);
-		i++;
-	}
-	return tuple;
-}
-
-static PyObject *
-pyberylsettings_plugin_get_name (PyBerylSettingsPlugin *self, PyObject *args)
-{
-	const gchar *name = beryl_settings_plugin_get_name(self->plugin);
-	if (name == NULL)
-		name = "general";
-	return PyString_FromString(name);
-}
-
-static PyObject *
-pyberylsettings_plugin_get_short_desc (PyBerylSettingsPlugin *self, PyObject *args)
-{
-	const gchar *short_desc = beryl_settings_plugin_get_short_desc(self->plugin);
-	if (short_desc == NULL)
-		short_desc = "General Settings";
-	return PyString_FromString(short_desc);
-}
-
-static PyObject *
-pyberylsettings_plugin_get_long_desc (PyBerylSettingsPlugin *self, PyObject *args)
-{
-	const gchar *long_desc = beryl_settings_plugin_get_long_desc(self->plugin);
-	if (long_desc == NULL)
-		long_desc = "Settings for beryl as a whole";
-	return PyString_FromString(long_desc);
-}
-
-static PyObject *
-pyberylsettings_plugin_get_setting_info (PyBerylSettingsPlugin *self, PyObject *args)
-{
-	gchar *name;
-	const gchar *short_desc;
-	const gchar *long_desc;
-	PyObject *tuple;
-	BerylSetting *setting;
-	gboolean is_screen = 0;
-
-	if (!PyArg_ParseTuple (args, "s:berylsettings.Context.find_plugin", &name))
-		return NULL;
-
-	if (g_str_has_suffix(name, "_for_screen"))
-	{
-		is_screen = 1;
-		g_strlcpy(name, name, sizeof(name)-11);
-	}
-	setting = beryl_settings_plugin_find_setting(self->plugin, name, is_screen);
-	tuple = PyTuple_New(2);
-	short_desc = beryl_setting_get_short_desc(setting);
-	long_desc = beryl_setting_get_long_desc(setting);
-	PyTuple_SetItem(tuple, 0, PyString_FromString(short_desc));
-	PyTuple_SetItem(tuple, 1, PyString_FromString(long_desc));
-	return tuple;
-}
-
-static PyObject *
-pyberylsettings_plugin_get_setting_type (PyBerylSettingsPlugin *self, PyObject *args)
-{
-	PyObject *retval;
-	gchar *name;
-	BerylSetting *setting;
-	gboolean is_screen = 0;
-
-	if (!PyArg_ParseTuple (args, "s:berylsettings.Context.find_plugin", &name))
-		return NULL;
-
-	if (g_str_has_suffix(name, "_for_screen"))
-	{
-		is_screen = 1;
-		g_strlcpy(name, name, sizeof(name)-11);
-	}
-	setting = beryl_settings_plugin_find_setting(self->plugin, name, is_screen);
-	switch (setting->type)
-	{
-	case BERYL_SETTING_TYPE_BOOL:
-		retval = lookup_item_type_str("TYPE_BOOL");
-		break;
-	case BERYL_SETTING_TYPE_INT:
-		retval = lookup_item_type_str("TYPE_INT");
-		break;
-	case BERYL_SETTING_TYPE_FLOAT:
-		retval = lookup_item_type_str("TYPE_FLOAT");
-		break;
-	case BERYL_SETTING_TYPE_STRING:
-		retval = lookup_item_type_str("TYPE_STRING");
-		break;
-	case BERYL_SETTING_TYPE_COLOR:
-		retval = lookup_item_type_str("TYPE_COLOR");
-		break;
-	case BERYL_SETTING_TYPE_BINDING:
-		retval = lookup_item_type_str("TYPE_BINDING");
-		break;
-	case BERYL_SETTING_TYPE_LIST:
-		retval = lookup_item_type_str("TYPE_LIST");
-		break;
-    }
-	Py_INCREF (retval);
-	return retval;
-}
-
-static PyObject *
-pyberylsettings_create_context (PyObject *self, PyObject *args)
-{
-	BerylSettingsContext   *context;
-	PyBerylSettingsContext *retval;
-
-	if (!PyArg_ParseTuple (args, ":berylsettings.create_context"))
-		return NULL;
-
-	if (!(context = beryl_settings_context_new()))
-	{
-		Py_INCREF (Py_None);
-		return Py_None;
-	}
-
-	beryl_settings_context_read(context);
-	retval = pyberylsettings_context_wrap (context);
-	return (PyObject *) retval;
-}
-
-static struct PyMethodDef pyberylsettings_context_methods[] =
-{
-	{"find_plugin",        (PyCFunction)pyberylsettings_context_find_plugin,        METH_VARARGS},
-	{"get_plugins",        (PyCFunction)pyberylsettings_context_get_plugins,        METH_VARARGS},
-	{NULL,                 NULL,                                                    0}
-};
-
-static struct PyMethodDef pyberylsettings_plugin_methods[] =
-{
-	{"get_name",         (PyCFunction)pyberylsettings_plugin_get_name,         METH_VARARGS},
-	{"get_short_desc",   (PyCFunction)pyberylsettings_plugin_get_short_desc,   METH_VARARGS},
-	{"get_long_desc",    (PyCFunction)pyberylsettings_plugin_get_long_desc,    METH_VARARGS},
-	{"get_setting_info", (PyCFunction)pyberylsettings_plugin_get_setting_info, METH_VARARGS},
-	{"get_setting_type", (PyCFunction)pyberylsettings_plugin_get_setting_type, METH_VARARGS},
-	{NULL,               NULL,                                                 0}
-};
-
-static PyMethodDef pyberylsettings_classes[] = {
-	{"create_context", (PyCFunction)pyberylsettings_create_context,  METH_VARARGS},
-	{NULL,             NULL,                                         0}
-};
-
-static PyTypeObject PyBerylSettingsContext_Type = 
-{
-	PyObject_HEAD_INIT(NULL) 0,                           /* ob_size */
-	"Context",                              /* tp_name */
-	sizeof (PyBerylSettingsContext),                      /* tp_basicsize */
-	0,                                                    /* tp_itemsize */
-	(destructor)pyberylsettings_context_dealloc,         /* tp_dealloc */
-	(printfunc)0,
-	(getattrfunc)0,
-	(setattrfunc)0,
-	(cmpfunc)0,
-	(reprfunc)0,
-	0,
-	0,
-	0,
-	(hashfunc)0,
-	(ternaryfunc)0,
-	(reprfunc)0,
-	(getattrofunc)pyberylsettings_context_getattro,
-	(setattrofunc)0,
-	0,
-	Py_TPFLAGS_DEFAULT,
-	NULL,
-	(traverseproc)0,
-	(inquiry)0,
-	(richcmpfunc)0,
-	0,
-	(getiterfunc)0,
-	(iternextfunc)0,
-	pyberylsettings_context_methods
-};
-
-static PyTypeObject PyBerylSettingsPlugin_Type = 
-{
-	PyObject_HEAD_INIT(NULL) 0,                           /* ob_size */
-	"Plugin",                               /* tp_name */
-	sizeof (PyBerylSettingsPlugin),                       /* tp_basicsize */
-	0,                                                    /* tp_itemsize */
-	(destructor)PyObject_DEL,          /* tp_dealloc */
-	0,
-	(getattrfunc)0,
-	(setattrfunc)0,
-	(cmpfunc)0,
-	(reprfunc)0,
-	0,
-	0,
-	0,
-	(hashfunc)0,
-	(ternaryfunc)0,
-	(reprfunc)0,
-	(getattrofunc)pyberylsettings_plugin_getattro,
-	(setattrofunc)pyberylsettings_plugin_setattro,
-	0,
-	Py_TPFLAGS_DEFAULT,
-	NULL,
-	(traverseproc)0,
-	(inquiry)0,
-	(richcmpfunc)0,
-	0,
-	(getiterfunc)0,
-	(iternextfunc)0,
-	pyberylsettings_plugin_methods
-};
-
-static int
-beryllist_init(PyBerylSettingsList *self, PyObject *args, PyObject *kwds)
-{
-	if (PyList_Type.tp_init((PyObject *)self, args, kwds) < 0)
-		return -1;
-	return 0;
-}
-
-static PyTypeObject PyBerylSettingsList_Type = 
-{
-	PyObject_HEAD_INIT(NULL) 0,
-	"BerylList",
-	sizeof (PyBerylSettingsList),
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	(setattrofunc)pyberylsettings_list_setattro,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	&PyList_Type,
-	0, 0, 0, 0,
-	(initproc)beryllist_init
-};
-
-static PyObject *
-pyberylsettings_context_create (PyObject * self, PyObject * args)
-{
-	if (!PyArg_NoArgs (args))
-		return NULL;
-
-	PyBerylSettingsContext *retval;
-	retval = PyObject_NEW (PyBerylSettingsContext, &PyBerylSettingsContext_Type);
-	if (retval == NULL)
-		return NULL;
-
-	retval->context = NULL;
-	return (PyObject *)retval;
-}
-
-static void
-pyberylsettings_context_dealloc (PyBerylSettingsContext *self)
-{
-	beryl_settings_context_destroy(self->context);
-	PyObject_DEL (self);
-}
-
-static PyBerylSettingsContext *
-pyberylsettings_context_wrap (BerylSettingsContext *context)
-{
-	PyBerylSettingsContext *retval;
-	retval = (PyBerylSettingsContext *) PyObject_NEW (PyBerylSettingsContext,
-									&PyBerylSettingsContext_Type);
-	if (!retval)
-	    return NULL;
-	retval->context = context;
-	return retval;
-}
-
-static PyObject *
-pyberylsettings_context_getattro (PyBerylSettingsContext *self, PyObject *py_attr)
-{
-	if (PyString_Check (py_attr))
-	{
-		char *attr;
-		attr = PyString_AsString (py_attr);
-		if (!strcmp (attr, "__members__"))
-		{
-			return Py_BuildValue ("[s]", "plugins");
-		}
-		else if (!strcmp (attr, "plugins"))
-		{
-			return (PyObject *)pyberylsettings_context_get_plugins(self, NULL);
-		}
-	}
-	return PyObject_GenericGetAttr((PyObject *)self, py_attr);
-}
-
-static PyBerylSettingsPlugin *
-pyberylsettings_plugin_wrap (BerylSettingsPlugin *plugin, BerylSettingsContext *context)
-{
-	int c = 0;
-	GSList *cur;
-	BerylSetting *setting;
-	const gchar *name;
-	PyObject *tuple;
-	PyBerylSettingsPlugin *retval;
-	retval = (PyBerylSettingsPlugin *) PyObject_NEW (PyBerylSettingsPlugin,
-									&PyBerylSettingsPlugin_Type);
-	if (!retval)
-	    return NULL;
-	retval->plugin = plugin;
-	retval->context = context;
-
-	cur = beryl_settings_plugin_get_settings(plugin);
-	retval->setting_names = PyList_New (g_slist_length(cur));
-
-	c = 0;
-	for (;cur; cur = cur->next)
-	{
-		setting = cur->data;
-		name = beryl_setting_get_name(setting);
-		tuple = PyTuple_New(2);
-		PyTuple_SetItem(tuple, 0, PyString_FromString(name));
-		PyTuple_SetItem(tuple, 1, PyLong_FromLong(setting->is_screen));
-		PyList_SetItem (retval->setting_names, c, tuple);
-		c++;
-	}
-	return retval;
-}
-
-static PyObject *
-pyberylsettings_plugin_getattro (PyBerylSettingsPlugin *self, PyObject *py_attr)
-{
-	int size = PyList_Size(self->setting_names);
-	PyObject *py_str;
-	gchar *name;
-	gchar *attr_name;
-	BerylSetting *setting;
-	BerylSettingValue *value;
-	PyObject *list;
-	PyObject *tmp;
-	gboolean is_screen;
-
-	if (PyString_Check (py_attr))
-	{
-		char *attr;
-		attr = PyString_AsString (py_attr);
-		if (!strcmp (attr, "__members__"))
-		{
-			list = PyList_New(size);
-			int i = 0;
-			while (i < size)
-			{
-				tmp = PyList_GetItem(self->setting_names, i);
-				py_str = PyTuple_GetItem(tmp, 0);
-				name = PyString_AsString(py_str);
-				is_screen = PyLong_AsLong(PyTuple_GetItem(tmp, 1));
-				name = is_screen ? g_strconcat(name, "_for_screen", NULL) : name;
-				PyList_SetItem(list, i, PyString_FromString(name));
-				i++;
-			}
-			return list;
-		}
-		else if (!g_str_has_prefix(attr, "__"))
-		{
-			is_screen = 0;
-			if (g_str_has_suffix(attr, "_for_screen"))
-			{
-				is_screen = 1;
-				g_strlcpy(attr, attr, sizeof(attr)-11);
-			}
-			setting = beryl_settings_plugin_find_setting(self->plugin, attr, is_screen);
-			if (setting != NULL)
-			{
-				value = &(setting->value);
-				if (value != NULL)
-				{
-					return get_py_type_for_value(value, setting->type);
-				}
-			}
-		}
-	}
-	return PyObject_GenericGetAttr((PyObject *)self, py_attr);
-}
-
-static int
-pyberylsettings_plugin_setattro (PyBerylSettingsPlugin *self, PyObject *py_attr, PyObject *value)
-{
-	char *attr;
-	gboolean is_screen = 0;
-	BerylSetting *setting;
-	if (PyString_Check (py_attr))
-	{
-		attr = PyString_AsString (py_attr);
-		if (g_str_has_suffix(attr, "_for_screen"))
-		{
-			is_screen = 1;
-			g_strlcpy(attr, attr, sizeof(attr)-11);
-		}
-		setting = beryl_settings_plugin_find_setting(self->plugin, attr, is_screen);
-		if (setting != NULL)
-		{
-			if (set_value_for_py_type(setting, value) == 0)
-			{
-				//write out settings and reload beryl
-				beryl_settings_context_write(self->context);
-				beryl_settings_send_reload_signal();
-				return 0;
-			}
-		}
-	}
-	return PyObject_GenericSetAttr((PyObject *)self, py_attr, value);
-}
-
-static int
-pyberylsettings_list_setattro (PyBerylSettingsList *self, PyObject *py_attr, PyObject *value)
-{
-	printf("called\n");
-	return 0;
-}
-
-DL_EXPORT (void)
-initberylsettings (void)
-{
-	PyObject *mod;
-
-	mod = Py_InitModule3 ("berylsettings", pyberylsettings_classes, 0);
-
-	REGISTER_TYPE (PyBerylSettingsContext_Type, "Context");
-	REGISTER_TYPE (PyBerylSettingsPlugin_Type,  "Plugin");
-	REGISTER_TYPE (PyBerylSettingsList_Type,    "BerylList");
-
-	PyModule_AddIntConstant (mod, "TYPE_BOOL",    BERYL_SETTING_TYPE_BOOL);
-	PyModule_AddIntConstant (mod, "TYPE_INT",     BERYL_SETTING_TYPE_INT);
-	PyModule_AddIntConstant (mod, "TYPE_FLOAT",   BERYL_SETTING_TYPE_FLOAT);
-	PyModule_AddIntConstant (mod, "TYPE_STRING",  BERYL_SETTING_TYPE_STRING);
-	PyModule_AddIntConstant (mod, "TYPE_COLOR",   BERYL_SETTING_TYPE_COLOR);
-	PyModule_AddIntConstant (mod, "TYPE_BINDING", BERYL_SETTING_TYPE_BINDING);
-	PyModule_AddIntConstant (mod, "TYPE_LIST",    BERYL_SETTING_TYPE_LIST);
-}

Added: trunk/beryl-python/src/berylsettings.pyx
===================================================================
--- trunk/beryl-python/src/berylsettings.pyx	                        (rev 0)
+++ trunk/beryl-python/src/berylsettings.pyx	2006-12-04 02:43:01 UTC (rev 1523)
@@ -0,0 +1,466 @@
+
+cdef extern from "X11/Xlib.h":
+	char * XKeysymToString(int)
+
+cdef extern from "glib.h":
+	ctypedef char  gchar
+	ctypedef void* gpointer
+	ctypedef int    gint
+	ctypedef gint   gboolean
+	ctypedef double  gdouble
+	ctypedef struct GSList:
+		gpointer data
+		GSList *next
+	void g_free(void*)
+
+cdef extern from "Python.h":
+	gchar *PyString_AsString(object)
+	object PyString_FromString(gchar*)
+
+cdef extern from "beryl-settings.h":
+	ctypedef enum BerylSettingType:
+		BERYL_SETTING_TYPE_BOOL
+		BERYL_SETTING_TYPE_INT
+		BERYL_SETTING_TYPE_FLOAT
+		BERYL_SETTING_TYPE_STRING
+		BERYL_SETTING_TYPE_COLOR
+		BERYL_SETTING_TYPE_BINDING
+		BERYL_SETTING_TYPE_LIST
+		BERYL_SETTING_TYPE_COUNT
+
+	ctypedef struct BerylSettingsContext
+	ctypedef struct BerylSettingsPlugin
+
+	ctypedef union _BerylSettingInfo
+	ctypedef struct BerylIntSettingInfo:
+		gint min
+		gint max
+	ctypedef struct BerylFloatSettingInfo:
+		gdouble min
+		gdouble max
+		gdouble precision
+	ctypedef struct BerylStringSettingInfo:
+		GSList * allowed_values
+		GSList * raw_values
+	ctypedef struct BerylBindingSettingInfo:
+		gboolean key
+		gboolean button
+		gboolean bell
+		gboolean edge
+	ctypedef struct BerylBindingSettingArrayInfo:
+		gboolean array[4]
+	ctypedef struct BerylListSettingInfo:
+		BerylSettingType    list_of_type
+		_BerylSettingInfo    * list_of_info
+	ctypedef union BerylSettingInfo:
+		BerylIntSettingInfo             for_int
+		BerylFloatSettingInfo           for_float
+		BerylStringSettingInfo          for_string
+		BerylBindingSettingInfo         for_bind
+		BerylBindingSettingArrayInfo    for_bind_as_array
+		BerylListSettingInfo            for_list
+
+	ctypedef struct BerylSetting
+	ctypedef struct BerylSettingColorValueColor:
+		gint red
+		gint green
+		gint blue
+		gint alpha
+	ctypedef struct BerylSettingColorValueArray:
+		gint array[4]
+	ctypedef union BerylSettingColorValue:
+		BerylSettingColorValueColor color
+		BerylSettingColorValueArray array
+	ctypedef struct BerylSettingValueBindingIsSetValue:
+		gboolean key
+		gboolean button
+	ctypedef struct BerylSettingValueBindingIsSetArray:
+		gboolean array[2]
+	ctypedef union BerylSettingValueBindingIsSet:
+		BerylSettingValueBindingIsSetValue value
+		BerylSettingValueBindingIsSetArray array
+	ctypedef struct BerylSettingBindingValue:
+		BerylSettingValueBindingIsSet   enabled
+		gint                            button
+		gint                            button_mod_mask
+		gint                            keysym
+		gint                            key_mod_mask
+		gboolean                        on_bell
+		gint                            edge_mask
+	ctypedef union BerylSettingValueUnion:
+		gboolean                    as_bool
+		gint                        as_int
+		gdouble                     as_float
+		gchar                     * as_string
+		BerylSettingBindingValue    as_binding
+		BerylSettingColorValue      as_color
+		GSList                    * as_list
+	ctypedef struct BerylSettingValue:
+		BerylSettingValueUnion      value
+		BerylSetting              * parent
+		gboolean                    is_list_child
+
+	ctypedef struct BerylSetting:
+		BerylSettingType        type
+		gboolean                is_screen
+		BerylSettingInfo        info
+		gchar                 * name
+		gchar                 * short_desc
+		gchar                 * long_desc
+		gchar	 	  * group
+		gchar		  * subGroup
+		gchar		  * displayHints
+		BerylSettingValue       value
+		BerylSettingValue       default_value
+		gboolean                is_default
+		BerylSettingsPlugin   * parent
+		gpointer                private_ptr
+
+	gboolean beryl_settings_send_reload_signal()
+	BerylSettingsContext * beryl_settings_context_new()
+	void beryl_settings_context_destroy(BerylSettingsContext *)
+	void beryl_settings_context_write(BerylSettingsContext *)
+	BerylSettingsPlugin * beryl_settings_context_find_plugin(
+							BerylSettingsContext *, gchar *)
+	GSList * beryl_settings_context_get_plugins(BerylSettingsContext *)
+
+	gchar  * beryl_settings_plugin_get_name(BerylSettingsPlugin *)
+	gchar  * beryl_settings_plugin_get_short_desc(BerylSettingsPlugin *)
+	gchar  * beryl_settings_plugin_get_long_desc(BerylSettingsPlugin *)
+	GSList * beryl_settings_plugin_get_settings(BerylSettingsPlugin *)
+	BerylSetting * beryl_settings_plugin_find_setting(
+					BerylSettingsPlugin *, gchar *, gboolean)
+
+	gchar * beryl_setting_get_name(BerylSetting *)
+	gchar * beryl_setting_get_short_desc(BerylSetting *)
+	gchar * beryl_setting_get_long_desc(BerylSetting *)
+	gboolean beryl_setting_get_list_type(BerylSetting *, BerylSettingType *)
+	gboolean beryl_setting_get_can_set_button(BerylSetting *, gboolean *)
+	gboolean beryl_setting_get_can_set_key(BerylSetting *, gboolean *)
+	gboolean beryl_setting_get_can_set_edgemask(BerylSetting *, gboolean *)
+	gboolean beryl_setting_get_can_set_bell(BerylSetting *, gboolean *)
+
+	gboolean beryl_setting_value_get_bool(BerylSettingValue *, gboolean *)
+	gboolean beryl_setting_value_get_int(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_get_float(BerylSettingValue *, gdouble *)
+	gboolean beryl_setting_value_get_string(BerylSettingValue *, gchar **)
+	gboolean beryl_setting_value_get_color(BerylSettingValue *, BerylSettingColorValue *)
+	gboolean beryl_setting_value_get_button_enabled(BerylSettingValue *, gboolean *)
+	gboolean beryl_setting_value_get_buttonmods(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_get_button(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_get_key_enabled(BerylSettingValue *, gboolean *)
+	gboolean beryl_setting_value_get_keymods(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_get_keysym(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_get_edgemask(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_get_bell(BerylSettingValue *, gboolean *)
+	gboolean beryl_setting_value_get_value_list(BerylSettingValue *, GSList **)
+
+	gboolean beryl_setting_value_set_bool(BerylSettingValue *, gboolean *)
+	gboolean beryl_setting_value_set_int(BerylSettingValue *, gint *)
+	gboolean beryl_setting_value_set_float(BerylSettingValue *, gdouble *)
+	gboolean beryl_setting_value_set_string(BerylSettingValue *, gchar **)
+	gboolean beryl_setting_value_set_color(BerylSettingValue *, BerylSettingColorValue *)
+
+	unsigned int beryl_settings_get_mods_and_endptr(gchar *, gchar **)
+	gchar * beryl_settings_mods_to_string(unsigned int)
+
+
+edges = (
+	'Left',
+	'Right',
+	'Top',
+	'Bottom',
+	'TopLeft',
+	'TopRight',
+	'BottomLeft',
+	'BottomRight'
+)
+
+cdef object get_py_value_for_setting(BerylSetting *setting):
+	cdef gboolean bool_data
+	cdef gint int_data
+	cdef gdouble float_data
+	cdef gchar *str_data
+	cdef GSList *list_data
+	cdef BerylSettingColorValue color_data
+	cdef BerylSettingType list_type
+	cdef BerylSettingType type
+	type = setting.type
+
+	if type == BERYL_SETTING_TYPE_BOOL:
+		if beryl_setting_value_get_bool(&setting.value, &bool_data):
+			return bool_data
+	if type == BERYL_SETTING_TYPE_INT:
+		if beryl_setting_value_get_int(&setting.value, &int_data):
+			return int_data
+	if type == BERYL_SETTING_TYPE_FLOAT:
+		if beryl_setting_value_get_float(&setting.value, &float_data):
+			return float_data
+	if type == BERYL_SETTING_TYPE_STRING:
+		if beryl_setting_value_get_string(&setting.value, &str_data):
+			return PyString_FromString(str_data)
+	if type == BERYL_SETTING_TYPE_COLOR:
+		if beryl_setting_value_get_color(&setting.value, &color_data):
+			# set red, green, blue, and alpha to list
+			color_list = []
+			color_list.append(<gdouble>color_data.array.array[0]/0xffff)
+			color_list.append(<gdouble>color_data.array.array[1]/0xffff)
+			color_list.append(<gdouble>color_data.array.array[2]/0xffff)
+			color_list.append(<gdouble>color_data.array.array[3]/0xffff)
+			return color_list
+	if type == BERYL_SETTING_TYPE_BINDING:
+		binding_list = [None, None, None, None]
+		if beryl_setting_get_can_set_button(setting, &bool_data) and bool_data:
+			beryl_setting_value_get_button_enabled(&setting.value, &bool_data)
+			if not bool_data:
+				binding_list[0] = 'Disabled'
+			else:
+				beryl_setting_value_get_buttonmods(&setting.value, &int_data)
+				binding_string = PyString_FromString(beryl_settings_mods_to_string(int_data))
+				beryl_setting_value_get_button(&setting.value, &int_data)
+				binding_string = binding_string + 'Button' + str(int_data)
+				binding_list[0] = binding_string
+		if beryl_setting_get_can_set_key(setting, &bool_data) and bool_data:
+			beryl_setting_value_get_key_enabled(&setting.value, &bool_data)
+			if not bool_data:
+				binding_list[1] = 'Disabled'
+			else:
+				beryl_setting_value_get_keymods(&setting.value, &int_data)
+				binding_string = PyString_FromString(beryl_settings_mods_to_string(int_data))
+				beryl_setting_value_get_keysym(&setting.value, &int_data)
+				if not XKeysymToString(int_data):
+					binding_string = binding_string + 'None'
+				else:
+					binding_string = binding_string + PyString_FromString(XKeysymToString(int_data))
+				binding_list[1] = binding_string
+		if beryl_setting_get_can_set_edgemask(setting, &bool_data) and bool_data:
+			beryl_setting_value_get_edgemask(&setting.value, &int_data)
+			if not int_data:
+				binding_list[2] = 'Disabled'
+			else:
+				i = 0
+				edge_list = []
+				while i < SCREEN_EDGE_NUM:
+					if edgemask & (1<<i):
+						edge_list.append(edges[i])
+				binding_list[2] = edge_list
+		if beryl_setting_get_can_set_bell(setting, &bool_data) and bool_data:
+			beryl_setting_value_get_bell(&setting.value, &bool_data)
+			binding_list[3] = bool_data
+		return binding_list
+	if type == BERYL_SETTING_TYPE_LIST:
+		beryl_setting_get_list_type(setting, &list_type)
+		if (list_type == BERYL_SETTING_TYPE_STRING):
+			beryl_setting_value_get_value_list(&setting.value, &list_data)
+			str_list = []
+
+			while list_data:
+				beryl_setting_value_get_string(<BerylSettingValue *>list_data.data, &str_data)
+				str_list.append(PyString_FromString(str_data))
+				list_data = list_data.next
+			return str_list
+	return None
+
+cdef object set_setting_for_py_value (BerylSetting *setting, object value):
+	cdef gboolean bool_data
+	cdef gint int_data
+	cdef gdouble float_data
+	cdef gchar *str_data
+	cdef BerylSettingColorValue color_data
+	cdef BerylSettingType setting_type
+	setting_type = setting.type
+
+	if setting_type == BERYL_SETTING_TYPE_BOOL:
+		if not type(value) == type(False):
+			return False
+		bool_data = value
+		beryl_setting_value_set_bool(&setting.value, &bool_data)
+	if setting_type == BERYL_SETTING_TYPE_INT:
+		if not type(value) == type(1):
+			return False
+		int_data = value
+		beryl_setting_value_set_int(&setting.value, &int_data)
+	if setting_type == BERYL_SETTING_TYPE_FLOAT:
+		if not type(value) in (type(1.0), type(1)):
+			return False
+		float_data = value
+		beryl_setting_value_set_float(&setting.value, &float_data)
+	if setting_type == BERYL_SETTING_TYPE_STRING:
+		if not type(value) == type(''):
+			return False
+		str_data = PyString_AsString(value)
+		beryl_setting_value_set_string(&setting.value, &str_data)
+	if setting_type == BERYL_SETTING_TYPE_COLOR:
+		if not type(value) == type([]) and not len(value) == 4:
+			return False
+		for foo in value:
+			if not type(foo) in (type(1.0), type(1)):
+				return False
+		color_data.color.red = value[0] * 0xffff
+		color_data.color.green = value[1] * 0xffff
+		color_data.color.blue = value[2] * 0xffff
+		color_data.color.alpha = value[3] * 0xffff
+		beryl_setting_value_set_color(&setting.value, &color_data)
+	return True
+
+class PluginNotFoundException(Exception):
+	def __init__(self, name):
+		self.name = name
+
+	def __str__(self):
+		print ": Plugin '%s' not found" % self.name
+
+cdef class Plugin:
+	cdef BerylSettingsPlugin *plugin
+	cdef BerylSettingsContext *context
+
+	def __new__(self, from_internal=False):
+		if not from_internal:
+			self.plugin = NULL
+			raise TypeError("Cannot create 'berylsettings.Plugin' instances")
+
+	property name:
+		def __get__(self):
+			cdef gchar *name
+			name = <gchar*>beryl_settings_plugin_get_name(self.plugin)
+			if name == NULL:
+				name = 'general'
+			return PyString_FromString(name)
+
+	property short_desc:
+		def __get__(self):
+			cdef gchar *short_desc
+			short_desc = <gchar*>beryl_settings_plugin_get_short_desc(self.plugin)
+			if short_desc == NULL:
+				short_desc = 'General Settings'
+			return PyString_FromString(short_desc)
+
+	property long_desc:
+		def __get__(self):
+			cdef gchar *long_desc
+			long_desc = <gchar*>beryl_settings_plugin_get_long_desc(self.plugin)
+			if long_desc == NULL:
+				long_desc = 'Settings for Beryl as a whole'
+			return PyString_FromString(long_desc)
+
+	property settings:
+		def __get__(self):
+			settings = []
+			name = ''
+			cdef int i
+			cdef GSList *setting_list
+			cdef gchar *c_name
+			cdef BerylSetting *setting
+			setting_list = beryl_settings_plugin_get_settings(self.plugin)
+			i = 0
+			while setting_list != NULL:
+				setting = <BerylSetting *>setting_list.data
+				c_name = <gchar*>beryl_setting_get_name(setting)
+				name = PyString_FromString(c_name)
+				if setting.is_screen:
+					name = name + '_for_screen'
+				settings.append(name)
+				i = i + 1
+				setting_list = setting_list.next
+			return tuple(settings)
+
+	def getSetting(self, name):
+		cdef BerylSetting *setting
+		cdef gboolean is_screen
+		cdef gchar *c_name
+		is_screen = 0
+		if name.endswith('_for_screen'):
+			is_screen = 1
+			name = name.split('_for_screen')[0]
+		c_name = PyString_AsString(name)
+		setting = beryl_settings_plugin_find_setting(self.plugin, c_name, is_screen)
+		return get_py_value_for_setting(setting)
+
+	def getSettingType(self, name):
+		cdef BerylSetting *setting
+		cdef gboolean is_screen
+		cdef gchar *c_name
+		is_screen = 0
+		if name.endswith('_for_screen'):
+			is_screen = 1
+			name = name.split('_for_screen')[0]
+		c_name = PyString_AsString(name)
+		setting = beryl_settings_plugin_find_setting(self.plugin, c_name, is_screen)
+		return setting.type
+
+	def getSettingInfo(self, name):
+		cdef BerylSetting *setting
+		cdef gboolean is_screen
+		cdef gchar *c_name
+		cdef gchar *short_desc
+		cdef gchar *long_desc
+		is_screen = 0
+		if name.endswith('_for_screen'):
+			is_screen = 1
+			name = name.split('_for_screen')[0]
+		c_name = PyString_AsString(name)
+		setting = beryl_settings_plugin_find_setting(self.plugin, c_name, is_screen)
+		short_desc = <gchar *>beryl_setting_get_short_desc(setting)
+		long_desc = <gchar *>beryl_setting_get_long_desc(setting)
+		return (PyString_FromString(short_desc), PyString_FromString(long_desc))
+
+	def setSetting(self, name, value):
+		cdef BerylSetting *setting
+		cdef gboolean is_screen
+		cdef gchar *c_name
+		cdef gchar *short_desc
+		cdef gchar *long_desc
+		is_screen = 0
+		if name.endswith('_for_screen'):
+			is_screen = 1
+			name = name.split('_for_screen')[0]
+		c_name = PyString_AsString(name)
+		setting = beryl_settings_plugin_find_setting(self.plugin, c_name, is_screen)
+		if set_setting_for_py_value(setting, value):
+			beryl_settings_context_write(self.context)
+			beryl_settings_send_reload_signal()
+
+cdef class Context:
+	cdef BerylSettingsContext *context
+
+	def __new__(self, from_internal=False):
+		if not from_internal:
+			self.context = NULL
+			raise TypeError("Cannot create 'berylsettings.Context' instances")
+		self.context = beryl_settings_context_new()
+
+	def __dealloc__(self):
+		if self.context != NULL:
+			beryl_settings_context_destroy(self.context)
+
+	def getPlugin(self, name):
+		cdef BerylSettingsPlugin *c_plugin
+		cdef gchar *c_name
+		c_name = PyString_AsString(name)
+		c_plugin = beryl_settings_context_find_plugin(self.context, c_name)
+		if c_plugin == NULL:
+			raise PluginNotFoundException(name)
+		cdef Plugin plugin
+		plugin = Plugin(True)
+		plugin.plugin = c_plugin
+		plugin.context = self.context
+		return plugin
+
+	property plugins:
+		def __get__(self):
+			plugins = []
+			cdef int i
+			cdef GSList *plugin_list
+			cdef Plugin plugin
+			plugin_list = beryl_settings_context_get_plugins(self.context)
+			i = 0
+			while plugin_list != NULL:
+				plugin = Plugin(True)
+				plugin.plugin = <BerylSettingsPlugin *>plugin_list.data
+				plugins.append(plugin)
+				i = i + 1
+				plugin_list = plugin_list.next
+			return tuple(plugins)
+
+def create_context():
+	return Context(True)




More information about the commits mailing list