From f7ba47b1042091f3181a7dd7ae21e10b03780455 Mon Sep 17 00:00:00 2001 From: "Neil J. Patel" Date: Fri, 11 Dec 2009 20:08:27 -0600 Subject: Stealing a bunch of Neil's python binding code. --- python/Makefile.am | 39 +++++++++++++ python/__init__.py | 27 +++++++++ python/appindicator-arg-types.py | 27 +++++++++ python/appindicator.defs | 121 +++++++++++++++++++++++++++++++++++++++ python/appindicator.override | 65 +++++++++++++++++++++ python/appindicatormodule.c | 49 ++++++++++++++++ 6 files changed, 328 insertions(+) create mode 100644 python/Makefile.am create mode 100644 python/__init__.py create mode 100644 python/appindicator-arg-types.py create mode 100644 python/appindicator.defs create mode 100644 python/appindicator.override create mode 100644 python/appindicatormodule.c diff --git a/python/Makefile.am b/python/Makefile.am new file mode 100644 index 0000000..6d19723 --- /dev/null +++ b/python/Makefile.am @@ -0,0 +1,39 @@ +defsdir = $(datadir)/pygtk/2.0/defs +defs_DATA = appindicator.defs + +#CFLAGS = -Wall -Werror +INCLUDES = \ + -DG_LOG_DOMAIN=\"appindicator-python\" \ + -DDATADIR=\"$(datadir)\" \ + -DLIBDIR=\"$(libdir)\" \ + $(APPINDICATOR_PYTHON_CFLAGS) \ + $(PYTHON_INCLUDES) + +pkgpythondir = $(pyexecdir) +pkgpyexecdir = $(pyexecdir) + +pkgappindicatordir = $(pkgpythondir)/appindicator +pkgappindicator_PYTHON = __init__.py + +appindicatordir = $(pkgpyexecdir)/appindicator +appindicator_LTLIBRARIES = _appindicator.la + +_appindicator_la_LDFLAGS = -module -avoid-version -export-symbols-regex init_appindicator -lpyglib-2.0-python2.6 +_appindicator_la_LIBADD = $(APPINDICATOR_PYTHON_LIBS) +_appindicator_la_SOURCES = appindicatormodule.c +nodist__appindicator_la_SOURCES = appindicator.c + +CLEANFILES = appindicator.c +EXTRA_DIST = appindicator.override appindicator-arg-types.py $(defs_DATA) +appindicator.c: $(defs_DATA) appindicator.override + +%.c: %.defs + (cd $(srcdir) \ + && $(PYGTK_CODEGEN) \ + --register $(PYGTK_DEFSDIR)/gtk-types.defs \ + --register $(PYGTK_DEFSDIR)/gdk-types.defs \ + --load-types appindicator-arg-types.py \ + --override $*.override \ + --prefix py$* $*.defs) > gen-$*.c \ + && cp gen-$*.c $*.c \ + && rm -f gen-$*.c diff --git a/python/__init__.py b/python/__init__.py new file mode 100644 index 0000000..20e2140 --- /dev/null +++ b/python/__init__.py @@ -0,0 +1,27 @@ +# Python bindings for libappindicator. +# +# Copyright 2009 Canonical Ltd. +# +# Authors: +# Eitan Isaacson +# Neil Jagdish Patel +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of either or both of the following licenses: +# +# 1) the GNU Lesser General Public License version 3, as published by the +# Free Software Foundation; and/or +# 2) the GNU Lesser General Public License version 2.1, as published by +# the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranties of +# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the applicable version of the GNU Lesser General Public +# License for more details. +# +# You should have received a copy of both the GNU Lesser General Public +# License version 3 and version 2.1 along with this program. If not, see +# + +from _appindicator import * diff --git a/python/appindicator-arg-types.py b/python/appindicator-arg-types.py new file mode 100644 index 0000000..9d74aa0 --- /dev/null +++ b/python/appindicator-arg-types.py @@ -0,0 +1,27 @@ +# Python bindings for libappindicator. +# +# Copyright 2009 Canonical Ltd. +# +# Authors: +# Eitan Isaacson +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of either or both of the following licenses: +# +# 1) the GNU Lesser General Public License version 3, as published by the +# Free Software Foundation; and/or +# 2) the GNU Lesser General Public License version 2.1, as published by +# the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranties of +# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the applicable version of the GNU Lesser General Public +# License for more details. +# +# You should have received a copy of both the GNU Lesser General Public +# License version 3 and version 2.1 along with this program. If not, see +# + +import argtypes + diff --git a/python/appindicator.defs b/python/appindicator.defs new file mode 100644 index 0000000..0349b64 --- /dev/null +++ b/python/appindicator.defs @@ -0,0 +1,121 @@ +;; -*- scheme -*- +; object definitions ... +(define-object Indicator + (in-module "App") + (parent "GObject") + (c-name "AppIndicator") + (gtype-id "APP_TYPE_INDICATOR") +) + +;; Enumerations and flags ... + +(define-enum IndicatorCategory + (in-module "App") + (c-name "AppIndicatorCategory") + (gtype-id "APP_INDICATOR_TYPE_INDICATOR_CATEGORY") + (values + '("application-status" "APP_INDICATOR_CATEGORY_APPLICATION_STATUS") + '("communications" "APP_INDICATOR_CATEGORY_COMMUNICATIONS") + '("system-services" "APP_INDICATOR_CATEGORY_SYSTEM_SERVICES") + '("hardware" "APP_INDICATOR_CATEGORY_HARDWARE") + '("other" "APP_INDICATOR_CATEGORY_OTHER") + ) +) + +(define-enum IndicatorStatus + (in-module "App") + (c-name "AppIndicatorStatus") + (gtype-id "APP_INDICATOR_TYPE_INDICATOR_STATUS") + (values + '("passive" "APP_INDICATOR_STATUS_PASSIVE") + '("active" "APP_INDICATOR_STATUS_ACTIVE") + '("attention" "APP_INDICATOR_STATUS_ATTENTION") + ) +) + + +;; From app-indicator.h + +(define-function app_indicator_get_type + (c-name "app_indicator_get_type") + (return-type "GType") +) + +(define-function app_indicator_new + (c-name "app_indicator_new") + (is-constructor-of "AppIndicator") + (return-type "AppIndicator*") + (parameters + '("const-gchar*" "id") + '("const-gchar*" "icon_name") + '("AppIndicatorCategory" "category") + ) +) + +(define-method set_status + (of-object "AppIndicator") + (c-name "app_indicator_set_status") + (return-type "none") + (parameters + '("AppIndicatorStatus" "status") + ) +) + +(define-method set_attention_icon + (of-object "AppIndicator") + (c-name "app_indicator_set_attention_icon") + (return-type "none") + (parameters + '("const-gchar*" "icon_name") + ) +) + +(define-method set_menu + (of-object "AppIndicator") + (c-name "app_indicator_set_menu") + (return-type "none") + (parameters + '("GtkMenu*" "menu") + ) +) + +(define-method set_icon + (of-object "AppIndicator") + (c-name "app_indicator_set_icon") + (return-type "none") + (parameters + '("const-gchar*" "icon_name") + ) +) + +(define-method get_id + (of-object "AppIndicator") + (c-name "app_indicator_get_id") + (return-type "const-gchar*") +) + +(define-method get_category + (of-object "AppIndicator") + (c-name "app_indicator_get_category") + (return-type "AppIndicatorCategory") +) + +(define-method get_status + (of-object "AppIndicator") + (c-name "app_indicator_get_status") + (return-type "AppIndicatorStatus") +) + +(define-method get_icon + (of-object "AppIndicator") + (c-name "app_indicator_get_icon") + (return-type "const-gchar*") +) + +(define-method get_attention_icon + (of-object "AppIndicator") + (c-name "app_indicator_get_attention_icon") + (return-type "const-gchar*") +) + + diff --git a/python/appindicator.override b/python/appindicator.override new file mode 100644 index 0000000..fc99ddf --- /dev/null +++ b/python/appindicator.override @@ -0,0 +1,65 @@ +/* +Python bindings for libappindicator. + +Copyright 2009 Canonical Ltd. + +Authors: + Eitan Isaacson (original) + Neil Jagdish Patel + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ +%% +headers +#include +#include +#include +#include +#include "pygobject.h" +#include "pyglib.h" +#include + +typedef PyObject* (*to_pyobject_func) (gpointer data); + +#define APP_TYPE_INDICATOR APP_INDICATOR_TYPE + +void +_appindicator_add_constants(PyObject *module, const gchar *strip_prefix) +{ +#ifdef VERSION + PyModule_AddStringConstant(module, "__version__", VERSION); +#endif + pyg_enum_add(module, + "IndicatorCategory", + strip_prefix, + APP_INDICATOR_TYPE_INDICATOR_CATEGORY); + + pyg_enum_add(module, + "IndicatorStatus", + strip_prefix, + APP_INDICATOR_TYPE_INDICATOR_STATUS); + + if (PyErr_Occurred()) + PyErr_Print(); +} +%% +modulename appindicator +%% +import gobject.GObject as PyGObject_Type +import gtk.Menu as PyGtkMenu_Type diff --git a/python/appindicatormodule.c b/python/appindicatormodule.c new file mode 100644 index 0000000..b66639c --- /dev/null +++ b/python/appindicatormodule.c @@ -0,0 +1,49 @@ +/* +Python bindings for libappindicator. + +Copyright 2009 Canonical Ltd. + +Authors: + Eitan Isaacson + Neil Jagdish Patel + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ +#include + +void pyappindicator_register_classes (PyObject *d); +extern PyMethodDef pyappindicator_functions[]; + +DL_EXPORT(void) +init_appindicator(void) +{ + PyObject *m, *d; + + init_pygobject (); + + m = Py_InitModule ("_appindicator", pyappindicator_functions); + d = PyModule_GetDict (m); + + pyappindicator_register_classes (d); + + _appindicator_add_constants (m, "APP_INDICATOR_"); + if (PyErr_Occurred ()) { + Py_FatalError ("can't initialise module appindicator"); + } +} -- cgit v1.2.3