Capture motion-notify event.
This commit is contained in:
		@ -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;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user