2006-09-14 Matthew Allum <mallum@openedhand.com>

Various fixes from Bastien Nocera:

        * clutter/clutter-event.h:
        * clutter/clutter-stage.c: (clutter_stage_unrealize),
        (clutter_stage_realize), (clutter_stage_request_coords),
        (clutter_stage_dispose), (clutter_stage_init):
        * clutter/clutter-stage.h:
        * gtk/gtk-clutter-test.c: (input_cb), (frame_cb), (main):
        * gtk/gtk-clutter.c: (realize):
        Misc fixes (#152)

        * clutter/clutter-group.c: (clutter_group_remove):
        Remove uneeded ref count (#143)

        * examples/super-oh.c: (input_cb):
        Handle key release rather than presses (#154)

        * configure.ac:
        Add old style X libs check when x11.pc unavailable (#101)
This commit is contained in:
Matthew Allum 2006-09-14 17:18:54 +00:00
parent 4dea33e123
commit 93f102fc85
9 changed files with 59 additions and 21 deletions

View File

@ -1,3 +1,25 @@
2006-09-14 Matthew Allum <mallum@openedhand.com>
Various fixes from Bastien Nocera:
* clutter/clutter-event.h:
* clutter/clutter-stage.c: (clutter_stage_unrealize),
(clutter_stage_realize), (clutter_stage_request_coords),
(clutter_stage_dispose), (clutter_stage_init):
* clutter/clutter-stage.h:
* gtk/gtk-clutter-test.c: (input_cb), (frame_cb), (main):
* gtk/gtk-clutter.c: (realize):
Misc fixes (#152)
* clutter/clutter-group.c: (clutter_group_remove):
Remove uneeded ref count (#143)
* examples/super-oh.c: (input_cb):
Handle key release rather than presses (#154)
* configure.ac:
Add old style X libs check when x11.pc unavailable (#101)
2006-09-01 Matthew Allum <mallum@openedhand.com> 2006-09-01 Matthew Allum <mallum@openedhand.com>
* clutter/Makefile.am: * clutter/Makefile.am:

View File

@ -123,6 +123,10 @@ guint32 clutter_key_event_time (ClutterKeyEvent *keyev);
guint clutter_key_event_state (ClutterKeyEvent *keyev); guint clutter_key_event_state (ClutterKeyEvent *keyev);
gint clutter_button_event_x (ClutterButtonEvent *buttev);
gint clutter_button_event_y (ClutterButtonEvent *buttev);
guint clutter_key_event_symbol (ClutterKeyEvent *keyev); guint clutter_key_event_symbol (ClutterKeyEvent *keyev);
guint16 clutter_key_event_code (ClutterKeyEvent *keyev); guint16 clutter_key_event_code (ClutterKeyEvent *keyev);

View File

@ -425,8 +425,6 @@ clutter_group_remove (ClutterGroup *self,
g_return_if_fail (CLUTTER_IS_GROUP (self)); g_return_if_fail (CLUTTER_IS_GROUP (self));
g_return_if_fail (CLUTTER_IS_ACTOR (actor)); g_return_if_fail (CLUTTER_IS_ACTOR (actor));
g_object_ref (actor);
parent = clutter_actor_get_parent (actor); parent = clutter_actor_get_parent (actor);
if (parent != CLUTTER_ACTOR (self)) if (parent != CLUTTER_ACTOR (self))
{ {

View File

@ -276,7 +276,7 @@ clutter_stage_unrealize (ClutterActor *actor)
} }
else else
{ {
if (priv->xwin) if (priv->xwin != None)
{ {
XDestroyWindow (clutter_xdisplay(), priv->xwin); XDestroyWindow (clutter_xdisplay(), priv->xwin);
priv->xwin = None; priv->xwin = None;
@ -284,8 +284,11 @@ clutter_stage_unrealize (ClutterActor *actor)
} }
glXMakeCurrent(clutter_xdisplay(), None, NULL); glXMakeCurrent(clutter_xdisplay(), None, NULL);
if (priv->gl_context != None)
{
glXDestroyContext (clutter_xdisplay(), priv->gl_context); glXDestroyContext (clutter_xdisplay(), priv->gl_context);
priv->gl_context = None; priv->gl_context = None;
}
} }
static void static void
@ -323,7 +326,7 @@ clutter_stage_realize (ClutterActor *actor)
return; return;
} }
if (priv->gl_context) if (priv->gl_context != None)
glXDestroyContext (clutter_xdisplay(), priv->gl_context); glXDestroyContext (clutter_xdisplay(), priv->gl_context);
priv->xpixmap = XCreatePixmap (clutter_xdisplay(), priv->xpixmap = XCreatePixmap (clutter_xdisplay(),
@ -421,7 +424,7 @@ clutter_stage_realize (ClutterActor *actor)
sync_fullscreen (stage); sync_fullscreen (stage);
sync_cursor_visible (stage); sync_cursor_visible (stage);
if (priv->gl_context) if (priv->gl_context != None)
glXDestroyContext (clutter_xdisplay(), priv->gl_context); glXDestroyContext (clutter_xdisplay(), priv->gl_context);
priv->gl_context = glXCreateContext (clutter_xdisplay(), priv->gl_context = glXCreateContext (clutter_xdisplay(),
@ -480,7 +483,7 @@ clutter_stage_request_coords (ClutterActor *self,
priv->xwin_width = new_width; priv->xwin_width = new_width;
priv->xwin_height = new_height; priv->xwin_height = new_height;
if (priv->xwin) if (priv->xwin != None)
XResizeWindow (clutter_xdisplay(), XResizeWindow (clutter_xdisplay(),
priv->xwin, priv->xwin,
priv->xwin_width, priv->xwin_width,
@ -496,7 +499,7 @@ clutter_stage_request_coords (ClutterActor *self,
sync_gl_viewport (stage); sync_gl_viewport (stage);
} }
if (priv->xwin) /* Do we want to bother ? */ if (priv->xwin != None) /* Do we want to bother ? */
XMoveWindow (clutter_xdisplay(), XMoveWindow (clutter_xdisplay(),
priv->xwin, priv->xwin,
box->x1, box->x1,
@ -509,7 +512,7 @@ clutter_stage_dispose (GObject *object)
{ {
ClutterStage *self = CLUTTER_STAGE (object); ClutterStage *self = CLUTTER_STAGE (object);
if (self->priv->xwin) if (self->priv->xwin != None)
clutter_stage_unrealize (CLUTTER_ACTOR (self)); clutter_stage_unrealize (CLUTTER_ACTOR (self));
G_OBJECT_CLASS (clutter_stage_parent_class)->dispose (object); G_OBJECT_CLASS (clutter_stage_parent_class)->dispose (object);
@ -739,6 +742,8 @@ clutter_stage_init (ClutterStage *self)
priv->want_offscreen = FALSE; priv->want_offscreen = FALSE;
priv->want_fullscreen = FALSE; priv->want_fullscreen = FALSE;
priv->hide_cursor = FALSE; priv->hide_cursor = FALSE;
priv->xwin = None;
priv->gl_context = None;
priv->xwin_width = 100; priv->xwin_width = 100;
priv->xwin_height = 100; priv->xwin_height = 100;

View File

@ -36,6 +36,7 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xatom.h> #include <X11/Xatom.h>
#include <GL/glx.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -123,6 +124,7 @@ GdkPixbuf * clutter_stage_snapshot (ClutterStage *stage,
gint y, gint y,
gint width, gint width,
gint height); gint height);
const XVisualInfo * clutter_stage_get_xvisual (ClutterStage *stage);
G_END_DECLS G_END_DECLS

View File

@ -54,7 +54,18 @@ AC_CHECK_FUNCS([memset munmap strcasecmp strdup])
dnl ======================================================================== dnl ========================================================================
PKG_CHECK_MODULES(X11, x11) PKG_CHECK_MODULES(X11, x11, [have_x11=yes], [have_x11=no])
if test x$have_x11 = xno
then
AC_PATH_X
if test x"$x_includes" != x"NONE" && test -n "$x_includes" ; then
X11_CFLAGS=-I`echo $x_includes | sed -e "s/:/ -I/g"`
fi
if test x"$x_libraries" != x"NONE" && test -n "$x_libraries" ; then
X11_LIBS=-L`echo $x_libraries | sed -e "s/:/ -L/g"`
fi
fi
# FIXME: Needed ? # FIXME: Needed ?
AC_MSG_CHECKING([for XTHREADS in Xlib]) AC_MSG_CHECKING([for XTHREADS in Xlib])

View File

@ -65,7 +65,7 @@ input_cb (ClutterStage *stage,
if (e) if (e)
clutter_actor_hide(e); clutter_actor_hide(e);
} }
else if (event->type == CLUTTER_KEY_PRESS) else if (event->type == CLUTTER_KEY_RELEASE)
{ {
ClutterKeyEvent *kev = (ClutterKeyEvent *) event; ClutterKeyEvent *kev = (ClutterKeyEvent *) event;

View File

@ -26,8 +26,6 @@ input_cb (ClutterStage *stage,
ClutterEvent *event, ClutterEvent *event,
gpointer data) gpointer data)
{ {
SuperOH *oh = (SuperOH *)data;
if (event->type == CLUTTER_BUTTON_PRESS) if (event->type == CLUTTER_BUTTON_PRESS)
{ {
ClutterButtonEvent *bev = (ClutterButtonEvent *) event; ClutterButtonEvent *bev = (ClutterButtonEvent *) event;
@ -37,8 +35,8 @@ input_cb (ClutterStage *stage,
bev->button); bev->button);
e = clutter_stage_get_actor_at_pos (stage, e = clutter_stage_get_actor_at_pos (stage,
clutter_button_event_x (event), clutter_button_event_x (bev),
clutter_button_event_y (event)); clutter_button_event_y (bev));
if (e) if (e)
clutter_actor_hide(e); clutter_actor_hide(e);
@ -63,7 +61,6 @@ frame_cb (ClutterTimeline *timeline,
gpointer data) gpointer data)
{ {
SuperOH *oh = (SuperOH *)data; SuperOH *oh = (SuperOH *)data;
ClutterActor *stage = clutter_stage_get_default ();
gint i; gint i;
#if TRAILS #if TRAILS
@ -167,12 +164,11 @@ main (int argc, char *argv[])
#endif #endif
/* create a new group to hold multiple actors in a group */ /* create a new group to hold multiple actors in a group */
oh->group = clutter_group_new(); oh->group = CLUTTER_GROUP (clutter_group_new());
for (i = 0; i < NHANDS; i++) for (i = 0; i < NHANDS; i++)
{ {
gint x, y, w, h; gint x, y, w, h;
ClutterColor colour = { 255, 0, 0, 255 };
#if 1 #if 1
/* Create a texture from pixbuf, then clone in to same resources */ /* Create a texture from pixbuf, then clone in to same resources */
if (i == 0) if (i == 0)
@ -180,6 +176,7 @@ main (int argc, char *argv[])
else else
oh->hand[i] = clutter_clone_texture_new (CLUTTER_TEXTURE(oh->hand[0])); oh->hand[i] = clutter_clone_texture_new (CLUTTER_TEXTURE(oh->hand[0]));
#else #else
ClutterColor colour = { 255, 0, 0, 255 };
oh->hand[i] = clutter_rectangle_new_with_color (&colour); oh->hand[i] = clutter_rectangle_new_with_color (&colour);
clutter_actor_set_size (oh->hand[i], 50, 50); clutter_actor_set_size (oh->hand[i], 50, 50);

View File

@ -88,10 +88,9 @@ realize (GtkWidget *widget)
{ {
GtkClutter *clutter; GtkClutter *clutter;
GtkClutterPrivate *priv; GtkClutterPrivate *priv;
XVisualInfo *xvinfo; const XVisualInfo *xvinfo;
GdkVisual *visual; GdkVisual *visual;
GdkColormap *colormap; GdkColormap *colormap;
gboolean foreign_success;
clutter = GTK_CLUTTER (widget); clutter = GTK_CLUTTER (widget);
priv = GTK_CLUTTER_GET_PRIVATE (clutter); priv = GTK_CLUTTER_GET_PRIVATE (clutter);