Capture motion-notify event.

This commit is contained in:
Daiki Ueno
2011-08-15 18:10:57 +09:00
parent db0c5088b7
commit 7919cc191e

View File

@ -87,7 +87,8 @@ eek_gtk_keyboard_real_realize (GtkWidget *self)
GDK_KEY_PRESS_MASK | GDK_KEY_PRESS_MASK |
GDK_KEY_RELEASE_MASK | GDK_KEY_RELEASE_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK); GDK_BUTTON_RELEASE_MASK |
GDK_BUTTON_MOTION_MASK);
GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->realize (self); GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->realize (self);
} }
@ -180,6 +181,19 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self,
size_allocate (self, allocation); size_allocate (self, allocation);
} }
static void
set_dragged_key (EekGtkKeyboard *keyboard, EekKey *key)
{
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
if (priv->dragged_key && priv->dragged_key != key)
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
if (key && !eek_key_is_pressed (key)) {
priv->dragged_key = key;
g_signal_emit_by_name (key, "pressed", priv->keyboard);
}
}
static gboolean static gboolean
eek_gtk_keyboard_real_button_press_event (GtkWidget *self, eek_gtk_keyboard_real_button_press_event (GtkWidget *self,
GdkEventButton *event) GdkEventButton *event)
@ -191,13 +205,7 @@ eek_gtk_keyboard_real_button_press_event (GtkWidget *self,
(gdouble)event->x, (gdouble)event->x,
(gdouble)event->y); (gdouble)event->y);
if (priv->dragged_key && priv->dragged_key != key) set_dragged_key (EEK_GTK_KEYBOARD(self), key);
g_signal_emit_by_name (priv->dragged_key, "released", priv->keyboard);
if (key && !eek_key_is_pressed (key)) {
priv->dragged_key = key;
g_signal_emit_by_name (key, "pressed", priv->keyboard);
}
return TRUE; return TRUE;
} }
@ -220,6 +228,20 @@ eek_gtk_keyboard_real_button_release_event (GtkWidget *self,
return TRUE; return TRUE;
} }
static gboolean
eek_gtk_keyboard_real_motion_notify_event (GtkWidget *self,
GdkEventMotion *event)
{
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
EekKey *key;
key = eek_renderer_find_key_by_position (priv->renderer,
(gdouble)event->x,
(gdouble)event->y);
set_dragged_key (EEK_GTK_KEYBOARD(self), key);
return TRUE;
}
static void static void
eek_gtk_keyboard_real_unmap (GtkWidget *self) eek_gtk_keyboard_real_unmap (GtkWidget *self)
{ {
@ -331,6 +353,8 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
eek_gtk_keyboard_real_button_press_event; eek_gtk_keyboard_real_button_press_event;
widget_class->button_release_event = widget_class->button_release_event =
eek_gtk_keyboard_real_button_release_event; eek_gtk_keyboard_real_button_release_event;
widget_class->motion_notify_event =
eek_gtk_keyboard_real_motion_notify_event;
gobject_class->set_property = eek_gtk_keyboard_set_property; gobject_class->set_property = eek_gtk_keyboard_set_property;
gobject_class->dispose = eek_gtk_keyboard_dispose; gobject_class->dispose = eek_gtk_keyboard_dispose;