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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/containments/desktop
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2009-08-06 21:44:16
Message-ID: 1249595056.786832.440.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1008100 by aseigo:

* when our screen changes, update the working area
* when we update our working area, check to make sure that the screen actually exists \
currently: it may be a screen that USED to exist but doesn't anymore (but is still \
associated with it in case that screen reappears!)


 M  +16 -12    desktop.cpp  


--- trunk/KDE/kdebase/workspace/plasma/containments/desktop/desktop.cpp \
#1008099:1008100 @@ -99,11 +99,6 @@
         }
     }
 
-    if (constraints & Plasma::SizeConstraint) {
-        refreshWorkingArea();
-    }
-
-    //FIXME: are refres on working are change and refresh on resize mutually \
exclusive?  if (constraints & Plasma::StartupCompletedConstraint) {
         connect(corona(), SIGNAL(availableScreenRegionChanged()),
                 this, SLOT(refreshWorkingArea()));
@@ -121,6 +116,8 @@
         }
 
         m_layout->adjustPhysicalPositions();
+    } else if ((constraints & Plasma::SizeConstraint) || (constraints & \
Plasma::ScreenConstraint)) { +        refreshWorkingArea();
     }
 }
 
@@ -135,13 +132,14 @@
 
 void DefaultDesktop::addPanel(const QString &plugin)
 {
-    if (corona()) {
-        Containment* panel = corona()->addContainment(plugin);
+    Corona *c = corona();
+    if (c) {
+        Containment* panel = c->addContainment(plugin);
         panel->showConfigurationInterface();
 
         panel->setScreen(screen());
 
-        QList<Plasma::Location> freeEdges = corona()->freeEdges(screen());
+        QList<Plasma::Location> freeEdges = c->freeEdges(screen());
         //kDebug() << freeEdges;
         Plasma::Location destination;
         if (freeEdges.contains(Plasma::TopEdge)) {
@@ -161,8 +159,11 @@
         panel->updateConstraints(Plasma::StartupCompletedConstraint);
         panel->flushPendingConstraintsEvents();
 
-        const QRect screenGeom = corona()->screenGeometry(screen());
-        const QRegion availGeom = corona()->availableScreenRegion(screen());
+        const bool screenExists = screen() < c->numScreens();
+        const QRect screenGeom = screenExists ? c->screenGeometry(screen())
+                                              : geometry().toRect();
+        const QRegion availGeom = screenExists ? c->availableScreenRegion(screen())
+                                               : geometry().toRect();
         int minH = 10;
         int minW = 10;
         int w = 35;
@@ -369,11 +370,12 @@
     Corona *c = corona();
     if (!c) {
         //kDebug() << "no corona?!";
+        QTimer::singleShot(100, this, SLOT(refreshWorkingArea()));
         return;
     }
 
     QRectF workingGeom;
-    if (screen() != -1) {
+    if (screen() != -1 && screen() < c->numScreens()) {
         // we are associated with a screen, make sure not to overlap panels
         workingGeom = c->availableScreenRegion(screen()).boundingRect();
         //kDebug() << "got" << workingGeom;
@@ -385,10 +387,12 @@
         //kDebug() << "defaults due to no screen; got:" << workingGeom;
     }
 
-    if (workingGeom != QRectF()) {
+    if (workingGeom.isValid()) {
         //kDebug() << "!!!!!!!!!!!!! workingGeom is" << workingGeom;
         m_layout->setWorkingArea(workingGeom);
         m_layout->adjustPhysicalPositions();
+    } else {
+        QTimer::singleShot(100, this, SLOT(refreshWorkingArea()));
     }
 }
 


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

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