eekboard: listen xklavier status events.
This commit is contained in:
@ -244,23 +244,6 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
|
||||
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
|
||||
eek_xkl_layout_init (EekXklLayout *self)
|
||||
{
|
||||
@ -274,13 +257,6 @@ eek_xkl_layout_init (EekXklLayout *self)
|
||||
g_return_if_fail (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);
|
||||
set_xkb_component_names (self, priv->config);
|
||||
}
|
||||
|
||||
@ -1143,6 +1143,37 @@ parse_layouts (XklConfigRec *rec, const gchar *_layouts)
|
||||
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_new (gboolean use_clutter,
|
||||
gboolean need_swap_event_workaround,
|
||||
@ -1200,6 +1231,18 @@ eekboard_new (gboolean use_clutter,
|
||||
eekboard->engine = xkl_engine_get_instance (eekboard->display);
|
||||
eekboard->registry = xkl_config_registry_get_instance (eekboard->engine);
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user