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

List:       kde-commits
Subject:    KDE/kdebase/workspace
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2008-03-31 14:56:56
Message-ID: 1206975416.153333.15606.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 792179 by aseigo:

improve mointor hot[un]plug support, patch by Aike J Sommer. thanks, Aike!

CCMAIL:dev@aikesommer.name


 M  +5 -1      libs/plasma/view.cpp  
 M  +21 -22    plasma/plasma/desktopcorona.cpp  
 M  +12 -2     plasma/plasma/rootwidget.cpp  


--- trunk/KDE/kdebase/workspace/libs/plasma/view.cpp #792178:792179
@@ -124,7 +124,7 @@
 
 void View::setContainment(Containment *containment)
 {
-    if (!containment || containment == d->containment) {
+    if (containment == d->containment) {
         return;
     }
 
@@ -136,6 +136,10 @@
     }
 
     d->containment = containment;
+    if (! containment) {
+        return;
+    }
+    
     if (screen > -1) {
         containment->setScreen(screen);
     }
--- trunk/KDE/kdebase/workspace/plasma/plasma/desktopcorona.cpp #792178:792179
@@ -63,21 +63,19 @@
             c->setScreen(i);
             c->setFormFactor(Plasma::Planar);
             c->flushUpdatedConstraints();
+        } else if (i >= m_numScreens) {
+            // now ensure that if our screen count changed we actually get views
+            // for them, even if the Containment already existed for that screen
+            // so we "lie" and emit a containmentAdded signal for every new screen
+            // regardless of whether it actually already existed, or just got added
+            // and therefore had this signal emitted. plasma can handle such
+            // multiple emissions of the signal, and this is simply the most
+            // straightforward way of accomplishing this
+            kDebug() << "Notifying of new screen: " << i;
+            emit containmentAdded(containmentForScreen(i));
         }
     }
 
-    // now ensure that if our screen count changed we actually get views
-    // for them, even if the Containment already existed for that screen
-    // so we "lie" and emit a containmentAdded signal for every new screen
-    // regardless of whether it actually already existed, or just got added
-    // and therefore had this signal emitted. plasma can handle such
-    // multiple emissions of the signal, and this is simply the most
-    // straightforward way of accomplishing this
-    for (int i = m_numScreens; i < numScreens; ++i) {
-        kDebug() << "Notifying of new screen: " << i;
-        emit containmentAdded(containmentForScreen(i));
-    }
-
     m_numScreens = numScreens;
 }
 
@@ -131,18 +129,19 @@
 
 void DesktopCorona::screenResized(int screen)
 {
-    bool desktopFound = false;
-    foreach (Plasma::Containment *c, containments()) {
-        if (c->screen() == screen) {
-            // trigger a relayout
-            c->setScreen(screen);
-            desktopFound = desktopFound ||
-                           c->containmentType() == Plasma::Containment::DesktopContainment ||
-                           c->containmentType() == Plasma::Containment::CustomContainment;
+    int numScreens = QApplication::desktop()->numScreens();
+    if (screen < numScreens) {
+        foreach (Plasma::Containment *c, containments()) {
+            if (c->screen() == screen) {
+                // trigger a relayout
+                c->setScreen(screen);
+            }
         }
+    
+        checkScreens(); // ensure we have containments for every screen
+    } else {
+        m_numScreens = numScreens;
     }
-
-    checkScreens(); // ensure we have containments for every screen
 }
 
 #include "desktopcorona.moc"
--- trunk/KDE/kdebase/workspace/plasma/plasma/rootwidget.cpp #792178:792179
@@ -107,9 +107,18 @@
     QDesktopWidget *desktop = QApplication::desktop();
     setGeometry(desktop->geometry());
     DesktopView *view = viewForScreen(screen);
-
+    
     if (view) {
-        view->adjustSize();
+        if (screen < desktop->numScreens()) {
+            view->adjustSize();
+        } else {
+            // the screen was removed, so we'll destroy the
+            // corresponding view
+            kDebug() << "removing the view for screen" << screen;
+            view->setContainment(0);
+            m_desktops.removeAll(view);
+            delete view;
+        }
     }
 }
 
@@ -138,6 +147,7 @@
     DesktopView *view = new DesktopView(containment, this);
     view->setGeometry(QApplication::desktop()->screenGeometry(containment->screen()));
     m_desktops.append(view);
+    view->show();
 }
 
 void RootWidget::screenOwnerChanged(int wasScreen, int isScreen, Plasma::Containment* containment)
[prev in list] [next in list] [prev in thread] [next in thread] 

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