Compare commits
27 Commits
eekboard-0
...
eekboard-0
| Author | SHA1 | Date | |
|---|---|---|---|
| 2211fb6b1e | |||
| 34569679f0 | |||
| 816e1f0d51 | |||
| de62d74ac5 | |||
| d71c79f268 | |||
| ee948cb2ae | |||
| ba59a850d1 | |||
| b7999842a9 | |||
| 2dd0ae47db | |||
| 926d9346e1 | |||
| ac8764b9b7 | |||
| 4cf3f24fbc | |||
| 0691766a31 | |||
| 77c00a10da | |||
| 8c407ae482 | |||
| 8d2d612547 | |||
| 80dc26b7f4 | |||
| fbe7b9ec1a | |||
| 048fccd6e0 | |||
| 638d41e0b6 | |||
| 4271eb6b3e | |||
| d25bfd8ba7 | |||
| 0739fbf464 | |||
| d1b38f8eb2 | |||
| e6d17fa4cb | |||
| d62b8b49a2 | |||
| 149dd7dc8b |
11
.gitignore
vendored
11
.gitignore
vendored
@ -33,6 +33,7 @@ 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
|
||||
@ -43,12 +44,13 @@ 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
|
||||
@ -71,6 +73,9 @@ 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
25
README
@ -7,8 +7,8 @@ tools to implement desktop virtual keyboards.
|
||||
|
||||
** Dependencies
|
||||
|
||||
REQUIRED: GLib2, GTK, GConf2, PangoCairo, libxklavier, libcroco
|
||||
OPTIONAL: fakekey, CSPI, Clutter, Clutter-Gtk, Vala, gobject-introspection
|
||||
REQUIRED: GLib2, GTK, PangoCairo, libxklavier, libcroco
|
||||
OPTIONAL: fakekey, at-spi2-core, Clutter, Clutter-Gtk, Python, Vala, gobject-introspection
|
||||
|
||||
** Build from git repo
|
||||
|
||||
@ -24,7 +24,7 @@ OPTIONAL: fakekey, CSPI, Clutter, Clutter-Gtk, Vala, gobject-introspection
|
||||
$ make
|
||||
$ sudo make install
|
||||
|
||||
* How to test
|
||||
* Using command-line tools
|
||||
|
||||
eekboard currently includes 3 tools to implement your own virtual
|
||||
keyboard.
|
||||
@ -47,10 +47,15 @@ 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 used by
|
||||
eekboard-client tool and in the eekboard library.
|
||||
eekboard-xml is a tool to manipulate XML keyboard description read by
|
||||
eekboard if --keyboard option is specified.
|
||||
|
||||
To dump the current system keyboard layout into an XML file:
|
||||
|
||||
@ -60,6 +65,14 @@ You can display the dumped layout with:
|
||||
|
||||
$ eekboard-xml --load keyboard.xml
|
||||
|
||||
* Documentation
|
||||
* Using library
|
||||
|
||||
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
|
||||
|
||||
36
configure.ac
36
configure.ac
@ -20,7 +20,7 @@ AC_PREREQ(2.63)
|
||||
dnl AC_CONFIG_SRCDIR([configure.ac])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
AC_INIT([eekboard], [0.90.4], [ueno@unixuser.org])
|
||||
AC_INIT([eekboard], [0.90.7], [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.25.4], ,
|
||||
PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.26.0], ,
|
||||
[AC_MSG_ERROR([GLib2 not found])])
|
||||
PKG_CHECK_MODULES([GIO2], [gio-2.0], ,
|
||||
[AC_MSG_ERROR([Gio2 not found])])
|
||||
@ -95,8 +95,6 @@ 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], ,
|
||||
@ -119,20 +117,20 @@ fi
|
||||
AM_CONDITIONAL(ENABLE_FAKEKEY, [test x$enable_fakekey = xyes])
|
||||
AC_MSG_RESULT($enable_fakekey)
|
||||
|
||||
dnl use AT-SPI to capture focus/keystroke events
|
||||
AC_MSG_CHECKING([whether you enable AT-SPI event handling])
|
||||
AC_ARG_ENABLE(cspi,
|
||||
AS_HELP_STRING([--enable-cspi=no/yes],
|
||||
[Enable AT-SPI event handling default=yes]),,
|
||||
enable_cspi=yes)
|
||||
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)
|
||||
|
||||
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])
|
||||
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])
|
||||
fi
|
||||
AC_MSG_RESULT($enable_cspi)
|
||||
AM_CONDITIONAL(ENABLE_CSPI, [test x$enable_cspi = xyes])
|
||||
AC_MSG_RESULT($enable_atspi)
|
||||
AM_CONDITIONAL(ENABLE_ATSPI, [test x$enable_atspi = xyes])
|
||||
|
||||
dnl Python language binding
|
||||
AC_MSG_CHECKING([whether you enable Python language support])
|
||||
@ -263,6 +261,10 @@ Build options:
|
||||
Build shared libs $enable_shared
|
||||
Build static libs $enable_static
|
||||
CFLAGS $CFLAGS
|
||||
Build vala binding $enable_vala
|
||||
GTK version $with_gtk
|
||||
Build Clutter UI $enable_clutter
|
||||
Build Vala binding $enable_vala
|
||||
Build Python binding $enable_python
|
||||
Build document $enable_gtk_doc
|
||||
Support accessibility $enable_atspi
|
||||
])
|
||||
|
||||
@ -1,2 +1,22 @@
|
||||
SUBDIRS = icons themes keyboards
|
||||
EXTRA_DIST = eekboard.desktop
|
||||
|
||||
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
|
||||
|
||||
@INTLTOOL_DESKTOP_RULE@
|
||||
|
||||
CLEANFILES = $(desktop_DATA)
|
||||
EXTRA_DIST = $(desktop_in_files)
|
||||
|
||||
if ENABLE_ATSPI
|
||||
CLEANFILES += $(autostart_DATA)
|
||||
EXTRA_DIST += $(autostart_in_files)
|
||||
endif
|
||||
|
||||
|
||||
6
data/eekboard-autostart.desktop.in
Normal file
6
data/eekboard-autostart.desktop.in
Normal file
@ -0,0 +1,6 @@
|
||||
[Desktop Entry]
|
||||
Name=Eekboard
|
||||
Exec=eekboard -f
|
||||
Type=Application
|
||||
AutostartCondition=GSettings org.gnome.desktop.a11y.applications screen-keyboard-enabled
|
||||
X-GNOME-AutoRestart=true
|
||||
@ -2,7 +2,7 @@
|
||||
Name=Eekboard
|
||||
GenericName=Eekboard Virtual Keyboard
|
||||
Comment=Virtual Keyboard
|
||||
Exec=eekboard-desktop-client
|
||||
Exec=eekboard
|
||||
Icon=eekboard
|
||||
Terminal=false
|
||||
Type=Application
|
||||
@ -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
|
||||
SCAN_OPTIONS=--rebuild-types --deprecated-guards="EEK_DISABLE_DEPRECATED"
|
||||
|
||||
# Extra options to supply to gtkdoc-mkdb.
|
||||
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
|
||||
@ -82,7 +82,8 @@ IGNORE_HFILES = \
|
||||
eek-clutter-renderer.h \
|
||||
eek-clutter-section.h \
|
||||
eek-clutter-key.h \
|
||||
eek-gtk-renderer.h
|
||||
eek-gtk-renderer.h \
|
||||
eek-enumtypes.h
|
||||
if !ENABLE_CLUTTER
|
||||
IGNORE_HFILES += eek-clutter-keyboard.h eek-clutter.h
|
||||
endif
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
<SECTION>
|
||||
<FILE>eek-keyboard</FILE>
|
||||
<TITLE>EekKeyboard</TITLE>
|
||||
EekKeyboardClass
|
||||
EekKeyboardPrivate
|
||||
EekKeyboard
|
||||
EekKeyboardClass
|
||||
eek_keyboard_new
|
||||
eek_keyboard_get_layout
|
||||
eek_keyboard_get_size
|
||||
@ -21,6 +20,11 @@ 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
|
||||
@ -34,8 +38,8 @@ EEK_KEYBOARD_GET_CLASS
|
||||
<SECTION>
|
||||
<FILE>eek-layout</FILE>
|
||||
<TITLE>EekLayout</TITLE>
|
||||
EekLayoutClass
|
||||
EekLayout
|
||||
EekLayoutClass
|
||||
<SUBSECTION Standard>
|
||||
EEK_LAYOUT
|
||||
EEK_IS_LAYOUT
|
||||
@ -51,8 +55,9 @@ EEK_LAYOUT_GET_CLASS
|
||||
<TITLE>EekGtkKeyboard</TITLE>
|
||||
EekGtkKeyboard
|
||||
EekGtkKeyboardClass
|
||||
EekGtkKeyboardPrivate
|
||||
eek_gtk_keyboard_new
|
||||
eek_gtk_keyboard_set_theme
|
||||
EekGtkKeyboardPrivate
|
||||
<SUBSECTION Standard>
|
||||
EEK_GTK_KEYBOARD
|
||||
EEK_IS_GTK_KEYBOARD
|
||||
@ -63,12 +68,42 @@ 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>
|
||||
EekSectionClass
|
||||
EekSectionPrivate
|
||||
EekSection
|
||||
EekSectionClass
|
||||
eek_section_set_angle
|
||||
eek_section_get_angle
|
||||
eek_section_get_n_rows
|
||||
@ -76,6 +111,7 @@ 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
|
||||
@ -86,17 +122,39 @@ 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
|
||||
@ -107,13 +165,30 @@ 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
|
||||
EekSymbolClass
|
||||
EekSymbolPrivate
|
||||
EekSymbol
|
||||
EekSymbolClass
|
||||
eek_symbol_new
|
||||
eek_symbol_set_name
|
||||
eek_symbol_get_name
|
||||
@ -126,6 +201,7 @@ 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
|
||||
@ -141,7 +217,6 @@ 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
|
||||
@ -156,6 +231,7 @@ 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
|
||||
@ -171,7 +247,6 @@ 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
|
||||
@ -182,6 +257,7 @@ 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
|
||||
@ -195,9 +271,8 @@ EEK_XKB_LAYOUT_GET_CLASS
|
||||
<SECTION>
|
||||
<FILE>eek-key</FILE>
|
||||
<TITLE>EekKey</TITLE>
|
||||
EekKeyClass
|
||||
EekKeyPrivate
|
||||
EekKey
|
||||
EekKeyClass
|
||||
eek_key_set_keycode
|
||||
eek_key_get_keycode
|
||||
eek_key_set_symbol_matrix
|
||||
@ -210,6 +285,7 @@ eek_key_get_index
|
||||
eek_key_set_oref
|
||||
eek_key_get_oref
|
||||
eek_key_is_pressed
|
||||
EekKeyPrivate
|
||||
<SUBSECTION Standard>
|
||||
EEK_KEY
|
||||
EEK_IS_KEY
|
||||
@ -223,7 +299,6 @@ EEK_KEY_GET_CLASS
|
||||
<SECTION>
|
||||
<FILE>eek-serializable</FILE>
|
||||
<TITLE>EekSerializable</TITLE>
|
||||
EekSerializable
|
||||
EekSerializableIface
|
||||
eek_serializable_serialize
|
||||
eek_serializable_deserialize
|
||||
@ -238,9 +313,8 @@ EEK_SERIALIZABLE_GET_IFACE
|
||||
<SECTION>
|
||||
<FILE>eek-element</FILE>
|
||||
<TITLE>EekElement</TITLE>
|
||||
EekElementClass
|
||||
EekElementPrivate
|
||||
EekElement
|
||||
EekElementClass
|
||||
eek_element_set_parent
|
||||
eek_element_get_parent
|
||||
eek_element_set_name
|
||||
@ -256,6 +330,7 @@ eek_element_set_group
|
||||
eek_element_set_level
|
||||
eek_element_get_group
|
||||
eek_element_get_level
|
||||
EekElementPrivate
|
||||
<SUBSECTION Standard>
|
||||
EEK_ELEMENT
|
||||
EEK_IS_ELEMENT
|
||||
@ -271,10 +346,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
|
||||
@ -285,16 +360,33 @@ 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
|
||||
EekKeysymClass
|
||||
EekKeysymPrivate
|
||||
EekKeysym
|
||||
EekKeysymClass
|
||||
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
|
||||
@ -314,7 +406,6 @@ eek_keyboard_output
|
||||
<SECTION>
|
||||
<FILE>eek-types</FILE>
|
||||
I_
|
||||
EEK_TYPE_SYMBOL_MATRIX
|
||||
EEK_TYPE_POINT
|
||||
EEK_TYPE_BOUNDS
|
||||
EEK_TYPE_OUTLINE
|
||||
@ -323,23 +414,40 @@ EekOrientation
|
||||
EekModifierBehavior
|
||||
EekModifierType
|
||||
EEK_INVALID_KEYCODE
|
||||
EekSymbolMatrix
|
||||
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
|
||||
eek_symbol_matrix_get_type
|
||||
eek_symbol_matrix_new
|
||||
eek_symbol_matrix_copy
|
||||
eek_symbol_matrix_free
|
||||
eek_point_get_type
|
||||
eek_point_rotate
|
||||
eek_bounds_get_type
|
||||
eek_bounds_long_side
|
||||
eek_outline_get_type
|
||||
eek_outline_copy
|
||||
eek_outline_free
|
||||
eek_color_get_type
|
||||
eek_color_new
|
||||
eek_symbol_matrix_set_symbol
|
||||
eek_symbol_matrix_get_symbol
|
||||
</SECTION>
|
||||
|
||||
|
||||
@ -88,10 +88,12 @@ 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)
|
||||
@ -156,6 +158,7 @@ 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) \
|
||||
@ -175,6 +178,16 @@ 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 && \
|
||||
@ -207,6 +220,8 @@ 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)
|
||||
@ -221,7 +236,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)
|
||||
Eek@EEK_LIBRARY_SUFFIX_U@_gir_FILES = $(libeek_sources) $(libeek_public_headers) $(srcdir)/eek-enumtypes.h
|
||||
|
||||
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@
|
||||
|
||||
@ -249,7 +249,7 @@ eek_container_init (EekContainer *self)
|
||||
/**
|
||||
* eek_container_foreach_child:
|
||||
* @container: an #EekContainer
|
||||
* @callback: an #EekCallback
|
||||
* @callback: (scope call): an #EekCallback
|
||||
* @user_data: additional data passed to @callback
|
||||
*
|
||||
* Enumerate children of @container and run @callback with each child.
|
||||
|
||||
@ -34,6 +34,14 @@ 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);
|
||||
|
||||
|
||||
36
eek/eek-enumtypes.c.template
Normal file
36
eek/eek-enumtypes.c.template
Normal file
@ -0,0 +1,36 @@
|
||||
/*** 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 ***/
|
||||
24
eek/eek-enumtypes.h.template
Normal file
24
eek/eek-enumtypes.h.template
Normal file
@ -0,0 +1,24 @@
|
||||
/*** 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 ***/
|
||||
@ -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,
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
#include "eek-key.h"
|
||||
#include "eek-symbol.h"
|
||||
#include "eek-serializable.h"
|
||||
#include "eek-enumtypes.h"
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
@ -274,7 +275,7 @@ eek_keyboard_set_property (GObject *object,
|
||||
break;
|
||||
case PROP_MODIFIER_BEHAVIOR:
|
||||
eek_keyboard_set_modifier_behavior (EEK_KEYBOARD(object),
|
||||
g_value_get_int (value));
|
||||
g_value_get_enum (value));
|
||||
break;
|
||||
default:
|
||||
g_object_set_property (object,
|
||||
@ -297,8 +298,8 @@ eek_keyboard_get_property (GObject *object,
|
||||
g_value_set_object (value, priv->layout);
|
||||
break;
|
||||
case PROP_MODIFIER_BEHAVIOR:
|
||||
g_value_set_int (value,
|
||||
eek_keyboard_get_modifier_behavior (EEK_KEYBOARD(object)));
|
||||
g_value_set_enum (value,
|
||||
eek_keyboard_get_modifier_behavior (EEK_KEYBOARD(object)));
|
||||
break;
|
||||
default:
|
||||
g_object_get_property (object,
|
||||
@ -465,11 +466,12 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
|
||||
*
|
||||
* The modifier handling mode of #EekKeyboard.
|
||||
*/
|
||||
pspec = g_param_spec_int ("modifier-behavior",
|
||||
"Modifier behavior",
|
||||
"Modifier handling mode of the keyboard",
|
||||
0, G_MAXINT, EEK_MODIFIER_BEHAVIOR_NONE,
|
||||
G_PARAM_READWRITE);
|
||||
pspec = g_param_spec_enum ("modifier-behavior",
|
||||
"Modifier behavior",
|
||||
"Modifier handling mode of the keyboard",
|
||||
EEK_TYPE_MODIFIER_BEHAVIOR,
|
||||
EEK_MODIFIER_BEHAVIOR_NONE,
|
||||
G_PARAM_READWRITE);
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_MODIFIER_BEHAVIOR,
|
||||
pspec);
|
||||
@ -658,9 +660,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,
|
||||
|
||||
@ -104,6 +104,7 @@ 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,
|
||||
@ -112,7 +113,6 @@ void eek_keyboard_get_symbol_index
|
||||
(EekKeyboard *keyboard,
|
||||
gint *group,
|
||||
gint *level);
|
||||
|
||||
void eek_keyboard_set_group
|
||||
(EekKeyboard *keyboard,
|
||||
gint group);
|
||||
@ -123,6 +123,7 @@ 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,
|
||||
|
||||
@ -223,7 +223,8 @@ 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;
|
||||
|
||||
@ -482,7 +482,6 @@ 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);
|
||||
@ -494,11 +493,6 @@ 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,
|
||||
@ -570,7 +564,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
||||
EekBounds bounds;
|
||||
const TextProperty *prop;
|
||||
PangoFontDescription *font;
|
||||
gdouble size, scale;
|
||||
gdouble scale;
|
||||
|
||||
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
|
||||
if (!symbol)
|
||||
@ -1141,7 +1135,6 @@ eek_renderer_get_background_gradient (EekRenderer *renderer,
|
||||
EekColor *start,
|
||||
EekColor *end)
|
||||
{
|
||||
EekRendererPrivate *priv;
|
||||
EekThemeNode *theme_node;
|
||||
|
||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||
@ -1150,8 +1143,6 @@ 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);
|
||||
@ -1234,11 +1225,8 @@ 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;
|
||||
|
||||
@ -54,6 +54,8 @@ 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
|
||||
{
|
||||
|
||||
@ -39,6 +39,7 @@ 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);
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
|
||||
#include "eek-symbol.h"
|
||||
#include "eek-serializable.h"
|
||||
#include "eek-enumtypes.h"
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
@ -110,11 +111,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_uint (value));
|
||||
eek_symbol_set_category (EEK_SYMBOL(object), g_value_get_enum (value));
|
||||
break;
|
||||
case PROP_MODIFIER_MASK:
|
||||
eek_symbol_set_modifier_mask (EEK_SYMBOL(object),
|
||||
g_value_get_uint (value));
|
||||
g_value_get_flags (value));
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
eek_symbol_set_icon_name (EEK_SYMBOL(object),
|
||||
@ -142,11 +143,11 @@ 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_uint (value, eek_symbol_get_category (EEK_SYMBOL(object)));
|
||||
g_value_set_enum (value, eek_symbol_get_category (EEK_SYMBOL(object)));
|
||||
break;
|
||||
case PROP_MODIFIER_MASK:
|
||||
g_value_set_uint (value,
|
||||
eek_symbol_get_modifier_mask (EEK_SYMBOL(object)));
|
||||
g_value_set_flags (value,
|
||||
eek_symbol_get_modifier_mask (EEK_SYMBOL(object)));
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
g_value_set_string (value,
|
||||
@ -197,18 +198,20 @@ 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_uint ("category",
|
||||
pspec = g_param_spec_enum ("category",
|
||||
"Category",
|
||||
"Category of the symbol",
|
||||
0, G_MAXUINT, 0,
|
||||
EEK_TYPE_SYMBOL_CATEGORY,
|
||||
EEK_SYMBOL_CATEGORY_UNKNOWN,
|
||||
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
|
||||
g_object_class_install_property (gobject_class, PROP_CATEGORY, pspec);
|
||||
|
||||
pspec = g_param_spec_uint ("modifier-mask",
|
||||
"Modifier mask",
|
||||
"Modifier mask of the symbol",
|
||||
0, G_MAXUINT, 0,
|
||||
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
|
||||
pspec = g_param_spec_flags ("modifier-mask",
|
||||
"Modifier mask",
|
||||
"Modifier mask of the symbol",
|
||||
EEK_TYPE_MODIFIER_TYPE,
|
||||
0,
|
||||
G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
|
||||
g_object_class_install_property (gobject_class, PROP_MODIFIER_MASK, pspec);
|
||||
|
||||
pspec = g_param_spec_string ("icon-name",
|
||||
@ -361,8 +364,9 @@ eek_symbol_get_category (EekSymbol *symbol)
|
||||
/**
|
||||
* eek_symbol_set_modifier_mask:
|
||||
* @symbol: an #EekSymbol
|
||||
* @mask: an #EekModifierType
|
||||
*
|
||||
* Set modifier mask @symbol can trigger.
|
||||
* Set modifier mask that @symbol can trigger.
|
||||
*/
|
||||
void
|
||||
eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
||||
@ -380,7 +384,7 @@ eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
||||
* eek_symbol_get_modifier_mask:
|
||||
* @symbol: an #EekSymbol
|
||||
*
|
||||
* Get modifier mask @symbol can trigger.
|
||||
* Get modifier mask that @symbol can trigger.
|
||||
*/
|
||||
EekModifierType
|
||||
eek_symbol_get_modifier_mask (EekSymbol *symbol)
|
||||
|
||||
@ -36,6 +36,7 @@ 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.
|
||||
*/
|
||||
@ -49,7 +50,6 @@ typedef enum {
|
||||
EEK_SYMBOL_CATEGORY_USER3,
|
||||
EEK_SYMBOL_CATEGORY_USER4,
|
||||
EEK_SYMBOL_CATEGORY_UNKNOWN,
|
||||
/*< private >*/
|
||||
EEK_SYMBOL_CATEGORY_LAST = EEK_SYMBOL_CATEGORY_UNKNOWN
|
||||
} EekSymbolCategory;
|
||||
|
||||
|
||||
@ -121,7 +121,8 @@ eek_theme_context_changed (EekThemeContext *context)
|
||||
|
||||
/**
|
||||
* eek_theme_context_set_theme:
|
||||
* @context: a #EekThemeContext
|
||||
* @context: an #EekThemeContext
|
||||
* @theme: an #EekTheme
|
||||
*
|
||||
* 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
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* SECTION:EekThemeContext
|
||||
* SECTION:eek-theme-context
|
||||
* @short_description: holds global information about a tree of styled objects
|
||||
*
|
||||
* #EekThemeContext is responsible for managing information global to
|
||||
|
||||
@ -26,12 +26,12 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* SECTION:EekThemeNode
|
||||
* SECTION:eek-theme-node
|
||||
* @short_description: style information for one node in a tree of
|
||||
* themed objects
|
||||
*
|
||||
* A #EekThemeNode represents the CSS style information (the set of
|
||||
* CSS properties) for one node in a tree of themed objects. In
|
||||
* The #EekThemeNode class 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
|
||||
|
||||
@ -33,31 +33,20 @@
|
||||
#include "eek-types.h"
|
||||
|
||||
/* EekPoint */
|
||||
static EekPoint *
|
||||
G_DEFINE_BOXED_TYPE(EekPoint, eek_point, eek_point_copy, eek_point_free);
|
||||
|
||||
EekPoint *
|
||||
eek_point_copy (const EekPoint *point)
|
||||
{
|
||||
return g_slice_dup (EekPoint, point);
|
||||
}
|
||||
|
||||
static void
|
||||
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)
|
||||
{
|
||||
@ -71,32 +60,24 @@ eek_point_rotate (EekPoint *point, gint angle)
|
||||
}
|
||||
|
||||
/* EekBounds */
|
||||
static EekBounds *
|
||||
G_DEFINE_BOXED_TYPE(EekBounds, eek_bounds, eek_bounds_copy, eek_bounds_free);
|
||||
|
||||
EekBounds *
|
||||
eek_bounds_copy (const EekBounds *bounds)
|
||||
{
|
||||
return g_slice_dup (EekBounds, bounds);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
eek_bounds_free (EekBounds *bounds)
|
||||
{
|
||||
g_slice_free (EekBounds, bounds);
|
||||
}
|
||||
|
||||
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 */
|
||||
G_DEFINE_BOXED_TYPE(EekOutline, eek_outline,
|
||||
eek_outline_copy, eek_outline_free);
|
||||
|
||||
EekOutline *
|
||||
eek_outline_copy (const EekOutline *outline)
|
||||
{
|
||||
@ -115,20 +96,9 @@ eek_outline_free (EekOutline *outline)
|
||||
g_slice_free (EekOutline, outline);
|
||||
}
|
||||
|
||||
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 */
|
||||
G_DEFINE_BOXED_TYPE(EekColor, eek_color, eek_color_copy, eek_color_free);
|
||||
|
||||
EekColor *
|
||||
eek_color_copy (const EekColor *color)
|
||||
{
|
||||
@ -141,19 +111,6 @@ 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,
|
||||
|
||||
@ -26,7 +26,6 @@ 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 ())
|
||||
@ -141,7 +140,6 @@ 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;
|
||||
@ -153,15 +151,18 @@ typedef struct _EekColor EekColor;
|
||||
*
|
||||
* 2D vertex
|
||||
*/
|
||||
typedef struct _EekPoint EekPoint;
|
||||
struct _EekPoint
|
||||
{
|
||||
gdouble x;
|
||||
gdouble y;
|
||||
};
|
||||
|
||||
GType eek_point_get_type (void) G_GNUC_CONST;
|
||||
void eek_point_rotate (EekPoint *point,
|
||||
gint angle);
|
||||
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);
|
||||
|
||||
/**
|
||||
* EekBounds:
|
||||
@ -174,14 +175,15 @@ void eek_point_rotate (EekPoint *point,
|
||||
*/
|
||||
struct _EekBounds
|
||||
{
|
||||
/*< public >*/
|
||||
gdouble x;
|
||||
gdouble y;
|
||||
gdouble width;
|
||||
gdouble height;
|
||||
};
|
||||
|
||||
GType eek_bounds_get_type (void) G_GNUC_CONST;
|
||||
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)
|
||||
|
||||
@ -127,7 +127,7 @@ create_key (EekXkbLayout *layout,
|
||||
EekSymbolMatrix *matrix = NULL;
|
||||
gchar name[XkbKeyNameLength + 1];
|
||||
KeyCode keycode;
|
||||
gint num_groups, num_levels, num_symbols;
|
||||
gint num_groups, num_levels;
|
||||
gulong oref;
|
||||
|
||||
xkbgeometry = priv->xkb->geom;
|
||||
@ -199,7 +199,6 @@ 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++) {
|
||||
|
||||
@ -590,6 +590,10 @@ 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;
|
||||
}
|
||||
|
||||
|
||||
@ -18,7 +18,8 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301 USA
|
||||
|
||||
import gobject, gtk, eekboard, virtkey
|
||||
import eekboard
|
||||
import gobject, gtk, virtkey
|
||||
import sys, os.path, re
|
||||
|
||||
KEYCODE_TABLE = {
|
||||
@ -33,6 +34,36 @@ KEYCODE_TABLE = {
|
||||
MARK_UPPER = '~!@#$%^&*()_+{}|:"<>?'
|
||||
MARK_LOWER = '`1234567890-=[]\\;\',./'
|
||||
|
||||
INSCRIPT_MAPS = (
|
||||
"as-inscript",
|
||||
"bn-inscript",
|
||||
"gu-inscript",
|
||||
"hi-inscript",
|
||||
"kn-inscript",
|
||||
"ml-inscript",
|
||||
"mr-inscript",
|
||||
"or-inscript",
|
||||
"pa-inscript",
|
||||
"sd-inscript",
|
||||
"ta-inscript",
|
||||
"te-inscript",
|
||||
"kn-inscript2",
|
||||
"kok-inscript2-deva",
|
||||
"mai-inscript2",
|
||||
"ml-inscript2",
|
||||
"mni-inscript2-beng",
|
||||
"mni-inscript2-mtei",
|
||||
"mr-inscript2",
|
||||
"ne-inscript2-deva",
|
||||
"or-inscript2",
|
||||
"pa-inscript2-guru",
|
||||
"sa-inscript2",
|
||||
"sat-inscript2-deva",
|
||||
"sat-inscript2-olck",
|
||||
"sd-inscript2-deva",
|
||||
"ta-inscript2",
|
||||
"te-inscript2")
|
||||
|
||||
class MapFile(object):
|
||||
MAPENTRY_PATTERN = re.compile(r'\A\s*\((?:\((.*?)\)|"(.*?)")\s*"(.*?)"\)')
|
||||
|
||||
|
||||
@ -19,14 +19,25 @@
|
||||
import inscript
|
||||
import gtk
|
||||
from optparse import OptionParser
|
||||
import sys, os
|
||||
import sys, os, os.path, glob
|
||||
|
||||
parser = OptionParser()
|
||||
parser.add_option("-n", "--name=LANGCODE", dest="langcode",
|
||||
help="Specify language code to LANGCODE",
|
||||
metavar="LANGCODE")
|
||||
parser.add_option("-l", "--list", dest="list", default=False,
|
||||
action="store_true",
|
||||
help="List available language codes")
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if options.list:
|
||||
pat = os.path.join(os.getenv("M17N_DIR"), "*.mim")
|
||||
for fname in sorted(glob.glob(pat)):
|
||||
mname = os.path.basename(fname[:-4])
|
||||
if mname in inscript.INSCRIPT_MAPS:
|
||||
print mname
|
||||
exit(0)
|
||||
|
||||
if options.langcode is None:
|
||||
print >> sys.stderr, "Specify language code with -n"
|
||||
exit(1)
|
||||
|
||||
@ -28,9 +28,9 @@ eekboard_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GIO2_CFLAGS) \
|
||||
$(GTK_CFLAGS) \
|
||||
$(GCONF2_CFLAGS) \
|
||||
$(XKB_CFLAGS) \
|
||||
$(LIBXKLAVIER_CFLAGS)
|
||||
$(LIBXKLAVIER_CFLAGS) \
|
||||
-DKEYBOARDDIR=\"$(pkgdatadir)/keyboards\"
|
||||
|
||||
eekboard_LDADD = \
|
||||
$(builddir)/libxklutil.la \
|
||||
@ -39,7 +39,6 @@ eekboard_LDADD = \
|
||||
$(top_builddir)/eek/libeek-xkl.la \
|
||||
$(GIO2_LIBS) \
|
||||
$(GTK_LIBS) \
|
||||
$(GCONF2_LIBS) \
|
||||
$(XKB_LIBS) \
|
||||
$(LIBXKLAVIER_LIBS)
|
||||
|
||||
@ -50,11 +49,11 @@ eekboard_LDADD += \
|
||||
$(FAKEKEY_LIBS)
|
||||
endif
|
||||
|
||||
if ENABLE_CSPI
|
||||
if ENABLE_ATSPI
|
||||
eekboard_CFLAGS += \
|
||||
$(CSPI_CFLAGS)
|
||||
$(ATSPI2_CFLAGS)
|
||||
eekboard_LDADD += \
|
||||
$(CSPI_LIBS)
|
||||
$(ATSPI2_LIBS)
|
||||
endif
|
||||
|
||||
eekboard_headers = client.h
|
||||
|
||||
@ -20,21 +20,26 @@
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <cspi/spi.h>
|
||||
#ifdef HAVE_ATSPI
|
||||
#include <dbus/dbus.h>
|
||||
#include <atspi/atspi.h>
|
||||
#endif /* HAVE_ATSPI */
|
||||
#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;
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
static gboolean opt_use_system_layout = FALSE;
|
||||
static gboolean opt_focus = FALSE;
|
||||
static gboolean opt_keystroke = FALSE;
|
||||
#endif /* HAVE_CSPI */
|
||||
|
||||
static gchar *opt_keyboard = NULL;
|
||||
|
||||
static gchar *opt_model = NULL;
|
||||
static gchar *opt_layouts = NULL;
|
||||
@ -49,12 +54,16 @@ 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")},
|
||||
#ifdef HAVE_CSPI
|
||||
{"use-system-layout", 'x', 0, G_OPTION_ARG_NONE, &opt_use_system_layout,
|
||||
N_("Use system keyboard layout")},
|
||||
#ifdef HAVE_ATSPI
|
||||
{"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_CSPI */
|
||||
#endif /* HAVE_ATSPI */
|
||||
{"keyboard", 'k', 0, G_OPTION_ARG_STRING, &opt_keyboard,
|
||||
N_("Specify keyboard")},
|
||||
{"model", '\0', 0, G_OPTION_ARG_STRING, &opt_model,
|
||||
N_("Specify model")},
|
||||
{"layouts", '\0', 0, G_OPTION_ARG_STRING, &opt_layouts,
|
||||
@ -108,7 +117,6 @@ main (int argc, char **argv)
|
||||
GBusType bus_type;
|
||||
GDBusConnection *connection;
|
||||
GError *error;
|
||||
GConfClient *gconfc;
|
||||
GOptionContext *option_context;
|
||||
GMainLoop *loop;
|
||||
|
||||
@ -164,30 +172,24 @@ main (int argc, char **argv)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
gconfc = gconf_client_get_default ();
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
error = NULL;
|
||||
#ifdef HAVE_ATSPI
|
||||
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");
|
||||
GSettings *settings = g_settings_new ("org.gnome.desktop.interface");
|
||||
|
||||
if (g_settings_get_boolean (settings, "toolkit-accessibility")) {
|
||||
if (atspi_init () != 0) {
|
||||
g_printerr ("Can't init AT-SPI 2\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (opt_focus &&
|
||||
!eekboard_client_enable_cspi_focus (client)) {
|
||||
!eekboard_client_enable_atspi_focus (client)) {
|
||||
g_printerr ("Can't register focus change event listeners\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (opt_keystroke &&
|
||||
!eekboard_client_enable_cspi_keystroke (client)) {
|
||||
!eekboard_client_enable_atspi_keystroke (client)) {
|
||||
g_printerr ("Can't register keystroke event listeners\n");
|
||||
exit (1);
|
||||
}
|
||||
@ -196,19 +198,42 @@ main (int argc, char **argv)
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_CSPI */
|
||||
#endif /* HAVE_ATSPI */
|
||||
|
||||
if (opt_model || opt_layouts || opt_options) {
|
||||
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");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (opt_use_system_layout) {
|
||||
if (!eekboard_client_enable_xkl (client)) {
|
||||
g_printerr ("Can't register xklavier event listeners\n");
|
||||
exit (1);
|
||||
}
|
||||
} else if (opt_model || opt_layouts || opt_options) {
|
||||
if (!eekboard_client_set_xkl_config (client,
|
||||
opt_model,
|
||||
opt_layouts,
|
||||
opt_options)) {
|
||||
opt_model,
|
||||
opt_layouts,
|
||||
opt_options)) {
|
||||
g_printerr ("Can't set xklavier config\n");
|
||||
exit (1);
|
||||
}
|
||||
} else if (!eekboard_client_enable_xkl (client)) {
|
||||
g_printerr ("Can't register xklavier event listeners\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);
|
||||
exit (1);
|
||||
}
|
||||
g_free (file);
|
||||
}
|
||||
|
||||
#ifdef HAVE_FAKEKEY
|
||||
|
||||
368
src/client.c
368
src/client.c
@ -21,9 +21,10 @@
|
||||
|
||||
#include <libxklavier/xklavier.h>
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
#include <cspi/spi.h>
|
||||
#endif /* HAVE_CSPI */
|
||||
#ifdef HAVE_ATSPI
|
||||
#include <dbus/dbus.h>
|
||||
#include <atspi/atspi.h>
|
||||
#endif /* HAVE_ATSPI */
|
||||
|
||||
#include <gdk/gdkx.h>
|
||||
|
||||
@ -67,11 +68,11 @@ struct _EekboardClient {
|
||||
gulong key_pressed_handler;
|
||||
gulong key_released_handler;
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
Accessible *acc;
|
||||
AccessibleEventListener *focus_listener;
|
||||
AccessibleEventListener *keystroke_listener;
|
||||
#endif /* HAVE_CSPI */
|
||||
#ifdef HAVE_ATSPI
|
||||
AtspiAccessible *acc;
|
||||
gboolean follows_focus;
|
||||
AtspiDeviceListener *keystroke_listener;
|
||||
#endif /* HAVE_ATSPI */
|
||||
|
||||
#ifdef HAVE_FAKEKEY
|
||||
FakeKey *fakekey;
|
||||
@ -84,33 +85,33 @@ struct _EekboardClientClass {
|
||||
|
||||
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,
|
||||
gpointer user_data);
|
||||
static GdkFilterReturn filter_xkl_event (GdkXEvent *xev,
|
||||
GdkEvent *event,
|
||||
gpointer user_data);
|
||||
static void on_xkl_config_changed (XklEngine *xklengine,
|
||||
gpointer user_data);
|
||||
|
||||
static void on_xkl_state_changed
|
||||
(XklEngine *xklengine,
|
||||
XklEngineStateChange type,
|
||||
gint value,
|
||||
gboolean restore,
|
||||
gpointer user_data);
|
||||
static void on_xkl_state_changed (XklEngine *xklengine,
|
||||
XklEngineStateChange type,
|
||||
gint value,
|
||||
gboolean restore,
|
||||
gpointer user_data);
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
static SPIBoolean focus_listener_cb (const AccessibleEvent *event,
|
||||
void *user_data);
|
||||
#ifdef HAVE_ATSPI
|
||||
static void focus_listener_cb (const AtspiEvent *event,
|
||||
void *user_data);
|
||||
|
||||
static SPIBoolean keystroke_listener_cb
|
||||
(const AccessibleKeystroke *stroke,
|
||||
void *user_data);
|
||||
#endif /* HAVE_CSPI */
|
||||
static gboolean set_keyboard (EekboardClient *client,
|
||||
gboolean show,
|
||||
const gchar *model,
|
||||
const gchar *layouts,
|
||||
const gchar *options);
|
||||
static gboolean keystroke_listener_cb (const AtspiDeviceEvent *stroke,
|
||||
void *user_data);
|
||||
#endif /* HAVE_ATSPI */
|
||||
static gboolean set_keyboard (EekboardClient *client,
|
||||
gboolean show,
|
||||
EekLayout *layout);
|
||||
static gboolean set_xkl_keyboard (EekboardClient *client,
|
||||
gboolean show,
|
||||
const gchar *model,
|
||||
const gchar *layouts,
|
||||
const gchar *options);
|
||||
|
||||
static void
|
||||
eekboard_client_set_property (GObject *object,
|
||||
@ -178,10 +179,10 @@ eekboard_client_dispose (GObject *object)
|
||||
|
||||
eekboard_client_disable_xkl (client);
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
eekboard_client_disable_cspi_focus (client);
|
||||
eekboard_client_disable_cspi_keystroke (client);
|
||||
#endif /* HAVE_CSPI */
|
||||
#ifdef HAVE_ATSPI
|
||||
eekboard_client_disable_atspi_focus (client);
|
||||
eekboard_client_disable_atspi_keystroke (client);
|
||||
#endif /* HAVE_ATSPI */
|
||||
|
||||
#ifdef HAVE_FAKEKEY
|
||||
eekboard_client_disable_fakekey (client);
|
||||
@ -271,10 +272,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_CSPI
|
||||
client->focus_listener = NULL;
|
||||
#ifdef HAVE_ATSPI
|
||||
client->follows_focus = FALSE;
|
||||
client->keystroke_listener = NULL;
|
||||
#endif /* HAVE_CSPI */
|
||||
#endif /* HAVE_ATSPI */
|
||||
#ifdef HAVE_FAKEKEY
|
||||
client->fakekey = NULL;
|
||||
#endif /* HAVE_FAKEKEY */
|
||||
@ -286,18 +287,18 @@ eekboard_client_set_xkl_config (EekboardClient *client,
|
||||
const gchar *layouts,
|
||||
const gchar *options)
|
||||
{
|
||||
#ifdef HAVE_CSPI
|
||||
return set_keyboard (client,
|
||||
client->focus_listener ? FALSE : TRUE,
|
||||
model,
|
||||
layouts,
|
||||
options);
|
||||
#ifdef HAVE_ATSPI
|
||||
return set_xkl_keyboard (client,
|
||||
!client->follows_focus,
|
||||
model,
|
||||
layouts,
|
||||
options);
|
||||
#else
|
||||
return set_keyboard (client,
|
||||
TRUE,
|
||||
model,
|
||||
layouts,
|
||||
options);
|
||||
return set_xkl_keyboard (client,
|
||||
TRUE,
|
||||
model,
|
||||
layouts,
|
||||
options);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -337,11 +338,14 @@ eekboard_client_enable_xkl (EekboardClient *client)
|
||||
|
||||
xkl_engine_start_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
return set_keyboard (client, client->focus_listener ? FALSE : TRUE,
|
||||
NULL, NULL, NULL);
|
||||
#ifdef HAVE_ATSPI
|
||||
return set_xkl_keyboard (client,
|
||||
!client->follows_focus,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
#else
|
||||
return set_keyboard (client, TRUE, NULL, NULL, NULL);
|
||||
return set_xkl_keyboard (client, TRUE, NULL, NULL, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -360,80 +364,135 @@ eekboard_client_disable_xkl (EekboardClient *client)
|
||||
client->xkl_state_changed_handler);
|
||||
}
|
||||
|
||||
#ifdef HAVE_CSPI
|
||||
#ifdef HAVE_ATSPI
|
||||
gboolean
|
||||
eekboard_client_enable_cspi_focus (EekboardClient *client)
|
||||
eekboard_client_enable_atspi_focus (EekboardClient *client)
|
||||
{
|
||||
client->focus_listener = SPI_createAccessibleEventListener
|
||||
((AccessibleEventListenerCB)focus_listener_cb,
|
||||
client);
|
||||
GError *error;
|
||||
|
||||
if (!SPI_registerGlobalEventListener (client->focus_listener,
|
||||
"object:state-changed:focused"))
|
||||
error = NULL;
|
||||
if (!atspi_event_listener_register_from_callback
|
||||
((AtspiEventListenerCB)focus_listener_cb,
|
||||
client,
|
||||
NULL,
|
||||
"object:state-changed:focused",
|
||||
&error))
|
||||
return FALSE;
|
||||
|
||||
if (!SPI_registerGlobalEventListener (client->focus_listener,
|
||||
"focus:"))
|
||||
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_cspi_focus (EekboardClient *client)
|
||||
eekboard_client_disable_atspi_focus (EekboardClient *client)
|
||||
{
|
||||
if (client->focus_listener) {
|
||||
SPI_deregisterGlobalEventListenerAll (client->focus_listener);
|
||||
AccessibleEventListener_unref (client->focus_listener);
|
||||
client->focus_listener = NULL;
|
||||
}
|
||||
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_cspi_keystroke (EekboardClient *client)
|
||||
eekboard_client_enable_atspi_keystroke (EekboardClient *client)
|
||||
{
|
||||
GError *error;
|
||||
|
||||
client->keystroke_listener =
|
||||
SPI_createAccessibleKeystrokeListener (keystroke_listener_cb,
|
||||
client);
|
||||
atspi_device_listener_new ((AtspiDeviceListenerCB)keystroke_listener_cb,
|
||||
NULL,
|
||||
client);
|
||||
|
||||
if (!SPI_registerAccessibleKeystrokeListener
|
||||
error = NULL;
|
||||
if (!atspi_register_keystroke_listener
|
||||
(client->keystroke_listener,
|
||||
SPI_KEYSET_ALL_KEYS,
|
||||
NULL,
|
||||
0,
|
||||
SPI_KEY_PRESSED |
|
||||
SPI_KEY_RELEASED,
|
||||
SPI_KEYLISTENER_NOSYNC))
|
||||
ATSPI_KEY_PRESSED,
|
||||
ATSPI_KEYLISTENER_NOSYNC,
|
||||
&error))
|
||||
return FALSE;
|
||||
|
||||
error = NULL;
|
||||
if (!atspi_register_keystroke_listener
|
||||
(client->keystroke_listener,
|
||||
NULL,
|
||||
0,
|
||||
ATSPI_KEY_RELEASED,
|
||||
ATSPI_KEYLISTENER_NOSYNC,
|
||||
&error))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
eekboard_client_disable_cspi_keystroke (EekboardClient *client)
|
||||
eekboard_client_disable_atspi_keystroke (EekboardClient *client)
|
||||
{
|
||||
if (client->keystroke_listener) {
|
||||
SPI_deregisterAccessibleKeystrokeListener (client->keystroke_listener,
|
||||
0);
|
||||
AccessibleKeystrokeListener_unref (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);
|
||||
client->keystroke_listener = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static SPIBoolean
|
||||
focus_listener_cb (const AccessibleEvent *event,
|
||||
void *user_data)
|
||||
static void
|
||||
focus_listener_cb (const AtspiEvent *event,
|
||||
void *user_data)
|
||||
{
|
||||
EekboardClient *client = user_data;
|
||||
Accessible *accessible = event->source;
|
||||
AccessibleStateSet *state_set = Accessible_getStateSet (accessible);
|
||||
AccessibleRole role = Accessible_getRole (accessible);
|
||||
AtspiAccessible *accessible = event->source;
|
||||
AtspiStateSet *state_set = atspi_accessible_get_state_set (accessible);
|
||||
AtspiRole role;
|
||||
GError *error;
|
||||
|
||||
if (AccessibleStateSet_contains (state_set, SPI_STATE_EDITABLE) ||
|
||||
role == SPI_ROLE_TERMINAL) {
|
||||
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) {
|
||||
switch (role) {
|
||||
case SPI_ROLE_TEXT:
|
||||
case SPI_ROLE_PARAGRAPH:
|
||||
case SPI_ROLE_PASSWORD_TEXT:
|
||||
case SPI_ROLE_TERMINAL:
|
||||
case ATSPI_ROLE_TEXT:
|
||||
case ATSPI_ROLE_PARAGRAPH:
|
||||
case ATSPI_ROLE_PASSWORD_TEXT:
|
||||
case ATSPI_ROLE_TERMINAL:
|
||||
if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
|
||||
client->acc = accessible;
|
||||
eekboard_context_show_keyboard (client->context, NULL);
|
||||
@ -442,7 +501,7 @@ focus_listener_cb (const AccessibleEvent *event,
|
||||
eekboard_context_hide_keyboard (client->context, NULL);
|
||||
}
|
||||
break;
|
||||
case SPI_ROLE_ENTRY:
|
||||
case ATSPI_ROLE_ENTRY:
|
||||
if (strncmp (event->type, "focus", 5) == 0 || event->detail1 == 1) {
|
||||
client->acc = accessible;
|
||||
eekboard_context_show_keyboard (client->context, NULL);
|
||||
@ -458,13 +517,11 @@ focus_listener_cb (const AccessibleEvent *event,
|
||||
} else {
|
||||
eekboard_context_hide_keyboard (client->context, NULL);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static SPIBoolean
|
||||
keystroke_listener_cb (const AccessibleKeystroke *stroke,
|
||||
void *user_data)
|
||||
static gboolean
|
||||
keystroke_listener_cb (const AtspiDeviceEvent *stroke,
|
||||
void *user_data)
|
||||
{
|
||||
EekboardClient *client = user_data;
|
||||
EekKey *key;
|
||||
@ -472,22 +529,22 @@ keystroke_listener_cb (const AccessibleKeystroke *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->keycode);
|
||||
stroke->hw_code);
|
||||
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 == SPI_KEY_PRESSED) {
|
||||
eekboard_context_press_key (client->context, stroke->keycode, NULL);
|
||||
if (stroke->type == ATSPI_KEY_PRESSED) {
|
||||
eekboard_context_press_key (client->context, stroke->hw_code, NULL);
|
||||
} else {
|
||||
eekboard_context_release_key (client->context, stroke->keycode, NULL);
|
||||
eekboard_context_release_key (client->context, stroke->hw_code, NULL);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif /* HAVE_CSPI */
|
||||
#endif /* HAVE_ATSPI */
|
||||
|
||||
EekboardClient *
|
||||
eekboard_client_new (GDBusConnection *connection)
|
||||
@ -519,7 +576,7 @@ on_xkl_config_changed (XklEngine *xklengine,
|
||||
EekboardClient *client = user_data;
|
||||
gboolean retval;
|
||||
|
||||
retval = set_keyboard (client, FALSE, NULL, NULL, NULL);
|
||||
retval = set_xkl_keyboard (client, FALSE, NULL, NULL, NULL);
|
||||
g_return_if_fail (retval);
|
||||
|
||||
#ifdef HAVE_FAKEKEY
|
||||
@ -530,16 +587,40 @@ on_xkl_config_changed (XklEngine *xklengine,
|
||||
|
||||
static gboolean
|
||||
set_keyboard (EekboardClient *client,
|
||||
gboolean show,
|
||||
const gchar *model,
|
||||
const gchar *layouts,
|
||||
const gchar *options)
|
||||
gboolean show,
|
||||
EekLayout *layout)
|
||||
{
|
||||
EekLayout *layout;
|
||||
gchar *keyboard_name;
|
||||
static gint keyboard_serial = 0;
|
||||
guint keyboard_id;
|
||||
|
||||
client->keyboard = eek_keyboard_new (layout, CSW, CSH);
|
||||
eek_keyboard_set_modifier_behavior (client->keyboard,
|
||||
EEK_MODIFIER_BEHAVIOR_LATCH);
|
||||
|
||||
keyboard_name = g_strdup_printf ("keyboard%d", keyboard_serial++);
|
||||
eek_element_set_name (EEK_ELEMENT(client->keyboard), keyboard_name);
|
||||
g_free (keyboard_name);
|
||||
|
||||
keyboard_id = eekboard_context_add_keyboard (client->context,
|
||||
client->keyboard,
|
||||
NULL);
|
||||
eekboard_context_set_keyboard (client->context, keyboard_id, NULL);
|
||||
if (show)
|
||||
eekboard_context_show_keyboard (client->context, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
set_xkl_keyboard (EekboardClient *client,
|
||||
gboolean show,
|
||||
const gchar *model,
|
||||
const gchar *layouts,
|
||||
const gchar *options)
|
||||
{
|
||||
EekLayout *layout;
|
||||
gboolean retval;
|
||||
|
||||
if (client->keyboard)
|
||||
g_object_unref (client->keyboard);
|
||||
layout = eek_xkl_layout_new ();
|
||||
@ -583,22 +664,9 @@ set_keyboard (EekboardClient *client,
|
||||
}
|
||||
}
|
||||
|
||||
client->keyboard = eek_keyboard_new (layout, CSW, CSH);
|
||||
eek_keyboard_set_modifier_behavior (client->keyboard,
|
||||
EEK_MODIFIER_BEHAVIOR_LATCH);
|
||||
|
||||
keyboard_name = g_strdup_printf ("keyboard%d", keyboard_serial++);
|
||||
eek_element_set_name (EEK_ELEMENT(client->keyboard), keyboard_name);
|
||||
g_free (keyboard_name);
|
||||
|
||||
keyboard_id = eekboard_context_add_keyboard (client->context,
|
||||
client->keyboard,
|
||||
NULL);
|
||||
eekboard_context_set_keyboard (client->context, keyboard_id, NULL);
|
||||
if (show)
|
||||
eekboard_context_show_keyboard (client->context, NULL);
|
||||
|
||||
return TRUE;
|
||||
retval = set_keyboard (client, show, layout);
|
||||
g_object_unref (layout);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -648,12 +716,19 @@ 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 = 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);
|
||||
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);
|
||||
|
||||
fakekey_send_keyevent (client->fakekey,
|
||||
keycode,
|
||||
@ -715,4 +790,33 @@ eekboard_client_disable_fakekey (EekboardClient *client)
|
||||
g_signal_handler_disconnect (client->keyboard,
|
||||
client->key_released_handler);
|
||||
}
|
||||
|
||||
gboolean
|
||||
eekboard_client_load_keyboard_from_file (EekboardClient *client,
|
||||
const gchar *keyboard_file)
|
||||
{
|
||||
GFile *file;
|
||||
GFileInputStream *input;
|
||||
GError *error;
|
||||
EekLayout *layout;
|
||||
gboolean retval;
|
||||
|
||||
file = g_file_new_for_path (keyboard_file);
|
||||
|
||||
error = NULL;
|
||||
input = g_file_read (file, NULL, &error);
|
||||
if (input == NULL)
|
||||
return FALSE;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
#endif /* HAVE_FAKEKEY */
|
||||
|
||||
11
src/client.h
11
src/client.h
@ -33,6 +33,9 @@ typedef struct _EekboardClient EekboardClient;
|
||||
|
||||
EekboardClient * eekboard_client_new (GDBusConnection *connection);
|
||||
|
||||
gboolean eekboard_client_load_keyboard_from_file
|
||||
(EekboardClient *client,
|
||||
const gchar *file);
|
||||
gboolean eekboard_client_set_xkl_config (EekboardClient *client,
|
||||
const gchar *model,
|
||||
const gchar *layouts,
|
||||
@ -41,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_cspi_focus
|
||||
gboolean eekboard_client_enable_atspi_focus
|
||||
(EekboardClient *client);
|
||||
void eekboard_client_disable_cspi_focus
|
||||
void eekboard_client_disable_atspi_focus
|
||||
(EekboardClient *client);
|
||||
|
||||
gboolean eekboard_client_enable_cspi_keystroke
|
||||
gboolean eekboard_client_enable_atspi_keystroke
|
||||
(EekboardClient *client);
|
||||
void eekboard_client_disable_cspi_keystroke
|
||||
void eekboard_client_disable_atspi_keystroke
|
||||
(EekboardClient *client);
|
||||
|
||||
gboolean eekboard_client_enable_fakekey (EekboardClient *client);
|
||||
|
||||
@ -141,7 +141,10 @@ on_allocation_changed (ClutterActor *stage,
|
||||
ClutterAllocationFlags flags,
|
||||
gpointer user_data)
|
||||
{
|
||||
ClutterActor *actor = user_data;
|
||||
ClutterActor *actor =
|
||||
clutter_container_find_child_by_name (CLUTTER_CONTAINER(stage),
|
||||
"keyboard");
|
||||
|
||||
clutter_actor_set_size (actor,
|
||||
box->x2 - box->x1,
|
||||
box->y2 - box->y1);
|
||||
@ -234,12 +237,11 @@ set_geometry (ServerContext *context)
|
||||
g_signal_connect (stage,
|
||||
"allocation-changed",
|
||||
G_CALLBACK(on_allocation_changed),
|
||||
actor);
|
||||
#else
|
||||
NULL);
|
||||
#endif
|
||||
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));
|
||||
@ -265,6 +267,7 @@ 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);
|
||||
|
||||
Reference in New Issue
Block a user