[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.4/kdebase/workspace/kwin
From:       Hugo Pereira Da Costa <hugo.pereira () free ! fr>
Date:       2010-01-28 3:25:54
Message-ID: 1264649154.252411.21520.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1081275 by hpereiradacosta:

Backport: r1081273
Added shadeMode synchronization between client and target when attempting to add a \
client to a group. Triggers target decoration repaint when adding the client  to the \
                group fails, in order to make sure that hove animations are reset \
                properly.
CCBUG: 223726


 M  +18 -0     clientgroup.cpp  


--- branches/KDE/4.4/kdebase/workspace/kwin/clientgroup.cpp #1081274:1081275
@@ -64,13 +64,28 @@
 
     // If it's not possible to have the same states then ungroup them, TODO: Check \
                all states
     // We do this here as the ungroup code in updateStates() cannot be called until \
add() completes +    ShadeMode oldShadeMode = c->shadeMode();
+    if( c->shadeMode() != clients_[visible_]->shadeMode() )
+        c->setShade( clients_[visible_]->shadeMode() );
+    if( c->shadeMode() != clients_[visible_]->shadeMode() )
+        {
+        if( oldGroup ) // Re-add to old group if required
+            c->setClientGroup( oldGroup );
+        // One need to trigger decoration repaint on the group to 
+        // make sure hover animations are properly reset.
+        clients_[visible_]->triggerDecorationRepaint();
+        return;
+        }
     QRect oldGeom = c->geometry();
     if( c->geometry() != clients_[visible_]->geometry() )
         c->setGeometry( clients_[visible_]->geometry() );
     if( c->geometry() != clients_[visible_]->geometry() )
         {
+        if( c->shadeMode() != oldShadeMode )
+            c->setShade( oldShadeMode );  // Restore old shade mode
         if( oldGroup ) // Re-add to old group if required
             c->setClientGroup( oldGroup );
+        clients_[visible_]->triggerDecorationRepaint();
         return;
         }
     if( c->desktop() != clients_[visible_]->desktop() )
@@ -79,8 +94,11 @@
         {
         if( c->geometry() != oldGeom )
             c->setGeometry( oldGeom ); // Restore old geometry
+        if( c->shadeMode() != oldShadeMode )
+            c->setShade( oldShadeMode );  // Restore old shade mode
         if( oldGroup ) // Re-add to old group if required
             c->setClientGroup( oldGroup );
+        clients_[visible_]->triggerDecorationRepaint();
         return;
         }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic