Compare commits
	
		
			4 Commits
		
	
	
		
			eekboard-1
			...
			eekboard-0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 87a0540627 | |||
| 878a1c73fd | |||
| b465cbc5de | |||
| 2622e4eb59 | 
							
								
								
									
										14
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -4,7 +4,6 @@
 | 
			
		||||
*.o
 | 
			
		||||
*.so
 | 
			
		||||
*~
 | 
			
		||||
*.pyc
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
.deps
 | 
			
		||||
@ -34,7 +33,6 @@ gtk-doc.make
 | 
			
		||||
eek/eek-special-keysym-entries.h
 | 
			
		||||
eek/eek-unicode-keysym-entries.h
 | 
			
		||||
eek/eek-xkeysym-keysym-entries.h
 | 
			
		||||
eek/eek-enumtypes.[ch]
 | 
			
		||||
eek/eek-marshalers.[ch]
 | 
			
		||||
eek/*.pc
 | 
			
		||||
eek/*.gir
 | 
			
		||||
@ -42,15 +40,15 @@ eek/*.typelib
 | 
			
		||||
eekboard/*.pc
 | 
			
		||||
eekboard/*.gir
 | 
			
		||||
eekboard/*.typelib
 | 
			
		||||
eekboard/eekboard-marshalers.[ch]
 | 
			
		||||
tests/eek-simple-test
 | 
			
		||||
tests/eek-xkb-test
 | 
			
		||||
tests/eek-xml-test
 | 
			
		||||
src/eekboard
 | 
			
		||||
src/eekboard-server
 | 
			
		||||
src/eekboard-client
 | 
			
		||||
src/eekboard-system-client
 | 
			
		||||
src/eekboard-xml
 | 
			
		||||
docs/reference/eek/*.stamp
 | 
			
		||||
docs/reference/eek/*.txt
 | 
			
		||||
docs/reference/eek/eek.types
 | 
			
		||||
!/docs/reference/eek/eek-sections.txt
 | 
			
		||||
docs/reference/eek/xml
 | 
			
		||||
docs/reference/eek/html
 | 
			
		||||
@ -73,12 +71,6 @@ po/*.gmo
 | 
			
		||||
po/Makefile.in.in
 | 
			
		||||
po/POTFILES
 | 
			
		||||
po/stamp-it
 | 
			
		||||
po/.intltool-merge-cache
 | 
			
		||||
bindings/vala/*.vapi
 | 
			
		||||
py-compile
 | 
			
		||||
data/org.fedorahosted.eekboard.gschema.xml
 | 
			
		||||
data/org.fedorahosted.eekboard.gschema.valid
 | 
			
		||||
data/eekboard-server.service
 | 
			
		||||
data/*.desktop
 | 
			
		||||
examples/eekxml/eekxml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										46
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								README
									
									
									
									
									
								
							@ -3,12 +3,12 @@ eekboard - an easy to use virtual keyboard toolkit -*- outline -*-
 | 
			
		||||
eekboard is a virtual keyboard software package, including a set of
 | 
			
		||||
tools to implement desktop virtual keyboards.
 | 
			
		||||
 | 
			
		||||
* Building
 | 
			
		||||
* How to build
 | 
			
		||||
 | 
			
		||||
** Dependencies
 | 
			
		||||
 | 
			
		||||
REQUIRED: GLib2, GTK, PangoCairo, libxklavier, libcroco
 | 
			
		||||
OPTIONAL: libXtst, at-spi2-core, IBus, Clutter, Clutter-Gtk, Python, Vala, gobject-introspection, libcanberra
 | 
			
		||||
REQUIRED: GLib2, GTK, GConf2, PangoCairo, libxklavier, libcroco
 | 
			
		||||
OPTIONAL: fakekey, CSPI, Clutter, Clutter-Gtk, Vala, gobject-introspection
 | 
			
		||||
 | 
			
		||||
** Build from git repo
 | 
			
		||||
 | 
			
		||||
@ -24,12 +24,42 @@ OPTIONAL: libXtst, at-spi2-core, IBus, Clutter, Clutter-Gtk, Python, Vala, gobje
 | 
			
		||||
  $ make
 | 
			
		||||
  $ sudo make install
 | 
			
		||||
 | 
			
		||||
* Running
 | 
			
		||||
* How to test
 | 
			
		||||
 | 
			
		||||
eekboard currently includes 3 tools to implement your own virtual
 | 
			
		||||
keyboard.
 | 
			
		||||
 | 
			
		||||
** eekboard-server
 | 
			
		||||
 | 
			
		||||
eekboard-server is a D-Bus server which is responsible for drawing
 | 
			
		||||
interactive on-screen keyboards.  Since it has a D-Bus service
 | 
			
		||||
activation entry, you will not need to start it manually, but you can
 | 
			
		||||
do that with:
 | 
			
		||||
 | 
			
		||||
  $ eekboard-server &
 | 
			
		||||
 | 
			
		||||
** eekboard
 | 
			
		||||
 | 
			
		||||
eekboard is a client of eekboard-server.  It listens desktop events
 | 
			
		||||
(keyboard change, focus in/out, and keystroke) and generates key
 | 
			
		||||
events when some keys are pressed on the on-screen keyboard.  It can
 | 
			
		||||
be started with:
 | 
			
		||||
 | 
			
		||||
  $ eekboard
 | 
			
		||||
  $ eekboard -f # show/hide automatically based on focus-in/focus-out events
 | 
			
		||||
 | 
			
		||||
Even though eekboard -f watches a11y events by default, it currently
 | 
			
		||||
works better with IBus.  To use IBus, do:
 | 
			
		||||
** eekboard-xml
 | 
			
		||||
 | 
			
		||||
  $ gsettings set org.fedorahosted.eekboard focus-listener 'ibus'
 | 
			
		||||
eekboard-xml is a tool to manipulate XML keyboard description used by
 | 
			
		||||
eekboard-client tool and in the eekboard library.
 | 
			
		||||
 | 
			
		||||
To dump the current system keyboard layout into an XML file:
 | 
			
		||||
 | 
			
		||||
  $ eekboard-xml --dump > keyboard.xml
 | 
			
		||||
 | 
			
		||||
You can display the dumped layout with:
 | 
			
		||||
 | 
			
		||||
  $ eekboard-xml --load keyboard.xml
 | 
			
		||||
 | 
			
		||||
* Documentation
 | 
			
		||||
 | 
			
		||||
See file:docs/reference/eek/html/index.html
 | 
			
		||||
 | 
			
		||||
@ -16,4 +16,12 @@
 | 
			
		||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
# 02110-1301 USA
 | 
			
		||||
 | 
			
		||||
SUBDIRS = vala
 | 
			
		||||
SUBDIRS =
 | 
			
		||||
 | 
			
		||||
if ENABLE_PYTHON
 | 
			
		||||
SUBDIRS += python
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if ENABLE_VALA
 | 
			
		||||
SUBDIRS += vala
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										67
									
								
								bindings/python/eekboard/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								bindings/python/eekboard/__init__.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
			
		||||
# 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
 | 
			
		||||
SymbolMatrix = Eek.SymbolMatrix
 | 
			
		||||
 | 
			
		||||
MODIFIER_BEHAVIOR_NONE, \
 | 
			
		||||
MODIFIER_BEHAVIOR_LOCK, \
 | 
			
		||||
MODIFIER_BEHAVIOR_LATCH = \
 | 
			
		||||
(Eek.ModifierBehavior.NONE,
 | 
			
		||||
 Eek.ModifierBehavior.LOCK,
 | 
			
		||||
 Eek.ModifierBehavior.LATCH)
 | 
			
		||||
 | 
			
		||||
SymbolCategory = Eek.SymbolCategory
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
    keyboard.set_alt_gr_mask(Eek.ModifierType.MOD5_MASK)
 | 
			
		||||
    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']
 | 
			
		||||
							
								
								
									
										100
									
								
								bindings/python/eekboard/context.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								bindings/python/eekboard/context.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,100 @@
 | 
			
		||||
# 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,)),
 | 
			
		||||
        'destroyed': (
 | 
			
		||||
            gobject.SIGNAL_RUN_LAST,
 | 
			
		||||
            gobject.TYPE_NONE,
 | 
			
		||||
            ()),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    __gproperties__ = {
 | 
			
		||||
        'keyboard-visible': (bool, None, None, False, gobject.PARAM_READWRITE),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def __init__(self, giobject):
 | 
			
		||||
        super(Context, self).__init__()
 | 
			
		||||
        self.__properties = dict()
 | 
			
		||||
        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]))
 | 
			
		||||
        self.__giobject.connect('destroyed', lambda *args: self.emit('destroyed'))
 | 
			
		||||
        self.__giobject.connect('notify::keyboard-visible', self.__notify_keyboard_visible_cb)
 | 
			
		||||
 | 
			
		||||
    def do_set_property(self, pspec, value):
 | 
			
		||||
        self.__properties[pspec.name] = value
 | 
			
		||||
 | 
			
		||||
    def do_get_property(self, pspec):
 | 
			
		||||
        return self.__properties[pspec.name]
 | 
			
		||||
 | 
			
		||||
    def __notify_keyboard_visible_cb(self, *args):
 | 
			
		||||
        self.set_property('keyboard-visible',
 | 
			
		||||
                          self.__giobject.get_property(args[1].name))
 | 
			
		||||
        self.notify('keyboard-visible')
 | 
			
		||||
 | 
			
		||||
    def get_giobject(self):
 | 
			
		||||
        return self.__giobject
 | 
			
		||||
 | 
			
		||||
    def add_keyboard(self, keyboard):
 | 
			
		||||
        return self.__giobject.add_keyboard(keyboard, None)
 | 
			
		||||
 | 
			
		||||
    def remove_keyboard(self, keyboard_id):
 | 
			
		||||
        return self.__giobject.remove_keyboard(keyboard_id, None)
 | 
			
		||||
        
 | 
			
		||||
    def set_keyboard(self, keyboard_id):
 | 
			
		||||
        self.__giobject.set_keyboard(keyboard_id, None)
 | 
			
		||||
 | 
			
		||||
    def show_keyboard(self):
 | 
			
		||||
        self.__giobject.show_keyboard(None)
 | 
			
		||||
 | 
			
		||||
    def hide_keyboard(self):
 | 
			
		||||
        self.__giobject.hide_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()
 | 
			
		||||
							
								
								
									
										49
									
								
								bindings/python/eekboard/eekboard.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								bindings/python/eekboard/eekboard.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
# 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"
 | 
			
		||||
    __gsignals__ = {
 | 
			
		||||
        'destroyed': (
 | 
			
		||||
            gobject.SIGNAL_RUN_LAST,
 | 
			
		||||
            gobject.TYPE_NONE,
 | 
			
		||||
            ())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
        self.__eekboard.connect('destroyed', lambda *args: self.emit('destroyed'))
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
@ -16,68 +16,35 @@
 | 
			
		||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
# 02110-1301 USA
 | 
			
		||||
 | 
			
		||||
if ENABLE_VALA
 | 
			
		||||
vapidir = $(datadir)/vala/vapi
 | 
			
		||||
dist_vapi_DATA = \
 | 
			
		||||
	eek-$(EEK_API_VERSION).vapi \
 | 
			
		||||
	eek-$(EEK_API_VERSION).deps		\
 | 
			
		||||
	eek-clutter-$(EEK_API_VERSION).vapi \
 | 
			
		||||
	eek-gtk-$(EEK_API_VERSION).vapi \
 | 
			
		||||
	eek-gtk-$(EEK_API_VERSION).deps		\
 | 
			
		||||
	eek-xkl-$(EEK_API_VERSION).vapi		\
 | 
			
		||||
	eek-xkl-$(EEK_API_VERSION).deps		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
	eek-xkb-$(EEK_API_VERSION).vapi \
 | 
			
		||||
	eek-xkl-$(EEK_API_VERSION).vapi
 | 
			
		||||
MAINTAINERCLEANFILES = $(dist_vapi_DATA)
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST =					\
 | 
			
		||||
	Eek-$(EEK_API_VERSION).metadata		\
 | 
			
		||||
	EekGtk-$(EEK_API_VERSION).metadata	\
 | 
			
		||||
	EekXkl-$(EEK_API_VERSION).metadata	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
eek-$(EEK_API_VERSION).vapi:
 | 
			
		||||
	vapigen --library eek-$(EEK_API_VERSION) \
 | 
			
		||||
		eek-$(EEK_API_VERSION)/eek-$(EEK_API_VERSION).gi
 | 
			
		||||
 | 
			
		||||
maintainer-clean-local:
 | 
			
		||||
	rm -f *.vapi
 | 
			
		||||
eek-clutter-$(EEK_API_VERSION).vapi: eek-$(EEK_API_VERSION).vapi
 | 
			
		||||
	vapigen --vapidir=$(builddir) --library eek-clutter-$(EEK_API_VERSION) \
 | 
			
		||||
		--pkg eek-$(EEK_API_VERSION) --pkg clutter-1.0 \
 | 
			
		||||
		eek-clutter-$(EEK_API_VERSION)/eek-clutter-$(EEK_API_VERSION).gi
 | 
			
		||||
 | 
			
		||||
eek_vapi_deps =						\
 | 
			
		||||
	$(srcdir)/Eek-$(EEK_API_VERSION).metadata	\
 | 
			
		||||
	|						\
 | 
			
		||||
	$(top_srcdir)/eek/Eek-$(EEK_API_VERSION).gir	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
eek-gtk-$(EEK_API_VERSION).vapi: eek-$(EEK_API_VERSION).vapi
 | 
			
		||||
	vapigen --vapidir=$(builddir) --library eek-gtk-$(EEK_API_VERSION) \
 | 
			
		||||
		--pkg eek-$(EEK_API_VERSION) --pkg gtk+-2.0 \
 | 
			
		||||
		eek-gtk-$(EEK_API_VERSION)/eek-gtk-$(EEK_API_VERSION).gi
 | 
			
		||||
 | 
			
		||||
eek-$(EEK_API_VERSION).vapi: $(eek_vapi_deps)
 | 
			
		||||
	$(VAPIGEN_V)$(VAPIGEN)					\
 | 
			
		||||
		--library eek-$(EEK_API_VERSION)		\
 | 
			
		||||
		--pkg gio-2.0					\
 | 
			
		||||
		--metadatadir=$(srcdir)				\
 | 
			
		||||
		$(top_srcdir)/eek/Eek-$(EEK_API_VERSION).gir
 | 
			
		||||
 | 
			
		||||
eek_gtk_vapi_deps =					\
 | 
			
		||||
	$(srcdir)/EekGtk-$(EEK_API_VERSION).metadata	\
 | 
			
		||||
	|						\
 | 
			
		||||
	$(top_srcdir)/eek/EekGtk-$(EEK_API_VERSION).gir	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
eek-gtk-$(EEK_API_VERSION).vapi: $(eek_gtk_vapi_deps)
 | 
			
		||||
	$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir)		\
 | 
			
		||||
		--library eek-gtk-$(EEK_API_VERSION)		\
 | 
			
		||||
eek-xkb-$(EEK_API_VERSION).vapi: eek-$(EEK_API_VERSION).vapi
 | 
			
		||||
	vapigen --vapidir=$(builddir) --library eek-xkb-$(EEK_API_VERSION) \
 | 
			
		||||
		--pkg eek-$(EEK_API_VERSION) \
 | 
			
		||||
		--pkg gtk+-3.0					\
 | 
			
		||||
		--metadatadir=$(srcdir)				\
 | 
			
		||||
		$(top_srcdir)/eek/EekGtk-$(EEK_API_VERSION).gir
 | 
			
		||||
		eek-xkb-$(EEK_API_VERSION)/eek-xkb-$(EEK_API_VERSION).gi
 | 
			
		||||
 | 
			
		||||
eek_xkl_vapi_deps =					\
 | 
			
		||||
	$(srcdir)/EekXkl-$(EEK_API_VERSION).metadata	\
 | 
			
		||||
	|						\
 | 
			
		||||
	$(top_srcdir)/eek/EekXkl-$(EEK_API_VERSION).gir	\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
eek-xkl-$(EEK_API_VERSION).vapi: $(eek_xkl_vapi_deps)
 | 
			
		||||
	$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir)		\
 | 
			
		||||
		--library eek-xkl-$(EEK_API_VERSION)		\
 | 
			
		||||
		--pkg eek-$(EEK_API_VERSION)			\
 | 
			
		||||
		--metadatadir=$(srcdir)				\
 | 
			
		||||
		$(top_srcdir)/eek/EekXkl-$(EEK_API_VERSION).gir
 | 
			
		||||
 | 
			
		||||
# set up the verbosity rules to avoid some build noise
 | 
			
		||||
VAPIGEN_V = $(VAPIGEN_V_$(V))
 | 
			
		||||
VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY))
 | 
			
		||||
VAPIGEN_V_0 = @echo "  VAPIG " $@;
 | 
			
		||||
endif
 | 
			
		||||
eek-xkl-$(EEK_API_VERSION).vapi: eek-xkb-$(EEK_API_VERSION).vapi
 | 
			
		||||
	vapigen --vapidir=$(builddir) --library eek-xkl-$(EEK_API_VERSION) \
 | 
			
		||||
		--pkg eek-$(EEK_API_VERSION) --pkg eek-xkb-$(EEK_API_VERSION) \
 | 
			
		||||
		eek-xkl-$(EEK_API_VERSION)/eek-xkl-$(EEK_API_VERSION).gi
 | 
			
		||||
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
gio-2.0
 | 
			
		||||
							
								
								
									
										9
									
								
								bindings/vala/eek-0.90/eek-0.90.files
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								bindings/vala/eek-0.90/eek-0.90.files
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
include/eek-0.1/eek/eek-layout.h
 | 
			
		||||
include/eek-0.1/eek/eek-element.h
 | 
			
		||||
include/eek-0.1/eek/eek-container.h
 | 
			
		||||
include/eek-0.1/eek/eek-keyboard.h
 | 
			
		||||
include/eek-0.1/eek/eek-section.h
 | 
			
		||||
include/eek-0.1/eek/eek-key.h
 | 
			
		||||
include/eek-0.1/eek/eek-types.h
 | 
			
		||||
include/eek-0.1/eek/eek-keysym.h
 | 
			
		||||
lib/libeek.so
 | 
			
		||||
							
								
								
									
										680
									
								
								bindings/vala/eek-0.90/eek-0.90.gi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										680
									
								
								bindings/vala/eek-0.90/eek-0.90.gi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,680 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<api version="1.0">
 | 
			
		||||
	<namespace name="Eek">
 | 
			
		||||
		<function name="keysym_get_category" symbol="eek_keysym_get_category">
 | 
			
		||||
			<return-type type="EekKeysymCategory"/>
 | 
			
		||||
			<parameters>
 | 
			
		||||
				<parameter name="keysym" type="guint"/>
 | 
			
		||||
			</parameters>
 | 
			
		||||
		</function>
 | 
			
		||||
		<function name="keysym_to_string" symbol="eek_keysym_to_string">
 | 
			
		||||
			<return-type type="gchar*"/>
 | 
			
		||||
			<parameters>
 | 
			
		||||
				<parameter name="keysym" type="guint"/>
 | 
			
		||||
			</parameters>
 | 
			
		||||
		</function>
 | 
			
		||||
		<callback name="EekCallback">
 | 
			
		||||
			<return-type type="void"/>
 | 
			
		||||
			<parameters>
 | 
			
		||||
				<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				<parameter name="user_data" type="gpointer"/>
 | 
			
		||||
			</parameters>
 | 
			
		||||
		</callback>
 | 
			
		||||
		<callback name="EekCompareFunc">
 | 
			
		||||
			<return-type type="gint"/>
 | 
			
		||||
			<parameters>
 | 
			
		||||
				<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				<parameter name="user_data" type="gpointer"/>
 | 
			
		||||
			</parameters>
 | 
			
		||||
		</callback>
 | 
			
		||||
		<boxed name="EekBounds" type-name="EekBounds" get-type="eek_bounds_get_type">
 | 
			
		||||
			<field name="x" type="gdouble"/>
 | 
			
		||||
			<field name="y" type="gdouble"/>
 | 
			
		||||
			<field name="width" type="gdouble"/>
 | 
			
		||||
			<field name="height" type="gdouble"/>
 | 
			
		||||
		</boxed>
 | 
			
		||||
		<boxed name="EekKeysymMatrix" type-name="EekKeysymMatrix" get-type="eek_keysym_matrix_get_type">
 | 
			
		||||
			<field name="data" type="guint*"/>
 | 
			
		||||
			<field name="num_groups" type="gint"/>
 | 
			
		||||
			<field name="num_levels" type="gint"/>
 | 
			
		||||
		</boxed>
 | 
			
		||||
		<boxed name="EekOutline" type-name="EekOutline" get-type="eek_outline_get_type">
 | 
			
		||||
			<field name="corner_radius" type="gdouble"/>
 | 
			
		||||
			<field name="points" type="EekPoint*"/>
 | 
			
		||||
			<field name="num_points" type="gint"/>
 | 
			
		||||
		</boxed>
 | 
			
		||||
		<boxed name="EekPoint" type-name="EekPoint" get-type="eek_point_get_type">
 | 
			
		||||
			<field name="x" type="gdouble"/>
 | 
			
		||||
			<field name="y" type="gdouble"/>
 | 
			
		||||
		</boxed>
 | 
			
		||||
		<enum name="EekKeysymCategory">
 | 
			
		||||
			<member name="EEK_KEYSYM_CATEGORY_LETTER" value="0"/>
 | 
			
		||||
			<member name="EEK_KEYSYM_CATEGORY_FUNCTION" value="1"/>
 | 
			
		||||
			<member name="EEK_KEYSYM_CATEGORY_KEYNAME" value="2"/>
 | 
			
		||||
			<member name="EEK_KEYSYM_CATEGORY_UNKNOWN" value="3"/>
 | 
			
		||||
			<member name="EEK_KEYSYM_CATEGORY_LAST" value="3"/>
 | 
			
		||||
		</enum>
 | 
			
		||||
		<enum name="EekOrientation">
 | 
			
		||||
			<member name="EEK_ORIENTATION_VERTICAL" value="0"/>
 | 
			
		||||
			<member name="EEK_ORIENTATION_HORIZONTAL" value="1"/>
 | 
			
		||||
			<member name="EEK_ORIENTATION_INVALID" value="-1"/>
 | 
			
		||||
		</enum>
 | 
			
		||||
		<object name="EekContainer" parent="EekElement" type-name="EekContainer" get-type="eek_container_get_type">
 | 
			
		||||
			<method name="find" symbol="eek_container_find">
 | 
			
		||||
				<return-type type="EekElement*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="container" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="func" type="EekCompareFunc"/>
 | 
			
		||||
					<parameter name="user_data" type="gpointer"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="find_by_position" symbol="eek_container_find_by_position">
 | 
			
		||||
				<return-type type="EekElement*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="container" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="x" type="gdouble"/>
 | 
			
		||||
					<parameter name="y" type="gdouble"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="foreach_child" symbol="eek_container_foreach_child">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="container" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="callback" type="EekCallback"/>
 | 
			
		||||
					<parameter name="user_data" type="gpointer"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<signal name="child-added" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<signal name="child-removed" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<vfunc name="add_child">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="find">
 | 
			
		||||
				<return-type type="EekElement*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="func" type="EekCompareFunc"/>
 | 
			
		||||
					<parameter name="user_data" type="gpointer"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="foreach_child">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="callback" type="EekCallback"/>
 | 
			
		||||
					<parameter name="user_data" type="gpointer"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="remove_child">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekContainer*"/>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekElement" parent="GInitiallyUnowned" type-name="EekElement" get-type="eek_element_get_type">
 | 
			
		||||
			<method name="get_absolute_position" symbol="eek_element_get_absolute_position">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
					<parameter name="x" type="gdouble*"/>
 | 
			
		||||
					<parameter name="y" type="gdouble*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_bounds" symbol="eek_element_get_bounds">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
					<parameter name="bounds" type="EekBounds*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_name" symbol="eek_element_get_name">
 | 
			
		||||
				<return-type type="gchar*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_parent" symbol="eek_element_get_parent">
 | 
			
		||||
				<return-type type="EekElement*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_bounds" symbol="eek_element_set_bounds">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
					<parameter name="bounds" type="EekBounds*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_name" symbol="eek_element_set_name">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
					<parameter name="name" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_parent" symbol="eek_element_set_parent">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="element" type="EekElement*"/>
 | 
			
		||||
					<parameter name="parent" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<property name="bounds" type="EekBounds*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="name" type="char*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<vfunc name="get_bounds">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekElement*"/>
 | 
			
		||||
					<parameter name="bounds" type="EekBounds*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_name">
 | 
			
		||||
				<return-type type="gchar*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_parent">
 | 
			
		||||
				<return-type type="EekElement*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_bounds">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekElement*"/>
 | 
			
		||||
					<parameter name="bounds" type="EekBounds*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_name">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekElement*"/>
 | 
			
		||||
					<parameter name="name" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_parent">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekElement*"/>
 | 
			
		||||
					<parameter name="parent" type="EekElement*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekKey" parent="EekElement" type-name="EekKey" get-type="eek_key_get_type">
 | 
			
		||||
			<method name="get_index" symbol="eek_key_get_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="column" type="gint*"/>
 | 
			
		||||
					<parameter name="row" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_keycode" symbol="eek_key_get_keycode">
 | 
			
		||||
				<return-type type="guint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_keysym" symbol="eek_key_get_keysym">
 | 
			
		||||
				<return-type type="guint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_keysym_index" symbol="eek_key_get_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="group" type="gint*"/>
 | 
			
		||||
					<parameter name="level" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_keysyms" symbol="eek_key_get_keysyms">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="keysyms" type="guint**"/>
 | 
			
		||||
					<parameter name="num_groups" type="gint*"/>
 | 
			
		||||
					<parameter name="num_levels" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_outline" symbol="eek_key_get_outline">
 | 
			
		||||
				<return-type type="EekOutline*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_index" symbol="eek_key_set_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="column" type="gint"/>
 | 
			
		||||
					<parameter name="row" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_keycode" symbol="eek_key_set_keycode">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="keycode" type="guint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_keysym_index" symbol="eek_key_set_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="group" type="gint"/>
 | 
			
		||||
					<parameter name="level" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_keysyms" symbol="eek_key_set_keysyms">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="keysyms" type="guint*"/>
 | 
			
		||||
					<parameter name="num_groups" type="gint"/>
 | 
			
		||||
					<parameter name="num_levels" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_outline" symbol="eek_key_set_outline">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
					<parameter name="outline" type="EekOutline*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<property name="column" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="group" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="keycode" type="guint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="keysyms" type="EekKeysymMatrix*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="level" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="outline" type="gpointer" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="row" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<signal name="pressed" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<signal name="released" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<vfunc name="get_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="column" type="gint*"/>
 | 
			
		||||
					<parameter name="row" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_keycode">
 | 
			
		||||
				<return-type type="guint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_keysym">
 | 
			
		||||
				<return-type type="guint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="group" type="gint*"/>
 | 
			
		||||
					<parameter name="level" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_keysyms">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="keysyms" type="guint**"/>
 | 
			
		||||
					<parameter name="num_groups" type="gint*"/>
 | 
			
		||||
					<parameter name="num_levels" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_outline">
 | 
			
		||||
				<return-type type="EekOutline*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="column" type="gint"/>
 | 
			
		||||
					<parameter name="row" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_keycode">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="keycode" type="guint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="group" type="gint"/>
 | 
			
		||||
					<parameter name="level" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_keysyms">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="keysyms" type="guint*"/>
 | 
			
		||||
					<parameter name="num_groups" type="gint"/>
 | 
			
		||||
					<parameter name="num_levels" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_outline">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKey*"/>
 | 
			
		||||
					<parameter name="outline" type="EekOutline*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekKeyboard" parent="EekContainer" type-name="EekKeyboard" get-type="eek_keyboard_get_type">
 | 
			
		||||
			<method name="create_section" symbol="eek_keyboard_create_section">
 | 
			
		||||
				<return-type type="EekSection*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="find_key_by_keycode" symbol="eek_keyboard_find_key_by_keycode">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="keycode" type="guint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_keysym_index" symbol="eek_keyboard_get_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="group" type="gint*"/>
 | 
			
		||||
					<parameter name="level" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="realize" symbol="eek_keyboard_realize">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_keysym_index" symbol="eek_keyboard_set_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="group" type="gint"/>
 | 
			
		||||
					<parameter name="level" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_layout" symbol="eek_keyboard_set_layout">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="layout" type="EekLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<property name="group" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="level" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<signal name="key-pressed" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="object" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="p0" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<signal name="key-released" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="object" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="p0" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<vfunc name="create_section">
 | 
			
		||||
				<return-type type="EekSection*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="find_key_by_keycode">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="keycode" type="guint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="group" type="gint*"/>
 | 
			
		||||
					<parameter name="level" type="gint*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="realize">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_keysym_index">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="group" type="gint"/>
 | 
			
		||||
					<parameter name="level" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_layout">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekKeyboard*"/>
 | 
			
		||||
					<parameter name="layout" type="EekLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekSection" parent="EekContainer" type-name="EekSection" get-type="eek_section_get_type">
 | 
			
		||||
			<method name="add_row" symbol="eek_section_add_row">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
					<parameter name="num_columns" type="gint"/>
 | 
			
		||||
					<parameter name="orientation" type="EekOrientation"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="create_key" symbol="eek_section_create_key">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
					<parameter name="column" type="gint"/>
 | 
			
		||||
					<parameter name="row" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="find_key_by_keycode" symbol="eek_section_find_key_by_keycode">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
					<parameter name="keycode" type="guint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_angle" symbol="eek_section_get_angle">
 | 
			
		||||
				<return-type type="gint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_n_rows" symbol="eek_section_get_n_rows">
 | 
			
		||||
				<return-type type="gint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_row" symbol="eek_section_get_row">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
					<parameter name="index" type="gint"/>
 | 
			
		||||
					<parameter name="num_columns" type="gint*"/>
 | 
			
		||||
					<parameter name="orientation" type="EekOrientation*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_angle" symbol="eek_section_set_angle">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekSection*"/>
 | 
			
		||||
					<parameter name="angle" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<property name="angle" type="gint" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<signal name="key-pressed" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="object" type="EekSection*"/>
 | 
			
		||||
					<parameter name="p0" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<signal name="key-released" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="object" type="EekSection*"/>
 | 
			
		||||
					<parameter name="p0" type="EekKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<vfunc name="add_row">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
					<parameter name="num_columns" type="gint"/>
 | 
			
		||||
					<parameter name="orientation" type="EekOrientation"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="create_key">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
					<parameter name="row" type="gint"/>
 | 
			
		||||
					<parameter name="column" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="find_key_by_keycode">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
					<parameter name="keycode" type="guint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_angle">
 | 
			
		||||
				<return-type type="gint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_n_rows">
 | 
			
		||||
				<return-type type="gint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_row">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
					<parameter name="index" type="gint"/>
 | 
			
		||||
					<parameter name="num_columns" type="gint*"/>
 | 
			
		||||
					<parameter name="orientation" type="EekOrientation*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="set_angle">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekSection*"/>
 | 
			
		||||
					<parameter name="angle" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
		</object>
 | 
			
		||||
		<interface name="EekLayout" type-name="EekLayout" get-type="eek_layout_get_type">
 | 
			
		||||
			<method name="apply" symbol="eek_layout_apply">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekLayout*"/>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_group" symbol="eek_layout_get_group">
 | 
			
		||||
				<return-type type="gint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<signal name="changed" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<signal name="group-changed" when="FIRST">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekLayout*"/>
 | 
			
		||||
					<parameter name="group" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</signal>
 | 
			
		||||
			<vfunc name="apply">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekLayout*"/>
 | 
			
		||||
					<parameter name="keyboard" type="EekKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
			<vfunc name="get_group">
 | 
			
		||||
				<return-type type="gint"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="self" type="EekLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</vfunc>
 | 
			
		||||
		</interface>
 | 
			
		||||
		<constant name="EEK_CONTAINER_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_ELEMENT_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_KEYBOARD_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_KEYSYM_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_KEY_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_LAYOUT_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_SECTION_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_TYPES_H" type="int" value="1"/>
 | 
			
		||||
	</namespace>
 | 
			
		||||
</api>
 | 
			
		||||
							
								
								
									
										1
									
								
								bindings/vala/eek-0.90/eek-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bindings/vala/eek-0.90/eek-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Eek
 | 
			
		||||
							
								
								
									
										6
									
								
								bindings/vala/eek-clutter-0.90/eek-clutter-0.90.files
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								bindings/vala/eek-clutter-0.90/eek-clutter-0.90.files
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
include/eek-0.1/eek/eek-clutter-keyboard.h
 | 
			
		||||
include/eek-0.1/eek/eek-clutter-section.h
 | 
			
		||||
include/eek-0.1/eek/eek-clutter-key.h
 | 
			
		||||
include/eek-0.1/eek/eek-clutter-drawing-context.h
 | 
			
		||||
lib/libeek-clutter.so
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										85
									
								
								bindings/vala/eek-clutter-0.90/eek-clutter-0.90.gi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								bindings/vala/eek-clutter-0.90/eek-clutter-0.90.gi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,85 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<api version="1.0">
 | 
			
		||||
	<namespace name="EekClutter">
 | 
			
		||||
		<object name="EekClutterDrawingContext" parent="GInitiallyUnowned" type-name="EekClutterDrawingContext" get-type="eek_clutter_drawing_context_get_type">
 | 
			
		||||
			<method name="get_category_font" symbol="eek_clutter_drawing_context_get_category_font">
 | 
			
		||||
				<return-type type="PangoFontDescription*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="context" type="EekClutterDrawingContext*"/>
 | 
			
		||||
					<parameter name="category" type="EekKeysymCategory"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_outline_texture" symbol="eek_clutter_drawing_context_get_outline_texture">
 | 
			
		||||
				<return-type type="ClutterActor*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="context" type="EekClutterDrawingContext*"/>
 | 
			
		||||
					<parameter name="outline" type="EekOutline*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_clutter_drawing_context_new">
 | 
			
		||||
				<return-type type="EekClutterDrawingContext*"/>
 | 
			
		||||
			</constructor>
 | 
			
		||||
			<method name="set_category_font" symbol="eek_clutter_drawing_context_set_category_font">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="context" type="EekClutterDrawingContext*"/>
 | 
			
		||||
					<parameter name="category" type="EekKeysymCategory"/>
 | 
			
		||||
					<parameter name="fonts" type="PangoFontDescription*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_outline_texture" symbol="eek_clutter_drawing_context_set_outline_texture">
 | 
			
		||||
				<return-type type="void"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="context" type="EekClutterDrawingContext*"/>
 | 
			
		||||
					<parameter name="outline" type="EekOutline*"/>
 | 
			
		||||
					<parameter name="texture" type="ClutterActor*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekClutterKey" parent="EekKey" type-name="EekClutterKey" get-type="eek_clutter_key_get_type">
 | 
			
		||||
			<method name="get_actor" symbol="eek_clutter_key_get_actor">
 | 
			
		||||
				<return-type type="ClutterActor*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="key" type="EekClutterKey*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_clutter_key_new">
 | 
			
		||||
				<return-type type="EekKey*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="context" type="EekClutterDrawingContext*"/>
 | 
			
		||||
					<parameter name="column" type="gint"/>
 | 
			
		||||
					<parameter name="row" type="gint"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</constructor>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekClutterKeyboard" parent="EekKeyboard" type-name="EekClutterKeyboard" get-type="eek_clutter_keyboard_get_type">
 | 
			
		||||
			<method name="get_actor" symbol="eek_clutter_keyboard_get_actor">
 | 
			
		||||
				<return-type type="ClutterActor*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekClutterKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_clutter_keyboard_new">
 | 
			
		||||
				<return-type type="EekKeyboard*"/>
 | 
			
		||||
			</constructor>
 | 
			
		||||
		</object>
 | 
			
		||||
		<object name="EekClutterSection" parent="EekSection" type-name="EekClutterSection" get-type="eek_clutter_section_get_type">
 | 
			
		||||
			<method name="get_actor" symbol="eek_clutter_section_get_actor">
 | 
			
		||||
				<return-type type="ClutterActor*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="section" type="EekClutterSection*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_clutter_section_new">
 | 
			
		||||
				<return-type type="EekSection*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="context" type="EekClutterDrawingContext*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</constructor>
 | 
			
		||||
		</object>
 | 
			
		||||
		<constant name="EEK_CLUTTER_DRAWING_CONTEXT_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_CLUTTER_KEYBOARD_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_CLUTTER_KEY_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_CLUTTER_SECTION_H" type="int" value="1"/>
 | 
			
		||||
	</namespace>
 | 
			
		||||
</api>
 | 
			
		||||
							
								
								
									
										1
									
								
								bindings/vala/eek-clutter-0.90/eek-clutter-0.90.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bindings/vala/eek-clutter-0.90/eek-clutter-0.90.metadata
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
EekClutter cheader_filename="eek/eek-clutter.h"
 | 
			
		||||
@ -0,0 +1 @@
 | 
			
		||||
EekClutter
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
eek-0.90
 | 
			
		||||
							
								
								
									
										3
									
								
								bindings/vala/eek-gtk-0.90/eek-gtk-0.90.files
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								bindings/vala/eek-gtk-0.90/eek-gtk-0.90.files
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
include/eek-0.1/eek/eek-gtk-keyboard.h
 | 
			
		||||
include/eek-0.1/eek/eek-gtk.h
 | 
			
		||||
lib/libeek-gtk.so
 | 
			
		||||
							
								
								
									
										18
									
								
								bindings/vala/eek-gtk-0.90/eek-gtk-0.90.gi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								bindings/vala/eek-gtk-0.90/eek-gtk-0.90.gi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<api version="1.0">
 | 
			
		||||
	<namespace name="EekGtk">
 | 
			
		||||
		<object name="EekGtkKeyboard" parent="EekKeyboard" type-name="EekGtkKeyboard" get-type="eek_gtk_keyboard_get_type">
 | 
			
		||||
			<method name="get_widget" symbol="eek_gtk_keyboard_get_widget">
 | 
			
		||||
				<return-type type="GtkWidget*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="keyboard" type="EekGtkKeyboard*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_gtk_keyboard_new">
 | 
			
		||||
				<return-type type="EekKeyboard*"/>
 | 
			
		||||
			</constructor>
 | 
			
		||||
		</object>
 | 
			
		||||
		<constant name="EEK_GTK_H" type="int" value="1"/>
 | 
			
		||||
		<constant name="EEK_GTK_KEYBOARD_H" type="int" value="1"/>
 | 
			
		||||
	</namespace>
 | 
			
		||||
</api>
 | 
			
		||||
							
								
								
									
										1
									
								
								bindings/vala/eek-gtk-0.90/eek-gtk-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bindings/vala/eek-gtk-0.90/eek-gtk-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
EekGtk
 | 
			
		||||
							
								
								
									
										2
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.files
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.files
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
include/eek-0.1/eek/eek-xkb-layout.h
 | 
			
		||||
lib/libeek-xkb.so
 | 
			
		||||
							
								
								
									
										65
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.gi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.gi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<api version="1.0">
 | 
			
		||||
	<namespace name="EekXkb">
 | 
			
		||||
		<object name="EekXkbLayout" parent="GInitiallyUnowned" type-name="EekXkbLayout" get-type="eek_xkb_layout_get_type">
 | 
			
		||||
			<implements>
 | 
			
		||||
				<interface name="EekLayout"/>
 | 
			
		||||
			</implements>
 | 
			
		||||
			<method name="get_geometry" symbol="eek_xkb_layout_get_geometry">
 | 
			
		||||
				<return-type type="gchar*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_keycodes" symbol="eek_xkb_layout_get_keycodes">
 | 
			
		||||
				<return-type type="gchar*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_symbols" symbol="eek_xkb_layout_get_symbols">
 | 
			
		||||
				<return-type type="gchar*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_xkb_layout_new">
 | 
			
		||||
				<return-type type="EekLayout*"/>
 | 
			
		||||
			</constructor>
 | 
			
		||||
			<method name="set_geometry" symbol="eek_xkb_layout_set_geometry">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
					<parameter name="geometry" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_keycodes" symbol="eek_xkb_layout_set_keycodes">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
					<parameter name="keycodes" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
<!--
 | 
			
		||||
			<method name="set_names" symbol="eek_xkb_layout_set_names">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
					<parameter name="names" type="XkbComponentNamesRec*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
-->
 | 
			
		||||
			<method name="set_symbols" symbol="eek_xkb_layout_set_symbols">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXkbLayout*"/>
 | 
			
		||||
					<parameter name="symbols" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<property name="geometry" type="char*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="keycodes" type="char*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="symbols" type="char*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
		</object>
 | 
			
		||||
		<constant name="EEK_XKB_LAYOUT_H" type="int" value="1"/>
 | 
			
		||||
	</namespace>
 | 
			
		||||
</api>
 | 
			
		||||
							
								
								
									
										1
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.metadata
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
EekXkb cheader_filename="eek/eek-xkb.h"
 | 
			
		||||
							
								
								
									
										1
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bindings/vala/eek-xkb-0.90/eek-xkb-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
EekXkb
 | 
			
		||||
@ -1 +0,0 @@
 | 
			
		||||
eek-0.90
 | 
			
		||||
							
								
								
									
										3
									
								
								bindings/vala/eek-xkl-0.90/eek-xkl-0.90.files
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								bindings/vala/eek-xkl-0.90/eek-xkl-0.90.files
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
include/eek-0.1/eek/eek-xkl-layout.h
 | 
			
		||||
lib/libeek-xkl.so
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										91
									
								
								bindings/vala/eek-xkl-0.90/eek-xkl-0.90.gi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								bindings/vala/eek-xkl-0.90/eek-xkl-0.90.gi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<api version="1.0">
 | 
			
		||||
	<namespace name="EekXkl">
 | 
			
		||||
		<object name="EekXklLayout" parent="EekXkbLayout" type-name="EekXklLayout" get-type="eek_xkl_layout_get_type">
 | 
			
		||||
			<implements>
 | 
			
		||||
				<interface name="EekLayout"/>
 | 
			
		||||
			</implements>
 | 
			
		||||
			<method name="disable_option" symbol="eek_xkl_layout_disable_option">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="option" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="enable_option" symbol="eek_xkl_layout_enable_option">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="option" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_layouts" symbol="eek_xkl_layout_get_layouts">
 | 
			
		||||
				<return-type type="gchar**"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_model" symbol="eek_xkl_layout_get_model">
 | 
			
		||||
				<return-type type="gchar*"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_option" symbol="eek_xkl_layout_get_option">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="option" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_options" symbol="eek_xkl_layout_get_options">
 | 
			
		||||
				<return-type type="gchar**"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="get_variants" symbol="eek_xkl_layout_get_variants">
 | 
			
		||||
				<return-type type="gchar**"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<constructor name="new" symbol="eek_xkl_layout_new">
 | 
			
		||||
				<return-type type="EekLayout*"/>
 | 
			
		||||
			</constructor>
 | 
			
		||||
			<method name="set_layouts" symbol="eek_xkl_layout_set_layouts">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="layouts" type="gchar**"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_model" symbol="eek_xkl_layout_set_model">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="model" type="gchar*"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_options" symbol="eek_xkl_layout_set_options">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="options" type="gchar**"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<method name="set_variants" symbol="eek_xkl_layout_set_variants">
 | 
			
		||||
				<return-type type="gboolean"/>
 | 
			
		||||
				<parameters>
 | 
			
		||||
					<parameter name="layout" type="EekXklLayout*"/>
 | 
			
		||||
					<parameter name="variants" type="gchar**"/>
 | 
			
		||||
				</parameters>
 | 
			
		||||
			</method>
 | 
			
		||||
			<property name="layouts" type="GStrv*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="model" type="char*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="options" type="GStrv*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
			<property name="variants" type="GStrv*" readable="1" writable="1" construct="0" construct-only="0"/>
 | 
			
		||||
		</object>
 | 
			
		||||
		<constant name="EEK_XKL_LAYOUT_H" type="int" value="1"/>
 | 
			
		||||
	</namespace>
 | 
			
		||||
</api>
 | 
			
		||||
							
								
								
									
										1
									
								
								bindings/vala/eek-xkl-0.90/eek-xkl-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bindings/vala/eek-xkl-0.90/eek-xkl-0.90.namespace
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
EekXkl
 | 
			
		||||
							
								
								
									
										227
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										227
									
								
								configure.ac
									
									
									
									
									
								
							@ -20,7 +20,7 @@ AC_PREREQ(2.63)
 | 
			
		||||
dnl AC_CONFIG_SRCDIR([configure.ac])
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
 | 
			
		||||
AC_INIT([eekboard], [1.0.6], [ueno@unixuser.org])
 | 
			
		||||
AC_INIT([eekboard], [0.90.5], [ueno@unixuser.org])
 | 
			
		||||
 | 
			
		||||
dnl Init automake
 | 
			
		||||
AM_INIT_AUTOMAKE
 | 
			
		||||
@ -44,13 +44,34 @@ AC_HEADER_STDC
 | 
			
		||||
LT_INIT
 | 
			
		||||
IT_PROG_INTLTOOL([0.35.0])
 | 
			
		||||
 | 
			
		||||
GTK_API_VERSION=3.0
 | 
			
		||||
AC_MSG_CHECKING([which gtk+ version to compile against])
 | 
			
		||||
AC_ARG_WITH([gtk],
 | 
			
		||||
  [AS_HELP_STRING([--with-gtk=2.0|3.0],[which gtk+ version to compile against (default: 2.0)])],
 | 
			
		||||
  [case "$with_gtk" in
 | 
			
		||||
     2.0|3.0) ;;
 | 
			
		||||
     *) AC_MSG_ERROR([invalid gtk version specified]) ;;
 | 
			
		||||
   esac],
 | 
			
		||||
  [with_gtk=2.0])
 | 
			
		||||
AC_MSG_RESULT([$with_gtk])
 | 
			
		||||
 | 
			
		||||
case "$with_gtk" in
 | 
			
		||||
  2.0) GTK_API_VERSION=2.0
 | 
			
		||||
       GTK_REQUIRED=2.14.0
 | 
			
		||||
       EEK_API_VERSION=0.90
 | 
			
		||||
       EEK_API_MAJOR_VERSION=0
 | 
			
		||||
       EEK_API_MINOR_VERSION=90
 | 
			
		||||
       EEK_API_PC_VERSION=0.90
 | 
			
		||||
       EEK_LIBRARY_SUFFIX="-$EEK_API_VERSION"
 | 
			
		||||
       ;;
 | 
			
		||||
  3.0) GTK_API_VERSION=3.0
 | 
			
		||||
       GTK_REQUIRED=2.91.0
 | 
			
		||||
       EEK_API_VERSION=0.90
 | 
			
		||||
       EEK_API_MAJOR_VERSION=0
 | 
			
		||||
       EEK_API_MINOR_VERSION=90
 | 
			
		||||
       EEK_API_PC_VERSION=0.90
 | 
			
		||||
       EEK_LIBRARY_SUFFIX="-$EEK_API_VERSION"
 | 
			
		||||
       ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
AC_SUBST([GTK_API_VERSION])
 | 
			
		||||
AC_SUBST([EEK_API_VERSION])
 | 
			
		||||
@ -60,137 +81,137 @@ AC_SUBST([EEK_API_PC_VERSION])
 | 
			
		||||
AC_SUBST([EEK_LIBRARY_SUFFIX])
 | 
			
		||||
AC_SUBST([EEK_LIBRARY_SUFFIX_U],[AS_TR_SH([$EEK_LIBRARY_SUFFIX])])
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL([HAVE_GTK_2],[test "$with_gtk" = "2.0"])
 | 
			
		||||
AM_CONDITIONAL([HAVE_GTK_3],[test "$with_gtk" = "3.0"])
 | 
			
		||||
 | 
			
		||||
AM_PATH_GLIB_2_0
 | 
			
		||||
PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.26.0], ,
 | 
			
		||||
PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.25.4], ,
 | 
			
		||||
  [AC_MSG_ERROR([GLib2 not found])])
 | 
			
		||||
PKG_CHECK_MODULES([GIO2], [gio-2.0], ,
 | 
			
		||||
  [AC_MSG_ERROR([Gio2 not found])])
 | 
			
		||||
GLIB_GSETTINGS
 | 
			
		||||
 | 
			
		||||
PKG_CHECK_MODULES([PANGOCAIRO], [pangocairo], ,
 | 
			
		||||
  [AC_MSG_ERROR([PangoCairo not found])])
 | 
			
		||||
PKG_CHECK_MODULES([GTK], [
 | 
			
		||||
  gtk+-$GTK_API_VERSION >= $GTK_REQUIRED
 | 
			
		||||
  gdk-$GTK_API_VERSION >= $GTK_REQUIRED], ,
 | 
			
		||||
  [AC_MSG_ERROR([GTK not found])])
 | 
			
		||||
PKG_CHECK_MODULES([GCONF2], [gconf-2.0], ,
 | 
			
		||||
  [AC_MSG_ERROR([GConf not found])])
 | 
			
		||||
PKG_CHECK_MODULES([XKB], [x11], ,
 | 
			
		||||
  [AC_MSG_ERROR([XKB support not found])])
 | 
			
		||||
PKG_CHECK_MODULES([LIBXKLAVIER], [libxklavier x11], ,
 | 
			
		||||
  [AC_MSG_ERROR([Libxklavier not found])])
 | 
			
		||||
PKG_CHECK_MODULES([LIBCROCO], [libcroco-0.6], ,
 | 
			
		||||
  [AC_MSG_ERROR([libcroco not found])])
 | 
			
		||||
 | 
			
		||||
dnl use XTest to generate key events
 | 
			
		||||
AC_MSG_CHECKING([whether you enable XTest])
 | 
			
		||||
AC_ARG_ENABLE(xtest,
 | 
			
		||||
              AS_HELP_STRING([--enable-xtest=no/yes],
 | 
			
		||||
                             [Enable XTest default=yes]),
 | 
			
		||||
              enable_xtest=$enableval,
 | 
			
		||||
              enable_xtest=yes)
 | 
			
		||||
dnl use libfakekey to generate key events
 | 
			
		||||
AC_MSG_CHECKING([whether you enable fakekey])
 | 
			
		||||
AC_ARG_ENABLE(fakekey,
 | 
			
		||||
              AS_HELP_STRING([--enable-fakekey=no/yes],
 | 
			
		||||
                             [Enable fakekey default=yes]),,
 | 
			
		||||
              enable_fakekey=yes)
 | 
			
		||||
 | 
			
		||||
if test x$enable_xtest = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([XTEST], [xtst], , enable_xtest=no)
 | 
			
		||||
  if test x$enable_xtest = xyes; then
 | 
			
		||||
    AC_DEFINE([HAVE_XTEST], [1], [Define if XTest is found])
 | 
			
		||||
if test x$enable_fakekey = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([FAKEKEY], [libfakekey], ,
 | 
			
		||||
    [AC_MSG_ERROR([fakekey not found])])
 | 
			
		||||
  AC_DEFINE([HAVE_FAKEKEY], [1], [Define if fakekey is found])
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(ENABLE_FAKEKEY, [test x$enable_fakekey = xyes])
 | 
			
		||||
AC_MSG_RESULT($enable_fakekey)
 | 
			
		||||
 | 
			
		||||
dnl use AT-SPI to capture focus/keystroke events
 | 
			
		||||
AC_MSG_CHECKING([whether you enable AT-SPI event handling])
 | 
			
		||||
AC_ARG_ENABLE(cspi,
 | 
			
		||||
              AS_HELP_STRING([--enable-cspi=no/yes],
 | 
			
		||||
                             [Enable AT-SPI event handling default=yes]),,
 | 
			
		||||
              enable_cspi=yes)
 | 
			
		||||
 | 
			
		||||
if test x$enable_cspi = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([CSPI], [cspi-1.0], ,
 | 
			
		||||
    [AC_MSG_ERROR([AT-SPI C not found])])
 | 
			
		||||
  AC_DEFINE([HAVE_CSPI], [1], [Define if CSPI is found])
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(ENABLE_XTEST, [test x$enable_xtest = xyes])
 | 
			
		||||
AC_MSG_RESULT($enable_xtest)
 | 
			
		||||
AC_MSG_RESULT($enable_cspi)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_CSPI, [test x$enable_cspi = xyes])
 | 
			
		||||
 | 
			
		||||
dnl use X to mark the fullscreen window as dock
 | 
			
		||||
AC_MSG_CHECKING([whether you enable X dock])
 | 
			
		||||
AC_ARG_ENABLE(x-dock,
 | 
			
		||||
              AS_HELP_STRING([--enable-x-dock=no/yes],
 | 
			
		||||
                             [Enable X dock default=yes]),
 | 
			
		||||
              enable_x_dock=$enableval,
 | 
			
		||||
              enable_x_dock=yes)
 | 
			
		||||
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_x_dock = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([XDOCK], [x11], , enable_x_dock=no)
 | 
			
		||||
  if test x$enable_x_dock = xyes; then
 | 
			
		||||
    AC_DEFINE([HAVE_XDOCK], [1], [Define if X dock is found])
 | 
			
		||||
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
 | 
			
		||||
AM_CONDITIONAL(ENABLE_XDOCK, [test x$enable_x_dock = xyes])
 | 
			
		||||
AC_MSG_RESULT($enable_x_dock)
 | 
			
		||||
 | 
			
		||||
focus_listeners="ibus"
 | 
			
		||||
keystroke_listeners=""
 | 
			
		||||
 | 
			
		||||
dnl use AT-SPI 2 to capture focus/keystroke events
 | 
			
		||||
AC_MSG_CHECKING([whether you enable AT-SPI 2 event handling])
 | 
			
		||||
AC_ARG_ENABLE(atspi,
 | 
			
		||||
              AS_HELP_STRING([--enable-atspi=no/yes],
 | 
			
		||||
                             [Enable AT-SPI 2 event handling default=yes]),
 | 
			
		||||
              enable_atspi=$enableval,
 | 
			
		||||
              enable_atspi=yes)
 | 
			
		||||
 | 
			
		||||
if test x$enable_atspi = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([ATSPI2], [atspi-2 dbus-glib-1], , enable_atspi=no)
 | 
			
		||||
  if test x$enable_atspi = xyes; then
 | 
			
		||||
    AC_DEFINE([HAVE_ATSPI], [1], [Define if AT-SPI 2 is found])
 | 
			
		||||
    focus_listeners="atspi $focus_listeners"
 | 
			
		||||
    keystroke_listeners="atspi $keystroke_listeners"
 | 
			
		||||
    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
 | 
			
		||||
fi
 | 
			
		||||
AC_MSG_RESULT($enable_atspi)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_ATSPI, [test x$enable_atspi = xyes])
 | 
			
		||||
 | 
			
		||||
if test -n "$focus_listeners"; then
 | 
			
		||||
  AC_DEFINE(ENABLE_FOCUS_LISTENER, [1], [Define if eekboard can follow focus changes])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
GOBJECT_INTROSPECTION_CHECK([0.9.0])
 | 
			
		||||
 | 
			
		||||
dnl Vala langauge binding
 | 
			
		||||
AC_MSG_CHECKING([whether you enable Vala language support])
 | 
			
		||||
AC_ARG_ENABLE(vala,
 | 
			
		||||
              AS_HELP_STRING([--enable-vala=no/yes],
 | 
			
		||||
                             [Enable Vala language binding default=yes]),
 | 
			
		||||
              enable_vala=$enableval,
 | 
			
		||||
                             [Enable Vala language binding default=yes]),,
 | 
			
		||||
              enable_vala=yes)
 | 
			
		||||
if test x$enable_vala = xyes; then
 | 
			
		||||
  if test "x$INTROSPECTION_SCANNER" = x; then
 | 
			
		||||
    enable_vala=no
 | 
			
		||||
    AC_MSG_WARN([GObject-Introspection must be enabled for Vala bindings])
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  AM_PROG_VALAC([0.10.0])
 | 
			
		||||
  have_vala=yes
 | 
			
		||||
 | 
			
		||||
  AC_PATH_PROG(VALAC, valac, valac)
 | 
			
		||||
  AC_SUBST(VALAC)
 | 
			
		||||
  AC_SUBST(VALAFLAGS)
 | 
			
		||||
 | 
			
		||||
  AC_PATH_PROG([VAPIGEN], [vapigen], [false])
 | 
			
		||||
 | 
			
		||||
  if test "x$VAPIGEN" = "xfalse"; then
 | 
			
		||||
    enable_vala=no
 | 
			
		||||
    AC_MSG_WARN([vapigen not found. Was vala compiled with --enable-vapigen?])
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  AC_SUBST(VAPIGEN)
 | 
			
		||||
fi
 | 
			
		||||
AC_MSG_RESULT($enable_vala)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_VALA, [test x$enable_vala = xyes])
 | 
			
		||||
 | 
			
		||||
dnl libcanberra
 | 
			
		||||
AC_MSG_CHECKING([whether you enable libcanberra])
 | 
			
		||||
AC_ARG_ENABLE(libcanberra,
 | 
			
		||||
              AS_HELP_STRING([--enable-libcanberra=no/yes],
 | 
			
		||||
                             [Enable libcanberra user interface default=no]),
 | 
			
		||||
              enable_libcanberra=$enableval,
 | 
			
		||||
              enable_libcanberra=yes)
 | 
			
		||||
dnl standalone application
 | 
			
		||||
AC_MSG_CHECKING([whether you enable eekboard])
 | 
			
		||||
AC_ARG_ENABLE(eekboard,
 | 
			
		||||
              AS_HELP_STRING([--enable-eekboard=no/yes],
 | 
			
		||||
                             [Build standalone application "ekboard" default=yes]),,
 | 
			
		||||
              enable_eekboard=yes)
 | 
			
		||||
AC_MSG_RESULT($enable_eekboard)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_EEKBOARD, [test x$enable_eekboard = xyes])
 | 
			
		||||
 | 
			
		||||
if test x$enable_libcanberra = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([LIBCANBERRA], [libcanberra-gtk3], , enable_libcanberra=no)
 | 
			
		||||
  if test x$enable_libcanberra = xyes; then
 | 
			
		||||
    AC_DEFINE([HAVE_LIBCANBERRA], [1], [Define if libcanberra is found])
 | 
			
		||||
dnl Clutter
 | 
			
		||||
AC_MSG_CHECKING([whether you enable Clutter])
 | 
			
		||||
AC_ARG_ENABLE(clutter,
 | 
			
		||||
              AS_HELP_STRING([--enable-clutter=no/yes],
 | 
			
		||||
                             [Enable Clutter user interface default=yes]),,
 | 
			
		||||
              enable_clutter=no)
 | 
			
		||||
AC_MSG_RESULT($enable_clutter)
 | 
			
		||||
 | 
			
		||||
if test x$enable_clutter = xyes; then
 | 
			
		||||
  PKG_CHECK_MODULES([CLUTTER], [clutter-1.0], ,
 | 
			
		||||
    [AC_MSG_ERROR([Clutter not found -- install it or add --disable-clutter])])
 | 
			
		||||
  AC_DEFINE([HAVE_CLUTTER], [1], [Define if Clutter is found])
 | 
			
		||||
  have_clutter_gtk=0
 | 
			
		||||
  need_swap_event_workaround=0
 | 
			
		||||
  PKG_CHECK_MODULES([CLUTTER_GTK], [clutter-gtk-1.0], [have_clutter_gtk=1],
 | 
			
		||||
    [PKG_CHECK_MODULES([CLUTTER_GTK], [clutter-gtk-0.10 clutter-x11-1.0],
 | 
			
		||||
      [have_clutter_gtk=1; need_swap_event_workaround=1])])
 | 
			
		||||
  AC_DEFINE_UNQUOTED([HAVE_CLUTTER_GTK], $have_clutter_gtk,
 | 
			
		||||
    [Define if Clutter-Gtk is found])
 | 
			
		||||
  AC_DEFINE_UNQUOTED([NEED_SWAP_EVENT_WORKAROUND], $need_swap_event_workaround,
 | 
			
		||||
    [Define if GLX_INTEL_swap_event work around is needed])
 | 
			
		||||
fi
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(ENABLE_LIBCANBERRA, [test x$enable_libcanberra = xyes])
 | 
			
		||||
AC_MSG_RESULT($enable_libcanberra)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_CLUTTER, [test x$enable_clutter = xyes])
 | 
			
		||||
 | 
			
		||||
GTK_DOC_CHECK([1.14],[--flavour no-tmpl])
 | 
			
		||||
 | 
			
		||||
dnl to re-generate eek/*-keysym-labels.txt
 | 
			
		||||
AC_CHECK_PROGS([PYTHON], [python])
 | 
			
		||||
 | 
			
		||||
dnl define GETTEXT_* variables
 | 
			
		||||
GETTEXT_PACKAGE=$PACKAGE
 | 
			
		||||
AC_SUBST(GETTEXT_PACKAGE)
 | 
			
		||||
@ -198,6 +219,8 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the read-only
 | 
			
		||||
AM_GLIB_GNU_GETTEXT
 | 
			
		||||
AM_GLIB_DEFINE_LOCALEDIR(EEKBOARD_LOCALEDIR)
 | 
			
		||||
 | 
			
		||||
GOBJECT_INTROSPECTION_CHECK([0.9.0])
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_HEADERS([config.h])
 | 
			
		||||
AC_CONFIG_FILES([Makefile
 | 
			
		||||
eek/Makefile
 | 
			
		||||
@ -205,6 +228,8 @@ eekboard/Makefile
 | 
			
		||||
src/Makefile
 | 
			
		||||
tests/Makefile
 | 
			
		||||
bindings/Makefile
 | 
			
		||||
bindings/python/Makefile
 | 
			
		||||
bindings/python/eekboard/Makefile
 | 
			
		||||
bindings/vala/Makefile
 | 
			
		||||
docs/Makefile
 | 
			
		||||
docs/reference/Makefile
 | 
			
		||||
@ -222,9 +247,12 @@ data/icons/scalable/Makefile
 | 
			
		||||
data/themes/Makefile
 | 
			
		||||
data/keyboards/Makefile
 | 
			
		||||
examples/Makefile
 | 
			
		||||
examples/eekboard-inscript/Makefile
 | 
			
		||||
examples/simple-client/Makefile
 | 
			
		||||
eek/eek-${EEK_API_VERSION}.pc
 | 
			
		||||
eek/eek-clutter-${EEK_API_VERSION}.pc
 | 
			
		||||
eek/eek-gtk-${EEK_API_VERSION}.pc
 | 
			
		||||
eek/eek-xkb-${EEK_API_VERSION}.pc
 | 
			
		||||
eek/eek-xkl-${EEK_API_VERSION}.pc
 | 
			
		||||
eekboard/eekboard-${EEK_API_VERSION}.pc])
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
@ -235,11 +263,6 @@ Build options:
 | 
			
		||||
  Build shared libs         $enable_shared
 | 
			
		||||
  Build static libs         $enable_static
 | 
			
		||||
  CFLAGS                    $CFLAGS
 | 
			
		||||
  Build Vala binding        $enable_vala
 | 
			
		||||
  Sound support             $enable_libcanberra
 | 
			
		||||
  Build vala binding        $enable_vala
 | 
			
		||||
  Build document            $enable_gtk_doc
 | 
			
		||||
  Focus listeners           $focus_listeners
 | 
			
		||||
  Keystroke listeners       $keystroke_listeners
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,34 +1,6 @@
 | 
			
		||||
SUBDIRS = icons themes keyboards
 | 
			
		||||
 | 
			
		||||
@GSETTINGS_RULES@
 | 
			
		||||
@INTLTOOL_XML_NOMERGE_RULE@
 | 
			
		||||
gsettings_schemas_in_files = org.fedorahosted.eekboard.gschema.xml.in
 | 
			
		||||
gsettings_SCHEMAS = $(gsettings_schemas_in_files:.gschema.xml.in=.gschema.xml)
 | 
			
		||||
 | 
			
		||||
servicedir       = $(datadir)/dbus-1/services
 | 
			
		||||
service_in_files = eekboard-server.service.in
 | 
			
		||||
service_DATA     = $(service_in_files:.service.in=.service)
 | 
			
		||||
 | 
			
		||||
$(service_DATA): $(service_in_files) Makefile
 | 
			
		||||
	$(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@
 | 
			
		||||
 | 
			
		||||
desktopdir = $(datadir)/applications
 | 
			
		||||
desktop_in_files = eekboard.desktop.in
 | 
			
		||||
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
 | 
			
		||||
 | 
			
		||||
if ENABLE_ATSPI
 | 
			
		||||
autostartdir	 = $(sysconfdir)/xdg/autostart
 | 
			
		||||
autostart_in_files = eekboard-autostart.desktop.in
 | 
			
		||||
autostart_DATA   = $(autostart_in_files:.desktop.in=.desktop)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
dist_desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
 | 
			
		||||
@INTLTOOL_DESKTOP_RULE@
 | 
			
		||||
 | 
			
		||||
CLEANFILES = $(service_DATA) $(desktop_DATA) $(gsettings_SCHEMAS)
 | 
			
		||||
EXTRA_DIST = $(service_in_files) $(desktop_in_files) $(gsettings_schemas_in_files)
 | 
			
		||||
 | 
			
		||||
if ENABLE_ATSPI
 | 
			
		||||
CLEANFILES += $(autostart_DATA)
 | 
			
		||||
EXTRA_DIST += $(autostart_in_files)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Name=Eekboard
 | 
			
		||||
Exec=eekboard -f
 | 
			
		||||
Type=Application
 | 
			
		||||
#AutostartCondition=GSettings org.gnome.desktop.a11y.applications screen-keyboard-enabled
 | 
			
		||||
X-GNOME-AutoRestart=true
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
Name=Eekboard
 | 
			
		||||
GenericName=Eekboard Virtual Keyboard
 | 
			
		||||
Comment=Virtual Keyboard
 | 
			
		||||
Exec=eekboard
 | 
			
		||||
Exec=eekboard-desktop-client
 | 
			
		||||
Icon=eekboard
 | 
			
		||||
Terminal=false
 | 
			
		||||
Type=Application
 | 
			
		||||
 | 
			
		||||
@ -1,38 +1,2 @@
 | 
			
		||||
keyboardsdir = $(pkgdatadir)/keyboards
 | 
			
		||||
 | 
			
		||||
nobase_dist_keyboards_DATA =			\
 | 
			
		||||
	keyboards.xml				\
 | 
			
		||||
	geometry/compact.xml			\
 | 
			
		||||
	symbols/ar.xml				\
 | 
			
		||||
	symbols/be.xml				\
 | 
			
		||||
	symbols/fa.xml				\
 | 
			
		||||
	symbols/he.xml				\
 | 
			
		||||
	symbols/ja-kana.xml			\
 | 
			
		||||
	symbols/kk.xml				\
 | 
			
		||||
	symbols/ks.xml				\
 | 
			
		||||
	symbols/my.xml				\
 | 
			
		||||
	symbols/ru.xml				\
 | 
			
		||||
	symbols/th.xml				\
 | 
			
		||||
	symbols/ua.xml				\
 | 
			
		||||
	symbols/ug.xml				\
 | 
			
		||||
	symbols/us.xml				\
 | 
			
		||||
	symbols/zh-bopomofo.xml			\
 | 
			
		||||
	$(inscript_symbols)			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
inscript_symbols =				\
 | 
			
		||||
	symbols/as-inscript.xml			\
 | 
			
		||||
	symbols/bn-inscript.xml			\
 | 
			
		||||
	symbols/gu-inscript.xml			\
 | 
			
		||||
	symbols/hi-inscript.xml			\
 | 
			
		||||
	symbols/kn-inscript.xml			\
 | 
			
		||||
	symbols/ks-inscript.xml			\
 | 
			
		||||
	symbols/mai-inscript.xml		\
 | 
			
		||||
	symbols/ml-inscript.xml			\
 | 
			
		||||
	symbols/mr-inscript.xml			\
 | 
			
		||||
	symbols/or-inscript.xml			\
 | 
			
		||||
	symbols/pa-inscript.xml			\
 | 
			
		||||
	symbols/sd-inscript.xml			\
 | 
			
		||||
	symbols/ta-inscript.xml			\
 | 
			
		||||
	symbols/te-inscript.xml			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
keyboarddir = $(pkgdatadir)/keyboards
 | 
			
		||||
dist_keyboard_DATA = us-qwerty.xml
 | 
			
		||||
 | 
			
		||||
@ -1,307 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<geometry version="0.90">
 | 
			
		||||
  <bounds x="0.000000" y="0.000000" width="640.0000" height="296.5853"/>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <bounds x="15.60975" y="15.60975" width="640.0000" height="39.02439"/>
 | 
			
		||||
    <row columns="16" orientation="1"/>
 | 
			
		||||
    <key keycode="9" name="ESC" column="0" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="3.121951" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="67" name="FK01" column="1" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="84.29268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="68" name="FK02" column="2" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="124.8780" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="69" name="FK03" column="3" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="165.4634" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="70" name="FK04" column="4" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="206.0487" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="71" name="FK05" column="5" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="266.9268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="72" name="FK06" column="6" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="307.5121" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="73" name="FK07" column="7" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="348.0975" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="74" name="FK08" column="8" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="388.6829" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="75" name="FK09" column="9" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="449.5609" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="76" name="FK10" column="10" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="490.1463" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="95" name="FK11" column="11" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="530.7317" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="96" name="FK12" column="12" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="571.3170" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <bounds x="15.60975" y="78.04878" width="608.7804" height="201.3658"/>
 | 
			
		||||
    <row columns="14" orientation="1"/>
 | 
			
		||||
    <row columns="14" orientation="1"/>
 | 
			
		||||
    <row columns="13" orientation="1"/>
 | 
			
		||||
    <row columns="12" orientation="1"/>
 | 
			
		||||
    <row columns="9" orientation="1"/>
 | 
			
		||||
    <key keycode="49" name="TLDE" column="0" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="3.121951" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="10" name="AE01" column="1" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="43.70731" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="11" name="AE02" column="2" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="84.29268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="12" name="AE03" column="3" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="124.8780" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="13" name="AE04" column="4" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="165.4634" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="14" name="AE05" column="5" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="206.0487" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="15" name="AE06" column="6" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="245.0731" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="16" name="AE07" column="7" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="285.6585" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="17" name="AE08" column="8" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="326.2439" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="18" name="AE09" column="9" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="366.8292" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="19" name="AE10" column="10" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="407.4146" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="20" name="AE11" column="11" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="448.0000" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="21" name="AE12" column="12" row="0" oref="outline2">
 | 
			
		||||
      <bounds x="488.5853" y="1.560976" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="22" name="BKSP" column="13" row="0" oref="outline13">
 | 
			
		||||
      <bounds x="529.1707" y="1.560976" width="79.60975" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="23" name="TAB" column="0" row="1" oref="outline4">
 | 
			
		||||
      <bounds x="3.121951" y="42.14634" width="59.31707" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="24" name="AD01" column="1" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="65.56097" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="25" name="AD02" column="2" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="106.1463" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="26" name="AD03" column="3" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="145.1707" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="27" name="AD04" column="4" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="185.7560" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="28" name="AD05" column="5" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="226.3414" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="29" name="AD06" column="6" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="266.9268" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="30" name="AD07" column="7" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="307.5121" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="31" name="AD08" column="8" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="348.0975" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="32" name="AD09" column="9" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="388.6829" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="33" name="AD10" column="10" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="429.2682" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="34" name="AD11" column="11" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="468.2926" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="35" name="AD12" column="12" row="1" oref="outline2">
 | 
			
		||||
      <bounds x="508.8780" y="42.14634" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="51" name="BKSL" column="13" row="1" oref="outline5">
 | 
			
		||||
      <bounds x="549.4634" y="42.14634" width="59.31707" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="66" name="CAPS" column="0" row="2" oref="outline6">
 | 
			
		||||
      <bounds x="3.121951" y="82.73170" width="68.68292" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="38" name="AC01" column="1" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="76.48780" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="39" name="AC02" column="2" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="115.5121" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="40" name="AC03" column="3" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="156.0975" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="41" name="AC04" column="4" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="196.6829" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="42" name="AC05" column="5" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="237.2682" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="43" name="AC06" column="6" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="277.8536" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="44" name="AC07" column="7" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="318.4390" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="45" name="AC08" column="8" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="359.0243" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="46" name="AC09" column="9" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="399.6097" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="47" name="AC10" column="10" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="438.6341" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="48" name="AC11" column="11" row="2" oref="outline2">
 | 
			
		||||
      <bounds x="479.2195" y="82.73170" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="36" name="RTRN" column="12" row="2" oref="outline7">
 | 
			
		||||
      <bounds x="519.8048" y="82.73170" width="88.97561" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="50" name="LFSH" column="0" row="3" oref="outline8">
 | 
			
		||||
      <bounds x="3.121951" y="121.7560" width="88.97561" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="52" name="AB01" column="1" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="95.21951" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="53" name="AB02" column="2" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="135.8048" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="54" name="AB03" column="3" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="176.3902" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="55" name="AB04" column="4" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="215.4146" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="56" name="AB05" column="5" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="256.0000" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="57" name="AB06" column="6" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="296.5853" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="58" name="AB07" column="7" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="337.1707" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="59" name="AB08" column="8" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="377.7560" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="60" name="AB09" column="9" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="418.3414" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="61" name="AB10" column="10" row="3" oref="outline2">
 | 
			
		||||
      <bounds x="458.9268" y="121.7560" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="62" name="RTSH" column="11" row="3" oref="outline9">
 | 
			
		||||
      <bounds x="499.5121" y="121.7560" width="109.2682" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="149" name="I149" column="0" row="4" oref="outline10">
 | 
			
		||||
      <bounds x="3.121951" y="162.3414" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="37" name="LCTL" column="1" row="4" oref="outline1">
 | 
			
		||||
      <bounds x="62.43902" y="162.3414" width="48.39024" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="64" name="LALT" column="2" row="4" oref="outline1">
 | 
			
		||||
      <bounds x="113.9512" y="162.3414" width="48.39024" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="65" name="SPCE" column="3" row="4" oref="outline3">
 | 
			
		||||
      <bounds x="165.4634" y="162.3414" width="217.5853" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="113" name="LEFT" column="4" row="4" oref="outline1">
 | 
			
		||||
      <bounds x="368.0487" y="162.3414" width="48.39024" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="111" name="UP" column="5" row="4" oref="outline1">
 | 
			
		||||
      <bounds x="419.43894" y="162.3414" width="48.39024" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="116" name="DOWN" column="6" row="4" oref="outline1">
 | 
			
		||||
      <bounds x="470.82918" y="162.3414" width="48.39024" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="114" name="RGHT" column="7" row="4" oref="outline1">
 | 
			
		||||
      <bounds x="522.21942" y="162.3414" width="48.39024" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key keycode="150" name="I150" column="8" row="4" oref="outline10">
 | 
			
		||||
      <bounds x="573.60966" y="162.3414" width="37.46341" height="37.46341"/>
 | 
			
		||||
    </key>
 | 
			
		||||
  </section>
 | 
			
		||||
  <outline id="outline2" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline1" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="48.39024" y="0.000000"/>
 | 
			
		||||
    <point x="48.39024" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline4" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline5" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline6" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="68.68292" y="0.000000"/>
 | 
			
		||||
    <point x="68.68292" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline7" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline8" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline9" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="109.2682" y="0.000000"/>
 | 
			
		||||
    <point x="109.2682" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline10" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline13" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="79.60975" y="0.000000"/>
 | 
			
		||||
    <point x="79.60975" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline3" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="217.5853" y="0.000000"/>
 | 
			
		||||
    <point x="217.5853" y="37.46341"/>
 | 
			
		||||
    <point x="0.000000" y="37.46341"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
</geometry>
 | 
			
		||||
@ -1,88 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<keyboards version="0.90">
 | 
			
		||||
  <keyboard id="ar" name="ar"
 | 
			
		||||
	    geometry="compact" symbols="ar"
 | 
			
		||||
	    longname="Arabic" language="ar"/>
 | 
			
		||||
  <keyboard id="be" name="be"
 | 
			
		||||
	    geometry="compact" symbols="be"
 | 
			
		||||
	    longname="Belarusian" language="be"/>
 | 
			
		||||
  <keyboard id="fa" name="fa"
 | 
			
		||||
	    geometry="compact" symbols="fa"
 | 
			
		||||
	    longname="Farsi (ISIRI 2901-1994)" language="fa"/>
 | 
			
		||||
  <keyboard id="he" name="he"
 | 
			
		||||
	    geometry="compact" symbols="he"
 | 
			
		||||
	    longname="Hebrew" language="he"/>
 | 
			
		||||
  <keyboard id="ja" name="ja"
 | 
			
		||||
	    geometry="compact" symbols="ja-kana"
 | 
			
		||||
	    longname="Japanese (Kana)" language="ja"/>
 | 
			
		||||
  <keyboard id="kk" name="kk"
 | 
			
		||||
	    geometry="compact" symbols="kk"
 | 
			
		||||
	    longname="Kazakh" language="kk"/>
 | 
			
		||||
  <keyboard id="ks" name="ks"
 | 
			
		||||
	    geometry="compact" symbols="ks"
 | 
			
		||||
	    longname="Kashmiri" language="ks"/>
 | 
			
		||||
  <keyboard id="my" name="my"
 | 
			
		||||
	    geometry="compact" symbols="my"
 | 
			
		||||
	    longname="Myanmar" language="my"/>
 | 
			
		||||
  <keyboard id="ru" name="ru"
 | 
			
		||||
	    geometry="compact" symbols="us"
 | 
			
		||||
	    longname="Russian" language="ru"/>
 | 
			
		||||
  <keyboard id="th" name="th"
 | 
			
		||||
	    geometry="compact" symbols="th"
 | 
			
		||||
	    longname="Thai" language="th"/>
 | 
			
		||||
  <keyboard id="ua" name="ua"
 | 
			
		||||
	    geometry="compact" symbols="ua"
 | 
			
		||||
	    longname="Ukrainian" language="ua"/>
 | 
			
		||||
  <keyboard id="ug" name="ug"
 | 
			
		||||
	    geometry="compact" symbols="ug"
 | 
			
		||||
	    longname="Uyghur" language="ug"/>
 | 
			
		||||
  <keyboard id="us" name="us"
 | 
			
		||||
	    geometry="compact" symbols="us"
 | 
			
		||||
	    longname="US" language="en"/>
 | 
			
		||||
  <keyboard id="zh-bopomofo" name="zh-bopomofo"
 | 
			
		||||
	    geometry="compact" symbols="zh-bopomofo"
 | 
			
		||||
	    longname="Chinese (Bopomofo)" language="zh"/>
 | 
			
		||||
  <!-- Indic Inscript keyboards converted from m17n-lib -->
 | 
			
		||||
  <keyboard id="as-inscript" name="as-inscript"
 | 
			
		||||
	    geometry="compact" symbols="as-inscript"
 | 
			
		||||
	    longname="Assamese (Inscript)" language="as"/>
 | 
			
		||||
  <keyboard id="bn-inscript" name="bn-inscript"
 | 
			
		||||
	    geometry="compact" symbols="bn-inscript"
 | 
			
		||||
	    longname="Bengali (Inscript)" language="bn"/>
 | 
			
		||||
  <keyboard id="gu-inscript" name="gu-inscript"
 | 
			
		||||
	    geometry="compact" symbols="gu-inscript"
 | 
			
		||||
	    longname="Gujarati (Inscript)" language="gu"/>
 | 
			
		||||
  <keyboard id="hi-inscript" name="hi-inscript"
 | 
			
		||||
	    geometry="compact" symbols="hi-inscript"
 | 
			
		||||
	    longname="Hindi (Inscript)" language="hi"/>
 | 
			
		||||
  <keyboard id="kn-inscript" name="kn-inscript"
 | 
			
		||||
	    geometry="compact" symbols="kn-inscript"
 | 
			
		||||
	    longname="Kannada (Inscript)" language="kn"/>
 | 
			
		||||
  <keyboard id="ks-inscript" name="ks-inscript"
 | 
			
		||||
	    geometry="compact" symbols="ks-inscript"
 | 
			
		||||
	    longname="Kashmiri Devanagari (Inscript)" language="ks"/>
 | 
			
		||||
  <keyboard id="mai-inscript" name="mai-inscript"
 | 
			
		||||
	    geometry="compact" symbols="mai-inscript"
 | 
			
		||||
	    longname="Maithili (Inscript)" language="mai"/>
 | 
			
		||||
  <keyboard id="ml-inscript" name="ml-inscript"
 | 
			
		||||
	    geometry="compact" symbols="ml-inscript"
 | 
			
		||||
	    longname="Malayalam (Inscript)" language="ml-inscript"/>
 | 
			
		||||
  <keyboard id="mr-inscript" name="mr-inscript"
 | 
			
		||||
	    geometry="compact" symbols="mr-inscript"
 | 
			
		||||
	    longname="Marathi (Inscript)" language="mr"/>
 | 
			
		||||
  <keyboard id="or-inscript" name="or-inscript"
 | 
			
		||||
	    geometry="compact" symbols="or-inscript"
 | 
			
		||||
	    longname="Oriya (Inscript)" language="or"/>
 | 
			
		||||
  <keyboard id="pa-inscript" name="pa-inscript"
 | 
			
		||||
	    geometry="compact" symbols="pa-inscript"
 | 
			
		||||
	    longname="Punjabi (Inscript)" language="pa"/>
 | 
			
		||||
  <keyboard id="sd-inscript" name="sd-inscript"
 | 
			
		||||
	    geometry="compact" symbols="sd-inscript"
 | 
			
		||||
	    longname="Sindhi (Inscript)" language="sd"/>
 | 
			
		||||
  <keyboard id="ta-inscript" name="ta-inscript"
 | 
			
		||||
	    geometry="compact" symbols="ta-inscript"
 | 
			
		||||
	    longname="Tamil (Inscript)" language="ta"/>
 | 
			
		||||
  <keyboard id="te-inscript" name="te-inscript"
 | 
			
		||||
	    geometry="compact" symbols="te-inscript"
 | 
			
		||||
	    longname="Telugu (Inscript)" language="te"/>
 | 
			
		||||
</keyboards>
 | 
			
		||||
@ -1,181 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ّ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">١</text>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">٢</text>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">٣</text>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">٤</text>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">٥</text>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">٦</text>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">٧</text>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">٨</text>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">٩</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">٠</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ض</text>
 | 
			
		||||
    <text category="letter">َ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ص</text>
 | 
			
		||||
    <text category="letter">ً</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ث</text>
 | 
			
		||||
    <text category="letter">ُ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ق</text>
 | 
			
		||||
    <text category="letter">ٌ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ف</text>
 | 
			
		||||
    <text category="letter">لإ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">غ</text>
 | 
			
		||||
    <text category="letter">إ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ع</text>
 | 
			
		||||
    <text category="letter">`</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ه</text>
 | 
			
		||||
    <text category="letter">÷</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">خ</text>
 | 
			
		||||
    <text category="letter">×</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ح</text>
 | 
			
		||||
    <text category="letter">؛</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ج</text>
 | 
			
		||||
    <text category="letter">></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">د</text>
 | 
			
		||||
    <text category="letter"><</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ش</text>
 | 
			
		||||
    <text category="letter">ِ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">س</text>
 | 
			
		||||
    <text category="letter">ٍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">ي</text>
 | 
			
		||||
    <text category="letter">]</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ب</text>
 | 
			
		||||
    <text category="letter">[</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ل</text>
 | 
			
		||||
    <text category="letter">لأ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ا</text>
 | 
			
		||||
    <text category="letter">أ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ت</text>
 | 
			
		||||
    <text category="letter">ـ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ن</text>
 | 
			
		||||
    <text category="letter">،</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">م</text>
 | 
			
		||||
    <text category="letter">/</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ك</text>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ئ</text>
 | 
			
		||||
    <text category="letter">~</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ء</text>
 | 
			
		||||
    <text category="letter">ْ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ؤ</text>
 | 
			
		||||
    <text category="letter">}</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ر</text>
 | 
			
		||||
    <text category="letter">{</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">لا</text>
 | 
			
		||||
    <text category="letter">لآ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ى</text>
 | 
			
		||||
    <text category="letter">آ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ة</text>
 | 
			
		||||
    <text category="letter">'</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">و</text>
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ز</text>
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ظ</text>
 | 
			
		||||
    <text category="letter">؟</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">~</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">১</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">২</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">৩</text>
 | 
			
		||||
    <text category="letter">্ৰ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">৪</text>
 | 
			
		||||
    <text category="letter">ৰ্</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">৫</text>
 | 
			
		||||
    <text category="letter">জ্ঞ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">৬</text>
 | 
			
		||||
    <text category="letter">ত্ৰ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">৭</text>
 | 
			
		||||
    <text category="letter">ক্ষ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">৮</text>
 | 
			
		||||
    <text category="letter">শ্ৰ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">৯</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">০</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ঃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ৃ</text>
 | 
			
		||||
    <text category="letter">ঋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ৌ</text>
 | 
			
		||||
    <text category="letter">ঔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ৈ</text>
 | 
			
		||||
    <text category="letter">ঐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">া</text>
 | 
			
		||||
    <text category="letter">আ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ী</text>
 | 
			
		||||
    <text category="letter">ঈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ূ</text>
 | 
			
		||||
    <text category="letter">ঊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ব</text>
 | 
			
		||||
    <text category="letter">ভ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">হ</text>
 | 
			
		||||
    <text category="letter">ঙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">গ</text>
 | 
			
		||||
    <text category="letter">ঘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">দ</text>
 | 
			
		||||
    <text category="letter">ধ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">জ</text>
 | 
			
		||||
    <text category="letter">ঝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ড</text>
 | 
			
		||||
    <text category="letter">ঢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">়</text>
 | 
			
		||||
    <text category="letter">ঞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">য</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ো</text>
 | 
			
		||||
    <text category="letter">ও</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ে</text>
 | 
			
		||||
    <text category="letter">এ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">্</text>
 | 
			
		||||
    <text category="letter">অ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ি</text>
 | 
			
		||||
    <text category="letter">ই</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ু</text>
 | 
			
		||||
    <text category="letter">উ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">প</text>
 | 
			
		||||
    <text category="letter">ফ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ৰ</text>
 | 
			
		||||
    <text category="letter">J</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ক</text>
 | 
			
		||||
    <text category="letter">খ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ত</text>
 | 
			
		||||
    <text category="letter">থ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">চ</text>
 | 
			
		||||
    <text category="letter">ছ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ঠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ৎ</text>
 | 
			
		||||
    <text category="letter">৺</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ং</text>
 | 
			
		||||
    <text category="letter">ঁ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ম</text>
 | 
			
		||||
    <text category="letter">ণ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ন</text>
 | 
			
		||||
    <text category="letter">V</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ৱ</text>
 | 
			
		||||
    <text category="letter">B</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ল</text>
 | 
			
		||||
    <text category="letter">N</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">স</text>
 | 
			
		||||
    <text category="letter">শ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ষ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">য়</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">Ё</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <text category="letter">№</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <text category="letter">;</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
    <text category="letter">:</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
    <text category="letter">?</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
    <text category="letter">*</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <text category="letter">_</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <text category="letter">+</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">й</text>
 | 
			
		||||
    <text category="letter">Й</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ц</text>
 | 
			
		||||
    <text category="letter">Ц</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">у</text>
 | 
			
		||||
    <text category="letter">У</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">к</text>
 | 
			
		||||
    <text category="letter">К</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">е</text>
 | 
			
		||||
    <text category="letter">Е</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">н</text>
 | 
			
		||||
    <text category="letter">Н</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">г</text>
 | 
			
		||||
    <text category="letter">Г</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ш</text>
 | 
			
		||||
    <text category="letter">Ш</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ў</text>
 | 
			
		||||
    <text category="letter">Ў</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">з</text>
 | 
			
		||||
    <text category="letter">З</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">х</text>
 | 
			
		||||
    <text category="letter">Х</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">'</text>
 | 
			
		||||
    <text category="letter">'</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ф</text>
 | 
			
		||||
    <text category="letter">Ф</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ы</text>
 | 
			
		||||
    <text category="letter">Ы</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">в</text>
 | 
			
		||||
    <text category="letter">В</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">а</text>
 | 
			
		||||
    <text category="letter">А</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">п</text>
 | 
			
		||||
    <text category="letter">П</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">р</text>
 | 
			
		||||
    <text category="letter">Р</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">о</text>
 | 
			
		||||
    <text category="letter">О</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">л</text>
 | 
			
		||||
    <text category="letter">Л</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">д</text>
 | 
			
		||||
    <text category="letter">Д</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ж</text>
 | 
			
		||||
    <text category="letter">Ж</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">Э</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">я</text>
 | 
			
		||||
    <text category="letter">Я</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ч</text>
 | 
			
		||||
    <text category="letter">Ч</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">с</text>
 | 
			
		||||
    <text category="letter">С</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">м</text>
 | 
			
		||||
    <text category="letter">М</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">і</text>
 | 
			
		||||
    <text category="letter">І</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">т</text>
 | 
			
		||||
    <text category="letter">Т</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ь</text>
 | 
			
		||||
    <text category="letter">Ь</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">б</text>
 | 
			
		||||
    <text category="letter">Б</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ю</text>
 | 
			
		||||
    <text category="letter">Ю</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">~</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">১</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">২</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">৩</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">৪</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">৫</text>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">৬</text>
 | 
			
		||||
    <text category="letter">^</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">৭</text>
 | 
			
		||||
    <text category="letter">&</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">৮</text>
 | 
			
		||||
    <text category="letter">*</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">৯</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">০</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ঃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ৃ</text>
 | 
			
		||||
    <text category="letter">ঋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ৌ</text>
 | 
			
		||||
    <text category="letter">ঔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ৈ</text>
 | 
			
		||||
    <text category="letter">ঐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">া</text>
 | 
			
		||||
    <text category="letter">আ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ী</text>
 | 
			
		||||
    <text category="letter">ঈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ূ</text>
 | 
			
		||||
    <text category="letter">ঊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ব</text>
 | 
			
		||||
    <text category="letter">ভ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">হ</text>
 | 
			
		||||
    <text category="letter">ঙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">গ</text>
 | 
			
		||||
    <text category="letter">ঘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">দ</text>
 | 
			
		||||
    <text category="letter">ধ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">জ</text>
 | 
			
		||||
    <text category="letter">ঝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ড</text>
 | 
			
		||||
    <text category="letter">ঢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">়</text>
 | 
			
		||||
    <text category="letter">ঞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ো</text>
 | 
			
		||||
    <text category="letter">ও</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ে</text>
 | 
			
		||||
    <text category="letter">এ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">্</text>
 | 
			
		||||
    <text category="letter">অ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ি</text>
 | 
			
		||||
    <text category="letter">ই</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ু</text>
 | 
			
		||||
    <text category="letter">উ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">প</text>
 | 
			
		||||
    <text category="letter">ফ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">র</text>
 | 
			
		||||
    <text category="letter">J</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ক</text>
 | 
			
		||||
    <text category="letter">খ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ত</text>
 | 
			
		||||
    <text category="letter">থ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">চ</text>
 | 
			
		||||
    <text category="letter">ছ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ঠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">z</text>
 | 
			
		||||
    <text category="letter">Z</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ং</text>
 | 
			
		||||
    <text category="letter">ঁ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ম</text>
 | 
			
		||||
    <text category="letter">ণ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ন</text>
 | 
			
		||||
    <text category="letter">V</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ব</text>
 | 
			
		||||
    <text category="letter">B</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ল</text>
 | 
			
		||||
    <text category="letter">N</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">স</text>
 | 
			
		||||
    <text category="letter">শ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ষ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">য়</text>
 | 
			
		||||
    <text category="letter">য</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">۱</text>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">۲</text>
 | 
			
		||||
    <text category="letter">٬</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">۳</text>
 | 
			
		||||
    <text category="letter">٫</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">۴</text>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">۵</text>
 | 
			
		||||
    <text category="letter">٪</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">۶</text>
 | 
			
		||||
    <text category="letter">×</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">۷</text>
 | 
			
		||||
    <text category="letter">،</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">۸</text>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">۹</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">۰</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <keysym keyval="95">underscore</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ض</text>
 | 
			
		||||
    <text category="letter">ْ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ص</text>
 | 
			
		||||
    <text category="letter">ٌ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ث</text>
 | 
			
		||||
    <text category="letter">ٍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ق</text>
 | 
			
		||||
    <text category="letter">ً</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ف</text>
 | 
			
		||||
    <text category="letter">ُ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">غ</text>
 | 
			
		||||
    <text category="letter">ِ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ع</text>
 | 
			
		||||
    <text category="letter">َ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ه</text>
 | 
			
		||||
    <text category="letter">ّ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">خ</text>
 | 
			
		||||
    <text category="letter">]</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ح</text>
 | 
			
		||||
    <text category="letter">[</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ج</text>
 | 
			
		||||
    <text category="letter">}</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">چ</text>
 | 
			
		||||
    <text category="letter">{</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ش</text>
 | 
			
		||||
    <text category="letter">ؤ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">س</text>
 | 
			
		||||
    <text category="letter">ئ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">ی</text>
 | 
			
		||||
    <text category="letter">ي</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ب</text>
 | 
			
		||||
    <text category="letter">إ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ل</text>
 | 
			
		||||
    <text category="letter">أ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ا</text>
 | 
			
		||||
    <text category="letter">آ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ت</text>
 | 
			
		||||
    <text category="letter">ة</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ن</text>
 | 
			
		||||
    <text category="letter">»</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">م</text>
 | 
			
		||||
    <text category="letter">«</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ک</text>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">؛</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ظ</text>
 | 
			
		||||
    <text category="letter">ك</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ط</text>
 | 
			
		||||
    <keysym keyval="88">X</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ز</text>
 | 
			
		||||
    <text category="letter">ژ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ر</text>
 | 
			
		||||
    <keysym keyval="86">V</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ذ</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">د</text>
 | 
			
		||||
    <text name="N" category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">پ</text>
 | 
			
		||||
    <text category="letter">ء</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">و</text>
 | 
			
		||||
    <text category="letter">></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <keysym keyval="46">period</keysym>
 | 
			
		||||
    <text category="letter"><</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <keysym keyval="47">slash</keysym>
 | 
			
		||||
    <text category="letter">؟</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">~</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">૧</text>
 | 
			
		||||
    <text category="letter">ઍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">૨</text>
 | 
			
		||||
    <text category="letter">ૅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">૩</text>
 | 
			
		||||
    <text category="letter">ૠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">૪</text>
 | 
			
		||||
    <text category="letter">ૄ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">૫</text>
 | 
			
		||||
    <text category="letter">જ્ઞ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">૬</text>
 | 
			
		||||
    <text category="letter">ત્ર</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">૭</text>
 | 
			
		||||
    <text category="letter">ક્ષ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">૮</text>
 | 
			
		||||
    <text category="letter">શ્ર</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">૯</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">૦</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ઃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ૃ</text>
 | 
			
		||||
    <text category="letter">ઋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ૌ</text>
 | 
			
		||||
    <text category="letter">ઔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ૈ</text>
 | 
			
		||||
    <text category="letter">ઐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ા</text>
 | 
			
		||||
    <text category="letter">આ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ી</text>
 | 
			
		||||
    <text category="letter">ઈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ૂ</text>
 | 
			
		||||
    <text category="letter">ઊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">બ</text>
 | 
			
		||||
    <text category="letter">ભ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">હ</text>
 | 
			
		||||
    <text category="letter">ઙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ગ</text>
 | 
			
		||||
    <text category="letter">ઘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">દ</text>
 | 
			
		||||
    <text category="letter">ધ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">જ</text>
 | 
			
		||||
    <text category="letter">ઝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ડ</text>
 | 
			
		||||
    <text category="letter">ઢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">઼</text>
 | 
			
		||||
    <text category="letter">ઞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ૉ</text>
 | 
			
		||||
    <text category="letter">ઑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ો</text>
 | 
			
		||||
    <text category="letter">ઓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ે</text>
 | 
			
		||||
    <text category="letter">એ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">્</text>
 | 
			
		||||
    <text category="letter">અ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">િ</text>
 | 
			
		||||
    <text category="letter">ઇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ુ</text>
 | 
			
		||||
    <text category="letter">ઉ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">પ</text>
 | 
			
		||||
    <text category="letter">ફ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ર</text>
 | 
			
		||||
    <text category="letter">ઽ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ક</text>
 | 
			
		||||
    <text category="letter">ખ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ત</text>
 | 
			
		||||
    <text category="letter">થ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ચ</text>
 | 
			
		||||
    <text category="letter">છ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ઠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">૱</text>
 | 
			
		||||
    <text category="letter">ૐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ં</text>
 | 
			
		||||
    <text category="letter">ઁ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">મ</text>
 | 
			
		||||
    <text category="letter">ણ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ન</text>
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">વ</text>
 | 
			
		||||
    <text category="letter">'</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">લ</text>
 | 
			
		||||
    <text category="letter">ળ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">સ</text>
 | 
			
		||||
    <text category="letter">શ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ષ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ય</text>
 | 
			
		||||
    <text category="letter">?</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <keysym keyval="95">underscore</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">/</text>
 | 
			
		||||
    <keysym keyval="81">Q</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">'</text>
 | 
			
		||||
    <keysym keyval="87">W</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ק</text>
 | 
			
		||||
    <keysym keyval="69">E</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ר</text>
 | 
			
		||||
    <keysym keyval="82">R</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">א</text>
 | 
			
		||||
    <keysym keyval="84">T</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ט</text>
 | 
			
		||||
    <keysym keyval="89">Y</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ו</text>
 | 
			
		||||
    <keysym keyval="85">U</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ן</text>
 | 
			
		||||
    <keysym keyval="73">I</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ם</text>
 | 
			
		||||
    <keysym keyval="79">O</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">פ</text>
 | 
			
		||||
    <keysym keyval="80">P</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">]</text>
 | 
			
		||||
    <text category="letter">}</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">[</text>
 | 
			
		||||
    <text category="letter">{</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ש</text>
 | 
			
		||||
    <keysym keyval="65">A</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ד</text>
 | 
			
		||||
    <keysym keyval="83">S</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">ג</text>
 | 
			
		||||
    <keysym keyval="68">D</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">כ</text>
 | 
			
		||||
    <keysym keyval="70">F</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ע</text>
 | 
			
		||||
    <keysym keyval="71">G</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">י</text>
 | 
			
		||||
    <keysym keyval="72">H</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ח</text>
 | 
			
		||||
    <keysym keyval="74">J</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ל</text>
 | 
			
		||||
    <keysym keyval="75">K</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ך</text>
 | 
			
		||||
    <keysym keyval="76">L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ף</text>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ז</text>
 | 
			
		||||
    <keysym keyval="90">Z</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ס</text>
 | 
			
		||||
    <keysym keyval="88">X</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ב</text>
 | 
			
		||||
    <keysym keyval="67">C</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ה</text>
 | 
			
		||||
    <keysym keyval="86">V</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">נ</text>
 | 
			
		||||
    <keysym keyval="66">B</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">מ</text>
 | 
			
		||||
    <keysym keyval="78">N</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">צ</text>
 | 
			
		||||
    <keysym keyval="77">M</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">ת</text>
 | 
			
		||||
    <text category="letter">></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ץ</text>
 | 
			
		||||
    <text category="letter"><</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ऒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">१</text>
 | 
			
		||||
    <text category="letter">ऍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">२</text>
 | 
			
		||||
    <text category="letter">ॅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">३</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">४</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">५</text>
 | 
			
		||||
    <text category="letter">ज्ञ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">६</text>
 | 
			
		||||
    <text category="letter">त्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">७</text>
 | 
			
		||||
    <text category="letter">क्ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">८</text>
 | 
			
		||||
    <text category="letter">श्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">९</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">०</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ः</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ृ</text>
 | 
			
		||||
    <text category="letter">ऋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ौ</text>
 | 
			
		||||
    <text category="letter">औ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ै</text>
 | 
			
		||||
    <text category="letter">ऐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ा</text>
 | 
			
		||||
    <text category="letter">आ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ी</text>
 | 
			
		||||
    <text category="letter">ई</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ू</text>
 | 
			
		||||
    <text category="letter">ऊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ब</text>
 | 
			
		||||
    <text category="letter">भ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ह</text>
 | 
			
		||||
    <text category="letter">ङ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ग</text>
 | 
			
		||||
    <text category="letter">घ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">द</text>
 | 
			
		||||
    <text category="letter">ध</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ज</text>
 | 
			
		||||
    <text category="letter">झ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ड</text>
 | 
			
		||||
    <text category="letter">ढ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">़</text>
 | 
			
		||||
    <text category="letter">ञ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ॉ</text>
 | 
			
		||||
    <text category="letter">ऑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ो</text>
 | 
			
		||||
    <text category="letter">ओ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">े</text>
 | 
			
		||||
    <text category="letter">ए</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">्</text>
 | 
			
		||||
    <text category="letter">अ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ि</text>
 | 
			
		||||
    <text category="letter">इ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ु</text>
 | 
			
		||||
    <text category="letter">उ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">प</text>
 | 
			
		||||
    <text category="letter">फ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">र</text>
 | 
			
		||||
    <text category="letter">ऱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">क</text>
 | 
			
		||||
    <text category="letter">ख</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">त</text>
 | 
			
		||||
    <text category="letter">थ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">च</text>
 | 
			
		||||
    <text category="letter">छ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ठ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ॆ</text>
 | 
			
		||||
    <text category="letter">ऎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ं</text>
 | 
			
		||||
    <text category="letter">ँ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">म</text>
 | 
			
		||||
    <text category="letter">ण</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">न</text>
 | 
			
		||||
    <text category="letter">ऩ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">व</text>
 | 
			
		||||
    <text category="letter">ऴ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ल</text>
 | 
			
		||||
    <text category="letter">ळ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">स</text>
 | 
			
		||||
    <text category="letter">श</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">य</text>
 | 
			
		||||
    <text category="letter">य़</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,250 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="1" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="51" label="あ">3</keysym>
 | 
			
		||||
    <keysym keyval="35" label="ぁ">numbersign</keysym>
 | 
			
		||||
    <keysym keyval="51" label="ア">3</keysym>
 | 
			
		||||
    <keysym keyval="35" label="ァ">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="2" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="101" label="い">e</keysym>
 | 
			
		||||
    <keysym keyval="69" label="ぃ">E</keysym>
 | 
			
		||||
    <keysym keyval="101" label="イ">e</keysym>
 | 
			
		||||
    <keysym keyval="69" label="ィ">E</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="3" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="52" label="う">4</keysym>
 | 
			
		||||
    <keysym keyval="36" label="ぅ">dollar</keysym>
 | 
			
		||||
    <keysym keyval="52" label="ウ">4</keysym>
 | 
			
		||||
    <keysym keyval="36" label="ゥ">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="4" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="53" label="え">5</keysym>
 | 
			
		||||
    <keysym keyval="37" label="ぇ">percent</keysym>
 | 
			
		||||
    <keysym keyval="53" label="エ">5</keysym>
 | 
			
		||||
    <keysym keyval="37" label="ェ">percent</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="5" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="54" label="お">6</keysym>
 | 
			
		||||
    <keysym keyval="38" label="ぉ">ampersand</keysym>
 | 
			
		||||
    <keysym keyval="54" label="オ">6</keysym>
 | 
			
		||||
    <keysym keyval="38" label="ォ">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="6" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="116" label="か">t</keysym>
 | 
			
		||||
    <keysym keyval="116" label="カ">t</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="7" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="103" label="き">g</keysym>
 | 
			
		||||
    <keysym keyval="103" label="キ">g</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="8" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="104" label="く">h</keysym>
 | 
			
		||||
    <keysym keyval="104" label="ク">h</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="9" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="58" label="け">colon</keysym>
 | 
			
		||||
    <keysym keyval="58" label="ケ">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="98" label="こ">b</keysym>
 | 
			
		||||
    <keysym keyval="98" label="コ">b</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="11" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="120" label="さ">x</keysym>
 | 
			
		||||
    <keysym keyval="120" label="サ">x</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="100" label="し">d</keysym>
 | 
			
		||||
    <keysym keyval="100" label="シ">d</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="114" label="す">r</keysym>
 | 
			
		||||
    <keysym keyval="114" label="ス">r</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="112" label="せ">p</keysym>
 | 
			
		||||
    <keysym keyval="112" label="セ">p</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="99" label="そ">c</keysym>
 | 
			
		||||
    <keysym keyval="99" label="ソ">c</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="16" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="113" label="た">q</keysym>
 | 
			
		||||
    <keysym keyval="113" label="タ">q</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="97" label="ち">a</keysym>
 | 
			
		||||
    <keysym keyval="97" label="チ">a</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="122" label="つ">z</keysym>
 | 
			
		||||
    <keysym keyval="90" label="っ">Z</keysym>
 | 
			
		||||
    <keysym keyval="122" label="ツ">z</keysym>
 | 
			
		||||
    <keysym keyval="90" label="ッ">Z</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="119" label="て">w</keysym>
 | 
			
		||||
    <keysym keyval="119" label="テ">w</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="115" label="と">s</keysym>
 | 
			
		||||
    <keysym keyval="115" label="ト">s</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="21" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="117" label="な">u</keysym>
 | 
			
		||||
    <keysym keyval="117" label="ナ">u</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="22" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="105" label="に">i</keysym>
 | 
			
		||||
    <keysym keyval="105" label="ニ">i</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="23" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="33" label="ぬ">exclam</keysym>
 | 
			
		||||
    <keysym keyval="33" label="ヌ">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="44" label="ね">comma</keysym>
 | 
			
		||||
    <keysym keyval="44" label="ネ">comma</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="107" label="の">k</keysym>
 | 
			
		||||
    <keysym keyval="107" label="ノ">k</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="26" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="102" label="は">f</keysym>
 | 
			
		||||
    <keysym keyval="102" label="ハ">f</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="118" label="ひ">v</keysym>
 | 
			
		||||
    <keysym keyval="118" label="ヒ">v</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="34" label="ふ">quotedbl</keysym>
 | 
			
		||||
    <keysym keyval="34" label="フ">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="94" label="へ">asciicircum</keysym>
 | 
			
		||||
    <keysym keyval="94" label="ヘ">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="61" label="ほ">equal</keysym>
 | 
			
		||||
    <keysym keyval="61" label="ホ">equal</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="31" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="106" label="ま">j</keysym>
 | 
			
		||||
    <keysym keyval="106" label="マ">j</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="110" label="み">n</keysym>
 | 
			
		||||
    <keysym keyval="110" label="ミ">n</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="93" label="む">bracketright</keysym>
 | 
			
		||||
    <keysym keyval="93" label="ム">bracketright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="47" label="め">slash</keysym>
 | 
			
		||||
    <keysym keyval="47" label="メ">slash</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="109" label="も">m</keysym>
 | 
			
		||||
    <keysym keyval="109" label="モ">m</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="36" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="55" label="や">7</keysym>
 | 
			
		||||
    <keysym keyval="39" label="ゃ">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="55" label="ヤ">7</keysym>
 | 
			
		||||
    <keysym keyval="39" label="ャ">quoteright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="37" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="56" label="ゆ">8</keysym>
 | 
			
		||||
    <keysym keyval="40" label="ゅ">parenleft</keysym>
 | 
			
		||||
    <keysym keyval="56" label="ユ">8</keysym>
 | 
			
		||||
    <keysym keyval="40" label="ュ">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="57" label="よ">9</keysym>
 | 
			
		||||
    <keysym keyval="41" label="ょ">parenright</keysym>
 | 
			
		||||
    <keysym keyval="57" label="ヨ">9</keysym>
 | 
			
		||||
    <keysym keyval="41" label="ョ">parenright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="111" label="ら">o</keysym>
 | 
			
		||||
    <keysym keyval="111" label="ラ">o</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="108" label="り">l</keysym>
 | 
			
		||||
    <keysym keyval="108" label="リ">l</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="46" label="る">period</keysym>
 | 
			
		||||
    <keysym keyval="46" label="ル">period</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="59" label="れ">semicolon</keysym>
 | 
			
		||||
    <keysym keyval="59" label="レ">semicolon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="92" label="ろ">backslash</keysym>
 | 
			
		||||
    <keysym keyval="92" label="ロ">backslash</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="46" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="48" label="わ">0</keysym>
 | 
			
		||||
    <keysym keyval="48" label="ワ">0</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="126" label="を">asciitilde</keysym>
 | 
			
		||||
    <keysym keyval="126" label="ヲ">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="121" label="ん">y</keysym>
 | 
			
		||||
    <keysym keyval="121" label="ン">y</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="49" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="123" label="「">braceleft</keysym>
 | 
			
		||||
    <keysym keyval="48" label="ゐ">0</keysym>
 | 
			
		||||
    <keysym keyval="123" label="「">braceleft</keysym>
 | 
			
		||||
    <keysym keyval="48" label="ヰ">0</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="50" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="125" label="」">braceright</keysym>
 | 
			
		||||
    <keysym keyval="48" label="ゑ">0</keysym>
 | 
			
		||||
    <keysym keyval="125" label="」">braceright</keysym>
 | 
			
		||||
    <keysym keyval="48" label="ヱ">0</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
 | 
			
		||||
  <key keycode="51" name="AE03" groups="2">
 | 
			
		||||
    <keysym keyval="64" label="゛">at</keysym>
 | 
			
		||||
    <keysym keyval="64" label="゛">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AD03" groups="2">
 | 
			
		||||
    <keysym keyval="91" label="゜">bracketleft</keysym>
 | 
			
		||||
    <keysym keyval="91" label="゜">bracketleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AE04" groups="2">
 | 
			
		||||
    <keysym keyval="124" label="ー">bar</keysym>
 | 
			
		||||
    <keysym keyval="124" label="ー">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AE05" groups="2">
 | 
			
		||||
    <keysym keyval="60" label="、">less</keysym>
 | 
			
		||||
    <keysym keyval="60" label="、">less</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AE06" groups="2">
 | 
			
		||||
    <keysym keyval="62" label="。">greater</keysym>
 | 
			
		||||
    <keysym keyval="63" label="・">question</keysym>
 | 
			
		||||
    <keysym keyval="62" label="。">greater</keysym>
 | 
			
		||||
    <keysym keyval="63" label="・">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">ә</text>
 | 
			
		||||
    <text category="letter">Ә</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">і</text>
 | 
			
		||||
    <text category="letter">І</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">ӊ</text>
 | 
			
		||||
    <text category="letter">Ӊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">ғ</text>
 | 
			
		||||
    <text category="letter">Ғ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">;</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">:</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">ү</text>
 | 
			
		||||
    <text category="letter">Ү</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">ұ</text>
 | 
			
		||||
    <text category="letter">Ұ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">қ</text>
 | 
			
		||||
    <text category="letter">Қ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">ө</text>
 | 
			
		||||
    <text category="letter">Ө</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">һ</text>
 | 
			
		||||
    <text category="letter">Һ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">й</text>
 | 
			
		||||
    <text category="letter">Й</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ц</text>
 | 
			
		||||
    <text category="letter">Ц</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">у</text>
 | 
			
		||||
    <text category="letter">У</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">к</text>
 | 
			
		||||
    <text category="letter">К</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">е</text>
 | 
			
		||||
    <text category="letter">Е</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">н</text>
 | 
			
		||||
    <text category="letter">Н</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">г</text>
 | 
			
		||||
    <text category="letter">Г</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ш</text>
 | 
			
		||||
    <text category="letter">Ш</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">щ</text>
 | 
			
		||||
    <text category="letter">Щ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">з</text>
 | 
			
		||||
    <text category="letter">З</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">х</text>
 | 
			
		||||
    <text category="letter">Х</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">ъ</text>
 | 
			
		||||
    <text category="letter">Ъ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ф</text>
 | 
			
		||||
    <text category="letter">Ф</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ы</text>
 | 
			
		||||
    <text category="letter">Ы</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">в</text>
 | 
			
		||||
    <text category="letter">В</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">а</text>
 | 
			
		||||
    <text category="letter">А</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">п</text>
 | 
			
		||||
    <text category="letter">П</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">р</text>
 | 
			
		||||
    <text category="letter">Р</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">о</text>
 | 
			
		||||
    <text category="letter">О</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">л</text>
 | 
			
		||||
    <text category="letter">Л</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">д</text>
 | 
			
		||||
    <text category="letter">Д</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ж</text>
 | 
			
		||||
    <text category="letter">Ж</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">Э</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">я</text>
 | 
			
		||||
    <text category="letter">Я</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ч</text>
 | 
			
		||||
    <text category="letter">Ч</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">с</text>
 | 
			
		||||
    <text category="letter">С</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">м</text>
 | 
			
		||||
    <text category="letter">М</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">и</text>
 | 
			
		||||
    <text category="letter">И</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">т</text>
 | 
			
		||||
    <text category="letter">Т</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ь</text>
 | 
			
		||||
    <text category="letter">Ь</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">б</text>
 | 
			
		||||
    <text category="letter">Б</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ю</text>
 | 
			
		||||
    <text category="letter">Ю</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">№</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ಒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">೧</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">೨</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">೩</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">೪</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">೫</text>
 | 
			
		||||
    <text category="letter">ಜ್ಞ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">೬</text>
 | 
			
		||||
    <text category="letter">ತ್ರ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">೭</text>
 | 
			
		||||
    <text category="letter">ಕ್ಷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">೮</text>
 | 
			
		||||
    <text category="letter">ಶ್ರ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">೯</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">೦</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ಃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ೃ</text>
 | 
			
		||||
    <text category="letter">ಋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ೌ</text>
 | 
			
		||||
    <text category="letter">ಔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ೈ</text>
 | 
			
		||||
    <text category="letter">ಐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ಾ</text>
 | 
			
		||||
    <text category="letter">ಆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ೀ</text>
 | 
			
		||||
    <text category="letter">ಈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ೂ</text>
 | 
			
		||||
    <text category="letter">ಊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ಬ</text>
 | 
			
		||||
    <text category="letter">ಭ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ಹ</text>
 | 
			
		||||
    <text category="letter">ಙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ಗ</text>
 | 
			
		||||
    <text category="letter">ಘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ದ</text>
 | 
			
		||||
    <text category="letter">ಧ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ಜ</text>
 | 
			
		||||
    <text category="letter">ಝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ಡ</text>
 | 
			
		||||
    <text category="letter">ಢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">]</text>
 | 
			
		||||
    <text category="letter">ಞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ೋ</text>
 | 
			
		||||
    <text category="letter">ಓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ೇ</text>
 | 
			
		||||
    <text category="letter">ಏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">್</text>
 | 
			
		||||
    <text category="letter">ಅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ಿ</text>
 | 
			
		||||
    <text category="letter">ಇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ು</text>
 | 
			
		||||
    <text category="letter">ಉ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ಪ</text>
 | 
			
		||||
    <text category="letter">ಫ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ರ</text>
 | 
			
		||||
    <text category="letter">ಱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ಕ</text>
 | 
			
		||||
    <text category="letter">ಖ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ತ</text>
 | 
			
		||||
    <text category="letter">ಥ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ಚ</text>
 | 
			
		||||
    <text category="letter">ಛ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ಠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ೆ</text>
 | 
			
		||||
    <text category="letter">ಎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ಂ</text>
 | 
			
		||||
    <text name="X" category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ಮ</text>
 | 
			
		||||
    <text category="letter">ಣ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ನ</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ವ</text>
 | 
			
		||||
    <keysym keyval="66">B</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ಲ</text>
 | 
			
		||||
    <text category="letter">ಳ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ಸ</text>
 | 
			
		||||
    <text category="letter">ಶ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ಷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">ಾ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ಯ</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ऒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">१</text>
 | 
			
		||||
    <text category="letter">ऍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">२</text>
 | 
			
		||||
    <text category="letter">ॅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">३</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">४</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">५</text>
 | 
			
		||||
    <text category="letter">ज्ञ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">६</text>
 | 
			
		||||
    <text category="letter">त्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">७</text>
 | 
			
		||||
    <text category="letter">क्ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">८</text>
 | 
			
		||||
    <text category="letter">श्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">९</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">०</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ः</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ृ</text>
 | 
			
		||||
    <text category="letter">ऋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ौ</text>
 | 
			
		||||
    <text category="letter">औ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ै</text>
 | 
			
		||||
    <text category="letter">ऐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ा</text>
 | 
			
		||||
    <text category="letter">आ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ी</text>
 | 
			
		||||
    <text category="letter">ई</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ू</text>
 | 
			
		||||
    <text category="letter">ऊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ॿ</text>
 | 
			
		||||
    <text category="letter">भ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ह</text>
 | 
			
		||||
    <text category="letter">ङ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ॻ</text>
 | 
			
		||||
    <text category="letter">घ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">द</text>
 | 
			
		||||
    <text category="letter">ध</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ॼ</text>
 | 
			
		||||
    <text category="letter">झ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ॾ</text>
 | 
			
		||||
    <text category="letter">ढ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">़</text>
 | 
			
		||||
    <text category="letter">ञ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ॉ</text>
 | 
			
		||||
    <text category="letter">ऑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ो</text>
 | 
			
		||||
    <text category="letter">ओ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">े</text>
 | 
			
		||||
    <text category="letter">ए</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">्</text>
 | 
			
		||||
    <text category="letter">अ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ि</text>
 | 
			
		||||
    <text category="letter">इ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <keysym keyval="103">g</keysym>
 | 
			
		||||
    <keysym keyval="71">G</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">प</text>
 | 
			
		||||
    <text category="letter">फ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">र</text>
 | 
			
		||||
    <text category="letter">ऱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">क</text>
 | 
			
		||||
    <text category="letter">ख</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">त</text>
 | 
			
		||||
    <text category="letter">थ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">च</text>
 | 
			
		||||
    <text category="letter">छ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ठ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ॆ</text>
 | 
			
		||||
    <text category="letter">ऎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ं</text>
 | 
			
		||||
    <text category="letter">ँ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">म</text>
 | 
			
		||||
    <text category="letter">ण</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">न</text>
 | 
			
		||||
    <text category="letter">ऩ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">व</text>
 | 
			
		||||
    <text category="letter">ऴ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ल</text>
 | 
			
		||||
    <text category="letter">ळ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">स</text>
 | 
			
		||||
    <text category="letter">श</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">य</text>
 | 
			
		||||
    <text category="letter">य़</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ً</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">۱</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">۲</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">۳</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">۴</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">۵</text>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">۶</text>
 | 
			
		||||
    <text category="letter">^</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">۷</text>
 | 
			
		||||
    <text category="letter">&</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">۸</text>
 | 
			
		||||
    <text category="letter">*</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">۹</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">۰</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ّ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">=</text>
 | 
			
		||||
    <text category="letter">+</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ق</text>
 | 
			
		||||
    <text category="letter">ﷺ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">و</text>
 | 
			
		||||
    <text category="letter">ؤ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ع</text>
 | 
			
		||||
    <text category="letter">ئ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ر</text>
 | 
			
		||||
    <text category="letter">ڑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ت</text>
 | 
			
		||||
    <text category="letter">ٹ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ے</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ء</text>
 | 
			
		||||
    <text category="letter">،</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ی</text>
 | 
			
		||||
    <text category="letter">ۆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ہ</text>
 | 
			
		||||
    <text category="letter">ۃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">پ</text>
 | 
			
		||||
    <text category="letter">إ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">]</text>
 | 
			
		||||
    <text category="letter">ٰ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">[</text>
 | 
			
		||||
    <text category="letter">ٰ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">؎</text>
 | 
			
		||||
    <text category="letter">أ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ا</text>
 | 
			
		||||
    <text category="letter">آ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">س</text>
 | 
			
		||||
    <text category="letter">ش</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">د</text>
 | 
			
		||||
    <text category="letter">ڈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ف</text>
 | 
			
		||||
    <text category="letter">ُ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">گ</text>
 | 
			
		||||
    <text category="letter">غ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ھ</text>
 | 
			
		||||
    <text category="letter">ح</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ج</text>
 | 
			
		||||
    <text category="letter">ژ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ک</text>
 | 
			
		||||
    <text category="letter">خ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ل</text>
 | 
			
		||||
    <text category="letter">ؓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">؛</text>
 | 
			
		||||
    <text category="letter">:</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ز</text>
 | 
			
		||||
    <text category="letter">ذ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ص</text>
 | 
			
		||||
    <text category="letter">ض</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">چ</text>
 | 
			
		||||
    <text category="letter">ث</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ط</text>
 | 
			
		||||
    <text category="letter">ظ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ب</text>
 | 
			
		||||
    <text category="letter">أ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ن</text>
 | 
			
		||||
    <text category="letter">ں</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">م</text>
 | 
			
		||||
    <text category="letter">ٔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">،</text>
 | 
			
		||||
    <text category="letter">ِ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">۔</text>
 | 
			
		||||
    <text category="letter">َ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">/</text>
 | 
			
		||||
    <text category="letter">؟</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ऒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">१</text>
 | 
			
		||||
    <text category="letter">ऍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">२</text>
 | 
			
		||||
    <text category="letter">ॅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">३</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">४</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">५</text>
 | 
			
		||||
    <text category="letter">ज्ञ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">६</text>
 | 
			
		||||
    <text category="letter">त्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">७</text>
 | 
			
		||||
    <text category="letter">क्ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">८</text>
 | 
			
		||||
    <text category="letter">श्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">९</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">०</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ः</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ृ</text>
 | 
			
		||||
    <text category="letter">ऋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ौ</text>
 | 
			
		||||
    <text category="letter">औ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ै</text>
 | 
			
		||||
    <text category="letter">ऐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ा</text>
 | 
			
		||||
    <text category="letter">आ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ी</text>
 | 
			
		||||
    <text category="letter">ई</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ू</text>
 | 
			
		||||
    <text category="letter">ऊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ब</text>
 | 
			
		||||
    <text category="letter">भ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ह</text>
 | 
			
		||||
    <text category="letter">ङ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ग</text>
 | 
			
		||||
    <text category="letter">घ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">द</text>
 | 
			
		||||
    <text category="letter">ध</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ज</text>
 | 
			
		||||
    <text category="letter">झ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ड</text>
 | 
			
		||||
    <text category="letter">ढ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">़</text>
 | 
			
		||||
    <text category="letter">ञ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ॉ</text>
 | 
			
		||||
    <text category="letter">ऑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ो</text>
 | 
			
		||||
    <text category="letter">ओ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">े</text>
 | 
			
		||||
    <text category="letter">ए</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">्</text>
 | 
			
		||||
    <text category="letter">अ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ि</text>
 | 
			
		||||
    <text category="letter">इ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ु</text>
 | 
			
		||||
    <text category="letter">उ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">प</text>
 | 
			
		||||
    <text category="letter">फ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">र</text>
 | 
			
		||||
    <text category="letter">ऱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">क</text>
 | 
			
		||||
    <text category="letter">ख</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">त</text>
 | 
			
		||||
    <text category="letter">थ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">च</text>
 | 
			
		||||
    <text category="letter">छ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ठ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ॆ</text>
 | 
			
		||||
    <text category="letter">ऎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ं</text>
 | 
			
		||||
    <text category="letter">ँ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">म</text>
 | 
			
		||||
    <text category="letter">ण</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">न</text>
 | 
			
		||||
    <text category="letter">ऩ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">व</text>
 | 
			
		||||
    <text category="letter">ऴ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ल</text>
 | 
			
		||||
    <text category="letter">ळ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">स</text>
 | 
			
		||||
    <text category="letter">श</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">य</text>
 | 
			
		||||
    <text category="letter">य़</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ഒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">൧</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">൨</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">൩</text>
 | 
			
		||||
    <text category="letter">്ര</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">൪</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">൫</text>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">൬</text>
 | 
			
		||||
    <text category="letter">^</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">൭</text>
 | 
			
		||||
    <text category="letter">ക്ഷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">൮</text>
 | 
			
		||||
    <text category="letter">*</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">൯</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">൦</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ഃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ൃ</text>
 | 
			
		||||
    <text category="letter">ഋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ൌ</text>
 | 
			
		||||
    <text category="letter">ഔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ൈ</text>
 | 
			
		||||
    <text category="letter">ഐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ാ</text>
 | 
			
		||||
    <text category="letter">ആ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ീ</text>
 | 
			
		||||
    <text category="letter">ഈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ൂ</text>
 | 
			
		||||
    <text category="letter">ഊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ബ</text>
 | 
			
		||||
    <text category="letter">ഭ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ഹ</text>
 | 
			
		||||
    <text category="letter">ങ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ഗ</text>
 | 
			
		||||
    <text category="letter">ഘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ദ</text>
 | 
			
		||||
    <text category="letter">ധ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ജ</text>
 | 
			
		||||
    <text category="letter">ഝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ഡ</text>
 | 
			
		||||
    <text category="letter">ഢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
    <text category="letter">ഞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ോ</text>
 | 
			
		||||
    <text category="letter">ഓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">േ</text>
 | 
			
		||||
    <text category="letter">ഏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">്</text>
 | 
			
		||||
    <text category="letter">അ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ി</text>
 | 
			
		||||
    <text category="letter">ഇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ു</text>
 | 
			
		||||
    <text category="letter">ഉ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">പ</text>
 | 
			
		||||
    <text category="letter">ഫ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ര</text>
 | 
			
		||||
    <text category="letter">റ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ക</text>
 | 
			
		||||
    <text category="letter">ഖ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ത</text>
 | 
			
		||||
    <text category="letter">ഥ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ച</text>
 | 
			
		||||
    <text category="letter">ഛ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ഠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">െ</text>
 | 
			
		||||
    <text category="letter">എ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ം</text>
 | 
			
		||||
    <text category="letter">X</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">മ</text>
 | 
			
		||||
    <text category="letter">ണ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ന</text>
 | 
			
		||||
    <text category="letter">V</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">വ</text>
 | 
			
		||||
    <text category="letter">ഴ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ല</text>
 | 
			
		||||
    <text category="letter">ള</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">സ</text>
 | 
			
		||||
    <text category="letter">ശ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ഷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">യ</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ऒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">१</text>
 | 
			
		||||
    <text category="letter">ऍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">२</text>
 | 
			
		||||
    <text category="letter">ॅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">३</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">४</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">५</text>
 | 
			
		||||
    <text category="letter">ज्ञ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">६</text>
 | 
			
		||||
    <text category="letter">त्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">७</text>
 | 
			
		||||
    <text category="letter">क्ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">८</text>
 | 
			
		||||
    <text category="letter">श्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">९</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">०</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ः</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ृ</text>
 | 
			
		||||
    <text category="letter">ऋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ौ</text>
 | 
			
		||||
    <text category="letter">औ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ै</text>
 | 
			
		||||
    <text category="letter">ऐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ा</text>
 | 
			
		||||
    <text category="letter">आ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ी</text>
 | 
			
		||||
    <text category="letter">ई</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ू</text>
 | 
			
		||||
    <text category="letter">ऊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ब</text>
 | 
			
		||||
    <text category="letter">भ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ह</text>
 | 
			
		||||
    <text category="letter">ङ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ग</text>
 | 
			
		||||
    <text category="letter">घ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">द</text>
 | 
			
		||||
    <text category="letter">ध</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ज</text>
 | 
			
		||||
    <text category="letter">झ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ड</text>
 | 
			
		||||
    <text category="letter">ढ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">़</text>
 | 
			
		||||
    <text category="letter">ञ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ॉ</text>
 | 
			
		||||
    <text category="letter">ऑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ो</text>
 | 
			
		||||
    <text category="letter">ओ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">े</text>
 | 
			
		||||
    <text category="letter">ए</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">्</text>
 | 
			
		||||
    <text category="letter">अ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ि</text>
 | 
			
		||||
    <text category="letter">इ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ु</text>
 | 
			
		||||
    <text category="letter">उ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">प</text>
 | 
			
		||||
    <text category="letter">फ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">र</text>
 | 
			
		||||
    <text category="letter">ऱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">क</text>
 | 
			
		||||
    <text category="letter">ख</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">त</text>
 | 
			
		||||
    <text category="letter">थ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">च</text>
 | 
			
		||||
    <text category="letter">छ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ठ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ॆ</text>
 | 
			
		||||
    <text category="letter">ऎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ं</text>
 | 
			
		||||
    <text category="letter">ँ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">म</text>
 | 
			
		||||
    <text category="letter">ण</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">न</text>
 | 
			
		||||
    <text category="letter">ऩ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">व</text>
 | 
			
		||||
    <text category="letter">ऴ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ल</text>
 | 
			
		||||
    <text category="letter">ळ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">स</text>
 | 
			
		||||
    <text category="letter">श</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">य</text>
 | 
			
		||||
    <text category="letter">य़</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">၁</text>
 | 
			
		||||
    <text category="letter">ဍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">၂</text>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">၃</text>
 | 
			
		||||
    <text category="letter">ဋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">၄</text>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">၅</text>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">၆</text>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">၇</text>
 | 
			
		||||
    <text category="letter">ရ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">၈</text>
 | 
			
		||||
    <text category="letter">ဂ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">၉</text>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">၀</text>
 | 
			
		||||
    <text category="letter">ဝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <keysym keyval="95">underscore</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ဆ</text>
 | 
			
		||||
    <text category="letter">၍</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">တ</text>
 | 
			
		||||
    <keysym keyval="87">W</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">န</text>
 | 
			
		||||
    <keysym keyval="69">E</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">မ</text>
 | 
			
		||||
    <keysym keyval="82">R</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">အ</text>
 | 
			
		||||
    <keysym keyval="84">T</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ပ</text>
 | 
			
		||||
    <keysym keyval="89">Y</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">က</text>
 | 
			
		||||
    <keysym keyval="85">U</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">င</text>
 | 
			
		||||
    <keysym keyval="73">I</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">သ</text>
 | 
			
		||||
    <text category="letter">ဥ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">စ</text>
 | 
			
		||||
    <text category="letter">ဏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ဟ</text>
 | 
			
		||||
    <text category="letter">ဎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">ဉ</text>
 | 
			
		||||
    <text category="letter">ဧ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">၏</text>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ေ</text>
 | 
			
		||||
    <text category="letter">ဗ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">္</text>
 | 
			
		||||
    <text category="letter">္</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">ိ</text>
 | 
			
		||||
    <text category="letter">ီ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">္</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
    <text category="letter">္</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">့</text>
 | 
			
		||||
    <text category="letter">ံ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">္</text>
 | 
			
		||||
    <text category="letter">ဲ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ု</text>
 | 
			
		||||
    <keysym keyval="75">K</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ူ</text>
 | 
			
		||||
    <keysym keyval="76">L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">း</text>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ဓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ဖ</text>
 | 
			
		||||
    <text category="letter">ဇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ထ</text>
 | 
			
		||||
    <text category="letter">ဌ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ခ</text>
 | 
			
		||||
    <text category="letter">ဃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">လ</text>
 | 
			
		||||
    <text category="letter">ဠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ဘ</text>
 | 
			
		||||
    <keysym keyval="66">B</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ည</text>
 | 
			
		||||
    <keysym keyval="78">N</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ာ</text>
 | 
			
		||||
    <keysym keyval="77">M</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">ယ</text>
 | 
			
		||||
    <text category="letter">၍</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ဈ</text>
 | 
			
		||||
    <text category="letter">ဤ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">။</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">୰</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">୧</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">୨</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">୩</text>
 | 
			
		||||
    <text category="letter">୍ର</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">୪</text>
 | 
			
		||||
    <text category="letter">ର୍</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">୫</text>
 | 
			
		||||
    <text category="letter">ଜ୍ଞ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">୬</text>
 | 
			
		||||
    <text category="letter">ତ୍ର</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">୭</text>
 | 
			
		||||
    <text category="letter">କ୍ଷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">୮</text>
 | 
			
		||||
    <text category="letter">ଶ୍ର</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">୯</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">୦</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ଃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ୃ</text>
 | 
			
		||||
    <text category="letter">ଋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ୌ</text>
 | 
			
		||||
    <text category="letter">ଔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ୈ</text>
 | 
			
		||||
    <text category="letter">ଐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ା</text>
 | 
			
		||||
    <text category="letter">ଆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ୀ</text>
 | 
			
		||||
    <text category="letter">ଈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ୂ</text>
 | 
			
		||||
    <text category="letter">ଊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ବ</text>
 | 
			
		||||
    <text category="letter">ଭ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ହ</text>
 | 
			
		||||
    <text category="letter">ଙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ଗ</text>
 | 
			
		||||
    <text category="letter">ଘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ଦ</text>
 | 
			
		||||
    <text category="letter">ଧ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ଜ</text>
 | 
			
		||||
    <text category="letter">ଝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ଡ</text>
 | 
			
		||||
    <text category="letter">ଢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">଼</text>
 | 
			
		||||
    <text category="letter">ଞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ୋ</text>
 | 
			
		||||
    <text category="letter">ଓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">େ</text>
 | 
			
		||||
    <text category="letter">ଏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">୍</text>
 | 
			
		||||
    <text category="letter">ଅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ି</text>
 | 
			
		||||
    <text category="letter">ଇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ୁ</text>
 | 
			
		||||
    <text category="letter">ଉ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ପ</text>
 | 
			
		||||
    <text category="letter">ଫ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ର</text>
 | 
			
		||||
    <text category="letter">J</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">କ</text>
 | 
			
		||||
    <text category="letter">ଖ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ତ</text>
 | 
			
		||||
    <text category="letter">ଥ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ଚ</text>
 | 
			
		||||
    <text category="letter">ଛ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ଠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">z</text>
 | 
			
		||||
    <text category="letter">Z</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ଂ</text>
 | 
			
		||||
    <text category="letter">ଁ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ମ</text>
 | 
			
		||||
    <text category="letter">ଣ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ନ</text>
 | 
			
		||||
    <text category="letter">V</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ୱ</text>
 | 
			
		||||
    <text category="letter">ଵ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ଲ</text>
 | 
			
		||||
    <text category="letter">ଳ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ସ</text>
 | 
			
		||||
    <text category="letter">ଶ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ଷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ୟ</text>
 | 
			
		||||
    <text category="letter">ଯ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">੧</text>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">੨</text>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">੩</text>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">੪</text>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">੫</text>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">੬</text>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">੭</text>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">੮</text>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">੯</text>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">੦</text>
 | 
			
		||||
    <keysym keyval="41">parenright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">_</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">=</text>
 | 
			
		||||
    <text category="letter">+</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ੌ</text>
 | 
			
		||||
    <text category="letter">ਔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ੈ</text>
 | 
			
		||||
    <text category="letter">ਐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ਾ</text>
 | 
			
		||||
    <text category="letter">ਆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ੀ</text>
 | 
			
		||||
    <text category="letter">ਈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ੂ</text>
 | 
			
		||||
    <text category="letter">ਊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ਬ</text>
 | 
			
		||||
    <text category="letter">ਭ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ਹ</text>
 | 
			
		||||
    <text category="letter">ਙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ਗ</text>
 | 
			
		||||
    <text category="letter">ਘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ਦ</text>
 | 
			
		||||
    <text category="letter">ਧ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ਜ</text>
 | 
			
		||||
    <text category="letter">ਝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ਡ</text>
 | 
			
		||||
    <text category="letter">ਢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">਼</text>
 | 
			
		||||
    <text category="letter">ਞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ੋ</text>
 | 
			
		||||
    <text category="letter">ਓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ੇ</text>
 | 
			
		||||
    <text category="letter">ਏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">੍</text>
 | 
			
		||||
    <text category="letter">ਅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ਿ</text>
 | 
			
		||||
    <text category="letter">ਇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ੁ</text>
 | 
			
		||||
    <text category="letter">ਉ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ਪ</text>
 | 
			
		||||
    <text category="letter">ਫ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ਰ</text>
 | 
			
		||||
    <text category="letter">ੜ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ਕ</text>
 | 
			
		||||
    <text category="letter">ਖ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ਤ</text>
 | 
			
		||||
    <text category="letter">ਥ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ਚ</text>
 | 
			
		||||
    <text category="letter">ਛ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ਠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ੰ</text>
 | 
			
		||||
    <text category="letter">ੱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ਜ਼</text>
 | 
			
		||||
    <text category="letter">ਫ਼</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ਮ</text>
 | 
			
		||||
    <text category="letter">ਣ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ਨ</text>
 | 
			
		||||
    <text category="letter">ਂ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ਵ</text>
 | 
			
		||||
    <text category="letter">ਞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ਲ</text>
 | 
			
		||||
    <text category="letter">ਲ਼</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ਸ</text>
 | 
			
		||||
    <text category="letter">ਸ਼</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ੳ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">ੲ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ਯ</text>
 | 
			
		||||
    <text category="letter">?</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">Ё</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <text category="letter">№</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <text category="letter">;</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
    <text category="letter">:</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
    <text category="letter">?</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
    <text category="letter">*</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <text category="letter">_</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <text category="letter">+</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">й</text>
 | 
			
		||||
    <text category="letter">Й</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ц</text>
 | 
			
		||||
    <text category="letter">Ц</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">у</text>
 | 
			
		||||
    <text category="letter">У</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">к</text>
 | 
			
		||||
    <text category="letter">К</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">е</text>
 | 
			
		||||
    <text category="letter">Е</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">н</text>
 | 
			
		||||
    <text category="letter">Н</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">г</text>
 | 
			
		||||
    <text category="letter">Г</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ш</text>
 | 
			
		||||
    <text category="letter">Ш</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">щ</text>
 | 
			
		||||
    <text category="letter">Щ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">з</text>
 | 
			
		||||
    <text category="letter">З</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">х</text>
 | 
			
		||||
    <text category="letter">Х</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">ъ</text>
 | 
			
		||||
    <text category="letter">Ъ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ф</text>
 | 
			
		||||
    <text category="letter">Ф</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ы</text>
 | 
			
		||||
    <text category="letter">Ы</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">в</text>
 | 
			
		||||
    <text category="letter">В</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">а</text>
 | 
			
		||||
    <text category="letter">А</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">п</text>
 | 
			
		||||
    <text category="letter">П</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">р</text>
 | 
			
		||||
    <text category="letter">Р</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">о</text>
 | 
			
		||||
    <text category="letter">О</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">л</text>
 | 
			
		||||
    <text category="letter">Л</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">д</text>
 | 
			
		||||
    <text category="letter">Д</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ж</text>
 | 
			
		||||
    <text category="letter">Ж</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">Э</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">я</text>
 | 
			
		||||
    <text category="letter">Я</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ч</text>
 | 
			
		||||
    <text category="letter">Ч</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">с</text>
 | 
			
		||||
    <text category="letter">С</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">м</text>
 | 
			
		||||
    <text category="letter">М</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">и</text>
 | 
			
		||||
    <text category="letter">И</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">т</text>
 | 
			
		||||
    <text category="letter">Т</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ь</text>
 | 
			
		||||
    <text category="letter">Ь</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">б</text>
 | 
			
		||||
    <text category="letter">Б</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ю</text>
 | 
			
		||||
    <text category="letter">Ю</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ऒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">१</text>
 | 
			
		||||
    <text category="letter">ऍ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">२</text>
 | 
			
		||||
    <text category="letter">ॅ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">३</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">४</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">५</text>
 | 
			
		||||
    <text category="letter">ज्ञ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">६</text>
 | 
			
		||||
    <text category="letter">त्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">७</text>
 | 
			
		||||
    <text category="letter">क्ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">८</text>
 | 
			
		||||
    <text category="letter">श्र</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">९</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">०</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ः</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ृ</text>
 | 
			
		||||
    <text category="letter">ऋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ौ</text>
 | 
			
		||||
    <text category="letter">औ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ै</text>
 | 
			
		||||
    <text category="letter">ऐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ा</text>
 | 
			
		||||
    <text category="letter">आ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ी</text>
 | 
			
		||||
    <text category="letter">ई</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ू</text>
 | 
			
		||||
    <text category="letter">ऊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ॿ</text>
 | 
			
		||||
    <text category="letter">भ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ह</text>
 | 
			
		||||
    <text category="letter">ङ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ॻ</text>
 | 
			
		||||
    <text category="letter">घ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">द</text>
 | 
			
		||||
    <text category="letter">ध</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ॼ</text>
 | 
			
		||||
    <text category="letter">झ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">ॾ</text>
 | 
			
		||||
    <text category="letter">ढ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">़</text>
 | 
			
		||||
    <text category="letter">ञ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ॉ</text>
 | 
			
		||||
    <text category="letter">ऑ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ो</text>
 | 
			
		||||
    <text category="letter">ओ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">े</text>
 | 
			
		||||
    <text category="letter">ए</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">्</text>
 | 
			
		||||
    <text category="letter">अ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ि</text>
 | 
			
		||||
    <text category="letter">इ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ु</text>
 | 
			
		||||
    <text category="letter">उ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">प</text>
 | 
			
		||||
    <text category="letter">फ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">र</text>
 | 
			
		||||
    <text category="letter">ऱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">क</text>
 | 
			
		||||
    <text category="letter">ख</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">त</text>
 | 
			
		||||
    <text category="letter">थ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">च</text>
 | 
			
		||||
    <text category="letter">छ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ठ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ॆ</text>
 | 
			
		||||
    <text category="letter">ऎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ं</text>
 | 
			
		||||
    <text category="letter">ँ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">म</text>
 | 
			
		||||
    <text category="letter">ण</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">न</text>
 | 
			
		||||
    <text category="letter">ऩ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">व</text>
 | 
			
		||||
    <text category="letter">ऴ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ल</text>
 | 
			
		||||
    <text category="letter">ळ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">स</text>
 | 
			
		||||
    <text category="letter">श</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ष</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">।</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">य</text>
 | 
			
		||||
    <text category="letter">य़</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ஒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">1</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">2</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">3</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">4</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">5</text>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">6</text>
 | 
			
		||||
    <text category="letter">^</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">7</text>
 | 
			
		||||
    <text category="letter">க்ஷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">8</text>
 | 
			
		||||
    <text category="letter">ஷ்ர</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">9</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">0</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">ஃ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">=</text>
 | 
			
		||||
    <text category="letter">+</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ௌ</text>
 | 
			
		||||
    <text category="letter">ஔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ை</text>
 | 
			
		||||
    <text category="letter">ஐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ா</text>
 | 
			
		||||
    <text category="letter">ஆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ீ</text>
 | 
			
		||||
    <text category="letter">ஈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ூ</text>
 | 
			
		||||
    <text category="letter">ஊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">y</text>
 | 
			
		||||
    <text category="letter">Y</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ஹ</text>
 | 
			
		||||
    <text category="letter">ங</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">i</text>
 | 
			
		||||
    <text category="letter">I</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">o</text>
 | 
			
		||||
    <text category="letter">O</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ஜ</text>
 | 
			
		||||
    <text category="letter">P</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">[</text>
 | 
			
		||||
    <text category="letter">{</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">]</text>
 | 
			
		||||
    <text category="letter">ஞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ோ</text>
 | 
			
		||||
    <text category="letter">ஓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ே</text>
 | 
			
		||||
    <text category="letter">ஏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">்</text>
 | 
			
		||||
    <text category="letter">அ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ி</text>
 | 
			
		||||
    <text category="letter">இ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ு</text>
 | 
			
		||||
    <text category="letter">உ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ப</text>
 | 
			
		||||
    <text category="letter">H</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ர</text>
 | 
			
		||||
    <text category="letter">ற</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">க</text>
 | 
			
		||||
    <text category="letter">K</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">த</text>
 | 
			
		||||
    <text category="letter">L</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ச</text>
 | 
			
		||||
    <text category="letter">:</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ெ</text>
 | 
			
		||||
    <text category="letter">எ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">x</text>
 | 
			
		||||
    <text category="letter">X</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ம</text>
 | 
			
		||||
    <text category="letter">ண</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ந</text>
 | 
			
		||||
    <text category="letter">ன</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">வ</text>
 | 
			
		||||
    <text category="letter">ழ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ல</text>
 | 
			
		||||
    <text category="letter">ள</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ஸ</text>
 | 
			
		||||
    <text category="letter">M</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ஷ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ய</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,194 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">ఒ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">౧</text>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">౨</text>
 | 
			
		||||
    <text category="letter">@</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">౩</text>
 | 
			
		||||
    <text category="letter">#</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">౪</text>
 | 
			
		||||
    <text category="letter">$</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">౫</text>
 | 
			
		||||
    <text category="letter">జ్ఞ</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">౬</text>
 | 
			
		||||
    <text category="letter">త్ర</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">౭</text>
 | 
			
		||||
    <text category="letter">క్ష</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">౮</text>
 | 
			
		||||
    <text category="letter">శ్ర</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">౯</text>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">౦</text>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">-</text>
 | 
			
		||||
    <text category="letter">_</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <text category="letter">ృ</text>
 | 
			
		||||
    <text category="letter">ఋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ౌ</text>
 | 
			
		||||
    <text category="letter">ఔ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ై</text>
 | 
			
		||||
    <text category="letter">ఐ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ా</text>
 | 
			
		||||
    <text category="letter">ఆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ీ</text>
 | 
			
		||||
    <text category="letter">ఈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ూ</text>
 | 
			
		||||
    <text category="letter">ఊ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">బ</text>
 | 
			
		||||
    <text category="letter">భ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">హ</text>
 | 
			
		||||
    <text category="letter">ఙ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">గ</text>
 | 
			
		||||
    <text category="letter">ఘ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ద</text>
 | 
			
		||||
    <text category="letter">ధ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">జ</text>
 | 
			
		||||
    <text category="letter">ఝ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">డ</text>
 | 
			
		||||
    <text category="letter">ఢ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
    <text category="letter">ఞ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">ౄ</text>
 | 
			
		||||
    <text category="letter">ౠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ో</text>
 | 
			
		||||
    <text category="letter">ఓ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ే</text>
 | 
			
		||||
    <text category="letter">ఏ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">్</text>
 | 
			
		||||
    <text category="letter">అ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ి</text>
 | 
			
		||||
    <text category="letter">ఇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ు</text>
 | 
			
		||||
    <text category="letter">ఉ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ప</text>
 | 
			
		||||
    <text category="letter">ఫ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ర</text>
 | 
			
		||||
    <text category="letter">ఱ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">క</text>
 | 
			
		||||
    <text category="letter">ఖ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">త</text>
 | 
			
		||||
    <text category="letter">థ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">చ</text>
 | 
			
		||||
    <text category="letter">ఛ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">ఠ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ె</text>
 | 
			
		||||
    <text category="letter">ఎ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ం</text>
 | 
			
		||||
    <text category="letter">ఁ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">మ</text>
 | 
			
		||||
    <text category="letter">ణ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">న</text>
 | 
			
		||||
    <text category="letter">ః</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">వ</text>
 | 
			
		||||
    <text category="letter"></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ల</text>
 | 
			
		||||
    <text category="letter">ళ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">స</text>
 | 
			
		||||
    <text category="letter">శ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
    <text category="letter">ష</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">></text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">య</text>
 | 
			
		||||
    <text category="letter">?</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
 | 
			
		||||
@ -1,192 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="95">underscore</keysym>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="3557">Thai_lakkhangyao</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="47">slash</keysym>
 | 
			
		||||
    <keysym keyval="3569">Thai_leknung</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <keysym keyval="3570">Thai_leksong</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="3520">Thai_phosamphao</keysym>
 | 
			
		||||
    <keysym keyval="3571">Thai_leksam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="3510">Thai_thothung</keysym>
 | 
			
		||||
    <keysym keyval="3572">Thai_leksi</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="3544">Thai_sarau</keysym>
 | 
			
		||||
    <keysym keyval="3545">Thai_sarauu</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="3542">Thai_saraue</keysym>
 | 
			
		||||
    <keysym keyval="3551">Thai_baht</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="3492">Thai_khokhwai</keysym>
 | 
			
		||||
    <keysym keyval="3573">Thai_lekha</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="3509">Thai_totao</keysym>
 | 
			
		||||
    <keysym keyval="3574">Thai_lekhok</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="3496">Thai_chochan</keysym>
 | 
			
		||||
    <keysym keyval="3575">Thai_lekchet</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="3490">Thai_khokhai</keysym>
 | 
			
		||||
    <keysym keyval="3576">Thai_lekpaet</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="3498">Thai_chochang</keysym>
 | 
			
		||||
    <keysym keyval="3577">Thai_lekkao</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <keysym keyval="3558">Thai_maiyamok</keysym>
 | 
			
		||||
    <keysym keyval="3568">Thai_leksun</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <keysym keyval="3556">Thai_saraaimaimalai</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <keysym keyval="3539">Thai_saraam</keysym>
 | 
			
		||||
    <keysym keyval="3502">Thai_dochada</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <keysym keyval="3518">Thai_phophan</keysym>
 | 
			
		||||
    <keysym keyval="3505">Thai_thonangmontho</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <keysym keyval="3536">Thai_saraa</keysym>
 | 
			
		||||
    <keysym keyval="3512">Thai_thothong</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <keysym keyval="3537">Thai_maihanakat</keysym>
 | 
			
		||||
    <keysym keyval="3565">Thai_nikhahit</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <keysym keyval="3541">Thai_saraii</keysym>
 | 
			
		||||
    <keysym keyval="3562">Thai_maitri</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <keysym keyval="3523">Thai_rorua</keysym>
 | 
			
		||||
    <keysym keyval="3507">Thai_nonen</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <keysym keyval="3513">Thai_nonu</keysym>
 | 
			
		||||
    <keysym keyval="3535">Thai_paiyannoi</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <keysym keyval="3522">Thai_yoyak</keysym>
 | 
			
		||||
    <keysym keyval="3501">Thai_yoying</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <keysym keyval="3514">Thai_bobaimai</keysym>
 | 
			
		||||
    <keysym keyval="3504">Thai_thothan</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <keysym keyval="3525">Thai_loling</keysym>
 | 
			
		||||
    <keysym keyval="44">comma</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="3491">Thai_khokhuat</keysym>
 | 
			
		||||
    <keysym keyval="3493">Thai_khokhon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <keysym keyval="3519">Thai_fofan</keysym>
 | 
			
		||||
    <keysym keyval="3524">Thai_ru</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <keysym keyval="3531">Thai_hohip</keysym>
 | 
			
		||||
    <keysym keyval="3494">Thai_khorakhang</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <keysym keyval="3489">Thai_kokai</keysym>
 | 
			
		||||
    <keysym keyval="3503">Thai_topatak</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <keysym keyval="3508">Thai_dodek</keysym>
 | 
			
		||||
    <keysym keyval="3554">Thai_sarao</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <keysym keyval="3552">Thai_sarae</keysym>
 | 
			
		||||
    <keysym keyval="3500">Thai_chochoe</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <keysym keyval="3561">Thai_maitho</keysym>
 | 
			
		||||
    <keysym keyval="3559">Thai_maitaikhu</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <keysym keyval="3560">Thai_maiek</keysym>
 | 
			
		||||
    <keysym keyval="3563">Thai_maichattawa</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <keysym keyval="3538">Thai_saraaa</keysym>
 | 
			
		||||
    <keysym keyval="3529">Thai_sorusi</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <keysym keyval="3530">Thai_sosua</keysym>
 | 
			
		||||
    <keysym keyval="3528">Thai_sosala</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <keysym keyval="3527">Thai_wowaen</keysym>
 | 
			
		||||
    <keysym keyval="3499">Thai_soso</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="3495">Thai_ngongu</keysym>
 | 
			
		||||
    <keysym keyval="46">period</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <keysym keyval="3516">Thai_phophung</keysym>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <keysym keyval="3515">Thai_popla</keysym>
 | 
			
		||||
    <keysym keyval="41">parenright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <keysym keyval="3553">Thai_saraae</keysym>
 | 
			
		||||
    <keysym keyval="3497">Thai_choching</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <keysym keyval="3533">Thai_oang</keysym>
 | 
			
		||||
    <keysym keyval="3534">Thai_honokhuk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <keysym keyval="3540">Thai_sarai</keysym>
 | 
			
		||||
    <keysym keyval="3546">Thai_phinthu</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <keysym keyval="3543">Thai_sarauee</keysym>
 | 
			
		||||
    <keysym keyval="3564">Thai_thanthakhat</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <keysym keyval="3511">Thai_thothahan</keysym>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <keysym keyval="3521">Thai_moma</keysym>
 | 
			
		||||
    <keysym keyval="3506">Thai_thophuthao</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <keysym keyval="3555">Thai_saraaimaimuan</keysym>
 | 
			
		||||
    <keysym keyval="3532">Thai_lochula</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <keysym keyval="3517">Thai_fofa</keysym>
 | 
			
		||||
    <keysym keyval="3526">Thai_lu</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <text category="letter">Ґ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <text category="letter">!</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <text category="letter">"</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <text category="letter">№</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <text category="letter">;</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
    <text category="letter">%</text>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
    <text category="letter">:</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
    <text category="letter">?</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
    <text category="letter">*</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
    <text category="letter">(</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
    <text category="letter">)</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <text category="letter">_</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <text category="letter">+</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">й</text>
 | 
			
		||||
    <text category="letter">Й</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ц</text>
 | 
			
		||||
    <text category="letter">Ц</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">у</text>
 | 
			
		||||
    <text category="letter">У</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">к</text>
 | 
			
		||||
    <text category="letter">К</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">е</text>
 | 
			
		||||
    <text category="letter">Е</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">н</text>
 | 
			
		||||
    <text category="letter">Н</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">г</text>
 | 
			
		||||
    <text category="letter">Г</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ш</text>
 | 
			
		||||
    <text category="letter">Ш</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">щ</text>
 | 
			
		||||
    <text category="letter">Щ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">з</text>
 | 
			
		||||
    <text category="letter">З</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <text category="letter">х</text>
 | 
			
		||||
    <text category="letter">Х</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <text category="letter">ї</text>
 | 
			
		||||
    <text category="letter">Ї</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <text category="letter">\</text>
 | 
			
		||||
    <text category="letter">|</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ф</text>
 | 
			
		||||
    <text category="letter">Ф</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">і</text>
 | 
			
		||||
    <text category="letter">І</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">в</text>
 | 
			
		||||
    <text category="letter">В</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">а</text>
 | 
			
		||||
    <text category="letter">А</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">п</text>
 | 
			
		||||
    <text category="letter">П</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">р</text>
 | 
			
		||||
    <text category="letter">Р</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">о</text>
 | 
			
		||||
    <text category="letter">О</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">л</text>
 | 
			
		||||
    <text category="letter">Л</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">д</text>
 | 
			
		||||
    <text category="letter">Д</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ж</text>
 | 
			
		||||
    <text category="letter">Ж</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <text category="letter">Є</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">я</text>
 | 
			
		||||
    <text category="letter">Я</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ч</text>
 | 
			
		||||
    <text category="letter">Ч</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">с</text>
 | 
			
		||||
    <text category="letter">С</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">м</text>
 | 
			
		||||
    <text category="letter">М</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">и</text>
 | 
			
		||||
    <text category="letter">И</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">т</text>
 | 
			
		||||
    <text category="letter">Т</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ь</text>
 | 
			
		||||
    <text category="letter">Ь</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">б</text>
 | 
			
		||||
    <text category="letter">Б</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ю</text>
 | 
			
		||||
    <text category="letter">Ю</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">.</text>
 | 
			
		||||
    <text category="letter">,</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
    <keysym keyval="41">parenright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <text category="letter">—</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">چ</text>
 | 
			
		||||
    <text category="letter">چ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ۋ</text>
 | 
			
		||||
    <text category="letter">ۋ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ې</text>
 | 
			
		||||
    <text category="letter">ې</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ر</text>
 | 
			
		||||
    <text category="letter">ر</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ت</text>
 | 
			
		||||
    <text category="letter">ت</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ي</text>
 | 
			
		||||
    <text category="letter">ي</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ۇ</text>
 | 
			
		||||
    <text category="letter">ۇ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ڭ</text>
 | 
			
		||||
    <text category="letter">ڭ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">و</text>
 | 
			
		||||
    <text category="letter">و</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">پ</text>
 | 
			
		||||
    <text category="letter">پ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <keysym keyval="91">bracketleft</keysym>
 | 
			
		||||
    <text category="letter">«</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <keysym keyval="93">bracketright</keysym>
 | 
			
		||||
    <text category="letter">»</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ھ</text>
 | 
			
		||||
    <text category="letter">ھ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">س</text>
 | 
			
		||||
    <text category="letter">س</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">د</text>
 | 
			
		||||
    <text category="letter">ژ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ا</text>
 | 
			
		||||
    <text category="letter">ف</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ە</text>
 | 
			
		||||
    <text category="letter">گ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ى</text>
 | 
			
		||||
    <text category="letter">خ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ق</text>
 | 
			
		||||
    <text category="letter">ج</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ك</text>
 | 
			
		||||
    <text category="letter">ۆ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ل</text>
 | 
			
		||||
    <text category="letter">ل</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">؛</text>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ز</text>
 | 
			
		||||
    <text category="letter">ز</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ش</text>
 | 
			
		||||
    <text category="letter">ش</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">غ</text>
 | 
			
		||||
    <text category="letter">غ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ۈ</text>
 | 
			
		||||
    <text category="letter">ۈ</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ب</text>
 | 
			
		||||
    <text category="letter">ب</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ن</text>
 | 
			
		||||
    <text category="letter">ن</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">م</text>
 | 
			
		||||
    <text category="letter">م</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">،</text>
 | 
			
		||||
    <text category="letter">‹</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <keysym keyval="46">period</keysym>
 | 
			
		||||
    <text category="letter">›</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ئ</text>
 | 
			
		||||
    <text category="letter">؟</text>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,278 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <key keycode="9" name="ESC">
 | 
			
		||||
    <keysym keyval="65307">Escape</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="67" name="FK01">
 | 
			
		||||
    <keysym keyval="65470">F1</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="68" name="FK02">
 | 
			
		||||
    <keysym keyval="65471">F2</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="69" name="FK03">
 | 
			
		||||
    <keysym keyval="65472">F3</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="70" name="FK04">
 | 
			
		||||
    <keysym keyval="65473">F4</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="71" name="FK05">
 | 
			
		||||
    <keysym keyval="65474">F5</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="72" name="FK06">
 | 
			
		||||
    <keysym keyval="65475">F6</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="73" name="FK07">
 | 
			
		||||
    <keysym keyval="65476">F7</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="74" name="FK08">
 | 
			
		||||
    <keysym keyval="65477">F8</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="75" name="FK09">
 | 
			
		||||
    <keysym keyval="65478">F9</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="76" name="FK10">
 | 
			
		||||
    <keysym keyval="65479">F10</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="95" name="FK11">
 | 
			
		||||
    <keysym keyval="65480">F11</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="96" name="FK12">
 | 
			
		||||
    <keysym keyval="65481">F12</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
    <keysym keyval="41">parenright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <keysym keyval="95">underscore</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="22" name="BKSP">
 | 
			
		||||
    <keysym keyval="65288">BackSpace</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="23" name="TAB">
 | 
			
		||||
    <keysym keyval="65289">Tab</keysym>
 | 
			
		||||
    <keysym keyval="65056">ISO_Left_Tab</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <keysym keyval="113">q</keysym>
 | 
			
		||||
    <keysym keyval="81">Q</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <keysym keyval="119">w</keysym>
 | 
			
		||||
    <keysym keyval="87">W</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <keysym keyval="101">e</keysym>
 | 
			
		||||
    <keysym keyval="69">E</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <keysym keyval="114">r</keysym>
 | 
			
		||||
    <keysym keyval="82">R</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <keysym keyval="116">t</keysym>
 | 
			
		||||
    <keysym keyval="84">T</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <keysym keyval="121">y</keysym>
 | 
			
		||||
    <keysym keyval="89">Y</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <keysym keyval="117">u</keysym>
 | 
			
		||||
    <keysym keyval="85">U</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <keysym keyval="105">i</keysym>
 | 
			
		||||
    <keysym keyval="73">I</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <keysym keyval="111">o</keysym>
 | 
			
		||||
    <keysym keyval="79">O</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <keysym keyval="112">p</keysym>
 | 
			
		||||
    <keysym keyval="80">P</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <keysym keyval="91">bracketleft</keysym>
 | 
			
		||||
    <keysym keyval="123">braceleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <keysym keyval="93">bracketright</keysym>
 | 
			
		||||
    <keysym keyval="125">braceright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="66" name="CAPS">
 | 
			
		||||
    <keysym keyval="65027">ISO_Level3_Shift</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <keysym keyval="97">a</keysym>
 | 
			
		||||
    <keysym keyval="65">A</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <keysym keyval="115">s</keysym>
 | 
			
		||||
    <keysym keyval="83">S</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <keysym keyval="100">d</keysym>
 | 
			
		||||
    <keysym keyval="68">D</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <keysym keyval="102">f</keysym>
 | 
			
		||||
    <keysym keyval="70">F</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <keysym keyval="103">g</keysym>
 | 
			
		||||
    <keysym keyval="71">G</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <keysym keyval="104">h</keysym>
 | 
			
		||||
    <keysym keyval="72">H</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <keysym keyval="106">j</keysym>
 | 
			
		||||
    <keysym keyval="74">J</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <keysym keyval="107">k</keysym>
 | 
			
		||||
    <keysym keyval="75">K</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <keysym keyval="108">l</keysym>
 | 
			
		||||
    <keysym keyval="76">L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <keysym keyval="59">semicolon</keysym>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="36" name="RTRN">
 | 
			
		||||
    <keysym keyval="65293">Return</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="50" name="LFSH">
 | 
			
		||||
    <keysym keyval="65505">Shift_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <keysym keyval="122">z</keysym>
 | 
			
		||||
    <keysym keyval="90">Z</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <keysym keyval="120">x</keysym>
 | 
			
		||||
    <keysym keyval="88">X</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <keysym keyval="99">c</keysym>
 | 
			
		||||
    <keysym keyval="67">C</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <keysym keyval="118">v</keysym>
 | 
			
		||||
    <keysym keyval="86">V</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <keysym keyval="98">b</keysym>
 | 
			
		||||
    <keysym keyval="66">B</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <keysym keyval="110">n</keysym>
 | 
			
		||||
    <keysym keyval="78">N</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <keysym keyval="109">m</keysym>
 | 
			
		||||
    <keysym keyval="77">M</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <keysym keyval="44">comma</keysym>
 | 
			
		||||
    <keysym keyval="60">less</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <keysym keyval="46">period</keysym>
 | 
			
		||||
    <keysym keyval="62">greater</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <keysym keyval="47">slash</keysym>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="62" name="RTSH">
 | 
			
		||||
    <keysym keyval="65506">Shift_R</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="149" name="I149">
 | 
			
		||||
    <symbol label="⌨" icon="input-keyboard-symbolic">cycle-keyboard</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="150" name="I150">
 | 
			
		||||
    <symbol label="☺" icon="preferences-system-symbolic">preferences</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="37" name="LCTL">
 | 
			
		||||
    <keysym keyval="65507">Control_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="64" name="LALT">
 | 
			
		||||
    <keysym keyval="65513">Alt_L</keysym>
 | 
			
		||||
    <keysym keyval="65511">Meta_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="65" name="SPCE">
 | 
			
		||||
    <keysym keyval="32">space</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="113" name="LEFT">
 | 
			
		||||
    <keysym keyval="65361">Left</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="111" name="UP">
 | 
			
		||||
    <keysym keyval="65362">Up</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="116" name="DOWN">
 | 
			
		||||
    <keysym keyval="65364">Down</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="114" name="RGHT">
 | 
			
		||||
    <keysym keyval="65363">Right</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,193 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <include>us</include>
 | 
			
		||||
  <key keycode="49" name="TLDE">
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="10" name="AE01">
 | 
			
		||||
    <text category="letter">ㄅ</text>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="11" name="AE02">
 | 
			
		||||
    <text category="letter">ㄉ</text>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="12" name="AE03">
 | 
			
		||||
    <text category="letter">ˇ</text>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="13" name="AE04">
 | 
			
		||||
    <text category="letter">ˋ</text>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="14" name="AE05">
 | 
			
		||||
    <text category="letter">ㄓ</text>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <keysym keyval="8364">EuroSign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="15" name="AE06">
 | 
			
		||||
    <text category="letter">ˊ</text>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="16" name="AE07">
 | 
			
		||||
    <text category="letter">˙</text>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="17" name="AE08">
 | 
			
		||||
    <text category="letter">ㄚ</text>
 | 
			
		||||
    <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="18" name="AE09">
 | 
			
		||||
    <text category="letter">ㄞ</text>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="19" name="AE10">
 | 
			
		||||
    <text category="letter">ㄢ</text>
 | 
			
		||||
    <keysym keyval="41">parenright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="20" name="AE11">
 | 
			
		||||
    <text category="letter">ㄦ</text>
 | 
			
		||||
    <keysym keyval="95">underscore</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="21" name="AE12">
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <text category="letter">ㄆ</text>
 | 
			
		||||
    <keysym keyval="81">Q</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <text category="letter">ㄊ</text>
 | 
			
		||||
    <keysym keyval="87">W</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <text category="letter">ㄍ</text>
 | 
			
		||||
    <keysym keyval="69">E</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <text category="letter">ㄐ</text>
 | 
			
		||||
    <keysym keyval="82">R</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <text category="letter">ㄔ</text>
 | 
			
		||||
    <keysym keyval="84">T</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <text category="letter">ㄗ</text>
 | 
			
		||||
    <keysym keyval="89">Y</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <text category="letter">ㄧ</text>
 | 
			
		||||
    <keysym keyval="85">U</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <text category="letter">ㄛ</text>
 | 
			
		||||
    <keysym keyval="73">I</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <text category="letter">ㄟ</text>
 | 
			
		||||
    <keysym keyval="79">O</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <text category="letter">ㄣ</text>
 | 
			
		||||
    <keysym keyval="80">P</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <keysym keyval="91">bracketleft</keysym>
 | 
			
		||||
    <keysym keyval="123">braceleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <keysym keyval="93">bracketright</keysym>
 | 
			
		||||
    <keysym keyval="125">braceright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <text category="letter">ㄇ</text>
 | 
			
		||||
    <keysym keyval="65">A</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <text category="letter">ㄋ</text>
 | 
			
		||||
    <keysym keyval="83">S</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <text category="letter">ㄎ</text>
 | 
			
		||||
    <keysym keyval="68">D</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <text category="letter">ㄑ</text>
 | 
			
		||||
    <keysym keyval="70">F</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <text category="letter">ㄕ</text>
 | 
			
		||||
    <keysym keyval="71">G</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <text category="letter">ㄘ</text>
 | 
			
		||||
    <keysym keyval="72">H</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <text category="letter">ㄨ</text>
 | 
			
		||||
    <keysym keyval="74">J</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <text category="letter">ㄜ</text>
 | 
			
		||||
    <keysym keyval="75">K</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <text category="letter">ㄠ</text>
 | 
			
		||||
    <keysym keyval="76">L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <text category="letter">ㄤ</text>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <text category="letter">ㄈ</text>
 | 
			
		||||
    <keysym keyval="90">Z</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <text category="letter">ㄌ</text>
 | 
			
		||||
    <keysym keyval="88">X</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <text category="letter">ㄏ</text>
 | 
			
		||||
    <keysym keyval="67">C</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <text category="letter">ㄒ</text>
 | 
			
		||||
    <keysym keyval="86">V</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <text category="letter">ㄖ</text>
 | 
			
		||||
    <keysym keyval="66">B</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <text category="letter">ㄙ</text>
 | 
			
		||||
    <keysym keyval="78">N</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <text category="letter">ㄩ</text>
 | 
			
		||||
    <keysym keyval="77">M</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <text category="letter">ㄝ</text>
 | 
			
		||||
    <keysym keyval="60">less</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <text category="letter">ㄡ</text>
 | 
			
		||||
    <keysym keyval="62">greater</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <text category="letter">ㄥ</text>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
							
								
								
									
										707
									
								
								data/keyboards/us-qwerty.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										707
									
								
								data/keyboards/us-qwerty.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,707 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<keyboard version="0.90">
 | 
			
		||||
    <bounds>0.000000,0.000000,410.000000,190.000000</bounds>
 | 
			
		||||
    <section name="Alpha">
 | 
			
		||||
        <bounds>10.000000,50.000000,390.000000,129.000000</bounds>
 | 
			
		||||
        <angle>0</angle>
 | 
			
		||||
        <row>
 | 
			
		||||
            <columns>14</columns>
 | 
			
		||||
            <orientation>1</orientation>
 | 
			
		||||
        </row>
 | 
			
		||||
        <row>
 | 
			
		||||
            <columns>14</columns>
 | 
			
		||||
            <orientation>1</orientation>
 | 
			
		||||
        </row>
 | 
			
		||||
        <row>
 | 
			
		||||
            <columns>13</columns>
 | 
			
		||||
            <orientation>1</orientation>
 | 
			
		||||
        </row>
 | 
			
		||||
        <row>
 | 
			
		||||
            <columns>12</columns>
 | 
			
		||||
            <orientation>1</orientation>
 | 
			
		||||
        </row>
 | 
			
		||||
        <row>
 | 
			
		||||
            <columns>8</columns>
 | 
			
		||||
            <orientation>1</orientation>
 | 
			
		||||
        </row>
 | 
			
		||||
        <key id="keycode105" name="RCTL" column="7" row="4">
 | 
			
		||||
            <bounds>359.000000,104.000000,31.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline10</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65508">Control_R</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode135" name="MENU" column="6" row="4">
 | 
			
		||||
            <bounds>326.000000,104.000000,31.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline10</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65383">Menu</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode134" name="RWIN" column="5" row="4">
 | 
			
		||||
            <bounds>294.000000,104.000000,31.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline10</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65516">Super_R</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode108" name="RALT" column="4" row="4">
 | 
			
		||||
            <bounds>261.000000,104.000000,31.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline10</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65027">ISO_Level3_Shift</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode65" name="SPCE" column="3" row="4">
 | 
			
		||||
            <bounds>106.000000,104.000000,153.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline11</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="32">space</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode64" name="LALT" column="2" row="4">
 | 
			
		||||
            <bounds>73.000000,104.000000,31.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline10</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65513">Alt_L</keysym>
 | 
			
		||||
                <keysym keyval="65511">Meta_L</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode133" name="LWIN" column="1" row="4">
 | 
			
		||||
            <bounds>40.000000,104.000000,31.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline10</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65515">Super_L</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode37" name="LCTL" column="0" row="4">
 | 
			
		||||
            <bounds>2.000000,104.000000,36.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline9</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65507">Control_L</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode62" name="RTSH" column="11" row="3">
 | 
			
		||||
            <bounds>320.000000,78.000000,70.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline8</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65506">Shift_R</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode61" name="AB10" column="10" row="3">
 | 
			
		||||
            <bounds>294.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="47">slash</keysym>
 | 
			
		||||
                <keysym keyval="63">question</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode60" name="AB09" column="9" row="3">
 | 
			
		||||
            <bounds>268.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="46">period</keysym>
 | 
			
		||||
                <keysym keyval="62">greater</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode59" name="AB08" column="8" row="3">
 | 
			
		||||
            <bounds>242.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="44">comma</keysym>
 | 
			
		||||
                <keysym keyval="60">less</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode58" name="AB07" column="7" row="3">
 | 
			
		||||
            <bounds>216.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="109">m</keysym>
 | 
			
		||||
                <keysym keyval="77">M</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode57" name="AB06" column="6" row="3">
 | 
			
		||||
            <bounds>190.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="110">n</keysym>
 | 
			
		||||
                <keysym keyval="78">N</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode56" name="AB05" column="5" row="3">
 | 
			
		||||
            <bounds>164.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="98">b</keysym>
 | 
			
		||||
                <keysym keyval="66">B</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode55" name="AB04" column="4" row="3">
 | 
			
		||||
            <bounds>138.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="118">v</keysym>
 | 
			
		||||
                <keysym keyval="86">V</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode54" name="AB03" column="3" row="3">
 | 
			
		||||
            <bounds>113.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="99">c</keysym>
 | 
			
		||||
                <keysym keyval="67">C</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode53" name="AB02" column="2" row="3">
 | 
			
		||||
            <bounds>87.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="120">x</keysym>
 | 
			
		||||
                <keysym keyval="88">X</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode52" name="AB01" column="1" row="3">
 | 
			
		||||
            <bounds>61.000000,78.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="122">z</keysym>
 | 
			
		||||
                <keysym keyval="90">Z</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode50" name="LFSH" column="0" row="3">
 | 
			
		||||
            <bounds>2.000000,78.000000,57.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline7</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65505">Shift_L</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode36" name="RTRN" column="12" row="2">
 | 
			
		||||
            <bounds>333.000000,53.000000,57.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline6</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65293">Return</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode48" name="AC11" column="11" row="2">
 | 
			
		||||
            <bounds>307.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
                <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode47" name="AC10" column="10" row="2">
 | 
			
		||||
            <bounds>281.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="59">semicolon</keysym>
 | 
			
		||||
                <keysym keyval="58">colon</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode46" name="AC09" column="9" row="2">
 | 
			
		||||
            <bounds>256.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="108">l</keysym>
 | 
			
		||||
                <keysym keyval="76">L</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode45" name="AC08" column="8" row="2">
 | 
			
		||||
            <bounds>230.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="107">k</keysym>
 | 
			
		||||
                <keysym keyval="75">K</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode44" name="AC07" column="7" row="2">
 | 
			
		||||
            <bounds>204.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="106">j</keysym>
 | 
			
		||||
                <keysym keyval="74">J</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode43" name="AC06" column="6" row="2">
 | 
			
		||||
            <bounds>178.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="104">h</keysym>
 | 
			
		||||
                <keysym keyval="72">H</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode42" name="AC05" column="5" row="2">
 | 
			
		||||
            <bounds>152.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="103">g</keysym>
 | 
			
		||||
                <keysym keyval="71">G</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode41" name="AC04" column="4" row="2">
 | 
			
		||||
            <bounds>126.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="102">f</keysym>
 | 
			
		||||
                <keysym keyval="70">F</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode40" name="AC03" column="3" row="2">
 | 
			
		||||
            <bounds>100.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="100">d</keysym>
 | 
			
		||||
                <keysym keyval="68">D</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode39" name="AC02" column="2" row="2">
 | 
			
		||||
            <bounds>74.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="115">s</keysym>
 | 
			
		||||
                <keysym keyval="83">S</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode38" name="AC01" column="1" row="2">
 | 
			
		||||
            <bounds>49.000000,53.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="97">a</keysym>
 | 
			
		||||
                <keysym keyval="65">A</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode66" name="CAPS" column="0" row="2">
 | 
			
		||||
            <bounds>2.000000,53.000000,44.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline5</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65507">Control_L</keysym>
 | 
			
		||||
                <keysym keyval="65507">Control_L</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode51" name="BKSL" column="13" row="1">
 | 
			
		||||
            <bounds>352.000000,27.000000,38.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline4</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="92">backslash</keysym>
 | 
			
		||||
                <keysym keyval="124">bar</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode35" name="AD12" column="12" row="1">
 | 
			
		||||
            <bounds>326.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="93">bracketright</keysym>
 | 
			
		||||
                <keysym keyval="125">braceright</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode34" name="AD11" column="11" row="1">
 | 
			
		||||
            <bounds>300.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="91">bracketleft</keysym>
 | 
			
		||||
                <keysym keyval="123">braceleft</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode33" name="AD10" column="10" row="1">
 | 
			
		||||
            <bounds>275.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="112">p</keysym>
 | 
			
		||||
                <keysym keyval="80">P</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode32" name="AD09" column="9" row="1">
 | 
			
		||||
            <bounds>249.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="111">o</keysym>
 | 
			
		||||
                <keysym keyval="79">O</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode31" name="AD08" column="8" row="1">
 | 
			
		||||
            <bounds>223.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="105">i</keysym>
 | 
			
		||||
                <keysym keyval="73">I</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode30" name="AD07" column="7" row="1">
 | 
			
		||||
            <bounds>197.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="117">u</keysym>
 | 
			
		||||
                <keysym keyval="85">U</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode29" name="AD06" column="6" row="1">
 | 
			
		||||
            <bounds>171.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="121">y</keysym>
 | 
			
		||||
                <keysym keyval="89">Y</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode28" name="AD05" column="5" row="1">
 | 
			
		||||
            <bounds>145.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="116">t</keysym>
 | 
			
		||||
                <keysym keyval="84">T</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode27" name="AD04" column="4" row="1">
 | 
			
		||||
            <bounds>119.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="114">r</keysym>
 | 
			
		||||
                <keysym keyval="82">R</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode26" name="AD03" column="3" row="1">
 | 
			
		||||
            <bounds>93.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="101">e</keysym>
 | 
			
		||||
                <keysym keyval="69">E</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode25" name="AD02" column="2" row="1">
 | 
			
		||||
            <bounds>68.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="119">w</keysym>
 | 
			
		||||
                <keysym keyval="87">W</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode24" name="AD01" column="1" row="1">
 | 
			
		||||
            <bounds>42.000000,27.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="113">q</keysym>
 | 
			
		||||
                <keysym keyval="81">Q</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode23" name="TAB" column="0" row="1">
 | 
			
		||||
            <bounds>2.000000,27.000000,38.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline3</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65289">Tab</keysym>
 | 
			
		||||
                <keysym keyval="65056">ISO_Left_Tab</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode22" name="BKSP" column="13" row="0">
 | 
			
		||||
            <bounds>339.000000,1.000000,51.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline2</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65288">BackSpace</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode21" name="AE12" column="12" row="0">
 | 
			
		||||
            <bounds>313.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="61">equal</keysym>
 | 
			
		||||
                <keysym keyval="43">plus</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode20" name="AE11" column="11" row="0">
 | 
			
		||||
            <bounds>287.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="45">minus</keysym>
 | 
			
		||||
                <keysym keyval="95">underscore</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode19" name="AE10" column="10" row="0">
 | 
			
		||||
            <bounds>261.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="48">0</keysym>
 | 
			
		||||
                <keysym keyval="41">parenright</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode18" name="AE09" column="9" row="0">
 | 
			
		||||
            <bounds>235.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="57">9</keysym>
 | 
			
		||||
                <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode17" name="AE08" column="8" row="0">
 | 
			
		||||
            <bounds>209.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="56">8</keysym>
 | 
			
		||||
                <keysym keyval="42">asterisk</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode16" name="AE07" column="7" row="0">
 | 
			
		||||
            <bounds>183.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="55">7</keysym>
 | 
			
		||||
                <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode15" name="AE06" column="6" row="0">
 | 
			
		||||
            <bounds>157.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="54">6</keysym>
 | 
			
		||||
                <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode14" name="AE05" column="5" row="0">
 | 
			
		||||
            <bounds>132.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="53">5</keysym>
 | 
			
		||||
                <keysym keyval="37">percent</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode13" name="AE04" column="4" row="0">
 | 
			
		||||
            <bounds>106.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="52">4</keysym>
 | 
			
		||||
                <keysym keyval="36">dollar</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode12" name="AE03" column="3" row="0">
 | 
			
		||||
            <bounds>80.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="51">3</keysym>
 | 
			
		||||
                <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode11" name="AE02" column="2" row="0">
 | 
			
		||||
            <bounds>54.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="50">2</keysym>
 | 
			
		||||
                <keysym keyval="64">at</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode10" name="AE01" column="1" row="0">
 | 
			
		||||
            <bounds>28.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="49">1</keysym>
 | 
			
		||||
                <keysym keyval="33">exclam</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode49" name="TLDE" column="0" row="0">
 | 
			
		||||
            <bounds>2.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
                <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
    </section>
 | 
			
		||||
    <section name="Function">
 | 
			
		||||
        <bounds>10.000000,10.000000,410.000000,25.000000</bounds>
 | 
			
		||||
        <angle>0</angle>
 | 
			
		||||
        <row>
 | 
			
		||||
            <columns>16</columns>
 | 
			
		||||
            <orientation>1</orientation>
 | 
			
		||||
        </row>
 | 
			
		||||
        <key id="keycode96" name="FK12" column="12" row="0">
 | 
			
		||||
            <bounds>366.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65481">F12</keysym>
 | 
			
		||||
                <keysym keyval="269024780">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode95" name="FK11" column="11" row="0">
 | 
			
		||||
            <bounds>340.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65480">F11</keysym>
 | 
			
		||||
                <keysym keyval="269024779">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode76" name="FK10" column="10" row="0">
 | 
			
		||||
            <bounds>314.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65479">F10</keysym>
 | 
			
		||||
                <keysym keyval="269024778">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode75" name="FK09" column="9" row="0">
 | 
			
		||||
            <bounds>288.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65478">F9</keysym>
 | 
			
		||||
                <keysym keyval="269024777">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode74" name="FK08" column="8" row="0">
 | 
			
		||||
            <bounds>249.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65477">F8</keysym>
 | 
			
		||||
                <keysym keyval="269024776">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode73" name="FK07" column="7" row="0">
 | 
			
		||||
            <bounds>223.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65476">F7</keysym>
 | 
			
		||||
                <keysym keyval="269024775">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode72" name="FK06" column="6" row="0">
 | 
			
		||||
            <bounds>197.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65475">F6</keysym>
 | 
			
		||||
                <keysym keyval="269024774">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode71" name="FK05" column="5" row="0">
 | 
			
		||||
            <bounds>171.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65474">F5</keysym>
 | 
			
		||||
                <keysym keyval="269024773">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode70" name="FK04" column="4" row="0">
 | 
			
		||||
            <bounds>132.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65473">F4</keysym>
 | 
			
		||||
                <keysym keyval="269024772">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode69" name="FK03" column="3" row="0">
 | 
			
		||||
            <bounds>106.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65472">F3</keysym>
 | 
			
		||||
                <keysym keyval="269024771">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode68" name="FK02" column="2" row="0">
 | 
			
		||||
            <bounds>80.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65471">F2</keysym>
 | 
			
		||||
                <keysym keyval="269024770">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode67" name="FK01" column="1" row="0">
 | 
			
		||||
            <bounds>54.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="2">
 | 
			
		||||
                <keysym keyval="65470">F1</keysym>
 | 
			
		||||
                <keysym keyval="269024769">(null)</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
        <key id="keycode9" name="ESC" column="0" row="0">
 | 
			
		||||
            <bounds>2.000000,1.000000,24.000000,24.000000</bounds>
 | 
			
		||||
            <oref>outline1</oref>
 | 
			
		||||
            <symbols groups="1" levels="1">
 | 
			
		||||
                <keysym keyval="65307">Escape</keysym>
 | 
			
		||||
            </symbols>
 | 
			
		||||
        </key>
 | 
			
		||||
    </section>
 | 
			
		||||
    <outline id="outline1">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>24.000000,0.000000</point>
 | 
			
		||||
        <point>24.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline3">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>38.000000,0.000000</point>
 | 
			
		||||
        <point>38.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline4">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>38.000000,0.000000</point>
 | 
			
		||||
        <point>38.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline5">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>44.000000,0.000000</point>
 | 
			
		||||
        <point>44.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline6">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>57.000000,0.000000</point>
 | 
			
		||||
        <point>57.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline7">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>57.000000,0.000000</point>
 | 
			
		||||
        <point>57.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline8">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>70.000000,0.000000</point>
 | 
			
		||||
        <point>70.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline9">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>36.000000,0.000000</point>
 | 
			
		||||
        <point>36.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline10">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>31.000000,0.000000</point>
 | 
			
		||||
        <point>31.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline11">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>153.000000,0.000000</point>
 | 
			
		||||
        <point>153.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline12">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>24.000000,0.000000</point>
 | 
			
		||||
        <point>24.000000,50.000000</point>
 | 
			
		||||
        <point>0.000000,50.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline13">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>50.000000,0.000000</point>
 | 
			
		||||
        <point>50.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
    <outline id="outline2">
 | 
			
		||||
        <corner-radius>1.000000</corner-radius>
 | 
			
		||||
        <point>0.000000,0.000000</point>
 | 
			
		||||
        <point>51.000000,0.000000</point>
 | 
			
		||||
        <point>51.000000,24.000000</point>
 | 
			
		||||
        <point>0.000000,24.000000</point>
 | 
			
		||||
    </outline>
 | 
			
		||||
</keyboard>
 | 
			
		||||
@ -1,60 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<schemalist>
 | 
			
		||||
  <schema id="org.fedorahosted.eekboard" path="/org/fedorahosted/eekboard/">
 | 
			
		||||
    <key name="keyboards" type="as">
 | 
			
		||||
      <default>['us']</default>
 | 
			
		||||
      <summary>Keyboard types</summary>
 | 
			
		||||
      <description>keyboard types.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="focus-listener" type="s">
 | 
			
		||||
      <default>'atspi'</default>
 | 
			
		||||
      <summary>Use the given focus listener</summary>
 | 
			
		||||
      <description>The name of the focus listener (either 'atspi' or 'ibus') used to detect focus events.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="auto-hide" type="b">
 | 
			
		||||
      <default>true</default>
 | 
			
		||||
      <summary>Hide keyboard automatically when focus is out</summary>
 | 
			
		||||
      <description>If true, hide keyboard automatically when focus is out.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="auto-hide-delay" type="u">
 | 
			
		||||
      <default>500</default>
 | 
			
		||||
      <summary>Delay before hiding keyboard</summary>
 | 
			
		||||
      <description>Delay before hiding keyboard in milliseconds.  This is useful when focus listener is enabled.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key type="b" name="repeat">
 | 
			
		||||
      <default>true</default>
 | 
			
		||||
      <summary>Key repeat</summary>
 | 
			
		||||
      <description>Generate key-press/release event repeatedly while a key is held down</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key type="u" name="repeat-interval">
 | 
			
		||||
      <default>100</default>
 | 
			
		||||
      <summary>Key repeat interval</summary>
 | 
			
		||||
      <description>Delay between repeats in milliseconds.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key type="u" name="repeat-delay">
 | 
			
		||||
      <default>1000</default>
 | 
			
		||||
      <summary>Initial key repeat delay</summary>
 | 
			
		||||
      <description>Initial key repeat delay in milliseconds.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="start-fullscreen" type="b">
 | 
			
		||||
      <default>false</default>
 | 
			
		||||
      <summary>Switch to fullscreen mode when startup</summary>
 | 
			
		||||
      <description>If true, switch to fullscreen mode when startup.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="size-constraint-landscape" type="(dd)">
 | 
			
		||||
      <default>(1.0, 0.3)</default>
 | 
			
		||||
      <summary>Constraint of the maximum window size on landscape screen</summary>
 | 
			
		||||
      <description>Constraint of maximum window size on landscape screen</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="size-constraint-portrait" type="(dd)">
 | 
			
		||||
      <default>(1.0, 0.5)</default>
 | 
			
		||||
      <summary>Constraint of the maximum window size on portrait screen</summary>
 | 
			
		||||
      <description>Constraint of maximum window size on portrait screen</description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="theme" type="s">
 | 
			
		||||
      <default>'default'</default>
 | 
			
		||||
      <summary>Theme</summary>
 | 
			
		||||
      <description>Base name of the theme to apply.</description>
 | 
			
		||||
    </key>
 | 
			
		||||
  </schema>
 | 
			
		||||
</schemalist>
 | 
			
		||||
@ -47,7 +47,7 @@ SCANGOBJ_OPTIONS=
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-scan.
 | 
			
		||||
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
 | 
			
		||||
SCAN_OPTIONS=--rebuild-types --deprecated-guards="EEK_DISABLE_DEPRECATED"
 | 
			
		||||
SCAN_OPTIONS=--rebuild-types
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-mkdb.
 | 
			
		||||
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
 | 
			
		||||
@ -79,10 +79,13 @@ EXTRA_HFILES=
 | 
			
		||||
IGNORE_HFILES = \
 | 
			
		||||
	config.h \
 | 
			
		||||
	eek-renderer.h \
 | 
			
		||||
	eek-gtk-renderer.h \
 | 
			
		||||
	eek-theme.h \
 | 
			
		||||
	eek-theme-node.h \
 | 
			
		||||
	eek-enumtypes.h
 | 
			
		||||
	eek-clutter-renderer.h \
 | 
			
		||||
	eek-clutter-section.h \
 | 
			
		||||
	eek-clutter-key.h \
 | 
			
		||||
	eek-gtk-renderer.h
 | 
			
		||||
if !ENABLE_CLUTTER
 | 
			
		||||
IGNORE_HFILES += eek-clutter-keyboard.h eek-clutter.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Images to copy into HTML directory.
 | 
			
		||||
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
 | 
			
		||||
@ -105,10 +108,17 @@ expand_content_files=eek-overview.xml
 | 
			
		||||
GTKDOC_CFLAGS = $(GIO2_CFLAGS)
 | 
			
		||||
GTKDOC_LIBS = $(top_builddir)/eek/libeek.la \
 | 
			
		||||
	$(top_builddir)/eek/libeek-gtk.la \
 | 
			
		||||
	$(top_builddir)/eek/libeek-xkb.la \
 | 
			
		||||
	$(top_builddir)/eek/libeek-xkl.la \
 | 
			
		||||
	$(GIO2_LIBS) \
 | 
			
		||||
	$(GTK_LIBS) \
 | 
			
		||||
	$(LIBXKLAVIER_LIBS)
 | 
			
		||||
	$(XKB_LIBS)
 | 
			
		||||
 | 
			
		||||
if ENABLE_CLUTTER
 | 
			
		||||
GTKDOC_LIBS += \
 | 
			
		||||
	$(top_builddir)/eek/libeek-clutter.la \
 | 
			
		||||
	$(CLUTTER_LIBS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
 | 
			
		||||
include $(top_srcdir)/gtk-doc.make
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,6 @@
 | 
			
		||||
    <title>API Manual</title>
 | 
			
		||||
    <chapter>
 | 
			
		||||
      <title>Base Classes, Interfaces, and Utilities</title>
 | 
			
		||||
      <xi:include href="xml/eek.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-serializable.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-element.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-container.xml"/>
 | 
			
		||||
@ -46,17 +45,16 @@
 | 
			
		||||
      <xi:include href="xml/eek-key.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-symbol.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-keysym.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-text.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-layout.xml"/>
 | 
			
		||||
      <xi:include href="xml/eek-types.xml"/>
 | 
			
		||||
    </chapter>
 | 
			
		||||
    <chapter>
 | 
			
		||||
      <title>GTK Adapter</title>
 | 
			
		||||
      <xi:include href="xml/eek-gtk-keyboard.xml"/>
 | 
			
		||||
      <title>Clutter Keyboard</title>
 | 
			
		||||
      <xi:include href="xml/eek-clutter-keyboard.xml"/>
 | 
			
		||||
    </chapter>
 | 
			
		||||
    <chapter>
 | 
			
		||||
      <title>Clutter Adapter</title>
 | 
			
		||||
      <xi:include href="xml/eek-clutter-keyboard.xml"/>
 | 
			
		||||
      <title>GTK Keyboard</title>
 | 
			
		||||
      <xi:include href="xml/eek-gtk-keyboard.xml"/>
 | 
			
		||||
    </chapter>
 | 
			
		||||
    <chapter>
 | 
			
		||||
      <title>Libxklavier Layout Engine</title>
 | 
			
		||||
 | 
			
		||||
@ -1,138 +1,49 @@
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek</FILE>
 | 
			
		||||
eek_init
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-clutter</FILE>
 | 
			
		||||
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-clutter-key</FILE>
 | 
			
		||||
<TITLE>EekClutterKey</TITLE>
 | 
			
		||||
EekClutterKey
 | 
			
		||||
EekClutterKeyClass
 | 
			
		||||
eek_clutter_key_new
 | 
			
		||||
<FILE>eek-keyboard</FILE>
 | 
			
		||||
<TITLE>EekKeyboard</TITLE>
 | 
			
		||||
EekKeyboardClass
 | 
			
		||||
EekKeyboardPrivate
 | 
			
		||||
EekKeyboard
 | 
			
		||||
eek_keyboard_new
 | 
			
		||||
eek_keyboard_get_layout
 | 
			
		||||
eek_keyboard_get_size
 | 
			
		||||
eek_keyboard_set_size
 | 
			
		||||
eek_keyboard_set_symbol_index
 | 
			
		||||
eek_keyboard_get_symbol_index
 | 
			
		||||
eek_keyboard_set_group
 | 
			
		||||
eek_keyboard_set_level
 | 
			
		||||
eek_keyboard_get_group
 | 
			
		||||
eek_keyboard_get_level
 | 
			
		||||
eek_keyboard_set_modifier_behavior
 | 
			
		||||
eek_keyboard_get_modifier_behavior
 | 
			
		||||
eek_keyboard_get_modifiers
 | 
			
		||||
eek_keyboard_create_section
 | 
			
		||||
eek_keyboard_find_key_by_keycode
 | 
			
		||||
eek_keyboard_add_outline
 | 
			
		||||
eek_keyboard_get_outline
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_CLUTTER_KEY
 | 
			
		||||
EEK_CLUTTER_KEY_CLASS
 | 
			
		||||
EEK_CLUTTER_KEY_GET_CLASS
 | 
			
		||||
EEK_IS_CLUTTER_KEY
 | 
			
		||||
EEK_IS_CLUTTER_KEY_CLASS
 | 
			
		||||
EEK_TYPE_CLUTTER_KEY
 | 
			
		||||
EekClutterKeyPrivate
 | 
			
		||||
eek_clutter_key_get_type
 | 
			
		||||
EEK_KEYBOARD
 | 
			
		||||
EEK_IS_KEYBOARD
 | 
			
		||||
EEK_TYPE_KEYBOARD
 | 
			
		||||
eek_keyboard_get_type
 | 
			
		||||
EEK_KEYBOARD_CLASS
 | 
			
		||||
EEK_IS_KEYBOARD_CLASS
 | 
			
		||||
EEK_KEYBOARD_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-clutter-keyboard</FILE>
 | 
			
		||||
<TITLE>EekClutterKeyboard</TITLE>
 | 
			
		||||
EekClutterKeyboard
 | 
			
		||||
EekClutterKeyboardClass
 | 
			
		||||
eek_clutter_keyboard_new
 | 
			
		||||
eek_clutter_keyboard_set_theme
 | 
			
		||||
<FILE>eek-layout</FILE>
 | 
			
		||||
<TITLE>EekLayout</TITLE>
 | 
			
		||||
EekLayoutClass
 | 
			
		||||
EekLayout
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_CLUTTER_KEYBOARD
 | 
			
		||||
EEK_CLUTTER_KEYBOARD_CLASS
 | 
			
		||||
EEK_CLUTTER_KEYBOARD_GET_CLASS
 | 
			
		||||
EEK_IS_CLUTTER_KEYBOARD
 | 
			
		||||
EEK_IS_CLUTTER_KEYBOARD_CLASS
 | 
			
		||||
EEK_TYPE_CLUTTER_KEYBOARD
 | 
			
		||||
EekClutterKeyboardPrivate
 | 
			
		||||
eek_clutter_keyboard_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-clutter-renderer</FILE>
 | 
			
		||||
<TITLE>EekClutterRenderer</TITLE>
 | 
			
		||||
EekClutterRenderer
 | 
			
		||||
EekClutterRendererClass
 | 
			
		||||
eek_clutter_renderer_new
 | 
			
		||||
eek_clutter_renderer_render_key
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_CLUTTER_RENDERER
 | 
			
		||||
EEK_CLUTTER_RENDERER_CLASS
 | 
			
		||||
EEK_CLUTTER_RENDERER_GET_CLASS
 | 
			
		||||
EEK_IS_CLUTTER_RENDERER
 | 
			
		||||
EEK_IS_CLUTTER_RENDERER_CLASS
 | 
			
		||||
EEK_TYPE_CLUTTER_RENDERER
 | 
			
		||||
EekClutterRendererPrivate
 | 
			
		||||
eek_clutter_renderer_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-clutter-section</FILE>
 | 
			
		||||
<TITLE>EekClutterSection</TITLE>
 | 
			
		||||
EekClutterSection
 | 
			
		||||
EekClutterSectionClass
 | 
			
		||||
eek_clutter_section_new
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_CLUTTER_SECTION
 | 
			
		||||
EEK_CLUTTER_SECTION_CLASS
 | 
			
		||||
EEK_CLUTTER_SECTION_GET_CLASS
 | 
			
		||||
EEK_IS_CLUTTER_SECTION
 | 
			
		||||
EEK_IS_CLUTTER_SECTION_CLASS
 | 
			
		||||
EEK_TYPE_CLUTTER_SECTION
 | 
			
		||||
EekClutterSectionPrivate
 | 
			
		||||
eek_clutter_section_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-container</FILE>
 | 
			
		||||
<TITLE>EekContainer</TITLE>
 | 
			
		||||
EekCallback
 | 
			
		||||
EekCompareFunc
 | 
			
		||||
EekContainer
 | 
			
		||||
EekContainerClass
 | 
			
		||||
eek_container_add_child
 | 
			
		||||
eek_container_find
 | 
			
		||||
eek_container_foreach_child
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_CONTAINER
 | 
			
		||||
EEK_CONTAINER_CLASS
 | 
			
		||||
EEK_CONTAINER_GET_CLASS
 | 
			
		||||
EEK_IS_CONTAINER
 | 
			
		||||
EEK_IS_CONTAINER_CLASS
 | 
			
		||||
EEK_TYPE_CONTAINER
 | 
			
		||||
EekContainerPrivate
 | 
			
		||||
eek_container_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-element</FILE>
 | 
			
		||||
<TITLE>EekElement</TITLE>
 | 
			
		||||
EekElement
 | 
			
		||||
EekElementClass
 | 
			
		||||
eek_element_get_absolute_position
 | 
			
		||||
eek_element_get_bounds
 | 
			
		||||
eek_element_get_group
 | 
			
		||||
eek_element_get_level
 | 
			
		||||
eek_element_get_name
 | 
			
		||||
eek_element_get_parent
 | 
			
		||||
eek_element_get_symbol_index
 | 
			
		||||
eek_element_set_bounds
 | 
			
		||||
eek_element_set_group
 | 
			
		||||
eek_element_set_level
 | 
			
		||||
eek_element_set_name
 | 
			
		||||
eek_element_set_parent
 | 
			
		||||
eek_element_set_position
 | 
			
		||||
eek_element_set_size
 | 
			
		||||
eek_element_set_symbol_index
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_ELEMENT
 | 
			
		||||
EEK_ELEMENT_CLASS
 | 
			
		||||
EEK_ELEMENT_GET_CLASS
 | 
			
		||||
EEK_IS_ELEMENT
 | 
			
		||||
EEK_IS_ELEMENT_CLASS
 | 
			
		||||
EEK_TYPE_ELEMENT
 | 
			
		||||
EekElementPrivate
 | 
			
		||||
eek_element_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-gtk</FILE>
 | 
			
		||||
 | 
			
		||||
EEK_LAYOUT
 | 
			
		||||
EEK_IS_LAYOUT
 | 
			
		||||
EEK_TYPE_LAYOUT
 | 
			
		||||
eek_layout_get_type
 | 
			
		||||
EEK_LAYOUT_CLASS
 | 
			
		||||
EEK_IS_LAYOUT_CLASS
 | 
			
		||||
EEK_LAYOUT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
@ -140,351 +51,89 @@ eek_element_get_type
 | 
			
		||||
<TITLE>EekGtkKeyboard</TITLE>
 | 
			
		||||
EekGtkKeyboard
 | 
			
		||||
EekGtkKeyboardClass
 | 
			
		||||
EekGtkKeyboardPrivate
 | 
			
		||||
eek_gtk_keyboard_new
 | 
			
		||||
eek_gtk_keyboard_set_theme
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_GTK_KEYBOARD
 | 
			
		||||
EEK_GTK_KEYBOARD_CLASS
 | 
			
		||||
EEK_GTK_KEYBOARD_GET_CLASS
 | 
			
		||||
EEK_IS_GTK_KEYBOARD
 | 
			
		||||
EEK_IS_GTK_KEYBOARD_CLASS
 | 
			
		||||
EEK_TYPE_GTK_KEYBOARD
 | 
			
		||||
EekGtkKeyboardPrivate
 | 
			
		||||
eek_gtk_keyboard_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-key</FILE>
 | 
			
		||||
<TITLE>EekKey</TITLE>
 | 
			
		||||
EekKey
 | 
			
		||||
EekKeyClass
 | 
			
		||||
eek_key_get_index
 | 
			
		||||
eek_key_get_keycode
 | 
			
		||||
eek_key_get_oref
 | 
			
		||||
eek_key_get_symbol
 | 
			
		||||
eek_key_get_symbol_at_index
 | 
			
		||||
eek_key_get_symbol_matrix
 | 
			
		||||
eek_key_get_symbol_with_fallback
 | 
			
		||||
eek_key_is_locked
 | 
			
		||||
eek_key_is_pressed
 | 
			
		||||
eek_key_set_index
 | 
			
		||||
eek_key_set_keycode
 | 
			
		||||
eek_key_set_oref
 | 
			
		||||
eek_key_set_symbol_matrix
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_KEY
 | 
			
		||||
EEK_IS_KEY_CLASS
 | 
			
		||||
EEK_KEY
 | 
			
		||||
EEK_KEY_CLASS
 | 
			
		||||
EEK_KEY_GET_CLASS
 | 
			
		||||
EEK_TYPE_KEY
 | 
			
		||||
EekKeyPrivate
 | 
			
		||||
eek_key_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-keyboard</FILE>
 | 
			
		||||
<TITLE>EekKeyboard</TITLE>
 | 
			
		||||
EekKeyboard
 | 
			
		||||
EekKeyboardClass
 | 
			
		||||
EekModifierKey
 | 
			
		||||
eek_keyboard_add_outline
 | 
			
		||||
eek_keyboard_create_section
 | 
			
		||||
eek_keyboard_find_key_by_keycode
 | 
			
		||||
eek_keyboard_get_alt_gr_mask
 | 
			
		||||
eek_keyboard_get_group
 | 
			
		||||
eek_keyboard_get_layout
 | 
			
		||||
eek_keyboard_get_level
 | 
			
		||||
eek_keyboard_get_locked_keys
 | 
			
		||||
eek_keyboard_get_modifier_behavior
 | 
			
		||||
eek_keyboard_get_modifiers
 | 
			
		||||
eek_keyboard_get_num_lock_mask
 | 
			
		||||
eek_keyboard_get_outline
 | 
			
		||||
eek_keyboard_get_pressed_keys
 | 
			
		||||
eek_keyboard_get_size
 | 
			
		||||
eek_keyboard_get_symbol_index
 | 
			
		||||
eek_keyboard_new
 | 
			
		||||
eek_keyboard_set_alt_gr_mask
 | 
			
		||||
eek_keyboard_set_group
 | 
			
		||||
eek_keyboard_set_level
 | 
			
		||||
eek_keyboard_set_modifier_behavior
 | 
			
		||||
eek_keyboard_set_modifiers
 | 
			
		||||
eek_keyboard_set_num_lock_mask
 | 
			
		||||
eek_keyboard_set_size
 | 
			
		||||
eek_keyboard_set_symbol_index
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_KEYBOARD
 | 
			
		||||
EEK_IS_KEYBOARD_CLASS
 | 
			
		||||
EEK_KEYBOARD
 | 
			
		||||
EEK_KEYBOARD_CLASS
 | 
			
		||||
EEK_KEYBOARD_GET_CLASS
 | 
			
		||||
EEK_TYPE_KEYBOARD
 | 
			
		||||
EekKeyboardPrivate
 | 
			
		||||
eek_keyboard_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-keysym</FILE>
 | 
			
		||||
<TITLE>EekKeysym</TITLE>
 | 
			
		||||
EekKeysym
 | 
			
		||||
EekKeysymClass
 | 
			
		||||
eek_keysym_get_xkeysym
 | 
			
		||||
eek_keysym_new
 | 
			
		||||
eek_keysym_new_from_name
 | 
			
		||||
eek_keysym_new_with_modifier
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_INVALID_KEYSYM
 | 
			
		||||
EEK_IS_KEYSYM
 | 
			
		||||
EEK_IS_KEYSYM_CLASS
 | 
			
		||||
EEK_KEYSYM
 | 
			
		||||
EEK_KEYSYM_CLASS
 | 
			
		||||
EEK_KEYSYM_GET_CLASS
 | 
			
		||||
EEK_TYPE_KEYSYM
 | 
			
		||||
EekKeysymPrivate
 | 
			
		||||
eek_keysym_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-layout</FILE>
 | 
			
		||||
<TITLE>EekLayout</TITLE>
 | 
			
		||||
EekLayout
 | 
			
		||||
EekLayoutClass
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_LAYOUT
 | 
			
		||||
EEK_IS_LAYOUT_CLASS
 | 
			
		||||
EEK_LAYOUT
 | 
			
		||||
EEK_LAYOUT_CLASS
 | 
			
		||||
EEK_LAYOUT_GET_CLASS
 | 
			
		||||
EEK_TYPE_LAYOUT
 | 
			
		||||
eek_layout_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-marshalers</FILE>
 | 
			
		||||
 | 
			
		||||
EEK_GTK_KEYBOARD_CLASS
 | 
			
		||||
EEK_IS_GTK_KEYBOARD_CLASS
 | 
			
		||||
EEK_GTK_KEYBOARD_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-section</FILE>
 | 
			
		||||
<TITLE>EekSection</TITLE>
 | 
			
		||||
EekSection
 | 
			
		||||
EekSectionClass
 | 
			
		||||
eek_section_add_row
 | 
			
		||||
eek_section_create_key
 | 
			
		||||
eek_section_find_key_by_keycode
 | 
			
		||||
EekSectionPrivate
 | 
			
		||||
EekSection
 | 
			
		||||
eek_section_set_angle
 | 
			
		||||
eek_section_get_angle
 | 
			
		||||
eek_section_get_n_rows
 | 
			
		||||
eek_section_add_row
 | 
			
		||||
eek_section_get_row
 | 
			
		||||
eek_section_set_angle
 | 
			
		||||
eek_section_create_key
 | 
			
		||||
eek_section_find_key_by_keycode
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_SECTION
 | 
			
		||||
EEK_IS_SECTION_CLASS
 | 
			
		||||
EEK_SECTION
 | 
			
		||||
EEK_SECTION_CLASS
 | 
			
		||||
EEK_SECTION_GET_CLASS
 | 
			
		||||
EEK_IS_SECTION
 | 
			
		||||
EEK_TYPE_SECTION
 | 
			
		||||
EekSectionPrivate
 | 
			
		||||
eek_section_get_type
 | 
			
		||||
EEK_SECTION_CLASS
 | 
			
		||||
EEK_IS_SECTION_CLASS
 | 
			
		||||
EEK_SECTION_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-serializable</FILE>
 | 
			
		||||
<TITLE>EekSerializable</TITLE>
 | 
			
		||||
EekSerializableIface
 | 
			
		||||
eek_serializable_deserialize
 | 
			
		||||
eek_serializable_serialize
 | 
			
		||||
<FILE>eek-container</FILE>
 | 
			
		||||
<TITLE>EekContainer</TITLE>
 | 
			
		||||
EekContainerClass
 | 
			
		||||
EekContainerPrivate
 | 
			
		||||
EekCallback
 | 
			
		||||
EekCompareFunc
 | 
			
		||||
EekContainer
 | 
			
		||||
eek_container_foreach_child
 | 
			
		||||
eek_container_find
 | 
			
		||||
eek_container_add_child
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_SERIALIZABLE
 | 
			
		||||
EEK_SERIALIZABLE
 | 
			
		||||
EEK_SERIALIZABLE_GET_IFACE
 | 
			
		||||
EEK_TYPE_SERIALIZABLE
 | 
			
		||||
eek_serializable_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-special-keysym-entries</FILE>
 | 
			
		||||
 | 
			
		||||
EEK_CONTAINER
 | 
			
		||||
EEK_IS_CONTAINER
 | 
			
		||||
EEK_TYPE_CONTAINER
 | 
			
		||||
eek_container_get_type
 | 
			
		||||
EEK_CONTAINER_CLASS
 | 
			
		||||
EEK_IS_CONTAINER_CLASS
 | 
			
		||||
EEK_CONTAINER_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-symbol</FILE>
 | 
			
		||||
<TITLE>EekSymbol</TITLE>
 | 
			
		||||
EekSymbol
 | 
			
		||||
EekSymbolCategory
 | 
			
		||||
EekSymbolClass
 | 
			
		||||
eek_symbol_category_from_name
 | 
			
		||||
eek_symbol_category_get_name
 | 
			
		||||
eek_symbol_get_category
 | 
			
		||||
eek_symbol_get_icon_name
 | 
			
		||||
eek_symbol_get_label
 | 
			
		||||
eek_symbol_get_modifier_mask
 | 
			
		||||
eek_symbol_get_name
 | 
			
		||||
eek_symbol_is_modifier
 | 
			
		||||
eek_symbol_new
 | 
			
		||||
eek_symbol_set_category
 | 
			
		||||
eek_symbol_set_icon_name
 | 
			
		||||
eek_symbol_set_label
 | 
			
		||||
eek_symbol_set_modifier_mask
 | 
			
		||||
eek_symbol_set_name
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_SYMBOL
 | 
			
		||||
EEK_IS_SYMBOL_CLASS
 | 
			
		||||
EEK_SYMBOL
 | 
			
		||||
EEK_SYMBOL_CLASS
 | 
			
		||||
EEK_SYMBOL_GET_CLASS
 | 
			
		||||
EEK_TYPE_SYMBOL
 | 
			
		||||
EekSymbolPrivate
 | 
			
		||||
eek_symbol_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-symbol-matrix</FILE>
 | 
			
		||||
EekSymbolMatrix
 | 
			
		||||
eek_symbol_matrix_copy
 | 
			
		||||
eek_symbol_matrix_free
 | 
			
		||||
eek_symbol_matrix_get_symbol
 | 
			
		||||
eek_symbol_matrix_new
 | 
			
		||||
eek_symbol_matrix_set_symbol
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_TYPE_SYMBOL_MATRIX
 | 
			
		||||
eek_symbol_matrix_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-text</FILE>
 | 
			
		||||
<TITLE>EekText</TITLE>
 | 
			
		||||
EekText
 | 
			
		||||
EekTextClass
 | 
			
		||||
eek_text_get_text
 | 
			
		||||
eek_text_new
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_TEXT
 | 
			
		||||
EEK_IS_TEXT_CLASS
 | 
			
		||||
EEK_TEXT
 | 
			
		||||
EEK_TEXT_CLASS
 | 
			
		||||
EEK_TEXT_GET_CLASS
 | 
			
		||||
EEK_TYPE_TEXT
 | 
			
		||||
EekTextPrivate
 | 
			
		||||
eek_text_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-theme-context</FILE>
 | 
			
		||||
EekThemeContextClass
 | 
			
		||||
eek_theme_context_get_font
 | 
			
		||||
eek_theme_context_get_resolution
 | 
			
		||||
eek_theme_context_get_root_node
 | 
			
		||||
eek_theme_context_get_theme
 | 
			
		||||
eek_theme_context_new
 | 
			
		||||
eek_theme_context_set_default_resolution
 | 
			
		||||
eek_theme_context_set_font
 | 
			
		||||
eek_theme_context_set_resolution
 | 
			
		||||
eek_theme_context_set_theme
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_THEME_CONTEXT
 | 
			
		||||
EEK_IS_THEME_CONTEXT_CLASS
 | 
			
		||||
EEK_THEME_CONTEXT
 | 
			
		||||
EEK_THEME_CONTEXT_CLASS
 | 
			
		||||
EEK_THEME_CONTEXT_GET_CLASS
 | 
			
		||||
EEK_TYPE_THEME_CONTEXT
 | 
			
		||||
eek_theme_context_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-theme-private</FILE>
 | 
			
		||||
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-types</FILE>
 | 
			
		||||
EEK_INVALID_KEYCODE
 | 
			
		||||
EekBounds
 | 
			
		||||
EekColor
 | 
			
		||||
EekContainer
 | 
			
		||||
EekElement
 | 
			
		||||
EekGradientType
 | 
			
		||||
EekKey
 | 
			
		||||
EekKeyboard
 | 
			
		||||
EekKeysym
 | 
			
		||||
EekModifierBehavior
 | 
			
		||||
EekModifierType
 | 
			
		||||
EekOrientation
 | 
			
		||||
EekOutline
 | 
			
		||||
EekPoint
 | 
			
		||||
EekSection
 | 
			
		||||
EekSymbol
 | 
			
		||||
EekSymbolMatrix
 | 
			
		||||
EekText
 | 
			
		||||
EekTheme
 | 
			
		||||
EekThemeContext
 | 
			
		||||
EekThemeNode
 | 
			
		||||
I_
 | 
			
		||||
eek_bounds_copy
 | 
			
		||||
eek_bounds_free
 | 
			
		||||
eek_bounds_long_side
 | 
			
		||||
eek_color_copy
 | 
			
		||||
eek_color_free
 | 
			
		||||
eek_color_new
 | 
			
		||||
eek_outline_copy
 | 
			
		||||
eek_outline_free
 | 
			
		||||
eek_point_copy
 | 
			
		||||
eek_point_free
 | 
			
		||||
eek_point_rotate
 | 
			
		||||
eek_symbol_new
 | 
			
		||||
eek_symbol_set_name
 | 
			
		||||
eek_symbol_get_name
 | 
			
		||||
eek_symbol_set_label
 | 
			
		||||
eek_symbol_get_label
 | 
			
		||||
eek_symbol_set_category
 | 
			
		||||
eek_symbol_get_category
 | 
			
		||||
eek_symbol_get_modifier_mask
 | 
			
		||||
eek_symbol_set_modifier_mask
 | 
			
		||||
eek_symbol_is_modifier
 | 
			
		||||
eek_symbol_set_icon_name
 | 
			
		||||
eek_symbol_get_icon_name
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_TYPE_BOUNDS
 | 
			
		||||
EEK_TYPE_COLOR
 | 
			
		||||
EEK_TYPE_OUTLINE
 | 
			
		||||
EEK_TYPE_POINT
 | 
			
		||||
eek_bounds_get_type
 | 
			
		||||
eek_color_get_type
 | 
			
		||||
eek_outline_get_type
 | 
			
		||||
eek_point_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-unicode-keysym-entries</FILE>
 | 
			
		||||
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xkb</FILE>
 | 
			
		||||
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xkb-layout</FILE>
 | 
			
		||||
<TITLE>EekXkbLayout</TITLE>
 | 
			
		||||
EekXkbLayout
 | 
			
		||||
EekXkbLayoutClass
 | 
			
		||||
eek_xkb_layout_get_geometry
 | 
			
		||||
eek_xkb_layout_get_keycodes
 | 
			
		||||
eek_xkb_layout_get_symbols
 | 
			
		||||
eek_xkb_layout_new
 | 
			
		||||
eek_xkb_layout_set_geometry
 | 
			
		||||
eek_xkb_layout_set_keycodes
 | 
			
		||||
eek_xkb_layout_set_names
 | 
			
		||||
eek_xkb_layout_set_names_full
 | 
			
		||||
eek_xkb_layout_set_names_full_valist
 | 
			
		||||
eek_xkb_layout_set_symbols
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_XKB_LAYOUT
 | 
			
		||||
EEK_IS_XKB_LAYOUT_CLASS
 | 
			
		||||
EEK_TYPE_XKB_LAYOUT
 | 
			
		||||
EEK_XKB_LAYOUT
 | 
			
		||||
EEK_XKB_LAYOUT_CLASS
 | 
			
		||||
EEK_XKB_LAYOUT_GET_CLASS
 | 
			
		||||
EekXkbLayoutPrivate
 | 
			
		||||
eek_xkb_layout_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xkeysym-keysym-entries</FILE>
 | 
			
		||||
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xkl</FILE>
 | 
			
		||||
 | 
			
		||||
EEK_SYMBOL
 | 
			
		||||
EEK_IS_SYMBOL
 | 
			
		||||
EEK_TYPE_SYMBOL
 | 
			
		||||
eek_symbol_get_type
 | 
			
		||||
EEK_SYMBOL_CLASS
 | 
			
		||||
EEK_IS_SYMBOL_CLASS
 | 
			
		||||
EEK_SYMBOL_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
@ -492,29 +141,168 @@ eek_xkb_layout_get_type
 | 
			
		||||
<TITLE>EekXklLayout</TITLE>
 | 
			
		||||
EekXklLayout
 | 
			
		||||
EekXklLayoutClass
 | 
			
		||||
eek_xkl_layout_disable_option
 | 
			
		||||
eek_xkl_layout_enable_option
 | 
			
		||||
eek_xkl_layout_get_layouts
 | 
			
		||||
eek_xkl_layout_get_model
 | 
			
		||||
eek_xkl_layout_get_option
 | 
			
		||||
eek_xkl_layout_get_options
 | 
			
		||||
eek_xkl_layout_get_variants
 | 
			
		||||
EekXklLayoutPrivate
 | 
			
		||||
eek_xkl_layout_new
 | 
			
		||||
eek_xkl_layout_set_config
 | 
			
		||||
eek_xkl_layout_set_config_full
 | 
			
		||||
eek_xkl_layout_set_layouts
 | 
			
		||||
eek_xkl_layout_set_model
 | 
			
		||||
eek_xkl_layout_set_options
 | 
			
		||||
eek_xkl_layout_set_layouts
 | 
			
		||||
eek_xkl_layout_set_variants
 | 
			
		||||
eek_xkl_layout_set_options
 | 
			
		||||
eek_xkl_layout_enable_option
 | 
			
		||||
eek_xkl_layout_disable_option
 | 
			
		||||
eek_xkl_layout_get_model
 | 
			
		||||
eek_xkl_layout_get_layouts
 | 
			
		||||
eek_xkl_layout_get_variants
 | 
			
		||||
eek_xkl_layout_get_options
 | 
			
		||||
eek_xkl_layout_get_option
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_XKL_LAYOUT
 | 
			
		||||
EEK_IS_XKL_LAYOUT_CLASS
 | 
			
		||||
EEK_TYPE_XKL_LAYOUT
 | 
			
		||||
EEK_XKL_LAYOUT
 | 
			
		||||
EEK_XKL_LAYOUT_CLASS
 | 
			
		||||
EEK_XKL_LAYOUT_GET_CLASS
 | 
			
		||||
EekXklLayoutPrivate
 | 
			
		||||
EEK_IS_XKL_LAYOUT
 | 
			
		||||
EEK_TYPE_XKL_LAYOUT
 | 
			
		||||
eek_xkl_layout_get_type
 | 
			
		||||
EEK_XKL_LAYOUT_CLASS
 | 
			
		||||
EEK_IS_XKL_LAYOUT_CLASS
 | 
			
		||||
EEK_XKL_LAYOUT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xkb-layout</FILE>
 | 
			
		||||
<TITLE>EekXkbLayout</TITLE>
 | 
			
		||||
EekXkbLayout
 | 
			
		||||
EekXkbLayoutClass
 | 
			
		||||
EekXkbLayoutPrivate
 | 
			
		||||
eek_xkb_layout_new
 | 
			
		||||
eek_xkb_layout_set_names
 | 
			
		||||
eek_xkb_layout_set_names_full
 | 
			
		||||
eek_xkb_layout_set_names_full_valist
 | 
			
		||||
eek_xkb_layout_set_keycodes
 | 
			
		||||
eek_xkb_layout_set_geometry
 | 
			
		||||
eek_xkb_layout_set_symbols
 | 
			
		||||
eek_xkb_layout_get_keycodes
 | 
			
		||||
eek_xkb_layout_get_geometry
 | 
			
		||||
eek_xkb_layout_get_symbols
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_XKB_LAYOUT
 | 
			
		||||
EEK_IS_XKB_LAYOUT
 | 
			
		||||
EEK_TYPE_XKB_LAYOUT
 | 
			
		||||
eek_xkb_layout_get_type
 | 
			
		||||
EEK_XKB_LAYOUT_CLASS
 | 
			
		||||
EEK_IS_XKB_LAYOUT_CLASS
 | 
			
		||||
EEK_XKB_LAYOUT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-key</FILE>
 | 
			
		||||
<TITLE>EekKey</TITLE>
 | 
			
		||||
EekKeyClass
 | 
			
		||||
EekKeyPrivate
 | 
			
		||||
EekKey
 | 
			
		||||
eek_key_set_keycode
 | 
			
		||||
eek_key_get_keycode
 | 
			
		||||
eek_key_set_symbol_matrix
 | 
			
		||||
eek_key_get_symbol_matrix
 | 
			
		||||
eek_key_get_symbol
 | 
			
		||||
eek_key_get_symbol_with_fallback
 | 
			
		||||
eek_key_get_symbol_at_index
 | 
			
		||||
eek_key_set_index
 | 
			
		||||
eek_key_get_index
 | 
			
		||||
eek_key_set_oref
 | 
			
		||||
eek_key_get_oref
 | 
			
		||||
eek_key_is_pressed
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_KEY
 | 
			
		||||
EEK_IS_KEY
 | 
			
		||||
EEK_TYPE_KEY
 | 
			
		||||
eek_key_get_type
 | 
			
		||||
EEK_KEY_CLASS
 | 
			
		||||
EEK_IS_KEY_CLASS
 | 
			
		||||
EEK_KEY_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-serializable</FILE>
 | 
			
		||||
<TITLE>EekSerializable</TITLE>
 | 
			
		||||
EekSerializable
 | 
			
		||||
EekSerializableIface
 | 
			
		||||
eek_serializable_serialize
 | 
			
		||||
eek_serializable_deserialize
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_SERIALIZABLE
 | 
			
		||||
EEK_IS_SERIALIZABLE
 | 
			
		||||
EEK_TYPE_SERIALIZABLE
 | 
			
		||||
eek_serializable_get_type
 | 
			
		||||
EEK_SERIALIZABLE_GET_IFACE
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-element</FILE>
 | 
			
		||||
<TITLE>EekElement</TITLE>
 | 
			
		||||
EekElementClass
 | 
			
		||||
EekElementPrivate
 | 
			
		||||
EekElement
 | 
			
		||||
eek_element_set_parent
 | 
			
		||||
eek_element_get_parent
 | 
			
		||||
eek_element_set_name
 | 
			
		||||
eek_element_get_name
 | 
			
		||||
eek_element_set_bounds
 | 
			
		||||
eek_element_get_bounds
 | 
			
		||||
eek_element_set_position
 | 
			
		||||
eek_element_set_size
 | 
			
		||||
eek_element_get_absolute_position
 | 
			
		||||
eek_element_set_symbol_index
 | 
			
		||||
eek_element_get_symbol_index
 | 
			
		||||
eek_element_set_group
 | 
			
		||||
eek_element_set_level
 | 
			
		||||
eek_element_get_group
 | 
			
		||||
eek_element_get_level
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_ELEMENT
 | 
			
		||||
EEK_IS_ELEMENT
 | 
			
		||||
EEK_TYPE_ELEMENT
 | 
			
		||||
eek_element_get_type
 | 
			
		||||
EEK_ELEMENT_CLASS
 | 
			
		||||
EEK_IS_ELEMENT_CLASS
 | 
			
		||||
EEK_ELEMENT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xml-layout</FILE>
 | 
			
		||||
<TITLE>EekXmlLayout</TITLE>
 | 
			
		||||
EekXmlLayout
 | 
			
		||||
EekXmlLayoutClass
 | 
			
		||||
EekXmlLayoutPrivate
 | 
			
		||||
eek_xml_layout_new
 | 
			
		||||
eek_xml_layout_set_source
 | 
			
		||||
eek_xml_layout_get_source
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_XML_LAYOUT
 | 
			
		||||
EEK_IS_XML_LAYOUT
 | 
			
		||||
EEK_TYPE_XML_LAYOUT
 | 
			
		||||
eek_xml_layout_get_type
 | 
			
		||||
EEK_XML_LAYOUT_CLASS
 | 
			
		||||
EEK_IS_XML_LAYOUT_CLASS
 | 
			
		||||
EEK_XML_LAYOUT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-keysym</FILE>
 | 
			
		||||
<TITLE>EekKeysym</TITLE>
 | 
			
		||||
EEK_KEYSYM
 | 
			
		||||
EekKeysymClass
 | 
			
		||||
EekKeysymPrivate
 | 
			
		||||
EekKeysym
 | 
			
		||||
eek_keysym_new
 | 
			
		||||
eek_keysym_get_xkeysym
 | 
			
		||||
eek_keysym_new_from_name
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_INVALID_KEYSYM
 | 
			
		||||
EEK_IS_KEYSYM
 | 
			
		||||
EEK_TYPE_KEYSYM
 | 
			
		||||
eek_keysym_get_type
 | 
			
		||||
EEK_KEYSYM_CLASS
 | 
			
		||||
EEK_IS_KEYSYM_CLASS
 | 
			
		||||
EEK_KEYSYM_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
@ -524,21 +312,34 @@ eek_keyboard_output
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eek-xml-layout</FILE>
 | 
			
		||||
<TITLE>EekXmlLayout</TITLE>
 | 
			
		||||
EekXmlLayout
 | 
			
		||||
EekXmlLayoutClass
 | 
			
		||||
eek_xml_layout_get_source
 | 
			
		||||
eek_xml_layout_new
 | 
			
		||||
eek_xml_layout_set_source
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEK_IS_XML_LAYOUT
 | 
			
		||||
EEK_IS_XML_LAYOUT_CLASS
 | 
			
		||||
EEK_TYPE_XML_LAYOUT
 | 
			
		||||
EEK_XML_LAYOUT
 | 
			
		||||
EEK_XML_LAYOUT_CLASS
 | 
			
		||||
EEK_XML_LAYOUT_GET_CLASS
 | 
			
		||||
EekXmlLayoutPrivate
 | 
			
		||||
eek_xml_layout_get_type
 | 
			
		||||
<FILE>eek-types</FILE>
 | 
			
		||||
I_
 | 
			
		||||
EEK_TYPE_SYMBOL_MATRIX
 | 
			
		||||
EEK_TYPE_POINT
 | 
			
		||||
EEK_TYPE_BOUNDS
 | 
			
		||||
EEK_TYPE_OUTLINE
 | 
			
		||||
EEK_TYPE_COLOR
 | 
			
		||||
EekOrientation
 | 
			
		||||
EekModifierBehavior
 | 
			
		||||
EekModifierType
 | 
			
		||||
EEK_INVALID_KEYCODE
 | 
			
		||||
EekSymbolMatrix
 | 
			
		||||
EekPoint
 | 
			
		||||
EekBounds
 | 
			
		||||
EekOutline
 | 
			
		||||
EekColor
 | 
			
		||||
eek_symbol_matrix_get_type
 | 
			
		||||
eek_symbol_matrix_new
 | 
			
		||||
eek_symbol_matrix_copy
 | 
			
		||||
eek_symbol_matrix_free
 | 
			
		||||
eek_point_get_type
 | 
			
		||||
eek_point_rotate
 | 
			
		||||
eek_bounds_get_type
 | 
			
		||||
eek_bounds_long_side
 | 
			
		||||
eek_outline_get_type
 | 
			
		||||
eek_outline_copy
 | 
			
		||||
eek_outline_free
 | 
			
		||||
eek_color_get_type
 | 
			
		||||
eek_color_new
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -35,15 +35,10 @@
 | 
			
		||||
  <part id="apireference">
 | 
			
		||||
    <title>API Manual</title>
 | 
			
		||||
    <chapter>
 | 
			
		||||
      <title>Client interface to eekboard-server</title>
 | 
			
		||||
      <xi:include href="xml/eekboard-client.xml"/>
 | 
			
		||||
      <title>D-Bus client interface to eekboard-server</title>
 | 
			
		||||
      <xi:include href="xml/eekboard-eekboard.xml"/>
 | 
			
		||||
      <xi:include href="xml/eekboard-context.xml"/>
 | 
			
		||||
    </chapter>
 | 
			
		||||
    <chapter>
 | 
			
		||||
      <title>Server interface to implement custom eekboard-server</title>
 | 
			
		||||
      <xi:include href="xml/eekboard-service.xml"/>
 | 
			
		||||
      <xi:include href="xml/eekboard-context-service.xml"/>
 | 
			
		||||
    </chapter>
 | 
			
		||||
    <chapter id="object-tree">
 | 
			
		||||
      <title>Object Hierarchy</title>
 | 
			
		||||
      <xi:include href="xml/tree_index.sgml"/>
 | 
			
		||||
 | 
			
		||||
@ -1,41 +1,22 @@
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eekboard-client</FILE>
 | 
			
		||||
<TITLE>EekboardClient</TITLE>
 | 
			
		||||
EekboardClient
 | 
			
		||||
EekboardClientClass
 | 
			
		||||
eekboard_client_new
 | 
			
		||||
eekboard_client_create_context
 | 
			
		||||
eekboard_client_push_context
 | 
			
		||||
eekboard_client_pop_context
 | 
			
		||||
eekboard_client_destroy_context
 | 
			
		||||
EekboardClientPrivate
 | 
			
		||||
<FILE>eekboard-eekboard</FILE>
 | 
			
		||||
<TITLE>EekboardEekboard</TITLE>
 | 
			
		||||
EekboardEekboard
 | 
			
		||||
EekboardEekboardClass
 | 
			
		||||
EekboardEekboardPrivate
 | 
			
		||||
eekboard_eekboard_new
 | 
			
		||||
eekboard_eekboard_create_context
 | 
			
		||||
eekboard_eekboard_push_context
 | 
			
		||||
eekboard_eekboard_pop_context
 | 
			
		||||
eekboard_eekboard_destroy_context
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEKBOARD_CLIENT
 | 
			
		||||
EEKBOARD_IS_CLIENT
 | 
			
		||||
EEKBOARD_TYPE_CLIENT
 | 
			
		||||
eekboard_client_get_type
 | 
			
		||||
EEKBOARD_CLIENT_CLASS
 | 
			
		||||
EEKBOARD_IS_CLIENT_CLASS
 | 
			
		||||
EEKBOARD_CLIENT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eekboard-service</FILE>
 | 
			
		||||
<TITLE>EekboardService</TITLE>
 | 
			
		||||
EEKBOARD_SERVICE_PATH
 | 
			
		||||
EEKBOARD_SERVICE_INTERFACE
 | 
			
		||||
EekboardService
 | 
			
		||||
EekboardServiceClass
 | 
			
		||||
eekboard_service_new
 | 
			
		||||
EekboardServicePrivate
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEKBOARD_SERVICE
 | 
			
		||||
EEKBOARD_IS_SERVICE
 | 
			
		||||
EEKBOARD_TYPE_SERVICE
 | 
			
		||||
eekboard_service_get_type
 | 
			
		||||
EEKBOARD_SERVICE_CLASS
 | 
			
		||||
EEKBOARD_IS_SERVICE_CLASS
 | 
			
		||||
EEKBOARD_SERVICE_GET_CLASS
 | 
			
		||||
EEKBOARD_EEKBOARD
 | 
			
		||||
EEKBOARD_IS_EEKBOARD
 | 
			
		||||
EEKBOARD_TYPE_EEKBOARD
 | 
			
		||||
eekboard_eekboard_get_type
 | 
			
		||||
EEKBOARD_EEKBOARD_CLASS
 | 
			
		||||
EEKBOARD_IS_EEKBOARD_CLASS
 | 
			
		||||
EEKBOARD_EEKBOARD_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
@ -43,21 +24,17 @@ EEKBOARD_SERVICE_GET_CLASS
 | 
			
		||||
<TITLE>EekboardContext</TITLE>
 | 
			
		||||
EekboardContext
 | 
			
		||||
EekboardContextClass
 | 
			
		||||
EekboardContextPrivate
 | 
			
		||||
eekboard_context_new
 | 
			
		||||
eekboard_context_add_keyboard
 | 
			
		||||
eekboard_context_remove_keyboard
 | 
			
		||||
eekboard_context_set_keyboard
 | 
			
		||||
eekboard_context_show_keyboard
 | 
			
		||||
eekboard_context_hide_keyboard
 | 
			
		||||
eekboard_context_set_group
 | 
			
		||||
eekboard_context_get_group
 | 
			
		||||
eekboard_context_press_keycode
 | 
			
		||||
eekboard_context_release_keycode
 | 
			
		||||
eekboard_context_press_key
 | 
			
		||||
eekboard_context_release_key
 | 
			
		||||
eekboard_context_is_keyboard_visible
 | 
			
		||||
eekboard_context_set_enabled
 | 
			
		||||
eekboard_context_is_enabled
 | 
			
		||||
eekboard_context_set_fullscreen
 | 
			
		||||
EekboardContextPrivate
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEKBOARD_CONTEXT
 | 
			
		||||
EEKBOARD_IS_CONTEXT
 | 
			
		||||
@ -68,37 +45,3 @@ EEKBOARD_IS_CONTEXT_CLASS
 | 
			
		||||
EEKBOARD_CONTEXT_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eekboard-context-service</FILE>
 | 
			
		||||
<TITLE>EekboardContextService</TITLE>
 | 
			
		||||
EEKBOARD_CONTEXT_SERVICE_PATH
 | 
			
		||||
EEKBOARD_CONTEXT_SERVICE_INTERFACE
 | 
			
		||||
EekboardContextService
 | 
			
		||||
EekboardContextServiceClass
 | 
			
		||||
eekboard_context_service_enable
 | 
			
		||||
eekboard_context_service_disable
 | 
			
		||||
eekboard_context_service_get_keyboard
 | 
			
		||||
eekboard_context_service_get_fullscreen
 | 
			
		||||
eekboard_context_service_get_client_name
 | 
			
		||||
EekboardContextServicePrivate
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
EEKBOARD_CONTEXT_SERVICE
 | 
			
		||||
EEKBOARD_IS_CONTEXT_SERVICE
 | 
			
		||||
EEKBOARD_TYPE_CONTEXT_SERVICE
 | 
			
		||||
eekboard_context_service_get_type
 | 
			
		||||
EEKBOARD_CONTEXT_SERVICE_CLASS
 | 
			
		||||
EEKBOARD_IS_CONTEXT_SERVICE_CLASS
 | 
			
		||||
EEKBOARD_CONTEXT_SERVICE_GET_CLASS
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>eekboard-xklutil</FILE>
 | 
			
		||||
eekboard_xkl_config_rec_from_string
 | 
			
		||||
eekboard_xkl_config_rec_to_string
 | 
			
		||||
eekboard_xkl_list_models
 | 
			
		||||
eekboard_xkl_list_layouts
 | 
			
		||||
eekboard_xkl_list_option_groups
 | 
			
		||||
eekboard_xkl_list_layout_variants
 | 
			
		||||
eekboard_xkl_list_options
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,2 @@
 | 
			
		||||
eekboard_client_get_type
 | 
			
		||||
eekboard_context_get_type
 | 
			
		||||
eekboard_context_service_get_type
 | 
			
		||||
eekboard_service_get_type
 | 
			
		||||
eekboard_eekboard_get_type
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										129
									
								
								eek/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										129
									
								
								eek/Makefile.am
									
									
									
									
									
								
							@ -19,8 +19,13 @@
 | 
			
		||||
lib_LTLIBRARIES =				\
 | 
			
		||||
	libeek.la				\
 | 
			
		||||
	libeek-gtk.la				\
 | 
			
		||||
	libeek-xkb.la				\
 | 
			
		||||
	libeek-xkl.la
 | 
			
		||||
 | 
			
		||||
if ENABLE_CLUTTER
 | 
			
		||||
lib_LTLIBRARIES += libeek-clutter.la
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
libeek_public_headers =				\
 | 
			
		||||
	$(srcdir)/eek-layout.h			\
 | 
			
		||||
	$(srcdir)/eek-element.h			\
 | 
			
		||||
@ -30,7 +35,6 @@ libeek_public_headers =				\
 | 
			
		||||
	$(srcdir)/eek-key.h			\
 | 
			
		||||
	$(srcdir)/eek-symbol.h			\
 | 
			
		||||
	$(srcdir)/eek-keysym.h			\
 | 
			
		||||
	$(srcdir)/eek-text.h			\
 | 
			
		||||
	$(srcdir)/eek-symbol-matrix.h		\
 | 
			
		||||
	$(srcdir)/eek-types.h			\
 | 
			
		||||
	$(srcdir)/eek-xml.h			\
 | 
			
		||||
@ -50,7 +54,6 @@ libeek_private_headers =			\
 | 
			
		||||
	$(srcdir)/eek-theme-node.h
 | 
			
		||||
 | 
			
		||||
libeek_sources =				\
 | 
			
		||||
	$(srcdir)/eek.c				\
 | 
			
		||||
	$(srcdir)/eek-layout.c			\
 | 
			
		||||
	$(srcdir)/eek-element.c			\
 | 
			
		||||
	$(srcdir)/eek-container.c		\
 | 
			
		||||
@ -60,7 +63,6 @@ libeek_sources =				\
 | 
			
		||||
	$(srcdir)/eek-symbol-matrix.c		\
 | 
			
		||||
	$(srcdir)/eek-symbol.c			\
 | 
			
		||||
	$(srcdir)/eek-keysym.c			\
 | 
			
		||||
	$(srcdir)/eek-text.c			\
 | 
			
		||||
	$(srcdir)/eek-types.c			\
 | 
			
		||||
	$(srcdir)/eek-serializable.c		\
 | 
			
		||||
	$(srcdir)/eek-xml.c			\
 | 
			
		||||
@ -86,28 +88,35 @@ libeek_marshalers_sources =			\
 | 
			
		||||
 | 
			
		||||
BUILT_SOURCES =					\
 | 
			
		||||
	$(libeek_keysym_sources)		\
 | 
			
		||||
	$(libeek_enumtypes_sources)		\
 | 
			
		||||
	$(libeek_marshalers_sources)
 | 
			
		||||
 | 
			
		||||
libeek_la_SOURCES =				\
 | 
			
		||||
	$(libeek_sources)			\
 | 
			
		||||
	$(srcdir)/eek-enumtypes.c		\
 | 
			
		||||
	$(srcdir)/eek-marshalers.c
 | 
			
		||||
 | 
			
		||||
libeek_la_CFLAGS =					\
 | 
			
		||||
	-DEEK_COMPILATION=1				\
 | 
			
		||||
	-DKEYBOARDSDIR=\"$(pkgdatadir)/keyboards\"	\
 | 
			
		||||
	$(GIO2_CFLAGS)					\
 | 
			
		||||
	$(PANGOCAIRO_CFLAGS)				\
 | 
			
		||||
	$(LIBCROCO_CFLAGS)				\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
libeek_la_CFLAGS = $(GIO2_CFLAGS) $(PANGOCAIRO_CFLAGS) $(LIBCROCO_CFLAGS)
 | 
			
		||||
libeek_la_LIBADD = $(GIO2_LIBS) $(PANGOCAIRO_LIBS) $(LIBCROCO_LIBS) -lm
 | 
			
		||||
 | 
			
		||||
libeek_la_LIBADD =				\
 | 
			
		||||
	$(GIO2_LIBS)				\
 | 
			
		||||
	$(PANGOCAIRO_LIBS)			\
 | 
			
		||||
	$(LIBCROCO_LIBS)			\
 | 
			
		||||
	-lm					\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
if ENABLE_CLUTTER
 | 
			
		||||
libeek_clutter_public_headers =			\
 | 
			
		||||
	$(srcdir)/eek-clutter-keyboard.h	\
 | 
			
		||||
	$(srcdir)/eek-clutter.h
 | 
			
		||||
 | 
			
		||||
libeek_clutter_private_headers =		\
 | 
			
		||||
	$(srcdir)/eek-clutter-section.h		\
 | 
			
		||||
	$(srcdir)/eek-clutter-key.h		\
 | 
			
		||||
	$(srcdir)/eek-clutter-renderer.h
 | 
			
		||||
 | 
			
		||||
libeek_clutter_sources =			\
 | 
			
		||||
	$(srcdir)/eek-clutter-keyboard.c	\
 | 
			
		||||
	$(srcdir)/eek-clutter-section.c		\
 | 
			
		||||
	$(srcdir)/eek-clutter-key.c		\
 | 
			
		||||
	$(srcdir)/eek-clutter-renderer.c
 | 
			
		||||
 | 
			
		||||
libeek_clutter_la_SOURCES = $(libeek_clutter_sources)
 | 
			
		||||
libeek_clutter_la_CFLAGS = $(CLUTTER_CFLAGS)
 | 
			
		||||
libeek_clutter_la_LIBADD = libeek.la $(CLUTTER_LIBS)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
libeek_gtk_public_headers =			\
 | 
			
		||||
	$(srcdir)/eek-gtk-keyboard.h		\
 | 
			
		||||
@ -119,54 +128,52 @@ libeek_gtk_sources =				\
 | 
			
		||||
	$(srcdir)/eek-gtk-renderer.c
 | 
			
		||||
 | 
			
		||||
libeek_gtk_la_SOURCES = $(libeek_gtk_sources)
 | 
			
		||||
libeek_gtk_la_CFLAGS = -DEEK_COMPILATION=1 $(GTK_CFLAGS) $(LIBCANBERRA_CFLAGS)
 | 
			
		||||
libeek_gtk_la_LIBADD = libeek.la $(GTK_LIBS) $(LIBCANBERRA_LIBS)
 | 
			
		||||
libeek_gtk_la_CFLAGS = $(GTK_CFLAGS)
 | 
			
		||||
libeek_gtk_la_LIBADD = libeek.la $(GTK_LIBS)
 | 
			
		||||
 | 
			
		||||
libeek_xkl_public_headers =			\
 | 
			
		||||
	$(srcdir)/eek-xkl-layout.h		\
 | 
			
		||||
	$(srcdir)/eek-xkl.h			\
 | 
			
		||||
libeek_xkb_public_headers =			\
 | 
			
		||||
	$(srcdir)/eek-xkb-layout.h		\
 | 
			
		||||
	$(srcdir)/eek-xkb.h
 | 
			
		||||
 | 
			
		||||
libeek_xkb_sources =				\
 | 
			
		||||
	$(srcdir)/eek-xkb-layout.c
 | 
			
		||||
 | 
			
		||||
libeek_xkb_la_SOURCES = $(libeek_xkb_sources)
 | 
			
		||||
libeek_xkb_la_CFLAGS = $(XKB_CFLAGS) $(GTK_CFLAGS)
 | 
			
		||||
libeek_xkb_la_LIBADD = libeek.la $(XKB_LIBS) $(GTK_LIBS)
 | 
			
		||||
 | 
			
		||||
libeek_xkl_public_headers =			\
 | 
			
		||||
	$(srcdir)/eek-xkl-layout.h		\
 | 
			
		||||
	$(srcdir)/eek-xkl.h
 | 
			
		||||
 | 
			
		||||
libeek_xkl_sources =				\
 | 
			
		||||
	$(srcdir)/eek-xkb-layout.c		\
 | 
			
		||||
	$(srcdir)/eek-xkl-layout.c
 | 
			
		||||
 | 
			
		||||
libeek_xkl_la_SOURCES = $(libeek_xkl_sources)
 | 
			
		||||
libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS)
 | 
			
		||||
libeek_xkl_la_LIBADD = libeek.la $(LIBXKLAVIER_LIBS)
 | 
			
		||||
libeek_xkl_la_CFLAGS = $(LIBXKLAVIER_CFLAGS) $(GTK_CFLAGS)
 | 
			
		||||
libeek_xkl_la_LIBADD = libeek-xkb.la $(LIBXKLAVIER_LIBS) $(GTK_LIBS)
 | 
			
		||||
 | 
			
		||||
eekdir = $(includedir)/eek-$(EEK_API_VERSION)/eek
 | 
			
		||||
eek_HEADERS =					\
 | 
			
		||||
	$(libeek_public_headers)		\
 | 
			
		||||
	$(srcdir)/eek-enumtypes.h		\
 | 
			
		||||
	$(libeek_clutter_public_headers)	\
 | 
			
		||||
	$(libeek_gtk_public_headers)		\
 | 
			
		||||
	$(libeek_xkb_public_headers)		\
 | 
			
		||||
	$(libeek_xkl_public_headers)
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS =				\
 | 
			
		||||
	$(libeek_private_headers)		\
 | 
			
		||||
	$(libeek_clutter_private_headers)	\
 | 
			
		||||
	$(libeek_gtk_private_headers)		\
 | 
			
		||||
	$(libeek_xkb_private_headers)		\
 | 
			
		||||
	$(libeek_xkl_private_headers)
 | 
			
		||||
 | 
			
		||||
eek-special-keysym-entries.h: special-keysym-entries.txt
 | 
			
		||||
	$(AM_V_GEN) $(PYTHON) ./gen-keysym-entries.py special_keysym_entries \
 | 
			
		||||
		< $< > $@
 | 
			
		||||
	$(PYTHON) ./gen-keysym-entries.py special_keysym_entries < $< > $@
 | 
			
		||||
eek-unicode-keysym-entries.h: unicode-keysym-entries.txt
 | 
			
		||||
	$(AM_V_GEN) $(PYTHON) ./gen-keysym-entries.py unicode_keysym_entries \
 | 
			
		||||
		< $< > $@
 | 
			
		||||
	$(PYTHON) ./gen-keysym-entries.py unicode_keysym_entries < $< > $@
 | 
			
		||||
eek-xkeysym-keysym-entries.h: xkeysym-keysym-entries.txt
 | 
			
		||||
	$(AM_V_GEN) $(PYTHON) ./gen-keysym-entries.py xkeysym_keysym_entries \
 | 
			
		||||
		< $< > $@
 | 
			
		||||
 | 
			
		||||
eek-enumtypes.h: $(libeek_public_headers) eek-enumtypes.h.template
 | 
			
		||||
	$(AM_V_GEN) $(GLIB_MKENUMS) --template eek-enumtypes.h.template \
 | 
			
		||||
		$(libeek_public_headers) > eek-enumtypes.h.tmp && \
 | 
			
		||||
		mv eek-enumtypes.h.tmp eek-enumtypes.h
 | 
			
		||||
 | 
			
		||||
eek-enumtypes.c: $(libeek_public_headers) eek-enumtypes.c.template
 | 
			
		||||
	$(AM_V_GEN) $(GLIB_MKENUMS) --template eek-enumtypes.c.template \
 | 
			
		||||
		$(libeek_public_headers) > eek-enumtypes.c.tmp && \
 | 
			
		||||
		mv eek-enumtypes.c.tmp eek-enumtypes.c
 | 
			
		||||
	$(PYTHON) ./gen-keysym-entries.py xkeysym_keysym_entries < $< > $@
 | 
			
		||||
 | 
			
		||||
# gen marshal
 | 
			
		||||
eek-marshalers.h: eek-marshalers.list
 | 
			
		||||
@ -182,8 +189,13 @@ pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA =				\
 | 
			
		||||
	eek-$(EEK_API_VERSION).pc		\
 | 
			
		||||
	eek-gtk-$(EEK_API_VERSION).pc		\
 | 
			
		||||
	eek-xkb-$(EEK_API_VERSION).pc		\
 | 
			
		||||
	eek-xkl-$(EEK_API_VERSION).pc
 | 
			
		||||
 | 
			
		||||
if ENABLE_CLUTTER
 | 
			
		||||
pkgconfig_DATA += eek-clutter-$(EEK_API_VERSION).pc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CLEANFILES =
 | 
			
		||||
 | 
			
		||||
DISTCLEANFILES =				\
 | 
			
		||||
@ -195,8 +207,6 @@ EXTRA_DIST =					\
 | 
			
		||||
	special-keysym-entries.txt		\
 | 
			
		||||
	unicode-keysym-entries.txt		\
 | 
			
		||||
	xkeysym-keysym-entries.txt		\
 | 
			
		||||
	eek-enumtypes.h.template		\
 | 
			
		||||
	eek-enumtypes.c.template		\
 | 
			
		||||
	eek-marshalers.list
 | 
			
		||||
 | 
			
		||||
-include $(INTROSPECTION_MAKEFILE)
 | 
			
		||||
@ -207,21 +217,34 @@ INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
 | 
			
		||||
if HAVE_INTROSPECTION
 | 
			
		||||
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX@.gir: libeek.la
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --strip-prefix=Eek --pkg=glib-2.0 --pkg-export=eek-$(EEK_API_VERSION)
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --strip-prefix=Eek --pkg=glib-2.0
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GLib-2.0 GObject-2.0 Gio-2.0
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_la_CFLAGS)
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek.la
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers) $(srcdir)/eek-enumtypes.h
 | 
			
		||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers)
 | 
			
		||||
 | 
			
		||||
EekGtk@EEK_LIBRARY_SUFFIX@.gir: libeek-gtk.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --pkg-export=eek-gtk-$(EEK_API_VERSION)
 | 
			
		||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Gtk-@GTK_API_VERSION@ Eek@EEK_LIBRARY_SUFFIX@
 | 
			
		||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_gtk_la_CFLAGS)
 | 
			
		||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-gtk.la
 | 
			
		||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_gtk_sources) $(libeek_gtk_public_headers)
 | 
			
		||||
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX@.gir: libeek-xkl.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Eek@EEK_LIBRARY_SUFFIX@
 | 
			
		||||
if ENABLE_CLUTTER
 | 
			
		||||
EekClutter@EEK_LIBRARY_SUFFIX@.gir: libeek-clutter.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
EekClutter@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Clutter-1.0 Eek@EEK_LIBRARY_SUFFIX@
 | 
			
		||||
EekClutter@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_clutter_la_CFLAGS)
 | 
			
		||||
EekClutter@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-clutter.la
 | 
			
		||||
EekClutter@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_clutter_sources) $(libeek_clutter_public_headers)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
EekXkb@EEK_LIBRARY_SUFFIX@.gir: libeek-xkb.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
EekXkb@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Eek@EEK_LIBRARY_SUFFIX@
 | 
			
		||||
EekXkb@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_xkb_la_CFLAGS)
 | 
			
		||||
EekXkb@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-xkb.la
 | 
			
		||||
EekXkb@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_xkb_sources) $(libeek_xkb_public_headers)
 | 
			
		||||
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX@.gir: libeek-xkl.la EekXkb@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 EekXkb@EEK_LIBRARY_SUFFIX@
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_xkl_la_CFLAGS)
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-xkl.la
 | 
			
		||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_xkl_sources) $(libeek_xkl_public_headers)
 | 
			
		||||
@ -229,8 +252,14 @@ EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_xkl_sources) $(libeek_xkl_publ
 | 
			
		||||
INTROSPECTION_GIRS +=				\
 | 
			
		||||
	Eek@EEK_LIBRARY_SUFFIX@.gir		\
 | 
			
		||||
	EekGtk@EEK_LIBRARY_SUFFIX@.gir		\
 | 
			
		||||
	EekXkb@EEK_LIBRARY_SUFFIX@.gir		\
 | 
			
		||||
	EekXkl@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
 | 
			
		||||
if ENABLE_CLUTTER
 | 
			
		||||
INTROSPECTION_GIRS +=				\
 | 
			
		||||
	EekClutter@EEK_LIBRARY_SUFFIX@.gir
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
girdir = $(datadir)/gir-1.0
 | 
			
		||||
gir_DATA = $(INTROSPECTION_GIRS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,8 +23,8 @@ includedir=@includedir@
 | 
			
		||||
 | 
			
		||||
Name: EEK
 | 
			
		||||
Description: A Library to Create Keyboard-like UI
 | 
			
		||||
URL: http://fedorahosted.org/eekboard/
 | 
			
		||||
URL: http://ueno.github.com/eekboard/
 | 
			
		||||
Version: @VERSION@
 | 
			
		||||
Requires: gobject-2.0 gio-2.0
 | 
			
		||||
Requires: gobject-2.0
 | 
			
		||||
Libs: -L${libdir} -leek
 | 
			
		||||
Cflags: -I${includedir}/eek-@EEK_API_VERSION@
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								eek/eek-clutter-0.90.pc.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								eek/eek-clutter-0.90.pc.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
# Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
# Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 | 
			
		||||
# 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
# 02110-1301 USA
 | 
			
		||||
 | 
			
		||||
prefix=@prefix@
 | 
			
		||||
exec_prefix=@exec_prefix@
 | 
			
		||||
libdir=@libdir@
 | 
			
		||||
includedir=@includedir@
 | 
			
		||||
 | 
			
		||||
Name: libeek-clutter
 | 
			
		||||
Description: A Library to Create Keyboard-like UI (Clutter Support)
 | 
			
		||||
URL: http://ueno.github.com/eekboard/
 | 
			
		||||
Version: @VERSION@
 | 
			
		||||
Requires: eek-@EEK_API_VERSION@ clutter-1.0
 | 
			
		||||
Libs: -L${libdir} -leek-clutter
 | 
			
		||||
Cflags: -I${includedir}/eek-@EEK_API_VERSION@
 | 
			
		||||
							
								
								
									
										307
									
								
								eek/eek-clutter-key.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								eek/eek-clutter-key.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,307 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
#include "eek-clutter-key.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
    PROP_KEY,
 | 
			
		||||
    PROP_RENDERER,
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekClutterKey, eek_clutter_key, CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
#define EEK_CLUTTER_KEY_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CLUTTER_KEY, EekClutterKeyPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekClutterKeyPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekKey *key;
 | 
			
		||||
    EekClutterRenderer *renderer;
 | 
			
		||||
    gulong pressed_handler;
 | 
			
		||||
    gulong released_handler;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_pressed (EekKey *key, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    ClutterActor *actor = user_data, *parent;
 | 
			
		||||
 | 
			
		||||
    parent = clutter_actor_get_parent (actor);
 | 
			
		||||
    clutter_actor_raise_top (parent);
 | 
			
		||||
    clutter_actor_raise_top (actor);
 | 
			
		||||
    clutter_actor_set_scale_with_gravity (actor,
 | 
			
		||||
                                          1.0,
 | 
			
		||||
                                          1.0,
 | 
			
		||||
                                          CLUTTER_GRAVITY_CENTER);
 | 
			
		||||
 | 
			
		||||
    clutter_actor_animate (actor, CLUTTER_EASE_IN_SINE, 150,
 | 
			
		||||
                           "scale-x", 1.5,
 | 
			
		||||
                           "scale-y", 1.5,
 | 
			
		||||
                           NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_released (EekKey *key, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    ClutterActor *actor = user_data, *parent;
 | 
			
		||||
 | 
			
		||||
    parent = clutter_actor_get_parent (actor);
 | 
			
		||||
    clutter_actor_raise_top (parent);
 | 
			
		||||
    clutter_actor_raise_top (actor);
 | 
			
		||||
    clutter_actor_set_scale_with_gravity (actor,
 | 
			
		||||
                                          1.5,
 | 
			
		||||
                                          1.5,
 | 
			
		||||
                                          CLUTTER_GRAVITY_CENTER);
 | 
			
		||||
    clutter_actor_animate (actor, CLUTTER_EASE_OUT_SINE, 150,
 | 
			
		||||
                           "scale-x", 1.0,
 | 
			
		||||
                           "scale-y", 1.0,
 | 
			
		||||
                           NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_position (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->key), &bounds);
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    clutter_actor_set_position (self, bounds.x * scale, bounds.y * scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_real_realize (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    set_position (self);
 | 
			
		||||
    clutter_actor_set_reactive (self, TRUE);
 | 
			
		||||
 | 
			
		||||
    priv->pressed_handler =
 | 
			
		||||
        g_signal_connect (priv->key, "pressed",
 | 
			
		||||
                          G_CALLBACK(on_pressed), self);
 | 
			
		||||
    priv->released_handler =
 | 
			
		||||
        g_signal_connect (priv->key, "released",
 | 
			
		||||
                          G_CALLBACK(on_released), self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_real_paint (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    set_position (self);
 | 
			
		||||
    eek_clutter_renderer_render_key (priv->renderer, self, priv->key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_real_get_preferred_width (ClutterActor *self,
 | 
			
		||||
                                          gfloat        for_height,
 | 
			
		||||
                                          gfloat       *min_width_p,
 | 
			
		||||
                                          gfloat       *natural_width_p)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->key), &bounds);
 | 
			
		||||
    *min_width_p = 0.0f;
 | 
			
		||||
    *natural_width_p = bounds.width * scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_real_get_preferred_height (ClutterActor *self,
 | 
			
		||||
                                           gfloat        for_width,
 | 
			
		||||
                                           gfloat       *min_height_p,
 | 
			
		||||
                                           gfloat       *natural_height_p)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->key), &bounds);
 | 
			
		||||
    *min_height_p = 0.0f;
 | 
			
		||||
    *natural_height_p = bounds.height * scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_real_allocate (ClutterActor          *self,
 | 
			
		||||
                               const ClutterActorBox *box,
 | 
			
		||||
                               ClutterAllocationFlags flags)
 | 
			
		||||
{
 | 
			
		||||
    CLUTTER_ACTOR_CLASS (eek_clutter_key_parent_class)->
 | 
			
		||||
        allocate (self, box, flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
eek_clutter_key_real_button_press_event (ClutterActor       *self,
 | 
			
		||||
                                         ClutterButtonEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    g_signal_emit_by_name (priv->key, "pressed");
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
eek_clutter_key_real_button_release_event (ClutterActor       *self,
 | 
			
		||||
                                           ClutterButtonEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    g_signal_emit_by_name (priv->key, "released");
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
eek_clutter_key_real_leave_event (ClutterActor         *self,
 | 
			
		||||
                                  ClutterCrossingEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (eek_key_is_pressed (priv->key))
 | 
			
		||||
        g_signal_emit_by_name (priv->key, "released");
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_set_property (GObject      *object,
 | 
			
		||||
                                  guint         prop_id,
 | 
			
		||||
                                  const GValue *value,
 | 
			
		||||
                                  GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(object);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEY:
 | 
			
		||||
        priv->key = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->key);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_RENDERER:
 | 
			
		||||
        priv->renderer = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->renderer);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        g_object_set_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(object);
 | 
			
		||||
 | 
			
		||||
    if (priv->renderer) {
 | 
			
		||||
        g_object_unref (priv->renderer);
 | 
			
		||||
        priv->renderer = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (priv->key) {
 | 
			
		||||
        if (g_signal_handler_is_connected (priv->key, priv->pressed_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->key, priv->pressed_handler);
 | 
			
		||||
        if (g_signal_handler_is_connected (priv->key, priv->released_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->key, priv->released_handler);
 | 
			
		||||
        g_object_unref (priv->key);
 | 
			
		||||
        priv->key = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    G_OBJECT_CLASS (eek_clutter_key_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_class_init (EekClutterKeyClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekClutterKeyPrivate));
 | 
			
		||||
 | 
			
		||||
    actor_class->realize = eek_clutter_key_real_realize;
 | 
			
		||||
    actor_class->paint = eek_clutter_key_real_paint;
 | 
			
		||||
    actor_class->get_preferred_width =
 | 
			
		||||
        eek_clutter_key_real_get_preferred_width;
 | 
			
		||||
    actor_class->get_preferred_height =
 | 
			
		||||
        eek_clutter_key_real_get_preferred_height;
 | 
			
		||||
    actor_class->allocate = eek_clutter_key_real_allocate;
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
    actor_class->button_press_event =
 | 
			
		||||
        eek_clutter_key_real_button_press_event;
 | 
			
		||||
    actor_class->button_release_event =
 | 
			
		||||
        eek_clutter_key_real_button_release_event;
 | 
			
		||||
    actor_class->leave_event =
 | 
			
		||||
        eek_clutter_key_real_leave_event;
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_clutter_key_set_property;
 | 
			
		||||
    gobject_class->dispose = eek_clutter_key_dispose;
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("key",
 | 
			
		||||
                                 "Key",
 | 
			
		||||
                                 "Key",
 | 
			
		||||
                                 EEK_TYPE_KEY,
 | 
			
		||||
                                 G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_KEY,
 | 
			
		||||
                                     pspec);
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("renderer",
 | 
			
		||||
                                 "Renderer",
 | 
			
		||||
                                 "Renderer",
 | 
			
		||||
                                 EEK_TYPE_RENDERER,
 | 
			
		||||
                                 G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_RENDERER,
 | 
			
		||||
                                     pspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_key_init (EekClutterKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyPrivate *priv;
 | 
			
		||||
    priv = self->priv = EEK_CLUTTER_KEY_GET_PRIVATE (self);
 | 
			
		||||
    priv->key = NULL;
 | 
			
		||||
    priv->renderer = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ClutterActor *
 | 
			
		||||
eek_clutter_key_new (EekKey *key, EekClutterRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
    return g_object_new (EEK_TYPE_CLUTTER_KEY,
 | 
			
		||||
                         "key", key,
 | 
			
		||||
                         "renderer", renderer,
 | 
			
		||||
                         NULL);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								eek/eek-clutter-key.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								eek/eek-clutter-key.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
#ifndef EEK_CLUTTER_KEY_H
 | 
			
		||||
#define EEK_CLUTTER_KEY_H 1
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
#include "eek-key.h"
 | 
			
		||||
#include "eek-clutter-renderer.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
#define EEK_TYPE_CLUTTER_KEY (eek_clutter_key_get_type())
 | 
			
		||||
#define EEK_CLUTTER_KEY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CLUTTER_KEY, EekClutterKey))
 | 
			
		||||
#define EEK_CLUTTER_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_CLUTTER_KEY, EekClutterKeyClass))
 | 
			
		||||
#define EEK_IS_CLUTTER_KEY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_CLUTTER_KEY))
 | 
			
		||||
#define EEK_IS_CLUTTER_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_CLUTTER_KEY))
 | 
			
		||||
#define EEK_CLUTTER_KEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_CLUTTER_KEY, EekClutterKeyClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _EekClutterKey        EekClutterKey;
 | 
			
		||||
typedef struct _EekClutterKeyClass   EekClutterKeyClass;
 | 
			
		||||
typedef struct _EekClutterKeyPrivate EekClutterKeyPrivate;
 | 
			
		||||
 | 
			
		||||
struct _EekClutterKey
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    ClutterActor parent;
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    EekClutterKeyPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekClutterKeyClass
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    ClutterActorClass parent_class;
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* padding */
 | 
			
		||||
    gpointer pdummy[24];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType         eek_clutter_key_get_type (void) G_GNUC_CONST;
 | 
			
		||||
ClutterActor *eek_clutter_key_new      (EekKey      *key,
 | 
			
		||||
                                        EekClutterRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
#endif  /* EEK_CLUTTER_KEY_H */
 | 
			
		||||
							
								
								
									
										272
									
								
								eek/eek-clutter-keyboard.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								eek/eek-clutter-keyboard.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,272 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SECTION:eek-clutter-keyboard
 | 
			
		||||
 * @short_description: a #ClutterActor displaying #EekKeyboard
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <gdk-pixbuf/gdk-pixbuf.h>
 | 
			
		||||
 | 
			
		||||
#include "eek-clutter-keyboard.h"
 | 
			
		||||
#include "eek-clutter-section.h"
 | 
			
		||||
#include "eek-clutter-renderer.h"
 | 
			
		||||
#include "eek-keyboard.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
    PROP_KEYBOARD,
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekClutterKeyboard, eek_clutter_keyboard, CLUTTER_TYPE_GROUP);
 | 
			
		||||
 | 
			
		||||
#define EEK_CLUTTER_KEYBOARD_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CLUTTER_KEYBOARD, EekClutterKeyboardPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekClutterKeyboardPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    EekClutterRenderer *renderer;
 | 
			
		||||
    EekTheme *theme;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _CreateSectionCallbackData {
 | 
			
		||||
    ClutterActor *actor;
 | 
			
		||||
    EekClutterRenderer *renderer;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _CreateSectionCallbackData CreateSectionCallbackData;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
create_section (EekElement *element, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    CreateSectionCallbackData *data = user_data;
 | 
			
		||||
    ClutterActor *section;
 | 
			
		||||
    
 | 
			
		||||
    section = eek_clutter_section_new (EEK_SECTION(element), data->renderer);
 | 
			
		||||
    clutter_container_add_actor (CLUTTER_CONTAINER(data->actor), section);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_real_realize (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv;
 | 
			
		||||
    CreateSectionCallbackData data;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (priv->theme)
 | 
			
		||||
        eek_renderer_set_theme (EEK_RENDERER(priv->renderer), priv->theme);
 | 
			
		||||
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    clutter_actor_set_position (CLUTTER_ACTOR(self),
 | 
			
		||||
                                bounds.x * scale,
 | 
			
		||||
                                bounds.y * scale);
 | 
			
		||||
 | 
			
		||||
    data.actor = CLUTTER_ACTOR(self);
 | 
			
		||||
    data.renderer = priv->renderer;
 | 
			
		||||
 | 
			
		||||
    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
			
		||||
                                 create_section,
 | 
			
		||||
                                 &data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_real_get_preferred_width (ClutterActor *self,
 | 
			
		||||
                                               float         for_height,
 | 
			
		||||
                                               float        *min_width_p,
 | 
			
		||||
                                               float        *natural_width_p)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    gdouble width;
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_size (EEK_RENDERER(priv->renderer), &width, NULL);
 | 
			
		||||
    *min_width_p = 0.0f;
 | 
			
		||||
    *natural_width_p = width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_real_get_preferred_height (ClutterActor *self,
 | 
			
		||||
                                                float         for_width,
 | 
			
		||||
                                                float        *min_height_p,
 | 
			
		||||
                                                float        *natural_height_p)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    gdouble height;
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_size (EEK_RENDERER(priv->renderer), NULL, &height);
 | 
			
		||||
    *min_height_p = 0.0f;
 | 
			
		||||
    *natural_height_p = height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_real_allocate (ClutterActor          *self,
 | 
			
		||||
                                    const ClutterActorBox *box,
 | 
			
		||||
                                    ClutterAllocationFlags flags)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_set_allocation_size (EEK_RENDERER(priv->renderer),
 | 
			
		||||
                                      box->x2 - box->x1,
 | 
			
		||||
                                      box->y2 - box->y1);
 | 
			
		||||
 | 
			
		||||
    CLUTTER_ACTOR_CLASS (eek_clutter_keyboard_parent_class)->
 | 
			
		||||
        allocate (self, box, flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
create_renderer (EekClutterKeyboard *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    PangoContext *pcontext;
 | 
			
		||||
    PangoFontDescription *font;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
 | 
			
		||||
    pcontext = clutter_actor_get_pango_context (CLUTTER_ACTOR(self));
 | 
			
		||||
    font = pango_font_description_from_string ("Sans 48px");
 | 
			
		||||
    pango_context_set_font_description (pcontext, font);
 | 
			
		||||
    pango_font_description_free (font);
 | 
			
		||||
 | 
			
		||||
    priv->renderer = eek_clutter_renderer_new (priv->keyboard, pcontext);
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
			
		||||
    eek_renderer_set_allocation_size (EEK_RENDERER(priv->renderer),
 | 
			
		||||
                                      bounds.width,
 | 
			
		||||
                                      bounds.height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_set_property (GObject      *object,
 | 
			
		||||
                                   guint         prop_id,
 | 
			
		||||
                                   const GValue *value,
 | 
			
		||||
                                   GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(object);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEYBOARD:
 | 
			
		||||
        priv->keyboard = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->keyboard);
 | 
			
		||||
        create_renderer (EEK_CLUTTER_KEYBOARD(object));
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        g_object_set_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(object);
 | 
			
		||||
 | 
			
		||||
    if (priv->renderer) {
 | 
			
		||||
        g_object_unref (G_OBJECT(priv->renderer));
 | 
			
		||||
        priv->renderer = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (priv->keyboard) {
 | 
			
		||||
        g_object_unref (priv->keyboard);
 | 
			
		||||
        priv->keyboard = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (priv->theme) {
 | 
			
		||||
        g_object_unref (priv->theme);
 | 
			
		||||
        priv->keyboard = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    G_OBJECT_CLASS (eek_clutter_keyboard_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_class_init (EekClutterKeyboardClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekClutterKeyboardPrivate));
 | 
			
		||||
 | 
			
		||||
    actor_class->realize =
 | 
			
		||||
        eek_clutter_keyboard_real_realize;
 | 
			
		||||
    actor_class->get_preferred_width =
 | 
			
		||||
        eek_clutter_keyboard_real_get_preferred_width;
 | 
			
		||||
    actor_class->get_preferred_height =
 | 
			
		||||
        eek_clutter_keyboard_real_get_preferred_height;
 | 
			
		||||
    actor_class->allocate = eek_clutter_keyboard_real_allocate;
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_clutter_keyboard_set_property;
 | 
			
		||||
    gobject_class->dispose = eek_clutter_keyboard_dispose;
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("keyboard",
 | 
			
		||||
                                 "Keyboard",
 | 
			
		||||
                                 "Keyboard",
 | 
			
		||||
                                 EEK_TYPE_KEYBOARD,
 | 
			
		||||
                                 G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_KEYBOARD,
 | 
			
		||||
                                     pspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_keyboard_init (EekClutterKeyboard *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    priv->keyboard = NULL;
 | 
			
		||||
    priv->renderer = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_clutter_keyboard_new:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Create a new #ClutterActor displaying @keyboard.
 | 
			
		||||
 * Returns: a #ClutterActor
 | 
			
		||||
 */
 | 
			
		||||
ClutterActor *
 | 
			
		||||
eek_clutter_keyboard_new (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    return g_object_new (EEK_TYPE_CLUTTER_KEYBOARD, "keyboard", keyboard, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
eek_clutter_keyboard_set_theme (EekClutterKeyboard *keyboard,
 | 
			
		||||
                                EekTheme           *theme)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_CLUTTER_KEYBOARD(keyboard));
 | 
			
		||||
    g_return_if_fail (EEK_IS_THEME(theme));
 | 
			
		||||
 | 
			
		||||
    priv = EEK_CLUTTER_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
    priv->theme = g_object_ref (theme);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								eek/eek-clutter-keyboard.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								eek/eek-clutter-keyboard.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
#ifndef EEK_CLUTTER_KEYBOARD_H
 | 
			
		||||
#define EEK_CLUTTER_KEYBOARD_H 1
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
#include "eek-keyboard.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
#define EEK_TYPE_CLUTTER_KEYBOARD (eek_clutter_keyboard_get_type())
 | 
			
		||||
#define EEK_CLUTTER_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CLUTTER_KEYBOARD, EekClutterKeyboard))
 | 
			
		||||
#define EEK_CLUTTER_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_CLUTTER_KEYBOARD, EekClutterKeyboardClass))
 | 
			
		||||
#define EEK_IS_CLUTTER_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_CLUTTER_KEYBOARD))
 | 
			
		||||
#define EEK_IS_CLUTTER_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_CLUTTER_KEYBOARD))
 | 
			
		||||
#define EEK_CLUTTER_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_CLUTTER_KEYBOARD, EekClutterKeyboardClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _EekClutterKeyboard EekClutterKeyboard;
 | 
			
		||||
typedef struct _EekClutterKeyboardClass EekClutterKeyboardClass;
 | 
			
		||||
typedef struct _EekClutterKeyboardPrivate EekClutterKeyboardPrivate;
 | 
			
		||||
 | 
			
		||||
struct _EekClutterKeyboard
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    ClutterGroup parent;
 | 
			
		||||
 | 
			
		||||
    EekClutterKeyboardPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekClutterKeyboardClass
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    ClutterGroupClass parent_class;
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* padding */
 | 
			
		||||
    gpointer pdummy[24];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType         eek_clutter_keyboard_get_type  (void) G_GNUC_CONST;
 | 
			
		||||
ClutterActor *eek_clutter_keyboard_new       (EekKeyboard        *keyboard);
 | 
			
		||||
void          eek_clutter_keyboard_set_theme (EekClutterKeyboard *keyboard,
 | 
			
		||||
                                              EekTheme           *theme);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
#endif  /* EEK_CLUTTER_KEYBOARD_H */
 | 
			
		||||
							
								
								
									
										235
									
								
								eek/eek-clutter-renderer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								eek/eek-clutter-renderer.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,235 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <gdk-pixbuf/gdk-pixbuf.h>
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
#include <cogl/cogl-pango.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
#include "eek-clutter-renderer.h"
 | 
			
		||||
#include "eek-key.h"
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekClutterRenderer, eek_clutter_renderer, EEK_TYPE_RENDERER);
 | 
			
		||||
 | 
			
		||||
#define EEK_CLUTTER_RENDERER_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CLUTTER_RENDERER, EekClutterRendererPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekClutterRendererPrivate
 | 
			
		||||
{
 | 
			
		||||
    GHashTable *outline_texture_cache;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* This routine is copied from librsvg:
 | 
			
		||||
   Copyright © 2005 Dom Lachowicz <cinamod@hotmail.com>
 | 
			
		||||
   Copyright © 2005 Caleb Moore <c.moore@student.unsw.edu.au>
 | 
			
		||||
   Copyright © 2005 Red Hat, Inc.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
cairo_pixels_to_pixbuf (guint8 *pixels,
 | 
			
		||||
                        int     rowstride,
 | 
			
		||||
                        int     height)
 | 
			
		||||
{
 | 
			
		||||
    int row;
 | 
			
		||||
 | 
			
		||||
    /* un-premultiply data */
 | 
			
		||||
    for (row = 0; row < height; row++) {
 | 
			
		||||
        guint8 *row_data = (pixels + (row * rowstride));
 | 
			
		||||
        int i;
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < rowstride; i += 4) {
 | 
			
		||||
            guint8 *b = &row_data[i];
 | 
			
		||||
            guint32 pixel;
 | 
			
		||||
            guint8 alpha;
 | 
			
		||||
 | 
			
		||||
            memcpy (&pixel, b, sizeof (guint32));
 | 
			
		||||
            alpha = (pixel & 0xff000000) >> 24;
 | 
			
		||||
            if (alpha == 0) {
 | 
			
		||||
                b[0] = b[1] = b[2] = b[3] = 0;
 | 
			
		||||
            } else {
 | 
			
		||||
                b[0] = (((pixel & 0xff0000) >> 16) * 255 + alpha / 2) / alpha;
 | 
			
		||||
                b[1] = (((pixel & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha;
 | 
			
		||||
                b[2] = (((pixel & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha;
 | 
			
		||||
                b[3] = alpha;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_renderer_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterRendererPrivate *priv = EEK_CLUTTER_RENDERER_GET_PRIVATE(object);
 | 
			
		||||
    g_hash_table_destroy (priv->outline_texture_cache);
 | 
			
		||||
    G_OBJECT_CLASS (eek_clutter_renderer_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_renderer_class_init (EekClutterRendererClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    GObjectClass      *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekClutterRendererPrivate));
 | 
			
		||||
 | 
			
		||||
    gobject_class->finalize = eek_clutter_renderer_finalize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_renderer_init (EekClutterRenderer *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterRendererPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_CLUTTER_RENDERER_GET_PRIVATE(self);
 | 
			
		||||
    priv->outline_texture_cache =
 | 
			
		||||
        g_hash_table_new_full (g_direct_hash,
 | 
			
		||||
                               g_direct_equal,
 | 
			
		||||
                               NULL,
 | 
			
		||||
                               cogl_handle_unref);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
eek_clutter_renderer_render_key (EekClutterRenderer *renderer,
 | 
			
		||||
                                 ClutterActor       *actor,
 | 
			
		||||
                                 EekKey             *key)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterRendererPrivate *priv;
 | 
			
		||||
    EekOutline *outline;
 | 
			
		||||
    CoglHandle *outline_texture;
 | 
			
		||||
    PangoLayout *layout;
 | 
			
		||||
    PangoRectangle extents = { 0, };
 | 
			
		||||
    EekColor foreground;
 | 
			
		||||
    CoglColor color;
 | 
			
		||||
    ClutterGeometry geom;
 | 
			
		||||
    gulong oref;
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_CLUTTER_RENDERER(renderer));
 | 
			
		||||
    g_assert (CLUTTER_IS_ACTOR(actor));
 | 
			
		||||
    g_assert (EEK_IS_KEY(key));
 | 
			
		||||
 | 
			
		||||
    oref = eek_key_get_oref (key);
 | 
			
		||||
    g_object_get (renderer, "keyboard", &keyboard, NULL);
 | 
			
		||||
    outline = eek_keyboard_get_outline (keyboard, oref);
 | 
			
		||||
    g_object_unref (keyboard);
 | 
			
		||||
 | 
			
		||||
    priv = EEK_CLUTTER_RENDERER_GET_PRIVATE(renderer);
 | 
			
		||||
    outline_texture = g_hash_table_lookup (priv->outline_texture_cache,
 | 
			
		||||
                                           outline);
 | 
			
		||||
    if (!outline_texture) {
 | 
			
		||||
        gint rowstride;
 | 
			
		||||
        guint8 *data;
 | 
			
		||||
        cairo_surface_t *surface;
 | 
			
		||||
        cairo_t *cr;
 | 
			
		||||
        EekBounds bounds;
 | 
			
		||||
        gdouble scale;
 | 
			
		||||
        GdkPixbuf *pixbuf;
 | 
			
		||||
 | 
			
		||||
        eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
 | 
			
		||||
        scale = eek_renderer_get_scale (EEK_RENDERER(renderer));
 | 
			
		||||
        rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                                   bounds.width * scale);
 | 
			
		||||
 | 
			
		||||
        data = g_malloc0 (rowstride * bounds.height);
 | 
			
		||||
        surface = cairo_image_surface_create_for_data (data,
 | 
			
		||||
                                                       CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                                       bounds.width * scale,
 | 
			
		||||
                                                       bounds.height * scale,
 | 
			
		||||
                                                       rowstride);
 | 
			
		||||
        cr = cairo_create (surface);
 | 
			
		||||
        eek_renderer_render_key_outline (EEK_RENDERER(renderer),
 | 
			
		||||
                                         cr,
 | 
			
		||||
                                         key,
 | 
			
		||||
                                         1.0,
 | 
			
		||||
                                         FALSE);
 | 
			
		||||
        cairo_destroy (cr);
 | 
			
		||||
        cairo_surface_destroy (surface);
 | 
			
		||||
        cairo_pixels_to_pixbuf (data, rowstride, bounds.height * scale);
 | 
			
		||||
 | 
			
		||||
        pixbuf = gdk_pixbuf_new_from_data (data,
 | 
			
		||||
                                           GDK_COLORSPACE_RGB,
 | 
			
		||||
                                           TRUE,
 | 
			
		||||
                                           8,
 | 
			
		||||
                                           bounds.width * scale,
 | 
			
		||||
                                           bounds.height * scale,
 | 
			
		||||
                                           rowstride,
 | 
			
		||||
                                           (GdkPixbufDestroyNotify) g_free,
 | 
			
		||||
                                           data);
 | 
			
		||||
 | 
			
		||||
        outline_texture =
 | 
			
		||||
            cogl_texture_new_from_data (gdk_pixbuf_get_width (pixbuf),
 | 
			
		||||
                                        gdk_pixbuf_get_height (pixbuf),
 | 
			
		||||
                                        COGL_TEXTURE_NONE,
 | 
			
		||||
                                        gdk_pixbuf_get_has_alpha (pixbuf)
 | 
			
		||||
                                        ? COGL_PIXEL_FORMAT_RGBA_8888
 | 
			
		||||
                                        : COGL_PIXEL_FORMAT_RGB_888,
 | 
			
		||||
                                        COGL_PIXEL_FORMAT_ANY,
 | 
			
		||||
                                        gdk_pixbuf_get_rowstride (pixbuf),
 | 
			
		||||
                                        gdk_pixbuf_get_pixels (pixbuf));
 | 
			
		||||
        g_object_unref (pixbuf);
 | 
			
		||||
 | 
			
		||||
        g_hash_table_insert (priv->outline_texture_cache,
 | 
			
		||||
                             outline,
 | 
			
		||||
                             outline_texture);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    clutter_actor_get_allocation_geometry (actor, &geom);
 | 
			
		||||
    cogl_set_source_texture (outline_texture);
 | 
			
		||||
    cogl_rectangle (0.0f, 0.0f, geom.width, geom.height);
 | 
			
		||||
 | 
			
		||||
    layout = eek_renderer_create_pango_layout (EEK_RENDERER(renderer));
 | 
			
		||||
    eek_renderer_render_key_label (EEK_RENDERER(renderer), layout, key);
 | 
			
		||||
    pango_layout_get_extents (layout, NULL, &extents);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_foreground_color (EEK_RENDERER(renderer),
 | 
			
		||||
                                       EEK_ELEMENT(key),
 | 
			
		||||
                                       &foreground);
 | 
			
		||||
 | 
			
		||||
    cogl_color_set_from_4f (&color,
 | 
			
		||||
                            foreground.red,
 | 
			
		||||
                            foreground.green,
 | 
			
		||||
                            foreground.blue,
 | 
			
		||||
                            foreground.alpha);
 | 
			
		||||
 | 
			
		||||
    cogl_pango_render_layout (layout,
 | 
			
		||||
                              (geom.width - extents.width / PANGO_SCALE) / 2,
 | 
			
		||||
                              (geom.height - extents.height / PANGO_SCALE) / 2,
 | 
			
		||||
                              &color,
 | 
			
		||||
                              0);
 | 
			
		||||
    g_object_unref (layout);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EekClutterRenderer *
 | 
			
		||||
eek_clutter_renderer_new (EekKeyboard        *keyboard,
 | 
			
		||||
                          PangoContext       *pcontext)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterRenderer *renderer;
 | 
			
		||||
 | 
			
		||||
    renderer = g_object_new (EEK_TYPE_CLUTTER_RENDERER,
 | 
			
		||||
                             "keyboard", keyboard,
 | 
			
		||||
                             "pango-context", pcontext,
 | 
			
		||||
                             NULL);
 | 
			
		||||
 | 
			
		||||
    return renderer;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								eek/eek-clutter-renderer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								eek/eek-clutter-renderer.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,64 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef EEK_CLUTTER_RENDERER_H
 | 
			
		||||
#define EEK_CLUTTER_RENDERER_H 1
 | 
			
		||||
 | 
			
		||||
#include "eek-renderer.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_CLUTTER_RENDERER (eek_clutter_renderer_get_type())
 | 
			
		||||
#define EEK_CLUTTER_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CLUTTER_RENDERER, EekClutterRenderer))
 | 
			
		||||
#define EEK_CLUTTER_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_CLUTTER_RENDERER, EekClutterRendererClass))
 | 
			
		||||
#define EEK_IS_CLUTTER_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_CLUTTER_RENDERER))
 | 
			
		||||
#define EEK_IS_CLUTTER_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_CLUTTER_RENDERER))
 | 
			
		||||
#define EEK_CLUTTER_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_CLUTTER_RENDERER, EekClutterRendererClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _EekClutterRenderer EekClutterRenderer;
 | 
			
		||||
typedef struct _EekClutterRendererClass EekClutterRendererClass;
 | 
			
		||||
typedef struct _EekClutterRendererPrivate EekClutterRendererPrivate;
 | 
			
		||||
 | 
			
		||||
struct _EekClutterRenderer {
 | 
			
		||||
    EekRenderer parent;
 | 
			
		||||
 | 
			
		||||
    EekClutterRendererPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekClutterRendererClass
 | 
			
		||||
{
 | 
			
		||||
    EekRendererClass parent_class;
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* padding */
 | 
			
		||||
    gpointer pdummy[24];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType               eek_clutter_renderer_get_type
 | 
			
		||||
                                             (void) G_GNUC_CONST;
 | 
			
		||||
EekClutterRenderer *eek_clutter_renderer_new (EekKeyboard        *keyboard,
 | 
			
		||||
                                              PangoContext       *pcontext);
 | 
			
		||||
void                eek_clutter_renderer_render_key
 | 
			
		||||
                                             (EekClutterRenderer *renderer,
 | 
			
		||||
                                              ClutterActor       *actor,
 | 
			
		||||
                                              EekKey             *key);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
#endif  /* EEK_CLUTTER_RENDERER_H */
 | 
			
		||||
							
								
								
									
										232
									
								
								eek/eek-clutter-section.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								eek/eek-clutter-section.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,232 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
#include "eek-clutter-section.h"
 | 
			
		||||
#include "eek-clutter-key.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
    PROP_SECTION,
 | 
			
		||||
    PROP_RENDERER,
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekClutterSection, eek_clutter_section, CLUTTER_TYPE_GROUP);
 | 
			
		||||
 | 
			
		||||
#define EEK_CLUTTER_SECTION_GET_PRIVATE(obj)                           \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CLUTTER_SECTION, EekClutterSectionPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekClutterSectionPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekSection *section;
 | 
			
		||||
    EekClutterRenderer *renderer;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _CreateKeyCallbackData {
 | 
			
		||||
    ClutterActor *actor;
 | 
			
		||||
    EekClutterRenderer *renderer;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _CreateKeyCallbackData CreateKeyCallbackData;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
create_key (EekElement *element, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    CreateKeyCallbackData *data = user_data;
 | 
			
		||||
    ClutterActor *key;
 | 
			
		||||
 | 
			
		||||
    key = eek_clutter_key_new (EEK_KEY(element), data->renderer);
 | 
			
		||||
    clutter_container_add_actor (CLUTTER_CONTAINER(data->actor), key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_position (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->section), &bounds);
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    clutter_actor_set_position (self, bounds.x * scale, bounds.y * scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_real_realize (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    CreateKeyCallbackData data;
 | 
			
		||||
 | 
			
		||||
    clutter_actor_set_rotation (self,
 | 
			
		||||
                                CLUTTER_Z_AXIS,
 | 
			
		||||
                                eek_section_get_angle (priv->section),
 | 
			
		||||
                                0.0f, 0.0f, 0.0f);
 | 
			
		||||
    set_position (self);
 | 
			
		||||
    data.actor = self;
 | 
			
		||||
    data.renderer = priv->renderer;
 | 
			
		||||
    eek_container_foreach_child (EEK_CONTAINER(priv->section),
 | 
			
		||||
                                 create_key,
 | 
			
		||||
                                 &data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_real_paint (ClutterActor *self)
 | 
			
		||||
{
 | 
			
		||||
    set_position (self);
 | 
			
		||||
    CLUTTER_ACTOR_CLASS (eek_clutter_section_parent_class)->
 | 
			
		||||
        paint (self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_real_get_preferred_width (ClutterActor *self,
 | 
			
		||||
                                              float         for_height,
 | 
			
		||||
                                              float        *min_width_p,
 | 
			
		||||
                                              float        *natural_width_p)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->section), &bounds);
 | 
			
		||||
    *min_width_p = 0.0f;
 | 
			
		||||
    *natural_width_p = bounds.width * scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_real_get_preferred_height (ClutterActor *self,
 | 
			
		||||
                                               float         for_width,
 | 
			
		||||
                                               float        *min_height_p,
 | 
			
		||||
                                               float        *natural_height_p)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gdouble scale;
 | 
			
		||||
 | 
			
		||||
    scale = eek_renderer_get_scale (EEK_RENDERER(priv->renderer));
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->section), &bounds);
 | 
			
		||||
    *min_height_p = 0.0f;
 | 
			
		||||
    *natural_height_p = bounds.height * scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_set_property (GObject      *object,
 | 
			
		||||
                                  guint         prop_id,
 | 
			
		||||
                                  const GValue *value,
 | 
			
		||||
                                  GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(object);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_SECTION:
 | 
			
		||||
        priv->section = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->section);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_RENDERER:
 | 
			
		||||
        priv->renderer = g_value_get_object (value);
 | 
			
		||||
        g_object_ref (priv->renderer);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        g_object_set_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv = EEK_CLUTTER_SECTION_GET_PRIVATE(object);
 | 
			
		||||
 | 
			
		||||
    if (priv->renderer) {
 | 
			
		||||
        g_object_unref (priv->renderer);
 | 
			
		||||
        priv->renderer = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (priv->section) {
 | 
			
		||||
        g_object_unref (priv->section);
 | 
			
		||||
        priv->section = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    G_OBJECT_CLASS (eek_clutter_section_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_class_init (EekClutterSectionClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekClutterSectionPrivate));
 | 
			
		||||
 | 
			
		||||
    actor_class->realize =
 | 
			
		||||
        eek_clutter_section_real_realize;
 | 
			
		||||
    actor_class->paint =
 | 
			
		||||
        eek_clutter_section_real_paint;
 | 
			
		||||
    actor_class->get_preferred_width =
 | 
			
		||||
        eek_clutter_section_real_get_preferred_width;
 | 
			
		||||
    actor_class->get_preferred_height =
 | 
			
		||||
        eek_clutter_section_real_get_preferred_height;
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_clutter_section_set_property;
 | 
			
		||||
    gobject_class->dispose = eek_clutter_section_dispose;
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("section",
 | 
			
		||||
                                 "Section",
 | 
			
		||||
                                 "Section",
 | 
			
		||||
                                 EEK_TYPE_SECTION,
 | 
			
		||||
                                 G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_SECTION,
 | 
			
		||||
                                     pspec);
 | 
			
		||||
 | 
			
		||||
    pspec = g_param_spec_object ("renderer",
 | 
			
		||||
                                 "Renderer",
 | 
			
		||||
                                 "Renderer",
 | 
			
		||||
                                 EEK_TYPE_RENDERER,
 | 
			
		||||
                                 G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_RENDERER,
 | 
			
		||||
                                     pspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_clutter_section_init (EekClutterSection *self)
 | 
			
		||||
{
 | 
			
		||||
    EekClutterSectionPrivate *priv;
 | 
			
		||||
    priv = self->priv = EEK_CLUTTER_SECTION_GET_PRIVATE (self);
 | 
			
		||||
    priv->section = NULL;
 | 
			
		||||
    priv->renderer = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ClutterActor *
 | 
			
		||||
eek_clutter_section_new (EekSection         *section,
 | 
			
		||||
                         EekClutterRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
    return g_object_new (EEK_TYPE_CLUTTER_SECTION,
 | 
			
		||||
                         "section", section,
 | 
			
		||||
                         "renderer", renderer,
 | 
			
		||||
                         NULL);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								eek/eek-clutter-section.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								eek/eek-clutter-section.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * 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 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 Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
#ifndef EEK_CLUTTER_SECTION_H
 | 
			
		||||
#define EEK_CLUTTER_SECTION_H 1
 | 
			
		||||
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
#include "eek-section.h"
 | 
			
		||||
#include "eek-clutter-renderer.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
#define EEK_TYPE_CLUTTER_SECTION (eek_clutter_section_get_type())
 | 
			
		||||
#define EEK_CLUTTER_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CLUTTER_SECTION, EekClutterSection))
 | 
			
		||||
#define EEK_CLUTTER_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_CLUTTER_SECTION, EekClutterSectionClass))
 | 
			
		||||
#define EEK_IS_CLUTTER_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_CLUTTER_SECTION))
 | 
			
		||||
#define EEK_IS_CLUTTER_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_CLUTTER_SECTION))
 | 
			
		||||
#define EEK_CLUTTER_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_CLUTTER_SECTION, EekClutterSectionClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _EekClutterSection        EekClutterSection;
 | 
			
		||||
typedef struct _EekClutterSectionClass   EekClutterSectionClass;
 | 
			
		||||
typedef struct _EekClutterSectionPrivate EekClutterSectionPrivate;
 | 
			
		||||
 | 
			
		||||
struct _EekClutterSection
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    ClutterGroup parent;
 | 
			
		||||
 | 
			
		||||
    EekClutterSectionPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekClutterSectionClass
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    ClutterGroupClass parent_class;
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* padding */
 | 
			
		||||
    gpointer pdummy[24];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType         eek_clutter_section_get_type (void) G_GNUC_CONST;
 | 
			
		||||
ClutterActor *eek_clutter_section_new      (EekSection         *section,
 | 
			
		||||
                                            EekClutterRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
#endif  /* EEK_CLUTTER_SECTION_H */
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
/* 
 | 
			
		||||
 * Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2011 Red Hat, Inc.
 | 
			
		||||
 * Copyright (C) 2010-2011 Daiki Ueno <ueno@unixuser.org>
 | 
			
		||||
 * Copyright (C) 2010-2011 Red Hat, Inc.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public License
 | 
			
		||||
@ -17,30 +17,10 @@
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * SECTION:eek
 | 
			
		||||
 * @title: Library Initialization
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_CONFIG_H
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
#ifndef EEK_CLUTTER_H
 | 
			
		||||
#define EEK_CLUTTER_H 1
 | 
			
		||||
 | 
			
		||||
#include "eek.h"
 | 
			
		||||
#include "eek-clutter-keyboard.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_init:
 | 
			
		||||
 *
 | 
			
		||||
 * Initialize the Libeek library.  This must be called before using
 | 
			
		||||
 * functions provided by Libeek.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
eek_init (void)
 | 
			
		||||
{
 | 
			
		||||
    g_type_init ();
 | 
			
		||||
 | 
			
		||||
    g_type_class_ref (EEK_TYPE_SYMBOL);
 | 
			
		||||
    g_type_class_ref (EEK_TYPE_KEYSYM);
 | 
			
		||||
    g_type_class_ref (EEK_TYPE_TEXT);
 | 
			
		||||
}
 | 
			
		||||
#endif  /* EEK_CLUTTER_H */
 | 
			
		||||
@ -31,6 +31,7 @@
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
#include "eek-container.h"
 | 
			
		||||
#include "eek-serializable.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    CHILD_ADDED,
 | 
			
		||||
@ -40,7 +41,11 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (EekContainer, eek_container, EEK_TYPE_ELEMENT);
 | 
			
		||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (EekContainer, eek_container, EEK_TYPE_ELEMENT,
 | 
			
		||||
                                  G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
 | 
			
		||||
                                                         eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_CONTAINER_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CONTAINER, EekContainerPrivate))
 | 
			
		||||
@ -48,10 +53,63 @@ G_DEFINE_ABSTRACT_TYPE (EekContainer, eek_container, EEK_TYPE_ELEMENT);
 | 
			
		||||
 | 
			
		||||
struct _EekContainerPrivate
 | 
			
		||||
{
 | 
			
		||||
    GList *head;
 | 
			
		||||
    GList *last;
 | 
			
		||||
    GSList *children;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static EekSerializableIface *eek_container_parent_serializable_iface;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_container_real_serialize (EekSerializable *self,
 | 
			
		||||
                              GVariantBuilder *builder)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    GSList *head;
 | 
			
		||||
    GVariantBuilder array;
 | 
			
		||||
 | 
			
		||||
    eek_container_parent_serializable_iface->serialize (self, builder);
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_init (&array, G_VARIANT_TYPE("av"));
 | 
			
		||||
    for (head = priv->children; head; head = g_slist_next (head)) {
 | 
			
		||||
        GVariant *variant =
 | 
			
		||||
            eek_serializable_serialize (EEK_SERIALIZABLE(head->data));
 | 
			
		||||
        g_variant_builder_add (&array, "v", variant);
 | 
			
		||||
    }
 | 
			
		||||
    g_variant_builder_add (builder, "v", g_variant_builder_end (&array));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gsize
 | 
			
		||||
eek_container_real_deserialize (EekSerializable *self,
 | 
			
		||||
                                GVariant        *variant,
 | 
			
		||||
                                gsize            index)
 | 
			
		||||
{
 | 
			
		||||
    GVariant *array, *child;
 | 
			
		||||
    GVariantIter iter;
 | 
			
		||||
 | 
			
		||||
    index = eek_container_parent_serializable_iface->deserialize (self,
 | 
			
		||||
                                                                  variant,
 | 
			
		||||
                                                                  index);
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, index++, "v", &array);
 | 
			
		||||
    g_variant_iter_init (&iter, array);
 | 
			
		||||
    while (g_variant_iter_next (&iter, "v", &child)) {
 | 
			
		||||
        EekSerializable *serializable = eek_serializable_deserialize (child);
 | 
			
		||||
        eek_container_add_child (EEK_CONTAINER(self),
 | 
			
		||||
                                 EEK_ELEMENT(serializable));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_serializable_iface_init (EekSerializableIface *iface)
 | 
			
		||||
{
 | 
			
		||||
    eek_container_parent_serializable_iface =
 | 
			
		||||
        g_type_interface_peek_parent (iface);
 | 
			
		||||
 | 
			
		||||
    iface->serialize = eek_container_real_serialize;
 | 
			
		||||
    iface->deserialize = eek_container_real_deserialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_container_real_add_child (EekContainer *self,
 | 
			
		||||
                              EekElement   *child)
 | 
			
		||||
@ -61,14 +119,9 @@ eek_container_real_add_child (EekContainer *self,
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(child));
 | 
			
		||||
    g_object_ref (child);
 | 
			
		||||
 | 
			
		||||
    if (!priv->head) {
 | 
			
		||||
        priv->head = priv->last = g_list_prepend (priv->head, child);
 | 
			
		||||
    } else {
 | 
			
		||||
        priv->last->next = g_list_prepend (priv->last->next, child);
 | 
			
		||||
        priv->last = priv->last->next;
 | 
			
		||||
    }
 | 
			
		||||
    priv->children = g_slist_prepend (priv->children, child);
 | 
			
		||||
    eek_element_set_parent (child, EEK_ELEMENT(self));
 | 
			
		||||
    g_signal_emit (self, signals[CHILD_ADDED], 0, child);
 | 
			
		||||
    g_signal_emit_by_name (self, "child-added", child);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -76,17 +129,15 @@ eek_container_real_remove_child (EekContainer *self,
 | 
			
		||||
                                 EekElement   *child)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
    GSList *head;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(child));
 | 
			
		||||
    head = g_list_find (priv->head, child);
 | 
			
		||||
    head = g_slist_find (priv->children, child);
 | 
			
		||||
    g_return_if_fail (head);
 | 
			
		||||
    g_object_unref (child);
 | 
			
		||||
    if (head == priv->last)
 | 
			
		||||
        priv->last = g_list_previous (priv->last);
 | 
			
		||||
    priv->head = g_list_remove_link (priv->head, head);
 | 
			
		||||
    priv->children = g_slist_remove_link (priv->children, head);
 | 
			
		||||
    eek_element_set_parent (child, NULL);
 | 
			
		||||
    g_signal_emit (self, signals[CHILD_REMOVED], 0, child);
 | 
			
		||||
    g_signal_emit_by_name (self, "child-removed", child);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -95,9 +146,9 @@ eek_container_real_foreach_child (EekContainer *self,
 | 
			
		||||
                                  gpointer      user_data)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
    GSList *head;
 | 
			
		||||
 | 
			
		||||
    for (head = priv->head; head; head = g_list_next (head))
 | 
			
		||||
    for (head = priv->children; head; head = g_slist_next (head))
 | 
			
		||||
        (*callback) (EEK_ELEMENT(head->data), user_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -107,9 +158,9 @@ eek_container_real_find (EekContainer *self,
 | 
			
		||||
                         gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
    GSList *head;
 | 
			
		||||
 | 
			
		||||
    head = g_list_find_custom (priv->head, user_data, (GCompareFunc)func);
 | 
			
		||||
    head = g_slist_find_custom (priv->children, user_data, (GCompareFunc)func);
 | 
			
		||||
    if (head)
 | 
			
		||||
        return head->data;
 | 
			
		||||
    return NULL;
 | 
			
		||||
@ -119,12 +170,12 @@ static void
 | 
			
		||||
eek_container_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(object);
 | 
			
		||||
    GList *head;
 | 
			
		||||
    GSList *head;
 | 
			
		||||
 | 
			
		||||
    for (head = priv->head; head; head = priv->head) {
 | 
			
		||||
    for (head = priv->children; head; head = priv->children) {
 | 
			
		||||
        g_object_unref (head->data);
 | 
			
		||||
        priv->head = g_list_next (head);
 | 
			
		||||
        g_list_free1 (head);
 | 
			
		||||
        priv->children = g_slist_next (head);
 | 
			
		||||
        g_slist_free1 (head);
 | 
			
		||||
    }
 | 
			
		||||
    G_OBJECT_CLASS(eek_container_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
@ -189,13 +240,16 @@ eek_container_class_init (EekContainerClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_container_init (EekContainer *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    EekContainerPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    priv->children = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_container_foreach_child:
 | 
			
		||||
 * @container: an #EekContainer
 | 
			
		||||
 * @callback: (scope call): an #EekCallback
 | 
			
		||||
 * @callback: an #EekCallback
 | 
			
		||||
 * @user_data: additional data passed to @callback
 | 
			
		||||
 *
 | 
			
		||||
 * Enumerate children of @container and run @callback with each child.
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,6 @@
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
 | 
			
		||||
#error "Only <eek/eek.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef EEK_CONTAINER_H
 | 
			
		||||
#define EEK_CONTAINER_H 1
 | 
			
		||||
 | 
			
		||||
@ -39,14 +34,6 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _EekContainerClass EekContainerClass;
 | 
			
		||||
typedef struct _EekContainerPrivate EekContainerPrivate;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekCallback:
 | 
			
		||||
 * @element: an #EekElement
 | 
			
		||||
 * @user_data: user-supplied data
 | 
			
		||||
 *
 | 
			
		||||
 * The type of the callback function used for iterating over the
 | 
			
		||||
 * children of a container, see eek_container_foreach_child().
 | 
			
		||||
 */
 | 
			
		||||
typedef void (*EekCallback) (EekElement *element, gpointer user_data);
 | 
			
		||||
typedef gint (*EekCompareFunc) (EekElement *element, gpointer user_data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -35,6 +35,7 @@
 | 
			
		||||
#include "eek-element.h"
 | 
			
		||||
#include "eek-container.h"
 | 
			
		||||
#include "eek-marshalers.h"
 | 
			
		||||
#include "eek-serializable.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
@ -52,7 +53,11 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (EekElement, eek_element, G_TYPE_OBJECT);
 | 
			
		||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (EekElement, eek_element, G_TYPE_OBJECT,
 | 
			
		||||
                                  G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
 | 
			
		||||
                                                         eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_ELEMENT_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_ELEMENT, EekElementPrivate))
 | 
			
		||||
@ -67,6 +72,155 @@ struct _EekElementPrivate
 | 
			
		||||
    gint level;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static GVariant *
 | 
			
		||||
_g_variant_new_bounds (EekBounds *bounds)
 | 
			
		||||
{
 | 
			
		||||
    GVariantBuilder builder;
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_init (&builder, G_VARIANT_TYPE ("ad"));
 | 
			
		||||
    g_variant_builder_add (&builder, "d", bounds->x);
 | 
			
		||||
    g_variant_builder_add (&builder, "d", bounds->y);
 | 
			
		||||
    g_variant_builder_add (&builder, "d", bounds->width);
 | 
			
		||||
    g_variant_builder_add (&builder, "d", bounds->height);
 | 
			
		||||
 | 
			
		||||
    return g_variant_builder_end (&builder);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
_g_variant_get_bounds (GVariant *variant, EekBounds *bounds)
 | 
			
		||||
{
 | 
			
		||||
    g_variant_get_child (variant, 0, "d", &bounds->x);
 | 
			
		||||
    g_variant_get_child (variant, 1, "d", &bounds->y);
 | 
			
		||||
    g_variant_get_child (variant, 2, "d", &bounds->width);
 | 
			
		||||
    g_variant_get_child (variant, 3, "d", &bounds->height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_serialize (EekSerializable *self,
 | 
			
		||||
                            GVariantBuilder *builder)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_add (builder, "s", priv->name == NULL ? "" : priv->name);
 | 
			
		||||
    g_variant_builder_add (builder, "v", _g_variant_new_bounds (&priv->bounds));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gsize
 | 
			
		||||
eek_element_real_deserialize (EekSerializable *self,
 | 
			
		||||
                              GVariant        *variant,
 | 
			
		||||
                              gsize            index)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
    GVariant *bounds;
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, index++, "s", &priv->name);
 | 
			
		||||
    g_variant_get_child (variant, index++, "v", &bounds);
 | 
			
		||||
    _g_variant_get_bounds (bounds, &priv->bounds);
 | 
			
		||||
 | 
			
		||||
    return index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_serializable_iface_init (EekSerializableIface *iface)
 | 
			
		||||
{
 | 
			
		||||
    iface->serialize = eek_element_real_serialize;
 | 
			
		||||
    iface->deserialize = eek_element_real_deserialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_set_parent (EekElement *self,
 | 
			
		||||
                             EekElement *parent)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (!parent) {
 | 
			
		||||
        g_return_if_fail (priv->parent);
 | 
			
		||||
        /* release self-reference acquired when setting parent */
 | 
			
		||||
        g_object_unref (self);
 | 
			
		||||
        priv->parent = NULL;
 | 
			
		||||
    } else {
 | 
			
		||||
        g_return_if_fail (!priv->parent);
 | 
			
		||||
        g_object_ref (self);
 | 
			
		||||
        priv->parent = parent;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekElement *
 | 
			
		||||
eek_element_real_get_parent (EekElement *self)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    return priv->parent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_set_name (EekElement  *self,
 | 
			
		||||
                           const gchar *name)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    g_free (priv->name);
 | 
			
		||||
    priv->name = g_strdup (name);
 | 
			
		||||
 | 
			
		||||
    g_object_notify (G_OBJECT(self), "name");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static G_CONST_RETURN gchar *
 | 
			
		||||
eek_element_real_get_name (EekElement *self)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    return priv->name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_set_bounds (EekElement *self,
 | 
			
		||||
                             EekBounds *bounds)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    priv->bounds = *bounds;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_get_bounds (EekElement *self,
 | 
			
		||||
                             EekBounds  *bounds)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (bounds);
 | 
			
		||||
    *bounds = priv->bounds;
 | 
			
		||||
 | 
			
		||||
    g_object_notify (G_OBJECT(self), "bounds");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_set_symbol_index (EekElement *self,
 | 
			
		||||
                                   gint        group,
 | 
			
		||||
                                   gint        level)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (priv->group != group || priv->level != level) {
 | 
			
		||||
        priv->group = group;
 | 
			
		||||
        priv->level = level;
 | 
			
		||||
        g_signal_emit_by_name (self, "symbol-index-changed", group, level);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_get_symbol_index (EekElement *self,
 | 
			
		||||
                                   gint       *group,
 | 
			
		||||
                                   gint       *level)
 | 
			
		||||
{
 | 
			
		||||
    EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (group)
 | 
			
		||||
        *group = priv->group;
 | 
			
		||||
    if (level)
 | 
			
		||||
        *level = priv->level;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_symbol_index_changed (EekElement *self,
 | 
			
		||||
                                       gint        group,
 | 
			
		||||
@ -90,21 +244,22 @@ eek_element_set_property (GObject      *object,
 | 
			
		||||
                          const GValue *value,
 | 
			
		||||
                          GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekElement *element = EEK_ELEMENT(object);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_NAME:
 | 
			
		||||
        eek_element_set_name (element,
 | 
			
		||||
                              g_value_dup_string (value));
 | 
			
		||||
        eek_element_set_name (EEK_ELEMENT(object),
 | 
			
		||||
                              g_value_get_string (value));
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_BOUNDS:
 | 
			
		||||
        eek_element_set_bounds (element, g_value_get_boxed (value));
 | 
			
		||||
        eek_element_set_bounds (EEK_ELEMENT(object),
 | 
			
		||||
                                g_value_get_boxed (value));
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_GROUP:
 | 
			
		||||
        eek_element_set_group (element, g_value_get_int (value));
 | 
			
		||||
        eek_element_set_group (EEK_ELEMENT(object),
 | 
			
		||||
                               g_value_get_int (value));
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_LEVEL:
 | 
			
		||||
        eek_element_set_level (element, g_value_get_int (value));
 | 
			
		||||
        eek_element_set_level (EEK_ELEMENT(object),
 | 
			
		||||
                               g_value_get_int (value));
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        break;
 | 
			
		||||
@ -117,22 +272,21 @@ eek_element_get_property (GObject    *object,
 | 
			
		||||
                          GValue     *value,
 | 
			
		||||
                          GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekElement *element = EEK_ELEMENT(object);
 | 
			
		||||
    EekBounds  bounds;
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_NAME:
 | 
			
		||||
        g_value_set_string (value, eek_element_get_name (element));
 | 
			
		||||
        g_value_set_string (value, eek_element_get_name (EEK_ELEMENT(object)));
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_BOUNDS:
 | 
			
		||||
        eek_element_get_bounds (element, &bounds);
 | 
			
		||||
        eek_element_get_bounds (EEK_ELEMENT(object), &bounds);
 | 
			
		||||
        g_value_set_boxed (value, &bounds);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_GROUP:
 | 
			
		||||
        g_value_set_int (value, eek_element_get_group (element));
 | 
			
		||||
        g_value_set_int (value, eek_element_get_group (EEK_ELEMENT(object)));
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_LEVEL:
 | 
			
		||||
        g_value_set_int (value, eek_element_get_level (element));
 | 
			
		||||
        g_value_set_int (value, eek_element_get_level (EEK_ELEMENT(object)));
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@ -149,6 +303,15 @@ eek_element_class_init (EekElementClass *klass)
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekElementPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->set_parent = eek_element_real_set_parent;
 | 
			
		||||
    klass->get_parent = eek_element_real_get_parent;
 | 
			
		||||
    klass->set_name = eek_element_real_set_name;
 | 
			
		||||
    klass->get_name = eek_element_real_get_name;
 | 
			
		||||
    klass->set_bounds = eek_element_real_set_bounds;
 | 
			
		||||
    klass->get_bounds = eek_element_real_get_bounds;
 | 
			
		||||
    klass->set_symbol_index = eek_element_real_set_symbol_index;
 | 
			
		||||
    klass->get_symbol_index = eek_element_real_get_symbol_index;
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
    klass->symbol_index_changed = eek_element_real_symbol_index_changed;
 | 
			
		||||
 | 
			
		||||
@ -241,6 +404,8 @@ eek_element_init (EekElement *self)
 | 
			
		||||
    EekElementPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_ELEMENT_GET_PRIVATE(self);
 | 
			
		||||
    priv->name = NULL;
 | 
			
		||||
    memset (&priv->bounds, 0, sizeof priv->bounds);
 | 
			
		||||
    priv->group = -1;
 | 
			
		||||
    priv->level = -1;
 | 
			
		||||
}
 | 
			
		||||
@ -248,7 +413,7 @@ eek_element_init (EekElement *self)
 | 
			
		||||
/**
 | 
			
		||||
 * eek_element_set_parent:
 | 
			
		||||
 * @element: an #EekElement
 | 
			
		||||
 * @parent: (allow-none): an #EekElement or %NULL
 | 
			
		||||
 * @parent: an #EekElement
 | 
			
		||||
 *
 | 
			
		||||
 * Set the parent of @element to @parent.
 | 
			
		||||
 */
 | 
			
		||||
@ -257,21 +422,8 @@ eek_element_set_parent (EekElement *element,
 | 
			
		||||
                        EekElement *parent)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    g_return_if_fail (parent == NULL || EEK_IS_ELEMENT(parent));
 | 
			
		||||
 | 
			
		||||
    if (element->priv->parent == parent)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    if (element->priv->parent != NULL) {
 | 
			
		||||
        /* release self-reference acquired when setting parent */
 | 
			
		||||
        g_object_unref (element);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (parent != NULL) {
 | 
			
		||||
        g_object_ref (element);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element->priv->parent = parent;
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(parent));
 | 
			
		||||
    EEK_ELEMENT_GET_CLASS(element)->set_parent (element, parent);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -285,7 +437,7 @@ EekElement *
 | 
			
		||||
eek_element_get_parent (EekElement *element)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
 | 
			
		||||
    return element->priv->parent;
 | 
			
		||||
    return EEK_ELEMENT_GET_CLASS(element)->get_parent (element);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -300,8 +452,7 @@ eek_element_set_name (EekElement  *element,
 | 
			
		||||
                      const gchar *name)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    g_free (element->priv->name);
 | 
			
		||||
    element->priv->name = g_strdup (name);
 | 
			
		||||
    EEK_ELEMENT_GET_CLASS(element)->set_name (element, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -315,7 +466,7 @@ G_CONST_RETURN gchar *
 | 
			
		||||
eek_element_get_name (EekElement  *element)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
 | 
			
		||||
    return element->priv->name;
 | 
			
		||||
    return EEK_ELEMENT_GET_CLASS(element)->get_name (element);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -332,13 +483,13 @@ eek_element_set_bounds (EekElement  *element,
 | 
			
		||||
                        EekBounds   *bounds)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    memcpy (&element->priv->bounds, bounds, sizeof(EekBounds));
 | 
			
		||||
    EEK_ELEMENT_GET_CLASS(element)->set_bounds (element, bounds);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_element_get_bounds:
 | 
			
		||||
 * @element: an #EekElement
 | 
			
		||||
 * @bounds: (out): pointer where bounding box of @element will be stored
 | 
			
		||||
 * @bounds: pointer where bounding box of @element will be stored
 | 
			
		||||
 *
 | 
			
		||||
 * Get the bounding box of @element.  Note that if @element has
 | 
			
		||||
 * parent, position of @bounds are relative to the parent.  To obtain
 | 
			
		||||
@ -349,8 +500,7 @@ eek_element_get_bounds (EekElement  *element,
 | 
			
		||||
                        EekBounds   *bounds)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    g_return_if_fail (bounds != NULL);
 | 
			
		||||
    memcpy (bounds, &element->priv->bounds, sizeof(EekBounds));
 | 
			
		||||
    EEK_ELEMENT_GET_CLASS(element)->get_bounds (element, bounds);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -435,18 +585,8 @@ eek_element_set_symbol_index (EekElement *element,
 | 
			
		||||
                              gint        group,
 | 
			
		||||
                              gint        level)
 | 
			
		||||
{
 | 
			
		||||
    gboolean emit_signal;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
 | 
			
		||||
    emit_signal = group != eek_element_get_group (element) ||
 | 
			
		||||
        level != eek_element_get_level (element);
 | 
			
		||||
 | 
			
		||||
    eek_element_set_group (element, group);
 | 
			
		||||
    eek_element_set_level (element, level);
 | 
			
		||||
 | 
			
		||||
    if (emit_signal)
 | 
			
		||||
        g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0, group, level);
 | 
			
		||||
    EEK_ELEMENT_GET_CLASS(element)->set_symbol_index (element, group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -464,11 +604,8 @@ eek_element_get_symbol_index (EekElement *element,
 | 
			
		||||
                              gint       *level)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    g_return_if_fail (group != NULL || level != NULL);
 | 
			
		||||
    if (group != NULL)
 | 
			
		||||
        *group = eek_element_get_group (element);
 | 
			
		||||
    if (level != NULL)
 | 
			
		||||
        *level = eek_element_get_level (element);
 | 
			
		||||
    g_return_if_fail (group || level);
 | 
			
		||||
    EEK_ELEMENT_GET_CLASS(element)->get_symbol_index (element, group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -485,13 +622,10 @@ void
 | 
			
		||||
eek_element_set_group (EekElement *element,
 | 
			
		||||
                       gint        group)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    if (element->priv->group != group) {
 | 
			
		||||
        element->priv->group = group;
 | 
			
		||||
        g_object_notify (G_OBJECT(element), "group");
 | 
			
		||||
        g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0,
 | 
			
		||||
                       group, element->priv->level);
 | 
			
		||||
    }
 | 
			
		||||
    gint level;
 | 
			
		||||
 | 
			
		||||
    level = eek_element_get_level (element);
 | 
			
		||||
    eek_element_set_symbol_index (element, group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -508,13 +642,10 @@ void
 | 
			
		||||
eek_element_set_level (EekElement *element,
 | 
			
		||||
                       gint        level)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    if (element->priv->level != level) {
 | 
			
		||||
        element->priv->level = level;
 | 
			
		||||
        g_object_notify (G_OBJECT(element), "level");
 | 
			
		||||
        g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0,
 | 
			
		||||
                       element->priv->group, level);
 | 
			
		||||
    }
 | 
			
		||||
    gint group;
 | 
			
		||||
 | 
			
		||||
    group = eek_element_get_group (element);
 | 
			
		||||
    eek_element_set_symbol_index (element, group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -529,8 +660,10 @@ eek_element_set_level (EekElement *element,
 | 
			
		||||
gint
 | 
			
		||||
eek_element_get_group (EekElement *element)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
 | 
			
		||||
    return element->priv->group;
 | 
			
		||||
    gint group;
 | 
			
		||||
 | 
			
		||||
    eek_element_get_symbol_index (element, &group, NULL);
 | 
			
		||||
    return group;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -545,6 +678,8 @@ eek_element_get_group (EekElement *element)
 | 
			
		||||
gint
 | 
			
		||||
eek_element_get_level (EekElement *element)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
 | 
			
		||||
    return element->priv->level;
 | 
			
		||||
    gint level;
 | 
			
		||||
 | 
			
		||||
    eek_element_get_symbol_index (element, NULL, &level);
 | 
			
		||||
    return level;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,6 @@
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
 | 
			
		||||
#error "Only <eek/eek.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef EEK_ELEMENT_H
 | 
			
		||||
#define EEK_ELEMENT_H 1
 | 
			
		||||
 | 
			
		||||
@ -51,11 +46,35 @@ struct _EekElementClass
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    GObjectClass parent_class;
 | 
			
		||||
    void                  (* set_parent)           (EekElement  *self,
 | 
			
		||||
                                                    EekElement  *parent);
 | 
			
		||||
    EekElement           *(* get_parent)           (EekElement  *self);
 | 
			
		||||
    void                  (* set_name)             (EekElement  *self,
 | 
			
		||||
                                                    const gchar *name);
 | 
			
		||||
 | 
			
		||||
    G_CONST_RETURN gchar *(* get_name)             (EekElement  *self);
 | 
			
		||||
 | 
			
		||||
    void                  (* set_bounds)           (EekElement  *self,
 | 
			
		||||
                                                    EekBounds   *bounds);
 | 
			
		||||
 | 
			
		||||
    void                  (* get_bounds)           (EekElement  *self,
 | 
			
		||||
                                                    EekBounds   *bounds);
 | 
			
		||||
 | 
			
		||||
    void                  (* set_symbol_index)     (EekElement  *self,
 | 
			
		||||
                                                    gint         group,
 | 
			
		||||
                                                    gint         level);
 | 
			
		||||
    void                  (* get_symbol_index)     (EekElement  *self,
 | 
			
		||||
                                                    gint        *group,
 | 
			
		||||
                                                    gint        *level);
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
    void                  (* symbol_index_changed) (EekElement  *self,
 | 
			
		||||
                                                    gint         group,
 | 
			
		||||
                                                    gint         level);
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* padding */
 | 
			
		||||
    gpointer pdummy[21];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType                 eek_element_get_type              (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
@ -1,36 +0,0 @@
 | 
			
		||||
/*** BEGIN file-header ***/
 | 
			
		||||
#include "eek.h"
 | 
			
		||||
 | 
			
		||||
/*** END file-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN file-production ***/
 | 
			
		||||
/* enumerations from "@filename@" */
 | 
			
		||||
/*** END file-production ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-header ***/
 | 
			
		||||
GType
 | 
			
		||||
@enum_name@_get_type (void)
 | 
			
		||||
{
 | 
			
		||||
  static volatile gsize g_define_type_id__volatile = 0;
 | 
			
		||||
 | 
			
		||||
  if (g_once_init_enter (&g_define_type_id__volatile))
 | 
			
		||||
    {
 | 
			
		||||
      static const G@Type@Value values[] = {
 | 
			
		||||
/*** END value-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-production ***/
 | 
			
		||||
        { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
 | 
			
		||||
/*** END value-production ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-tail ***/
 | 
			
		||||
        { 0, NULL, NULL }
 | 
			
		||||
      };
 | 
			
		||||
      GType g_define_type_id =
 | 
			
		||||
        g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
 | 
			
		||||
      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return g_define_type_id__volatile;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*** END value-tail ***/
 | 
			
		||||
@ -1,29 +0,0 @@
 | 
			
		||||
/*** BEGIN file-header ***/
 | 
			
		||||
 | 
			
		||||
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
 | 
			
		||||
#error "Only <eek/eek.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __EEK_ENUMTYPES_H__
 | 
			
		||||
#define __EEK_ENUMTYPES_H__
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
/*** END file-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN file-production ***/
 | 
			
		||||
 | 
			
		||||
/* enumerations from "@filename@" */
 | 
			
		||||
/*** END file-production ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-header ***/
 | 
			
		||||
GType @enum_name@_get_type (void) G_GNUC_CONST;
 | 
			
		||||
#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
 | 
			
		||||
/*** END value-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN file-tail ***/
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __EEK_ENUMTYPES_H__ */
 | 
			
		||||
/*** END file-tail ***/
 | 
			
		||||
@ -23,7 +23,7 @@ includedir=@includedir@
 | 
			
		||||
 | 
			
		||||
Name: libeek-gtk
 | 
			
		||||
Description: A Library to Create Keyboard-like UI (GTK Support)
 | 
			
		||||
URL: http://fedorahosted.org/eekboard/
 | 
			
		||||
URL: http://ueno.github.com/eekboard/
 | 
			
		||||
Version: @VERSION@
 | 
			
		||||
Requires: eek-@EEK_API_VERSION@ gtk+-@GTK_API_VERSION@
 | 
			
		||||
Libs: -L${libdir} -leek-gtk
 | 
			
		||||
 | 
			
		||||
@ -27,10 +27,6 @@
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif  /* HAVE_CONFIG_H */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBCANBERRA
 | 
			
		||||
#include <canberra-gtk.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "eek-gtk-keyboard.h"
 | 
			
		||||
@ -61,11 +57,9 @@ struct _EekGtkKeyboardPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekRenderer *renderer;
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    EekKey *dragged_key;
 | 
			
		||||
    gulong key_pressed_handler;
 | 
			
		||||
    gulong key_released_handler;
 | 
			
		||||
    gulong key_locked_handler;
 | 
			
		||||
    gulong key_unlocked_handler;
 | 
			
		||||
    gulong key_cancelled_handler;
 | 
			
		||||
    gulong symbol_index_changed_handler;
 | 
			
		||||
    EekTheme *theme;
 | 
			
		||||
};
 | 
			
		||||
@ -77,25 +71,12 @@ static void       on_key_pressed          (EekKeyboard *keyboard,
 | 
			
		||||
static void       on_key_released         (EekKeyboard *keyboard,
 | 
			
		||||
                                           EekKey      *key,
 | 
			
		||||
                                           gpointer     user_data);
 | 
			
		||||
static void       on_key_locked          (EekKeyboard *keyboard,
 | 
			
		||||
                                           EekKey      *key,
 | 
			
		||||
                                           gpointer     user_data);
 | 
			
		||||
static void       on_key_unlocked         (EekKeyboard *keyboard,
 | 
			
		||||
                                           EekKey      *key,
 | 
			
		||||
                                           gpointer     user_data);
 | 
			
		||||
static void       on_key_cancelled        (EekKeyboard *keyboard,
 | 
			
		||||
                                           EekKey      *key,
 | 
			
		||||
                                           gpointer     user_data);
 | 
			
		||||
static void       on_symbol_index_changed (EekKeyboard *keyboard,
 | 
			
		||||
                                           gint         group,
 | 
			
		||||
                                           gint         level,
 | 
			
		||||
                                           gpointer     user_data);
 | 
			
		||||
static void       render_pressed_key      (GtkWidget   *widget,
 | 
			
		||||
                                           EekKey      *key);
 | 
			
		||||
static void       render_locked_key       (GtkWidget   *widget,
 | 
			
		||||
                                           EekKey      *key);
 | 
			
		||||
static void       render_released_key     (GtkWidget   *widget,
 | 
			
		||||
                                           EekKey      *key);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_keyboard_real_realize (GtkWidget      *self)
 | 
			
		||||
@ -106,8 +87,7 @@ eek_gtk_keyboard_real_realize (GtkWidget      *self)
 | 
			
		||||
                           GDK_KEY_PRESS_MASK |
 | 
			
		||||
                           GDK_KEY_RELEASE_MASK |
 | 
			
		||||
                           GDK_BUTTON_PRESS_MASK |
 | 
			
		||||
                           GDK_BUTTON_RELEASE_MASK |
 | 
			
		||||
                           GDK_BUTTON_MOTION_MASK);
 | 
			
		||||
                           GDK_BUTTON_RELEASE_MASK);
 | 
			
		||||
 | 
			
		||||
    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->realize (self);
 | 
			
		||||
}
 | 
			
		||||
@ -119,7 +99,6 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    GtkAllocation allocation;
 | 
			
		||||
    EekColor background;
 | 
			
		||||
    GList *list, *head;
 | 
			
		||||
 | 
			
		||||
    gtk_widget_get_allocation (self, &allocation);
 | 
			
		||||
 | 
			
		||||
@ -141,11 +120,11 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
			
		||||
        style = gtk_widget_get_style (self);
 | 
			
		||||
        state = gtk_widget_get_state (self);
 | 
			
		||||
 | 
			
		||||
        color = color_from_gdk_color (&style->text[state]);
 | 
			
		||||
        color = color_from_gdk_color (&style->fg[state]);
 | 
			
		||||
        eek_renderer_set_default_foreground_color (priv->renderer, color);
 | 
			
		||||
        eek_color_free (color);
 | 
			
		||||
 | 
			
		||||
        color = color_from_gdk_color (&style->base[state]);
 | 
			
		||||
        color = color_from_gdk_color (&style->bg[state]);
 | 
			
		||||
        eek_renderer_set_default_background_color (priv->renderer, color);
 | 
			
		||||
        eek_color_free (color);
 | 
			
		||||
    }
 | 
			
		||||
@ -163,23 +142,29 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
			
		||||
 | 
			
		||||
    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
			
		||||
 | 
			
		||||
    /* redraw pressed key */
 | 
			
		||||
    list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
			
		||||
    for (head = list; head; head = g_list_next (head)) {
 | 
			
		||||
        render_pressed_key (self, head->data);
 | 
			
		||||
    }
 | 
			
		||||
    g_list_free (list);
 | 
			
		||||
 | 
			
		||||
    /* redraw locked key */
 | 
			
		||||
    list = eek_keyboard_get_locked_keys (priv->keyboard);
 | 
			
		||||
    for (head = list; head; head = g_list_next (head)) {
 | 
			
		||||
        render_locked_key (self, ((EekModifierKey *)head->data)->key);
 | 
			
		||||
    }
 | 
			
		||||
    g_list_free (list);
 | 
			
		||||
    /* redraw dragged key */
 | 
			
		||||
    if (priv->dragged_key)
 | 
			
		||||
        render_pressed_key (self, priv->dragged_key);
 | 
			
		||||
 | 
			
		||||
    return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if !GTK_CHECK_VERSION (2, 91, 2)
 | 
			
		||||
static gboolean
 | 
			
		||||
eek_gtk_keyboard_real_expose_event (GtkWidget      *self,
 | 
			
		||||
                                    GdkEventExpose *event)
 | 
			
		||||
{
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (self)));
 | 
			
		||||
    retval = eek_gtk_keyboard_real_draw (self, cr);
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
 | 
			
		||||
    return retval;
 | 
			
		||||
}
 | 
			
		||||
#endif  /* !GTK_CHECK_VERSION (2, 91, 2) */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_keyboard_real_size_allocate (GtkWidget     *self,
 | 
			
		||||
                                     GtkAllocation *allocation)
 | 
			
		||||
@ -205,8 +190,14 @@ eek_gtk_keyboard_real_button_press_event (GtkWidget      *self,
 | 
			
		||||
    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
			
		||||
                                             (gdouble)event->x,
 | 
			
		||||
                                             (gdouble)event->y);
 | 
			
		||||
    if (key)
 | 
			
		||||
 | 
			
		||||
    if (priv->dragged_key && priv->dragged_key != key)
 | 
			
		||||
        g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
 | 
			
		||||
    if (key && !eek_key_is_pressed (key)) {
 | 
			
		||||
        priv->dragged_key = key;
 | 
			
		||||
        g_signal_emit_by_name (key, "pressed", priv->keyboard);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -215,66 +206,15 @@ eek_gtk_keyboard_real_button_release_event (GtkWidget      *self,
 | 
			
		||||
                                            GdkEventButton *event)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    GList *list, *head;
 | 
			
		||||
 | 
			
		||||
    list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
			
		||||
    for (head = list; head; head = g_list_next (head))
 | 
			
		||||
        g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
			
		||||
    g_list_free (list);
 | 
			
		||||
    if (priv->dragged_key) {
 | 
			
		||||
        g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
 | 
			
		||||
        priv->dragged_key = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
eek_gtk_keyboard_real_motion_notify_event (GtkWidget      *self,
 | 
			
		||||
                                           GdkEventMotion *event)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    EekKey *key;
 | 
			
		||||
 | 
			
		||||
    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
			
		||||
                                             (gdouble)event->x,
 | 
			
		||||
                                             (gdouble)event->y);
 | 
			
		||||
    if (key) {
 | 
			
		||||
        GList *list, *head;
 | 
			
		||||
        gboolean found = FALSE;
 | 
			
		||||
 | 
			
		||||
        list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
			
		||||
        for (head = list; head; head = g_list_next (head)) {
 | 
			
		||||
            if (head->data == key)
 | 
			
		||||
                found = TRUE;
 | 
			
		||||
            else
 | 
			
		||||
                g_signal_emit_by_name (head->data, "cancelled", priv->keyboard);
 | 
			
		||||
        }
 | 
			
		||||
        g_list_free (list);
 | 
			
		||||
 | 
			
		||||
        if (!found)
 | 
			
		||||
            g_signal_emit_by_name (key, "pressed", priv->keyboard);
 | 
			
		||||
    }
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_keyboard_real_unmap (GtkWidget *self)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (priv->keyboard) {
 | 
			
		||||
        GList *list, *head;
 | 
			
		||||
 | 
			
		||||
        /* Make a copy of HEAD before sending "released" signal on
 | 
			
		||||
           elements, so that the default handler of
 | 
			
		||||
           EekKeyboard::key-released signal can remove elements from its
 | 
			
		||||
           internal copy */
 | 
			
		||||
        list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
			
		||||
        for (head = list; head; head = g_list_next (head))
 | 
			
		||||
            g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
			
		||||
        g_list_free (list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
			
		||||
                               EekKeyboard    *keyboard)
 | 
			
		||||
@ -288,15 +228,6 @@ eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
			
		||||
    priv->key_released_handler =
 | 
			
		||||
        g_signal_connect (priv->keyboard, "key-released",
 | 
			
		||||
                          G_CALLBACK(on_key_released), self);
 | 
			
		||||
    priv->key_locked_handler =
 | 
			
		||||
        g_signal_connect (priv->keyboard, "key-locked",
 | 
			
		||||
                          G_CALLBACK(on_key_locked), self);
 | 
			
		||||
    priv->key_unlocked_handler =
 | 
			
		||||
        g_signal_connect (priv->keyboard, "key-unlocked",
 | 
			
		||||
                          G_CALLBACK(on_key_unlocked), self);
 | 
			
		||||
    priv->key_cancelled_handler =
 | 
			
		||||
        g_signal_connect (priv->keyboard, "key-cancelled",
 | 
			
		||||
                          G_CALLBACK(on_key_cancelled), self);
 | 
			
		||||
    priv->symbol_index_changed_handler =
 | 
			
		||||
        g_signal_connect (priv->keyboard, "symbol-index-changed",
 | 
			
		||||
                          G_CALLBACK(on_symbol_index_changed), self);
 | 
			
		||||
@ -316,7 +247,9 @@ eek_gtk_keyboard_set_property (GObject      *object,
 | 
			
		||||
        eek_gtk_keyboard_set_keyboard (EEK_GTK_KEYBOARD(object), keyboard);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        g_object_set_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -340,30 +273,17 @@ eek_gtk_keyboard_dispose (GObject *object)
 | 
			
		||||
                                           priv->key_released_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->keyboard,
 | 
			
		||||
                                         priv->key_released_handler);
 | 
			
		||||
        if (g_signal_handler_is_connected (priv->keyboard,
 | 
			
		||||
                                           priv->key_locked_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->keyboard,
 | 
			
		||||
                                         priv->key_locked_handler);
 | 
			
		||||
        if (g_signal_handler_is_connected (priv->keyboard,
 | 
			
		||||
                                           priv->key_unlocked_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->keyboard,
 | 
			
		||||
                                         priv->key_unlocked_handler);
 | 
			
		||||
        if (g_signal_handler_is_connected (priv->keyboard,
 | 
			
		||||
                                           priv->key_cancelled_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->keyboard,
 | 
			
		||||
                                         priv->key_cancelled_handler);
 | 
			
		||||
        if (g_signal_handler_is_connected (priv->keyboard,
 | 
			
		||||
                                           priv->symbol_index_changed_handler))
 | 
			
		||||
            g_signal_handler_disconnect (priv->keyboard,
 | 
			
		||||
                                         priv->symbol_index_changed_handler);
 | 
			
		||||
            
 | 
			
		||||
        GList *list, *head;
 | 
			
		||||
 | 
			
		||||
        list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
			
		||||
        for (head = list; head; head = g_list_next (head)) {
 | 
			
		||||
            g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
			
		||||
        if (priv->dragged_key) {
 | 
			
		||||
            g_signal_emit_by_name (priv->dragged_key,
 | 
			
		||||
                                   "released",
 | 
			
		||||
                                   priv->keyboard);
 | 
			
		||||
            priv->dragged_key = NULL;
 | 
			
		||||
        }
 | 
			
		||||
        g_list_free (list);
 | 
			
		||||
 | 
			
		||||
        g_object_unref (priv->keyboard);
 | 
			
		||||
        priv->keyboard = NULL;
 | 
			
		||||
@ -388,15 +308,16 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
 | 
			
		||||
                              sizeof (EekGtkKeyboardPrivate));
 | 
			
		||||
 | 
			
		||||
    widget_class->realize = eek_gtk_keyboard_real_realize;
 | 
			
		||||
    widget_class->unmap = eek_gtk_keyboard_real_unmap;
 | 
			
		||||
#if GTK_CHECK_VERSION (2, 91, 2)
 | 
			
		||||
    widget_class->draw = eek_gtk_keyboard_real_draw;
 | 
			
		||||
#else  /* GTK_CHECK_VERSION (2, 91, 2) */
 | 
			
		||||
    widget_class->expose_event = eek_gtk_keyboard_real_expose_event;
 | 
			
		||||
#endif  /* !GTK_CHECK_VERSION (2, 91, 2) */
 | 
			
		||||
    widget_class->size_allocate = eek_gtk_keyboard_real_size_allocate;
 | 
			
		||||
    widget_class->button_press_event =
 | 
			
		||||
        eek_gtk_keyboard_real_button_press_event;
 | 
			
		||||
    widget_class->button_release_event =
 | 
			
		||||
        eek_gtk_keyboard_real_button_release_event;
 | 
			
		||||
    widget_class->motion_notify_event =
 | 
			
		||||
        eek_gtk_keyboard_real_motion_notify_event;
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_gtk_keyboard_set_property;
 | 
			
		||||
    gobject_class->dispose = eek_gtk_keyboard_dispose;
 | 
			
		||||
@ -414,7 +335,12 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_keyboard_init (EekGtkKeyboard *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    EekGtkKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    priv->renderer = NULL;
 | 
			
		||||
    priv->keyboard = NULL;
 | 
			
		||||
    priv->dragged_key = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -440,26 +366,15 @@ color_from_gdk_color (GdkColor *gdk_color)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
magnify_bounds (GtkWidget *self,
 | 
			
		||||
                EekBounds *bounds,
 | 
			
		||||
                EekBounds *large_bounds,
 | 
			
		||||
                gdouble    scale)
 | 
			
		||||
magnify_bounds (EekBounds *bounds, EekBounds *large_bounds, gdouble scale)
 | 
			
		||||
{
 | 
			
		||||
    GtkAllocation allocation;
 | 
			
		||||
    gdouble x, y;
 | 
			
		||||
 | 
			
		||||
    g_assert (scale >= 1.0);
 | 
			
		||||
 | 
			
		||||
    gtk_widget_get_allocation (self, &allocation);
 | 
			
		||||
 | 
			
		||||
    large_bounds->width = bounds->width * scale;
 | 
			
		||||
    large_bounds->height = bounds->height * scale;
 | 
			
		||||
 | 
			
		||||
    x = bounds->x - (large_bounds->width - bounds->width) / 2;
 | 
			
		||||
    y = bounds->y - large_bounds->height;
 | 
			
		||||
 | 
			
		||||
    large_bounds->x = CLAMP(x, 0, allocation.width - large_bounds->width);
 | 
			
		||||
    large_bounds->y = CLAMP(y, 0, allocation.height - large_bounds->height);
 | 
			
		||||
    large_bounds->x = bounds->x - (large_bounds->width - bounds->width) / 2;
 | 
			
		||||
    large_bounds->y = bounds->y - (large_bounds->height - bounds->height) / 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -473,63 +388,10 @@ render_pressed_key (GtkWidget *widget,
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
    magnify_bounds (widget, &bounds, &large_bounds, 1.5);
 | 
			
		||||
    magnify_bounds (&bounds, &large_bounds, 1.5);
 | 
			
		||||
 | 
			
		||||
    cairo_save (cr);
 | 
			
		||||
    cairo_translate (cr, bounds.x, bounds.y);
 | 
			
		||||
    eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE);
 | 
			
		||||
    cairo_restore (cr);
 | 
			
		||||
 | 
			
		||||
    cairo_save (cr);
 | 
			
		||||
    cairo_translate (cr, large_bounds.x, large_bounds.y);
 | 
			
		||||
    eek_renderer_render_key (priv->renderer, cr, key, 1.5, TRUE);
 | 
			
		||||
    cairo_restore (cr);
 | 
			
		||||
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
render_locked_key (GtkWidget *widget,
 | 
			
		||||
                   EekKey    *key)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
    cairo_translate (cr, bounds.x, bounds.y);
 | 
			
		||||
    eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE);
 | 
			
		||||
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
render_released_key (GtkWidget *widget,
 | 
			
		||||
                     EekKey    *key)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
			
		||||
    EekBounds bounds, large_bounds;
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
    magnify_bounds (widget, &bounds, &large_bounds, 2.0);
 | 
			
		||||
    cairo_rectangle (cr,
 | 
			
		||||
                     large_bounds.x,
 | 
			
		||||
                     large_bounds.y,
 | 
			
		||||
                     large_bounds.width,
 | 
			
		||||
                     large_bounds.height);
 | 
			
		||||
    cairo_rectangle (cr,
 | 
			
		||||
                     bounds.x,
 | 
			
		||||
                     bounds.y,
 | 
			
		||||
                     bounds.width,
 | 
			
		||||
                     bounds.height);
 | 
			
		||||
    cairo_clip (cr);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -546,14 +408,6 @@ on_key_pressed (EekKeyboard *keyboard,
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    render_pressed_key (widget, key);
 | 
			
		||||
 | 
			
		||||
#if HAVE_LIBCANBERRA
 | 
			
		||||
    ca_gtk_play_for_widget (widget, 0,
 | 
			
		||||
                            CA_PROP_EVENT_ID, "button-pressed",
 | 
			
		||||
                            CA_PROP_EVENT_DESCRIPTION, "virtual key pressed",
 | 
			
		||||
                            CA_PROP_APPLICATION_ID, "org.fedorahosted.Eekboard",
 | 
			
		||||
                            NULL);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -563,65 +417,26 @@ on_key_released (EekKeyboard *keyboard,
 | 
			
		||||
{
 | 
			
		||||
    GtkWidget *widget = user_data;
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
    EekBounds bounds, large_bounds;
 | 
			
		||||
 | 
			
		||||
    /* renderer may have not been set yet if the widget is a popup */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    render_released_key (widget, key);
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
 | 
			
		||||
 | 
			
		||||
#if HAVE_LIBCANBERRA
 | 
			
		||||
    ca_gtk_play_for_widget (widget, 0,
 | 
			
		||||
                            CA_PROP_EVENT_ID, "button-released",
 | 
			
		||||
                            CA_PROP_EVENT_DESCRIPTION, "virtual key pressed",
 | 
			
		||||
                            CA_PROP_APPLICATION_ID, "org.fedorahosted.Eekboard",
 | 
			
		||||
                            NULL);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_cancelled (EekKeyboard *keyboard,
 | 
			
		||||
                 EekKey      *key,
 | 
			
		||||
                 gpointer     user_data)
 | 
			
		||||
{
 | 
			
		||||
    GtkWidget *widget = user_data;
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
			
		||||
 | 
			
		||||
    /* renderer may have not been set yet if the widget is a popup */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    render_released_key (widget, key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_locked (EekKeyboard *keyboard,
 | 
			
		||||
               EekKey      *key,
 | 
			
		||||
               gpointer     user_data)
 | 
			
		||||
{
 | 
			
		||||
    GtkWidget *widget = user_data;
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
			
		||||
 | 
			
		||||
    /* renderer may have not been set yet if the widget is a popup */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    render_locked_key (widget, key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_unlocked (EekKeyboard *keyboard,
 | 
			
		||||
                 EekKey      *key,
 | 
			
		||||
                 gpointer     user_data)
 | 
			
		||||
{
 | 
			
		||||
    GtkWidget *widget = user_data;
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
			
		||||
 | 
			
		||||
    /* renderer may have not been set yet if the widget is a popup */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    render_released_key (widget, key);
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
    magnify_bounds (&bounds, &large_bounds, 2.0);
 | 
			
		||||
    cairo_rectangle (cr,
 | 
			
		||||
                     large_bounds.x,
 | 
			
		||||
                     large_bounds.y,
 | 
			
		||||
                     large_bounds.width,
 | 
			
		||||
                     large_bounds.height);
 | 
			
		||||
    cairo_clip (cr);
 | 
			
		||||
    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
			
		||||
    cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,6 @@
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
 | 
			
		||||
#error "Only <eek/eek-gtk.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef EEK_GTK_KEYBOARD_H
 | 
			
		||||
#define EEK_GTK_KEYBOARD_H 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -51,32 +51,58 @@ pixbuf_to_cairo_surface (GdkPixbuf *pixbuf)
 | 
			
		||||
  return surface;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cairo_surface_t *
 | 
			
		||||
eek_gtk_renderer_real_get_icon_surface (EekRenderer *self,
 | 
			
		||||
                                        const gchar *icon_name,
 | 
			
		||||
                                        gint size)
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_renderer_real_render_key_icon (EekRenderer *self,
 | 
			
		||||
                                       cairo_t     *cr,
 | 
			
		||||
                                       EekKey      *key,
 | 
			
		||||
                                       gdouble      scale,
 | 
			
		||||
                                       gboolean     rotate)
 | 
			
		||||
{
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    EekSymbol *symbol;
 | 
			
		||||
    const gchar *icon_name;
 | 
			
		||||
    GdkPixbuf *pixbuf;
 | 
			
		||||
    GError *error;
 | 
			
		||||
    cairo_surface_t *surface;
 | 
			
		||||
    GError *error;
 | 
			
		||||
    gint width, height;
 | 
			
		||||
 | 
			
		||||
    symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
			
		||||
    g_return_if_fail (symbol);
 | 
			
		||||
 | 
			
		||||
    icon_name = eek_symbol_get_icon_name (symbol);
 | 
			
		||||
    g_return_if_fail (icon_name);
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(key), &bounds);
 | 
			
		||||
    bounds.width *= scale;
 | 
			
		||||
    bounds.height *= scale;
 | 
			
		||||
 | 
			
		||||
    error = NULL;
 | 
			
		||||
    pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 | 
			
		||||
                                       icon_name,
 | 
			
		||||
                                       size,
 | 
			
		||||
                                       MIN(bounds.width, bounds.height),
 | 
			
		||||
                                       0,
 | 
			
		||||
                                       &error);
 | 
			
		||||
    if (pixbuf == NULL) {
 | 
			
		||||
        g_warning ("can't get icon pixbuf for %s: %s",
 | 
			
		||||
                   icon_name,
 | 
			
		||||
                   error->message);
 | 
			
		||||
        g_error_free (error);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    g_return_if_fail (pixbuf);
 | 
			
		||||
 | 
			
		||||
    width = gdk_pixbuf_get_width (pixbuf);
 | 
			
		||||
    height = gdk_pixbuf_get_height (pixbuf);
 | 
			
		||||
 | 
			
		||||
    if (bounds.width * height < bounds.height * width)
 | 
			
		||||
        scale = bounds.width / width;
 | 
			
		||||
    else
 | 
			
		||||
        scale = bounds.height / height;
 | 
			
		||||
 | 
			
		||||
    cairo_save (cr);
 | 
			
		||||
    cairo_translate (cr,
 | 
			
		||||
                     (bounds.width - width * scale) / 2,
 | 
			
		||||
                     (bounds.height - height * scale) / 2);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_apply_transformation_for_key (self, cr, key, scale, rotate);
 | 
			
		||||
    surface = pixbuf_to_cairo_surface (pixbuf);
 | 
			
		||||
    g_object_unref (pixbuf);
 | 
			
		||||
    return surface;
 | 
			
		||||
    cairo_set_source_surface (cr, surface, 0.0, 0.0);
 | 
			
		||||
    cairo_paint (cr);
 | 
			
		||||
    cairo_restore (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -84,7 +110,7 @@ eek_gtk_renderer_class_init (EekGtkRendererClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererClass *renderer_class = EEK_RENDERER_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
    renderer_class->get_icon_surface = eek_gtk_renderer_real_get_icon_surface;
 | 
			
		||||
    renderer_class->render_key_icon = eek_gtk_renderer_real_render_key_icon;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -97,8 +123,12 @@ eek_gtk_renderer_new (EekKeyboard  *keyboard,
 | 
			
		||||
                      PangoContext *pcontext,
 | 
			
		||||
                      GtkWidget    *widget)
 | 
			
		||||
{
 | 
			
		||||
    return g_object_new (EEK_TYPE_GTK_RENDERER,
 | 
			
		||||
    EekRenderer *renderer;
 | 
			
		||||
 | 
			
		||||
    renderer = g_object_new (EEK_TYPE_GTK_RENDERER,
 | 
			
		||||
                             "keyboard", keyboard,
 | 
			
		||||
                             "pango-context", pcontext,
 | 
			
		||||
                             NULL);
 | 
			
		||||
 | 
			
		||||
    return renderer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										368
									
								
								eek/eek-key.c
									
									
									
									
									
								
							
							
						
						
									
										368
									
								
								eek/eek-key.c
									
									
									
									
									
								
							@ -39,6 +39,7 @@
 | 
			
		||||
#include "eek-section.h"
 | 
			
		||||
#include "eek-keyboard.h"
 | 
			
		||||
#include "eek-symbol.h"
 | 
			
		||||
#include "eek-serializable.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
@ -53,15 +54,16 @@ enum {
 | 
			
		||||
enum {
 | 
			
		||||
    PRESSED,
 | 
			
		||||
    RELEASED,
 | 
			
		||||
    LOCKED,
 | 
			
		||||
    UNLOCKED,
 | 
			
		||||
    CANCELLED,
 | 
			
		||||
    LAST_SIGNAL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekKey, eek_key, EEK_TYPE_ELEMENT);
 | 
			
		||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE (EekKey, eek_key, EEK_TYPE_ELEMENT,
 | 
			
		||||
                         G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
 | 
			
		||||
                                                eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_KEY_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEY, EekKeyPrivate))
 | 
			
		||||
@ -75,9 +77,183 @@ struct _EekKeyPrivate
 | 
			
		||||
    gint row;
 | 
			
		||||
    gulong oref;
 | 
			
		||||
    gboolean is_pressed;
 | 
			
		||||
    gboolean is_locked;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static EekSerializableIface *eek_key_parent_serializable_iface;
 | 
			
		||||
 | 
			
		||||
static GVariant *
 | 
			
		||||
_g_variant_new_symbol_matrix (EekSymbolMatrix *symbol_matrix)
 | 
			
		||||
{
 | 
			
		||||
    GVariantBuilder builder, array;
 | 
			
		||||
    gint i, num_symbols = symbol_matrix->num_groups * symbol_matrix->num_levels;
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_init (&builder, G_VARIANT_TYPE ("(iiv)"));
 | 
			
		||||
    g_variant_builder_add (&builder, "i", symbol_matrix->num_groups);
 | 
			
		||||
    g_variant_builder_add (&builder, "i", symbol_matrix->num_levels);
 | 
			
		||||
    g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
 | 
			
		||||
    for (i = 0; i < num_symbols; i++) {
 | 
			
		||||
        GVariant *symbol = eek_serializable_serialize
 | 
			
		||||
            (EEK_SERIALIZABLE(symbol_matrix->data[i]));
 | 
			
		||||
        g_variant_builder_add (&array, "v", symbol);
 | 
			
		||||
    }
 | 
			
		||||
    g_variant_builder_add (&builder, "v", g_variant_builder_end (&array));
 | 
			
		||||
    return g_variant_builder_end (&builder);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekSymbolMatrix *
 | 
			
		||||
_g_variant_get_symbol_matrix (GVariant *variant)
 | 
			
		||||
{
 | 
			
		||||
    gint num_groups, num_levels, i;
 | 
			
		||||
    EekSymbolMatrix *symbol_matrix;
 | 
			
		||||
    GVariant *array, *child;
 | 
			
		||||
    GVariantIter iter;
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, 0, "i", &num_groups);
 | 
			
		||||
    g_variant_get_child (variant, 1, "i", &num_levels);
 | 
			
		||||
    symbol_matrix = eek_symbol_matrix_new (num_groups, num_levels);
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, 2, "v", &array);
 | 
			
		||||
    g_variant_iter_init (&iter, array);
 | 
			
		||||
    for (i = 0; i < num_groups * num_levels; i++) {
 | 
			
		||||
        EekSerializable *serializable;
 | 
			
		||||
 | 
			
		||||
        if (!g_variant_iter_next (&iter, "v", &child)) {
 | 
			
		||||
            eek_symbol_matrix_free (symbol_matrix);
 | 
			
		||||
            g_return_val_if_reached (NULL);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        serializable = eek_serializable_deserialize (child);
 | 
			
		||||
        symbol_matrix->data[i] = EEK_SYMBOL(serializable);
 | 
			
		||||
    }
 | 
			
		||||
    return symbol_matrix;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_serialize (EekSerializable *self,
 | 
			
		||||
                        GVariantBuilder *builder)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    eek_key_parent_serializable_iface->serialize (self, builder);
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_add (builder, "u", priv->keycode);
 | 
			
		||||
    g_variant_builder_add (builder, "v",
 | 
			
		||||
                           _g_variant_new_symbol_matrix (priv->symbol_matrix));
 | 
			
		||||
    g_variant_builder_add (builder, "i", priv->column);
 | 
			
		||||
    g_variant_builder_add (builder, "i", priv->row);
 | 
			
		||||
    g_variant_builder_add (builder, "u", priv->oref);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gsize
 | 
			
		||||
eek_key_real_deserialize (EekSerializable *self,
 | 
			
		||||
                          GVariant        *variant,
 | 
			
		||||
                          gsize            index)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    GVariant *symbol_matrix;
 | 
			
		||||
 | 
			
		||||
    index = eek_key_parent_serializable_iface->deserialize (self,
 | 
			
		||||
                                                            variant,
 | 
			
		||||
                                                            index);
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, index++, "u", &priv->keycode);
 | 
			
		||||
    g_variant_get_child (variant, index++, "v", &symbol_matrix);
 | 
			
		||||
    eek_symbol_matrix_free (priv->symbol_matrix);
 | 
			
		||||
    priv->symbol_matrix = _g_variant_get_symbol_matrix (symbol_matrix);
 | 
			
		||||
    g_variant_get_child (variant, index++, "i", &priv->column);
 | 
			
		||||
    g_variant_get_child (variant, index++, "i", &priv->row);
 | 
			
		||||
    g_variant_get_child (variant, index++, "u", &priv->oref);
 | 
			
		||||
 | 
			
		||||
    return index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_serializable_iface_init (EekSerializableIface *iface)
 | 
			
		||||
{
 | 
			
		||||
    eek_key_parent_serializable_iface =
 | 
			
		||||
        g_type_interface_peek_parent (iface);
 | 
			
		||||
 | 
			
		||||
    iface->serialize = eek_key_real_serialize;
 | 
			
		||||
    iface->deserialize = eek_key_real_deserialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_set_keycode (EekKey *self, guint keycode)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    priv->keycode = keycode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static guint
 | 
			
		||||
eek_key_real_get_keycode (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    return priv->keycode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_set_symbol_matrix (EekKey          *self,
 | 
			
		||||
                                EekSymbolMatrix *matrix)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    eek_symbol_matrix_free (priv->symbol_matrix);
 | 
			
		||||
    priv->symbol_matrix = eek_symbol_matrix_copy (matrix);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekSymbolMatrix *
 | 
			
		||||
eek_key_real_get_symbol_matrix (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    return priv->symbol_matrix;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_set_index (EekKey *self,
 | 
			
		||||
                        gint    column,
 | 
			
		||||
                        gint    row)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (0 <= column);
 | 
			
		||||
    g_return_if_fail (0 <= row);
 | 
			
		||||
    priv->column = column;
 | 
			
		||||
    priv->row = row;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_get_index (EekKey *self,
 | 
			
		||||
                        gint   *column,
 | 
			
		||||
                        gint   *row)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    if (column)
 | 
			
		||||
        *column = priv->column;
 | 
			
		||||
    if (row)
 | 
			
		||||
        *row = priv->row;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_set_oref (EekKey *self, gulong oref)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    priv->oref = oref;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gulong
 | 
			
		||||
eek_key_real_get_oref (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    return priv->oref;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
eek_key_real_is_pressed (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    return priv->is_pressed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_pressed (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
@ -100,39 +276,6 @@ eek_key_real_released (EekKey *self)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_locked (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    priv->is_locked = TRUE;
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    g_debug ("locked %X", eek_key_get_keycode (self));
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_unlocked (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    priv->is_locked = FALSE;
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    g_debug ("unlocked %X", eek_key_get_keycode (self));
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_real_cancelled (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
 | 
			
		||||
    priv->is_pressed = FALSE;
 | 
			
		||||
#if DEBUG
 | 
			
		||||
    g_debug ("cancelled %X", eek_key_get_keycode (self));
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_key_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
@ -170,7 +313,9 @@ eek_key_set_property (GObject      *object,
 | 
			
		||||
        eek_key_set_oref (EEK_KEY(object), g_value_get_uint (value));
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        g_object_set_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -183,6 +328,7 @@ eek_key_get_property (GObject    *object,
 | 
			
		||||
{
 | 
			
		||||
    gint column, row;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY(object));
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEYCODE:
 | 
			
		||||
        g_value_set_uint (value, eek_key_get_keycode (EEK_KEY(object)));
 | 
			
		||||
@ -203,7 +349,9 @@ eek_key_get_property (GObject    *object,
 | 
			
		||||
        g_value_set_uint (value, eek_key_get_oref (EEK_KEY(object)));
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        g_object_get_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -217,6 +365,16 @@ eek_key_class_init (EekKeyClass *klass)
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekKeyPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->get_keycode = eek_key_real_get_keycode;
 | 
			
		||||
    klass->set_keycode = eek_key_real_set_keycode;
 | 
			
		||||
    klass->set_symbol_matrix = eek_key_real_set_symbol_matrix;
 | 
			
		||||
    klass->get_symbol_matrix = eek_key_real_get_symbol_matrix;
 | 
			
		||||
    klass->set_index = eek_key_real_set_index;
 | 
			
		||||
    klass->get_index = eek_key_real_get_index;
 | 
			
		||||
    klass->set_oref = eek_key_real_set_oref;
 | 
			
		||||
    klass->get_oref = eek_key_real_get_oref;
 | 
			
		||||
    klass->is_pressed = eek_key_real_is_pressed;
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_key_set_property;
 | 
			
		||||
    gobject_class->get_property = eek_key_get_property;
 | 
			
		||||
    gobject_class->finalize     = eek_key_finalize;
 | 
			
		||||
@ -224,9 +382,6 @@ eek_key_class_init (EekKeyClass *klass)
 | 
			
		||||
    /* signals */
 | 
			
		||||
    klass->pressed = eek_key_real_pressed;
 | 
			
		||||
    klass->released = eek_key_real_released;
 | 
			
		||||
    klass->locked = eek_key_real_locked;
 | 
			
		||||
    klass->unlocked = eek_key_real_unlocked;
 | 
			
		||||
    klass->cancelled = eek_key_real_cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKey:keycode:
 | 
			
		||||
@ -323,59 +478,6 @@ eek_key_class_init (EekKeyClass *klass)
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__VOID,
 | 
			
		||||
                      G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKey::locked:
 | 
			
		||||
     * @key: an #EekKey
 | 
			
		||||
     *
 | 
			
		||||
     * The ::locked signal is emitted each time @key is shifted to
 | 
			
		||||
     * the locked state.  The class handler runs before signal
 | 
			
		||||
     * handlers to allow signal handlers to read the status of @key
 | 
			
		||||
     * with eek_key_is_locked().
 | 
			
		||||
     */
 | 
			
		||||
    signals[LOCKED] =
 | 
			
		||||
        g_signal_new (I_("locked"),
 | 
			
		||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
			
		||||
                      G_SIGNAL_RUN_FIRST,
 | 
			
		||||
                      G_STRUCT_OFFSET(EekKeyClass, locked),
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__VOID,
 | 
			
		||||
                      G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKey::unlocked:
 | 
			
		||||
     * @key: an #EekKey
 | 
			
		||||
     *
 | 
			
		||||
     * The ::unlocked signal is emitted each time @key is shifted to
 | 
			
		||||
     * the unlocked state.
 | 
			
		||||
     */
 | 
			
		||||
   signals[UNLOCKED] =
 | 
			
		||||
        g_signal_new (I_("unlocked"),
 | 
			
		||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
			
		||||
                      G_SIGNAL_RUN_LAST,
 | 
			
		||||
                      G_STRUCT_OFFSET(EekKeyClass, unlocked),
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__VOID,
 | 
			
		||||
                      G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKey::cancelled:
 | 
			
		||||
     * @key: an #EekKey
 | 
			
		||||
     *
 | 
			
		||||
     * The ::cancelled signal is emitted each time @key is shifted to
 | 
			
		||||
     * the cancelled state.
 | 
			
		||||
     */
 | 
			
		||||
   signals[CANCELLED] =
 | 
			
		||||
        g_signal_new (I_("cancelled"),
 | 
			
		||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
			
		||||
                      G_SIGNAL_RUN_LAST,
 | 
			
		||||
                      G_STRUCT_OFFSET(EekKeyClass, cancelled),
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__VOID,
 | 
			
		||||
                      G_TYPE_NONE, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -384,7 +486,10 @@ eek_key_init (EekKey *self)
 | 
			
		||||
    EekKeyPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    priv->keycode = 0;
 | 
			
		||||
    priv->symbol_matrix = eek_symbol_matrix_new (0, 0);
 | 
			
		||||
    priv->column = priv->row = 0;
 | 
			
		||||
    priv->oref = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -403,7 +508,7 @@ eek_key_set_keycode (EekKey *key,
 | 
			
		||||
                     guint   keycode)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY (key));
 | 
			
		||||
    key->priv->keycode = keycode;
 | 
			
		||||
    EEK_KEY_GET_CLASS(key)->set_keycode (key, keycode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -417,7 +522,7 @@ guint
 | 
			
		||||
eek_key_get_keycode (EekKey *key)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEY (key), EEK_INVALID_KEYCODE);
 | 
			
		||||
    return key->priv->keycode;
 | 
			
		||||
    return EEK_KEY_GET_CLASS(key)->get_keycode (key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -432,9 +537,7 @@ eek_key_set_symbol_matrix (EekKey          *key,
 | 
			
		||||
                           EekSymbolMatrix *matrix)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY(key));
 | 
			
		||||
 | 
			
		||||
    eek_symbol_matrix_free (key->priv->symbol_matrix);
 | 
			
		||||
    key->priv->symbol_matrix = eek_symbol_matrix_copy (matrix);
 | 
			
		||||
    EEK_KEY_GET_CLASS(key)->set_symbol_matrix (key, matrix);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -442,21 +545,21 @@ eek_key_set_symbol_matrix (EekKey          *key,
 | 
			
		||||
 * @key: an #EekKey
 | 
			
		||||
 *
 | 
			
		||||
 * Get the symbol matrix of @key.
 | 
			
		||||
 * Returns: (transfer none): #EekSymbolMatrix or %NULL
 | 
			
		||||
 * Returns: #EekSymbolMatrix or %NULL
 | 
			
		||||
 */
 | 
			
		||||
EekSymbolMatrix *
 | 
			
		||||
eek_key_get_symbol_matrix (EekKey *key)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEY(key), NULL);
 | 
			
		||||
    return key->priv->symbol_matrix;
 | 
			
		||||
    return EEK_KEY_GET_CLASS(key)->get_symbol_matrix (key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_key_get_symbol:
 | 
			
		||||
 * @key: an #EekKey
 | 
			
		||||
 * @returns: (transfer none): the current #EekSymbol or %NULL on failure
 | 
			
		||||
 *
 | 
			
		||||
 * Get the current symbol of @key.
 | 
			
		||||
 * Return value: (transfer none): the current #EekSymbol or %NULL on failure
 | 
			
		||||
 */
 | 
			
		||||
EekSymbol *
 | 
			
		||||
eek_key_get_symbol (EekKey *key)
 | 
			
		||||
@ -469,9 +572,9 @@ eek_key_get_symbol (EekKey *key)
 | 
			
		||||
 * @key: an #EekKey
 | 
			
		||||
 * @fallback_group: fallback group index
 | 
			
		||||
 * @fallback_level: fallback level index
 | 
			
		||||
 * @returns: (transfer none): the current #EekSymbol or %NULL on failure
 | 
			
		||||
 *
 | 
			
		||||
 * Get the current symbol of @key.
 | 
			
		||||
 * Return value: (transfer none): the current #EekSymbol or %NULL on failure
 | 
			
		||||
 */
 | 
			
		||||
EekSymbol *
 | 
			
		||||
eek_key_get_symbol_with_fallback (EekKey *key,
 | 
			
		||||
@ -525,9 +628,9 @@ eek_key_get_symbol_with_fallback (EekKey *key,
 | 
			
		||||
 * @level: level index of the symbol matrix
 | 
			
		||||
 * @fallback_group: fallback group index
 | 
			
		||||
 * @fallback_level: fallback level index
 | 
			
		||||
 * @returns: (transfer none): an #EekSymbol at (@group, @level), or %NULL
 | 
			
		||||
 *
 | 
			
		||||
 * Get the symbol at (@group, @level) in the symbol matrix of @key.
 | 
			
		||||
 * Return value: (transfer none): an #EekSymbol at (@group, @level), or %NULL
 | 
			
		||||
 */
 | 
			
		||||
EekSymbol *
 | 
			
		||||
eek_key_get_symbol_at_index (EekKey *key,
 | 
			
		||||
@ -585,24 +688,14 @@ eek_key_set_index (EekKey *key,
 | 
			
		||||
                   gint    row)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY(key));
 | 
			
		||||
    g_return_if_fail (0 <= column);
 | 
			
		||||
    g_return_if_fail (0 <= row);
 | 
			
		||||
 | 
			
		||||
    if (key->priv->column != column) {
 | 
			
		||||
        key->priv->column = column;
 | 
			
		||||
        g_object_notify (G_OBJECT(key), "column");
 | 
			
		||||
    }
 | 
			
		||||
    if (key->priv->row != row) {
 | 
			
		||||
        key->priv->row = row;
 | 
			
		||||
        g_object_notify (G_OBJECT(key), "row");
 | 
			
		||||
    }
 | 
			
		||||
    EEK_KEY_GET_CLASS(key)->set_index (key, column, row);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_key_get_index:
 | 
			
		||||
 * @key: an #EekKey
 | 
			
		||||
 * @column: (allow-none): pointer where the column index of @key in #EekSection will be stored
 | 
			
		||||
 * @row: (allow-none): pointer where the row index of @key in #EekSection will be stored
 | 
			
		||||
 * @column: pointer where the column index of @key in #EekSection will be stored
 | 
			
		||||
 * @row: pointer where the row index of @key in #EekSection will be stored
 | 
			
		||||
 *
 | 
			
		||||
 * Get the location of @key in #EekSection.
 | 
			
		||||
 */
 | 
			
		||||
@ -612,12 +705,7 @@ eek_key_get_index (EekKey *key,
 | 
			
		||||
                   gint   *row)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY(key));
 | 
			
		||||
    g_return_if_fail (column != NULL || row != NULL);
 | 
			
		||||
 | 
			
		||||
    if (column != NULL)
 | 
			
		||||
        *column = key->priv->column;
 | 
			
		||||
    if (row != NULL)
 | 
			
		||||
        *row = key->priv->row;
 | 
			
		||||
    EEK_KEY_GET_CLASS(key)->get_index (key, column, row);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -629,13 +717,10 @@ eek_key_get_index (EekKey *key,
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
eek_key_set_oref (EekKey *key,
 | 
			
		||||
                  guint   oref)
 | 
			
		||||
                  gulong  oref)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY(key));
 | 
			
		||||
    if (key->priv->oref != oref) {
 | 
			
		||||
        key->priv->oref = oref;
 | 
			
		||||
        g_object_notify (G_OBJECT(key), "oref");
 | 
			
		||||
    }
 | 
			
		||||
    EEK_KEY_GET_CLASS(key)->set_oref (key, oref);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -643,13 +728,13 @@ eek_key_set_oref (EekKey *key,
 | 
			
		||||
 * @key: an #EekKey
 | 
			
		||||
 *
 | 
			
		||||
 * Get the outline id of @key.
 | 
			
		||||
 * Returns: unsigned integer
 | 
			
		||||
 * Returns: a non-zero unsigned integer on success, 0 if the id is not set
 | 
			
		||||
 */
 | 
			
		||||
guint
 | 
			
		||||
gulong
 | 
			
		||||
eek_key_get_oref (EekKey *key)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEY (key), 0);
 | 
			
		||||
    return key->priv->oref;
 | 
			
		||||
    return EEK_KEY_GET_CLASS(key)->get_oref (key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -661,19 +746,6 @@ eek_key_get_oref (EekKey *key)
 | 
			
		||||
gboolean
 | 
			
		||||
eek_key_is_pressed (EekKey *key)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEY(key), FALSE);
 | 
			
		||||
    return key->priv->is_pressed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_key_is_locked:
 | 
			
		||||
 * @key: an #EekKey
 | 
			
		||||
 *
 | 
			
		||||
 * Return %TRUE if key is marked as locked.
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
eek_key_is_locked (EekKey *key)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEY(key), FALSE);
 | 
			
		||||
    return key->priv->is_locked;
 | 
			
		||||
    g_assert (EEK_IS_KEY(key));
 | 
			
		||||
    return EEK_KEY_GET_CLASS(key)->is_pressed (key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,6 @@
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
 * 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
 | 
			
		||||
#error "Only <eek/eek.h> can be included directly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef EEK_KEY_H
 | 
			
		||||
#define EEK_KEY_H 1
 | 
			
		||||
 | 
			
		||||
@ -40,12 +35,6 @@ G_BEGIN_DECLS
 | 
			
		||||
typedef struct _EekKeyClass EekKeyClass;
 | 
			
		||||
typedef struct _EekKeyPrivate EekKeyPrivate;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekKey:
 | 
			
		||||
 *
 | 
			
		||||
 * The #EekKey structure contains only private data and should only be
 | 
			
		||||
 * accessed using the provided API.
 | 
			
		||||
 */
 | 
			
		||||
struct _EekKey
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
@ -56,13 +45,19 @@ struct _EekKey
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekKeyClass:
 | 
			
		||||
 * @set_keycode: virtual function for setting keycode of the key
 | 
			
		||||
 * @get_keycode: virtual function for getting keycode of the key
 | 
			
		||||
 * @set_symbol_matrix: virtual function for setting symbol matrix of the key
 | 
			
		||||
 * @get_symbol_matrix: virtual function for getting symbol matrix of the key
 | 
			
		||||
 * @set_index: virtual function for setting position of the key in the
 | 
			
		||||
 * section
 | 
			
		||||
 * @get_index: virtual function for getting position of the key in the
 | 
			
		||||
 * section
 | 
			
		||||
 * @set_oref: virtual function for setting outline id of the key
 | 
			
		||||
 * @get_oref: virtual function for getting outline id of the key
 | 
			
		||||
 * @pressed: class handler for #EekKey::pressed signal
 | 
			
		||||
 * @released: class handler for #EekKey::released signal
 | 
			
		||||
 * @locked: class handler for #EekKey::locked signal
 | 
			
		||||
 * @unlocked: class handler for #EekKey::unlocked signal
 | 
			
		||||
 * @cancelled: class handler for #EekKey::cancelled signal
 | 
			
		||||
 * @is_pressed: virtual function for getting whether the key is pressed
 | 
			
		||||
 * @is_locked: virtual function for getting whether the key is locked
 | 
			
		||||
 */
 | 
			
		||||
struct _EekKeyClass
 | 
			
		||||
{
 | 
			
		||||
@ -70,12 +65,33 @@ struct _EekKeyClass
 | 
			
		||||
    EekElementClass parent_class;
 | 
			
		||||
 | 
			
		||||
    /*< public >*/
 | 
			
		||||
    void             (* set_keycode)       (EekKey          *self,
 | 
			
		||||
                                            guint            keycode);
 | 
			
		||||
    guint            (* get_keycode)       (EekKey          *self);
 | 
			
		||||
    void             (* set_symbol_matrix) (EekKey          *self,
 | 
			
		||||
                                            EekSymbolMatrix *matrix);
 | 
			
		||||
    EekSymbolMatrix *(* get_symbol_matrix) (EekKey          *self);
 | 
			
		||||
 | 
			
		||||
    void             (* set_index)         (EekKey          *self,
 | 
			
		||||
                                            gint             column,
 | 
			
		||||
                                            gint             row);
 | 
			
		||||
    void             (* get_index)         (EekKey          *self,
 | 
			
		||||
                                            gint            *column,
 | 
			
		||||
                                            gint            *row);
 | 
			
		||||
 | 
			
		||||
    void             (* set_oref)          (EekKey          *self,
 | 
			
		||||
                                            gulong           oref);
 | 
			
		||||
    gulong           (* get_oref)          (EekKey          *self);
 | 
			
		||||
 | 
			
		||||
    gboolean         (* is_pressed)        (EekKey          *self);
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
    void             (* pressed)           (EekKey          *key);
 | 
			
		||||
    void             (* released)          (EekKey          *key);
 | 
			
		||||
    void (* locked)    (EekKey *key);
 | 
			
		||||
    void (* unlocked)  (EekKey *key);
 | 
			
		||||
    void (* cancelled) (EekKey *key);
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* padding */
 | 
			
		||||
    gpointer pdummy[24];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType            eek_key_get_type            (void) G_GNUC_CONST;
 | 
			
		||||
@ -105,11 +121,10 @@ void             eek_key_get_index           (EekKey          *key,
 | 
			
		||||
                                              gint            *row);
 | 
			
		||||
 | 
			
		||||
void             eek_key_set_oref            (EekKey          *key,
 | 
			
		||||
                                              guint            oref);
 | 
			
		||||
guint            eek_key_get_oref            (EekKey          *key);
 | 
			
		||||
                                              gulong           oref);
 | 
			
		||||
gulong           eek_key_get_oref            (EekKey          *key);
 | 
			
		||||
 | 
			
		||||
gboolean         eek_key_is_pressed          (EekKey          *key);
 | 
			
		||||
gboolean         eek_key_is_locked           (EekKey          *key);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
#endif  /* EEK_KEY_H */
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@
 | 
			
		||||
#include "eek-section.h"
 | 
			
		||||
#include "eek-key.h"
 | 
			
		||||
#include "eek-symbol.h"
 | 
			
		||||
#include "eek-enumtypes.h"
 | 
			
		||||
#include "eek-serializable.h"
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
@ -47,48 +47,145 @@ enum {
 | 
			
		||||
enum {
 | 
			
		||||
    KEY_PRESSED,
 | 
			
		||||
    KEY_RELEASED,
 | 
			
		||||
    KEY_LOCKED,
 | 
			
		||||
    KEY_UNLOCKED,
 | 
			
		||||
    KEY_CANCELLED,
 | 
			
		||||
    LAST_SIGNAL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekKeyboard, eek_keyboard, EEK_TYPE_CONTAINER);
 | 
			
		||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE (EekKeyboard, eek_keyboard, EEK_TYPE_CONTAINER,
 | 
			
		||||
                         G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
 | 
			
		||||
                                                eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_KEYBOARD_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEYBOARD, EekKeyboardPrivate))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct _EekKeyboardPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekLayout *layout;
 | 
			
		||||
    EekModifierBehavior modifier_behavior;
 | 
			
		||||
    EekModifierType modifiers;
 | 
			
		||||
    GList *pressed_keys;
 | 
			
		||||
    GList *locked_keys;
 | 
			
		||||
    GArray *outline_array;
 | 
			
		||||
    GHashTable *keycodes;
 | 
			
		||||
 | 
			
		||||
    /* modifiers dynamically assigned at run time */
 | 
			
		||||
    EekModifierType num_lock_mask;
 | 
			
		||||
    EekModifierType alt_gr_mask;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_BOXED_TYPE(EekModifierKey, eek_modifier_key,
 | 
			
		||||
                    eek_modifier_key_copy, eek_modifier_key_free);
 | 
			
		||||
static EekSerializableIface *eek_keyboard_parent_serializable_iface;
 | 
			
		||||
 | 
			
		||||
EekModifierKey *
 | 
			
		||||
eek_modifier_key_copy (EekModifierKey *modkey)
 | 
			
		||||
static GVariant *_g_variant_new_outline (EekOutline *outline);
 | 
			
		||||
static EekOutline *_g_variant_get_outline (GVariant *variant);
 | 
			
		||||
 | 
			
		||||
static GVariant *
 | 
			
		||||
_g_variant_new_outline (EekOutline *outline)
 | 
			
		||||
{
 | 
			
		||||
    return g_slice_dup (EekModifierKey, modkey);
 | 
			
		||||
    GVariantBuilder builder, array;
 | 
			
		||||
    gint i;
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_init (&builder, G_VARIANT_TYPE ("(div)"));
 | 
			
		||||
    g_variant_builder_add (&builder, "d", outline->corner_radius);
 | 
			
		||||
    g_variant_builder_add (&builder, "i", outline->num_points);
 | 
			
		||||
    g_variant_builder_init (&array, G_VARIANT_TYPE ("a(dd)"));
 | 
			
		||||
    for (i = 0; i < outline->num_points; i++)
 | 
			
		||||
        g_variant_builder_add (&array,
 | 
			
		||||
                               "(dd)",
 | 
			
		||||
                               outline->points[i].x,
 | 
			
		||||
                               outline->points[i].y);
 | 
			
		||||
    g_variant_builder_add (&builder, "v", g_variant_builder_end (&array));
 | 
			
		||||
    return g_variant_builder_end (&builder);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
eek_modifier_key_free (EekModifierKey *modkey)
 | 
			
		||||
static EekOutline *
 | 
			
		||||
_g_variant_get_outline (GVariant *variant)
 | 
			
		||||
{
 | 
			
		||||
    g_object_unref (modkey->key);
 | 
			
		||||
    g_slice_free (EekModifierKey, modkey);
 | 
			
		||||
    EekOutline *outline;
 | 
			
		||||
    GVariant *array;
 | 
			
		||||
    GVariantIter iter;
 | 
			
		||||
    gdouble x, y;
 | 
			
		||||
    gint i;
 | 
			
		||||
 | 
			
		||||
    outline = g_slice_new0 (EekOutline);
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, 0, "d", &outline->corner_radius);
 | 
			
		||||
    g_variant_get_child (variant, 1, "i", &outline->num_points);
 | 
			
		||||
 | 
			
		||||
    outline->points = g_slice_alloc0 (sizeof (EekPoint) * outline->num_points);
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, 2, "v", &array);
 | 
			
		||||
    g_variant_iter_init (&iter, array);
 | 
			
		||||
    for (i = 0; i < outline->num_points; i++) {
 | 
			
		||||
        if (!g_variant_iter_next (&iter, "(dd)", &x, &y)) {
 | 
			
		||||
            eek_outline_free (outline);
 | 
			
		||||
            g_return_val_if_reached (NULL);
 | 
			
		||||
        }
 | 
			
		||||
        outline->points[i].x = x;
 | 
			
		||||
        outline->points[i].y = y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return outline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_keyboard_real_serialize (EekSerializable *self,
 | 
			
		||||
                             GVariantBuilder *builder)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    GVariantBuilder array;
 | 
			
		||||
    guint i;
 | 
			
		||||
 | 
			
		||||
    eek_keyboard_parent_serializable_iface->serialize (self, builder);
 | 
			
		||||
 | 
			
		||||
    g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
 | 
			
		||||
    for (i = 0; i < priv->outline_array->len; i++) {
 | 
			
		||||
        EekOutline *outline =
 | 
			
		||||
            eek_keyboard_get_outline (EEK_KEYBOARD(self), i + 1);
 | 
			
		||||
        g_variant_builder_add (&array, "v",
 | 
			
		||||
                               _g_variant_new_outline (outline));
 | 
			
		||||
    }
 | 
			
		||||
    g_variant_builder_add (builder, "v", g_variant_builder_end (&array));
 | 
			
		||||
    g_variant_builder_add (builder, "u", priv->num_lock_mask);
 | 
			
		||||
    g_variant_builder_add (builder, "u", priv->alt_gr_mask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gsize
 | 
			
		||||
eek_keyboard_real_deserialize (EekSerializable *self,
 | 
			
		||||
                               GVariant        *variant,
 | 
			
		||||
                               gsize            index)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    GVariant *array, *outline;
 | 
			
		||||
    GVariantIter iter;
 | 
			
		||||
 | 
			
		||||
    index = eek_keyboard_parent_serializable_iface->deserialize (self,
 | 
			
		||||
                                                                 variant,
 | 
			
		||||
                                                                 index);
 | 
			
		||||
 | 
			
		||||
    g_variant_get_child (variant, index++, "v", &array);
 | 
			
		||||
 | 
			
		||||
    g_variant_iter_init (&iter, array);
 | 
			
		||||
    while (g_variant_iter_next (&iter, "v", &outline)) {
 | 
			
		||||
        EekOutline *_outline = _g_variant_get_outline (outline);
 | 
			
		||||
        g_array_append_val (priv->outline_array, *_outline);
 | 
			
		||||
        /* don't use eek_outline_free here, so as to keep _outline->points */
 | 
			
		||||
        g_slice_free (EekOutline, _outline);
 | 
			
		||||
    }
 | 
			
		||||
    g_variant_get_child (variant, index++, "u", &priv->num_lock_mask);
 | 
			
		||||
    g_variant_get_child (variant, index++, "u", &priv->alt_gr_mask);
 | 
			
		||||
 | 
			
		||||
    return index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_serializable_iface_init (EekSerializableIface *iface)
 | 
			
		||||
{
 | 
			
		||||
    eek_keyboard_parent_serializable_iface =
 | 
			
		||||
        g_type_interface_peek_parent (iface);
 | 
			
		||||
 | 
			
		||||
    iface->serialize = eek_keyboard_real_serialize;
 | 
			
		||||
    iface->deserialize = eek_keyboard_real_deserialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -96,7 +193,7 @@ on_key_pressed (EekSection  *section,
 | 
			
		||||
                EekKey      *key,
 | 
			
		||||
                EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_signal_emit (keyboard, signals[KEY_PRESSED], 0, key);
 | 
			
		||||
    g_signal_emit_by_name (keyboard, "key-pressed", key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -104,31 +201,7 @@ on_key_released (EekSection  *section,
 | 
			
		||||
                 EekKey      *key,
 | 
			
		||||
                 EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_signal_emit (keyboard, signals[KEY_RELEASED], 0, key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_locked (EekSection  *section,
 | 
			
		||||
                EekKey      *key,
 | 
			
		||||
                EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_signal_emit (keyboard, signals[KEY_LOCKED], 0, key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_unlocked (EekSection  *section,
 | 
			
		||||
                 EekKey      *key,
 | 
			
		||||
                 EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_signal_emit (keyboard, signals[KEY_UNLOCKED], 0, key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_cancelled (EekSection  *section,
 | 
			
		||||
                 EekKey      *key,
 | 
			
		||||
                 EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_signal_emit (keyboard, signals[KEY_CANCELLED], 0, key);
 | 
			
		||||
    g_signal_emit_by_name (keyboard, "key-released", key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -140,27 +213,6 @@ on_symbol_index_changed (EekSection *section,
 | 
			
		||||
    g_signal_emit_by_name (keyboard, "symbol-index-changed", group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
section_child_added_cb (EekContainer *container,
 | 
			
		||||
                        EekElement   *element,
 | 
			
		||||
                        EekKeyboard  *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    guint keycode = eek_key_get_keycode (EEK_KEY(element));
 | 
			
		||||
    g_hash_table_insert (keyboard->priv->keycodes,
 | 
			
		||||
                         GUINT_TO_POINTER(keycode),
 | 
			
		||||
                         element);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
section_child_removed_cb (EekContainer *container,
 | 
			
		||||
                          EekElement   *element,
 | 
			
		||||
                          EekKeyboard  *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    guint keycode = eek_key_get_keycode (EEK_KEY(element));
 | 
			
		||||
    g_hash_table_remove (keyboard->priv->keycodes,
 | 
			
		||||
                         GUINT_TO_POINTER(keycode));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekSection *
 | 
			
		||||
eek_keyboard_real_create_section (EekKeyboard *self)
 | 
			
		||||
{
 | 
			
		||||
@ -169,17 +221,43 @@ eek_keyboard_real_create_section (EekKeyboard *self)
 | 
			
		||||
    section = g_object_new (EEK_TYPE_SECTION, NULL);
 | 
			
		||||
    g_return_val_if_fail (section, NULL);
 | 
			
		||||
 | 
			
		||||
    g_signal_connect (G_OBJECT(section), "child-added",
 | 
			
		||||
                      G_CALLBACK(section_child_added_cb), self);
 | 
			
		||||
 | 
			
		||||
    g_signal_connect (G_OBJECT(section), "child-removed",
 | 
			
		||||
                      G_CALLBACK(section_child_removed_cb), self);
 | 
			
		||||
 | 
			
		||||
    EEK_CONTAINER_GET_CLASS(self)->add_child (EEK_CONTAINER(self),
 | 
			
		||||
                                              EEK_ELEMENT(section));
 | 
			
		||||
    return section;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct _FindKeyByKeycodeCallbackData {
 | 
			
		||||
    EekKey *key;
 | 
			
		||||
    guint keycode;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _FindKeyByKeycodeCallbackData FindKeyByKeycodeCallbackData;
 | 
			
		||||
 | 
			
		||||
static gint
 | 
			
		||||
find_key_by_keycode_section_callback (EekElement *element, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    FindKeyByKeycodeCallbackData *data = user_data;
 | 
			
		||||
 | 
			
		||||
    data->key = eek_section_find_key_by_keycode (EEK_SECTION(element),
 | 
			
		||||
                                                 data->keycode);
 | 
			
		||||
    if (data->key)
 | 
			
		||||
        return 0;
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekKey *
 | 
			
		||||
eek_keyboard_real_find_key_by_keycode (EekKeyboard *self,
 | 
			
		||||
                                       guint        keycode)
 | 
			
		||||
{
 | 
			
		||||
    FindKeyByKeycodeCallbackData data;
 | 
			
		||||
 | 
			
		||||
    data.keycode = keycode;
 | 
			
		||||
    if (eek_container_find (EEK_CONTAINER(self),
 | 
			
		||||
                            find_key_by_keycode_section_callback,
 | 
			
		||||
                            &data))
 | 
			
		||||
        return data.key;
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_keyboard_set_property (GObject      *object,
 | 
			
		||||
                           guint         prop_id,
 | 
			
		||||
@ -196,10 +274,12 @@ eek_keyboard_set_property (GObject      *object,
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_MODIFIER_BEHAVIOR:
 | 
			
		||||
        eek_keyboard_set_modifier_behavior (EEK_KEYBOARD(object),
 | 
			
		||||
                                            g_value_get_enum (value));
 | 
			
		||||
                                            g_value_get_int (value));
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        g_object_set_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -217,11 +297,13 @@ eek_keyboard_get_property (GObject    *object,
 | 
			
		||||
        g_value_set_object (value, priv->layout);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_MODIFIER_BEHAVIOR:
 | 
			
		||||
        g_value_set_enum (value,
 | 
			
		||||
        g_value_set_int (value,
 | 
			
		||||
                         eek_keyboard_get_modifier_behavior (EEK_KEYBOARD(object)));
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
        g_object_get_property (object,
 | 
			
		||||
                               g_param_spec_get_name (pspec),
 | 
			
		||||
                               value);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -239,45 +321,6 @@ set_level_from_modifiers (EekKeyboard *self)
 | 
			
		||||
    eek_element_set_level (EEK_ELEMENT(self), level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_modifiers_with_key (EekKeyboard    *self,
 | 
			
		||||
                        EekKey         *key,
 | 
			
		||||
                        EekModifierType modifiers)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    EekModifierType enabled = (priv->modifiers ^ modifiers) & modifiers;
 | 
			
		||||
    EekModifierType disabled = (priv->modifiers ^ modifiers) & priv->modifiers;
 | 
			
		||||
 | 
			
		||||
    if (enabled != 0) {
 | 
			
		||||
        if (priv->modifier_behavior != EEK_MODIFIER_BEHAVIOR_NONE) {
 | 
			
		||||
            EekModifierKey *modifier_key = g_slice_new (EekModifierKey);
 | 
			
		||||
            modifier_key->modifiers = enabled;
 | 
			
		||||
            modifier_key->key = g_object_ref (key);
 | 
			
		||||
            priv->locked_keys =
 | 
			
		||||
                g_list_prepend (priv->locked_keys, modifier_key);
 | 
			
		||||
            g_signal_emit_by_name (modifier_key->key, "locked");
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (priv->modifier_behavior != EEK_MODIFIER_BEHAVIOR_NONE) {
 | 
			
		||||
            GList *head;
 | 
			
		||||
            for (head = priv->locked_keys; head; ) {
 | 
			
		||||
                EekModifierKey *modifier_key = head->data;
 | 
			
		||||
                if (modifier_key->modifiers & disabled) {
 | 
			
		||||
                    GList *next = g_list_next (head);
 | 
			
		||||
                    priv->locked_keys =
 | 
			
		||||
                        g_list_remove_link (priv->locked_keys, head);
 | 
			
		||||
                    g_signal_emit_by_name (modifier_key->key, "unlocked");
 | 
			
		||||
                    g_list_free1 (head);
 | 
			
		||||
                    head = next;
 | 
			
		||||
                } else
 | 
			
		||||
                    head = g_list_next (head);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    priv->modifiers = modifiers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_keyboard_real_key_pressed (EekKeyboard *self,
 | 
			
		||||
                               EekKey      *key)
 | 
			
		||||
@ -286,15 +329,13 @@ eek_keyboard_real_key_pressed (EekKeyboard *self,
 | 
			
		||||
    EekSymbol *symbol;
 | 
			
		||||
    EekModifierType modifier;
 | 
			
		||||
 | 
			
		||||
    priv->pressed_keys = g_list_prepend (priv->pressed_keys, key);
 | 
			
		||||
 | 
			
		||||
    symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
			
		||||
    if (!symbol)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    modifier = eek_symbol_get_modifier_mask (symbol);
 | 
			
		||||
    if (priv->modifier_behavior == EEK_MODIFIER_BEHAVIOR_NONE) {
 | 
			
		||||
        set_modifiers_with_key (self, key, priv->modifiers | modifier);
 | 
			
		||||
        priv->modifiers |= modifier;
 | 
			
		||||
        set_level_from_modifiers (self);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -307,8 +348,6 @@ eek_keyboard_real_key_released (EekKeyboard *self,
 | 
			
		||||
    EekSymbol *symbol;
 | 
			
		||||
    EekModifierType modifier;
 | 
			
		||||
 | 
			
		||||
    EEK_KEYBOARD_GET_CLASS (self)->key_cancelled (self, key);
 | 
			
		||||
 | 
			
		||||
    symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
			
		||||
    if (!symbol)
 | 
			
		||||
        return;
 | 
			
		||||
@ -316,38 +355,21 @@ eek_keyboard_real_key_released (EekKeyboard *self,
 | 
			
		||||
    modifier = eek_symbol_get_modifier_mask (symbol);
 | 
			
		||||
    switch (priv->modifier_behavior) {
 | 
			
		||||
    case EEK_MODIFIER_BEHAVIOR_NONE:
 | 
			
		||||
        set_modifiers_with_key (self, key, priv->modifiers & ~modifier);
 | 
			
		||||
        priv->modifiers &= ~modifier;
 | 
			
		||||
        break;
 | 
			
		||||
    case EEK_MODIFIER_BEHAVIOR_LOCK:
 | 
			
		||||
        priv->modifiers ^= modifier;
 | 
			
		||||
        break;
 | 
			
		||||
    case EEK_MODIFIER_BEHAVIOR_LATCH:
 | 
			
		||||
        if (modifier)
 | 
			
		||||
            set_modifiers_with_key (self, key, priv->modifiers ^ modifier);
 | 
			
		||||
        if (modifier == priv->alt_gr_mask || modifier == EEK_SHIFT_MASK)
 | 
			
		||||
            priv->modifiers ^= modifier;
 | 
			
		||||
        else
 | 
			
		||||
            set_modifiers_with_key (self, key,
 | 
			
		||||
                                    (priv->modifiers ^ modifier) & modifier);
 | 
			
		||||
            priv->modifiers = (priv->modifiers ^ modifier) & modifier;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    set_level_from_modifiers (self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_keyboard_real_key_cancelled (EekKeyboard *self,
 | 
			
		||||
                                 EekKey      *key)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
 | 
			
		||||
    for (head = priv->pressed_keys; head; head = g_list_next (head)) {
 | 
			
		||||
        if (head->data == key) {
 | 
			
		||||
            priv->pressed_keys = g_list_remove_link (priv->pressed_keys, head);
 | 
			
		||||
            g_list_free1 (head);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_keyboard_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
@ -367,12 +389,6 @@ eek_keyboard_finalize (GObject *object)
 | 
			
		||||
    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(object);
 | 
			
		||||
    gint i;
 | 
			
		||||
 | 
			
		||||
    g_list_free (priv->pressed_keys);
 | 
			
		||||
    g_list_free_full (priv->locked_keys,
 | 
			
		||||
                      (GDestroyNotify) eek_modifier_key_free);
 | 
			
		||||
 | 
			
		||||
    g_hash_table_destroy (priv->keycodes);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < priv->outline_array->len; i++) {
 | 
			
		||||
        EekOutline *outline = &g_array_index (priv->outline_array,
 | 
			
		||||
                                              EekOutline,
 | 
			
		||||
@ -393,12 +409,6 @@ eek_keyboard_real_child_added (EekContainer *self,
 | 
			
		||||
                      G_CALLBACK(on_key_pressed), self);
 | 
			
		||||
    g_signal_connect (element, "key-released",
 | 
			
		||||
                      G_CALLBACK(on_key_released), self);
 | 
			
		||||
    g_signal_connect (element, "key-locked",
 | 
			
		||||
                      G_CALLBACK(on_key_locked), self);
 | 
			
		||||
    g_signal_connect (element, "key-unlocked",
 | 
			
		||||
                      G_CALLBACK(on_key_unlocked), self);
 | 
			
		||||
    g_signal_connect (element, "key-cancelled",
 | 
			
		||||
                      G_CALLBACK(on_key_cancelled), self);
 | 
			
		||||
    g_signal_connect (element, "symbol-index-changed",
 | 
			
		||||
                      G_CALLBACK(on_symbol_index_changed), self);
 | 
			
		||||
}
 | 
			
		||||
@ -409,9 +419,6 @@ eek_keyboard_real_child_removed (EekContainer *self,
 | 
			
		||||
{
 | 
			
		||||
    g_signal_handlers_disconnect_by_func (element, on_key_pressed, self);
 | 
			
		||||
    g_signal_handlers_disconnect_by_func (element, on_key_released, self);
 | 
			
		||||
    g_signal_handlers_disconnect_by_func (element, on_key_locked, self);
 | 
			
		||||
    g_signal_handlers_disconnect_by_func (element, on_key_unlocked, self);
 | 
			
		||||
    g_signal_handlers_disconnect_by_func (element, on_key_cancelled, self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -425,11 +432,11 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
 | 
			
		||||
                              sizeof (EekKeyboardPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->create_section = eek_keyboard_real_create_section;
 | 
			
		||||
    klass->find_key_by_keycode = eek_keyboard_real_find_key_by_keycode;
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
    klass->key_pressed = eek_keyboard_real_key_pressed;
 | 
			
		||||
    klass->key_released = eek_keyboard_real_key_released;
 | 
			
		||||
    klass->key_cancelled = eek_keyboard_real_key_cancelled;
 | 
			
		||||
 | 
			
		||||
    container_class->child_added = eek_keyboard_real_child_added;
 | 
			
		||||
    container_class->child_removed = eek_keyboard_real_child_removed;
 | 
			
		||||
@ -458,11 +465,10 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
 | 
			
		||||
     *
 | 
			
		||||
     * The modifier handling mode of #EekKeyboard.
 | 
			
		||||
     */
 | 
			
		||||
    pspec = g_param_spec_enum ("modifier-behavior",
 | 
			
		||||
    pspec = g_param_spec_int ("modifier-behavior",
 | 
			
		||||
                              "Modifier behavior",
 | 
			
		||||
                              "Modifier handling mode of the keyboard",
 | 
			
		||||
                               EEK_TYPE_MODIFIER_BEHAVIOR,
 | 
			
		||||
                               EEK_MODIFIER_BEHAVIOR_NONE,
 | 
			
		||||
                              0, G_MAXINT, EEK_MODIFIER_BEHAVIOR_NONE,
 | 
			
		||||
                              G_PARAM_READWRITE);
 | 
			
		||||
    g_object_class_install_property (gobject_class,
 | 
			
		||||
                                     PROP_MODIFIER_BEHAVIOR,
 | 
			
		||||
@ -507,78 +513,130 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
 | 
			
		||||
                      G_TYPE_NONE,
 | 
			
		||||
                      1,
 | 
			
		||||
                      EEK_TYPE_KEY);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKeyboard::key-locked:
 | 
			
		||||
     * @keyboard: an #EekKeyboard
 | 
			
		||||
     * @key: an #EekKey
 | 
			
		||||
     *
 | 
			
		||||
     * The ::key-locked signal is emitted each time a key in @keyboard
 | 
			
		||||
     * is shifted to the locked state.
 | 
			
		||||
     */
 | 
			
		||||
    signals[KEY_LOCKED] =
 | 
			
		||||
        g_signal_new (I_("key-locked"),
 | 
			
		||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
			
		||||
                      G_SIGNAL_RUN_LAST,
 | 
			
		||||
                      G_STRUCT_OFFSET(EekKeyboardClass, key_locked),
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__OBJECT,
 | 
			
		||||
                      G_TYPE_NONE,
 | 
			
		||||
                      1,
 | 
			
		||||
                      EEK_TYPE_KEY);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKeyboard::key-unlocked:
 | 
			
		||||
     * @keyboard: an #EekKeyboard
 | 
			
		||||
     * @key: an #EekKey
 | 
			
		||||
     *
 | 
			
		||||
     * The ::key-unlocked signal is emitted each time a key in @keyboard
 | 
			
		||||
     * is shifted to the unlocked state.
 | 
			
		||||
     */
 | 
			
		||||
    signals[KEY_UNLOCKED] =
 | 
			
		||||
        g_signal_new (I_("key-unlocked"),
 | 
			
		||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
			
		||||
                      G_SIGNAL_RUN_LAST,
 | 
			
		||||
                      G_STRUCT_OFFSET(EekKeyboardClass, key_unlocked),
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__OBJECT,
 | 
			
		||||
                      G_TYPE_NONE,
 | 
			
		||||
                      1,
 | 
			
		||||
                      EEK_TYPE_KEY);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * EekKeyboard::key-cancelled:
 | 
			
		||||
     * @keyboard: an #EekKeyboard
 | 
			
		||||
     * @key: an #EekKey
 | 
			
		||||
     *
 | 
			
		||||
     * The ::key-cancelled signal is emitted each time a key in @keyboard
 | 
			
		||||
     * is shifted to the cancelled state.
 | 
			
		||||
     */
 | 
			
		||||
    signals[KEY_CANCELLED] =
 | 
			
		||||
        g_signal_new (I_("key-cancelled"),
 | 
			
		||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
			
		||||
                      G_SIGNAL_RUN_LAST,
 | 
			
		||||
                      G_STRUCT_OFFSET(EekKeyboardClass, key_cancelled),
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      NULL,
 | 
			
		||||
                      g_cclosure_marshal_VOID__OBJECT,
 | 
			
		||||
                      G_TYPE_NONE,
 | 
			
		||||
                      1,
 | 
			
		||||
                      EEK_TYPE_KEY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_keyboard_init (EekKeyboard *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    self->priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_NONE;
 | 
			
		||||
    self->priv->outline_array = g_array_new (FALSE, TRUE, sizeof (EekOutline));
 | 
			
		||||
    self->priv->keycodes = g_hash_table_new (g_direct_hash, g_direct_equal);
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    priv->layout = NULL;
 | 
			
		||||
    priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_NONE;
 | 
			
		||||
    priv->modifiers = 0;
 | 
			
		||||
    priv->outline_array = g_array_new (FALSE, TRUE, sizeof (EekOutline));
 | 
			
		||||
    priv->num_lock_mask = 0;
 | 
			
		||||
    eek_element_set_symbol_index (EEK_ELEMENT(self), 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_set_symbol_index:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @group: row index of the symbol matrix of keys on @keyboard
 | 
			
		||||
 * @level: column index of the symbol matrix of keys on @keyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Set the default index of the symbol matrices of keys in @keyboard.
 | 
			
		||||
 * To unset, pass -1 as group/level.
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.0: Use eek_element_set_symbol_index()
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
eek_keyboard_set_symbol_index (EekKeyboard *keyboard,
 | 
			
		||||
                               gint         group,
 | 
			
		||||
                               gint         level)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    eek_element_set_symbol_index (EEK_ELEMENT(keyboard), group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_symbol_index:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @group: a pointer where the group value of the symbol index will be stored
 | 
			
		||||
 * @level: a pointer where the level value of the symbol index will be stored
 | 
			
		||||
 *
 | 
			
		||||
 * Get the default index of the symbol matrices of keys in @keyboard.
 | 
			
		||||
 * If the index is not set, -1 will be returned.
 | 
			
		||||
 *
 | 
			
		||||
 * Deprecated: 1.0: Use eek_element_get_symbol_index()
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
eek_keyboard_get_symbol_index (EekKeyboard *keyboard,
 | 
			
		||||
                               gint        *group,
 | 
			
		||||
                               gint        *level)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    eek_element_get_symbol_index(EEK_ELEMENT(keyboard), group, level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_set_group:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @group: group index of @keyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Set the group value of the default symbol index of @keyboard.  To
 | 
			
		||||
 * unset, pass -1 as @group.
 | 
			
		||||
 *
 | 
			
		||||
 * See also: eek_keyboard_set_symbol_index()
 | 
			
		||||
 * Deprecated: 1.0: Use eek_element_set_group()
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
eek_keyboard_set_group (EekKeyboard *keyboard,
 | 
			
		||||
                        gint         group)
 | 
			
		||||
{
 | 
			
		||||
    eek_element_set_group (EEK_ELEMENT(keyboard), group);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_set_level:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @level: level index of @keyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Set the level value of the default symbol index of @keyboard.  To
 | 
			
		||||
 * unset, pass -1 as @level.
 | 
			
		||||
 *
 | 
			
		||||
 * See also: eek_keyboard_set_symbol_index()
 | 
			
		||||
 * Deprecated: 1.0: Use eek_element_set_level()
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
eek_keyboard_set_level (EekKeyboard *keyboard,
 | 
			
		||||
                        gint         level)
 | 
			
		||||
{
 | 
			
		||||
    eek_element_set_level (EEK_ELEMENT(keyboard), level);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_group:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Return the group value of the default symbol index of @keyboard.
 | 
			
		||||
 * If the value is not set, -1 will be returned.
 | 
			
		||||
 *
 | 
			
		||||
 * See also: eek_keyboard_get_symbol_index()
 | 
			
		||||
 * Deprecated: 1.0: Use eek_element_get_group()
 | 
			
		||||
 */
 | 
			
		||||
gint
 | 
			
		||||
eek_keyboard_get_group (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    return eek_element_get_group (EEK_ELEMENT(keyboard));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_level:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Return the level value of the default symbol index of @keyboard.
 | 
			
		||||
 * If the value is not set, -1 will be returned.
 | 
			
		||||
 *
 | 
			
		||||
 * See also: eek_keyboard_get_symbol_index()
 | 
			
		||||
 * Deprecated: 1.0: Use eek_element_get_level()
 | 
			
		||||
 */
 | 
			
		||||
gint
 | 
			
		||||
eek_keyboard_get_level (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    return eek_element_get_level (EEK_ELEMENT(keyboard));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_create_section:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
@ -590,25 +648,27 @@ eek_keyboard_init (EekKeyboard *self)
 | 
			
		||||
EekSection *
 | 
			
		||||
eek_keyboard_create_section (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    EekSection *section;
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    return EEK_KEYBOARD_GET_CLASS(keyboard)->create_section (keyboard);
 | 
			
		||||
    section = EEK_KEYBOARD_GET_CLASS(keyboard)->create_section (keyboard);
 | 
			
		||||
    return section;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_find_key_by_keycode:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @keycode: a keycode
 | 
			
		||||
 * @returns: (transfer none): #EekKey whose keycode is @keycode
 | 
			
		||||
 *
 | 
			
		||||
 * Find an #EekKey whose keycode is @keycode.
 | 
			
		||||
 * Return value: (transfer none): #EekKey whose keycode is @keycode
 | 
			
		||||
 */
 | 
			
		||||
EekKey *
 | 
			
		||||
eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard,
 | 
			
		||||
                                  guint        keycode)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    return g_hash_table_lookup (keyboard->priv->keycodes,
 | 
			
		||||
                                GUINT_TO_POINTER(keycode));
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    return EEK_KEYBOARD_GET_CLASS(keyboard)->
 | 
			
		||||
        find_key_by_keycode (keyboard, keycode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -621,8 +681,11 @@ eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard,
 | 
			
		||||
EekLayout *
 | 
			
		||||
eek_keyboard_get_layout (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    return keyboard->priv->layout;
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
    return priv->layout;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -640,6 +703,7 @@ eek_keyboard_get_size (EekKeyboard *keyboard,
 | 
			
		||||
{
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
 | 
			
		||||
    *width = bounds.width;
 | 
			
		||||
    *height = bounds.height;
 | 
			
		||||
@ -656,8 +720,12 @@ void
 | 
			
		||||
eek_keyboard_set_modifier_behavior (EekKeyboard        *keyboard,
 | 
			
		||||
                                    EekModifierBehavior modifier_behavior)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    keyboard->priv->modifier_behavior = modifier_behavior;
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    priv->modifier_behavior = modifier_behavior;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -670,17 +738,12 @@ eek_keyboard_set_modifier_behavior (EekKeyboard        *keyboard,
 | 
			
		||||
EekModifierBehavior
 | 
			
		||||
eek_keyboard_get_modifier_behavior (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), 0);
 | 
			
		||||
    return keyboard->priv->modifier_behavior;
 | 
			
		||||
}
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
eek_keyboard_set_modifiers (EekKeyboard    *keyboard,
 | 
			
		||||
                            EekModifierType modifiers)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    keyboard->priv->modifiers = modifiers;
 | 
			
		||||
    set_level_from_modifiers (keyboard);
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    return priv->modifier_behavior;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -693,8 +756,12 @@ eek_keyboard_set_modifiers (EekKeyboard    *keyboard,
 | 
			
		||||
EekModifierType
 | 
			
		||||
eek_keyboard_get_modifiers (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), 0);
 | 
			
		||||
    return keyboard->priv->modifiers;
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    return priv->modifiers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -703,56 +770,46 @@ eek_keyboard_get_modifiers (EekKeyboard *keyboard)
 | 
			
		||||
 * @outline: an #EekOutline
 | 
			
		||||
 *
 | 
			
		||||
 * Register an outline of @keyboard.
 | 
			
		||||
 * Returns: an unsigned integer ID of the registered outline, for
 | 
			
		||||
 * later reference
 | 
			
		||||
 * Returns: an unsigned long id of the registered outline, for later reference
 | 
			
		||||
 */
 | 
			
		||||
guint
 | 
			
		||||
gulong
 | 
			
		||||
eek_keyboard_add_outline (EekKeyboard *keyboard,
 | 
			
		||||
                          EekOutline  *outline)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
    EekOutline *_outline;
 | 
			
		||||
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), 0);
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    _outline = eek_outline_copy (outline);
 | 
			
		||||
    g_array_append_val (keyboard->priv->outline_array, *_outline);
 | 
			
		||||
    g_array_append_val (priv->outline_array, *_outline);
 | 
			
		||||
    /* don't use eek_outline_free here, so as to keep _outline->points */
 | 
			
		||||
    g_slice_free (EekOutline, _outline);
 | 
			
		||||
    return keyboard->priv->outline_array->len - 1;
 | 
			
		||||
    return priv->outline_array->len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_outline:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @oref: ID of the outline
 | 
			
		||||
 * @oref: an unsigned long id
 | 
			
		||||
 *
 | 
			
		||||
 * Get an outline associated with @oref in @keyboard.
 | 
			
		||||
 * Returns: an #EekOutline, which should not be released
 | 
			
		||||
 */
 | 
			
		||||
EekOutline *
 | 
			
		||||
eek_keyboard_get_outline (EekKeyboard *keyboard,
 | 
			
		||||
                          guint        oref)
 | 
			
		||||
                          gulong oref)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    if (oref > keyboard->priv->outline_array->len)
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    if (oref > priv->outline_array->len)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    return &g_array_index (keyboard->priv->outline_array, EekOutline, oref);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_n_outlines:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Get the number of outlines defined in @keyboard.
 | 
			
		||||
 * Returns: integer
 | 
			
		||||
 */
 | 
			
		||||
gsize
 | 
			
		||||
eek_keyboard_get_n_outlines (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), 0);
 | 
			
		||||
    return keyboard->priv->outline_array->len;
 | 
			
		||||
    return &g_array_index (priv->outline_array, EekOutline, oref - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -766,8 +823,12 @@ void
 | 
			
		||||
eek_keyboard_set_num_lock_mask (EekKeyboard    *keyboard,
 | 
			
		||||
                                EekModifierType num_lock_mask)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    keyboard->priv->num_lock_mask = num_lock_mask;
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    priv->num_lock_mask = num_lock_mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -780,8 +841,12 @@ eek_keyboard_set_num_lock_mask (EekKeyboard    *keyboard,
 | 
			
		||||
EekModifierType
 | 
			
		||||
eek_keyboard_get_num_lock_mask (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), 0);
 | 
			
		||||
    return keyboard->priv->num_lock_mask;
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    return priv->num_lock_mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -795,8 +860,12 @@ void
 | 
			
		||||
eek_keyboard_set_alt_gr_mask (EekKeyboard    *keyboard,
 | 
			
		||||
                              EekModifierType alt_gr_mask)
 | 
			
		||||
{
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    keyboard->priv->alt_gr_mask = alt_gr_mask;
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
    priv->alt_gr_mask = alt_gr_mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -809,36 +878,10 @@ eek_keyboard_set_alt_gr_mask (EekKeyboard    *keyboard,
 | 
			
		||||
EekModifierType
 | 
			
		||||
eek_keyboard_get_alt_gr_mask (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), 0);
 | 
			
		||||
    return keyboard->priv->alt_gr_mask;
 | 
			
		||||
}
 | 
			
		||||
    EekKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_pressed_keys:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Get pressed keys.
 | 
			
		||||
 * Returns: (transfer container) (element-type EekKey): A list of
 | 
			
		||||
 * pressed keys.
 | 
			
		||||
 */
 | 
			
		||||
GList *
 | 
			
		||||
eek_keyboard_get_pressed_keys (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    return g_list_copy (keyboard->priv->pressed_keys);
 | 
			
		||||
}
 | 
			
		||||
    g_assert (EEK_IS_KEYBOARD(keyboard));
 | 
			
		||||
    priv = EEK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_get_locked_keys:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 *
 | 
			
		||||
 * Get locked keys.
 | 
			
		||||
 * Returns: (transfer container) (element-type EekModifierKey): A list
 | 
			
		||||
 * of locked keys.
 | 
			
		||||
 */
 | 
			
		||||
GList *
 | 
			
		||||
eek_keyboard_get_locked_keys (EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    return g_list_copy (keyboard->priv->locked_keys);
 | 
			
		||||
    return priv->alt_gr_mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user