Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Librem5
squeekboard
Commits
0177f967
Commit
0177f967
authored
Mar 11, 2011
by
Daiki Ueno
Browse files
Move eekboard-client from src to examples; rename eekboard-desktop-client to eekboard.
parent
ec56773d
Changes
14
Hide whitespace changes
Inline
Side-by-side
.gitignore
View file @
0177f967
...
...
@@ -72,3 +72,5 @@ po/Makefile.in.in
po/POTFILES
po/stamp-it
bindings/vala/*.vapi
py-compile
README
View file @
0177f967
...
...
@@ -26,7 +26,7 @@ OPTIONAL: fakekey, CSPI, Clutter, Clutter-Gtk, Vala, gobject-introspection
* How to test
eekboard currently includes
4
tools to implement your own virtual
eekboard currently includes
3
tools to implement your own virtual
keyboard.
** eekboard-server
...
...
@@ -38,14 +38,14 @@ do that with:
$ eekboard-server &
** eekboard
-desktop-client
** eekboard
eekboard
-desktop-client
is a client of eekboard-server. It listens
desktop events
(keyboard change, focus in/out, and keystroke) and
generates key
events when some keys are pressed on the on-screen
keyboard. It can
be started with:
eekboard is a client of eekboard-server. It listens
desktop events
(keyboard change, focus in/out, and keystroke) and
generates key
events when some keys are pressed on the on-screen
keyboard. It can
be started with:
$ eekboard
-desktop-client
$ eekboard
** eekboard-xml
...
...
@@ -60,16 +60,6 @@ You can display the dumped layout with:
$ eekboard-xml --load keyboard.xml
** eekboard-client
eekboard-client is a simple test client of eekboard-server. To upload
the keyboard description to the server, display it, and listen
key events.
$ eekboard-client --set-keyboard keyboard.xml --show-keyboard --listen
KeyPressed XXXXX
KeyReleased XXXXX
* Documentation
See file:docs/reference/eek/html/index.html
configure.ac
View file @
0177f967
...
...
@@ -248,6 +248,7 @@ data/themes/Makefile
data/keyboards/Makefile
examples/Makefile
examples/eekboard-inscript/Makefile
examples/simple-client/Makefile
eek/eek-${EEK_API_VERSION}.pc
eek/eek-clutter-${EEK_API_VERSION}.pc
eek/eek-gtk-${EEK_API_VERSION}.pc
...
...
data/Makefile.am
View file @
0177f967
SUBDIRS
=
icons themes keyboards
EXTRA_DIST
=
eekboard.desktop
data/eekboard.desktop
0 → 100644
View file @
0177f967
[Desktop Entry]
Name=Eekboard
GenericName=Eekboard Virtual Keyboard
Comment=Virtual Keyboard
Exec=eekboard-desktop-client
Icon=eekboard
Terminal=false
Type=Application
Categories=GTK;Utility;
examples/Makefile.am
View file @
0177f967
SUBDIRS
=
eekboard-inscript
SUBDIRS
=
eekboard-inscript
simple-client
examples/simple-client/Makefile.am
0 → 100644
View file @
0177f967
noinst_PROGRAMS
=
simple-client
simple_client_CFLAGS
=
\
-I
$(top_srcdir)
\
$(GIO2_CFLAGS)
simple_client_LDADD
=
\
$(top_builddir)
/eekboard/libeekboard.la
\
$(top_builddir)
/eek/libeek.la
\
$(GIO2_LIBS)
simple_client_SOURCES
=
main.c
src/desktop
-client
-
main.c
→
examples/simple
-client
/
main.c
View file @
0177f967
...
...
@@ -20,27 +20,21 @@
#endif
/* HAVE_CONFIG_H */
#include
<stdlib.h>
#include
<cspi/spi.h>
#include
<gtk/gtk.h>
#include
<glib/gi18n.h>
#include
<gconf/gconf-client.h>
#include
"eekboard/eekboard.h"
#include
"desktop-client.h"
static
gboolean
opt_system
=
FALSE
;
static
gboolean
opt_session
=
FALSE
;
static
gchar
*
opt_address
=
NULL
;
#ifdef HAVE_CSPI
static
gboolean
opt_focus
=
FALSE
;
static
gboolean
opt_keystroke
=
FALSE
;
#endif
/* HAVE_CSPI */
static
gchar
*
opt_model
=
NULL
;
static
gchar
*
opt_layouts
=
NULL
;
static
gchar
*
opt_options
=
NULL
;
static
gboolean
opt_fullscreen
=
FALSE
;
static
gchar
*
opt_set_keyboard
=
NULL
;
static
gint
opt_set_group
=
-
1
;
static
gboolean
opt_show_keyboard
=
FALSE
;
static
gboolean
opt_hide_keyboard
=
FALSE
;
static
gint
opt_press_key
=
-
1
;
static
gint
opt_release_key
=
-
1
;
static
gboolean
opt_listen
=
FALSE
;
static
const
GOptionEntry
options
[]
=
{
{
"system"
,
'y'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_system
,
...
...
@@ -49,75 +43,51 @@ static const GOptionEntry options[] = {
N_
(
"Connect to the session bus"
)},
{
"address"
,
'a'
,
0
,
G_OPTION_ARG_STRING
,
&
opt_address
,
N_
(
"Connect to the given D-Bus address"
)},
#ifdef HAVE_CSPI
{
"listen-focus"
,
'f'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_focus
,
N_
(
"Listen focus change events with AT-SPI"
)}
,
{
"listen-keystroke"
,
's'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_keystroke
,
N_
(
"Listen keystroke events with AT-SPI"
)}
,
#endif
/* HAVE_CSPI */
{
"
model
"
,
'\0'
,
0
,
G_OPTION_ARG_
STRING
,
&
opt_
model
,
N_
(
"
Specify model
"
)},
{
"
layouts
"
,
'\0'
,
0
,
G_OPTION_ARG_
STR
IN
G
,
&
opt_
layouts
,
N_
(
"
Specify layouts
"
)},
{
"
options
"
,
'\0'
,
0
,
G_OPTION_ARG_
STR
IN
G
,
&
opt_
options
,
N_
(
"
Specify options
"
)},
{
"
fullscre
en"
,
'
F
'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_
fullscre
en
,
N_
(
"
Create window in fullscreen mode
"
)},
{
"set-keyboard"
,
'\0'
,
0
,
G_OPTION_ARG_STRING
,
&
opt_set_keyboard
,
N_
(
"Upload keyboard description from an XML file"
)}
,
{
"set-group"
,
'\0'
,
0
,
G_OPTION_ARG_INT
,
&
opt_set_group
,
N_
(
"Set group of the keyboard"
)}
,
{
"show-keyboard"
,
'\0'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_show_keyboard
,
N_
(
"Show keyboard"
)},
{
"
hide-keyboard
"
,
'\0'
,
0
,
G_OPTION_ARG_
NONE
,
&
opt_
hide_keyboard
,
N_
(
"
Hide keyboard
"
)},
{
"
press-key
"
,
'\0'
,
0
,
G_OPTION_ARG_IN
T
,
&
opt_
press_key
,
N_
(
"
Press key
"
)},
{
"
release-key
"
,
'\0'
,
0
,
G_OPTION_ARG_IN
T
,
&
opt_
release_key
,
N_
(
"
Release key
"
)},
{
"
list
en"
,
'
\0
'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_
list
en
,
N_
(
"
Listen events
"
)},
{
NULL
}
};
static
void
on_notify_keyboard_visible
(
GObject
*
object
,
GParamSpec
*
spec
,
gpointer
user_data
)
on_key_pressed
(
guint
keycode
,
gpointer
user_data
)
{
GMainLoop
*
loop
=
user_data
;
gboolean
visible
;
g_object_get
(
object
,
"keyboard-visible"
,
&
visible
,
NULL
);
/* user explicitly closed the window */
if
(
!
visible
&&
eekboard_context_is_enabled
(
EEKBOARD_CONTEXT
(
object
)))
g_main_loop_quit
(
loop
);
g_print
(
"KeyPressed %u
\n
"
,
keycode
);
}
static
void
on_context_destroyed
(
EekboardContext
*
context
,
gpointer
user_data
)
on_key_released
(
guint
keycode
,
gpointer
user_data
)
{
GMainLoop
*
loop
=
user_data
;
g_main_loop_quit
(
loop
);
}
static
void
on_destroyed
(
EekboardEekboard
*
eekboard
,
gpointer
user_data
)
{
GMainLoop
*
loop
=
user_data
;
g_main_loop_quit
(
loop
);
g_print
(
"KeyReleased %u
\n
"
,
keycode
);
}
int
main
(
int
argc
,
char
**
argv
)
{
EekboardDesktopClient
*
client
;
EekboardEekboard
*
eekboard
;
EekboardContext
*
context
;
EekboardEekboard
*
eekboard
=
NULL
;
EekboardContext
*
context
=
NULL
;
GBusType
bus_type
;
GDBusConnection
*
connection
;
GDBusConnection
*
connection
=
NULL
;
GError
*
error
;
GConfClient
*
gconfc
;
GOptionContext
*
option_context
;
GMainLoop
*
loop
;
GMainLoop
*
loop
=
NULL
;
gint
retval
=
0
;
if
(
!
gtk_init_check
(
&
argc
,
&
argv
))
{
g_printerr
(
"Can't init GTK
\n
"
);
exit
(
1
);
}
g_type_init
();
g_log_set_always_fatal
(
G_LOG_LEVEL_CRITICAL
);
option_context
=
g_option_context_new
(
"eekboard-
desktop-
client"
);
option_context
=
g_option_context_new
(
"eekboard-client"
);
g_option_context_add_main_entries
(
option_context
,
options
,
NULL
);
g_option_context_parse
(
option_context
,
&
argc
,
&
argv
,
NULL
);
g_option_context_free
(
option_context
);
...
...
@@ -158,88 +128,90 @@ main (int argc, char **argv)
break
;
}
client
=
eekboard_desktop_client_new
(
connection
);
if
(
client
==
NULL
)
{
g_printerr
(
"Can't create a client
\n
"
);
exit
(
1
);
eekboard
=
eekboard_eekboard_new
(
connection
,
NULL
);
if
(
eekboard
==
NULL
)
{
g_printerr
(
"Can't create eekboard proxy
\n
"
);
retval
=
1
;
goto
out
;
}
gconfc
=
gconf_client_get_default
();
#ifdef HAVE_CSPI
error
=
NULL
;
if
(
opt_focus
||
opt_keystroke
)
{
if
(
gconf_client_get_bool
(
gconfc
,
"/desktop/gnome/interface/accessibility"
,
&
error
)
||
gconf_client_get_bool
(
gconfc
,
"/desktop/gnome/interface/accessibility2"
,
&
error
))
{
if
(
SPI_init
()
!=
0
)
{
g_printerr
(
"Can't init CSPI
\n
"
);
exit
(
1
);
}
if
(
opt_focus
&&
!
eekboard_desktop_client_enable_cspi_focus
(
client
))
{
g_printerr
(
"Can't register focus change event listeners
\n
"
);
exit
(
1
);
}
if
(
opt_keystroke
&&
!
eekboard_desktop_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
"
);
exit
(
1
);
}
context
=
eekboard_eekboard_create_context
(
eekboard
,
"eekboard-client"
,
NULL
);
if
(
context
==
NULL
)
{
g_printerr
(
"Can't create context
\n
"
);
retval
=
1
;
goto
out
;
}
#endif
/* HAVE_CSPI */
if
(
opt_model
||
opt_layouts
||
opt_options
)
{
if
(
!
eekboard_desktop_client_set_xkl_config
(
client
,
opt_model
,
opt_layouts
,
opt_options
))
{
g_printerr
(
"Can't set xklavier config
\n
"
);
exit
(
1
);
eekboard_eekboard_push_context
(
eekboard
,
context
,
NULL
);
if
(
opt_set_keyboard
)
{
GFile
*
file
;
GFileInputStream
*
input
;
EekLayout
*
layout
;
EekKeyboard
*
keyboard
;
guint
keyboard_id
;
file
=
g_file_new_for_path
(
opt_set_keyboard
);
error
=
NULL
;
input
=
g_file_read
(
file
,
NULL
,
&
error
);
if
(
error
)
{
g_printerr
(
"Can't read file %s: %s
\n
"
,
opt_set_keyboard
,
error
->
message
);
retval
=
1
;
goto
out
;
}
}
else
if
(
!
eekboard_desktop_client_enable_xkl
(
client
))
{
g_printerr
(
"Can't register xklavier event listeners
\n
"
);
exit
(
1
);
layout
=
eek_xml_layout_new
(
G_INPUT_STREAM
(
input
));
g_object_unref
(
input
);
keyboard
=
eek_keyboard_new
(
layout
,
640
,
480
);
g_object_unref
(
layout
);
keyboard_id
=
eekboard_context_add_keyboard
(
context
,
keyboard
,
NULL
);
g_object_unref
(
keyboard
);
eekboard_context_set_keyboard
(
context
,
keyboard_id
,
NULL
);
}
#ifdef HAVE_FAKEKEY
if
(
!
eekboard_desktop_client_enable_fakekey
(
client
))
{
g_printerr
(
"Can't init fakekey
\n
"
);
exit
(
1
);
if
(
opt_set_group
>=
0
)
{
eekboard_context_set_group
(
context
,
opt_set_group
,
NULL
);
}
#endif
/* HAVE_FAKEKEY */
loop
=
g_main_loop_new
(
NULL
,
FALSE
);
if
(
!
opt_focus
)
{
g_object_get
(
client
,
"context"
,
&
context
,
NULL
);
g_signal_connect
(
context
,
"notify::keyboard-visible"
,
G_CALLBACK
(
on_notify_keyboard_visible
),
loop
);
g_signal_connect
(
context
,
"destroyed"
,
G_CALLBACK
(
on_context_destroyed
),
loop
);
g_object_unref
(
context
);
if
(
opt_show_keyboard
)
{
eekboard_context_show_keyboard
(
context
,
NULL
);
}
if
(
opt_fullscreen
)
{
g_object_get
(
client
,
"context"
,
&
context
,
NULL
);
eekboard_context_set_fullscreen
(
context
,
TRUE
,
NULL
);
g_object_unref
(
context
);
if
(
opt_hide_keyboard
)
{
eekboard_context_hide_keyboard
(
context
,
NULL
);
}
if
(
opt_press_key
>=
0
)
{
eekboard_context_press_key
(
context
,
opt_press_key
,
NULL
);
}
if
(
opt_release_key
>=
0
)
{
eekboard_context_release_key
(
context
,
opt_release_key
,
NULL
);
}
g_object_get
(
client
,
"eekboard"
,
&
eekboard
,
NULL
);
g_signal_connect
(
eekboard
,
"destroyed"
,
G_CALLBACK
(
on_destroyed
),
loop
);
if
(
opt_listen
)
{
g_signal_connect
(
context
,
"key-pressed"
,
G_CALLBACK
(
on_key_pressed
),
NULL
);
g_signal_connect
(
context
,
"key-released"
,
G_CALLBACK
(
on_key_released
),
NULL
);
loop
=
g_main_loop_new
(
NULL
,
FALSE
);
g_main_loop_run
(
loop
);
}
g_main_loop_run
(
loop
);
g_main_loop_unref
(
loop
);
out:
if
(
context
)
g_object_unref
(
context
);
if
(
connection
)
g_object_unref
(
connection
);
if
(
loop
)
g_main_loop_unref
(
loop
);
return
0
;
return
retval
;
}
po/POTFILES.in
View file @
0177f967
src/server-server.c
src/server-context.c
src/server-main.c
src/client.c
src/client-main.c
src/desktop-client.c
src/desktop-client-main.c
src/xml-main.c
src/server-
main.c
examples/simple-client/
main.c
src/Makefile.am
View file @
0177f967
...
...
@@ -18,14 +18,13 @@
if
ENABLE_EEKBOARD
bin_PROGRAMS
=
\
eekboard-desktop-client
\
eekboard-client
\
eekboard
\
eekboard-server
\
eekboard-xml
noinst_LTLIBRARIES
=
libxklutil.la
eekboard_
desktop_client_
CFLAGS
=
\
eekboard_CFLAGS
=
\
-I
$(top_srcdir)
\
$(GIO2_CFLAGS)
\
$(GTK_CFLAGS)
\
...
...
@@ -33,7 +32,7 @@ eekboard_desktop_client_CFLAGS = \
$(XKB_CFLAGS)
\
$(LIBXKLAVIER_CFLAGS)
eekboard_
desktop_client_
LDADD
=
\
eekboard_LDADD
=
\
$(builddir)
/libxklutil.la
\
$(top_builddir)
/eekboard/libeekboard.la
\
$(top_builddir)
/eek/libeek.la
\
...
...
@@ -45,21 +44,21 @@ eekboard_desktop_client_LDADD = \
$(LIBXKLAVIER_LIBS)
if
ENABLE_FAKEKEY
eekboard_
desktop_client_
CFLAGS
+=
\
eekboard_CFLAGS
+=
\
$(FAKEKEY_CFLAGS)
eekboard_
desktop_client_
LDADD
+=
\
eekboard_LDADD
+=
\
$(FAKEKEY_LIBS)
endif
if
ENABLE_CSPI
eekboard_
desktop_client_
CFLAGS
+=
\
eekboard_CFLAGS
+=
\
$(CSPI_CFLAGS)
eekboard_
desktop_client_
LDADD
+=
\
eekboard_LDADD
+=
\
$(CSPI_LIBS)
endif
eekboard_
desktop_client_
headers
=
desktop-
client.h
eekboard_
desktop_client_
SOURCES
=
desktop-
client.c
desktop-
client-main.c
eekboard_headers
=
client.h
eekboard_SOURCES
=
client.c client-main.c
eekboard_server_CFLAGS
=
\
-I
$(top_srcdir)
\
...
...
@@ -82,17 +81,6 @@ endif
eekboard_server_headers
=
server-server.h server-context.h
eekboard_server_SOURCES
=
server-server.c server-context.c server-main.c
eekboard_client_CFLAGS
=
\
-I
$(top_srcdir)
\
$(GIO2_CFLAGS)
eekboard_client_LDADD
=
\
$(top_builddir)
/eekboard/libeekboard.la
\
$(top_builddir)
/eek/libeek.la
\
$(GIO2_LIBS)
eekboard_client_SOURCES
=
client-main.c
eekboard_xml_CFLAGS
=
\
-I
$(top_srcdir)
\
$(GIO2_CFLAGS)
\
...
...
@@ -125,8 +113,7 @@ eekboard_HEADERS = \
$(libeekboard_headers)
noinst_HEADERS
=
\
$(eekboard_desktop_client_headers)
\
$(eekboard_client_headers)
\
$(eekboard_headers)
\
$(eekboard_server_headers)
\
$(eekboard_xml_headers)
\
$(libxklutil_la_headers)
...
...
src/client-main.c
View file @
0177f967
...
...
@@ -20,21 +20,27 @@
#endif
/* HAVE_CONFIG_H */
#include
<stdlib.h>
#include
<cspi/spi.h>
#include
<gtk/gtk.h>
#include
<glib/gi18n.h>
#include
<gconf/gconf-client.h>
#include
"eekboard/eekboard.h"
#include
"client.h"
static
gboolean
opt_system
=
FALSE
;
static
gboolean
opt_session
=
FALSE
;
static
gchar
*
opt_address
=
NULL
;
static
gchar
*
opt_set_keyboard
=
NULL
;
static
gint
opt_set_group
=
-
1
;
static
gboolean
opt_show_keyboard
=
FALSE
;
static
gboolean
opt_hide_keyboard
=
FALSE
;
static
gint
opt_press_key
=
-
1
;
static
gint
opt_release_key
=
-
1
;
static
gboolean
opt_listen
=
FALSE
;
#ifdef HAVE_CSPI
static
gboolean
opt_focus
=
FALSE
;
static
gboolean
opt_keystroke
=
FALSE
;
#endif
/* HAVE_CSPI */
static
gchar
*
opt_model
=
NULL
;
static
gchar
*
opt_layouts
=
NULL
;
static
gchar
*
opt_options
=
NULL
;
static
gboolean
opt_fullscreen
=
FALSE
;
static
const
GOptionEntry
options
[]
=
{
{
"system"
,
'y'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_system
,
...
...
@@ -43,51 +49,75 @@ 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"
)},
{
"set-keyboard"
,
'\0'
,
0
,
G_OPTION_ARG_STRING
,
&
opt_set_keyboard
,
N_
(
"Upload keyboard description from an XML file"
)}
,
{
"set-group"
,
'\0'
,
0
,
G_OPTION_ARG_INT
,
&
opt_set_group
,
N_
(
"Set group of the keyboard"
)}
,
{
"show-keyboard"
,
'\0'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_show_keyboard
,
N_
(
"Show keyboard"
)},
{
"
hide-keyboard
"
,
'\0'
,
0
,
G_OPTION_ARG_
NONE
,
&
opt_
hide_keyboard
,
N_
(
"
Hide keyboard
"
)},
{
"
press-key
"
,
'\0'
,
0
,
G_OPTION_ARG_IN
T
,
&
opt_
press_key
,
N_
(
"
Press key
"
)},
{
"
release-key
"
,
'\0'
,
0
,
G_OPTION_ARG_IN
T
,
&
opt_
release_key
,
N_
(
"
Release key
"
)},
{
"
list
en"
,
'
\0
'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_
list
en
,
N_
(
"
Listen events
"
)},
#ifdef HAVE_CSPI
{
"listen-focus"
,
'f'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_focus
,
N_
(
"Listen focus change events with AT-SPI"
)}
,
{
"listen-keystroke"
,
's'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_keystroke
,
N_
(
"Listen keystroke events with AT-SPI"
)}
,
#endif
/* HAVE_CSPI */
{
"
model
"
,
'\0'
,
0
,
G_OPTION_ARG_
STRING
,
&
opt_
model
,
N_
(
"
Specify model
"
)},
{
"
layouts
"
,
'\0'
,
0
,
G_OPTION_ARG_
STR
IN
G
,
&
opt_
layouts
,
N_
(
"
Specify layouts
"
)},
{
"
options
"
,
'\0'
,
0
,
G_OPTION_ARG_
STR
IN
G
,
&
opt_
options
,
N_
(
"
Specify options
"
)},
{
"
fullscre
en"
,
'
F
'
,
0
,
G_OPTION_ARG_NONE
,
&
opt_
fullscre
en
,
N_
(
"
Create window in fullscreen mode
"
)},
{
NULL
}
};
static
void
on_key_pressed
(
guint
keycode
,
gpointer
user_data
)
on_notify_keyboard_visible
(
GObject
*
object
,
GParamSpec
*
spec
,
gpointer
user_data
)
{
g_print
(
"KeyPressed %u
\n
"
,
keycode
);
GMainLoop
*
loop
=
user_data
;
gboolean
visible
;
g_object_get
(
object
,
"keyboard-visible"
,
&
visible
,
NULL
);
/* user explicitly closed the window */
if
(
!
visible
&&
eekboard_context_is_enabled
(
EEKBOARD_CONTEXT
(
object
)))
g_main_loop_quit
(
loop
);
}
static
void
on_key_released
(
guint
keycode
,
gpointer
user_data
)
on_context_destroyed
(
EekboardContext
*
context
,
gpointer
user_data
)
{
g_print
(
"KeyReleased %u
\n
"
,
keycode
);
GMainLoop
*
loop
=
user_data
;
g_main_loop_quit
(
loop
);
}
static
void
on_destroyed
(
EekboardEekboard
*
eekboard
,
gpointer
user_data
)
{
GMainLoop
*
loop
=
user_data
;
g_main_loop_quit
(
loop
);
}
int
main
(
int
argc
,
char
**
argv
)
{
EekboardEekboard
*
eekboard
=
NULL
;
EekboardContext
*
context
=
NULL
;
EekboardClient
*
client
;
EekboardEekboard
*
eekboard
;
EekboardContext
*
context
;
GBusType
bus_type
;
GDBusConnection
*
connection
=
NULL
;
GDBusConnection
*
connection
;
GError
*
error
;
GConfClient
*
gconfc
;
GOptionContext
*
option_context
;
GMainLoop
*
loop
=
NULL
;
gint
retval
=
0
;
GMainLoop
*
loop
;
g_type_init
();
g_log_set_always_fatal
(
G_LOG_LEVEL_CRITICAL
);
if
(
!
gtk_init_check
(
&
argc
,
&
argv
))
{
g_printerr
(
"Can't init GTK
\n
"
);
exit
(
1
);
}
option_context
=
g_option_context_new
(
"eekboard-client"
);
option_context
=
g_option_context_new
(
"eekboard-
desktop-
client"
);
g_option_context_add_main_entries
(
option_context
,
options
,
NULL
);