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
84 changed files with 897 additions and 2556 deletions

12
.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,12 +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
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
@ -72,11 +71,6 @@ po/*.gmo
po/Makefile.in.in
po/POTFILES
po/stamp-it
po/.intltool-merge-cache
bindings/vala/*.vapi
py-compile
data/org.fedorahosted.eekboard.gschema.xml
data/eekboard-server.service
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: libXtst, at-spi2-core, IBus, 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: libXtst, at-spi2-core, IBus, Clutter, Clutter-Gtk, Python, Vala, gobje
$ 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

@ -26,49 +26,25 @@ dist_vapi_DATA = \
MAINTAINERCLEANFILES = $(dist_vapi_DATA)
eek-$(EEK_API_VERSION).vapi:
$(VAPIGEN_V)$(VAPIGEN) \
--library eek-$(EEK_API_VERSION) \
--pkg gio-2.0 \
vapigen --library eek-$(EEK_API_VERSION) \
eek-$(EEK_API_VERSION)/eek-$(EEK_API_VERSION).gi
eek-clutter-$(EEK_API_VERSION).vapi: eek-$(EEK_API_VERSION).vapi
$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir) \
--library eek-clutter-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) \
--pkg clutter-1.0 \
--pkg gio-2.0 \
--pkg atk \
vapigen --vapidir=$(builddir) --library eek-clutter-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) --pkg clutter-1.0 \
eek-clutter-$(EEK_API_VERSION)/eek-clutter-$(EEK_API_VERSION).gi
eek-gtk-$(EEK_API_VERSION).vapi: eek-$(EEK_API_VERSION).vapi
$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir) \
--library eek-gtk-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) \
--pkg gtk+-2.0 \
vapigen --vapidir=$(builddir) --library eek-gtk-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) --pkg gtk+-2.0 \
eek-gtk-$(EEK_API_VERSION)/eek-gtk-$(EEK_API_VERSION).gi
eek-xkb-$(EEK_API_VERSION).vapi: eek-$(EEK_API_VERSION).vapi
$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir) \
--library eek-xkb-$(EEK_API_VERSION) \
vapigen --vapidir=$(builddir) --library eek-xkb-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) \
--pkg gio-2.0 \
eek-xkb-$(EEK_API_VERSION)/eek-xkb-$(EEK_API_VERSION).gi
eek-xkl-$(EEK_API_VERSION).vapi: eek-xkb-$(EEK_API_VERSION).vapi
$(VAPIGEN_V)$(VAPIGEN) --vapidir=$(builddir) \
--library eek-xkl-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) \
--pkg eek-xkb-$(EEK_API_VERSION) --pkg gio-2.0 \
vapigen --vapidir=$(builddir) --library eek-xkl-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) --pkg eek-xkb-$(EEK_API_VERSION) \
eek-xkl-$(EEK_API_VERSION)/eek-xkl-$(EEK_API_VERSION).gi
eekboard-$(EEK_API_VERSION).vapi:
$(VAPIGEN_V)$(VAPIGEN) \
--library eekboard-$(EEK_API_VERSION) \
--pkg eek-$(EEK_API_VERSION) \
--pkg gio-2.0 \
eek-$(EEK_API_VERSION)/eek-$(EEK_API_VERSION).gi
# set up the verbosity rules to avoid some build noise
VAPIGEN_V = $(VAPIGEN_V_$(V))
VAPIGEN_V_ = $(VAPIGEN_V_$(AM_DEFAULT_VERBOSITY))
VAPIGEN_V_0 = @echo " VAPIG " $^;

View File

@ -1,16 +1,9 @@
include/eek-0.90/eek/eek-container.h
include/eek-0.90/eek/eek-element.h
include/eek-0.90/eek/eek-enumtypes.h
include/eek-0.90/eek/eek-keyboard.h
include/eek-0.90/eek/eek-key.h
include/eek-0.90/eek/eek-keysym.h
include/eek-0.90/eek/eek-layout.h
include/eek-0.90/eek/eek-section.h
include/eek-0.90/eek/eek-serializable.h
include/eek-0.90/eek/eek-symbol.h
include/eek-0.90/eek/eek-symbol-matrix.h
include/eek-0.90/eek/eek-theme.h
include/eek-0.90/eek/eek-types.h
include/eek-0.90/eek/eek-xml.h
include/eek-0.90/eek/eek-xml-layout.h
include/eek-0.1/eek/eek-layout.h
include/eek-0.1/eek/eek-element.h
include/eek-0.1/eek/eek-container.h
include/eek-0.1/eek/eek-keyboard.h
include/eek-0.1/eek/eek-section.h
include/eek-0.1/eek/eek-key.h
include/eek-0.1/eek/eek-types.h
include/eek-0.1/eek/eek-keysym.h
lib/libeek.so

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,6 @@
include/eek-0.90/eek/eek-clutter-keyboard.h
include/eek-0.1/eek/eek-clutter-keyboard.h
include/eek-0.1/eek/eek-clutter-section.h
include/eek-0.1/eek/eek-clutter-key.h
include/eek-0.1/eek/eek-clutter-drawing-context.h
lib/libeek-clutter.so

View File

@ -1,28 +1,85 @@
<?xml version="1.0"?>
<api version="1.0">
<namespace name="EekClutter">
<object name="EekClutterKeyboard" parent="ClutterGroup" type-name="EekClutterKeyboard" get-type="eek_clutter_keyboard_get_type">
<implements>
<interface name="ClutterScriptable"/>
<interface name="ClutterAnimatable"/>
<interface name="AtkImplementor"/>
<interface name="ClutterContainer"/>
</implements>
<constructor name="new" symbol="eek_clutter_keyboard_new">
<return-type type="ClutterActor*"/>
<object name="EekClutterDrawingContext" parent="GInitiallyUnowned" type-name="EekClutterDrawingContext" get-type="eek_clutter_drawing_context_get_type">
<method name="get_category_font" symbol="eek_clutter_drawing_context_get_category_font">
<return-type type="PangoFontDescription*"/>
<parameters>
<parameter name="keyboard" type="EekKeyboard*"/>
</parameters>
</constructor>
<method name="set_theme" symbol="eek_clutter_keyboard_set_theme">
<return-type type="void"/>
<parameters>
<parameter name="keyboard" type="EekClutterKeyboard*"/>
<parameter name="theme" type="EekTheme*"/>
<parameter name="context" type="EekClutterDrawingContext*"/>
<parameter name="category" type="EekKeysymCategory"/>
</parameters>
</method>
<method name="get_outline_texture" symbol="eek_clutter_drawing_context_get_outline_texture">
<return-type type="ClutterActor*"/>
<parameters>
<parameter name="context" type="EekClutterDrawingContext*"/>
<parameter name="outline" type="EekOutline*"/>
</parameters>
</method>
<constructor name="new" symbol="eek_clutter_drawing_context_new">
<return-type type="EekClutterDrawingContext*"/>
</constructor>
<method name="set_category_font" symbol="eek_clutter_drawing_context_set_category_font">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekClutterDrawingContext*"/>
<parameter name="category" type="EekKeysymCategory"/>
<parameter name="fonts" type="PangoFontDescription*"/>
</parameters>
</method>
<method name="set_outline_texture" symbol="eek_clutter_drawing_context_set_outline_texture">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekClutterDrawingContext*"/>
<parameter name="outline" type="EekOutline*"/>
<parameter name="texture" type="ClutterActor*"/>
</parameters>
</method>
<property name="keyboard" type="EekKeyboard*" readable="0" writable="1" construct="0" construct-only="1"/>
</object>
<object name="EekClutterKey" parent="EekKey" type-name="EekClutterKey" get-type="eek_clutter_key_get_type">
<method name="get_actor" symbol="eek_clutter_key_get_actor">
<return-type type="ClutterActor*"/>
<parameters>
<parameter name="key" type="EekClutterKey*"/>
</parameters>
</method>
<constructor name="new" symbol="eek_clutter_key_new">
<return-type type="EekKey*"/>
<parameters>
<parameter name="context" type="EekClutterDrawingContext*"/>
<parameter name="column" type="gint"/>
<parameter name="row" type="gint"/>
</parameters>
</constructor>
</object>
<object name="EekClutterKeyboard" parent="EekKeyboard" type-name="EekClutterKeyboard" get-type="eek_clutter_keyboard_get_type">
<method name="get_actor" symbol="eek_clutter_keyboard_get_actor">
<return-type type="ClutterActor*"/>
<parameters>
<parameter name="keyboard" type="EekClutterKeyboard*"/>
</parameters>
</method>
<constructor name="new" symbol="eek_clutter_keyboard_new">
<return-type type="EekKeyboard*"/>
</constructor>
</object>
<object name="EekClutterSection" parent="EekSection" type-name="EekClutterSection" get-type="eek_clutter_section_get_type">
<method name="get_actor" symbol="eek_clutter_section_get_actor">
<return-type type="ClutterActor*"/>
<parameters>
<parameter name="section" type="EekClutterSection*"/>
</parameters>
</method>
<constructor name="new" symbol="eek_clutter_section_new">
<return-type type="EekSection*"/>
<parameters>
<parameter name="context" type="EekClutterDrawingContext*"/>
</parameters>
</constructor>
</object>
<constant name="EEK_CLUTTER_DRAWING_CONTEXT_H" type="int" value="1"/>
<constant name="EEK_CLUTTER_KEYBOARD_H" type="int" value="1"/>
<constant name="EEK_CLUTTER_KEY_H" type="int" value="1"/>
<constant name="EEK_CLUTTER_SECTION_H" type="int" value="1"/>
</namespace>
</api>

View File

@ -1,2 +1,3 @@
include/eek-0.90/eek/eek-gtk-keyboard.h
include/eek-0.1/eek/eek-gtk-keyboard.h
include/eek-0.1/eek/eek-gtk.h
lib/libeek-gtk.so

View File

@ -1,26 +1,18 @@
<?xml version="1.0"?>
<api version="1.0">
<namespace name="EekGtk">
<object name="EekGtkKeyboard" parent="GtkDrawingArea" type-name="EekGtkKeyboard" get-type="eek_gtk_keyboard_get_type">
<implements>
<interface name="AtkImplementor"/>
<interface name="GtkBuildable"/>
</implements>
<constructor name="new" symbol="eek_gtk_keyboard_new">
<object name="EekGtkKeyboard" parent="EekKeyboard" type-name="EekGtkKeyboard" get-type="eek_gtk_keyboard_get_type">
<method name="get_widget" symbol="eek_gtk_keyboard_get_widget">
<return-type type="GtkWidget*"/>
<parameters>
<parameter name="keyboard" type="EekKeyboard*"/>
</parameters>
</constructor>
<method name="set_theme" symbol="eek_gtk_keyboard_set_theme">
<return-type type="void"/>
<parameters>
<parameter name="keyboard" type="EekGtkKeyboard*"/>
<parameter name="theme" type="EekTheme*"/>
</parameters>
</method>
<property name="keyboard" type="EekKeyboard*" readable="0" writable="1" construct="0" construct-only="1"/>
<constructor name="new" symbol="eek_gtk_keyboard_new">
<return-type type="EekKeyboard*"/>
</constructor>
</object>
<constant name="EEK_GTK_H" type="int" value="1"/>
<constant name="EEK_GTK_KEYBOARD_H" type="int" value="1"/>
</namespace>
</api>

View File

@ -1,2 +1,2 @@
include/eek-0.90/eek/eek-xkb-layout.h
include/eek-0.1/eek/eek-xkb-layout.h
lib/libeek-xkb.so

View File

@ -1,7 +1,10 @@
<?xml version="1.0"?>
<api version="1.0">
<namespace name="EekXkb">
<object name="EekXkbLayout" parent="EekLayout" type-name="EekXkbLayout" get-type="eek_xkb_layout_get_type">
<object name="EekXkbLayout" parent="GInitiallyUnowned" type-name="EekXkbLayout" get-type="eek_xkb_layout_get_type">
<implements>
<interface name="EekLayout"/>
</implements>
<method name="get_geometry" symbol="eek_xkb_layout_get_geometry">
<return-type type="gchar*"/>
<parameters>
@ -46,19 +49,6 @@
</parameters>
</method>
-->
<method name="set_names_full" symbol="eek_xkb_layout_set_names_full">
<return-type type="gboolean"/>
<parameters>
<parameter name="layout" type="EekXkbLayout*"/>
</parameters>
</method>
<method name="set_names_full_valist" symbol="eek_xkb_layout_set_names_full_valist">
<return-type type="gboolean"/>
<parameters>
<parameter name="layout" type="EekXkbLayout*"/>
<parameter name="var_args" type="va_list"/>
</parameters>
</method>
<method name="set_symbols" symbol="eek_xkb_layout_set_symbols">
<return-type type="gboolean"/>
<parameters>

View File

@ -1,2 +1,3 @@
include/eek-0.90/eek/eek-xkl-layout.h
include/eek-0.1/eek/eek-xkl-layout.h
lib/libeek-xkl.so

View File

@ -2,6 +2,9 @@
<api version="1.0">
<namespace name="EekXkl">
<object name="EekXklLayout" parent="EekXkbLayout" type-name="EekXklLayout" get-type="eek_xkl_layout_get_type">
<implements>
<interface name="EekLayout"/>
</implements>
<method name="disable_option" symbol="eek_xkl_layout_disable_option">
<return-type type="gboolean"/>
<parameters>
@ -50,25 +53,6 @@
<constructor name="new" symbol="eek_xkl_layout_new">
<return-type type="EekLayout*"/>
</constructor>
<!--
<method name="set_config" symbol="eek_xkl_layout_set_config">
<return-type type="gboolean"/>
<parameters>
<parameter name="layout" type="EekXklLayout*"/>
<parameter name="config" type="XklConfigRec*"/>
</parameters>
</method>
-->
<method name="set_config_full" symbol="eek_xkl_layout_set_config_full">
<return-type type="gboolean"/>
<parameters>
<parameter name="layout" type="EekXklLayout*"/>
<parameter name="model" type="gchar*"/>
<parameter name="layouts" type="gchar**"/>
<parameter name="variants" type="gchar**"/>
<parameter name="options" type="gchar**"/>
</parameters>
</method>
<method name="set_layouts" symbol="eek_xkl_layout_set_layouts">
<return-type type="gboolean"/>
<parameters>

View File

@ -1,2 +0,0 @@
include/eekboard-0.90/eekboard
lib/libeekboard.so

View File

@ -1,194 +0,0 @@
<?xml version="1.0"?>
<api version="1.0">
<namespace name="Eekboard">
<object name="EekboardContext" parent="GDBusProxy" type-name="EekboardContext" get-type="eekboard_context_get_type">
<implements>
<interface name="GInitable"/>
<interface name="GAsyncInitable"/>
</implements>
<method name="add_keyboard" symbol="eekboard_context_add_keyboard">
<return-type type="guint"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="keyboard" type="EekKeyboard*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="hide_keyboard" symbol="eekboard_context_hide_keyboard">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="is_enabled" symbol="eekboard_context_is_enabled">
<return-type type="gboolean"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
</parameters>
</method>
<method name="is_keyboard_visible" symbol="eekboard_context_is_keyboard_visible">
<return-type type="gboolean"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
</parameters>
</method>
<constructor name="new" symbol="eekboard_context_new">
<return-type type="EekboardContext*"/>
<parameters>
<parameter name="connection" type="GDBusConnection*"/>
<parameter name="object_path" type="gchar*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</constructor>
<method name="press_key" symbol="eekboard_context_press_key">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="keycode" type="guint"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="release_key" symbol="eekboard_context_release_key">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="keycode" type="guint"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="remove_keyboard" symbol="eekboard_context_remove_keyboard">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="keyboard_id" type="guint"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="set_enabled" symbol="eekboard_context_set_enabled">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="enabled" type="gboolean"/>
</parameters>
</method>
<method name="set_fullscreen" symbol="eekboard_context_set_fullscreen">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="fullscreen" type="gboolean"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="set_group" symbol="eekboard_context_set_group">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="group" type="gint"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="set_keyboard" symbol="eekboard_context_set_keyboard">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="keyboard_id" type="guint"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="show_keyboard" symbol="eekboard_context_show_keyboard">
<return-type type="void"/>
<parameters>
<parameter name="context" type="EekboardContext*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<property name="keyboard-visible" type="gboolean" readable="1" writable="0" construct="0" construct-only="0"/>
<signal name="destroyed" when="LAST">
<return-type type="void"/>
<parameters>
<parameter name="self" type="EekboardContext*"/>
</parameters>
</signal>
<signal name="disabled" when="LAST">
<return-type type="void"/>
<parameters>
<parameter name="self" type="EekboardContext*"/>
</parameters>
</signal>
<signal name="enabled" when="LAST">
<return-type type="void"/>
<parameters>
<parameter name="self" type="EekboardContext*"/>
</parameters>
</signal>
<signal name="key-pressed" when="LAST">
<return-type type="void"/>
<parameters>
<parameter name="self" type="EekboardContext*"/>
<parameter name="keycode" type="guint"/>
</parameters>
</signal>
<signal name="key-released" when="LAST">
<return-type type="void"/>
<parameters>
<parameter name="self" type="EekboardContext*"/>
<parameter name="keycode" type="guint"/>
</parameters>
</signal>
</object>
<object name="EekboardEekboard" parent="GDBusProxy" type-name="EekboardEekboard" get-type="eekboard_eekboard_get_type">
<implements>
<interface name="GInitable"/>
<interface name="GAsyncInitable"/>
</implements>
<method name="create_context" symbol="eekboard_eekboard_create_context">
<return-type type="EekboardContext*"/>
<parameters>
<parameter name="eekboard" type="EekboardEekboard*"/>
<parameter name="client_name" type="gchar*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="destroy_context" symbol="eekboard_eekboard_destroy_context">
<return-type type="void"/>
<parameters>
<parameter name="eekboard" type="EekboardEekboard*"/>
<parameter name="context" type="EekboardContext*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<constructor name="new" symbol="eekboard_eekboard_new">
<return-type type="EekboardEekboard*"/>
<parameters>
<parameter name="connection" type="GDBusConnection*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</constructor>
<method name="pop_context" symbol="eekboard_eekboard_pop_context">
<return-type type="void"/>
<parameters>
<parameter name="eekboard" type="EekboardEekboard*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<method name="push_context" symbol="eekboard_eekboard_push_context">
<return-type type="void"/>
<parameters>
<parameter name="eekboard" type="EekboardEekboard*"/>
<parameter name="context" type="EekboardContext*"/>
<parameter name="cancellable" type="GCancellable*"/>
</parameters>
</method>
<signal name="destroyed" when="LAST">
<return-type type="void"/>
<parameters>
<parameter name="self" type="EekboardEekboard*"/>
</parameters>
</signal>
</object>
<constant name="EEKBOARD_CONTEXT_H" type="int" value="1"/>
<constant name="EEKBOARD_EEKBOARD_H" type="int" value="1"/>
<constant name="EEKBOARD_H" type="int" value="1"/>
</namespace>
</api>

View File

@ -1 +0,0 @@
Eekboard cheader_filename="eekboard/eekboard.h"

View File

@ -1 +0,0 @@
Eekboard

View File

@ -20,7 +20,7 @@ AC_PREREQ(2.63)
dnl AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_MACRO_DIR([m4])
AC_INIT([eekboard], [1.0.0], [ueno@unixuser.org])
AC_INIT([eekboard], [0.90.5], [ueno@unixuser.org])
dnl Init automake
AM_INIT_AUTOMAKE
@ -85,18 +85,18 @@ 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])])
GLIB_GSETTINGS
PKG_CHECK_MODULES([PANGOCAIRO], [pangocairo], ,
[AC_MSG_ERROR([PangoCairo not found])])
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], ,
@ -104,102 +104,52 @@ PKG_CHECK_MODULES([LIBXKLAVIER], [libxklavier x11], ,
PKG_CHECK_MODULES([LIBCROCO], [libcroco-0.6], ,
[AC_MSG_ERROR([libcroco not found])])
dnl use XTest to generate key events
AC_MSG_CHECKING([whether you enable XTest])
AC_ARG_ENABLE(xtest,
AS_HELP_STRING([--enable-xtest=no/yes],
[Enable XTest default=yes]),
enable_xtest=$enableval,
enable_xtest=yes)
dnl use libfakekey to generate key events
AC_MSG_CHECKING([whether you enable fakekey])
AC_ARG_ENABLE(fakekey,
AS_HELP_STRING([--enable-fakekey=no/yes],
[Enable fakekey default=yes]),,
enable_fakekey=yes)
if test x$enable_xtest = xyes; then
PKG_CHECK_MODULES([XTEST], [xtst], , enable_xtest=no)
if test x$enable_xtest = xyes; then
AC_DEFINE([HAVE_XTEST], [1], [Define if XTest is found])
if test x$enable_fakekey = xyes; then
PKG_CHECK_MODULES([FAKEKEY], [libfakekey], ,
[AC_MSG_ERROR([fakekey not found])])
AC_DEFINE([HAVE_FAKEKEY], [1], [Define if fakekey is found])
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)
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
AM_CONDITIONAL(ENABLE_XTEST, [test x$enable_xtest = xyes])
AC_MSG_RESULT($enable_xtest)
dnl use X to mark the fullscreen window as dock
AC_MSG_CHECKING([whether you enable X dock])
AC_ARG_ENABLE(x-dock,
AS_HELP_STRING([--enable-x-dock=no/yes],
[Enable X dock default=yes]),
enable_x_dock=$enableval,
enable_x_dock=yes)
if test x$enable_x_dock = xyes; then
PKG_CHECK_MODULES([XDOCK], [x], , enable_x_dock=no)
if test x$enable_x_dock = xyes; then
AC_DEFINE([HAVE_XDOCK], [1], [Define if X dock is found])
fi
fi
AM_CONDITIONAL(ENABLE_XDOCK, [test x$enable_x_dock = xyes])
AC_MSG_RESULT($enable_x_dock)
focus_listeners=""
keystroke_listeners=""
focus_listeners=""
keystroke_listeners=""
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=yes]),
enable_atspi=$enableval,
enable_atspi=yes)
if test x$enable_atspi = xyes; then
PKG_CHECK_MODULES([ATSPI2], [atspi-2 dbus-glib-1], , enable_atspi=no)
if test x$enable_atspi = xyes; then
AC_DEFINE([HAVE_ATSPI], [1], [Define if AT-SPI 2 is found])
focus_listeners="atspi $focus_listeners"
keystroke_listeners="atspi $keystroke_listeners"
fi
fi
AC_MSG_RESULT($enable_atspi)
AM_CONDITIONAL(ENABLE_ATSPI, [test x$enable_atspi = xyes])
dnl use IBus to capture focus events
AC_MSG_CHECKING([whether you enable IBus focus tracking])
AC_ARG_ENABLE(ibus,
AS_HELP_STRING([--enable-ibus=no/yes],
[Enable IBus focus tracking default=yes]),
enable_ibus=$enableval,
enable_ibus=yes)
if test x$enable_ibus = xyes; then
PKG_CHECK_MODULES([IBUS], [ibus-1.0 >= 1.3.99], , enable_ibus=no)
if test x$enable_ibus = xyes; then
AC_DEFINE([HAVE_IBUS], [1], [Define if IBus is found])
focus_listeners="ibus $focus_listeners"
fi
fi
AC_MSG_RESULT($enable_ibus)
AM_CONDITIONAL(ENABLE_IBUS, [test x$enable_ibus = xyes])
if test -n "$focus_listeners"; then
AC_DEFINE(ENABLE_FOCUS_LISTENER, [1], [Define if eekboard can follow focus changes])
fi
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])
AC_ARG_ENABLE(python,
AS_HELP_STRING([--enable-python=no/yes],
[Enable Python language binding default=yes]),
enable_python=$enableval,
[Enable Python language binding default=yes]),,
enable_python=yes)
dnl check python unconditionally to re-generate
dnl eek/*-keysym-labels.txt when maintainer-mode enabled
AM_PATH_PYTHON([2.5], , enable_python=no)
AC_MSG_RESULT($enable_python)
AM_CONDITIONAL(ENABLE_PYTHON, [test x$enable_python = xyes])
if test x"$enable_python" = x"yes"; then
if test x$enable_python = xyes; then
AC_PATH_PROGS(PYTHON_CONFIG, [python$PYTHON_VERSION-config python-config])
# check python
AM_PATH_PYTHON([2.5])
AC_PATH_PROG(PYTHON_CONFIG, python$PYTHON_VERSION-config)
if test x"$PYTHON_CONFIG" = x""; then
AC_PATH_PROG(PYTHON_CONFIG, python-config)
fi
if test x"$PYTHON_CONFIG" != x""; then
PYTHON_CFLAGS=`$PYTHON_CONFIG --includes`
PYTHON_LIBS=`$PYTHON_CONFIG --libs`
@ -211,85 +161,57 @@ if test x"$enable_python" = x"yes"; then
AC_SUBST(PYTHON_CFLAGS)
AC_SUBST(PYTHON_INCLUDES)
AC_SUBST(PYTHON_LIBS)
else
enable_python="no (disabled, use --enable-python to enable)"
fi
fi
AC_MSG_RESULT($enable_python)
AM_CONDITIONAL(ENABLE_PYTHON, [test x$enable_python = xyes])
GOBJECT_INTROSPECTION_CHECK([0.9.0])
dnl Vala langauge binding
AC_MSG_CHECKING([whether you enable Vala language support])
AC_ARG_ENABLE(vala,
AS_HELP_STRING([--enable-vala=no/yes],
[Enable Vala language binding default=yes]),
enable_vala=$enableval,
[Enable Vala language binding default=yes]),,
enable_vala=yes)
if test x$enable_vala = xyes; then
if test "x$INTROSPECTION_SCANNER" = x; then
enable_vala=no
AC_MSG_WARN([GObject-Introspection must be enabled for Vala bindings])
fi
AM_PROG_VALAC([0.10.0])
have_vala=yes
AC_PATH_PROG(VALAC, valac, valac)
AC_SUBST(VALAC)
AC_SUBST(VALAFLAGS)
AC_PATH_PROG([VAPIGEN], [vapigen], [false])
if test "x$VAPIGEN" = "xfalse"; then
enable_vala=no
AC_MSG_WARN([vapigen not found. Was vala compiled with --enable-vapigen?])
fi
AC_SUBST(VAPIGEN)
fi
AC_MSG_RESULT($enable_vala)
AM_CONDITIONAL(ENABLE_VALA, [test x$enable_vala = xyes])
dnl clutter
AC_MSG_CHECKING([whether you enable clutter])
dnl standalone application
AC_MSG_CHECKING([whether you enable eekboard])
AC_ARG_ENABLE(eekboard,
AS_HELP_STRING([--enable-eekboard=no/yes],
[Build standalone application "ekboard" default=yes]),,
enable_eekboard=yes)
AC_MSG_RESULT($enable_eekboard)
AM_CONDITIONAL(ENABLE_EEKBOARD, [test x$enable_eekboard = xyes])
dnl Clutter
AC_MSG_CHECKING([whether you enable Clutter])
AC_ARG_ENABLE(clutter,
AS_HELP_STRING([--enable-clutter=no/yes],
[Enable clutter user interface default=no]),
enable_clutter=$enableval,
[Enable Clutter user interface default=yes]),,
enable_clutter=no)
if test x$enable_clutter = xyes; then
PKG_CHECK_MODULES([CLUTTER], [clutter-1.0], , enable_clutter=no)
if test x$enable_clutter = xyes; then
AC_DEFINE([HAVE_CLUTTER], [1], [Define if clutter is found])
fi
fi
AM_CONDITIONAL(ENABLE_CLUTTER, [test x$enable_clutter = xyes])
AC_MSG_RESULT($enable_clutter)
dnl clutter-gtk
if test x$enable_clutter = xyes; then
AC_MSG_CHECKING([whether you enable clutter-gtk])
AC_ARG_ENABLE(clutter-gtk,
AS_HELP_STRING([--enable-clutter-gtk=no/yes],
[Enable clutter user interface default=yes]),
enable_clutter_gtk=$enableval,
enable_clutter_gtk=yes)
if test x$enable_clutter_gtk = xyes; then
PKG_CHECK_MODULES([CLUTTER_GTK], [clutter-gtk-1.0], ,
enable_clutter_gtk=no)
if test x$enable_clutter_gtk = xyes; then
AC_DEFINE([HAVE_CLUTTER_GTK], [1], [Define if Clutter-Gtk is found])
PKG_CHECK_MODULES([CLUTTER], [clutter-1.0], ,
[AC_MSG_ERROR([Clutter not found -- install it or add --disable-clutter])])
AC_DEFINE([HAVE_CLUTTER], [1], [Define if Clutter is found])
have_clutter_gtk=0
need_swap_event_workaround=0
PKG_CHECK_MODULES([CLUTTER_GTK], [clutter-gtk-1.0], [have_clutter_gtk=1],
[PKG_CHECK_MODULES([CLUTTER_GTK], [clutter-gtk-0.10 clutter-x11-1.0],
[have_clutter_gtk=1; need_swap_event_workaround=1])])
AC_DEFINE_UNQUOTED([HAVE_CLUTTER_GTK], $have_clutter_gtk,
[Define if Clutter-Gtk is found])
AC_DEFINE_UNQUOTED([NEED_SWAP_EVENT_WORKAROUND], $need_swap_event_workaround,
[Define if GLX_INTEL_swap_event work around is needed])
fi
fi
AC_MSG_RESULT($enable_clutter_gtk)
fi
AM_CONDITIONAL(ENABLE_CLUTTER_GTK, [test x$enable_clutter_gtk = xyes])
AM_CONDITIONAL(ENABLE_CLUTTER, [test x$enable_clutter = xyes])
GTK_DOC_CHECK([1.14],[--flavour no-tmpl])
dnl to re-generate eek/*-keysym-labels.txt
AC_CHECK_PROGS([PYTHON], [python])
dnl define GETTEXT_* variables
GETTEXT_PACKAGE=$PACKAGE
AC_SUBST(GETTEXT_PACKAGE)
@ -297,6 +219,8 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the read-only
AM_GLIB_GNU_GETTEXT
AM_GLIB_DEFINE_LOCALEDIR(EEKBOARD_LOCALEDIR)
GOBJECT_INTROSPECTION_CHECK([0.9.0])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile
eek/Makefile
@ -339,11 +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
Focus listeners $focus_listeners
Keystroke listeners $keystroke_listeners
])

View File

@ -1,34 +1,6 @@
SUBDIRS = icons themes keyboards
@GSETTINGS_RULES@
@INTLTOOL_XML_NOMERGE_RULE@
gsettings_schemas_in_files = org.fedorahosted.eekboard.gschema.xml.in
gsettings_SCHEMAS = $(gsettings_schemas_in_files:.gschema.xml.in=.gschema.xml)
servicedir = $(datadir)/dbus-1/services
service_in_files = eekboard-server.service.in
service_DATA = $(service_in_files:.service.in=.service)
$(service_DATA): $(service_in_files) Makefile
$(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@
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 = $(service_DATA) $(desktop_DATA) $(gsettings_SCHEMAS)
EXTRA_DIST = $(service_in_files) $(desktop_in_files) $(gsettings_schemas_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

@ -1,25 +0,0 @@
<?xml version="1.0"?>
<schemalist>
<schema id="org.fedorahosted.eekboard" path="/org/fedorahosted/eekboard/">
<key name="ui-toolkit" type="s">
<default>'gtk'</default>
<summary>GUI toolkit used to render keyboard</summary>
<description>The name of GUI toolkit (either 'gtk' or 'clutter') used to render keyboard on screen.</description>
</key>
<key name="focus-listener" type="s">
<default>'atspi'</default>
<summary>Use the given focus listener</summary>
<description>The name of the focus listener (either 'atspi' or 'ibus') used to detect focus events.</description>
</key>
<key name="auto-hide" type="b">
<default>true</default>
<summary>Hide keyboard automatically when focus is out</summary>
<description>If true, hide keyboard automatically when focus is out.</description>
</key>
<key name="start-fullscreen" type="b">
<default>false</default>
<summary>Switch to fullscreen mode when startup</summary>
<description>If true, switch to fullscreen mode when startup.</description>
</key>
</schema>
</schemalist>

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,15 +88,13 @@ 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 = -DEEK_COMPILATION=1 $(GIO2_CFLAGS) $(PANGOCAIRO_CFLAGS) $(LIBCROCO_CFLAGS)
libeek_la_CFLAGS = $(GIO2_CFLAGS) $(PANGOCAIRO_CFLAGS) $(LIBCROCO_CFLAGS)
libeek_la_LIBADD = $(GIO2_LIBS) $(PANGOCAIRO_LIBS) $(LIBCROCO_LIBS) -lm
if ENABLE_CLUTTER
@ -116,7 +114,7 @@ libeek_clutter_sources = \
$(srcdir)/eek-clutter-renderer.c
libeek_clutter_la_SOURCES = $(libeek_clutter_sources)
libeek_clutter_la_CFLAGS = -DEEK_COMPILATION=1 $(CLUTTER_CFLAGS)
libeek_clutter_la_CFLAGS = $(CLUTTER_CFLAGS)
libeek_clutter_la_LIBADD = libeek.la $(CLUTTER_LIBS)
endif
@ -130,7 +128,7 @@ libeek_gtk_sources = \
$(srcdir)/eek-gtk-renderer.c
libeek_gtk_la_SOURCES = $(libeek_gtk_sources)
libeek_gtk_la_CFLAGS = -DEEK_COMPILATION=1 $(GTK_CFLAGS)
libeek_gtk_la_CFLAGS = $(GTK_CFLAGS)
libeek_gtk_la_LIBADD = libeek.la $(GTK_LIBS)
libeek_xkb_public_headers = \
@ -141,7 +139,7 @@ libeek_xkb_sources = \
$(srcdir)/eek-xkb-layout.c
libeek_xkb_la_SOURCES = $(libeek_xkb_sources)
libeek_xkb_la_CFLAGS = -DEEK_COMPILATION=1 $(XKB_CFLAGS) $(GTK_CFLAGS)
libeek_xkb_la_CFLAGS = $(XKB_CFLAGS) $(GTK_CFLAGS)
libeek_xkb_la_LIBADD = libeek.la $(XKB_LIBS) $(GTK_LIBS)
libeek_xkl_public_headers = \
@ -152,13 +150,12 @@ libeek_xkl_sources = \
$(srcdir)/eek-xkl-layout.c
libeek_xkl_la_SOURCES = $(libeek_xkl_sources)
libeek_xkl_la_CFLAGS = -DEEK_COMPILATION=1 $(LIBXKLAVIER_CFLAGS) $(GTK_CFLAGS)
libeek_xkl_la_CFLAGS = $(LIBXKLAVIER_CFLAGS) $(GTK_CFLAGS)
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

@ -23,8 +23,8 @@ includedir=@includedir@
Name: EEK
Description: A Library to Create Keyboard-like UI
URL: http://fedorahosted.org/eekboard/
URL: http://ueno.github.com/eekboard/
Version: @VERSION@
Requires: gobject-2.0 gio-2.0
Requires: gobject-2.0
Libs: -L${libdir} -leek
Cflags: -I${includedir}/eek-@EEK_API_VERSION@

View File

@ -23,7 +23,7 @@ includedir=@includedir@
Name: libeek-clutter
Description: A Library to Create Keyboard-like UI (Clutter Support)
URL: http://fedorahosted.org/eekboard/
URL: http://ueno.github.com/eekboard/
Version: @VERSION@
Requires: eek-@EEK_API_VERSION@ clutter-1.0
Libs: -L${libdir} -leek-clutter

View File

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek-clutter.h> can be included directly."
#endif
#ifndef EEK_CLUTTER_KEYBOARD_H
#define EEK_CLUTTER_KEYBOARD_H 1

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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_CONTAINER_H
#define EEK_CONTAINER_H 1
@ -39,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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_ELEMENT_H
#define EEK_ELEMENT_H 1

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,29 +0,0 @@
/*** BEGIN file-header ***/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#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

@ -23,7 +23,7 @@ includedir=@includedir@
Name: libeek-gtk
Description: A Library to Create Keyboard-like UI (GTK Support)
URL: http://fedorahosted.org/eekboard/
URL: http://ueno.github.com/eekboard/
Version: @VERSION@
Requires: eek-@EEK_API_VERSION@ gtk+-@GTK_API_VERSION@
Libs: -L${libdir} -leek-gtk

View File

@ -434,7 +434,6 @@ on_key_released (EekKeyboard *keyboard,
large_bounds.width,
large_bounds.height);
cairo_clip (cr);
eek_renderer_render_keyboard (priv->renderer, cr);
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
cairo_destroy (cr);

View File

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek-gtk.h> can be included directly."
#endif
#ifndef EEK_GTK_KEYBOARD_H
#define EEK_GTK_KEYBOARD_H 1

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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_KEY_H
#define EEK_KEY_H 1

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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_KEYBOARD_H
#define EEK_KEYBOARD_H 1
@ -109,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,
@ -118,6 +112,7 @@ void eek_keyboard_get_symbol_index
(EekKeyboard *keyboard,
gint *group,
gint *level);
void eek_keyboard_set_group
(EekKeyboard *keyboard,
gint group);
@ -128,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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_KEYSYM_H
#define EEK_KEYSYM_H 1

View File

@ -18,10 +18,6 @@
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_LAYOUT_H
#define EEK_LAYOUT_H 1

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)
@ -647,7 +653,6 @@ eek_renderer_real_render_keyboard (EekRenderer *self,
cairo_t *cr)
{
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
cairo_pattern_t *source;
g_return_if_fail (priv->keyboard);
g_return_if_fail (priv->allocation_width > 0.0);
@ -657,8 +662,6 @@ eek_renderer_real_render_keyboard (EekRenderer *self,
priv->keyboard_surface = create_keyboard_surface (self);
cairo_set_source_surface (cr, priv->keyboard_surface, 0.0, 0.0);
source = cairo_get_source (cr);
cairo_pattern_set_extend (source, CAIRO_EXTEND_PAD);
cairo_paint (cr);
}
@ -1138,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));
@ -1146,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);
@ -1228,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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_SECTION_H
#define EEK_SECTION_H 1
@ -59,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

@ -16,10 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_SERIALIZABLE_H
#define EEK_SERIALIZABLE_H 1

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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_SYMBOL_H
#define EEK_SYMBOL_H 1
@ -41,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.
*/
@ -55,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

@ -1,9 +1,4 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef __EEK_THEME_H__
#define __EEK_THEME_H__

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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_TYPES_H
#define EEK_TYPES_H 1
@ -31,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 ())
@ -145,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;
@ -156,7 +153,6 @@ typedef struct _EekColor EekColor;
*
* 2D vertex
*/
typedef struct _EekPoint EekPoint;
struct _EekPoint
{
gdouble x;
@ -164,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);
@ -180,6 +174,7 @@ void eek_point_rotate (EekPoint *point,
*/
struct _EekBounds
{
/*< public >*/
gdouble x;
gdouble y;
gdouble width;
@ -187,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

@ -23,7 +23,7 @@ includedir=@includedir@
Name: libeek-xkb
Description: A Library to Create Keyboard-like UI (XKB Support)
URL: http://fedorahosted.org/eekboard/
URL: http://ueno.github.com/eekboard/
Version: @VERSION@
Requires: eek-@EEK_API_VERSION@ gtk+-x11-@GTK_API_VERSION@
Libs: -L${libdir} -leek-xkb

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

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek-xkb.h> can be included directly."
#endif
#ifndef EEK_XKB_LAYOUT_H
#define EEK_XKB_LAYOUT_H 1

View File

@ -23,7 +23,7 @@ includedir=@includedir@
Name: libeek-xkl
Description: A Library to Create Keyboard-like UI (Libxklavier Support)
URL: http://fedorahosted.org/eekboard/
URL: http://ueno.github.com/eekboard/
Version: @VERSION@
Requires: eek-xkb-@EEK_API_VERSION@ libxklavier
Libs: -L${libdir} -leek-xkl

View File

@ -17,11 +17,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek-xkl.h> can be included directly."
#endif
#ifndef EEK_XKL_LAYOUT_H
#define EEK_XKL_LAYOUT_H 1

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

@ -16,10 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_XML_LAYOUT_H
#define EEK_XML_LAYOUT_H 1

View File

@ -16,10 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION)
#error "Only <eek/eek.h> can be included directly."
#endif
#ifndef EEK_XML_H
#define EEK_XML_H 1

View File

@ -20,8 +20,6 @@
#ifndef EEK_H
#define EEK_H 1
#define __EEK_H_INSIDE__ 1
#include "eek-keyboard.h"
#include "eek-section.h"
#include "eek-key.h"

View File

@ -47,8 +47,6 @@
0xFFE5 "⇪" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFE9 "Alt" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFEA "Alt" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFE7 "Meta" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFE8 "Meta" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFEB "Super" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFEC "Super" EEK_SYMBOL_CATEGORY_KEYNAME
0xFFED "Hyper" EEK_SYMBOL_CATEGORY_KEYNAME

View File

@ -27,7 +27,7 @@ libeekboard_sources = \
eekboard-context.c
libeekboard_la_SOURCES = $(libeekboard_sources)
libeekboard_la_CFLAGS = -DEEKBOARD_COMPILATION=1 -I$(top_srcdir) $(GIO2_CFLAGS)
libeekboard_la_CFLAGS = -I$(top_srcdir) $(GIO2_CFLAGS)
libeekboard_la_LIBADD = $(top_builddir)/eek/libeek.la $(GIO2_LIBS)
eekboarddir = $(includedir)/eekboard-$(EEK_API_VERSION)/eekboard

View File

@ -25,6 +25,6 @@ Name: Eekboard
Description: A Library to Create Keyboard-like UI
URL: http://ueno.github.com/eekboard/
Version: @VERSION@
Requires: eek-@EEK_API_VERSION@
Requires: gobject-2.0
Libs: -L${libdir} -leek
Cflags: -I${includedir}/eekboard-@EEK_API_VERSION@

View File

@ -368,9 +368,9 @@ eekboard_context_new (GDBusConnection *connection,
g_initable_new (EEKBOARD_TYPE_CONTEXT,
cancellable,
&error,
"g-name", "org.fedorahosted.Eekboard.Server",
"g-name", "com.redhat.Eekboard.Server",
"g-connection", connection,
"g-interface-name", "org.fedorahosted.Eekboard.Context",
"g-interface-name", "com.redhat.Eekboard.Context",
"g-object-path", object_path,
NULL);
if (initable != NULL) {

View File

@ -15,11 +15,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(__EEKBOARD_H_INSIDE__) && !defined(EEKBOARD_COMPILATION)
#error "Only <eekboard/eekboard.h> can be included directly."
#endif
#ifndef EEKBOARD_CONTEXT_H
#define EEKBOARD_CONTEXT_H 1

View File

@ -143,9 +143,9 @@ eekboard_eekboard_new (GDBusConnection *connection,
cancellable,
&error,
"g-connection", connection,
"g-name", "org.fedorahosted.Eekboard.Server",
"g-interface-name", "org.fedorahosted.Eekboard.Server",
"g-object-path", "/org/fedorahosted/Eekboard/Server",
"g-name", "com.redhat.Eekboard.Server",
"g-interface-name", "com.redhat.Eekboard.Server",
"g-object-path", "/com/redhat/Eekboard/Server",
NULL);
if (initable != NULL) {
EekboardEekboard *eekboard = EEKBOARD_EEKBOARD (initable);

View File

@ -15,11 +15,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(__EEKBOARD_H_INSIDE__) && !defined(EEKBOARD_COMPILATION)
#error "Only <eekboard/eekboard.h> can be included directly."
#endif
#ifndef EEKBOARD_EEKBOARD_H
#define EEKBOARD_EEKBOARD_H 1

View File

@ -18,8 +18,6 @@
#ifndef EEKBOARD_H
#define EEKBOARD_H 1
#define __EEKBOARD_H_INSIDE__ 1
#include "eekboard/eekboard-eekboard.h"
#include "eekboard/eekboard-context.h"

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

@ -16,6 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
if ENABLE_EEKBOARD
bin_PROGRAMS = \
eekboard \
eekboard-server \
@ -27,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 \
@ -38,28 +39,22 @@ eekboard_LDADD = \
$(top_builddir)/eek/libeek-xkl.la \
$(GIO2_LIBS) \
$(GTK_LIBS) \
$(GCONF2_LIBS) \
$(XKB_LIBS) \
$(LIBXKLAVIER_LIBS)
if ENABLE_XTEST
if ENABLE_FAKEKEY
eekboard_CFLAGS += \
$(XTEST_CFLAGS)
$(FAKEKEY_CFLAGS)
eekboard_LDADD += \
$(XTEST_LIBS)
$(FAKEKEY_LIBS)
endif
if ENABLE_ATSPI
if ENABLE_CSPI
eekboard_CFLAGS += \
$(ATSPI2_CFLAGS)
$(CSPI_CFLAGS)
eekboard_LDADD += \
$(ATSPI2_LIBS)
endif
if ENABLE_IBUS
eekboard_CFLAGS += \
$(IBUS_CFLAGS)
eekboard_LDADD += \
$(IBUS_LIBS)
$(CSPI_LIBS)
endif
eekboard_headers = client.h
@ -78,14 +73,9 @@ eekboard_server_LDADD = \
$(GIO2_LIBS) \
$(GTK_LIBS)
if ENABLE_CLUTTER_GTK
eekboard_server_CFLAGS += $(CLUTTER_GTK_CFLAGS)
eekboard_server_LDADD += $(top_builddir)/eek/libeek-clutter.la $(CLUTTER_GTK_LIBS)
endif
if ENABLE_XDOCK
eekboard_server_CFLAGS += $(XDOCK_CFLAGS)
eekboard_server_LDADD += $(XDOCK_LIBS)
if ENABLE_CLUTTER
eekboard_server_CFLAGS += $(CLUTTER_CFLAGS) $(CLUTTER_GTK_CFLAGS)
eekboard_server_LDADD += $(CLUTTER_LIBS) $(top_builddir)/eek/libeek-clutter.la $(CLUTTER_GTK_LIBS)
endif
eekboard_server_headers = server-server.h server-context.h
@ -127,3 +117,14 @@ noinst_HEADERS = \
$(eekboard_server_headers) \
$(eekboard_xml_headers) \
$(libxklutil_la_headers)
EXTRA_DIST = $(service_in_files)
DISTCLEANFILES = $(service_DATA)
servicedir = $(datadir)/dbus-1/services
service_in_files = eekboard-server.service.in
service_DATA = $(service_in_files:.service.in=.service)
$(service_DATA): $(service_in_files) Makefile
$(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@
endif

View File

@ -20,27 +20,21 @@
#endif /* HAVE_CONFIG_H */
#include <stdlib.h>
#ifdef HAVE_ATSPI
#include <dbus/dbus.h>
#include <atspi/atspi.h>
#endif /* HAVE_ATSPI */
#ifdef HAVE_IBUS
#include <ibus.h>
#endif /* HAVE_IBUS */
#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;
@ -57,18 +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")},
#if ENABLE_FOCUS_LISTENER
#ifdef HAVE_CSPI
{"listen-focus", 'f', 0, G_OPTION_ARG_NONE, &opt_focus,
N_("Listen focus change events")},
#endif /* ENABLE_FOCUS_LISTENER */
#ifdef HAVE_ATSPI
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,
@ -113,12 +103,6 @@ on_destroyed (EekboardEekboard *eekboard,
g_main_loop_quit (loop);
}
enum {
FOCUS_NONE,
FOCUS_ATSPI,
FOCUS_IBUS
};
int
main (int argc, char **argv)
{
@ -128,10 +112,9 @@ main (int argc, char **argv)
GBusType bus_type;
GDBusConnection *connection;
GError *error;
GConfClient *gconfc;
GOptionContext *option_context;
GMainLoop *loop;
gint focus;
GSettings *settings;
if (!gtk_init_check (&argc, &argv)) {
g_printerr ("Can't init GTK\n");
@ -180,128 +163,74 @@ main (int argc, char **argv)
}
client = eekboard_client_new (connection);
g_object_unref (connection);
if (client == NULL) {
g_printerr ("Can't create a client\n");
exit (1);
}
settings = g_settings_new ("org.fedorahosted.eekboard");
focus = FOCUS_NONE;
if (opt_focus) {
gchar *focus_listener = g_settings_get_string (settings,
"focus-listener");
g_object_unref (settings);
gconfc = gconf_client_get_default ();
if (g_strcmp0 (focus_listener, "atspi") == 0)
focus = FOCUS_ATSPI;
else if (g_strcmp0 (focus_listener, "ibus") == 0)
focus = FOCUS_IBUS;
else {
g_printerr ("Unknown focus listener \"%s\". "
"Try \"atspi\" or \"ibus\"\n", focus_listener);
g_object_unref (client);
exit (1);
}
}
#ifdef HAVE_ATSPI
if (focus == FOCUS_ATSPI || opt_keystroke) {
GSettings *settings = g_settings_new ("org.gnome.desktop.interface");
gboolean accessibility_enabled =
g_settings_get_boolean (settings, "toolkit-accessibility");
g_object_unref (settings);
if (accessibility_enabled) {
if (atspi_init () != 0) {
g_printerr ("Can't init AT-SPI 2\n");
g_object_unref (client);
#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 (focus == FOCUS_ATSPI &&
!eekboard_client_enable_atspi_focus (client)) {
g_printerr ("Can't register AT-SPI focus change event listeners\n");
g_object_unref (client);
if (opt_focus &&
!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)) {
g_printerr ("Can't register AT-SPI keystroke event listeners\n");
g_object_unref (client);
!eekboard_client_enable_cspi_keystroke (client)) {
g_printerr ("Can't register keystroke event listeners\n");
exit (1);
}
} else {
g_printerr ("Desktop accessibility support is disabled\n");
g_object_unref (client);
exit (1);
}
}
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
#ifdef HAVE_IBUS
if (focus == FOCUS_IBUS) {
ibus_init ();
if (focus == FOCUS_IBUS &&
!eekboard_client_enable_ibus_focus (client)) {
g_printerr ("Can't register IBus focus change event listeners\n");
g_object_unref (client);
exit (1);
}
}
#endif /* HAVE_IBUS */
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");
g_object_unref (client);
if (opt_keyboard && (opt_model || opt_layouts || opt_options)) {
g_printerr ("Can't use --keyboard option with xklavier options\n");
exit (1);
}
if (!eekboard_client_enable_xkl (client)) {
g_printerr ("Can't register xklavier event listeners\n");
g_object_unref (client);
if (opt_keyboard) {
if (!eekboard_client_load_keyboard_from_file (client, opt_keyboard)) {
g_printerr ("Can't load keyboard\n");
exit (1);
}
if (opt_use_system_layout || opt_model || opt_layouts || opt_options) {
if (!eekboard_client_load_keyboard_from_xkl (client,
} else if (opt_model || opt_layouts || opt_options) {
if (!eekboard_client_set_xkl_config (client,
opt_model,
opt_layouts,
opt_options)) {
g_printerr ("Can't load keyboard from xklavier config\n");
g_object_unref (client);
g_printerr ("Can't set xklavier config\n");
exit (1);
}
} else {
gchar *file;
gboolean success;
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);
success = eekboard_client_load_keyboard_from_file (client, file);
g_free (file);
if (!success) {
g_printerr ("Can't load keyboard file %s\n", file);
g_object_unref (client);
} else if (!eekboard_client_enable_xkl (client)) {
g_printerr ("Can't register xklavier event listeners\n");
exit (1);
}
}
#ifdef HAVE_XTEST
if (!eekboard_client_enable_xtest (client)) {
g_printerr ("Can't init xtest\n");
g_object_unref (client);
#ifdef HAVE_FAKEKEY
if (!eekboard_client_enable_fakekey (client)) {
g_printerr ("Can't init fakekey\n");
exit (1);
}
#endif /* HAVE_XTEST */
#endif /* HAVE_FAKEKEY */
loop = g_main_loop_new (NULL, FALSE);
if (!opt_focus) {
@ -313,8 +242,7 @@ main (int argc, char **argv)
g_object_unref (context);
}
if (opt_fullscreen ||
g_settings_get_boolean (settings, "start-fullscreen")) {
if (opt_fullscreen) {
g_object_get (client, "context", &context, NULL);
eekboard_context_set_fullscreen (context, TRUE, NULL);
g_object_unref (context);
@ -326,7 +254,6 @@ main (int argc, char **argv)
g_main_loop_run (loop);
g_main_loop_unref (loop);
g_object_unref (client);
return 0;
}

View File

@ -21,21 +21,15 @@
#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>
#ifdef HAVE_XTEST
#include <X11/extensions/XTest.h>
#include <X11/XKBlib.h>
#endif /* HAVE_XTEST */
#ifdef HAVE_IBUS
#include <ibus.h>
#endif /* HAVE_IBUS */
#ifdef HAVE_FAKEKEY
#include <fakekey/fakekey.h>
#endif /* HAVE_FAKEKEY */
#include "eek/eek.h"
#include "eek/eek-xkl.h"
@ -43,8 +37,6 @@
#include "client.h"
#include "xklutil.h"
#include <string.h>
#define CSW 640
#define CSH 480
@ -65,10 +57,9 @@ struct _EekboardClient {
EekboardContext *context;
EekKeyboard *keyboard;
GdkDisplay *display;
XklEngine *xkl_engine;
XklConfigRegistry *xkl_config_registry;
gboolean use_xkl_layout;
gint group;
gulong xkl_config_changed_handler;
gulong xkl_state_changed_handler;
@ -76,24 +67,15 @@ struct _EekboardClient {
gulong key_pressed_handler;
gulong key_released_handler;
gboolean follows_focus;
#ifdef HAVE_CSPI
Accessible *acc;
AccessibleEventListener *focus_listener;
AccessibleEventListener *keystroke_listener;
#endif /* HAVE_CSPI */
#ifdef HAVE_ATSPI
AtspiAccessible *acc;
AtspiDeviceListener *keystroke_listener;
#endif /* HAVE_ATSPI */
#ifdef HAVE_IBUS
IBusBus *ibus_bus;
guint ibus_focus_message_filter;
#endif /* HAVE_IBUS */
#ifdef HAVE_XTEST
KeyCode modifier_keycodes[8];
XkbDescRec *xkb;
#endif /* HAVE_XTEST */
GSettings *settings;
#ifdef HAVE_FAKEKEY
FakeKey *fakekey;
#endif /* HAVE_FAKEKEY */
};
struct _EekboardClientClass {
@ -105,34 +87,33 @@ 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);
static gboolean set_keyboard_from_xkl (EekboardClient *client,
static gboolean set_xkl_keyboard (EekboardClient *client,
gboolean show,
const gchar *model,
const gchar *layouts,
const gchar *options);
#ifdef HAVE_XTEST
static void update_modifier_keycodes
(EekboardClient *client);
#endif /* HAVE_XTEST */
static void
eekboard_client_set_property (GObject *object,
@ -200,22 +181,14 @@ 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_IBUS
eekboard_client_disable_ibus_focus (client);
if (client->ibus_bus) {
g_object_unref (client->ibus_bus);
client->ibus_bus = NULL;
}
#endif /* HAVE_IBUS */
#ifdef HAVE_XTEST
eekboard_client_disable_xtest (client);
#endif /* HAVE_XTEST */
#ifdef HAVE_FAKEKEY
eekboard_client_disable_fakekey (client);
#endif /* HAVE_FAKEKEY */
if (client->context) {
if (client->eekboard) {
@ -236,9 +209,15 @@ eekboard_client_dispose (GObject *object)
client->keyboard = NULL;
}
if (client->settings) {
g_object_unref (client->settings);
client->settings = NULL;
#ifdef HAVE_FAKEKEY
if (client->fakekey) {
client->fakekey = NULL;
}
#endif /* HAVE_FAKEKEY */
if (client->display) {
gdk_display_close (client->display);
client->display = NULL;
}
G_OBJECT_CLASS (eekboard_client_parent_class)->dispose (object);
@ -287,6 +266,7 @@ eekboard_client_init (EekboardClient *client)
{
client->eekboard = NULL;
client->context = NULL;
client->display = NULL;
client->xkl_engine = NULL;
client->xkl_config_registry = NULL;
client->keyboard = NULL;
@ -294,51 +274,47 @@ eekboard_client_init (EekboardClient *client)
client->key_released_handler = 0;
client->xkl_config_changed_handler = 0;
client->xkl_state_changed_handler = 0;
#if ENABLE_FOCUS_LISTENER
client->follows_focus = FALSE;
#endif /* ENABLE_FOCUS_LISTENER */
#ifdef HAVE_ATSPI
#ifdef HAVE_CSPI
client->focus_listener = NULL;
client->keystroke_listener = NULL;
#endif /* HAVE_ATSPI */
#ifdef HAVE_IBUS
client->ibus_bus = NULL;
client->ibus_focus_message_filter = 0;
#endif /* HAVE_IBUS */
client->settings = g_settings_new ("org.fedorahosted.eekboard");
#endif /* HAVE_CSPI */
#ifdef HAVE_FAKEKEY
client->fakekey = NULL;
#endif /* HAVE_FAKEKEY */
}
gboolean
eekboard_client_load_keyboard_from_xkl (EekboardClient *client,
eekboard_client_set_xkl_config (EekboardClient *client,
const gchar *model,
const gchar *layouts,
const gchar *options)
{
client->use_xkl_layout = TRUE;
#if ENABLE_FOCUS_LISTENER
return set_keyboard_from_xkl (client,
!client->follows_focus,
#ifdef HAVE_CSPI
return set_xkl_keyboard (client,
client->focus_listener ? FALSE : TRUE,
model,
layouts,
options);
#else /* ENABLE_FOCUS_LISTENER */
return set_keyboard_from_xkl (client,
#else
return set_xkl_keyboard (client,
TRUE,
model,
layouts,
options);
#endif /* !ENABLE_FOCUS_LISTENER */
#endif
}
gboolean
eekboard_client_enable_xkl (EekboardClient *client)
{
GdkDisplay *display = gdk_display_get_default ();
g_assert (display);
if (!client->display) {
client->display = gdk_display_get_default ();
}
g_assert (client->display);
if (!client->xkl_engine) {
client->xkl_engine =
xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (display));
xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (client->display));
}
g_assert (client->xkl_engine);
@ -362,18 +338,22 @@ eekboard_client_enable_xkl (EekboardClient *client)
(GdkFilterFunc) filter_xkl_event,
client);
client->use_xkl_layout = FALSE;
xkl_engine_start_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
return TRUE;
#ifdef HAVE_CSPI
return set_xkl_keyboard (client,
client->focus_listener ? FALSE : TRUE,
NULL,
NULL,
NULL);
#else
return set_xkl_keyboard (client, TRUE, NULL, NULL, NULL);
#endif
}
void
eekboard_client_disable_xkl (EekboardClient *client)
{
client->use_xkl_layout = FALSE;
if (client->xkl_engine)
xkl_engine_stop_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
if (g_signal_handler_is_connected (client->xkl_engine,
@ -386,150 +366,93 @@ 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);
} else if (g_settings_get_boolean (client->settings, "auto-hide") &&
event->detail1 == 0 && accessible == client->acc) {
} else if (event->detail1 == 0 && accessible == client->acc) {
client->acc = NULL;
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);
} else if (g_settings_get_boolean (client->settings, "auto-hide") &&
event->detail1 == 0) {
} else if (event->detail1 == 0) {
client->acc = NULL;
eekboard_context_hide_keyboard (client->context, NULL);
}
@ -541,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;
@ -553,128 +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 */
#ifdef HAVE_IBUS
static void
add_match_rule (GDBusConnection *connection,
const gchar *match_rule)
{
GError *error;
GDBusMessage *message;
message = g_dbus_message_new_method_call ("org.freedesktop.DBus", /* name */
"/org/freedesktop/DBus", /* path */
"org.freedesktop.DBus", /* interface */
"AddMatch");
g_dbus_message_set_body (message, g_variant_new ("(s)", match_rule));
error = NULL;
g_dbus_connection_send_message (connection,
message,
G_DBUS_SEND_MESSAGE_FLAGS_NONE,
NULL,
&error);
g_object_unref (message);
}
static GDBusMessage *
focus_message_filter (GDBusConnection *connection,
GDBusMessage *message,
gboolean incoming,
gpointer user_data)
{
EekboardClient *client = user_data;
if (incoming &&
g_strcmp0 (g_dbus_message_get_interface (message),
IBUS_INTERFACE_INPUT_CONTEXT) == 0) {
const gchar *member = g_dbus_message_get_member (message);
if (g_strcmp0 (member, "FocusIn") == 0) {
eekboard_context_show_keyboard (client->context, NULL);
} else if (g_settings_get_boolean (client->settings, "auto-hide") &&
g_strcmp0 (member, "FocusOut") == 0) {
eekboard_context_hide_keyboard (client->context, NULL);
}
}
return message;
}
static void
_ibus_connect_focus_handlers (IBusBus *bus, gpointer user_data)
{
EekboardClient *client = user_data;
GDBusConnection *connection;
GError *error;
connection = ibus_bus_get_connection (bus);
add_match_rule (connection,
"type='method_call',"
"interface='" IBUS_INTERFACE_INPUT_CONTEXT "',"
"member='FocusIn'");
add_match_rule (connection,
"type='method_call',"
"interface='" IBUS_INTERFACE_INPUT_CONTEXT "',"
"member='FocusOut'");
client->ibus_focus_message_filter =
g_dbus_connection_add_filter (connection,
focus_message_filter,
client,
NULL);
}
gboolean
eekboard_client_enable_ibus_focus (EekboardClient *client)
{
if (!client->ibus_bus) {
client->ibus_bus = ibus_bus_new ();
g_object_ref (client->ibus_bus);
g_signal_connect (client->ibus_bus, "connected",
G_CALLBACK(_ibus_connect_focus_handlers),
client);
}
if (ibus_bus_is_connected (client->ibus_bus))
_ibus_connect_focus_handlers (client->ibus_bus, client);
client->follows_focus = TRUE;
return TRUE;
}
void
eekboard_client_disable_ibus_focus (EekboardClient *client)
{
GDBusConnection *connection;
client->follows_focus = FALSE;
if (client->ibus_bus) {
if (client->ibus_focus_message_filter != 0) {
connection = ibus_bus_get_connection (client->ibus_bus);
g_dbus_connection_remove_filter (connection,
client->ibus_focus_message_filter);
}
g_object_unref (client->ibus_bus);
client->ibus_bus = NULL;
}
}
#endif /* HAVE_ATSPI */
#endif /* HAVE_CSPI */
EekboardClient *
eekboard_client_new (GDBusConnection *connection)
@ -706,14 +525,13 @@ on_xkl_config_changed (XklEngine *xklengine,
EekboardClient *client = user_data;
gboolean retval;
if (client->use_xkl_layout) {
retval = set_keyboard_from_xkl (client, FALSE, NULL, NULL, NULL);
retval = set_xkl_keyboard (client, FALSE, NULL, NULL, NULL);
g_return_if_fail (retval);
}
#ifdef HAVE_XTEST
update_modifier_keycodes (client);
#endif /* HAVE_XTEST */
#ifdef HAVE_FAKEKEY
if (client->fakekey)
fakekey_reload_keysyms (client->fakekey);
#endif /* HAVE_FAKEKEY */
}
static gboolean
@ -743,7 +561,7 @@ set_keyboard (EekboardClient *client,
}
static gboolean
set_keyboard_from_xkl (EekboardClient *client,
set_xkl_keyboard (EekboardClient *client,
gboolean show,
const gchar *model,
const gchar *layouts,
@ -810,182 +628,29 @@ on_xkl_state_changed (XklEngine *xklengine,
EekboardClient *client = user_data;
if (type == GROUP_CHANGED && client->keyboard) {
if (client->use_xkl_layout) {
gint group = eek_element_get_group (EEK_ELEMENT(client->keyboard));
if (group != value) {
eekboard_context_set_group (client->context, value, NULL);
}
}
client->group = value;
}
}
#ifdef HAVE_XTEST
/* The following functions for keyboard mapping change are direct
translation of the code in Caribou (in libcaribou/xadapter.vala):
- get_replaced_keycode (Caribou: get_reserved_keycode)
- replace_keycode
- get_keycode_from_gdk_keymap (Caribou: best_keycode_keyval_match)
*/
static guint
get_replaced_keycode (EekboardClient *client)
#ifdef HAVE_FAKEKEY
G_INLINE_FUNC FakeKeyModifier
get_fakekey_modifiers (EekModifierType modifiers)
{
GdkDisplay *display = gdk_display_get_default ();
Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
gint i;
FakeKeyModifier retval = 0;
for (i = client->xkb->max_key_code; i >= client->xkb->min_key_code; --i)
if (client->xkb->map->key_sym_map[i].kt_index[0] == XkbOneLevelIndex &&
XKeycodeToKeysym (xdisplay, i, 0) != 0)
return i;
if (modifiers & EEK_SHIFT_MASK)
retval |= FAKEKEYMOD_SHIFT;
if (modifiers & EEK_CONTROL_MASK)
retval |= FAKEKEYMOD_CONTROL;
if (modifiers & EEK_MOD1_MASK)
retval |= FAKEKEYMOD_ALT;
if (modifiers & EEK_META_MASK)
retval |= FAKEKEYMOD_META;
return XKeysymToKeycode (xdisplay, 0x0023); /* XK_numbersign */
}
/* Replace keysym assigned to KEYCODE to KEYSYM. Both args are used
as in-out. If KEYCODE points to 0, this function picks a keycode
from the current map and replace the associated keysym to KEYSYM.
In that case, the replaced keycode is stored in KEYCODE and the old
keysym is stored in KEYSYM. If otherwise (KEYCODE points to
non-zero keycode), it simply changes the current map with the
specified KEYCODE and KEYSYM. */
static gboolean
replace_keycode (EekboardClient *client,
guint *keycode,
guint *keysym)
{
GdkDisplay *display = gdk_display_get_default ();
Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
guint offset;
XkbMapChangesRec changes;
guint replaced_keycode, replaced_keysym;
g_assert (keycode != NULL);
g_assert (keysym != NULL && *keysym != 0);
replaced_keycode = get_replaced_keycode (client);
if (replaced_keycode == 0)
return FALSE;
replaced_keysym = XKeycodeToKeysym (xdisplay, replaced_keycode, 0);
XFlush (xdisplay);
offset = client->xkb->map->key_sym_map[replaced_keycode].offset;
client->xkb->map->syms[offset] = *keysym;
changes.changed = XkbKeySymsMask;
changes.first_key_sym = replaced_keycode;
changes.num_key_syms = 1;
XkbChangeMap (xdisplay, client->xkb, &changes);
XFlush (xdisplay);
*keycode = replaced_keycode;
*keysym = replaced_keysym;
return TRUE;
}
static gboolean
get_keycode_from_gdk_keymap (EekboardClient *client,
guint keysym,
guint *keycode,
guint *modifiers)
{
GdkKeymap *keymap = gdk_keymap_get_default ();
GdkKeymapKey *keys, *best_match;
gint n_keys, i;
if (!gdk_keymap_get_entries_for_keyval (keymap, keysym, &keys, &n_keys))
return FALSE;
for (i = 0; i < n_keys; i++)
if (keys[i].group == client->group)
best_match = &keys[i];
*keycode = best_match->keycode;
*modifiers = best_match->level == 1 ? EEK_SHIFT_MASK : 0;
g_free (keys);
return TRUE;
}
static void
send_fake_modifier_key_event (EekboardClient *client,
EekModifierType modifiers,
gboolean is_pressed)
{
GdkDisplay *display = gdk_display_get_default ();
gint i;
for (i = 0; i < G_N_ELEMENTS(client->modifier_keycodes); i++) {
if (modifiers & (1 << i)) {
guint keycode = client->modifier_keycodes[i];
g_return_if_fail (keycode > 0);
XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (display),
keycode,
is_pressed,
CurrentTime);
}
}
}
static void
send_fake_key_event (EekboardClient *client,
EekKey *key,
gboolean is_pressed)
{
GdkDisplay *display = gdk_display_get_default ();
EekSymbol *symbol;
EekModifierType keyboard_modifiers, modifiers;
guint xkeysym;
guint keycode, replaced_keysym = 0;
symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
/* Ignore special keys and modifiers */
if (!EEK_IS_KEYSYM(symbol) || eek_symbol_is_modifier (symbol))
return;
xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
g_return_if_fail (xkeysym > 0);
modifiers = 0;
if (!get_keycode_from_gdk_keymap (client, xkeysym, &keycode, &modifiers)) {
keycode = 0;
replaced_keysym = xkeysym;
if (!replace_keycode (client, &keycode, &replaced_keysym)) {
g_warning ("failed to lookup X keysym %X", xkeysym);
return;
}
}
/* Clear level shift modifiers */
keyboard_modifiers = eek_keyboard_get_modifiers (client->keyboard);
keyboard_modifiers &= ~EEK_SHIFT_MASK;
keyboard_modifiers &= ~EEK_LOCK_MASK;
keyboard_modifiers &= ~eek_keyboard_get_alt_gr_mask (client->keyboard);
modifiers |= keyboard_modifiers;
send_fake_modifier_key_event (client, modifiers, is_pressed);
XSync (GDK_DISPLAY_XDISPLAY (display), False);
keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (display),
xkeysym);
g_return_if_fail (keycode > 0);
XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (display),
keycode,
is_pressed,
CurrentTime);
XSync (GDK_DISPLAY_XDISPLAY (display), False);
if (replaced_keysym)
replace_keycode (client, &keycode, &replaced_keysym);
return retval;
}
static void
@ -994,8 +659,28 @@ on_key_pressed (EekKeyboard *keyboard,
gpointer user_data)
{
EekboardClient *client = user_data;
send_fake_key_event (client, key, TRUE);
send_fake_key_event (client, key, FALSE);
EekSymbol *symbol;
g_assert (client->fakekey);
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);
fakekey_send_keyevent (client->fakekey,
keycode,
TRUE,
fakekey_modifiers);
fakekey_send_keyevent (client->fakekey,
keycode,
FALSE,
fakekey_modifiers);
}
}
static void
@ -1003,57 +688,24 @@ on_key_released (EekKeyboard *keyboard,
EekKey *key,
gpointer user_data)
{
}
EekboardClient *client = user_data;
static void
update_modifier_keycodes (EekboardClient *client)
{
GdkDisplay *display = gdk_display_get_default ();
XModifierKeymap *mods;
gint i, j;
mods = XGetModifierMapping (GDK_DISPLAY_XDISPLAY (display));
for (i = 0; i < 8; i++) {
client->modifier_keycodes[i] = 0;
for (j = 0; j < mods->max_keypermod; j++) {
KeyCode keycode = mods->modifiermap[mods->max_keypermod * i + j];
if (keycode != 0) {
client->modifier_keycodes[i] = keycode;
break;
}
}
}
g_assert (client->fakekey);
fakekey_release (client->fakekey);
}
gboolean
eekboard_client_enable_xtest (EekboardClient *client)
eekboard_client_enable_fakekey (EekboardClient *client)
{
GdkDisplay *display = gdk_display_get_default ();
int opcode, event_base, error_base, major_version, minor_version;
g_assert (display);
if (!XTestQueryExtension (GDK_DISPLAY_XDISPLAY (display),
&event_base, &error_base,
&major_version, &minor_version)) {
g_warning ("XTest extension is not available");
return FALSE;
if (!client->display) {
client->display = gdk_display_get_default ();
}
g_assert (client->display);
if (!XkbQueryExtension (GDK_DISPLAY_XDISPLAY (display),
&opcode, &event_base, &error_base,
&major_version, &minor_version)) {
g_warning ("Xkb extension is not available");
return FALSE;
if (!client->fakekey) {
client->fakekey = fakekey_init (GDK_DISPLAY_XDISPLAY (client->display));
}
if (!client->xkb)
client->xkb = XkbGetMap (GDK_DISPLAY_XDISPLAY (display),
XkbKeySymsMask,
XkbUseCoreKbd);
g_assert (client->xkb);
update_modifier_keycodes (client);
g_assert (client->fakekey);
client->key_pressed_handler =
g_signal_connect (client->keyboard, "key-pressed",
@ -1066,12 +718,10 @@ eekboard_client_enable_xtest (EekboardClient *client)
}
void
eekboard_client_disable_xtest (EekboardClient *client)
eekboard_client_disable_fakekey (EekboardClient *client)
{
if (client->xkb) {
XkbFreeKeyboard (client->xkb, 0, TRUE); /* free_all = TRUE */
client->xkb = NULL;
}
if (client->fakekey)
fakekey_release (client->fakekey);
if (g_signal_handler_is_connected (client->keyboard,
client->key_pressed_handler))
@ -1091,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);
@ -1102,13 +754,9 @@ eekboard_client_load_keyboard_from_file (EekboardClient *client,
layout = eek_xml_layout_new (G_INPUT_STREAM(input));
g_object_unref (input);
#if ENABLE_FOCUS_LISTENER
retval = set_keyboard (client, !client->follows_focus, layout);
#else /* ENABLE_FOCUS_LISTENER */
retval = set_keyboard (client, TRUE, layout);
#endif /* !ENABLE_FOCUS_LISTENER */
g_object_unref (layout);
return retval;
}
#endif /* HAVE_XTEST */
#endif /* HAVE_FAKEKEY */

View File

@ -36,9 +36,7 @@ EekboardClient * eekboard_client_new (GDBusConnection *connection);
gboolean eekboard_client_load_keyboard_from_file
(EekboardClient *client,
const gchar *file);
gboolean eekboard_client_load_keyboard_from_xkl
(EekboardClient *client,
gboolean eekboard_client_set_xkl_config (EekboardClient *client,
const gchar *model,
const gchar *layouts,
const gchar *options);
@ -46,23 +44,18 @@ gboolean eekboard_client_load_keyboard_from_xkl
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_xtest (EekboardClient *client);
void eekboard_client_disable_xtest (EekboardClient *client);
gboolean eekboard_client_enable_ibus_focus
(EekboardClient *client);
void eekboard_client_disable_ibus_focus
(EekboardClient *client);
gboolean eekboard_client_enable_fakekey (EekboardClient *client);
void eekboard_client_disable_fakekey (EekboardClient *client);
G_END_DECLS
#endif /* EEKBOARD_CLIENT_H */

View File

@ -1,3 +1,3 @@
[D-BUS Service]
Name=org.fedorahosted.Eekboard.Server
Name=com.redhat.Eekboard.Server
Exec=@bindir@/eekboard-server

View File

@ -22,34 +22,30 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <X11/Xatom.h>
#include <gdk/gdkx.h>
#include "eek/eek.h"
#if HAVE_CLUTTER_GTK
#include <clutter-gtk/clutter-gtk.h>
#include "eek/eek-clutter.h"
#endif
#else /* HAVE_CLUTTER_GTK */
#include "eek/eek-gtk.h"
#endif /* !HAVE_CLUTTER_GTK */
#include "server-context.h"
#define CSW 640
#define CSH 480
#define DEFAULT_THEME (THEMEDIR "/default.css")
enum {
PROP_0,
PROP_OBJECT_PATH,
PROP_CONNECTION,
PROP_UI_TOOLKIT,
PROP_LAST
};
static const gchar introspection_xml[] =
"<node>"
" <interface name='org.fedorahosted.Eekboard.Context'>"
" <interface name='com.redhat.Eekboard.Context'>"
" <method name='AddKeyboard'>"
" <arg direction='in' type='v' name='keyboard'/>"
" <arg direction='out' type='u' name='keyboard_id'/>"
@ -89,12 +85,6 @@ static const gchar introspection_xml[] =
" </interface>"
"</node>";
typedef enum {
UI_TOOLKIT_GTK,
UI_TOOLKIT_CLUTTER,
UI_TOOLKIT_DEFAULT = UI_TOOLKIT_GTK
} ServerContextUIToolkitType;
typedef struct _ServerContextClass ServerContextClass;
struct _ServerContext {
@ -119,9 +109,6 @@ struct _ServerContext {
gulong key_pressed_handler;
gulong key_released_handler;
gulong notify_visible_handler;
GSettings *settings;
ServerContextUIToolkitType ui_toolkit;
};
struct _ServerContextClass {
@ -154,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);
@ -197,58 +181,7 @@ on_notify_visible (GObject *object, GParamSpec *spec, gpointer user_data)
}
static void
on_realize_set_dock (GtkWidget *widget,
gpointer user_data)
{
#ifdef HAVE_XDOCK
GdkWindow *window = gtk_widget_get_window (widget);
Atom atoms[2] = { None, None };
gint x, y, width, height, depth;
long vals[12];
/* set window type to dock */
atoms[0] = XInternAtom (GDK_WINDOW_XDISPLAY (window),
"_NET_WM_WINDOW_TYPE_DOCK", False);
XChangeProperty (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
XInternAtom (GDK_WINDOW_XDISPLAY (window),
"_NET_WM_WINDOW_TYPE", False),
XA_ATOM, 32, PropModeReplace,
(guchar *)atoms,
1);
/* set bottom strut */
#if GTK_CHECK_VERSION(3,0,0)
gdk_window_get_geometry (window, &x, &y, &width, &height);
#else
gdk_window_get_geometry (window, &x, &y, &width, &height, &depth);
#endif /* GTK_CHECK_VERSION(3,0,0) */
vals[0] = 0;
vals[1] = 0;
vals[2] = 0;
vals[3] = height;
vals[4] = 0;
vals[5] = 0;
vals[6] = 0;
vals[7] = 0;
vals[8] = 0;
vals[9] = 0;
vals[10] = x;
vals[11] = x + width;
XChangeProperty (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
XInternAtom (GDK_WINDOW_XDISPLAY (window),
"_NET_WM_STRUT_PARTIAL", False),
XA_CARDINAL, 32, PropModeReplace,
(guchar *)vals, 12);
#endif /* HAVE_XDOCK */
}
static void
on_realize_set_non_maximizable (GtkWidget *widget,
on_realize (GtkWidget *widget,
gpointer user_data)
{
ServerContext *context = user_data;
@ -263,6 +196,8 @@ on_realize_set_non_maximizable (GtkWidget *widget,
GDK_FUNC_CLOSE);
}
#define DEFAULT_THEME (THEMEDIR "/default.css")
static void
set_geometry (ServerContext *context)
{
@ -278,36 +213,17 @@ set_geometry (ServerContext *context)
gdk_screen_get_monitor_geometry (screen, monitor, &rect);
eek_element_get_bounds (EEK_ELEMENT(context->keyboard), &bounds);
g_signal_handlers_disconnect_by_func (context->window,
on_realize_set_dock,
context);
g_signal_handlers_disconnect_by_func (context->window,
on_realize_set_non_maximizable,
context);
if (context->fullscreen) {
gint width = rect.width, height = rect.height / 2;
if (width * bounds.height > height * bounds.width)
width = (height / bounds.height) * bounds.width;
else
height = (width / bounds.width) * bounds.height;
gtk_widget_set_size_request (context->widget, width, height);
gtk_window_move (GTK_WINDOW(context->window),
(rect.width - width) / 2,
rect.height - height);
gtk_window_set_decorated (GTK_WINDOW(context->window), FALSE);
gtk_window_set_resizable (GTK_WINDOW(context->window), FALSE);
gtk_widget_set_size_request (context->widget,
rect.width,
rect.height / 2);
gtk_window_move (GTK_WINDOW(context->window),
0,
rect.height / 2);
gtk_window_set_opacity (GTK_WINDOW(context->window), 0.8);
g_signal_connect_after (context->window, "realize",
G_CALLBACK(on_realize_set_dock),
context);
} else {
if (context->ui_toolkit == UI_TOOLKIT_CLUTTER) {
#if HAVE_CLUTTER_GTK
ClutterActor *stage =
gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(context->widget));
@ -318,20 +234,15 @@ set_geometry (ServerContext *context)
g_signal_connect (stage,
"allocation-changed",
G_CALLBACK(on_allocation_changed),
NULL);
actor);
#else
g_return_if_reached ();
#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));
g_signal_connect_after (context->window, "realize",
G_CALLBACK(on_realize_set_non_maximizable),
context);
}
}
@ -350,26 +261,20 @@ update_widget (ServerContext *context)
theme = eek_theme_new (DEFAULT_THEME, NULL, NULL);
eek_element_get_bounds (EEK_ELEMENT(context->keyboard), &bounds);
if (context->ui_toolkit == UI_TOOLKIT_CLUTTER) {
#if HAVE_CLUTTER_GTK
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);
clutter_stage_set_color (CLUTTER_STAGE(stage), &stage_color);
#else
g_return_if_reached ();
#endif
} else {
context->widget = eek_gtk_keyboard_new (context->keyboard);
if (theme)
eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget),
theme);
}
eek_gtk_keyboard_set_theme (EEK_GTK_KEYBOARD(context->widget), theme);
#endif
if (!context->window) {
context->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
@ -387,9 +292,13 @@ update_widget (ServerContext *context)
_("Keyboard"));
gtk_window_set_icon_name (GTK_WINDOW(context->window), "eekboard");
gtk_window_set_keep_above (GTK_WINDOW(context->window), TRUE);
g_signal_connect (context->window, "realize",
G_CALLBACK(on_realize), context);
set_geometry (context);
}
gtk_container_add (GTK_CONTAINER(context->window), context->widget);
set_geometry (context);
}
static void
@ -400,7 +309,6 @@ server_context_set_property (GObject *object,
{
ServerContext *context = SERVER_CONTEXT(object);
GDBusConnection *connection;
const gchar *ui_toolkit;
switch (prop_id) {
case PROP_OBJECT_PATH:
@ -414,17 +322,6 @@ server_context_set_property (GObject *object,
g_object_unref (context->connection);
context->connection = g_object_ref (connection);
break;
case PROP_UI_TOOLKIT:
ui_toolkit = g_value_get_string (value);
if (g_strcmp0 (ui_toolkit, "gtk") == 0)
context->ui_toolkit = UI_TOOLKIT_GTK;
#if HAVE_CLUTTER_GTK
else if (g_strcmp0 (ui_toolkit, "clutter") == 0)
context->ui_toolkit = UI_TOOLKIT_CLUTTER;
#endif /* HAVE_CLUTTER_GTK */
else
g_warning ("unknown UI toolkit %s", ui_toolkit);
break;
default:
g_object_set_property (object,
g_param_spec_get_name (pspec),
@ -469,11 +366,6 @@ server_context_dispose (GObject *object)
context->introspection_data = NULL;
}
if (context->settings) {
g_object_unref (context->settings);
context->settings = NULL;
}
G_OBJECT_CLASS (server_context_parent_class)->dispose (object);
}
@ -535,30 +427,11 @@ server_context_class_init (ServerContextClass *klass)
g_object_class_install_property (gobject_class,
PROP_CONNECTION,
pspec);
pspec = g_param_spec_string ("ui-toolkit",
"UI toolkit",
"UI toolkit",
NULL,
G_PARAM_WRITABLE);
g_object_class_install_property (gobject_class,
PROP_UI_TOOLKIT,
pspec);
}
static void
on_monitors_changed (GdkScreen *screen,
gpointer user_data)
{
ServerContext *context = user_data;
if (context->window)
set_geometry (context);
}
static void
server_context_init (ServerContext *context)
{
GdkScreen *screen;
GError *error;
context->connection = NULL;
@ -583,19 +456,6 @@ server_context_init (ServerContext *context)
context->window = NULL;
context->key_pressed_handler = 0;
context->key_released_handler = 0;
context->ui_toolkit = UI_TOOLKIT_DEFAULT;
context->settings = g_settings_new ("org.fedorahosted.eekboard");
g_settings_bind (context->settings, "ui-toolkit",
context, "ui-toolkit",
G_SETTINGS_BIND_GET);
screen = gdk_screen_get_default ();
g_signal_connect (screen,
"monitors-changed",
G_CALLBACK(on_monitors_changed),
context);
}
static void

View File

@ -22,8 +22,8 @@
G_BEGIN_DECLS
#define SERVER_CONTEXT_PATH "/org/fedorahosted/Eekboard/Context_%d"
#define SERVER_CONTEXT_INTERFACE "org.fedorahosted.Eekboard.Context"
#define SERVER_CONTEXT_PATH "/com/redhat/Eekboard/Context_%d"
#define SERVER_CONTEXT_INTERFACE "com.redhat.Eekboard.Context"
#define SERVER_TYPE_CONTEXT (server_context_get_type())
#define SERVER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SERVER_TYPE_CONTEXT, ServerContext))

View File

@ -40,7 +40,7 @@ static guint signals[LAST_SIGNAL] = { 0, };
static const gchar introspection_xml[] =
"<node>"
" <interface name='org.fedorahosted.Eekboard.Server'>"
" <interface name='com.redhat.Eekboard.Server'>"
" <method name='CreateContext'>"
" <arg direction='in' type='s' name='client_name'/>"
" <arg direction='out' type='s' name='object_path'/>"

View File

@ -22,8 +22,8 @@
G_BEGIN_DECLS
#define SERVER_SERVER_PATH "/org/fedorahosted/Eekboard/Server"
#define SERVER_SERVER_INTERFACE "org.fedorahosted.Eekboard.Server"
#define SERVER_SERVER_PATH "/com/redhat/Eekboard/Server"
#define SERVER_SERVER_INTERFACE "com.redhat.Eekboard.Server"
#define SERVER_TYPE_SERVER (server_server_get_type())
#define SERVER_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SERVER_TYPE_SERVER, ServerServer))

View File

@ -26,7 +26,7 @@
#include <gdk/gdkx.h>
#include <glib/gi18n.h>
#include "eek/eek.h"
#include "eek/eek-xml.h"
#include "eek/eek-xkl.h"
#if HAVE_CLUTTER_GTK

View File

@ -25,7 +25,7 @@
#include "config.h"
#endif /* HAVE_CONFIG_H */
#include "eek/eek.h"
#include "eek/eek-xml.h"
#include "eek/eek-xkl.h"
static void