ShellGtkEmbed: revert to old actor/window position-syncing code

Synchronizing the actor and window position on paint resulted in lots
of syncing, and also resulted in the window mistakenly being left at
0,0 if the actor wasn't visible when the window first mapped.

Revert back to the old way of doing it, by tying into
clutter_actor_allocate, which was only failing before because of a bug
elsewhere.

https://bugzilla.gnome.org/show_bug.cgi?id=635695
This commit is contained in:
Dan Winship 2011-01-06 17:07:51 -05:00
parent 4c4a703e63
commit 84bac4414c

View File

@ -166,25 +166,19 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
} }
static void static void
shell_gtk_embed_paint (ClutterActor *actor) shell_gtk_embed_allocate (ClutterActor *actor,
const ClutterActorBox *box,
ClutterAllocationFlags flags)
{ {
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor); ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
float wx = 0.0, wy = 0.0, x, y, ax, ay; float wx = 0.0, wy = 0.0, x, y, ax, ay;
float w, h;
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->paint (actor); CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
allocate (actor, box, flags);
if (!embed->priv->window) /* Find the actor's new coordinates in terms of the stage (which is
return; * priv->window's parent window.
/* Move the X window to the same position as the actor; it's much
* easier to just do this from paint() than it is to tray to track
* the position and allocation of @embed and each of its ancestors
* as they change. We don't use get_transformed_position() here
* because we know that the icon isn't scaled or rotated, and so
* it's faster to avoid the floating-point transformations.
*/ */
clutter_actor_get_size (actor, &w, &h);
while (actor) while (actor)
{ {
clutter_actor_get_position (actor, &x, &y); clutter_actor_get_position (actor, &x, &y);
@ -198,7 +192,8 @@ shell_gtk_embed_paint (ClutterActor *actor)
_shell_embedded_window_allocate (embed->priv->window, _shell_embedded_window_allocate (embed->priv->window,
(int)(0.5 + wx), (int)(0.5 + wy), (int)(0.5 + wx), (int)(0.5 + wy),
w, h); box->x2 - box->x1,
box->y2 - box->y1);
} }
static void static void
@ -245,7 +240,7 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
actor_class->get_preferred_width = shell_gtk_embed_get_preferred_width; actor_class->get_preferred_width = shell_gtk_embed_get_preferred_width;
actor_class->get_preferred_height = shell_gtk_embed_get_preferred_height; actor_class->get_preferred_height = shell_gtk_embed_get_preferred_height;
actor_class->paint = shell_gtk_embed_paint; actor_class->allocate = shell_gtk_embed_allocate;
actor_class->realize = shell_gtk_embed_realize; actor_class->realize = shell_gtk_embed_realize;
actor_class->unrealize = shell_gtk_embed_unrealize; actor_class->unrealize = shell_gtk_embed_unrealize;