Compare commits
8 Commits
eekboard-0
...
eekboard-0
| Author | SHA1 | Date | |
|---|---|---|---|
| cf4d1109d3 | |||
| c7c6d06907 | |||
| 384d43bb80 | |||
| 29c55b6ca3 | |||
| 910b0be5a5 | |||
| 706fa6310b | |||
| 248699d771 | |||
| 6343e37bc1 |
@ -16,12 +16,13 @@
|
|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
# 02110-1301 USA
|
# 02110-1301 USA
|
||||||
|
|
||||||
AC_INIT([eekboard], [0.0.6], [ueno@unixuser.org])
|
AC_INIT([eekboard], [0.0.7], [ueno@unixuser.org])
|
||||||
AC_CONFIG_SRCDIR([configure.ac])
|
AC_CONFIG_SRCDIR([configure.ac])
|
||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
AM_PROG_CC_C_O
|
AM_PROG_CC_C_O
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||||
LT_INIT
|
LT_INIT
|
||||||
IT_PROG_INTLTOOL([0.35.0])
|
IT_PROG_INTLTOOL([0.35.0])
|
||||||
|
|
||||||
|
|||||||
@ -123,7 +123,8 @@ eek_gtk_keyboard_finalize (GObject *object)
|
|||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(object);
|
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(object);
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
g_hash_table_unref (priv->key_surfaces);
|
cairo_surface_destroy (priv->keyboard_surface);
|
||||||
|
g_hash_table_destroy (priv->key_surfaces);
|
||||||
|
|
||||||
for (i = 0; i < EEK_KEYSYM_CATEGORY_LAST; i++)
|
for (i = 0; i < EEK_KEYSYM_CATEGORY_LAST; i++)
|
||||||
pango_font_description_free (priv->fonts[i]);
|
pango_font_description_free (priv->fonts[i]);
|
||||||
@ -357,7 +358,7 @@ redraw_keyboard (cairo_t *cr,
|
|||||||
|
|
||||||
prepare_keyboard_surface (keyboard);
|
prepare_keyboard_surface (keyboard);
|
||||||
}
|
}
|
||||||
g_return_val_if_fail (priv->keyboard_surface, FALSE);
|
g_return_if_fail (priv->keyboard_surface);
|
||||||
|
|
||||||
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
||||||
|
|
||||||
@ -464,8 +465,8 @@ redraw_key (cairo_t *cr,
|
|||||||
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
gdk_cairo_set_source_color (cr, &style->fg[state]);
|
||||||
|
|
||||||
cairo_scale (cr,
|
cairo_scale (cr,
|
||||||
key_surface_scale[KEY_SURFACE_LARGE],
|
priv->scale * key_surface_scale[KEY_SURFACE_LARGE],
|
||||||
key_surface_scale[KEY_SURFACE_LARGE]);
|
priv->scale * key_surface_scale[KEY_SURFACE_LARGE]);
|
||||||
eek_draw_key_label (cr, key, priv->fonts);
|
eek_draw_key_label (cr, key, priv->fonts);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -492,11 +493,13 @@ on_key_released (EekKey *key, gpointer user_data)
|
|||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
|
||||||
if (priv->key) {
|
if (priv->key) {
|
||||||
|
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
||||||
redraw_key (cr, priv->key, KEY_SURFACE_NORMAL, keyboard);
|
redraw_key (cr, priv->key, KEY_SURFACE_NORMAL, keyboard);
|
||||||
|
cairo_destroy (cr);
|
||||||
priv->key = NULL;
|
priv->key = NULL;
|
||||||
}
|
}
|
||||||
|
cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
|
||||||
redraw_key (cr, key, KEY_SURFACE_NORMAL, keyboard);
|
redraw_key (cr, key, KEY_SURFACE_NORMAL, keyboard);
|
||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
}
|
}
|
||||||
@ -583,6 +586,7 @@ on_size_allocate (GtkWidget *widget,
|
|||||||
cairo_surface_destroy (priv->keyboard_surface);
|
cairo_surface_destroy (priv->keyboard_surface);
|
||||||
priv->keyboard_surface = NULL;
|
priv->keyboard_surface = NULL;
|
||||||
}
|
}
|
||||||
|
g_hash_table_remove_all (priv->key_surfaces);
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
|
eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
|
||||||
priv->scale = allocation->width > allocation->height ?
|
priv->scale = allocation->width > allocation->height ?
|
||||||
|
|||||||
@ -538,7 +538,6 @@ eek_keyboard_find_key_by_position (EekKeyboard *keyboard,
|
|||||||
gdouble y)
|
gdouble y)
|
||||||
{
|
{
|
||||||
FkbpData data;
|
FkbpData data;
|
||||||
EekSection *section;
|
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
|
eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
|
||||||
|
|||||||
@ -632,9 +632,13 @@ eek_xkb_layout_set_names_full (EekXkbLayout *layout,
|
|||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
va_list var_args;
|
va_list var_args;
|
||||||
|
gboolean retval;
|
||||||
|
|
||||||
va_start (var_args, layout);
|
va_start (var_args, layout);
|
||||||
eek_xkb_layout_set_names_full_valist (layout, var_args);
|
retval = eek_xkb_layout_set_names_full_valist (layout, var_args);
|
||||||
va_end (var_args);
|
va_end (var_args);
|
||||||
|
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -244,23 +244,6 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
|
|||||||
g_object_class_install_property (gobject_class, PROP_OPTIONS, pspec);
|
g_object_class_install_property (gobject_class, PROP_OPTIONS, pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disabled since the current EekXklLayout implementation does not
|
|
||||||
change the server setting. */
|
|
||||||
#if 0
|
|
||||||
static void
|
|
||||||
on_state_changed (XklEngine *xklengine,
|
|
||||||
XklEngineStateChange type,
|
|
||||||
gint value,
|
|
||||||
gboolean restore,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
EekLayout *layout = user_data;
|
|
||||||
|
|
||||||
if (type == GROUP_CHANGED)
|
|
||||||
g_signal_emit_by_name (layout, "group_changed", value);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_xkl_layout_init (EekXklLayout *self)
|
eek_xkl_layout_init (EekXklLayout *self)
|
||||||
{
|
{
|
||||||
@ -274,13 +257,6 @@ eek_xkl_layout_init (EekXklLayout *self)
|
|||||||
g_return_if_fail (display);
|
g_return_if_fail (display);
|
||||||
|
|
||||||
priv->engine = xkl_engine_get_instance (display);
|
priv->engine = xkl_engine_get_instance (display);
|
||||||
/* Disabled since the current EekXklLayout implementation does not
|
|
||||||
change the server setting. */
|
|
||||||
#if 0
|
|
||||||
g_signal_connect (priv->engine, "X-state-changed",
|
|
||||||
G_CALLBACK(on_state_changed), self);
|
|
||||||
xkl_engine_start_listen (priv->engine, XKLL_TRACK_KEYBOARD_STATE);
|
|
||||||
#endif
|
|
||||||
xkl_config_rec_get_from_server (priv->config, priv->engine);
|
xkl_config_rec_get_from_server (priv->config, priv->engine);
|
||||||
set_xkb_component_names (self, priv->config);
|
set_xkb_component_names (self, priv->config);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -229,7 +229,7 @@ static gboolean opt_version = FALSE;
|
|||||||
#if HAVE_CLUTTER_GTK
|
#if HAVE_CLUTTER_GTK
|
||||||
static gchar *opt_toolkit = NULL;
|
static gchar *opt_toolkit = NULL;
|
||||||
#endif
|
#endif
|
||||||
static gboolean opt_standalone = FALSE;
|
static gboolean opt_popup = FALSE;
|
||||||
static gchar *opt_config = NULL;
|
static gchar *opt_config = NULL;
|
||||||
|
|
||||||
static const GOptionEntry options[] = {
|
static const GOptionEntry options[] = {
|
||||||
@ -249,8 +249,8 @@ static const GOptionEntry options[] = {
|
|||||||
{"toolkit", 't', 0, G_OPTION_ARG_STRING, &opt_toolkit,
|
{"toolkit", 't', 0, G_OPTION_ARG_STRING, &opt_toolkit,
|
||||||
N_("Toolkit (\"clutter\" or \"gtk\")")},
|
N_("Toolkit (\"clutter\" or \"gtk\")")},
|
||||||
#endif
|
#endif
|
||||||
{"standalone", 's', 0, G_OPTION_ARG_NONE, &opt_standalone,
|
{"popup", 'p', 0, G_OPTION_ARG_NONE, &opt_popup,
|
||||||
N_("Start as a standalone application")},
|
N_("Start as a popup window")},
|
||||||
{"config", 'c', 0, G_OPTION_ARG_STRING, &opt_config,
|
{"config", 'c', 0, G_OPTION_ARG_STRING, &opt_config,
|
||||||
N_("Specify configuration file")},
|
N_("Specify configuration file")},
|
||||||
{"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version,
|
{"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version,
|
||||||
@ -293,6 +293,7 @@ on_quit (gpointer user_data)
|
|||||||
if (eekboard->fakekey)
|
if (eekboard->fakekey)
|
||||||
fakekey_release (eekboard->fakekey);
|
fakekey_release (eekboard->fakekey);
|
||||||
eekboard_free (eekboard);
|
eekboard_free (eekboard);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -417,7 +418,7 @@ on_key_pressed (EekKeyboard *keyboard,
|
|||||||
{
|
{
|
||||||
Eekboard *eekboard = user_data;
|
Eekboard *eekboard = user_data;
|
||||||
gint group, level;
|
gint group, level;
|
||||||
guint keysym, modifiers = 0;
|
guint keysym;
|
||||||
|
|
||||||
keysym = eek_key_get_keysym (key);
|
keysym = eek_key_get_keysym (key);
|
||||||
EEKBOARD_NOTE("%s %X", eek_keysym_to_string (keysym), eekboard->modifiers);
|
EEKBOARD_NOTE("%s %X", eek_keysym_to_string (keysym), eekboard->modifiers);
|
||||||
@ -425,7 +426,7 @@ on_key_pressed (EekKeyboard *keyboard,
|
|||||||
switch (keysym) {
|
switch (keysym) {
|
||||||
case XK_Shift_L:
|
case XK_Shift_L:
|
||||||
case XK_Shift_R:
|
case XK_Shift_R:
|
||||||
eekboard->modifiers ^= ShiftMask;
|
eekboard->modifiers |= ShiftMask;
|
||||||
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
||||||
eek_keyboard_set_keysym_index (keyboard, group,
|
eek_keyboard_set_keysym_index (keyboard, group,
|
||||||
(eekboard->modifiers & Mod5Mask) ? 2 :
|
(eekboard->modifiers & Mod5Mask) ? 2 :
|
||||||
@ -433,7 +434,7 @@ on_key_pressed (EekKeyboard *keyboard,
|
|||||||
0);
|
0);
|
||||||
break;
|
break;
|
||||||
case XK_ISO_Level3_Shift:
|
case XK_ISO_Level3_Shift:
|
||||||
eekboard->modifiers ^= Mod5Mask;
|
eekboard->modifiers |= Mod5Mask;
|
||||||
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
||||||
eek_keyboard_set_keysym_index (keyboard, group,
|
eek_keyboard_set_keysym_index (keyboard, group,
|
||||||
(eekboard->modifiers & Mod5Mask) ? 2 :
|
(eekboard->modifiers & Mod5Mask) ? 2 :
|
||||||
@ -442,14 +443,17 @@ on_key_pressed (EekKeyboard *keyboard,
|
|||||||
break;
|
break;
|
||||||
case XK_Control_L:
|
case XK_Control_L:
|
||||||
case XK_Control_R:
|
case XK_Control_R:
|
||||||
eekboard->modifiers ^= ControlMask;
|
eekboard->modifiers |= ControlMask;
|
||||||
break;
|
break;
|
||||||
case XK_Alt_L:
|
case XK_Alt_L:
|
||||||
case XK_Alt_R:
|
case XK_Alt_R:
|
||||||
eekboard->modifiers ^= Mod1Mask;
|
eekboard->modifiers |= Mod1Mask;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fakekey_press_keysym (eekboard->fakekey, keysym, eekboard->modifiers);
|
fakekey_press_keysym (eekboard->fakekey, keysym, eekboard->modifiers);
|
||||||
|
eekboard->modifiers = 0;
|
||||||
|
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
||||||
|
eek_keyboard_set_keysym_index (keyboard, group, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1143,6 +1147,37 @@ parse_layouts (XklConfigRec *rec, const gchar *_layouts)
|
|||||||
rec->variants = variants;
|
rec->variants = variants;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkFilterReturn
|
||||||
|
filter_xkl_event (GdkXEvent * xev,
|
||||||
|
GdkEvent * event,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
XEvent *xevent = (XEvent *) xev;
|
||||||
|
Eekboard *eekboard = user_data;
|
||||||
|
|
||||||
|
xkl_engine_filter_events (eekboard->engine, xevent);
|
||||||
|
return GDK_FILTER_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_xkl_config_changed (XklEngine *xklengine,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_xkl_state_changed (XklEngine *xklengine,
|
||||||
|
XklEngineStateChange type,
|
||||||
|
gint value,
|
||||||
|
gboolean restore,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
Eekboard *eekboard = user_data;
|
||||||
|
|
||||||
|
if (type == GROUP_CHANGED)
|
||||||
|
g_signal_emit_by_name (eekboard->layout, "group_changed", value);
|
||||||
|
}
|
||||||
|
|
||||||
Eekboard *
|
Eekboard *
|
||||||
eekboard_new (gboolean use_clutter,
|
eekboard_new (gboolean use_clutter,
|
||||||
gboolean need_swap_event_workaround,
|
gboolean need_swap_event_workaround,
|
||||||
@ -1200,6 +1235,18 @@ eekboard_new (gboolean use_clutter,
|
|||||||
eekboard->engine = xkl_engine_get_instance (eekboard->display);
|
eekboard->engine = xkl_engine_get_instance (eekboard->display);
|
||||||
eekboard->registry = xkl_config_registry_get_instance (eekboard->engine);
|
eekboard->registry = xkl_config_registry_get_instance (eekboard->engine);
|
||||||
xkl_config_registry_load (eekboard->registry, FALSE);
|
xkl_config_registry_load (eekboard->registry, FALSE);
|
||||||
|
g_signal_connect (eekboard->engine, "X-config-changed",
|
||||||
|
G_CALLBACK(on_xkl_config_changed), eekboard);
|
||||||
|
g_signal_connect (eekboard->engine, "X-state-changed",
|
||||||
|
G_CALLBACK(on_xkl_state_changed), eekboard);
|
||||||
|
|
||||||
|
gdk_window_add_filter (NULL,
|
||||||
|
(GdkFilterFunc)filter_xkl_event,
|
||||||
|
eekboard);
|
||||||
|
gdk_window_add_filter (gdk_get_default_root_window (),
|
||||||
|
(GdkFilterFunc) filter_xkl_event,
|
||||||
|
eekboard);
|
||||||
|
xkl_engine_start_listen (eekboard->engine, XKLL_TRACK_KEYBOARD_STATE);
|
||||||
|
|
||||||
return eekboard;
|
return eekboard;
|
||||||
}
|
}
|
||||||
@ -1363,7 +1410,7 @@ config_parser_start_element (GMarkupParseContext *pcontext,
|
|||||||
config->rec = xkl_config_rec_new ();
|
config->rec = xkl_config_rec_new ();
|
||||||
context->list = g_slist_prepend (context->list, config);
|
context->list = g_slist_prepend (context->list, config);
|
||||||
} else
|
} else
|
||||||
context->text = g_string_sized_new (100);
|
context->text->len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1388,8 +1435,7 @@ config_parser_end_element (GMarkupParseContext *pcontext,
|
|||||||
if (!context->text)
|
if (!context->text)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
text = g_string_free (context->text, FALSE);
|
text = g_strndup (context->text->str, context->text->len);
|
||||||
context->text = NULL;
|
|
||||||
|
|
||||||
if (g_strcmp0 (element_name, "name") == 0)
|
if (g_strcmp0 (element_name, "name") == 0)
|
||||||
config->name = text;
|
config->name = text;
|
||||||
@ -1409,8 +1455,7 @@ config_parser_text (GMarkupParseContext *pcontext,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
ConfigContext *context = user_data;
|
ConfigContext *context = user_data;
|
||||||
if (context->text)
|
context->text = g_string_append_len (context->text, text, text_len);
|
||||||
context->text = g_string_append_len (context->text, text, text_len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GMarkupParser config_parser = {
|
GMarkupParser config_parser = {
|
||||||
@ -1531,7 +1576,6 @@ main (int argc, char *argv[])
|
|||||||
GSList *head;
|
GSList *head;
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
memset (&context, 0, sizeof context);
|
|
||||||
file = g_file_new_for_path (opt_config);
|
file = g_file_new_for_path (opt_config);
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
@ -1542,6 +1586,8 @@ main (int argc, char *argv[])
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context.list = NULL;
|
||||||
|
context.text = g_string_sized_new (BUFSIZ);
|
||||||
pcontext = g_markup_parse_context_new (&config_parser,
|
pcontext = g_markup_parse_context_new (&config_parser,
|
||||||
0,
|
0,
|
||||||
&context,
|
&context,
|
||||||
@ -1565,6 +1611,7 @@ main (int argc, char *argv[])
|
|||||||
error = NULL;
|
error = NULL;
|
||||||
g_markup_parse_context_end_parse (pcontext, &error);
|
g_markup_parse_context_end_parse (pcontext, &error);
|
||||||
g_markup_parse_context_free (pcontext);
|
g_markup_parse_context_free (pcontext);
|
||||||
|
g_string_free (context.text, TRUE);
|
||||||
g_object_unref (file);
|
g_object_unref (file);
|
||||||
|
|
||||||
if (context.list) {
|
if (context.list) {
|
||||||
@ -1576,9 +1623,9 @@ main (int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
window = gtk_window_new (opt_standalone ?
|
window = gtk_window_new (opt_popup ?
|
||||||
GTK_WINDOW_TOPLEVEL :
|
GTK_WINDOW_POPUP :
|
||||||
GTK_WINDOW_POPUP);
|
GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_widget_set_can_focus (window, FALSE);
|
gtk_widget_set_can_focus (window, FALSE);
|
||||||
g_object_set (G_OBJECT(window), "accept_focus", FALSE, NULL);
|
g_object_set (G_OBJECT(window), "accept_focus", FALSE, NULL);
|
||||||
gtk_window_set_title (GTK_WINDOW(window), "Keyboard");
|
gtk_window_set_title (GTK_WINDOW(window), "Keyboard");
|
||||||
@ -1590,7 +1637,7 @@ main (int argc, char *argv[])
|
|||||||
g_object_set_data (G_OBJECT(window), "eekboard", eekboard);
|
g_object_set_data (G_OBJECT(window), "eekboard", eekboard);
|
||||||
widget = create_widget (eekboard, CSW, CSH);
|
widget = create_widget (eekboard, CSW, CSH);
|
||||||
|
|
||||||
if (opt_standalone) {
|
if (!opt_popup) {
|
||||||
create_menus (eekboard, window);
|
create_menus (eekboard, window);
|
||||||
menubar = gtk_ui_manager_get_widget (eekboard->ui_manager, "/MainMenu");
|
menubar = gtk_ui_manager_get_widget (eekboard->ui_manager, "/MainMenu");
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
|
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
|
||||||
@ -1632,7 +1679,7 @@ main (int argc, char *argv[])
|
|||||||
eekboard->window = window;
|
eekboard->window = window;
|
||||||
eekboard->gconfc = gconfc;
|
eekboard->gconfc = gconfc;
|
||||||
if (eekboard->accessibility_enabled) {
|
if (eekboard->accessibility_enabled) {
|
||||||
if (!opt_standalone) {
|
if (opt_popup) {
|
||||||
NotifyNotification *notification;
|
NotifyNotification *notification;
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
@ -1663,9 +1710,8 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
gtk_widget_hide (window);
|
gtk_widget_hide (window);
|
||||||
|
|
||||||
focusListener =
|
focusListener = SPI_createAccessibleEventListener ((AccessibleEventListenerCB)a11y_focus_listener,
|
||||||
SPI_createAccessibleEventListener (a11y_focus_listener,
|
eekboard);
|
||||||
eekboard);
|
|
||||||
SPI_registerGlobalEventListener (focusListener,
|
SPI_registerGlobalEventListener (focusListener,
|
||||||
"object:state-changed:focused");
|
"object:state-changed:focused");
|
||||||
SPI_registerGlobalEventListener (focusListener,
|
SPI_registerGlobalEventListener (focusListener,
|
||||||
|
|||||||
Reference in New Issue
Block a user