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