diff --git a/bindings/vala/Makefile.am b/bindings/vala/Makefile.am
index 1bbf564d142985fd2b5e42a2530f3873379bf71c..4e49a1fdb57ab2be765777ea6b86886ab2867517 100644
--- a/bindings/vala/Makefile.am
+++ b/bindings/vala/Makefile.am
@@ -25,20 +25,16 @@ dist_vapi_DATA = \
eek-$(EEK_API_VERSION).deps \
eek-gtk-$(EEK_API_VERSION).vapi \
eek-gtk-$(EEK_API_VERSION).deps \
- eek-xkl-$(EEK_API_VERSION).vapi \
- eek-xkl-$(EEK_API_VERSION).deps \
$(NULL)
EXTRA_DIST = \
Eek-$(EEK_API_VERSION).metadata \
EekGtk-$(EEK_API_VERSION).metadata \
- EekXkl-$(EEK_API_VERSION).metadata \
$(NULL)
GITIGNOREFILES = \
eek-$(EEK_API_VERSION).vapi \
eek-gtk-$(EEK_API_VERSION).vapi \
- eek-xkl-$(EEK_API_VERSION).vapi \
$(NULL)
maintainer-clean-local:
@@ -72,20 +68,20 @@ eek-gtk-$(EEK_API_VERSION).vapi: $(eek_gtk_vapi_deps)
--metadatadir=$(srcdir) \
$(top_builddir)/eek/EekGtk-$(EEK_API_VERSION).gir
-eek_xkl_vapi_deps = \
- $(srcdir)/EekXkl-$(EEK_API_VERSION).metadata \
- | \
- $(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir \
- $(NULL)
-
-eek-xkl-$(EEK_API_VERSION).vapi: $(eek_xkl_vapi_deps)
- $(VAPIGEN_V)$(VAPIGEN) \
- --vapidir=$(builddir) \
- --library eek-xkl-$(EEK_API_VERSION) \
- --pkg eek-$(EEK_API_VERSION) \
- --pkg gio-2.0 \
- --metadatadir=$(srcdir) \
- $(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir
+# eek_xkl_vapi_deps = \
+# $(srcdir)/EekXkl-$(EEK_API_VERSION).metadata \
+# | \
+# $(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir \
+# $(NULL)
+#
+# eek-xkl-$(EEK_API_VERSION).vapi: $(eek_xkl_vapi_deps)
+# $(VAPIGEN_V)$(VAPIGEN) \
+# --vapidir=$(builddir) \
+# --library eek-xkl-$(EEK_API_VERSION) \
+# --pkg eek-$(EEK_API_VERSION) \
+# --pkg gio-2.0 \
+# --metadatadir=$(srcdir) \
+# $(top_builddir)/eek/EekXkl-$(EEK_API_VERSION).gir
# set up the verbosity rules to avoid some build noise
VAPIGEN_V = $(VAPIGEN_V_$(V))
diff --git a/configure.ac b/configure.ac
index be57569daccc14905c1ed0c556c4f396d70cbdc9..87595ed57f2875805b2ace6e3fb91a8ab0e164c4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -225,7 +225,6 @@ examples/Makefile
examples/simple-client/Makefile
eek/eek-${EEK_API_VERSION}.pc
eek/eek-gtk-${EEK_API_VERSION}.pc
-eek/eek-xkl-${EEK_API_VERSION}.pc
eekboard/eekboard-${EEK_API_VERSION}.pc])
AC_OUTPUT
AC_MSG_RESULT([
diff --git a/data/keyboards/geometry/compact.xml b/data/keyboards/geometry/compact.xml
index a468addedfe43633b395c63b69254c82c7f1f7eb..46cf8838ee750b42d44530fa0380dec128426fba 100644
--- a/data/keyboards/geometry/compact.xml
+++ b/data/keyboards/geometry/compact.xml
@@ -5,43 +5,43 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -49,198 +49,198 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/data/keyboards/keyboards.xml b/data/keyboards/keyboards.xml
index 8b71cb48447cda0d0e9e2d7b21b8edcbdad86000..79e788ea79dd7c8773d18a2cb4a4c0088ae8f197 100644
--- a/data/keyboards/keyboards.xml
+++ b/data/keyboards/keyboards.xml
@@ -1,88 +1,88 @@
+ geometry="compact" symbols="ar"
+ longname="Arabic" language="ar"/>
+ geometry="compact" symbols="be"
+ longname="Belarusian" language="be"/>
+ geometry="compact" symbols="fa"
+ longname="Farsi (ISIRI 2901-1994)" language="fa"/>
+ geometry="compact" symbols="he"
+ longname="Hebrew" language="he"/>
+ geometry="compact" symbols="ja-kana"
+ longname="Japanese (Kana)" language="ja"/>
+ geometry="compact" symbols="kk"
+ longname="Kazakh" language="kk"/>
+ geometry="compact" symbols="ks"
+ longname="Kashmiri" language="ks"/>
+ geometry="compact" symbols="my"
+ longname="Myanmar" language="my"/>
+ geometry="compact" symbols="us"
+ longname="Russian" language="ru"/>
+ geometry="compact" symbols="th"
+ longname="Thai" language="th"/>
+ geometry="compact" symbols="ua"
+ longname="Ukrainian" language="ua"/>
+ geometry="compact" symbols="ug"
+ longname="Uyghur" language="ug"/>
+ geometry="compact" symbols="us"
+ longname="US" language="en"/>
+ geometry="compact" symbols="zh-bopomofo"
+ longname="Chinese (Bopomofo)" language="zh"/>
+ geometry="compact" symbols="as-inscript"
+ longname="Assamese (Inscript)" language="as"/>
+ geometry="compact" symbols="bn-inscript"
+ longname="Bengali (Inscript)" language="bn"/>
+ geometry="compact" symbols="gu-inscript"
+ longname="Gujarati (Inscript)" language="gu"/>
+ geometry="compact" symbols="hi-inscript"
+ longname="Hindi (Inscript)" language="hi"/>
+ geometry="compact" symbols="kn-inscript"
+ longname="Kannada (Inscript)" language="kn"/>
+ geometry="compact" symbols="ks-inscript"
+ longname="Kashmiri Devanagari (Inscript)" language="ks"/>
+ geometry="compact" symbols="mai-inscript"
+ longname="Maithili (Inscript)" language="mai"/>
+ geometry="compact" symbols="ml-inscript"
+ longname="Malayalam (Inscript)" language="ml-inscript"/>
+ geometry="compact" symbols="mr-inscript"
+ longname="Marathi (Inscript)" language="mr"/>
+ geometry="compact" symbols="or-inscript"
+ longname="Oriya (Inscript)" language="or"/>
+ geometry="compact" symbols="pa-inscript"
+ longname="Punjabi (Inscript)" language="pa"/>
+ geometry="compact" symbols="sd-inscript"
+ longname="Sindhi (Inscript)" language="sd"/>
+ geometry="compact" symbols="ta-inscript"
+ longname="Tamil (Inscript)" language="ta"/>
+ geometry="compact" symbols="te-inscript"
+ longname="Telugu (Inscript)" language="te"/>
diff --git a/docs/reference/eek/Makefile.am b/docs/reference/eek/Makefile.am
index e287c2a09d468fc217cd93c00ca53fe815495da3..daa4bd6df40586a0e7bf184662f6db18ec524744 100644
--- a/docs/reference/eek/Makefile.am
+++ b/docs/reference/eek/Makefile.am
@@ -105,7 +105,6 @@ expand_content_files=eek-overview.xml
GTKDOC_CFLAGS = $(GIO2_CFLAGS)
GTKDOC_LIBS = $(top_builddir)/eek/libeek.la \
$(top_builddir)/eek/libeek-gtk.la \
- $(top_builddir)/eek/libeek-xkl.la \
$(GIO2_LIBS) \
$(GTK_LIBS) \
$(LIBXKLAVIER_LIBS)
diff --git a/docs/reference/eek/eek-docs.sgml b/docs/reference/eek/eek-docs.sgml
index be6433b6bec5b120a15dc1a7ba759ebf82c12354..4937b0be768d4a624b95196ed5e01f1e1c2d7205 100644
--- a/docs/reference/eek/eek-docs.sgml
+++ b/docs/reference/eek/eek-docs.sgml
@@ -22,12 +22,12 @@
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.3 or any later version published by the Free Software
- Foundation; with no Invariant Sections, no Front-Cover Texts and
- no Back-Cover Texts. A copy of the license is included in the
- section entitled "GNU Free Documentation License".
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License".
diff --git a/docs/reference/eekboard/eekboard-docs.sgml b/docs/reference/eekboard/eekboard-docs.sgml
index cf5dbfeb94444511698e0e03b4af88bcdd8fa23b..36894b1bcc773c852899dadcdbfc2bc7272b2ea2 100644
--- a/docs/reference/eekboard/eekboard-docs.sgml
+++ b/docs/reference/eekboard/eekboard-docs.sgml
@@ -22,12 +22,12 @@
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.3 or any later version published by the Free Software
- Foundation; with no Invariant Sections, no Front-Cover Texts and
- no Back-Cover Texts. A copy of the license is included in the
- section entitled "GNU Free Documentation License".
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License".
diff --git a/eek/Makefile.am b/eek/Makefile.am
index 057804acff0657430abd544f8a2676a0aa87c9fc..d4ab7a30a9ccc71581ba84753a840b8a2cc19170 100644
--- a/eek/Makefile.am
+++ b/eek/Makefile.am
@@ -21,7 +21,6 @@ NULL =
lib_LTLIBRARIES = \
libeek.la \
libeek-gtk.la \
- libeek-xkl.la \
$(NULL)
libeek_public_headers = \
@@ -134,34 +133,32 @@ libeek_gtk_la_SOURCES = $(libeek_gtk_sources)
libeek_gtk_la_CFLAGS = -DEEK_COMPILATION=1 $(GTK_CFLAGS) $(LIBCANBERRA_CFLAGS)
libeek_gtk_la_LIBADD = libeek.la $(GTK_LIBS) $(LIBCANBERRA_LIBS)
-libeek_xkl_public_headers = \
- $(srcdir)/eek-xkl-layout.h \
- $(srcdir)/eek-xkl.h \
- $(srcdir)/eek-xkb-layout.h \
- $(srcdir)/eek-xkb.h \
- $(NULL)
-
-libeek_xkl_sources = \
- $(srcdir)/eek-xkb-layout.c \
- $(srcdir)/eek-xkl-layout.c \
- $(NULL)
-
-libeek_xkl_la_SOURCES = $(libeek_xkl_sources)
-libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS)
-libeek_xkl_la_LIBADD = libeek.la $(LIBXKLAVIER_LIBS)
+# libeek_xkl_public_headers = \
+# $(srcdir)/eek-xkl-layout.h \
+# $(srcdir)/eek-xkl.h \
+# $(srcdir)/eek-xkb-layout.h \
+# $(srcdir)/eek-xkb.h \
+# $(NULL)
+#
+# libeek_xkl_sources = \
+# $(srcdir)/eek-xkb-layout.c \
+# $(srcdir)/eek-xkl-layout.c \
+# $(NULL)
+#
+# libeek_xkl_la_SOURCES = $(libeek_xkl_sources)
+# libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS)
+# libeek_xkl_la_LIBADD = libeek.la $(LIBXKLAVIER_LIBS)
eekdir = $(includedir)/eek-$(EEK_API_VERSION)/eek
eek_HEADERS = \
$(libeek_public_headers) \
$(builddir)/eek-enumtypes.h \
$(libeek_gtk_public_headers) \
- $(libeek_xkl_public_headers) \
$(NULL)
noinst_HEADERS = \
$(libeek_private_headers) \
$(libeek_gtk_private_headers) \
- $(libeek_xkl_private_headers) \
$(NULL)
eek-special-keysym-entries.h: special-keysym-entries.txt
@@ -206,7 +203,6 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = \
eek-$(EEK_API_VERSION).pc \
eek-gtk-$(EEK_API_VERSION).pc \
- eek-xkl-$(EEK_API_VERSION).pc \
$(NULL)
CLEANFILES =
@@ -267,23 +263,22 @@ EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_FILES = \
$(libeek_gtk_public_headers) \
$(NULL)
-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_CFLAGS = $(libeek_xkl_la_CFLAGS)
-EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-xkl.la
-EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES = \
- $(libeek_xkl_sources) \
- $(libeek_xkl_public_headers) \
- $(NULL)
+# 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_CFLAGS = $(libeek_xkl_la_CFLAGS)
+# EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek-xkl.la
+# EekXkl@EEK_LIBRARY_SUFFIX_U@_gir_FILES = \
+# $(libeek_xkl_sources) \
+# $(libeek_xkl_public_headers) \
+# $(NULL)
INTROSPECTION_GIRS += \
Eek@EEK_LIBRARY_SUFFIX@.gir \
EekGtk@EEK_LIBRARY_SUFFIX@.gir \
- EekXkl@EEK_LIBRARY_SUFFIX@.gir \
$(NULL)
girdir = $(datadir)/gir-1.0
diff --git a/eek/eek-keyboard-drawing.c b/eek/eek-keyboard-drawing.c
index bc01d60748a12f353ceb8bd5b512c0a1b5ecea14..c56e488988616c49818dc407cf12b5428d1b6f26 100644
--- a/eek/eek-keyboard-drawing.c
+++ b/eek/eek-keyboard-drawing.c
@@ -40,8 +40,8 @@ point_line_distance (gdouble ax, gdouble ay, gdouble nx, gdouble ny)
static void
normal_form (gdouble ax, gdouble ay,
- gdouble bx, gdouble by,
- gdouble * nx, gdouble * ny, gdouble * d)
+ gdouble bx, gdouble by,
+ gdouble * nx, gdouble * ny, gdouble * d)
{
gdouble l;
@@ -57,8 +57,8 @@ normal_form (gdouble ax, gdouble ay,
}
static void
-inverse (gdouble a, gdouble b, gdouble c, gdouble d,
- gdouble * e, gdouble * f, gdouble * g, gdouble * h)
+inverse (gdouble a, gdouble b, gdouble c, gdouble d,
+ gdouble * e, gdouble * f, gdouble * g, gdouble * h)
{
gdouble det;
@@ -72,7 +72,7 @@ inverse (gdouble a, gdouble b, gdouble c, gdouble d,
static void
multiply (gdouble a, gdouble b, gdouble c, gdouble d,
- gdouble e, gdouble f, gdouble * x, gdouble * y)
+ gdouble e, gdouble f, gdouble * x, gdouble * y)
{
*x = a * e + b * f;
*y = c * e + d * f;
@@ -80,7 +80,7 @@ multiply (gdouble a, gdouble b, gdouble c, gdouble d,
static void
intersect (gdouble n1x, gdouble n1y, gdouble d1,
- gdouble n2x, gdouble n2y, gdouble d2, gdouble * x, gdouble * y)
+ gdouble n2x, gdouble n2y, gdouble d2, gdouble * x, gdouble * y)
{
gdouble e, f, g, h;
@@ -94,8 +94,8 @@ intersect (gdouble n1x, gdouble n1y, gdouble d1,
*/
static void
rounded_corner (cairo_t * cr,
- gdouble bx, gdouble by,
- gdouble cx, gdouble cy, gdouble radius)
+ gdouble bx, gdouble by,
+ gdouble cx, gdouble cy, gdouble radius)
{
gdouble ax, ay;
gdouble n1x, n1y, d1;
diff --git a/eek/eek-keysym.h b/eek/eek-keysym.h
index a30092e48742ff13936ef4b8501f40c2c8eaf3e0..ae1d72e401ab6142196301af422ccc17d878cc13 100644
--- a/eek/eek-keysym.h
+++ b/eek/eek-keysym.h
@@ -25,7 +25,7 @@
#ifndef EEK_KEYSYM_H
#define EEK_KEYSYM_H 1
-#include
+//#include //luci
#include "eek-symbol.h"
G_BEGIN_DECLS
diff --git a/eek/eek-serializable.c b/eek/eek-serializable.c
index f3882b42c2e2b4ca6cf4f3623889b3ec59b057d9..04fba0bd5ca8825d625eb1ca85c02eafb4a6fc5f 100644
--- a/eek/eek-serializable.c
+++ b/eek/eek-serializable.c
@@ -9,7 +9,7 @@
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
diff --git a/eek/eek-types.h b/eek/eek-types.h
index 749c2614d6650149532733136c54b5c4e7e1af4b..a8fd56695ea59d1b9fb71ac46716c92c49ebb1d9 100644
--- a/eek/eek-types.h
+++ b/eek/eek-types.h
@@ -100,13 +100,13 @@ typedef enum {
typedef enum
{
EEK_SHIFT_MASK = 1 << 0,
- EEK_LOCK_MASK = 1 << 1,
+ EEK_LOCK_MASK = 1 << 1,
EEK_CONTROL_MASK = 1 << 2,
- EEK_MOD1_MASK = 1 << 3,
- EEK_MOD2_MASK = 1 << 4,
- EEK_MOD3_MASK = 1 << 5,
- EEK_MOD4_MASK = 1 << 6,
- EEK_MOD5_MASK = 1 << 7,
+ EEK_MOD1_MASK = 1 << 3,
+ EEK_MOD2_MASK = 1 << 4,
+ EEK_MOD3_MASK = 1 << 5,
+ EEK_MOD4_MASK = 1 << 6,
+ EEK_MOD5_MASK = 1 << 7,
EEK_BUTTON1_MASK = 1 << 8,
EEK_BUTTON2_MASK = 1 << 9,
EEK_BUTTON3_MASK = 1 << 10,
diff --git a/eek/eek-xkl-0.90.pc.in b/eek/eek-wkb-0.90.pc.in
similarity index 68%
rename from eek/eek-xkl-0.90.pc.in
rename to eek/eek-wkb-0.90.pc.in
index 2994aedb052a94079cc01f9544547c1e28340350..e625d060c07b556f6f34fa441b2d9ae42365e57f 100644
--- a/eek/eek-xkl-0.90.pc.in
+++ b/eek/eek-wkb-0.90.pc.in
@@ -16,15 +16,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: libeek-xkl
-Description: A Library to Create Keyboard-like UI (Libxklavier Support)
-URL: http://fedorahosted.org/eekboard/
-Version: @VERSION@
-Requires: eek-@EEK_API_VERSION@ libxklavier
-Libs: -L${libdir} -leek-xkl
-Cflags: -I${includedir}/eek-@EEK_API_VERSION@
+# prefix=@prefix@
+# exec_prefix=@exec_prefix@
+# libdir=@libdir@
+# includedir=@includedir@
+#
+# Name: libeek-xkb
+# Description: A Library to Create Keyboard-like UI (XKB Support)
+# URL: http://fedorahosted.org/eekboard/
+# Version: @VERSION@
+# Requires: eek-@EEK_API_VERSION@ gtk+-x11-@GTK_API_VERSION@
+# Libs: -L${libdir} -leek-xkb
+# Cflags: -I${includedir}/eek-@EEK_API_VERSION@
diff --git a/eek/eek-wkb-layout.c b/eek/eek-wkb-layout.c
new file mode 100644
index 0000000000000000000000000000000000000000..cd0e87d5405afea7fa97b2558f36c9aa806e0648
--- /dev/null
+++ b/eek/eek-wkb-layout.c
@@ -0,0 +1,679 @@
+/*
+ * Copyright (C) 2006 Sergey V. Udaltsov
+ * Copyright (C) 2010-2011 Daiki Ueno
+ * Copyright (C) 2010-2011 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+/**
+ * SECTION:eek-xkb-layout
+ * @short_description: Layout engine using XKB configuration
+ *
+ * The #EekXkbLayout inherits #EekLayout class and arranges keyboard
+ * elements using XKB.
+ */
+
+// #ifdef HAVE_CONFIG_H
+// #include "config.h"
+// #endif /* HAVE_CONFIG_H */
+//
+// #include
+// #include
+// #include
+// #include
+// #include
+// #include
+//
+// #include "eek-xkb-layout.h"
+// #include "eek-keyboard.h"
+// #include "eek-section.h"
+// #include "eek-key.h"
+// #include "eek-keysym.h"
+//
+// #define XKB_COMPONENT_MASK (XkbGBN_GeometryMask | \
+// XkbGBN_KeyNamesMask | \
+// XkbGBN_OtherNamesMask | \
+// XkbGBN_SymbolsMask | \
+// XkbGBN_IndicatorMapMask)
+//
+// static void initable_iface_init (GInitableIface *initable_iface);
+//
+// G_DEFINE_TYPE_WITH_CODE (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT,
+// G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
+// initable_iface_init));
+//
+// #define EEK_XKB_LAYOUT_GET_PRIVATE(obj) \
+// (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutPrivate))
+//
+// enum {
+// PROP_0,
+// PROP_DISPLAY,
+// PROP_LAST
+// };
+//
+// struct _EekXkbLayoutPrivate
+// {
+// /* Configuration names that should synch'ed to the symbolic names
+// in priv->xkb->names. Since we use GLib's memory allocator,
+// don't store any address returned from the X server here. */
+// XkbComponentNamesRec names;
+//
+// Display *display;
+//
+// /* Actual XKB configuration of DISPLAY. */
+// XkbDescRec *xkb;
+//
+// /* Hash table to cache orefs by shape address. */
+// GHashTable *shape_oref_hash;
+//
+// gint scale_numerator;
+// gint scale_denominator;
+// };
+//
+// static guint find_keycode (EekXkbLayout *layout,
+// gchar *key_name);
+//
+// static gboolean get_keyboard_from_server (EekXkbLayout *layout,
+// GError **error);
+//
+// static gboolean get_names_from_server (EekXkbLayout *layout,
+// GError **error);
+//
+// static void setup_scaling (EekXkbLayout *layout,
+// gdouble width,
+// gdouble height);
+//
+// G_INLINE_FUNC gint
+// xkb_to_pixmap_coord (EekXkbLayout *layout,
+// gint n)
+// {
+// EekXkbLayoutPrivate *priv = layout->priv;
+// return n * priv->scale_numerator / priv->scale_denominator;
+// }
+//
+// G_INLINE_FUNC gdouble
+// xkb_to_pixmap_double (EekXkbLayout *layout,
+// gdouble d)
+// {
+// EekXkbLayoutPrivate *priv = layout->priv;
+// return d * priv->scale_numerator / priv->scale_denominator;
+// }
+//
+// static void
+// create_key (EekXkbLayout *layout,
+// EekKeyboard *keyboard,
+// EekSection *section,
+// gint column,
+// gint row,
+// gdouble x,
+// gdouble y,
+// XkbKeyRec *xkbkey)
+// {
+// XkbGeometryRec *xkbgeometry;
+// XkbBoundsRec *xkbbounds;
+// XkbShapeRec *xkbshape;
+// XkbOutlineRec *xkboutline;
+// EekXkbLayoutPrivate *priv = layout->priv;
+// EekKey *key;
+// EekBounds bounds;
+// EekSymbolMatrix *matrix = NULL;
+// gchar name[XkbKeyNameLength + 1];
+// KeyCode keycode;
+// gint num_groups, num_levels;
+// guint oref;
+// gpointer v;
+//
+// xkbgeometry = priv->xkb->geom;
+// xkbshape = &xkbgeometry->shapes[xkbkey->shape_ndx];
+// if (g_hash_table_lookup_extended (priv->shape_oref_hash, xkbshape,
+// NULL, &v)) {
+// oref = GPOINTER_TO_UINT(v);
+// } else {
+// EekOutline *outline;
+//
+// xkboutline = xkbshape->primary == NULL ? &xkbshape->outlines[0] :
+// xkbshape->primary;
+//
+// outline = g_slice_new (EekOutline);
+// outline->corner_radius = xkb_to_pixmap_coord(layout,
+// xkboutline->corner_radius);
+//
+// if (xkboutline->num_points <= 2) { /* rectangular */
+// gdouble x1, y1, x2, y2;
+//
+// outline->num_points = 4;
+// outline->points = g_slice_alloc0 (sizeof (EekPoint) *
+// outline->num_points);
+// if (xkboutline->num_points == 1) {
+// x1 = xkb_to_pixmap_coord(layout, xkbshape->bounds.x1);
+// y1 = xkb_to_pixmap_coord(layout, xkbshape->bounds.y1);
+// x2 = xkb_to_pixmap_coord(layout, xkboutline->points[0].x);
+// y2 = xkb_to_pixmap_coord(layout, xkboutline->points[0].y);
+// } else {
+// x1 = xkb_to_pixmap_coord(layout, xkboutline->points[0].x);
+// y1 = xkb_to_pixmap_coord(layout, xkboutline->points[0].y);
+// x2 = xkb_to_pixmap_coord(layout, xkboutline->points[1].x);
+// y2 = xkb_to_pixmap_coord(layout, xkboutline->points[1].y);
+// }
+// outline->points[0].x = outline->points[3].x = x1;
+// outline->points[0].y = outline->points[1].y = y1;
+// outline->points[1].x = outline->points[2].x = x2;
+// outline->points[2].y = outline->points[3].y = y2;
+// } else { /* polygon */
+// gint i;
+//
+// outline->num_points = xkboutline->num_points;
+// outline->points = g_new0 (EekPoint, outline->num_points);
+// for (i = 0; i < xkboutline->num_points; i++) {
+// outline->points[i].x =
+// xkb_to_pixmap_coord(layout, xkboutline->points[i].x);
+// outline->points[i].y =
+// xkb_to_pixmap_coord(layout, xkboutline->points[i].y);
+// }
+// }
+// oref = eek_keyboard_add_outline (keyboard, outline);
+// eek_outline_free (outline);
+// g_hash_table_insert (priv->shape_oref_hash, xkbshape,
+// GUINT_TO_POINTER(oref));
+// }
+//
+// memset (name, 0, sizeof name);
+// memcpy (name, xkbkey->name.name, sizeof name - 1);
+//
+// xkbbounds = &xkbgeometry->shapes[xkbkey->shape_ndx].bounds;
+// bounds.x = xkb_to_pixmap_coord(layout, xkbbounds->x1 + x);
+// bounds.y = xkb_to_pixmap_coord(layout, xkbbounds->y1 + y);
+// bounds.width = xkb_to_pixmap_coord(layout, xkbbounds->x2 - xkbbounds->x1);
+// bounds.height = xkb_to_pixmap_coord(layout, xkbbounds->y2 - xkbbounds->y1);
+//
+// keycode = find_keycode (layout, name);
+// if (keycode == EEK_INVALID_KEYCODE) {
+// num_groups = num_levels = 0;
+// matrix = eek_symbol_matrix_new (0, 0);
+// } else {
+// KeySym keysym;
+// gint i, j;
+//
+// num_groups = XkbKeyNumGroups (priv->xkb, keycode);
+// num_levels = XkbKeyGroupsWidth (priv->xkb, keycode);
+// matrix = eek_symbol_matrix_new (num_groups, num_levels);
+// for (i = 0; i < num_groups; i++)
+// for (j = 0; j < num_levels; j++) {
+// EekModifierType modifier;
+//
+// keysym = XkbKeySymEntry (priv->xkb, keycode, j, i);
+// modifier = XkbKeysymToModifiers (priv->display, keysym);
+// matrix->data[i * num_levels + j] =
+// EEK_SYMBOL(eek_keysym_new_with_modifier (keysym,
+// modifier));
+// }
+// }
+//
+// key = eek_section_create_key (section, keycode, column, row);
+// eek_element_set_name (EEK_ELEMENT(key), name);
+// eek_element_set_bounds (EEK_ELEMENT(key), &bounds);
+// eek_key_set_symbol_matrix (key, matrix);
+// eek_symbol_matrix_free (matrix);
+// eek_key_set_oref (key, oref);
+// }
+//
+// static void
+// create_section (EekXkbLayout *layout,
+// EekKeyboard *keyboard,
+// XkbSectionRec *xkbsection)
+// {
+// XkbGeometryRec *xkbgeometry;
+// EekXkbLayoutPrivate *priv;
+// EekSection *section;
+// EekBounds bounds;
+// gchar *name;
+// gfloat left, top;
+// gint i, j;
+//
+// bounds.x = xkb_to_pixmap_coord(layout, xkbsection->left);
+// bounds.y = xkb_to_pixmap_coord(layout, xkbsection->top);
+// bounds.width = xkb_to_pixmap_coord(layout, xkbsection->width);
+// bounds.height = xkb_to_pixmap_coord(layout, xkbsection->height);
+//
+// priv = layout->priv;
+// xkbgeometry = priv->xkb->geom;
+// section = eek_keyboard_create_section (keyboard);
+// name = XGetAtomName (priv->display, xkbsection->name);
+// eek_element_set_name (EEK_ELEMENT(section), name);
+// XFree (name);
+// eek_element_set_bounds (EEK_ELEMENT(section), &bounds);
+// eek_section_set_angle (section,
+// /* angle is in tenth of degree */
+// xkbsection->angle / 10);
+//
+// for (i = 0; i < xkbsection->num_rows; i++) {
+// XkbRowRec *xkbrow;
+//
+// xkbrow = &xkbsection->rows[i];
+// left = xkbrow->left;
+// top = xkbrow->top;
+// eek_section_add_row (section,
+// xkbrow->num_keys,
+// xkbrow->vertical ?
+// EEK_ORIENTATION_VERTICAL :
+// EEK_ORIENTATION_HORIZONTAL);
+// for (j = 0; j < xkbrow->num_keys; j++) {
+// XkbKeyRec *xkbkey;
+// XkbBoundsRec *xkbbounds;
+//
+// xkbkey = &xkbrow->keys[j];
+// if (xkbrow->vertical)
+// top += xkbkey->gap;
+// else
+// left += xkbkey->gap;
+// create_key (layout, keyboard, section, j, i, left, top, xkbkey);
+// xkbbounds = &xkbgeometry->shapes[xkbkey->shape_ndx].bounds;
+// if (xkbrow->vertical)
+// top += xkbbounds->y2 - xkbbounds->y1;
+// else
+// left += xkbbounds->x2 - xkbbounds->x1;
+// }
+// }
+// }
+//
+// static void
+// create_keyboard (EekXkbLayout *layout, EekKeyboard *keyboard)
+// {
+// EekXkbLayoutPrivate *priv = layout->priv;
+// XkbGeometryRec *xkbgeometry;
+// EekBounds bounds;
+// gint i;
+//
+// g_return_if_fail (priv->xkb);
+// g_return_if_fail (priv->xkb->geom);
+//
+// xkbgeometry = priv->xkb->geom;
+//
+// eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
+// setup_scaling (EEK_XKB_LAYOUT(layout), bounds.width, bounds.height);
+//
+// bounds.x = bounds.y = 0;
+// bounds.width = xkb_to_pixmap_coord(layout, xkbgeometry->width_mm);
+// bounds.height = xkb_to_pixmap_coord(layout, xkbgeometry->height_mm);
+//
+// for (i = 0; i < xkbgeometry->num_sections; i++) {
+// XkbSectionRec *xkbsection;
+//
+// xkbsection = &xkbgeometry->sections[i];
+// create_section (layout, keyboard, xkbsection);
+// }
+// eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
+// }
+//
+// static EekKeyboard *
+// eek_xkb_layout_real_create_keyboard (EekLayout *self,
+// gdouble initial_width,
+// gdouble initial_height)
+// {
+// EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
+// EekBounds bounds;
+// EekKeyboard *keyboard;
+//
+// keyboard = g_object_new (EEK_TYPE_KEYBOARD, "layout", self, NULL);
+// bounds.x = bounds.y = 0.0;
+// bounds.width = initial_width;
+// bounds.height = initial_height;
+// eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
+//
+// /* resolve modifiers dynamically assigned at run time */
+// eek_keyboard_set_num_lock_mask (keyboard,
+// XkbKeysymToModifiers (priv->display,
+// XK_Num_Lock));
+// eek_keyboard_set_alt_gr_mask (keyboard,
+// XkbKeysymToModifiers (priv->display,
+// XK_ISO_Level3_Shift));
+//
+// if (priv->shape_oref_hash)
+// g_hash_table_destroy (priv->shape_oref_hash);
+//
+// priv->shape_oref_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
+// create_keyboard (EEK_XKB_LAYOUT(self), keyboard);
+// g_hash_table_destroy (priv->shape_oref_hash);
+//
+// return keyboard;
+// }
+//
+// static void
+// eek_xkb_layout_finalize (GObject *object)
+// {
+// EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (object);
+//
+// g_free (priv->names.keycodes);
+// g_free (priv->names.geometry);
+// g_free (priv->names.symbols);
+// XkbFreeKeyboard (priv->xkb, 0, TRUE); /* free_all = TRUE */
+// G_OBJECT_CLASS (eek_xkb_layout_parent_class)->finalize (object);
+// }
+//
+// static void
+// eek_xkb_layout_set_property (GObject *object,
+// guint prop_id,
+// const GValue *value,
+// GParamSpec *pspec)
+// {
+// EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
+//
+// switch (prop_id) {
+// case PROP_DISPLAY:
+// layout->priv->display = g_value_get_pointer (value);
+// break;
+// default:
+// G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+// break;
+// }
+// }
+//
+// static void
+// eek_xkb_layout_get_property (GObject *object,
+// guint prop_id,
+// GValue *value,
+// GParamSpec *pspec)
+// {
+// EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
+//
+// switch (prop_id) {
+// case PROP_DISPLAY:
+// g_value_set_pointer (value, layout->priv->display);
+// break;
+// default:
+// G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+// break;
+// }
+// }
+//
+// static void
+// eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
+// {
+// EekLayoutClass *layout_class = EEK_LAYOUT_CLASS (klass);
+// GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+// GParamSpec *pspec;
+//
+// g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate));
+//
+// layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard;
+//
+// gobject_class->finalize = eek_xkb_layout_finalize;
+// gobject_class->set_property = eek_xkb_layout_set_property;
+// gobject_class->get_property = eek_xkb_layout_get_property;
+//
+// pspec = g_param_spec_pointer ("display",
+// "Display",
+// "X Display",
+// G_PARAM_READWRITE |
+// G_PARAM_CONSTRUCT_ONLY);
+// g_object_class_install_property (gobject_class, PROP_DISPLAY, pspec);
+// }
+//
+// static void
+// eek_xkb_layout_init (EekXkbLayout *self)
+// {
+// self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
+// }
+//
+// static gboolean
+// get_names_from_server (EekXkbLayout *layout,
+// GError **error)
+// {
+// EekXkbLayoutPrivate *priv = layout->priv;
+// gchar *name;
+//
+// XkbGetNames (priv->display, XkbAllNamesMask, priv->xkb);
+//
+// if (priv->xkb->names->keycodes <= 0)
+// g_warning ("XKB keycodes setting is not loaded properly");
+// else {
+// name = XGetAtomName (priv->display, priv->xkb->names->keycodes);
+// if (!name)
+// g_warning ("Can't get the name of keycodes");
+// else if (!priv->names.keycodes ||
+// g_strcmp0 (name, priv->names.keycodes)) {
+// g_free (priv->names.keycodes);
+// priv->names.keycodes = g_strdup (name);
+// XFree (name);
+// }
+// }
+//
+// if (priv->xkb->names->geometry <= 0)
+// g_warning ("XKB geometry setting is not loaded");
+// else {
+// name = XGetAtomName (priv->display, priv->xkb->names->geometry);
+// if (!name)
+// g_warning ("Can't get the name of geometry");
+// else if (!priv->names.geometry ||
+// g_strcmp0 (name, priv->names.geometry)) {
+// g_free (priv->names.geometry);
+// priv->names.geometry = g_strdup (name);
+// XFree (name);
+// }
+// }
+//
+// if (priv->xkb->names->symbols <= 0)
+// g_warning ("XKB symbols setting is not loaded");
+// else {
+// name = XGetAtomName (priv->display, priv->xkb->names->symbols);
+// if (!name)
+// g_warning ("Can't get the name of symbols");
+// else if (!priv->names.symbols ||
+// g_strcmp0 (name, priv->names.symbols)) {
+// g_free (priv->names.symbols);
+// priv->names.symbols = g_strdup (name);
+// XFree (name);
+// }
+// }
+//
+// return TRUE;
+// }
+//
+// /**
+// * eek_xkb_layout_new:
+// *
+// * Create a new #EekXkbLayout.
+// */
+// EekLayout *
+// eek_xkb_layout_new (Display *display,
+// GError **error)
+// {
+// return (EekLayout *) g_initable_new (EEK_TYPE_XKB_LAYOUT,
+// NULL,
+// error,
+// "display", display,
+// NULL);
+// }
+//
+// /**
+// * eek_xkb_layout_set_names: (skip)
+// * @layout: an #EekXkbLayout
+// * @names: XKB component names
+// * @error: a #GError
+// *
+// * Set the XKB component names to @layout.
+// * Returns: %TRUE if the component names are successfully set, %FALSE otherwise
+// */
+// gboolean
+// eek_xkb_layout_set_names (EekXkbLayout *layout,
+// XkbComponentNamesRec *names,
+// GError **error)
+// {
+// if (g_strcmp0 (names->keycodes, layout->priv->names.keycodes)) {
+// g_free (layout->priv->names.keycodes);
+// layout->priv->names.keycodes = g_strdup (names->keycodes);
+// }
+//
+// if (g_strcmp0 (names->geometry, layout->priv->names.geometry)) {
+// g_free (layout->priv->names.geometry);
+// layout->priv->names.geometry = g_strdup (names->geometry);
+// }
+//
+// if (g_strcmp0 (names->symbols, layout->priv->names.symbols)) {
+// g_free (layout->priv->names.symbols);
+// layout->priv->names.symbols = g_strdup (names->symbols);
+// }
+//
+// return get_keyboard_from_server (layout, error);
+// }
+//
+// static gboolean
+// get_keyboard_from_server (EekXkbLayout *layout,
+// GError **error)
+// {
+// EekXkbLayoutPrivate *priv = layout->priv;
+//
+// if (priv->xkb) {
+// XkbFreeKeyboard (priv->xkb, 0, True);
+// priv->xkb = NULL;
+// }
+//
+// if (priv->names.keycodes && priv->names.geometry && priv->names.symbols) {
+// priv->xkb = XkbGetKeyboardByName (priv->display,
+// XkbUseCoreKbd,
+// &priv->names,
+// 0,
+// XKB_COMPONENT_MASK,
+// False);
+// } else {
+// priv->xkb = XkbGetKeyboard (priv->display,
+// XKB_COMPONENT_MASK,
+// XkbUseCoreKbd);
+// if (!get_names_from_server (layout, error)) {
+// XkbFreeKeyboard (priv->xkb, 0, True);
+// 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);
+// priv->names.keycodes = NULL;
+// g_free (priv->names.geometry);
+// priv->names.geometry = NULL;
+// g_free (priv->names.symbols);
+// priv->names.symbols = NULL;
+// return FALSE;
+// }
+// return TRUE;
+// }
+//
+//
+// static guint
+// find_keycode (EekXkbLayout *layout, gchar *key_name)
+// {
+// #define KEYSYM_NAME_MAX_LENGTH 4
+// guint keycode;
+// gint i, j;
+// XkbKeyNamePtr pkey;
+// XkbKeyAliasPtr palias;
+// guint is_name_matched;
+// gchar *src, *dst;
+// EekXkbLayoutPrivate *priv = layout->priv;
+//
+// if (!priv->xkb)
+// return EEK_INVALID_KEYCODE;
+//
+// pkey = priv->xkb->names->keys + priv->xkb->min_key_code;
+// for (keycode = priv->xkb->min_key_code;
+// keycode <= priv->xkb->max_key_code; keycode++) {
+// is_name_matched = 1;
+// src = key_name;
+// dst = pkey->name;
+// for (i = KEYSYM_NAME_MAX_LENGTH; --i >= 0;) {
+// if ('\0' == *src)
+// break;
+// if (*src++ != *dst++) {
+// is_name_matched = 0;
+// break;
+// }
+// }
+// if (is_name_matched)
+// return keycode;
+// pkey++;
+// }
+//
+// palias = priv->xkb->names->key_aliases;
+// for (j = priv->xkb->names->num_key_aliases; --j >= 0;) {
+// is_name_matched = 1;
+// src = key_name;
+// dst = palias->alias;
+// for (i = KEYSYM_NAME_MAX_LENGTH; --i >= 0;) {
+// if ('\0' == *src)
+// break;
+// if (*src++ != *dst++) {
+// is_name_matched = 0;
+// break;
+// }
+// }
+//
+// if (is_name_matched) {
+// keycode = find_keycode (layout, palias->real);
+// return keycode;
+// }
+// palias++;
+// }
+//
+// return EEK_INVALID_KEYCODE;
+// }
+//
+// static void
+// setup_scaling (EekXkbLayout *layout,
+// gdouble width,
+// gdouble height)
+// {
+// EekXkbLayoutPrivate *priv = layout->priv;
+//
+// g_return_if_fail (priv->xkb);
+//
+// g_return_if_fail (priv->xkb->geom->width_mm > 0);
+// g_return_if_fail (priv->xkb->geom->height_mm > 0);
+//
+// if (width * priv->xkb->geom->height_mm <
+// height * priv->xkb->geom->width_mm) {
+// priv->scale_numerator = width;
+// priv->scale_denominator = priv->xkb->geom->width_mm;
+// } else {
+// priv->scale_numerator = height;
+// priv->scale_denominator = priv->xkb->geom->height_mm;
+// }
+// }
+//
+// static gboolean
+// initable_init (GInitable *initable,
+// GCancellable *cancellable,
+// GError **error)
+// {
+// EekXkbLayout *layout = EEK_XKB_LAYOUT (initable);
+//
+// if (!get_keyboard_from_server (layout, error))
+// return FALSE;
+//
+// if (!get_names_from_server (layout, error))
+// return FALSE;
+//
+// return TRUE;
+// }
+//
+// static void
+// initable_iface_init (GInitableIface *initable_iface)
+// {
+// initable_iface->init = initable_init;
+// }
diff --git a/eek/eek-wkb-layout.h b/eek/eek-wkb-layout.h
new file mode 100644
index 0000000000000000000000000000000000000000..d156cbc0321c0bf6497a63ff74ffb37802a1cab5
--- /dev/null
+++ b/eek/eek-wkb-layout.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2010-2011 Daiki Ueno
+ * Copyright (C) 2010-2011 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+//#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
+//#error "Only can be included directly."
+//#endif
+//
+//#ifndef EEK_XKB_LAYOUT_H
+//#define EEK_XKB_LAYOUT_H 1
+//
+//#include
+//#include
+//#include "eek-layout.h"
+//
+//G_BEGIN_DECLS
+//
+//#define EEK_TYPE_XKB_LAYOUT (eek_xkb_layout_get_type())
+//#define EEK_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayout))
+//#define EEK_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass))
+//#define EEK_IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKB_LAYOUT))
+//#define EEK_IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKB_LAYOUT))
+//#define EEK_XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass))
+//
+//typedef struct _EekXkbLayout EekXkbLayout;
+//typedef struct _EekXkbLayoutClass EekXkbLayoutClass;
+//typedef struct _EekXkbLayoutPrivate EekXkbLayoutPrivate;
+//
+//struct _EekXkbLayout
+//{
+// /*< private >*/
+// EekLayout parent;
+//
+// EekXkbLayoutPrivate *priv;
+//};
+//
+//struct _EekXkbLayoutClass
+//{
+// /*< private >*/
+// EekLayoutClass parent_class;
+//
+// /*< private >*/
+// /* padding */
+// gpointer pdummy[24];
+//};
+//
+//GType eek_xkb_layout_get_type (void) G_GNUC_CONST;
+//EekLayout *eek_xkb_layout_new (Display *display,
+// GError **error);
+//
+//gboolean eek_xkb_layout_set_names (EekXkbLayout *layout,
+// XkbComponentNamesRec *names,
+// GError **error);
+//
+//G_END_DECLS
+//#endif /* #ifndef EEK_XKB_LAYOUT_H */
diff --git a/eek/eek-xkl.h b/eek/eek-wkb.h
similarity index 87%
rename from eek/eek-xkl.h
rename to eek/eek-wkb.h
index 9b317210c44a156a861dcdd3486cc4ac1d8e4e75..89a24fb6c6f900571e1b6e0679520a9715967421 100644
--- a/eek/eek-xkl.h
+++ b/eek/eek-wkb.h
@@ -17,10 +17,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
-#ifndef EEK_XKL_H
-#define EEK_XKL_H 1
-
-#include "eek.h"
-#include "eek-xkl-layout.h"
-
-#endif /* EEK_XKL_H */
+//#ifndef EEK_XKB_H
+//#define EEK_XKB_H 1
+//
+//#include "eek.h"
+//#include "eek-xkb-layout.h"
+//
+//#endif /* EEK_XKB_H */
diff --git a/eek/eek-xkb-0.90.pc.in b/eek/eek-wkl-0.90.pc.in
similarity index 68%
rename from eek/eek-xkb-0.90.pc.in
rename to eek/eek-wkl-0.90.pc.in
index 421b63368d8a99e2619dd6f07f7193cebd9a6f7a..6bcee3fbfd372338cf2ecb6b0100dd9145d1242c 100644
--- a/eek/eek-xkb-0.90.pc.in
+++ b/eek/eek-wkl-0.90.pc.in
@@ -16,15 +16,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: libeek-xkb
-Description: A Library to Create Keyboard-like UI (XKB Support)
-URL: http://fedorahosted.org/eekboard/
-Version: @VERSION@
-Requires: eek-@EEK_API_VERSION@ gtk+-x11-@GTK_API_VERSION@
-Libs: -L${libdir} -leek-xkb
-Cflags: -I${includedir}/eek-@EEK_API_VERSION@
+# prefix=@prefix@
+# exec_prefix=@exec_prefix@
+# libdir=@libdir@
+# includedir=@includedir@
+#
+# Name: libeek-xkl
+# Description: A Library to Create Keyboard-like UI (Libxklavier Support)
+# URL: http://fedorahosted.org/eekboard/
+# Version: @VERSION@
+# Requires: eek-@EEK_API_VERSION@ libxklavier
+# Libs: -L${libdir} -leek-xkl
+# Cflags: -I${includedir}/eek-@EEK_API_VERSION@
diff --git a/eek/eek-wkl-layout.c b/eek/eek-wkl-layout.c
new file mode 100644
index 0000000000000000000000000000000000000000..68fae517a4c87dc666dda861b43eb5613dd006ce
--- /dev/null
+++ b/eek/eek-wkl-layout.c
@@ -0,0 +1,663 @@
+/*
+ * Copyright (C) 2010-2011 Daiki Ueno
+ * Copyright (C) 2010-2011 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+/**
+ * SECTION:eek-xkl-layout
+ * @short_description: Layout engine using Libxklavier configuration
+ *
+ * The #EekXklLayout is a simple wrapper around #EekXkbLayout class
+ * to use Libxklavier configuration.
+ */
+
+//#ifdef HAVE_CONFIG_H
+//#include "config.h"
+//#endif /* HAVE_CONFIG_H */
+//
+//#include
+//#include
+//#include
+//
+//#include "eek-xkl-layout.h"
+//
+//#define noKBDRAW_DEBUG
+//
+//static GInitableIface *parent_initable_iface;
+//
+//static void initable_iface_init (GInitableIface *initable_iface);
+//
+//G_DEFINE_TYPE_WITH_CODE (EekXklLayout, eek_xkl_layout, EEK_TYPE_XKB_LAYOUT,
+// G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
+// initable_iface_init));
+//
+//#define EEK_XKL_LAYOUT_GET_PRIVATE(obj) \
+// (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutPrivate))
+//
+//enum {
+// PROP_0,
+// PROP_MODEL,
+// PROP_LAYOUTS,
+// PROP_VARIANTS,
+// PROP_OPTIONS,
+// PROP_LAST
+//};
+//
+//struct _EekXklLayoutPrivate
+//{
+// XklEngine *engine;
+// XklConfigRec *config;
+//};
+//
+///* from gnome-keyboard-properties-xkbpv.c:
+// * BAD STYLE: Taken from xklavier_private_xkb.h
+// * Any ideas on architectural improvements are WELCOME
+// */
+//extern gboolean xkl_xkb_config_native_prepare (XklEngine * engine,
+// const XklConfigRec * data,
+// XkbComponentNamesPtr
+// component_names);
+//
+//extern void xkl_xkb_config_native_cleanup (XklEngine * engine,
+// XkbComponentNamesPtr
+// component_names);
+//
+//static gboolean set_xkb_component_names (EekXklLayout *layout,
+// XklConfigRec *config);
+//
+//static void
+//eek_xkl_layout_dispose (GObject *object)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (object);
+//
+// if (priv->config) {
+// g_object_unref (priv->config);
+// priv->config = NULL;
+// }
+//
+// G_OBJECT_CLASS (eek_xkl_layout_parent_class)->dispose (object);
+//}
+//
+//static void
+//eek_xkl_layout_set_property (GObject *object,
+// guint prop_id,
+// const GValue *value,
+// GParamSpec *pspec)
+//{
+// EekXklLayout *layout = EEK_XKL_LAYOUT(object);
+//
+// switch (prop_id) {
+// case PROP_MODEL:
+// eek_xkl_layout_set_model (layout, g_value_get_string (value));
+// break;
+// case PROP_LAYOUTS:
+// eek_xkl_layout_set_layouts (layout, g_value_get_boxed (value));
+// break;
+// case PROP_VARIANTS:
+// eek_xkl_layout_set_variants (layout, g_value_get_boxed (value));
+// break;
+// case PROP_OPTIONS:
+// eek_xkl_layout_set_options (layout, g_value_get_boxed (value));
+// break;
+// default:
+// G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+// break;
+// }
+//}
+//
+//static void
+//eek_xkl_layout_get_property (GObject *object,
+// guint prop_id,
+// GValue *value,
+// GParamSpec *pspec)
+//{
+// EekXklLayout *layout = EEK_XKL_LAYOUT(object);
+//
+// switch (prop_id) {
+// case PROP_MODEL:
+// g_value_set_string (value,
+// eek_xkl_layout_get_model (layout));
+// break;
+// case PROP_LAYOUTS:
+// g_value_set_boxed (value,
+// eek_xkl_layout_get_layouts (layout));
+// break;
+// case PROP_VARIANTS:
+// g_value_set_boxed (value,
+// eek_xkl_layout_get_variants (layout));
+// break;
+// case PROP_OPTIONS:
+// g_value_set_boxed (value,
+// eek_xkl_layout_get_options (layout));
+// break;
+// default:
+// G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+// break;
+// }
+//}
+//
+//static void
+//eek_xkl_layout_class_init (EekXklLayoutClass *klass)
+//{
+// GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+// GParamSpec *pspec;
+//
+// g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate));
+//
+// gobject_class->dispose = eek_xkl_layout_dispose;
+// gobject_class->set_property = eek_xkl_layout_set_property;
+// gobject_class->get_property = eek_xkl_layout_get_property;
+//
+// /**
+// * EekXklLayout:model:
+// *
+// * The libxklavier model name of #EekXklLayout.
+// */
+// pspec = g_param_spec_string ("model",
+// "Model",
+// "Libxklavier model",
+// NULL,
+// G_PARAM_READWRITE);
+// g_object_class_install_property (gobject_class, PROP_MODEL, pspec);
+//
+// /**
+// * EekXklLayout:layouts:
+// *
+// * The libxklavier layout names of #EekXklLayout.
+// */
+// pspec = g_param_spec_boxed ("layouts",
+// "Layouts",
+// "Libxklavier layouts",
+// G_TYPE_STRV,
+// G_PARAM_READWRITE);
+// g_object_class_install_property (gobject_class, PROP_LAYOUTS, pspec);
+//
+// /**
+// * EekXklLayout:variants:
+// *
+// * The libxklavier variant names of #EekXklLayout.
+// */
+// pspec = g_param_spec_boxed ("variants",
+// "Variants",
+// "Libxklavier variants",
+// G_TYPE_STRV,
+// G_PARAM_READWRITE);
+// g_object_class_install_property (gobject_class, PROP_VARIANTS, pspec);
+//
+// /**
+// * EekXklLayout:options:
+// *
+// * The libxklavier option names of #EekXklLayout.
+// */
+// pspec = g_param_spec_boxed ("options",
+// "Options",
+// "Libxklavier options",
+// G_TYPE_STRV,
+// G_PARAM_READWRITE);
+// g_object_class_install_property (gobject_class, PROP_OPTIONS, pspec);
+//}
+//
+//static void
+//eek_xkl_layout_init (EekXklLayout *self)
+//{
+// self->priv = EEK_XKL_LAYOUT_GET_PRIVATE (self);
+//}
+//
+///**
+// * eek_xkl_layout_new:
+// *
+// * Create a new #EekXklLayout.
+// */
+//EekLayout *
+//eek_xkl_layout_new (Display *display, GError **error)
+//{
+// return (EekLayout *) g_initable_new (EEK_TYPE_XKL_LAYOUT,
+// NULL,
+// error,
+// "display", display,
+// NULL);
+//}
+//
+//G_INLINE_FUNC void
+//merge_xkl_config_rec (XklConfigRec *dst, XklConfigRec *src)
+//{
+// if (src->model) {
+// g_free (dst->model);
+// dst->model = g_strdup (src->model);
+// }
+// if (src->layouts) {
+// g_strfreev (dst->layouts);
+// dst->layouts = g_strdupv (src->layouts);
+// }
+// if (src->variants) {
+// g_strfreev (dst->variants);
+// dst->variants = g_strdupv (src->variants);
+// }
+// if (src->options) {
+// g_strfreev (dst->options);
+// dst->options = g_strdupv (src->options);
+// }
+//}
+//
+///**
+// * eek_xkl_layout_set_config: (skip)
+// * @layout: an #EekXklLayout
+// * @config: Libxklavier configuration
+// *
+// * Reconfigure @layout with @config.
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_set_config (EekXklLayout *layout,
+// XklConfigRec *config)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+// XklConfigRec *c;
+// gboolean retval;
+//
+// g_return_val_if_fail (priv, FALSE);
+// c = xkl_config_rec_new ();
+// merge_xkl_config_rec (c, priv->config);
+// merge_xkl_config_rec (c, config);
+// retval = set_xkb_component_names (layout, c);
+// g_object_unref (c);
+// merge_xkl_config_rec (priv->config, config);
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_set_config_full:
+// * @layout: an #EekXklLayout
+// * @model: Libxklavier model name
+// * @layouts: Libxklavier layouts
+// * @variants: Libxklavier variants
+// * @options: Libxklavier options
+// *
+// * Reconfigure @layout with @model, @layouts, @variants, and @options.
+// * This function is merely a wrapper around
+// * eek_xkl_layout_set_config() to avoid passing a pointer of
+// * XklConfigRec, which is not currently available in the
+// * gobject-introspection repository.
+// *
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// * Since: 0.0.2
+// */
+//gboolean
+//eek_xkl_layout_set_config_full (EekXklLayout *layout,
+// gchar *model,
+// gchar **layouts,
+// gchar **variants,
+// gchar **options)
+//{
+// XklConfigRec *config;
+// gboolean retval;
+//
+// config = xkl_config_rec_new ();
+// config->model = g_strdup (model);
+// config->layouts = g_strdupv (layouts);
+// config->variants = g_strdupv (variants);
+// config->options = g_strdupv (options);
+// retval = eek_xkl_layout_set_config (layout, config);
+// g_object_unref (config);
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_set_model:
+// * @layout: an #EekXklLayout
+// * @model: model name
+// *
+// * Set the model name of @layout configuration (in the Libxklavier terminology).
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_set_model (EekXklLayout *layout,
+// const gchar *model)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+// XklConfigRec *config;
+// gboolean retval;
+//
+// g_return_val_if_fail (priv, FALSE);
+// config = xkl_config_rec_new ();
+// /* config->model will be freed on g_object_unref (config) */
+// if (model)
+// config->model = g_strdup (model);
+// else
+// config->model = NULL;
+// retval = eek_xkl_layout_set_config (layout, config);
+// g_object_unref (config);
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_set_layouts:
+// * @layout: an #EekXklLayout
+// * @layouts: layout names
+// *
+// * Set the layout names of @layout (in the Libxklavier terminology).
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_set_layouts (EekXklLayout *layout,
+// gchar **layouts)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+// XklConfigRec *config;
+// gboolean retval;
+//
+// g_return_val_if_fail (priv, FALSE);
+// config = xkl_config_rec_new ();
+// /* config->layouts will be freed on g_object_unref (config) */
+// if (layouts)
+// config->layouts = g_strdupv (layouts);
+// else
+// config->layouts = layouts;
+// retval = eek_xkl_layout_set_config (layout, config);
+// g_object_unref (config);
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_set_variants:
+// * @layout: an #EekXklLayout
+// * @variants: variant names
+// *
+// * Set the variant names of @layout (in the Libxklavier terminology).
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_set_variants (EekXklLayout *layout,
+// gchar **variants)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+// XklConfigRec *config;
+// gboolean retval;
+//
+// g_return_val_if_fail (priv, FALSE);
+// config = xkl_config_rec_new ();
+// /* config->variants will be freed on g_object_unref (config) */
+// if (variants)
+// config->variants = g_strdupv (variants);
+// else
+// config->variants = NULL;
+// retval = eek_xkl_layout_set_config (layout, config);
+// g_object_unref (config);
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_set_options:
+// * @layout: an #EekXklLayout
+// * @options: option names
+// *
+// * Set the option names of @layout (in the Libxklavier terminology).
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_set_options (EekXklLayout *layout,
+// gchar **options)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+// XklConfigRec *config;
+// gboolean retval;
+//
+// g_return_val_if_fail (priv, FALSE);
+// config = xkl_config_rec_new ();
+// /* config->options will be freed on g_object_unref (config) */
+// if (options)
+// config->options = options;
+// else
+// config->options = NULL;
+// retval = eek_xkl_layout_set_config (layout, config);
+// g_object_unref (config);
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_enable_option:
+// * @layout: an #EekXklLayout
+// * @option: option name
+// *
+// * Set the option of @layout (in the Libxklavier terminology).
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_enable_option (EekXklLayout *layout,
+// const gchar *option)
+//{
+// gchar **options, **_options;
+// gint i, j;
+//
+// options = eek_xkl_layout_get_options (layout);
+// for (i = 0; options && options[i]; i++)
+// if (g_strcmp0 (options[i], option) == 0)
+// return TRUE;
+// _options = g_new0 (gchar *, (i + 2));
+// for (j = 0; j < i; j++)
+// _options[j] = g_strdup (options[j]);
+// _options[i] = g_strdup (option);
+// /* eek_xkl_layout_set_options() will free _options and its elements. */
+// return eek_xkl_layout_set_options (layout, _options);
+//}
+//
+///**
+// * eek_xkl_layout_disable_option:
+// * @layout: an #EekXklLayout
+// * @option: option name
+// *
+// * Unset the option of @layout (in the Libxklavier terminology).
+// * Returns: %TRUE if the current layout changed, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_disable_option (EekXklLayout *layout,
+// const gchar *option)
+//{
+// gchar **options, **_options;
+// gint i, j, k;
+//
+// options = eek_xkl_layout_get_options (layout);
+// if (!options)
+// return TRUE;
+// for (i = 0, k = 0; options[i]; i++)
+// if (g_strcmp0 (options[i], option) == 0)
+// k = i;
+// if (options[k] == NULL)
+// return TRUE;
+// _options = g_new0 (gchar *, i);
+// for (j = 0; j < k; j++)
+// _options[j] = g_strdup (options[j]);
+// for (j = k + 1; j < i; j++)
+// _options[j] = g_strdup (options[j]);
+// /* eek_xkl_layout_set_options() will free _options and its elements. */
+// return eek_xkl_layout_set_options (layout, _options);
+//}
+//
+///**
+// * eek_xkl_layout_get_model:
+// * @layout: an #EekXklLayout
+// *
+// * Get the model name of @layout configuration (in the Libxklavier terminology).
+// */
+//gchar *
+//eek_xkl_layout_get_model (EekXklLayout *layout)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+//
+// g_return_val_if_fail (priv, NULL);
+// return g_strdup (priv->config->model);
+//}
+//
+///**
+// * eek_xkl_layout_get_layouts:
+// * @layout: an #EekXklLayout
+// *
+// * Get the layout names of @layout configuration (in the Libxklavier
+// * terminology).
+// */
+//gchar **
+//eek_xkl_layout_get_layouts (EekXklLayout *layout)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+//
+// g_return_val_if_fail (priv, NULL);
+// return g_strdupv (priv->config->layouts);
+//}
+//
+///**
+// * eek_xkl_layout_get_variants:
+// * @layout: an #EekXklLayout
+// *
+// * Get the variant names of @layout configuration (in the Libxklavier
+// * terminology).
+// */
+//gchar **
+//eek_xkl_layout_get_variants (EekXklLayout *layout)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+//
+// g_return_val_if_fail (priv, NULL);
+// return g_strdupv (priv->config->variants);
+//}
+//
+///**
+// * eek_xkl_layout_get_options:
+// * @layout: an #EekXklLayout
+// *
+// * Get the option names of @layout configuration (in the Libxklavier
+// * terminology).
+// */
+//gchar **
+//eek_xkl_layout_get_options (EekXklLayout *layout)
+//{
+// EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
+//
+// g_return_val_if_fail (priv, NULL);
+// return g_strdupv (priv->config->options);
+//}
+//
+//static gboolean
+//set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
+//{
+// EekXklLayoutPrivate *priv = layout->priv;
+// XkbComponentNamesRec names;
+// gboolean retval = FALSE;
+//
+//#if DEBUG
+// if (config->layouts) {
+// gint i;
+//
+// fprintf (stderr, "layout = ");
+// for (i = 0; config->layouts[i] != NULL; i++)
+// fprintf (stderr, "\"%s\" ", config->layouts[i]);
+// fputc ('\n', stderr);
+// } else
+// fprintf (stderr, "layouts = NULL\n");
+// if (config->variants) {
+// gint i;
+//
+// fprintf (stderr, "variant = ");
+// for (i = 0; config->variants[i]; i++)
+// fprintf (stderr, "\"%s\" ", config->variants[i]);
+// fputc ('\n', stderr);
+// } else
+// fprintf (stderr, "variants = NULL\n");
+// if (config->options) {
+// gint i;
+//
+// fprintf (stderr, "option = ");
+// for (i = 0; config->options[i]; i++)
+// fprintf (stderr, "\"%s\" ", config->options[i]);
+// fputc ('\n', stderr);
+// } else
+// fprintf (stderr, "options = NULL\n");
+//#endif
+//
+// if (xkl_xkb_config_native_prepare (priv->engine, config, &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);
+// }
+// return retval;
+//}
+//
+///**
+// * eek_xkl_layout_get_option:
+// * @layout: an #EekXklLayout
+// * @option: option name
+// *
+// * Tell if the option of @layout (in the Libxklavier terminology) is set.
+// * Returns: %TRUE if the option is set, %FALSE otherwise
+// */
+//gboolean
+//eek_xkl_layout_get_option (EekXklLayout *layout,
+// const gchar *option)
+//{
+// gchar **options;
+// gint i;
+//
+// options = eek_xkl_layout_get_options (layout);
+// for (i = 0; options && options[i]; i++)
+// if (g_strcmp0 (options[i], option) == 0)
+// return TRUE;
+// return FALSE;
+//}
+//
+//static gboolean
+//initable_init (GInitable *initable,
+// GCancellable *cancellable,
+// GError **error)
+//{
+// EekXklLayout *layout = EEK_XKL_LAYOUT (initable);
+// Display *display;
+//
+// if (!parent_initable_iface->init (initable, cancellable, error))
+// return FALSE;
+//
+// layout->priv->config = xkl_config_rec_new ();
+//
+// g_object_get (G_OBJECT (initable),
+// "display", &display,
+// NULL);
+//
+// layout->priv->engine = xkl_engine_get_instance (display);
+//
+// if (!xkl_config_rec_get_from_server (layout->priv->config,
+// layout->priv->engine)) {
+// g_set_error (error,
+// EEK_ERROR,
+// EEK_ERROR_LAYOUT_ERROR,
+// "can't load libxklavier configuration");
+// return FALSE;
+// }
+//
+// set_xkb_component_names (layout, layout->priv->config);
+// return TRUE;
+//}
+//
+//static void
+//initable_iface_init (GInitableIface *initable_iface)
+//{
+// parent_initable_iface = g_type_interface_peek_parent (initable_iface);
+// initable_iface->init = initable_init;
+//}
+
diff --git a/eek/eek-wkl-layout.h b/eek/eek-wkl-layout.h
new file mode 100644
index 0000000000000000000000000000000000000000..18a4ba9c79f58d6536835b7a3b56c0c0be95aa5b
--- /dev/null
+++ b/eek/eek-wkl-layout.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2010-2011 Daiki Ueno
+ * Copyright (C) 2010-2011 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+//#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
+//#error "Only can be included directly."
+//#endif
+//
+//#ifndef EEK_XKL_LAYOUT_H
+//#define EEK_XKL_LAYOUT_H 1
+//
+//#include
+//#include "eek-xkb-layout.h"
+//
+//G_BEGIN_DECLS
+//
+//#define EEK_TYPE_XKL_LAYOUT (eek_xkl_layout_get_type())
+//#define EEK_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayout))
+//#define EEK_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass))
+//#define EEK_IS_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKL_LAYOUT))
+//#define EEK_IS_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKL_LAYOUT))
+//#define EEK_XKL_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass))
+//
+//typedef struct _EekXklLayout EekXklLayout;
+//typedef struct _EekXklLayoutClass EekXklLayoutClass;
+//typedef struct _EekXklLayoutPrivate EekXklLayoutPrivate;
+//
+//struct _EekXklLayout
+//{
+// /*< private >*/
+// EekXkbLayout parent;
+//
+// EekXklLayoutPrivate *priv;
+//};
+//
+//struct _EekXklLayoutClass
+//{
+// /*< private >*/
+// EekXkbLayoutClass parent_class;
+//
+// /*< private >*/
+// /* padding */
+// gpointer pdummy[24];
+//};
+//
+//GType eek_xkl_layout_get_type (void) G_GNUC_CONST;
+//
+//EekLayout *eek_xkl_layout_new (Display *display,
+// GError **error);
+//
+//gboolean eek_xkl_layout_set_config (EekXklLayout *layout,
+// XklConfigRec *config);
+//
+//gboolean eek_xkl_layout_set_config_full (EekXklLayout *layout,
+// gchar *model,
+// gchar **layouts,
+// gchar **variants,
+// gchar **options);
+//
+//gboolean eek_xkl_layout_set_model (EekXklLayout *layout,
+// const gchar *model);
+//gboolean eek_xkl_layout_set_layouts (EekXklLayout *layout,
+// gchar **layouts);
+//gboolean eek_xkl_layout_set_variants (EekXklLayout *layout,
+// gchar **variants);
+//gboolean eek_xkl_layout_set_options (EekXklLayout *layout,
+// gchar **options);
+//gboolean eek_xkl_layout_enable_option (EekXklLayout *layout,
+// const gchar *option);
+//gboolean eek_xkl_layout_disable_option (EekXklLayout *layout,
+// const gchar *option);
+//
+//gchar *eek_xkl_layout_get_model (EekXklLayout *layout);
+//gchar **eek_xkl_layout_get_layouts (EekXklLayout *layout);
+//gchar **eek_xkl_layout_get_variants (EekXklLayout *layout);
+//gchar **eek_xkl_layout_get_options (EekXklLayout *layout);
+//gboolean eek_xkl_layout_get_option (EekXklLayout *layout,
+// const gchar *option);
+//
+//G_END_DECLS
+//#endif /* #ifndef EEK_XKL_LAYOUT_H */
diff --git a/eek/eek-xkb.h b/eek/eek-wkl.h
similarity index 87%
rename from eek/eek-xkb.h
rename to eek/eek-wkl.h
index b810e784091894d4a40fda8618b1f1b88cac94e5..b22ff97a3564c2f41ea47a3bb92ceec16fd2fbaf 100644
--- a/eek/eek-xkb.h
+++ b/eek/eek-wkl.h
@@ -17,10 +17,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
-#ifndef EEK_XKB_H
-#define EEK_XKB_H 1
-
-#include "eek.h"
-#include "eek-xkb-layout.h"
-
-#endif /* EEK_XKB_H */
+//#ifndef EEK_XKL_H
+//#define EEK_XKL_H 1
+//
+//#include "eek.h"
+//#include "eek-xkl-layout.h"
+//
+//#endif /* EEK_XKL_H */
diff --git a/eek/eek-xkb-layout.c b/eek/eek-xkb-layout.c
deleted file mode 100644
index c0fffef04e7be20fee32bbc3a89812e08c9a16fe..0000000000000000000000000000000000000000
--- a/eek/eek-xkb-layout.c
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
- * Copyright (C) 2006 Sergey V. Udaltsov
- * Copyright (C) 2010-2011 Daiki Ueno
- * Copyright (C) 2010-2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-/**
- * SECTION:eek-xkb-layout
- * @short_description: Layout engine using XKB configuration
- *
- * The #EekXkbLayout inherits #EekLayout class and arranges keyboard
- * elements using XKB.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "eek-xkb-layout.h"
-#include "eek-keyboard.h"
-#include "eek-section.h"
-#include "eek-key.h"
-#include "eek-keysym.h"
-
-#define XKB_COMPONENT_MASK (XkbGBN_GeometryMask | \
- XkbGBN_KeyNamesMask | \
- XkbGBN_OtherNamesMask | \
- XkbGBN_SymbolsMask | \
- XkbGBN_IndicatorMapMask)
-
-static void initable_iface_init (GInitableIface *initable_iface);
-
-G_DEFINE_TYPE_WITH_CODE (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
- initable_iface_init));
-
-#define EEK_XKB_LAYOUT_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutPrivate))
-
-enum {
- PROP_0,
- PROP_DISPLAY,
- PROP_LAST
-};
-
-struct _EekXkbLayoutPrivate
-{
- /* Configuration names that should synch'ed to the symbolic names
- in priv->xkb->names. Since we use GLib's memory allocator,
- don't store any address returned from the X server here. */
- XkbComponentNamesRec names;
-
- Display *display;
-
- /* Actual XKB configuration of DISPLAY. */
- XkbDescRec *xkb;
-
- /* Hash table to cache orefs by shape address. */
- GHashTable *shape_oref_hash;
-
- gint scale_numerator;
- gint scale_denominator;
-};
-
-static guint find_keycode (EekXkbLayout *layout,
- gchar *key_name);
-
-static gboolean get_keyboard_from_server (EekXkbLayout *layout,
- GError **error);
-
-static gboolean get_names_from_server (EekXkbLayout *layout,
- GError **error);
-
-static void setup_scaling (EekXkbLayout *layout,
- gdouble width,
- gdouble height);
-
-G_INLINE_FUNC gint
-xkb_to_pixmap_coord (EekXkbLayout *layout,
- gint n)
-{
- EekXkbLayoutPrivate *priv = layout->priv;
- return n * priv->scale_numerator / priv->scale_denominator;
-}
-
-G_INLINE_FUNC gdouble
-xkb_to_pixmap_double (EekXkbLayout *layout,
- gdouble d)
-{
- EekXkbLayoutPrivate *priv = layout->priv;
- return d * priv->scale_numerator / priv->scale_denominator;
-}
-
-static void
-create_key (EekXkbLayout *layout,
- EekKeyboard *keyboard,
- EekSection *section,
- gint column,
- gint row,
- gdouble x,
- gdouble y,
- XkbKeyRec *xkbkey)
-{
- XkbGeometryRec *xkbgeometry;
- XkbBoundsRec *xkbbounds;
- XkbShapeRec *xkbshape;
- XkbOutlineRec *xkboutline;
- EekXkbLayoutPrivate *priv = layout->priv;
- EekKey *key;
- EekBounds bounds;
- EekSymbolMatrix *matrix = NULL;
- gchar name[XkbKeyNameLength + 1];
- KeyCode keycode;
- gint num_groups, num_levels;
- guint oref;
- gpointer v;
-
- xkbgeometry = priv->xkb->geom;
- xkbshape = &xkbgeometry->shapes[xkbkey->shape_ndx];
- if (g_hash_table_lookup_extended (priv->shape_oref_hash, xkbshape,
- NULL, &v)) {
- oref = GPOINTER_TO_UINT(v);
- } else {
- EekOutline *outline;
-
- xkboutline = xkbshape->primary == NULL ? &xkbshape->outlines[0] :
- xkbshape->primary;
-
- outline = g_slice_new (EekOutline);
- outline->corner_radius = xkb_to_pixmap_coord(layout,
- xkboutline->corner_radius);
-
- if (xkboutline->num_points <= 2) { /* rectangular */
- gdouble x1, y1, x2, y2;
-
- outline->num_points = 4;
- outline->points = g_slice_alloc0 (sizeof (EekPoint) *
- outline->num_points);
- if (xkboutline->num_points == 1) {
- x1 = xkb_to_pixmap_coord(layout, xkbshape->bounds.x1);
- y1 = xkb_to_pixmap_coord(layout, xkbshape->bounds.y1);
- x2 = xkb_to_pixmap_coord(layout, xkboutline->points[0].x);
- y2 = xkb_to_pixmap_coord(layout, xkboutline->points[0].y);
- } else {
- x1 = xkb_to_pixmap_coord(layout, xkboutline->points[0].x);
- y1 = xkb_to_pixmap_coord(layout, xkboutline->points[0].y);
- x2 = xkb_to_pixmap_coord(layout, xkboutline->points[1].x);
- y2 = xkb_to_pixmap_coord(layout, xkboutline->points[1].y);
- }
- outline->points[0].x = outline->points[3].x = x1;
- outline->points[0].y = outline->points[1].y = y1;
- outline->points[1].x = outline->points[2].x = x2;
- outline->points[2].y = outline->points[3].y = y2;
- } else { /* polygon */
- gint i;
-
- outline->num_points = xkboutline->num_points;
- outline->points = g_new0 (EekPoint, outline->num_points);
- for (i = 0; i < xkboutline->num_points; i++) {
- outline->points[i].x =
- xkb_to_pixmap_coord(layout, xkboutline->points[i].x);
- outline->points[i].y =
- xkb_to_pixmap_coord(layout, xkboutline->points[i].y);
- }
- }
- oref = eek_keyboard_add_outline (keyboard, outline);
- eek_outline_free (outline);
- g_hash_table_insert (priv->shape_oref_hash, xkbshape,
- GUINT_TO_POINTER(oref));
- }
-
- memset (name, 0, sizeof name);
- memcpy (name, xkbkey->name.name, sizeof name - 1);
-
- xkbbounds = &xkbgeometry->shapes[xkbkey->shape_ndx].bounds;
- bounds.x = xkb_to_pixmap_coord(layout, xkbbounds->x1 + x);
- bounds.y = xkb_to_pixmap_coord(layout, xkbbounds->y1 + y);
- bounds.width = xkb_to_pixmap_coord(layout, xkbbounds->x2 - xkbbounds->x1);
- bounds.height = xkb_to_pixmap_coord(layout, xkbbounds->y2 - xkbbounds->y1);
-
- keycode = find_keycode (layout, name);
- if (keycode == EEK_INVALID_KEYCODE) {
- num_groups = num_levels = 0;
- matrix = eek_symbol_matrix_new (0, 0);
- } else {
- KeySym keysym;
- gint i, j;
-
- num_groups = XkbKeyNumGroups (priv->xkb, keycode);
- num_levels = XkbKeyGroupsWidth (priv->xkb, keycode);
- matrix = eek_symbol_matrix_new (num_groups, num_levels);
- for (i = 0; i < num_groups; i++)
- for (j = 0; j < num_levels; j++) {
- EekModifierType modifier;
-
- keysym = XkbKeySymEntry (priv->xkb, keycode, j, i);
- modifier = XkbKeysymToModifiers (priv->display, keysym);
- matrix->data[i * num_levels + j] =
- EEK_SYMBOL(eek_keysym_new_with_modifier (keysym,
- modifier));
- }
- }
-
- key = eek_section_create_key (section, keycode, column, row);
- eek_element_set_name (EEK_ELEMENT(key), name);
- eek_element_set_bounds (EEK_ELEMENT(key), &bounds);
- eek_key_set_symbol_matrix (key, matrix);
- eek_symbol_matrix_free (matrix);
- eek_key_set_oref (key, oref);
-}
-
-static void
-create_section (EekXkbLayout *layout,
- EekKeyboard *keyboard,
- XkbSectionRec *xkbsection)
-{
- XkbGeometryRec *xkbgeometry;
- EekXkbLayoutPrivate *priv;
- EekSection *section;
- EekBounds bounds;
- gchar *name;
- gfloat left, top;
- gint i, j;
-
- bounds.x = xkb_to_pixmap_coord(layout, xkbsection->left);
- bounds.y = xkb_to_pixmap_coord(layout, xkbsection->top);
- bounds.width = xkb_to_pixmap_coord(layout, xkbsection->width);
- bounds.height = xkb_to_pixmap_coord(layout, xkbsection->height);
-
- priv = layout->priv;
- xkbgeometry = priv->xkb->geom;
- section = eek_keyboard_create_section (keyboard);
- name = XGetAtomName (priv->display, xkbsection->name);
- eek_element_set_name (EEK_ELEMENT(section), name);
- XFree (name);
- eek_element_set_bounds (EEK_ELEMENT(section), &bounds);
- eek_section_set_angle (section,
- /* angle is in tenth of degree */
- xkbsection->angle / 10);
-
- for (i = 0; i < xkbsection->num_rows; i++) {
- XkbRowRec *xkbrow;
-
- xkbrow = &xkbsection->rows[i];
- left = xkbrow->left;
- top = xkbrow->top;
- eek_section_add_row (section,
- xkbrow->num_keys,
- xkbrow->vertical ?
- EEK_ORIENTATION_VERTICAL :
- EEK_ORIENTATION_HORIZONTAL);
- for (j = 0; j < xkbrow->num_keys; j++) {
- XkbKeyRec *xkbkey;
- XkbBoundsRec *xkbbounds;
-
- xkbkey = &xkbrow->keys[j];
- if (xkbrow->vertical)
- top += xkbkey->gap;
- else
- left += xkbkey->gap;
- create_key (layout, keyboard, section, j, i, left, top, xkbkey);
- xkbbounds = &xkbgeometry->shapes[xkbkey->shape_ndx].bounds;
- if (xkbrow->vertical)
- top += xkbbounds->y2 - xkbbounds->y1;
- else
- left += xkbbounds->x2 - xkbbounds->x1;
- }
- }
-}
-
-static void
-create_keyboard (EekXkbLayout *layout, EekKeyboard *keyboard)
-{
- EekXkbLayoutPrivate *priv = layout->priv;
- XkbGeometryRec *xkbgeometry;
- EekBounds bounds;
- gint i;
-
- g_return_if_fail (priv->xkb);
- g_return_if_fail (priv->xkb->geom);
-
- xkbgeometry = priv->xkb->geom;
-
- eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
- setup_scaling (EEK_XKB_LAYOUT(layout), bounds.width, bounds.height);
-
- bounds.x = bounds.y = 0;
- bounds.width = xkb_to_pixmap_coord(layout, xkbgeometry->width_mm);
- bounds.height = xkb_to_pixmap_coord(layout, xkbgeometry->height_mm);
-
- for (i = 0; i < xkbgeometry->num_sections; i++) {
- XkbSectionRec *xkbsection;
-
- xkbsection = &xkbgeometry->sections[i];
- create_section (layout, keyboard, xkbsection);
- }
- eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
-}
-
-static EekKeyboard *
-eek_xkb_layout_real_create_keyboard (EekLayout *self,
- gdouble initial_width,
- gdouble initial_height)
-{
- EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
- EekBounds bounds;
- EekKeyboard *keyboard;
-
- keyboard = g_object_new (EEK_TYPE_KEYBOARD, "layout", self, NULL);
- bounds.x = bounds.y = 0.0;
- bounds.width = initial_width;
- bounds.height = initial_height;
- eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
-
- /* resolve modifiers dynamically assigned at run time */
- eek_keyboard_set_num_lock_mask (keyboard,
- XkbKeysymToModifiers (priv->display,
- XK_Num_Lock));
- eek_keyboard_set_alt_gr_mask (keyboard,
- XkbKeysymToModifiers (priv->display,
- XK_ISO_Level3_Shift));
-
- if (priv->shape_oref_hash)
- g_hash_table_destroy (priv->shape_oref_hash);
-
- priv->shape_oref_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
- create_keyboard (EEK_XKB_LAYOUT(self), keyboard);
- g_hash_table_destroy (priv->shape_oref_hash);
-
- return keyboard;
-}
-
-static void
-eek_xkb_layout_finalize (GObject *object)
-{
- EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (object);
-
- g_free (priv->names.keycodes);
- g_free (priv->names.geometry);
- g_free (priv->names.symbols);
- XkbFreeKeyboard (priv->xkb, 0, TRUE); /* free_all = TRUE */
- G_OBJECT_CLASS (eek_xkb_layout_parent_class)->finalize (object);
-}
-
-static void
-eek_xkb_layout_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
-
- switch (prop_id) {
- case PROP_DISPLAY:
- layout->priv->display = g_value_get_pointer (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-eek_xkb_layout_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
-
- switch (prop_id) {
- case PROP_DISPLAY:
- g_value_set_pointer (value, layout->priv->display);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
-{
- EekLayoutClass *layout_class = EEK_LAYOUT_CLASS (klass);
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate));
-
- layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard;
-
- gobject_class->finalize = eek_xkb_layout_finalize;
- gobject_class->set_property = eek_xkb_layout_set_property;
- gobject_class->get_property = eek_xkb_layout_get_property;
-
- pspec = g_param_spec_pointer ("display",
- "Display",
- "X Display",
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (gobject_class, PROP_DISPLAY, pspec);
-}
-
-static void
-eek_xkb_layout_init (EekXkbLayout *self)
-{
- self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
-}
-
-static gboolean
-get_names_from_server (EekXkbLayout *layout,
- GError **error)
-{
- EekXkbLayoutPrivate *priv = layout->priv;
- gchar *name;
-
- XkbGetNames (priv->display, XkbAllNamesMask, priv->xkb);
-
- if (priv->xkb->names->keycodes <= 0)
- g_warning ("XKB keycodes setting is not loaded properly");
- else {
- name = XGetAtomName (priv->display, priv->xkb->names->keycodes);
- if (!name)
- g_warning ("Can't get the name of keycodes");
- else if (!priv->names.keycodes ||
- g_strcmp0 (name, priv->names.keycodes)) {
- g_free (priv->names.keycodes);
- priv->names.keycodes = g_strdup (name);
- XFree (name);
- }
- }
-
- if (priv->xkb->names->geometry <= 0)
- g_warning ("XKB geometry setting is not loaded");
- else {
- name = XGetAtomName (priv->display, priv->xkb->names->geometry);
- if (!name)
- g_warning ("Can't get the name of geometry");
- else if (!priv->names.geometry ||
- g_strcmp0 (name, priv->names.geometry)) {
- g_free (priv->names.geometry);
- priv->names.geometry = g_strdup (name);
- XFree (name);
- }
- }
-
- if (priv->xkb->names->symbols <= 0)
- g_warning ("XKB symbols setting is not loaded");
- else {
- name = XGetAtomName (priv->display, priv->xkb->names->symbols);
- if (!name)
- g_warning ("Can't get the name of symbols");
- else if (!priv->names.symbols ||
- g_strcmp0 (name, priv->names.symbols)) {
- g_free (priv->names.symbols);
- priv->names.symbols = g_strdup (name);
- XFree (name);
- }
- }
-
- return TRUE;
-}
-
-/**
- * eek_xkb_layout_new:
- *
- * Create a new #EekXkbLayout.
- */
-EekLayout *
-eek_xkb_layout_new (Display *display,
- GError **error)
-{
- return (EekLayout *) g_initable_new (EEK_TYPE_XKB_LAYOUT,
- NULL,
- error,
- "display", display,
- NULL);
-}
-
-/**
- * eek_xkb_layout_set_names: (skip)
- * @layout: an #EekXkbLayout
- * @names: XKB component names
- * @error: a #GError
- *
- * Set the XKB component names to @layout.
- * Returns: %TRUE if the component names are successfully set, %FALSE otherwise
- */
-gboolean
-eek_xkb_layout_set_names (EekXkbLayout *layout,
- XkbComponentNamesRec *names,
- GError **error)
-{
- if (g_strcmp0 (names->keycodes, layout->priv->names.keycodes)) {
- g_free (layout->priv->names.keycodes);
- layout->priv->names.keycodes = g_strdup (names->keycodes);
- }
-
- if (g_strcmp0 (names->geometry, layout->priv->names.geometry)) {
- g_free (layout->priv->names.geometry);
- layout->priv->names.geometry = g_strdup (names->geometry);
- }
-
- if (g_strcmp0 (names->symbols, layout->priv->names.symbols)) {
- g_free (layout->priv->names.symbols);
- layout->priv->names.symbols = g_strdup (names->symbols);
- }
-
- return get_keyboard_from_server (layout, error);
-}
-
-static gboolean
-get_keyboard_from_server (EekXkbLayout *layout,
- GError **error)
-{
- EekXkbLayoutPrivate *priv = layout->priv;
-
- if (priv->xkb) {
- XkbFreeKeyboard (priv->xkb, 0, True);
- priv->xkb = NULL;
- }
-
- if (priv->names.keycodes && priv->names.geometry && priv->names.symbols) {
- priv->xkb = XkbGetKeyboardByName (priv->display,
- XkbUseCoreKbd,
- &priv->names,
- 0,
- XKB_COMPONENT_MASK,
- False);
- } else {
- priv->xkb = XkbGetKeyboard (priv->display,
- XKB_COMPONENT_MASK,
- XkbUseCoreKbd);
- if (!get_names_from_server (layout, error)) {
- XkbFreeKeyboard (priv->xkb, 0, True);
- 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);
- priv->names.keycodes = NULL;
- g_free (priv->names.geometry);
- priv->names.geometry = NULL;
- g_free (priv->names.symbols);
- priv->names.symbols = NULL;
- return FALSE;
- }
- return TRUE;
-}
-
-
-static guint
-find_keycode (EekXkbLayout *layout, gchar *key_name)
-{
-#define KEYSYM_NAME_MAX_LENGTH 4
- guint keycode;
- gint i, j;
- XkbKeyNamePtr pkey;
- XkbKeyAliasPtr palias;
- guint is_name_matched;
- gchar *src, *dst;
- EekXkbLayoutPrivate *priv = layout->priv;
-
- if (!priv->xkb)
- return EEK_INVALID_KEYCODE;
-
- pkey = priv->xkb->names->keys + priv->xkb->min_key_code;
- for (keycode = priv->xkb->min_key_code;
- keycode <= priv->xkb->max_key_code; keycode++) {
- is_name_matched = 1;
- src = key_name;
- dst = pkey->name;
- for (i = KEYSYM_NAME_MAX_LENGTH; --i >= 0;) {
- if ('\0' == *src)
- break;
- if (*src++ != *dst++) {
- is_name_matched = 0;
- break;
- }
- }
- if (is_name_matched)
- return keycode;
- pkey++;
- }
-
- palias = priv->xkb->names->key_aliases;
- for (j = priv->xkb->names->num_key_aliases; --j >= 0;) {
- is_name_matched = 1;
- src = key_name;
- dst = palias->alias;
- for (i = KEYSYM_NAME_MAX_LENGTH; --i >= 0;) {
- if ('\0' == *src)
- break;
- if (*src++ != *dst++) {
- is_name_matched = 0;
- break;
- }
- }
-
- if (is_name_matched) {
- keycode = find_keycode (layout, palias->real);
- return keycode;
- }
- palias++;
- }
-
- return EEK_INVALID_KEYCODE;
-}
-
-static void
-setup_scaling (EekXkbLayout *layout,
- gdouble width,
- gdouble height)
-{
- EekXkbLayoutPrivate *priv = layout->priv;
-
- g_return_if_fail (priv->xkb);
-
- g_return_if_fail (priv->xkb->geom->width_mm > 0);
- g_return_if_fail (priv->xkb->geom->height_mm > 0);
-
- if (width * priv->xkb->geom->height_mm <
- height * priv->xkb->geom->width_mm) {
- priv->scale_numerator = width;
- priv->scale_denominator = priv->xkb->geom->width_mm;
- } else {
- priv->scale_numerator = height;
- priv->scale_denominator = priv->xkb->geom->height_mm;
- }
-}
-
-static gboolean
-initable_init (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
-{
- EekXkbLayout *layout = EEK_XKB_LAYOUT (initable);
-
- if (!get_keyboard_from_server (layout, error))
- return FALSE;
-
- if (!get_names_from_server (layout, error))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-initable_iface_init (GInitableIface *initable_iface)
-{
- initable_iface->init = initable_init;
-}
diff --git a/eek/eek-xkb-layout.h b/eek/eek-xkb-layout.h
deleted file mode 100644
index 81bfc9ae060b5150bdf11fda97c57ecb39bbb17b..0000000000000000000000000000000000000000
--- a/eek/eek-xkb-layout.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Daiki Ueno
- * Copyright (C) 2010-2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
-#error "Only can be included directly."
-#endif
-
-#ifndef EEK_XKB_LAYOUT_H
-#define EEK_XKB_LAYOUT_H 1
-
-#include
-#include
-#include "eek-layout.h"
-
-G_BEGIN_DECLS
-
-#define EEK_TYPE_XKB_LAYOUT (eek_xkb_layout_get_type())
-#define EEK_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayout))
-#define EEK_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass))
-#define EEK_IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKB_LAYOUT))
-#define EEK_IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKB_LAYOUT))
-#define EEK_XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass))
-
-typedef struct _EekXkbLayout EekXkbLayout;
-typedef struct _EekXkbLayoutClass EekXkbLayoutClass;
-typedef struct _EekXkbLayoutPrivate EekXkbLayoutPrivate;
-
-struct _EekXkbLayout
-{
- /*< private >*/
- EekLayout parent;
-
- EekXkbLayoutPrivate *priv;
-};
-
-struct _EekXkbLayoutClass
-{
- /*< private >*/
- EekLayoutClass parent_class;
-
- /*< private >*/
- /* padding */
- gpointer pdummy[24];
-};
-
-GType eek_xkb_layout_get_type (void) G_GNUC_CONST;
-EekLayout *eek_xkb_layout_new (Display *display,
- GError **error);
-
-gboolean eek_xkb_layout_set_names (EekXkbLayout *layout,
- XkbComponentNamesRec *names,
- GError **error);
-
-G_END_DECLS
-#endif /* #ifndef EEK_XKB_LAYOUT_H */
diff --git a/eek/eek-xkl-layout.c b/eek/eek-xkl-layout.c
deleted file mode 100644
index a38873e5df9ba3da501d65888c1a68c7e3c6165a..0000000000000000000000000000000000000000
--- a/eek/eek-xkl-layout.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Daiki Ueno
- * Copyright (C) 2010-2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-/**
- * SECTION:eek-xkl-layout
- * @short_description: Layout engine using Libxklavier configuration
- *
- * The #EekXklLayout is a simple wrapper around #EekXkbLayout class
- * to use Libxklavier configuration.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include
-#include
-#include
-
-#include "eek-xkl-layout.h"
-
-#define noKBDRAW_DEBUG
-
-static GInitableIface *parent_initable_iface;
-
-static void initable_iface_init (GInitableIface *initable_iface);
-
-G_DEFINE_TYPE_WITH_CODE (EekXklLayout, eek_xkl_layout, EEK_TYPE_XKB_LAYOUT,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
- initable_iface_init));
-
-#define EEK_XKL_LAYOUT_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutPrivate))
-
-enum {
- PROP_0,
- PROP_MODEL,
- PROP_LAYOUTS,
- PROP_VARIANTS,
- PROP_OPTIONS,
- PROP_LAST
-};
-
-struct _EekXklLayoutPrivate
-{
- XklEngine *engine;
- XklConfigRec *config;
-};
-
-/* from gnome-keyboard-properties-xkbpv.c:
- * BAD STYLE: Taken from xklavier_private_xkb.h
- * Any ideas on architectural improvements are WELCOME
- */
-extern gboolean xkl_xkb_config_native_prepare (XklEngine * engine,
- const XklConfigRec * data,
- XkbComponentNamesPtr
- component_names);
-
-extern void xkl_xkb_config_native_cleanup (XklEngine * engine,
- XkbComponentNamesPtr
- component_names);
-
-static gboolean set_xkb_component_names (EekXklLayout *layout,
- XklConfigRec *config);
-
-static void
-eek_xkl_layout_dispose (GObject *object)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (object);
-
- if (priv->config) {
- g_object_unref (priv->config);
- priv->config = NULL;
- }
-
- G_OBJECT_CLASS (eek_xkl_layout_parent_class)->dispose (object);
-}
-
-static void
-eek_xkl_layout_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EekXklLayout *layout = EEK_XKL_LAYOUT(object);
-
- switch (prop_id) {
- case PROP_MODEL:
- eek_xkl_layout_set_model (layout, g_value_get_string (value));
- break;
- case PROP_LAYOUTS:
- eek_xkl_layout_set_layouts (layout, g_value_get_boxed (value));
- break;
- case PROP_VARIANTS:
- eek_xkl_layout_set_variants (layout, g_value_get_boxed (value));
- break;
- case PROP_OPTIONS:
- eek_xkl_layout_set_options (layout, g_value_get_boxed (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-eek_xkl_layout_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EekXklLayout *layout = EEK_XKL_LAYOUT(object);
-
- switch (prop_id) {
- case PROP_MODEL:
- g_value_set_string (value,
- eek_xkl_layout_get_model (layout));
- break;
- case PROP_LAYOUTS:
- g_value_set_boxed (value,
- eek_xkl_layout_get_layouts (layout));
- break;
- case PROP_VARIANTS:
- g_value_set_boxed (value,
- eek_xkl_layout_get_variants (layout));
- break;
- case PROP_OPTIONS:
- g_value_set_boxed (value,
- eek_xkl_layout_get_options (layout));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-eek_xkl_layout_class_init (EekXklLayoutClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate));
-
- gobject_class->dispose = eek_xkl_layout_dispose;
- gobject_class->set_property = eek_xkl_layout_set_property;
- gobject_class->get_property = eek_xkl_layout_get_property;
-
- /**
- * EekXklLayout:model:
- *
- * The libxklavier model name of #EekXklLayout.
- */
- pspec = g_param_spec_string ("model",
- "Model",
- "Libxklavier model",
- NULL,
- G_PARAM_READWRITE);
- g_object_class_install_property (gobject_class, PROP_MODEL, pspec);
-
- /**
- * EekXklLayout:layouts:
- *
- * The libxklavier layout names of #EekXklLayout.
- */
- pspec = g_param_spec_boxed ("layouts",
- "Layouts",
- "Libxklavier layouts",
- G_TYPE_STRV,
- G_PARAM_READWRITE);
- g_object_class_install_property (gobject_class, PROP_LAYOUTS, pspec);
-
- /**
- * EekXklLayout:variants:
- *
- * The libxklavier variant names of #EekXklLayout.
- */
- pspec = g_param_spec_boxed ("variants",
- "Variants",
- "Libxklavier variants",
- G_TYPE_STRV,
- G_PARAM_READWRITE);
- g_object_class_install_property (gobject_class, PROP_VARIANTS, pspec);
-
- /**
- * EekXklLayout:options:
- *
- * The libxklavier option names of #EekXklLayout.
- */
- pspec = g_param_spec_boxed ("options",
- "Options",
- "Libxklavier options",
- G_TYPE_STRV,
- G_PARAM_READWRITE);
- g_object_class_install_property (gobject_class, PROP_OPTIONS, pspec);
-}
-
-static void
-eek_xkl_layout_init (EekXklLayout *self)
-{
- self->priv = EEK_XKL_LAYOUT_GET_PRIVATE (self);
-}
-
-/**
- * eek_xkl_layout_new:
- *
- * Create a new #EekXklLayout.
- */
-EekLayout *
-eek_xkl_layout_new (Display *display, GError **error)
-{
- return (EekLayout *) g_initable_new (EEK_TYPE_XKL_LAYOUT,
- NULL,
- error,
- "display", display,
- NULL);
-}
-
-G_INLINE_FUNC void
-merge_xkl_config_rec (XklConfigRec *dst, XklConfigRec *src)
-{
- if (src->model) {
- g_free (dst->model);
- dst->model = g_strdup (src->model);
- }
- if (src->layouts) {
- g_strfreev (dst->layouts);
- dst->layouts = g_strdupv (src->layouts);
- }
- if (src->variants) {
- g_strfreev (dst->variants);
- dst->variants = g_strdupv (src->variants);
- }
- if (src->options) {
- g_strfreev (dst->options);
- dst->options = g_strdupv (src->options);
- }
-}
-
-/**
- * eek_xkl_layout_set_config: (skip)
- * @layout: an #EekXklLayout
- * @config: Libxklavier configuration
- *
- * Reconfigure @layout with @config.
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_set_config (EekXklLayout *layout,
- XklConfigRec *config)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
- XklConfigRec *c;
- gboolean retval;
-
- g_return_val_if_fail (priv, FALSE);
- c = xkl_config_rec_new ();
- merge_xkl_config_rec (c, priv->config);
- merge_xkl_config_rec (c, config);
- retval = set_xkb_component_names (layout, c);
- g_object_unref (c);
- merge_xkl_config_rec (priv->config, config);
- return retval;
-}
-
-/**
- * eek_xkl_layout_set_config_full:
- * @layout: an #EekXklLayout
- * @model: Libxklavier model name
- * @layouts: Libxklavier layouts
- * @variants: Libxklavier variants
- * @options: Libxklavier options
- *
- * Reconfigure @layout with @model, @layouts, @variants, and @options.
- * This function is merely a wrapper around
- * eek_xkl_layout_set_config() to avoid passing a pointer of
- * XklConfigRec, which is not currently available in the
- * gobject-introspection repository.
- *
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- * Since: 0.0.2
- */
-gboolean
-eek_xkl_layout_set_config_full (EekXklLayout *layout,
- gchar *model,
- gchar **layouts,
- gchar **variants,
- gchar **options)
-{
- XklConfigRec *config;
- gboolean retval;
-
- config = xkl_config_rec_new ();
- config->model = g_strdup (model);
- config->layouts = g_strdupv (layouts);
- config->variants = g_strdupv (variants);
- config->options = g_strdupv (options);
- retval = eek_xkl_layout_set_config (layout, config);
- g_object_unref (config);
- return retval;
-}
-
-/**
- * eek_xkl_layout_set_model:
- * @layout: an #EekXklLayout
- * @model: model name
- *
- * Set the model name of @layout configuration (in the Libxklavier terminology).
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_set_model (EekXklLayout *layout,
- const gchar *model)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
- XklConfigRec *config;
- gboolean retval;
-
- g_return_val_if_fail (priv, FALSE);
- config = xkl_config_rec_new ();
- /* config->model will be freed on g_object_unref (config) */
- if (model)
- config->model = g_strdup (model);
- else
- config->model = NULL;
- retval = eek_xkl_layout_set_config (layout, config);
- g_object_unref (config);
- return retval;
-}
-
-/**
- * eek_xkl_layout_set_layouts:
- * @layout: an #EekXklLayout
- * @layouts: layout names
- *
- * Set the layout names of @layout (in the Libxklavier terminology).
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_set_layouts (EekXklLayout *layout,
- gchar **layouts)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
- XklConfigRec *config;
- gboolean retval;
-
- g_return_val_if_fail (priv, FALSE);
- config = xkl_config_rec_new ();
- /* config->layouts will be freed on g_object_unref (config) */
- if (layouts)
- config->layouts = g_strdupv (layouts);
- else
- config->layouts = layouts;
- retval = eek_xkl_layout_set_config (layout, config);
- g_object_unref (config);
- return retval;
-}
-
-/**
- * eek_xkl_layout_set_variants:
- * @layout: an #EekXklLayout
- * @variants: variant names
- *
- * Set the variant names of @layout (in the Libxklavier terminology).
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_set_variants (EekXklLayout *layout,
- gchar **variants)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
- XklConfigRec *config;
- gboolean retval;
-
- g_return_val_if_fail (priv, FALSE);
- config = xkl_config_rec_new ();
- /* config->variants will be freed on g_object_unref (config) */
- if (variants)
- config->variants = g_strdupv (variants);
- else
- config->variants = NULL;
- retval = eek_xkl_layout_set_config (layout, config);
- g_object_unref (config);
- return retval;
-}
-
-/**
- * eek_xkl_layout_set_options:
- * @layout: an #EekXklLayout
- * @options: option names
- *
- * Set the option names of @layout (in the Libxklavier terminology).
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_set_options (EekXklLayout *layout,
- gchar **options)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
- XklConfigRec *config;
- gboolean retval;
-
- g_return_val_if_fail (priv, FALSE);
- config = xkl_config_rec_new ();
- /* config->options will be freed on g_object_unref (config) */
- if (options)
- config->options = options;
- else
- config->options = NULL;
- retval = eek_xkl_layout_set_config (layout, config);
- g_object_unref (config);
- return retval;
-}
-
-/**
- * eek_xkl_layout_enable_option:
- * @layout: an #EekXklLayout
- * @option: option name
- *
- * Set the option of @layout (in the Libxklavier terminology).
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_enable_option (EekXklLayout *layout,
- const gchar *option)
-{
- gchar **options, **_options;
- gint i, j;
-
- options = eek_xkl_layout_get_options (layout);
- for (i = 0; options && options[i]; i++)
- if (g_strcmp0 (options[i], option) == 0)
- return TRUE;
- _options = g_new0 (gchar *, (i + 2));
- for (j = 0; j < i; j++)
- _options[j] = g_strdup (options[j]);
- _options[i] = g_strdup (option);
- /* eek_xkl_layout_set_options() will free _options and its elements. */
- return eek_xkl_layout_set_options (layout, _options);
-}
-
-/**
- * eek_xkl_layout_disable_option:
- * @layout: an #EekXklLayout
- * @option: option name
- *
- * Unset the option of @layout (in the Libxklavier terminology).
- * Returns: %TRUE if the current layout changed, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_disable_option (EekXklLayout *layout,
- const gchar *option)
-{
- gchar **options, **_options;
- gint i, j, k;
-
- options = eek_xkl_layout_get_options (layout);
- if (!options)
- return TRUE;
- for (i = 0, k = 0; options[i]; i++)
- if (g_strcmp0 (options[i], option) == 0)
- k = i;
- if (options[k] == NULL)
- return TRUE;
- _options = g_new0 (gchar *, i);
- for (j = 0; j < k; j++)
- _options[j] = g_strdup (options[j]);
- for (j = k + 1; j < i; j++)
- _options[j] = g_strdup (options[j]);
- /* eek_xkl_layout_set_options() will free _options and its elements. */
- return eek_xkl_layout_set_options (layout, _options);
-}
-
-/**
- * eek_xkl_layout_get_model:
- * @layout: an #EekXklLayout
- *
- * Get the model name of @layout configuration (in the Libxklavier terminology).
- */
-gchar *
-eek_xkl_layout_get_model (EekXklLayout *layout)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
-
- g_return_val_if_fail (priv, NULL);
- return g_strdup (priv->config->model);
-}
-
-/**
- * eek_xkl_layout_get_layouts:
- * @layout: an #EekXklLayout
- *
- * Get the layout names of @layout configuration (in the Libxklavier
- * terminology).
- */
-gchar **
-eek_xkl_layout_get_layouts (EekXklLayout *layout)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
-
- g_return_val_if_fail (priv, NULL);
- return g_strdupv (priv->config->layouts);
-}
-
-/**
- * eek_xkl_layout_get_variants:
- * @layout: an #EekXklLayout
- *
- * Get the variant names of @layout configuration (in the Libxklavier
- * terminology).
- */
-gchar **
-eek_xkl_layout_get_variants (EekXklLayout *layout)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
-
- g_return_val_if_fail (priv, NULL);
- return g_strdupv (priv->config->variants);
-}
-
-/**
- * eek_xkl_layout_get_options:
- * @layout: an #EekXklLayout
- *
- * Get the option names of @layout configuration (in the Libxklavier
- * terminology).
- */
-gchar **
-eek_xkl_layout_get_options (EekXklLayout *layout)
-{
- EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
-
- g_return_val_if_fail (priv, NULL);
- return g_strdupv (priv->config->options);
-}
-
-static gboolean
-set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
-{
- EekXklLayoutPrivate *priv = layout->priv;
- XkbComponentNamesRec names;
- gboolean retval = FALSE;
-
-#if DEBUG
- if (config->layouts) {
- gint i;
-
- fprintf (stderr, "layout = ");
- for (i = 0; config->layouts[i] != NULL; i++)
- fprintf (stderr, "\"%s\" ", config->layouts[i]);
- fputc ('\n', stderr);
- } else
- fprintf (stderr, "layouts = NULL\n");
- if (config->variants) {
- gint i;
-
- fprintf (stderr, "variant = ");
- for (i = 0; config->variants[i]; i++)
- fprintf (stderr, "\"%s\" ", config->variants[i]);
- fputc ('\n', stderr);
- } else
- fprintf (stderr, "variants = NULL\n");
- if (config->options) {
- gint i;
-
- fprintf (stderr, "option = ");
- for (i = 0; config->options[i]; i++)
- fprintf (stderr, "\"%s\" ", config->options[i]);
- fputc ('\n', stderr);
- } else
- fprintf (stderr, "options = NULL\n");
-#endif
-
- if (xkl_xkb_config_native_prepare (priv->engine, config, &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);
- }
- return retval;
-}
-
-/**
- * eek_xkl_layout_get_option:
- * @layout: an #EekXklLayout
- * @option: option name
- *
- * Tell if the option of @layout (in the Libxklavier terminology) is set.
- * Returns: %TRUE if the option is set, %FALSE otherwise
- */
-gboolean
-eek_xkl_layout_get_option (EekXklLayout *layout,
- const gchar *option)
-{
- gchar **options;
- gint i;
-
- options = eek_xkl_layout_get_options (layout);
- for (i = 0; options && options[i]; i++)
- if (g_strcmp0 (options[i], option) == 0)
- return TRUE;
- return FALSE;
-}
-
-static gboolean
-initable_init (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
-{
- EekXklLayout *layout = EEK_XKL_LAYOUT (initable);
- Display *display;
-
- if (!parent_initable_iface->init (initable, cancellable, error))
- return FALSE;
-
- layout->priv->config = xkl_config_rec_new ();
-
- g_object_get (G_OBJECT (initable),
- "display", &display,
- NULL);
-
- layout->priv->engine = xkl_engine_get_instance (display);
-
- if (!xkl_config_rec_get_from_server (layout->priv->config,
- layout->priv->engine)) {
- g_set_error (error,
- EEK_ERROR,
- EEK_ERROR_LAYOUT_ERROR,
- "can't load libxklavier configuration");
- return FALSE;
- }
-
- set_xkb_component_names (layout, layout->priv->config);
- return TRUE;
-}
-
-static void
-initable_iface_init (GInitableIface *initable_iface)
-{
- parent_initable_iface = g_type_interface_peek_parent (initable_iface);
- initable_iface->init = initable_init;
-}
-
diff --git a/eek/eek-xkl-layout.h b/eek/eek-xkl-layout.h
deleted file mode 100644
index 966b29180c28394045297609dd7bcb305ddb5ec6..0000000000000000000000000000000000000000
--- a/eek/eek-xkl-layout.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Daiki Ueno
- * Copyright (C) 2010-2011 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
-#error "Only can be included directly."
-#endif
-
-#ifndef EEK_XKL_LAYOUT_H
-#define EEK_XKL_LAYOUT_H 1
-
-#include
-#include "eek-xkb-layout.h"
-
-G_BEGIN_DECLS
-
-#define EEK_TYPE_XKL_LAYOUT (eek_xkl_layout_get_type())
-#define EEK_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayout))
-#define EEK_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass))
-#define EEK_IS_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKL_LAYOUT))
-#define EEK_IS_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKL_LAYOUT))
-#define EEK_XKL_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass))
-
-typedef struct _EekXklLayout EekXklLayout;
-typedef struct _EekXklLayoutClass EekXklLayoutClass;
-typedef struct _EekXklLayoutPrivate EekXklLayoutPrivate;
-
-struct _EekXklLayout
-{
- /*< private >*/
- EekXkbLayout parent;
-
- EekXklLayoutPrivate *priv;
-};
-
-struct _EekXklLayoutClass
-{
- /*< private >*/
- EekXkbLayoutClass parent_class;
-
- /*< private >*/
- /* padding */
- gpointer pdummy[24];
-};
-
-GType eek_xkl_layout_get_type (void) G_GNUC_CONST;
-
-EekLayout *eek_xkl_layout_new (Display *display,
- GError **error);
-
-gboolean eek_xkl_layout_set_config (EekXklLayout *layout,
- XklConfigRec *config);
-
-gboolean eek_xkl_layout_set_config_full (EekXklLayout *layout,
- gchar *model,
- gchar **layouts,
- gchar **variants,
- gchar **options);
-
-gboolean eek_xkl_layout_set_model (EekXklLayout *layout,
- const gchar *model);
-gboolean eek_xkl_layout_set_layouts (EekXklLayout *layout,
- gchar **layouts);
-gboolean eek_xkl_layout_set_variants (EekXklLayout *layout,
- gchar **variants);
-gboolean eek_xkl_layout_set_options (EekXklLayout *layout,
- gchar **options);
-gboolean eek_xkl_layout_enable_option (EekXklLayout *layout,
- const gchar *option);
-gboolean eek_xkl_layout_disable_option (EekXklLayout *layout,
- const gchar *option);
-
-gchar *eek_xkl_layout_get_model (EekXklLayout *layout);
-gchar **eek_xkl_layout_get_layouts (EekXklLayout *layout);
-gchar **eek_xkl_layout_get_variants (EekXklLayout *layout);
-gchar **eek_xkl_layout_get_options (EekXklLayout *layout);
-gboolean eek_xkl_layout_get_option (EekXklLayout *layout,
- const gchar *option);
-
-G_END_DECLS
-#endif /* #ifndef EEK_XKL_LAYOUT_H */
diff --git a/eek/eek-xml-layout.c b/eek/eek-xml-layout.c
index aa2efce2bd7c7f9d085d33c8738263bcb5221d50..5e7903178247e56100453887dce44c28a3ded537 100644
--- a/eek/eek-xml-layout.c
+++ b/eek/eek-xml-layout.c
@@ -59,7 +59,7 @@ struct _EekXmlLayoutPrivate
G_DEFINE_BOXED_TYPE(EekXmlKeyboardDesc, eek_xml_keyboard_desc, eek_xml_keyboard_desc_copy, eek_xml_keyboard_desc_free);
-#define BUFSIZE 8192
+#define BUFSIZE 8192
static GList *parse_keyboards (const gchar *path,
GError **error);
@@ -1021,10 +1021,10 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass)
gobject_class->finalize = eek_xml_layout_finalize;
pspec = g_param_spec_string ("id",
- "ID",
- "ID",
- NULL,
- G_PARAM_CONSTRUCT_ONLY |
+ "ID",
+ "ID",
+ NULL,
+ G_PARAM_CONSTRUCT_ONLY |
G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_ID, pspec);
}
diff --git a/eekboard/Makefile.am b/eekboard/Makefile.am
index 0e02690ee74adc2479355253ed9c2222610cda59..2990c45de1c907f712837d91cc86e1e7eeab7bd4 100644
--- a/eekboard/Makefile.am
+++ b/eekboard/Makefile.am
@@ -63,7 +63,6 @@ libeekboard_la_CFLAGS = \
$(NULL)
libeekboard_la_LIBADD = \
$(top_builddir)/eek/libeek.la \
- $(top_builddir)/eek/libeek-xkl.la \
$(GIO2_LIBS) \
$(LIBXKLAVIER_LIBS) \
$(NULL)
diff --git a/eekboard/eekboard-context-service.c b/eekboard/eekboard-context-service.c
index 2e2c46defd6b0921298eb01edf581b07d748e527..39d2f351c91c7816642d084a2639673ce7fdd364 100644
--- a/eekboard/eekboard-context-service.c
+++ b/eekboard/eekboard-context-service.c
@@ -31,7 +31,7 @@
#include "eekboard/eekboard-context-service.h"
#include "eekboard/eekboard-xklutil.h"
-#include "eek/eek-xkl.h"
+//#include "eek/eek-xkl.h" //x11_stub
#define CSW 640
#define CSH 480
@@ -173,6 +173,8 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self,
display = XOpenDisplay (NULL);
error = NULL;
+ /*
+ //x11_stub_start
layout = eek_xkl_layout_new (display, &error);
if (layout == NULL) {
g_warning ("can't create keyboard %s: %s",
@@ -185,6 +187,8 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self,
g_object_unref (layout);
return NULL;
}
+ //x11_stub_eend
+ */
} else {
error = NULL;
layout = eek_xml_layout_new (keyboard_type, &error);
diff --git a/src/Makefile.am b/src/Makefile.am
index 598e7e946b89665260972fe6de8612a8fa8e38ba..e661e6cbab23e461a53c72caefdc3e2370c5a7f9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,7 +29,6 @@ eekboard_CFLAGS = \
-I$(top_srcdir) \
$(GIO2_CFLAGS) \
$(GTK_CFLAGS) \
- $(XKB_CFLAGS) \
$(LIBXKLAVIER_CFLAGS) \
-DLIBEXECDIR=\"$(libexecdir)\" \
$(NULL)
@@ -37,10 +36,8 @@ eekboard_CFLAGS = \
eekboard_LDADD = \
$(top_builddir)/eekboard/libeekboard.la \
$(top_builddir)/eek/libeek.la \
- $(top_builddir)/eek/libeek-xkl.la \
$(GIO2_LIBS) \
$(GTK_LIBS) \
- $(XKB_LIBS) \
$(LIBXKLAVIER_LIBS) \
$(NULL)
@@ -75,7 +72,6 @@ eekboard_server_LDADD = \
$(top_builddir)/eekboard/libeekboard.la \
$(top_builddir)/eek/libeek.la \
$(top_builddir)/eek/libeek-gtk.la \
- $(top_builddir)/eek/libeek-xkl.la \
$(GIO2_LIBS) \
$(GTK_LIBS) \
$(LIBXKLAVIER_LIBS) \
@@ -101,7 +97,6 @@ eekboard_setup_CFLAGS = \
-I$(top_srcdir) \
$(GIO2_CFLAGS) \
$(GTK_CFLAGS) \
- $(XKB_CFLAGS) \
$(LIBXKLAVIER_CFLAGS) \
-DPKGDATADIR=\"$(pkgdatadir)\" \
$(NULL)
diff --git a/src/client.c b/src/client.c
index 34c71c6ac4258217486efb844604dcff1a39beb7..cf569298a203e8db5c656c3727e7ede4f7827619 100644
--- a/src/client.c
+++ b/src/client.c
@@ -29,12 +29,12 @@
#include
#ifdef HAVE_XTEST
-#include
-#include
+//#include
+//#include
#endif /* HAVE_XTEST */
#include "eek/eek.h"
-#include "eek/eek-xkl.h"
+//#include "eek/eek-xkl.h"
#include "eekboard/eekboard-client.h"
#include "eekboard/eekboard-xklutil.h"
#include "client.h"
@@ -93,7 +93,7 @@ struct _Client {
#ifdef HAVE_XTEST
guint modifier_keycodes[8];
- XkbDescRec *xkb;
+// XkbDescRec *xkb; //x11_stub
#endif /* HAVE_XTEST */
GSettings *settings;
@@ -858,6 +858,8 @@ get_replaced_keycode (Client *client)
{
guint keycode;
+ /*
+ //x11_stub_start
for (keycode = client->xkb->max_key_code;
keycode >= client->xkb->min_key_code;
--keycode) {
@@ -867,6 +869,8 @@ get_replaced_keycode (Client *client)
return keycode;
}
}
+ //x11_stub_eend
+ */
return 0;
}
@@ -889,6 +893,8 @@ replace_keycode (Client *client,
int keysyms_per_keycode;
KeySym *syms;
+ /*
+ //x11_stub_start
g_return_val_if_fail (client->xkb->min_key_code <= keycode &&
keycode <= client->xkb->max_key_code,
FALSE);
@@ -900,8 +906,11 @@ replace_keycode (Client *client,
XChangeKeyboardMapping (xdisplay, keycode, 1, syms, 1);
XSync (xdisplay, False);
XFree (syms);
- *keysym = old_keysym;
+ //x11_stub_eend
+ */
+ *keysym = old_keysym;
+
return TRUE;
}
@@ -1117,6 +1126,9 @@ client_enable_xtest (Client *client)
g_assert (display);
+ /*
+ //x11_stub_start
+
if (!XTestQueryExtension (xdisplay,
&event_base, &error_base,
&major_version, &minor_version)) {
@@ -1141,15 +1153,20 @@ client_enable_xtest (Client *client)
g_signal_connect (client->context, "key-activated",
G_CALLBACK(on_key_activated), client);
+ //x11_stub_eend
+ */
+
return TRUE;
}
void
client_disable_xtest (Client *client)
{
- if (client->xkb) {
- XkbFreeKeyboard (client->xkb, 0, TRUE); /* free_all = TRUE */
- client->xkb = NULL;
- }
+ //x11_stub_start
+ //if (client->xkb) {
+ // XkbFreeKeyboard (client->xkb, 0, TRUE); /* free_all = TRUE */
+ // client->xkb = NULL;
+ //}
+ //x11_stub_eend
}
#endif /* HAVE_XTEST */
diff --git a/tests/Makefile.am b/tests/Makefile.am
index bc07b387af2863983a78aa0d96b4d3a3e290f63a..ae44ae4a90cf3ba146fce6423dfa38d96e3c407d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -27,6 +27,6 @@ eek_simple_test_SOURCES = eek-simple-test.c
eek_simple_test_LDADD = $(top_builddir)/eek/libeek.la $(GIO2_LIBS)
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 $(GIO2_LIBS) $(GTK_LIBS)
-include $(top_srcdir)/git.mk