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

List:       kde-commits
Subject:    KDE/kdebase/workspace/kwin
From:       Thomas Lübking <thomas.luebking () web ! de>
Date:       2010-11-10 3:01:49
Message-ID: 20101110030149.7DD2DAC89E () svn ! kde ! org
[Download RAW message or body]

SVN commit 1194907 by luebking:

adjust/fix behaviour of Modal Dialogs reg. Minimizing, Virtual Desktop change & Shading
BUG: 193611
BUG: 180195


 M  +16 -1     client.cpp  
 M  +4 -1      group.cpp  


--- trunk/KDE/kdebase/workspace/kwin/client.cpp #1194906:1194907
@@ -1058,7 +1058,6 @@
     discardWindowPixmap();
     updateVisibility();
     updateAllowedActions();
-    workspace()->updateMinimizedOfTransients( this );
     if( decoration )
         decoration->shadeChange();
     updateWindowRules();
@@ -1499,6 +1498,7 @@
     desktop = qMin( workspace()->numberOfDesktops(), rules()->checkDesktop( desktop ));
     if( desk == desktop )
         return;
+
     int was_desk = desk;
     desk = desktop;
     info->setDesktop( desktop );
@@ -1510,6 +1510,21 @@
         }
     if( decoration != NULL )
         decoration->desktopChange();
+
+    ClientList transients_stacking_order = workspace()->ensureStackingOrder( transients() );
+    for( ClientList::ConstIterator it = transients_stacking_order.constBegin();
+        it != transients_stacking_order.constEnd();
+        ++it )
+        (*it)->setDesktop( desktop );
+
+    if( isModal()) // if a modal dialog is moved, move the mainwindow with it as otherwise
+                      // the (just moved) modal dialog will confusingly return to the mainwindow with
+                      // the next desktop change
+        {
+        foreach( Client* c2, mainClients())
+            c2->setDesktop( desktop );
+        }
+
     workspace()->updateFocusChains( this, Workspace::FocusChainMakeFirst );
     updateVisibility();
     updateWindowRules();
--- trunk/KDE/kdebase/workspace/kwin/group.cpp #1194906:1194907
@@ -404,12 +404,15 @@
 void Workspace::updateMinimizedOfTransients( Client* c )
     {
     // if mainwindow is minimized or shaded, minimize transients too
-    if ( c->isMinimized() || c->isShade() )
+    if ( c->isMinimized() )
         {
         for( ClientList::ConstIterator it = c->transients().constBegin();
              it != c->transients().constEnd();
              ++it )
             {
+            if ((*it)->isModal())
+                continue; // there's no reason to hide modal dialogs with the main client
+                          // but to keep them to eg. watch progress or whatever
             if( !(*it)->isMinimized()
                  && !(*it)->isTopMenu() ) // topmenus are not minimized, they're hidden
                 {
[prev in list] [next in list] [prev in thread] [next in thread] 

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