Add Python binding.
This commit is contained in:
		@ -16,8 +16,12 @@
 | 
				
			|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
					# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
				
			||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ENABLE_VALA
 | 
					 | 
				
			||||||
SUBDIRS = vala
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
SUBDIRS =
 | 
					SUBDIRS =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ENABLE_PYTHON
 | 
				
			||||||
 | 
					SUBDIRS += python
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ENABLE_VALA
 | 
				
			||||||
 | 
					SUBDIRS += vala
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								bindings/python/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								bindings/python/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
 | 
				
			||||||
 | 
					# Copyright (C) 2011 Red Hat, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program 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
 | 
				
			||||||
 | 
					# General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with this program.  If not, see
 | 
				
			||||||
 | 
					# <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SUBDIRS = eekboard
 | 
				
			||||||
							
								
								
									
										21
									
								
								bindings/python/eekboard/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								bindings/python/eekboard/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
 | 
				
			||||||
 | 
					# Copyright (C) 2011 Red Hat, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program 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
 | 
				
			||||||
 | 
					# General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with this program.  If not, see
 | 
				
			||||||
 | 
					# <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pkgpython_PYTHON = \
 | 
				
			||||||
 | 
						__init__.py \
 | 
				
			||||||
 | 
						eekboard.py \
 | 
				
			||||||
 | 
						context.py
 | 
				
			||||||
							
								
								
									
										63
									
								
								bindings/python/eekboard/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								bindings/python/eekboard/__init__.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
 | 
				
			||||||
 | 
					# Copyright (C) 2011 Red Hat, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program 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
 | 
				
			||||||
 | 
					# General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with this program.  If not, see
 | 
				
			||||||
 | 
					# <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from gi.repository import Eek, EekXkl, Gio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from eekboard import Eekboard
 | 
				
			||||||
 | 
					from context import Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Keyboard = Eek.Keyboard
 | 
				
			||||||
 | 
					Section = Eek.Section
 | 
				
			||||||
 | 
					Key = Eek.Key
 | 
				
			||||||
 | 
					Symbol = Eek.Symbol
 | 
				
			||||||
 | 
					Keysym = Eek.Keysym
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODIFIER_BEHAVIOR_NONE, \
 | 
				
			||||||
 | 
					MODIFIER_BEHAVIOR_LOCK, \
 | 
				
			||||||
 | 
					MODIFIER_BEHAVIOR_LATCH = \
 | 
				
			||||||
 | 
					(Eek.ModifierBehavior.NONE,
 | 
				
			||||||
 | 
					 Eek.ModifierBehavior.LOCK,
 | 
				
			||||||
 | 
					 Eek.ModifierBehavior.LATCH)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CSW = 640
 | 
				
			||||||
 | 
					CSH = 480
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def XmlKeyboard(path, modifier_behavior=MODIFIER_BEHAVIOR_NONE):
 | 
				
			||||||
 | 
					    _file = Gio.file_new_for_path(path)
 | 
				
			||||||
 | 
					    layout = Eek.XmlLayout.new(_file.read())
 | 
				
			||||||
 | 
					    keyboard = Eek.Keyboard.new(layout, CSW, CSH)
 | 
				
			||||||
 | 
					    keyboard.set_modifier_behavior(modifier_behavior)
 | 
				
			||||||
 | 
					    return keyboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def XklKeyboard(modifier_behavior=MODIFIER_BEHAVIOR_NONE):
 | 
				
			||||||
 | 
					    layout = EekXkl.Layout.new()
 | 
				
			||||||
 | 
					    keyboard = Eek.Keyboard.new(layout, CSW, CSH)
 | 
				
			||||||
 | 
					    keyboard.set_modifier_behavior(modifier_behavior)
 | 
				
			||||||
 | 
					    return keyboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__all__ = ['Eekboard',
 | 
				
			||||||
 | 
					           'Context',
 | 
				
			||||||
 | 
					           'Keyboard',
 | 
				
			||||||
 | 
					           'Section',
 | 
				
			||||||
 | 
					           'Key',
 | 
				
			||||||
 | 
					           'Symbol',
 | 
				
			||||||
 | 
					           'Keysym',
 | 
				
			||||||
 | 
					           'MODIFIER_BEHAVIOR_NONE',
 | 
				
			||||||
 | 
					           'MODIFIER_BEHAVIOR_LOCK',
 | 
				
			||||||
 | 
					           'MODIFIER_BEHAVIOR_LATCH',
 | 
				
			||||||
 | 
					           'XmlKeyboard',
 | 
				
			||||||
 | 
					           'XklKeyboard']
 | 
				
			||||||
							
								
								
									
										73
									
								
								bindings/python/eekboard/context.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								bindings/python/eekboard/context.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
 | 
				
			||||||
 | 
					# Copyright (C) 2011 Red Hat, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program 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
 | 
				
			||||||
 | 
					# General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with this program.  If not, see
 | 
				
			||||||
 | 
					# <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from gi.repository import Eekboard
 | 
				
			||||||
 | 
					import gobject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Context(gobject.GObject):
 | 
				
			||||||
 | 
					    __gtype_name__ = "PYEekboardContext"
 | 
				
			||||||
 | 
					    __gsignals__ = {
 | 
				
			||||||
 | 
					        'enabled': (
 | 
				
			||||||
 | 
					            gobject.SIGNAL_RUN_LAST,
 | 
				
			||||||
 | 
					            gobject.TYPE_NONE,
 | 
				
			||||||
 | 
					            ()),
 | 
				
			||||||
 | 
					        'disabled': (
 | 
				
			||||||
 | 
					            gobject.SIGNAL_RUN_LAST,
 | 
				
			||||||
 | 
					            gobject.TYPE_NONE,
 | 
				
			||||||
 | 
					            ()),
 | 
				
			||||||
 | 
					        'key-pressed': (
 | 
				
			||||||
 | 
					            gobject.SIGNAL_RUN_LAST,
 | 
				
			||||||
 | 
					            gobject.TYPE_NONE,
 | 
				
			||||||
 | 
					            (gobject.TYPE_UINT,)),
 | 
				
			||||||
 | 
					        'key-released': (
 | 
				
			||||||
 | 
					            gobject.SIGNAL_RUN_LAST,
 | 
				
			||||||
 | 
					            gobject.TYPE_NONE,
 | 
				
			||||||
 | 
					            (gobject.TYPE_UINT,))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, giobject):
 | 
				
			||||||
 | 
					        super(Context, self).__init__()
 | 
				
			||||||
 | 
					        import sys
 | 
				
			||||||
 | 
					        self.__giobject = giobject
 | 
				
			||||||
 | 
					        self.__giobject.connect('enabled', lambda *args: self.emit('enabled'))
 | 
				
			||||||
 | 
					        self.__giobject.connect('disabled', lambda *args: self.emit('disabled'))
 | 
				
			||||||
 | 
					        self.__giobject.connect('key-pressed', lambda *args: self.emit('key-pressed', args[1]))
 | 
				
			||||||
 | 
					        self.__giobject.connect('key-released', lambda *args: self.emit('key-released', args[1]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_giobject(self):
 | 
				
			||||||
 | 
					        return self.__giobject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def set_keyboard(self, keyboard):
 | 
				
			||||||
 | 
					        self.__giobject.set_keyboard(keyboard, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def show_keyboard(self):
 | 
				
			||||||
 | 
					        self.__giobject.show_keyboard(None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def hide_keyboard(self):
 | 
				
			||||||
 | 
					        self.__giobject.show_keyboard(None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def set_group(self, group):
 | 
				
			||||||
 | 
					        self.__giobject.set_group(group, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def press_key(self, keycode):
 | 
				
			||||||
 | 
					        self.__giobject.press_key(keycode, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def release_key(self, keycode):
 | 
				
			||||||
 | 
					        self.__giobject.release_key(keycode, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def is_enabled(self):
 | 
				
			||||||
 | 
					        return self.__giobject.is_enabled()
 | 
				
			||||||
							
								
								
									
										42
									
								
								bindings/python/eekboard/eekboard.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								bindings/python/eekboard/eekboard.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
 | 
				
			||||||
 | 
					# Copyright (C) 2011 Red Hat, Inc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This program 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
 | 
				
			||||||
 | 
					# General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with this program.  If not, see
 | 
				
			||||||
 | 
					# <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from gi.repository import Gio
 | 
				
			||||||
 | 
					import gi.repository
 | 
				
			||||||
 | 
					import gobject
 | 
				
			||||||
 | 
					from context import Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Eekboard(gobject.GObject):
 | 
				
			||||||
 | 
					    __gtype_name__ = "PYEekboardEekboard"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        super(Eekboard, self).__init__()
 | 
				
			||||||
 | 
					        self.__connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
 | 
				
			||||||
 | 
					        self.__eekboard = gi.repository.Eekboard.Eekboard.new(self.__connection, None);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def create_context(self, client_name):
 | 
				
			||||||
 | 
					        context = self.__eekboard.create_context(client_name, None)
 | 
				
			||||||
 | 
					        return Context(context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def push_context(self, context):
 | 
				
			||||||
 | 
					        self.__eekboard.push_context(context.get_giobject(), None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def pop_context(self):
 | 
				
			||||||
 | 
					        self.__eekboard.pop_context(None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def destroy_context(self, context):
 | 
				
			||||||
 | 
					        self.__eekboard.destroy_context(context.get_giobject(), None)
 | 
				
			||||||
							
								
								
									
										33
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								configure.ac
									
									
									
									
									
								
							@ -132,6 +132,37 @@ fi
 | 
				
			|||||||
AC_MSG_RESULT($enable_cspi)
 | 
					AC_MSG_RESULT($enable_cspi)
 | 
				
			||||||
AM_CONDITIONAL(ENABLE_CSPI, [test x$enable_cspi = xyes])
 | 
					AM_CONDITIONAL(ENABLE_CSPI, [test x$enable_cspi = xyes])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Python language binding
 | 
				
			||||||
 | 
					AC_MSG_CHECKING([whether you enable Python language support])
 | 
				
			||||||
 | 
					AC_ARG_ENABLE(python,
 | 
				
			||||||
 | 
					              AS_HELP_STRING([--enable-python=no/yes],
 | 
				
			||||||
 | 
					                             [Enable Python language binding default=yes]),,
 | 
				
			||||||
 | 
					              enable_python=yes)
 | 
				
			||||||
 | 
					AC_MSG_RESULT($enable_python)
 | 
				
			||||||
 | 
					AM_CONDITIONAL(ENABLE_PYTHON, [test x$enable_python = xyes])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if test x"$enable_python" = x"yes"; then
 | 
				
			||||||
 | 
					    # check python
 | 
				
			||||||
 | 
					    AM_PATH_PYTHON([2.5])
 | 
				
			||||||
 | 
					    AC_PATH_PROG(PYTHON_CONFIG, python$PYTHON_VERSION-config)
 | 
				
			||||||
 | 
					    if test x"$PYTHON_CONFIG" = x""; then
 | 
				
			||||||
 | 
					        AC_PATH_PROG(PYTHON_CONFIG, python-config)
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    if test x"$PYTHON_CONFIG" != x""; then
 | 
				
			||||||
 | 
					        PYTHON_CFLAGS=`$PYTHON_CONFIG --includes`
 | 
				
			||||||
 | 
					        PYTHON_LIBS=`$PYTHON_CONFIG --libs`
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        PYTHON_CFLAGS=`$PYTHON $srcdir/python-config.py --includes`
 | 
				
			||||||
 | 
					        PYTHON_LIBS=`$PYTHON $srcdir/python-config.py --libs`
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    PYTHON_INCLUDES="$PYTHON_CFLAGS"
 | 
				
			||||||
 | 
					    AC_SUBST(PYTHON_CFLAGS)
 | 
				
			||||||
 | 
					    AC_SUBST(PYTHON_INCLUDES)
 | 
				
			||||||
 | 
					    AC_SUBST(PYTHON_LIBS)
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    enable_python="no (disabled, use --enable-python to enable)"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dnl Vala langauge binding
 | 
					dnl Vala langauge binding
 | 
				
			||||||
AC_MSG_CHECKING([whether you enable Vala language support])
 | 
					AC_MSG_CHECKING([whether you enable Vala language support])
 | 
				
			||||||
AC_ARG_ENABLE(vala,
 | 
					AC_ARG_ENABLE(vala,
 | 
				
			||||||
@ -195,6 +226,8 @@ eekboard/Makefile
 | 
				
			|||||||
src/Makefile
 | 
					src/Makefile
 | 
				
			||||||
tests/Makefile
 | 
					tests/Makefile
 | 
				
			||||||
bindings/Makefile
 | 
					bindings/Makefile
 | 
				
			||||||
 | 
					bindings/python/Makefile
 | 
				
			||||||
 | 
					bindings/python/eekboard/Makefile
 | 
				
			||||||
bindings/vala/Makefile
 | 
					bindings/vala/Makefile
 | 
				
			||||||
docs/Makefile
 | 
					docs/Makefile
 | 
				
			||||||
docs/reference/Makefile
 | 
					docs/reference/Makefile
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user