[gnome-shell] ShellGtkEmbed: revert to old actor/window position-syncing code



commit 84bac4414c95396e18d28e168b35a7e593677864
Author: Dan Winship <danw gnome org>
Date:   Thu Jan 6 17:07:51 2011 -0500

    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

 src/shell-gtk-embed.c |   25 ++++++++++---------------
 1 files changed, 10 insertions(+), 15 deletions(-)
---
diff --git a/src/shell-gtk-embed.c b/src/shell-gtk-embed.c
index 613397f..f1caa93 100644
--- a/src/shell-gtk-embed.c
+++ b/src/shell-gtk-embed.c
@@ -166,25 +166,19 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
 }
 
 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);
   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)
-    return;
-
-  /* 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.
+  /* Find the actor's new coordinates in terms of the stage (which is
+   * priv->window's parent window.
    */
-  clutter_actor_get_size (actor, &w, &h);
   while (actor)
     {
       clutter_actor_get_position (actor, &x, &y);
@@ -198,7 +192,8 @@ shell_gtk_embed_paint (ClutterActor *actor)
 
   _shell_embedded_window_allocate (embed->priv->window,
                                    (int)(0.5 + wx), (int)(0.5 + wy),
-                                   w, h);
+                                   box->x2 - box->x1,
+                                   box->y2 - box->y1);
 }
 
 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_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->unrealize = shell_gtk_embed_unrealize;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]