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);
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1143,6 +1143,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 +1231,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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user