libeek: add eek_xkb_layout_set_names_full_valist().
This commit is contained in:
@ -31,6 +31,7 @@
|
||||
#include <X11/XKBlib.h>
|
||||
#include <X11/extensions/XKBgeom.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@ -613,38 +614,64 @@ eek_xkb_layout_set_names (EekXkbLayout *layout, XkbComponentNamesRec *names)
|
||||
/**
|
||||
* 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
|
||||
* @Varargs: pairs of component name and value, terminated by -1.
|
||||
*
|
||||
* Set the XKB component names to @layout. This function is merely a
|
||||
* wrapper around eek_xkb_layout_set_names() to avoid passing a
|
||||
* pointer of XkbComponentNamesRec, which is not currently available
|
||||
* in the gobject-introspection repository.
|
||||
*
|
||||
* Available component names are: keymap, keycodes, types, compat,
|
||||
* symbols, geometry.
|
||||
*
|
||||
* Returns: %TRUE if the component name is successfully set, %FALSE otherwise
|
||||
* Since: 0.0.2
|
||||
*/
|
||||
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)
|
||||
...)
|
||||
{
|
||||
va_list var_args;
|
||||
va_start (var_args, layout);
|
||||
eek_xkb_layout_set_names_full_valist (layout, var_args);
|
||||
va_end (var_args);
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_xkb_layout_set_names_full_valist:
|
||||
* @layout: an #EekXkbLayout
|
||||
* @var_args: <type>va_list</type> of pairs of component name and value.
|
||||
*
|
||||
* See eek_xkb_layout_set_names_full(), this version takes a
|
||||
* <type>va_list</type> for language bindings to use.
|
||||
*
|
||||
* Since: 0.0.5
|
||||
*/
|
||||
gboolean
|
||||
eek_xkb_layout_set_names_full_valist (EekXkbLayout *layout,
|
||||
va_list var_args)
|
||||
{
|
||||
XkbComponentNamesRec names;
|
||||
gchar *name, *value;
|
||||
|
||||
names.keymap = (char *)keymap;
|
||||
names.keycodes = (char *)keycodes;
|
||||
names.types = (char *)types;
|
||||
names.compat = (char *)compat;
|
||||
names.symbols = (char *)symbols;
|
||||
names.geometry = (char *)geometry;
|
||||
memset (&names, 0, sizeof names);
|
||||
name = va_arg (var_args, gchar *);
|
||||
while (name != (gchar *)-1) {
|
||||
value = va_arg (var_args, gchar *);
|
||||
if (g_strcmp0 (name, "keymap") == 0)
|
||||
names.keymap = (char *)value;
|
||||
else if (g_strcmp0 (name, "keycodes") == 0)
|
||||
names.keycodes = (char *)value;
|
||||
else if (g_strcmp0 (name, "types") == 0)
|
||||
names.types = (char *)value;
|
||||
else if (g_strcmp0 (name, "compat") == 0)
|
||||
names.compat = (char *)value;
|
||||
else if (g_strcmp0 (name, "symbols") == 0)
|
||||
names.symbols = (char *)value;
|
||||
else if (g_strcmp0 (name, "geometry") == 0)
|
||||
names.geometry = (char *)value;
|
||||
name = va_arg (var_args, gchar *);
|
||||
}
|
||||
return eek_xkb_layout_set_names (layout, &names);
|
||||
}
|
||||
|
||||
|
||||
@ -63,12 +63,10 @@ gboolean eek_xkb_layout_set_names (EekXkbLayout *layout,
|
||||
|
||||
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_names_full_valist
|
||||
(EekXkbLayout *layout,
|
||||
va_list var_args);
|
||||
|
||||
gboolean eek_xkb_layout_set_keycodes
|
||||
(EekXkbLayout *layout,
|
||||
|
||||
Reference in New Issue
Block a user