diff --git a/bindings/vala/Makefile.am b/bindings/vala/Makefile.am index 1bbf564d..4e49a1fd 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 be57569d..87595ed5 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/docs/reference/eek/Makefile.am b/docs/reference/eek/Makefile.am index e287c2a0..daa4bd6d 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/eek/Makefile.am b/eek/Makefile.am index 057804ac..d4ab7a30 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 1215e9e6..c56e4889 100644 --- a/eek/eek-keyboard-drawing.c +++ b/eek/eek-keyboard-drawing.c @@ -57,7 +57,7 @@ normal_form (gdouble ax, gdouble ay, } static void -inverse (gdouble a, gdouble b, gdouble c, gdouble d, +inverse (gdouble a, gdouble b, gdouble c, gdouble d, gdouble * e, gdouble * f, gdouble * g, gdouble * h) { gdouble det; @@ -71,7 +71,7 @@ inverse (gdouble a, gdouble b, gdouble c, gdouble d, } static void -multiply (gdouble a, gdouble b, gdouble c, gdouble d, +multiply (gdouble a, gdouble b, gdouble c, gdouble d, gdouble e, gdouble f, gdouble * x, gdouble * y) { *x = a * e + b * f; diff --git a/eek/eek-keysym.h b/eek/eek-keysym.h index a30092e4..ae1d72e4 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-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 2994aedb..e625d060 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 00000000..cd0e87d5 --- /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 00000000..d156cbc0 --- /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 9b317210..89a24fb6 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 421b6336..6bcee3fb 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 00000000..68fae517 --- /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 00000000..18a4ba9c --- /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 b810e784..b22ff97a 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 5a89431a..00000000 --- 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 b3996436..00000000 --- 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 997b7bdd..00000000 --- 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 ba4068a2..00000000 --- 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 818a2ef0..5e790317 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 0e02690e..2990c45d 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 2e2c46de..39d2f351 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 598e7e94..e661e6cb 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 ca53c63c..cf569298 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 bc07b387..ae44ae4a 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