2007-04-17 Emmanuele Bassi <ebassi@openedhand.com>
authorEmmanuele Bassi <ebassi@openedhand.com>
Tue, 17 Apr 2007 00:19:21 +0000 (00:19 +0000)
committerEmmanuele Bassi <ebassi@openedhand.com>
Tue, 17 Apr 2007 00:19:21 +0000 (00:19 +0000)
* configure.ac: Branch for development; bump to 0.3.0, to
match Clutter core version; require clutter-glx backend.

* clutter-gtk/clutter-gtk.c: Include the GLX backend specific
functions; add an "embedded" read-only property, which signals
whether the widget has successfully embedded the stage window;
use the new clutter_glx_get_stage_window() function.

* examples/gtk-clutter-test.c: Port to the new event API.

ChangeLog
clutter-gtk/clutter-gtk.c
configure.ac
examples/gtk-clutter-test.c

index c767f7b..08dd4ab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-04-17  Emmanuele Bassi  <ebassi@openedhand.com>
+
+       * configure.ac: Branch for development; bump to 0.3.0, to
+       match Clutter core version; require clutter-glx backend.
+
+       * clutter-gtk/clutter-gtk.c: Include the GLX backend specific
+       functions; add an "embedded" read-only property, which signals
+       whether the widget has successfully embedded the stage window;
+       use the new clutter_glx_get_stage_window() function.
+
+       * examples/gtk-clutter-test.c: Port to the new event API.
+
 2007-03-23  Ross Burton  <ross@openedhand.com>
 
        * configure.ac:
index 25489b0..59f8154 100644 (file)
@@ -42,6 +42,7 @@
 
 #include <clutter/clutter-main.h>
 #include <clutter/clutter-stage.h>
+#include <clutter/clutter-glx.h>
 
 #include "clutter-gtk.h"
 
 struct _GtkClutterPrivate
 {
   ClutterActor *stage;
-  gboolean embedded;
+
+  guint is_embedded : 1;
+};
+
+enum
+{
+  PROP_0,
+
+  PROP_EMBEDDED
 };
 
 G_DEFINE_TYPE (GtkClutter, gtk_clutter, GTK_TYPE_SOCKET);
@@ -104,32 +113,66 @@ gtk_clutter_size_request (GtkWidget      *widget,
 static void
 gtk_clutter_map (GtkWidget *widget)
 {
-  GtkClutterPrivate *priv;
+  GtkSocket *socket = GTK_SOCKET (widget);
+  GtkClutterPrivate *priv = GTK_CLUTTER (widget)->priv;
+  ClutterStage *stage = CLUTTER_STAGE (priv->stage);
 
-  priv = GTK_CLUTTER (widget)->priv;
+  if (!priv->is_embedded)
+    {
+      g_object_ref (widget);
+
+      gtk_socket_add_id (socket, clutter_glx_get_stage_window (stage)); 
+      priv->is_embedded = TRUE;
 
-  if (priv->embedded == FALSE) {
-    gtk_socket_add_id (GTK_SOCKET (widget), 
-                      clutter_stage_get_xwindow (CLUTTER_STAGE(priv->stage)));
-    priv->embedded = TRUE;
-  }
+      g_object_notify (G_OBJECT (widget), "embedded");
+      g_object_unref (widget);
+    }
 
   GTK_WIDGET_CLASS (gtk_clutter_parent_class)->map (widget);
 }
 
 static void
+gtk_clutter_get_property (GObject    *gobject,
+                          guint       prop_id,
+                          GValue     *value,
+                          GParamSpec *pspec)
+{
+  GtkClutter *gtk_clutter = GTK_CLUTTER (gobject);
+
+  switch (prop_id)
+    {
+    case PROP_EMBEDDED:
+      g_value_set_boolean (value, gtk_clutter->priv->is_embedded);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+      break;
+    }
+}
+
+static void
 gtk_clutter_class_init (GtkClutterClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
+  gobject_class->get_property = gtk_clutter_get_property;
+
   object_class->destroy = gtk_clutter_destroy;
 
   widget_class->size_request = gtk_clutter_size_request;
   widget_class->size_allocate = gtk_clutter_size_allocate;
   widget_class->map = gtk_clutter_map;
 
+  g_object_class_install_property (gobject_class,
+                                   PROP_EMBEDDED,
+                                   g_param_spec_boolean ("embedded",
+                                                         "Embedded",
+                                                         "Whether the stage has been successfully embedded",
+                                                         FALSE,
+                                                         G_PARAM_READABLE));
+
   g_type_class_add_private (gobject_class, sizeof (GtkClutterPrivate));
 }
 
@@ -143,7 +186,7 @@ gtk_clutter_init (GtkClutter *clutter)
   gtk_widget_set_double_buffered (GTK_WIDGET (clutter), FALSE);
 
   priv->stage = clutter_stage_get_default ();
-  priv->embedded = FALSE;
+  priv->is_embedded = FALSE;
 }
 
 /**
index dc5526f..646c0db 100644 (file)
@@ -2,7 +2,7 @@
 # An odd micro number indicates in-progress development, (eg. from CVS)
 # An even micro number indicates a released version.
 m4_define([clutter_major_version], [0])
-m4_define([clutter_minor_version], [1])
+m4_define([clutter_minor_version], [3])
 m4_define([clutter_micro_version], [0])
 
 m4_define([clutter_version],
@@ -67,9 +67,9 @@ AC_FUNC_MALLOC
 AC_FUNC_MMAP
 AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
 
-CLUTTER_REQUIRED=0.2.2
+CLUTTER_REQUIRED=0.3.0
 
-PKG_CHECK_MODULES(CLUTTER, clutter-0.2 >= $CLUTTER_REQUIRED)
+PKG_CHECK_MODULES(CLUTTER, clutter-glx-0.3 >= $CLUTTER_REQUIRED)
 AC_SUBST(CLUTTER_CFLAGS)
 AC_SUBST(CLUTTER_LIBS)
 
index 56c198c..f1929bc 100644 (file)
@@ -28,15 +28,14 @@ input_cb (ClutterStage *stage,
 {
   if (event->type == CLUTTER_BUTTON_PRESS)
     {
-      ClutterButtonEvent *bev = (ClutterButtonEvent *) event;
-      ClutterActor *e;
+      ClutterActor *actor;
+      gint x, y;
 
-      e = clutter_stage_get_actor_at_pos (stage, 
-                                           clutter_button_event_x (bev),
-                                           clutter_button_event_y (bev));
+      clutter_event_get_coords (event, &x, &y);
 
-      if (e)
-       clutter_actor_hide(e);
+      actor = clutter_stage_get_actor_at_pos (stage, x, y);
+      if (actor)
+       clutter_actor_hide (actor);
     }
   else if (event->type == CLUTTER_KEY_PRESS)
     {