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