From 158ddf2269462b91af50d67522d2bc77f0af610a Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Wed, 19 Jan 2011 14:12:02 +0900 Subject: [PATCH] libeek: add new signal "keysym-index-changed" to EekKeyboard --- eek/eek-keyboard.c | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index 4ee80f47..6c365f1d 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -34,6 +34,7 @@ #include "eek-keyboard.h" #include "eek-section.h" #include "eek-key.h" +#include "eek-marshallers.h" enum { PROP_0, @@ -45,6 +46,7 @@ enum { enum { KEY_PRESSED, KEY_RELEASED, + KEYSYM_INDEX_CHANGED, LAST_SIGNAL }; @@ -98,12 +100,16 @@ eek_keyboard_real_set_keysym_index (EekKeyboard *self, EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self); struct keysym_index ki; - ki.group = priv->group = group; - ki.level = priv->level = level; + if (priv->group != group || priv->level != level) { + ki.group = priv->group = group; + ki.level = priv->level = level; - eek_container_foreach_child (EEK_CONTAINER(self), - set_keysym_index_for_section, - &ki); + eek_container_foreach_child (EEK_CONTAINER(self), + set_keysym_index_for_section, + &ki); + + g_signal_emit_by_name (self, "keysym-index-changed", group, level); + } } void @@ -175,7 +181,7 @@ eek_keyboard_real_set_layout (EekKeyboard *self, g_return_if_fail (EEK_IS_LAYOUT(layout)); priv->layout = layout; g_object_ref_sink (priv->layout); - g_signal_connect (priv->layout, "group_changed", + g_signal_connect (priv->layout, "group-changed", G_CALLBACK(on_group_changed), self); } @@ -379,6 +385,28 @@ eek_keyboard_class_init (EekKeyboardClass *klass) G_TYPE_NONE, 1, EEK_TYPE_KEY); + + /** + * EekKeyboard::keysym-index-changed: + * @keyboard: an #EekKeyboard + * @group: row index of the symbol matrix of keys on @keyboard + * @level: column index of the symbol matrix of keys on @keyboard + * + * The ::keysym-index-changed signal is emitted each time the + * global configuration of group/level index changes. + */ + signals[KEYSYM_INDEX_CHANGED] = + g_signal_new ("keysym-index-changed", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + _eek_marshal_VOID__INT_INT, + G_TYPE_NONE, + 2, + G_TYPE_INT, + G_TYPE_INT); } static void