Add "keycode" property to EekKey.
Add eek_key_get_keysyms().
This commit is contained in:
@ -34,6 +34,7 @@
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_KEYCODE,
|
||||
PROP_KEYSYMS,
|
||||
PROP_COLUMN,
|
||||
PROP_ROW,
|
||||
@ -59,6 +60,15 @@ struct _EekClutterKeyPrivate
|
||||
EekSimpleKey *simple;
|
||||
};
|
||||
|
||||
static guint
|
||||
eek_clutter_key_real_get_keycode (EekKey *self)
|
||||
{
|
||||
EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
|
||||
|
||||
g_return_val_if_fail (priv, EEK_INVALID_KEYCODE);
|
||||
return eek_key_get_keycode (EEK_KEY(priv->simple));
|
||||
}
|
||||
|
||||
static void
|
||||
eek_clutter_key_real_set_keysyms (EekKey *self,
|
||||
guint *keysyms,
|
||||
@ -71,6 +81,18 @@ eek_clutter_key_real_set_keysyms (EekKey *self,
|
||||
eek_key_set_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels);
|
||||
}
|
||||
|
||||
static void
|
||||
eek_clutter_key_real_get_keysyms (EekKey *self,
|
||||
guint **keysyms,
|
||||
gint *groups,
|
||||
gint *levels)
|
||||
{
|
||||
EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
|
||||
|
||||
g_return_if_fail (priv);
|
||||
eek_key_get_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels);
|
||||
}
|
||||
|
||||
static gint
|
||||
eek_clutter_key_real_get_groups (EekKey *self)
|
||||
{
|
||||
@ -177,7 +199,9 @@ eek_clutter_key_real_get_keysym_index (EekKey *self, gint *group, gint *level)
|
||||
static void
|
||||
eek_key_iface_init (EekKeyIface *iface)
|
||||
{
|
||||
iface->get_keycode = eek_clutter_key_real_get_keycode;
|
||||
iface->set_keysyms = eek_clutter_key_real_set_keysyms;
|
||||
iface->get_keysyms = eek_clutter_key_real_get_keysyms;
|
||||
iface->get_groups = eek_clutter_key_real_get_groups;
|
||||
iface->get_keysym = eek_clutter_key_real_get_keysym;
|
||||
iface->set_index = eek_clutter_key_real_set_index;
|
||||
@ -337,6 +361,7 @@ eek_clutter_key_set_property (GObject *object,
|
||||
g_value_get_pointer (value));
|
||||
break;
|
||||
/* Otherwise delegate to priv->simple or the parent. */
|
||||
case PROP_KEYCODE:
|
||||
case PROP_KEYSYMS:
|
||||
case PROP_COLUMN:
|
||||
case PROP_GROUP:
|
||||
@ -369,6 +394,7 @@ eek_clutter_key_get_property (GObject *object,
|
||||
eek_key_get_bounds (EEK_KEY(object), &bounds);
|
||||
g_value_set_boxed (value, &bounds);
|
||||
break;
|
||||
case PROP_KEYCODE:
|
||||
case PROP_KEYSYMS:
|
||||
case PROP_COLUMN:
|
||||
case PROP_ROW:
|
||||
@ -409,6 +435,9 @@ eek_clutter_key_class_init (EekClutterKeyClass *klass)
|
||||
gobject_class->finalize = eek_clutter_key_finalize;
|
||||
gobject_class->dispose = eek_clutter_key_dispose;
|
||||
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_KEYCODE,
|
||||
"keycode");
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_KEYSYMS,
|
||||
"keysyms");
|
||||
|
||||
@ -169,6 +169,7 @@ eek_clutter_section_real_get_bounds (EekSection *self,
|
||||
static EekKey *
|
||||
eek_clutter_section_real_create_key (EekSection *self,
|
||||
const gchar *name,
|
||||
guint keycode,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels,
|
||||
@ -195,6 +196,7 @@ eek_clutter_section_real_create_key (EekSection *self,
|
||||
matrix.num_levels = num_levels;
|
||||
key = g_object_new (EEK_TYPE_CLUTTER_KEY,
|
||||
"name", name,
|
||||
"keycode", keycode,
|
||||
"keysyms", &matrix,
|
||||
"column", column,
|
||||
"row", row,
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_KEYCODE,
|
||||
PROP_KEYSYMS,
|
||||
PROP_COLUMN,
|
||||
PROP_ROW,
|
||||
@ -59,6 +60,15 @@ struct _EekGtkKeyPrivate
|
||||
EekSimpleKey *simple;
|
||||
};
|
||||
|
||||
static guint
|
||||
eek_gtk_key_real_get_keycode (EekKey *self)
|
||||
{
|
||||
EekGtkKeyPrivate *priv = EEK_GTK_KEY_GET_PRIVATE(self);
|
||||
|
||||
g_return_val_if_fail (priv, EEK_INVALID_KEYCODE);
|
||||
return eek_key_get_keycode (EEK_KEY(priv->simple));
|
||||
}
|
||||
|
||||
static void
|
||||
eek_gtk_key_real_set_keysyms (EekKey *self,
|
||||
guint *keysyms,
|
||||
@ -73,6 +83,18 @@ eek_gtk_key_real_set_keysyms (EekKey *self,
|
||||
eek_key_set_keysym_index (EEK_KEY(self), 0, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
eek_gtk_key_real_get_keysyms (EekKey *self,
|
||||
guint **keysyms,
|
||||
gint *groups,
|
||||
gint *levels)
|
||||
{
|
||||
EekGtkKeyPrivate *priv = EEK_GTK_KEY_GET_PRIVATE(self);
|
||||
|
||||
g_return_if_fail (priv);
|
||||
eek_key_get_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels);
|
||||
}
|
||||
|
||||
static gint
|
||||
eek_gtk_key_real_get_groups (EekKey *self)
|
||||
{
|
||||
@ -181,7 +203,9 @@ eek_gtk_key_real_get_keysym_index (EekKey *self, gint *group, gint *level)
|
||||
static void
|
||||
eek_key_iface_init (EekKeyIface *iface)
|
||||
{
|
||||
iface->get_keycode = eek_gtk_key_real_get_keycode;
|
||||
iface->set_keysyms = eek_gtk_key_real_set_keysyms;
|
||||
iface->get_keysyms = eek_gtk_key_real_get_keysyms;
|
||||
iface->get_groups = eek_gtk_key_real_get_groups;
|
||||
iface->get_keysym = eek_gtk_key_real_get_keysym;
|
||||
iface->set_index = eek_gtk_key_real_set_index;
|
||||
@ -227,6 +251,7 @@ eek_gtk_key_set_property (GObject *object,
|
||||
matrix->num_groups,
|
||||
matrix->num_levels);
|
||||
break;
|
||||
case PROP_KEYCODE:
|
||||
case PROP_BOUNDS:
|
||||
case PROP_OUTLINE:
|
||||
case PROP_COLUMN:
|
||||
@ -255,6 +280,7 @@ eek_gtk_key_get_property (GObject *object,
|
||||
|
||||
g_return_if_fail (priv);
|
||||
switch (prop_id) {
|
||||
case PROP_KEYCODE:
|
||||
case PROP_BOUNDS:
|
||||
case PROP_KEYSYMS:
|
||||
case PROP_COLUMN:
|
||||
@ -288,6 +314,9 @@ eek_gtk_key_class_init (EekGtkKeyClass *klass)
|
||||
gobject_class->finalize = eek_gtk_key_finalize;
|
||||
gobject_class->dispose = eek_gtk_key_dispose;
|
||||
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_KEYCODE,
|
||||
"keycode");
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_KEYSYMS,
|
||||
"keysyms");
|
||||
|
||||
@ -162,6 +162,7 @@ eek_gtk_section_real_get_bounds (EekSection *self,
|
||||
static EekKey *
|
||||
eek_gtk_section_real_create_key (EekSection *self,
|
||||
const gchar *name,
|
||||
guint keycode,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels,
|
||||
@ -187,6 +188,7 @@ eek_gtk_section_real_create_key (EekSection *self,
|
||||
matrix.num_levels = num_levels;
|
||||
key = g_object_new (EEK_TYPE_GTK_KEY,
|
||||
"name", name,
|
||||
"keycode", keycode,
|
||||
"keysyms", &matrix,
|
||||
"column", column,
|
||||
"row", row,
|
||||
|
||||
@ -54,6 +54,18 @@ eek_key_base_init (gpointer g_iface)
|
||||
G_PARAM_READWRITE);
|
||||
g_object_interface_install_property (g_iface, pspec);
|
||||
|
||||
/**
|
||||
* EekKey:keycode:
|
||||
*
|
||||
* The keycode of #EekKey.
|
||||
*/
|
||||
pspec = g_param_spec_uint ("keycode",
|
||||
"Keycode",
|
||||
"Keycode of the key",
|
||||
0, G_MAXUINT, 0,
|
||||
G_PARAM_READWRITE);
|
||||
g_object_interface_install_property (g_iface, pspec);
|
||||
|
||||
/**
|
||||
* EekKey:keysyms:
|
||||
*
|
||||
@ -164,6 +176,22 @@ eek_key_get_type (void)
|
||||
return iface_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_key_get_keycode:
|
||||
* @key: an #EekKey
|
||||
*
|
||||
* Get the keycode of @key.
|
||||
*/
|
||||
guint
|
||||
eek_key_get_keycode (EekKey *key)
|
||||
{
|
||||
EekKeyIface *iface = EEK_KEY_GET_IFACE(key);
|
||||
|
||||
g_return_val_if_fail (iface, EEK_INVALID_KEYCODE);
|
||||
g_return_val_if_fail (iface->get_keycode, EEK_INVALID_KEYCODE);
|
||||
return (*iface->get_keycode) (key);
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_key_set_keysyms:
|
||||
* @key: an #EekKey
|
||||
@ -188,6 +216,32 @@ eek_key_set_keysyms (EekKey *key,
|
||||
(*iface->set_keysyms) (key, keysyms, num_groups, num_levels);
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_key_get_keysyms:
|
||||
* @key: an #EekKey
|
||||
* @keysyms: pointer where symbol matrix of @key will be stored
|
||||
* @num_groups: pointer where the number of groups (rows) of @keysyms
|
||||
* will be stored
|
||||
* @num_levels: pointer where the number of levels (columns) of
|
||||
* @keysyms will be stored
|
||||
*
|
||||
* Get the symbol matrix of @key to @keysyms. @keysyms is an array of
|
||||
* symbols (unsigned int) and the length must match with @num_groups *
|
||||
* @num_levels.
|
||||
*/
|
||||
void
|
||||
eek_key_get_keysyms (EekKey *key,
|
||||
guint **keysyms,
|
||||
gint *num_groups,
|
||||
gint *num_levels)
|
||||
{
|
||||
EekKeyIface *iface = EEK_KEY_GET_IFACE(key);
|
||||
|
||||
g_return_if_fail (iface);
|
||||
g_return_if_fail (iface->get_keysyms);
|
||||
(*iface->get_keysyms) (key, keysyms, num_groups, num_levels);
|
||||
}
|
||||
|
||||
/**
|
||||
* eek_key_get_groups:
|
||||
* @key: an #EekKey
|
||||
|
||||
@ -39,10 +39,15 @@ struct _EekKeyIface
|
||||
GTypeInterface g_iface;
|
||||
|
||||
/*< public >*/
|
||||
guint (* get_keycode) (EekKey *self);
|
||||
void (* set_keysyms) (EekKey *self,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels);
|
||||
void (* get_keysyms) (EekKey *self,
|
||||
guint **keysyms,
|
||||
gint *num_groups,
|
||||
gint *num_levels);
|
||||
gint (* get_groups) (EekKey *self);
|
||||
guint (* get_keysym) (EekKey *self);
|
||||
|
||||
@ -71,10 +76,15 @@ struct _EekKeyIface
|
||||
|
||||
GType eek_key_get_type (void) G_GNUC_CONST;
|
||||
|
||||
guint eek_key_get_keycode (EekKey *key);
|
||||
void eek_key_set_keysyms (EekKey *key,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels);
|
||||
void eek_key_get_keysyms (EekKey *key,
|
||||
guint **keysyms,
|
||||
gint *num_groups,
|
||||
gint *num_levels);
|
||||
gint eek_key_get_groups (EekKey *key);
|
||||
guint eek_key_get_keysym (EekKey *key);
|
||||
|
||||
|
||||
@ -21,6 +21,8 @@
|
||||
#define EEK_KEYSYMS_H 1
|
||||
|
||||
#define EEK_INVALID_KEYSYM ((guint)(-1))
|
||||
#define EEK_INVALID_KEYCODE ((guint)(-1))
|
||||
|
||||
G_CONST_RETURN gchar *eek_keysym_to_string (guint keysym);
|
||||
|
||||
#endif /* EEK_KEYSYMS_H */
|
||||
|
||||
@ -317,6 +317,7 @@ eek_section_get_bounds (EekSection *section,
|
||||
EekKey *
|
||||
eek_section_create_key (EekSection *section,
|
||||
const gchar *name,
|
||||
guint keycode,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels,
|
||||
@ -334,6 +335,7 @@ eek_section_create_key (EekSection *section,
|
||||
|
||||
return (*iface->create_key) (section,
|
||||
name,
|
||||
keycode,
|
||||
keysyms,
|
||||
num_groups,
|
||||
num_levels,
|
||||
|
||||
@ -63,6 +63,7 @@ struct _EekSectionIface
|
||||
|
||||
EekKey *(* create_key) (EekSection *self,
|
||||
const gchar *name,
|
||||
guint keycode,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels,
|
||||
@ -103,6 +104,7 @@ void eek_section_get_bounds (EekSection *section,
|
||||
|
||||
EekKey *eek_section_create_key (EekSection *section,
|
||||
const gchar *name,
|
||||
guint keycode,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels,
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_NAME,
|
||||
PROP_KEYCODE,
|
||||
PROP_KEYSYMS,
|
||||
PROP_COLUMN,
|
||||
PROP_ROW,
|
||||
@ -55,6 +56,7 @@ G_DEFINE_TYPE_WITH_CODE (EekSimpleKey, eek_simple_key,
|
||||
struct _EekSimpleKeyPrivate
|
||||
{
|
||||
gchar *name;
|
||||
guint keycode;
|
||||
guint *keysyms;
|
||||
gint num_levels;
|
||||
gint num_groups;
|
||||
@ -66,6 +68,15 @@ struct _EekSimpleKeyPrivate
|
||||
gint level;
|
||||
};
|
||||
|
||||
static guint
|
||||
eek_simple_key_real_get_keycode (EekKey *self)
|
||||
{
|
||||
EekSimpleKeyPrivate *priv = EEK_SIMPLE_KEY_GET_PRIVATE(self);
|
||||
|
||||
g_return_val_if_fail (priv, EEK_INVALID_KEYCODE);
|
||||
return priv->keycode;
|
||||
}
|
||||
|
||||
static void
|
||||
eek_simple_key_real_set_keysyms (EekKey *self,
|
||||
guint *keysyms,
|
||||
@ -94,6 +105,27 @@ eek_simple_key_real_set_keysyms (EekKey *self,
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
eek_simple_key_real_get_keysyms (EekKey *self,
|
||||
guint **keysyms,
|
||||
gint *groups,
|
||||
gint *levels)
|
||||
{
|
||||
EekSimpleKeyPrivate *priv = EEK_SIMPLE_KEY_GET_PRIVATE(self);
|
||||
|
||||
g_return_if_fail (groups);
|
||||
g_return_if_fail (levels);
|
||||
g_return_if_fail (keysyms);
|
||||
|
||||
*groups = priv->num_groups;
|
||||
*levels = priv->num_levels;
|
||||
if (priv->keysyms) {
|
||||
*keysyms = g_slice_alloc (*groups * *levels * sizeof(guint));
|
||||
memcpy (*keysyms, priv->keysyms, *groups * *levels * sizeof(guint));
|
||||
} else
|
||||
*keysyms = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
eek_simple_key_real_get_groups (EekKey *self)
|
||||
{
|
||||
@ -212,7 +244,9 @@ eek_simple_key_real_get_keysym_index (EekKey *self,
|
||||
static void
|
||||
eek_key_iface_init (EekKeyIface *iface)
|
||||
{
|
||||
iface->get_keycode = eek_simple_key_real_get_keycode;
|
||||
iface->set_keysyms = eek_simple_key_real_set_keysyms;
|
||||
iface->get_keysyms = eek_simple_key_real_get_keysyms;
|
||||
iface->get_groups = eek_simple_key_real_get_groups;
|
||||
iface->get_keysym = eek_simple_key_real_get_keysym;
|
||||
iface->set_index = eek_simple_key_real_set_index;
|
||||
@ -256,6 +290,9 @@ eek_simple_key_set_property (GObject *object,
|
||||
g_free (priv->name);
|
||||
priv->name = g_strdup (g_value_get_string (value));
|
||||
break;
|
||||
case PROP_KEYCODE:
|
||||
priv->keycode = g_value_get_uint (value);
|
||||
break;
|
||||
case PROP_KEYSYMS:
|
||||
matrix = g_value_get_boxed (value);
|
||||
eek_key_set_keysyms (EEK_KEY(object),
|
||||
@ -304,6 +341,9 @@ eek_simple_key_get_property (GObject *object,
|
||||
case PROP_NAME:
|
||||
g_value_set_string (value, priv->name);
|
||||
break;
|
||||
case PROP_KEYCODE:
|
||||
g_value_set_uint (value, priv->keycode);
|
||||
break;
|
||||
case PROP_KEYSYMS:
|
||||
matrix.data = priv->keysyms;
|
||||
matrix.num_groups = priv->num_groups;
|
||||
@ -354,6 +394,9 @@ eek_simple_key_class_init (EekSimpleKeyClass *klass)
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_NAME,
|
||||
"name");
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_KEYCODE,
|
||||
"keycode");
|
||||
g_object_class_override_property (gobject_class,
|
||||
PROP_KEYSYMS,
|
||||
"keysyms");
|
||||
@ -384,6 +427,7 @@ eek_simple_key_init (EekSimpleKey *self)
|
||||
|
||||
priv = self->priv = EEK_SIMPLE_KEY_GET_PRIVATE(self);
|
||||
priv->keysyms = NULL;
|
||||
priv->keycode = 0;
|
||||
priv->num_groups = 0;
|
||||
priv->num_levels = 0;
|
||||
priv->column = 0;
|
||||
|
||||
@ -170,6 +170,7 @@ eek_simple_section_real_get_bounds (EekSection *self, EekBounds *bounds)
|
||||
static EekKey *
|
||||
eek_simple_section_real_create_key (EekSection *self,
|
||||
const gchar *name,
|
||||
guint keycode,
|
||||
guint *keysyms,
|
||||
gint num_groups,
|
||||
gint num_levels,
|
||||
@ -191,6 +192,7 @@ eek_simple_section_real_create_key (EekSection *self,
|
||||
matrix.num_levels = num_levels;
|
||||
key = g_object_new (EEK_TYPE_SIMPLE_KEY,
|
||||
"name", name,
|
||||
"keycode", keycode,
|
||||
"keysyms", &matrix,
|
||||
"column", column,
|
||||
"row", row,
|
||||
|
||||
@ -198,6 +198,7 @@ create_key (EekXkbLayout *layout,
|
||||
|
||||
eek_section_create_key (section,
|
||||
name,
|
||||
keycode,
|
||||
keysyms,
|
||||
num_groups,
|
||||
num_levels,
|
||||
|
||||
@ -4,8 +4,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define CSW 640
|
||||
#define CSH 480
|
||||
#define CSW 1280
|
||||
#define CSH 1024
|
||||
|
||||
static gchar *symbols = NULL;
|
||||
static gchar *keycodes = NULL;
|
||||
|
||||
@ -65,6 +65,7 @@ test_create (void)
|
||||
|
||||
key = eek_section_create_key (section,
|
||||
"test-key",
|
||||
0,
|
||||
keysyms,
|
||||
3,
|
||||
2,
|
||||
|
||||
Reference in New Issue
Block a user