Compare commits

..

4 Commits

Author SHA1 Message Date
87a0540627 0.90.5 released. 2011-03-11 16:17:46 +09:00
878a1c73fd Install eekboard.desktop. 2011-03-11 16:00:56 +09:00
b465cbc5de Add --list option to eekboard-inscript. 2011-03-11 15:52:15 +09:00
2622e4eb59 Add --keyboard option to eekboard. 2011-03-11 15:14:20 +09:00
35 changed files with 328 additions and 598 deletions

11
.gitignore vendored
View File

@ -33,7 +33,6 @@ gtk-doc.make
eek/eek-special-keysym-entries.h
eek/eek-unicode-keysym-entries.h
eek/eek-xkeysym-keysym-entries.h
eek/eek-enumtypes.[ch]
eek/eek-marshalers.[ch]
eek/*.pc
eek/*.gir
@ -44,13 +43,12 @@ eekboard/*.typelib
tests/eek-simple-test
tests/eek-xkb-test
tests/eek-xml-test
src/eekboard
src/eekboard-server
src/eekboard-client
src/eekboard-system-client
src/eekboard-xml
src/eekboard-server.service
docs/reference/eek/*.stamp
docs/reference/eek/*.txt
docs/reference/eek/eek.types
!/docs/reference/eek/eek-sections.txt
docs/reference/eek/xml
docs/reference/eek/html
@ -73,9 +71,6 @@ po/*.gmo
po/Makefile.in.in
po/POTFILES
po/stamp-it
po/.intltool-merge-cache
bindings/vala/*.vapi
py-compile
data/*.desktop
examples/eekboard-inscript/eekboard-inscript
examples/simple-client/simple-client

25
README
View File

@ -7,8 +7,8 @@ tools to implement desktop virtual keyboards.
** Dependencies
REQUIRED: GLib2, GTK, PangoCairo, libxklavier, libcroco
OPTIONAL: fakekey, at-spi2-core, Clutter, Clutter-Gtk, Python, Vala, gobject-introspection
REQUIRED: GLib2, GTK, GConf2, PangoCairo, libxklavier, libcroco
OPTIONAL: fakekey, CSPI, Clutter, Clutter-Gtk, Vala, gobject-introspection
** Build from git repo
@ -24,7 +24,7 @@ OPTIONAL: fakekey, at-spi2-core, Clutter, Clutter-Gtk, Python, Vala, gobject-int
$ make
$ sudo make install
* Using command-line tools
* How to test
eekboard currently includes 3 tools to implement your own virtual
keyboard.
@ -47,15 +47,10 @@ be started with:
$ eekboard
By default it renders current system keyboard layout. To read custom
keyboard layout, specify --keyboard option like:
$ eekboard --keyboard /usr/share/eekboard/keyboards/us-qwerty.xml
** eekboard-xml
eekboard-xml is a tool to manipulate XML keyboard description read by
eekboard if --keyboard option is specified.
eekboard-xml is a tool to manipulate XML keyboard description used by
eekboard-client tool and in the eekboard library.
To dump the current system keyboard layout into an XML file:
@ -65,14 +60,6 @@ You can display the dumped layout with:
$ eekboard-xml --load keyboard.xml
* Using library
* Documentation
eekboard currently includes two libraries. One is to access
eekboard-server via D-Bus and another is to manually render on-screen
keyboards.
For the former, see
file:docs/reference/eekboard/html/index.html
For the latter, see
See file:docs/reference/eek/html/index.html

View File

@ -20,7 +20,7 @@ AC_PREREQ(2.63)
dnl AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_MACRO_DIR([m4])
AC_INIT([eekboard], [0.90.7], [ueno@unixuser.org])
AC_INIT([eekboard], [0.90.5], [ueno@unixuser.org])
dnl Init automake
AM_INIT_AUTOMAKE
@ -85,7 +85,7 @@ AM_CONDITIONAL([HAVE_GTK_2],[test "$with_gtk" = "2.0"])
AM_CONDITIONAL([HAVE_GTK_3],[test "$with_gtk" = "3.0"])
AM_PATH_GLIB_2_0
PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.26.0], ,
PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.25.4], ,
[AC_MSG_ERROR([GLib2 not found])])
PKG_CHECK_MODULES([GIO2], [gio-2.0], ,
[AC_MSG_ERROR([Gio2 not found])])
@ -95,6 +95,8 @@ PKG_CHECK_MODULES([GTK], [
gtk+-$GTK_API_VERSION >= $GTK_REQUIRED
gdk-$GTK_API_VERSION >= $GTK_REQUIRED], ,
[AC_MSG_ERROR([GTK not found])])
PKG_CHECK_MODULES([GCONF2], [gconf-2.0], ,
[AC_MSG_ERROR([GConf not found])])
PKG_CHECK_MODULES([XKB], [x11], ,
[AC_MSG_ERROR([XKB support not found])])
PKG_CHECK_MODULES([LIBXKLAVIER], [libxklavier x11], ,
@ -117,20 +119,20 @@ fi
AM_CONDITIONAL(ENABLE_FAKEKEY, [test x$enable_fakekey = xyes])
AC_MSG_RESULT($enable_fakekey)
dnl use AT-SPI 2 to capture focus/keystroke events
AC_MSG_CHECKING([whether you enable AT-SPI 2 event handling])
AC_ARG_ENABLE(atspi,
AS_HELP_STRING([--enable-atspi=no/yes],
[Enable AT-SPI 2 event handling default=no]),,
enable_atspi=no)
dnl use AT-SPI to capture focus/keystroke events
AC_MSG_CHECKING([whether you enable AT-SPI event handling])
AC_ARG_ENABLE(cspi,
AS_HELP_STRING([--enable-cspi=no/yes],
[Enable AT-SPI event handling default=yes]),,
enable_cspi=yes)
if test x$enable_atspi = xyes; then
PKG_CHECK_MODULES([ATSPI2], [atspi-2 dbus-glib-1], ,
[AC_MSG_ERROR([AT-SPI 2 not found])])
AC_DEFINE([HAVE_ATSPI], [1], [Define if AT-SPI 2 is found])
if test x$enable_cspi = xyes; then
PKG_CHECK_MODULES([CSPI], [cspi-1.0], ,
[AC_MSG_ERROR([AT-SPI C not found])])
AC_DEFINE([HAVE_CSPI], [1], [Define if CSPI is found])
fi
AC_MSG_RESULT($enable_atspi)
AM_CONDITIONAL(ENABLE_ATSPI, [test x$enable_atspi = xyes])
AC_MSG_RESULT($enable_cspi)
AM_CONDITIONAL(ENABLE_CSPI, [test x$enable_cspi = xyes])
dnl Python language binding
AC_MSG_CHECKING([whether you enable Python language support])
@ -261,10 +263,6 @@ Build options:
Build shared libs $enable_shared
Build static libs $enable_static
CFLAGS $CFLAGS
GTK version $with_gtk
Build Clutter UI $enable_clutter
Build Vala binding $enable_vala
Build Python binding $enable_python
Build vala binding $enable_vala
Build document $enable_gtk_doc
Support accessibility $enable_atspi
])

View File

@ -2,21 +2,5 @@ SUBDIRS = icons themes keyboards
desktopdir = $(datadir)/applications
desktop_in_files = eekboard.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
if ENABLE_ATSPI
autostartdir = $(sysconfdir)/xdg/autostart
autostart_in_files = eekboard-autostart.desktop.in
autostart_DATA = $(autostart_in_files:.desktop.in=.desktop)
endif
dist_desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
CLEANFILES = $(desktop_DATA)
EXTRA_DIST = $(desktop_in_files)
if ENABLE_ATSPI
CLEANFILES += $(autostart_DATA)
EXTRA_DIST += $(autostart_in_files)
endif

View File

@ -1,6 +0,0 @@
[Desktop Entry]
Name=Eekboard
Exec=eekboard -f
Type=Application
AutostartCondition=GSettings org.gnome.desktop.a11y.applications screen-keyboard-enabled
X-GNOME-AutoRestart=true

View File

@ -2,7 +2,7 @@
Name=Eekboard
GenericName=Eekboard Virtual Keyboard
Comment=Virtual Keyboard
Exec=eekboard
Exec=eekboard-desktop-client
Icon=eekboard
Terminal=false
Type=Application

View File

@ -47,7 +47,7 @@ SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=--rebuild-types --deprecated-guards="EEK_DISABLE_DEPRECATED"
SCAN_OPTIONS=--rebuild-types
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
@ -82,8 +82,7 @@ IGNORE_HFILES = \
eek-clutter-renderer.h \
eek-clutter-section.h \
eek-clutter-key.h \
eek-gtk-renderer.h \
eek-enumtypes.h
eek-gtk-renderer.h
if !ENABLE_CLUTTER
IGNORE_HFILES += eek-clutter-keyboard.h eek-clutter.h
endif

View File

@ -1,8 +1,9 @@
<SECTION>
<FILE>eek-keyboard</FILE>
<TITLE>EekKeyboard</TITLE>
EekKeyboard
EekKeyboardClass
EekKeyboardPrivate
EekKeyboard
eek_keyboard_new
eek_keyboard_get_layout
eek_keyboard_get_size
@ -20,11 +21,6 @@ eek_keyboard_create_section
eek_keyboard_find_key_by_keycode
eek_keyboard_add_outline
eek_keyboard_get_outline
eek_keyboard_set_num_lock_mask
eek_keyboard_get_num_lock_mask
eek_keyboard_set_alt_gr_mask
eek_keyboard_get_alt_gr_mask
EekKeyboardPrivate
<SUBSECTION Standard>
EEK_KEYBOARD
EEK_IS_KEYBOARD
@ -38,8 +34,8 @@ EEK_KEYBOARD_GET_CLASS
<SECTION>
<FILE>eek-layout</FILE>
<TITLE>EekLayout</TITLE>
EekLayout
EekLayoutClass
EekLayout
<SUBSECTION Standard>
EEK_LAYOUT
EEK_IS_LAYOUT
@ -55,9 +51,8 @@ EEK_LAYOUT_GET_CLASS
<TITLE>EekGtkKeyboard</TITLE>
EekGtkKeyboard
EekGtkKeyboardClass
eek_gtk_keyboard_new
eek_gtk_keyboard_set_theme
EekGtkKeyboardPrivate
eek_gtk_keyboard_new
<SUBSECTION Standard>
EEK_GTK_KEYBOARD
EEK_IS_GTK_KEYBOARD
@ -68,42 +63,12 @@ EEK_IS_GTK_KEYBOARD_CLASS
EEK_GTK_KEYBOARD_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-theme-node</FILE>
EekSide
EekCorner
eek_theme_node_new
eek_theme_node_get_parent
eek_theme_node_get_theme
eek_theme_node_get_element_type
eek_theme_node_get_element_id
eek_theme_node_get_element_class
eek_theme_node_get_pseudo_class
eek_theme_node_get_color
eek_theme_node_get_background_color
eek_theme_node_get_foreground_color
eek_theme_node_get_background_gradient
eek_theme_node_get_border_width
eek_theme_node_get_border_radius
eek_theme_node_get_border_color
eek_theme_node_get_font
EekThemeNodePrivate
EekThemeNodeClass
<SUBSECTION Standard>
EEK_THEME_NODE
EEK_IS_THEME_NODE
EEK_TYPE_THEME_NODE
eek_theme_node_get_type
EEK_THEME_NODE_CLASS
EEK_IS_THEME_NODE_CLASS
EEK_THEME_NODE_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-section</FILE>
<TITLE>EekSection</TITLE>
EekSection
EekSectionClass
EekSectionPrivate
EekSection
eek_section_set_angle
eek_section_get_angle
eek_section_get_n_rows
@ -111,7 +76,6 @@ eek_section_add_row
eek_section_get_row
eek_section_create_key
eek_section_find_key_by_keycode
EekSectionPrivate
<SUBSECTION Standard>
EEK_SECTION
EEK_IS_SECTION
@ -122,39 +86,17 @@ EEK_IS_SECTION_CLASS
EEK_SECTION_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-theme-context</FILE>
eek_theme_context_new
eek_theme_context_set_theme
eek_theme_context_get_theme
eek_theme_context_set_resolution
eek_theme_context_set_default_resolution
eek_theme_context_get_resolution
eek_theme_context_set_font
eek_theme_context_get_font
eek_theme_context_get_root_node
EekThemeContextClass
<SUBSECTION Standard>
EEK_THEME_CONTEXT
EEK_IS_THEME_CONTEXT
EEK_TYPE_THEME_CONTEXT
eek_theme_context_get_type
EEK_THEME_CONTEXT_CLASS
EEK_IS_THEME_CONTEXT_CLASS
EEK_THEME_CONTEXT_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-container</FILE>
<TITLE>EekContainer</TITLE>
EekContainerClass
EekContainerPrivate
EekCallback
EekCompareFunc
EekContainer
EekContainerClass
eek_container_foreach_child
eek_container_find
eek_container_add_child
EekContainerPrivate
<SUBSECTION Standard>
EEK_CONTAINER
EEK_IS_CONTAINER
@ -165,30 +107,13 @@ EEK_IS_CONTAINER_CLASS
EEK_CONTAINER_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-clutter-keyboard</FILE>
<TITLE>EekClutterKeyboard</TITLE>
EekClutterKeyboard
EekClutterKeyboardClass
eek_clutter_keyboard_new
eek_clutter_keyboard_set_theme
EekClutterKeyboardPrivate
<SUBSECTION Standard>
EEK_CLUTTER_KEYBOARD
EEK_IS_CLUTTER_KEYBOARD
EEK_TYPE_CLUTTER_KEYBOARD
eek_clutter_keyboard_get_type
EEK_CLUTTER_KEYBOARD_CLASS
EEK_IS_CLUTTER_KEYBOARD_CLASS
EEK_CLUTTER_KEYBOARD_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-symbol</FILE>
<TITLE>EekSymbol</TITLE>
EekSymbolCategory
EekSymbol
EekSymbolClass
EekSymbolPrivate
EekSymbol
eek_symbol_new
eek_symbol_set_name
eek_symbol_get_name
@ -201,7 +126,6 @@ eek_symbol_set_modifier_mask
eek_symbol_is_modifier
eek_symbol_set_icon_name
eek_symbol_get_icon_name
EekSymbolPrivate
<SUBSECTION Standard>
EEK_SYMBOL
EEK_IS_SYMBOL
@ -217,6 +141,7 @@ EEK_SYMBOL_GET_CLASS
<TITLE>EekXklLayout</TITLE>
EekXklLayout
EekXklLayoutClass
EekXklLayoutPrivate
eek_xkl_layout_new
eek_xkl_layout_set_config
eek_xkl_layout_set_config_full
@ -231,7 +156,6 @@ eek_xkl_layout_get_layouts
eek_xkl_layout_get_variants
eek_xkl_layout_get_options
eek_xkl_layout_get_option
EekXklLayoutPrivate
<SUBSECTION Standard>
EEK_XKL_LAYOUT
EEK_IS_XKL_LAYOUT
@ -247,6 +171,7 @@ EEK_XKL_LAYOUT_GET_CLASS
<TITLE>EekXkbLayout</TITLE>
EekXkbLayout
EekXkbLayoutClass
EekXkbLayoutPrivate
eek_xkb_layout_new
eek_xkb_layout_set_names
eek_xkb_layout_set_names_full
@ -257,7 +182,6 @@ eek_xkb_layout_set_symbols
eek_xkb_layout_get_keycodes
eek_xkb_layout_get_geometry
eek_xkb_layout_get_symbols
EekXkbLayoutPrivate
<SUBSECTION Standard>
EEK_XKB_LAYOUT
EEK_IS_XKB_LAYOUT
@ -271,8 +195,9 @@ EEK_XKB_LAYOUT_GET_CLASS
<SECTION>
<FILE>eek-key</FILE>
<TITLE>EekKey</TITLE>
EekKey
EekKeyClass
EekKeyPrivate
EekKey
eek_key_set_keycode
eek_key_get_keycode
eek_key_set_symbol_matrix
@ -285,7 +210,6 @@ eek_key_get_index
eek_key_set_oref
eek_key_get_oref
eek_key_is_pressed
EekKeyPrivate
<SUBSECTION Standard>
EEK_KEY
EEK_IS_KEY
@ -299,6 +223,7 @@ EEK_KEY_GET_CLASS
<SECTION>
<FILE>eek-serializable</FILE>
<TITLE>EekSerializable</TITLE>
EekSerializable
EekSerializableIface
eek_serializable_serialize
eek_serializable_deserialize
@ -313,8 +238,9 @@ EEK_SERIALIZABLE_GET_IFACE
<SECTION>
<FILE>eek-element</FILE>
<TITLE>EekElement</TITLE>
EekElement
EekElementClass
EekElementPrivate
EekElement
eek_element_set_parent
eek_element_get_parent
eek_element_set_name
@ -330,7 +256,6 @@ eek_element_set_group
eek_element_set_level
eek_element_get_group
eek_element_get_level
EekElementPrivate
<SUBSECTION Standard>
EEK_ELEMENT
EEK_IS_ELEMENT
@ -346,10 +271,10 @@ EEK_ELEMENT_GET_CLASS
<TITLE>EekXmlLayout</TITLE>
EekXmlLayout
EekXmlLayoutClass
EekXmlLayoutPrivate
eek_xml_layout_new
eek_xml_layout_set_source
eek_xml_layout_get_source
EekXmlLayoutPrivate
<SUBSECTION Standard>
EEK_XML_LAYOUT
EEK_IS_XML_LAYOUT
@ -360,33 +285,16 @@ EEK_IS_XML_LAYOUT_CLASS
EEK_XML_LAYOUT_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-theme</FILE>
eek_theme_new
eek_theme_load_stylesheet
eek_theme_unload_stylesheet
EekThemeClass
<SUBSECTION Standard>
EEK_THEME
EEK_IS_THEME
EEK_TYPE_THEME
eek_theme_get_type
EEK_THEME_CLASS
EEK_IS_THEME_CLASS
EEK_THEME_GET_CLASS
</SECTION>
<SECTION>
<FILE>eek-keysym</FILE>
<TITLE>EekKeysym</TITLE>
EEK_KEYSYM
EekKeysym
EekKeysymClass
EekKeysymPrivate
EekKeysym
eek_keysym_new
eek_keysym_get_xkeysym
eek_keysym_new_from_name
eek_keysym_new_with_modifier
EekKeysymPrivate
<SUBSECTION Standard>
EEK_INVALID_KEYSYM
EEK_IS_KEYSYM
@ -406,6 +314,7 @@ eek_keyboard_output
<SECTION>
<FILE>eek-types</FILE>
I_
EEK_TYPE_SYMBOL_MATRIX
EEK_TYPE_POINT
EEK_TYPE_BOUNDS
EEK_TYPE_OUTLINE
@ -414,40 +323,23 @@ EekOrientation
EekModifierBehavior
EekModifierType
EEK_INVALID_KEYCODE
EekPoint
eek_point_get_type
eek_point_copy
eek_point_free
eek_point_rotate
EekBounds
eek_bounds_get_type
eek_bounds_copy
eek_bounds_free
eek_bounds_long_side
EekOutline
eek_outline_get_type
eek_outline_copy
eek_outline_free
EekColor
eek_color_get_type
eek_color_new
eek_color_copy
eek_color_free
EekGradientType
EekThemeNode
EekThemeContext
EekTheme
</SECTION>
<SECTION>
<FILE>eek-symbol-matrix</FILE>
EekSymbolMatrix
EEK_TYPE_SYMBOL_MATRIX
EekPoint
EekBounds
EekOutline
EekColor
eek_symbol_matrix_get_type
eek_symbol_matrix_new
eek_symbol_matrix_copy
eek_symbol_matrix_free
eek_symbol_matrix_set_symbol
eek_symbol_matrix_get_symbol
eek_point_get_type
eek_point_rotate
eek_bounds_get_type
eek_bounds_long_side
eek_outline_get_type
eek_outline_copy
eek_outline_free
eek_color_get_type
eek_color_new
</SECTION>

View File

@ -88,12 +88,10 @@ libeek_marshalers_sources = \
BUILT_SOURCES = \
$(libeek_keysym_sources) \
$(libeek_enumtypes_sources) \
$(libeek_marshalers_sources)
libeek_la_SOURCES = \
$(libeek_sources) \
$(srcdir)/eek-enumtypes.c \
$(srcdir)/eek-marshalers.c
libeek_la_CFLAGS = $(GIO2_CFLAGS) $(PANGOCAIRO_CFLAGS) $(LIBCROCO_CFLAGS)
@ -158,7 +156,6 @@ libeek_xkl_la_LIBADD = libeek-xkb.la $(LIBXKLAVIER_LIBS) $(GTK_LIBS)
eekdir = $(includedir)/eek-$(EEK_API_VERSION)/eek
eek_HEADERS = \
$(libeek_public_headers) \
$(srcdir)/eek-enumtypes.h \
$(libeek_clutter_public_headers) \
$(libeek_gtk_public_headers) \
$(libeek_xkb_public_headers) \
@ -178,16 +175,6 @@ eek-unicode-keysym-entries.h: unicode-keysym-entries.txt
eek-xkeysym-keysym-entries.h: xkeysym-keysym-entries.txt
$(PYTHON) ./gen-keysym-entries.py xkeysym_keysym_entries < $< > $@
eek-enumtypes.h: $(libeek_public_headers) eek-enumtypes.h.template
$(AM_V_GEN) $(GLIB_MKENUMS) --template eek-enumtypes.h.template \
$(libeek_public_headers) > eek-enumtypes.h.tmp && \
mv eek-enumtypes.h.tmp eek-enumtypes.h
eek-enumtypes.c: $(libeek_public_headers) eek-enumtypes.c.template
$(AM_V_GEN) $(GLIB_MKENUMS) --template eek-enumtypes.c.template \
$(libeek_public_headers) > eek-enumtypes.c.tmp && \
mv eek-enumtypes.c.tmp eek-enumtypes.c
# gen marshal
eek-marshalers.h: eek-marshalers.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_eek_marshal $(srcdir)/eek-marshalers.list --header --internal > $@.tmp && \
@ -220,8 +207,6 @@ EXTRA_DIST = \
special-keysym-entries.txt \
unicode-keysym-entries.txt \
xkeysym-keysym-entries.txt \
eek-enumtypes.h.template \
eek-enumtypes.c.template \
eek-marshalers.list
-include $(INTROSPECTION_MAKEFILE)
@ -236,7 +221,7 @@ Eek@EEK_LIBRARY_SUFFIX_U@_gir_SCANNERFLAGS = --strip-prefix=Eek --pkg=glib-2.0
Eek@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GLib-2.0 GObject-2.0 Gio-2.0
Eek@EEK_LIBRARY_SUFFIX_U@_gir_CFLAGS = $(libeek_la_CFLAGS)
Eek@EEK_LIBRARY_SUFFIX_U@_gir_LIBS = libeek.la
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers) $(srcdir)/eek-enumtypes.h
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers)
EekGtk@EEK_LIBRARY_SUFFIX@.gir: libeek-gtk.la Eek@EEK_LIBRARY_SUFFIX@.gir
EekGtk@EEK_LIBRARY_SUFFIX_U@_gir_INCLUDES = GObject-2.0 Gtk-@GTK_API_VERSION@ Eek@EEK_LIBRARY_SUFFIX@

View File

@ -249,7 +249,7 @@ eek_container_init (EekContainer *self)
/**
* eek_container_foreach_child:
* @container: an #EekContainer
* @callback: (scope call): an #EekCallback
* @callback: an #EekCallback
* @user_data: additional data passed to @callback
*
* Enumerate children of @container and run @callback with each child.

View File

@ -34,14 +34,6 @@ G_BEGIN_DECLS
typedef struct _EekContainerClass EekContainerClass;
typedef struct _EekContainerPrivate EekContainerPrivate;
/**
* EekCallback:
* @element: an #EekElement
* @user_data: user-supplied data
*
* The type of the callback function used for iterating over the
* children of a container, see eek_container_foreach_child().
*/
typedef void (*EekCallback) (EekElement *element, gpointer user_data);
typedef gint (*EekCompareFunc) (EekElement *element, gpointer user_data);

View File

@ -1,36 +0,0 @@
/*** BEGIN file-header ***/
#include "eek.h"
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN value-header ***/
GType
@enum_name@_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const G@Type@Value values[] = {
/*** END value-header ***/
/*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/
/*** BEGIN value-tail ***/
{ 0, NULL, NULL }
};
GType g_define_type_id =
g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
/*** END value-tail ***/

View File

@ -1,24 +0,0 @@
/*** BEGIN file-header ***/
#ifndef __EEK_ENUMTYPES_H__
#define __EEK_ENUMTYPES_H__
#include <glib-object.h>
G_BEGIN_DECLS
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN value-header ***/
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
/*** END value-header ***/
/*** BEGIN file-tail ***/
G_END_DECLS
#endif /* __EEK_ENUMTYPES_H__ */
/*** END file-tail ***/

View File

@ -557,9 +557,9 @@ eek_key_get_symbol_matrix (EekKey *key)
/**
* eek_key_get_symbol:
* @key: an #EekKey
* @returns: (transfer none): the current #EekSymbol or %NULL on failure
*
* Get the current symbol of @key.
* Return value: (transfer none): the current #EekSymbol or %NULL on failure
*/
EekSymbol *
eek_key_get_symbol (EekKey *key)
@ -572,9 +572,9 @@ eek_key_get_symbol (EekKey *key)
* @key: an #EekKey
* @fallback_group: fallback group index
* @fallback_level: fallback level index
* @returns: (transfer none): the current #EekSymbol or %NULL on failure
*
* Get the current symbol of @key.
* Return value: (transfer none): the current #EekSymbol or %NULL on failure
*/
EekSymbol *
eek_key_get_symbol_with_fallback (EekKey *key,
@ -628,9 +628,9 @@ eek_key_get_symbol_with_fallback (EekKey *key,
* @level: level index of the symbol matrix
* @fallback_group: fallback group index
* @fallback_level: fallback level index
* @returns: (transfer none): an #EekSymbol at (@group, @level), or %NULL
*
* Get the symbol at (@group, @level) in the symbol matrix of @key.
* Return value: (transfer none): an #EekSymbol at (@group, @level), or %NULL
*/
EekSymbol *
eek_key_get_symbol_at_index (EekKey *key,

View File

@ -36,7 +36,6 @@
#include "eek-key.h"
#include "eek-symbol.h"
#include "eek-serializable.h"
#include "eek-enumtypes.h"
enum {
PROP_0,
@ -275,7 +274,7 @@ eek_keyboard_set_property (GObject *object,
break;
case PROP_MODIFIER_BEHAVIOR:
eek_keyboard_set_modifier_behavior (EEK_KEYBOARD(object),
g_value_get_enum (value));
g_value_get_int (value));
break;
default:
g_object_set_property (object,
@ -298,7 +297,7 @@ eek_keyboard_get_property (GObject *object,
g_value_set_object (value, priv->layout);
break;
case PROP_MODIFIER_BEHAVIOR:
g_value_set_enum (value,
g_value_set_int (value,
eek_keyboard_get_modifier_behavior (EEK_KEYBOARD(object)));
break;
default:
@ -466,11 +465,10 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
*
* The modifier handling mode of #EekKeyboard.
*/
pspec = g_param_spec_enum ("modifier-behavior",
pspec = g_param_spec_int ("modifier-behavior",
"Modifier behavior",
"Modifier handling mode of the keyboard",
EEK_TYPE_MODIFIER_BEHAVIOR,
EEK_MODIFIER_BEHAVIOR_NONE,
0, G_MAXINT, EEK_MODIFIER_BEHAVIOR_NONE,
G_PARAM_READWRITE);
g_object_class_install_property (gobject_class,
PROP_MODIFIER_BEHAVIOR,
@ -660,9 +658,9 @@ eek_keyboard_create_section (EekKeyboard *keyboard)
* eek_keyboard_find_key_by_keycode:
* @keyboard: an #EekKeyboard
* @keycode: a keycode
* @returns: (transfer none): #EekKey whose keycode is @keycode
*
* Find an #EekKey whose keycode is @keycode.
* Return value: (transfer none): #EekKey whose keycode is @keycode
*/
EekKey *
eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard,

View File

@ -104,7 +104,6 @@ void eek_keyboard_set_size
(EekKeyboard *keyboard,
gdouble width,
gdouble height);
#ifndef EEK_DISABLE_DEPRECATED
void eek_keyboard_set_symbol_index
(EekKeyboard *keyboard,
gint group,
@ -113,6 +112,7 @@ void eek_keyboard_get_symbol_index
(EekKeyboard *keyboard,
gint *group,
gint *level);
void eek_keyboard_set_group
(EekKeyboard *keyboard,
gint group);
@ -123,7 +123,6 @@ gint eek_keyboard_get_group
(EekKeyboard *keyboard);
gint eek_keyboard_get_level
(EekKeyboard *keyboard);
#endif /* EEK_DISABLE_DEPRECATED */
void eek_keyboard_set_modifier_behavior
(EekKeyboard *keyboard,

View File

@ -223,8 +223,7 @@ eek_keysym_init (EekKeysym *self)
* modifier @modifier_mask.
*/
EekKeysym *
eek_keysym_new_with_modifier (guint xkeysym,
EekModifierType modifier_mask)
eek_keysym_new_with_modifier (guint xkeysym, EekModifierType modifier_mask)
{
EekKeysym *keysym;
EekKeysymPrivate *priv;

View File

@ -482,6 +482,7 @@ render_key (EekRenderer *self,
PangoLayout *layout;
PangoRectangle extents = { 0, };
EekColor foreground;
EekThemeNode *theme_node;
layout = pango_cairo_create_layout (cr);
eek_renderer_render_key_label (self, layout, key);
@ -493,6 +494,11 @@ render_key (EekRenderer *self,
(bounds.width * priv->scale - extents.width / PANGO_SCALE) / 2,
(bounds.height * priv->scale - extents.height / PANGO_SCALE) / 2);
if (eek_key_is_pressed (key))
theme_node = g_object_get_data (G_OBJECT(key), "theme-node-pressed");
else
theme_node = g_object_get_data (G_OBJECT(key), "theme-node");
eek_renderer_get_foreground_color (self, EEK_ELEMENT(key), &foreground);
cairo_set_source_rgba (cr,
foreground.red,
@ -564,7 +570,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
EekBounds bounds;
const TextProperty *prop;
PangoFontDescription *font;
gdouble scale;
gdouble size, scale;
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
if (!symbol)
@ -1135,6 +1141,7 @@ eek_renderer_get_background_gradient (EekRenderer *renderer,
EekColor *start,
EekColor *end)
{
EekRendererPrivate *priv;
EekThemeNode *theme_node;
g_return_if_fail (EEK_IS_RENDERER(renderer));
@ -1143,6 +1150,8 @@ eek_renderer_get_background_gradient (EekRenderer *renderer,
g_return_if_fail (start);
g_return_if_fail (end);
priv = EEK_RENDERER_GET_PRIVATE(renderer);
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
if (theme_node)
eek_theme_node_get_background_gradient (theme_node, type, start, end);
@ -1225,8 +1234,11 @@ find_key_by_position_section_callback (EekElement *element,
{
FindKeyByPositionCallbackData *data = user_data;
EekBounds bounds;
EekRendererPrivate *priv;
EekPoint origin;
priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
origin = data->origin;
eek_element_get_bounds (element, &bounds);
data->origin.x += bounds.x;

View File

@ -54,8 +54,6 @@ struct _EekSection
* @create_key: virtual function for creating key in the section
* @find_key_by_keycode: virtual function for accessing a key in the
* section by keycode
* @key_pressed: class handler for #EekSection::key-pressed signal
* @key_released: class handler for #EekSection::key-released signal
*/
struct _EekSectionClass
{

View File

@ -39,7 +39,6 @@ struct _EekSymbolMatrix
EekSymbol **data;
};
#define EEK_TYPE_SYMBOL_MATRIX (eek_symbol_matrix_get_type ())
GType eek_symbol_matrix_get_type (void) G_GNUC_CONST;
EekSymbolMatrix *eek_symbol_matrix_new (gint num_groups,
gint num_levels);

View File

@ -31,7 +31,6 @@
#include "eek-symbol.h"
#include "eek-serializable.h"
#include "eek-enumtypes.h"
enum {
PROP_0,
@ -111,11 +110,11 @@ eek_symbol_set_property (GObject *object,
eek_symbol_set_label (EEK_SYMBOL(object), g_value_get_string (value));
break;
case PROP_CATEGORY:
eek_symbol_set_category (EEK_SYMBOL(object), g_value_get_enum (value));
eek_symbol_set_category (EEK_SYMBOL(object), g_value_get_uint (value));
break;
case PROP_MODIFIER_MASK:
eek_symbol_set_modifier_mask (EEK_SYMBOL(object),
g_value_get_flags (value));
g_value_get_uint (value));
break;
case PROP_ICON_NAME:
eek_symbol_set_icon_name (EEK_SYMBOL(object),
@ -143,10 +142,10 @@ eek_symbol_get_property (GObject *object,
g_value_set_string (value, eek_symbol_get_label (EEK_SYMBOL(object)));
break;
case PROP_CATEGORY:
g_value_set_enum (value, eek_symbol_get_category (EEK_SYMBOL(object)));
g_value_set_uint (value, eek_symbol_get_category (EEK_SYMBOL(object)));
break;
case PROP_MODIFIER_MASK:
g_value_set_flags (value,
g_value_set_uint (value,
eek_symbol_get_modifier_mask (EEK_SYMBOL(object)));
break;
case PROP_ICON_NAME:
@ -198,19 +197,17 @@ eek_symbol_class_init (EekSymbolClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_LABEL, pspec);
pspec = g_param_spec_enum ("category",
pspec = g_param_spec_uint ("category",
"Category",
"Category of the symbol",
EEK_TYPE_SYMBOL_CATEGORY,
EEK_SYMBOL_CATEGORY_UNKNOWN,
0, G_MAXUINT, 0,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_CATEGORY, pspec);
pspec = g_param_spec_flags ("modifier-mask",
pspec = g_param_spec_uint ("modifier-mask",
"Modifier mask",
"Modifier mask of the symbol",
EEK_TYPE_MODIFIER_TYPE,
0,
0, G_MAXUINT, 0,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_MODIFIER_MASK, pspec);
@ -364,9 +361,8 @@ eek_symbol_get_category (EekSymbol *symbol)
/**
* eek_symbol_set_modifier_mask:
* @symbol: an #EekSymbol
* @mask: an #EekModifierType
*
* Set modifier mask that @symbol can trigger.
* Set modifier mask @symbol can trigger.
*/
void
eek_symbol_set_modifier_mask (EekSymbol *symbol,
@ -384,7 +380,7 @@ eek_symbol_set_modifier_mask (EekSymbol *symbol,
* eek_symbol_get_modifier_mask:
* @symbol: an #EekSymbol
*
* Get modifier mask that @symbol can trigger.
* Get modifier mask @symbol can trigger.
*/
EekModifierType
eek_symbol_get_modifier_mask (EekSymbol *symbol)

View File

@ -36,7 +36,6 @@ G_BEGIN_DECLS
* @EEK_SYMBOL_CATEGORY_USER3: reserved for future use
* @EEK_SYMBOL_CATEGORY_USER4: reserved for future use
* @EEK_SYMBOL_CATEGORY_UNKNOWN: used for error reporting
* @EEK_SYMBOL_CATEGORY_LAST: the last symbol category
*
* Category of the key symbols.
*/
@ -50,6 +49,7 @@ typedef enum {
EEK_SYMBOL_CATEGORY_USER3,
EEK_SYMBOL_CATEGORY_USER4,
EEK_SYMBOL_CATEGORY_UNKNOWN,
/*< private >*/
EEK_SYMBOL_CATEGORY_LAST = EEK_SYMBOL_CATEGORY_UNKNOWN
} EekSymbolCategory;

View File

@ -121,8 +121,7 @@ eek_theme_context_changed (EekThemeContext *context)
/**
* eek_theme_context_set_theme:
* @context: an #EekThemeContext
* @theme: an #EekTheme
* @context: a #EekThemeContext
*
* Sets the default set of theme stylesheets for the context. This theme will
* be used for the root node and for nodes descending from it, unless some other

View File

@ -28,7 +28,7 @@
G_BEGIN_DECLS
/**
* SECTION:eek-theme-context
* SECTION:EekThemeContext
* @short_description: holds global information about a tree of styled objects
*
* #EekThemeContext is responsible for managing information global to

View File

@ -26,12 +26,12 @@
G_BEGIN_DECLS
/**
* SECTION:eek-theme-node
* SECTION:EekThemeNode
* @short_description: style information for one node in a tree of
* themed objects
*
* The #EekThemeNode class represents the CSS style information (the
* set of CSS properties) for one node in a tree of themed objects. In
* A #EekThemeNode represents the CSS style information (the set of
* CSS properties) for one node in a tree of themed objects. In
* typical usage, it represents the style information for a single
* #EekElement. A #EekThemeNode is immutable: attributes such as the
* CSS classes for the node are passed in at construction. If the

View File

@ -33,20 +33,31 @@
#include "eek-types.h"
/* EekPoint */
G_DEFINE_BOXED_TYPE(EekPoint, eek_point, eek_point_copy, eek_point_free);
EekPoint *
static EekPoint *
eek_point_copy (const EekPoint *point)
{
return g_slice_dup (EekPoint, point);
}
void
static void
eek_point_free (EekPoint *point)
{
g_slice_free (EekPoint, point);
}
GType
eek_point_get_type (void)
{
static GType our_type = 0;
if (our_type == 0)
our_type =
g_boxed_type_register_static ("EekPoint",
(GBoxedCopyFunc)eek_point_copy,
(GBoxedFreeFunc)eek_point_free);
return our_type;
}
void
eek_point_rotate (EekPoint *point, gint angle)
{
@ -60,24 +71,32 @@ eek_point_rotate (EekPoint *point, gint angle)
}
/* EekBounds */
G_DEFINE_BOXED_TYPE(EekBounds, eek_bounds, eek_bounds_copy, eek_bounds_free);
EekBounds *
static EekBounds *
eek_bounds_copy (const EekBounds *bounds)
{
return g_slice_dup (EekBounds, bounds);
}
void
static void
eek_bounds_free (EekBounds *bounds)
{
g_slice_free (EekBounds, bounds);
}
/* EekOutline */
G_DEFINE_BOXED_TYPE(EekOutline, eek_outline,
eek_outline_copy, eek_outline_free);
GType
eek_bounds_get_type (void)
{
static GType our_type = 0;
if (our_type == 0)
our_type =
g_boxed_type_register_static ("EekBounds",
(GBoxedCopyFunc)eek_bounds_copy,
(GBoxedFreeFunc)eek_bounds_free);
return our_type;
}
/* EekOutline */
EekOutline *
eek_outline_copy (const EekOutline *outline)
{
@ -96,9 +115,20 @@ eek_outline_free (EekOutline *outline)
g_slice_free (EekOutline, outline);
}
/* EekColor */
G_DEFINE_BOXED_TYPE(EekColor, eek_color, eek_color_copy, eek_color_free);
GType
eek_outline_get_type (void)
{
static GType our_type = 0;
if (our_type == 0)
our_type =
g_boxed_type_register_static ("EekOutline",
(GBoxedCopyFunc)eek_outline_copy,
(GBoxedFreeFunc)eek_outline_free);
return our_type;
}
/* EekColor */
EekColor *
eek_color_copy (const EekColor *color)
{
@ -111,6 +141,19 @@ eek_color_free (EekColor *color)
g_slice_free (EekColor, color);
}
GType
eek_color_get_type (void)
{
static GType our_type = 0;
if (our_type == 0)
our_type =
g_boxed_type_register_static ("EekColor",
(GBoxedCopyFunc)eek_color_copy,
(GBoxedFreeFunc)eek_color_free);
return our_type;
}
EekColor *
eek_color_new (gdouble red,
gdouble green,

View File

@ -26,6 +26,7 @@ G_BEGIN_DECLS
#define I_(string) g_intern_static_string (string)
#define EEK_TYPE_SYMBOL_MATRIX (eek_symbol_matrix_get_type ())
#define EEK_TYPE_POINT (eek_point_get_type ())
#define EEK_TYPE_BOUNDS (eek_bounds_get_type ())
#define EEK_TYPE_OUTLINE (eek_outline_get_type ())
@ -140,6 +141,7 @@ typedef struct _EekThemeContext EekThemeContext;
typedef struct _EekThemeNode EekThemeNode;
typedef struct _EekSymbolMatrix EekSymbolMatrix;
typedef struct _EekPoint EekPoint;
typedef struct _EekBounds EekBounds;
typedef struct _EekOutline EekOutline;
typedef struct _EekColor EekColor;
@ -151,7 +153,6 @@ typedef struct _EekColor EekColor;
*
* 2D vertex
*/
typedef struct _EekPoint EekPoint;
struct _EekPoint
{
gdouble x;
@ -159,8 +160,6 @@ struct _EekPoint
};
GType eek_point_get_type (void) G_GNUC_CONST;
EekPoint *eek_point_copy (const EekPoint *point);
void eek_point_free (EekPoint *point);
void eek_point_rotate (EekPoint *point,
gint angle);
@ -175,6 +174,7 @@ void eek_point_rotate (EekPoint *point,
*/
struct _EekBounds
{
/*< public >*/
gdouble x;
gdouble y;
gdouble width;
@ -182,8 +182,6 @@ struct _EekBounds
};
GType eek_bounds_get_type (void) G_GNUC_CONST;
EekBounds *eek_bounds_copy (const EekBounds *bounds);
void eek_bounds_free (EekBounds *bounds);
G_INLINE_FUNC gdouble
eek_bounds_long_side (EekBounds *bounds)

View File

@ -127,7 +127,7 @@ create_key (EekXkbLayout *layout,
EekSymbolMatrix *matrix = NULL;
gchar name[XkbKeyNameLength + 1];
KeyCode keycode;
gint num_groups, num_levels;
gint num_groups, num_levels, num_symbols;
gulong oref;
xkbgeometry = priv->xkb->geom;
@ -199,6 +199,7 @@ create_key (EekXkbLayout *layout,
num_groups = XkbKeyNumGroups (priv->xkb, keycode);
num_levels = XkbKeyGroupsWidth (priv->xkb, keycode);
num_symbols = num_groups * num_levels;
matrix = eek_symbol_matrix_new (num_groups, num_levels);
for (i = 0; i < num_groups; i++)
for (j = 0; j < num_levels; j++) {

View File

@ -590,10 +590,6 @@ eek_xml_layout_real_create_keyboard (EekLayout *self,
if (data.oref_outline_hash)
g_hash_table_destroy (data.oref_outline_hash);
/* use pre-defined modifier mask here */
eek_keyboard_set_num_lock_mask (data.keyboard, EEK_MOD2_MASK);
eek_keyboard_set_alt_gr_mask (data.keyboard, EEK_MOD5_MASK);
return data.keyboard;
}

View File

@ -18,8 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
import eekboard
import gobject, gtk, virtkey
import gobject, gtk, eekboard, virtkey
import sys, os.path, re
KEYCODE_TABLE = {

View File

@ -28,9 +28,9 @@ eekboard_CFLAGS = \
-I$(top_srcdir) \
$(GIO2_CFLAGS) \
$(GTK_CFLAGS) \
$(GCONF2_CFLAGS) \
$(XKB_CFLAGS) \
$(LIBXKLAVIER_CFLAGS) \
-DKEYBOARDDIR=\"$(pkgdatadir)/keyboards\"
$(LIBXKLAVIER_CFLAGS)
eekboard_LDADD = \
$(builddir)/libxklutil.la \
@ -39,6 +39,7 @@ eekboard_LDADD = \
$(top_builddir)/eek/libeek-xkl.la \
$(GIO2_LIBS) \
$(GTK_LIBS) \
$(GCONF2_LIBS) \
$(XKB_LIBS) \
$(LIBXKLAVIER_LIBS)
@ -49,11 +50,11 @@ eekboard_LDADD += \
$(FAKEKEY_LIBS)
endif
if ENABLE_ATSPI
if ENABLE_CSPI
eekboard_CFLAGS += \
$(ATSPI2_CFLAGS)
$(CSPI_CFLAGS)
eekboard_LDADD += \
$(ATSPI2_LIBS)
$(CSPI_LIBS)
endif
eekboard_headers = client.h

View File

@ -20,24 +20,21 @@
#endif /* HAVE_CONFIG_H */
#include <stdlib.h>
#ifdef HAVE_ATSPI
#include <dbus/dbus.h>
#include <atspi/atspi.h>
#endif /* HAVE_ATSPI */
#include <cspi/spi.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <gconf/gconf-client.h>
#include "eekboard/eekboard.h"
#include "client.h"
#define DEFAULT_LAYOUT "us-qwerty"
static gboolean opt_system = FALSE;
static gboolean opt_session = FALSE;
static gchar *opt_address = NULL;
static gboolean opt_use_system_layout = FALSE;
#ifdef HAVE_CSPI
static gboolean opt_focus = FALSE;
static gboolean opt_keystroke = FALSE;
#endif /* HAVE_CSPI */
static gchar *opt_keyboard = NULL;
@ -54,16 +51,14 @@ static const GOptionEntry options[] = {
N_("Connect to the session bus")},
{"address", 'a', 0, G_OPTION_ARG_STRING, &opt_address,
N_("Connect to the given D-Bus address")},
{"use-system-layout", 'x', 0, G_OPTION_ARG_NONE, &opt_use_system_layout,
N_("Use system keyboard layout")},
#ifdef HAVE_ATSPI
#ifdef HAVE_CSPI
{"listen-focus", 'f', 0, G_OPTION_ARG_NONE, &opt_focus,
N_("Listen focus change events with AT-SPI")},
{"listen-keystroke", 's', 0, G_OPTION_ARG_NONE, &opt_keystroke,
N_("Listen keystroke events with AT-SPI")},
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
{"keyboard", 'k', 0, G_OPTION_ARG_STRING, &opt_keyboard,
N_("Specify keyboard")},
N_("Specify keyboard file")},
{"model", '\0', 0, G_OPTION_ARG_STRING, &opt_model,
N_("Specify model")},
{"layouts", '\0', 0, G_OPTION_ARG_STRING, &opt_layouts,
@ -117,6 +112,7 @@ main (int argc, char **argv)
GBusType bus_type;
GDBusConnection *connection;
GError *error;
GConfClient *gconfc;
GOptionContext *option_context;
GMainLoop *loop;
@ -172,24 +168,30 @@ main (int argc, char **argv)
exit (1);
}
#ifdef HAVE_ATSPI
if (opt_focus || opt_keystroke) {
GSettings *settings = g_settings_new ("org.gnome.desktop.interface");
gconfc = gconf_client_get_default ();
if (g_settings_get_boolean (settings, "toolkit-accessibility")) {
if (atspi_init () != 0) {
g_printerr ("Can't init AT-SPI 2\n");
#ifdef HAVE_CSPI
error = NULL;
if (opt_focus || opt_keystroke) {
if (gconf_client_get_bool (gconfc,
"/desktop/gnome/interface/accessibility",
&error) ||
gconf_client_get_bool (gconfc,
"/desktop/gnome/interface/accessibility2",
&error)) {
if (SPI_init () != 0) {
g_printerr ("Can't init CSPI\n");
exit (1);
}
if (opt_focus &&
!eekboard_client_enable_atspi_focus (client)) {
!eekboard_client_enable_cspi_focus (client)) {
g_printerr ("Can't register focus change event listeners\n");
exit (1);
}
if (opt_keystroke &&
!eekboard_client_enable_atspi_keystroke (client)) {
!eekboard_client_enable_cspi_keystroke (client)) {
g_printerr ("Can't register keystroke event listeners\n");
exit (1);
}
@ -198,16 +200,16 @@ main (int argc, char **argv)
exit (1);
}
}
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
if (opt_use_system_layout && (opt_keyboard || opt_model || opt_layouts || opt_options)) {
g_printerr ("Can't use --use-system-layout option with keyboard options\n");
if (opt_keyboard && (opt_model || opt_layouts || opt_options)) {
g_printerr ("Can't use --keyboard option with xklavier options\n");
exit (1);
}
if (opt_use_system_layout) {
if (!eekboard_client_enable_xkl (client)) {
g_printerr ("Can't register xklavier event listeners\n");
if (opt_keyboard) {
if (!eekboard_client_load_keyboard_from_file (client, opt_keyboard)) {
g_printerr ("Can't load keyboard\n");
exit (1);
}
} else if (opt_model || opt_layouts || opt_options) {
@ -218,23 +220,10 @@ main (int argc, char **argv)
g_printerr ("Can't set xklavier config\n");
exit (1);
}
} else {
gchar *file;
if (!opt_keyboard)
opt_keyboard = DEFAULT_LAYOUT;
if (g_str_has_suffix (opt_keyboard, ".xml"))
file = g_strdup (opt_keyboard);
else
file = g_strdup_printf ("%s/%s.xml", KEYBOARDDIR, opt_keyboard);
if (!eekboard_client_load_keyboard_from_file (client, file)) {
g_printerr ("Can't load keyboard file %s\n", file);
g_free (file);
} else if (!eekboard_client_enable_xkl (client)) {
g_printerr ("Can't register xklavier event listeners\n");
exit (1);
}
g_free (file);
}
#ifdef HAVE_FAKEKEY
if (!eekboard_client_enable_fakekey (client)) {

View File

@ -21,10 +21,9 @@
#include <libxklavier/xklavier.h>
#ifdef HAVE_ATSPI
#include <dbus/dbus.h>
#include <atspi/atspi.h>
#endif /* HAVE_ATSPI */
#ifdef HAVE_CSPI
#include <cspi/spi.h>
#endif /* HAVE_CSPI */
#include <gdk/gdkx.h>
@ -68,11 +67,11 @@ struct _EekboardClient {
gulong key_pressed_handler;
gulong key_released_handler;
#ifdef HAVE_ATSPI
AtspiAccessible *acc;
gboolean follows_focus;
AtspiDeviceListener *keystroke_listener;
#endif /* HAVE_ATSPI */
#ifdef HAVE_CSPI
Accessible *acc;
AccessibleEventListener *focus_listener;
AccessibleEventListener *keystroke_listener;
#endif /* HAVE_CSPI */
#ifdef HAVE_FAKEKEY
FakeKey *fakekey;
@ -88,22 +87,25 @@ G_DEFINE_TYPE (EekboardClient, eekboard_client, G_TYPE_OBJECT);
static GdkFilterReturn filter_xkl_event (GdkXEvent *xev,
GdkEvent *event,
gpointer user_data);
static void on_xkl_config_changed (XklEngine *xklengine,
static void on_xkl_config_changed
(XklEngine *xklengine,
gpointer user_data);
static void on_xkl_state_changed (XklEngine *xklengine,
static void on_xkl_state_changed
(XklEngine *xklengine,
XklEngineStateChange type,
gint value,
gboolean restore,
gpointer user_data);
#ifdef HAVE_ATSPI
static void focus_listener_cb (const AtspiEvent *event,
#ifdef HAVE_CSPI
static SPIBoolean focus_listener_cb (const AccessibleEvent *event,
void *user_data);
static gboolean keystroke_listener_cb (const AtspiDeviceEvent *stroke,
static SPIBoolean keystroke_listener_cb
(const AccessibleKeystroke *stroke,
void *user_data);
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
static gboolean set_keyboard (EekboardClient *client,
gboolean show,
EekLayout *layout);
@ -179,10 +181,10 @@ eekboard_client_dispose (GObject *object)
eekboard_client_disable_xkl (client);
#ifdef HAVE_ATSPI
eekboard_client_disable_atspi_focus (client);
eekboard_client_disable_atspi_keystroke (client);
#endif /* HAVE_ATSPI */
#ifdef HAVE_CSPI
eekboard_client_disable_cspi_focus (client);
eekboard_client_disable_cspi_keystroke (client);
#endif /* HAVE_CSPI */
#ifdef HAVE_FAKEKEY
eekboard_client_disable_fakekey (client);
@ -272,10 +274,10 @@ eekboard_client_init (EekboardClient *client)
client->key_released_handler = 0;
client->xkl_config_changed_handler = 0;
client->xkl_state_changed_handler = 0;
#ifdef HAVE_ATSPI
client->follows_focus = FALSE;
#ifdef HAVE_CSPI
client->focus_listener = NULL;
client->keystroke_listener = NULL;
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
#ifdef HAVE_FAKEKEY
client->fakekey = NULL;
#endif /* HAVE_FAKEKEY */
@ -287,9 +289,9 @@ eekboard_client_set_xkl_config (EekboardClient *client,
const gchar *layouts,
const gchar *options)
{
#ifdef HAVE_ATSPI
#ifdef HAVE_CSPI
return set_xkl_keyboard (client,
!client->follows_focus,
client->focus_listener ? FALSE : TRUE,
model,
layouts,
options);
@ -338,9 +340,9 @@ eekboard_client_enable_xkl (EekboardClient *client)
xkl_engine_start_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
#ifdef HAVE_ATSPI
#ifdef HAVE_CSPI
return set_xkl_keyboard (client,
!client->follows_focus,
client->focus_listener ? FALSE : TRUE,
NULL,
NULL,
NULL);
@ -364,135 +366,80 @@ eekboard_client_disable_xkl (EekboardClient *client)
client->xkl_state_changed_handler);
}
#ifdef HAVE_ATSPI
#ifdef HAVE_CSPI
gboolean
eekboard_client_enable_atspi_focus (EekboardClient *client)
eekboard_client_enable_cspi_focus (EekboardClient *client)
{
GError *error;
error = NULL;
if (!atspi_event_listener_register_from_callback
((AtspiEventListenerCB)focus_listener_cb,
client,
NULL,
"object:state-changed:focused",
&error))
return FALSE;
error = NULL;
if (!atspi_event_listener_register_from_callback
((AtspiEventListenerCB)focus_listener_cb,
client,
NULL,
"focus:",
&error))
return FALSE;
client->follows_focus = TRUE;
return TRUE;
}
void
eekboard_client_disable_atspi_focus (EekboardClient *client)
{
GError *error;
client->follows_focus = FALSE;
error = NULL;
atspi_event_listener_deregister_from_callback
((AtspiEventListenerCB)focus_listener_cb,
client,
"object:state-changed:focused",
&error);
error = NULL;
atspi_event_listener_deregister_from_callback
((AtspiEventListenerCB)focus_listener_cb,
client,
"focus:",
&error);
}
gboolean
eekboard_client_enable_atspi_keystroke (EekboardClient *client)
{
GError *error;
client->keystroke_listener =
atspi_device_listener_new ((AtspiDeviceListenerCB)keystroke_listener_cb,
NULL,
client->focus_listener = SPI_createAccessibleEventListener
((AccessibleEventListenerCB)focus_listener_cb,
client);
error = NULL;
if (!atspi_register_keystroke_listener
(client->keystroke_listener,
NULL,
0,
ATSPI_KEY_PRESSED,
ATSPI_KEYLISTENER_NOSYNC,
&error))
if (!SPI_registerGlobalEventListener (client->focus_listener,
"object:state-changed:focused"))
return FALSE;
error = NULL;
if (!atspi_register_keystroke_listener
if (!SPI_registerGlobalEventListener (client->focus_listener,
"focus:"))
return FALSE;
return TRUE;
}
void
eekboard_client_disable_cspi_focus (EekboardClient *client)
{
if (client->focus_listener) {
SPI_deregisterGlobalEventListenerAll (client->focus_listener);
AccessibleEventListener_unref (client->focus_listener);
client->focus_listener = NULL;
}
}
gboolean
eekboard_client_enable_cspi_keystroke (EekboardClient *client)
{
client->keystroke_listener =
SPI_createAccessibleKeystrokeListener (keystroke_listener_cb,
client);
if (!SPI_registerAccessibleKeystrokeListener
(client->keystroke_listener,
NULL,
SPI_KEYSET_ALL_KEYS,
0,
ATSPI_KEY_RELEASED,
ATSPI_KEYLISTENER_NOSYNC,
&error))
SPI_KEY_PRESSED |
SPI_KEY_RELEASED,
SPI_KEYLISTENER_NOSYNC))
return FALSE;
return TRUE;
}
void
eekboard_client_disable_atspi_keystroke (EekboardClient *client)
eekboard_client_disable_cspi_keystroke (EekboardClient *client)
{
if (client->keystroke_listener) {
GError *error;
error = NULL;
atspi_deregister_keystroke_listener (client->keystroke_listener,
NULL,
0,
ATSPI_KEY_PRESSED,
&error);
error = NULL;
atspi_deregister_keystroke_listener (client->keystroke_listener,
NULL,
0,
ATSPI_KEY_RELEASED,
&error);
g_object_unref (client->keystroke_listener);
SPI_deregisterAccessibleKeystrokeListener (client->keystroke_listener,
0);
AccessibleKeystrokeListener_unref (client->keystroke_listener);
client->keystroke_listener = NULL;
}
}
static void
focus_listener_cb (const AtspiEvent *event,
static SPIBoolean
focus_listener_cb (const AccessibleEvent *event,
void *user_data)
{
EekboardClient *client = user_data;
AtspiAccessible *accessible = event->source;
AtspiStateSet *state_set = atspi_accessible_get_state_set (accessible);
AtspiRole role;
GError *error;
Accessible *accessible = event->source;
AccessibleStateSet *state_set = Accessible_getStateSet (accessible);
AccessibleRole role = Accessible_getRole (accessible);
error = NULL;
role = atspi_accessible_get_role (accessible, &error);
if (error)
return;
if (atspi_state_set_contains (state_set, ATSPI_STATE_EDITABLE) ||
role == ATSPI_ROLE_TERMINAL) {
if (AccessibleStateSet_contains (state_set, SPI_STATE_EDITABLE) ||
role == SPI_ROLE_TERMINAL) {
switch (role) {
case ATSPI_ROLE_TEXT:
case ATSPI_ROLE_PARAGRAPH:
case ATSPI_ROLE_PASSWORD_TEXT:
case ATSPI_ROLE_TERMINAL:
case SPI_ROLE_TEXT:
case SPI_ROLE_PARAGRAPH:
case SPI_ROLE_PASSWORD_TEXT:
case SPI_ROLE_TERMINAL:
if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
client->acc = accessible;
eekboard_context_show_keyboard (client->context, NULL);
@ -501,7 +448,7 @@ focus_listener_cb (const AtspiEvent *event,
eekboard_context_hide_keyboard (client->context, NULL);
}
break;
case ATSPI_ROLE_ENTRY:
case SPI_ROLE_ENTRY:
if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
client->acc = accessible;
eekboard_context_show_keyboard (client->context, NULL);
@ -517,10 +464,12 @@ focus_listener_cb (const AtspiEvent *event,
} else {
eekboard_context_hide_keyboard (client->context, NULL);
}
return FALSE;
}
static gboolean
keystroke_listener_cb (const AtspiDeviceEvent *stroke,
static SPIBoolean
keystroke_listener_cb (const AccessibleKeystroke *stroke,
void *user_data)
{
EekboardClient *client = user_data;
@ -529,22 +478,22 @@ keystroke_listener_cb (const AtspiDeviceEvent *stroke,
/* Ignore modifiers since the keystroke listener does not called
when a modifier key is released. */
key = eek_keyboard_find_key_by_keycode (client->keyboard,
stroke->hw_code);
stroke->keycode);
if (key) {
EekSymbol *symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
if (symbol && eek_symbol_is_modifier (symbol))
return FALSE;
}
if (stroke->type == ATSPI_KEY_PRESSED) {
eekboard_context_press_key (client->context, stroke->hw_code, NULL);
if (stroke->type == SPI_KEY_PRESSED) {
eekboard_context_press_key (client->context, stroke->keycode, NULL);
} else {
eekboard_context_release_key (client->context, stroke->hw_code, NULL);
eekboard_context_release_key (client->context, stroke->keycode, NULL);
}
return TRUE;
}
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
EekboardClient *
eekboard_client_new (GDBusConnection *connection)
@ -716,19 +665,12 @@ on_key_pressed (EekKeyboard *keyboard,
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
if (EEK_IS_KEYSYM(symbol) && !eek_symbol_is_modifier (symbol)) {
guint xkeysym;
guint keycode;
EekModifierType modifiers;
FakeKeyModifier fakekey_modifiers;
xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
g_return_if_fail (xkeysym > 0);
keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (client->display),
xkeysym);
g_return_if_fail (keycode > 0);
modifiers = eek_keyboard_get_modifiers (client->keyboard);
fakekey_modifiers = get_fakekey_modifiers (modifiers);
guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
guint keycode =
XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (client->display), xkeysym);
EekModifierType modifiers =
eek_keyboard_get_modifiers (client->keyboard);
FakeKeyModifier fakekey_modifiers = get_fakekey_modifiers (modifiers);
fakekey_send_keyevent (client->fakekey,
keycode,
@ -799,6 +741,8 @@ eekboard_client_load_keyboard_from_file (EekboardClient *client,
GFileInputStream *input;
GError *error;
EekLayout *layout;
EekKeyboard *keyboard;
guint keyboard_id;
gboolean retval;
file = g_file_new_for_path (keyboard_file);
@ -810,11 +754,7 @@ eekboard_client_load_keyboard_from_file (EekboardClient *client,
layout = eek_xml_layout_new (G_INPUT_STREAM(input));
g_object_unref (input);
#ifdef HAVE_ATSPI
retval = set_keyboard (client, !client->follows_focus, layout);
#else
retval = set_keyboard (client, TRUE, layout);
#endif
g_object_unref (layout);
return retval;
}

View File

@ -44,14 +44,14 @@ gboolean eekboard_client_set_xkl_config (EekboardClient *client,
gboolean eekboard_client_enable_xkl (EekboardClient *client);
void eekboard_client_disable_xkl (EekboardClient *client);
gboolean eekboard_client_enable_atspi_focus
gboolean eekboard_client_enable_cspi_focus
(EekboardClient *client);
void eekboard_client_disable_atspi_focus
void eekboard_client_disable_cspi_focus
(EekboardClient *client);
gboolean eekboard_client_enable_atspi_keystroke
gboolean eekboard_client_enable_cspi_keystroke
(EekboardClient *client);
void eekboard_client_disable_atspi_keystroke
void eekboard_client_disable_cspi_keystroke
(EekboardClient *client);
gboolean eekboard_client_enable_fakekey (EekboardClient *client);

View File

@ -141,10 +141,7 @@ on_allocation_changed (ClutterActor *stage,
ClutterAllocationFlags flags,
gpointer user_data)
{
ClutterActor *actor =
clutter_container_find_child_by_name (CLUTTER_CONTAINER(stage),
"keyboard");
ClutterActor *actor = user_data;
clutter_actor_set_size (actor,
box->x2 - box->x1,
box->y2 - box->y1);
@ -237,11 +234,12 @@ set_geometry (ServerContext *context)
g_signal_connect (stage,
"allocation-changed",
G_CALLBACK(on_allocation_changed),
NULL);
#endif
actor);
#else
gtk_widget_set_size_request (context->widget,
bounds.width,
bounds.height);
#endif
gtk_window_move (GTK_WINDOW(context->window),
MAX(rect.width - 20 - bounds.width, 0),
MAX(rect.height - 40 - bounds.height, 0));
@ -267,7 +265,6 @@ update_widget (ServerContext *context)
context->widget = gtk_clutter_embed_new ();
stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(context->widget));
actor = eek_clutter_keyboard_new (context->keyboard);
clutter_actor_set_name (actor, "keyboard");
if (theme)
eek_clutter_keyboard_set_theme (EEK_CLUTTER_KEYBOARD(actor), theme);
clutter_container_add_actor (CLUTTER_CONTAINER(stage), actor);