All pastes #1225015 Raw Copy code Copy link Edit

Untitled

public unlisted text v1 · immutable
#1225015 ·published 2008-10-10 23:30 UTC
rendered paste body
Index: kdebase/CMakeLists.txt
===================================================================
--- kdebase/CMakeLists.txt	(revision 868895)
+++ kdebase/CMakeLists.txt	(working copy)
@@ -20,11 +20,11 @@
 include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES})
 
 if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/runtime )
-    add_subdirectory( runtime )
+#    add_subdirectory( runtime )
 endif ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/runtime )
 
 if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/apps )
-    add_subdirectory( apps )
+#    add_subdirectory( apps )
 endif ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/apps )
 
 if ( NOT Q_WS_MAC AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/workspace )
Index: kdebase/workspace/CMakeLists.txt
===================================================================
--- kdebase/workspace/CMakeLists.txt	(revision 868895)
+++ kdebase/workspace/CMakeLists.txt	(working copy)
@@ -78,42 +78,42 @@
 add_subdirectory(libs)
 
 # system settings (kcontrol replacement)
-macro_optional_add_subdirectory( systemsettings )
+#macro_optional_add_subdirectory( systemsettings )
 
 # core apps
 if(NOT WIN32)
-macro_optional_add_subdirectory( kcheckpass )
-macro_optional_add_subdirectory( kscreensaver )
-macro_optional_add_subdirectory( kwin )
-macro_optional_add_subdirectory( ksmserver )
-macro_optional_add_subdirectory( kcminit )
-macro_optional_add_subdirectory( ksplash )
-macro_optional_add_subdirectory( khotkeys )
-macro_optional_add_subdirectory( klipper )
-macro_optional_add_subdirectory( ksysguard )
-macro_optional_add_subdirectory( powerdevil )
+#macro_optional_add_subdirectory( kcheckpass )
+#macro_optional_add_subdirectory( kscreensaver )
+#macro_optional_add_subdirectory( kwin )
+#macro_optional_add_subdirectory( ksmserver )
+#macro_optional_add_subdirectory( kcminit )
+#macro_optional_add_subdirectory( ksplash )
+#macro_optional_add_subdirectory( khotkeys )
+#macro_optional_add_subdirectory( klipper )
+#macro_optional_add_subdirectory( ksysguard )
+#macro_optional_add_subdirectory( powerdevil )
 endif(NOT WIN32)
-macro_optional_add_subdirectory( krunner )
-macro_optional_add_subdirectory( solid )
-macro_optional_add_subdirectory( kmenuedit )
+#macro_optional_add_subdirectory( krunner )
+#macro_optional_add_subdirectory( solid )
+#macro_optional_add_subdirectory( kmenuedit )
 macro_optional_add_subdirectory( plasma )
-macro_optional_add_subdirectory( kstartupconfig )
+#macro_optional_add_subdirectory( kstartupconfig )
 
 
 # apps we need to figure out what to do with
-macro_optional_add_subdirectory( kcontrol )
+#macro_optional_add_subdirectory( kcontrol )
 if(NOT WIN32)
-macro_optional_add_subdirectory( ksystraycmd )
+#macro_optional_add_subdirectory( ksystraycmd )
 endif(NOT WIN32)
 # data
 if(NOT WIN32)
-macro_optional_add_subdirectory( cursors )
+#macro_optional_add_subdirectory( cursors )
 endif(NOT WIN32)
-macro_optional_add_subdirectory( doc )
-macro_optional_add_subdirectory( wallpapers )
+#macro_optional_add_subdirectory( doc )
+#macro_optional_add_subdirectory( wallpapers )
 
 if(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
-    add_subdirectory( kdm )
+#    add_subdirectory( kdm )
 else(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
     message(STATUS "Xau lib or Xdmcp lib was missing. kdm will not compile")
 endif(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
Index: kdebase/workspace/libs/plasma/plasma.cpp
===================================================================
--- kdebase/workspace/libs/plasma/plasma.cpp	(revision 868895)
+++ kdebase/workspace/libs/plasma/plasma.cpp	(working copy)
@@ -26,6 +26,8 @@
 #include <plasma/containment.h>
 #include <plasma/view.h>
 
+#include "kephal/screens.h"
+
 namespace Plasma
 {
 
@@ -109,7 +111,7 @@
     }
 
     //are we out of screen?
-    QRect screenRect = QApplication::desktop()->screenGeometry(pv ? pv->containment()->screen() : -1);
+    QRect screenRect = kephal::ScreenUtils::screenGeometry(pv ? pv->containment()->screen() : -1);
     //kDebug() << "==> rect for" << (pv ? pv->containment()->screen() : -1) << "is" << screenRect;
 
     if (pos.rx() + s.width() > screenRect.right()) {
Index: kdebase/workspace/libs/plasma/CMakeLists.txt
===================================================================
--- kdebase/workspace/libs/plasma/CMakeLists.txt	(revision 868895)
+++ kdebase/workspace/libs/plasma/CMakeLists.txt	(working copy)
@@ -123,6 +123,8 @@
 target_link_libraries(plasma ${DL_LIBRARY})
 endif(DL_LIBRARY)
 
+target_link_libraries(plasma kephal)
+
 if(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
     target_link_libraries(plasma ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY})
 endif(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
Index: kdebase/workspace/libs/plasma/containment.cpp
===================================================================
--- kdebase/workspace/libs/plasma/containment.cpp	(revision 868895)
+++ kdebase/workspace/libs/plasma/containment.cpp	(working copy)
@@ -56,6 +56,8 @@
 #include "private/desktoptoolbox_p.h"
 #include "private/paneltoolbox_p.h"
 
+#include "kephal/screens.h"
+
 namespace Plasma
 {
 
@@ -737,8 +739,7 @@
     }
 
     //kDebug() << "setting screen to" << screen << "and we are a" << containmentType();
-    QDesktopWidget *desktop = QApplication::desktop();
-    int numScreens = desktop->numScreens();
+    int numScreens = kephal::ScreenUtils::numScreens();
     if (screen < -1) {
         screen = -1;
     }
@@ -747,7 +748,7 @@
     if (screen < numScreens && screen > -1) {
         if (containmentType() == DesktopContainment ||
             containmentType() >= CustomContainment) {
-            resize(desktop->screenGeometry(screen).size());
+            resize(kephal::ScreenUtils::screenSize(screen));
         }
     }
 
@@ -774,7 +775,7 @@
         return QPoint();
     }
 
-    QRect r = QApplication::desktop()->screenGeometry(d->screen);
+    QRect r = kephal::ScreenUtils::screenGeometry(d->screen);
     if (containmentType() == PanelContainment ||
         containmentType() == CustomPanelContainment) {
         QRectF p = geometry();
@@ -1372,7 +1373,7 @@
         //don't remove a desktop that's in use
         //FIXME allow removal of containments for screens that don't currently exist
         if (d->type != PanelContainment && d->type != CustomPanelContainment &&
-            (d->screen != -1 || d->screen >= QApplication::desktop()->numScreens())) {
+            (d->screen != -1 || d->screen >= kephal::ScreenUtils::numScreens())) {
             kDebug() << (QObject*)this << "containment has a screen number?" << d->screen;
             return;
         }
@@ -1491,9 +1492,10 @@
             }
         }
     } else {
-        QDesktopWidget *desktop = QApplication::desktop();
-        QRectF avail = desktop->availableGeometry(screen);
-        QRectF screenGeom = desktop->screenGeometry(screen);
+//         QRectF avail = QApplication::desktop()->availableGeometry(screen);
+        QRectF screenGeom = kephal::ScreenUtils::screenGeometry(screen);
+        QRectF avail = screenGeom; // TODO: implement availableGeometry in kephal
+//         kDebug() << "Screen" << screen << "QDesktopWidget::availableGeometry" << avail << "kephal" << screenGeom;
 
         if (q->view() && !q->view()->transform().isScaling()) {
 
@@ -1746,11 +1748,10 @@
     int width = 0;
     int height = 0;
 
-    QDesktopWidget *desktop = QApplication::desktop();
-    int numScreens = desktop->numScreens();
+    int numScreens = kephal::ScreenUtils::numScreens();
 
     for (int i = 0; i < numScreens; ++i) {
-        QRect otherScreen = desktop->screenGeometry(i);
+        QRect otherScreen = kephal::ScreenUtils::screenGeometry(i);
 
         if (width < otherScreen.width()) {
             width = otherScreen.width();
Index: kdebase/workspace/libs/CMakeLists.txt
===================================================================
--- kdebase/workspace/libs/CMakeLists.txt	(revision 868895)
+++ kdebase/workspace/libs/CMakeLists.txt	(working copy)
@@ -1,15 +1,15 @@
-add_subdirectory(kdm)
-add_subdirectory(solid)
+#add_subdirectory(kdm)
+#add_subdirectory(solid)
 add_subdirectory(plasma)
 if(NOT WIN32)
- add_subdirectory(taskmanager)
- add_subdirectory(ksysguard)
- add_subdirectory(kworkspace)
+# add_subdirectory(taskmanager)
+# add_subdirectory(ksysguard)
+# add_subdirectory(kworkspace)
 endif(NOT WIN32)
 
 macro_optional_find_package(Nepomuk)
 macro_log_feature(Nepomuk_FOUND "Nepomuk" "Nepomuk Libraries" "kdelibs" FALSE "" "Required to build Nepomuk.")
 if(Nepomuk_FOUND)
-  add_subdirectory(nepomukquery)
-  add_subdirectory(nepomukqueryclient)
+#  add_subdirectory(nepomukquery)
+#  add_subdirectory(nepomukqueryclient)
 endif(Nepomuk_FOUND)
Index: kdebase/workspace/plasma/shells/desktop/panelcontroller.cpp
===================================================================
--- kdebase/workspace/plasma/shells/desktop/panelcontroller.cpp	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/panelcontroller.cpp	(working copy)
@@ -46,6 +46,8 @@
 #include "positioningruler.h"
 #include "toolbutton.h"
 
+#include "kephal/screens.h"
+
 class PanelController::ButtonGroup: public QFrame
 {
 public:
@@ -240,7 +242,8 @@
                 }
             }
 
-            QRect screenRect = QApplication::desktop()->screenGeometry(containment->screen());
+            QRect screenRect = 
+                kephal::ScreenUtils::screenGeometry(containment->screen());
 
             if (pos.rx() + s.width() > screenRect.right()) {
                 pos.rx() -= ((pos.rx() + s.width()) - screenRect.right());
@@ -259,7 +262,7 @@
     void syncRuler()
     {
         QRect screenGeom =
-              QApplication::desktop()->screenGeometry(containment->screen());
+              kephal::ScreenUtils::screenGeometry(containment->screen());
 
         switch (location) {
         case Plasma::LeftEdge:
@@ -515,7 +518,7 @@
 QSize PanelController::sizeHint() const
 {
     QRect screenGeom =
-    QApplication::desktop()->screenGeometry(d->containment->screen());
+        kephal::ScreenUtils::screenGeometry(d->containment->screen());
 
     switch (d->location) {
     case Plasma::LeftEdge:
@@ -533,7 +536,7 @@
 QPoint PanelController::positionForPanelGeometry(const QRect &panelGeom) const
 {
     QRect screenGeom =
-    QApplication::desktop()->screenGeometry(d->containment->screen());
+        kephal::ScreenUtils::screenGeometry(d->containment->screen());
 
     switch (d->location) {
     case Plasma::LeftEdge:
@@ -561,7 +564,7 @@
     d->location = loc;
     d->ruler->setLocation(loc);
     QRect screenGeom =
-    QApplication::desktop()->screenGeometry(d->containment->screen());
+        kephal::ScreenUtils::screenGeometry(d->containment->screen());
 
     switch (loc) {
     case Plasma::LeftEdge:
@@ -766,7 +769,7 @@
         } else if (event->type() == QEvent::MouseButtonRelease) {
             //FIXME: for now resizes here instead of on mouse move, for a serious performance problem, maybe in Qt
             QRect screenGeom =
-            QApplication::desktop()->screenGeometry(d->containment->screen());
+                kephal::ScreenUtils::screenGeometry(d->containment->screen());
             if (d->dragging == Private::ResizeButtonElement) {
                 switch (location()) {
                 case Plasma::LeftEdge:
@@ -804,8 +807,7 @@
         return;
     }
 
-    QDesktopWidget *desktop = QApplication::desktop();
-    QRect screenGeom = desktop->screenGeometry(d->containment->screen());
+    QRect screenGeom = kephal::ScreenUtils::screenGeometry(d->containment->screen());
 
     if (d->dragging == Private::MoveButtonElement) {
         //only move when the mouse cursor is out of the controller to avoid an endless reposition cycle
@@ -815,7 +817,7 @@
 
         if (!screenGeom.contains(event->globalPos())) {
             //move panel to new screen if dragged there
-            int targetScreen = desktop->screenNumber(event->globalPos());
+            int targetScreen = QApplication::desktop()->screenNumber(event->globalPos());
             //kDebug() << "Moving panel from screen" << d->containment->screen() << "to screen" << targetScreen;
             d->containment->setScreen(targetScreen);
             return;
Index: kdebase/workspace/plasma/shells/desktop/desktopcorona.h
===================================================================
--- kdebase/workspace/plasma/shells/desktop/desktopcorona.h	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/desktopcorona.h	(working copy)
@@ -29,6 +29,11 @@
     class Applet;
 } // namespace Plasma
 
+namespace kephal {
+    class Screen;
+    class Screens;
+} // namespace kephal
+
 /**
  * @short A Corona with desktop-y considerations
  */
@@ -50,7 +55,9 @@
     void checkScreens();
 
 protected Q_SLOTS:
-    void screenResized(int);
+    void screenAdded(kephal::Screen * s);
+    void screenRemoved(int id);
+    void screenResized(kephal::Screen * s, QSize oldSize, QSize newSize);
 
 private:
     void init();
Index: kdebase/workspace/plasma/shells/desktop/plasmaapp.h
===================================================================
--- kdebase/workspace/plasma/shells/desktop/plasmaapp.h	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/plasmaapp.h	(working copy)
@@ -21,6 +21,8 @@
 #define PLASMA_APP_H
 
 #include <QList>
+#include <QSize>
+#include <QPoint>
 
 #include <KUniqueApplication>
 
@@ -31,6 +33,11 @@
     class Corona;
 } // namespace Plasma
 
+namespace kephal {
+    class Screen;
+    class Screens;
+} // namespace kephal
+
 class RootWidget;
 class PanelView;
 class DesktopView;
@@ -93,7 +100,7 @@
 private:
     PlasmaApp(Display* display, Qt::HANDLE visual, Qt::HANDLE colormap);
     DesktopView* viewForScreen(int screen) const;
-
+    
 private Q_SLOTS:
     void cleanup();
     void syncConfig();
@@ -101,7 +108,12 @@
     void createView(Plasma::Containment *containment);
     void panelRemoved(QObject* panel);
     void adjustSize(int screen);
-
+    
+    void screenAdded(kephal::Screen * s);
+    void screenRemoved(int id);
+    void screenResized(kephal::Screen * s, QSize oldSize, QSize newSize);
+    void screenMoved(kephal::Screen * s, QPoint oldPosition, QPoint newPosition);
+            
 private:
     Plasma::Corona *m_corona;
     QList<PanelView*> m_panels;
Index: kdebase/workspace/plasma/shells/desktop/panelview.cpp
===================================================================
--- kdebase/workspace/plasma/shells/desktop/panelview.cpp	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/panelview.cpp	(working copy)
@@ -41,6 +41,8 @@
 #include "panelcontroller.h"
 #include "plasmaapp.h"
 
+#include "kephal/screens.h"
+
 PanelView::PanelView(Plasma::Containment *panel, int id, QWidget *parent)
     : Plasma::View(panel, id, parent),
       m_panelController(0),
@@ -62,7 +64,7 @@
 
     // pinchContainment calls updatePanelGeometry for us
 
-    QRect screenRect = QApplication::desktop()->screenGeometry(containment()->screen());
+    QRect screenRect = kephal::ScreenUtils::screenGeometry(containment()->screen());
     m_lastHorizontal = isHorizontal();
     KConfigGroup sizes = KConfigGroup(&viewConfig, "Sizes");
     m_lastSeenSize = sizes.readEntry("lastsize", m_lastHorizontal ? screenRect.width() : screenRect.height());
@@ -130,7 +132,7 @@
             // we're switching! swap the sizes about
             panelHeight = s.width();
             if (wasFullSize) {
-                QRect screenGeom = QApplication::desktop()->screenGeometry(c->screen());
+                QRect screenGeom = kephal::ScreenUtils::screenGeometry(c->screen());
                 panelWidth = screenGeom.width();
             } else {
                 panelWidth = s.height();
@@ -145,7 +147,7 @@
             // we're switching! swap the sizes about
 
             if (wasFullSize) {
-                QRect screenGeom = QApplication::desktop()->screenGeometry(c->screen());
+                QRect screenGeom = kephal::ScreenUtils::screenGeometry(c->screen());
                 panelHeight = screenGeom.height();
             } else {
                 panelHeight = s.width();
@@ -170,7 +172,7 @@
     c->setMinimumSize(min);
     c->setMaximumSize(max);
 
-    QRect screenRect = QApplication::desktop()->screenGeometry(c->screen());
+    QRect screenRect = kephal::ScreenUtils::screenGeometry(c->screen());
     pinchContainment(screenRect);
     //updatePanelGeometry();
     connect(this, SIGNAL(sceneRectAboutToChange()), this, SLOT(updatePanelGeometry()));
@@ -246,7 +248,7 @@
         screen = 0;
     }
 
-    QRect screenGeom = QApplication::desktop()->screenGeometry(screen);
+    QRect screenGeom = kephal::ScreenUtils::screenGeometry(screen);
 
     if (m_alignment != Qt::AlignCenter) {
         m_offset = qMax(m_offset, 0);
@@ -643,8 +645,8 @@
     NETExtendedStrut strut;
 
     if (m_panelMode == NormalPanel) {
-        QRect thisScreen = QApplication::desktop()->screenGeometry(containment()->screen());
-        QRect wholeScreen = QApplication::desktop()->geometry();
+        QRect thisScreen = kephal::ScreenUtils::screenGeometry(containment()->screen());
+        QRect wholeScreen = QApplication::desktop()->geometry(); //TODO: do that through kephal
 
         // extended struts are to the combined screen geoms, not the single screen
         int leftOffset = wholeScreen.x() - thisScreen.x();
Index: kdebase/workspace/plasma/shells/desktop/CMakeLists.txt
===================================================================
--- kdebase/workspace/plasma/shells/desktop/CMakeLists.txt	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/CMakeLists.txt	(working copy)
@@ -42,6 +42,8 @@
 set_target_properties(kdeinit_plasma_qgv PROPERTIES OUTPUT_NAME kdeinit4_plasma)
 set_target_properties(plasma_qgv PROPERTIES OUTPUT_NAME plasma)
 
+target_link_libraries(kdeinit_plasma_qgv kephal)
+
 install(TARGETS kdeinit_plasma_qgv DESTINATION ${LIB_INSTALL_DIR})
 install(TARGETS plasma_qgv ${INSTALL_TARGETS_DEFAULT_ARGS})
 install(FILES plasma.desktop DESTINATION ${AUTOSTART_INSTALL_DIR})
Index: kdebase/workspace/plasma/shells/desktop/desktopview.cpp
===================================================================
--- kdebase/workspace/plasma/shells/desktop/desktopview.cpp	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/desktopview.cpp	(working copy)
@@ -20,7 +20,6 @@
 #include "desktopview.h"
 
 #include <QAction>
-#include <QDesktopWidget>
 #include <QFile>
 #include <QWheelEvent>
 #include <QCoreApplication>
@@ -43,6 +42,8 @@
 
 #include "backgrounddialog.h"
 
+#include "kephal/screens.h"
+
 #ifdef Q_WS_WIN
 #include "windows.h"
 #include "windef.h"
@@ -138,14 +139,17 @@
 void DesktopView::adjustSize()
 {
     // adapt to screen resolution changes
-    QDesktopWidget *desktop = QApplication::desktop();
-    QRect geom = desktop->screenGeometry(screen());
+    QRect geom = kephal::ScreenUtils::screenGeometry(screen());
+    kDebug() << "screen" << screen() << "geom" << geom;
+    containment()->resize(geom.size());
     setGeometry(geom);
-    containment()->resize(geom.size());
+    kDebug() << "Containment's geom after resize" << containment()->geometry(); 
 
     if (m_dashboard) {
         m_dashboard->setGeometry(geom);
     }
+    
+    kDebug() << "Done" << screen();
 }
 
 void DesktopView::setIsDesktop(bool isDesktop)
@@ -229,7 +233,7 @@
 {
     if (m_configDialog == 0) {
         const QSize resolution =
-            QApplication::desktop()->screenGeometry(screen()).size();
+            kephal::ScreenUtils::screenSize(screen());
         m_configDialog = new BackgroundDialog(resolution, this);
     }
     else {
Index: kdebase/workspace/plasma/shells/desktop/desktopcorona.cpp
===================================================================
--- kdebase/workspace/plasma/shells/desktop/desktopcorona.cpp	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/desktopcorona.cpp	(working copy)
@@ -20,7 +20,6 @@
 #include "desktopcorona.h"
 
 #include <QApplication>
-#include <QDesktopWidget>
 #include <QDir>
 #include <QGraphicsLayout>
 
@@ -32,6 +31,8 @@
 #include <plasma/containment.h>
 #include <plasma/dataenginemanager.h>
 
+#include "kephal/screens.h"
+
 DesktopCorona::DesktopCorona(QObject *parent)
     : Plasma::Corona(parent)
 {
@@ -40,16 +41,17 @@
 
 void DesktopCorona::init()
 {
-    QDesktopWidget *desktop = QApplication::desktop();
-    m_numScreens = desktop->numScreens();
-    QObject::connect(desktop, SIGNAL(resized(int)), this, SLOT(screenResized(int)));
+    kephal::Screens *screens = kephal::Screens::instance();
+    m_numScreens = screens->screens().size();
+    connect(screens, SIGNAL(screenAdded(kephal::Screen *)), SLOT(screenAdded(kephal::Screen *)));
+    connect(screens, SIGNAL(screenRemoved(int)), SLOT(screenRemoved(int)));
+    connect(kephal::Screens::instance(), SIGNAL(screenResized(kephal::Screen *, QSize, QSize)), SLOT(screenResized(kephal::Screen *, QSize, QSize)));
 }
 
 void DesktopCorona::checkScreens()
 {
     // quick sanity check to ensure we have containments for each screen!
-    int numScreens = QApplication::desktop()->numScreens();
-    for (int i = 0; i < numScreens; ++i) {
+    for (int i = 0; i < m_numScreens; ++i) {
         if (!containmentForScreen(i)) {
             //TODO: should we look for containments that aren't asigned but already exist?
             Plasma::Containment* c = addContainment("desktop");
@@ -69,8 +71,6 @@
             emit containmentAdded(containmentForScreen(i));
         }
     }
-
-    m_numScreens = numScreens;
 }
 
 void DesktopCorona::loadDefaultLayout()
@@ -82,15 +82,13 @@
         return;
     }
 
-    QDesktopWidget *desktop = QApplication::desktop();
-    int numScreens = desktop->numScreens();
-    kDebug() << "number of screens is" << numScreens;
+    kDebug() << "number of screens is" << m_numScreens;
     int topLeftScreen = 0;
-    QPoint topLeftCorner = desktop->screenGeometry(0).topLeft();
+    QPoint topLeftCorner = kephal::Screens::instance()->primaryScreen()->geom().topLeft();
 
     // find our "top left" screen, use it as the primary
-    for (int i = 0; i < numScreens; ++i) {
-        QRect g = desktop->screenGeometry(i);
+    for (int i = 0; i < m_numScreens; ++i) {
+        QRect g = kephal::ScreenUtils::screenGeometry(i);
         kDebug() << "     screen " << i << "geometry is" << g;
 
         if (g.x() <= topLeftCorner.x() && g.y() >= topLeftCorner.y()) {
@@ -103,7 +101,7 @@
     KConfigGroup invalidConfig;
 
     // create a containment for each screen
-    for (int i = 0; i < numScreens; ++i) {
+    for (int i = 0; i < m_numScreens; ++i) {
         // passing in an empty string will get us whatever the default
         // containment type is!
         Plasma::Containment* c = addContainmentDelayed(QString());
@@ -205,22 +203,40 @@
     return applet;
 }
 
-void DesktopCorona::screenResized(int screen)
+void DesktopCorona::screenResized(kephal::Screen *s, QSize oldSize, QSize newSize)
 {
-    int numScreens = QApplication::desktop()->numScreens();
-    if (screen < numScreens) {
-        foreach (Plasma::Containment *c, containments()) {
-            if (c->screen() == screen) {
-                // trigger a relayout
-                c->setScreen(screen);
-            }
+    // TODO: that check should not be necessary, fix kephal
+    if (oldSize == newSize) 
+        return;
+    
+    kDebug();
+    foreach (Plasma::Containment *c, containments()) {
+        if (c->screen() == s->id()) {
+            // trigger a relayout
+            c->setScreen(s->id());
         }
+    }
 
-        checkScreens(); // ensure we have containments for every screen
-    } else {
-        m_numScreens = numScreens;
-    }
+    checkScreens(); // ensure we have containments for every screen
+    kDebug() << "Done";
 }
 
+void DesktopCorona::screenAdded(kephal::Screen * s)
+{
+    kDebug();
+    m_numScreens = kephal::ScreenUtils::numScreens();
+    checkScreens(); // ensure we have containments for every screen
+    kDebug() << "Done";
+}
+
+void DesktopCorona::screenRemoved(int id)
+{
+    kDebug();
+    m_numScreens = kephal::ScreenUtils::numScreens();
+    checkScreens(); // ensure we have containments for every screen
+    kDebug() << "Done";
+}
+
+
 #include "desktopcorona.moc"
 
Index: kdebase/workspace/plasma/shells/desktop/plasmaapp.cpp
===================================================================
--- kdebase/workspace/plasma/shells/desktop/plasmaapp.cpp	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/plasmaapp.cpp	(working copy)
@@ -64,6 +64,8 @@
 #include "desktopview.h"
 #include "panelview.h"
 
+#include "kephal/screens.h"
+
 #ifdef Q_WS_X11
 #include <X11/Xlib.h>
 #include <X11/extensions/Xrender.h>
@@ -147,10 +149,11 @@
     // Calculate the size required to hold background pixmaps for all screens.
     // Add 10% so that other (smaller) pixmaps can also be cached.
     int cacheSize = 0;
-    QDesktopWidget *desktop = QApplication::desktop();
-    for (int i = 0; i < desktop->numScreens(); i++) {
-        QRect geometry = desktop->screenGeometry(i);
-        cacheSize += 4 * geometry.width() * geometry.height() / 1024;
+    QList<kephal::Screen *> screensList = kephal::Screens::instance()->screens();
+    for (int i = 0; i < screensList.size(); i++) {
+        kephal::Screen *screen = screensList.at(i);
+        QSize size = screen->size();
+        cacheSize += 4 * size.width() * size.height() / 1024;
     }
     cacheSize += cacheSize / 10;
 
@@ -251,8 +254,8 @@
         }
     }
 
-    int numScreens = QApplication::desktop()->numScreens();
-    for (int i = 0; i < numScreens; ++i) {
+    QList<kephal::Screen *> screensList = kephal::Screens::instance()->screens();
+    for (int i = 0; i < screensList.size(); i++) {
         DesktopView *v = viewForScreen(i);
         if (v && v->containment()) {
             viewIds.writeEntry(QString::number(v->containment()->id()), v->id());
@@ -281,7 +284,8 @@
 void PlasmaApp::toggleDashboard()
 {
     int currentScreen = 0;
-    if (QApplication::desktop()->numScreens() > 1) {
+    if (kephal::ScreenUtils::numScreens() > 1) {
+        // TODO: that should be done through kephal
         currentScreen = QApplication::desktop()->screenNumber(QCursor::pos());
     }
 
@@ -334,10 +338,17 @@
         view->setIsDesktop(isDesktop);
     }
 
+    kephal::Screens *screens = kephal::Screens::instance();
     if (isDesktop) {
-        connect(QApplication::desktop(), SIGNAL(resized(int)), SLOT(adjustSize(int)));
+        connect(screens, SIGNAL(screenAdded(kephal::Screen *)), SLOT(screenAdded(kephal::Screen *)));
+        connect(screens, SIGNAL(screenRemoved(int)), SLOT(screenRemoved(int)));
+        connect(screens, SIGNAL(screenResized(kephal::Screen *, QSize, QSize)), SLOT(screenResized(kephal::Screen *, QSize, QSize)));
+        connect(screens, SIGNAL(screenMoved(kephal::Screen *, QPoint, QPoint)), SLOT(screenMoved(kephal::Screen *, QPoint, QPoint)));
     } else {
-        disconnect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(adjustSize(int)));
+        disconnect(screens, SIGNAL(screenAdded(kephal::Screen *)), this, SLOT(screenAdded(kephal::Screen *)));
+        disconnect(screens, SIGNAL(screenRemoved(int)), this, SLOT(screenRemoved(int)));
+        disconnect(screens, SIGNAL(screenResized(kephal::Screen *, QSize, QSize)), this, SLOT(screenResized(kephal::Screen *, QSize, QSize)));
+        disconnect(screens, SIGNAL(screenMoved(kephal::Screen *, QPoint, QPoint)), this, SLOT(screenMoved(kephal::Screen *, QPoint, QPoint)));
     }
 }
 
@@ -348,31 +359,42 @@
 
 void PlasmaApp::adjustSize(int screen)
 {
-    QDesktopWidget *desktop = QApplication::desktop();
-    bool screenExists = screen < desktop->numScreens();
+}
 
-    QRect screenGeom;
-    if (screenExists) {
-        screenGeom = desktop->screenGeometry(screen);
+void PlasmaApp::screenAdded(kephal::Screen * s)
+{
+    kDebug() << s->id();
+}
+
+void PlasmaApp::screenRemoved(int id)
+{
+    kDebug() << id;
+    DesktopView *view = viewForScreen(id);
+    if (view) {
+        // the screen was removed, so we'll destroy the
+        // corresponding view
+        kDebug() << "removing the view for screen" << id;
+        view->setContainment(0);
+        m_desktops.removeAll(view);
+        delete view;
     }
+}
 
-    DesktopView *view = viewForScreen(screen);
+void PlasmaApp::screenResized(kephal::Screen *s, QSize oldSize, QSize newSize)
+{
+    // TODO: that check should not be necessary, fix kephal
+    if (oldSize == newSize) 
+        return;
+    
+    kDebug() << s->id() << oldSize << newSize; 
+    
+    DesktopView *view = viewForScreen(s->id());
 
-    kDebug() << "adjust size for screen" << screen << screenGeom << view;
+    kDebug() << "adjust size for screen" << s->id() << newSize << view;
 
     if (view) {
-        if (screenExists) {
-            kDebug() << "here we go ... adjusting size";
-            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;
-        }
-    } else if (screenExists) {
+        view->adjustSize();
+    } else {
         //TODO: we have a screen that has changed, but no view.
         //      perhaps we should make one.
     }
@@ -381,15 +403,22 @@
     //      disappears? this would mean having some
     //      way of alerting that we have a new screen
     //      that appears
-    if (screenExists) {
-        foreach (PanelView *panel, m_panels) {
-            if (panel->screen() == screen) {
-                panel->pinchContainment(screenGeom);
-            }
+    foreach (PanelView *panel, m_panels) {
+        if (panel->screen() == s->id()) {
+            panel->pinchContainment(s->geom());
         }
     }
+    
+    kDebug() << "Done.";
 }
 
+void PlasmaApp::screenMoved(kephal::Screen * s, QPoint oldPosition, QPoint newPosition)
+{
+    kDebug() << s->id() << oldPosition.x() << oldPosition.y() << newPosition.x() << newPosition.y();
+}
+
+
+
 DesktopView* PlasmaApp::viewForScreen(int screen) const
 {
     foreach (DesktopView *view, m_desktops) {
@@ -499,14 +528,14 @@
         }
         default:
             if (containment->screen() > -1 &&
-                containment->screen() < QApplication::desktop()->numScreens()) {
+                containment->screen() < kephal::ScreenUtils::numScreens()) {
                 if (viewForScreen(containment->screen())) {
                     // we already have a view for this screen
                     return;
                 }
 
                 kDebug() << "creating a view for" << containment->screen() << "and we have"
-                    << QApplication::desktop()->numScreens() << "screens";
+                    << kephal::ScreenUtils::numScreens() << "screens";
 
                 // we have a new screen. neat.
                 DesktopView *view = new DesktopView(containment, id, 0);
@@ -515,7 +544,7 @@
                     connect(m_corona, SIGNAL(screenOwnerChanged(int,int,Plasma::Containment*)),
                             view, SLOT(screenOwnerChanged(int,int,Plasma::Containment*)));
                 }
-                view->setGeometry(QApplication::desktop()->screenGeometry(containment->screen()));
+                view->setGeometry(kephal::ScreenUtils::screenGeometry(containment->screen()));
                 m_desktops.append(view);
                 view->setIsDesktop(m_isDesktop);
                 view->show();
Index: kdebase/workspace/plasma/shells/desktop/dashboardview.cpp
===================================================================
--- kdebase/workspace/plasma/shells/desktop/dashboardview.cpp	(revision 868895)
+++ kdebase/workspace/plasma/shells/desktop/dashboardview.cpp	(working copy)
@@ -22,7 +22,6 @@
 #include "dashboardview.h"
 
 #include <QAction>
-#include <QDesktopWidget>
 #include <QKeyEvent>
 #include <QTimer>
 
@@ -35,6 +34,8 @@
 #include "plasma/appletbrowser.h"
 #include "plasmaapp.h"
 
+#include "kephal/screens.h"
+
 static const int SUPPRESS_SHOW_TIMEOUT = 500; // Number of millis to prevent reshow of dashboard
 
 DashboardView::DashboardView(Plasma::Containment *containment, QWidget *parent)
@@ -51,8 +52,7 @@
         setAttribute(Qt::WA_NoSystemBackground);
     }
 
-    QDesktopWidget *desktop = QApplication::desktop();
-    setGeometry(desktop->screenGeometry(containment->screen()));
+    setGeometry(kephal::ScreenUtils::screenGeometry(containment->screen()));
 
     setWallpaperEnabled(!PlasmaApp::hasComposite());
 
Index: kdebase/workspace/plasma/containments/panel/panel.cpp
===================================================================
--- kdebase/workspace/plasma/containments/panel/panel.cpp	(revision 868895)
+++ kdebase/workspace/plasma/containments/panel/panel.cpp	(working copy)
@@ -44,13 +44,15 @@
 #include <plasma/theme.h>
 #include <plasma/view.h>
 
+#include <kephal/screens.h>
+
 using namespace Plasma;
 
 Panel::Panel(QObject *parent, const QVariantList &args)
     : Containment(parent, args),
       m_configureAction(0),
       m_addPanelAction(0),
-      m_currentSize(QSize(QApplication::desktop()->screenGeometry(screen()).width(), 38)),
+      m_currentSize(QSize(kephal::ScreenUtils::screenSize(screen()).width(), 38)),
       m_lastViewGeom()
 {
     m_background = new Plasma::PanelSvg(this);
@@ -232,7 +234,7 @@
     if (s < 0) {
         // do nothing in this case, we want all the borders
     } else if (loc == BottomEdge || loc == TopEdge) {
-        QRect r = QApplication::desktop()->screenGeometry(s);
+        QRect r = kephal::ScreenUtils::screenGeometry(s);
 
         if (loc == BottomEdge) {
             enabledBorders ^= PanelSvg::BottomBorder;
@@ -253,7 +255,7 @@
 
         //kDebug() << "top/bottom: Width:" << width << ", height:" << height;
     } else if (loc == LeftEdge || loc == RightEdge) {
-        QRect r = QApplication::desktop()->screenGeometry(s);
+        QRect r = kephal::ScreenUtils::screenGeometry(s);
 
         if (loc == RightEdge) {
             enabledBorders ^= PanelSvg::RightBorder;
@@ -340,7 +342,7 @@
     //we need to know if the width or height is 100%
     if (constraints & Plasma::LocationConstraint || constraints & Plasma::SizeConstraint) {
         m_currentSize = geometry().size().toSize();
-        QRectF screenRect = screen() >= 0 ? QApplication::desktop()->screenGeometry(screen()) :
+        QRectF screenRect = screen() >= 0 ? kephal::ScreenUtils::screenGeometry(screen()) :
             geometry();
 
         if ((formFactor() == Horizontal && m_currentSize.width() >= screenRect.width()) ||
Index: kdebase/workspace/plasma/containments/desktop/desktop.cpp
===================================================================
--- kdebase/workspace/plasma/containments/desktop/desktop.cpp	(revision 868895)
+++ kdebase/workspace/plasma/containments/desktop/desktop.cpp	(working copy)
@@ -52,6 +52,8 @@
 #include "krunner_interface.h"
 #include "screensaver_interface.h"
 
+#include "kephal/screens.h"
+
 #ifdef Q_OS_WIN
 #define _WIN32_WINNT 0x0500 // require NT 5.0 (win 2k pro)
 #include <windows.h>
@@ -98,7 +100,7 @@
 
 QSize DefaultDesktop::resolution() const
 {
-    return QApplication::desktop()->screenGeometry(screen()).size();
+    return kephal::ScreenUtils::screenSize(screen());
 }
 
 void DefaultDesktop::constraintsEvent(Plasma::Constraints constraints)
Index: kdebase/workspace/plasma/CMakeLists.txt
===================================================================
--- kdebase/workspace/plasma/CMakeLists.txt	(revision 868895)
+++ kdebase/workspace/plasma/CMakeLists.txt	(working copy)
@@ -1,12 +1,12 @@
 add_definitions(-DKDE_DEFAULT_DEBUG_AREA=1204)
 
-add_subdirectory(animators)
-add_subdirectory(applets)
+#add_subdirectory(animators)
+#add_subdirectory(applets)
 add_subdirectory(containments)
-add_subdirectory(dataengines)
-add_subdirectory(desktoptheme)
-add_subdirectory(runners)
-add_subdirectory(scriptengines)
+#add_subdirectory(dataengines)
+#add_subdirectory(desktoptheme)
+#add_subdirectory(runners)
+#add_subdirectory(scriptengines)
 add_subdirectory(shells)
-add_subdirectory(tools)
-add_subdirectory(wallpapers)
+#add_subdirectory(tools)
+#add_subdirectory(wallpapers)