EekXklLayout: eek_xkl_layout_set_config() takes XklConfigRec as an argument.
This commit is contained in:
		@ -326,7 +326,7 @@ eek_xkb_layout_real_apply (EekLayout *layout, EekKeyboard *keyboard)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gint
 | 
					static gint
 | 
				
			||||||
compare_component_names (gchar *name0, gchar *name1)
 | 
					compare_component_name (gchar *name0, gchar *name1)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (name0 && name1)
 | 
					    if (name0 && name1)
 | 
				
			||||||
        return g_strcmp0 (name0, name1);
 | 
					        return g_strcmp0 (name0, name1);
 | 
				
			||||||
@ -345,19 +345,27 @@ eek_xkb_layout_real_set_names (EekXkbLayout *self, XkbComponentNamesRec *names)
 | 
				
			|||||||
    gboolean is_changed;
 | 
					    gboolean is_changed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (priv);
 | 
					    g_return_if_fail (priv);
 | 
				
			||||||
    is_changed =
 | 
					
 | 
				
			||||||
        compare_component_names (names->keycodes, priv->names.keycodes) != 0;
 | 
					    /* keycodes */
 | 
				
			||||||
 | 
					    if (compare_component_name (names->keycodes, priv->names.keycodes) != 0)
 | 
				
			||||||
 | 
					        is_changed = TRUE;
 | 
				
			||||||
    g_free (priv->names.keycodes);
 | 
					    g_free (priv->names.keycodes);
 | 
				
			||||||
    priv->names.keycodes = g_strdup (names->keycodes);
 | 
					    priv->names.keycodes = g_strdup (names->keycodes);
 | 
				
			||||||
    is_changed =
 | 
					
 | 
				
			||||||
        compare_component_names (names->geometry, priv->names.geometry) != 0;
 | 
					    /* geometry */
 | 
				
			||||||
 | 
					    if (compare_component_name (names->geometry, priv->names.geometry) != 0)
 | 
				
			||||||
 | 
					        is_changed = TRUE;
 | 
				
			||||||
    g_free (priv->names.geometry);
 | 
					    g_free (priv->names.geometry);
 | 
				
			||||||
    priv->names.geometry = g_strdup (names->geometry);
 | 
					    priv->names.geometry = g_strdup (names->geometry);
 | 
				
			||||||
    is_changed =
 | 
					
 | 
				
			||||||
        compare_component_names (names->symbols, priv->names.symbols) != 0;
 | 
					    /* symbols */
 | 
				
			||||||
 | 
					    if (compare_component_name (names->symbols, priv->names.symbols) != 0)
 | 
				
			||||||
 | 
					        is_changed = TRUE;
 | 
				
			||||||
    g_free (priv->names.symbols);
 | 
					    g_free (priv->names.symbols);
 | 
				
			||||||
    priv->names.symbols = g_strdup (names->symbols);
 | 
					    priv->names.symbols = g_strdup (names->symbols);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get_keyboard (self);
 | 
					    get_keyboard (self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (is_changed)
 | 
					    if (is_changed)
 | 
				
			||||||
        g_signal_emit_by_name (self, "changed");
 | 
					        g_signal_emit_by_name (self, "changed");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -59,7 +59,7 @@ enum {
 | 
				
			|||||||
struct _EekXklLayoutPrivate
 | 
					struct _EekXklLayoutPrivate
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    XklEngine *engine;
 | 
					    XklEngine *engine;
 | 
				
			||||||
    XklConfigRec config;
 | 
					    XklConfigRec *config;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* from gnome-keyboard-properties-xkbpv.c:
 | 
					/* from gnome-keyboard-properties-xkbpv.c:
 | 
				
			||||||
@ -98,14 +98,19 @@ eek_layout_iface_init (EekLayoutIface *iface)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eek_xkl_layout_finalize (GObject *object)
 | 
					eek_xkl_layout_dispose (GObject *object)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (object);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_free (priv->config.layouts);
 | 
					    if (priv->config) {
 | 
				
			||||||
    g_free (priv->config.variants);
 | 
					        g_object_unref (priv->config);
 | 
				
			||||||
    g_free (priv->config.options);
 | 
					        priv->config = NULL;
 | 
				
			||||||
    G_OBJECT_CLASS (eek_xkl_layout_parent_class)->finalize (object);
 | 
					    }
 | 
				
			||||||
 | 
					    if (priv->engine) {
 | 
				
			||||||
 | 
					        g_object_unref (priv->engine);
 | 
				
			||||||
 | 
					        priv->engine = NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    G_OBJECT_CLASS (eek_xkl_layout_parent_class)->dispose (object);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void 
 | 
					static void 
 | 
				
			||||||
@ -175,7 +180,7 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate));
 | 
					    g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gobject_class->finalize = eek_xkl_layout_finalize;
 | 
					    gobject_class->dispose = eek_xkl_layout_dispose;
 | 
				
			||||||
    gobject_class->set_property = eek_xkl_layout_set_property;
 | 
					    gobject_class->set_property = eek_xkl_layout_set_property;
 | 
				
			||||||
    gobject_class->get_property = eek_xkl_layout_get_property;
 | 
					    gobject_class->get_property = eek_xkl_layout_get_property;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -201,6 +206,7 @@ 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);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
on_state_changed (XklEngine           *xklengine,
 | 
					on_state_changed (XklEngine           *xklengine,
 | 
				
			||||||
                  XklEngineStateChange type,
 | 
					                  XklEngineStateChange type,
 | 
				
			||||||
@ -213,6 +219,7 @@ on_state_changed (XklEngine           *xklengine,
 | 
				
			|||||||
    if (type == GROUP_CHANGED)
 | 
					    if (type == GROUP_CHANGED)
 | 
				
			||||||
        g_signal_emit_by_name (layout, "group_changed", value);
 | 
					        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)
 | 
				
			||||||
@ -221,17 +228,19 @@ eek_xkl_layout_init (EekXklLayout *self)
 | 
				
			|||||||
    Display *display;
 | 
					    Display *display;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    priv = self->priv = EEK_XKL_LAYOUT_GET_PRIVATE (self);
 | 
					    priv = self->priv = EEK_XKL_LAYOUT_GET_PRIVATE (self);
 | 
				
			||||||
    memset (&priv->config, 0, sizeof priv->config);
 | 
					    priv->config = xkl_config_rec_new ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
 | 
					    display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
 | 
				
			||||||
    g_return_if_fail (display);
 | 
					    g_return_if_fail (display);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    priv->engine = xkl_engine_get_instance (display);
 | 
					    priv->engine = xkl_engine_get_instance (display);
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
    g_signal_connect (priv->engine, "X-state-changed",
 | 
					    g_signal_connect (priv->engine, "X-state-changed",
 | 
				
			||||||
                      G_CALLBACK(on_state_changed), self);
 | 
					                      G_CALLBACK(on_state_changed), self);
 | 
				
			||||||
    xkl_config_rec_get_from_server (&priv->config, priv->engine);
 | 
					 | 
				
			||||||
    get_xkb_component_names (self);
 | 
					 | 
				
			||||||
    xkl_engine_start_listen (priv->engine, XKLL_TRACK_KEYBOARD_STATE);
 | 
					    xkl_engine_start_listen (priv->engine, XKLL_TRACK_KEYBOARD_STATE);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    xkl_config_rec_get_from_server (priv->config, priv->engine);
 | 
				
			||||||
 | 
					    get_xkb_component_names (self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EekLayout *
 | 
					EekLayout *
 | 
				
			||||||
@ -242,53 +251,93 @@ eek_xkl_layout_new (void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_xkl_layout_set_config (EekXklLayout *layout,
 | 
					eek_xkl_layout_set_config (EekXklLayout *layout,
 | 
				
			||||||
                           gchar       **layouts,
 | 
					                           XklConfigRec *config)
 | 
				
			||||||
                           gchar       **variants,
 | 
					 | 
				
			||||||
                           gchar       **options)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (priv);
 | 
					    g_return_if_fail (priv);
 | 
				
			||||||
    g_strfreev (priv->config.layouts);
 | 
					    if (config->model) {
 | 
				
			||||||
    priv->config.layouts = g_strdupv (layouts);
 | 
					        g_free (priv->config->model);
 | 
				
			||||||
    g_strfreev (priv->config.variants);
 | 
					        priv->config->model = g_strdup (config->model);
 | 
				
			||||||
    priv->config.variants = g_strdupv (variants);
 | 
					    }
 | 
				
			||||||
    g_strfreev (priv->config.options);
 | 
					    if (config->layouts) {
 | 
				
			||||||
    priv->config.options = g_strdupv (options);
 | 
					        g_strfreev (priv->config->layouts);
 | 
				
			||||||
 | 
					        priv->config->layouts = g_strdupv (config->layouts);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config->variants) {
 | 
				
			||||||
 | 
					        g_strfreev (priv->config->variants);
 | 
				
			||||||
 | 
					        priv->config->variants = g_strdupv (config->variants);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config->options) {
 | 
				
			||||||
 | 
					        g_strfreev (priv->config->options);
 | 
				
			||||||
 | 
					        priv->config->options = g_strdupv (config->options);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    get_xkb_component_names (layout);
 | 
					    get_xkb_component_names (layout);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_xkl_layout_set_layouts (EekXklLayout *layout, gchar **layouts)
 | 
					eek_xkl_layout_set_model (EekXklLayout *layout,
 | 
				
			||||||
 | 
					                          gchar        *model)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					    XklConfigRec *config;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    g_return_if_fail (priv);
 | 
					    g_return_if_fail (priv);
 | 
				
			||||||
    g_strfreev (priv->config.layouts);
 | 
					    config = xkl_config_rec_new ();
 | 
				
			||||||
    priv->config.layouts = g_strdupv (layouts);
 | 
					    config->model = model;
 | 
				
			||||||
    get_xkb_component_names (layout);
 | 
					    eek_xkl_layout_set_config (layout, config);
 | 
				
			||||||
 | 
					    g_object_unref (config);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_xkl_layout_set_variants (EekXklLayout *layout, gchar **variants)
 | 
					eek_xkl_layout_set_layouts (EekXklLayout *layout,
 | 
				
			||||||
 | 
					                            gchar       **layouts)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					    XklConfigRec *config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (priv);
 | 
					    g_return_if_fail (priv);
 | 
				
			||||||
    g_strfreev (priv->config.variants);
 | 
					    config = xkl_config_rec_new ();
 | 
				
			||||||
    priv->config.variants = g_strdupv (variants);
 | 
					    config->layouts = layouts;
 | 
				
			||||||
    get_xkb_component_names (layout);
 | 
					    eek_xkl_layout_set_config (layout, config);
 | 
				
			||||||
 | 
					    g_object_unref (config);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
eek_xkl_layout_set_options (EekXklLayout *layout, gchar **options)
 | 
					eek_xkl_layout_set_variants (EekXklLayout *layout,
 | 
				
			||||||
 | 
					                             gchar       **variants)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					    XklConfigRec *config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (priv);
 | 
				
			||||||
 | 
					    config = xkl_config_rec_new ();
 | 
				
			||||||
 | 
					    config->variants = variants;
 | 
				
			||||||
 | 
					    eek_xkl_layout_set_config (layout, config);
 | 
				
			||||||
 | 
					    g_object_unref (config);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					eek_xkl_layout_set_options (EekXklLayout *layout,
 | 
				
			||||||
 | 
					                            gchar       **options)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					    XklConfigRec *config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_return_if_fail (priv);
 | 
				
			||||||
 | 
					    config = xkl_config_rec_new ();
 | 
				
			||||||
 | 
					    config->options = options;
 | 
				
			||||||
 | 
					    eek_xkl_layout_set_config (layout, config);
 | 
				
			||||||
 | 
					    g_object_unref (config);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gchar *
 | 
				
			||||||
 | 
					eek_xkl_layout_get_model (EekXklLayout *layout)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_if_fail (priv);
 | 
					    g_return_val_if_fail (priv, NULL);
 | 
				
			||||||
    g_strfreev (priv->config.options);
 | 
					    return priv->config->model;
 | 
				
			||||||
    priv->config.options = g_strdupv (options);
 | 
					 | 
				
			||||||
    get_xkb_component_names (layout);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gchar **
 | 
					gchar **
 | 
				
			||||||
@ -297,7 +346,7 @@ eek_xkl_layout_get_layouts (EekXklLayout *layout)
 | 
				
			|||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_val_if_fail (priv, NULL);
 | 
					    g_return_val_if_fail (priv, NULL);
 | 
				
			||||||
    return priv->config.layouts;
 | 
					    return priv->config->layouts;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gchar **
 | 
					gchar **
 | 
				
			||||||
@ -306,7 +355,7 @@ eek_xkl_layout_get_variants (EekXklLayout *layout)
 | 
				
			|||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_val_if_fail (priv, NULL);
 | 
					    g_return_val_if_fail (priv, NULL);
 | 
				
			||||||
    return priv->config.variants;
 | 
					    return priv->config->variants;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gchar **
 | 
					gchar **
 | 
				
			||||||
@ -315,7 +364,7 @@ eek_xkl_layout_get_options (EekXklLayout *layout)
 | 
				
			|||||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
					    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_return_val_if_fail (priv, NULL);
 | 
					    g_return_val_if_fail (priv, NULL);
 | 
				
			||||||
    return priv->config.options;
 | 
					    return priv->config->options;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -324,8 +373,7 @@ get_xkb_component_names (EekXklLayout *layout)
 | 
				
			|||||||
    EekXklLayoutPrivate *priv = layout->priv;
 | 
					    EekXklLayoutPrivate *priv = layout->priv;
 | 
				
			||||||
    XkbComponentNamesRec names;
 | 
					    XkbComponentNamesRec names;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (xkl_xkb_config_native_prepare (priv->engine, &priv->config, &names)) {
 | 
					    if (xkl_xkb_config_native_prepare (priv->engine, priv->config, &names)) {
 | 
				
			||||||
        g_debug ("symbols = \"%s\"", names.symbols);
 | 
					 | 
				
			||||||
        EEK_XKB_LAYOUT_GET_CLASS (layout)->
 | 
					        EEK_XKB_LAYOUT_GET_CLASS (layout)->
 | 
				
			||||||
            set_names (EEK_XKB_LAYOUT(layout), &names);
 | 
					            set_names (EEK_XKB_LAYOUT(layout), &names);
 | 
				
			||||||
        xkl_xkb_config_native_cleanup (priv->engine, &names);
 | 
					        xkl_xkb_config_native_cleanup (priv->engine, &names);
 | 
				
			||||||
 | 
				
			|||||||
@ -54,10 +54,10 @@ GType      eek_xkl_layout_get_type     (void) G_GNUC_CONST;
 | 
				
			|||||||
EekLayout *eek_xkl_layout_new          (void);
 | 
					EekLayout *eek_xkl_layout_new          (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void       eek_xkl_layout_set_config   (EekXklLayout *layout,
 | 
					void       eek_xkl_layout_set_config   (EekXklLayout *layout,
 | 
				
			||||||
                                        gchar       **layouts,
 | 
					                                        XklConfigRec *config);
 | 
				
			||||||
                                        gchar       **variants,
 | 
					 | 
				
			||||||
                                        gchar       **options);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void       eek_xkl_layout_set_model    (EekXklLayout *layout,
 | 
				
			||||||
 | 
					                                        gchar        *model);
 | 
				
			||||||
void       eek_xkl_layout_set_layouts  (EekXklLayout *layout,
 | 
					void       eek_xkl_layout_set_layouts  (EekXklLayout *layout,
 | 
				
			||||||
                                        gchar       **layouts);
 | 
					                                        gchar       **layouts);
 | 
				
			||||||
void       eek_xkl_layout_set_variants (EekXklLayout *layout,
 | 
					void       eek_xkl_layout_set_variants (EekXklLayout *layout,
 | 
				
			||||||
@ -65,6 +65,7 @@ void       eek_xkl_layout_set_variants (EekXklLayout *layout,
 | 
				
			|||||||
void       eek_xkl_layout_set_options  (EekXklLayout *layout,
 | 
					void       eek_xkl_layout_set_options  (EekXklLayout *layout,
 | 
				
			||||||
                                        gchar       **options);
 | 
					                                        gchar       **options);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gchar     *eek_xkl_layout_get_model    (EekXklLayout *layout);
 | 
				
			||||||
gchar    **eek_xkl_layout_get_layouts  (EekXklLayout *layout);
 | 
					gchar    **eek_xkl_layout_get_layouts  (EekXklLayout *layout);
 | 
				
			||||||
gchar    **eek_xkl_layout_get_variants
 | 
					gchar    **eek_xkl_layout_get_variants
 | 
				
			||||||
                                       (EekXklLayout *layout);
 | 
					                                       (EekXklLayout *layout);
 | 
				
			||||||
 | 
				
			|||||||
@ -85,12 +85,11 @@ static const char ui_description[] =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define SET_LAYOUT_UI_PATH "/MainMenu/KeyboardMenu/SetLayout/LayoutsPH"
 | 
					#define SET_LAYOUT_UI_PATH "/MainMenu/KeyboardMenu/SetLayout/LayoutsPH"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _LayoutVariant {
 | 
					struct _ConfigCallbackData {
 | 
				
			||||||
    EekBoard *eekboard;
 | 
					    EekBoard *eekboard;
 | 
				
			||||||
    gchar *layout;
 | 
					    XklConfigRec *config;
 | 
				
			||||||
    gchar *variant;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
typedef struct _LayoutVariant LayoutVariant;
 | 
					typedef struct _ConfigCallbackData ConfigCallbackData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _LayoutCallbackData {
 | 
					struct _LayoutCallbackData {
 | 
				
			||||||
    EekBoard *eekboard;
 | 
					    EekBoard *eekboard;
 | 
				
			||||||
@ -180,18 +179,11 @@ on_key_released (EekKeyboard *keyboard,
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
on_activate (GtkAction *action, gpointer user_data)
 | 
					on_activate (GtkAction *action, gpointer user_data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    LayoutVariant *config = user_data;
 | 
					    ConfigCallbackData *data = user_data;
 | 
				
			||||||
    gchar *layouts[2], *variants[2], **vp = NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    layouts[0] = config->layout;
 | 
					    eek_xkl_layout_set_config (EEK_XKL_LAYOUT(data->eekboard->layout),
 | 
				
			||||||
    layouts[1] = NULL;
 | 
					                               data->config);
 | 
				
			||||||
    if (config->variant) {
 | 
					    g_object_unref (data->config);
 | 
				
			||||||
        variants[0] = config->variant;
 | 
					 | 
				
			||||||
        variants[1] = NULL;
 | 
					 | 
				
			||||||
        vp = variants;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    eek_xkl_layout_set_config (EEK_XKL_LAYOUT(config->eekboard->layout),
 | 
					 | 
				
			||||||
                               layouts, vp, NULL);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -202,7 +194,6 @@ create_keyboard (EekBoard  *eekboard,
 | 
				
			|||||||
                 gfloat     initial_height)
 | 
					                 gfloat     initial_height)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ClutterActor *actor;
 | 
					    ClutterActor *actor;
 | 
				
			||||||
    GValue value = {0};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eekboard->keyboard = eek_clutter_keyboard_new (initial_width,
 | 
					    eekboard->keyboard = eek_clutter_keyboard_new (initial_width,
 | 
				
			||||||
                                                   initial_height);
 | 
					                                                   initial_height);
 | 
				
			||||||
@ -261,7 +252,7 @@ layout_callback (XklConfigRegistry *registry,
 | 
				
			|||||||
    GtkAction *action;
 | 
					    GtkAction *action;
 | 
				
			||||||
    GSList *variants = NULL;
 | 
					    GSList *variants = NULL;
 | 
				
			||||||
    char layout_action_name[128], variant_action_name[128];
 | 
					    char layout_action_name[128], variant_action_name[128];
 | 
				
			||||||
    LayoutVariant *config;
 | 
					    ConfigCallbackData *config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_snprintf (layout_action_name, sizeof (layout_action_name),
 | 
					    g_snprintf (layout_action_name, sizeof (layout_action_name),
 | 
				
			||||||
                "SetLayout%s", item->name);
 | 
					                "SetLayout%s", item->name);
 | 
				
			||||||
@ -274,13 +265,15 @@ layout_callback (XklConfigRegistry *registry,
 | 
				
			|||||||
                                                &variants);
 | 
					                                                &variants);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!variants) {
 | 
					    if (!variants) {
 | 
				
			||||||
        config = g_slice_new (LayoutVariant);
 | 
					        config = g_slice_new (ConfigCallbackData);
 | 
				
			||||||
        config->eekboard = data->eekboard;
 | 
					        config->eekboard = data->eekboard;
 | 
				
			||||||
        config->layout = g_strdup (item->name);
 | 
					        config->config = xkl_config_rec_new ();
 | 
				
			||||||
        config->variant = NULL;
 | 
					        config->config->layouts = g_new0 (char *, 2);
 | 
				
			||||||
 | 
					        config->config->layouts[0] = g_strdup (item->name);
 | 
				
			||||||
 | 
					        config->config->layouts[1] = NULL;
 | 
				
			||||||
 | 
					        config->config->variants = NULL;
 | 
				
			||||||
        g_signal_connect (action, "activate", G_CALLBACK (on_activate),
 | 
					        g_signal_connect (action, "activate", G_CALLBACK (on_activate),
 | 
				
			||||||
                          config);
 | 
					                          config);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        g_object_unref (action);
 | 
					        g_object_unref (action);
 | 
				
			||||||
        gtk_ui_manager_add_ui (data->ui_manager, data->merge_id,
 | 
					        gtk_ui_manager_add_ui (data->ui_manager, data->merge_id,
 | 
				
			||||||
                               SET_LAYOUT_UI_PATH,
 | 
					                               SET_LAYOUT_UI_PATH,
 | 
				
			||||||
@ -308,10 +301,15 @@ layout_callback (XklConfigRegistry *registry,
 | 
				
			|||||||
                                     NULL,
 | 
					                                     NULL,
 | 
				
			||||||
                                     NULL);
 | 
					                                     NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            config = g_slice_new (LayoutVariant);
 | 
					            config = g_slice_new (ConfigCallbackData);
 | 
				
			||||||
            config->eekboard = data->eekboard;
 | 
					            config->eekboard = data->eekboard;
 | 
				
			||||||
            config->layout = g_strdup (item->name);
 | 
					            config->config = xkl_config_rec_new ();
 | 
				
			||||||
            config->variant = g_strdup (_item->name);
 | 
					            config->config->layouts = g_new0 (char *, 2);
 | 
				
			||||||
 | 
					            config->config->layouts[0] = g_strdup (item->name);
 | 
				
			||||||
 | 
					            config->config->layouts[1] = NULL;
 | 
				
			||||||
 | 
					            config->config->variants = g_new0 (char *, 2);
 | 
				
			||||||
 | 
					            config->config->variants[0] = g_strdup (_item->name);
 | 
				
			||||||
 | 
					            config->config->variants[1] = NULL;
 | 
				
			||||||
            g_signal_connect (action, "activate", G_CALLBACK (on_activate),
 | 
					            g_signal_connect (action, "activate", G_CALLBACK (on_activate),
 | 
				
			||||||
                              config);
 | 
					                              config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -410,8 +408,10 @@ main (int argc, char *argv[])
 | 
				
			|||||||
    GtkWidget *menubar, *embed, *vbox, *window;
 | 
					    GtkWidget *menubar, *embed, *vbox, *window;
 | 
				
			||||||
    GtkUIManager *ui_manager;
 | 
					    GtkUIManager *ui_manager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    clutter_init (&argc, &argv);
 | 
					    if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) {
 | 
				
			||||||
    gtk_init (&argc, &argv);
 | 
					        fprintf (stderr, "Can't init Clutter-Gtk\n");
 | 
				
			||||||
 | 
					        exit (1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memset (&eekboard, 0, sizeof eekboard);
 | 
					    memset (&eekboard, 0, sizeof eekboard);
 | 
				
			||||||
    eekboard.display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
 | 
					    eekboard.display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user