From a388d9e6e1adb8ebcc0b7aa02a48db5047a44fdf Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Tue, 22 Jun 2010 16:14:01 +0900 Subject: [PATCH] libeek: add wrapper functions to avoid exposing XKB/XKL structures to GIR --- eek/eek-xkb-layout.c | 36 +++++++++++++++++++++++++++++++ eek/eek-xkb-layout.h | 10 +++++++++ eek/eek-xkl-layout.c | 36 +++++++++++++++++++++++++++++++ eek/eek-xkl-layout.h | 50 +++++++++++++++++++++++++------------------- 4 files changed, 110 insertions(+), 22 deletions(-) diff --git a/eek/eek-xkb-layout.c b/eek/eek-xkb-layout.c index 5c0bbb1c..819fb249 100644 --- a/eek/eek-xkb-layout.c +++ b/eek/eek-xkb-layout.c @@ -607,6 +607,42 @@ eek_xkb_layout_set_names (EekXkbLayout *layout, XkbComponentNamesRec *names) return TRUE; } +/** + * eek_xkb_layout_set_names_full: + * @layout: an #EekXkbLayout + * @keymap: keymap component name + * @keycodes: keycodes component name + * @types: types component name + * @compat: compat component name + * @symbols: symbols component name + * @geometry: geometry component name + * + * Set the XKB component names to @layout. This function is merely a + * wrapper around eek_xkb_layout_set_names() to avoid passing an + * XkbComponentNamesRec pointer (which is not currently available in + * the gobject-introspection repository). + * + * Returns: %TRUE if the component name is successfully set, %FALSE otherwise + */ +gboolean +eek_xkb_layout_set_names_full (EekXkbLayout *layout, + const gchar *keymap, + const gchar *keycodes, + const gchar *types, + const gchar *compat, + const gchar *symbols, + const gchar *geometry) +{ + XkbComponentNamesRec names; + names.keymap = keymap; + names.keycodes = keycodes; + names.types = types; + names.compat = compat; + names.symbols = symbols; + names.geometry = geometry; + return eek_xkb_layout_set_names (layout, &names); +} + /** * eek_xkb_layout_set_keycodes: * @layout: an #EekXkbLayout diff --git a/eek/eek-xkb-layout.h b/eek/eek-xkb-layout.h index a9c8be26..095f7410 100644 --- a/eek/eek-xkb-layout.h +++ b/eek/eek-xkb-layout.h @@ -60,6 +60,16 @@ EekLayout *eek_xkb_layout_new (void); gboolean eek_xkb_layout_set_names (EekXkbLayout *layout, XkbComponentNamesRec *names); + +gboolean eek_xkb_layout_set_names_full + (EekXkbLayout *layout, + const gchar *keymap, + const gchar *keycodes, + const gchar *types, + const gchar *compat, + const gchar *symbols, + const gchar *geometry); + gboolean eek_xkb_layout_set_keycodes (EekXkbLayout *layout, const gchar *keycodes); diff --git a/eek/eek-xkl-layout.c b/eek/eek-xkl-layout.c index 1757b4e9..8d8b3536 100644 --- a/eek/eek-xkl-layout.c +++ b/eek/eek-xkl-layout.c @@ -345,6 +345,42 @@ eek_xkl_layout_set_config (EekXklLayout *layout, return FALSE; } +/** + * eek_xkl_layout_set_config_full: + * @layout: an #EekXklLayout + * @model: Libxklavier model name + * @layouts: Libxklavier layouts + * @variants: Libxklavier variants + * @options: Libxklavier options + * + * Reconfigure @layout with @model, @layouts, @variants, and @options. + * This function is merely a wrapper around + * eek_xkl_layout_set_config() to avoid passing an XklConfigRec + * pointer (which is not currently available in the + * gobject-introspection repository). + * + * Returns: %TRUE if the component name is successfully set, %FALSE otherwise + */ +gboolean +eek_xkl_layout_set_config_full (EekXklLayout *layout, + gchar *model, + gchar **layouts, + gchar **variants, + gchar **options) +{ + XklConfigRec *config; + gboolean success; + + config = xkl_config_rec_new (); + config->model = g_strdup (model); + config->layouts = g_strdupv (layouts); + config->variants = g_strdupv (variants); + config->options = g_strdupv (options); + success = eek_xkl_layout_set_config (layout, config); + g_object_unref (config); + return success; +} + /** * eek_xkl_layout_set_model: * @layout: an #EekXklLayout diff --git a/eek/eek-xkl-layout.h b/eek/eek-xkl-layout.h index d992af60..0fb3b1bf 100644 --- a/eek/eek-xkl-layout.h +++ b/eek/eek-xkl-layout.h @@ -54,32 +54,38 @@ struct _EekXklLayoutClass gpointer pdummy[24]; }; -GType eek_xkl_layout_get_type (void) G_GNUC_CONST; +GType eek_xkl_layout_get_type (void) G_GNUC_CONST; -EekLayout *eek_xkl_layout_new (void); +EekLayout *eek_xkl_layout_new (void); -gboolean eek_xkl_layout_set_config (EekXklLayout *layout, - XklConfigRec *config); +gboolean eek_xkl_layout_set_config (EekXklLayout *layout, + XklConfigRec *config); -gboolean eek_xkl_layout_set_model (EekXklLayout *layout, - const gchar *model); -gboolean eek_xkl_layout_set_layouts (EekXklLayout *layout, - gchar **layouts); -gboolean eek_xkl_layout_set_variants (EekXklLayout *layout, - gchar **variants); -gboolean eek_xkl_layout_set_options (EekXklLayout *layout, - gchar **options); -gboolean eek_xkl_layout_enable_option (EekXklLayout *layout, - const gchar *option); -gboolean eek_xkl_layout_disable_option (EekXklLayout *layout, - const gchar *option); +gboolean eek_xkl_layout_set_config_full (EekXklLayout *layout, + gchar *model, + gchar **layouts, + gchar **variants, + gchar **options); -gchar *eek_xkl_layout_get_model (EekXklLayout *layout); -gchar **eek_xkl_layout_get_layouts (EekXklLayout *layout); -gchar **eek_xkl_layout_get_variants (EekXklLayout *layout); -gchar **eek_xkl_layout_get_options (EekXklLayout *layout); -gboolean eek_xkl_layout_get_option (EekXklLayout *layout, - const gchar *option); +gboolean eek_xkl_layout_set_model (EekXklLayout *layout, + const gchar *model); +gboolean eek_xkl_layout_set_layouts (EekXklLayout *layout, + gchar **layouts); +gboolean eek_xkl_layout_set_variants (EekXklLayout *layout, + gchar **variants); +gboolean eek_xkl_layout_set_options (EekXklLayout *layout, + gchar **options); +gboolean eek_xkl_layout_enable_option (EekXklLayout *layout, + const gchar *option); +gboolean eek_xkl_layout_disable_option (EekXklLayout *layout, + const gchar *option); + +gchar *eek_xkl_layout_get_model (EekXklLayout *layout); +gchar **eek_xkl_layout_get_layouts (EekXklLayout *layout); +gchar **eek_xkl_layout_get_variants (EekXklLayout *layout); +gchar **eek_xkl_layout_get_options (EekXklLayout *layout); +gboolean eek_xkl_layout_get_option (EekXklLayout *layout, + const gchar *option); G_END_DECLS #endif /* #ifndef EEK_XKL_LAYOUT_H */