diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index c613b837..91fed09c 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -210,7 +210,9 @@ eek_gtk_keyboard_real_button_press_event (GtkWidget *self, (gdouble)event->x, (gdouble)event->y); if (key) { - g_signal_emit_by_name (key, "pressed", priv->keyboard); + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed"); + g_signal_emit_by_name (key, "pressed"); + eek_keyboard_press_key(priv->keyboard, key); } // TODO: send time return TRUE; @@ -229,6 +231,7 @@ eek_gtk_keyboard_real_button_release_event (GtkWidget *self, list = eek_keyboard_get_pressed_keys (priv->keyboard); for (head = list; head; head = g_list_next (head)) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey released"); g_signal_emit_by_name (head->data, "released", priv->keyboard); } g_list_free (list); @@ -258,12 +261,14 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget *self, if (head->data == key) found = TRUE; else - g_signal_emit_by_name (head->data, "cancelled", priv->keyboard); + g_signal_emit_by_name (head->data, "cancelled"); } g_list_free (list); - if (!found) - g_signal_emit_by_name (key, "pressed", priv->keyboard); + if (!found) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed"); + g_signal_emit_by_name (key, "pressed"); + } } return TRUE; } @@ -281,8 +286,10 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self) EekKeyboard::key-released signal can remove elements from its internal copy */ list = eek_keyboard_get_pressed_keys (priv->keyboard); - for (head = list; head; head = g_list_next (head)) - g_signal_emit_by_name (head->data, "released", priv->keyboard); + for (head = list; head; head = g_list_next (head)) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey released"); + g_signal_emit_by_name (head->data, "released"); + } g_list_free (list); } @@ -399,6 +406,7 @@ eek_gtk_keyboard_dispose (GObject *object) list = eek_keyboard_get_pressed_keys (priv->keyboard); for (head = list; head; head = g_list_next (head)) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed"); g_signal_emit_by_name (head->data, "released", priv->keyboard); } g_list_free (list); diff --git a/eek/eek-key.h b/eek/eek-key.h index 81b7969a..11f279ff 100644 --- a/eek/eek-key.h +++ b/eek/eek-key.h @@ -43,6 +43,9 @@ typedef struct _EekKeyPrivate EekKeyPrivate; /** * EekKey: * + * Contains information about the state of a key. + * TODO: rewrite as a plain struct + * * The #EekKey structure contains only private data and should only be * accessed using the provided API. */ diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index 48a548a2..0cff9500 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -91,12 +91,18 @@ eek_modifier_key_free (EekModifierKey *modkey) g_slice_free (EekModifierKey, modkey); } +void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKeyboard key-pressed"); + g_signal_emit (keyboard, signals[KEY_PRESSED], 0, key); +} + static void on_key_pressed (EekSection *section, EekKey *key, EekKeyboard *keyboard) { - g_signal_emit (keyboard, signals[KEY_PRESSED], 0, key); + g_log("squeek", G_LOG_LEVEL_DEBUG, "DO NOT emit EekKeyboard key-pressed"); + //g_signal_emit (keyboard, signals[KEY_PRESSED], 0, key); } static void @@ -104,6 +110,7 @@ on_key_released (EekSection *section, EekKey *key, EekKeyboard *keyboard) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKeyboard key-released"); g_signal_emit (keyboard, signals[KEY_RELEASED], 0, key); } diff --git a/eek/eek-keyboard.h b/eek/eek-keyboard.h index 7bdde205..9872b715 100644 --- a/eek/eek-keyboard.h +++ b/eek/eek-keyboard.h @@ -188,5 +188,7 @@ EekModifierKey *eek_modifier_key_copy void eek_modifier_key_free (EekModifierKey *modkey); +void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key); + G_END_DECLS #endif /* EEK_KEYBOARD_H */ diff --git a/eek/eek-section.c b/eek/eek-section.c index 91b490a7..0e939e7a 100644 --- a/eek/eek-section.c +++ b/eek/eek-section.c @@ -118,6 +118,7 @@ static void on_pressed (EekKey *key, EekSection *section) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekSection key-pressed"); g_signal_emit (section, signals[KEY_PRESSED], 0, key); } @@ -125,6 +126,7 @@ static void on_released (EekKey *key, EekSection *section) { + g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekSection key-released"); g_signal_emit (section, signals[KEY_RELEASED], 0, key); } @@ -365,7 +367,9 @@ eek_section_class_init (EekSectionClass *klass) g_signal_new (I_("key-pressed"), G_TYPE_FROM_CLASS(gobject_class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(EekSectionClass, key_pressed), + // FIXME: this handler seems to be unnecessary complexity. Either remove or justify + // G_STRUCT_OFFSET(EekSectionClass, key_pressed), + 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,