diff --git a/eek/eek-key.c b/eek/eek-key.c index 3540e8f3..6a0ba887 100644 --- a/eek/eek-key.c +++ b/eek/eek-key.c @@ -72,6 +72,7 @@ struct _EekKeyPrivate EekOutline *outline; gint group; gint level; + gboolean is_pressed; }; static void @@ -210,8 +211,8 @@ eek_key_real_set_keysym_index (EekKey *self, static void eek_key_real_get_keysym_index (EekKey *self, - gint *group, - gint *level) + gint *group, + gint *level) { EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self); @@ -223,19 +224,32 @@ eek_key_real_get_keysym_index (EekKey *self, *level = priv->level; } -static void -eek_key_real_pressed (EekKey *key) +static gboolean +eek_key_real_is_pressed (EekKey *self) { + EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self); + return priv->is_pressed; +} + +static void +eek_key_real_pressed (EekKey *self) +{ + EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self); + + priv->is_pressed = TRUE; #if DEBUG - g_debug ("pressed %X", eek_key_get_keycode (key)); + g_debug ("pressed %X", eek_key_get_keycode (self)); #endif } static void -eek_key_real_released (EekKey *key) +eek_key_real_released (EekKey *self) { + EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self); + + priv->is_pressed = FALSE; #if DEBUG - g_debug ("released %X", eek_key_get_keycode (key)); + g_debug ("released %X", eek_key_get_keycode (self)); #endif } @@ -367,6 +381,7 @@ eek_key_class_init (EekKeyClass *klass) klass->get_outline = eek_key_real_get_outline; klass->set_keysym_index = eek_key_real_set_keysym_index; klass->get_keysym_index = eek_key_real_get_keysym_index; + klass->is_pressed = eek_key_real_is_pressed; gobject_class->set_property = eek_key_set_property; gobject_class->get_property = eek_key_get_property; @@ -695,3 +710,10 @@ eek_key_get_keysym_index (EekKey *key, g_return_if_fail (EEK_IS_KEY(key)); EEK_KEY_GET_CLASS(key)->get_keysym_index (key, group, level); } + +gboolean +eek_key_is_pressed (EekKey *key) +{ + g_assert (EEK_IS_KEY(key)); + return EEK_KEY_GET_CLASS(key)->is_pressed (key); +} diff --git a/eek/eek-key.h b/eek/eek-key.h index 524f9f35..fea9e80e 100644 --- a/eek/eek-key.h +++ b/eek/eek-key.h @@ -98,10 +98,15 @@ struct _EekKeyClass void (* get_keysym_index) (EekKey *self, gint *group, gint *level); + gboolean (* is_pressed) (EekKey *self); /* signals */ void (* pressed) (EekKey *key); void (* released) (EekKey *key); + + /*< private >*/ + /* padding */ + gpointer pdummy[23]; }; GType eek_key_get_type (void) G_GNUC_CONST; @@ -136,6 +141,7 @@ void eek_key_set_keysym_index (EekKey *key, void eek_key_get_keysym_index (EekKey *key, gint *group, gint *level); +gboolean eek_key_is_pressed (EekKey *key); G_END_DECLS #endif /* EEK_KEY_H */