Compare commits
	
		
			22 Commits
		
	
	
		
			eekboard-1
			...
			minX11rm
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| be7154f287 | |||
| e212262f29 | |||
| c71167d893 | |||
| 2d4e4c7a13 | |||
| 695f8df5b8 | |||
| 2e822cb6a6 | |||
| f2a90935a3 | |||
| cee741eca0 | |||
| b5b59e77d6 | |||
| cce883808e | |||
| 8faae7ef08 | |||
| 4538ef38a1 | |||
| ee12d02402 | |||
| 7050fa41a0 | |||
| 4a346211b8 | |||
| 4df2ecc8ae | |||
| 03995ec6b2 | |||
| 6059146b42 | |||
| 30811ae656 | |||
| b8015bbef5 | |||
| 157d7c57fd | |||
| 03963036d1 | 
							
								
								
									
										84
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										84
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,84 +0,0 @@
 | 
				
			|||||||
*.la
 | 
					 | 
				
			||||||
*.lo
 | 
					 | 
				
			||||||
*.loT
 | 
					 | 
				
			||||||
*.o
 | 
					 | 
				
			||||||
*.so
 | 
					 | 
				
			||||||
*~
 | 
					 | 
				
			||||||
*.pyc
 | 
					 | 
				
			||||||
Makefile
 | 
					 | 
				
			||||||
Makefile.in
 | 
					 | 
				
			||||||
.deps
 | 
					 | 
				
			||||||
.libs
 | 
					 | 
				
			||||||
INSTALL
 | 
					 | 
				
			||||||
aclocal.m4
 | 
					 | 
				
			||||||
autom4te.cache
 | 
					 | 
				
			||||||
compile
 | 
					 | 
				
			||||||
config.guess
 | 
					 | 
				
			||||||
config.h
 | 
					 | 
				
			||||||
config.h.in
 | 
					 | 
				
			||||||
config.log
 | 
					 | 
				
			||||||
config.rpath
 | 
					 | 
				
			||||||
config.status
 | 
					 | 
				
			||||||
config.sub
 | 
					 | 
				
			||||||
configure
 | 
					 | 
				
			||||||
depcomp
 | 
					 | 
				
			||||||
install-sh
 | 
					 | 
				
			||||||
libtool
 | 
					 | 
				
			||||||
ltmain.sh
 | 
					 | 
				
			||||||
missing
 | 
					 | 
				
			||||||
stamp-h1
 | 
					 | 
				
			||||||
libkeyactor*.tar.*
 | 
					 | 
				
			||||||
mkinstalldirs
 | 
					 | 
				
			||||||
m4/*.m4
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
docs/reference/eek/eek.signals
 | 
					 | 
				
			||||||
docs/reference/eek/eek.args
 | 
					 | 
				
			||||||
docs/reference/eek/eek.hierarchy
 | 
					 | 
				
			||||||
docs/reference/eek/eek.interfaces
 | 
					 | 
				
			||||||
docs/reference/eek/eek.prerequisites
 | 
					 | 
				
			||||||
docs/reference/eekboard/*.stamp
 | 
					 | 
				
			||||||
docs/reference/eekboard/*.txt
 | 
					 | 
				
			||||||
!/docs/reference/eekboard/eekboard-sections.txt
 | 
					 | 
				
			||||||
docs/reference/eekboard/xml
 | 
					 | 
				
			||||||
docs/reference/eekboard/html
 | 
					 | 
				
			||||||
docs/reference/eekboard/eekboard.signals
 | 
					 | 
				
			||||||
docs/reference/eekboard/eekboard.args
 | 
					 | 
				
			||||||
docs/reference/eekboard/eekboard.hierarchy
 | 
					 | 
				
			||||||
docs/reference/eekboard/eekboard.interfaces
 | 
					 | 
				
			||||||
docs/reference/eekboard/eekboard.prerequisites
 | 
					 | 
				
			||||||
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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										18
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Makefile.am
									
									
									
									
									
								
							@ -19,3 +19,21 @@
 | 
				
			|||||||
ACLOCAL_AMFLAGS = -I m4
 | 
					ACLOCAL_AMFLAGS = -I m4
 | 
				
			||||||
SUBDIRS = eek eekboard src tests bindings docs po data examples
 | 
					SUBDIRS = eek eekboard src tests bindings docs po data examples
 | 
				
			||||||
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection
 | 
					DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GITIGNOREFILES =				\
 | 
				
			||||||
 | 
						INSTALL					\
 | 
				
			||||||
 | 
						aclocal.m4				\
 | 
				
			||||||
 | 
						compile					\
 | 
				
			||||||
 | 
						config.guess				\
 | 
				
			||||||
 | 
						config.h.in				\
 | 
				
			||||||
 | 
						config.sub				\
 | 
				
			||||||
 | 
						depcomp					\
 | 
				
			||||||
 | 
						gtk-doc.make				\
 | 
				
			||||||
 | 
						install-sh				\
 | 
				
			||||||
 | 
						ltmain.sh				\
 | 
				
			||||||
 | 
						m4					\
 | 
				
			||||||
 | 
						missing					\
 | 
				
			||||||
 | 
						mkinstalldirs				\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -17,3 +17,5 @@
 | 
				
			|||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SUBDIRS = vala
 | 
					SUBDIRS = vala
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,8 @@
 | 
				
			|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
					# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
				
			||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NULL =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ENABLE_VALA
 | 
					if ENABLE_VALA
 | 
				
			||||||
vapidir = $(datadir)/vala/vapi
 | 
					vapidir = $(datadir)/vala/vapi
 | 
				
			||||||
dist_vapi_DATA =				\
 | 
					dist_vapi_DATA =				\
 | 
				
			||||||
@ -33,51 +35,62 @@ EXTRA_DIST =					\
 | 
				
			|||||||
	EekXkl-$(EEK_API_VERSION).metadata	\
 | 
						EekXkl-$(EEK_API_VERSION).metadata	\
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GITIGNOREFILES = \
 | 
				
			||||||
 | 
						eek-$(EEK_API_VERSION).vapi		\
 | 
				
			||||||
 | 
						eek-gtk-$(EEK_API_VERSION).vapi		\
 | 
				
			||||||
 | 
						eek-xkl-$(EEK_API_VERSION).vapi		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
maintainer-clean-local:
 | 
					maintainer-clean-local:
 | 
				
			||||||
	rm -f *.vapi
 | 
						rm -f *.vapi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek_vapi_deps =						\
 | 
					eek_vapi_deps =						\
 | 
				
			||||||
	$(srcdir)/Eek-$(EEK_API_VERSION).metadata	\
 | 
						$(srcdir)/Eek-$(EEK_API_VERSION).metadata	\
 | 
				
			||||||
	|						\
 | 
						|						\
 | 
				
			||||||
	$(top_srcdir)/eek/Eek-$(EEK_API_VERSION).gir	\
 | 
						$(top_builddir)/eek/Eek-$(EEK_API_VERSION).gir	\
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-$(EEK_API_VERSION).vapi: $(eek_vapi_deps)
 | 
					eek-$(EEK_API_VERSION).vapi: $(eek_vapi_deps)
 | 
				
			||||||
	$(VAPIGEN_V)$(VAPIGEN)					\
 | 
						$(VAPIGEN_V)$(VAPIGEN) \
 | 
				
			||||||
		--library eek-$(EEK_API_VERSION)		\
 | 
							--library eek-$(EEK_API_VERSION) \
 | 
				
			||||||
		--pkg gio-2.0					\
 | 
							--pkg gio-2.0 \
 | 
				
			||||||
		--metadatadir=$(srcdir)				\
 | 
							--metadatadir=$(srcdir) \
 | 
				
			||||||
		$(top_srcdir)/eek/Eek-$(EEK_API_VERSION).gir
 | 
							$(top_builddir)/eek/Eek-$(EEK_API_VERSION).gir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek_gtk_vapi_deps =					\
 | 
					eek_gtk_vapi_deps =					\
 | 
				
			||||||
	$(srcdir)/EekGtk-$(EEK_API_VERSION).metadata	\
 | 
						$(srcdir)/EekGtk-$(EEK_API_VERSION).metadata	\
 | 
				
			||||||
	|						\
 | 
						|						\
 | 
				
			||||||
	$(top_srcdir)/eek/EekGtk-$(EEK_API_VERSION).gir	\
 | 
						$(top_builddir)/eek/EekGtk-$(EEK_API_VERSION).gir	\
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-gtk-$(EEK_API_VERSION).vapi: $(eek_gtk_vapi_deps)
 | 
					eek-gtk-$(EEK_API_VERSION).vapi: $(eek_gtk_vapi_deps)
 | 
				
			||||||
	$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir)		\
 | 
						$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir) \
 | 
				
			||||||
		--library eek-gtk-$(EEK_API_VERSION)		\
 | 
							--library eek-gtk-$(EEK_API_VERSION) \
 | 
				
			||||||
		--pkg eek-$(EEK_API_VERSION)			\
 | 
							--pkg eek-$(EEK_API_VERSION) \
 | 
				
			||||||
		--pkg gtk+-3.0					\
 | 
							--pkg gio-2.0 \
 | 
				
			||||||
		--metadatadir=$(srcdir)				\
 | 
							--pkg gtk+-3.0 \
 | 
				
			||||||
		$(top_srcdir)/eek/EekGtk-$(EEK_API_VERSION).gir
 | 
							--metadatadir=$(srcdir)	\
 | 
				
			||||||
 | 
							$(top_builddir)/eek/EekGtk-$(EEK_API_VERSION).gir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek_xkl_vapi_deps =					\
 | 
					eek_xkl_vapi_deps =						\
 | 
				
			||||||
	$(srcdir)/EekXkl-$(EEK_API_VERSION).metadata	\
 | 
						$(srcdir)/EekXkl-$(EEK_API_VERSION).metadata		\
 | 
				
			||||||
	|						\
 | 
						|							\
 | 
				
			||||||
	$(top_srcdir)/eek/EekXkl-$(EEK_API_VERSION).gir	\
 | 
						$(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir	\
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-xkl-$(EEK_API_VERSION).vapi: $(eek_xkl_vapi_deps)
 | 
					eek-xkl-$(EEK_API_VERSION).vapi: $(eek_xkl_vapi_deps)
 | 
				
			||||||
	$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir)		\
 | 
						$(VAPIGEN_V)$(VAPIGEN) \
 | 
				
			||||||
		--library eek-xkl-$(EEK_API_VERSION)		\
 | 
							--vapidir=$(builddir) \
 | 
				
			||||||
		--pkg eek-$(EEK_API_VERSION)			\
 | 
							--library eek-xkl-$(EEK_API_VERSION) \
 | 
				
			||||||
		--metadatadir=$(srcdir)				\
 | 
							--pkg eek-$(EEK_API_VERSION) \
 | 
				
			||||||
		$(top_srcdir)/eek/EekXkl-$(EEK_API_VERSION).gir
 | 
							--pkg gio-2.0 \
 | 
				
			||||||
 | 
							--metadatadir=$(srcdir) \
 | 
				
			||||||
 | 
							$(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# set up the verbosity rules to avoid some build noise
 | 
					# set up the verbosity rules to avoid some build noise
 | 
				
			||||||
VAPIGEN_V = $(VAPIGEN_V_$(V))
 | 
					VAPIGEN_V = $(VAPIGEN_V_$(V))
 | 
				
			||||||
VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY))
 | 
					VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY))
 | 
				
			||||||
VAPIGEN_V_0 = @echo "  VAPIG " $@;
 | 
					VAPIGEN_V_0 = @echo "  VAPIG " $@;
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1,2 @@
 | 
				
			|||||||
eek-0.90
 | 
					eek-0.90
 | 
				
			||||||
 | 
					x11
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ AC_PREREQ(2.63)
 | 
				
			|||||||
dnl AC_CONFIG_SRCDIR([configure.ac])
 | 
					dnl AC_CONFIG_SRCDIR([configure.ac])
 | 
				
			||||||
AC_CONFIG_MACRO_DIR([m4])
 | 
					AC_CONFIG_MACRO_DIR([m4])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AC_INIT([eekboard], [1.0.6], [ueno@unixuser.org])
 | 
					AC_INIT([eekboard], [1.0.8], [ueno@unixuser.org])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dnl Init automake
 | 
					dnl Init automake
 | 
				
			||||||
AM_INIT_AUTOMAKE
 | 
					AM_INIT_AUTOMAKE
 | 
				
			||||||
@ -124,7 +124,7 @@ AC_ARG_ENABLE(atspi,
 | 
				
			|||||||
              enable_atspi=yes)
 | 
					              enable_atspi=yes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if test x$enable_atspi = xyes; then
 | 
					if test x$enable_atspi = xyes; then
 | 
				
			||||||
  PKG_CHECK_MODULES([ATSPI2], [atspi-2 dbus-glib-1], , enable_atspi=no)
 | 
					  PKG_CHECK_MODULES([ATSPI2], [atspi-2], , enable_atspi=no)
 | 
				
			||||||
  if test x$enable_atspi = xyes; then
 | 
					  if test x$enable_atspi = xyes; then
 | 
				
			||||||
    AC_DEFINE([HAVE_ATSPI], [1], [Define if AT-SPI 2 is found])
 | 
					    AC_DEFINE([HAVE_ATSPI], [1], [Define if AT-SPI 2 is found])
 | 
				
			||||||
    focus_listeners="atspi $focus_listeners"
 | 
					    focus_listeners="atspi $focus_listeners"
 | 
				
			||||||
 | 
				
			|||||||
@ -32,3 +32,4 @@ CLEANFILES += $(autostart_DATA)
 | 
				
			|||||||
EXTRA_DIST += $(autostart_in_files)
 | 
					EXTRA_DIST += $(autostart_in_files)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -14,3 +14,4 @@ install-data-hook:
 | 
				
			|||||||
		echo "***   $(gtk_update_icon_cache)";	\
 | 
							echo "***   $(gtk_update_icon_cache)";	\
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -14,3 +14,4 @@ install-data-hook:
 | 
				
			|||||||
		echo "***   $(gtk_update_icon_cache)";	\
 | 
							echo "***   $(gtk_update_icon_cache)";	\
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -14,3 +14,4 @@ install-data-hook:
 | 
				
			|||||||
		echo "***   $(gtk_update_icon_cache)";	\
 | 
							echo "***   $(gtk_update_icon_cache)";	\
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -14,3 +14,4 @@ install-data-hook:
 | 
				
			|||||||
		echo "***   $(gtk_update_icon_cache)";	\
 | 
							echo "***   $(gtk_update_icon_cache)";	\
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -14,3 +14,4 @@ install-data-hook:
 | 
				
			|||||||
		echo "***   $(gtk_update_icon_cache)";	\
 | 
							echo "***   $(gtk_update_icon_cache)";	\
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1,3 @@
 | 
				
			|||||||
SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable
 | 
					SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -12,3 +12,4 @@ install-data-hook:
 | 
				
			|||||||
		echo "***   $(gtk_update_icon_cache)";	\
 | 
							echo "***   $(gtk_update_icon_cache)";	\
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -36,3 +36,5 @@ inscript_symbols =				\
 | 
				
			|||||||
	symbols/ta-inscript.xml			\
 | 
						symbols/ta-inscript.xml			\
 | 
				
			||||||
	symbols/te-inscript.xml			\
 | 
						symbols/te-inscript.xml			\
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -3,240 +3,246 @@
 | 
				
			|||||||
  <bounds x="0.000000" y="0.000000" width="640.0000" height="296.5853"/>
 | 
					  <bounds x="0.000000" y="0.000000" width="640.0000" height="296.5853"/>
 | 
				
			||||||
  <section angle="0">
 | 
					  <section angle="0">
 | 
				
			||||||
    <bounds x="15.60975" y="15.60975" width="640.0000" height="39.02439"/>
 | 
					    <bounds x="15.60975" y="15.60975" width="640.0000" height="39.02439"/>
 | 
				
			||||||
    <row columns="16" orientation="1"/>
 | 
					    <row orientation="1">
 | 
				
			||||||
    <key keycode="9" name="ESC" column="0" row="0" oref="outline2">
 | 
					      <key keycode="9" name="ESC" oref="outline2">
 | 
				
			||||||
      <bounds x="3.121951" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="3.121951" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="67" name="FK01" column="1" row="0" oref="outline2">
 | 
					      <key keycode="67" name="FK01" oref="outline2">
 | 
				
			||||||
      <bounds x="84.29268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="84.29268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="68" name="FK02" column="2" row="0" oref="outline2">
 | 
					      <key keycode="68" name="FK02" oref="outline2">
 | 
				
			||||||
      <bounds x="124.8780" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="124.8780" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="69" name="FK03" column="3" row="0" oref="outline2">
 | 
					      <key keycode="69" name="FK03" oref="outline2">
 | 
				
			||||||
      <bounds x="165.4634" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="165.4634" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="70" name="FK04" column="4" row="0" oref="outline2">
 | 
					      <key keycode="70" name="FK04" oref="outline2">
 | 
				
			||||||
      <bounds x="206.0487" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="206.0487" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="71" name="FK05" column="5" row="0" oref="outline2">
 | 
					      <key keycode="71" name="FK05" oref="outline2">
 | 
				
			||||||
      <bounds x="266.9268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="266.9268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="72" name="FK06" column="6" row="0" oref="outline2">
 | 
					      <key keycode="72" name="FK06" oref="outline2">
 | 
				
			||||||
      <bounds x="307.5121" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="307.5121" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="73" name="FK07" column="7" row="0" oref="outline2">
 | 
					      <key keycode="73" name="FK07" oref="outline2">
 | 
				
			||||||
      <bounds x="348.0975" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="348.0975" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="74" name="FK08" column="8" row="0" oref="outline2">
 | 
					      <key keycode="74" name="FK08" oref="outline2">
 | 
				
			||||||
      <bounds x="388.6829" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="388.6829" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="75" name="FK09" column="9" row="0" oref="outline2">
 | 
					      <key keycode="75" name="FK09" oref="outline2">
 | 
				
			||||||
      <bounds x="449.5609" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="449.5609" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="76" name="FK10" column="10" row="0" oref="outline2">
 | 
					      <key keycode="76" name="FK10" oref="outline2">
 | 
				
			||||||
      <bounds x="490.1463" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="490.1463" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="95" name="FK11" column="11" row="0" oref="outline2">
 | 
					      <key keycode="95" name="FK11" oref="outline2">
 | 
				
			||||||
      <bounds x="530.7317" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="530.7317" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="96" name="FK12" column="12" row="0" oref="outline2">
 | 
					      <key keycode="96" name="FK12" oref="outline2">
 | 
				
			||||||
      <bounds x="571.3170" y="1.560976" width="37.46341" height="37.46341"/>
 | 
						<bounds x="571.3170" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
 | 
					    </row>
 | 
				
			||||||
  </section>
 | 
					  </section>
 | 
				
			||||||
  <section angle="0">
 | 
					  <section angle="0">
 | 
				
			||||||
    <bounds x="15.60975" y="78.04878" width="608.7804" height="201.3658"/>
 | 
					    <bounds x="15.60975" y="78.04878" width="608.7804" height="201.3658"/>
 | 
				
			||||||
    <row columns="14" orientation="1"/>
 | 
					    <row orientation="1">
 | 
				
			||||||
    <row columns="14" orientation="1"/>
 | 
					      <key keycode="49" name="TLDE" oref="outline2">
 | 
				
			||||||
    <row columns="13" orientation="1"/>
 | 
						<bounds x="3.121951" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <row columns="12" orientation="1"/>
 | 
					      </key>
 | 
				
			||||||
    <row columns="9" orientation="1"/>
 | 
					      <key keycode="10" name="AE01" oref="outline2">
 | 
				
			||||||
    <key keycode="49" name="TLDE" column="0" row="0" oref="outline2">
 | 
						<bounds x="43.70731" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="3.121951" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="11" name="AE02" oref="outline2">
 | 
				
			||||||
    <key keycode="10" name="AE01" column="1" row="0" oref="outline2">
 | 
						<bounds x="84.29268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="43.70731" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="12" name="AE03" oref="outline2">
 | 
				
			||||||
    <key keycode="11" name="AE02" column="2" row="0" oref="outline2">
 | 
						<bounds x="124.8780" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="84.29268" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="13" name="AE04" oref="outline2">
 | 
				
			||||||
    <key keycode="12" name="AE03" column="3" row="0" oref="outline2">
 | 
						<bounds x="165.4634" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="124.8780" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="14" name="AE05" oref="outline2">
 | 
				
			||||||
    <key keycode="13" name="AE04" column="4" row="0" oref="outline2">
 | 
						<bounds x="206.0487" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="165.4634" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="15" name="AE06" oref="outline2">
 | 
				
			||||||
    <key keycode="14" name="AE05" column="5" row="0" oref="outline2">
 | 
						<bounds x="245.0731" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="206.0487" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="16" name="AE07" oref="outline2">
 | 
				
			||||||
    <key keycode="15" name="AE06" column="6" row="0" oref="outline2">
 | 
						<bounds x="285.6585" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="245.0731" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="17" name="AE08" oref="outline2">
 | 
				
			||||||
    <key keycode="16" name="AE07" column="7" row="0" oref="outline2">
 | 
						<bounds x="326.2439" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="285.6585" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="18" name="AE09" oref="outline2">
 | 
				
			||||||
    <key keycode="17" name="AE08" column="8" row="0" oref="outline2">
 | 
						<bounds x="366.8292" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="326.2439" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="19" name="AE10" oref="outline2">
 | 
				
			||||||
    <key keycode="18" name="AE09" column="9" row="0" oref="outline2">
 | 
						<bounds x="407.4146" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="366.8292" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="20" name="AE11" oref="outline2">
 | 
				
			||||||
    <key keycode="19" name="AE10" column="10" row="0" oref="outline2">
 | 
						<bounds x="448.0000" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="407.4146" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="21" name="AE12" oref="outline2">
 | 
				
			||||||
    <key keycode="20" name="AE11" column="11" row="0" oref="outline2">
 | 
						<bounds x="488.5853" y="1.560976" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="448.0000" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="22" name="BKSP" oref="outline13">
 | 
				
			||||||
    <key keycode="21" name="AE12" column="12" row="0" oref="outline2">
 | 
						<bounds x="529.1707" y="1.560976" width="79.60975" height="37.46341"/>
 | 
				
			||||||
      <bounds x="488.5853" y="1.560976" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					    </row>
 | 
				
			||||||
    <key keycode="22" name="BKSP" column="13" row="0" oref="outline13">
 | 
					    <row orientation="1">
 | 
				
			||||||
      <bounds x="529.1707" y="1.560976" width="79.60975" height="37.46341"/>
 | 
					      <key keycode="23" name="TAB" oref="outline4">
 | 
				
			||||||
    </key>
 | 
						<bounds x="3.121951" y="42.14634" width="59.31707" height="37.46341"/>
 | 
				
			||||||
    <key keycode="23" name="TAB" column="0" row="1" oref="outline4">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="3.121951" y="42.14634" width="59.31707" height="37.46341"/>
 | 
					      <key keycode="24" name="AD01" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="65.56097" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="24" name="AD01" column="1" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="65.56097" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="25" name="AD02" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="106.1463" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="25" name="AD02" column="2" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="106.1463" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="26" name="AD03" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="145.1707" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="26" name="AD03" column="3" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="145.1707" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="27" name="AD04" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="185.7560" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="27" name="AD04" column="4" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="185.7560" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="28" name="AD05" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="226.3414" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="28" name="AD05" column="5" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="226.3414" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="29" name="AD06" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="266.9268" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="29" name="AD06" column="6" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="266.9268" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="30" name="AD07" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="307.5121" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="30" name="AD07" column="7" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="307.5121" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="31" name="AD08" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="348.0975" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="31" name="AD08" column="8" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="348.0975" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="32" name="AD09" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="388.6829" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="32" name="AD09" column="9" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="388.6829" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="33" name="AD10" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="429.2682" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="33" name="AD10" column="10" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="429.2682" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="34" name="AD11" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="468.2926" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="34" name="AD11" column="11" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="468.2926" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="35" name="AD12" oref="outline2">
 | 
				
			||||||
    </key>
 | 
						<bounds x="508.8780" y="42.14634" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="35" name="AD12" column="12" row="1" oref="outline2">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="508.8780" y="42.14634" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="51" name="BKSL" oref="outline5">
 | 
				
			||||||
    </key>
 | 
						<bounds x="549.4634" y="42.14634" width="59.31707" height="37.46341"/>
 | 
				
			||||||
    <key keycode="51" name="BKSL" column="13" row="1" oref="outline5">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="549.4634" y="42.14634" width="59.31707" height="37.46341"/>
 | 
					    </row>
 | 
				
			||||||
    </key>
 | 
					    <row orientation="1">
 | 
				
			||||||
    <key keycode="66" name="CAPS" column="0" row="2" oref="outline6">
 | 
					      <key keycode="66" name="CAPS" oref="outline6">
 | 
				
			||||||
      <bounds x="3.121951" y="82.73170" width="68.68292" height="37.46341"/>
 | 
						<bounds x="3.121951" y="82.73170" width="68.68292" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="38" name="AC01" column="1" row="2" oref="outline2">
 | 
					      <key keycode="38" name="AC01" oref="outline2">
 | 
				
			||||||
      <bounds x="76.48780" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="76.48780" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="39" name="AC02" column="2" row="2" oref="outline2">
 | 
					      <key keycode="39" name="AC02" oref="outline2">
 | 
				
			||||||
      <bounds x="115.5121" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="115.5121" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="40" name="AC03" column="3" row="2" oref="outline2">
 | 
					      <key keycode="40" name="AC03" oref="outline2">
 | 
				
			||||||
      <bounds x="156.0975" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="156.0975" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="41" name="AC04" column="4" row="2" oref="outline2">
 | 
					      <key keycode="41" name="AC04" oref="outline2">
 | 
				
			||||||
      <bounds x="196.6829" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="196.6829" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="42" name="AC05" column="5" row="2" oref="outline2">
 | 
					      <key keycode="42" name="AC05" oref="outline2">
 | 
				
			||||||
      <bounds x="237.2682" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="237.2682" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="43" name="AC06" column="6" row="2" oref="outline2">
 | 
					      <key keycode="43" name="AC06" oref="outline2">
 | 
				
			||||||
      <bounds x="277.8536" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="277.8536" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="44" name="AC07" column="7" row="2" oref="outline2">
 | 
					      <key keycode="44" name="AC07" oref="outline2">
 | 
				
			||||||
      <bounds x="318.4390" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="318.4390" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="45" name="AC08" column="8" row="2" oref="outline2">
 | 
					      <key keycode="45" name="AC08" oref="outline2">
 | 
				
			||||||
      <bounds x="359.0243" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="359.0243" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="46" name="AC09" column="9" row="2" oref="outline2">
 | 
					      <key keycode="46" name="AC09" oref="outline2">
 | 
				
			||||||
      <bounds x="399.6097" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="399.6097" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="47" name="AC10" column="10" row="2" oref="outline2">
 | 
					      <key keycode="47" name="AC10" oref="outline2">
 | 
				
			||||||
      <bounds x="438.6341" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="438.6341" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="48" name="AC11" column="11" row="2" oref="outline2">
 | 
					      <key keycode="48" name="AC11" oref="outline2">
 | 
				
			||||||
      <bounds x="479.2195" y="82.73170" width="37.46341" height="37.46341"/>
 | 
						<bounds x="479.2195" y="82.73170" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="36" name="RTRN" column="12" row="2" oref="outline7">
 | 
					      <key keycode="36" name="RTRN" oref="outline7">
 | 
				
			||||||
      <bounds x="519.8048" y="82.73170" width="88.97561" height="37.46341"/>
 | 
						<bounds x="519.8048" y="82.73170" width="88.97561" height="37.46341"/>
 | 
				
			||||||
    </key>
 | 
					      </key>
 | 
				
			||||||
    <key keycode="50" name="LFSH" column="0" row="3" oref="outline8">
 | 
					    </row>
 | 
				
			||||||
      <bounds x="3.121951" y="121.7560" width="88.97561" height="37.46341"/>
 | 
					    <row orientation="1">
 | 
				
			||||||
    </key>
 | 
					      <key keycode="50" name="LFSH" oref="outline8">
 | 
				
			||||||
    <key keycode="52" name="AB01" column="1" row="3" oref="outline2">
 | 
						<bounds x="3.121951" y="121.7560" width="88.97561" height="37.46341"/>
 | 
				
			||||||
      <bounds x="95.21951" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="52" name="AB01" oref="outline2">
 | 
				
			||||||
    <key keycode="53" name="AB02" column="2" row="3" oref="outline2">
 | 
						<bounds x="95.21951" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="135.8048" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="53" name="AB02" oref="outline2">
 | 
				
			||||||
    <key keycode="54" name="AB03" column="3" row="3" oref="outline2">
 | 
						<bounds x="135.8048" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="176.3902" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="54" name="AB03" oref="outline2">
 | 
				
			||||||
    <key keycode="55" name="AB04" column="4" row="3" oref="outline2">
 | 
						<bounds x="176.3902" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="215.4146" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="55" name="AB04" oref="outline2">
 | 
				
			||||||
    <key keycode="56" name="AB05" column="5" row="3" oref="outline2">
 | 
						<bounds x="215.4146" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="256.0000" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="56" name="AB05" oref="outline2">
 | 
				
			||||||
    <key keycode="57" name="AB06" column="6" row="3" oref="outline2">
 | 
						<bounds x="256.0000" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="296.5853" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="57" name="AB06" oref="outline2">
 | 
				
			||||||
    <key keycode="58" name="AB07" column="7" row="3" oref="outline2">
 | 
						<bounds x="296.5853" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="337.1707" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="58" name="AB07" oref="outline2">
 | 
				
			||||||
    <key keycode="59" name="AB08" column="8" row="3" oref="outline2">
 | 
						<bounds x="337.1707" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="377.7560" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="59" name="AB08" oref="outline2">
 | 
				
			||||||
    <key keycode="60" name="AB09" column="9" row="3" oref="outline2">
 | 
						<bounds x="377.7560" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="418.3414" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="60" name="AB09" oref="outline2">
 | 
				
			||||||
    <key keycode="61" name="AB10" column="10" row="3" oref="outline2">
 | 
						<bounds x="418.3414" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="458.9268" y="121.7560" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="61" name="AB10" oref="outline2">
 | 
				
			||||||
    <key keycode="62" name="RTSH" column="11" row="3" oref="outline9">
 | 
						<bounds x="458.9268" y="121.7560" width="37.46341" height="37.46341"/>
 | 
				
			||||||
      <bounds x="499.5121" y="121.7560" width="109.2682" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					      <key keycode="62" name="RTSH" oref="outline9">
 | 
				
			||||||
    <key keycode="149" name="I149" column="0" row="4" oref="outline10">
 | 
						<bounds x="499.5121" y="121.7560" width="109.2682" height="37.46341"/>
 | 
				
			||||||
      <bounds x="3.121951" y="162.3414" width="37.46341" height="37.46341"/>
 | 
					      </key>
 | 
				
			||||||
    </key>
 | 
					    </row>
 | 
				
			||||||
    <key keycode="37" name="LCTL" column="1" row="4" oref="outline1">
 | 
					    <row orientation="1">
 | 
				
			||||||
      <bounds x="62.43902" y="162.3414" width="48.39024" height="37.46341"/>
 | 
					      <key keycode="149" name="I149" oref="outline10">
 | 
				
			||||||
    </key>
 | 
						<bounds x="3.121951" y="162.3414" width="37.46341" height="37.46341"/>
 | 
				
			||||||
    <key keycode="64" name="LALT" column="2" row="4" oref="outline1">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="113.9512" y="162.3414" width="48.39024" height="37.46341"/>
 | 
					      <key keycode="37" name="LCTL" oref="outline1">
 | 
				
			||||||
    </key>
 | 
						<bounds x="62.43902" y="162.3414" width="48.39024" height="37.46341"/>
 | 
				
			||||||
    <key keycode="65" name="SPCE" column="3" row="4" oref="outline3">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="165.4634" y="162.3414" width="217.5853" height="37.46341"/>
 | 
					      <key keycode="64" name="LALT" oref="outline1">
 | 
				
			||||||
    </key>
 | 
						<bounds x="113.9512" y="162.3414" width="48.39024" height="37.46341"/>
 | 
				
			||||||
    <key keycode="113" name="LEFT" column="4" row="4" oref="outline1">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="368.0487" y="162.3414" width="48.39024" height="37.46341"/>
 | 
					      <key keycode="65" name="SPCE" oref="outline3">
 | 
				
			||||||
    </key>
 | 
						<bounds x="165.4634" y="162.3414" width="217.5853" height="37.46341"/>
 | 
				
			||||||
    <key keycode="111" name="UP" column="5" row="4" oref="outline1">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="419.43894" y="162.3414" width="48.39024" height="37.46341"/>
 | 
					      <key keycode="113" name="LEFT" oref="outline1">
 | 
				
			||||||
    </key>
 | 
						<bounds x="368.0487" y="162.3414" width="48.39024" height="37.46341"/>
 | 
				
			||||||
    <key keycode="116" name="DOWN" column="6" row="4" oref="outline1">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="470.82918" y="162.3414" width="48.39024" height="37.46341"/>
 | 
					      <key keycode="111" name="UP" oref="outline1">
 | 
				
			||||||
    </key>
 | 
						<bounds x="419.43894" y="162.3414" width="48.39024" height="37.46341"/>
 | 
				
			||||||
    <key keycode="114" name="RGHT" column="7" row="4" oref="outline1">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="522.21942" y="162.3414" width="48.39024" height="37.46341"/>
 | 
					      <key keycode="116" name="DOWN" oref="outline1">
 | 
				
			||||||
    </key>
 | 
						<bounds x="470.82918" y="162.3414" width="48.39024" height="37.46341"/>
 | 
				
			||||||
    <key keycode="150" name="I150" column="8" row="4" oref="outline10">
 | 
					      </key>
 | 
				
			||||||
      <bounds x="573.60966" y="162.3414" width="37.46341" height="37.46341"/>
 | 
					      <key keycode="114" name="RGHT" oref="outline1">
 | 
				
			||||||
    </key>
 | 
						<bounds x="522.21942" y="162.3414" width="48.39024" height="37.46341"/>
 | 
				
			||||||
 | 
					      </key>
 | 
				
			||||||
 | 
					      <key keycode="150" name="I150" oref="outline10">
 | 
				
			||||||
 | 
						<bounds x="573.60966" y="162.3414" width="37.46341" height="37.46341"/>
 | 
				
			||||||
 | 
					      </key>
 | 
				
			||||||
 | 
					    </row>
 | 
				
			||||||
  </section>
 | 
					  </section>
 | 
				
			||||||
  <outline id="outline2" corner-radius="1.000000">
 | 
					  <outline id="outline2" corner-radius="1.000000">
 | 
				
			||||||
    <point x="0.000000" y="0.000000"/>
 | 
					    <point x="0.000000" y="0.000000"/>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,250 +1,154 @@
 | 
				
			|||||||
<?xml version="1.0"?>
 | 
					<?xml version="1.0"?>
 | 
				
			||||||
<symbols version="0.90">
 | 
					<symbols version="0.90">
 | 
				
			||||||
  <include>us</include>
 | 
					  <include>us</include>
 | 
				
			||||||
  <key keycode="1" name="AE03" groups="2">
 | 
					  <key keycode="49" name="TLDE">
 | 
				
			||||||
    <keysym keyval="51" label="あ">3</keysym>
 | 
					    <keysym keyval="1246">゛</keysym>
 | 
				
			||||||
    <keysym keyval="35" label="ぁ">numbersign</keysym>
 | 
					    <keysym keyval="1247">゜</keysym>
 | 
				
			||||||
    <keysym keyval="51" label="ア">3</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="35" label="ァ">numbersign</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="2" name="AD03" groups="2">
 | 
					  <key keycode="10" name="AE01">
 | 
				
			||||||
    <keysym keyval="101" label="い">e</keysym>
 | 
					    <keysym keyval="1223">ぬ</keysym>
 | 
				
			||||||
    <keysym keyval="69" label="ぃ">E</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="101" label="イ">e</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="69" label="ィ">E</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="3" name="AE04" groups="2">
 | 
					  <key keycode="11" name="AE02">
 | 
				
			||||||
    <keysym keyval="52" label="う">4</keysym>
 | 
					    <keysym keyval="1228">ふ</keysym>
 | 
				
			||||||
    <keysym keyval="36" label="ぅ">dollar</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="52" label="ウ">4</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="36" label="ゥ">dollar</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="4" name="AE05" groups="2">
 | 
					  <key keycode="12" name="AE03">
 | 
				
			||||||
    <keysym keyval="53" label="え">5</keysym>
 | 
					    <keysym keyval="1201">あ</keysym>
 | 
				
			||||||
    <keysym keyval="37" label="ぇ">percent</keysym>
 | 
					    <keysym keyval="1191">ぁ</keysym>
 | 
				
			||||||
    <keysym keyval="53" label="エ">5</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="37" label="ェ">percent</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="5" name="AE06" groups="2">
 | 
					  <key keycode="13" name="AE04">
 | 
				
			||||||
    <keysym keyval="54" label="お">6</keysym>
 | 
					    <keysym keyval="1203">う</keysym>
 | 
				
			||||||
    <keysym keyval="38" label="ぉ">ampersand</keysym>
 | 
					    <keysym keyval="1193">ぅ</keysym>
 | 
				
			||||||
    <keysym keyval="54" label="オ">6</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="38" label="ォ">ampersand</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="14" name="AE05">
 | 
				
			||||||
  <key keycode="6" name="AE03" groups="2">
 | 
					    <keysym keyval="1204">え</keysym>
 | 
				
			||||||
    <keysym keyval="116" label="か">t</keysym>
 | 
					    <keysym keyval="1194">ぇ</keysym>
 | 
				
			||||||
    <keysym keyval="116" label="カ">t</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="7" name="AD03" groups="2">
 | 
					  <key keycode="15" name="AE06">
 | 
				
			||||||
    <keysym keyval="103" label="き">g</keysym>
 | 
					    <keysym keyval="1205">お</keysym>
 | 
				
			||||||
    <keysym keyval="103" label="キ">g</keysym>
 | 
					    <keysym keyval="1195">ぉ</keysym>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="8" name="AE04" groups="2">
 | 
					  <key keycode="16" name="AE07">
 | 
				
			||||||
    <keysym keyval="104" label="く">h</keysym>
 | 
					    <keysym keyval="1236">や</keysym>
 | 
				
			||||||
    <keysym keyval="104" label="ク">h</keysym>
 | 
					    <keysym keyval="1196">ゃ</keysym>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="9" name="AE05" groups="2">
 | 
					  <key keycode="17" name="AE08">
 | 
				
			||||||
    <keysym keyval="58" label="け">colon</keysym>
 | 
					    <keysym keyval="1237">ゆ</keysym>
 | 
				
			||||||
    <keysym keyval="58" label="ケ">colon</keysym>
 | 
					    <keysym keyval="1197">ゅ</keysym>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="10" name="AE06" groups="2">
 | 
					  <key keycode="18" name="AE09">
 | 
				
			||||||
    <keysym keyval="98" label="こ">b</keysym>
 | 
					    <keysym keyval="1238">よ</keysym>
 | 
				
			||||||
    <keysym keyval="98" label="コ">b</keysym>
 | 
					    <keysym keyval="1198">ょ</keysym>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="19" name="AE10">
 | 
				
			||||||
  <key keycode="11" name="AE03" groups="2">
 | 
					    <keysym keyval="1244">わ</keysym>
 | 
				
			||||||
    <keysym keyval="120" label="さ">x</keysym>
 | 
					    <keysym keyval="1190">を</keysym>
 | 
				
			||||||
    <keysym keyval="120" label="サ">x</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="12" name="AD03" groups="2">
 | 
					  <key keycode="20" name="AE11">
 | 
				
			||||||
    <keysym keyval="100" label="し">d</keysym>
 | 
					    <keysym keyval="1230">ほ</keysym>
 | 
				
			||||||
    <keysym keyval="100" label="シ">d</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="13" name="AE04" groups="2">
 | 
					  <key keycode="21" name="AE12">
 | 
				
			||||||
    <keysym keyval="114" label="す">r</keysym>
 | 
					    <keysym keyval="1229">へ</keysym>
 | 
				
			||||||
    <keysym keyval="114" label="ス">r</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="14" name="AE05" groups="2">
 | 
					  <key keycode="24" name="AD01">
 | 
				
			||||||
    <keysym keyval="112" label="せ">p</keysym>
 | 
					    <keysym keyval="1216">た</keysym>
 | 
				
			||||||
    <keysym keyval="112" label="セ">p</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="15" name="AE06" groups="2">
 | 
					  <key keycode="25" name="AD02">
 | 
				
			||||||
    <keysym keyval="99" label="そ">c</keysym>
 | 
					    <keysym keyval="1219">て</keysym>
 | 
				
			||||||
    <keysym keyval="99" label="ソ">c</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="26" name="AD03">
 | 
				
			||||||
  <key keycode="16" name="AE03" groups="2">
 | 
					    <keysym keyval="1202">い</keysym>
 | 
				
			||||||
    <keysym keyval="113" label="た">q</keysym>
 | 
					    <keysym keyval="1192">ぃ</keysym>
 | 
				
			||||||
    <keysym keyval="113" label="タ">q</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="17" name="AD03" groups="2">
 | 
					  <key keycode="27" name="AD04">
 | 
				
			||||||
    <keysym keyval="97" label="ち">a</keysym>
 | 
					    <keysym keyval="1213">す</keysym>
 | 
				
			||||||
    <keysym keyval="97" label="チ">a</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="18" name="AE04" groups="2">
 | 
					  <key keycode="28" name="AD05">
 | 
				
			||||||
    <keysym keyval="122" label="つ">z</keysym>
 | 
					    <keysym keyval="1206">か</keysym>
 | 
				
			||||||
    <keysym keyval="90" label="っ">Z</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="122" label="ツ">z</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="90" label="ッ">Z</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="19" name="AE05" groups="2">
 | 
					  <key keycode="29" name="AD06">
 | 
				
			||||||
    <keysym keyval="119" label="て">w</keysym>
 | 
					    <keysym keyval="1245">ん</keysym>
 | 
				
			||||||
    <keysym keyval="119" label="テ">w</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="20" name="AE06" groups="2">
 | 
					  <key keycode="30" name="AD07">
 | 
				
			||||||
    <keysym keyval="115" label="と">s</keysym>
 | 
					    <keysym keyval="1221">な</keysym>
 | 
				
			||||||
    <keysym keyval="115" label="ト">s</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="31" name="AD08">
 | 
				
			||||||
  <key keycode="21" name="AE03" groups="2">
 | 
					    <keysym keyval="1222">に</keysym>
 | 
				
			||||||
    <keysym keyval="117" label="な">u</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="117" label="ナ">u</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="22" name="AD03" groups="2">
 | 
					  <key keycode="32" name="AD09">
 | 
				
			||||||
    <keysym keyval="105" label="に">i</keysym>
 | 
					    <keysym keyval="1239">ら</keysym>
 | 
				
			||||||
    <keysym keyval="105" label="ニ">i</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="23" name="AE04" groups="2">
 | 
					  <key keycode="33" name="AD10">
 | 
				
			||||||
    <keysym keyval="33" label="ぬ">exclam</keysym>
 | 
					    <keysym keyval="1214">せ</keysym>
 | 
				
			||||||
    <keysym keyval="33" label="ヌ">exclam</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="24" name="AE05" groups="2">
 | 
					  <key keycode="34" name="AD11">
 | 
				
			||||||
    <keysym keyval="44" label="ね">comma</keysym>
 | 
					    <keysym keyval="1233">む</keysym>
 | 
				
			||||||
    <keysym keyval="44" label="ネ">comma</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="25" name="AE06" groups="2">
 | 
					  <key keycode="35" name="AD12">
 | 
				
			||||||
    <keysym keyval="107" label="の">k</keysym>
 | 
					    <keysym keyval="1243">ろ</keysym>
 | 
				
			||||||
    <keysym keyval="107" label="ノ">k</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="38" name="AC01">
 | 
				
			||||||
  <key keycode="26" name="AE03" groups="2">
 | 
					    <keysym keyval="1217">ち</keysym>
 | 
				
			||||||
    <keysym keyval="102" label="は">f</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="102" label="ハ">f</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="27" name="AD03" groups="2">
 | 
					  <key keycode="39" name="AC02">
 | 
				
			||||||
    <keysym keyval="118" label="ひ">v</keysym>
 | 
					    <keysym keyval="1220">と</keysym>
 | 
				
			||||||
    <keysym keyval="118" label="ヒ">v</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="28" name="AE04" groups="2">
 | 
					  <key keycode="40" name="AC03">
 | 
				
			||||||
    <keysym keyval="34" label="ふ">quotedbl</keysym>
 | 
					    <keysym keyval="1212">し</keysym>
 | 
				
			||||||
    <keysym keyval="34" label="フ">quotedbl</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="29" name="AE05" groups="2">
 | 
					  <key keycode="41" name="AC04">
 | 
				
			||||||
    <keysym keyval="94" label="へ">asciicircum</keysym>
 | 
					    <keysym keyval="1226">は</keysym>
 | 
				
			||||||
    <keysym keyval="94" label="ヘ">asciicircum</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="30" name="AE06" groups="2">
 | 
					  <key keycode="42" name="AC05">
 | 
				
			||||||
    <keysym keyval="61" label="ほ">equal</keysym>
 | 
					    <keysym keyval="1207">き</keysym>
 | 
				
			||||||
    <keysym keyval="61" label="ホ">equal</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="43" name="AC06">
 | 
				
			||||||
  <key keycode="31" name="AE03" groups="2">
 | 
					    <keysym keyval="1208">く</keysym>
 | 
				
			||||||
    <keysym keyval="106" label="ま">j</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="106" label="マ">j</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="32" name="AD03" groups="2">
 | 
					  <key keycode="44" name="AC07">
 | 
				
			||||||
    <keysym keyval="110" label="み">n</keysym>
 | 
					    <keysym keyval="1231">ま</keysym>
 | 
				
			||||||
    <keysym keyval="110" label="ミ">n</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="33" name="AE04" groups="2">
 | 
					  <key keycode="45" name="AC08">
 | 
				
			||||||
    <keysym keyval="93" label="む">bracketright</keysym>
 | 
					    <keysym keyval="1225">の</keysym>
 | 
				
			||||||
    <keysym keyval="93" label="ム">bracketright</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="34" name="AE05" groups="2">
 | 
					  <key keycode="46" name="AC09">
 | 
				
			||||||
    <keysym keyval="47" label="め">slash</keysym>
 | 
					    <keysym keyval="1240">り</keysym>
 | 
				
			||||||
    <keysym keyval="47" label="メ">slash</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="35" name="AE06" groups="2">
 | 
					  <key keycode="47" name="AC10">
 | 
				
			||||||
    <keysym keyval="109" label="も">m</keysym>
 | 
					    <keysym keyval="1242">れ</keysym>
 | 
				
			||||||
    <keysym keyval="109" label="モ">m</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="48" name="AC11">
 | 
				
			||||||
  <key keycode="36" name="AE03" groups="2">
 | 
					    <keysym keyval="1209">け</keysym>
 | 
				
			||||||
    <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>
 | 
				
			||||||
  <key keycode="37" name="AD03" groups="2">
 | 
					  <key keycode="52" name="AB01">
 | 
				
			||||||
    <keysym keyval="56" label="ゆ">8</keysym>
 | 
					    <keysym keyval="1218">つ</keysym>
 | 
				
			||||||
    <keysym keyval="40" label="ゅ">parenleft</keysym>
 | 
					    <keysym keyval="1199">っ</keysym>
 | 
				
			||||||
    <keysym keyval="56" label="ユ">8</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="40" label="ュ">parenleft</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="38" name="AE04" groups="2">
 | 
					  <key keycode="53" name="AB02">
 | 
				
			||||||
    <keysym keyval="57" label="よ">9</keysym>
 | 
					    <keysym keyval="1211">さ</keysym>
 | 
				
			||||||
    <keysym keyval="41" label="ょ">parenright</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="57" label="ヨ">9</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="41" label="ョ">parenright</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="41" name="AE03" groups="2">
 | 
					  <key keycode="54" name="AB03">
 | 
				
			||||||
    <keysym keyval="111" label="ら">o</keysym>
 | 
					    <keysym keyval="1215">そ</keysym>
 | 
				
			||||||
    <keysym keyval="111" label="ラ">o</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="42" name="AD03" groups="2">
 | 
					  <key keycode="55" name="AB04">
 | 
				
			||||||
    <keysym keyval="108" label="り">l</keysym>
 | 
					    <keysym keyval="1227">ひ</keysym>
 | 
				
			||||||
    <keysym keyval="108" label="リ">l</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="43" name="AE04" groups="2">
 | 
					  <key keycode="56" name="AB05">
 | 
				
			||||||
    <keysym keyval="46" label="る">period</keysym>
 | 
					    <keysym keyval="1210">こ</keysym>
 | 
				
			||||||
    <keysym keyval="46" label="ル">period</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="44" name="AE05" groups="2">
 | 
					  <key keycode="57" name="AB06">
 | 
				
			||||||
    <keysym keyval="59" label="れ">semicolon</keysym>
 | 
					    <keysym keyval="1232">み</keysym>
 | 
				
			||||||
    <keysym keyval="59" label="レ">semicolon</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="45" name="AE06" groups="2">
 | 
					  <key keycode="58" name="AB07">
 | 
				
			||||||
    <keysym keyval="92" label="ろ">backslash</keysym>
 | 
					    <keysym keyval="1235">も</keysym>
 | 
				
			||||||
    <keysym keyval="92" label="ロ">backslash</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
 | 
					  <key keycode="59" name="AB08">
 | 
				
			||||||
  <key keycode="46" name="AE03" groups="2">
 | 
					    <keysym keyval="1224">ね</keysym>
 | 
				
			||||||
    <keysym keyval="48" label="わ">0</keysym>
 | 
					 | 
				
			||||||
    <keysym keyval="48" label="ワ">0</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="47" name="AD03" groups="2">
 | 
					  <key keycode="60" name="AB09">
 | 
				
			||||||
    <keysym keyval="126" label="を">asciitilde</keysym>
 | 
					    <keysym keyval="1241">る</keysym>
 | 
				
			||||||
    <keysym keyval="126" label="ヲ">asciitilde</keysym>
 | 
					 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="48" name="AE04" groups="2">
 | 
					  <key keycode="61" name="AB10">
 | 
				
			||||||
    <keysym keyval="121" label="ん">y</keysym>
 | 
					    <keysym keyval="1234">め</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>
 | 
					  </key>
 | 
				
			||||||
</symbols>
 | 
					</symbols>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -248,10 +248,10 @@
 | 
				
			|||||||
    <keysym keyval="65506">Shift_R</keysym>
 | 
					    <keysym keyval="65506">Shift_R</keysym>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="149" name="I149">
 | 
					  <key keycode="149" name="I149">
 | 
				
			||||||
    <symbol label="⌨" icon="input-keyboard-symbolic">cycle-keyboard</symbol>
 | 
					    <symbol label="⌨" icon="input-keyboard-symbolic" tooltip="Change keyboard">cycle-keyboard</symbol>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="150" name="I150">
 | 
					  <key keycode="150" name="I150">
 | 
				
			||||||
    <symbol label="☺" icon="preferences-system-symbolic">preferences</symbol>
 | 
					    <symbol label="☺" icon="preferences-system-symbolic" tooltip="Setup">preferences</symbol>
 | 
				
			||||||
  </key>
 | 
					  </key>
 | 
				
			||||||
  <key keycode="37" name="LCTL">
 | 
					  <key keycode="37" name="LCTL">
 | 
				
			||||||
    <keysym keyval="65507">Control_L</keysym>
 | 
					    <keysym keyval="65507">Control_L</keysym>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,2 +1,4 @@
 | 
				
			|||||||
themedir = $(pkgdatadir)/themes
 | 
					themedir = $(pkgdatadir)/themes
 | 
				
			||||||
dist_theme_DATA = default.css
 | 
					dist_theme_DATA = default.css
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -16,4 +16,6 @@
 | 
				
			|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
					# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
				
			||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SUBDIRS = reference
 | 
					SUBDIRS = reference
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -17,3 +17,5 @@
 | 
				
			|||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SUBDIRS = eek eekboard
 | 
					SUBDIRS = eek eekboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -129,3 +129,5 @@ if ENABLE_GTK_DOC
 | 
				
			|||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-include $(top_srcdir)/gtk-doc.mk
 | 
					-include $(top_srcdir)/gtk-doc.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -118,3 +118,5 @@ if ENABLE_GTK_DOC
 | 
				
			|||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-include $(top_srcdir)/gtk-doc.mk
 | 
					-include $(top_srcdir)/gtk-doc.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										147
									
								
								eek/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								eek/Makefile.am
									
									
									
									
									
								
							@ -16,10 +16,13 @@
 | 
				
			|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
					# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
				
			||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NULL =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lib_LTLIBRARIES =				\
 | 
					lib_LTLIBRARIES =				\
 | 
				
			||||||
	libeek.la				\
 | 
						libeek.la				\
 | 
				
			||||||
	libeek-gtk.la				\
 | 
						libeek-gtk.la				\
 | 
				
			||||||
	libeek-xkl.la
 | 
						libeek-xkl.la				\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_public_headers =				\
 | 
					libeek_public_headers =				\
 | 
				
			||||||
	$(srcdir)/eek-layout.h			\
 | 
						$(srcdir)/eek-layout.h			\
 | 
				
			||||||
@ -37,17 +40,17 @@ libeek_public_headers =				\
 | 
				
			|||||||
	$(srcdir)/eek-xml-layout.h		\
 | 
						$(srcdir)/eek-xml-layout.h		\
 | 
				
			||||||
	$(srcdir)/eek-serializable.h		\
 | 
						$(srcdir)/eek-serializable.h		\
 | 
				
			||||||
	$(srcdir)/eek-theme.h			\
 | 
						$(srcdir)/eek-theme.h			\
 | 
				
			||||||
	$(srcdir)/eek.h
 | 
						$(srcdir)/eek.h				\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_private_headers =			\
 | 
					libeek_private_headers =			\
 | 
				
			||||||
	$(srcdir)/eek-renderer.h		\
 | 
						$(srcdir)/eek-renderer.h		\
 | 
				
			||||||
	$(srcdir)/eek-special-keysym-entries.h	\
 | 
						$(libeek_keysym_headers)		\
 | 
				
			||||||
	$(srcdir)/eek-unicode-keysym-entries.h	\
 | 
						$(builddir)/eek-marshalers.h		\
 | 
				
			||||||
	$(srcdir)/eek-xkeysym-keysym-entries.h	\
 | 
					 | 
				
			||||||
	$(srcdir)/eek-marshalers.h		\
 | 
					 | 
				
			||||||
	$(srcdir)/eek-theme-context.h		\
 | 
						$(srcdir)/eek-theme-context.h		\
 | 
				
			||||||
	$(srcdir)/eek-theme-private.h		\
 | 
						$(srcdir)/eek-theme-private.h		\
 | 
				
			||||||
	$(srcdir)/eek-theme-node.h
 | 
						$(srcdir)/eek-theme-node.h		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_sources =				\
 | 
					libeek_sources =				\
 | 
				
			||||||
	$(srcdir)/eek.c				\
 | 
						$(srcdir)/eek.c				\
 | 
				
			||||||
@ -69,30 +72,36 @@ libeek_sources =				\
 | 
				
			|||||||
	$(srcdir)/eek-keyboard-drawing.c	\
 | 
						$(srcdir)/eek-keyboard-drawing.c	\
 | 
				
			||||||
	$(srcdir)/eek-theme.c			\
 | 
						$(srcdir)/eek-theme.c			\
 | 
				
			||||||
	$(srcdir)/eek-theme-context.c		\
 | 
						$(srcdir)/eek-theme-context.c		\
 | 
				
			||||||
	$(srcdir)/eek-theme-node.c
 | 
						$(srcdir)/eek-theme-node.c		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_keysym_sources =				\
 | 
					libeek_keysym_headers =					\
 | 
				
			||||||
	$(srcdir)/eek-special-keysym-entries.h	\
 | 
						$(builddir)/eek-special-keysym-entries.h	\
 | 
				
			||||||
	$(srcdir)/eek-unicode-keysym-entries.h	\
 | 
						$(builddir)/eek-unicode-keysym-entries.h	\
 | 
				
			||||||
	$(srcdir)/eek-xkeysym-keysym-entries.h
 | 
						$(builddir)/eek-xkeysym-keysym-entries.h	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_enumtypes_sources =			\
 | 
					libeek_enumtypes_sources =			\
 | 
				
			||||||
	$(srcdir)/eek-enumtypes.c		\
 | 
						$(builddir)/eek-enumtypes.c		\
 | 
				
			||||||
	$(srcdir)/eek-enumtypes.h
 | 
						$(builddir)/eek-enumtypes.h		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_marshalers_sources =			\
 | 
					libeek_marshalers_sources =			\
 | 
				
			||||||
	$(srcdir)/eek-marshalers.c		\
 | 
						$(builddir)/eek-marshalers.c		\
 | 
				
			||||||
	$(srcdir)/eek-marshalers.h
 | 
						$(builddir)/eek-marshalers.h		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILT_SOURCES =					\
 | 
					BUILT_SOURCES =					\
 | 
				
			||||||
	$(libeek_keysym_sources)		\
 | 
						$(libeek_keysym_headers)		\
 | 
				
			||||||
	$(libeek_enumtypes_sources)		\
 | 
						$(libeek_enumtypes_sources)		\
 | 
				
			||||||
	$(libeek_marshalers_sources)
 | 
						$(libeek_marshalers_sources)		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_la_SOURCES =				\
 | 
					libeek_la_SOURCES =				\
 | 
				
			||||||
	$(libeek_sources)			\
 | 
						$(libeek_sources)			\
 | 
				
			||||||
	$(srcdir)/eek-enumtypes.c		\
 | 
						$(builddir)/eek-enumtypes.c		\
 | 
				
			||||||
	$(srcdir)/eek-marshalers.c
 | 
						$(builddir)/eek-marshalers.c		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_la_CFLAGS =					\
 | 
					libeek_la_CFLAGS =					\
 | 
				
			||||||
	-DEEK_COMPILATION=1				\
 | 
						-DEEK_COMPILATION=1				\
 | 
				
			||||||
@ -111,12 +120,15 @@ libeek_la_LIBADD =				\
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
libeek_gtk_public_headers =			\
 | 
					libeek_gtk_public_headers =			\
 | 
				
			||||||
	$(srcdir)/eek-gtk-keyboard.h		\
 | 
						$(srcdir)/eek-gtk-keyboard.h		\
 | 
				
			||||||
	$(srcdir)/eek-gtk.h
 | 
						$(srcdir)/eek-gtk.h			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
libeek_gtk_private_headers =			\
 | 
					libeek_gtk_private_headers =			\
 | 
				
			||||||
	$(srcdir)/eek-gtk-renderer.h
 | 
						$(srcdir)/eek-gtk-renderer.h		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
libeek_gtk_sources =				\
 | 
					libeek_gtk_sources =				\
 | 
				
			||||||
	$(srcdir)/eek-gtk-keyboard.c		\
 | 
						$(srcdir)/eek-gtk-keyboard.c		\
 | 
				
			||||||
	$(srcdir)/eek-gtk-renderer.c
 | 
						$(srcdir)/eek-gtk-renderer.c		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_gtk_la_SOURCES = $(libeek_gtk_sources)
 | 
					libeek_gtk_la_SOURCES = $(libeek_gtk_sources)
 | 
				
			||||||
libeek_gtk_la_CFLAGS = -DEEK_COMPILATION=1 $(GTK_CFLAGS) $(LIBCANBERRA_CFLAGS)
 | 
					libeek_gtk_la_CFLAGS = -DEEK_COMPILATION=1 $(GTK_CFLAGS) $(LIBCANBERRA_CFLAGS)
 | 
				
			||||||
@ -126,11 +138,13 @@ libeek_xkl_public_headers =			\
 | 
				
			|||||||
	$(srcdir)/eek-xkl-layout.h		\
 | 
						$(srcdir)/eek-xkl-layout.h		\
 | 
				
			||||||
	$(srcdir)/eek-xkl.h			\
 | 
						$(srcdir)/eek-xkl.h			\
 | 
				
			||||||
	$(srcdir)/eek-xkb-layout.h		\
 | 
						$(srcdir)/eek-xkb-layout.h		\
 | 
				
			||||||
	$(srcdir)/eek-xkb.h
 | 
						$(srcdir)/eek-xkb.h			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_xkl_sources =				\
 | 
					libeek_xkl_sources =				\
 | 
				
			||||||
	$(srcdir)/eek-xkb-layout.c		\
 | 
						$(srcdir)/eek-xkb-layout.c		\
 | 
				
			||||||
	$(srcdir)/eek-xkl-layout.c
 | 
						$(srcdir)/eek-xkl-layout.c		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeek_xkl_la_SOURCES = $(libeek_xkl_sources)
 | 
					libeek_xkl_la_SOURCES = $(libeek_xkl_sources)
 | 
				
			||||||
libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS)
 | 
					libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS)
 | 
				
			||||||
@ -139,56 +153,68 @@ libeek_xkl_la_LIBADD = libeek.la $(LIBXKLAVIER_LIBS)
 | 
				
			|||||||
eekdir = $(includedir)/eek-$(EEK_API_VERSION)/eek
 | 
					eekdir = $(includedir)/eek-$(EEK_API_VERSION)/eek
 | 
				
			||||||
eek_HEADERS =					\
 | 
					eek_HEADERS =					\
 | 
				
			||||||
	$(libeek_public_headers)		\
 | 
						$(libeek_public_headers)		\
 | 
				
			||||||
	$(srcdir)/eek-enumtypes.h		\
 | 
						$(builddir)/eek-enumtypes.h		\
 | 
				
			||||||
	$(libeek_gtk_public_headers)		\
 | 
						$(libeek_gtk_public_headers)		\
 | 
				
			||||||
	$(libeek_xkl_public_headers)
 | 
						$(libeek_xkl_public_headers)		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
noinst_HEADERS =				\
 | 
					noinst_HEADERS =				\
 | 
				
			||||||
	$(libeek_private_headers)		\
 | 
						$(libeek_private_headers)		\
 | 
				
			||||||
	$(libeek_gtk_private_headers)		\
 | 
						$(libeek_gtk_private_headers)		\
 | 
				
			||||||
	$(libeek_xkl_private_headers)
 | 
						$(libeek_xkl_private_headers)		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-special-keysym-entries.h: special-keysym-entries.txt
 | 
					eek-special-keysym-entries.h: special-keysym-entries.txt
 | 
				
			||||||
	$(AM_V_GEN) $(PYTHON) ./gen-keysym-entries.py special_keysym_entries \
 | 
						$(AM_V_GEN) $(PYTHON) $(srcdir)/gen-keysym-entries.py \
 | 
				
			||||||
 | 
							special_keysym_entries \
 | 
				
			||||||
		< $< > $@
 | 
							< $< > $@
 | 
				
			||||||
eek-unicode-keysym-entries.h: unicode-keysym-entries.txt
 | 
					eek-unicode-keysym-entries.h: unicode-keysym-entries.txt
 | 
				
			||||||
	$(AM_V_GEN) $(PYTHON) ./gen-keysym-entries.py unicode_keysym_entries \
 | 
						$(AM_V_GEN) $(PYTHON) $(srcdir)/gen-keysym-entries.py \
 | 
				
			||||||
 | 
							unicode_keysym_entries \
 | 
				
			||||||
		< $< > $@
 | 
							< $< > $@
 | 
				
			||||||
eek-xkeysym-keysym-entries.h: xkeysym-keysym-entries.txt
 | 
					eek-xkeysym-keysym-entries.h: xkeysym-keysym-entries.txt
 | 
				
			||||||
	$(AM_V_GEN) $(PYTHON) ./gen-keysym-entries.py xkeysym_keysym_entries \
 | 
						$(AM_V_GEN) $(PYTHON) $(srcdir)/gen-keysym-entries.py \
 | 
				
			||||||
 | 
							xkeysym_keysym_entries \
 | 
				
			||||||
		< $< > $@
 | 
							< $< > $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-enumtypes.h: $(libeek_public_headers) eek-enumtypes.h.template
 | 
					eek-enumtypes.h: $(libeek_public_headers) eek-enumtypes.h.template
 | 
				
			||||||
	$(AM_V_GEN) $(GLIB_MKENUMS) --template eek-enumtypes.h.template \
 | 
						$(AM_V_GEN) $(GLIB_MKENUMS) \
 | 
				
			||||||
 | 
							--template $(srcdir)/eek-enumtypes.h.template \
 | 
				
			||||||
		$(libeek_public_headers) > eek-enumtypes.h.tmp && \
 | 
							$(libeek_public_headers) > eek-enumtypes.h.tmp && \
 | 
				
			||||||
		mv eek-enumtypes.h.tmp eek-enumtypes.h
 | 
							mv eek-enumtypes.h.tmp eek-enumtypes.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-enumtypes.c: $(libeek_public_headers) eek-enumtypes.c.template
 | 
					eek-enumtypes.c: $(libeek_public_headers) eek-enumtypes.c.template
 | 
				
			||||||
	$(AM_V_GEN) $(GLIB_MKENUMS) --template eek-enumtypes.c.template \
 | 
						$(AM_V_GEN) $(GLIB_MKENUMS) \
 | 
				
			||||||
 | 
							--template $(srcdir)/eek-enumtypes.c.template \
 | 
				
			||||||
		$(libeek_public_headers) > eek-enumtypes.c.tmp && \
 | 
							$(libeek_public_headers) > eek-enumtypes.c.tmp && \
 | 
				
			||||||
		mv eek-enumtypes.c.tmp eek-enumtypes.c
 | 
							mv eek-enumtypes.c.tmp eek-enumtypes.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# gen marshal
 | 
					# gen marshal
 | 
				
			||||||
eek-marshalers.h: eek-marshalers.list
 | 
					eek-marshalers.h: eek-marshalers.list
 | 
				
			||||||
	$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_eek_marshal $(srcdir)/eek-marshalers.list --header --internal > $@.tmp && \
 | 
						$(AM_V_GEN) $(GLIB_GENMARSHAL) \
 | 
				
			||||||
 | 
							--prefix=_eek_marshal $(srcdir)/eek-marshalers.list \
 | 
				
			||||||
 | 
							--header --internal > $@.tmp && \
 | 
				
			||||||
	mv $@.tmp $@
 | 
						mv $@.tmp $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eek-marshalers.c: eek-marshalers.list eek-marshalers.h
 | 
					eek-marshalers.c: eek-marshalers.list eek-marshalers.h
 | 
				
			||||||
	$(AM_V_GEN) (echo "#include \"eek-marshalers.h\""; \
 | 
						$(AM_V_GEN) (echo "#include \"eek-marshalers.h\""; \
 | 
				
			||||||
	$(GLIB_GENMARSHAL) --prefix=_eek_marshal $(srcdir)/eek-marshalers.list --body --internal) > $@.tmp && \
 | 
						$(GLIB_GENMARSHAL) --prefix=_eek_marshal \
 | 
				
			||||||
 | 
							$(srcdir)/eek-marshalers.list --body --internal) > $@.tmp && \
 | 
				
			||||||
	mv $@.tmp $@
 | 
						mv $@.tmp $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
					pkgconfigdir = $(libdir)/pkgconfig
 | 
				
			||||||
pkgconfig_DATA =				\
 | 
					pkgconfig_DATA =				\
 | 
				
			||||||
	eek-$(EEK_API_VERSION).pc		\
 | 
						eek-$(EEK_API_VERSION).pc		\
 | 
				
			||||||
	eek-gtk-$(EEK_API_VERSION).pc		\
 | 
						eek-gtk-$(EEK_API_VERSION).pc		\
 | 
				
			||||||
	eek-xkl-$(EEK_API_VERSION).pc
 | 
						eek-xkl-$(EEK_API_VERSION).pc		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CLEANFILES =
 | 
					CLEANFILES =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DISTCLEANFILES =				\
 | 
					DISTCLEANFILES =				\
 | 
				
			||||||
	$(BUILT_SOURCES)			\
 | 
						$(BUILT_SOURCES)			\
 | 
				
			||||||
	$(pkgconfig_DATA)
 | 
						$(pkgconfig_DATA)			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EXTRA_DIST =					\
 | 
					EXTRA_DIST =					\
 | 
				
			||||||
	gen-keysym-entries.py			\
 | 
						gen-keysym-entries.py			\
 | 
				
			||||||
@ -197,7 +223,8 @@ EXTRA_DIST =					\
 | 
				
			|||||||
	xkeysym-keysym-entries.txt		\
 | 
						xkeysym-keysym-entries.txt		\
 | 
				
			||||||
	eek-enumtypes.h.template		\
 | 
						eek-enumtypes.h.template		\
 | 
				
			||||||
	eek-enumtypes.c.template		\
 | 
						eek-enumtypes.c.template		\
 | 
				
			||||||
	eek-marshalers.list
 | 
						eek-marshalers.list			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-include $(INTROSPECTION_MAKEFILE)
 | 
					-include $(INTROSPECTION_MAKEFILE)
 | 
				
			||||||
INTROSPECTION_GIRS =
 | 
					INTROSPECTION_GIRS =
 | 
				
			||||||
@ -207,29 +234,57 @@ INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
 | 
				
			|||||||
if HAVE_INTROSPECTION
 | 
					if HAVE_INTROSPECTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Eek@EEK_LIBRARY_SUFFIX@.gir: libeek.la
 | 
					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 =	\
 | 
				
			||||||
 | 
						--identifier-prefix=Eek			\
 | 
				
			||||||
 | 
						--symbol-prefix=eek			\
 | 
				
			||||||
 | 
						--pkg=glib-2.0				\
 | 
				
			||||||
 | 
						--pkg-export=eek-$(EEK_API_VERSION)	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GLib-2.0 GObject-2.0 Gio-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_CFLAGS = $(libeek_la_CFLAGS)
 | 
				
			||||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek.la
 | 
					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)		\
 | 
				
			||||||
 | 
						$(builddir)/eek-enumtypes.h		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EekGtk@EEK_LIBRARY_SUFFIX@.gir: libeek-gtk.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
					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_SCANNERFLAGS =	\
 | 
				
			||||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Gtk-@GTK_API_VERSION@ Eek@EEK_LIBRARY_SUFFIX@
 | 
						--identifier-prefix=Eek			\
 | 
				
			||||||
 | 
						--symbol-prefix=eek			\
 | 
				
			||||||
 | 
						--pkg-export=eek-gtk-$(EEK_API_VERSION)	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES =	\
 | 
				
			||||||
 | 
						GObject-2.0				\
 | 
				
			||||||
 | 
						Gtk-@GTK_API_VERSION@			\
 | 
				
			||||||
 | 
						Eek@EEK_LIBRARY_SUFFIX@			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_gtk_la_CFLAGS)
 | 
					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_LIBS = libeek-gtk.la
 | 
				
			||||||
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_gtk_sources) $(libeek_gtk_public_headers)
 | 
					EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_FILES =	\
 | 
				
			||||||
 | 
						$(libeek_gtk_sources)			\
 | 
				
			||||||
 | 
						$(libeek_gtk_public_headers)		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EekXkl@EEK_LIBRARY_SUFFIX@.gir: libeek-xkl.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
					EekXkl@EEK_LIBRARY_SUFFIX@.gir: libeek-xkl.la Eek@EEK_LIBRARY_SUFFIX@.gir
 | 
				
			||||||
 | 
					EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = \
 | 
				
			||||||
 | 
						--identifier-prefix=Eek			\
 | 
				
			||||||
 | 
						--symbol-prefix=eek			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Eek@EEK_LIBRARY_SUFFIX@
 | 
					EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Eek@EEK_LIBRARY_SUFFIX@
 | 
				
			||||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_xkl_la_CFLAGS)
 | 
					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_LIBS = libeek-xkl.la
 | 
				
			||||||
EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_xkl_sources) $(libeek_xkl_public_headers)
 | 
					EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES =	\
 | 
				
			||||||
 | 
						$(libeek_xkl_sources)			\
 | 
				
			||||||
 | 
						$(libeek_xkl_public_headers)		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INTROSPECTION_GIRS +=				\
 | 
					INTROSPECTION_GIRS +=				\
 | 
				
			||||||
	Eek@EEK_LIBRARY_SUFFIX@.gir		\
 | 
						Eek@EEK_LIBRARY_SUFFIX@.gir		\
 | 
				
			||||||
	EekGtk@EEK_LIBRARY_SUFFIX@.gir		\
 | 
						EekGtk@EEK_LIBRARY_SUFFIX@.gir		\
 | 
				
			||||||
	EekXkl@EEK_LIBRARY_SUFFIX@.gir
 | 
						EekXkl@EEK_LIBRARY_SUFFIX@.gir		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
girdir = $(datadir)/gir-1.0
 | 
					girdir = $(datadir)/gir-1.0
 | 
				
			||||||
gir_DATA = $(INTROSPECTION_GIRS)
 | 
					gir_DATA = $(INTROSPECTION_GIRS)
 | 
				
			||||||
@ -239,3 +294,5 @@ typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CLEANFILES += $(gir_DATA) $(typelib_DATA)
 | 
					CLEANFILES += $(gir_DATA) $(typelib_DATA)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -311,7 +311,7 @@ eek_element_set_name (EekElement  *element,
 | 
				
			|||||||
 * Get the name of @element.
 | 
					 * Get the name of @element.
 | 
				
			||||||
 * Returns: the name of @element or NULL when the name is not set
 | 
					 * Returns: the name of @element or NULL when the name is not set
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					const gchar *
 | 
				
			||||||
eek_element_get_name (EekElement  *element)
 | 
					eek_element_get_name (EekElement  *element)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
 | 
					    g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
 | 
				
			||||||
 | 
				
			|||||||
@ -58,45 +58,45 @@ struct _EekElementClass
 | 
				
			|||||||
                                                    gint         level);
 | 
					                                                    gint         level);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType                 eek_element_get_type              (void) G_GNUC_CONST;
 | 
					GType        eek_element_get_type              (void) G_GNUC_CONST;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void                  eek_element_set_parent            (EekElement  *element,
 | 
					void         eek_element_set_parent            (EekElement  *element,
 | 
				
			||||||
                                                         EekElement  *parent);
 | 
					                                                EekElement  *parent);
 | 
				
			||||||
EekElement           *eek_element_get_parent            (EekElement  *element);
 | 
					EekElement  *eek_element_get_parent            (EekElement  *element);
 | 
				
			||||||
void                  eek_element_set_name              (EekElement  *element,
 | 
					void         eek_element_set_name              (EekElement  *element,
 | 
				
			||||||
                                                         const gchar *name);
 | 
					                                                const gchar *name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_CONST_RETURN gchar *eek_element_get_name              (EekElement  *element);
 | 
					const gchar *eek_element_get_name              (EekElement  *element);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void                  eek_element_set_bounds            (EekElement  *element,
 | 
					void         eek_element_set_bounds            (EekElement  *element,
 | 
				
			||||||
                                                         EekBounds   *bounds);
 | 
					                                                EekBounds   *bounds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void                  eek_element_get_bounds            (EekElement  *element,
 | 
					void         eek_element_get_bounds            (EekElement  *element,
 | 
				
			||||||
                                                         EekBounds   *bounds);
 | 
					                                                EekBounds   *bounds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void                  eek_element_set_position          (EekElement  *element,
 | 
					void         eek_element_set_position          (EekElement  *element,
 | 
				
			||||||
                                                         gdouble      x,
 | 
					                                                gdouble      x,
 | 
				
			||||||
                                                         gdouble      y);
 | 
					                                                gdouble      y);
 | 
				
			||||||
void                  eek_element_set_size              (EekElement  *element,
 | 
					void         eek_element_set_size              (EekElement  *element,
 | 
				
			||||||
                                                         gdouble      width,
 | 
					                                                gdouble      width,
 | 
				
			||||||
                                                         gdouble      height);
 | 
					                                                gdouble      height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void                  eek_element_get_absolute_position (EekElement  *element,
 | 
					void         eek_element_get_absolute_position (EekElement  *element,
 | 
				
			||||||
                                                         gdouble     *x,
 | 
					                                                gdouble     *x,
 | 
				
			||||||
                                                         gdouble     *y);
 | 
					                                                gdouble     *y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void                  eek_element_set_symbol_index      (EekElement  *element,
 | 
					void         eek_element_set_symbol_index      (EekElement  *element,
 | 
				
			||||||
                                                         gint         group,
 | 
					                                                gint         group,
 | 
				
			||||||
                                                         gint         level);
 | 
					                                                gint         level);
 | 
				
			||||||
void                  eek_element_get_symbol_index      (EekElement  *element,
 | 
					void         eek_element_get_symbol_index      (EekElement  *element,
 | 
				
			||||||
                                                         gint        *group,
 | 
					                                                gint        *group,
 | 
				
			||||||
                                                         gint        *level);
 | 
					                                                gint        *level);
 | 
				
			||||||
void                  eek_element_set_group             (EekElement  *element,
 | 
					void         eek_element_set_group             (EekElement  *element,
 | 
				
			||||||
                                                         gint         group);
 | 
					                                                gint         group);
 | 
				
			||||||
void                  eek_element_set_level             (EekElement  *element,
 | 
					void         eek_element_set_level             (EekElement  *element,
 | 
				
			||||||
                                                         gint         level);
 | 
					                                                gint         level);
 | 
				
			||||||
gint                  eek_element_get_group             (EekElement  *element);
 | 
					gint         eek_element_get_group             (EekElement  *element);
 | 
				
			||||||
gint                  eek_element_get_level             (EekElement  *element);
 | 
					gint         eek_element_get_level             (EekElement  *element);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
#endif  /* EEK_ELEMENT_H */
 | 
					#endif  /* EEK_ELEMENT_H */
 | 
				
			||||||
 | 
				
			|||||||
@ -232,6 +232,9 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget      *self,
 | 
				
			|||||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
					    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
    EekKey *key;
 | 
					    EekKey *key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (event->state == 0)
 | 
				
			||||||
 | 
					        return FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
					    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
				
			||||||
                                             (gdouble)event->x,
 | 
					                                             (gdouble)event->x,
 | 
				
			||||||
                                             (gdouble)event->y);
 | 
					                                             (gdouble)event->y);
 | 
				
			||||||
@ -275,6 +278,30 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self)
 | 
				
			|||||||
    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
					    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static gboolean
 | 
				
			||||||
 | 
					eek_gtk_keyboard_real_query_tooltip (GtkWidget  *widget,
 | 
				
			||||||
 | 
					                                     gint        x,
 | 
				
			||||||
 | 
					                                     gint        y,
 | 
				
			||||||
 | 
					                                     gboolean    keyboard_tooltip,
 | 
				
			||||||
 | 
					                                     GtkTooltip *tooltip)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
 | 
				
			||||||
 | 
					    EekKey *key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
				
			||||||
 | 
					                                             (gdouble)x,
 | 
				
			||||||
 | 
					                                             (gdouble)y);
 | 
				
			||||||
 | 
					    if (key) {
 | 
				
			||||||
 | 
					        EekSymbol *symbol = eek_key_get_symbol (key);
 | 
				
			||||||
 | 
					        const gchar *text = eek_symbol_get_tooltip (symbol);
 | 
				
			||||||
 | 
					        if (text) {
 | 
				
			||||||
 | 
					            gtk_tooltip_set_text (tooltip, text);
 | 
				
			||||||
 | 
					            return TRUE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
					eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
				
			||||||
                               EekKeyboard    *keyboard)
 | 
					                               EekKeyboard    *keyboard)
 | 
				
			||||||
@ -397,6 +424,8 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
 | 
				
			|||||||
        eek_gtk_keyboard_real_button_release_event;
 | 
					        eek_gtk_keyboard_real_button_release_event;
 | 
				
			||||||
    widget_class->motion_notify_event =
 | 
					    widget_class->motion_notify_event =
 | 
				
			||||||
        eek_gtk_keyboard_real_motion_notify_event;
 | 
					        eek_gtk_keyboard_real_motion_notify_event;
 | 
				
			||||||
 | 
					    widget_class->query_tooltip =
 | 
				
			||||||
 | 
					        eek_gtk_keyboard_real_query_tooltip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gobject_class->set_property = eek_gtk_keyboard_set_property;
 | 
					    gobject_class->set_property = eek_gtk_keyboard_set_property;
 | 
				
			||||||
    gobject_class->dispose = eek_gtk_keyboard_dispose;
 | 
					    gobject_class->dispose = eek_gtk_keyboard_dispose;
 | 
				
			||||||
 | 
				
			|||||||
@ -833,7 +833,7 @@ eek_keyboard_get_pressed_keys (EekKeyboard *keyboard)
 | 
				
			|||||||
 * @keyboard: an #EekKeyboard
 | 
					 * @keyboard: an #EekKeyboard
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Get locked keys.
 | 
					 * Get locked keys.
 | 
				
			||||||
 * Returns: (transfer container) (element-type EekModifierKey): A list
 | 
					 * Returns: (transfer container) (element-type Eek.ModifierKey): A list
 | 
				
			||||||
 * of locked keys.
 | 
					 * of locked keys.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
GList *
 | 
					GList *
 | 
				
			||||||
 | 
				
			|||||||
@ -152,22 +152,24 @@ on_cancelled (EekKey     *key,
 | 
				
			|||||||
static EekKey *
 | 
					static EekKey *
 | 
				
			||||||
eek_section_real_create_key (EekSection *self,
 | 
					eek_section_real_create_key (EekSection *self,
 | 
				
			||||||
                             guint       keycode,
 | 
					                             guint       keycode,
 | 
				
			||||||
                             gint        column,
 | 
					                             gint        column_index,
 | 
				
			||||||
                             gint        row)
 | 
					                             gint        row_index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekKey *key;
 | 
					    EekKey *key;
 | 
				
			||||||
    gint num_columns, num_rows;
 | 
					    gint num_rows;
 | 
				
			||||||
    EekOrientation orientation;
 | 
					    EekRow *row;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    num_rows = eek_section_get_n_rows (self);
 | 
					    num_rows = eek_section_get_n_rows (self);
 | 
				
			||||||
    g_return_val_if_fail (0 <= row && row < num_rows, NULL);
 | 
					    g_return_val_if_fail (0 <= row_index && row_index < num_rows, NULL);
 | 
				
			||||||
    eek_section_get_row (self, row, &num_columns, &orientation);
 | 
					
 | 
				
			||||||
    g_return_val_if_fail (column < num_columns, NULL);
 | 
					    row = g_slist_nth_data (self->priv->rows, row_index);
 | 
				
			||||||
 | 
					    if (row->num_columns < column_index + 1)
 | 
				
			||||||
 | 
					        row->num_columns = column_index + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    key = g_object_new (EEK_TYPE_KEY,
 | 
					    key = g_object_new (EEK_TYPE_KEY,
 | 
				
			||||||
                        "keycode", keycode,
 | 
					                        "keycode", keycode,
 | 
				
			||||||
                        "column", column,
 | 
					                        "column", column_index,
 | 
				
			||||||
                        "row", row,
 | 
					                        "row", row_index,
 | 
				
			||||||
                        NULL);
 | 
					                        NULL);
 | 
				
			||||||
    g_return_val_if_fail (key, NULL);
 | 
					    g_return_val_if_fail (key, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,7 @@ enum {
 | 
				
			|||||||
    PROP_CATEGORY,
 | 
					    PROP_CATEGORY,
 | 
				
			||||||
    PROP_MODIFIER_MASK,
 | 
					    PROP_MODIFIER_MASK,
 | 
				
			||||||
    PROP_ICON_NAME,
 | 
					    PROP_ICON_NAME,
 | 
				
			||||||
 | 
					    PROP_TOOLTIP,
 | 
				
			||||||
    PROP_LAST
 | 
					    PROP_LAST
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -49,6 +50,7 @@ struct _EekSymbolPrivate {
 | 
				
			|||||||
    EekSymbolCategory category;
 | 
					    EekSymbolCategory category;
 | 
				
			||||||
    EekModifierType modifier_mask;
 | 
					    EekModifierType modifier_mask;
 | 
				
			||||||
    gchar *icon_name;
 | 
					    gchar *icon_name;
 | 
				
			||||||
 | 
					    gchar *tooltip;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
					static void eek_serializable_iface_init (EekSerializableIface *iface);
 | 
				
			||||||
@ -71,6 +73,7 @@ eek_symbol_real_serialize (EekSerializable *self,
 | 
				
			|||||||
    g_variant_builder_add (builder, "u", priv->category);
 | 
					    g_variant_builder_add (builder, "u", priv->category);
 | 
				
			||||||
    g_variant_builder_add (builder, "u", priv->modifier_mask);
 | 
					    g_variant_builder_add (builder, "u", priv->modifier_mask);
 | 
				
			||||||
    g_variant_builder_add (builder, "s", NOTNULL(priv->icon_name));
 | 
					    g_variant_builder_add (builder, "s", NOTNULL(priv->icon_name));
 | 
				
			||||||
 | 
					    g_variant_builder_add (builder, "s", NOTNULL(priv->tooltip));
 | 
				
			||||||
#undef NOTNULL
 | 
					#undef NOTNULL
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -86,6 +89,7 @@ eek_symbol_real_deserialize (EekSerializable *self,
 | 
				
			|||||||
    g_variant_get_child (variant, index++, "u", &priv->category);
 | 
					    g_variant_get_child (variant, index++, "u", &priv->category);
 | 
				
			||||||
    g_variant_get_child (variant, index++, "u", &priv->modifier_mask);
 | 
					    g_variant_get_child (variant, index++, "u", &priv->modifier_mask);
 | 
				
			||||||
    g_variant_get_child (variant, index++, "s", &priv->icon_name);
 | 
					    g_variant_get_child (variant, index++, "s", &priv->icon_name);
 | 
				
			||||||
 | 
					    g_variant_get_child (variant, index++, "s", &priv->tooltip);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return index;
 | 
					    return index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -121,6 +125,10 @@ eek_symbol_set_property (GObject      *object,
 | 
				
			|||||||
        eek_symbol_set_icon_name (EEK_SYMBOL(object),
 | 
					        eek_symbol_set_icon_name (EEK_SYMBOL(object),
 | 
				
			||||||
                                  g_value_get_string (value));
 | 
					                                  g_value_get_string (value));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case PROP_TOOLTIP:
 | 
				
			||||||
 | 
					        eek_symbol_set_tooltip (EEK_SYMBOL(object),
 | 
				
			||||||
 | 
					                                g_value_get_string (value));
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -151,6 +159,10 @@ eek_symbol_get_property (GObject    *object,
 | 
				
			|||||||
        g_value_set_string (value,
 | 
					        g_value_set_string (value,
 | 
				
			||||||
                            eek_symbol_get_icon_name (EEK_SYMBOL(object)));
 | 
					                            eek_symbol_get_icon_name (EEK_SYMBOL(object)));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case PROP_TOOLTIP:
 | 
				
			||||||
 | 
					        g_value_set_string (value,
 | 
				
			||||||
 | 
					                            eek_symbol_get_tooltip (EEK_SYMBOL(object)));
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -165,6 +177,7 @@ eek_symbol_finalize (GObject *object)
 | 
				
			|||||||
    g_free (priv->name);
 | 
					    g_free (priv->name);
 | 
				
			||||||
    g_free (priv->label);
 | 
					    g_free (priv->label);
 | 
				
			||||||
    g_free (priv->icon_name);
 | 
					    g_free (priv->icon_name);
 | 
				
			||||||
 | 
					    g_free (priv->tooltip);
 | 
				
			||||||
    G_OBJECT_CLASS (eek_symbol_parent_class)->finalize (object);
 | 
					    G_OBJECT_CLASS (eek_symbol_parent_class)->finalize (object);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -216,6 +229,13 @@ eek_symbol_class_init (EekSymbolClass *klass)
 | 
				
			|||||||
                                 NULL,
 | 
					                                 NULL,
 | 
				
			||||||
                                 G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 | 
					                                 G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 | 
				
			||||||
    g_object_class_install_property (gobject_class, PROP_ICON_NAME, pspec);
 | 
					    g_object_class_install_property (gobject_class, PROP_ICON_NAME, pspec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pspec = g_param_spec_string ("tooltip",
 | 
				
			||||||
 | 
					                                 "Tooltip",
 | 
				
			||||||
 | 
					                                 "Tooltip text",
 | 
				
			||||||
 | 
					                                 NULL,
 | 
				
			||||||
 | 
					                                 G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 | 
				
			||||||
 | 
					    g_object_class_install_property (gobject_class, PROP_TOOLTIP, pspec);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -265,7 +285,7 @@ eek_symbol_set_name (EekSymbol   *symbol,
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * Get the name of @symbol.
 | 
					 * Get the name of @symbol.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					const gchar *
 | 
				
			||||||
eek_symbol_get_name (EekSymbol *symbol)
 | 
					eek_symbol_get_name (EekSymbol *symbol)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekSymbolPrivate *priv;
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
@ -304,7 +324,7 @@ eek_symbol_set_label (EekSymbol   *symbol,
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * Get the label text of @symbol.
 | 
					 * Get the label text of @symbol.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					const gchar *
 | 
				
			||||||
eek_symbol_get_label (EekSymbol *symbol)
 | 
					eek_symbol_get_label (EekSymbol *symbol)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekSymbolPrivate *priv;
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
@ -428,7 +448,7 @@ eek_symbol_set_icon_name (EekSymbol   *symbol,
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * Get the icon name of @symbol.
 | 
					 * Get the icon name of @symbol.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					const gchar *
 | 
				
			||||||
eek_symbol_get_icon_name (EekSymbol *symbol)
 | 
					eek_symbol_get_icon_name (EekSymbol *symbol)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekSymbolPrivate *priv;
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
@ -441,6 +461,45 @@ eek_symbol_get_icon_name (EekSymbol *symbol)
 | 
				
			|||||||
    return priv->icon_name;
 | 
					    return priv->icon_name;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * eek_symbol_set_tooltip:
 | 
				
			||||||
 | 
					 * @symbol: an #EekSymbol
 | 
				
			||||||
 | 
					 * @tooltip: icon name of @symbol
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Set the tooltip text of @symbol to @tooltip.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eek_symbol_set_tooltip (EekSymbol   *symbol,
 | 
				
			||||||
 | 
					                        const gchar *tooltip)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (EEK_IS_SYMBOL(symbol));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEK_SYMBOL_GET_PRIVATE(symbol);
 | 
				
			||||||
 | 
					    g_free (priv->tooltip);
 | 
				
			||||||
 | 
					    priv->tooltip = g_strdup (tooltip);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * eek_symbol_get_tooltip:
 | 
				
			||||||
 | 
					 * @symbol: an #EekSymbol
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Get the tooltip text of @symbol.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const gchar *
 | 
				
			||||||
 | 
					eek_symbol_get_tooltip (EekSymbol *symbol)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekSymbolPrivate *priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    priv = EEK_SYMBOL_GET_PRIVATE(symbol);
 | 
				
			||||||
 | 
					    if (priv->tooltip == NULL || *priv->tooltip == '\0')
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    return priv->tooltip;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct {
 | 
					static const struct {
 | 
				
			||||||
    EekSymbolCategory category;
 | 
					    EekSymbolCategory category;
 | 
				
			||||||
    gchar *name;
 | 
					    gchar *name;
 | 
				
			||||||
@ -456,7 +515,7 @@ static const struct {
 | 
				
			|||||||
    { EEK_SYMBOL_CATEGORY_UNKNOWN, NULL }
 | 
					    { EEK_SYMBOL_CATEGORY_UNKNOWN, NULL }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					const gchar *
 | 
				
			||||||
eek_symbol_category_get_name (EekSymbolCategory category)
 | 
					eek_symbol_category_get_name (EekSymbolCategory category)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    gint i;
 | 
					    gint i;
 | 
				
			||||||
 | 
				
			|||||||
@ -89,32 +89,31 @@ struct _EekSymbolClass {
 | 
				
			|||||||
    GObjectClass parent_class;
 | 
					    GObjectClass parent_class;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType                 eek_symbol_get_type      (void) G_GNUC_CONST;
 | 
					GType             eek_symbol_get_type           (void) G_GNUC_CONST;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EekSymbol            *eek_symbol_new           (const gchar      *name);
 | 
					EekSymbol        *eek_symbol_new                (const gchar      *name);
 | 
				
			||||||
void                  eek_symbol_set_name      (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_name           (EekSymbol        *symbol,
 | 
				
			||||||
                                                const gchar      *name);
 | 
					                                                 const gchar      *name);
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_get_name      (EekSymbol        *symbol);
 | 
					const gchar      *eek_symbol_get_name           (EekSymbol        *symbol);
 | 
				
			||||||
void                  eek_symbol_set_label     (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_label          (EekSymbol        *symbol,
 | 
				
			||||||
                                                const gchar      *label);
 | 
					                                                 const gchar      *label);
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_get_label     (EekSymbol        *symbol);
 | 
					const gchar      *eek_symbol_get_label          (EekSymbol        *symbol);
 | 
				
			||||||
void                  eek_symbol_set_category  (EekSymbol        *symbol,
 | 
					void              eek_symbol_set_category       (EekSymbol        *symbol,
 | 
				
			||||||
                                                EekSymbolCategory category);
 | 
					                                                 EekSymbolCategory category);
 | 
				
			||||||
EekSymbolCategory     eek_symbol_get_category  (EekSymbol        *symbol);
 | 
					EekSymbolCategory eek_symbol_get_category       (EekSymbol        *symbol);
 | 
				
			||||||
EekModifierType       eek_symbol_get_modifier_mask
 | 
					EekModifierType   eek_symbol_get_modifier_mask  (EekSymbol        *symbol);
 | 
				
			||||||
                                               (EekSymbol        *symbol);
 | 
					void              eek_symbol_set_modifier_mask  (EekSymbol        *symbol,
 | 
				
			||||||
void                  eek_symbol_set_modifier_mask
 | 
					                                                 EekModifierType   mask);
 | 
				
			||||||
                                               (EekSymbol        *symbol,
 | 
					gboolean          eek_symbol_is_modifier        (EekSymbol        *symbol);
 | 
				
			||||||
                                                EekModifierType   mask);
 | 
					void              eek_symbol_set_icon_name      (EekSymbol        *symbol,
 | 
				
			||||||
gboolean              eek_symbol_is_modifier   (EekSymbol        *symbol);
 | 
					                                                 const gchar      *icon_name);
 | 
				
			||||||
void                  eek_symbol_set_icon_name (EekSymbol        *symbol,
 | 
					const gchar      *eek_symbol_get_icon_name      (EekSymbol        *symbol);
 | 
				
			||||||
                                                const gchar      *icon_name);
 | 
					void              eek_symbol_set_tooltip        (EekSymbol        *symbol,
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_get_icon_name (EekSymbol        *symbol);
 | 
					                                                 const gchar      *tooltip);
 | 
				
			||||||
 | 
					const gchar *     eek_symbol_get_tooltip        (EekSymbol        *symbol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_CONST_RETURN gchar *eek_symbol_category_get_name
 | 
					const gchar      *eek_symbol_category_get_name  (EekSymbolCategory category);
 | 
				
			||||||
                                               (EekSymbolCategory category);
 | 
					EekSymbolCategory eek_symbol_category_from_name (const gchar      *name);
 | 
				
			||||||
EekSymbolCategory     eek_symbol_category_from_name
 | 
					 | 
				
			||||||
                                               (const gchar      *name);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -44,7 +44,11 @@
 | 
				
			|||||||
#include "eek-key.h"
 | 
					#include "eek-key.h"
 | 
				
			||||||
#include "eek-keysym.h"
 | 
					#include "eek-keysym.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define noKBDRAW_DEBUG
 | 
					#define XKB_COMPONENT_MASK (XkbGBN_GeometryMask |       \
 | 
				
			||||||
 | 
					                            XkbGBN_KeyNamesMask |       \
 | 
				
			||||||
 | 
					                            XkbGBN_OtherNamesMask |     \
 | 
				
			||||||
 | 
					                            XkbGBN_SymbolsMask |        \
 | 
				
			||||||
 | 
					                            XkbGBN_IndicatorMapMask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void initable_iface_init (GInitableIface *initable_iface);
 | 
					static void initable_iface_init (GInitableIface *initable_iface);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -58,9 +62,6 @@ G_DEFINE_TYPE_WITH_CODE (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT,
 | 
				
			|||||||
enum {
 | 
					enum {
 | 
				
			||||||
    PROP_0,
 | 
					    PROP_0,
 | 
				
			||||||
    PROP_DISPLAY,
 | 
					    PROP_DISPLAY,
 | 
				
			||||||
    PROP_KEYCODES,
 | 
					 | 
				
			||||||
    PROP_GEOMETRY,
 | 
					 | 
				
			||||||
    PROP_SYMBOLS,
 | 
					 | 
				
			||||||
    PROP_LAST
 | 
					    PROP_LAST
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -83,19 +84,18 @@ struct _EekXkbLayoutPrivate
 | 
				
			|||||||
    gint scale_denominator;
 | 
					    gint scale_denominator;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static guint
 | 
					static guint    find_keycode             (EekXkbLayout *layout,
 | 
				
			||||||
find_keycode (EekXkbLayout *layout, gchar *key_name);
 | 
					                                          gchar        *key_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static gboolean get_keyboard_from_server (EekXkbLayout *layout,
 | 
				
			||||||
get_keyboard (EekXkbLayout *layout);
 | 
					                                          GError      **error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static gboolean get_names_from_server    (EekXkbLayout *layout,
 | 
				
			||||||
get_names (EekXkbLayout *layout);
 | 
					                                          GError      **error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void     setup_scaling            (EekXkbLayout *layout,
 | 
				
			||||||
setup_scaling (EekXkbLayout *layout,
 | 
					                                          gdouble       width,
 | 
				
			||||||
               gdouble       width,
 | 
					                                          gdouble       height);
 | 
				
			||||||
               gdouble       height);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_INLINE_FUNC gint
 | 
					G_INLINE_FUNC gint
 | 
				
			||||||
xkb_to_pixmap_coord (EekXkbLayout *layout,
 | 
					xkb_to_pixmap_coord (EekXkbLayout *layout,
 | 
				
			||||||
@ -149,7 +149,8 @@ create_key (EekXkbLayout *layout,
 | 
				
			|||||||
            xkbshape->primary;
 | 
					            xkbshape->primary;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        outline = g_slice_new (EekOutline);
 | 
					        outline = g_slice_new (EekOutline);
 | 
				
			||||||
        outline->corner_radius = xkb_to_pixmap_coord(layout, xkboutline->corner_radius);
 | 
					        outline->corner_radius = xkb_to_pixmap_coord(layout,
 | 
				
			||||||
 | 
					                                                     xkboutline->corner_radius);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (xkboutline->num_points <= 2) { /* rectangular */
 | 
					        if (xkboutline->num_points <= 2) { /* rectangular */
 | 
				
			||||||
            gdouble x1, y1, x2, y2;
 | 
					            gdouble x1, y1, x2, y2;
 | 
				
			||||||
@ -370,24 +371,11 @@ eek_xkb_layout_set_property (GObject      *object,
 | 
				
			|||||||
                             GParamSpec   *pspec)
 | 
					                             GParamSpec   *pspec)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
 | 
					    EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
 | 
				
			||||||
    const gchar *name;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (prop_id) {
 | 
					    switch (prop_id) {
 | 
				
			||||||
    case PROP_DISPLAY:
 | 
					    case PROP_DISPLAY:
 | 
				
			||||||
        layout->priv->display = g_value_get_pointer (value);
 | 
					        layout->priv->display = g_value_get_pointer (value);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_KEYCODES:
 | 
					 | 
				
			||||||
        name = g_value_get_string (value);
 | 
					 | 
				
			||||||
        eek_xkb_layout_set_keycodes (EEK_XKB_LAYOUT(object), name);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case PROP_GEOMETRY:
 | 
					 | 
				
			||||||
        name = g_value_get_string (value);
 | 
					 | 
				
			||||||
        eek_xkb_layout_set_geometry (EEK_XKB_LAYOUT(object), name);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case PROP_SYMBOLS:
 | 
					 | 
				
			||||||
        name = g_value_get_string (value);
 | 
					 | 
				
			||||||
        eek_xkb_layout_set_symbols (EEK_XKB_LAYOUT(object), name);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -401,24 +389,11 @@ eek_xkb_layout_get_property (GObject    *object,
 | 
				
			|||||||
                             GParamSpec *pspec)
 | 
					                             GParamSpec *pspec)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
 | 
					    EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
 | 
				
			||||||
    const gchar *name;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (prop_id) {
 | 
					    switch (prop_id) {
 | 
				
			||||||
    case PROP_DISPLAY:
 | 
					    case PROP_DISPLAY:
 | 
				
			||||||
        g_value_set_pointer (value, layout->priv->display);
 | 
					        g_value_set_pointer (value, layout->priv->display);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_KEYCODES:
 | 
					 | 
				
			||||||
        name = eek_xkb_layout_get_keycodes (EEK_XKB_LAYOUT(object));
 | 
					 | 
				
			||||||
        g_value_set_string (value, name);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case PROP_GEOMETRY:
 | 
					 | 
				
			||||||
        name = eek_xkb_layout_get_geometry (EEK_XKB_LAYOUT(object));
 | 
					 | 
				
			||||||
        g_value_set_string (value, name);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case PROP_SYMBOLS:
 | 
					 | 
				
			||||||
        name = eek_xkb_layout_get_symbols (EEK_XKB_LAYOUT(object));
 | 
					 | 
				
			||||||
        g_value_set_string (value, name);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -446,27 +421,6 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
 | 
				
			|||||||
                                  G_PARAM_READWRITE |
 | 
					                                  G_PARAM_READWRITE |
 | 
				
			||||||
                                  G_PARAM_CONSTRUCT_ONLY);
 | 
					                                  G_PARAM_CONSTRUCT_ONLY);
 | 
				
			||||||
    g_object_class_install_property (gobject_class, PROP_DISPLAY, pspec);
 | 
					    g_object_class_install_property (gobject_class, PROP_DISPLAY, pspec);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    pspec = g_param_spec_string ("keycodes",
 | 
					 | 
				
			||||||
				 "Keycodes",
 | 
					 | 
				
			||||||
				 "XKB keycodes component name",
 | 
					 | 
				
			||||||
				 NULL,
 | 
					 | 
				
			||||||
				 G_PARAM_READWRITE);
 | 
					 | 
				
			||||||
    g_object_class_install_property (gobject_class, PROP_KEYCODES, pspec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pspec = g_param_spec_string ("geometry",
 | 
					 | 
				
			||||||
                                 "Geometry",
 | 
					 | 
				
			||||||
                                 "XKB geometry component name",
 | 
					 | 
				
			||||||
                                 NULL,
 | 
					 | 
				
			||||||
                                 G_PARAM_READWRITE);
 | 
					 | 
				
			||||||
    g_object_class_install_property (gobject_class, PROP_GEOMETRY, pspec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pspec = g_param_spec_string ("symbols",
 | 
					 | 
				
			||||||
                                 "Symbols",
 | 
					 | 
				
			||||||
                                 "XKB symbols component name",
 | 
					 | 
				
			||||||
                                 NULL,
 | 
					 | 
				
			||||||
                                 G_PARAM_READWRITE);
 | 
					 | 
				
			||||||
    g_object_class_install_property (gobject_class, PROP_SYMBOLS, pspec);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -475,8 +429,9 @@ eek_xkb_layout_init (EekXkbLayout *self)
 | 
				
			|||||||
    self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
 | 
					    self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static gboolean
 | 
				
			||||||
get_names (EekXkbLayout *layout)
 | 
					get_names_from_server (EekXkbLayout *layout,
 | 
				
			||||||
 | 
					                       GError      **error)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
					    EekXkbLayoutPrivate *priv = layout->priv;
 | 
				
			||||||
    gchar *name;
 | 
					    gchar *name;
 | 
				
			||||||
@ -524,6 +479,8 @@ get_names (EekXkbLayout *layout)
 | 
				
			|||||||
            XFree (name);
 | 
					            XFree (name);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -546,252 +503,76 @@ eek_xkb_layout_new (Display *display,
 | 
				
			|||||||
 * eek_xkb_layout_set_names: (skip)
 | 
					 * eek_xkb_layout_set_names: (skip)
 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 * @layout: an #EekXkbLayout
 | 
				
			||||||
 * @names: XKB component names
 | 
					 * @names: XKB component names
 | 
				
			||||||
 | 
					 * @error: a #GError
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Set the XKB component names to @layout.
 | 
					 * Set the XKB component names to @layout.
 | 
				
			||||||
 * Returns: %TRUE if any of the component names changed, %FALSE otherwise
 | 
					 * Returns: %TRUE if the component names are successfully set, %FALSE otherwise
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
gboolean
 | 
					gboolean
 | 
				
			||||||
eek_xkb_layout_set_names (EekXkbLayout *layout, XkbComponentNamesRec *names)
 | 
					eek_xkb_layout_set_names (EekXkbLayout         *layout,
 | 
				
			||||||
 | 
					                          XkbComponentNamesRec *names,
 | 
				
			||||||
 | 
					                          GError              **error)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					    if (g_strcmp0 (names->keycodes, layout->priv->names.keycodes)) {
 | 
				
			||||||
    gboolean retval;
 | 
					        g_free (layout->priv->names.keycodes);
 | 
				
			||||||
 | 
					        layout->priv->names.keycodes = g_strdup (names->keycodes);
 | 
				
			||||||
    g_return_val_if_fail (priv, FALSE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (g_strcmp0 (names->keycodes, priv->names.keycodes)) {
 | 
					 | 
				
			||||||
        g_free (priv->names.keycodes);
 | 
					 | 
				
			||||||
        priv->names.keycodes = g_strdup (names->keycodes);
 | 
					 | 
				
			||||||
        retval = TRUE;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (names->geometry, priv->names.geometry)) {
 | 
					    if (g_strcmp0 (names->geometry, layout->priv->names.geometry)) {
 | 
				
			||||||
        g_free (priv->names.geometry);
 | 
					        g_free (layout->priv->names.geometry);
 | 
				
			||||||
        priv->names.geometry = g_strdup (names->geometry);
 | 
					        layout->priv->names.geometry = g_strdup (names->geometry);
 | 
				
			||||||
        retval = TRUE;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (names->symbols, priv->names.symbols)) {
 | 
					    if (g_strcmp0 (names->symbols, layout->priv->names.symbols)) {
 | 
				
			||||||
        g_free (priv->names.symbols);
 | 
					        g_free (layout->priv->names.symbols);
 | 
				
			||||||
        priv->names.symbols = g_strdup (names->symbols);
 | 
					        layout->priv->names.symbols = g_strdup (names->symbols);
 | 
				
			||||||
        retval = TRUE;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get_keyboard (layout);
 | 
					    return get_keyboard_from_server (layout, error);
 | 
				
			||||||
    g_assert (priv->xkb);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return retval;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					static gboolean
 | 
				
			||||||
 * eek_xkb_layout_set_names_full:
 | 
					get_keyboard_from_server (EekXkbLayout *layout,
 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					                          GError      **error)
 | 
				
			||||||
 * @Varargs: pairs of component name and value, terminated by NULL.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Set the XKB component names to @layout.  This function is merely a
 | 
					 | 
				
			||||||
 * wrapper around eek_xkb_layout_set_names() to avoid passing a
 | 
					 | 
				
			||||||
 * pointer of XkbComponentNamesRec, which is not currently available
 | 
					 | 
				
			||||||
 * in the gobject-introspection repository.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Available component names are: keymap, keycodes, types, compat,
 | 
					 | 
				
			||||||
 * symbols, geometry.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Returns: %TRUE if the component name is successfully set, %FALSE otherwise
 | 
					 | 
				
			||||||
 * Since: 0.0.2
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gboolean
 | 
					 | 
				
			||||||
eek_xkb_layout_set_names_full (EekXkbLayout *layout,
 | 
					 | 
				
			||||||
                               ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    va_list var_args;
 | 
					 | 
				
			||||||
    gboolean retval;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    va_start (var_args, layout);
 | 
					 | 
				
			||||||
    retval = eek_xkb_layout_set_names_full_valist (layout, var_args);
 | 
					 | 
				
			||||||
    va_end (var_args);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return retval;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_set_names_full_valist:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 * @var_args: <type>va_list</type> of pairs of component name and value.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See eek_xkb_layout_set_names_full(), this version takes a
 | 
					 | 
				
			||||||
 * <type>va_list</type> for language bindings to use.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Since: 0.0.5
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gboolean
 | 
					 | 
				
			||||||
eek_xkb_layout_set_names_full_valist (EekXkbLayout *layout,
 | 
					 | 
				
			||||||
                                      va_list       var_args)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    XkbComponentNamesRec names;
 | 
					 | 
				
			||||||
    gchar *name, *value;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memset (&names, 0, sizeof names);
 | 
					 | 
				
			||||||
    name = va_arg (var_args, gchar *);
 | 
					 | 
				
			||||||
    while (name) {
 | 
					 | 
				
			||||||
        value = va_arg (var_args, gchar *);
 | 
					 | 
				
			||||||
        if (g_strcmp0 (name, "keymap") == 0)
 | 
					 | 
				
			||||||
            names.keymap = (char *)value;
 | 
					 | 
				
			||||||
        else if (g_strcmp0 (name, "keycodes") == 0)
 | 
					 | 
				
			||||||
            names.keycodes = (char *)value;
 | 
					 | 
				
			||||||
        else if (g_strcmp0 (name, "types") == 0)
 | 
					 | 
				
			||||||
            names.types = (char *)value;
 | 
					 | 
				
			||||||
        else if (g_strcmp0 (name, "compat") == 0)
 | 
					 | 
				
			||||||
            names.compat = (char *)value;
 | 
					 | 
				
			||||||
        else if (g_strcmp0 (name, "symbols") == 0)
 | 
					 | 
				
			||||||
            names.symbols = (char *)value;
 | 
					 | 
				
			||||||
        else if (g_strcmp0 (name, "geometry") == 0)
 | 
					 | 
				
			||||||
            names.geometry = (char *)value;
 | 
					 | 
				
			||||||
        name = va_arg (var_args, gchar *);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return eek_xkb_layout_set_names (layout, &names);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_set_keycodes:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 * @keycodes: component name for keycodes
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Set the keycodes component (in the XKB terminology).
 | 
					 | 
				
			||||||
 * Returns: %TRUE if the component name is successfully set, %FALSE otherwise
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gboolean
 | 
					 | 
				
			||||||
eek_xkb_layout_set_keycodes (EekXkbLayout *layout, const gchar *keycodes)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					 | 
				
			||||||
    XkbComponentNamesRec names;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (priv, FALSE);
 | 
					 | 
				
			||||||
    memcpy (&names, &priv->names, sizeof names);
 | 
					 | 
				
			||||||
    names.keycodes = (gchar *)keycodes;
 | 
					 | 
				
			||||||
    return eek_xkb_layout_set_names (layout, &names);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_set_geometry:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 * @geometry: component name for geometry
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Returns: %TRUE if the component name is successfully set, %FALSE otherwise
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gboolean
 | 
					 | 
				
			||||||
eek_xkb_layout_set_geometry (EekXkbLayout *layout, const gchar *geometry)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					 | 
				
			||||||
    XkbComponentNamesRec names;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (priv, FALSE);
 | 
					 | 
				
			||||||
    memcpy (&names, &priv->names, sizeof names);
 | 
					 | 
				
			||||||
    names.geometry = (gchar *)geometry;
 | 
					 | 
				
			||||||
    return eek_xkb_layout_set_names (layout, &names);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_set_symbols:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 * @symbols: component name for symbols
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Set the symbols component (in the XKB terminology).
 | 
					 | 
				
			||||||
 * Returns: %TRUE if the component name is successfully set, %FALSE otherwise
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gboolean
 | 
					 | 
				
			||||||
eek_xkb_layout_set_symbols (EekXkbLayout *layout, const gchar *symbols)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					 | 
				
			||||||
    XkbComponentNamesRec names;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (priv, FALSE);
 | 
					 | 
				
			||||||
    memcpy (&names, &priv->names, sizeof names);
 | 
					 | 
				
			||||||
    names.symbols = (gchar *)symbols;
 | 
					 | 
				
			||||||
    return eek_xkb_layout_set_names (layout, &names);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_get_keycodes:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Get the keycodes component name (in the XKB terminology).
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					 | 
				
			||||||
eek_xkb_layout_get_keycodes (EekXkbLayout *layout)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (priv, NULL);
 | 
					 | 
				
			||||||
    return priv->names.keycodes;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_get_geometry:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Get the geometry component name (in the XKB terminology).
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					 | 
				
			||||||
eek_xkb_layout_get_geometry (EekXkbLayout *layout)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (priv, NULL);
 | 
					 | 
				
			||||||
    return priv->names.geometry;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_xkb_layout_get_symbols:
 | 
					 | 
				
			||||||
 * @layout: an #EekXkbLayout
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Get the symbols component name (in the XKB terminology).
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
G_CONST_RETURN gchar *
 | 
					 | 
				
			||||||
eek_xkb_layout_get_symbols (EekXkbLayout *layout)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (layout);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (priv, NULL);
 | 
					 | 
				
			||||||
    return priv->names.symbols;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
get_keyboard (EekXkbLayout *layout)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
					    EekXkbLayoutPrivate *priv = layout->priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->xkb)
 | 
					    if (priv->xkb) {
 | 
				
			||||||
        XkbFreeKeyboard (priv->xkb, 0, TRUE);	/* free_all = TRUE */
 | 
					        XkbFreeKeyboard (priv->xkb, 0, True);
 | 
				
			||||||
    priv->xkb = NULL;
 | 
					        priv->xkb = NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->names.keycodes &&
 | 
					    if (priv->names.keycodes && priv->names.geometry && priv->names.symbols) {
 | 
				
			||||||
        priv->names.geometry &&
 | 
					        priv->xkb = XkbGetKeyboardByName (priv->display,
 | 
				
			||||||
        priv->names.symbols) {
 | 
					                                          XkbUseCoreKbd,
 | 
				
			||||||
        priv->xkb = XkbGetKeyboardByName (priv->display, XkbUseCoreKbd,
 | 
					                                          &priv->names,
 | 
				
			||||||
                                          &priv->names, 0,
 | 
					                                          0,
 | 
				
			||||||
                                          XkbGBN_GeometryMask |
 | 
					                                          XKB_COMPONENT_MASK,
 | 
				
			||||||
                                          XkbGBN_KeyNamesMask |
 | 
					                                          False);
 | 
				
			||||||
                                          XkbGBN_OtherNamesMask |
 | 
					 | 
				
			||||||
                                          XkbGBN_ClientSymbolsMask |
 | 
					 | 
				
			||||||
                                          XkbGBN_IndicatorMapMask, FALSE);
 | 
					 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        priv->xkb = XkbGetKeyboard (priv->display,
 | 
					        priv->xkb = XkbGetKeyboard (priv->display,
 | 
				
			||||||
                                    XkbGBN_GeometryMask |
 | 
					                                    XKB_COMPONENT_MASK,
 | 
				
			||||||
                                    XkbGBN_KeyNamesMask |
 | 
					 | 
				
			||||||
                                    XkbGBN_OtherNamesMask |
 | 
					 | 
				
			||||||
                                    XkbGBN_SymbolsMask |
 | 
					 | 
				
			||||||
                                    XkbGBN_IndicatorMapMask,
 | 
					 | 
				
			||||||
                                    XkbUseCoreKbd);
 | 
					                                    XkbUseCoreKbd);
 | 
				
			||||||
        get_names (layout);
 | 
					        if (!get_names_from_server (layout, error)) {
 | 
				
			||||||
 | 
					            XkbFreeKeyboard (priv->xkb, 0, True);
 | 
				
			||||||
 | 
					            priv->xkb = NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->xkb == NULL) {
 | 
					    if (priv->xkb == NULL) {
 | 
				
			||||||
 | 
					        g_set_error (error,
 | 
				
			||||||
 | 
					                     EEK_ERROR,
 | 
				
			||||||
 | 
					                     EEK_ERROR_LAYOUT_ERROR,
 | 
				
			||||||
 | 
					                     "can't get keyboard from server");
 | 
				
			||||||
        g_free (priv->names.keycodes);
 | 
					        g_free (priv->names.keycodes);
 | 
				
			||||||
        priv->names.keycodes = NULL;
 | 
					        priv->names.keycodes = NULL;
 | 
				
			||||||
        g_free (priv->names.geometry);
 | 
					        g_free (priv->names.geometry);
 | 
				
			||||||
        priv->names.geometry = NULL;
 | 
					        priv->names.geometry = NULL;
 | 
				
			||||||
        g_free (priv->names.symbols);
 | 
					        g_free (priv->names.symbols);
 | 
				
			||||||
        priv->names.symbols = NULL;
 | 
					        priv->names.symbols = NULL;
 | 
				
			||||||
 | 
					        return FALSE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -810,11 +591,6 @@ find_keycode (EekXkbLayout *layout, gchar *key_name)
 | 
				
			|||||||
    if (!priv->xkb)
 | 
					    if (!priv->xkb)
 | 
				
			||||||
        return EEK_INVALID_KEYCODE;
 | 
					        return EEK_INVALID_KEYCODE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef KBDRAW_DEBUG
 | 
					 | 
				
			||||||
    printf ("    looking for keycode for (%c%c%c%c)\n",
 | 
					 | 
				
			||||||
            key_name[0], key_name[1], key_name[2], key_name[3]);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pkey = priv->xkb->names->keys + priv->xkb->min_key_code;
 | 
					    pkey = priv->xkb->names->keys + priv->xkb->min_key_code;
 | 
				
			||||||
    for (keycode = priv->xkb->min_key_code;
 | 
					    for (keycode = priv->xkb->min_key_code;
 | 
				
			||||||
         keycode <= priv->xkb->max_key_code; keycode++) {
 | 
					         keycode <= priv->xkb->max_key_code; keycode++) {
 | 
				
			||||||
@ -829,12 +605,8 @@ find_keycode (EekXkbLayout *layout, gchar *key_name)
 | 
				
			|||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (is_name_matched) {
 | 
					        if (is_name_matched)
 | 
				
			||||||
#ifdef KBDRAW_DEBUG
 | 
					 | 
				
			||||||
            printf ("      found keycode %u\n", keycode);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
            return keycode;
 | 
					            return keycode;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        pkey++;
 | 
					        pkey++;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -854,9 +626,6 @@ find_keycode (EekXkbLayout *layout, gchar *key_name)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (is_name_matched) {
 | 
					        if (is_name_matched) {
 | 
				
			||||||
            keycode = find_keycode (layout, palias->real);
 | 
					            keycode = find_keycode (layout, palias->real);
 | 
				
			||||||
#ifdef KBDRAW_DEBUG
 | 
					 | 
				
			||||||
            printf ("found alias keycode %u\n", keycode);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
            return keycode;
 | 
					            return keycode;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        palias++;
 | 
					        palias++;
 | 
				
			||||||
@ -894,34 +663,11 @@ initable_init (GInitable    *initable,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    EekXkbLayout *layout = EEK_XKB_LAYOUT (initable);
 | 
					    EekXkbLayout *layout = EEK_XKB_LAYOUT (initable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* XXX: XkbClientMapMask | XkbIndicatorMapMask | XkbNamesMask |
 | 
					    if (!get_keyboard_from_server (layout, error))
 | 
				
			||||||
       XkbGeometryMask */
 | 
					 | 
				
			||||||
    layout->priv->xkb = XkbGetKeyboard (layout->priv->display,
 | 
					 | 
				
			||||||
                                        XkbGBN_GeometryMask |
 | 
					 | 
				
			||||||
                                        XkbGBN_KeyNamesMask |
 | 
					 | 
				
			||||||
                                        XkbGBN_OtherNamesMask |
 | 
					 | 
				
			||||||
                                        XkbGBN_SymbolsMask |
 | 
					 | 
				
			||||||
                                        XkbGBN_IndicatorMapMask,
 | 
					 | 
				
			||||||
                                        XkbUseCoreKbd);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (layout->priv->xkb == NULL) {
 | 
					 | 
				
			||||||
        g_set_error (error,
 | 
					 | 
				
			||||||
                     EEK_ERROR,
 | 
					 | 
				
			||||||
                     EEK_ERROR_LAYOUT_ERROR,
 | 
					 | 
				
			||||||
                     "can't get initial XKB keyboard configuration");
 | 
					 | 
				
			||||||
        return FALSE;
 | 
					        return FALSE;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get_names (layout);
 | 
					    if (!get_names_from_server (layout, error))
 | 
				
			||||||
    get_keyboard (layout);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if (layout->priv->xkb == NULL) {
 | 
					 | 
				
			||||||
        g_set_error (error,
 | 
					 | 
				
			||||||
                     EEK_ERROR,
 | 
					 | 
				
			||||||
                     EEK_ERROR_LAYOUT_ERROR,
 | 
					 | 
				
			||||||
                     "can't get XKB keyboard configuration");
 | 
					 | 
				
			||||||
        return FALSE;
 | 
					        return FALSE;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -60,29 +60,13 @@ struct _EekXkbLayoutClass
 | 
				
			|||||||
    gpointer pdummy[24];
 | 
					    gpointer pdummy[24];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType        eek_xkb_layout_get_type       (void) G_GNUC_CONST;
 | 
					GType      eek_xkb_layout_get_type  (void) G_GNUC_CONST;
 | 
				
			||||||
EekLayout   *eek_xkb_layout_new            (Display              *display,
 | 
					EekLayout *eek_xkb_layout_new       (Display              *display,
 | 
				
			||||||
                                            GError              **error);
 | 
					                                     GError              **error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean     eek_xkb_layout_set_names      (EekXkbLayout         *layout,
 | 
					gboolean   eek_xkb_layout_set_names (EekXkbLayout         *layout,
 | 
				
			||||||
                                            XkbComponentNamesRec *names);
 | 
					                                     XkbComponentNamesRec *names,
 | 
				
			||||||
 | 
					                                     GError              **error);
 | 
				
			||||||
gboolean     eek_xkb_layout_set_names_full (EekXkbLayout         *layout,
 | 
					 | 
				
			||||||
                                            ...);
 | 
					 | 
				
			||||||
gboolean     eek_xkb_layout_set_names_full_valist
 | 
					 | 
				
			||||||
                                           (EekXkbLayout         *layout,
 | 
					 | 
				
			||||||
                                            va_list               var_args);
 | 
					 | 
				
			||||||
                                        
 | 
					 | 
				
			||||||
gboolean     eek_xkb_layout_set_keycodes   (EekXkbLayout         *layout,
 | 
					 | 
				
			||||||
                                            const gchar          *keycodes);
 | 
					 | 
				
			||||||
gboolean     eek_xkb_layout_set_geometry   (EekXkbLayout         *layout,
 | 
					 | 
				
			||||||
                                            const gchar          *geometry);
 | 
					 | 
				
			||||||
gboolean     eek_xkb_layout_set_symbols    (EekXkbLayout         *layout,
 | 
					 | 
				
			||||||
                                            const gchar          *symbols);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const gchar *eek_xkb_layout_get_keycodes   (EekXkbLayout         *layout);
 | 
					 | 
				
			||||||
const gchar *eek_xkb_layout_get_geometry   (EekXkbLayout         *layout);
 | 
					 | 
				
			||||||
const gchar *eek_xkb_layout_get_symbols    (EekXkbLayout         *layout);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
#endif				/* #ifndef EEK_XKB_LAYOUT_H */
 | 
					#endif				/* #ifndef EEK_XKB_LAYOUT_H */
 | 
				
			||||||
 | 
				
			|||||||
@ -589,7 +589,12 @@ set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (xkl_xkb_config_native_prepare (priv->engine, config, &names)) {
 | 
					    if (xkl_xkb_config_native_prepare (priv->engine, config, &names)) {
 | 
				
			||||||
        retval = eek_xkb_layout_set_names (EEK_XKB_LAYOUT(layout), &names);
 | 
					        GError *error = NULL;
 | 
				
			||||||
 | 
					        retval = eek_xkb_layout_set_names (EEK_XKB_LAYOUT(layout),
 | 
				
			||||||
 | 
					                                           &names,
 | 
				
			||||||
 | 
					                                           &error);
 | 
				
			||||||
 | 
					        if (!retval)
 | 
				
			||||||
 | 
					            g_warning ("can't set XKB layout");
 | 
				
			||||||
        xkl_xkb_config_native_cleanup (priv->engine, &names);
 | 
					        xkl_xkb_config_native_cleanup (priv->engine, &names);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return retval;
 | 
					    return retval;
 | 
				
			||||||
@ -645,7 +650,8 @@ initable_init (GInitable    *initable,
 | 
				
			|||||||
        return FALSE;
 | 
					        return FALSE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return set_xkb_component_names (layout, layout->priv->config);
 | 
					    set_xkb_component_names (layout, layout->priv->config);
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
 | 
				
			|||||||
@ -240,6 +240,7 @@ struct _GeometryParseData {
 | 
				
			|||||||
    EekSection *section;
 | 
					    EekSection *section;
 | 
				
			||||||
    EekKey *key;
 | 
					    EekKey *key;
 | 
				
			||||||
    gint num_columns;
 | 
					    gint num_columns;
 | 
				
			||||||
 | 
					    gint num_rows;
 | 
				
			||||||
    EekOrientation orientation;
 | 
					    EekOrientation orientation;
 | 
				
			||||||
    gdouble corner_radius;
 | 
					    gdouble corner_radius;
 | 
				
			||||||
    GSList *points;
 | 
					    GSList *points;
 | 
				
			||||||
@ -287,8 +288,8 @@ static const gchar *geometry_valid_path_list[] = {
 | 
				
			|||||||
    "outline/geometry",
 | 
					    "outline/geometry",
 | 
				
			||||||
    "bounds/section/geometry",
 | 
					    "bounds/section/geometry",
 | 
				
			||||||
    "row/section/geometry",
 | 
					    "row/section/geometry",
 | 
				
			||||||
    "key/section/geometry",
 | 
					    "key/row/section/geometry",
 | 
				
			||||||
    "bounds/key/section/geometry",
 | 
					    "bounds/key/row/section/geometry",
 | 
				
			||||||
    "point/outline/geometry",
 | 
					    "point/outline/geometry",
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -384,27 +385,21 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (element_name, "row") == 0) {
 | 
					    if (g_strcmp0 (element_name, "row") == 0) {
 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					 | 
				
			||||||
                                   "columns");
 | 
					 | 
				
			||||||
        if (attribute == NULL) {
 | 
					 | 
				
			||||||
            g_set_error (error,
 | 
					 | 
				
			||||||
                         G_MARKUP_ERROR,
 | 
					 | 
				
			||||||
                         G_MARKUP_ERROR_MISSING_ATTRIBUTE,
 | 
					 | 
				
			||||||
                         "no \"columns\" attribute for \"row\"");
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        data->num_columns = strtol (attribute, NULL, 10);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
                                   "orientation");
 | 
					                                   "orientation");
 | 
				
			||||||
        if (attribute != NULL)
 | 
					        if (attribute != NULL)
 | 
				
			||||||
            data->orientation = strtol (attribute, NULL, 10);
 | 
					            data->orientation = strtol (attribute, NULL, 10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        eek_section_add_row (data->section,
 | 
				
			||||||
 | 
					                             data->num_columns,
 | 
				
			||||||
 | 
					                             data->orientation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        data->num_rows++;
 | 
				
			||||||
        goto out;
 | 
					        goto out;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (element_name, "key") == 0) {
 | 
					    if (g_strcmp0 (element_name, "key") == 0) {
 | 
				
			||||||
        guint keycode;
 | 
					        guint keycode;
 | 
				
			||||||
        gint column, row;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
                                   "keycode");
 | 
					                                   "keycode");
 | 
				
			||||||
@ -417,29 +412,10 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        keycode = strtoul (attribute, NULL, 10);
 | 
					        keycode = strtoul (attribute, NULL, 10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					        data->key = eek_section_create_key (data->section,
 | 
				
			||||||
                                   "column");
 | 
					                                            keycode,
 | 
				
			||||||
        if (attribute == NULL) {
 | 
					                                            data->num_columns,
 | 
				
			||||||
            g_set_error (error,
 | 
					                                            data->num_rows - 1);
 | 
				
			||||||
                         G_MARKUP_ERROR,
 | 
					 | 
				
			||||||
                         G_MARKUP_ERROR_MISSING_ATTRIBUTE,
 | 
					 | 
				
			||||||
                         "no \"column\" attribute for \"key\"");
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        column = strtol (attribute, NULL, 10);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					 | 
				
			||||||
                                   "row");
 | 
					 | 
				
			||||||
        if (attribute == NULL) {
 | 
					 | 
				
			||||||
            g_set_error (error,
 | 
					 | 
				
			||||||
                         G_MARKUP_ERROR,
 | 
					 | 
				
			||||||
                         G_MARKUP_ERROR_MISSING_ATTRIBUTE,
 | 
					 | 
				
			||||||
                         "no \"row\" attribute for \"row\"");
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        row = strtol (attribute, NULL, 10);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        data->key = eek_section_create_key (data->section, keycode, column, row);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
                                   "name");
 | 
					                                   "name");
 | 
				
			||||||
@ -458,6 +434,9 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
        g_hash_table_insert (data->key_oref_hash,
 | 
					        g_hash_table_insert (data->key_oref_hash,
 | 
				
			||||||
                             data->key,
 | 
					                             data->key,
 | 
				
			||||||
                             g_strdup (attribute));
 | 
					                             g_strdup (attribute));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        data->num_columns++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        goto out;
 | 
					        goto out;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -533,6 +512,7 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (element_name, "section") == 0) {
 | 
					    if (g_strcmp0 (element_name, "section") == 0) {
 | 
				
			||||||
        data->section = NULL;
 | 
					        data->section = NULL;
 | 
				
			||||||
 | 
					        data->num_rows = 0;
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -541,6 +521,12 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (g_strcmp0 (element_name, "row") == 0) {
 | 
				
			||||||
 | 
					        data->num_columns = 0;
 | 
				
			||||||
 | 
					        data->orientation = EEK_ORIENTATION_HORIZONTAL;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (element_name, "outline") == 0) {
 | 
					    if (g_strcmp0 (element_name, "outline") == 0) {
 | 
				
			||||||
        EekOutline *outline = g_slice_new (EekOutline);
 | 
					        EekOutline *outline = g_slice_new (EekOutline);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -566,15 +552,6 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
        g_free (data->oref);
 | 
					        g_free (data->oref);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (g_strcmp0 (element_name, "row") == 0) {
 | 
					 | 
				
			||||||
        eek_section_add_row (data->section,
 | 
					 | 
				
			||||||
                             data->num_columns,
 | 
					 | 
				
			||||||
                             data->orientation);
 | 
					 | 
				
			||||||
        data->num_columns = 0;
 | 
					 | 
				
			||||||
        data->orientation = EEK_ORIENTATION_HORIZONTAL;
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const GMarkupParser geometry_parser = {
 | 
					static const GMarkupParser geometry_parser = {
 | 
				
			||||||
@ -594,6 +571,7 @@ struct _SymbolsParseData {
 | 
				
			|||||||
    GSList *symbols;
 | 
					    GSList *symbols;
 | 
				
			||||||
    gchar *label;
 | 
					    gchar *label;
 | 
				
			||||||
    gchar *icon;
 | 
					    gchar *icon;
 | 
				
			||||||
 | 
					    gchar *tooltip;
 | 
				
			||||||
    EekSymbolCategory category;
 | 
					    EekSymbolCategory category;
 | 
				
			||||||
    guint keyval;
 | 
					    guint keyval;
 | 
				
			||||||
    gint groups;
 | 
					    gint groups;
 | 
				
			||||||
@ -706,6 +684,11 @@ symbols_start_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
        if (attribute != NULL)
 | 
					        if (attribute != NULL)
 | 
				
			||||||
            data->icon = g_strdup (attribute);
 | 
					            data->icon = g_strdup (attribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
 | 
					                                   "tooltip");
 | 
				
			||||||
 | 
					        if (attribute != NULL)
 | 
				
			||||||
 | 
					            data->tooltip = g_strdup (attribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
					        attribute = get_attribute (attribute_names, attribute_values,
 | 
				
			||||||
                                   "category");
 | 
					                                   "category");
 | 
				
			||||||
        if (attribute != NULL)
 | 
					        if (attribute != NULL)
 | 
				
			||||||
@ -789,6 +772,11 @@ symbols_end_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
            g_free (data->icon);
 | 
					            g_free (data->icon);
 | 
				
			||||||
            data->icon = NULL;
 | 
					            data->icon = NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (data->tooltip) {
 | 
				
			||||||
 | 
					            eek_symbol_set_tooltip (symbol, data->tooltip);
 | 
				
			||||||
 | 
					            g_free (data->tooltip);
 | 
				
			||||||
 | 
					            data->tooltip = NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        data->symbols = g_slist_prepend (data->symbols, symbol);
 | 
					        data->symbols = g_slist_prepend (data->symbols, symbol);
 | 
				
			||||||
        goto out;
 | 
					        goto out;
 | 
				
			||||||
@ -1106,6 +1094,12 @@ initable_iface_init (GInitableIface *initable_iface)
 | 
				
			|||||||
    initable_iface->init = initable_init;
 | 
					    initable_iface->init = initable_init;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * eek_xml_list_keyboards:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * List available keyboards.
 | 
				
			||||||
 | 
					 * Returns: (transfer container) (element-type utf8): the list of keyboards
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
GList *
 | 
					GList *
 | 
				
			||||||
eek_xml_list_keyboards (void)
 | 
					eek_xml_list_keyboards (void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -16,55 +16,69 @@
 | 
				
			|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
					# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
				
			||||||
# 02110-1301 USA
 | 
					# 02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NULL =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lib_LTLIBRARIES = libeekboard.la
 | 
					lib_LTLIBRARIES = libeekboard.la
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeekboard_headers =				\
 | 
					libeekboard_headers =				\
 | 
				
			||||||
	eekboard-service.h			\
 | 
						$(srcdir)/eekboard-service.h		\
 | 
				
			||||||
	eekboard-context-service.h		\
 | 
						$(srcdir)/eekboard-context-service.h	\
 | 
				
			||||||
	eekboard-client.h			\
 | 
						$(srcdir)/eekboard-client.h		\
 | 
				
			||||||
	eekboard-context.h			\
 | 
						$(srcdir)/eekboard-context.h		\
 | 
				
			||||||
	eekboard-xklutil.h
 | 
						$(srcdir)/eekboard-xklutil.h		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeekboard_private_headers =			\
 | 
					libeekboard_private_headers =			\
 | 
				
			||||||
	eekboard-marshalers.h
 | 
						$(builddir)/eekboard-marshalers.h	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeekboard_sources =				\
 | 
					libeekboard_sources =				\
 | 
				
			||||||
	eekboard-service.c			\
 | 
						$(srcdir)/eekboard-service.c		\
 | 
				
			||||||
	eekboard-context-service.c		\
 | 
						$(srcdir)/eekboard-context-service.c	\
 | 
				
			||||||
	eekboard-client.c			\
 | 
						$(srcdir)/eekboard-client.c		\
 | 
				
			||||||
	eekboard-context.c			\
 | 
						$(srcdir)/eekboard-context.c		\
 | 
				
			||||||
	eekboard-xklutil.c
 | 
						$(srcdir)/eekboard-xklutil.c		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeekboard_marshalers_sources =		\
 | 
					libeekboard_marshalers_sources =		\
 | 
				
			||||||
	eekboard-marshalers.c			\
 | 
						$(builddir)/eekboard-marshalers.c	\
 | 
				
			||||||
	eekboard-marshalers.h
 | 
						$(builddir)/eekboard-marshalers.h	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILT_SOURCES =					\
 | 
					BUILT_SOURCES =					\
 | 
				
			||||||
	$(libeekboard_marshalers_sources)
 | 
						$(libeekboard_marshalers_sources)	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeekboard_la_SOURCES =			\
 | 
					libeekboard_la_SOURCES =			\
 | 
				
			||||||
	$(libeekboard_sources)			\
 | 
						$(libeekboard_sources)			\
 | 
				
			||||||
	eekboard-marshalers.c
 | 
						$(builddir)/eekboard-marshalers.c	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libeekboard_la_CFLAGS =					\
 | 
					libeekboard_la_CFLAGS =					\
 | 
				
			||||||
	-DEEKBOARD_COMPILATION=1			\
 | 
						-DEEKBOARD_COMPILATION=1			\
 | 
				
			||||||
	-DKEYBOARDDIR=\"$(pkgdatadir)/keyboards\"	\
 | 
						-DKEYBOARDDIR=\"$(pkgdatadir)/keyboards\"	\
 | 
				
			||||||
	-I$(top_srcdir)					\
 | 
						-I$(top_srcdir)					\
 | 
				
			||||||
	$(GIO2_CFLAGS)					\
 | 
						$(GIO2_CFLAGS)					\
 | 
				
			||||||
	$(LIBXKLAVIER_CFLAGS)
 | 
						$(LIBXKLAVIER_CFLAGS)				\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
libeekboard_la_LIBADD =				\
 | 
					libeekboard_la_LIBADD =				\
 | 
				
			||||||
	$(top_builddir)/eek/libeek.la		\
 | 
						$(top_builddir)/eek/libeek.la		\
 | 
				
			||||||
	$(top_builddir)/eek/libeek-xkl.la	\
 | 
						$(top_builddir)/eek/libeek-xkl.la	\
 | 
				
			||||||
	$(GIO2_LIBS)				\
 | 
						$(GIO2_LIBS)				\
 | 
				
			||||||
	$(LIBXKLAVIER_LIBS)
 | 
						$(LIBXKLAVIER_LIBS)			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eekboarddir = $(includedir)/eekboard-$(EEK_API_VERSION)/eekboard
 | 
					eekboarddir = $(includedir)/eekboard-$(EEK_API_VERSION)/eekboard
 | 
				
			||||||
eekboard_HEADERS = $(libeekboard_headers)
 | 
					eekboard_HEADERS = $(libeekboard_headers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
					pkgconfigdir = $(libdir)/pkgconfig
 | 
				
			||||||
pkgconfig_DATA =				\
 | 
					pkgconfig_DATA =				\
 | 
				
			||||||
	eekboard-$(EEK_API_VERSION).pc
 | 
						eekboard-$(EEK_API_VERSION).pc		\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
DISTCLEANFILES =				\
 | 
					DISTCLEANFILES =				\
 | 
				
			||||||
	$(BUILT_SOURCES)			\
 | 
						$(BUILT_SOURCES)			\
 | 
				
			||||||
	$(pkgconfig_DATA)
 | 
						$(pkgconfig_DATA)			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CLEANFILES =
 | 
					CLEANFILES =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -72,22 +86,37 @@ EXTRA_DIST = eekboard-marshalers.list
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# gen marshal
 | 
					# gen marshal
 | 
				
			||||||
eekboard-marshalers.h: eekboard-marshalers.list
 | 
					eekboard-marshalers.h: eekboard-marshalers.list
 | 
				
			||||||
	$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_eekboard_marshal $(srcdir)/eekboard-marshalers.list --header --internal > $@.tmp && \
 | 
						$(AM_V_GEN) $(GLIB_GENMARSHAL) \
 | 
				
			||||||
 | 
							--prefix=_eekboard_marshal \
 | 
				
			||||||
 | 
							$(srcdir)/eekboard-marshalers.list --header --internal \
 | 
				
			||||||
 | 
							> $@.tmp && \
 | 
				
			||||||
	mv $@.tmp $@
 | 
						mv $@.tmp $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eekboard-marshalers.c: eekboard-marshalers.list eekboard-marshalers.h
 | 
					eekboard-marshalers.c: eekboard-marshalers.list eekboard-marshalers.h
 | 
				
			||||||
	$(AM_V_GEN) (echo "#include \"eekboard-marshalers.h\""; \
 | 
						$(AM_V_GEN) (echo "#include \"eekboard-marshalers.h\""; \
 | 
				
			||||||
	$(GLIB_GENMARSHAL) --prefix=_eekboard_marshal $(srcdir)/eekboard-marshalers.list --body --internal) > $@.tmp && \
 | 
						$(GLIB_GENMARSHAL) \
 | 
				
			||||||
 | 
							--prefix=_eekboard_marshal \
 | 
				
			||||||
 | 
							$(srcdir)/eekboard-marshalers.list --body --internal) \
 | 
				
			||||||
 | 
							> $@.tmp && \
 | 
				
			||||||
	mv $@.tmp $@
 | 
						mv $@.tmp $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-include $(INTROSPECTION_MAKEFILE)
 | 
					-include $(INTROSPECTION_MAKEFILE)
 | 
				
			||||||
INTROSPECTION_GIRS =
 | 
					INTROSPECTION_GIRS =
 | 
				
			||||||
INTROSPECTION_SCANNER_ARGS = --add-include-path=$(builddir) --add-include-path=$(top_builddir)/eek
 | 
					INTROSPECTION_SCANNER_ARGS =			\
 | 
				
			||||||
INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) --includedir=$(top_srcdir)/eek
 | 
						--add-include-path=$(builddir)		\
 | 
				
			||||||
 | 
						--add-include-path=$(top_builddir)/eek	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					INTROSPECTION_COMPILER_ARGS =			\
 | 
				
			||||||
 | 
						--includedir=$(builddir)		\
 | 
				
			||||||
 | 
						--includedir=$(top_builddir)/eek	\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if HAVE_INTROSPECTION
 | 
					if HAVE_INTROSPECTION
 | 
				
			||||||
Eekboard@EEK_LIBRARY_SUFFIX@.gir: libeekboard.la
 | 
					Eekboard@EEK_LIBRARY_SUFFIX@.gir: libeekboard.la
 | 
				
			||||||
Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --strip-prefix=Eekboard
 | 
					Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS =	\
 | 
				
			||||||
 | 
						--identifier-prefix=Eekboard			\
 | 
				
			||||||
 | 
						--symbol-prefix=eekboard			\
 | 
				
			||||||
 | 
						$(NULL)
 | 
				
			||||||
Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = Eek@EEK_LIBRARY_SUFFIX@
 | 
					Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = Eek@EEK_LIBRARY_SUFFIX@
 | 
				
			||||||
Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeekboard_la_CFLAGS)
 | 
					Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeekboard_la_CFLAGS)
 | 
				
			||||||
Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeekboard.la
 | 
					Eekboard@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeekboard.la
 | 
				
			||||||
@ -103,3 +132,5 @@ typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CLEANFILES += $(gir_DATA) $(typelib_DATA)
 | 
					CLEANFILES += $(gir_DATA) $(typelib_DATA)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -325,6 +325,38 @@ eekboard_client_pop_context (EekboardClient *client,
 | 
				
			|||||||
                       NULL);
 | 
					                       NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eekboard_client_show_keyboard (EekboardClient  *client,
 | 
				
			||||||
 | 
					                               GCancellable    *cancellable)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    g_return_if_fail (EEKBOARD_IS_CLIENT(client));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_dbus_proxy_call (G_DBUS_PROXY(client),
 | 
				
			||||||
 | 
					                       "ShowKeyboard",
 | 
				
			||||||
 | 
					                       NULL,
 | 
				
			||||||
 | 
					                       G_DBUS_CALL_FLAGS_NONE,
 | 
				
			||||||
 | 
					                       -1,
 | 
				
			||||||
 | 
					                       cancellable,
 | 
				
			||||||
 | 
					                       eekboard_async_ready_callback,
 | 
				
			||||||
 | 
					                       NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eekboard_client_hide_keyboard (EekboardClient *client,
 | 
				
			||||||
 | 
					                               GCancellable   *cancellable)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    g_return_if_fail (EEKBOARD_IS_CLIENT(client));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_dbus_proxy_call (G_DBUS_PROXY(client),
 | 
				
			||||||
 | 
					                       "HideKeyboard",
 | 
				
			||||||
 | 
					                       NULL,
 | 
				
			||||||
 | 
					                       G_DBUS_CALL_FLAGS_NONE,
 | 
				
			||||||
 | 
					                       -1,
 | 
				
			||||||
 | 
					                       cancellable,
 | 
				
			||||||
 | 
					                       eekboard_async_ready_callback,
 | 
				
			||||||
 | 
					                       NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
send_destroy_context (EekboardClient  *client,
 | 
					send_destroy_context (EekboardClient  *client,
 | 
				
			||||||
                      EekboardContext *context,
 | 
					                      EekboardContext *context,
 | 
				
			||||||
 | 
				
			|||||||
@ -67,6 +67,10 @@ void             eekboard_client_push_context    (EekboardClient  *eekboard,
 | 
				
			|||||||
                                                  GCancellable    *cancellable);
 | 
					                                                  GCancellable    *cancellable);
 | 
				
			||||||
void             eekboard_client_pop_context     (EekboardClient  *eekboard,
 | 
					void             eekboard_client_pop_context     (EekboardClient  *eekboard,
 | 
				
			||||||
                                                  GCancellable    *cancellable);
 | 
					                                                  GCancellable    *cancellable);
 | 
				
			||||||
 | 
					void             eekboard_client_show_keyboard   (EekboardClient  *eekboard,
 | 
				
			||||||
 | 
					                                                  GCancellable    *cancellable);
 | 
				
			||||||
 | 
					void             eekboard_client_hide_keyboard   (EekboardClient  *eekboard,
 | 
				
			||||||
 | 
					                                                  GCancellable    *cancellable);
 | 
				
			||||||
void             eekboard_client_destroy_context (EekboardClient  *eekboard,
 | 
					void             eekboard_client_destroy_context (EekboardClient  *eekboard,
 | 
				
			||||||
                                                  EekboardContext *context,
 | 
					                                                  EekboardContext *context,
 | 
				
			||||||
                                                  GCancellable    *cancellable);
 | 
					                                                  GCancellable    *cancellable);
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "eekboard/eekboard-context-service.h"
 | 
					#include "eekboard/eekboard-context-service.h"
 | 
				
			||||||
#include "eekboard/eekboard-xklutil.h"
 | 
					#include "eekboard/eekboard-xklutil.h"
 | 
				
			||||||
#include "eek/eek-xkl.h"
 | 
					//#include "eek/eek-xkl.h"      //x11_stub
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CSW 640
 | 
					#define CSW 640
 | 
				
			||||||
#define CSH 480
 | 
					#define CSH 480
 | 
				
			||||||
@ -173,7 +173,7 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self,
 | 
				
			|||||||
            display = XOpenDisplay (NULL);
 | 
					            display = XOpenDisplay (NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        error = NULL;
 | 
					        error = NULL;
 | 
				
			||||||
        layout = eek_xkl_layout_new (display, &error);
 | 
					        //layout = eek_xkl_layout_new (display, &error);    //x11_stub
 | 
				
			||||||
        if (layout == NULL) {
 | 
					        if (layout == NULL) {
 | 
				
			||||||
            g_warning ("can't create keyboard %s: %s",
 | 
					            g_warning ("can't create keyboard %s: %s",
 | 
				
			||||||
                       keyboard_type, error->message);
 | 
					                       keyboard_type, error->message);
 | 
				
			||||||
@ -181,10 +181,14 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self,
 | 
				
			|||||||
            return NULL;
 | 
					            return NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					        //x11_stub
 | 
				
			||||||
        if (!eek_xkl_layout_set_config (EEK_XKL_LAYOUT(layout), rec)) {
 | 
					        if (!eek_xkl_layout_set_config (EEK_XKL_LAYOUT(layout), rec)) {
 | 
				
			||||||
            g_object_unref (layout);
 | 
					            g_object_unref (layout);
 | 
				
			||||||
            return NULL;
 | 
					            return NULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        error = NULL;
 | 
					        error = NULL;
 | 
				
			||||||
        layout = eek_xml_layout_new (keyboard_type, &error);
 | 
					        layout = eek_xml_layout_new (keyboard_type, &error);
 | 
				
			||||||
@ -201,6 +205,26 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self,
 | 
				
			|||||||
    return keyboard;
 | 
					    return keyboard;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					eekboard_context_service_real_show_keyboard (EekboardContextService *self)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gboolean visible = self->priv->visible;
 | 
				
			||||||
 | 
					    self->priv->visible = TRUE;
 | 
				
			||||||
 | 
					    if (visible != self->priv->visible)
 | 
				
			||||||
 | 
					        emit_visibility_changed_signal (self,
 | 
				
			||||||
 | 
					                                        self->priv->visible);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					eekboard_context_service_real_hide_keyboard (EekboardContextService *self)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gboolean visible = self->priv->visible;
 | 
				
			||||||
 | 
					    self->priv->visible = FALSE;
 | 
				
			||||||
 | 
					    if (visible != self->priv->visible)
 | 
				
			||||||
 | 
					        emit_visibility_changed_signal (self,
 | 
				
			||||||
 | 
					                                        self->priv->visible);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eekboard_context_service_set_property (GObject      *object,
 | 
					eekboard_context_service_set_property (GObject      *object,
 | 
				
			||||||
                                       guint         prop_id,
 | 
					                                       guint         prop_id,
 | 
				
			||||||
@ -209,7 +233,6 @@ eekboard_context_service_set_property (GObject      *object,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    EekboardContextService *context = EEKBOARD_CONTEXT_SERVICE(object);
 | 
					    EekboardContextService *context = EEKBOARD_CONTEXT_SERVICE(object);
 | 
				
			||||||
    GDBusConnection *connection;
 | 
					    GDBusConnection *connection;
 | 
				
			||||||
    gboolean was_visible;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (prop_id) {
 | 
					    switch (prop_id) {
 | 
				
			||||||
    case PROP_OBJECT_PATH:
 | 
					    case PROP_OBJECT_PATH:
 | 
				
			||||||
@ -234,11 +257,12 @@ eekboard_context_service_set_property (GObject      *object,
 | 
				
			|||||||
        context->priv->keyboard = g_value_get_object (value);
 | 
					        context->priv->keyboard = g_value_get_object (value);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_VISIBLE:
 | 
					    case PROP_VISIBLE:
 | 
				
			||||||
        was_visible = context->priv->visible;
 | 
					        if (context->priv->keyboard) {
 | 
				
			||||||
        context->priv->visible = g_value_get_boolean (value);
 | 
					            if (g_value_get_boolean (value))
 | 
				
			||||||
        if (was_visible != context->priv->visible)
 | 
					                eekboard_context_service_show_keyboard (context);
 | 
				
			||||||
            emit_visibility_changed_signal (context,
 | 
					            else
 | 
				
			||||||
                                            context->priv->visible);
 | 
					                eekboard_context_service_hide_keyboard (context);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_FULLSCREEN:
 | 
					    case PROP_FULLSCREEN:
 | 
				
			||||||
        context->priv->fullscreen = g_value_get_boolean (value);
 | 
					        context->priv->fullscreen = g_value_get_boolean (value);
 | 
				
			||||||
@ -358,8 +382,8 @@ eekboard_context_service_class_init (EekboardContextServiceClass *klass)
 | 
				
			|||||||
                              sizeof (EekboardContextServicePrivate));
 | 
					                              sizeof (EekboardContextServicePrivate));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    klass->create_keyboard = eekboard_context_service_real_create_keyboard;
 | 
					    klass->create_keyboard = eekboard_context_service_real_create_keyboard;
 | 
				
			||||||
    klass->show_keyboard = NULL;
 | 
					    klass->show_keyboard = eekboard_context_service_real_show_keyboard;
 | 
				
			||||||
    klass->hide_keyboard = NULL;
 | 
					    klass->hide_keyboard = eekboard_context_service_real_hide_keyboard;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gobject_class->constructed = eekboard_context_service_constructed;
 | 
					    gobject_class->constructed = eekboard_context_service_constructed;
 | 
				
			||||||
    gobject_class->set_property = eekboard_context_service_set_property;
 | 
					    gobject_class->set_property = eekboard_context_service_set_property;
 | 
				
			||||||
@ -730,6 +754,11 @@ handle_method_call (GDBusConnection       *connection,
 | 
				
			|||||||
    EekboardContextService *context = user_data;
 | 
					    EekboardContextService *context = user_data;
 | 
				
			||||||
    EekboardContextServiceClass *klass = EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context);
 | 
					    EekboardContextServiceClass *klass = EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    if (context->priv->repeat_timeout_id) {
 | 
				
			||||||
 | 
					        g_source_remove (context->priv->repeat_timeout_id);
 | 
				
			||||||
 | 
					        context->priv->repeat_timeout_id = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (method_name, "AddKeyboard") == 0) {
 | 
					    if (g_strcmp0 (method_name, "AddKeyboard") == 0) {
 | 
				
			||||||
        const gchar *keyboard_type;
 | 
					        const gchar *keyboard_type;
 | 
				
			||||||
        static guint keyboard_id = 0;
 | 
					        static guint keyboard_id = 0;
 | 
				
			||||||
@ -864,15 +893,13 @@ handle_method_call (GDBusConnection       *connection,
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (klass->show_keyboard)
 | 
					        eekboard_context_service_show_keyboard (context);
 | 
				
			||||||
            klass->show_keyboard (context);
 | 
					 | 
				
			||||||
        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
					        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (method_name, "HideKeyboard") == 0) {
 | 
					    if (g_strcmp0 (method_name, "HideKeyboard") == 0) {
 | 
				
			||||||
        if (klass->hide_keyboard)
 | 
					        eekboard_context_service_hide_keyboard (context);
 | 
				
			||||||
            klass->hide_keyboard (context);
 | 
					 | 
				
			||||||
        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
					        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -999,6 +1026,24 @@ eekboard_context_service_disable (EekboardContextService *context)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eekboard_context_service_show_keyboard (EekboardContextService *context)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    g_return_if_fail (EEKBOARD_IS_CONTEXT_SERVICE(context));
 | 
				
			||||||
 | 
					    g_return_if_fail (context->priv->connection);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context)->show_keyboard (context);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eekboard_context_service_hide_keyboard (EekboardContextService *context)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    g_return_if_fail (EEKBOARD_IS_CONTEXT_SERVICE(context));
 | 
				
			||||||
 | 
					    g_return_if_fail (context->priv->connection);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context)->hide_keyboard (context);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * eekboard_context_service_destroy:
 | 
					 * eekboard_context_service_destroy:
 | 
				
			||||||
 * @context: an #EekboardContextService
 | 
					 * @context: an #EekboardContextService
 | 
				
			||||||
 | 
				
			|||||||
@ -84,6 +84,10 @@ GType         eekboard_context_service_get_type
 | 
				
			|||||||
                                              (void) G_GNUC_CONST;
 | 
					                                              (void) G_GNUC_CONST;
 | 
				
			||||||
void          eekboard_context_service_enable (EekboardContextService *context);
 | 
					void          eekboard_context_service_enable (EekboardContextService *context);
 | 
				
			||||||
void          eekboard_context_service_disable (EekboardContextService *context);
 | 
					void          eekboard_context_service_disable (EekboardContextService *context);
 | 
				
			||||||
 | 
					void          eekboard_context_service_show_keyboard
 | 
				
			||||||
 | 
					                                              (EekboardContextService *context);
 | 
				
			||||||
 | 
					void          eekboard_context_service_hide_keyboard
 | 
				
			||||||
 | 
					                                              (EekboardContextService *context);
 | 
				
			||||||
void          eekboard_context_service_destroy (EekboardContextService *context);
 | 
					void          eekboard_context_service_destroy (EekboardContextService *context);
 | 
				
			||||||
EekKeyboard  *eekboard_context_service_get_keyboard
 | 
					EekKeyboard  *eekboard_context_service_get_keyboard
 | 
				
			||||||
                                              (EekboardContextService *context);
 | 
					                                              (EekboardContextService *context);
 | 
				
			||||||
 | 
				
			|||||||
@ -151,7 +151,7 @@ eekboard_context_real_destroyed (EekboardContext *self)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eekboard_context_real_key_activated (EekboardContext *self,
 | 
					eekboard_context_real_key_activated (EekboardContext *self,
 | 
				
			||||||
                                     const gchar     *keyname,
 | 
					                                     guint            keycode,
 | 
				
			||||||
                                     EekSymbol       *symbol,
 | 
					                                     EekSymbol       *symbol,
 | 
				
			||||||
                                     guint            modifiers)
 | 
					                                     guint            modifiers)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -55,6 +55,7 @@ struct _EekboardServicePrivate {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    GHashTable *context_hash;
 | 
					    GHashTable *context_hash;
 | 
				
			||||||
    GSList *context_stack;
 | 
					    GSList *context_stack;
 | 
				
			||||||
 | 
					    gboolean visible;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_DEFINE_TYPE (EekboardService, eekboard_service, G_TYPE_OBJECT);
 | 
					G_DEFINE_TYPE (EekboardService, eekboard_service, G_TYPE_OBJECT);
 | 
				
			||||||
@ -70,6 +71,8 @@ static const gchar introspection_xml[] =
 | 
				
			|||||||
    "      <arg direction='in' type='s' name='object_path'/>"
 | 
					    "      <arg direction='in' type='s' name='object_path'/>"
 | 
				
			||||||
    "    </method>"
 | 
					    "    </method>"
 | 
				
			||||||
    "    <method name='PopContext'/>"
 | 
					    "    <method name='PopContext'/>"
 | 
				
			||||||
 | 
					    "    <method name='ShowKeyboard'/>"
 | 
				
			||||||
 | 
					    "    <method name='HideKeyboard'/>"
 | 
				
			||||||
    "    <method name='Destroy'/>"
 | 
					    "    <method name='Destroy'/>"
 | 
				
			||||||
    /* signals */
 | 
					    /* signals */
 | 
				
			||||||
    "  </interface>"
 | 
					    "  </interface>"
 | 
				
			||||||
@ -358,6 +361,14 @@ context_destroyed_cb (EekboardContextService *context, EekboardService *service)
 | 
				
			|||||||
    g_free (object_path);
 | 
					    g_free (object_path);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					on_notify_visible (GObject *object, GParamSpec *spec, gpointer user_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekboardService *service = user_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_object_get (object, "visible", &service->priv->visible, NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
handle_method_call (GDBusConnection       *connection,
 | 
					handle_method_call (GDBusConnection       *connection,
 | 
				
			||||||
                    const gchar           *sender,
 | 
					                    const gchar           *sender,
 | 
				
			||||||
@ -424,6 +435,10 @@ handle_method_call (GDBusConnection       *connection,
 | 
				
			|||||||
        service->priv->context_stack = g_slist_prepend (service->priv->context_stack,
 | 
					        service->priv->context_stack = g_slist_prepend (service->priv->context_stack,
 | 
				
			||||||
                                               g_object_ref (context));
 | 
					                                               g_object_ref (context));
 | 
				
			||||||
        eekboard_context_service_enable (context);
 | 
					        eekboard_context_service_enable (context);
 | 
				
			||||||
 | 
					        g_signal_connect (context, "notify::visible",
 | 
				
			||||||
 | 
					                          G_CALLBACK(on_notify_visible), service);
 | 
				
			||||||
 | 
					        if (service->priv->visible)
 | 
				
			||||||
 | 
					            eekboard_context_service_show_keyboard (context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
					        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@ -448,6 +463,9 @@ handle_method_call (GDBusConnection       *connection,
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            g_free (object_path);
 | 
					            g_free (object_path);
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
 | 
					            g_signal_handlers_disconnect_by_func (context,
 | 
				
			||||||
 | 
					                                                  G_CALLBACK(on_notify_visible),
 | 
				
			||||||
 | 
					                                                  service);
 | 
				
			||||||
            eekboard_context_service_disable (context);
 | 
					            eekboard_context_service_disable (context);
 | 
				
			||||||
            service->priv->context_stack = g_slist_next (service->priv->context_stack);
 | 
					            service->priv->context_stack = g_slist_next (service->priv->context_stack);
 | 
				
			||||||
            if (service->priv->context_stack)
 | 
					            if (service->priv->context_stack)
 | 
				
			||||||
@ -458,6 +476,24 @@ handle_method_call (GDBusConnection       *connection,
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (g_strcmp0 (method_name, "ShowKeyboard") == 0) {
 | 
				
			||||||
 | 
					        if (service->priv->context_stack) {
 | 
				
			||||||
 | 
					            eekboard_context_service_show_keyboard (service->priv->context_stack->data);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            service->priv->visible = TRUE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (g_strcmp0 (method_name, "HideKeyboard") == 0) {
 | 
				
			||||||
 | 
					        if (service->priv->context_stack) {
 | 
				
			||||||
 | 
					            eekboard_context_service_hide_keyboard (service->priv->context_stack->data);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            service->priv->visible = FALSE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g_strcmp0 (method_name, "Destroy") == 0) {
 | 
					    if (g_strcmp0 (method_name, "Destroy") == 0) {
 | 
				
			||||||
        g_signal_emit (service, signals[DESTROYED], 0);
 | 
					        g_signal_emit (service, signals[DESTROYED], 0);
 | 
				
			||||||
        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
					        g_dbus_method_invocation_return_value (invocation, NULL);
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1,3 @@
 | 
				
			|||||||
SUBDIRS = simple-client
 | 
					SUBDIRS = simple-client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1,3 @@
 | 
				
			|||||||
EXTRA_DIST = simple-client
 | 
					EXTRA_DIST = simple-client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										218
									
								
								git.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								git.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,218 @@
 | 
				
			|||||||
 | 
					# git.mk
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright 2009, Red Hat, Inc.
 | 
				
			||||||
 | 
					# Copyright 2010,2011 Behdad Esfahbod
 | 
				
			||||||
 | 
					# Written by Behdad Esfahbod
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copying and distribution of this file, with or without modification,
 | 
				
			||||||
 | 
					# is permitted in any medium without royalty provided the copyright
 | 
				
			||||||
 | 
					# notice and this notice are preserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The canonical source for this file is https://github.com/behdad/git.mk.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To use in your project, import this file in your git repo's toplevel,
 | 
				
			||||||
 | 
					# then do "make -f git.mk".  This modifies all Makefile.am files in
 | 
				
			||||||
 | 
					# your project to -include git.mk.  Remember to add that line to new
 | 
				
			||||||
 | 
					# Makefile.am files you create in your project, or just rerun the
 | 
				
			||||||
 | 
					# "make -f git.mk".
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This enables automatic .gitignore generation.  If you need to ignore
 | 
				
			||||||
 | 
					# more files, add them to the GITIGNOREFILES variable in your Makefile.am.
 | 
				
			||||||
 | 
					# But think twice before doing that.  If a file has to be in .gitignore,
 | 
				
			||||||
 | 
					# chances are very high that it's a generated file and should be in one
 | 
				
			||||||
 | 
					# of MOSTLYCLEANFILES, CLEANFILES, DISTCLEANFILES, or MAINTAINERCLEANFILES.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The only case that you need to manually add a file to GITIGNOREFILES is
 | 
				
			||||||
 | 
					# when remove files in one of mostlyclean-local, clean-local, distclean-local,
 | 
				
			||||||
 | 
					# or maintainer-clean-local make targets.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Note that for files like editor backup, etc, there are better places to
 | 
				
			||||||
 | 
					# ignore them.  See "man gitignore".
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# If "make maintainer-clean" removes the files but they are not recognized
 | 
				
			||||||
 | 
					# by this script (that is, if "git status" shows untracked files still), send
 | 
				
			||||||
 | 
					# me the output of "git status" as well as your Makefile.am and Makefile for
 | 
				
			||||||
 | 
					# the directories involved and I'll diagnose.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# For a list of toplevel files that should be in MAINTAINERCLEANFILES, see
 | 
				
			||||||
 | 
					# Makefile.am.sample in the git.mk git repo.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Don't EXTRA_DIST this file.  It is supposed to only live in git clones,
 | 
				
			||||||
 | 
					# not tarballs.  It serves no useful purpose in tarballs and clutters the
 | 
				
			||||||
 | 
					# build dir.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file knows how to handle autoconf, automake, libtool, gtk-doc,
 | 
				
			||||||
 | 
					# gnome-doc-utils, yelp.m4, mallard, intltool, gsettings, dejagnu.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# KNOWN ISSUES:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# - Recursive configure doesn't work as $(top_srcdir)/git.mk inside the
 | 
				
			||||||
 | 
					#   submodule doesn't find us.  If you have configure.{in,ac} files in
 | 
				
			||||||
 | 
					#   subdirs, add a proxy git.mk file in those dirs that simply does:
 | 
				
			||||||
 | 
					#   "include $(top_srcdir)/../git.mk".  Add more ..'s to your taste.
 | 
				
			||||||
 | 
					#   And add those files to git.  See vte/gnome-pty-helper/git.mk for
 | 
				
			||||||
 | 
					#   example.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git-all: git-mk-install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git-mk-install:
 | 
				
			||||||
 | 
						@echo Installing git makefile
 | 
				
			||||||
 | 
						@any_failed=; \
 | 
				
			||||||
 | 
							find "`test -z "$(top_srcdir)" && echo . || echo "$(top_srcdir)"`" -name Makefile.am | while read x; do \
 | 
				
			||||||
 | 
							if grep 'include .*/git.mk' $$x >/dev/null; then \
 | 
				
			||||||
 | 
								echo $$x already includes git.mk; \
 | 
				
			||||||
 | 
							else \
 | 
				
			||||||
 | 
								failed=; \
 | 
				
			||||||
 | 
								echo "Updating $$x"; \
 | 
				
			||||||
 | 
								{ cat $$x; \
 | 
				
			||||||
 | 
								  echo ''; \
 | 
				
			||||||
 | 
								  echo '-include $$(top_srcdir)/git.mk'; \
 | 
				
			||||||
 | 
								} > $$x.tmp || failed=1; \
 | 
				
			||||||
 | 
								if test x$$failed = x; then \
 | 
				
			||||||
 | 
									mv $$x.tmp $$x || failed=1; \
 | 
				
			||||||
 | 
								fi; \
 | 
				
			||||||
 | 
								if test x$$failed = x; then : else \
 | 
				
			||||||
 | 
									echo Failed updating $$x; >&2 \
 | 
				
			||||||
 | 
									any_failed=1; \
 | 
				
			||||||
 | 
								fi; \
 | 
				
			||||||
 | 
						fi; done; test -z "$$any_failed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: git-all git-mk-install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### .gitignore generation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(srcdir)/.gitignore: Makefile.am $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
						$(AM_V_GEN) \
 | 
				
			||||||
 | 
						{ \
 | 
				
			||||||
 | 
							if test "x$(DOC_MODULE)" = x -o "x$(DOC_MAIN_SGML_FILE)" = x; then :; else \
 | 
				
			||||||
 | 
								for x in \
 | 
				
			||||||
 | 
									$(DOC_MODULE)-decl-list.txt \
 | 
				
			||||||
 | 
									$(DOC_MODULE)-decl.txt \
 | 
				
			||||||
 | 
									tmpl/$(DOC_MODULE)-unused.sgml \
 | 
				
			||||||
 | 
									"tmpl/*.bak" \
 | 
				
			||||||
 | 
									xml html \
 | 
				
			||||||
 | 
								; do echo /$$x; done; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							if test "x$(DOC_MODULE)$(DOC_ID)" = x -o "x$(DOC_LINGUAS)" = x; then :; else \
 | 
				
			||||||
 | 
								for lc in $(DOC_LINGUAS); do \
 | 
				
			||||||
 | 
									for x in \
 | 
				
			||||||
 | 
										$(if $(DOC_MODULE),$(DOC_MODULE).xml) \
 | 
				
			||||||
 | 
										$(DOC_PAGES) \
 | 
				
			||||||
 | 
										$(DOC_INCLUDES) \
 | 
				
			||||||
 | 
									; do echo /$$lc/$$x; done; \
 | 
				
			||||||
 | 
								done; \
 | 
				
			||||||
 | 
								for x in \
 | 
				
			||||||
 | 
									$(_DOC_OMF_ALL) \
 | 
				
			||||||
 | 
									$(_DOC_DSK_ALL) \
 | 
				
			||||||
 | 
									$(_DOC_HTML_ALL) \
 | 
				
			||||||
 | 
									$(_DOC_MOFILES) \
 | 
				
			||||||
 | 
									$(DOC_H_FILE) \
 | 
				
			||||||
 | 
									"*/.xml2po.mo" \
 | 
				
			||||||
 | 
									"*/*.omf.out" \
 | 
				
			||||||
 | 
								; do echo /$$x; done; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							if test "x$(HELP_ID)" = x -o "x$(HELP_LINGUAS)" = x; then :; else \
 | 
				
			||||||
 | 
								for lc in $(HELP_LINGUAS); do \
 | 
				
			||||||
 | 
									for x in \
 | 
				
			||||||
 | 
										$(HELP_FILES) \
 | 
				
			||||||
 | 
										"$$lc.stamp" \
 | 
				
			||||||
 | 
										"$$lc.mo" \
 | 
				
			||||||
 | 
									; do echo /$$lc/$$x; done; \
 | 
				
			||||||
 | 
								done; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							if test "x$(gsettings_SCHEMAS)" = x; then :; else \
 | 
				
			||||||
 | 
								for x in \
 | 
				
			||||||
 | 
									$(gsettings_SCHEMAS:.xml=.valid) \
 | 
				
			||||||
 | 
									$(gsettings__enum_file) \
 | 
				
			||||||
 | 
								; do echo /$$x; done; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							if test -f $(srcdir)/po/Makefile.in.in; then \
 | 
				
			||||||
 | 
								for x in \
 | 
				
			||||||
 | 
									po/Makefile.in.in \
 | 
				
			||||||
 | 
									po/Makefile.in \
 | 
				
			||||||
 | 
									po/Makefile \
 | 
				
			||||||
 | 
									po/POTFILES \
 | 
				
			||||||
 | 
									po/stamp-it \
 | 
				
			||||||
 | 
									po/.intltool-merge-cache \
 | 
				
			||||||
 | 
									"po/*.gmo" \
 | 
				
			||||||
 | 
									"po/*.mo" \
 | 
				
			||||||
 | 
									po/$(GETTEXT_PACKAGE).pot \
 | 
				
			||||||
 | 
									intltool-extract.in \
 | 
				
			||||||
 | 
									intltool-merge.in \
 | 
				
			||||||
 | 
									intltool-update.in \
 | 
				
			||||||
 | 
								; do echo /$$x; done; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							if test -f $(srcdir)/configure; then \
 | 
				
			||||||
 | 
								for x in \
 | 
				
			||||||
 | 
									autom4te.cache \
 | 
				
			||||||
 | 
									configure \
 | 
				
			||||||
 | 
									config.h \
 | 
				
			||||||
 | 
									stamp-h1 \
 | 
				
			||||||
 | 
									libtool \
 | 
				
			||||||
 | 
									config.lt \
 | 
				
			||||||
 | 
								; do echo /$$x; done; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							if test "x$(DEJATOOL)" = x; then :; else \
 | 
				
			||||||
 | 
								for x in \
 | 
				
			||||||
 | 
									$(DEJATOOL) \
 | 
				
			||||||
 | 
								; do echo /$$x.sum; echo /$$x.log; done; \
 | 
				
			||||||
 | 
								echo /site.exp; \
 | 
				
			||||||
 | 
							fi; \
 | 
				
			||||||
 | 
							for x in \
 | 
				
			||||||
 | 
								.gitignore \
 | 
				
			||||||
 | 
								$(GITIGNOREFILES) \
 | 
				
			||||||
 | 
								$(CLEANFILES) \
 | 
				
			||||||
 | 
								$(PROGRAMS) \
 | 
				
			||||||
 | 
								$(check_PROGRAMS) \
 | 
				
			||||||
 | 
								$(EXTRA_PROGRAMS) \
 | 
				
			||||||
 | 
								$(LTLIBRARIES) \
 | 
				
			||||||
 | 
								so_locations \
 | 
				
			||||||
 | 
								.libs _libs \
 | 
				
			||||||
 | 
								$(MOSTLYCLEANFILES) \
 | 
				
			||||||
 | 
								"*.$(OBJEXT)" \
 | 
				
			||||||
 | 
								"*.lo" \
 | 
				
			||||||
 | 
								$(DISTCLEANFILES) \
 | 
				
			||||||
 | 
								$(am__CONFIG_DISTCLEAN_FILES) \
 | 
				
			||||||
 | 
								$(CONFIG_CLEAN_FILES) \
 | 
				
			||||||
 | 
								TAGS ID GTAGS GRTAGS GSYMS GPATH tags \
 | 
				
			||||||
 | 
								"*.tab.c" \
 | 
				
			||||||
 | 
								$(MAINTAINERCLEANFILES) \
 | 
				
			||||||
 | 
								$(BUILT_SOURCES) \
 | 
				
			||||||
 | 
								$(DEPDIR) \
 | 
				
			||||||
 | 
								Makefile \
 | 
				
			||||||
 | 
								Makefile.in \
 | 
				
			||||||
 | 
								"*.orig" \
 | 
				
			||||||
 | 
								"*.rej" \
 | 
				
			||||||
 | 
								"*.bak" \
 | 
				
			||||||
 | 
								"*~" \
 | 
				
			||||||
 | 
								".*.sw[nop]" \
 | 
				
			||||||
 | 
								".dirstamp" \
 | 
				
			||||||
 | 
							; do echo /$$x; done; \
 | 
				
			||||||
 | 
						} | \
 | 
				
			||||||
 | 
						sed "s@^/`echo "$(srcdir)" | sed 's/\(.\)/[\1]/g'`/@/@" | \
 | 
				
			||||||
 | 
						sed 's@/[.]/@/@g' | \
 | 
				
			||||||
 | 
						LC_ALL=C sort | uniq > $@.tmp && \
 | 
				
			||||||
 | 
						mv $@.tmp $@;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: $(srcdir)/.gitignore gitignore-recurse-maybe
 | 
				
			||||||
 | 
					gitignore-recurse-maybe:
 | 
				
			||||||
 | 
						@if test "x$(SUBDIRS)" = "x$(DIST_SUBDIRS)"; then :; else \
 | 
				
			||||||
 | 
							$(MAKE) $(AM_MAKEFLAGS) gitignore-recurse; \
 | 
				
			||||||
 | 
						fi;
 | 
				
			||||||
 | 
					gitignore-recurse:
 | 
				
			||||||
 | 
						@for subdir in $(DIST_SUBDIRS); do \
 | 
				
			||||||
 | 
						  case " $(SUBDIRS) " in \
 | 
				
			||||||
 | 
						    *" $$subdir "*) :;; \
 | 
				
			||||||
 | 
						    *) test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) .gitignore gitignore-recurse || echo "Skipping $$subdir");; \
 | 
				
			||||||
 | 
						  esac; \
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					gitignore: $(srcdir)/.gitignore gitignore-recurse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					maintainer-clean: gitignore-clean
 | 
				
			||||||
 | 
					gitignore-clean:
 | 
				
			||||||
 | 
						-rm -f $(srcdir)/.gitignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.PHONY: gitignore-clean gitignore gitignore-recurse gitignore-recurse-maybe
 | 
				
			||||||
@ -128,3 +128,5 @@ noinst_HEADERS =				\
 | 
				
			|||||||
	$(eekboard_server_headers)		\
 | 
						$(eekboard_server_headers)		\
 | 
				
			||||||
	$(eekboard_setup_headers)		\
 | 
						$(eekboard_setup_headers)		\
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -32,14 +32,14 @@
 | 
				
			|||||||
#include "eekboard/eekboard-client.h"
 | 
					#include "eekboard/eekboard-client.h"
 | 
				
			||||||
#include "client.h"
 | 
					#include "client.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFAULT_KEYBOARD "us"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static gboolean opt_system = FALSE;
 | 
					static gboolean opt_system = FALSE;
 | 
				
			||||||
static gboolean opt_session = FALSE;
 | 
					static gboolean opt_session = FALSE;
 | 
				
			||||||
static gchar *opt_address = NULL;
 | 
					static gchar *opt_address = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean opt_focus = FALSE;
 | 
					static gboolean opt_focus = FALSE;
 | 
				
			||||||
 | 
					#ifdef HAVE_ATSPI
 | 
				
			||||||
static gboolean opt_keystroke = FALSE;
 | 
					static gboolean opt_keystroke = FALSE;
 | 
				
			||||||
 | 
					#endif  /* HAVE_ATSPI */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gchar *opt_keyboards = NULL;
 | 
					static gchar *opt_keyboards = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										60
									
								
								src/client.c
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								src/client.c
									
									
									
									
									
								
							@ -44,6 +44,12 @@
 | 
				
			|||||||
#define CSW 640
 | 
					#define CSW 640
 | 
				
			||||||
#define CSH 480
 | 
					#define CSH 480
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEFAULT_KEYBOARD "us"
 | 
				
			||||||
 | 
					static gchar *default_keyboards[2] = {
 | 
				
			||||||
 | 
					    DEFAULT_KEYBOARD,
 | 
				
			||||||
 | 
					    NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IBUS_INTERFACE_PANEL    "org.freedesktop.IBus.Panel"
 | 
					#define IBUS_INTERFACE_PANEL    "org.freedesktop.IBus.Panel"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
@ -87,7 +93,7 @@ struct _Client {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifdef HAVE_XTEST
 | 
					#ifdef HAVE_XTEST
 | 
				
			||||||
    guint modifier_keycodes[8]; 
 | 
					    guint modifier_keycodes[8]; 
 | 
				
			||||||
    XkbDescRec *xkb;
 | 
					    //XkbDescRec *xkb;  //x11_stub
 | 
				
			||||||
#endif  /* HAVE_XTEST */
 | 
					#endif  /* HAVE_XTEST */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GSettings *settings;
 | 
					    GSettings *settings;
 | 
				
			||||||
@ -141,6 +147,7 @@ client_set_property (GObject      *object,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    Client *client = CLIENT(object);
 | 
					    Client *client = CLIENT(object);
 | 
				
			||||||
    GDBusConnection *connection;
 | 
					    GDBusConnection *connection;
 | 
				
			||||||
 | 
					    gchar **keyboards;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (prop_id) {
 | 
					    switch (prop_id) {
 | 
				
			||||||
    case PROP_CONNECTION:
 | 
					    case PROP_CONNECTION:
 | 
				
			||||||
@ -166,7 +173,10 @@ client_set_property (GObject      *object,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_KEYBOARDS:
 | 
					    case PROP_KEYBOARDS:
 | 
				
			||||||
        client_set_keyboards (client, g_value_get_boxed (value));
 | 
					        keyboards = g_value_get_boxed (value);
 | 
				
			||||||
 | 
					        if (g_strv_length (keyboards) == 0)
 | 
				
			||||||
 | 
					            keyboards = default_keyboards;
 | 
				
			||||||
 | 
					        client_set_keyboards (client, (const gchar * const *)keyboards);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
@ -305,7 +315,7 @@ client_set_keyboards (Client              *client,
 | 
				
			|||||||
    gboolean retval;
 | 
					    gboolean retval;
 | 
				
			||||||
    retval = set_keyboards (client, keyboards);
 | 
					    retval = set_keyboards (client, keyboards);
 | 
				
			||||||
    if (retval && IS_KEYBOARD_VISIBLE (client))
 | 
					    if (retval && IS_KEYBOARD_VISIBLE (client))
 | 
				
			||||||
        eekboard_context_show_keyboard (client->context, NULL);
 | 
					        eekboard_client_show_keyboard (client->eekboard, NULL);
 | 
				
			||||||
    return retval;
 | 
					    return retval;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -347,7 +357,7 @@ client_enable_xkl (Client *client)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    retval = set_keyboards_from_xkl (client);
 | 
					    retval = set_keyboards_from_xkl (client);
 | 
				
			||||||
    if (IS_KEYBOARD_VISIBLE (client))
 | 
					    if (IS_KEYBOARD_VISIBLE (client))
 | 
				
			||||||
        eekboard_context_show_keyboard (client->context, NULL);
 | 
					        eekboard_client_show_keyboard (client->eekboard, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return retval;
 | 
					    return retval;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -538,21 +548,21 @@ focus_listener_cb (const AtspiEvent *event,
 | 
				
			|||||||
        case ATSPI_ROLE_TERMINAL:
 | 
					        case ATSPI_ROLE_TERMINAL:
 | 
				
			||||||
            if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
 | 
					            if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
 | 
				
			||||||
                client->acc = accessible;
 | 
					                client->acc = accessible;
 | 
				
			||||||
                eekboard_context_show_keyboard (client->context, NULL);
 | 
					                eekboard_client_show_keyboard (client->eekboard, NULL);
 | 
				
			||||||
            } else if (g_settings_get_boolean (client->settings, "auto-hide") &&
 | 
					            } else if (g_settings_get_boolean (client->settings, "auto-hide") &&
 | 
				
			||||||
                       event->detail1 == 0 && accessible == client->acc) {
 | 
					                       event->detail1 == 0 && accessible == client->acc) {
 | 
				
			||||||
                client->acc = NULL;
 | 
					                client->acc = NULL;
 | 
				
			||||||
                eekboard_context_hide_keyboard (client->context, NULL);
 | 
					                eekboard_client_hide_keyboard (client->eekboard, NULL);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case ATSPI_ROLE_ENTRY:
 | 
					        case ATSPI_ROLE_ENTRY:
 | 
				
			||||||
            if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
 | 
					            if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
 | 
				
			||||||
                client->acc = accessible;
 | 
					                client->acc = accessible;
 | 
				
			||||||
                eekboard_context_show_keyboard (client->context, NULL);
 | 
					                eekboard_client_show_keyboard (client->eekboard, NULL);
 | 
				
			||||||
            } else if (g_settings_get_boolean (client->settings, "auto-hide") &&
 | 
					            } else if (g_settings_get_boolean (client->settings, "auto-hide") &&
 | 
				
			||||||
                       event->detail1 == 0) {
 | 
					                       event->detail1 == 0) {
 | 
				
			||||||
                client->acc = NULL;
 | 
					                client->acc = NULL;
 | 
				
			||||||
                eekboard_context_hide_keyboard (client->context, NULL);
 | 
					                eekboard_client_hide_keyboard (client->eekboard, NULL);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -560,7 +570,7 @@ focus_listener_cb (const AtspiEvent *event,
 | 
				
			|||||||
            ;
 | 
					            ;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        eekboard_context_hide_keyboard (client->context, NULL);
 | 
					        eekboard_client_hide_keyboard (client->eekboard, NULL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -612,7 +622,7 @@ add_match_rule (GDBusConnection *connection,
 | 
				
			|||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
on_hide_keyboard_timeout (Client *client)
 | 
					on_hide_keyboard_timeout (Client *client)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    eekboard_context_hide_keyboard (client->context, NULL);
 | 
					    eekboard_client_hide_keyboard (client->eekboard, NULL);
 | 
				
			||||||
    client->hide_keyboard_timeout_id = 0;
 | 
					    client->hide_keyboard_timeout_id = 0;
 | 
				
			||||||
    return FALSE;
 | 
					    return FALSE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -635,7 +645,7 @@ focus_message_filter (GDBusConnection *connection,
 | 
				
			|||||||
                g_source_remove (client->hide_keyboard_timeout_id);
 | 
					                g_source_remove (client->hide_keyboard_timeout_id);
 | 
				
			||||||
                client->hide_keyboard_timeout_id = 0;
 | 
					                client->hide_keyboard_timeout_id = 0;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            eekboard_context_show_keyboard (client->context, NULL);
 | 
					            eekboard_client_show_keyboard (client->eekboard, NULL);
 | 
				
			||||||
        } else if (g_settings_get_boolean (client->settings, "auto-hide") &&
 | 
					        } else if (g_settings_get_boolean (client->settings, "auto-hide") &&
 | 
				
			||||||
                   g_strcmp0 (member, "FocusOut") == 0) {
 | 
					                   g_strcmp0 (member, "FocusOut") == 0) {
 | 
				
			||||||
            guint delay;
 | 
					            guint delay;
 | 
				
			||||||
@ -779,8 +789,8 @@ set_keyboards (Client              *client,
 | 
				
			|||||||
    for (p = keyboards; *p != NULL; p++) {
 | 
					    for (p = keyboards; *p != NULL; p++) {
 | 
				
			||||||
        keyboard_id = eekboard_context_add_keyboard (client->context, *p, NULL);
 | 
					        keyboard_id = eekboard_context_add_keyboard (client->context, *p, NULL);
 | 
				
			||||||
        if (keyboard_id == 0) {
 | 
					        if (keyboard_id == 0) {
 | 
				
			||||||
            g_slist_free (head);
 | 
					            g_warning ("can't add keyboard %s", *p);
 | 
				
			||||||
            return FALSE;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        client->keyboards = g_slist_prepend (client->keyboards,
 | 
					        client->keyboards = g_slist_prepend (client->keyboards,
 | 
				
			||||||
                                             GUINT_TO_POINTER(keyboard_id));
 | 
					                                             GUINT_TO_POINTER(keyboard_id));
 | 
				
			||||||
@ -848,6 +858,8 @@ get_replaced_keycode (Client *client)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    guint keycode;
 | 
					    guint keycode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    //x11_stub_start
 | 
				
			||||||
    for (keycode = client->xkb->max_key_code;
 | 
					    for (keycode = client->xkb->max_key_code;
 | 
				
			||||||
         keycode >= client->xkb->min_key_code;
 | 
					         keycode >= client->xkb->min_key_code;
 | 
				
			||||||
         --keycode) {
 | 
					         --keycode) {
 | 
				
			||||||
@ -857,6 +869,8 @@ get_replaced_keycode (Client *client)
 | 
				
			|||||||
            return keycode;
 | 
					            return keycode;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    //x11_stub_end
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -879,6 +893,8 @@ replace_keycode (Client *client,
 | 
				
			|||||||
    int keysyms_per_keycode;
 | 
					    int keysyms_per_keycode;
 | 
				
			||||||
    KeySym *syms;
 | 
					    KeySym *syms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    //x11_stub_start
 | 
				
			||||||
    g_return_val_if_fail (client->xkb->min_key_code <= keycode &&
 | 
					    g_return_val_if_fail (client->xkb->min_key_code <= keycode &&
 | 
				
			||||||
                          keycode <= client->xkb->max_key_code,
 | 
					                          keycode <= client->xkb->max_key_code,
 | 
				
			||||||
                          FALSE);
 | 
					                          FALSE);
 | 
				
			||||||
@ -891,6 +907,8 @@ replace_keycode (Client *client,
 | 
				
			|||||||
    XSync (xdisplay, False);
 | 
					    XSync (xdisplay, False);
 | 
				
			||||||
    XFree (syms);
 | 
					    XFree (syms);
 | 
				
			||||||
    *keysym = old_keysym;
 | 
					    *keysym = old_keysym;
 | 
				
			||||||
 | 
					    //x11_stub_end
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1007,7 +1025,9 @@ send_fake_key_events (Client    *client,
 | 
				
			|||||||
    if (eek_symbol_is_modifier (symbol))
 | 
					    if (eek_symbol_is_modifier (symbol))
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* If symbol is a text, convert chars in it to keysym */
 | 
					    /*
 | 
				
			||||||
 | 
					    //x11_stub_start
 | 
				
			||||||
 | 
					    // If symbol is a text, convert chars in it to keysym
 | 
				
			||||||
    if (EEK_IS_TEXT(symbol)) {
 | 
					    if (EEK_IS_TEXT(symbol)) {
 | 
				
			||||||
        const gchar *utf8 = eek_text_get_text (EEK_TEXT(symbol));
 | 
					        const gchar *utf8 = eek_text_get_text (EEK_TEXT(symbol));
 | 
				
			||||||
        glong items_written;
 | 
					        glong items_written;
 | 
				
			||||||
@ -1031,6 +1051,8 @@ send_fake_key_events (Client    *client,
 | 
				
			|||||||
        g_free (ucs4);
 | 
					        g_free (ucs4);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    //x11_stub_end
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (EEK_IS_KEYSYM(symbol)) {
 | 
					    if (EEK_IS_KEYSYM(symbol)) {
 | 
				
			||||||
        guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
 | 
					        guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
 | 
				
			||||||
@ -1121,9 +1143,13 @@ client_enable_xtest (Client *client)
 | 
				
			|||||||
        return FALSE;
 | 
					        return FALSE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    //x11_stub_start
 | 
				
			||||||
    if (!client->xkb)
 | 
					    if (!client->xkb)
 | 
				
			||||||
        client->xkb = XkbGetMap (xdisplay, XkbKeySymsMask, XkbUseCoreKbd);
 | 
					        client->xkb = XkbGetMap (xdisplay, XkbKeySymsMask, XkbUseCoreKbd);
 | 
				
			||||||
    g_assert (client->xkb);
 | 
					    g_assert (client->xkb);
 | 
				
			||||||
 | 
					    //x11_stub_end
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    update_modifier_keycodes (client);
 | 
					    update_modifier_keycodes (client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1137,9 +1163,13 @@ client_enable_xtest (Client *client)
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
client_disable_xtest (Client *client)
 | 
					client_disable_xtest (Client *client)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    //x11_stub_start
 | 
				
			||||||
    if (client->xkb) {
 | 
					    if (client->xkb) {
 | 
				
			||||||
        XkbFreeKeyboard (client->xkb, 0, TRUE);	/* free_all = TRUE */
 | 
					        XkbFreeKeyboard (client->xkb, 0, TRUE);	// free_all = TRUE 
 | 
				
			||||||
        client->xkb = NULL;
 | 
					        client->xkb = NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    //x11_stub+end
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif  /* HAVE_XTEST */
 | 
					#endif  /* HAVE_XTEST */
 | 
				
			||||||
 | 
				
			|||||||
@ -242,7 +242,7 @@ set_geometry (ServerContextService *context)
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
            height = (width / bounds.width) * bounds.height;
 | 
					            height = (width / bounds.width) * bounds.height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gtk_widget_set_size_request (context->widget, width, height);
 | 
					        gtk_window_resize (GTK_WINDOW(context->widget), width, height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gtk_window_move (GTK_WINDOW(context->window),
 | 
					        gtk_window_move (GTK_WINDOW(context->window),
 | 
				
			||||||
                         (rect.width - width) / 2,
 | 
					                         (rect.width - width) / 2,
 | 
				
			||||||
@ -259,9 +259,9 @@ set_geometry (ServerContextService *context)
 | 
				
			|||||||
                                G_CALLBACK(on_size_allocate_set_dock),
 | 
					                                G_CALLBACK(on_size_allocate_set_dock),
 | 
				
			||||||
                                context);
 | 
					                                context);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        gtk_widget_set_size_request (context->widget,
 | 
					        gtk_window_resize (GTK_WINDOW(context->window),
 | 
				
			||||||
                                     bounds.width,
 | 
					                           bounds.width,
 | 
				
			||||||
                                     bounds.height);
 | 
					                           bounds.height);
 | 
				
			||||||
        gtk_window_move (GTK_WINDOW(context->window),
 | 
					        gtk_window_move (GTK_WINDOW(context->window),
 | 
				
			||||||
                         MAX(rect.width - 20 - bounds.width, 0),
 | 
					                         MAX(rect.width - 20 - bounds.width, 0),
 | 
				
			||||||
                         MAX(rect.height - 40 - bounds.height, 0));
 | 
					                         MAX(rect.height - 40 - bounds.height, 0));
 | 
				
			||||||
@ -301,6 +301,8 @@ update_widget (ServerContextService *context)
 | 
				
			|||||||
    eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme);
 | 
					    eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme);
 | 
				
			||||||
    g_object_unref (theme);
 | 
					    g_object_unref (theme);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gtk_widget_set_has_tooltip (context->widget, TRUE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!context->window) {
 | 
					    if (!context->window) {
 | 
				
			||||||
        context->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 | 
					        context->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 | 
				
			||||||
        g_signal_connect (context->window, "destroy",
 | 
					        g_signal_connect (context->window, "destroy",
 | 
				
			||||||
@ -330,6 +332,9 @@ server_context_service_real_show_keyboard (EekboardContextService *_context)
 | 
				
			|||||||
        update_widget (context);
 | 
					        update_widget (context);
 | 
				
			||||||
    g_assert (context->window);
 | 
					    g_assert (context->window);
 | 
				
			||||||
    gtk_widget_show_all (context->window);
 | 
					    gtk_widget_show_all (context->window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
 | 
				
			||||||
 | 
					        show_keyboard (_context);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -339,6 +344,9 @@ server_context_service_real_hide_keyboard (EekboardContextService *_context)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (context->window)
 | 
					    if (context->window)
 | 
				
			||||||
        gtk_widget_hide (context->window);
 | 
					        gtk_widget_hide (context->window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
 | 
				
			||||||
 | 
					        hide_keyboard (_context);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
 | 
				
			|||||||
@ -28,3 +28,5 @@ eek_simple_test_LDADD = $(top_builddir)/eek/libeek.la $(GIO2_LIBS)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
eek_xml_test_SOURCES = eek-xml-test.c
 | 
					eek_xml_test_SOURCES = eek-xml-test.c
 | 
				
			||||||
eek_xml_test_LDADD = $(top_builddir)/eek/libeek.la $(top_builddir)/eek/libeek-xkl.la $(GIO2_LIBS) $(GTK_LIBS)
 | 
					eek_xml_test_LDADD = $(top_builddir)/eek/libeek.la $(top_builddir)/eek/libeek-xkl.la $(GIO2_LIBS) $(GTK_LIBS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-include $(top_srcdir)/git.mk
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user