2008-09-15 Emmanuele Bassi <emmanuele.bassi@intel.com>
authorEmmanuele Bassi <ebassi@openedhand.com>
Mon, 15 Sep 2008 11:37:12 +0000 (11:37 +0000)
committerEmmanuele Bassi <ebassi@openedhand.com>
Mon, 15 Sep 2008 11:37:12 +0000 (11:37 +0000)
Bug 1114 - Mouse wheel events ignored in GtkClutterEmbed

* clutter-gtk/gtk-clutter-embed.c:
(gtk_clutter_embed_scroll_event),
(gtk_clutter_embed_class_init): Add relaying of the scroll
events from GTK+ to Clutter. (Pierre-Luc Beaudoin)

ChangeLog
clutter-gtk/gtk-clutter-embed.c

index 7f308a8..26c0dc2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-09-15  Emmanuele Bassi  <emmanuele.bassi@intel.com>
+
+       Bug 1114 - Mouse wheel events ignored in GtkClutterEmbed
+
+       * clutter-gtk/gtk-clutter-embed.c:
+       (gtk_clutter_embed_scroll_event),
+       (gtk_clutter_embed_class_init): Add relaying of the scroll
+       events from GTK+ to Clutter. (Pierre-Luc Beaudoin)
+
 2008-08-05  Emmanuele Bassi  <ebassi@openedhand.com>
 
        * clutter-gtk/gtk-clutter-embed.c:
index cc1ce5f..b64bbf7 100644 (file)
@@ -338,6 +338,31 @@ gtk_clutter_embed_focus_out (GtkWidget     *widget,
   return FALSE;
 }
 
+static gboolean
+gtk_clutter_embed_scroll_event (GtkWidget      *widget,
+                                GdkEventScroll *event)
+{
+  GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (widget)->priv;
+
+  ClutterEvent cevent = { 0, };
+
+  if (event->type == GDK_SCROLL)
+    cevent.type = cevent.scroll.type = CLUTTER_SCROLL;
+  else
+    return FALSE;
+
+  cevent.any.stage = CLUTTER_STAGE (priv->stage);
+  cevent.scroll.x = (gint) event->x;
+  cevent.scroll.y = (gint) event->y;
+  cevent.scroll.time = event->time;
+  cevent.scroll.direction = event->direction;
+  cevent.scroll.modifier_state = event->state;
+
+  clutter_do_event (&cevent);
+
+  return FALSE;
+}
+
 static void
 gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass)
 {
@@ -360,6 +385,7 @@ gtk_clutter_embed_class_init (GtkClutterEmbedClass *klass)
   widget_class->expose_event = gtk_clutter_embed_expose_event;
   widget_class->map_event = gtk_clutter_embed_map_event;
   widget_class->focus_out_event = gtk_clutter_embed_focus_out;
+  widget_class->scroll_event = gtk_clutter_embed_scroll_event;
 }
 
 static void