+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:
#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);
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));
}
gtk_widget_set_double_buffered (GTK_WIDGET (clutter), FALSE);
priv->stage = clutter_stage_get_default ();
- priv->embedded = FALSE;
+ priv->is_embedded = FALSE;
}
/**
# 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],
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)
{
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)
{