rev 7649 - in branches/kde4/packages/kdebase-workspace/debian: . patches

Fathi Boudra fboudra-guest at alioth.debian.org
Thu Oct 25 14:00:40 UTC 2007


Author: fboudra-guest
Date: 2007-10-25 14:00:39 +0000 (Thu, 25 Oct 2007)
New Revision: 7649

Added:
   branches/kde4/packages/kdebase-workspace/debian/patches/01_kdebase-workspace_branch_r729279.diff
Removed:
   branches/kde4/packages/kdebase-workspace/debian/patches/01_kdebase-workspace_branch_r726786.diff
Modified:
   branches/kde4/packages/kdebase-workspace/debian/changelog
   branches/kde4/packages/kdebase-workspace/debian/patches/series
Log:
* Pull SVN branch to r729279.


Modified: branches/kde4/packages/kdebase-workspace/debian/changelog
===================================================================
--- branches/kde4/packages/kdebase-workspace/debian/changelog	2007-10-25 13:52:27 UTC (rev 7648)
+++ branches/kde4/packages/kdebase-workspace/debian/changelog	2007-10-25 14:00:39 UTC (rev 7649)
@@ -2,6 +2,7 @@
 
   +++ Changes by Fathi Boudra:
 
+  * Pull SVN branch to r729279.
   * Add libcaptury-dev build dependency.
   * Add *videorecord* to kwin package.
 

Deleted: branches/kde4/packages/kdebase-workspace/debian/patches/01_kdebase-workspace_branch_r726786.diff

Added: branches/kde4/packages/kdebase-workspace/debian/patches/01_kdebase-workspace_branch_r729279.diff
===================================================================
--- branches/kde4/packages/kdebase-workspace/debian/patches/01_kdebase-workspace_branch_r729279.diff	                        (rev 0)
+++ branches/kde4/packages/kdebase-workspace/debian/patches/01_kdebase-workspace_branch_r729279.diff	2007-10-25 14:00:39 UTC (rev 7649)
@@ -0,0 +1,85071 @@
+--- a/ksmserver/shutdowndlg.cpp
++++ b/ksmserver/shutdowndlg.cpp
+@@ -23,7 +23,6 @@
+ ******************************************************************/
+ 
+ #include <config-workspace.h>
+-#include <config-X11.h>
+ 
+ #include "shutdowndlg.h"
+ #include "plasma/svg.h"
+@@ -38,7 +37,6 @@
+ #include <QTimer>
+ #include <QSvgRenderer>
+ #include <QPaintEvent>
+-#include <QPaintEngine>
+ 
+ #include <kdebug.h>
+ #include <kdialog.h>
+@@ -59,9 +57,6 @@
+ #include <dmctl.h>
+ 
+ #include <X11/Xlib.h>
+-#ifdef HAVE_XRENDER
+-#  include <X11/extensions/Xrender.h>
+-#endif
+ 
+ #include "shutdowndlg.moc"
+ #include <QX11Info>
+@@ -103,29 +98,7 @@
+     if ( m_currentY >= height() )
+         return;
+ 
+-    QPixmap pixmap( width(), 10 );
+-
+-    // grabWindow() is broken in Qt4 (because QPixmap is 32bpp).
+-    // Work around this bug by using Xrender to grab the screenshot, since
+-    // XRenderComposite() will convert the pixmap format automatically.
+-#ifdef HAVE_XRENDER
+-    if ( pixmap.paintEngine()->hasFeature( QPaintEngine::PorterDuff ) )
+-    {
+-        Display *dpy = QX11Info::display();
+-        Window root = DefaultRootWindow( dpy );
+-        XRenderPictureAttributes attr;
+-        attr.subwindow_mode = IncludeInferiors;
+-        XRenderPictFormat *format = XRenderFindVisualFormat( dpy, DefaultVisual( dpy, 0 ) );
+-        Picture rootPict = XRenderCreatePicture( dpy, root, format, CPSubwindowMode, &attr );
+-        XRenderComposite( dpy, PictOpSrc, rootPict, None, pixmap.x11PictureHandle(), 0, m_currentY,
+-                          0, 0, 0, 0, pixmap.width(), pixmap.height() );
+-        XRenderFreePicture( dpy, rootPict );
+-    } else
+-#endif
+-        pixmap = QPixmap::grabWindow( QX11Info::appRootWindow(), 0, m_currentY,
+-                                      pixmap.width(), pixmap.height() );
+-
+-    QImage image = pixmap.toImage();
++    QImage image = QPixmap::grabWindow( QX11Info::appRootWindow(), 0, m_currentY, width(), 10 ).toImage();
+     Blitz::intensity( image, -0.4 );
+     Blitz::grayscale( image );
+ 
+@@ -133,7 +106,7 @@
+     painter.drawImage( 0, m_currentY, image );
+     painter.end();
+ 
+-    m_currentY += pixmap.height();
++    m_currentY += 10;
+     update( 0, 0, width(), m_currentY );
+ 
+     QTimer::singleShot( 1, this, SLOT( slotPaintEffect() ) );
+--- a/ksmserver/legacy.cpp
++++ b/ksmserver/legacy.cpp
+@@ -42,13 +42,14 @@
+ #include <QTimer>
+ 
+ #include <kconfig.h>
++#include <kconfiggroup.h>
++#include <kshell.h>
+ #include <kdebug.h>
+ #include <kwindowsystem.h>
+ 
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
+ #include <X11/Xatom.h>
+-#include <kconfiggroup.h>
+ 
+ /*
+ * Legacy session management
+@@ -265,7 +266,9 @@
+     int count = config->readEntry( "count",0 );
+     for ( int i = 1; i <= count; i++ ) {
+         QString n = QString::number(i);
+-        QStringList wmCommand = config->readEntry( QString("command")+n, QStringList(), sep );
++        QStringList wmCommand = (sep == ',') ?
++                config->readEntry( QString("command")+n, QStringList() ) :
++                KShell::splitArgs( config->readEntry( QString("command")+n, QString() ) ); // close enough(?)
+         startApplication( wmCommand,
+                         config->readEntry( QString("clientMachine")+n, QString() ),
+                         config->readEntry( QString("userId")+n, QString() ));
+--- a/ksmserver/server.cpp
++++ b/ksmserver/server.cpp
+@@ -825,7 +825,7 @@
+         // case up to KDE and Qt < 3.1
+         int i = 1;
+         while ( i <= count &&
+-                config.readPathListEntry( QString("discardCommand") + QString::number(i) ) != discardCommand )
++                config.readPathEntry( QString("discardCommand") + QString::number(i), QStringList() ) != discardCommand )
+             i++;
+         if ( i <= count )
+             executeCommand( discardCommand );
+@@ -841,7 +841,7 @@
+     KConfigGroup configSessionGroup(config, sessionGroup);
+     int count =  configSessionGroup.readEntry( "count", 0 );
+     for ( int i = 1; i <= count; i++ ) {
+-        QStringList discardCommand = configSessionGroup.readPathListEntry( QLatin1String("discardCommand") + QString::number(i) );
++        QStringList discardCommand = configSessionGroup.readPathEntry( QLatin1String("discardCommand") + QString::number(i), QStringList() );
+         if ( discardCommand.isEmpty())
+             continue;
+         // check that non of the new clients uses the exactly same
+--- a/ksmserver/server.h
++++ b/ksmserver/server.h
+@@ -33,10 +33,9 @@
+ #include <kapplication.h>
+ #include <kworkspace.h>
+ #include <QTimer>
+-#include <Qt3Support/Q3CString>
+ #include <QTime>
+ #include <QMap>
+-
++#include <Qt3Support/Q3CString>
+ #include "server2.h"
+ 
+ #define SESSION_PREVIOUS_LOGOUT "saved at previous logout"
+@@ -198,7 +197,6 @@
+     QString wm;
+     QString sessionGroup;
+     QString sessionName;
+-    Q3CString launcher;
+     QTimer protectionTimer;
+     QTimer restoreTimer;
+     QString xonCommand;
+--- a/ksmserver/CMakeLists.txt
++++ b/ksmserver/CMakeLists.txt
+@@ -41,7 +41,7 @@
+ 
+ kde4_add_kdeinit_executable( ksmserver ${ksmserver_KDEINIT_SRCS})
+ 
+-target_link_libraries(kdeinit_ksmserver plasma solidcontrol kworkspace ${KDE4_KDEUI_LIBS} ${BLITZ_LIBRARIES} ${QT_QT3SUPPORT_LIBRARY} ${X11_LIBRARIES} ${KDE4_KDE3SUPPORT_LIBRARY} ${X11_Xrender_LIB})
++target_link_libraries(kdeinit_ksmserver plasma solidcontrol kworkspace ${KDE4_KDEUI_LIBS} ${BLITZ_LIBRARIES} ${QT_QT3SUPPORT_LIBRARY} ${X11_LIBRARIES} ${KDE4_KDE3SUPPORT_LIBRARY})
+ 
+ install(TARGETS kdeinit_ksmserver  DESTINATION ${LIB_INSTALL_DIR})
+ 
+--- a/ConfigureChecks.cmake
++++ b/ConfigureChecks.cmake
+@@ -1,4 +1,5 @@
+ include(UnixAuth)
++include(CheckTypeSize)
+ 
+ macro_optional_find_package(XKB) # kxkb, kdm
+ 
+@@ -47,6 +48,9 @@
+ check_include_files(limits.h HAVE_LIMITS_H)
+ check_include_files(sys/time.h HAVE_SYS_TIME_H)     # ksmserver, ksplashml, sftp
+ check_include_files(stdint.h HAVE_STDINT_H)         # kcontrol/kfontinst
++check_include_files("sys/stat.h;sys/vfs.h" HAVE_SYS_VFS_H) # statvfs for plasma/solid
++check_include_files(sys/param.h HAVE_SYS_PARAM_H)
++check_include_files("sys/param.h;sys/mount.h" HAVE_SYS_MOUNT_H)
+ macro_bool_to_01(FONTCONFIG_FOUND HAVE_FONTCONFIG) # kcontrol/{fonts,kfontinst}
+ macro_bool_to_01(OPENGL_FOUND HAVE_OPENGL) # kwin
+ macro_bool_to_01(X11_XShm_FOUND HAVE_XSHM) # kwin, ksplash
+--- a/kcontrol/dateandtime/dtime.cpp
++++ b/kcontrol/dateandtime/dtime.cpp
+@@ -262,7 +262,7 @@
+ 
+ void Dtime::load()
+ {
+-  KConfig _config( "kcmclockrc", KConfig::CascadeConfig  );
++  KConfig _config( "kcmclockrc", KConfig::NoGlobals  );
+   KConfigGroup config(&_config, "NTP");
+   timeServerList->addItems(config.readEntry("servers",
+     i18n("Public Time Server (pool.ntp.org),\
+@@ -285,7 +285,7 @@
+ 
+ void Dtime::save()
+ {
+-  KConfig _config("kcmclockrc", KConfig::CascadeConfig);
++  KConfig _config("kcmclockrc", KConfig::NoGlobals);
+   KConfigGroup config(&_config, "NTP");
+ 
+   // Save the order, but don't duplicate!
+--- a/kcontrol/dateandtime/tzone.h
++++ b/kcontrol/dateandtime/tzone.h
+@@ -22,11 +22,11 @@
+ #ifndef tzone_included
+ #define tzone_included
+ 
+-#include <Qt3Support/Q3GroupBox>
+ //Added by qt3to4:
+ #include <QLabel>
+ #include <ktimezone.h>
+ #include <ktimezonewidget.h>
++#include <QGroupBox>
+ 
+ class QLabel;
+ 
+--- a/kcontrol/dateandtime/clock.desktop
++++ b/kcontrol/dateandtime/clock.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kde-clock.desktop
++Exec=kcmshell4 kde-clock.desktop
+ Icon=preferences-system-time
+ Type=Service
+ ServiceTypes=KCModule
+@@ -12,7 +12,7 @@
+ X-KDE-ParentApp=kcontrol
+ 
+ #FIXME should this be in system settings when we can get to it through the panel?
+-X-KDE-System-Settings-Parent-Category=date-and-time
++X-KDE-System-Settings-Parent-Category=computer-administration
+ 
+ Name=Date & Time
+ Name[af]=Datum & Tyd
+--- a/kcontrol/background/background.desktop
++++ b/kcontrol/background/background.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell background
++Exec=kcmshell4 background
+ Icon=preferences-desktop-wallpaper
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/background/bgsettings.cpp
++++ b/kcontrol/background/bgsettings.cpp
+@@ -141,7 +141,7 @@
+ 
+     const KConfigGroup group = m_pConfig->group("KDE Desktop Pattern");
+ 
+-    m_Pattern = m_kdmMode ? group.readEntry("File") : group.readPathEntry("File");
++    m_Pattern = m_kdmMode ? group.readEntry("File") : group.readPathEntry("File", QString());
+     m_Comment = group.readEntry("Comment");
+     if (m_Comment.isEmpty())
+        m_Comment = m_File.mid(m_File.lastIndexOf('/')+1);
+@@ -351,8 +351,8 @@
+         m_Command = group.readEntry("Command");
+         m_PreviewCommand = group.readEntry("PreviewCommand", m_Command);
+     } else {
+-        m_Executable = group.readPathEntry("Executable");
+-        m_Command = group.readPathEntry("Command");
++        m_Executable = group.readPathEntry("Executable", QString());
++        m_Command = group.readPathEntry("Command", QString());
+         m_PreviewCommand = group.readPathEntry("PreviewCommand", m_Command);
+     }
+     m_Refresh = group.readEntry("Refresh", 300);
+@@ -539,7 +539,7 @@
+         else
+             configname.sprintf("kdesktop-screen-%drc", screen_number);
+ 
+-        m_pConfig = KSharedConfig::openConfig(configname, KConfig::CascadeConfig);
++        m_pConfig = KSharedConfig::openConfig(configname, KConfig::NoGlobals);
+     } else {
+         m_pConfig = config;
+     }
+@@ -776,11 +776,11 @@
+     m_ColorA = cg.readEntry("Color1", defColorA);
+     m_ColorB = cg.readEntry("Color2", defColorB);
+ 
+-    QString s = m_kdmMode ? cg.readEntry("Pattern") : cg.readPathEntry("Pattern");
++    QString s = m_kdmMode ? cg.readEntry("Pattern") : cg.readPathEntry("Pattern", QString());
+     if (!s.isEmpty())
+         KBackgroundPattern::load(s);
+ 
+-    s = m_kdmMode ? cg.readEntry("Program") : cg.readPathEntry("Program");
++    s = m_kdmMode ? cg.readEntry("Program") : cg.readPathEntry("Program", QString());
+     if (!s.isEmpty())
+         KBackgroundProgram::load(s);
+ 
+@@ -811,7 +811,7 @@
+     m_ReverseBlending = cg.readEntry( "ReverseBlending", defReverseBlending );
+ 
+     // Multiple wallpaper config
+-    m_WallpaperList = cg.readPathListEntry("WallpaperList");
++    m_WallpaperList = cg.readPathEntry("WallpaperList", QStringList());
+ 
+     m_Interval = cg.readEntry("ChangeInterval", 60);
+     m_LastChange = cg.readEntry("LastChange", 0);
+@@ -833,7 +833,7 @@
+ 
+     // Wallpaper mode (NoWallpaper, div. tilings)
+     m_WallpaperMode = defWallpaperMode;
+-    m_Wallpaper = m_kdmMode ? cg.readEntry("Wallpaper") : cg.readPathEntry("Wallpaper");
++    m_Wallpaper = m_kdmMode ? cg.readEntry("Wallpaper") : cg.readPathEntry("Wallpaper", QString());
+     s = cg.readEntry("WallpaperMode", "invalid");
+     if (m_WMMap.contains(s)) {
+         int mode = m_WMMap[s];
+--- a/kcontrol/background/bgadvanced.cpp
++++ b/kcontrol/background/bgadvanced.cpp
+@@ -93,7 +93,7 @@
+ 
+    if (!_kdmMode)
+    {
+-      KConfig cfg(desktopConfigname( ), KConfig::CascadeConfig );
++      KConfig cfg(desktopConfigname( ), KConfig::NoGlobals );
+       KConfigGroup group = cfg.group("General");
+       if (!group.readEntry( "Enabled", true ))
+       {
+--- a/kcontrol/background/main.cpp
++++ b/kcontrol/background/main.cpp
+@@ -56,7 +56,7 @@
+ 	configname = "kdesktoprc";
+     else
+ 	configname.sprintf("kdesktop-screen-%drc", screen_number);
+-    m_pConfig = KSharedConfig::openConfig(configname, KConfig::CascadeConfig);
++    m_pConfig = KSharedConfig::openConfig(configname, KConfig::NoGlobals);
+ 
+     QVBoxLayout *layout = new QVBoxLayout(this);
+     m_base = new BGDialog(this, m_pConfig, false);
+--- a/kcontrol/background/bgrender.cpp
++++ b/kcontrol/background/bgrender.cpp
+@@ -1033,7 +1033,7 @@
+         else
+             configname.sprintf("kdesktop-screen-%drc", screen_number);
+ 
+-        m_pConfig = KSharedConfig::openConfig(configname, KConfig::CascadeConfig);
++        m_pConfig = KSharedConfig::openConfig(configname, KConfig::NoGlobals);
+     } else {
+         m_pConfig = config;
+     }
+--- a/kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp
++++ b/kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp
+@@ -40,6 +40,7 @@
+ #include <QTextStream>
+ #include <QComboBox>
+ #include <QProcess>
++#include <QPainter>
+ #include <kaboutdata.h>
+ #include <ktoolbar.h>
+ #include <kfiledialog.h>
+@@ -111,6 +112,8 @@
+         sh.setHeight(theirHeight);
+         if(sh.width()<sh.height())
+             sh.setWidth(sh.height());
++        else if(text().isEmpty())
++            sh.setWidth(theirHeight);
+         return sh;
+     }
+ 
+@@ -127,6 +130,14 @@
+         : KToolBar(parent)
+     {
+         theirHeight=qMax(theirHeight, height());
++        setMovable(false);
++        setFloatable(false);
++        setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
++    }
++
++    void addSeparator()
++    {
++        addWidget(new QLabel(" ", this));
+     }
+ 
+     void link(CToolBar *l)
+@@ -142,6 +153,14 @@
+         return sh;
+     }
+ 
++    void paintEvent(QPaintEvent *)
++    {
++        QColor col(palette().color(backgroundRole()));
++
++        col.setAlphaF(0.0);
++        QPainter(this).fillRect(rect(), col);
++    }
++
+     void resizeEvent(QResizeEvent *ev)
+     {
+         KToolBar::resizeEvent(ev);
+@@ -242,7 +261,6 @@
+     itsPreviewControl=new CPreviewSelectAction(itsPreviewWidget);
+ 
+     previewToolbar->addAction(itsPreviewControl);
+-    previewToolbar->setMovable(false);
+ 
+     previewLayout->setMargin(0);
+     previewLayout->setSpacing(KDialog::spacingHint());
+@@ -284,8 +302,6 @@
+     itsToolsMenu->setDelayed(false);
+     toolbar->addAction(settingsMenu);
+     toolbar->addAction(itsToolsMenu);
+-    toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+-    toolbar->setMovable(false);
+     if(Misc::root())
+         itsModeControl=NULL;
+     else
+--- a/kcontrol/kfontinst/kcmfontinst/FontList.cpp
++++ b/kcontrol/kfontinst/kcmfontinst/FontList.cpp
+@@ -60,6 +60,10 @@
+ // cached to disk.
+ #define KFI_SAVE_PIXMAPS
+ 
++#ifdef KFI_FONTLIST_DEBUG
++#include <kdebug.h>
++#endif
++
+ namespace KFI
+ {
+ 
+@@ -239,6 +243,40 @@
+     return rv;
+ }
+ 
++QString capitaliseFoundry(const QString &foundry)
++{
++    QString f(foundry.toLower());
++
++    if(f==QString::fromLatin1("ibm"))
++        return QString::fromLatin1("IBM");
++    else if(f==QString::fromLatin1("urw"))
++        return QString::fromLatin1("URW");
++    else if(f==QString::fromLatin1("itc"))
++        return QString::fromLatin1("ITC");
++    else if(f==QString::fromLatin1("nec"))
++        return QString::fromLatin1("NEC");
++    else if(f==QString::fromLatin1("b&h"))
++        return QString::fromLatin1("B&H");
++    else
++    {
++        QChar   *ch(f.data());
++        int     len(f.length());
++        bool    isSpace(true);
++
++        while(len--)
++        {
++            if (isSpace)
++                *ch=ch->toUpper();
++
++            isSpace=ch->isSpace();
++            ++ch;
++        }
++
++    }
++
++    return f;
++}
++
+ static void toggle(QString &file, bool enable)
+ {
+     QString newFile(enable
+@@ -383,22 +421,21 @@
+ 
+ CFontItem::CFontItem(CFontModelItem *p, const KFileItem &item, const QString &style)
+          : CFontModelItem(p),
+-           itsItem(item),
+            itsStyle(style),
+            itsPixmap(NULL)
+ {
+-    const KIO::UDSEntry &udsEntry(entry());
++    const KIO::UDSEntry &udsEntry(item.entry());
+ 
+-    updateStatus();
++    setUrl(item.url());
+     itsName=udsEntry.stringValue(KIO::UDSEntry::UDS_NAME);
+     itsFileName=udsEntry.stringValue((uint)UDS_EXTRA_FILE_NAME);
+     itsStyleInfo=udsEntry.numberValue((uint)UDS_EXTRA_FC_STYLE);
+     itsIndex=Misc::getIntQueryVal(KUrl(udsEntry.stringValue((uint)KIO::UDSEntry::UDS_URL)),
+                                   KFI_KIO_FACE, 0);
+     itsWritingSystems=udsEntry.numberValue((uint)UDS_EXTRA_WRITING_SYSTEMS);
+-    QString mime(mimetype());
+-
+-    itsBitmap="application/x-font-pcf"==mime || "application/x-font-bdf"==mime;
++    itsMimeType=item.mimetype();
++    itsBitmap="application/x-font-pcf"==itsMimeType || "application/x-font-bdf"==itsMimeType;
++    itsSize=item.size();
+ 
+     if(!Misc::root())
+         setIsSystem(isSysFolder(url().path().section('/', 1, 1)));
+@@ -421,9 +458,10 @@
+ #endif
+ }
+ 
+-void CFontItem::updateStatus()
++void CFontItem::setUrl(const KUrl &url)
+ {
+-    itsEnabled=!Misc::isHidden(url());
++    itsUrl=url;
++    itsEnabled=!Misc::isHidden(itsUrl);
+ 
+     if(!itsFiles.isEmpty()) // Then we changed state, so need to alter filename list...
+     {
+@@ -478,7 +516,7 @@
+                                       fEnd(itsFonts.end());
+ 
+     for(; fIt!=fEnd; ++fIt)
+-        if((*(*fIt)).item()==i)
++        if((*(*fIt)).url()==i.url())
+             return (*fIt);
+ 
+     return NULL;
+@@ -496,7 +534,7 @@
+ 
+         for(; fIt!=fEnd; ++fIt)
+             if(!(*fIt).foundry.isEmpty())
+-                foundries.insert((*fIt).foundry);
++                foundries.insert(capitaliseFoundry((*fIt).foundry));
+     }
+ }
+ 
+@@ -655,8 +693,8 @@
+             SLOT(newItems(const KFileItemList &)));
+     connect(itsLister, SIGNAL(deleteItems(const KFileItemList &)),
+             SLOT(deleteItems(const KFileItemList &)));
+-    connect(itsLister, SIGNAL(refreshItems(const KFileItemList &)),
+-            SLOT(refreshItems(const KFileItemList &)));
++    connect(itsLister, SIGNAL(renameItems(const RenameList &)),
++            SLOT(renameItems(const RenameList &)));
+     connect(itsLister, SIGNAL(percent(int)), SIGNAL(percent(int)));
+     connect(itsLister, SIGNAL(message(QString)), SIGNAL(status(QString)));
+ }
+@@ -915,8 +953,8 @@
+ #ifdef KFI_FONTLIST_DEBUG
+     kDebug() << "************** newItems " << items.count();
+ 
+-    for(KFileItemList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
+-        kDebug() << "               " << (int)(*it);
++//     for(KFileItemList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
++//         kDebug() << "               " << (int)(*it);
+ #endif
+ 
+     for(KFileItemList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
+@@ -938,35 +976,38 @@
+     itsFonts.clear();
+ }
+ 
+-void CFontList::refreshItems(const KFileItemList &items)
++void CFontList::renameItems(const RenameList &items)
+ {
+     emit layoutAboutToBeChanged();
+ 
+ #ifdef KFI_FONTLIST_DEBUG
+-    kDebug() << "************** refreshItems " << items.count();
++    kDebug() << "************** renameItems " << items.count();
+ 
+-    for(KFileItemList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
+-        kDebug() << "               " << (int)(*it);
++    for(RenameList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
++        kDebug() << "               " << (*it).from.prettyUrl();
+ #endif
+ 
+     QSet<CFamilyItem *> families;
+ 
+-    for(KFileItemList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
++    for(RenameList::const_iterator it(items.begin()), end(items.end()) ; it!=end ; ++it)
+     {
+-        CFontItem *font=findFont(*it);
++        CFontItem *font=findFont((*it).from);
+ 
+         if(font)
+         {
+-            font->updateStatus();
++            font->setUrl((*it).to);
++            itsFonts.insert((*it).to, font);
++            itsFonts.erase(itsFonts.find((*it).from));
+ #ifdef KFI_FONTLIST_DEBUG
+             kDebug() << "               Found font, status now:" << font->isEnabled()
+-                     << " url" << (*it)->url().prettyUrl();
++                     << " from:" << (*it).from.prettyUrl()
++                     << " to:" << (*it).to.prettyUrl();
+ #endif
+             families.insert(static_cast<CFamilyItem *>(font->parent()));
+         }
+ #ifdef KFI_FONTLIST_DEBUG
+         else
+-            kDebug() << "               Could not locate font :-( " << (int)(*it);
++            kDebug() << "               Could not locate font :-( " << (*it).from.prettyUrl();
+ #endif
+     }
+ 
+@@ -992,7 +1033,7 @@
+ 
+     for(; it!=end; ++it)
+     {
+-        CFontItem *font=findFont(*it);
++        CFontItem *font=findFont((*it).url());
+ 
+         if(font)
+         {
+@@ -1002,7 +1043,7 @@
+                 itsFamilies.removeAll(fam);
+             else
+                 fam->removeFont(font);
+-            itsFonts.remove(*it);
++            itsFonts.remove((*it).url());
+         }
+     }
+ 
+@@ -1011,7 +1052,7 @@
+ 
+ void CFontList::addItem(const KFileItem &item)
+ {
+-    CFontItem *font=findFont(item);
++    CFontItem *font=findFont(item.url());
+ 
+ #ifdef KFI_FONTLIST_DEBUG
+     kDebug() << "************** addItem " << item.url();
+@@ -1030,7 +1071,7 @@
+             font=new CFontItem(fam, item, style);
+ 
+             fam->addFont(font);
+-            itsFonts.insert(item, font);
++            itsFonts.insert(item.url(), font);
+         }
+ #ifdef KFI_FONTLIST_DEBUG
+         else
+@@ -1062,10 +1103,10 @@
+     return fam;
+ }
+ 
+-CFontItem * CFontList::findFont(const KFileItem &item)
++CFontItem * CFontList::findFont(const KUrl &url)
+ {
+-    return itsFonts.contains(item)
+-            ? itsFonts[item]
++    return itsFonts.contains(url)
++            ? itsFonts[url]
+             : NULL;
+ }
+ 
+@@ -1266,7 +1307,7 @@
+                                                              end(fnt->files().end());
+ 
+                     for(; it!=end && !fontMatch; ++it)
+-                        fontMatch=-1!=(*it).foundry.indexOf(itsFilterText, 0, Qt::CaseInsensitive);
++                        fontMatch=0==(*it).foundry.compare(itsFilterText, Qt::CaseInsensitive);
+                     break;
+                 }
+                 case CFontFilter::CRIT_FILENAME:
+--- a/kcontrol/kfontinst/kcmfontinst/JobRunner.cpp
++++ b/kcontrol/kfontinst/kcmfontinst/JobRunner.cpp
+@@ -59,6 +59,58 @@
+     return url;
+ }
+ 
++class CSkipDialog : public KDialog
++{
++    public:
++
++    enum Result
++    {
++        SKIP,
++        AUTO_SKIP,
++        CANCEL
++    };
++
++    CSkipDialog(QWidget *parent, bool multi, const QString &errorText)
++        : KDialog(parent),
++          itsResult(CANCEL)
++    {
++        setCaption(i18n( "Information"));
++        setButtons(multi ? Cancel|User1|User2 : Cancel );
++        setButtonText(User1, i18n("Skip"));
++        setButtonText(User2, i18n("AutoSkip"));
++        setMainWidget(new QLabel(errorText, this));
++        resize(sizeHint());
++    }
++
++    Result go()
++    {
++        itsResult=CANCEL;
++        exec();
++        return itsResult;
++    }
++
++    void slotButtonClicked(int button)
++    {
++        switch(button)
++        {
++            case User1:
++                itsResult=SKIP;
++                break;
++            case User2:
++                itsResult=AUTO_SKIP;
++                break;
++            default:
++                itsResult=CANCEL;
++        }
++
++        KDialog::accept();
++    }
++
++    private:
++
++    Result itsResult;
++};
++
+ class CPasswordDialog : public KPasswordDialog
+ {
+     public:
+@@ -324,7 +376,7 @@
+                 break;
+             case CMD_DISABLE:
+                 itsStatusLabel->setText(i18n("Disabling %1", (*itsIt).displayName()));
+-                job=KIO::rename(*itsIt, toggle(*itsIt, KIO::HideProgressInfo), KIO::HideProgressInfo);
++                job=KIO::rename(*itsIt, toggle(*itsIt, false), KIO::HideProgressInfo);
+                 break;
+             case CMD_MOVE:
+             {
+@@ -384,17 +436,17 @@
+             }
+             else
+             {
+-                KIO::SkipDialog dlg(this, true, job->errorString());
++                CSkipDialog dlg(this, true, job->errorString());
+ 
+-                switch(dlg.exec())
++                switch(dlg.go())
+                 {
+-                    case KIO::S_SKIP:
++                    case CSkipDialog::SKIP:
+                         cont=true;
+                         break;
+-                    case KIO::S_AUTO_SKIP:
++                    case CSkipDialog::AUTO_SKIP:
+                         cont=itsAutoSkip=true;
+                         break;
+-                    case KIO::S_CANCEL:
++                    case CSkipDialog::CANCEL:
+                         break;
+                 }
+             }
+--- a/kcontrol/kfontinst/kcmfontinst/FontFilter.cpp
++++ b/kcontrol/kfontinst/kcmfontinst/FontFilter.cpp
+@@ -57,7 +57,7 @@
+     itsPixmaps[CRIT_FAMILY]=SmallIcon("text");
+     itsPixmaps[CRIT_STYLE]=SmallIcon("format-text-bold");
+     itsPixmaps[CRIT_FOUNDRY]=SmallIcon("user");
+-    itsPixmaps[CRIT_FONTCONFIG]=SmallIcon("file-find");
++    itsPixmaps[CRIT_FONTCONFIG]=SmallIcon("edit-find");
+     itsPixmaps[CRIT_FILENAME]=SmallIcon("font-type1");
+     itsPixmaps[CRIT_LOCATION]=SmallIcon("folder");
+     itsPixmaps[CRIT_WS]=SmallIcon("pencil");
+@@ -122,7 +122,19 @@
+     QStringList list(foundries.toList());
+ 
+     list.sort();
+-    ((KSelectAction *)itsActions[CRIT_FOUNDRY])->setItems(list);
++
++    // Add foundries to menu - replacing '&' with '&&', as '&' is taken to be
++    // a shortcut!
++    QStringList::ConstIterator it(list.begin()),
++                               end(list.end());
++
++    for(; it!=end; ++it)
++    {
++        QString foundry(*it);
++
++        foundry.replace("&", "&&");
++        ((KSelectAction *)itsActions[CRIT_FOUNDRY])->addAction(foundry);
++    }
+ 
+     if(!prev.isEmpty())
+     {
+@@ -191,7 +203,7 @@
+             setReadOnly(true);
+             modifyPadding();
+             setCriteria(itsCurrentCriteria);
+-            setText(i18n("%1 (Writing System)", act->text()));
++            setText(act->text());
+             setClickMessage(text());
+         }
+     }
+@@ -280,14 +292,16 @@
+ {
+     QPixmap arrowmap(itsPixmaps[crit].width()+constArrowPad, itsPixmaps[crit].height());
+ 
+-    arrowmap.fill(palette().color(QPalette::Active, QPalette::Base));
++    QColor bgnd(palette().color(QPalette::Active, QPalette::Base));
++    bgnd.setAlphaF(0.0);
++    arrowmap.fill(bgnd);
+ 
+     QPainter p(&arrowmap);
+ 
+     p.drawPixmap(0, 0, itsPixmaps[crit]);
+     QStyleOption opt;
+     opt.state = QStyle::State_Enabled;
+-    opt.rect = QRect(arrowmap.width()-(constArrowPad+1), arrowmap.height()-constArrowPad, constArrowPad+1, constArrowPad);
++    opt.rect = QRect(arrowmap.width()-(constArrowPad+1), arrowmap.height()-(constArrowPad+1), constArrowPad, constArrowPad);
+     style()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &opt, &p, itsMenuButton);
+     p.end();
+ 
+--- a/kcontrol/kfontinst/kcmfontinst/FontLister.h
++++ b/kcontrol/kfontinst/kcmfontinst/FontLister.h
+@@ -34,6 +34,17 @@
+ namespace KFI
+ {
+ 
++struct Rename
++{
++    Rename(const KUrl &f, const KUrl &t)
++        : from(f), to(t) { }
++
++    KUrl from,
++         to;
++};
++
++typedef QList<Rename> RenameList;
++
+ class CFontLister : public QObject
+ {
+     Q_OBJECT
+@@ -49,6 +60,7 @@
+ 
+     public:
+ 
++
+     CFontLister(QObject *parent);
+ 
+     void scan(const KUrl &url=KUrl());
+@@ -59,7 +71,7 @@
+ 
+     void newItems(const KFileItemList &items);
+     void deleteItems(const KFileItemList &items);
+-    void refreshItems(const KFileItemList &items);
++    void renameItems(const RenameList &items);
+     void started();
+     void completed();
+     void percent(int);
+@@ -87,13 +99,13 @@
+ 
+     typedef QHash<KUrl, KFileItem> ItemCont;
+ 
+-    EListing      itsListing;
+-    ItemCont      itsItems;
+-    bool          itsAutoUpdate,
+-                  itsUpdateRequired;
+-    KIO::Job      *itsJob;
+-    qulonglong    itsJobSize;
+-    KFileItemList itsItemsToRefresh;
++    EListing   itsListing;
++    ItemCont   itsItems;
++    bool       itsAutoUpdate,
++               itsUpdateRequired;
++    KIO::Job   *itsJob;
++    qulonglong itsJobSize;
++    RenameList itsItemsToRename;
+ };
+ 
+ }
+--- a/kcontrol/kfontinst/kcmfontinst/FontList.h
++++ b/kcontrol/kfontinst/kcmfontinst/FontList.h
+@@ -125,25 +125,25 @@
+     void            listingCompleted();
+     void            newItems(const KFileItemList &items);
+     void            clearItems();
+-    void            deleteItems(const KFileItemList &);
+-    void            refreshItems(const KFileItemList &);
++    void            deleteItems(const KFileItemList &items);
++    void            renameItems(const RenameList &items);
+ 
+     private:
+ 
+     void            addItem(const KFileItem &item);
+     CFamilyItem *   findFamily(const QString &familyName, bool create=false);
+-    CFontItem *     findFont(const KFileItem &item);
++    CFontItem *     findFont(const KUrl &url);
+     void            touchThumbnails();
+ 
+     private:
+ 
+-    QList<CFamilyItem *>                  itsFamilies;
+-    QHash<const KFileItem, CFontItem *>   itsFonts;   // Use for quick searching...
+-    CFontLister                           *itsLister;
+-    bool                                  itsAllowSys,
+-                                          itsAllowUser,
+-                                          itsAllowDisabled;
+-    static int                            theirPreviewSize;
++    QList<CFamilyItem *>     itsFamilies;
++    QHash<KUrl, CFontItem *> itsFonts;   // Use for quick searching...
++    CFontLister              *itsLister;
++    bool                     itsAllowSys,
++                             itsAllowUser,
++                             itsAllowDisabled;
++    static int               theirPreviewSize;
+ };
+ 
+ class CFontModelItem
+@@ -225,13 +225,11 @@
+ 
+     void                              touchThumbnail();
+     const QString &                   name() const             { return itsName; }
+-    QString                           mimetype() const         { return itsItem.mimetype(); }
++    QString                           mimetype() const         { return itsMimeType; }
+     bool                              isEnabled() const        { return itsEnabled; }
+     bool                              isHidden() const         { return !itsEnabled; }
+-    void                              updateStatus();
+-    KUrl                              url() const              { return itsItem.url(); }
+-    KIO::UDSEntry                     entry() const            { return itsItem.entry(); }
+-    KFileItem                         item() const             { return itsItem; }
++    void                              setUrl(const KUrl &url);
++    KUrl                              url() const              { return itsUrl; }
+     bool                              isBitmap() const         { return itsBitmap; }
+     const QString &                   fileName() const         { return itsFileName; }
+     const QString &                   style() const            { return itsStyle; }
+@@ -242,15 +240,16 @@
+     void                              clearPixmap()            { itsPixmap=NULL; }
+     int                               rowNumber() const        { return (static_cast<CFamilyItem *>(parent()))->row(this); }
+     const CDisabledFonts::TFileList & files() const            { return itsFiles; }
+-    KIO::filesize_t                   size() const             { return !itsItem.isNull() ? itsItem.size() : 0; }
++    KIO::filesize_t                   size() const             { return itsSize; }
+     qulonglong                        writingSystems() const   { return itsWritingSystems; }
+ 
+     private:
+ 
+-    KFileItem                 itsItem;
++    KUrl                      itsUrl;
+     QString                   itsName,
+                               itsFileName,
+-                              itsStyle;
++                              itsStyle,
++                              itsMimeType;
+     int                       itsIndex;
+     QPixmap                   *itsPixmap;
+     quint32                   itsStyleInfo;
+@@ -258,6 +257,7 @@
+                               itsEnabled;
+     CDisabledFonts::TFileList itsFiles;
+     qulonglong                itsWritingSystems;
++    KIO::filesize_t           itsSize;
+ };
+ 
+ class CFontListSortFilterProxy : public QSortFilterProxyModel
+--- a/kcontrol/kfontinst/kcmfontinst/DuplicatesDialog.cpp
++++ b/kcontrol/kfontinst/kcmfontinst/DuplicatesDialog.cpp
+@@ -511,7 +511,7 @@
+     headers.append(i18n("Date"));
+     headers.append(i18n("Links To"));
+     setHeaderLabels(headers);
+-    headerItem()->setData(COL_TRASH, Qt::DecorationRole, QVariant(SmallIcon("edit-trash")));
++    headerItem()->setData(COL_TRASH, Qt::DecorationRole, QVariant(SmallIcon("user-trash")));
+     setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+     setSelectionMode(ExtendedSelection);
+     sortByColumn(COL_FILE, Qt::AscendingOrder);
+--- a/kcontrol/kfontinst/kcmfontinst/FontLister.cpp
++++ b/kcontrol/kfontinst/kcmfontinst/FontLister.cpp
+@@ -55,10 +55,10 @@
+ {
+     if(!busy())
+     {
+-        if(itsItemsToRefresh.count())
++        if(itsItemsToRename.count())
+         {
+-            emit refreshItems(itsItemsToRefresh);
+-            itsItemsToRefresh.clear();
++            emit renameItems(itsItemsToRename);
++            itsItemsToRename.clear();
+         }
+ 
+         QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+@@ -97,10 +97,10 @@
+         itsAutoUpdate=on;
+         if(on && itsUpdateRequired)
+         {
+-            if(itsItemsToRefresh.count())
++            if(itsItemsToRename.count())
+             {
+-                emit refreshItems(itsItemsToRefresh);
+-                itsItemsToRefresh.clear();
++                emit renameItems(itsItemsToRename);
++                itsItemsToRename.clear();
+             }
+             itsUpdateRequired=false;
+             scan();
+@@ -110,13 +110,17 @@
+ 
+ void CFontLister::fileRenamed(const QString &from, const QString &to)
+ {
+-    KUrl          fromU(from);
+-    KFileItemList refresh;
++    KUrl       fromU(from);
++    RenameList rename;
+ 
+     if(KFI_KIO_FONTS_PROTOCOL==fromU.protocol())
+     {
+         ItemCont::Iterator it(itsItems.find(fromU));
+ 
++#ifdef KFI_FONTLISTER_DEBUG
++        kDebug() << "fileRenamed from: " << from << " to: " << to;
++#endif
++
+         if(it!=itsItems.end())
+         {
+             KFileItem item(*it);
+@@ -124,6 +128,7 @@
+ 
+             item.setUrl(toU);
+             itsItems.erase(it);
++
+             if(itsItems.contains(toU))
+             {
+                 KFileItemList items;
+@@ -134,18 +139,22 @@
+             else
+             {
+                 itsItems[toU]=item;
+-                refresh.append(item);
++                rename.append(Rename(fromU, toU));
+             }
+         }
++#ifdef KFI_FONTLISTER_DEBUG
++        else
++            kDebug() << "Item not found???";
++#endif
+     }
+ 
+-    if(refresh.count())
++    if(rename.count())
+         if(itsAutoUpdate)
+-            emit refreshItems(refresh);
++            emit renameItems(rename);
+         else
+         {
+             itsUpdateRequired=true;
+-            itsItemsToRefresh+=refresh;
++            itsItemsToRename+=rename;
+         }
+ }
+ 
+@@ -273,14 +282,14 @@
+                 KFileItem item(*it, url);
+ 
+ #ifdef KFI_FONTLISTER_DEBUG
+-                kDebug() << "New item:" << item->url().prettyUrl();
++                kDebug() << "New item:" << item.url().prettyUrl();
+ #endif
+                 itsItems[url]=item;
+                 newFonts.append(item);
+             }
+             itsItems[url].mark();
+ #ifdef KFI_FONTLISTER_DEBUG
+-            kDebug() << "Marking:" << itsItems[url]->url().prettyUrl();
++            kDebug() << "Marking:" << itsItems[url].url().prettyUrl() << " [" << url << ']';
+ #endif
+         }
+     }
+--- a/kcontrol/kfontinst/kcmfontinst/fontinst.desktop
++++ b/kcontrol/kfontinst/kcmfontinst/fontinst.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell fontinst
++Exec=kcmshell4 fontinst
+ Icon=preferences-desktop-font-installer
+ Type=Service
+ ServiceTypes=KCModule
+@@ -80,11 +80,12 @@
+ Comment[bg]=Инсталиране и преглед на шрифтове
+ Comment[de]=Schriftarten installieren, verwalten und betrachten
+ Comment[el]=Εγκατάσταση, διαχείριση και προεπισκόπηση γραμματοσειρών
++Comment[et]=Fontide haldamine, paigaldamine ja eelvaatlus
+ Comment[ga]=Suiteáil, bainisteoireacht, agus réamhamharc na gclónna
+ Comment[it]=Installa, gestisce e mostra anteprime dei caratteri
+ Comment[ja]=フォントのインストール、管理とプレビュー
+ Comment[kk]=Қаріптерді орнату, басқару және қарау
+-Comment[km]=ដំឡើង, គ្រប់គ្រង, និង​មើល​ពុម្ពអក្សរ​ជា​មុន
++Comment[km]=ដំឡើង គ្រប់គ្រង និង​មើល​ពុម្ពអក្សរ​ជា​មុន
+ Comment[ko]=글꼴 설치, 미리보기, 관리
+ Comment[nb]=Installer, styr og forhåndsvis skrifttyper
+ Comment[nds]=Schriftoorden installeren, plegen un ankieken
+@@ -105,12 +106,13 @@
+ Keywords[de]=Schrift,Fonts,Schriftarten,Installation,TrueType,Type1,Speedo,Bitmapschriften
+ Keywords[el]=γραμματοσειρά,γραμματοσειρές,εγκαταστάτης,εγκατάσταση,truetype,type1,bitmap
+ Keywords[es]=tipo de letra,tipos de letra,instalador,truetype,type1,mapa de bits
++Keywords[et]=font,fondid,paigaldaja,truetype,type1,bitmap
+ Keywords[fa]=قلم، قلمها، نصب‌کننده، قلم حقیقی، نوع۱، نگاشت بیت
+ Keywords[ga]=cló,clónna,clófhoirne,suiteálaí,truetype,type1,mapa giotán,giotánmhapach
+ Keywords[he]=גופן,גופנים,מתקין,התקנה,מפת סיביות,font,fonts,installer,truetype,type1,bitmap
+ Keywords[it]=font,caratteri,installatore,truetype,type1,bitmap,tipi di carattere
+ Keywords[ja]=フォント,インストーラ,truetype,type1,bitmap,ビットマップ
+-Keywords[km]=ពុម្ព​អក្សរ,ពុម្ព​អក្សរ,កម្មវិធី​ដំឡើង,truetype,ប្រភេទ ១,រូបភាព
++Keywords[km]=ពុម្ព​អក្សរ ពុម្ព​អក្សរ កម្មវិធី​ដំឡើង truetype ប្រភេទ ១ រូបភាព
+ Keywords[ko]=글꼴,트루타입,타입 1,비트맵,type1,bitmap
+ Keywords[nb]=skrift,skrifter,skrifttype,skrifttyper,installer,truetype,type1,bitmap
+ Keywords[nds]=Schriftoort,Schriftoorden,Installeren,TrueType,Type1,Bitmap
+--- a/kcontrol/kfontinst/viewpart/kfontviewpart.desktop
++++ b/kcontrol/kfontinst/viewpart/kfontviewpart.desktop
+@@ -15,7 +15,7 @@
+ Name[el]=Προβολέας γραμματοσειρών
+ Name[eo]=Tiparorigardilo
+ Name[es]=Visor del tipo de letra
+-Name[et]=Fontide vaataja
++Name[et]=Fontide näitaja
+ Name[eu]=Letra-tipo ikustailea
+ Name[fa]=مشاهده‌گر قلم
+ Name[fi]=Kirjasinten näytin
+--- a/kcontrol/kfontinst/kio/KioFonts.h
++++ b/kcontrol/kfontinst/kio/KioFonts.h
+@@ -97,7 +97,7 @@
+     struct TFolder
+     {
+         TFolder() : disabled(NULL) { }
+-        void  setLocation(const QString &l, const QString &d, bool sys);
++        void  setLocation(const QString &l, bool sys);
+ 
+         QString        location;
+         CDirList       modified;
+--- a/kcontrol/kfontinst/kio/SuProc.cpp
++++ b/kcontrol/kfontinst/kio/SuProc.cpp
+@@ -24,6 +24,9 @@
+ #include "KfiConstants.h"
+ #include <QFile>
+ #include <kshell.h>
++#include <KStandardDirs>
++#include <SuProcess>
++#include <kdebug.h>
+ #include <unistd.h>
+ #include <config-workspace.h>
+ 
+@@ -31,22 +34,31 @@
+ {
+ 
+ CSuProc::CSuProc(QByteArray &sock, QString &passwd)
+-       : itsProc(KFI_SYS_USER),
+-         itsPasswd(passwd)
++       : itsPasswd(passwd)
+ {
+-    QByteArray cmd(KDE_BINDIR"/kio_fonts_helper");
++    QString exe(KStandardDirs::findExe(QLatin1String("kio_fonts_helper"), KStandardDirs::installPath("libexec")));
+ 
+-    cmd+=' ';
+-    cmd+=QFile::encodeName(KShell::quoteArg(sock));
+-    cmd+=' ';
+-    cmd+=QString().setNum(getuid()).toLatin1();
+-    itsProc.setCommand(cmd);
++    if(exe.isEmpty())
++        kError(7000) << "Could not locate kio_fonts_helper";
++    else
++    {
++        itsCmd=QByteArray(QFile::encodeName(KShell::quoteArg(exe)));
++
++        itsCmd+=' ';
++        itsCmd+=QFile::encodeName(KShell::quoteArg(sock));
++        itsCmd+=' ';
++        itsCmd+=QString().setNum(getuid()).toLatin1();
++    }
+ }
+ 
+ void CSuProc::run()
+ {
+-    itsProc.exec(itsPasswd.toLocal8Bit());
++    if(!itsCmd.isEmpty())
++    {
++        KDESu::SuProcess proc(KFI_SYS_USER);
++        proc.setCommand(itsCmd);
++        proc.exec(itsPasswd.toLocal8Bit());
++    }
+ }
+ 
+ }
+-
+--- a/kcontrol/kfontinst/kio/SuProc.h
++++ b/kcontrol/kfontinst/kio/SuProc.h
+@@ -23,13 +23,11 @@
+  * Boston, MA 02110-1301, USA.
+  */
+ 
+-#include <kdesu/su.h>
+ #include <QThread>
++#include <QByteArray>
+ 
+ class QString;
+ 
+-using namespace KDESu;
+-
+ namespace KFI
+ {
+ 
+@@ -48,8 +46,8 @@
+ 
+     private:
+ 
+-    SuProcess itsProc;
+-    QString   &itsPasswd;
++    QString    &itsPasswd;
++    QByteArray itsCmd;
+ };
+ 
+ }
+--- a/kcontrol/kfontinst/kio/KioFonts.cpp
++++ b/kcontrol/kfontinst/kio/KioFonts.cpp
+@@ -830,7 +830,7 @@
+             dir=defaultDir;
+         }
+         mainFolder=FOLDER_USER;
+-        itsFolders[FOLDER_USER].setLocation(dir, dir, false);
++        itsFolders[FOLDER_USER].setLocation(dir, false);
+     }
+ 
+     QString sysDefault("/usr/local/share/fonts/"),
+@@ -850,7 +850,7 @@
+         sysDir=sysDefault;
+     }
+ 
+-    itsFolders[FOLDER_SYS].setLocation(sysDir, KFI_ROOT_CFG_DIR, true);
++    itsFolders[FOLDER_SYS].setLocation(sysDir, true);
+ 
+     //
+     // Ensure exists
+@@ -2760,7 +2760,8 @@
+             // defoma (DEbian FOnt MAnanager) installs sym links into /var/lib/defoma/fontconfig.d, but also
+             // places this folder into fontconfigs search path. Leading to duplicate font files. Therefore, just
+             // ignore defoma's sym links...
+-            static const char * constDefomaLocation="/var/lib/defoma/fontconfig.d";
++            // -> Can't just ignore these, as if a font is disabled fontconfig will still list it, as it sees the symlink
++            //static const char * constDefomaLocation="/var/lib/defoma/fontconfig.d";
+ 
+             QString home(Misc::dirSyntax(QDir::homePath()));
+ 
+@@ -2769,7 +2770,7 @@
+                 EFolder folder=FOLDER_SYS;
+                 QString fileName(Misc::fileSyntax(FC::getFcString(itsFontList->fonts[i], FC_FILE)));
+ 
+-                if(!fileName.isEmpty() && 0!=fileName.indexOf(constDefomaLocation))
++                if(!fileName.isEmpty()) // && 0!=fileName.indexOf(constDefomaLocation))
+                 {
+                     QString name,
+                             foundry(FC::getFcString(itsFontList->fonts[i], FC_FOUNDRY));
+@@ -3406,11 +3407,11 @@
+             : DEFAULT_TIMEOUT;
+ }
+ 
+-void CKioFonts::TFolder::setLocation(const QString &l, const QString &d, bool sys)
++void CKioFonts::TFolder::setLocation(const QString &l, bool sys)
+ {
+     location=l;
+     delete disabled;
+-    disabled=new CDisabledFonts(d.isEmpty() ? l : d, sys);
++    disabled=new CDisabledFonts(sys);
+ }
+ 
+ }
+--- a/kcontrol/kfontinst/kio/CMakeLists.txt
++++ b/kcontrol/kfontinst/kio/CMakeLists.txt
+@@ -11,6 +11,6 @@
+ set(kio_fonts_helper_SRCS Helper.cpp Socket.cpp ${libkxftconfig_SRCS})
+ kde4_add_executable(kio_fonts_helper ${kio_fonts_helper_SRCS} )
+ target_link_libraries(kio_fonts_helper ${QT_QTCORE_LIBRARY} ${QT_QTNETWORK_LIBRARY} kfontinst )
+-install(TARGETS kio_fonts_helper DESTINATION ${BIN_INSTALL_DIR} )
++install(TARGETS kio_fonts_helper DESTINATION ${LIBEXEC_INSTALL_DIR} )
+ 
+ kde4_install_icons( ${ICON_INSTALL_DIR}  )
+--- a/kcontrol/kfontinst/apps/Viewer.cpp
++++ b/kcontrol/kfontinst/apps/Viewer.cpp
+@@ -25,7 +25,8 @@
+ #include <kcmdlineargs.h>
+ #include <kaboutdata.h>
+ #include <kapplication.h>
+-#include <klibloader.h>
++#include <kpluginloader.h>
++#include <kpluginfactory.h>
+ #include <klocale.h>
+ #include <kglobal.h>
+ #include <kfiledialog.h>
+@@ -42,7 +43,7 @@
+ 
+ CViewer::CViewer()
+ {
+-    KPluginFactory *factory=KLibLoader::self()->factory("libkfontviewpart");
++    KPluginFactory *factory=KPluginLoader("libkfontviewpart").factory();
+ 
+     if(factory)
+     {
+--- a/kcontrol/kfontinst/apps/kfontview.desktop
++++ b/kcontrol/kfontinst/apps/kfontview.desktop
+@@ -35,7 +35,7 @@
+ GenericName[el]=Προβολέας γραμματοσειρών
+ GenericName[eo]=Tipara rigardilo
+ GenericName[es]=Visor del tipo de letra
+-GenericName[et]=Fontide vaataja
++GenericName[et]=Fontide näitaja
+ GenericName[eu]=Letra-tipoen ikusgailua
+ GenericName[fa]=مشاهده‌گر قلم
+ GenericName[fi]=Kirjasinten näytin
+--- a/kcontrol/kfontinst/apps/Printer.cpp
++++ b/kcontrol/kfontinst/apps/Printer.cpp
+@@ -27,7 +27,8 @@
+ #include <QFontDatabase>
+ #include <QWidget>
+ #include <QFile>
+-#include <kprinter.h>
++#include <QPrinter>
++#include <QPrintDialog>
+ #include <kcmdlineargs.h>
+ #include <kaboutdata.h>
+ #include <kapplication.h>
+@@ -88,11 +89,12 @@
+             appFont[(*it).family]=-1;
+     }
+ #endif
+-    KPrinter printer;
++    QPrinter     printer;
++    QPrintDialog dialog(&printer, parent);
+ 
+-    printer.setFullPage(true);
++    dialog.setWindowTitle(i18n("Print"));
+ 
+-    if(printer.setup(parent))
++    if(dialog.exec())
+     {
+         QPainter   painter;
+         QFont      sans("sans", 12, QFont::Bold);
+--- a/kcontrol/kfontinst/apps/installfont.desktop
++++ b/kcontrol/kfontinst/apps/installfont.desktop
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ ServiceTypes=application/x-font-ttf,application/x-font-type1,application/x-font-bdf,application/x-font-pcf,application/x-font-otf,application/x-font-afm,fonts/package
+ Actions=installFont;
++Type=Service
+ 
+ [Desktop Action installFont]
+ Name=Install...
+@@ -9,6 +10,7 @@
+ Name[bg]=Инсталиране...
+ Name[de]=Installieren ...
+ Name[el]=Εγκατάσταση...
++Name[et]=Paigalda...
+ Name[ga]=Suiteáil...
+ Name[it]=Installa...
+ Name[ja]=インストール...
+--- a/kcontrol/kfontinst/apps/CMakeLists.txt
++++ b/kcontrol/kfontinst/apps/CMakeLists.txt
+@@ -17,7 +17,7 @@
+ set_target_properties(kfontview_bin PROPERTIES OUTPUT_NAME kfontview)
+ 
+ target_link_libraries(kfontinst_bin ${KDE4_KIO_LIBS} ${KDE4_KDESU_LIBS} kfontinst )
+-target_link_libraries(kfontprint_bin ${KDE4_KDEPRINT_LIBS} kfontinstui kfontinst )
++target_link_libraries(kfontprint_bin kfontinstui kfontinst )
+ target_link_libraries(kfontview_bin ${KDE4_KPARTS_LIBS} kfontinstui kfontinst )
+ 
+ install(TARGETS kfontinst_bin DESTINATION ${BIN_INSTALL_DIR} )
+@@ -26,6 +26,5 @@
+ install(FILES kfontviewui.rc DESTINATION ${DATA_INSTALL_DIR}/kfontview )
+ install(FILES kfontview.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )
+ install(FILES installfont.desktop DESTINATION ${DATA_INSTALL_DIR}/konqueror/servicemenus )
+-install(FILES installfont.desktop DESTINATION ${DATA_INSTALL_DIR}/dolphin/servicemenus )
+ 
+ kde4_install_icons( ${ICON_INSTALL_DIR} )
+--- a/kcontrol/kfontinst/thumbnail/fontthumbnail.desktop
++++ b/kcontrol/kfontinst/thumbnail/fontthumbnail.desktop
+@@ -34,7 +34,7 @@
+ Name[kk]=Қаріп файлдары
+ Name[km]=ឯកសារ​ពុម្ពអក្សរ
+ Name[ko]=글꼴 파일
+-Name[lt]=Šriftų bylos
++Name[lt]=Šriftų failAI
+ Name[lv]=Fontu faili
+ Name[mk]=Датотеки со фонтови
+ Name[ms]=Fail Fon
+--- a/kcontrol/kfontinst/lib/DisabledFonts.cpp
++++ b/kcontrol/kfontinst/lib/DisabledFonts.cpp
+@@ -33,6 +33,7 @@
+ #include <klockfile.h>
+ #include <ksavefile.h>
+ #include <klocale.h>
++#include <kstandarddirs.h>
+ #include <fontconfig/fontconfig.h>
+ #include <stdio.h>
+ 
+@@ -185,51 +186,30 @@
+                     ((qulonglong)1)<<theirLanguageForWritingSystem[i].ws;
+ }
+ 
+-CDisabledFonts::CDisabledFonts(const QString &path, bool sys)
++CDisabledFonts::CDisabledFonts(bool sys)
+               : itsTimeStamp(0),
+                 itsModified(false),
+                 itsMods(0)
+ {
+-    QString p;
++    QString path;
+ 
+     createWritingSystemMap();
+ 
+-    if(path.isEmpty())
++    if(Misc::root() || sys)
++        path=KFI_ROOT_CFG_DIR;
++    else
+     {
+-        if(Misc::root() || sys)
+-            p=KFI_ROOT_CFG_DIR;
+-        else
+-        {
+-            FcStrList *list=FcConfigGetFontDirs(FcInitLoadConfig());
+-            FcChar8   *dir;
+-            QString   home(QDir::homePath()),
+-                      defaultDir(home+"/.fonts");
+-
+-            while((dir=FcStrListNext(list)))
+-            {
+-                QString d((const char *)dir);
+-
+-                if(0==d.indexOf(home))
+-                    if(d==defaultDir)
+-                    {
+-                        p=defaultDir;
+-                        break;
+-                    }
+-                    else if(p.isEmpty())
+-                        p=d;
+-            }
++        path=KGlobal::dirs()->localxdgconfdir();
+ 
+-            if(p.isEmpty())
+-                p=defaultDir;
+-        }
++        if(!Misc::dExists(path))
++            Misc::createDir(path);
+     }
+-    else
+-        p=path;
+ 
+-    itsFileName=p+'/'+FILE_NAME".xml";
++    itsFileName=path+'/'+FILE_NAME".xml";
+ 
+     itsModifiable=Misc::fWritable(itsFileName) ||
+                   (!Misc::fExists(itsFileName) && Misc::dWritable(Misc::getDir(itsFileName)));
++
+     load();
+     if(itsModified)
+         save();
+--- a/kcontrol/kfontinst/lib/DisabledFonts.h
++++ b/kcontrol/kfontinst/lib/DisabledFonts.h
+@@ -96,7 +96,7 @@
+         void     add(const TFont &t) const;
+     };
+ 
+-    explicit CDisabledFonts(const QString &path=QString(), bool sys=false);
++    explicit CDisabledFonts(bool sys=false);
+     ~CDisabledFonts()          { save(); }
+ 
+     static const LangWritingSystemMap * languageForWritingSystemMap() { return theirLanguageForWritingSystem; }
+--- a/kcontrol/screensaver/advanceddialogimpl.ui
++++ b/kcontrol/screensaver/advanceddialogimpl.ui
+@@ -6,7 +6,7 @@
+     <x>0</x>
+     <y>0</y>
+     <width>403</width>
+-    <height>495</height>
++    <height>311</height>
+    </rect>
+   </property>
+   <layout class="QVBoxLayout" >
+@@ -16,18 +16,6 @@
+       <string>Screen Corner Actions</string>
+      </property>
+      <layout class="QGridLayout" >
+-      <property name="leftMargin" >
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin" >
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin" >
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin" >
+-       <number>0</number>
+-      </property>
+       <item rowspan="2" row="3" column="0" colspan="2" >
+        <widget class="QLabel" name="qlMonitorLabel" >
+         <property name="text" >
+@@ -299,15 +287,15 @@
+         <item>
+          <spacer>
+           <property name="orientation" >
+-           <enum>Qt::Vertical</enum>
++           <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType" >
+-           <enum>QSizePolicy::Expanding</enum>
++           <enum>QSizePolicy::MinimumExpanding</enum>
+           </property>
+           <property name="sizeHint" >
+            <size>
+-            <width>21</width>
+-            <height>20</height>
++            <width>10</width>
++            <height>10</height>
+            </size>
+           </property>
+          </spacer>
+@@ -325,15 +313,15 @@
+         <item>
+          <spacer>
+           <property name="orientation" >
+-           <enum>Qt::Vertical</enum>
++           <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType" >
+-           <enum>QSizePolicy::Expanding</enum>
++           <enum>QSizePolicy::MinimumExpanding</enum>
+           </property>
+           <property name="sizeHint" >
+            <size>
+-            <width>31</width>
+-            <height>20</height>
++            <width>10</width>
++            <height>10</height>
+            </size>
+           </property>
+          </spacer>
+@@ -351,7 +339,7 @@
+         <property name="sizeHint" >
+          <size>
+           <width>20</width>
+-          <height>20</height>
++          <height>10</height>
+          </size>
+         </property>
+        </spacer>
+@@ -367,7 +355,7 @@
+         <property name="sizeHint" >
+          <size>
+           <width>20</width>
+-          <height>20</height>
++          <height>10</height>
+          </size>
+         </property>
+        </spacer>
+@@ -414,7 +402,7 @@
+      <property name="sizeHint" >
+       <size>
+        <width>20</width>
+-       <height>40</height>
++       <height>5</height>
+       </size>
+      </property>
+     </spacer>
+--- a/kcontrol/screensaver/saverconfig.cpp
++++ b/kcontrol/screensaver/saverconfig.cpp
+@@ -15,7 +15,7 @@
+     if( !config.tryExec())
+       return false;
+ #endif
+-    mExec = group.readPathEntry("Exec");
++    mExec = group.readPathEntry("Exec", QString());
+     mName = group.readEntry("Name");
+     QString categoryName = group.readEntry("X-KDE-Category");
+     if(categoryName.isEmpty())
+@@ -26,12 +26,12 @@
+ 
+     if (config.hasActionGroup("Setup"))
+     {
+-      mSetup = config.actionGroup("Setup").readPathEntry("Exec");
++      mSetup = config.actionGroup("Setup").readPathEntry("Exec", QString());
+     }
+ 
+     if (config.hasActionGroup("InWindow"))
+     {
+-      mSaver = config.actionGroup("InWindow").readPathEntry("Exec");
++      mSaver = config.actionGroup("InWindow").readPathEntry("Exec", QString());
+     }
+ 
+     int indx = file.lastIndexOf('/');
+--- a/kcontrol/screensaver/screensaver.desktop
++++ b/kcontrol/screensaver/screensaver.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell screensaver
++Exec=kcmshell4 screensaver
+ Icon=preferences-desktop-wallpaper
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/screensaver/scrnsave.cpp
++++ b/kcontrol/screensaver/scrnsave.cpp
+@@ -19,7 +19,6 @@
+ 
+ #include <kservicetypetrader.h>
+ #include <kstandarddirs.h>
+-#include <Qt3Support/Q3ButtonGroup>
+ #include <QCheckBox>
+ #include <Qt3Support/Q3Header>
+ #include <QLabel>
+@@ -121,23 +120,16 @@
+ 
+     QBoxLayout *topLayout = new QHBoxLayout(this);
+     topLayout->setSpacing(KDialog::spacingHint());
+-    topLayout->setMargin(0);
+ 
+     // left column
+     QVBoxLayout *leftColumnLayout = new QVBoxLayout( );
+     topLayout->addItem( leftColumnLayout );
+     leftColumnLayout->setSpacing( KDialog::spacingHint() );
+-    QBoxLayout *vLayout = new QVBoxLayout();
+-    leftColumnLayout->addItem( vLayout );
+-    vLayout->setSpacing( KDialog::spacingHint() );
+-
+-    mSaverGroup = new Q3GroupBox(i18n("Screen Saver"), this );
+-    mSaverGroup->setColumnLayout( 0, Qt::Horizontal );
+-    vLayout->addWidget(mSaverGroup);
+-    vLayout->setStretchFactor( mSaverGroup, 10 );
+-    QBoxLayout *groupLayout = new QVBoxLayout();
+-    mSaverGroup->layout()->addItem( groupLayout );
+-    groupLayout->setSpacing( KDialog::spacingHint() );
++
++    mSaverGroup = new QGroupBox(i18n("Screen Saver"), this );
++    QVBoxLayout *groupLayout = new QVBoxLayout( mSaverGroup );
++    leftColumnLayout->addWidget(mSaverGroup);
++    leftColumnLayout->setStretchFactor( mSaverGroup, 10 );
+ 
+     mSaverListView = new Q3ListView( mSaverGroup );
+     mSaverListView->setMinimumHeight( 120 );
+@@ -150,8 +142,7 @@
+     mSaverListView->setWhatsThis( i18n("Select the screen saver to use.") );
+ 
+     QBoxLayout* hlay = new QHBoxLayout();
+-    groupLayout->addItem(hlay);
+-    hlay->setSpacing(KDialog::spacingHint());
++    groupLayout->addLayout(hlay);
+     mSetupBt = new QPushButton( i18n("&Setup..."), mSaverGroup );
+     connect( mSetupBt, SIGNAL( clicked() ), SLOT( slotSetup() ) );
+     mSetupBt->setEnabled(false);
+@@ -164,12 +155,9 @@
+     hlay->addWidget( mTestBt );
+     mTestBt->setWhatsThis( i18n("Show a full screen preview of the screen saver.") );
+ 
+-    mSettingsGroup = new Q3GroupBox( i18n("Settings"), this );
+-    mSettingsGroup->setColumnLayout( 0, Qt::Vertical );
++    mSettingsGroup = new QGroupBox( i18n("Settings"), this );
++    groupLayout = new QVBoxLayout( mSettingsGroup );
+     leftColumnLayout->addWidget( mSettingsGroup );
+-    groupLayout = new QVBoxLayout();
+-    mSettingsGroup->layout()->addItem( groupLayout );
+-    groupLayout->setSpacing( KDialog::spacingHint() );
+ 
+     mEnabledCheckBox = new QCheckBox(i18n(
+         "Start a&utomatically"), mSettingsGroup);
+@@ -441,6 +429,7 @@
+     slotTimeoutChanged( 5 );
+     slotLockTimeoutChanged( 60 );
+     slotLock( false );
++    mEnabledCheckBox->setChecked(false);
+ 
+     updateValues();
+ 
+--- a/kcontrol/screensaver/scrnsave.h
++++ b/kcontrol/screensaver/scrnsave.h
+@@ -93,8 +93,8 @@
+     KService::List mSaverServices;
+     SaverList   mSaverList;
+     QTimer      *mLoadTimer;
+-    Q3GroupBox   *mSaverGroup;
+-    Q3GroupBox   *mSettingsGroup;
++    QGroupBox   *mSaverGroup;
++    QGroupBox   *mSettingsGroup;
+ 
+     int         mSelected;
+     int         mPrevSelected;
+--- a/kcontrol/smartcard/smartcard.desktop
++++ b/kcontrol/smartcard/smartcard.desktop
+@@ -3,7 +3,7 @@
+ Icon=preferences-desktop-user-smartcard
+ Type=Service
+ ServiceTypes=KCModule,KCModuleInit
+-Exec=kcmshell smartcard
++Exec=kcmshell4 smartcard
+ DocPath=kcontrol/smartcard.html
+ 
+ X-KDE-Library=kcm_smartcard
+@@ -153,7 +153,7 @@
+ Keywords[is]=Snjallkort,PKCS,SSL,reader,smart,card,snjall,kort
+ Keywords[it]=smartcard,PKCS,SSL,lettore
+ Keywords[ja]=スマートカード,PKCS,SSL,リーダー,スマート,カード
+-Keywords[km]=Smartcard,PKCS SSL,កម្មវិធី​​អាន,smart,កាត​
++Keywords[km]=Smartcard PKCS SSL កម្មវិធី​​អាន smart កាត​
+ Keywords[ko]=스마트카드,PKCS,SSL,리더,스마트,카드
+ Keywords[lt]=Smartcard,PKCS,SSL,reader,smart,card, gudri kortelė,skaitytuvas,gudri,kortelė
+ Keywords[mk]=Smartcard,PKCS,SSL,reader,smart,card,паметна картичка,читач,паметна,картичка
+--- a/kcontrol/krdb/krdb.cpp
++++ b/kcontrol/krdb/krdb.cpp
+@@ -435,7 +435,7 @@
+   bool exportQtSettings  = flags & KRdbExportQtSettings;
+   bool exportXftSettings = flags & KRdbExportXftSettings;
+ 
+-  KConfig _kglobals( "kdeglobals", KConfig::CascadeConfig  );
++  KConfig _kglobals( "kdeglobals", KConfig::NoGlobals  );
+   KConfigGroup kglobals(KSharedConfig::openConfig( "kdeglobals" ), "KDE");
+ 
+   KTemporaryFile tmpFile;
+--- a/kcontrol/krdb/ad/GV.ad
++++ b/kcontrol/krdb/ad/GV.ad
+@@ -1 +1 @@
+-GV.printCommand:	kprinter
++#GV.printCommand:	kprinter
+--- a/kcontrol/krdb/ad/WPerfect.ad
++++ b/kcontrol/krdb/ad/WPerfect.ad
+@@ -41,8 +41,7 @@
+ XWp*XmDialogShell*background: BACKGROUND
+ XWp*XmDialogShell*XmScrolledWindow*XmDrawingArea.background: WINDOW_BACKGROUND
+ WPFMShell*XmDialogShell*background: WINDOW_BACKGROUND
+-WPFMShell*XmDialogShell*XmScrolledWindow*XmDrawingArea.background:
+-WINDOW_BACKGROUND
++WPFMShell*XmDialogShell*XmScrolledWindow*XmDrawingArea.background: WINDOW_BACKGROUND
+ XWp*XmDialogShell*XmDrawingArea.background: WINDOW_BACKGROUND
+ XWp*XmDialogShell*XmList*background: WINDOW_BACKGROUND
+ XWp*XmDialogShell*XmText*background: WINDOW_BACKGROUND
+--- a/kcontrol/krdb/ad/AcroRead.ad
++++ b/kcontrol/krdb/ad/AcroRead.ad
+@@ -1,5 +1,5 @@
+-nspluginviewer*lprCommand: kprinter
+-acroread*lprCommand: kprinter
++#nspluginviewer*lprCommand: kprinter
++#acroread*lprCommand: kprinter
+ Acroread.foreground:               WINDOW_FOREGROUND
+ Acroread.background:               WINDOW_BACKGROUND
+ AcroRead.borderColor:              WINDOW_FOREGROUND
+--- a/kcontrol/accessibility/accessibility.desktop
++++ b/kcontrol/accessibility/accessibility.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell accessibility
++Exec=kcmshell4 accessibility
+ Icon=preferences-desktop-accessibility
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/accessibility/accessibility.cpp
++++ b/kcontrol/accessibility/accessibility.cpp
+@@ -107,7 +107,7 @@
+ //
+ //    systemBell->setChecked(config->readEntry("SystemBell", true));
+ //    customBell->setChecked(config->readEntry("ArtsBell", false));
+-//    soundEdit->setText(config->readPathEntry("ArtsBellFile"));
++//    soundEdit->setText(config->readPathEntry("ArtsBellFile", QString()));
+ //
+ //    visibleBell->setChecked(config->readEntry("VisibleBell", false));
+ //    invertScreen->setChecked(config->readEntry("VisibleBellInvert", true));
+--- a/kcontrol/accessibility/CMakeLists.txt
++++ b/kcontrol/accessibility/CMakeLists.txt
+@@ -13,7 +13,7 @@
+ kde4_add_plugin(kcm_accessibility ${kcm_accessibility_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_accessibility  ${KDE4_KDE3SUPPORT_LIBS}) 
++target_link_libraries(kcm_accessibility  ${KDE4_KIO_LIBS} ${QT_QT3SUPPORT_LIBRARY}) 
+ 
+ install(TARGETS kcm_accessibility  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/kcontrol/taskbar/kcmtaskbar.desktop
++++ b/kcontrol/taskbar/kcmtaskbar.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kcmtaskbar
++Exec=kcmshell4 kcmtaskbar
+ Icon=preferences-desktop-panel-taskbar
+ Type=Service
+ ServiceTypes=KCModule
+@@ -167,7 +167,7 @@
+ Keywords[is]=spjald,kspjald,tækjaslá,forritaslá,gluggar,ræsingarslá
+ Keywords[it]=kicker,pannello,kpanel,barra delle applicazioni,barra di avvio,finestre
+ Keywords[ja]=kicker,パネル,kpanel,タスクバー,スタートバー,ラウンチバー,ウィンドウ
+-Keywords[km]=kicker,បន្ទះ,kpanel,របារ​ភារកិច្ច,របារ​ចាប់ផ្ដើម,របារ​ចាប់ផ្ដើម,វីនដូ
++Keywords[km]=kicker បន្ទះ kpanel របារ​ភារកិច្ច របារ​ចាប់ផ្ដើម របារ​ចាប់ផ្ដើម វីនដូ
+ Keywords[ko]=kicker,패널,kpanel,작업 표시줄,창
+ Keywords[lt]=kicker,pultas,kpanel,užduočių juosta,startavimo juosta,paleisties juosta
+ Keywords[lv]=kikers,panelis,kpanelis,uzdevumjosla,startjosla,palaišanasjosla,logi
+--- a/kcontrol/fonts/fonts.desktop
++++ b/kcontrol/fonts/fonts.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell fonts
++Exec=kcmshell4 fonts
+ Icon=preferences-desktop-font
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/fonts/fonts.cpp
++++ b/kcontrol/fonts/fonts.cpp
+@@ -328,7 +328,7 @@
+ 
+   if(!xft.getHintStyle(hStyle) || KXftConfig::Hint::NotSet==hStyle)
+   {
+-    KConfig kglobals("kdeglobals", KConfig::CascadeConfig);
++    KConfig kglobals("kdeglobals", KConfig::NoGlobals);
+ 
+     hStyle=KXftConfig::Hint::Medium;
+     xft.setHintStyle(hStyle);
+@@ -348,7 +348,7 @@
+ bool FontAASettings::save( bool useAA )
+ {
+   KXftConfig   xft(KXftConfig::constStyleSettings);
+-  KConfig      kglobals("kdeglobals", KConfig::CascadeConfig);
++  KConfig      kglobals("kdeglobals", KConfig::NoGlobals);
+   KConfigGroup grp(&kglobals, "General");
+ 
+   xft.setAntiAliasing( useAA );
+--- a/kcontrol/energy/energy.desktop
++++ b/kcontrol/energy/energy.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell energy
++Exec=kcmshell4 energy
+ Icon=preferences-system-power-management
+ DocPath=kcontrol/energy/index.html
+ Type=Service
+@@ -94,7 +94,7 @@
+ Comment[el]=Ρυθμίσεις για την προβολή της διαχείρισης ενέργειας
+ Comment[eo]=Agordo por de la elektrouzado de via ekrano
+ Comment[es]=Preferencias para la pantalla de control de energía
+-Comment[et]=Ekraani voolutarbe juhtimise seaded
++Comment[et]=Monitori voolutarbe juhtimise seaded
+ Comment[eu]=Pantailaren energia kudeatzeko ezarpenak
+ Comment[fa]=تنظیمات برای نمایش مدیریت توان
+ Comment[fi]=Asetukset näytön virranhallinnalle
+@@ -155,7 +155,7 @@
+ Keywords[el]=ενέργεια,εξοικονόμηση,apm,acpi,dpms,χρονικό όριο,blanking,αναμονή,παύση,ισχύς
+ Keywords[eo]=energio,sekurigo,APM,ACPI,tempolimo,ekrano,kurteno,nigrigo, dormigo,malŝalto
+ Keywords[es]=energía,ahorro,APM,ACPI,tiempo límite,apagar monitor,modo de espera,suspender
+-Keywords[et]=energia,säästja,apm,acpi,dpms,taimaut,energiasääst,passiivne
++Keywords[et]=energia,säästja,apm,acpi,dpms,taimaut,aegumine,energiasääst,passiivne
+ Keywords[eu]=energia,babeslea,apm,acpi,dpms,denbora-muga,monitorea itzali, zain,suspenditu,indarra
+ Keywords[fa]=انرژی، محافظ، apm، acpi، dpms، اتمام وقت، فاصله‌گذاری، نیمه روشن، معلق، توان
+ Keywords[fi]=energia,säästö,apm,acpi,dpms,aikavalvonta,sammutus,valmiustila,teho
+--- a/kcontrol/energy/energy.cpp
++++ b/kcontrol/energy/energy.cpp
+@@ -101,7 +101,7 @@
+ 
+     KDE_EXPORT void kcminit_energy() {
+ #ifdef HAVE_DPMS
+-        KConfig *_cfg = new KConfig( "kcmdisplayrc", KConfig::CascadeConfig );
++        KConfig *_cfg = new KConfig( "kcmdisplayrc", KConfig::NoGlobals );
+         KConfigGroup cfg(_cfg, "DisplayEnergy");
+ 
+ 	Display *dpy = QX11Info::display();
+@@ -235,7 +235,7 @@
+     else
+        setButtons( KCModule::Help );
+ 
+-    m_pConfig = new KConfig("kcmdisplayrc", KConfig::CascadeConfig);
++    m_pConfig = new KConfig("kcmdisplayrc", KConfig::NoGlobals);
+ 
+     load();
+ }
+--- a/kcontrol/infocenter/usbview/kcmusb.desktop
++++ b/kcontrol/infocenter/usbview/kcmusb.desktop
+@@ -4,7 +4,7 @@
+ Type=Service
+ ServiceTypes=KCModule
+ DocPath=kinfocenter/usb/index.html
+-Exec=kcmshell kcmusb
++Exec=kcmshell4 kcmusb
+ 
+ X-KDE-Library=kcm_usb
+ X-KDE-ParentApp=kinfocenter
+@@ -155,7 +155,7 @@
+ Keywords[el]=USB,συσκευές,προβολέας,έλεγχος
+ Keywords[eo]=USB,aparatoj,rigardilo,stirado
+ Keywords[es]=USB,dispositivos,visor,control
+-Keywords[et]=USB,seadmed,vaataja,juhtimine
++Keywords[et]=USB,seadmed,näitaja,juhtimine
+ Keywords[eu]=USB,gailuak,ikustailua,kontrola
+ Keywords[fa]=USB، دستگاهها، مشاهده‌گر، کنترل
+ Keywords[fi]=USB,laitteet,näyttää,ohjaus
+@@ -169,7 +169,7 @@
+ Keywords[is]=USB,tæki,skoðari,stilling
+ Keywords[it]=USB,dispositivi,controllo
+ Keywords[ja]=USB,デバイス,ビューア,コントロール
+-Keywords[km]=យូអេសប៊ី,ឧបករណ៍,កម្មវិធី​មើល,វត្ថុ​បញ្ជា
++Keywords[km]=យូអេសប៊ី ឧបករណ៍ កម្មវិធី​មើល វត្ថុ​បញ្ជា
+ Keywords[ko]=USB,장치,USB 장치,제어
+ Keywords[lt]=USB,devices,viewer,control, įrengimai, žiūriklis, kontrolė
+ Keywords[lv]=USB,iekārtas,skatītājs,vadība
+--- a/kcontrol/infocenter/info/processor.desktop
++++ b/kcontrol/infocenter/info/processor.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell processor
++Exec=kcmshell4 processor
+ Icon=kcmprocessor
+ Type=Service
+ ServiceTypes=KCModule
+@@ -171,7 +171,7 @@
+ Keywords[it]=processore,CPU,FPU,MHz,informazioni sul sistema
+ Keywords[ja]=プロセッサ,CPU,FPU,MHz,システムの情報
+ Keywords[ka]=პროცესორი,CPU,FPU,MHz,ინფორმაცია სისტემის შესახებ
+-Keywords[km]=ប្រព័ន្ធ​ដំណើរការ,ស៊ីភីយូ,FPU,MHz,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=ប្រព័ន្ធ​ដំណើរការ ស៊ីភីយូ FPU MHz ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=Processor,프로세서,CPU,FPU,MHz,시스템 정보
+ Keywords[lt]=Procesorius,CPU,FPU,MHz,Sistemos Informacija
+ Keywords[lv]=Procesors,CPU,FPU,MHz,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/devices.desktop
++++ b/kcontrol/infocenter/info/devices.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell devices
++Exec=kcmshell4 devices
+ Icon=kcmdevices
+ Type=Service
+ ServiceTypes=KCModule
+@@ -173,7 +173,7 @@
+ Keywords[is]=dev,tæki,jaðartæki,upplýsingar,kerfi
+ Keywords[it]=dev,dispositivi,periferiche,informazioni sul sistema,informazioni
+ Keywords[ja]=dev,デバイスシステム,システムの情報,情報
+-Keywords[km]=ឧបករណ៍,ព័ត៌មាន​ប្រព័ន្ធ,ព័ត៌មាន
++Keywords[km]=dev ឧបករណ៍ ព័ត៌មាន​ប្រព័ន្ធ ព័ត៌មាន
+ Keywords[ko]=장치,시스템 정보,정보
+ Keywords[lt]=dev,Įrenginiai,Sistemos Informacija,Informacija
+ Keywords[lv]=iek,Iekārtas,Sistēmas Informācija,Informācija
+--- a/kcontrol/infocenter/info/sound.desktop
++++ b/kcontrol/infocenter/info/sound.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell sound
++Exec=kcmshell4 sound
+ Icon=kcmsound
+ Type=Service
+ ServiceTypes=KCModule
+@@ -173,7 +173,7 @@
+ Keywords[it]=suono,audio,scheda sonora,MIDI,OSS,informazioni sul sistema
+ Keywords[ja]=サウンド,オーディオ,サウンドカード,MIDI,OSS,システムの情報
+ Keywords[ka]=ხმა,აუდიო,აუდიოდაბა,MIDI,OSS,ინფორმაცია სისტემის შესახებ
+-Keywords[km]=សំឡេង,អូឌីយ៉ូ,កាត​សំឡេង,មីឌី,OSS,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=សំឡេង អូឌីយ៉ូ កាត​សំឡេង មីឌី OSS ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=사운드,소리,오디오,사운드 카드,MIDI,OSS,시스템 정보
+ Keywords[lt]=Garsas,Audio,Garso korta,Midi,OSS,Sistemos informacija
+ Keywords[lv]=Skaņa,Audio,Skaņaskarte,MIDI,OSS,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/partitions.desktop
++++ b/kcontrol/infocenter/info/partitions.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell partitions
++Exec=kcmshell4 partitions
+ Icon=kcmpartitions
+ Type=Service
+ ServiceTypes=KCModule
+@@ -172,7 +172,7 @@
+ Keywords[is]=Sneiðar,Disksneiðar,Harðir diskar,Harður diskur,kerfi,upplýsingar
+ Keywords[it]=partizioni,disco rigido,hard disk,HD,informazioni sul sistema
+ Keywords[ja]=パーティション,ハードドライブ,HD,システムの情報
+-Keywords[km]=ភាគថាស,ដ្រាយរឹង,HD,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=ភាគថាស ដ្រាយរឹង HD ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=파티션,하드 디스크,하드디스크,시스템 정보Partitions,Harddrive,HD,System Information,파티션,분할 영역,하드 디스크,하드 드라이브,시스템 정보,하드,나눠진 공간
+ Keywords[lt]=Skirsniai,Kietasis diskas,HD,Sistemos Informacija
+ Keywords[lv]=Partīcijas,CietaisDisks,HD,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/xserver.desktop
++++ b/kcontrol/infocenter/info/xserver.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell xserver
++Exec=kcmshell4 xserver
+ Icon=kcmx
+ Type=Service
+ ServiceTypes=KCModule
+@@ -164,7 +164,7 @@
+ Keywords[it]=X,Server X,XServer,XFree86,display,schermo,informazioni sul sistema,SchedaVideo
+ Keywords[ja]=X,X-サーバ,Xサーバ,XFree86,ディスプレイ,システム情報
+ Keywords[ka]=X,X-სერვერი,Xსერვერი,XFree86,დსიპლეი, ვიდეოდაფა,ინფორმაცია სისტების შესახებ
+-Keywords[km]=X,ម៉ាស៊ីន​បម្រើ X,ម៉ាស៊ីន​បម្រើ X,XFree86,ការ​បង្ហាញ,កាត​វីដេអូ,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=X ម៉ាស៊ីន​បម្រើ X ម៉ាស៊ីន​បម្រើ X XFree86 ការ​បង្ហាញ កាត​វីដេអូ ព័័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=X,X 서버,XFree86,디스플레이,비디오 카드,시스템 정보
+ Keywords[lt]=X,X-Serveris,XServer,XFree86,Displėjus,Video plokštė,Sistemos informacija
+ Keywords[lv]=X,X-Serveris,XServeris,XFree86,Ekrāns,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/ioports.desktop
++++ b/kcontrol/infocenter/info/ioports.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell ioports
++Exec=kcmshell4 ioports
+ Icon=kcmmemory
+ Type=Service
+ ServiceTypes=KCModule
+@@ -173,7 +173,7 @@
+ Keywords[is]=Inntak,úttak,I/O,Port,upplýsingar,kerfi
+ Keywords[it]=IO,I/O,porte di IO,porte di I/O,porte,intervallo di IO,intervallo di I/O,informazioni sul sistema
+ Keywords[ja]=IO,I/O,IO-ポート,I/O-ポート,ポート,IO-レンジ,I/O-レンジ,システムの情報
+-Keywords[km]=IO,I/O,ច្រក IO,ច្រក I/O,ច្រក,ជួរ IO,ជួរ I/O,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=IO I/O ច្រក IO ច្រក I/O ច្រក ជួរ IO ជួរ I/O ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=IO,I/O,IO 포트,I/O 포트,IO 범위,I/O 범위,시스템 정보
+ Keywords[lt]=IO,I/O,IO-Ports,IO-portai,I/O-Ports,I/O-prievadai,Ports,prievadai,IO-Range,IO zona,I/O-Range,I/O zona,System Information,sisteminė informacija
+ Keywords[lv]=IO,I/O,IO-Porti,I/O-Porti,Porti,IO-Diapazons,I/O-Diapazons,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/dma.desktop
++++ b/kcontrol/infocenter/info/dma.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell dma
++Exec=kcmshell4 dma
+ Icon=kcmmemory
+ Type=Service
+ ServiceTypes=KCModule
+@@ -94,7 +94,7 @@
+ Comment[el]=Πληροφορίες για τα DMA
+ Comment[eo]=DMA-informo
+ Comment[es]=Información sobre DMA
+-Comment[et]=DMA kanalite info
++Comment[et]=DMA-kanalite info
+ Comment[eu]=DMAri buruzko informazioa
+ Comment[fa]=اطلاعات دسترسی مستقیم به حافظه
+ Comment[fi]=DMA-tietoja
+@@ -160,7 +160,7 @@
+ Keywords[el]=dma,Κανάλια DMA,Πληροφορίες συστήματος
+ Keywords[eo]=DMA,kanaloj,sistemo,operaciumo,informo
+ Keywords[es]=DMA,Canales DMA,Información del sistema
+-Keywords[et]=dma,DMA kanalid,süsteemi informatsioon
++Keywords[et]=dma,DMA-kanalid,süsteemi informatsioon
+ Keywords[eu]=dma,DMA-Kanalak,Sistemaren informazioa
+ Keywords[fa]=dma ،مجراهای دستیابی مستقیم به حافظه، اطلاعات سیستم
+ Keywords[fi]=dma,DMA-kanavat,Järjestelmätiedot
+@@ -175,7 +175,7 @@
+ Keywords[it]=DMA,canali DMA,informazioni sul sistema
+ Keywords[ja]=dma,DMA-チャンネル,システムの情報
+ Keywords[ka]=dma,DMA-არხები,ინფორმაცია სისტემის შესახებ
+-Keywords[km]=dma, ឆានែល DMA,​ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=dma ឆានែល DMA ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=dma,DMA-채널,채널,시스템 정보
+ Keywords[lt]=dma,DMA-Kanalai,Sistemos Informacija
+ Keywords[lv]=dma,DMA-Kanāli,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/memory.desktop
++++ b/kcontrol/infocenter/info/memory.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell memory
++Exec=kcmshell4 memory
+ Icon=kcmmemory
+ Type=Service
+ ServiceTypes=KCModule
+@@ -173,7 +173,7 @@
+ Keywords[it]=memoria,RAM,memoria virtuale,memoria fisica,memoria condivisa,swap,informazioni sul sistema
+ Keywords[ja]=メモリ,RAM,仮想メモリ,物理メモリ,共有メモリ, スワップ, システム情報
+ Keywords[ka]=მეხსიერება,RAM,ვირტუალური მეხსეირება,ფიზიკური მეხსიერება,საერთო მეხსიერება,მიმოცვლის ფაილია,ინფორმაცია სისტემის შესახებ
+-Keywords[km]=សតិ,RAM,សតិ​និម្មិត,សតិពិត,សតិ​ដែល​បាន​ចែករំលែក,ស្វប,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=សតិ RAM សតិ​និម្មិត សតិពិត សតិ​ដែល​បាន​ចែករំលែក ស្វប ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=메모리,RAM,가상 메모리,물리 메모리,공유 메모리,스왑,시스템 정보
+ Keywords[lt]=Memory,atmintis,RAM,atmintinė,Virtual memory,virtuali atmintis,Physical memory,fizinė atmintis,Shared memory,bendro naudojimo atmintis,Swap,System Information,sisteminė informacija
+ Keywords[lv]=Atmiņa,RAM,Virtuālā atmiņa,Fiziskā atmiņa,Koplietošanas atmiņa,Svaps,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/pci.desktop
++++ b/kcontrol/infocenter/info/pci.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell pci
++Exec=kcmshell4 pci
+ Icon=kcmpci
+ Type=Service
+ ServiceTypes=KCModule
+@@ -116,7 +116,7 @@
+ Keywords[is]=PCI-tæki,PCI-braut,kerfi,upplýsingar
+ Keywords[it]=PCI,dispositivi PCI,bus PCI,informazioni sul sistema
+ Keywords[ja]=PCI,PCI-デバイス,PCI-バス,システムの情報
+-Keywords[km]=PCI,ឧបករណ៍ PCI,ខ្សែ​បញ្ជូន PCI,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=PCI ឧបករណ៍ PCI ខ្សែ​បញ្ជូន PCI ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=PCI,PCI 장치,PCI 버스,시스템 정보
+ Keywords[lt]=PCI,PCI-įrenginiai,PCI-Bus,Sistemos Informacija
+ Keywords[lv]=PCI,PCI-Iekārtas,PCI-Šina,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/interrupts.desktop
++++ b/kcontrol/infocenter/info/interrupts.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell interrupts
++Exec=kcmshell4 interrupts
+ Icon=kcmmemory
+ Type=Service
+ ServiceTypes=KCModule
+@@ -153,7 +153,7 @@
+ Keywords[el]=Διακοπές,IRQ,Πληροφορίες συστήματος
+ Keywords[eo]=Interrompoj,IRQ,sistemo,informo,operaciumo
+ Keywords[es]=Interrupciones,IRQ,Información del sistema
+-Keywords[et]=Katkestused,IRQ,Süsteemi informatsioon
++Keywords[et]=Katkestused,IRQ,Süsteemi info
+ Keywords[eu]=Etenaldiak,IRQ,Sistemaren informazioa
+ Keywords[fa]=وقفه‌ها، IRQ، اطلاعات سیستم
+ Keywords[fi]=Keskeytykset,IRQ,Järjestelmätiedot
+@@ -168,7 +168,7 @@
+ Keywords[it]=interrupt,IRQ,informazioni sul sistema
+ Keywords[ja]=割り込み,IRQ,システムの情報
+ Keywords[ka]=წყვიტავს,IRQ,ინფორმაცია სისტემის შესახებ
+-Keywords[km]=ផ្អាក,IRQ,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=ផ្អាក IRQ ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=인터럽트,IRQ,시스템 정보
+ Keywords[lt]=Pertrauktys,IRQ,Sistemos Informacija
+ Keywords[lv]=Pārtraukumi,IRQ,Sistēmas Informācija
+--- a/kcontrol/infocenter/info/opengl.desktop
++++ b/kcontrol/infocenter/info/opengl.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell opengl
++Exec=kcmshell4 opengl
+ Icon=kcmopengl
+ Type=Service
+ ServiceTypes=KCModule
+@@ -104,7 +104,7 @@
+ Keywords[is]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,vélbúnaðarhröðun,Graphics,grafík,X,X11,Xserver,Xþjónn, X-Server,X-þjónn,XFree86,Display,skjár
+ Keywords[it]=OpenGL,DRI,GLX,3D,SchedaVideo,Video,Accelerazione Hardware,Grafica,X,X11,Xserver,X-Server,XFree86,Display,Server X
+ Keywords[ka]=OpenGL,DRI,GLX,3D,ვიდეოდაფა,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display
+-Keywords[km]=OpenGL,DRI,GLX,3D,កាត​វីដេអូ,ការ​បង្កើន​ល្បឿន​ផ្នែក​រឹង,ក្រាហ្វិក,X,X11,Xserver,ម៉ាស៊ីន​បម្រើ X,XFree86,ការ​បង្ហាញ
++Keywords[km]=OpenGL DRI GLX ត្រីមាត្រ កាាត​វីដេអ ,ការ​បង្កើន​ល្បឿន​ផ្នែក​រឹ ,ក្រាហ្វិ , ,X1 ,Xserve ,ម៉ាស៊ីន​បម្រើ  XFree8 ,ការ​បង្ហាញ
+ Keywords[ko]=OpenGL,DRI,GLX,3D,비디오 카드,하드웨어 가속,그래픽,X11,X 서버,디스플레이
+ Keywords[lt]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Video plokštė,aparatūros greitinimas,grafika
+ Keywords[lv]=OpenGL,DRI,GLX,3D,VideoKarte,Dzelžu paātrināšana,Grafika,X,X11,Xserveris,X-Serveris,XFree86,Ekrāns
+--- a/kcontrol/infocenter/info/scsi.desktop
++++ b/kcontrol/infocenter/info/scsi.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell scsi
++Exec=kcmshell4 scsi
+ Icon=kcmscsi
+ Type=Service
+ ServiceTypes=KCModule
+@@ -115,7 +115,7 @@
+ Keywords[is]=SCSI-braut,kerfi,upplýsingar
+ Keywords[it]=SCSI,bus SCSI,informazioni sul sistema
+ Keywords[ja]=SCSI,SCSI-バス,システムの情報
+-Keywords[km]=SCSI,ខ្សែ​បញ្ជូន SCSI,ព័ត៌មាន​ប្រព័ន្ធ
++Keywords[km]=SCSI​ ខ្សែ​បញ្ជូន SCSI ព័ត៌មាន​ប្រព័ន្ធ
+ Keywords[ko]=SCSI,SCSI 버스,시스템 정보
+ Keywords[lt]=SCSI,SCSI-Bus,Sistemos Informacija
+ Keywords[lv]=SCSI,SCSI-Šina,Sistēmas Informācija
+--- a/kcontrol/infocenter/view1394/CMakeLists.txt
++++ b/kcontrol/infocenter/view1394/CMakeLists.txt
+@@ -11,7 +11,7 @@
+ kde4_add_plugin(kcm_view1394 ${kcm_view1394_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_view1394  ${KDE4_KDE3SUPPORT_LIBS} ${RAW1394_LIBRARIES} )
++target_link_libraries(kcm_view1394 ${QT_QT3SUPPORT_LIBRARY} ${KDE4_KDEUI_LIBS} ${RAW1394_LIBRARIES} )
+ 
+ install(TARGETS kcm_view1394  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/kcontrol/infocenter/view1394/kcmview1394.desktop
++++ b/kcontrol/infocenter/view1394/kcmview1394.desktop
+@@ -4,7 +4,7 @@
+ Type=Service
+ ServiceTypes=KCModule
+ DocPath=kinfocenter/view1394/index.html
+-Exec=kcmshell kcmview1394
++Exec=kcmshell4 kcmview1394
+ 
+ X-KDE-Library=kcm_view1394
+ X-KDE-ParentApp=kinfocenter
+@@ -152,7 +152,7 @@
+ Keywords[el]=1394,Firewire,συσκευές,προβολέας,έλεγχος
+ Keywords[eo]=1394,aparatoj,rigardilo,stirado
+ Keywords[es]=1394,Firewire,dispositivos,visor,control
+-Keywords[et]=1394,Firewire,seadmed,vaataja,juhtimine
++Keywords[et]=1394,Firewire,seadmed,näitaja,juhtimine
+ Keywords[eu]=1394,Firewire,gailuak,ikustailua,kontrola
+ Keywords[fa]=۱۳۹۴، Firewire، دستگاهها، مشاهده‌گر، کنترل
+ Keywords[fi]=1394,Firewire,laitteet,katselija,hallinta
+@@ -166,7 +166,7 @@
+ Keywords[is]=1394,Firewire,tæki,skoðari,stilling
+ Keywords[it]=1394,dispositivi,controllo,visualizza,firewire
+ Keywords[ja]=1394,Firewire,デバイス,ビューア,コントロール
+-Keywords[km]=1394,ខ្សែ​ភ្លើង,ឧបករណ៍,កម្មវិធី​មើល,វត្ថុ​បញ្ជា
++Keywords[km]=1394 ខ្សែ​ភ្លើង ឧបករណ៍ កម្មវិធី​មើល វត្ថុ​បញ្ជា
+ Keywords[ko]=1394,Firewire,장치,제어
+ Keywords[lt]=1394,Firewire,devices,viewer,control,žiūryklė,kontrolė,įrenginiai
+ Keywords[lv]=1394,Fireware,iekārtas,skatītājs,vadība
+--- a/kcontrol/infocenter/nics/nic.h
++++ b/kcontrol/infocenter/nics/nic.h
+@@ -24,7 +24,7 @@
+ #include <kcmodule.h>
+ 
+ class QPushButton;
+-class Q3ListView;
++class QTreeWidget;
+ 
+ class KCMNic:public KCModule
+ {
+@@ -36,7 +36,7 @@
+       void update();
+ 
+    protected:
+-      Q3ListView *m_list;
++      QTreeWidget *m_list;
+       QPushButton *m_updateButton;
+ };
+ 
+--- a/kcontrol/infocenter/nics/nic.desktop
++++ b/kcontrol/infocenter/nics/nic.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell nic
++Exec=kcmshell4 nic
+ Type=Service
+ ServiceTypes=KCModule
+ DocPath=kinfocenter/nics/index.html
+--- a/kcontrol/infocenter/nics/nic.cpp
++++ b/kcontrol/infocenter/nics/nic.cpp
+@@ -36,13 +36,13 @@
+ #include <kglobal.h>
+ 
+ #include <QLayout>
+-#include <Qt3Support/Q3CheckListItem>
+ #include <QPushButton>
+ #include <QTabWidget>
+ #include <QTimer>
+ #include <QVBoxLayout>
+ #include <QHBoxLayout>
+ #include <Q3PtrList>
++#include <QTreeWidget>
+ 
+ #include "nic.h"
+ 
+@@ -97,15 +97,12 @@
+    QVBoxLayout *box=new QVBoxLayout(this);
+    box->setMargin(0);
+    box->setSpacing(KDialog::spacingHint());
+-   m_list=new Q3ListView(this);
++   m_list=new QTreeWidget(this);
++   m_list->setRootIsDecorated(false);
+    box->addWidget(m_list);
+-   m_list->addColumn(i18n("Name"));
+-   m_list->addColumn(i18n("IP Address"));
+-   m_list->addColumn(i18n("Network Mask"));
+-   m_list->addColumn(i18n("Type"));
+-   m_list->addColumn(i18n("State"));
+-   m_list->addColumn(i18n("HWAddr"));
+-   m_list->setAllColumnsShowFocus(true);
++   QStringList columns;
++   columns<<i18n("Name")<<i18n("IP Address")<<i18n("Network Mask")<<i18n("Type")<<i18n("State")<<i18n("HWAddr");
++   m_list->setHeaderLabels(columns);
+    QHBoxLayout *hbox=new QHBoxLayout();
+    box->addItem(hbox);
+    m_updateButton=new QPushButton(i18n("&Update"),this);
+@@ -132,8 +129,11 @@
+    m_list->clear();
+    NICList *nics=findNICs();
+    nics->setAutoDelete(true);
+-   for (MyNIC* tmp=nics->first(); tmp!=0; tmp=nics->next())
+-      new Q3ListViewItem(m_list,tmp->name, tmp->addr, tmp->netmask, tmp->type, tmp->state, tmp->HWaddr);
++   for (MyNIC* tmp=nics->first(); tmp!=0; tmp=nics->next()) {
++      QStringList lst;
++      lst << tmp->name<<tmp->addr<<tmp->netmask<<tmp->type<<tmp->state<<tmp->HWaddr;
++      new QTreeWidgetItem(m_list,lst);
++   }
+    delete nics;
+ }
+ 
+--- a/kcontrol/infocenter/nics/CMakeLists.txt
++++ b/kcontrol/infocenter/nics/CMakeLists.txt
+@@ -18,7 +18,7 @@
+ kde4_add_plugin(kcm_nic ${kcm_nic_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_nic  ${KDE4_KIO_LIBS} ${QT_QT3SUPPORT_LIBRARY} ${QT_QTGUI_LIBRARY})
++target_link_libraries(kcm_nic  ${KDE4_KIO_LIBS} ${QT_QT3SUPPORT_LIBRARY} )
+ 
+ install(TARGETS kcm_nic  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/kcontrol/hardware/joystick/joystick.desktop
++++ b/kcontrol/hardware/joystick/joystick.desktop
+@@ -60,7 +60,7 @@
+ Comment[x-test]=xxjoystick - a kcontrol module to test joysticksxx
+ Comment[zh_CN]=joystick - 测试游戏杆的 kcontrol 模块
+ Comment[zh_TW]=搖桿 - 用來測試搖桿的 kcontrol 模組
+-Exec=kcmshell joystick
++Exec=kcmshell4 joystick
+ Keywords=joystick,gamepad
+ Keywords[ar]=وسادة اللعبة,عصا الألعاب
+ Keywords[be]=Джойстык,joystick,gamepad
+--- a/kcontrol/hardware/display/display.desktop
++++ b/kcontrol/hardware/display/display.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell display
++Exec=kcmshell4 display
+ Icon=preferences-desktop-display
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/input/mouse.desktop
++++ b/kcontrol/input/mouse.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell mouse
++Exec=kcmshell4 mouse
+ Icon=preferences-desktop-mouse
+ Type=Service
+ ServiceTypes=KCModule,KCModuleInit
+@@ -168,7 +168,7 @@
+ Keywords[is]=Næmni músar,bendill,inntakstæki,hröðun,örvhentur,rétthentur,smella,tákn,bendill,tvísmella
+ Keywords[it]=mouse,accelerazione del mouse,soglia del mouse,tasti del mouse,selezione,forma del cursore,dispositivi di input,mappatura dei tasti,clic,icone,puntatori,trascinamento,doppio clic,mouse per mancini,mancini
+ Keywords[ja]=マウス,マウスの加速,マウスのしきい,マウスボタン,選択,カーソルの形,入力デバイス,入力デバイス,ボタンの割り当て,クリック,アイコン,フィードバック,ポインタ,ドラッグ,ダブルクリック,割り当て,右利き,左利き
+-Keywords[km]=កណ្ដុរ,ការ​បង្កើន​ល្បឿន,កម្រិត​ពន្លឺ​កណ្ដុរ,ប៊ូតុង​កណ្ដុរ,ការជ្រើស,រូបរាង​ទស្សន៍​ទ្រនិច,ឧបករណ៍​បញ្ចូល,ការ​ផ្គូផ្គង​ប៊ូតុង,ចុច,រូបតំណាង,មតិ​អ្នក​ប្រើ,ទ្រនិច​,អូស,ចុច​ទ្វេដង,ការ​ផ្គូផ្គង,ខាង​ស្ដាំ,ខាង​ឆ្វេង
++Keywords[km]=កណ្ដុរ ការ​បង្កើន​ល្បឿន កម្រិត​ពន្លឺ​កណ្ដុរ ប៊ូតុង​កណ្ដុរ ការជ្រើស រូបរាង​ទស្សន៍​ទ្រនិច ឧបករណ៍​បញ្ចូល ការ​ផ្គូផ្គង​ប៊ូតុង ចុច រូបតំណាង មតិ​អ្នក​ប្រើ ទ្រនិច អូស ចុច​ទ្វេដង ការ​ផ្គូផ្គង ខាង​ស្ដាំ ខាង​ឆ្វេង
+ Keywords[ko]=마우스,마우스 가속,마우스 단추,선택,커서,입력 장치,단추 할당,아이콘,피드백,포인터,드래그,더블클릭
+ Keywords[lt]=Mouse,pelė,Mouse acceleration,pelės pagreitinimas,Mouse threshold,Mouse buttons,pelės mygtukai,Selection,pažymėjimas,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,DoubleClick,right handed,left handed,kairiarankė
+ Keywords[lv]=Pele,Peles paātrinājums,Peles slieksnis,Peles taustiņi,Izvēle,Kursora Forma,Ievades Iekārtas,Pogu Sasaiste,Klikšķis,ikonas,atpakaļsaite,Rādītāji,Vilkt,Dubultklikšķis,sasaiste,labās rokas,kreisās rokas
+--- a/kcontrol/input/main.cpp
++++ b/kcontrol/input/main.cpp
+@@ -43,7 +43,7 @@
+ {
+   KDE_EXPORT void kcminit_mouse()
+   {
+-      KConfig *config = new KConfig("kcminputrc", KConfig::CascadeConfig );
++      KConfig *config = new KConfig("kcminputrc", KConfig::NoGlobals );
+     MouseSettings settings;
+     settings.load(config);
+     settings.apply(true); // force
+--- a/kcontrol/input/xcursor/themepage.cpp
++++ b/kcontrol/input/xcursor/themepage.cpp
+@@ -224,7 +224,7 @@
+     preview->setTheme(theme);
+ 
+     // Disable the listview and the buttons if we're in kiosk mode
+-    if (cg.entryIsImmutable("cursorTheme"))
++    if (cg.isEntryImmutable("cursorTheme"))
+     {
+         view->setEnabled(false);
+         installButton->setEnabled(false);
+--- a/kcontrol/input/xcursor/thememodel.cpp
++++ b/kcontrol/input/xcursor/thememodel.cpp
+@@ -226,7 +226,7 @@
+             continue;
+ 
+         // Open the index.theme file, so we can get the list of inherited themes
+-        KConfig config(dir.path() + "/index.theme", KConfig::CascadeConfig);
++        KConfig config(dir.path() + "/index.theme", KConfig::NoGlobals);
+         KConfigGroup cg(&config, "Icon Theme");
+ 
+         // Recurse through the list of inherited themes, to check if one of them
+--- a/kcontrol/input/xcursor/xcursortheme.cpp
++++ b/kcontrol/input/xcursor/xcursortheme.cpp
+@@ -51,7 +51,7 @@
+ 
+ void XCursorTheme::parseIndexFile()
+ {
+-    KConfig config(path() + "/index.theme", KConfig::CascadeConfig);
++    KConfig config(path() + "/index.theme", KConfig::NoGlobals);
+     KConfigGroup cg(&config, "Icon Theme");
+ 
+     m_title       = cg.readEntry("Name",     m_title);
+--- a/kcontrol/input/CMakeLists.txt
++++ b/kcontrol/input/CMakeLists.txt
+@@ -41,7 +41,8 @@
+ 
+ kde4_add_executable(kapplymousetheme ${kapplymousetheme_SRCS})
+ 
+-target_link_libraries(kapplymousetheme  ${KDE4_KDE3SUPPORT_LIBS} ${X11_Xrender_LIB})
++target_link_libraries(kapplymousetheme  ${QT_QT3SUPPORT_LIBRARY}
++${KDE4_KDEUI_LIBS} ${X11_Xrender_LIB})
+ if (X11_Xcursor_FOUND)
+    target_link_libraries(kapplymousetheme ${X11_Xcursor_LIB})
+ endif (X11_Xcursor_FOUND)
+--- a/kcontrol/kxkb/kxkb_part.desktop
++++ /dev/null
+@@ -1,22 +0,0 @@
+-[Desktop Entry]
+-Encoding=UTF-8
+-Type=Service
+-Name=Keyboard Layout Switcher
+-Name[be]=Змена раскладкі клавіятуры
+-Name[el]=Εναλλαγή διάταξης πληκτρολογίου
+-Name[ga]=Athraitheoir Leagan Amach Méarchláir
+-Name[ja]=キーボード配列切り替えツール
+-Name[km]=ឧបករណ៍​ប្ដូរ​ប្លង់​ក្ដារចុច
+-Name[nb]=Veksler mellom tastaturoppsett
+-Name[nds]=Tasttoornen-Wesselschalter
+-Name[nl]=Toetsenbordindeling wisselen
+-Name[nn]=Tastaturoppsett-skifte
+-Name[pt]=Mudança da Disposição do Teclado
+-Name[pt_BR]=Alternador de Layout do Teclado
+-Name[sv]=Byte av tangentbordslayout
+-Name[x-test]=xxKeyboard Layout Switcherxx
+-Name[zh_CN]=键盘布局切换器
+-Name[zh_TW]=鍵盤配置切換器
+-Icon=preferences-desktop-keyboard-layout
+-ServiceTypes=KParts/Part
+-X-KDE-Library=kxkb_part
+--- a/kcontrol/kxkb/kxkb_component.h
++++ /dev/null
+@@ -1,54 +0,0 @@
+-/*
+-    Copyright (C) 2001, S.R.Haque <srhaque at iee.org>. 
+-	Copyright (C) 2006, Andriy Rysin <rysin at kde.org>. Derived from an
+-    original by Matthias H�zer-Klpfel released under the QPL.
+-    This file is part of the KDE project
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Library General Public
+-    License as published by the Free Software Foundation; either
+-    version 2 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Library General Public License for more details.
+-
+-    You should have received a copy of the GNU Library General Public License
+-    along with this library; see the file COPYING.LIB.  If not, write to
+-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+-    Boston, MA 02110-1301, USA.
+-
+-DESCRIPTION
+-
+-    KDE Keyboard Tool. Manages XKB keyboard mappings.
+-*/
+-#ifndef __KXKB_COMPONENT_H__
+-#define __KXKB_COMPONENT_H__
+-
+-#include <QtCore/QLibrary>
+-
+-#include <kdemacros.h>
+-
+-/**
+-    Lightweigth (no pars or io libs required) Kxkb component
+-*/
+-extern "C" KDE_EXPORT void* kxkb_create_component(int controlType, void* parentWidget);
+-typedef void* (*kxkb_create_component_t)(int, void*);
+-enum { KXKB_INDICATOR_ONLY=1, KXKB_NO_MENU = 2, KXKB_MENU_LAYOUTS_ONLY = 3, KXKB_MENU_FULL=4 };
+-
+-#define KXKB_CREATE_COMPONENT(type, parent) { \
+-    QLibrary* kxkbLib = new QLibrary("kdeinit4_kxkb"); \
+-    kxkb_create_component_t kxkb_create_component = (kxkb_create_component_t)kxkbLib->resolve("kxkb_create_component"); \
+-    if ( kxkb_create_component ) { \
+-	QObject* kxkbObject = (QObject*)kxkb_create_component((type), (parent)); \
+-	QWidget* kxkbWidget = dynamic_cast<QWidget*>(kxkbWidget); \
+-	if( kxkbWidget == NULL ) \
+-	    kError() << "failed to create kxkb component"; \
+-    } \
+-    else \
+-	kDebug() << "can't load kxkb component library"; \
+-    delete kxkbLib; \
+-  }
+-
+-#endif
+--- a/kcontrol/kxkb/rules.h
++++ b/kcontrol/kxkb/rules.h
+@@ -41,15 +41,12 @@
+ 
+   bool isSingleGroup(const QString& layout);
+ 
+-//  static bool areLayoutsClean() { return m_layoutsClean; }
+-
+ private:
+ 
+   QHash<QString, QString> m_models;
+   QHash<QString, QString> m_layouts;
+   QHash<QString, XkbOptionGroup> m_optionGroups;
+   QHash<QString, XkbOption> m_options;
+-  QMap<QString, unsigned int> m_initialGroups;
+   QHash<QString, QStringList*> m_varLists;
+ 
+   QString X11_DIR;	// pseudo-constant
+--- a/kcontrol/kxkb/xklavier_adaptor.cpp
++++ b/kcontrol/kxkb/xklavier_adaptor.cpp
+@@ -22,8 +22,6 @@
+ #include <klocale.h>
+ #include <kdebug.h>
+ 
+-#include <QtGui/QWidget>
+-
+ #include <libxklavier/xklavier.h>
+ 
+ #include "rules.h"
+@@ -202,6 +200,7 @@
+ {
+     QList<LayoutUnit> list;
+ 
++    kDebug() << "retrieving active layout from server...";
+     XklConfigRec configRec;
+     xkl_config_rec_get_from_server(&configRec, priv->engine);
+ 
+--- a/kcontrol/kxkb/kxkb_applet.cpp
++++ b/kcontrol/kxkb/kxkb_applet.cpp
+@@ -17,6 +17,7 @@
+  */
+ 
+ #include <QWidget>
++#include <QSizeF>
+ 
+ #include <kglobal.h>
+ #include <klocale.h>
+@@ -28,25 +29,16 @@
+ #include "kxkb_applet.moc"
+ 
+ 
+-extern "C"
++KxkbApplet::KxkbApplet(QObject *parent, const QVariantList &args)
++    : Plasma::Applet(parent, args)
+ {
+-    KDE_EXPORT KPanelApplet* init(QWidget *parent, const QString& configFile)
+-    {
+-        KGlobal::locale()->insertCatalog("kxkb");
+-        int actions = Plasma::Preferences | Plasma::About | Plasma::Help;
+-        return new KxkbApplet(configFile, Plasma::Normal, actions, parent);
+-    }
+-}
+-
+-
+-KxkbApplet::KxkbApplet(const QString& configFile, Plasma::Type type,
+-                 int actions, QWidget *parent, Qt::WFlags f)
+-    : KPanelApplet(configFile, type, actions, parent, f)
+-{
+-    move( 0, 0 );
+-    kxkbWidget = new KxkbLabel( this );
+-	KxkbCore* kxkbCore = new KxkbCore(kxkbWidget);
+-	kxkbCore->newInstance();
++//    move( 0, 0 );
++    m_kxkbCore = new KxkbCore(NULL, KxkbCore::KXKB_COMPONENT, KxkbWidget::MENU_FULL, KxkbWidget::WIDGET_LABEL);
++    m_kxkbCore->newInstance();
++
++    setDrawStandardBackground(true);
++//    connect(m_systemTrayWidget, SIGNAL(sizeChanged()), SLOT(updateLayout()));
++    //m_kxkbWidget->show();
+     //setCustomMenu(widget->history()->popup());
+     //centerWidget();
+     //kxkbWidget->show();
+@@ -54,14 +46,21 @@
+ 
+ KxkbApplet::~KxkbApplet()
+ {
++    if (failedToLaunch()) {
++        // Do some cleanup here
++    } else {
++        // Save settings
++    }
+ }
+ 
+-int KxkbApplet::widthForHeight(int height) const
++QSizeF KxkbApplet::contentSizeHint() const
+ {
+-	return 32;//kxkbWidget->width();
++//    return QSizeF(m_kxkbCore->size());
++    return QSizeF(32,32);
+ }
+ 
+-int KxkbApplet::heightForWidth(int width) const
++void KxkbApplet::paintInterface(QPainter *painter,
++                    const QStyleOptionGraphicsItem *option,
++                                    const QRect& contentsRect)
+ {
+-	return 32;//kxkbWidget->height();
+ }
+--- a/kcontrol/kxkb/kxkbapp.h
++++ b/kcontrol/kxkb/kxkbapp.h
+@@ -27,7 +27,6 @@
+ #define __K_XKBAPP_H__
+ 
+ 
+-
+ #include <kuniqueapplication.h>
+ 
+ #include "kxkbcore.h"
+@@ -42,17 +41,18 @@
+     Q_OBJECT
+ 
+ public:
+-	explicit KXKBApp(bool allowStyles=true, bool GUIenabled=true);
+-	~KXKBApp();
++    explicit KXKBApp(bool allowStyles=true, bool GUIenabled=true);
++    ~KXKBApp();
+ 
+-	virtual int newInstance();
++    virtual int newInstance();
+ 
+-	bool setLayout(const LayoutUnit& layoutUnit, int group=-1);
++    bool isError() { return m_kxkbCore->getStatus() != 0; }
++    bool setLayout(const LayoutUnit& layoutUnit, int group=-1);
+ // External API:
+ public slots:
+- 	bool setLayout(const QString& layoutPair) { return m_kxkbCore->setLayout(layoutPair); }
+-	QString getCurrentLayout() { return m_kxkbCore->getCurrentLayout(); }
+-	QStringList getLayoutsList() { return m_kxkbCore->getLayoutsList(); }
++    bool setLayout(const QString& layoutPair) { return m_kxkbCore->setLayout(layoutPair); }
++    QString getCurrentLayout() { return m_kxkbCore->getCurrentLayout(); }
++    QStringList getLayoutsList() { return m_kxkbCore->getLayoutsList(); }
+ 
+ protected slots:
+     void slotSettingsChanged(int category);
+@@ -63,7 +63,7 @@
+     void layoutApply();
+ 
+ private:
+-	KxkbCore* m_kxkbCore;
++    KxkbCore* m_kxkbCore;
+ };
+ 
+ #endif
+--- a/kcontrol/kxkb/kcmlayoutwidget.ui
++++ b/kcontrol/kxkb/kcmlayoutwidget.ui
+@@ -5,7 +5,7 @@
+    <rect>
+     <x>0</x>
+     <y>0</y>
+-    <width>625</width>
++    <width>630</width>
+     <height>538</height>
+    </rect>
+   </property>
+@@ -31,249 +31,422 @@
+       <attribute name="title" >
+        <string>Layout</string>
+       </attribute>
+-      <layout class="QGridLayout" >
+-       <item row="0" column="0" >
+-        <widget class="QCheckBox" name="chkEnable" >
++      <widget class="QGroupBox" name="grpLayouts" >
++       <property name="geometry" >
++        <rect>
++         <x>10</x>
++         <y>60</y>
++         <width>590</width>
++         <height>431</height>
++        </rect>
++       </property>
++       <property name="whatsThis" >
++        <string>&lt;h1>Keyboard Layout&lt;/h1> Here you can choose your keyboard layout and model. The 'model' refers to the type of keyboard that is connected to your computer, while the keyboard layout defines "which key does what" and may be different for different countries.</string>
++       </property>
++       <property name="title" >
++        <string/>
++       </property>
++       <widget class="QLabel" name="textLabel1_4" >
++        <property name="geometry" >
++         <rect>
++          <x>10</x>
++          <y>100</y>
++          <width>189</width>
++          <height>16</height>
++         </rect>
++        </property>
++        <property name="text" >
++         <string>Available layouts:</string>
++        </property>
++       </widget>
++       <widget class="QLabel" name="textLabel1_4_2" >
++        <property name="geometry" >
++         <rect>
++          <x>210</x>
++          <y>100</y>
++          <width>368</width>
++          <height>16</height>
++         </rect>
++        </property>
++        <property name="text" >
++         <string>Active layouts:</string>
++        </property>
++       </widget>
++       <widget class="QTableView" name="srcTableView" >
++        <property name="geometry" >
++         <rect>
++          <x>11</x>
++          <y>120</y>
++          <width>211</width>
++          <height>271</height>
++         </rect>
++        </property>
++        <property name="selectionMode" >
++         <enum>QAbstractItemView::SingleSelection</enum>
++        </property>
++        <property name="selectionBehavior" >
++         <enum>QAbstractItemView::SelectRows</enum>
++        </property>
++        <property name="cornerButtonEnabled" >
++         <bool>false</bool>
++        </property>
++       </widget>
++       <widget class="QTableView" name="dstTableView" >
++        <property name="geometry" >
++         <rect>
++          <x>223</x>
++          <y>120</y>
++          <width>351</width>
++          <height>171</height>
++         </rect>
++        </property>
++        <property name="selectionMode" >
++         <enum>QAbstractItemView::SingleSelection</enum>
++        </property>
++        <property name="selectionBehavior" >
++         <enum>QAbstractItemView::SelectRows</enum>
++        </property>
++        <property name="showGrid" >
++         <bool>false</bool>
++        </property>
++        <property name="wordWrap" >
++         <bool>false</bool>
++        </property>
++       </widget>
++       <widget class="QLabel" name="textLabel1_3" >
++        <property name="geometry" >
++         <rect>
++          <x>10</x>
++          <y>400</y>
++          <width>92</width>
++          <height>22</height>
++         </rect>
++        </property>
++        <property name="text" >
++         <string>Command:</string>
++        </property>
++        <property name="buddy" >
++         <cstring>editCmdLine</cstring>
++        </property>
++       </widget>
++       <widget class="QLineEdit" name="editCmdLine" >
++        <property name="geometry" >
++         <rect>
++          <x>108</x>
++          <y>400</y>
++          <width>465</width>
++          <height>22</height>
++         </rect>
++        </property>
++        <property name="whatsThis" >
++         <string>This is the command which is executed when switching to the selected layout. It may help you if you want to debug layout switching, or if you want to switch layouts without the help of KDE.</string>
++        </property>
++        <property name="readOnly" >
++         <bool>true</bool>
++        </property>
++       </widget>
++       <widget class="Line" name="line" >
++        <property name="geometry" >
++         <rect>
++          <x>10</x>
++          <y>390</y>
++          <width>571</width>
++          <height>10</height>
++         </rect>
++        </property>
++        <property name="orientation" >
++         <enum>Qt::Horizontal</enum>
++        </property>
++       </widget>
++       <widget class="QWidget" name="layoutWidget" >
++        <property name="geometry" >
++         <rect>
++          <x>223</x>
++          <y>297</y>
++          <width>351</width>
++          <height>28</height>
++         </rect>
++        </property>
++        <layout class="QHBoxLayout" >
++         <property name="spacing" >
++          <number>6</number>
++         </property>
++         <property name="leftMargin" >
++          <number>0</number>
++         </property>
++         <property name="topMargin" >
++          <number>0</number>
++         </property>
++         <property name="rightMargin" >
++          <number>0</number>
++         </property>
++         <property name="bottomMargin" >
++          <number>0</number>
++         </property>
++         <item>
++          <widget class="QPushButton" name="btnAdd" >
++           <property name="text" >
++            <string>Add >></string>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <widget class="QPushButton" name="btnRemove" >
++           <property name="text" >
++            <string>&lt;&lt; Remove</string>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <widget class="QPushButton" name="btnUp" >
++           <property name="sizePolicy" >
++            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
++             <horstretch>0</horstretch>
++             <verstretch>0</verstretch>
++            </sizepolicy>
++           </property>
++           <property name="text" >
++            <string/>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <widget class="QPushButton" name="btnDown" >
++           <property name="sizePolicy" >
++            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
++             <horstretch>0</horstretch>
++             <verstretch>0</verstretch>
++            </sizepolicy>
++           </property>
++           <property name="text" >
++            <string/>
++           </property>
++          </widget>
++         </item>
++        </layout>
++       </widget>
++       <widget class="QWidget" name="layoutWidget" >
++        <property name="geometry" >
++         <rect>
++          <x>226</x>
++          <y>332</y>
++          <width>351</width>
++          <height>30</height>
++         </rect>
++        </property>
++        <layout class="QHBoxLayout" >
++         <item>
++          <widget class="QLabel" name="textLabel1" >
++           <property name="text" >
++            <string>Layout variant:</string>
++           </property>
++           <property name="buddy" >
++            <cstring>comboVariant</cstring>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <widget class="QComboBox" name="comboVariant" >
++           <property name="whatsThis" >
++            <string>Here you can choose a variant of selected keyboard layout. Layout variants usually represent different key maps for the same language. For example, Ukrainian layout might have four variants: basic, winkeys (as in Windows), typewriter (as in typewriters) and phonetic (each Ukrainian letter is placed on a transliterated latin one).
++</string>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <spacer>
++           <property name="orientation" >
++            <enum>Qt::Horizontal</enum>
++           </property>
++           <property name="sizeType" >
++            <enum>QSizePolicy::Expanding</enum>
++           </property>
++           <property name="sizeHint" >
++            <size>
++             <width>210</width>
++             <height>20</height>
++            </size>
++           </property>
++          </spacer>
++         </item>
++        </layout>
++       </widget>
++       <widget class="QWidget" name="layoutWidget" >
++        <property name="geometry" >
++         <rect>
++          <x>230</x>
++          <y>360</y>
++          <width>351</width>
++          <height>30</height>
++         </rect>
++        </property>
++        <layout class="QHBoxLayout" >
++         <item>
++          <widget class="QLabel" name="textLabel1_6" >
++           <property name="text" >
++            <string>Label:</string>
++           </property>
++           <property name="buddy" >
++            <cstring>editDisplayName</cstring>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <widget class="QLineEdit" name="editDisplayName" >
++           <property name="enabled" >
++            <bool>false</bool>
++           </property>
++           <property name="maxLength" >
++            <number>3</number>
++           </property>
++          </widget>
++         </item>
++         <item>
++          <spacer>
++           <property name="orientation" >
++            <enum>Qt::Horizontal</enum>
++           </property>
++           <property name="sizeType" >
++            <enum>QSizePolicy::Expanding</enum>
++           </property>
++           <property name="sizeHint" >
++            <size>
++             <width>210</width>
++             <height>20</height>
++            </size>
++           </property>
++          </spacer>
++         </item>
++        </layout>
++       </widget>
++       <widget class="QGroupBox" name="groupBox_2" >
++        <property name="geometry" >
++         <rect>
++          <x>309</x>
++          <y>20</y>
++          <width>261</width>
++          <height>61</height>
++         </rect>
++        </property>
++        <property name="title" >
++         <string/>
++        </property>
++        <widget class="QLabel" name="textLabel1_2" >
++         <property name="geometry" >
++          <rect>
++           <x>10</x>
++           <y>0</y>
++           <width>111</width>
++           <height>20</height>
++          </rect>
++         </property>
+          <property name="text" >
+-          <string>&amp;Enable keyboard layouts</string>
++          <string>Keyboard &amp;model:</string>
+          </property>
+-         <property name="checked" >
+-          <bool>true</bool>
++         <property name="buddy" >
++          <cstring>comboModel</cstring>
+          </property>
+         </widget>
+-       </item>
+-       <item row="1" column="0" >
+-        <widget class="Q3GroupBox" name="grpLayouts" >
++        <widget class="QComboBox" name="comboModel" >
++         <property name="geometry" >
++          <rect>
++           <x>10</x>
++           <y>30</y>
++           <width>241</width>
++           <height>21</height>
++          </rect>
++         </property>
++         <property name="sizePolicy" >
++          <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
++           <horstretch>0</horstretch>
++           <verstretch>0</verstretch>
++          </sizepolicy>
++         </property>
+          <property name="whatsThis" >
+-          <string>&lt;h1>Keyboard Layout&lt;/h1> Here you can choose your keyboard layout and model. The 'model' refers to the type of keyboard that is connected to your computer, while the keyboard layout defines "which key does what" and may be different for different countries.</string>
++          <string>Here you can choose a keyboard model. This setting is independent of your keyboard layout and refers to the "hardware" model, i.e. the way your keyboard is manufactured. Modern keyboards that come with your computer usually have two extra keys and are referred to as "104-key" models, which is probably what you want if you do not know what kind of keyboard you have.
++</string>
+          </property>
+-         <property name="title" >
+-          <string/>
++        </widget>
++       </widget>
++       <widget class="QGroupBox" name="grpOptions" >
++        <property name="geometry" >
++         <rect>
++          <x>10</x>
++          <y>10</y>
++          <width>291</width>
++          <height>71</height>
++         </rect>
++        </property>
++        <property name="title" >
++         <string>Indicator Options</string>
++        </property>
++        <widget class="QCheckBox" name="chkShowFlag" >
++         <property name="geometry" >
++          <rect>
++           <x>10</x>
++           <y>40</y>
++           <width>261</width>
++           <height>22</height>
++          </rect>
+          </property>
+-         <property name="orientation" >
+-          <enum>Qt::Vertical</enum>
++         <property name="whatsThis" >
++          <string>Shows country flag on background of layout name in tray icon</string>
++         </property>
++         <property name="text" >
++          <string>Show country flag</string>
++         </property>
++         <property name="checked" >
++          <bool>true</bool>
+          </property>
+-         <layout class="QGridLayout" >
+-          <item row="0" column="2" colspan="3" >
+-           <widget class="QLabel" name="textLabel1_2" >
+-            <property name="text" >
+-             <string>Keyboard &amp;model:</string>
+-            </property>
+-            <property name="buddy" >
+-             <cstring>comboModel</cstring>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="1" column="2" colspan="3" >
+-           <widget class="QComboBox" name="comboModel" >
+-            <property name="sizePolicy" >
+-             <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+-              <horstretch>0</horstretch>
+-              <verstretch>0</verstretch>
+-             </sizepolicy>
+-            </property>
+-            <property name="whatsThis" >
+-             <string>Here you can choose a keyboard model. This setting is independent of your keyboard layout and refers to the "hardware" model, i.e. the way your keyboard is manufactured. Modern keyboards that come with your computer usually have two extra keys and are referred to as "104-key" models, which is probably what you want if you do not know what kind of keyboard you have.
+-</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="2" column="0" colspan="2" >
+-           <widget class="QLabel" name="textLabel1_4" >
+-            <property name="text" >
+-             <string>Available layouts:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="2" column="2" colspan="3" >
+-           <widget class="QLabel" name="textLabel1_4_2" >
+-            <property name="text" >
+-             <string>Active layouts:</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="3" column="0" colspan="2" >
+-           <widget class="QTableView" name="srcTableView" >
+-            <property name="selectionMode" >
+-             <enum>QAbstractItemView::SingleSelection</enum>
+-            </property>
+-            <property name="selectionBehavior" >
+-             <enum>QAbstractItemView::SelectRows</enum>
+-            </property>
+-            <property name="cornerButtonEnabled" >
+-             <bool>false</bool>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="3" column="2" colspan="3" >
+-           <widget class="QTableView" name="dstTableView" >
+-            <property name="selectionMode" >
+-             <enum>QAbstractItemView::SingleSelection</enum>
+-            </property>
+-            <property name="selectionBehavior" >
+-             <enum>QAbstractItemView::SelectRows</enum>
+-            </property>
+-            <property name="showGrid" >
+-             <bool>false</bool>
+-            </property>
+-            <property name="wordWrap" >
+-             <bool>false</bool>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="4" column="2" colspan="3" >
+-           <layout class="QHBoxLayout" >
+-            <property name="spacing" >
+-             <number>6</number>
+-            </property>
+-            <property name="leftMargin" >
+-             <number>0</number>
+-            </property>
+-            <property name="topMargin" >
+-             <number>0</number>
+-            </property>
+-            <property name="rightMargin" >
+-             <number>0</number>
+-            </property>
+-            <property name="bottomMargin" >
+-             <number>0</number>
+-            </property>
+-            <item>
+-             <widget class="QPushButton" name="btnAdd" >
+-              <property name="text" >
+-               <string>Add >></string>
+-              </property>
+-             </widget>
+-            </item>
+-            <item>
+-             <widget class="QPushButton" name="btnRemove" >
+-              <property name="text" >
+-               <string>&lt;&lt; Remove</string>
+-              </property>
+-             </widget>
+-            </item>
+-            <item>
+-             <widget class="QPushButton" name="btnUp" >
+-              <property name="sizePolicy" >
+-               <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="text" >
+-               <string/>
+-              </property>
+-             </widget>
+-            </item>
+-            <item>
+-             <widget class="QPushButton" name="btnDown" >
+-              <property name="sizePolicy" >
+-               <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+-                <horstretch>0</horstretch>
+-                <verstretch>0</verstretch>
+-               </sizepolicy>
+-              </property>
+-              <property name="text" >
+-               <string/>
+-              </property>
+-             </widget>
+-            </item>
+-           </layout>
+-          </item>
+-          <item row="5" column="2" >
+-           <widget class="QLabel" name="textLabel1" >
+-            <property name="text" >
+-             <string>Layout variant:</string>
+-            </property>
+-            <property name="buddy" >
+-             <cstring>comboVariant</cstring>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="5" column="3" >
+-           <widget class="QComboBox" name="comboVariant" >
+-            <property name="whatsThis" >
+-             <string>Here you can choose a variant of selected keyboard layout. Layout variants usually represent different key maps for the same language. For example, Ukrainian layout might have four variants: basic, winkeys (as in Windows), typewriter (as in typewriters) and phonetic (each Ukrainian letter is placed on a transliterated latin one).
+-</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="5" column="4" >
+-           <spacer>
+-            <property name="orientation" >
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeType" >
+-             <enum>QSizePolicy::Expanding</enum>
+-            </property>
+-            <property name="sizeHint" >
+-             <size>
+-              <width>210</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item row="6" column="2" >
+-           <widget class="QLabel" name="textLabel1_6" >
+-            <property name="text" >
+-             <string>Label:</string>
+-            </property>
+-            <property name="buddy" >
+-             <cstring>editDisplayName</cstring>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="6" column="3" >
+-           <widget class="QLineEdit" name="editDisplayName" >
+-            <property name="enabled" >
+-             <bool>false</bool>
+-            </property>
+-            <property name="maxLength" >
+-             <number>3</number>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="6" column="4" >
+-           <spacer>
+-            <property name="orientation" >
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeType" >
+-             <enum>QSizePolicy::Expanding</enum>
+-            </property>
+-            <property name="sizeHint" >
+-             <size>
+-              <width>210</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item row="7" column="0" >
+-           <widget class="QLabel" name="textLabel1_3" >
+-            <property name="text" >
+-             <string>Command:</string>
+-            </property>
+-            <property name="buddy" >
+-             <cstring>editCmdLine</cstring>
+-            </property>
+-           </widget>
+-          </item>
+-          <item row="7" column="1" colspan="4" >
+-           <widget class="QLineEdit" name="editCmdLine" >
+-            <property name="whatsThis" >
+-             <string>This is the command which is executed when switching to the selected layout. It may help you if you want to debug layout switching, or if you want to switch layouts without the help of KDE.</string>
+-            </property>
+-            <property name="readOnly" >
+-             <bool>true</bool>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+         </widget>
+-       </item>
+-      </layout>
++        <widget class="QCheckBox" name="chkShowSingle" >
++         <property name="geometry" >
++          <rect>
++           <x>10</x>
++           <y>20</y>
++           <width>241</width>
++           <height>22</height>
++          </rect>
++         </property>
++         <property name="text" >
++          <string>Show indicator for single layout</string>
++         </property>
++        </widget>
++       </widget>
++      </widget>
++      <widget class="KButtonGroup" name="grpEnableKxkb" >
++       <property name="geometry" >
++        <rect>
++         <x>10</x>
++         <y>10</y>
++         <width>591</width>
++         <height>44</height>
++        </rect>
++       </property>
++       <layout class="QHBoxLayout" >
++        <item>
++         <widget class="QRadioButton" name="radioButton" >
++          <property name="text" >
++           <string>&amp;Enable keyboard layouts</string>
++          </property>
++         </widget>
++        </item>
++        <item>
++         <widget class="QRadioButton" name="radioButton_2" >
++          <property name="text" >
++           <string>Indicator only</string>
++          </property>
++         </widget>
++        </item>
++        <item>
++         <widget class="QRadioButton" name="radioButton_3" >
++          <property name="text" >
++           <string>Disable keyboard layouts</string>
++          </property>
++         </widget>
++        </item>
++       </layout>
++      </widget>
+      </widget>
+      <widget class="QWidget" name="tab" >
+       <attribute name="title" >
+@@ -291,257 +464,254 @@
+          <property name="lineWidth" >
+           <number>0</number>
+          </property>
+-         <layout class="QGridLayout" >
+-          <item row="0" column="0" colspan="2" >
+-           <widget class="QGroupBox" name="grpOptions" >
+-            <property name="title" >
+-             <string>Options</string>
+-            </property>
+-            <widget class="QCheckBox" name="chkShowFlag" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>10</x>
+-               <y>70</y>
+-               <width>556</width>
+-               <height>22</height>
+-              </rect>
+-             </property>
+-             <property name="whatsThis" >
+-              <string>Shows country flag on background of layout name in tray icon</string>
+-             </property>
++         <widget class="KButtonGroup" name="grpSwitching" >
++          <property name="geometry" >
++           <rect>
++            <x>11</x>
++            <y>10</y>
++            <width>276</width>
++            <height>146</height>
++           </rect>
++          </property>
++          <property name="whatsThis" >
++           <string>If you select "Application" or "Window" switching policy, changing the keyboard layout will only affect the current application or window.</string>
++          </property>
++          <property name="title" >
++           <string>Switching Policy</string>
++          </property>
++          <layout class="QGridLayout" >
++           <item row="0" column="0" >
++            <widget class="QRadioButton" name="rdBtnSwitchGlobal" >
+              <property name="text" >
+-              <string>Show country flag</string>
++              <string>&amp;Global</string>
+              </property>
+              <property name="checked" >
+               <bool>true</bool>
+              </property>
+             </widget>
+-            <widget class="QCheckBox" name="chkIndicatorOnly" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>9</x>
+-               <y>16</y>
+-               <width>341</width>
+-               <height>22</height>
+-              </rect>
+-             </property>
++           </item>
++           <item row="1" column="0" >
++            <widget class="QRadioButton" name="rdBtnSwitchPerDesktop" >
+              <property name="text" >
+-              <string>Indicator only</string>
++              <string>Desktop</string>
+              </property>
+             </widget>
+-            <widget class="QCheckBox" name="chkShowSingle" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>10</x>
+-               <y>40</y>
+-               <width>556</width>
+-               <height>22</height>
+-              </rect>
+-             </property>
++           </item>
++           <item row="2" column="0" >
++            <widget class="QRadioButton" name="rdBtnSwitchPerApp" >
+              <property name="text" >
+-              <string>Show indicator for single layout</string>
++              <string>Application</string>
+              </property>
+             </widget>
+-           </widget>
+-          </item>
+-          <item row="1" column="0" >
+-           <widget class="Q3ButtonGroup" name="grpSwitching" >
+-            <property name="whatsThis" >
+-             <string>If you select "Application" or "Window" switching policy, changing the keyboard layout will only affect the current application or window.</string>
+-            </property>
+-            <property name="title" >
+-             <string>Switching Policy</string>
+-            </property>
+-            <property name="orientation" >
+-             <enum>Qt::Vertical</enum>
+-            </property>
+-            <property name="exclusive" >
+-             <bool>true</bool>
+-            </property>
+-            <layout class="QGridLayout" >
+-             <item row="0" column="0" >
+-              <widget class="QRadioButton" name="rdBtnSwitchGlobal" >
+-               <property name="text" >
+-                <string>&amp;Global</string>
+-               </property>
+-               <property name="checked" >
+-                <bool>true</bool>
+-               </property>
+-              </widget>
+-             </item>
+-             <item row="1" column="0" >
+-              <widget class="QRadioButton" name="rdBtnSwitchPerDesktop" >
+-               <property name="text" >
+-                <string>Desktop</string>
+-               </property>
+-              </widget>
+-             </item>
+-             <item row="2" column="0" >
+-              <widget class="QRadioButton" name="rdBtnSwitchPerApp" >
+-               <property name="text" >
+-                <string>Application</string>
+-               </property>
+-              </widget>
+-             </item>
+-             <item row="3" column="0" >
+-              <widget class="QRadioButton" name="rdBtnSwitchPerWin" >
+-               <property name="text" >
+-                <string>&amp;Window</string>
+-               </property>
+-              </widget>
+-             </item>
+-            </layout>
+-           </widget>
+-          </item>
+-          <item row="1" column="1" >
+-           <widget class="QGroupBox" name="grpBoxStickySwitching" >
+-            <property name="title" >
+-             <string>Sticky Switching</string>
+-            </property>
+-            <layout class="QGridLayout" >
+-             <property name="leftMargin" >
+-              <number>11</number>
+-             </property>
+-             <property name="topMargin" >
+-              <number>11</number>
+-             </property>
+-             <property name="rightMargin" >
+-              <number>11</number>
+-             </property>
+-             <property name="bottomMargin" >
+-              <number>11</number>
+-             </property>
+-             <property name="horizontalSpacing" >
+-              <number>6</number>
+-             </property>
+-             <property name="verticalSpacing" >
+-              <number>6</number>
+-             </property>
+-             <item row="0" column="0" colspan="2" >
+-              <widget class="QCheckBox" name="chkEnableSticky" >
+-               <property name="whatsThis" >
+-                <string>If you have more than two layouts and turn this option on, switching with the keyboard shortcut or clicking on the kxkb indicator will only cycle through the last few layouts. You can specify the number of layouts to rotate below. You can still access all layouts by right-clicking on the kxkb indicator.</string>
+-               </property>
+-               <property name="text" >
+-                <string>Enable sticky switching</string>
+-               </property>
+-              </widget>
+-             </item>
+-             <item row="1" column="0" >
+-              <widget class="QLabel" name="textLabel1_5" >
+-               <property name="enabled" >
+-                <bool>false</bool>
+-               </property>
+-               <property name="text" >
+-                <string>Number of layouts to rotate:</string>
+-               </property>
+-               <property name="buddy" >
+-                <cstring>spinBox1</cstring>
+-               </property>
+-              </widget>
+-             </item>
+-             <item row="1" column="1" >
+-              <widget class="QSpinBox" name="spinStickyDepth" >
+-               <property name="enabled" >
+-                <bool>false</bool>
+-               </property>
+-               <property name="minimum" >
+-                <number>2</number>
+-               </property>
+-               <property name="maximum" >
+-                <number>10</number>
+-               </property>
+-              </widget>
+-             </item>
+-            </layout>
+-           </widget>
+-          </item>
+-          <item row="2" column="0" >
+-           <widget class="QGroupBox" name="grpShortcuts" >
+-            <property name="title" >
+-             <string>Shortcuts</string>
+-            </property>
+-            <widget class="QRadioButton" name="rdCtrlShift" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>10</x>
+-               <y>20</y>
+-               <width>100</width>
+-               <height>23</height>
+-              </rect>
+-             </property>
++           </item>
++           <item row="3" column="0" >
++            <widget class="QRadioButton" name="rdBtnSwitchPerWin" >
+              <property name="text" >
+-              <string>Ctrl+Shift</string>
++              <string>&amp;Window</string>
+              </property>
+             </widget>
+-            <widget class="QRadioButton" name="rdAltShift" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>10</x>
+-               <y>80</y>
+-               <width>100</width>
+-               <height>23</height>
+-              </rect>
++           </item>
++          </layout>
++         </widget>
++         <widget class="QGroupBox" name="grpBoxStickySwitching" >
++          <property name="geometry" >
++           <rect>
++            <x>10</x>
++            <y>170</y>
++            <width>276</width>
++            <height>146</height>
++           </rect>
++          </property>
++          <property name="title" >
++           <string>Sticky Switching</string>
++          </property>
++          <layout class="QGridLayout" >
++           <property name="leftMargin" >
++            <number>11</number>
++           </property>
++           <property name="topMargin" >
++            <number>11</number>
++           </property>
++           <property name="rightMargin" >
++            <number>11</number>
++           </property>
++           <property name="bottomMargin" >
++            <number>11</number>
++           </property>
++           <property name="horizontalSpacing" >
++            <number>6</number>
++           </property>
++           <property name="verticalSpacing" >
++            <number>6</number>
++           </property>
++           <item row="0" column="0" colspan="2" >
++            <widget class="QCheckBox" name="chkEnableSticky" >
++             <property name="whatsThis" >
++              <string>If you have more than two layouts and turn this option on, switching with the keyboard shortcut or clicking on the kxkb indicator will only cycle through the last few layouts. You can specify the number of layouts to rotate below. You can still access all layouts by right-clicking on the kxkb indicator.</string>
+              </property>
+              <property name="text" >
+-              <string>Alt+Shift</string>
++              <string>Enable sticky switching</string>
+              </property>
+             </widget>
+-            <widget class="QRadioButton" name="rdCtrlCtrl" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>140</x>
+-               <y>20</y>
+-               <width>100</width>
+-               <height>23</height>
+-              </rect>
++           </item>
++           <item row="1" column="0" >
++            <widget class="QLabel" name="textLabel1_5" >
++             <property name="enabled" >
++              <bool>false</bool>
+              </property>
+              <property name="text" >
+-              <string>Ctrl+Ctrl</string>
++              <string>Number of layouts to rotate:</string>
+              </property>
+-            </widget>
+-            <widget class="QRadioButton" name="rdShiftShift" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>140</x>
+-               <y>50</y>
+-               <width>100</width>
+-               <height>23</height>
+-              </rect>
+-             </property>
+-             <property name="text" >
+-              <string>Shift+Shift</string>
++             <property name="buddy" >
++              <cstring>spinBox1</cstring>
+              </property>
+             </widget>
+-            <widget class="QRadioButton" name="rdAltAlt" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>140</x>
+-               <y>80</y>
+-               <width>100</width>
+-               <height>23</height>
+-              </rect>
++           </item>
++           <item row="1" column="1" >
++            <widget class="QSpinBox" name="spinStickyDepth" >
++             <property name="enabled" >
++              <bool>false</bool>
+              </property>
+-             <property name="text" >
+-              <string>Alt+Alt</string>
++             <property name="minimum" >
++              <number>2</number>
+              </property>
+-            </widget>
+-            <widget class="QRadioButton" name="rdAltCtrl" >
+-             <property name="geometry" >
+-              <rect>
+-               <x>10</x>
+-               <y>50</y>
+-               <width>100</width>
+-               <height>23</height>
+-              </rect>
+-             </property>
+-             <property name="text" >
+-              <string>Alt+Ctrl</string>
++             <property name="maximum" >
++              <number>10</number>
+              </property>
+             </widget>
+-           </widget>
+-          </item>
+-         </layout>
++           </item>
++          </layout>
++         </widget>
++         <widget class="QGroupBox" name="groupBox" >
++          <property name="geometry" >
++           <rect>
++            <x>300</x>
++            <y>10</y>
++            <width>261</width>
++            <height>141</height>
++           </rect>
++          </property>
++          <property name="title" >
++           <string>Shortcuts for switching layout</string>
++          </property>
++          <widget class="QLabel" name="label" >
++           <property name="geometry" >
++            <rect>
++             <x>10</x>
++             <y>50</y>
++             <width>51</width>
++             <height>20</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>X.org</string>
++           </property>
++          </widget>
++          <widget class="QLabel" name="xkbShortcut" >
++           <property name="geometry" >
++            <rect>
++             <x>74</x>
++             <y>50</y>
++             <width>81</width>
++             <height>20</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>Not defined</string>
++           </property>
++          </widget>
++          <widget class="QPushButton" name="btnXkbShortcut" >
++           <property name="geometry" >
++            <rect>
++             <x>170</x>
++             <y>50</y>
++             <width>75</width>
++             <height>26</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>...</string>
++           </property>
++          </widget>
++          <widget class="QLabel" name="label_2" >
++           <property name="geometry" >
++            <rect>
++             <x>10</x>
++             <y>20</y>
++             <width>51</width>
++             <height>20</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>KDE</string>
++           </property>
++          </widget>
++          <widget class="QPushButton" name="btnKdeShortcut" >
++           <property name="geometry" >
++            <rect>
++             <x>170</x>
++             <y>20</y>
++             <width>75</width>
++             <height>26</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>...</string>
++           </property>
++          </widget>
++          <widget class="QLabel" name="kdeShortcut" >
++           <property name="geometry" >
++            <rect>
++             <x>74</x>
++             <y>20</y>
++             <width>81</width>
++             <height>20</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>Not defined</string>
++           </property>
++          </widget>
++          <widget class="QPushButton" name="btnXkbShortcut3d" >
++           <property name="geometry" >
++            <rect>
++             <x>171</x>
++             <y>80</y>
++             <width>74</width>
++             <height>26</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>...</string>
++           </property>
++          </widget>
++          <widget class="QLabel" name="label_3" >
++           <property name="geometry" >
++            <rect>
++             <x>10</x>
++             <y>80</y>
++             <width>51</width>
++             <height>20</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>3d level</string>
++           </property>
++          </widget>
++          <widget class="QLabel" name="xkbShortcut3d" >
++           <property name="geometry" >
++            <rect>
++             <x>75</x>
++             <y>80</y>
++             <width>80</width>
++             <height>20</height>
++            </rect>
++           </property>
++           <property name="text" >
++            <string>Not defined</string>
++           </property>
++          </widget>
++         </widget>
+         </widget>
+        </item>
+       </layout>
+@@ -562,16 +732,13 @@
+         </widget>
+        </item>
+        <item>
+-        <widget class="Q3GroupBox" name="groupBox3_2" >
++        <widget class="QGroupBox" name="groupBox3_2" >
+          <property name="whatsThis" >
+           <string>Here you can set xkb extension options instead of, or in addition to, specifying them in the X11 configuration file.</string>
+          </property>
+          <property name="title" >
+           <string>Xkb Options</string>
+          </property>
+-         <property name="orientation" >
+-          <enum>Qt::Vertical</enum>
+-         </property>
+          <layout class="QGridLayout" >
+           <item row="0" column="0" colspan="2" >
+            <widget class="QCheckBox" name="checkResetOld" >
+@@ -580,29 +747,27 @@
+             </property>
+            </widget>
+           </item>
+-          <item row="2" column="0" >
++          <item row="2" column="0" colspan="2" >
++           <widget class="QTreeView" name="xkbOptionsTreeView" >
++            <property name="selectionMode" >
++             <enum>QAbstractItemView::NoSelection</enum>
++            </property>
++           </widget>
++          </item>
++          <item row="3" column="0" >
+            <widget class="QLabel" name="textLabel1_3_2" >
+             <property name="text" >
+              <string>Command:</string>
+             </property>
+            </widget>
+           </item>
+-          <item row="2" column="1" >
++          <item row="3" column="1" >
+            <widget class="QLineEdit" name="editCmdLineOpt" >
+             <property name="readOnly" >
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+-          <item row="1" column="0" colspan="2" >
+-           <widget class="Q3ListView" name="listOptions" >
+-            <column>
+-             <property name="text" >
+-              <string>Options</string>
+-             </property>
+-            </column>
+-           </widget>
+-          </item>
+          </layout>
+         </widget>
+        </item>
+@@ -617,42 +782,15 @@
+  <pixmapfunction>SmallIcon</pixmapfunction>
+  <customwidgets>
+   <customwidget>
+-   <class>Q3GroupBox</class>
++   <class>KButtonGroup</class>
+    <extends>QGroupBox</extends>
+-   <header>Qt3Support/Q3GroupBox</header>
+-   <container>1</container>
+-  </customwidget>
+-  <customwidget>
+-   <class>Q3ButtonGroup</class>
+-   <extends>Q3GroupBox</extends>
+-   <header>Qt3Support/Q3ButtonGroup</header>
++   <header>kbuttongroup.h</header>
+    <container>1</container>
+   </customwidget>
+-  <customwidget>
+-   <class>Q3ListView</class>
+-   <extends>Q3Frame</extends>
+-   <header>q3listview.h</header>
+-  </customwidget>
+  </customwidgets>
+  <resources/>
+  <connections>
+   <connection>
+-   <sender>chkEnable</sender>
+-   <signal>toggled(bool)</signal>
+-   <receiver>grpLayouts</receiver>
+-   <slot>setEnabled(bool)</slot>
+-   <hints>
+-    <hint type="sourcelabel" >
+-     <x>20</x>
+-     <y>20</y>
+-    </hint>
+-    <hint type="destinationlabel" >
+-     <x>20</x>
+-     <y>20</y>
+-    </hint>
+-   </hints>
+-  </connection>
+-  <connection>
+    <sender>chkEnableOptions</sender>
+    <signal>toggled(bool)</signal>
+    <receiver>groupBox3_2</receiver>
+@@ -700,21 +838,5 @@
+     </hint>
+    </hints>
+   </connection>
+-  <connection>
+-   <sender>chkEnable</sender>
+-   <signal>toggled(bool)</signal>
+-   <receiver>optionsFrame</receiver>
+-   <slot>setEnabled(bool)</slot>
+-   <hints>
+-    <hint type="sourcelabel" >
+-     <x>20</x>
+-     <y>20</y>
+-    </hint>
+-    <hint type="destinationlabel" >
+-     <x>20</x>
+-     <y>20</y>
+-    </hint>
+-   </hints>
+-  </connection>
+  </connections>
+ </ui>
+--- a/kcontrol/kxkb/kxkbwidget.h
++++ b/kcontrol/kxkb/kxkbwidget.h
+@@ -41,12 +41,12 @@
+ */
+ class KxkbWidget : public QObject
+ {
+- 	Q_OBJECT
++    Q_OBJECT
+ 			
+ public:
+-	enum { INDICATOR_ONLY=1, NO_MENU = 2, MENU_LAYOUTS_ONLY = 3, MENU_FULL=4 };
+-
+-	enum { START_MENU_ID = 100, CONFIG_MENU_ID = 130, HELP_MENU_ID = 131 };
++    enum { START_MENU_ID = 100, CONFIG_MENU_ID = 130, HELP_MENU_ID = 131 };
++    enum { INDICATOR_ONLY=1, NO_MENU = 2, MENU_LAYOUTS_ONLY = 3, MENU_FULL=4 };
++    enum { WIDGET_TRAY=0, WIDGET_LABEL=1 };
+ 
+     void initLayoutList(const QList<LayoutUnit>& layouts, const XkbRules& rule);
+     void setCurrentLayout(const LayoutUnit& layout);
+@@ -55,22 +55,22 @@
+     void setShowFlag(bool showFlag) { m_showFlag = showFlag; }
+ 	
+ signals:
+-	void menuTriggered(QAction*);
+-	void iconToggled();
++    void menuTriggered(QAction*);
++    void iconToggled();
+ 
+ protected:
+-	KxkbWidget(int controlType = MENU_FULL);
+-	virtual QMenu* contextMenu() = 0;
+-	virtual void setToolTip(const QString& tip) = 0;
+-	virtual void setPixmap(const QPixmap& pixmap) = 0;
+-	virtual void setText(const QString& text) = 0;
+-
+-private:
+-	int m_controlType;
+-	bool m_showFlag;
+-	QMap<QString, QString> m_descriptionMap;
+-	QList<QAction*> m_actions;
+-	QAction* m_configSeparator;
++    KxkbWidget(int controlType = MENU_FULL);
++    virtual QMenu* contextMenu() = 0;
++    virtual void setToolTip(const QString& tip) = 0;
++    virtual void setPixmap(const QPixmap& pixmap) = 0;
++    virtual void setText(const QString& text) = 0;
++
++private:    
++    int m_controlType;
++    bool m_showFlag;
++    QMap<QString, QString> m_descriptionMap;
++    QList<QAction*> m_actions;
++    QAction* m_configSeparator;
+ };
+ 
+ 
+@@ -79,20 +79,20 @@
+ */
+ class KxkbSysTrayIcon : public KxkbWidget
+ {
+-	Q_OBJECT
++    Q_OBJECT
+ 
+ public:
+-	KxkbSysTrayIcon(int controlType=MENU_FULL);
+-	~KxkbSysTrayIcon() { delete m_indicatorWidget; }
++    KxkbSysTrayIcon(int controlType=MENU_FULL);
++    ~KxkbSysTrayIcon() { delete m_indicatorWidget; }
+ 
+ protected:
+-	QMenu* contextMenu() { return m_indicatorWidget->contextMenu(); }
+-	void setToolTip(const QString& tip) { m_indicatorWidget->setToolTip(tip); }
+-	void setPixmap(const QPixmap& pixmap);
+-	void setText(const QString& text) { } //m_indicatorWidget->setText(text); }
++    QMenu* contextMenu() { return m_indicatorWidget->contextMenu(); }
++    void setToolTip(const QString& tip) { m_indicatorWidget->setToolTip(tip); }
++    void setPixmap(const QPixmap& pixmap);
++    void setText(const QString& /*text*/) { } //m_indicatorWidget->setText(text); }
+ 
+ protected slots:
+-	void trayActivated(QSystemTrayIcon::ActivationReason);
++    void trayActivated(QSystemTrayIcon::ActivationReason);
+ 
+ private:
+     KSystemTrayIcon* m_indicatorWidget;
+--- a/kcontrol/kxkb/x11helper.cpp
++++ b/kcontrol/kxkb/x11helper.cpp
+@@ -16,10 +16,8 @@
+  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+  */
+ 
+-#include <QtGui/QWidgetList>
+ #include <QDir>
+ 
+-
+ #include <QHash>
+ #include <QRegExp>
+ #include <QTextStream>
+@@ -293,7 +291,7 @@
+ const QString X11Helper::X11_WIN_CLASS_UNKNOWN = "<unknown>";
+ 
+ QString
+-X11Helper::getWindowClass(WId winId, Display* dpy)
++X11Helper::getWindowClass(Window winId, Display* dpy)
+ {
+   unsigned long nitems_ret, bytes_after_ret;
+   unsigned char* prop_ret;
+--- a/kcontrol/kxkb/kxkbcore.h
++++ b/kcontrol/kxkb/kxkbcore.h
+@@ -27,17 +27,17 @@
+ #define __KXKBCORE_H__
+ 
+ 
+-
+ #include <QHash>
+ #include <QQueue>
+ 
+ #include "kxkbconfig.h"
++#include "kxkbwidget.h"
+ 
+ class XKBExtension;
+ class XkbRules;
+ class KActionCollection;
+ class LayoutMap;
+-class KxkbWidget;
++//class KxkbWidget;
+ class QAction;
+ 
+ /* This is the main Kxkb class responsible for reading options
+@@ -49,13 +49,14 @@
+     Q_OBJECT
+ 
+ public:
+-    enum { NORMAL=1, NO_INIT=2 };
++    enum { KXKB_MAIN=1, KXKB_COMPONENT=2 };
+ 
+-    KxkbCore(KxkbWidget* kxkbWidget, int mode=NORMAL);
++    KxkbCore(QWidget* parentWidget, int mode=KXKB_MAIN, int controlType=KxkbWidget::MENU_FULL, int widgetType=KxkbWidget::WIDGET_TRAY);
+     ~KxkbCore();
+ 
+     virtual int newInstance();
+     bool setLayout(int layout);
++    int getStatus() { return m_status; }
+     bool x11EventFilter ( XEvent * event );
+ 
+ // DBUS:
+@@ -66,13 +67,13 @@
+ 
+ protected slots:
+     void iconMenuTriggered(QAction*);
+-    void iconToggled();
++    void toggled();
+     void windowChanged(WId winId);
++    void desktopChanged(int desktop);
+ 
+     void slotSettingsChanged(int category);
+ 
+ protected:
+-    // Read settings, and apply them.
+     bool settingsRead();
+     void layoutApply();
+     
+@@ -80,22 +81,27 @@
+     void quit();
+ 		
+ private:
+-    KxkbConfig m_kxkbConfig;
+-
+-//     WId m_prevWinId;	// for tricky part of saving xkb group
+-    LayoutMap* m_layoutOwnerMap;
+-    
+     int m_mode;
+     int m_currentLayout;
++    int m_controlType;
++    int m_widgetType;
++    int m_status;
+ 
++    KxkbConfig m_kxkbConfig;
++    LayoutMap* m_layoutOwnerMap;
++    
+     XKBExtension *m_extension;
+     XkbRules *m_rules;
++    QWidget *m_parentWidget;
+     KxkbWidget *m_kxkbWidget;
+-    KActionCollection *m_keys;
++    KActionCollection *m_actions;
+     
+     void updateIndicator(int layout, int res);
+     void initTray();
+-    void setLayoutGroups();
++    void initKeys();
++    void initWidget();
++    void initLayoutGroups();
++    void initSwitchingPolicy();
+     int updateGroupsFromServer();
+ };
+ 
+--- a/kcontrol/kxkb/kcmlayout.h
++++ b/kcontrol/kxkb/kcmlayout.h
+@@ -20,24 +20,19 @@
+ #define __KCM_LAYOUT_H__
+ 
+ 
+-#include <kcmodule.h>
+-
+ #include <QHash>
+-
+-#include <QtGui/QListView>
++#include <kcmodule.h>
+ 
+ #include "kxkbconfig.h"
+ 
+ 
+ class QWidget;
+-class OptionListItem;
+-class Q3ListViewItem;
+ class Ui_LayoutConfigWidget;
+ class XkbRules;
+ 
+-
+ class SrcLayoutModel;
+ class DstLayoutModel;
++class XkbOptionsModel;
+ 
+ class LayoutConfig : public KCModule
+ {
+@@ -53,35 +48,40 @@
+   void initUI();
+ 
+ protected:
+-  QString createOptionString();
+-  void updateIndicator();
++    QString createOptionString();
++    void updateIndicator();
+ 
+ protected slots:
+-  void moveUp();
+-  void moveDown();
+-  void variantChanged();
+-  void displayNameChanged(const QString& name);
+-//  void latinChanged();
+-  void layoutSelChanged();
+-  void loadRules();
+-  void refreshRulesUI();
+-  void updateLayoutCommand();
+-  void updateOptionsCommand();
+-  void add();
+-  void remove();
++    void moveUp();
++    void moveDown();
++    void variantChanged();
++    void xkbShortcutPressed();
++    void xkbShortcut3dPressed();
++    void kdeShortcutPressed();
++    void updateShortcutsLabels();
++    void xkbOptionsChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
++    void enableChanged();
++    void displayNameChanged(const QString& name);
++    void layoutSelChanged();
++    void loadRules();
++    void refreshRulesUI();
++    void updateLayoutCommand();
++    void updateOptionsCommand();
++    void add();
++    void remove();
+ 
+-  void changed();
++    void changed();
+ 
+ private:
+   Ui_LayoutConfigWidget* widget;
+ 
+   XkbRules *m_rules;
+   KxkbConfig m_kxkbConfig;
+-  QHash<QString, OptionListItem*> m_optionGroups;
+   SrcLayoutModel* m_srcModel;
+   DstLayoutModel* m_dstModel;
++  XkbOptionsModel* m_xkbOptModel;
+ 
+-  QWidget* makeOptionsTab();
++  void makeOptionsTab();
+   void updateStickyLimit();
+   void updateAddButton();
+   void updateDisplayName();
+--- a/kcontrol/kxkb/layoutmap.h
++++ b/kcontrol/kxkb/layoutmap.h
+@@ -45,7 +45,7 @@
+ 	int getNextLayout();
+ 	int getCurrentLayout();
+ 	
+-	void setCurrentWindow(WId winId);
++	void ownerChanged();
+ 	void reset();
+ 	
+ private:
+--- a/kcontrol/kxkb/extension.h
++++ b/kcontrol/kxkb/extension.h
+@@ -21,43 +21,37 @@
+ 
+ #include <X11/Xlib.h>
+ 
++class QString;
+ 
+ class XKBExtension
+ {
+ public:
+-	XKBExtension(Display *display=NULL);
+-	~XKBExtension();
+-	bool init();
+-	void reset();
+-
+-	static bool setXkbOptions(const QString& options, bool resetOldOptions);
+-	bool setLayout(const QString& model,
+-					const QString& layout, const QString& variant,
+-					const QString& includeGroup, bool useCompiledLayouts=true);
+-	bool setLayoutGroups(const QString& layouts, const QString& variants);
+-	bool setGroup(unsigned int group);
+-	unsigned int getGroup() const;
++    XKBExtension(Display *display=NULL);
++    ~XKBExtension();
++    bool init();
+ 
+-	static bool isGroupSwitchEvent(XEvent* event);
+-	static bool isLayoutSwitchEvent(XEvent* event);	
+ 
+-	bool isXkbEvent(XEvent* event) { return event->type == xkb_opcode; }
++    bool setGroup(unsigned int group);
++    unsigned int getGroup() const;
++
++    static bool setXkbOptions(const QStringList& options, bool resetOldOptions);
++    static bool setLayoutGroups(const QString& model, const QStringList& layouts, const QStringList& variants);
++
++    static QString getXkbOptionsCommand(const QStringList& options, bool resetOldOptions);
++    static QString getLayoutGroupsCommand(const QString& model, const QStringList& layouts, const QStringList& variants);
++
++    static bool isGroupSwitchEvent(XEvent* event);
++    static bool isLayoutSwitchEvent(XEvent* event);	
++
++    bool isXkbEvent(XEvent* event) { return event->type == xkb_opcode; }
+ 
+ private:
+     int xkb_opcode;
+ 
+     Display *m_dpy;
+-/*	QString m_tempDir;
+-	static QMap<QString, FILE*> fileCache;*/
+-	
+-	bool setLayoutInternal(const QString& model,
+-				   const QString& layout, const QString& variant,
+-				   const QString& includeGroup);
+-// 	bool compileCurrentLayout(const QString& layoutKey);
+-// 	bool setCompiledLayout(const QString& layoutKey);
+-	
+-// 	QString getPrecompiledLayoutFilename(const QString& layoutKey);
+-//	void deletePrecompiledLayouts();
++
++    static QString m_setxkbmap_exe;
++    static QString getSetxkbmapExe();
+ };
+ 
+ #endif
+--- a/kcontrol/kxkb/keyboard_layout.desktop
++++ b/kcontrol/kxkb/keyboard_layout.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell keyboard_layout
++Exec=kcmshell4 keyboard_layout
+ Icon=preferences-desktop-keyboard-layout
+ Type=Service
+ ServiceTypes=KCModule
+@@ -170,7 +170,7 @@
+ Keywords[is]=Lyklaborð,inntakstæki,alþjóðlegt
+ Keywords[it]=tastiera,mappatura,internazionale
+ Keywords[ja]=キーボード,キーボードレイアウト,国際化
+-Keywords[km]=ក្ដារចុច,ប្លង់,អន្តរជាតិ
++Keywords[km]=ក្ដារចុច ប្លង់ អន្តរជាតិ
+ Keywords[ko]=키보드,레이아웃,국제
+ Keywords[lt]=Klaviatūra,Klaviatūros išdėstymas,klaviatūros maketas,tarptautinis
+ Keywords[lv]=Tastatūra,Tastatūras izkārtojums, Ievada Iekārtas
+--- a/kcontrol/kxkb/kxkbconfig.cpp
++++ b/kcontrol/kxkb/kxkbconfig.cpp
+@@ -30,6 +30,7 @@
+ #include "x11helper.h"
+ 
+ 
++static const char* OPTIONS_SEPARATOR = ",";
+ 
+ static const char* switchModes[SWITCH_POLICY_COUNT] = {
+   "Global", "Desktop", "WinClass", "Window"
+@@ -53,7 +54,7 @@
+ bool KxkbConfig::load(int loadMode)
+ {
+     kDebug() << "Reading configuration";
+-    KConfigGroup config(KSharedConfig::openConfig( "kxkbrc", KConfig::CascadeConfig ), "Layout");
++    KConfigGroup config(KSharedConfig::openConfig( "kxkbrc", KConfig::NoGlobals ), "Layout");
+ 
+ // Even if the layouts have been disabled we still want to set Xkb options
+ // user can always switch them off now in the "Options" tab
+@@ -61,7 +62,8 @@
+ 
+ 	if( m_enableXkbOptions == true || loadMode == LOAD_ALL ) {
+ 		m_resetOldOptions = config.readEntry("ResetOldOptions", false);
+-		m_options = config.readEntry("Options", "");
++		QString options = config.readEntry("Options", "");
++                m_options = options.split(OPTIONS_SEPARATOR);
+ 		kDebug() << "Xkb options (enabled=" << m_enableXkbOptions << "): " << m_options;
+ 	}
+ 
+@@ -106,7 +108,7 @@
+ 	kDebug() << "Found " << m_layouts.count() << " layouts, default is " << m_layouts[getDefaultLayout()].toPair();
+ 
+ 	QStringList displayNamesList;
+-	displayNamesList = config.readEntry("DisplayNames", displayNamesList, ',');
++	displayNamesList = config.readEntry("DisplayNames", displayNamesList);
+ 	for(QStringList::ConstIterator it = displayNamesList.begin(); it != displayNamesList.end() ; ++it) {
+ 		QStringList displayNamePair = (*it).split(':');
+ 		if( displayNamePair.count() == 2 ) {
+@@ -142,6 +144,7 @@
+ 
+ 	kDebug() << "Layout owner mode " << layoutOwner;
+ 
++#ifdef STICKY_SWITCHING
+ 	m_stickySwitching = config.readEntry("StickySwitching", false);
+ 	m_stickySwitchingDepth = config.readEntry("StickySwitchingDepth", "2").toInt();
+ 	if( m_stickySwitchingDepth < 2 )
+@@ -158,14 +161,18 @@
+ 			m_stickySwitchingDepth = m_layouts.count() - 1;
+ 		}
+ 	}
++#else
++        m_stickySwitching = false; //TODO: so far we can't do sticky with xkb switching...
++#endif
+ 
+ 	return true;
+ }
+ 
+-static QString addNum(QString& str, int n)
++static QString addNum(const QString& str, int n)
+ {
+-  if( str.length() >= 3 ) return str.left(2) + n;
+-  return str + n;
++    QString format("%1%2");
++    if( str.length() >= 3 ) return format.arg(str.left(2)).arg(n);
++    return format.arg(str).arg(n);
+ }
+ 
+ void KxkbConfig::updateDisplayNames()
+@@ -174,8 +181,8 @@
+ 	LayoutUnit& lu = m_layouts[i];
+ 	int cnt = 1;
+ 	for(int j=i; j<m_layouts.count(); j++) {
+-	  LayoutUnit& lu2 = m_layouts[i];
+-	  if( lu.layout == lu2.layout ) {
++	  LayoutUnit& lu2 = m_layouts[j];
++	  if( i != j && lu.layout == lu2.layout ) {
+ 		++cnt;
+ 		lu.displayName = addNum(lu.layout, 1);
+ 		lu2.displayName = addNum(lu2.layout, cnt);
+@@ -194,14 +201,14 @@
+ 
+ void KxkbConfig::save()
+ {
+-	KConfigGroup config(KSharedConfig::openConfig( "kxkbrc", KConfig::CascadeConfig ), "Layout");
++	KConfigGroup config(KSharedConfig::openConfig( "kxkbrc", KConfig::NoGlobals ), "Layout");
+ 
+ 	config.writeEntry("Model", m_model);
+ 
+ 	config.writeEntry("EnableXkbOptions", m_enableXkbOptions );
+ 	config.writeEntry("IndicatorOnly", m_indicatorOnly );
+ 	config.writeEntry("ResetOldOptions", m_resetOldOptions);
+-	config.writeEntry("Options", m_options );
++	config.writeEntry("Options", m_options.join(OPTIONS_SEPARATOR) );
+ 
+ 	QStringList layoutList;
+ 	QStringList includeList;
+@@ -213,11 +220,6 @@
+ 
+ 		layoutList.append( layoutUnit.toPair() );
+ 
+-// 		if( layoutUnit.includeGroup.isEmpty() == false ) {
+-// 			QString incGroupUnit = QString("%1:%2").arg(layoutUnit.toPair(), layoutUnit.includeGroup);
+-// 			includeList.append( incGroupUnit );
+-// 		}
+-
+ 		QString displayName( layoutUnit.displayName );
+ 		kDebug() << " displayName " << layoutUnit.toPair() << " : " << displayName;
+ 		if( displayName.isEmpty() == false && displayName != layoutUnit.layout ) {
+@@ -243,8 +245,10 @@
+ 
+ 	config.writeEntry("SwitchMode", switchModes[m_switchingPolicy]);
+ 
++#ifdef STICKY_SWITCHING
+ 	config.writeEntry("StickySwitching", m_stickySwitching);
+ 	config.writeEntry("StickySwitchingDepth", m_stickySwitchingDepth);
++#endif
+ 
+ 	// remove old options
+  	config.deleteEntry("Variants");
+@@ -263,7 +267,7 @@
+ 
+ 	m_enableXkbOptions = false;
+ 	m_resetOldOptions = false;
+-	m_options = "";
++	m_options.clear();
+ 
+ 	m_layouts.clear();
+ 	m_layouts.append( DEFAULT_LAYOUT_UNIT );
+--- a/kcontrol/kxkb/kxkb_part.h
++++ b/kcontrol/kxkb/kxkb_part.h
+@@ -19,18 +19,18 @@
+ #ifndef __kxkb_part_h
+ #define __kxkb_part_h
+ 
+-#include <kparts/part.h>
++#include <QWidget>
++#include <QList>
++#include <QVariant>
+ 
+-class QWidget;
+ class QString;
+ class KxkbCore;
+ 
+-class KxkbPart : public KParts::Part
++class KxkbPart : public QWidget
+ {
+   Q_OBJECT
+  public:
+-  KxkbPart( QWidget* parentWidget,
+-               QObject* parent,
++  KxkbPart( QWidget* parent,
+                const QList<QVariant>& args = QList<QVariant>() );
+   virtual ~KxkbPart() {}
+ 
+--- a/kcontrol/kxkb/rules.cpp
++++ b/kcontrol/kxkb/rules.cpp
+@@ -74,36 +74,48 @@
+ 
+ void XkbRules::loadNewRules(bool layoutsOnly)
+ {
+-	XKlavierAdaptor* xklAdaptor = XKlavierAdaptor::getInstance(QX11Info::display());
+-	xklAdaptor->loadXkbConfig(layoutsOnly);
++    XKlavierAdaptor* xklAdaptor = XKlavierAdaptor::getInstance(QX11Info::display());
++    xklAdaptor->loadXkbConfig(layoutsOnly);
+ 
+-	m_layouts = xklAdaptor->getLayouts();
+-	if( layoutsOnly == false ) {
+-	  m_models = xklAdaptor->getModels();
+-	  m_optionGroups = xklAdaptor->getOptionGroups();
+-	  m_options = xklAdaptor->getOptions();
+-	  m_varLists = xklAdaptor->getVariants();
+-	}
++    m_layouts = xklAdaptor->getLayouts();
++    if( layoutsOnly == false ) {
++	m_models = xklAdaptor->getModels();
++        m_varLists = xklAdaptor->getVariants();
++	m_optionGroups = xklAdaptor->getOptionGroups();
++	m_options = xklAdaptor->getOptions();
++	
++        QHashIterator<QString, XkbOption> it( m_options );
++        for (; it.hasNext(); ) {
++            const XkbOption& option = it.next().value();
++            option.group->options.append(option);
++        }
++    }
+ }
+ 
+ #else
+ 
+ void XkbRules::loadRules(const QString &file, bool layoutsOnly)
+ {
+-	RulesInfo* rules = X11Helper::loadRules(file, layoutsOnly);
++    RulesInfo* rules = X11Helper::loadRules(file, layoutsOnly);
+ 
+-	if (rules == NULL) {
+-		kDebug() << "Unable to load rules";
+-		return;
+-	}
+-
+-	m_layouts= rules->layouts;
+-
+-	if( layoutsOnly == false ) {
+-		m_models = rules->models;
+-		m_options = rules->options;
+-		m_optionGroups = rules->optionGroups;
+-	}
++    if (rules == NULL) {
++	kDebug() << "Unable to load rules";
++	return;
++    }
++
++    m_layouts= rules->layouts;
++
++    if( layoutsOnly == false ) {
++	m_models = rules->models;
++	m_options = rules->options;
++	m_optionGroups = rules->optionGroups;
++
++        QHashIterator<QString, XkbOption> it( m_options );
++        for (; it.hasNext(); ) {
++            const XkbOption& option = it.next().value();
++            option.group->options.append(option);
++        }
++    }
+ }
+ 
+ 
+--- a/kcontrol/kxkb/CMakeLists.txt
++++ b/kcontrol/kxkb/CMakeLists.txt
+@@ -1,34 +1,51 @@
+ add_subdirectory( pics )
+-add_subdirectory( kcmmisc )
+ #add_subdirectory( tests ) 
+ KDE4_NO_ENABLE_FINAL(kxkb)
+-#add_definitions (-DQT3_SUPPORT)
+ 
+ OPTION(USE_XKLAVIER "Use libxklavier to get keyboard layouts configuration" ON)
+ 
+ MESSAGE(STATUS "option: USE_XKLAVIER  <${USE_XKLAVIER}>")
+ 
+ if( USE_XKLAVIER STREQUAL ON )
++
+   macro_optional_find_package(LibXKlavier)
+   macro_optional_find_package(GLIB2)
+   macro_optional_find_package(GObject)
+ 
+   if(LIBXKLAVIER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND)
++    SET(HAVE_XKLAVIER TRUE)
++
++    SET(CMAKE_REQUIRED_DEFINITIONS ${LIBXKLAVIER_DEFINITIONS})
++    SET(CMAKE_REQUIRED_LIBRARIES ${LIBXKLAVIER_LIBRARIES})
++
++    SET(XKB_SUPPORT_SRC xklavier_adaptor.cpp)
++    SET(XKB_SUPPORT_LIB ${LIBXKLAVIER_LIBRARIES} ${GOBJECT_LIBRARIES})
++    ADD_DEFINITIONS(-DHAVE_XKLAVIER=1 ${LIBXKLAVIER_DEFINITIONS} ${_LibGLIB2Cflags})
++    include_directories(${GLIB2_INCLUDE_DIR})
+ 
+-#MESSAGE("xklav:: ${LIBXKLAVIER_DEFINITIONS}")
+-#MESSAGE("xklav:: ${LIBXKLAVIER_LIBRARIES}")
+-	SET(CMAKE_REQUIRED_DEFINITIONS ${LIBXKLAVIER_DEFINITIONS})
+-	SET(CMAKE_REQUIRED_LIBRARIES ${LIBXKLAVIER_LIBRARIES})
+-
+-	SET(XKB_SUPPORT_SRC xklavier_adaptor.cpp)
+-	SET(XKB_SUPPORT_LIB ${LIBXKLAVIER_LIBRARIES} ${GOBJECT_LIBRARIES})
+-	ADD_DEFINITIONS(-DHAVE_XKLAVIER=1 ${LIBXKLAVIER_DEFINITIONS} ${_LibGLIB2Cflags})
+-	include_directories(${GLIB2_INCLUDE_DIR})
+   else(LIBXKLAVIER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND)
+-	MESSAGE ("Could not find glib, gobject or libxklavier >= 2.91 - old xkbfile code will be used to get keyboard layout configuration!")
++    MESSAGE (STATUS "kxkb: Could not find libxklavier >= 3.0, glib or gobject, will try xkbfile...")
+   endif(LIBXKLAVIER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND)
++
+ endif( USE_XKLAVIER STREQUAL ON )
+ 
++if( NOT HAVE_XKLAVIER )
++
++    if (NOT X11_Xkbfile_FOUND)
++        MESSAGE (STATUS "Could not find xkbfile - kxkb won't be built!")
++    else (NOT X11_Xkbfile_FOUND)
++        SET(XKB_SUPPORT_LIB ${X11_Xkbfile_LIB})
++        MESSAGE (STATUS "Using xkbfile for getting keyboard layouts is not well maintained, please consider installing libxklavier.")
++    endif (NOT X11_Xkbfile_FOUND)
++
++endif( NOT HAVE_XKLAVIER )
++
++
++if (X11_Xkbfile_FOUND OR HAVE_XKLAVIER)
++
++#MESSAGE("xkb support libs:: ${XKB_SUPPORT_LIB}")
++
++
+ 
+ ########### common sources ############
+ 
+@@ -54,18 +71,15 @@
+ 
+ kde4_add_plugin(kcm_keyboard_layout ${kcm_keyboard_layout_PART_SRCS})
+ 
+-SET_TARGET_PROPERTIES(kcm_keyboard_layout PROPERTIES COMPILE_FLAGS "-DQT3_SUPPORT")
+-
+-target_link_libraries(kcm_keyboard_layout
+-    ${KDE4_KIO_LIBS} xkbfile ${QT_QT3SUPPORT_LIBRARY}
++target_link_libraries(kcm_keyboard_layout ${KDE4_KIO_LIBS}
+     ${XKB_SUPPORT_LIB}
+ )
++
+ if(X11_XTest_FOUND)
+   target_link_libraries(kcm_keyboard_layout ${X11_XTest_LIB})
+ endif(X11_XTest_FOUND)
+ 
+ install(TARGETS kcm_keyboard_layout DESTINATION ${PLUGIN_INSTALL_DIR} )
+-
+ install( FILES keyboard_layout.desktop DESTINATION  ${SERVICES_INSTALL_DIR} )
+ 
+ 
+@@ -76,53 +90,55 @@
+   kxkbapp.cpp
+   kxkbwidget.cpp
+   kxkb_adaptor.cpp
++  kxkb_part.cpp
+ )
+ 
+ kde4_add_kdeinit_executable( kxkb ${kxkb_KDEINIT_SRCS})
+ 
+-target_link_libraries(kdeinit_kxkb ${X11_X11_LIB} ${X11_Xext_LIB} ${KDE4_KDEUI_LIBS} xkbfile ${XKB_SUPPORT_LIB})
++target_link_libraries(kdeinit_kxkb ${X11_X11_LIB} ${X11_Xext_LIB} ${KDE4_KDEUI_LIBS}
++     ${XKB_SUPPORT_LIB})
+ 
+ install(TARGETS kdeinit_kxkb  DESTINATION ${LIB_INSTALL_DIR} )
+ 
+ target_link_libraries( kxkb kdeinit_kxkb )
+ install(TARGETS kxkb DESTINATION ${BIN_INSTALL_DIR})
+-install(FILES kxkb_component.h DESTINATION ${INCLUDE_INSTALL_DIR})
++#install(FILES kxkb_component.h DESTINATION ${INCLUDE_INSTALL_DIR})
+ 
+ 
+-########### KXKB Applet ###############
++########### KXKB Plasma Applet ###############
+ 
+-if(BUILD_KICKER)
+-set(kxkb_panelapplet_PART_SRCS kxkb_applet.cpp)
++if( FALSE )     # don't generate applet - it's not finished yet
+ 
+-kde4_add_plugin(kxkb_panelapplet ${kxkb_panelapplet_PART_SRCS})
+-
+-target_link_libraries(kxkb_panelapplet kworkspace kickermain kdeinit_kxkb
+-    ${KDE4_KIO_LIBS} xkbfile
+-    ${XKB_SUPPORT_LIB}
++set(plasma_applet_kxkb_SRCS kxkb_applet.cpp ${kxkb_COMMON_SRCS}
++     kxkbcore.cpp
++     kxkbwidget.cpp
+ )
++
++kde4_add_plugin(plasma_applet_kxkb ${plasma_applet_kxkb_SRCS})
++
++target_link_libraries(plasma_applet_kxkb plasma
++    ${KDE4_KDEUI_LIBS} ${XKB_SUPPORT_LIB})
++        
+ if(X11_XTest_FOUND)
+-  target_link_libraries(kxkb_panelapplet ${X11_XTest_LIB})
++    target_link_libraries(plasma_applet_kxkb ${X11_XTest_LIB})
+ endif(X11_XTest_FOUND)
+ 
+-install(TARGETS kxkb_panelapplet  DESTINATION ${PLUGIN_INSTALL_DIR} )
++install(TARGETS plasma_applet_kxkb  DESTINATION ${PLUGIN_INSTALL_DIR} )
++install(FILES plasma-applet-kxkb.desktop  DESTINATION  ${SERVICES_INSTALL_DIR})
+ 
+-install(FILES kxkb.desktop  DESTINATION  ${DATA_INSTALL_DIR}/kicker/applets)
+-endif(BUILD_KICKER)
++ADD_DEPENDENCIES(plasma_applet_kxkb kdeinit_kxkb)
+ 
++endif (FALSE)
+ 
+ ########### KXKB KPart ###############
++# we're not using KPart for now - it's too heavy
+ #
+-#set(kxkb_part_PART_SRCS
+-#	kxkb_part.cpp
+-#	kxkbwidget.cpp
+-#	kxkbcore.cpp
+-#	${kxkb_COMMON_SRCS})
+-#
++#set(kxkb_part_PART_SRCS kxkb_part.cpp)
+ #
+ #kde4_add_plugin(kxkb_part ${kxkb_part_PART_SRCS})
+ #
+-#target_link_libraries(kxkb_part ${KDE4_KPARTS_LIBS} 
+-#    ${KDE4_KIO_LIBS} xkbfile
++#target_link_libraries(kxkb_part kdeinit_kxkb
++#    ${KDE4_KIO_LIBS}
+ #    ${XKB_SUPPORT_LIB}
+ #)
+ #if(X11_XTest_FOUND)
+@@ -133,9 +149,4 @@
+ #install( FILES kxkb_part.desktop DESTINATION  ${SERVICES_INSTALL_DIR} )
+ ##install( FILES kxkb_part.rc DESTINATION  ${DATA_INSTALL_DIR}/kxkb_part )
+ 
+-
+-########### install files ###############
+-
+-install( FILES keyboard_layout.desktop  DESTINATION  ${SERVICES_INSTALL_DIR} )
+-
+-kde4_install_icons( ${ICON_INSTALL_DIR}  )
++endif (X11_Xkbfile_FOUND OR HAVE_XKLAVIER)
+--- a/kcontrol/kxkb/kxkbapp.cpp
++++ b/kcontrol/kxkb/kxkbapp.cpp
+@@ -23,12 +23,12 @@
+ 
+     KDE Keyboard Tool. Manages XKB keyboard mappings.
+ */
+-#include <assert.h>
+ 
+ #include <kaboutdata.h>
+ #include <kcmdlineargs.h>
+ #include <klocale.h>
+ #include <kglobal.h>
++#include <kdebug.h>
+ 
+ #include "kxkb_adaptor.h"
+ 
+@@ -41,10 +41,13 @@
+ KXKBApp::KXKBApp(bool allowStyles, bool GUIenabled)
+     : KUniqueApplication(allowStyles, GUIenabled)
+ {
+-	KxkbSysTrayIcon* kxkbWidget = new KxkbSysTrayIcon();
+-	m_kxkbCore = new KxkbCore( kxkbWidget );
+-// 	kxkbWidget->show();
+-    //TODO: don't do this if kxkb does not become a daemon
++    m_kxkbCore = new KxkbCore( NULL, KxkbCore::KXKB_MAIN, KxkbWidget::MENU_FULL, KxkbWidget::WIDGET_TRAY );
++
++    if( isError() ) {
++        exit(2);        // failed XKB
++        return;
++    }
++
+     new KXKBAdaptor( this );
+ }
+ 
+@@ -55,7 +58,12 @@
+ 
+ int KXKBApp::newInstance()
+ {
+-	return m_kxkbCore->newInstance();
++    int res = m_kxkbCore->newInstance();
++    if( isError() ) {
++        exit(0);        // not using kxkb from settings
++    }
++
++    return res;
+ }
+ 
+ bool KXKBApp::settingsRead()
+@@ -93,7 +101,9 @@
+         return 0;
+ 
+     KXKBApp app;
+-    app.disableSessionManagement();
+-    app.exec();
++    if( ! app.isError() ) {
++        app.disableSessionManagement();
++        app.exec();
++    }
+     return 0;
+ }
+--- a/kcontrol/kxkb/xklavier_adaptor.h
++++ b/kcontrol/kxkb/xklavier_adaptor.h
+@@ -18,6 +18,7 @@
+ 
+ #ifndef XKLAVIER_ADAPTOR_H
+ #define XKLAVIER_ADAPTOR_H
++
+ #include <X11/Xlib.h>
+ 
+ #include <QHash>
+--- a/kcontrol/kxkb/kxkbcore.cpp
++++ b/kcontrol/kxkb/kxkbcore.cpp
+@@ -45,8 +45,6 @@
+ #include <kactioncollection.h>
+ #include <kapplication.h>
+ 
+-//#include "kxkb_adaptor.h"
+-
+ #include "x11helper.h"
+ #include "extension.h"
+ #include "rules.h"
+@@ -59,7 +57,7 @@
+ 
+ #include "kxkbcore.h"
+ 
+-#include "kxkb_component.h"
++//#include "kxkb_component.h"
+ 
+ #include "kxkbcore.moc"
+ 
+@@ -78,51 +76,79 @@
+     bool x11Event( XEvent * e) { return kxkb->x11EventFilter(e); }
+ };
+ 
+-KxkbCore::KxkbCore(KxkbWidget* kxkbWidget, int mode):
+-//     m_prevWinId(X11Helper::UNKNOWN_WINDOW_ID),
++
++KxkbCore::KxkbCore(QWidget* parent, int mode, int controlType, int widgetType):
+     m_mode(mode),
++    m_controlType(controlType),
++    m_widgetType(widgetType),
++    m_layoutOwnerMap(NULL),
+     m_rules(NULL),
+-    m_kxkbWidget(kxkbWidget)
++    m_parentWidget(parent),
++    m_kxkbWidget(NULL)
+ {
++    m_status = 0;
++
+     m_extension = new XKBExtension();
+     if( !m_extension->init() ) {
+-        kDebug() << "xkb initialization failed, exiting...";
+-        ::exit(1);
++        kError() << "xkb initialization failed, exiting...";
++	m_status = -2;
++//        emit quit();
++        return;
+     }
+ 
+-    KApplication::kApplication()->installX11EventFilter(new DummyWidget(this));
++    m_layoutOwnerMap = new LayoutMap(m_kxkbConfig);
++}
++
++
++void KxkbCore::initWidget()
++{
++    if( ! m_kxkbWidget )
++    {
++        if( m_widgetType == KxkbWidget::WIDGET_TRAY )
++            m_kxkbWidget = new KxkbSysTrayIcon();
++        else
++            m_kxkbWidget = new KxkbLabel(m_controlType, m_parentWidget);
++            
++        kDebug() << "Created kxkb widget" << m_kxkbWidget;
++        
++ 	connect(m_kxkbWidget, SIGNAL(menuTriggered(QAction*)), this, SLOT(iconMenuTriggered(QAction*)));
++	connect(m_kxkbWidget, SIGNAL(iconToggled()), this, SLOT(toggled()));
++
++        if( m_mode == KXKB_MAIN ) {
++	    KApplication::kApplication()->installX11EventFilter(new DummyWidget(this));
+     
+ #ifdef HAVE_XKLAVIER
+-    XKlavierAdaptor::getInstance(QX11Info::display())->startListening();
++	    XKlavierAdaptor::getInstance(QX11Info::display())->startListening();
+ #endif
++    
++	    initKeys();
++        }
++    }
++}
++
++void KxkbCore::initKeys()
++{
++    m_actions = new KActionCollection( this );
++        QAction* a = m_actions->addAction( I18N_NOOP("Switch keyboard layout") );
++        a->setText( i18n( I18N_NOOP( "Switch keyboard layout" ) ) );
++        qobject_cast<KAction*>( a )->setGlobalShortcut(KShortcut(Qt::ALT+Qt::CTRL+Qt::Key_K));
++        connect( a, SIGNAL(triggered(bool)), this, SLOT(toggled()) );
+ 
+   // TODO: keyboard bindings
+     //globalKeys = KGlobalAccel::self();
+-    //KActionCollection* actionCollection = collection;
+-    //QAction* a = 0L;
++//    m_keys* = new KActionCollection(this);
+ 
+ //	#include "kxkbbindings.cpp"
+     //keys->readSettings();
+     //keys->updateConnections();
+ 
+-    m_layoutOwnerMap = new LayoutMap(m_kxkbConfig);
+-
+ //    connect( KGlobalSettings::self(), SIGNAL(settingsChanged(int)),
+ //             this, SLOT(slotSettingsChanged(int)) );
+-
+-    //TODO: don't do this if kxkb does not become a daemon
+-//     new KXKBAdaptor( this );
+-//	if( !m_kxkbWidget )
+-//	{
+- 		connect(m_kxkbWidget, SIGNAL(menuTriggered(QAction*)), this, SLOT(iconMenuTriggered(QAction*)));
+-		connect(m_kxkbWidget, SIGNAL(iconToggled()), this, SLOT(iconToggled()));
+-//	}
+ }
+ 
+-
+ KxkbCore::~KxkbCore()
+ {
+-    delete m_keys;
++    delete m_actions;
+     delete m_kxkbWidget;
+     delete m_rules;
+     delete m_extension;
+@@ -131,33 +157,85 @@
+ 
+ int KxkbCore::newInstance()
+ {
+-    m_extension->reset();
++    if( m_status == 0 && settingsRead() ) {
++        initWidget();
+ 
+-    if( settingsRead() )
+-		layoutApply();
++        initSwitchingPolicy();
+ 
+-    return 0;
++        m_layoutOwnerMap->reset();
++        initTray();
++
++        layoutApply();
++        return 0;
++    }
++
++    return -1;
++}
++
++void KxkbCore::slotSettingsChanged(int category)
++{
++    if ( category != KGlobalSettings::SETTINGS_SHORTCUTS)
++		return;
++
++#ifdef __GNUC__
++#warning TODO PORT ME (KGlobalAccel related)
++#endif
++
++    KGlobal::config()->reparseConfiguration(); // kcontrol modified kdeglobals
++//    m_keys->readSettings();
++	//TODO:
++	//keys->updateConnections();
+ }
+ 
+ bool KxkbCore::settingsRead()
+ {
+     m_kxkbConfig.load( KxkbConfig::LOAD_ACTIVE_OPTIONS );
+ 
+-    if( m_kxkbConfig.m_enableXkbOptions ) {
+-	kDebug() << "Setting XKB options " << m_kxkbConfig.m_options;
+-	if( !m_extension->setXkbOptions(m_kxkbConfig.m_options, m_kxkbConfig.m_resetOldOptions) ) {
+-            kDebug() << "Setting XKB options failed!";
+-        }
++    if( m_mode == KXKB_MAIN ) {
++	if( m_kxkbConfig.m_enableXkbOptions ) {
++	    if( !m_extension->setXkbOptions(m_kxkbConfig.m_options, m_kxkbConfig.m_resetOldOptions) ) {
++        	kDebug() << "Setting XKB options failed!";
++	    }
++	}
+     }
+ 
+     if ( m_kxkbConfig.m_useKxkb == false ) {
+ 	kWarning() << "Kxkb is disabled, exiting...";
+-        emit quit(); //qApp->quit();
++	m_status = -1;
++//        emit quit();
+         return false;
+     }
+ 
+-// 	m_prevWinId = X11Helper::UNKNOWN_WINDOW_ID;
++    if( m_rules == NULL )
++	m_rules = new XkbRules(false);
++
++    if( m_mode == KXKB_MAIN && ! m_kxkbConfig.m_indicatorOnly ) {
++	m_currentLayout = m_kxkbConfig.getDefaultLayout();
++	initLayoutGroups();
++    }
++    else {
++	updateGroupsFromServer();
++    }
++	
++    if( m_kxkbConfig.m_layouts.count() == 1 ) {
++	if( m_kxkbConfig.m_showSingle == false ) {
++	    kWarning() << "Kxkb is disabled for single layout";
++	    m_status = -1;
++//	    emit quit();
++	    return false;
++	}
++    }
++
++//	KGlobal::config()->reparseConfiguration(); // kcontrol modified kdeglobals
++	//TODO:
++//	keys->readSettings();
++	//keys->updateConnections();
+ 
++    return true;
++}
++
++void KxkbCore::initSwitchingPolicy()
++{
+ 	if( m_kxkbConfig.m_switchingPolicy == SWITCH_POLICY_GLOBAL ) {
+ 		disconnect(KWindowSystem::self(), SIGNAL(activeWindowChanged(WId)), this, SLOT(windowChanged(WId)));
+ 		disconnect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(windowChanged(WId)));
+@@ -170,83 +248,37 @@
+ 		}
+ 		
+ 		if( m_kxkbConfig.m_switchingPolicy == SWITCH_POLICY_DESKTOP ) {
+-		    disconnect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(windowChanged(WId)));
+-		    connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(windowChanged(WId)));
+-//		}
+-//		else {
++		    disconnect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(desktopChanged(int)));
++		    connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(desktopChanged(int)));
++		}
++		else {
+ 		    disconnect(KWindowSystem::self(), SIGNAL(activeWindowChanged(WId)), this, SLOT(windowChanged(WId)));
+ 		    connect(KWindowSystem::self(), SIGNAL(activeWindowChanged(WId)), this, SLOT(windowChanged(WId)));
+-/*		int m_prevWinId = kWinModule->activeWindow();
+-		kDebug() << "Active window " << m_prevWinId;*/
+ 		}
+ 	}
+-
+-	m_layoutOwnerMap->reset();
+-	m_layoutOwnerMap->setCurrentWindow( X11Helper::UNKNOWN_WINDOW_ID ); //TODO
+-
+-	if( m_rules == NULL )
+-		m_rules = new XkbRules(false);
+-
+-	if( m_mode == NORMAL ) {
+-	    m_currentLayout = m_kxkbConfig.getDefaultLayout();
+-	    setLayoutGroups();
+-	}
+-	else {
+-	    updateGroupsFromServer();
+-	}
+-	
+-	if( m_kxkbConfig.m_layouts.count() == 1 ) {
+-	    if( m_kxkbConfig.m_showSingle == false ) {
+-		kWarning() << "Kxkb is disabled for single layout, exiting...";
+-		emit quit(); //qApp->quit();
+-		return false;
+-	    }
+-	}
+-
+-	initTray();
+-
+-//	KGlobal::config()->reparseConfiguration(); // kcontrol modified kdeglobals
+-	//TODO:
+-//	keys->readSettings();
+-	//keys->updateConnections();
+-
+-	return true;
+ }
+ 
+-void KxkbCore::setLayoutGroups()
++void KxkbCore::initLayoutGroups()
+ {
+-	if( m_kxkbConfig.m_layouts.count() == 1 ) {
+-		const LayoutUnit& currentLayout = m_kxkbConfig.m_layouts[0];
+-		QString layoutName = currentLayout.layout;
+-		QString variantName = currentLayout.variant;
+-
+-/*		if( !m_extension->setLayout(kxkbConfig.m_model, layoutName, variantName, includeName, false)
+-				   || !m_extension->setGroup( group ) ) {*/
+-		if( ! m_extension->setLayoutGroups(layoutName, variantName) ) {
+-			kDebug() << "Error switching to single layout " << currentLayout.toPair();
+-			// TODO: alert user
+-		}
+-
+- 	}
+-	else {
+-		QString layouts;
+-		QString variants;
+-		for(int ii=0; ii<(int)m_kxkbConfig.m_layouts.count(); ii++) {
+-			LayoutUnit& layoutUnit = m_kxkbConfig.m_layouts[ii];
+-			layouts += layoutUnit.layout;
+-			variants += layoutUnit.variant;
+-			if( ii < m_kxkbConfig.m_layouts.count()-1 ) {
+-				layouts += ',';
+-				variants += ',';
+-			}
+-		}
+-		kDebug() << "initing " << "-layout " << layouts << " -variants " << variants;
+-		m_extension->setLayoutGroups(layouts, variants);
+-	}
++    QStringList layouts;
++    QStringList variants;
++    for(int ii=0; ii<(int)m_kxkbConfig.m_layouts.count(); ii++) {
++        LayoutUnit& layoutUnit = m_kxkbConfig.m_layouts[ii];
++        layouts << layoutUnit.layout;
++        variants << layoutUnit.variant;
++    }
++    m_extension->setLayoutGroups(m_kxkbConfig.m_model, layouts, variants);
+ }
+ 
+ void KxkbCore::initTray()
+ {
++    if( m_kxkbWidget == NULL ) {
++        if( m_kxkbConfig.m_layouts.count() > 1 || m_kxkbConfig.m_showSingle )
++            initWidget();
++        else
++            return;
++    }
++    
+     kDebug() << "initing tray";
+ 
+     m_kxkbWidget->setShowFlag(m_kxkbConfig.m_showFlag);
+@@ -276,15 +308,9 @@
+ // Activates the keyboard layout specified by 'layoutUnit'
+ bool KxkbCore::setLayout(int layout)
+ {
+-	bool res = false;
+-
+-// 	res = m_extension->setLayout(kxkbConfig.m_model,
+-//  					layoutUnit.layout, layoutUnit.variant,
+-//  					layoutUnit.includeGroup);
+-
+-	res = m_extension->setGroup(layout); // not checking for ret - not important
++    bool res = m_extension->setGroup(layout); // not checking for ret - not important
+ 
+-	updateIndicator(layout, res);
++    updateIndicator(layout, res);
+ 
+     return res;
+ }
+@@ -293,8 +319,7 @@
+ {
+     if( res ) {
+   	m_currentLayout = layout;
+-	int winId = KWindowSystem::activeWindow();
+- 	m_layoutOwnerMap->setCurrentWindow(winId);
++ 	m_layoutOwnerMap->ownerChanged();
+ 	m_layoutOwnerMap->setCurrentLayout(layout);
+     }
+ 
+@@ -307,23 +332,19 @@
+     }
+ }
+ 
+-void KxkbCore::iconToggled()
++void KxkbCore::toggled()
+ {
+-//    if ( reason != QSystemTrayIcon::Trigger )
+-//        return;
+-//     const LayoutUnit& layout = m_layoutOwnerMap->getNextLayout().layoutUnit;
+     int layout = m_layoutOwnerMap->getNextLayout();
+     setLayout(layout);
+ }
+ 
+ void KxkbCore::iconMenuTriggered(QAction* action)
+ {
+-	int id = action->data().toInt();
++    int id = action->data().toInt();
+ 
+     if( KxkbWidget::START_MENU_ID <= id
+         && id < KxkbWidget::START_MENU_ID + (int)m_kxkbConfig.m_layouts.count() )
+     {
+-//         const LayoutUnit& layout = kxkbConfig.m_layouts[id - KxkbWidget::START_MENU_ID];
+         int layout = id - KxkbWidget::START_MENU_ID;
+         m_layoutOwnerMap->setCurrentLayout( layout );
+         setLayout( layout );
+@@ -332,7 +353,7 @@
+     {
+         QStringList lst;
+         lst<< "keyboard_layout";
+-	QProcess::startDetached("kcmshell",lst);
++	QProcess::startDetached("kcmshell4",lst);
+     }
+     else if (id == KxkbWidget::HELP_MENU_ID)
+     {
+@@ -344,6 +365,12 @@
+     }
+ }
+ 
++void KxkbCore::desktopChanged(int desktop)
++{
++    kDebug() << "desktop changed" << desktop;
++    windowChanged(-1);
++}
++
+ // TODO: we also have to handle deleted windows
+ void KxkbCore::windowChanged(WId winId)
+ {
+@@ -357,7 +384,7 @@
+ 	if( m_kxkbConfig.m_switchingPolicy == SWITCH_POLICY_GLOBAL
+ 		    || winId != X11Helper::UNKNOWN_WINDOW_ID ) {
+ 
+-		m_layoutOwnerMap->setCurrentWindow(winId);
++		m_layoutOwnerMap->ownerChanged();
+ 		int layoutState = m_layoutOwnerMap->getCurrentLayout();
+ 
+ 		if( layoutState != m_currentLayout ) {
+@@ -367,17 +394,6 @@
+ }
+ 
+ 
+-void KxkbCore::slotSettingsChanged(int category)
+-{
+-    if ( category != KGlobalSettings::SETTINGS_SHORTCUTS)
+-		return;
+-
+-    KGlobal::config()->reparseConfiguration(); // kcontrol modified kdeglobals
+-    m_keys->readSettings();
+-	//TODO:
+-	//keys->updateConnections();
+-}
+-
+ 
+ bool KxkbCore::x11EventFilter ( XEvent * event )
+ {
+@@ -423,7 +439,6 @@
+ 	    if( lus != m_kxkbConfig.m_layouts ) {
+ 		m_kxkbConfig.setConfiguredLayouts(lus);
+ 		m_layoutOwnerMap->reset();
+-		m_layoutOwnerMap->setCurrentWindow( X11Helper::UNKNOWN_WINDOW_ID ); //TODO
+ 		initTray();
+ 	    }
+ 	    else {
+@@ -434,21 +449,9 @@
+ 	    kDebug() << "got group from server:" << group;
+ 	    updateIndicator(group, 1);
+ 	}
++#else
++	kDebug() << "updating layouts from server is not implemented w/out libxklavier";
+ #endif
+ 	
+     return 0;
+ }
+-
+-
+-extern "C" KDE_EXPORT
+-void* kxkb_create_component(int controlType, void* parentWidget)
+-{
+-    QObject* parentObj = (QObject*)parentWidget;
+-    QWidget* parent = dynamic_cast<QWidget*> (parentObj);
+-    
+-    KxkbLabel* kxkbWidget = new KxkbLabel(controlType, parent);
+-    KxkbCore* kxkbCore = new KxkbCore( kxkbWidget, 2 );	// 2 == NO_INIT
+-    kxkbCore->newInstance();
+-    //setWidget(kxkbWidget->widget());
+-    return kxkbWidget;
+-}
+--- a/kcontrol/kxkb/kcmlayout.cpp
++++ b/kcontrol/kxkb/kcmlayout.cpp
+@@ -21,9 +21,6 @@
+ #include <QTabWidget>
+ #include <QGroupBox>
+ #include <QPushButton>
+-#include <Q3ListView>
+-#include <Q3ListViewItem>
+-#include <Q3CheckListItem>
+ #include <QHeaderView>
+ #include <QCheckBox>
+ #include <QRadioButton>
+@@ -32,10 +29,12 @@
+ #include <QWidget>
+ #include <QtGui>
+ 
++#include <kicon.h>
+ #include <kshortcutsdialog.h>
++#include <kglobalaccel.h>
++#include <kactioncollection.h>
+ #include <kglobal.h>
+ #include <kconfig.h>
+-#include <klocale.h>
+ #include <kdebug.h>
+ #include <kapplication.h>
+ #include <kiconloader.h>
+@@ -52,6 +51,9 @@
+ #include <KPluginLoader>
+ #include "kcmlayout.moc"
+ 
++#ifdef HAVE_XKLAVIER
++#include "xklavier_adaptor.h"
++#endif
+ 
+ 
+ K_PLUGIN_FACTORY(KeyboardLayoutFactory,
+@@ -72,51 +74,10 @@
+  DST_LAYOUT_COLUMN_COUNT = 5
+ };
+ 
+-static const QString DEFAULT_VARIANT_NAME("<default>");
+-
+-class OptionListItem : public Q3CheckListItem
+-{
+-	public:
+-
+-		OptionListItem(  OptionListItem *parent, const QString &text, Type tt,
+-						 const QString &optionName );
+-		OptionListItem(  Q3ListView *parent, const QString &text, Type tt,
+-						 const QString &optionName );
+-		~OptionListItem() {}
+-
+-		QString optionName() const { return m_OptionName; }
+-		OptionListItem *findChildItem(  const QString& text );
+-
+-	protected:
+-		QString m_OptionName;
+-};
+-
+-
+-OptionListItem::OptionListItem( OptionListItem *parent, const QString &text,
+-								Type tt, const QString &optionName )
+-	: Q3CheckListItem( parent, text, tt ), m_OptionName( optionName )
+-{
+-}
+-
+-OptionListItem::OptionListItem( Q3ListView *parent, const QString &text,
+-								Type tt, const QString &optionName )
+-	: Q3CheckListItem( parent, text, tt ), m_OptionName( optionName )
+-{
+-}
+-
+-OptionListItem * OptionListItem::findChildItem( const QString& optionName )
+-{
+-	OptionListItem *child = static_cast<OptionListItem *>( firstChild() );
+-
+-	while ( child )
+-	{
+-		if ( child->optionName() == optionName )
+-			break;
+-		child = static_cast<OptionListItem *>( child->nextSibling() );
+-	}
++enum { TAB_LAYOUTS=0, TAB_OPTIONS=1, TAB_XKB=2 };
++enum { BTN_XKB_ENABLE=0, BTN_XKB_INDICATOR=1, BTN_XKB_DISABLE=2 };
+ 
+-	return child;
+-}
++static const QString DEFAULT_VARIANT_NAME("<default>");
+ 
+ class SrcLayoutModel: public QAbstractTableModel {
+ public:
+@@ -191,7 +152,7 @@
+ 	: QAbstractTableModel(parent),
+ 	m_kxkbConfig(kxkbConfig)
+ 	{ setRules(rules); }
+-    int columnCount(const QModelIndex& parent) const { return DST_LAYOUT_COLUMN_COUNT; }
++    int columnCount(const QModelIndex& /*parent*/) const { return DST_LAYOUT_COLUMN_COUNT; }
+     int rowCount(const QModelIndex&) const { return m_kxkbConfig->m_layouts.count(); }
+     QVariant data(const QModelIndex& index, int role) const;
+     QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+@@ -206,17 +167,16 @@
+ 
+ QVariant DstLayoutModel::headerData(int section, Qt::Orientation orientation, int role) const
+ {
+-     if (role != Qt::DisplayRole)
+-              return QVariant();
++    if (role != Qt::DisplayRole)
++        return QVariant();
+ 	      
+-    QString colNames[] = {"", i18n("Layout Name"), i18n("Map"), i18n("Variant"), i18n("Display Name")};
++    QString colNames[] = {"", i18n("Layout Name"), i18n("Map"), i18n("Variant"), i18n("Label")};
+     if (orientation == Qt::Horizontal) {
+ 	return colNames[section];
+     }
+-              return QVariant();
++    return QVariant();
+ }
+ 
+-
+ QVariant
+ DstLayoutModel::data(const QModelIndex& index, int role) const
+ { 
+@@ -248,13 +208,137 @@
+ }
+ 
+ 
++class XkbOptionsModel: public QAbstractItemModel {
++public:
++    XkbOptionsModel(XkbRules* rules, KxkbConfig* kxkbConfig, QObject *parent)
++	: QAbstractItemModel(parent),
++	m_kxkbConfig(kxkbConfig)
++	{ setRules(rules); }
++
++    int columnCount(const QModelIndex& /*parent*/) const { return 1; }
++    int rowCount(const QModelIndex& parent) const { 
++        if( ! parent.isValid() )
++            return m_rules->optionGroups().count();
++        if( ! parent.parent().isValid() )
++            return m_rules->optionGroups().values()[parent.row()].options.count();
++        return 0; 
++    }
++    QModelIndex parent(const QModelIndex& index) const {
++        if (!index.isValid() )
++            return QModelIndex();
++//        kDebug() << index;
++        if( index.internalId() < 100 )
++            return QModelIndex();
++        return createIndex(((index.internalId() - index.row())/100) - 1, index.column());
++    }
++    QModelIndex index(int row, int column, const QModelIndex& parent) const {
++        if(!parent.isValid()) return createIndex(row, column);
++        return createIndex(row, column, (100 * (parent.row()+1)) + row);
++    }
++    Qt::ItemFlags flags ( const QModelIndex & index ) const {
++        if( ! index.isValid() )
++            return 0;
++        
++        if( !index.parent().isValid() )
++            return Qt::ItemIsEnabled;
++
++        return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
++    }
++    bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ) {
++//    kDebug() << index << value;
++        int groupRow = index.parent().row();
++        if( groupRow < 0 ) return false;
++        
++        QString xkbGroupNm = m_rules->optionGroups().keys()[groupRow];
++        const XkbOptionGroup& xkbGroup = m_rules->optionGroups()[xkbGroupNm];
++	const XkbOption& option = xkbGroup.options[index.row()];
++
++        if( value.toInt() == Qt::Checked ) {
++                if( xkbGroup.exclusive ) {
++                // clear if exclusive (TODO: radiobutton)
++                    int idx = m_kxkbConfig->m_options.indexOf(QRegExp(xkbGroupNm+".*"));
++//                    kDebug() << "other idx to clear" << idx;
++                    if( idx >= 0 ) {
++                        for(int i=0; i<xkbGroup.options.count(); i++)
++                            if( xkbGroup.options[i].name == m_kxkbConfig->m_options[idx] ) {
++                                setData(createIndex(i, index.column(), (quint32)index.internalId()-index.row()+i), Qt::Unchecked, role);
++                                break;
++                            }
++                //    m_kxkbConfig->m_options.removeAt(idx);
++                //    idx = m_kxkbConfig->m_options.indexOf(QRegExp(xkbGroupNm+".*"));
++                    }
++                }
++            if( m_kxkbConfig->m_options.indexOf(option.name) < 0 ) {
++                m_kxkbConfig->m_options.append(option.name);
++            }
++        }
++        else {
++            m_kxkbConfig->m_options.removeAll(option.name);
++        }
++        emit dataChanged(index, index);
++        return true;
++    }
++    
++    QVariant data(const QModelIndex& index, int role) const;
++
++    void setRules(XkbRules* rules) { m_rules = rules; }
++    void reset() { QAbstractItemModel::reset(); }
++
++    void gotoGroup(const QString& group, QAbstractItemView* view) {
++        int index = m_rules->optionGroups().keys().indexOf(group);
++        kDebug() << "scrolling to group" << index << "-" << group;
++        if( index != -1 ) {
++//            view->selectionModel()->setCurrentIndex(createIndex(index,0), QItemSelectionModel::NoUpdate);
++            view->scrollTo(createIndex(index,0), QAbstractItemView::PositionAtTop);
++            view->selectionModel()->setCurrentIndex(createIndex(index,0), QItemSelectionModel::Current);
++            view->setFocus(Qt::OtherFocusReason);
++            kDebug() << "wdg:" << view->itemDelegate(createIndex(index, 0).child(0,0));
++        }
++        else
++            kDebug() << "can't scroll to group" << group;
++    }
++private:
++    XkbRules* m_rules;
++    KxkbConfig* m_kxkbConfig;
++};
++
++QVariant
++XkbOptionsModel::data(const QModelIndex& index, int role) const
++{ 
++    if (!index.isValid())
++	return QVariant();
++
++    int row = index.row();
++	
++    if (role == Qt::DisplayRole) {
++        if( ! index.parent().isValid() )
++	    return m_rules->optionGroups().values()[row].description;
++        else {
++            int groupRow = index.parent().row();
++            QString xkbGroupNm = m_rules->optionGroups().keys()[groupRow];
++            const XkbOptionGroup& xkbGroup = m_rules->optionGroups()[xkbGroupNm];
++	    return xkbGroup.options[row].description;
++        }
++    }
++    else if( role==Qt::CheckStateRole && index.parent().isValid() ) {
++        int groupRow = index.parent().row();
++        QString xkbGroupNm = m_rules->optionGroups().keys()[groupRow];
++        const XkbOptionGroup& xkbGroup = m_rules->optionGroups()[xkbGroupNm];
++
++        return m_kxkbConfig->m_options.indexOf(xkbGroup.options[row].name) == -1 ? Qt::Unchecked : Qt::Checked;
++    }
++    return QVariant();
++}
++
++
+ //K_PLUGIN_FACTORY_DECLARATION(KeyboardLayoutFactory)
+ 
+ LayoutConfig::LayoutConfig(QWidget *parent, const QVariantList &)
+   : KCModule(KeyboardLayoutFactory::componentData(), parent),
+     m_rules(NULL),
+     m_srcModel(NULL),
+-    m_dstModel(NULL)
++    m_dstModel(NULL),
++    m_xkbOptModel(NULL)
+ {
+     //Read rules - we _must_ read _before_ creating UIs
+     loadRules();
+@@ -265,12 +349,13 @@
+ 
+     m_srcModel = new SrcLayoutModel(m_rules, NULL);
+     m_srcModel->setHeaderData(LAYOUT_COLUMN_FLAG, Qt::Horizontal, "");
+-    m_srcModel->setHeaderData(LAYOUT_COLUMN_NAME, Qt::Horizontal, "Layout name", Qt::DisplayRole);
+-    m_srcModel->setHeaderData(LAYOUT_COLUMN_MAP, Qt::Horizontal, "Map", Qt::DisplayRole);
++    m_srcModel->setHeaderData(LAYOUT_COLUMN_NAME, Qt::Horizontal, i18n("Layout name"), Qt::DisplayRole);
++    m_srcModel->setHeaderData(LAYOUT_COLUMN_MAP, Qt::Horizontal, i18n("Map"), Qt::DisplayRole);
+ 
+     widget->srcTableView->setModel(m_srcModel);
+ //    widget->srcTableView->setSortingEnabled(true);
+     widget->srcTableView->setColumnWidth(LAYOUT_COLUMN_FLAG, 26);
++    widget->srcTableView->setColumnWidth(LAYOUT_COLUMN_MAP, 30);
+     widget->srcTableView->verticalHeader()->hide();
+     widget->srcTableView->setShowGrid(false);
+     widget->srcTableView->resizeRowsToContents();
+@@ -278,59 +363,71 @@
+     m_dstModel = new DstLayoutModel(m_rules, &m_kxkbConfig, NULL);
+     widget->dstTableView->setModel(m_dstModel);
+     widget->dstTableView->setColumnWidth(LAYOUT_COLUMN_FLAG, 26);
++    widget->dstTableView->setColumnWidth(LAYOUT_COLUMN_MAP, 30);
+     widget->dstTableView->verticalHeader()->hide();
+ 
+-
+-  connect( widget->chkEnable, SIGNAL( toggled( bool )), this, SLOT(changed()));
+-  connect( widget->chkIndicatorOnly, SIGNAL( toggled( bool )), this, SLOT(changed()));
+-  connect( widget->chkShowSingle, SIGNAL( toggled( bool )), this, SLOT(changed()));
+-  connect( widget->chkShowFlag, SIGNAL( toggled( bool )), this, SLOT(changed()));
+-  connect( widget->comboModel, SIGNAL(activated(int)), this, SLOT(changed()));
+-
+-  connect( widget->srcTableView, SIGNAL(doubleClicked(const QModelIndex & index)),
+-									this, SLOT(add()));
+-  connect( widget->btnAdd, SIGNAL(clicked()), this, SLOT(add()));
+-  connect( widget->btnRemove, SIGNAL(clicked()), this, SLOT(remove()));
++    m_xkbOptModel = new XkbOptionsModel(m_rules, &m_kxkbConfig, NULL);
++    widget->xkbOptionsTreeView->setModel(m_xkbOptModel);
++    widget->xkbOptionsTreeView->header()->hide();
++    widget->xkbOptionsTreeView->expandAll();
++
++    connect( m_xkbOptModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), 
++        this, SLOT(xkbOptionsChanged(const QModelIndex &, const QModelIndex &)));
++
++    connect( widget->grpEnableKxkb, SIGNAL( clicked( int ) ), SLOT(enableChanged()));
++//    connect( widget->chkEnable, SIGNAL( toggled( bool )), this, SLOT(changed()));
++//    connect( widget->chkIndicatorOnly, SIGNAL( toggled( bool )), this, SLOT(changed()));
++    connect( widget->chkShowSingle, SIGNAL( toggled( bool )), this, SLOT(changed()));
++    connect( widget->chkShowFlag, SIGNAL( toggled( bool )), this, SLOT(changed()));
++    connect( widget->comboModel, SIGNAL(activated(int)), this, SLOT(changed()));
++
++    connect( widget->srcTableView, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(add()));
++    connect( widget->btnAdd, SIGNAL(clicked()), this, SLOT(add()));
++    connect( widget->btnRemove, SIGNAL(clicked()), this, SLOT(remove()));
+ 
+ //  connect( widget->comboVariant, SIGNAL(activated(int)), this, SLOT(changed()));
+-  connect( widget->comboVariant, SIGNAL(activated(int)), this, SLOT(variantChanged()));
+-  connect( widget->dstTableView->selectionModel(), 
++    connect( widget->comboVariant, SIGNAL(activated(int)), this, SLOT(variantChanged()));
++    connect( widget->dstTableView->selectionModel(), 
+ 		SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
+ 		this, SLOT(layoutSelChanged()) );
+ 
+-//  connect( widget->editDisplayName, SIGNAL(textChanged(const QString&)), this, SLOT(displayNameChanged(const QString&)));
+-
+-  widget->btnUp->setIconSet(KIcon("arrow-up"));
+-//  connect( widget->btnUp, SIGNAL(clicked()), this, SLOT(changed()));
+-  connect( widget->btnUp, SIGNAL(clicked()), this, SLOT(moveUp()));
+-  widget->btnDown->setIconSet(KIcon("arrow-down"));
+-//  connect( widget->btnDown, SIGNAL(clicked()), this, SLOT(changed()));
+-  connect( widget->btnDown, SIGNAL(clicked()), this, SLOT(moveDown()));
+-
+-  connect( widget->grpSwitching, SIGNAL( clicked( int ) ), SLOT(changed()));
++    connect( widget->btnXkbShortcut, SIGNAL(clicked()), this, SLOT(xkbShortcutPressed()));
++    connect( widget->btnXkbShortcut3d, SIGNAL(clicked()), this, SLOT(xkbShortcut3dPressed()));
++    connect( widget->btnKdeShortcut, SIGNAL(clicked()), this, SLOT(kdeShortcutPressed()));
+ 
+-  connect( widget->chkEnableSticky, SIGNAL(toggled(bool)), this, SLOT(changed()));
+-  connect( widget->spinStickyDepth, SIGNAL(valueChanged(int)), this, SLOT(changed()));
++//  connect( widget->editDisplayName, SIGNAL(textChanged(const QString&)), this, SLOT(displayNameChanged(const QString&)));
+ 
++    widget->btnUp->setIcon(KIcon("arrow-up"));
++    connect( widget->btnUp, SIGNAL(clicked()), this, SLOT(moveUp()));
++    widget->btnDown->setIcon(KIcon("arrow-down"));
++    connect( widget->btnDown, SIGNAL(clicked()), this, SLOT(moveDown()));
++
++    connect( widget->grpSwitching, SIGNAL( clicked( int ) ), SLOT(changed()));
++    connect( widget->chkEnableSticky, SIGNAL(toggled(bool)), this, SLOT(changed()));
++
++#ifdef STICKY_SWITCHING
++    connect( widget->spinStickyDepth, SIGNAL(valueChanged(int)), this, SLOT(changed()));
++#else
++    widget->grpBoxStickySwitching->setVisible(false);
++#endif
+     refreshRulesUI();
+ 
+-  makeOptionsTab();
++    makeOptionsTab();
+ 
+-  load();
++    load();
+ }
+ 
+ 
+ LayoutConfig::~LayoutConfig()
+ {
+-	delete m_rules;
++    delete m_rules;
+ }
+ 
+ 
+ void LayoutConfig::load()
+ {
+-	m_kxkbConfig.load(KxkbConfig::LOAD_ALL);
+-
+-	initUI();
++    m_kxkbConfig.load(KxkbConfig::LOAD_ALL);
++    initUI();
+ }
+ 
+ void LayoutConfig::initUI()
+@@ -339,7 +436,8 @@
+ 	if( modelName.isEmpty() )
+ 		modelName = DEFAULT_MODEL;
+ 
+-	widget->comboModel->setCurrentText(i18n(modelName));
++        QString modelName_ = i18n(modelName);
++	widget->comboModel->setCurrentIndex( widget->comboModel->findText(modelName_) );
+ 
+ 	m_dstModel->reset();
+ 	widget->dstTableView->update();
+@@ -354,16 +452,16 @@
+ 	switch( m_kxkbConfig.m_switchingPolicy ) {
+ 		default:
+ 		case SWITCH_POLICY_GLOBAL:
+-			widget->grpSwitching->setButton(0);
++			widget->grpSwitching->setSelected(0);
+ 			break;
+ 		case SWITCH_POLICY_DESKTOP:
+-			widget->grpSwitching->setButton(1);
++			widget->grpSwitching->setSelected(1);
+ 			break;
+ 		case SWITCH_POLICY_WIN_CLASS:
+-			widget->grpSwitching->setButton(2);
++			widget->grpSwitching->setSelected(2);
+ 			break;
+ 		case SWITCH_POLICY_WINDOW:
+-			widget->grpSwitching->setButton(3);
++			widget->grpSwitching->setSelected(3);
+ 			break;
+ 	}
+ 
+@@ -373,35 +471,15 @@
+ 
+ 	updateStickyLimit();
+ 
+-	widget->chkEnable->setChecked( m_kxkbConfig.m_useKxkb );
++        int enableKxkb = 2;
++        if( m_kxkbConfig.m_indicatorOnly ) enableKxkb = 1;
++        if( m_kxkbConfig.m_useKxkb ) enableKxkb = 0;
++        widget->grpEnableKxkb->setSelected(enableKxkb);
++//	widget->chkEnable->setChecked( m_kxkbConfig.m_useKxkb );
+ 	widget->grpLayouts->setEnabled( m_kxkbConfig.m_useKxkb );
+ 	widget->grpOptions->setEnabled( m_kxkbConfig.m_useKxkb );
+ 
+-	// display xkb options
+-	QStringList options = m_kxkbConfig.m_options.split(',');
+-	for (QListIterator<QString> it(options); it.hasNext(); )
+-	{
+-		QString optionName = it.next();
+-		if( optionName.trimmed().isEmpty() ) {
+-			kWarning() << "skipping empty option name" ;
+-  			continue;
+-		}
+-
+-		const XkbOption& option = m_rules->options()[optionName];
+-		OptionListItem *item = m_optionGroups[ option.group->name ];
+-
+-		if (item != NULL) {
+-			OptionListItem *child = item->findChildItem( option.name );
+-
+-			if ( child )
+-				child->setState( Q3CheckListItem::On );
+-			else
+-				kDebug() << "load: Unknown option: " << optionName;
+-		}
+-		else {
+-			kDebug() << "load: Unknown option group: " << option.group->name << " of " << optionName;
+-		}
+-	}
++        updateShortcutsLabels();
+ 
+ 	updateLayoutCommand();
+ 	updateOptionsCommand();
+@@ -411,25 +489,23 @@
+ 
+ void LayoutConfig::save()
+ {
+-//	QString model = lookupLocalized(m_rules->models(), widget->comboModel->currentText());
+ 	QString model = widget->comboModel->itemData(widget->comboModel->currentIndex()).toString();
+ 	m_kxkbConfig.m_model = model;
+ 
+ 	m_kxkbConfig.m_enableXkbOptions = widget->chkEnableOptions->isChecked();
+ 	m_kxkbConfig.m_resetOldOptions = widget->checkResetOld->isChecked();
+-	m_kxkbConfig.m_options = createOptionString();
+ 
+ 	if( m_kxkbConfig.m_layouts.count() == 0 ) {
+-		m_kxkbConfig.m_layouts.append(LayoutUnit(DEFAULT_LAYOUT_UNIT));
+- 		widget->chkEnable->setChecked(false);
++	    m_kxkbConfig.m_layouts.append(LayoutUnit(DEFAULT_LAYOUT_UNIT));
++ 	    widget->grpEnableKxkb->setSelected(BTN_XKB_DISABLE);
+  	}
+ 
+-	m_kxkbConfig.m_useKxkb = widget->chkEnable->isChecked();
+-	m_kxkbConfig.m_indicatorOnly = widget->chkIndicatorOnly->isChecked();
++	m_kxkbConfig.m_useKxkb = widget->grpEnableKxkb->selected() <= BTN_XKB_INDICATOR;
++	m_kxkbConfig.m_indicatorOnly = widget->grpEnableKxkb->selected() == BTN_XKB_INDICATOR;
+ 	m_kxkbConfig.m_showSingle = widget->chkShowSingle->isChecked();
+ 	m_kxkbConfig.m_showFlag = widget->chkShowFlag->isChecked();
+ 
+-	int modeId = widget->grpSwitching->id(widget->grpSwitching->selected());
++	int modeId = widget->grpSwitching->selected();
+ 	switch( modeId ) {
+ 		default:
+ 		case 0:
+@@ -455,21 +531,105 @@
+ 	emit KCModule::changed( false );
+ }
+ 
++void LayoutConfig::xkbOptionsChanged(const QModelIndex & /*topLeft*/, const QModelIndex & /*bottomRight*/)
++{
++//    kDebug() << "chked" << topLeft << bottomRight;
++    updateOptionsCommand();
++    updateShortcutsLabels();
++    changed();
++//    widget->xkbOptionsTreeView->update(topLeft);
++}
++
++void LayoutConfig::xkbShortcutPressed()
++{
++    widget->tabWidget->setCurrentIndex(TAB_XKB);
++    m_xkbOptModel->gotoGroup("grp", widget->xkbOptionsTreeView);
++}
++
++void LayoutConfig::xkbShortcut3dPressed()
++{
++    widget->tabWidget->setCurrentIndex(TAB_XKB);
++    m_xkbOptModel->gotoGroup("lv3", widget->xkbOptionsTreeView);
++}
++
++void LayoutConfig::kdeShortcutPressed()
++{
++    QStringList args;
++    args << "keys";
++    int res = KToolInvocation::kdeinitExecWait( "kcmshell", args );
++    if( res )
++        updateShortcutsLabels();
++    else
++        kError() << "failed to start 'kcmshell keys'";
++}
++
++static QString getShortcutText(const QStringList& options, const QString& grp)
++{
++    QRegExp grpRegExp("^" + grp + ".*");
++    QStringList grpOptions = options.filter(grpRegExp);
++    
++    if( grpOptions.count() > 1 )
++        return i18n("Multiple keys");
++    else
++    if( grpOptions.count() == 1 )
++        return i18n("Defined");
++    else
++        return i18n("Not defined");
++}
++
++void LayoutConfig::updateShortcutsLabels()
++{
++    QString txt = getShortcutText( m_kxkbConfig.m_options, "grp" );
++    widget->xkbShortcut->setText(txt);
++    txt = getShortcutText( m_kxkbConfig.m_options, "lv3" );
++    widget->xkbShortcut3d->setText(txt);
++
++    KActionCollection actions(this);
++    actions.setConfigGlobal(true);
++    actions.readSettings();
++    kDebug() << "global actions count" << actions.count();
++//    QStringList ga = KGlobalAccel::findActionNameSystemwide( QKeySequence(Qt::ALT+Qt::CTRL+Qt::Key_K) );
++//    kDebug() << ga;
++    QAction* action = actions.action(I18N_NOOP("Switch to Next Keyboard Layout"));
++    if( action != NULL ) {
++        widget->kdeShortcut->setText( action->shortcut().toString(QKeySequence::NativeText) );
++    }
++    else {
++        widget->kdeShortcut->setText(i18n("Not defined"));
++    }
++}
+ 
+ void LayoutConfig::updateStickyLimit()
+ {
+     int layoutsCnt = m_kxkbConfig.m_layouts.count();
+-	int maxDepth = layoutsCnt - 1;
++    int maxDepth = layoutsCnt - 1;
+ 
+-	if( maxDepth < 2 ) {
+-		maxDepth = 2;
+-	}
++    if( maxDepth < 2 ) {
++        maxDepth = 2;
++    }
+ 
+-	widget->spinStickyDepth->setMaximum(maxDepth);
++    widget->spinStickyDepth->setMaximum(maxDepth);
+ /*	if( value > maxDepth )
+ 		setValue(maxDepth);*/
+ }
+ 
++
++void LayoutConfig::enableChanged()
++{
++    bool enabled = widget->grpEnableKxkb->selected() == 0;
++    if( enabled && m_kxkbConfig.m_layouts.count() == 0 ) {
++#ifdef HAVE_XKLAVIER
++	QList<LayoutUnit> lus = XKlavierAdaptor::getInstance(QX11Info::display())->getGroupNames();
++	if( lus.count() > 0 ) {
++	    m_kxkbConfig.setConfiguredLayouts(lus);
++            m_dstModel->reset();
++            widget->dstTableView->update();
++	}
++#endif
++    }
++    changed();
++}
++
+ void LayoutConfig::add()
+ {
+     QItemSelectionModel* selectionModel = widget->srcTableView->selectionModel();
+@@ -483,11 +643,11 @@
+     kDebug() << "selected to add" << layout;
+     m_kxkbConfig.m_layouts << LayoutUnit(layout, "");
+ 
+-	m_dstModel->reset();
+-	widget->dstTableView->update();
++    m_dstModel->reset();
++    widget->dstTableView->update();
+ 
+-	updateAddButton();
+-	updateLayoutCommand();
++    updateAddButton();
++    updateLayoutCommand();
+ 
+     updateStickyLimit();
+     changed();
+@@ -506,15 +666,16 @@
+ 	return;
+ 
+     QModelIndexList selected = selectionModel->selectedRows();
++    kDebug() << "removing" << selected;
+     m_kxkbConfig.m_layouts.removeAt(selected[0].row());
+ 
+-	m_dstModel->reset();
+-	widget->dstTableView->update();
++    m_dstModel->reset();
++    widget->dstTableView->update();
+ 
+-	layoutSelChanged();
+-	updateAddButton();
+-	updateLayoutCommand();
+-	updateStickyLimit();
++    layoutSelChanged();
++    updateAddButton();
++    updateLayoutCommand();
++    updateStickyLimit();
+ 
+     changed();
+ }
+@@ -526,6 +687,9 @@
+ 	return;
+ 
+     QModelIndexList selected = selectionModel->selectedRows();
++    if( selected.count() < 1 )
++        return;
++    
+     int row = selected[0].row();
+     int new_row = row + shift;
+     
+@@ -560,12 +724,15 @@
+ 	return;
+     }
+ 
+-	QString selectedVariant = widget->comboVariant->currentText();
+-	if( selectedVariant == DEFAULT_VARIANT_NAME )
+-		selectedVariant = "";
+-	m_kxkbConfig.m_layouts[row].variant = selectedVariant;
++    QString selectedVariant = widget->comboVariant->currentText();
++    if( selectedVariant == DEFAULT_VARIANT_NAME )
++        selectedVariant = "";
++    
++    m_kxkbConfig.m_layouts[row].variant = selectedVariant;
++    m_dstModel->reset();
++    widget->dstTableView->update();
+ 
+-	updateLayoutCommand();
++    updateLayoutCommand();
+     changed();
+ }
+ 
+@@ -596,10 +763,10 @@
+ {
+     QItemSelectionModel* selectionModel = widget->dstTableView->selectionModel();
+     if( selectionModel == NULL || !selectionModel->hasSelection() )
+-	return - 1;
++	return -1;
+ 
+     QModelIndexList selected = selectionModel->selectedRows();
+-    int row = selected[0].row();
++    int row = selected.count() > 0 ? selected[0].row() : -1;
+     return row;
+ }
+ 
+@@ -630,127 +797,51 @@
+ 
+ 		QString variant = m_kxkbConfig.m_layouts[row].variant;
+ 		if( variant != NULL && variant.isEmpty() == false ) {
+-			widget->comboVariant->setCurrentText(variant);
++                    int idx = widget->comboVariant->findText(variant);
++		    widget->comboVariant->setCurrentIndex(idx);
+ 		}
+ 		else {
+-			widget->comboVariant->setCurrentIndex(0);
++		    widget->comboVariant->setCurrentIndex(0);
+ 		}
+ 	}
+ //	updateDisplayName();
+ }
+ 
+-QWidget* LayoutConfig::makeOptionsTab()
++void LayoutConfig::makeOptionsTab()
+ {
+-  Q3ListView *listView = widget->listOptions;
+-
+-  listView->setMinimumHeight(150);
+-  listView->setSortColumn( -1 );
+-  listView->setColumnText( 0, i18n( "Options" ) );
+-  listView->clear();
+-
+-  connect(listView, SIGNAL(clicked(Q3ListViewItem *)), SLOT(changed()));
+-  connect(listView, SIGNAL(clicked(Q3ListViewItem *)), SLOT(updateOptionsCommand()));
+-
+-  connect(widget->chkEnableOptions, SIGNAL(toggled(bool)), SLOT(changed()));
+-
+-  connect(widget->checkResetOld, SIGNAL(toggled(bool)), SLOT(changed()));
+-  connect(widget->checkResetOld, SIGNAL(toggled(bool)), SLOT(updateOptionsCommand()));
+-
+-  //Create controllers for all options
+-  QHashIterator<QString, XkbOptionGroup> it( m_rules->optionGroups() );
+-  for (; it.hasNext(); )
+-  {
+-	  OptionListItem *parent;
+-	  const XkbOptionGroup& optionGroup = it.next().value();
+-
+-      if( optionGroup.exclusive ) {
+-        parent = new OptionListItem(listView, i18n( optionGroup.description ),
+-          		Q3CheckListItem::RadioButtonController, optionGroup.name);
+-        OptionListItem *item = new OptionListItem(parent, i18n( "None" ),
+-          		Q3CheckListItem::RadioButton, "none");
+-        item->setState(Q3CheckListItem::On);
+-      }
+-      else {
+-        parent = new OptionListItem(listView, i18n( optionGroup.description ),
+-            Q3CheckListItem::CheckBoxController, optionGroup.name);
+-      }
+-
+-      parent->setOpen(true);
+-      m_optionGroups.insert( optionGroup.name, parent);
+-	  kDebug() << "optionGroup insert: " << optionGroup.name;
+-  }
+-
+-
+-  QHashIterator<QString, XkbOption> it2( m_rules->options() );
+-  for (; it2.hasNext(); )
+-  {
+-	  const XkbOption& option = it2.next().value();
+-
+-	  OptionListItem *parent = m_optionGroups[option.group->name];
+-	  if( parent == NULL ) {
+-		kError() << "no option group item for group: " << option.group->name
+-			   << " for option " << option.name << endl;
+-		exit(1);
+-	  }
+-
+-     if( parent->type() == Q3CheckListItem::RadioButtonController )
+-		new OptionListItem(parent, i18n( option.description ),
+-             Q3CheckListItem::RadioButton, option.name);
+-     else
+-	 	new OptionListItem(parent, i18n( option.description ),
+-            Q3CheckListItem::CheckBox, option.name);
+-
+-//	  kDebug() << "option insert: " << option.name;
+-  }
+-
+-  //scroll->setMinimumSize(450, 330);
++    connect(widget->chkEnableOptions, SIGNAL(toggled(bool)), SLOT(changed()));
+ 
+-  return listView;
++    connect(widget->checkResetOld, SIGNAL(toggled(bool)), SLOT(changed()));
++    connect(widget->checkResetOld, SIGNAL(toggled(bool)), SLOT(updateOptionsCommand()));
+ }
+ 
+ void LayoutConfig::updateOptionsCommand()
+ {
+-  QString setxkbmap;
+-  QString options = createOptionString();
+-
+-  if( !options.isEmpty() ) {
+-    setxkbmap = "setxkbmap -option "; //-rules " + m_rule
+-    if( widget->checkResetOld->isChecked() )
+-      setxkbmap += "-option ";
+-    setxkbmap += options;
+-  }
+-  widget->editCmdLineOpt->setText(setxkbmap);
++  widget->editCmdLineOpt->setText(createOptionString());
+ }
+ 
+ void LayoutConfig::updateLayoutCommand()
+ {
+-	QString kbdLayouts;
+-	QString kbdVariants;
++    QStringList layouts;
++    QStringList variants;
+ 
+-	QList<LayoutUnit> layouts = m_kxkbConfig.m_layouts;
+-	for(int i=0; i<layouts.count(); i++) {
+-		QString layout = layouts[i].layout;
+-		QString variant = layouts[i].variant;
+-		QString displayName = layouts[i].displayName;
+-
+-		if( variant == DEFAULT_VARIANT_NAME )
+-			variant = "";
+-
+-		if( kbdLayouts.length() > 0 ) {
+-			kbdLayouts += ',';
+-			kbdVariants += ',';
+-		}
++    QList<LayoutUnit> layoutUnits = m_kxkbConfig.m_layouts;
++    for(int i=0; i<layoutUnits.count(); i++) {
++	QString layout = layoutUnits[i].layout;
++	QString variant = layoutUnits[i].variant;
++	//QString displayName = layoutUnits[i].displayName;
+ 
+-		kbdLayouts += layout;
+-		kbdVariants += variant;
+-	}
++	if( variant == DEFAULT_VARIANT_NAME )
++	    variant = "";
++
++	layouts << layout;
++	variants << variant;
++    }
+ 
+-    QString setxkbmap = "setxkbmap";
+-    setxkbmap += " -model " + widget->comboModel->itemData(widget->comboModel->currentIndex()).toString();
+-    setxkbmap += " -layout " + kbdLayouts;
+-    setxkbmap += " -variant " + kbdVariants;
++    QString model = widget->comboModel->itemData(widget->comboModel->currentIndex()).toString();
++    QString setxkbmap = XKBExtension::getLayoutGroupsCommand(model, layouts, variants);
+ 
+-	widget->editCmdLine->setText(setxkbmap);
++    widget->editCmdLine->setText(setxkbmap);
+ }
+ 
+ /*
+@@ -788,15 +879,14 @@
+ 
+ void LayoutConfig::changed()
+ {
+-  bool enabled = widget->chkEnable->isChecked();
++  bool enabled = widget->grpEnableKxkb->selected() == BTN_XKB_ENABLE;
+ 
+-  widget->chkIndicatorOnly->setEnabled(enabled);
+-  if( ! enabled )
+-	widget->chkIndicatorOnly->setChecked(false);
++//  widget->chkIndicatorOnly->setEnabled(enabled);
++//  if( ! enabled )
++//	widget->chkIndicatorOnly->setChecked(false);
+ 
+   widget->grpLayouts->setEnabled(enabled);
+-  widget->grpSwitching->setEnabled(enabled);
+-//  widget->grpStickySwitching->setEnabled(enabled);
++  widget->tabWidget->widget(TAB_OPTIONS)->setEnabled(enabled);
+ 
+ //  bool indicatorOnly = widget->chkIndicatorOnly->isChecked();
+ //  widget->grpIndicator->setEnabled(indicatorOnly);
+@@ -807,7 +897,7 @@
+ 
+ void LayoutConfig::loadRules()
+ {
+-    // do we need this ?
++    // TODO: do we need this ?
+     // this could obly be used if rules are changed and 'Defaults' is pressed
+     delete m_rules;
+     m_rules = new XkbRules();
+@@ -815,6 +905,8 @@
+         m_srcModel->setRules(m_rules);
+     if( m_dstModel )
+ 	m_dstModel->setRules(m_rules);
++    if( m_xkbOptModel )
++	m_xkbOptModel->setRules(m_rules);
+ }
+ 
+ void LayoutConfig::refreshRulesUI()
+@@ -838,67 +930,40 @@
+ 
+ QString LayoutConfig::createOptionString()
+ {
+-  QString options;
+-  for (QHashIterator<QString, XkbOption> it(m_rules->options()); it.hasNext(); )
+-  {
+-    const XkbOption& option = it.next().value();
+-
+-      OptionListItem *item = m_optionGroups[ option.group->name ];
+-
+-      if( !item ) {
+-        kDebug() << "WARNING: skipping empty group for " << option.name
+-          << " - could not found group: " << option.group->name << endl;
+-        continue;
+-      }
+-
+-      OptionListItem *child = item->findChildItem( option.name );
+-
+-      if ( child ) {
+-        if ( child->state() == Q3CheckListItem::On ) {
+-          QString selectedName = child->optionName();
+-          if ( !selectedName.isEmpty() && selectedName != "none" ) {
+-            if (!options.isEmpty())
+-              options.append(',');
+-            options.append(selectedName);
+-          }
+-        }
+-      }
+-      else
+-        kDebug() << "Empty option button for group " << it.key();
+-  }
+-  return options;
++    bool reset = widget->checkResetOld->isChecked();
++    return XKBExtension::getXkbOptionsCommand(m_kxkbConfig.m_options, reset);
+ }
+ 
+ 
+ void LayoutConfig::defaults()
+ {
+-	loadRules();
+-	refreshRulesUI();
+-	m_kxkbConfig.setDefaults();
++    loadRules();
++    refreshRulesUI();
++    m_kxkbConfig.setDefaults();
+ 
+-	initUI();
++    initUI();
+ 
+-	emit KCModule::changed( true );
++    emit KCModule::changed( true );
+ }
+ 
+ extern "C"
+ {
+-	KDE_EXPORT void kcminit_keyboard()
+-	{
+-		KxkbConfig m_kxkbConfig;
+-		m_kxkbConfig.load(KxkbConfig::LOAD_INIT_OPTIONS);
+-
+-		if( m_kxkbConfig.m_useKxkb == true ) {
+-			KToolInvocation::startServiceByDesktopName("kxkb");
+-		}
+-		else {
+-		// Even if the layouts have been disabled we still want to set Xkb options
+-		// user can always switch them off now in the "Options" tab
+-			if( m_kxkbConfig.m_enableXkbOptions ) {
+-				if( !XKBExtension::setXkbOptions(m_kxkbConfig.m_options, m_kxkbConfig.m_resetOldOptions) ) {
+-					kDebug() << "Setting XKB options failed!";
+-				}
+-			}
++    KDE_EXPORT void kcminit_keyboard()
++    {
++	KxkbConfig m_kxkbConfig;
++	m_kxkbConfig.load(KxkbConfig::LOAD_INIT_OPTIONS);
++
++	if( m_kxkbConfig.m_useKxkb ) {
++	    KToolInvocation::startServiceByDesktopName("kxkb");
++	}
++	else {
++	    // Even if the layouts have been disabled we still want to set Xkb options
++	    // user can always switch them off now in the "Options" tab
++	    if( m_kxkbConfig.m_enableXkbOptions ) {
++		if( !XKBExtension::setXkbOptions(m_kxkbConfig.m_options, m_kxkbConfig.m_resetOldOptions) ) {
++		    kDebug() << "Setting XKB options failed!";
+ 		}
++	    }
+ 	}
++    }
+ }
+--- a/kcontrol/kxkb/kxkb_applet.h
++++ b/kcontrol/kxkb/kxkb_applet.h
+@@ -24,64 +24,28 @@
+ #include <QMouseEvent>
+ #include <QPixmap>
+ 
+-#include <kpanelapplet.h>
+-#include <kconfig.h>
++#include <plasma/applet.h>
+ 
+ 
+-class KxkbWidget;
++class QSizeF;
++class KxkbCore;
+ 
+-class KxkbApplet : public KPanelApplet
++class KxkbApplet : public Plasma::Applet
+ {
+   Q_OBJECT
+ public:
+-    explicit KxkbApplet(const QString& configFile, Plasma::Type t = Plasma::Normal,
+-                        int actions = 0, QWidget *parent = 0, Qt::WFlags f = 0);
++    explicit KxkbApplet(QObject *parent, const QVariantList &args);
+     ~KxkbApplet();
+     
+-    virtual int widthForHeight(int height) const;
+-    virtual int heightForWidth(int width) const;
+-    /**
+-     * Is called when the user selects "About" from the applets RMB menu.
+-     * Reimplement this function to launch a about dialog.
+-     *
+-     * Note that this is called only when your applet supports the About action.
+-     * See @ref Action and @ref KPanelApplet().
+-     **/
+-
+-//  public slots:
+-//    virtual void about();
+-    /**
+-     * Is called when the user selects "Help" from the applets RMB menu.
+-     * Reimplement this function to launch a manual or help page.
+-     *
+-     * Note that this is called only when your applet supports the Help action.
+-     * See @ref Action and @ref KPanelApplet().
+-     **/
+-//    virtual void help();
+-    /**
+-     * Is called when the user selects "Preferences" from the applets RMB menu.
+-     * Reimplement this function to launch a preferences dialog or kcontrol module.
+-     *
+-     * Note that this is called only when your applet supports the preferences action.
+-     * See @ref Action and @ref KPanelApplet().
+-     **/
+-//    virtual void preferences();
+-    
+-//protected:
+-//    void resizeEvent(QResizeEvent *);
+-//    void mousePressEvent(QMouseEvent *e);
+-
++    void paintInterface(QPainter *painter,
++                    const QStyleOptionGraphicsItem *option,
++                                    const QRect& contentsRect);
++    QSizeF contentSizeHint() const;
+ 
+ private:
+-	KxkbWidget* kxkbWidget;
+-//private:
+-//    KConfig *ksConfig;
+-//    QWidget *mainView;
+-//    KPopupMenu *mContextMenu;
+-//    KPopupFrame *mBrightnessChooserFrame;
+-//    BrightnessChooserImpl *chooser;
+-
+-//private: // Private methods
++    KxkbCore* m_kxkbCore;
+ };
+ 
++K_EXPORT_PLASMA_APPLET(kxkb, KxkbApplet)
++
+ #endif
+--- a/kcontrol/kxkb/layoutmap.cpp
++++ b/kcontrol/kxkb/layoutmap.cpp
+@@ -42,34 +42,33 @@
+ 
+ void LayoutMap::reset()
+ {
+-	clearMaps();
+-	setCurrentWindow( X11Helper::UNKNOWN_WINDOW_ID );
++    clearMaps();
++    ownerChanged();
++    m_currentWinId = X11Helper::UNKNOWN_WINDOW_ID;
+ }
+ 
+ 
+-
+-void LayoutMap::setCurrentWindow(WId winId)
++void LayoutMap::ownerChanged()
+ {
+-	m_currentWinId = winId;
++    if( m_kxkbConfig.m_switchingPolicy == SWITCH_POLICY_DESKTOP ) {
++	m_currentDesktop = KWindowSystem::currentDesktop();
++    }
++    else {
++	m_currentWinId = KWindowSystem::activeWindow();
+ 	if( m_kxkbConfig.m_switchingPolicy == SWITCH_POLICY_WIN_CLASS )
+-		m_currentWinClass = X11Helper::getWindowClass(winId, QX11Info::display());
+-	else
+-	if( m_kxkbConfig.m_switchingPolicy == SWITCH_POLICY_DESKTOP )
+-		m_currentDesktop = KWindowSystem::currentDesktop();
++	    m_currentWinClass = X11Helper::getWindowClass(m_currentWinId, QX11Info::display());
++    }
+ }
+ 
+ // private
+-//LayoutQueue& 
+ QQueue<int>& LayoutMap::getCurrentLayoutQueueInternal()
+ {
+ 	if( m_currentWinId == X11Helper::UNKNOWN_WINDOW_ID )
+ 		return m_globalLayouts;
+ 	
+ 	switch( m_kxkbConfig.m_switchingPolicy ) {
+-		case SWITCH_POLICY_WIN_CLASS: {
+-//			QString winClass = X11Helper::getWindowClass(winId, qt_xdisplay());
++		case SWITCH_POLICY_WIN_CLASS:
+ 			return m_appLayouts[ m_currentWinClass ];
+-		}
+ 		case SWITCH_POLICY_WINDOW:
+ 			return m_winLayouts[ m_currentWinId ];
+ 		case SWITCH_POLICY_DESKTOP:
+@@ -95,7 +94,6 @@
+ }
+ 
+ // private
+-//LayoutQueue& 
+ QQueue<int>& LayoutMap::getCurrentLayoutQueue()
+ {
+ 	QQueue<int>& layoutQueue = getCurrentLayoutQueueInternal();
+@@ -116,18 +114,14 @@
+ 	int layoutState = layoutQueue.dequeue();
+ 	layoutQueue.enqueue(layoutState);
+ 	
+-	kDebug() << "map: Next layout: " << layoutQueue.head() 
+-// 			<< " group: " << layoutQueue.head()->layoutUnit.defaultGroup 
+-			<< " for " << getOwner();
++	kDebug() << "map: Next layout: " << layoutQueue.head() << " for " << getOwner();
+ 	
+ 	return layoutQueue.head();
+ }
+ 
+ void LayoutMap::setCurrentLayout(int layoutUnit) {
+-	LayoutQueue& layoutQueue = getCurrentLayoutQueue(/*m_currentWinId*/);
+-	kDebug() << "map: Storing layout: " << layoutUnit 
+-// 			<< " group: " << layoutUnit.defaultGroup 
+-			<< " for " << getOwner();
++	LayoutQueue& layoutQueue = getCurrentLayoutQueue();
++	kDebug() << "map: Storing layout: " << layoutUnit << " for " << getOwner();
+ 	
+ 	int queueSize = (int)layoutQueue.count();
+ 	for(int ii=0; ii<queueSize; ii++) {
+--- a/kcontrol/kxkb/extension.cpp
++++ b/kcontrol/kxkb/extension.cpp
+@@ -20,8 +20,6 @@
+ #include <errno.h>
+ 
+ 
+-#include <QMap>
+-#include <QFile>
+ #include <QX11Info>
+ 
+ #include <kdebug.h>
+@@ -32,36 +30,22 @@
+ #include <X11/Xos.h>
+ #include <X11/Xlib.h>
+ #include <X11/XKBlib.h>
++#ifndef HAVE_XKLAVIER
+ #include <X11/extensions/XKBfile.h>
+-//#include <X11/extensions/XKBgeom.h>
+-#include <X11/extensions/XKM.h>
++#endif
+ 
+ #include "extension.h"
+ 
+ 
+-// QMap<QString, FILE*> XKBExtension::fileCache;	//TODO: move to class?
++static const char* SETXKBMAP_SEPARATOR=",";
+ 
+-
+-static QString getLayoutKey(const QString& layout, const QString& variant)
+-{
+-	return layout + '.' + variant;
+-}
+-
+-// QString XKBExtension::getPrecompiledLayoutFilename(const QString& layoutKey)
+-// {
+-// 	QString compiledLayoutFileName = m_tempDir + layoutKey + ".xkm";
+-// 	return compiledLayoutFileName;
+-// }
++QString XKBExtension::m_setxkbmap_exe = "";
+ 
+ XKBExtension::XKBExtension(Display *d)
+ {
+-	if ( d == NULL )
+-		d = QX11Info::display();
+-	m_dpy = d;
+-	
+-//	QStringList dirs = KGlobal::dirs()->findDirs ( "tmp", "" );
+-//	m_tempDir = dirs.count() == 0 ? "/tmp/" : dirs[0];
+-// 	m_tempDir = KStandardDirs::locateLocal("tmp", "");
++    if ( d == NULL )
++        d = QX11Info::display();
++    m_dpy = d;
+ }
+ 
+ bool XKBExtension::init()
+@@ -91,119 +75,125 @@
+         return false;
+     }
+ 
++#ifndef HAVE_XKLAVIER
+     // Do it, or face horrible memory corrupting bugs
+     ::XkbInitAtoms(NULL);
++#endif
+ 
+-	int eventMask = XkbNewKeyboardNotifyMask | XkbStateNotifyMask;
+-    if (!XkbSelectEvents(m_dpy, XkbUseCoreKbd, eventMask, eventMask)) {
+-	   kDebug() << "Couldn't select desired XKB events";
+-	   return false;
+-	}
++    int eventMask = XkbNewKeyboardNotifyMask | XkbStateNotifyMask;
++    if( !XkbSelectEvents(m_dpy, XkbUseCoreKbd, eventMask, eventMask) ) {
++	kDebug() << "Couldn't select desired XKB events";
++	return false;
++    }
+ 
+-	kDebug() << "XKB inited";
++    kDebug() << "XKB inited";
+ 
+     return true;
+ }
+ 
+-void XKBExtension::reset()
++XKBExtension::~XKBExtension()
+ {
+-// 	for(QMap<QString, FILE*>::ConstIterator it = fileCache.begin(); it != fileCache.end(); ++it) {
+-// 		fclose(*it);
+-// //		remove( QFile::encodeName(getPrecompiledLayoutFileName(*it)) );
+-// 	}
+-// 	fileCache.clear();
+ }
+ 
+-XKBExtension::~XKBExtension()
++QString XKBExtension::getSetxkbmapExe()
+ {
+-/*	if( m_compiledLayoutFileNames.isEmpty() == false )
+-		deletePrecompiledLayouts();*/
++    if( m_setxkbmap_exe.isEmpty() ) {
++        m_setxkbmap_exe = KGlobal::dirs()->findExe("setxkbmap");
++        if( m_setxkbmap_exe.isEmpty() )
++	    kError() << "Can't find setxkbmap" << endl;
++    }
++    return m_setxkbmap_exe;
++}
++
++QString XKBExtension::getXkbOptionsCommand(const QStringList& options, bool resetOld)
++{
++    if( options.empty() && ! resetOld )
++        return "";
++
++    QString cmd = "setxkbmap";
++    if( resetOld )
++        cmd += " -option";
++
++    if( ! options.empty() ) {
++        cmd += " -option ";
++        cmd += options.join(SETXKBMAP_SEPARATOR);
++    }
++    return cmd;
+ }
+ 
+-bool XKBExtension::setXkbOptions(const QString& options, bool resetOld)
++bool XKBExtension::setXkbOptions(const QStringList& options, bool resetOld)
+ {
+-    if (options.isEmpty())
++    kDebug() << "Setting XKB options " << options.join(SETXKBMAP_SEPARATOR);
++
++    if( options.empty() && ! resetOld )
+         return true;
+ 
+-    QString exe = KGlobal::dirs()->findExe("setxkbmap");
+-    if (exe.isEmpty())
++    getSetxkbmapExe();
++    if( m_setxkbmap_exe.isEmpty() )
+         return false;
+ 
+     KProcess p;
+-    p << exe;
++    p << m_setxkbmap_exe;
++
+     if( resetOld )
+         p << "-option";
+-    p << "-option" << options;
++    p << "-option" << options.join(SETXKBMAP_SEPARATOR);
+ 
+-    return p.execute() == 0;
+-}
++    kDebug() << "executing" << p.program().join(" ");
+ 
+-bool XKBExtension::setLayout(const QString& model,
+-		const QString& layout, const QString& variant,
+-		const QString& includeGroup, bool useCompiledLayouts)
+-{
+-	if( useCompiledLayouts == false ) {
+-		return setLayoutInternal( model, layout, variant, includeGroup );
+-	}
+-	
+-	const QString layoutKey = getLayoutKey(layout, variant);
+-	
+-	bool res = setLayoutInternal( model, layout, variant, includeGroup );
+-	kDebug() << "setRawLayout " << layoutKey << ": " << res;
+-	return res;
++    return p.execute() == 0;
+ }
+ 
+-
+-bool XKBExtension::setLayoutGroups(const QString& layouts, const QString& variants)
++QString XKBExtension::getLayoutGroupsCommand(const QString& model, const QStringList& layouts, const QStringList& variants)
+ {
+-	bool res = setLayoutInternal( "", layouts, variants, "" );
+-	kDebug() << "setRawLayout " << layouts << ": " << variants << " res: " << res;
+-	return res;
++    if( layouts.empty() )
++        return "";
++
++    QString cmd = "setxkbmap";
++    
++    if( ! model.isEmpty() ) {
++        cmd += " -model ";
++        cmd += model;
++    }
++        
++    cmd += " -layout ";
++    cmd += layouts.join(SETXKBMAP_SEPARATOR);
++
++    if( ! variants.empty() ) {
++        cmd += " -variant ";
++        cmd += variants.join(SETXKBMAP_SEPARATOR);
++    }
++    return cmd;
+ }
+ 
+-// private
+-bool XKBExtension::setLayoutInternal(const QString& model,
+-		const QString& layout, const QString& variant,
+-		const QString& includeGroup)
++bool XKBExtension::setLayoutGroups(const QString& model, const QStringList& layouts, const QStringList& variants)
+ {
+-    if ( layout.isEmpty() )
++    if( layouts.empty() )
+         return false;
+ 
+-	QString exe = KGlobal::dirs()->findExe("setxkbmap");
+-	if( exe.isEmpty() ) {
+-		kError() << "Can't find setxkbmap" << endl;
+-		return false;
+-	}
+-
+-    QString fullLayout = layout;
+-    QString fullVariant = variant;
+-	if( includeGroup.isEmpty() == false ) {
+-        fullLayout = includeGroup;
+-        fullLayout += ',';
+-        fullLayout += layout;
+-		
+-//    fullVariant = baseVar;
+-        fullVariant = ",";
+-        fullVariant += variant;
+-    }
+- 
++    getSetxkbmapExe();
++    if( m_setxkbmap_exe.isEmpty() )
++	return false;
++
+     KProcess p;
+-    p << exe;
+-//  p << "-rules" << rule;
+-	if( model.isEmpty() == false )
+-		p << "-model" << model;
+-    p << "-layout" << fullLayout;
+-    if( !fullVariant.isNull() && !fullVariant.isEmpty() )
+-        p << "-variant" << fullVariant;
++    p << m_setxkbmap_exe;
++    
++    if( ! model.isEmpty() )
++        p << "-model" << model;
++        
++    p << "-layout" << layouts.join(SETXKBMAP_SEPARATOR);
++
++    if( variants.empty() )
++        p << "-variant" << variants.join(SETXKBMAP_SEPARATOR);
+ 
+-	kDebug() << "Ext: setting " << fullLayout << ", " << fullVariant;
++    kDebug() << "executing" << p.program().join(" ");
+ 	
+     return p.execute() == 0;
+ }
+ 
+ bool XKBExtension::setGroup(unsigned int group)
+ {
+-	kDebug() << "Setting group " << group;
++//	kDebug() << "Setting group " << group;
+ 	return XkbLockGroup( m_dpy, XkbUseCoreKbd, group );
+ }
+ 
+--- a/kcontrol/kxkb/x11helper.h
++++ b/kcontrol/kxkb/x11helper.h
+@@ -19,36 +19,40 @@
+ #ifndef X11HELPER_H_
+ #define X11HELPER_H_
+ 
++#include <X11/Xlib.h>
+ #include <QHash>
+ 
++struct XkbOption;
++
+ struct XkbOptionGroup {
+-  QString name;
+-  QString description;
+-  bool exclusive;
++    QString name;
++    QString description;
++    bool exclusive;
++    QList<XkbOption> options;
+ };
+ 
+ struct XkbOption {
+-  QString name;
+-  QString description;
+-  XkbOptionGroup* group;
++    QString name;
++    QString description;
++    XkbOptionGroup* group;
+ };
+ 
+ struct RulesInfo {
+-	QHash<QString, QString> models;
+-	QHash<QString, QString> layouts;
+-	QHash<QString, XkbOption> options;
+-	QHash<QString, XkbOptionGroup> optionGroups;
++    QHash<QString, QString> models;
++    QHash<QString, QString> layouts;
++    QHash<QString, XkbOption> options;
++    QHash<QString, XkbOptionGroup> optionGroups;
+ };
+ 
+ 
+ class X11Helper
+ {
+ public:
+-	static const WId UNKNOWN_WINDOW_ID = (WId) 0;
++	static const Window UNKNOWN_WINDOW_ID = (Window) 0;
+ 	static const QString X11_WIN_CLASS_ROOT;
+ 	static const QString X11_WIN_CLASS_UNKNOWN;
+ 
+-	static QString getWindowClass(WId winId, Display* dpy);
++	static QString getWindowClass(Window winId, Display* dpy);
+ 
+ #ifndef HAVE_XKLAVIER
+ 	/**
+--- /dev/null
++++ b/kcontrol/kxkb/plasma-applet-kxkb.desktop
+@@ -0,0 +1,81 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Keyboard Map Tool
++Name[af]=Sleutelbord Kaart Program
++Name[ar]=أداة خارطة لوحة المفاتيح
++Name[be]=Інструмент вызначэння раскладак
++Name[bg]=Превключвател на клавиатури
++Name[ca]=Eina per al mapa de teclat
++Name[cs]=Nástroj k nastavení klávesnice
++Name[csb]=Nôrzãdze mapòwaniô klawiaturë
++Name[cy]=Erfyn Map Bysellfwrdd
++Name[da]=Tastaturkortværktøj
++Name[de]=Dienstprogramm zum Tastaturlayout
++Name[el]=Εργαλείο χάρτη πληκτρολογίου
++Name[eo]=Klavararanĝilo
++Name[es]=Redefinición del teclado
++Name[et]=Klaviatuuri paigutus
++Name[eu]=Teklatu-mapa tresna
++Name[fa]=ابزار نگاشت صفحه کلید
++Name[fi]=Näppäimistön järjestys
++Name[fr]=Outil de sélection du clavier
++Name[fy]=Toetseboerdyndieling
++Name[ga]=Uirlis Mhapála Méarchláir
++Name[gl]=Ferramenta do Mapa de Teclado
++Name[he]=כלי מיפוי מקשים
++Name[hr]=Alat za mapiranje tipkovnice
++Name[hu]=Billentyűzetkiosztás-kezelő alkalmazás
++Name[is]=Skipulagstól lyklaborðs
++Name[it]=Strumento per la mappatura della tastiera
++Name[ja]=キーボードマップツール
++Name[ka]=კლავიატურის განლაგების გადართვა
++Name[kk]=Перенетақтаны ауыстырушысы
++Name[km]=ឧបករណ៍​ផ្គូផ្គង​ក្តារចុច​
++Name[ko]=키보드 맵 도구
++Name[lt]=Klaviatūros maketų įrankis
++Name[lv]=Tastatūras Piesaistes Rīks
++Name[mk]=Алатка за мапирање на тастатурата
++Name[nb]=Verktøy for tastaturoppsett
++Name[nds]=Tasttoornen-Warktüüch
++Name[ne]=कुञ्जीपाटी मानचित्र उपकरण
++Name[nl]=Toetsenbordindeling
++Name[nn]=Verktøy for tastaturoppsett
++Name[pa]=ਕੀ-ਬੋਰਡ ਮੈਪ ਸੰਦ
++Name[pl]=Narzędzie mapowania klawiatury
++Name[pt]=Disposição do Teclado
++Name[pt_BR]=Ferramenta de Mapeamento do Teclado
++Name[ro]=Utilitar mapare tastatură
++Name[ru]=Переключатель раскладки клавиатуры
++Name[se]=Reaidu boallobeavdeheiveheapmái
++Name[sl]=Razpored tipk
++Name[sr]=Алат за мапирање тастатуре
++Name[sr at latin]=Alat za mapiranje tastature
++Name[sv]=Verktyg för tangentbordslayout
++Name[ta]=விசைப்பலகை குறுக்குவழி கருவி
++Name[tg]=Обзори нақшаи сафҳаи калид
++Name[th]=เครื่องมือจัดตารางปุ่มพิมพ์
++Name[tr]=Klavye Harita Aracı
++Name[uk]=Утиліта розкладки клавіатури
++Name[uz]=Тугмалар тартиби учун восита
++Name[vi]=Công cụ Ánh xạ Bàn phím
++Name[wa]=Adjinçmint del taprece
++Name[x-test]=xxKeyboard Map Toolxx
++Name[xh]=Isixhobo semaphu yebhodi enezitshixo
++Name[zh_CN]=键盘映射工具
++Name[zh_TW]=鍵盤映射工具
++Icon=keyboard_layout
++
++Type=Service
++ServiceTypes=Plasma/Applet
++
++X-KDE-Library=plasma_applet_kxkb
++X-KDE-UniqueApplet=true
++
++X-KDE-PluginInfo-Author=Andriy Rysin
++X-KDE-PluginInfo-Email=rysin at kde.org
++X-KDE-PluginInfo-Name=kxkb
++X-KDE-PluginInfo-Version=0.1
++X-KDE-PluginInfo-Category=Keyboard
++X-KDE-PluginInfo-Depends=
++X-KDE-PluginInfo-License=GPL
++X-KDE-PluginInfo-EnabledByDefault=true
+--- a/kcontrol/kxkb/TODO
++++ b/kcontrol/kxkb/TODO
+@@ -1,18 +1,10 @@
+-KDE4:
+- Catch events - layout change (late)
+- Applet - make icon work, check startup and conflict with kxkb
+  Modifier shortcuts - easier screen for Ctrl+Shift
++ Shortcut
+  Shortcut per layout
+- KPart
+- i18n
+-
+- general:
+-  - KAccels
+-  - libxklavier languages
+-
+-  - port deprecated Qt3 widget calls
++ Plasma Applet - make icon work, check startup and conflict with kxkb
++ i18n (kde + libxklavier)
++ Improve component
++ XkbOptions radiobuttons for exclusive group
+ 
+ Others:
+-- krunner_lock: finish kpart
+-
+ - prevent application/window list from growing endlessly
+--- a/kcontrol/kxkb/kxkb_part.cpp
++++ b/kcontrol/kxkb/kxkb_part.cpp
+@@ -28,13 +28,12 @@
+ K_PLUGIN_FACTORY(KxkbPartFactory, registerPlugin<KxkbPart>();)
+ K_EXPORT_PLUGIN(KxkbPartFactory("kxkb_part"))
+ 
+-KxkbPart::KxkbPart( QWidget* parentWidget,
+-               QObject* parent,
++KxkbPart::KxkbPart( QWidget* parent,
+                const QList<QVariant>& args )
+-  : KParts::Part(parent)
++    : QWidget(parent)
+ {
+-	int controlType = KxkbWidget::FULL;
+-	if( args.count() > 0 && args[0].type() == QVariant::Int ) {	//TODO: replace with string?
++	int controlType = KxkbWidget::MENU_LAYOUTS_ONLY;
++/*	if( args.count() > 0 && args[0].type() == QVariant::Int ) {	//TODO: replace with string?
+ 	    controlType = args[0].toInt();
+ 	    kDebug() << "controlType" << controlType << "(" << args[0] << ")";
+ 	    if( controlType <= 0 ) {
+@@ -42,11 +41,11 @@
+ 		return;
+ 	    }
+ 	}
+-
+-	KxkbLabel* kxkbWidget = new KxkbLabel(controlType);
+-	m_kxkbCore = new KxkbCore( kxkbWidget, 2 );	// 2 == NO_INIT
+-	m_kxkbCore->newInstance();
+-	setWidget(kxkbWidget->widget());
++*/
++	m_kxkbCore = new KxkbCore( this, KxkbCore::KXKB_COMPONENT, controlType, KxkbWidget::WIDGET_LABEL );
++	if( m_kxkbCore->newInstance() != 0 )
++            setVisible(false);
++//	setWidget(kxkbWidget->widget());
+ }
+ 
+ bool 
+--- a/kcontrol/kxkb/kxkb.desktop
++++ b/kcontrol/kxkb/kxkb.desktop
+@@ -67,5 +67,5 @@
+ Icon=keyboard
+ X-DBUS-StartupType=Unique
+ 
+-X-KDE-Library=kxkb_panelapplet
++X-KDE-Library=kdeinit_kxkb
+ X-KDE-UniqueApplet=true
+--- a/kcontrol/kxkb/kxkbconfig.h
++++ b/kcontrol/kxkb/kxkbconfig.h
+@@ -109,7 +109,7 @@
+ 	SwitchingPolicy m_switchingPolicy;
+ 	
+ 	QString m_model;
+-	QString m_options;
++	QStringList m_options;
+ 	QList<LayoutUnit> m_layouts;
+ 
+ 	KxkbConfig();
+--- /dev/null
++++ b/kcontrol/keyboard/kcmmiscwidget.ui
+@@ -0,0 +1,328 @@
++<ui version="4.0" >
++ <class>KeyboardConfigWidget</class>
++ <widget class="QWidget" name="KeyboardConfigWidget" >
++  <property name="geometry" >
++   <rect>
++    <x>0</x>
++    <y>0</y>
++    <width>599</width>
++    <height>381</height>
++   </rect>
++  </property>
++  <layout class="QVBoxLayout" >
++   <item>
++    <widget class="QGroupBox" name="groupBox1" >
++     <property name="title" >
++      <string>Keyboard Repeat</string>
++     </property>
++     <layout class="QGridLayout" >
++      <item row="0" column="0" colspan="2" >
++       <widget class="QCheckBox" name="repeatBox" >
++        <property name="whatsThis" >
++         <string>If you check this option, pressing and holding down a key emits the same character over and over again. For example, pressing and holding down the Tab key will have the same effect as that of pressing that key several times in succession: Tab characters continue to be emitted until you release the key.</string>
++        </property>
++        <property name="text" >
++         <string>&amp;Enable keyboard repeat</string>
++        </property>
++        <property name="checked" >
++         <bool>true</bool>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="0" >
++       <widget class="QLabel" name="lblDelay" >
++        <property name="sizePolicy" >
++         <sizepolicy vsizetype="Preferred" hsizetype="Fixed" >
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="text" >
++         <string>&amp;Delay:</string>
++        </property>
++        <property name="buddy" >
++         <cstring>delay</cstring>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="1" >
++       <widget class="QSlider" name="delaySlider" >
++        <property name="whatsThis" >
++         <string>If supported, this option allows you to set the delay after which a pressed key will start generating keycodes. The 'Repeat rate' option controls the frequency of these keycodes.</string>
++        </property>
++        <property name="minimum" >
++         <number>0</number>
++        </property>
++        <property name="maximum" >
++         <number>10000</number>
++        </property>
++        <property name="singleStep" >
++         <number>1000</number>
++        </property>
++        <property name="pageStep" >
++         <number>1000</number>
++        </property>
++        <property name="value" >
++         <number>5000</number>
++        </property>
++        <property name="orientation" >
++         <enum>Qt::Horizontal</enum>
++        </property>
++        <property name="tickInterval" >
++         <number>1000</number>
++        </property>
++       </widget>
++      </item>
++      <item row="1" column="2" >
++       <widget class="KIntNumInput" name="delay" >
++        <property name="whatsThis" >
++         <string>If supported, this option allows you to set the delay after which a pressed key will start generating keycodes. The 'Repeat rate' option controls the frequency of these keycodes.</string>
++        </property>
++       </widget>
++      </item>
++      <item row="2" column="0" >
++       <widget class="QLabel" name="lblRate" >
++        <property name="sizePolicy" >
++         <sizepolicy vsizetype="Preferred" hsizetype="Fixed" >
++          <horstretch>0</horstretch>
++          <verstretch>0</verstretch>
++         </sizepolicy>
++        </property>
++        <property name="text" >
++         <string>&amp;Rate:</string>
++        </property>
++        <property name="buddy" >
++         <cstring>rate</cstring>
++        </property>
++       </widget>
++      </item>
++      <item row="2" column="1" >
++       <widget class="QSlider" name="rateSlider" >
++        <property name="whatsThis" >
++         <string>If supported, this option allows you to set the rate at which keycodes are generated while a key is pressed.</string>
++        </property>
++        <property name="minimum" >
++         <number>0</number>
++        </property>
++        <property name="maximum" >
++         <number>10000</number>
++        </property>
++        <property name="singleStep" >
++         <number>1000</number>
++        </property>
++        <property name="pageStep" >
++         <number>1000</number>
++        </property>
++        <property name="value" >
++         <number>5000</number>
++        </property>
++        <property name="orientation" >
++         <enum>Qt::Horizontal</enum>
++        </property>
++        <property name="tickInterval" >
++         <number>1000</number>
++        </property>
++       </widget>
++      </item>
++      <item row="2" column="2" >
++       <widget class="KDoubleNumInput" name="rate" >
++        <property name="whatsThis" >
++         <string>If supported, this option allows you to set the rate at which keycodes are generated while a key is pressed.</string>
++        </property>
++       </widget>
++      </item>
++     </layout>
++    </widget>
++   </item>
++   <item>
++    <widget class="KButtonGroup" name="numlockGroup" >
++     <property name="whatsThis" >
++      <string>If supported, this option allows you to setup the state of NumLock after KDE startup.&lt;p>You can configure NumLock to be turned on or off, or configure KDE not to set NumLock state.</string>
++     </property>
++     <property name="title" >
++      <string>NumLock on KDE Startup</string>
++     </property>
++     <layout class="QGridLayout" >
++      <item row="1" column="0" >
++       <widget class="QRadioButton" name="RadioButton1_2" >
++        <property name="text" >
++         <string>Turn o&amp;ff</string>
++        </property>
++       </widget>
++      </item>
++      <item row="2" column="0" >
++       <widget class="QRadioButton" name="RadioButton1_3" >
++        <property name="text" >
++         <string>Leave unchan&amp;ged</string>
++        </property>
++       </widget>
++      </item>
++      <item row="0" column="0" >
++       <widget class="QRadioButton" name="RadioButton1" >
++        <property name="text" >
++         <string>T&amp;urn on</string>
++        </property>
++       </widget>
++      </item>
++     </layout>
++    </widget>
++   </item>
++   <item>
++    <widget class="QLabel" name="TextLabel1" >
++     <property name="whatsThis" >
++      <string>If supported, this option allows you to hear audible clicks from your computer's speakers when you press the keys on your keyboard. This might be useful if your keyboard does not have mechanical keys, or if the sound that the keys make is very soft.&lt;p>You can change the loudness of the key click feedback by dragging the slider button or by clicking the up/down arrows on the spin box. Setting the volume to 0% turns off the key click.</string>
++     </property>
++     <property name="text" >
++      <string>Key click &amp;volume:</string>
++     </property>
++     <property name="buddy" >
++      <cstring>click</cstring>
++     </property>
++    </widget>
++   </item>
++   <item>
++    <widget class="KIntNumInput" name="click" >
++     <property name="whatsThis" >
++      <string>If supported, this option allows you to hear audible clicks from your computer's speakers when you press the keys on your keyboard. This might be useful if your keyboard does not have mechanical keys, or if the sound that the keys make is very soft.&lt;p>You can change the loudness of the key click feedback by dragging the slider button or by clicking the up/down arrows on the spin box. Setting the volume to 0% turns off the key click.</string>
++     </property>
++    </widget>
++   </item>
++   <item>
++    <spacer>
++     <property name="orientation" >
++      <enum>Qt::Vertical</enum>
++     </property>
++     <property name="sizeHint" >
++      <size>
++       <width>20</width>
++       <height>40</height>
++      </size>
++     </property>
++    </spacer>
++   </item>
++  </layout>
++ </widget>
++ <layoutdefault spacing="6" margin="11" />
++ <layoutfunction spacing="KDialog::spacingHint" margin="KDialog::marginHint" />
++ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
++ <customwidgets>
++  <customwidget>
++   <class>KDoubleNumInput</class>
++   <extends>QWidget</extends>
++   <header>knuminput.h</header>
++   <container>1</container>
++  </customwidget>
++  <customwidget>
++   <class>KIntNumInput</class>
++   <extends>QWidget</extends>
++   <header>knuminput.h</header>
++   <container>1</container>
++  </customwidget>
++ </customwidgets>
++ <tabstops>
++  <tabstop>repeatBox</tabstop>
++  <tabstop>click</tabstop>
++  <tabstop>RadioButton1</tabstop>
++  <tabstop>RadioButton1_2</tabstop>
++  <tabstop>RadioButton1_3</tabstop>
++ </tabstops>
++ <resources/>
++ <connections>
++  <connection>
++   <sender>repeatBox</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>delaySlider</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>repeatBox</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>delay</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>repeatBox</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>rateSlider</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>repeatBox</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>rate</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>repeatBox</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>lblDelay</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>repeatBox</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>lblRate</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>20</x>
++     <y>20</y>
++    </hint>
++   </hints>
++  </connection>
++ </connections>
++</ui>
+--- /dev/null
++++ b/kcontrol/keyboard/kcmmisc.cpp
+@@ -0,0 +1,526 @@
++/*
++ * kcmmisc.cpp
++ *
++ * Copyright (c) 1997 Patrick Dowler dowler at morgul.fsh.uvic.ca
++ *
++ * Layout management, cleanups:
++ * Copyright (c) 1999 Dirk A. Mueller <dmuell at gmx.net>
++ *
++ * Requires the Qt widget libraries, available at no cost at
++ * http://www.troll.no/
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++
++#include <config-workspace.h>
++#include <config-X11.h>
++#include <math.h>
++
++#include <QSlider>
++#include <QFileInfo>
++#include <QCheckBox>
++
++#include <QLayout>
++#include <QWhatsThis>
++#include <KButtonGroup>
++#include <QRadioButton>
++
++#include <klocale.h>
++#include <kconfig.h>
++#include <knuminput.h>
++#include <kapplication.h>
++#include <kglobal.h>
++#include <kstandarddirs.h>
++#include <kprocess.h>
++#include <kdialog.h>
++#include <KPluginFactory>
++#include <KPluginLoader>
++
++#include "kcmmisc.h"
++#include "ui_kcmmiscwidget.h"
++#include <X11/Xlib.h>
++
++K_PLUGIN_FACTORY(KeyboardConfigFactory,
++        registerPlugin<KeyboardConfig>("keyboard");
++        )
++K_EXPORT_PLUGIN(KeyboardConfigFactory("kcmmisc")) // Messages.sh extracts into kxkb.pot
++
++KeyboardConfig::KeyboardConfig(QWidget *parent, const QVariantList &)
++	: KCModule(KeyboardConfigFactory::componentData(), parent)
++{
++  QString wtstr;
++//   QBoxLayout* lay = new QVBoxLayout(this, 0, KDialog::spacingHint());
++  ui = new Ui_KeyboardConfigWidget();
++  ui->setupUi(this);
++//   lay->addWidget(ui);
++//   lay->addStretch();
++
++  ui->click->setRange(0, 100, 10);
++  ui->delay->setRange(100, 5000, 50, false);
++  ui->rate->setRange(0.2, 50, 5, false);
++
++  sliderMax = (int)floor (0.5 + 2*(log(5000)-log(100)) / (log(5000)-log(4999)));
++  ui->delaySlider->setRange(0, sliderMax);
++  ui->delaySlider->setSingleStep(sliderMax/100);
++  ui->delaySlider->setPageStep(sliderMax/10);
++  ui->delaySlider->setTickInterval(sliderMax/10);
++
++  ui->rateSlider->setRange(20, 5000);
++  ui->rateSlider->setSingleStep(30);
++  ui->rateSlider->setPageStep(500);
++  ui->rateSlider->setTickInterval(498);
++
++  connect(ui->repeatBox, SIGNAL(clicked()), this, SLOT(changed()));
++  connect(ui->delay, SIGNAL(valueChanged(int)), this, SLOT(delaySpinboxChanged(int)));
++  connect(ui->delaySlider, SIGNAL(valueChanged(int)), this, SLOT(delaySliderChanged(int)));
++  connect(ui->rate, SIGNAL(valueChanged(double)), this, SLOT(rateSpinboxChanged(double)));
++  connect(ui->rateSlider, SIGNAL(valueChanged(int)), this, SLOT(rateSliderChanged(int)));
++
++  connect(ui->click, SIGNAL(valueChanged(int)), this, SLOT(changed()));
++  connect(ui->numlockGroup, SIGNAL(released(int)), this, SLOT(changed()));
++
++#if !defined(HAVE_XTEST) && !defined(HAVE_XKB)
++  ui->numlockGroup->setDisabled( true );
++#endif
++#if !defined(HAVE_XKB) && !defined(HAVE_XF86MISC)
++//  delay->setDisabled( true );
++//  rate->setDisabled( true );
++#endif
++//  lay->addStretch();
++  load();
++}
++
++int  KeyboardConfig::getClick()
++{
++    return ui->click->value();
++}
++
++// set the slider and LCD values
++void KeyboardConfig::setRepeat(int r, int delay_, double rate_)
++{
++    ui->repeatBox->setChecked(r == AutoRepeatModeOn);
++    ui->delay->setValue(delay_);
++    ui->rate->setValue(rate_);
++}
++
++void KeyboardConfig::setClick(int v)
++{
++    ui->click->setValue(v);
++}
++
++int KeyboardConfig::getNumLockState()
++{
++    int selected = ui->numlockGroup->selected();
++    if( selected < 0 )
++        return 2;
++    return selected;
++}
++
++void KeyboardConfig::setNumLockState( int s )
++{
++    ui->numlockGroup->setSelected( s );
++}
++
++void KeyboardConfig::load()
++{
++  KConfigGroup config(KSharedConfig::openConfig("kcminputrc", KConfig::NoGlobals), "Keyboard");
++
++  XKeyboardState kbd;
++
++  XGetKeyboardControl(QX11Info::display(), &kbd);
++
++  bool key = config.readEntry("KeyboardRepeating", true);
++  keyboardRepeat = (key ? AutoRepeatModeOn : AutoRepeatModeOff);
++  ui->delay->setValue(config.readEntry( "RepeatDelay", 660 ));
++  ui->rate->setValue(config.readEntry( "RepeatRate", 25. ));
++  clickVolume = config.readEntry("ClickVolume", kbd.key_click_percent);
++  numlockState = config.readEntry( "NumLock", 2 );
++
++  setClick(kbd.key_click_percent);
++  setRepeat(kbd.global_auto_repeat, ui->delay->value(), ui->rate->value());
++  setNumLockState( numlockState );
++}
++
++void KeyboardConfig::save()
++{
++  KConfigGroup config(KSharedConfig::openConfig("kcminputrc", KConfig::NoGlobals), "Keyboard");
++
++  XKeyboardControl kbd;
++
++  clickVolume = getClick();
++  keyboardRepeat = ui->repeatBox->isChecked() ? AutoRepeatModeOn : AutoRepeatModeOff;
++  numlockState = getNumLockState();
++
++  kbd.key_click_percent = clickVolume;
++  kbd.auto_repeat_mode = keyboardRepeat;
++  XChangeKeyboardControl(QX11Info::display(),
++                           KBKeyClickPercent | KBAutoRepeatMode,
++                           &kbd);
++  if( keyboardRepeat ) {
++    set_repeatrate(ui->delay->value(), ui->rate->value());
++  }
++
++  config.writeEntry("ClickVolume",clickVolume);
++  config.writeEntry("KeyboardRepeating", (keyboardRepeat == AutoRepeatModeOn));
++  config.writeEntry("RepeatRate", ui->rate->value() );
++  config.writeEntry("RepeatDelay", ui->delay->value() );
++  config.writeEntry("NumLock", numlockState );
++  config.sync();
++}
++
++void KeyboardConfig::defaults()
++{
++    setClick(50);
++    setRepeat(true, 660, 25);
++    setNumLockState( 2 );
++}
++
++QString KeyboardConfig::quickHelp() const
++{
++  return QString();
++
++  /* "<h1>Keyboard</h1> This module allows you to choose options"
++     " for the way in which your keyboard works. The actual effect of"
++     " setting these options depends upon the features provided by your"
++     " keyboard hardware and the X server on which KDE is running.<p>"
++     " For example, you may find that changing the key click volume"
++     " has no effect because this feature is not available on your system." */
++}
++
++void KeyboardConfig::delaySliderChanged (int value) {
++	double alpha  = sliderMax / (log(5000) - log(100));
++	double linearValue = exp (value/alpha + log(100));
++
++	ui->delay->setValue((int)floor(0.5 + linearValue));
++
++	emit KCModule::changed(true);
++}
++
++void KeyboardConfig::delaySpinboxChanged (int value) {
++	double alpha  = sliderMax / (log(5000) - log(100));
++	double logVal = alpha * (log(value)-log(100));
++
++	ui->delaySlider->setValue ((int)floor (0.5 + logVal));
++
++	emit KCModule::changed(true);
++}
++
++void KeyboardConfig::rateSliderChanged (int value) {
++	ui->rate->setValue(value/100.0);
++
++	emit KCModule::changed(true);
++}
++
++void KeyboardConfig::rateSpinboxChanged (double value) {
++	ui->rateSlider->setValue ((int)(value*100));
++
++	emit KCModule::changed(true);
++}
++
++void KeyboardConfig::changed()
++{
++  emit KCModule::changed(true);
++}
++
++/*
++ Originally comes from NumLockX http://dforce.sh.cvut.cz/~seli/en/numlockx
++
++ NumLockX
++
++ Copyright (C) 2000-2001 Lubos Lunak        <l.lunak at kde.org>
++ Copyright (C) 2001      Oswald Buddenhagen <ossi at kde.org>
++
++Permission is hereby granted, free of charge, to any person obtaining a
++copy of this software and associated documentation files (the "Software"),
++to deal in the Software without restriction, including without limitation
++the rights to use, copy, modify, merge, publish, distribute, sublicense,
++and/or sell copies of the Software, and to permit persons to whom the
++Software is furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included in
++all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
++THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++DEALINGS IN THE SOFTWARE.
++
++****************************************************************************/
++
++#include <X11/Xlib.h>
++
++#ifdef HAVE_XTEST
++#include <X11/extensions/XTest.h>
++#endif
++
++#ifdef HAVE_XKB
++#define explicit myexplicit
++#include <X11/XKBlib.h>
++#undef explicit
++#endif
++
++#include <X11/keysym.h>
++
++#if defined(HAVE_XTEST) || defined(HAVE_XKB)
++
++/* the XKB stuff is based on code created by Oswald Buddenhagen <ossi at kde.org> */
++#ifdef HAVE_XKB
++int xkb_init()
++    {
++    int xkb_opcode, xkb_event, xkb_error;
++    int xkb_lmaj = XkbMajorVersion;
++    int xkb_lmin = XkbMinorVersion;
++    return XkbLibraryVersion( &xkb_lmaj, &xkb_lmin )
++			&& XkbQueryExtension( QX11Info::display(), &xkb_opcode, &xkb_event, &xkb_error,
++			       &xkb_lmaj, &xkb_lmin );
++    }
++
++unsigned int xkb_mask_modifier( XkbDescPtr xkb, const char *name )
++    {
++    int i;
++    if( !xkb || !xkb->names )
++	return 0;
++    for( i = 0;
++         i < XkbNumVirtualMods;
++	 i++ )
++	{
++	char* modStr = XGetAtomName( xkb->dpy, xkb->names->vmods[i] );
++	if( modStr != NULL && strcmp(name, modStr) == 0 )
++	    {
++	    unsigned int mask;
++	    XkbVirtualModsToReal( xkb, 1 << i, &mask );
++	    return mask;
++	    }
++	}
++    return 0;
++    }
++
++unsigned int xkb_numlock_mask()
++    {
++    XkbDescPtr xkb;
++    if(( xkb = XkbGetKeyboard( QX11Info::display(), XkbAllComponentsMask, XkbUseCoreKbd )) != NULL )
++	{
++        unsigned int mask = xkb_mask_modifier( xkb, "NumLock" );
++        XkbFreeKeyboard( xkb, 0, True );
++        return mask;
++        }
++    return 0;
++    }
++
++int xkb_set_on()
++    {
++    unsigned int mask;
++    if( !xkb_init())
++        return 0;
++    mask = xkb_numlock_mask();
++    if( mask == 0 )
++        return 0;
++    XkbLockModifiers ( QX11Info::display(), XkbUseCoreKbd, mask, mask);
++    return 1;
++    }
++
++int xkb_set_off()
++    {
++    unsigned int mask;
++    if( !xkb_init())
++        return 0;
++    mask = xkb_numlock_mask();
++    if( mask == 0 )
++        return 0;
++    XkbLockModifiers ( QX11Info::display(), XkbUseCoreKbd, mask, 0);
++    return 1;
++    }
++#endif
++
++#ifdef HAVE_XTEST
++int xtest_get_numlock_state()
++    {
++    int i;
++    int numlock_mask = 0;
++    Window dummy1, dummy2;
++    int dummy3, dummy4, dummy5, dummy6;
++    unsigned int mask;
++    KeyCode numlock_keycode = XKeysymToKeycode( QX11Info::display(), XK_Num_Lock );
++    if( numlock_keycode == NoSymbol )
++        return 0;
++    XModifierKeymap* map = XGetModifierMapping( QX11Info::display() );
++    for( i = 0;
++         i < 8;
++         ++i )
++        {
++	if( map->modifiermap[ map->max_keypermod * i ] == numlock_keycode )
++		numlock_mask = 1 << i;
++	}
++    XQueryPointer( QX11Info::display(), DefaultRootWindow( QX11Info::display() ), &dummy1, &dummy2,
++        &dummy3, &dummy4, &dummy5, &dummy6, &mask );
++    XFreeModifiermap( map );
++    return mask & numlock_mask;
++    }
++
++void xtest_change_numlock()
++    {
++    XTestFakeKeyEvent( QX11Info::display(), XKeysymToKeycode( QX11Info::display(), XK_Num_Lock ), True, CurrentTime );
++    XTestFakeKeyEvent( QX11Info::display(), XKeysymToKeycode( QX11Info::display(), XK_Num_Lock ), False, CurrentTime );
++    }
++
++void xtest_set_on()
++    {
++    if( !xtest_get_numlock_state())
++        xtest_change_numlock();
++    }
++
++void xtest_set_off()
++    {
++    if( xtest_get_numlock_state())
++        xtest_change_numlock();
++    }
++#endif
++
++void numlock_set_on()
++    {
++#ifdef HAVE_XKB
++    if( xkb_set_on())
++        return;
++#endif
++#ifdef HAVE_XTEST
++    xtest_set_on();
++#endif
++    }
++
++void numlock_set_off()
++    {
++#ifdef HAVE_XKB
++    if( xkb_set_off())
++        return;
++#endif
++#ifdef HAVE_XTEST
++    xtest_set_off();
++#endif
++    }
++
++void numlockx_change_numlock_state( bool set_P )
++    {
++    if( set_P )
++        numlock_set_on();
++    else
++        numlock_set_off();
++    }
++#else
++void numlockx_change_numlock_state( bool ) {} // dummy
++#endif // defined(HAVE_XTEST) || defined(HAVE_XKB)
++
++
++// This code is taken from xset utility from XFree 4.3 (http://www.xfree86.org/)
++
++
++#if 0
++//HAVE_XF86MISC
++#include <X11/extensions/xf86misc.h>
++void set_repeatrate(int delay, double rate)
++{
++  Display* dpy = QX11Info::display();
++  XF86MiscKbdSettings values;
++
++  XF86MiscGetKbdSettings(dpy, &values);
++  values.delay = delay;
++  values.rate = rate;
++  XF86MiscSetKbdSettings(dpy, &values);
++  return;
++}
++#else
++void set_repeatrate(int delay, double rate)
++{
++#if HAVE_XKB
++  Display* dpy = QX11Info::display();
++  int xkbmajor = XkbMajorVersion, xkbminor = XkbMinorVersion;
++  int xkbopcode, xkbevent, xkberror;
++
++  if (XkbQueryExtension(dpy, &xkbopcode, &xkbevent, &xkberror, &xkbmajor,
++				&xkbminor)) {
++     XkbDescPtr xkb = XkbAllocKeyboard();
++     if (xkb) {
++        int res = XkbGetControls(dpy, XkbRepeatKeysMask, xkb);
++        xkb->ctrls->repeat_delay = delay;
++        xkb->ctrls->repeat_interval = (int)floor(1000/rate + 0.5);
++        res = XkbSetControls(dpy, XkbRepeatKeysMask, xkb);
++        return;
++     }
++  }
++#endif
++  // Fallback: use the xset utility.
++
++  // Unfortunately xset does only support int parameters, so
++  // really slow repeat rates cannot be supported this way.
++  // (the FSG Accessibility standard requires support for repeat rates
++  // of several seconds per character)
++  int r;
++  if (rate < 1)
++     r = 1;
++  else
++     r = (int)floor(rate + 0.5);
++
++  QString exe = KGlobal::dirs()->findExe("xset");
++  if (exe.isEmpty())
++    return;
++
++  KProcess p;
++  p << exe << "r" << "rate" << QString::number(delay) << QString::number(r);
++  p.execute();
++}
++#endif
++
++void KeyboardConfig::init_keyboard()
++{
++        KConfigGroup config(KSharedConfig::openConfig( "kcminputrc" ), "Keyboard");
++
++	XKeyboardState   kbd;
++	XKeyboardControl kbdc;
++
++	XGetKeyboardControl(QX11Info::display(), &kbd);
++	bool key = config.readEntry("KeyboardRepeating", true);
++	kbdc.key_click_percent = config.readEntry("ClickVolume", kbd.key_click_percent);
++	kbdc.auto_repeat_mode = (key ? AutoRepeatModeOn : AutoRepeatModeOff);
++
++	XChangeKeyboardControl(QX11Info::display(),
++						   KBKeyClickPercent | KBAutoRepeatMode,
++						   &kbdc);
++
++	if( key ) {
++		int delay_ = config.readEntry("RepeatDelay", 250);
++		double rate_ = config.readEntry("RepeatRate", 30.);
++		set_repeatrate(delay_, rate_);
++	}
++
++
++	int numlockState = config.readEntry( "NumLock", 2 );
++	if( numlockState != 2 )
++		numlockx_change_numlock_state( numlockState == 0 );
++}
++
++
++extern "C"
++{
++	KDE_EXPORT void kcminit_keyboard()
++	{
++		KeyboardConfig::init_keyboard();
++	}
++}
++
++#include "kcmmisc.moc"
++
+--- /dev/null
++++ b/kcontrol/keyboard/keyboard.desktop
+@@ -0,0 +1,203 @@
++[Desktop Entry]
++Encoding=UTF-8
++Exec=kcmshell4 keyboard
++Icon=preferences-desktop-keyboard
++Type=Service
++ServiceTypes=KCModule,KCModuleInit
++DocPath=kcontrol/keyboard/index.html
++
++X-KDE-Library=kcm_keyboard
++X-KDE-PluginKeyword=keyboard
++X-KDE-Init-Symbol=keyboard
++X-KDE-ParentApp=kcontrol
++
++X-KDE-System-Settings-Parent-Category=keyboard-and-mouse
++
++Name=Keyboard
++Name[af]=Sleutelbord
++Name[ar]=لوحة المفاتيح
++Name[be]=Клавіятура
++Name[bg]=Клавиатура
++Name[br]=Stokellaoueg
++Name[ca]=Teclat
++Name[cs]=Klávesnice
++Name[csb]=Klawiatura
++Name[cy]=Bysellfwrdd
++Name[da]=Tastatur
++Name[de]=Tastatur
++Name[el]=Πληκτρολόγιο
++Name[eo]=Klavaro
++Name[es]=Teclado
++Name[et]=Klaviatuur
++Name[eu]=Teklatua
++Name[fa]=صفحه کلید
++Name[fi]=Näppäimistö
++Name[fr]=Clavier
++Name[fy]=Toetseboerd
++Name[ga]=Méarchlár
++Name[gl]=Teclado
++Name[he]=מקלדת
++Name[hr]=Tipkovnica
++Name[hu]=Billentyűzet
++Name[is]=Lyklaborð
++Name[it]=Tastiera
++Name[ja]=キーボード
++Name[ka]=კლავიატურა
++Name[kk]=Перенетақта
++Name[km]=ក្ដារ​ចុច
++Name[ko]=키보드
++Name[lt]=Klaviatūra
++Name[lv]=Tastatūra
++Name[mk]=Тастатура
++Name[nb]=Tastatur
++Name[nds]=Tastatuur
++Name[ne]=कुञ्जीपाटी
++Name[nl]=Toetsenbord
++Name[nn]=Tastatur
++Name[pa]=ਕੀਬੋਰਡ
++Name[pl]=Klawiatura
++Name[pt]=Teclado
++Name[pt_BR]=Teclado
++Name[ro]=Tastatură
++Name[ru]=Клавиатура
++Name[se]=Boallobeavdi
++Name[sl]=Tipkovnica
++Name[sr]=Тастатура
++Name[sr at latin]=Tastatura
++Name[sv]=Tangentbord
++Name[ta]=விசைப்பலகை
++Name[te]=కీబోర్డ్
++Name[tg]=Забонак
++Name[th]=แป้นพิมพ์
++Name[tr]=Klavye
++Name[uk]=Клавіатура
++Name[uz]=Тугматаг
++Name[vi]=Bàn phím
++Name[wa]=Taprece
++Name[x-test]=xxKeyboardxx
++Name[xh]=Ibhodi enezitshixo
++Name[zh_CN]=键盘
++Name[zh_TW]=鍵盤
++
++Comment=Keyboard settings
++Comment[af]=Sleutelbord instellings
++Comment[ar]=إعدادات لوحة المفاتيح
++Comment[be]=Настаўленні клавіятуры
++Comment[bg]=Настройване на клавиатурата
++Comment[br]=Kefluniañ ar stokellaoueg
++Comment[ca]=Arranjament del teclat
++Comment[cs]=Nastavení klávesnice
++Comment[csb]=Nastôw klawiaturë
++Comment[cy]=Gosodiadau Bysellfwrdd
++Comment[da]=Tastaturindstillinger
++Comment[de]=Einstellung der Tastatur
++Comment[el]=Ρυθμίσεις πληκτρολογίου
++Comment[eo]=Agordo de la klavaro
++Comment[es]=Preferencias del teclado
++Comment[et]=Klaviatuuri seadistused
++Comment[eu]=Teklatuaren konfigurazioa
++Comment[fa]=تنظیمات صفحه کلید
++Comment[fi]=Näppäimistön asetukset
++Comment[fr]=Configuration du clavier
++Comment[fy]=Toetseboerd ynstelle
++Comment[ga]=Socruithe Méarchláir
++Comment[gl]=Configuración do teclado
++Comment[he]=שינוי הגדרות המקלדת
++Comment[hr]=Postavke tipkovnice
++Comment[hu]=A billentyűzet beállításai
++Comment[is]=Stillingar lyklaborðs
++Comment[it]=Impostazioni della tastiera
++Comment[ja]=キーボードの設定
++Comment[ka]=კლავიატურის კონფიგურაცია
++Comment[kk]=Перенетақтаны баптау
++Comment[km]=ការ​កំណត់​ក្ដារចុច
++Comment[ko]=키보드 설정
++Comment[lt]=Klaviatūros parametrai
++Comment[lv]=Tastatūras parametri
++Comment[mk]=Поставувања на тастатурата
++Comment[nb]=Tastaturinnstillinger
++Comment[nds]=Tastatuurinstellen
++Comment[ne]=कुञ्जीपाटी सेटिङ
++Comment[nl]=Toetsenbord instellen
++Comment[nn]=Tastaturinnstillingar
++Comment[pa]=ਕੀਬੋਰਡ ਸੈਟਿੰਗ
++Comment[pl]=Ustawienia klawiatury
++Comment[pt]=Configuração do teclado
++Comment[pt_BR]=Configurações de teclado
++Comment[ro]=Setări tastatură
++Comment[ru]=Настройка клавиатуры
++Comment[se]=Boallobeavdeheivehusat
++Comment[sl]=Nastavitve tipkovnice
++Comment[sr]=Поставке тастатуре
++Comment[sr at latin]=Postavke tastature
++Comment[sv]=Anpassa tangentbordets inställningar
++Comment[ta]=விசைப்பலகை அமைப்புகள்
++Comment[te]=కీబోర్డ్ అమరికలు
++Comment[tg]=Танзими забонак
++Comment[th]=ตั้งค่าแป้นพิมพ์
++Comment[tr]=Klavye ayarları
++Comment[uk]=Установки клавіатури
++Comment[uz]=Тугматагнинг мосламалари
++Comment[vi]=Thiết lập bàn phím
++Comment[wa]=Apontiaedje del taprece
++Comment[x-test]=xxKeyboard settingsxx
++Comment[xh]=Izicwangciso zebhodi enezitshixo
++Comment[zh_CN]=键盘设置
++Comment[zh_TW]=鍵盤設定
++
++Keywords=Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volume
++Keywords[be]=Клавіятура,Паўтор клавішаў,Гучнасць націску,Прылады ўводу,Паўтор,Гучнасць,Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volume
++Keywords[bg]=Keywords=клавиатура, настройки, повторение, клавиши, задържане, Keyboard, Keyboard repeat, Click volume, Input Devices, repeat, volume
++Keywords[ca]=Teclat,Repetició del teclat,Volum del clic,dispositius d'entrada,repetició,volum
++Keywords[cs]=Klávesnice,Opakování klávesy,Hlasitost stisknutí,Vstupní zařízení,Opakování,Hlasitost
++Keywords[csb]=Klawiatura,powtórzenié klawiaturë,głosnosc klëkniãcô,ùrządzenia wéńdzeniowé,powtórzenié,głosnosc
++Keywords[cy]=Bysellfwrdd,Allweddell,Ailadrodd bysellfwrdd,Swn y clic,Dyfeisiau Mewnbwn,ailadrodd,sain
++Keywords[da]=Tastatur,Tastaturgentagelse,Klikstyrke,Inddata-enheder,gentagelse,lydstyrke
++Keywords[de]=Tastatur,Tastenwiederholung,Klicklautstärke,Eingabegeräte,Wiederholung,Lautstärke
++Keywords[el]=Πληκτρολόγιο,Επανάληψη πληκτρολογίου,Ένταση κλικ,Συσκευές εισόδου,επανάληψη,ένταση
++Keywords[eo]=klavaro,klavripeto,klako,laŭteco,enigo,aparatoj,ripeto,laŭteco,aranĝo
++Keywords[es]=Teclado,Repetición del teclado,Volumen de la pulsación,Dispositivos de entrada,repetición,volumen,Disposición,Internacional
++Keywords[et]=klaviatuur,klaviatuuri kordus,kliki helitugevus,klõpsu helitugevus,sisendseadmed,kordus,helitugevus
++Keywords[eu]=Teklatua,Teklatu errepikapena,Klikadaren bolumena, Sarrerako gailuak,errepikatu,bolumena
++Keywords[fa]=صفحه کلید، تکرار صفحه کلید، حجم فشار، دستگاههای ورودی، تکرار، حجم صدا
++Keywords[fi]=Näppäimistö,Näppäintoisto,Näppäinäänet,Syöttölaitteet,toisto, äänenvoimakkuus
++Keywords[fr]=clavier,répétition,clics de touches,périphériques d'entrée,volume
++Keywords[fy]=keyboard,toetseboerd,keyboard repeat,toetseboerd werhelling,klikvolume,klikfolume,input devices,ynfier apparaten,invoerapparaten,toetsenbord,toetsenbordherhaling,herhaling,werhelling,volume,folume,randapparatuur,internationaal,randapparaten
++Keywords[gl]=Teclado,repetición do teclado,Volume da tecla,Dispositivos de entrada,repetición,volume
++Keywords[he]=לוח מקשים,מקלדת,חזרה על תו,עוצמת הקשה,התקני קלט,חזרה,עצמה, Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volume
++Keywords[hr]=Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volme,Tipkovnica,glasnoća,uređaji za unos,ponavljanje,raspored,
++Keywords[hu]=billentyűzet,billentyűismétlés,leütési hang,beviteli eszközök,ismétlés,hangerő
++Keywords[is]=Lyklaborð,inntakstæki,endurtekning,útlit,alþjóðlegt
++Keywords[it]=tastiera,ripetizione dei tasti,volume del clic,dispositivi di input,layout,volume
++Keywords[ja]=キーボード,キーボードリピート,クリック音量,入力デバイス,リピート,音量
++Keywords[km]=ក្ដារ​ចុច ការ​ធ្វើ​តាម​ក្ដារចុច សំឡេង​ចុច ឧបករណ៍​បញ្ចូល ធ្វើ​ម្ដង​ទៀត សំឡេង
++Keywords[ko]=키보드,키보드 반복,입력 음량,입력 장치,반복,음량
++Keywords[lt]=Klaviatūra,Klaviatūros kartojimai,Paspaudimo garsas,Įvedimo įrenginiai,kartojimas, garsas
++Keywords[lv]=Tastatūra,Tastatūras atkārtošanās,Klikšķu līmenis,Ievades Iekārtas,atkārtošanās,līmenis,Izkārtojums
++Keywords[mk]=Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volume,Тастатура,Повторување на копчиња,Гласност на кликот,Влезни уреди,повтори,гласност
++Keywords[nb]=Tastatur,Tastaturgjentagelse,Klikkevolum,Innenheter,gjentagelse,volum
++Keywords[nds]=Tastatuur,Tastwedderhalen,Klick-Luutstärk,Ingaavreedschappen,wedderhalen,Luutstärk
++Keywords[ne]=कुञ्जीपाटी, कुञ्जीपाटी दोहोर्याउनुहोस्, भोल्युम क्लिक गर्नुहोस्, आगत यन्त्र, दोहोर्याउनुहोस्, भोल्युम
++Keywords[nl]=keyboard,keyboard repeat,klikvolume,input devices,invoerapparaten,toetsenbord,toetsenbordherhaling,herhaling,volume,randapparatuur,internationaal,randapparaten
++Keywords[nn]=tastatur,tastaturrepetisjon,tasterepetisjon,inneiningar,tasteklikk,repetisjon,lydstyrke,volum
++Keywords[pa]=ਕੀ-ਬੋਰਡ,ਕੀ-ਬੋਰਡ repeat,Click volume,Input ਜੰਤਰ,repeat,ਆਵਾਜ਼
++Keywords[pl]=Klawiatura,powtórzenie klawiatury,głośność kliknięcia,urządzenia wejściowe,powtórzenie,głośność
++Keywords[pt]=teclado,repetição do teclado,volume,dispositivos de entrada,repetição,formato,internacional
++Keywords[pt_BR]=Teclado,repetição de teclado,volume do clique,dispositivos de entrada,repetição,volume
++Keywords[ro]=tastatură,repetiţie,volum,clic,dispozitiv de intrare,repetare,volum
++Keywords[se]=boallobeavdi,boallobeavdegeardduheapmi,jietnadássi,geardduheapmi,sisa ovttadagat
++Keywords[sl]=tipkovnica,ponovitev tipk,glasnost tipkanja,vhodne naprave,ponovitev,glasnost
++Keywords[sr]=Тастатура, ниво, понављање, улазни уређаји
++Keywords[sr at latin]=Tastatura, nivo, ponavljanje, ulazni uređaji
++Keywords[sv]=Tangentbord,Tangentbordsupprepning,Klickvolym,Inenheter,upprepning,volym
++Keywords[ta]=விசைப்பலகை,விசைப்பலகை திரும்பவும்,ஒலியளவை அழுத்தவும்,உள்ளிடு சாதனங்கள்,திரும்ப,ஒலியளவு
++Keywords[tg]=Забонак,такрори Забонак,андозаи пахш,дастгоҳҳои вурудӣ,такрор,андоза
++Keywords[th]=แป้นพิมพ์,การจัดวางแป้นพิมพ์,อุปกรณ์ใส่ข้อมูลา,การกดปุ่มค้าง,กดปุ่มค้างซ้ำ,ระดับเสียง
++Keywords[tr]=Klavye,Klavye tekrarı,Tıklama sesi,Girdi Aygıtları,tekrar,ses,yerleşim,uluslar arası
++Keywords[uk]=клавіатура,повтор клавіш,гучність клацань,вхідні пристрої,повтор,гучність
++Keywords[uz]=Тугматаг,товуш баландлиги,қайтариш,Киритиш ускуналари,Босиш товуши
++Keywords[vi]=Bàn phím,Bàn phím lặp,Âm lượng nhấn,Thiết bị Vào,lặp,âm lượng
++Keywords[x-test]=xxKeyboard,Keyboard repeat,Click volume,Input Devices,repeat,volumexx
++Keywords[xh]=Ibhodi yezitshixo,Ibhodi yezitshixo phinda, Nqakraza izinga lelizwi,Amacebo Ongeniso,phinda, izinga lelizwi
++Keywords[zh_CN]=Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volume,键盘,键盘重复,击键音量,输入设备,重复,音量
++Keywords[zh_TW]=Keyboard,Keyboard repeat,Click volume,Input Devices,repeat,volume,鍵盤,鍵盤重複,敲擊音量,輸入裝置,重複速度,音量
+--- /dev/null
++++ b/kcontrol/keyboard/kcmmisc.h
+@@ -0,0 +1,76 @@
++/*
++ * keyboard.h
++ *
++ * Copyright (c) 1997 Patrick Dowler dowler at morgul.fsh.uvic.ca
++ *
++ * Requires the Qt widget libraries, available at no cost at
++ * http://www.troll.no/
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef __KCMMISC_H__
++#define __KCMMISC_H__
++
++
++#include <kapplication.h>
++#include <kcmodule.h>
++
++class Ui_KeyboardConfigWidget;
++
++class KeyboardConfig : public KCModule
++{
++  Q_OBJECT
++public:
++  KeyboardConfig(QWidget *parent, const QVariantList &args);
++
++  void save();
++  void load();
++  void defaults();
++
++  QString quickHelp() const;
++
++  static void init_keyboard();
++  
++private slots:
++  void changed();
++
++  void delaySliderChanged (int value);
++  void delaySpinboxChanged (int value);
++  void rateSliderChanged (int value);
++  void rateSpinboxChanged (double value);
++
++private:
++
++  void setClick( int );
++  void setRepeat( int flag, int delay, double rate);
++  void setRepeatRate( int );
++  void setNumLockState( int );
++
++  int getClick();
++  int getRepeatRate();
++  int getNumLockState();
++
++  int sliderMax;
++  int clickVolume, keyboardRepeat;
++  int numlockState; // 0 = on, 1 = off, 2 = don't change
++  Ui_KeyboardConfigWidget* ui;
++};
++
++void numlockx_change_numlock_state( bool set_P );
++void set_repeatrate(int delay, double rate);
++
++#endif
++
+--- /dev/null
++++ b/kcontrol/keyboard/CMakeLists.txt
+@@ -0,0 +1,26 @@
++# TODO: add this piece to kdeinit
++
++########### KCM ###############
++
++set(kcm_keyboard_PART_SRCS 
++  kcmmisc.cpp
++  ${kxkb_COMMON_SRCS}
++)
++
++
++kde4_add_ui_files(kcm_keyboard_PART_SRCS kcmmiscwidget.ui )
++
++kde4_add_plugin(kcm_keyboard ${kcm_keyboard_PART_SRCS})
++
++
++target_link_libraries(kcm_keyboard
++    ${KDE4_KIO_LIBS} xkbfile
++    ${XKB_SUPPORT_LIB}
++)
++if(X11_XTest_FOUND)
++  target_link_libraries(kcm_keyboard ${X11_XTest_LIB})
++endif(X11_XTest_FOUND)
++
++install(TARGETS kcm_keyboard  DESTINATION ${PLUGIN_INSTALL_DIR} )
++
++install( FILES keyboard.desktop DESTINATION  ${SERVICES_INSTALL_DIR} )
+--- a/kcontrol/style/style.desktop
++++ b/kcontrol/style/style.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell style
++Exec=kcmshell4 style
+ Icon=preferences-desktop-theme-style
+ Type=Service
+ ServiceTypes=KCModule,KCModuleInit
+@@ -167,7 +167,7 @@
+ Keywords[is]=stíll,stílar,þemur,þema,útlit,valmyndir,valslá,MacOS,letur,leturgerðir,leturgerð,gegnsætt,skjár,forrit, táknmyndir,takkar,mús,takki,hnappur
+ Keywords[it]=stile,stili,aspetto,widget,elemento grafico,icone,barre degli strumenti,testo,evidenziazione,applicazioni,applicazioni KDE
+ Keywords[ja]=スタイル,スタイル,外観,ウィジェット,アイコン,ツールバー,テキスト,ハイライト,アプリ,KDEアプリケーション
+-Keywords[km]=រចនាប័ទ្ម,រចនាប័ទ្ម,រូបរាង,ធាតុ​ក្រាហ្វិក,រូប​តំណាង,របារ​ឧបករណ៍,អត្ថបទ,ការ​បន្លិច,កម្មវិធី,កម្មវិធី​របស់ KDE
++Keywords[km]=រចនាប័ទ្ម រចនាប័ទ្ម រូបរាង ធាតុ​ក្រាហ្វិក រូប​តំណាង របារ​ឧបករណ៍ អត្ថបទ ការ​បន្លិច កម្មវិធី កម្មវិធី​របស់ KDE
+ Keywords[ko]=스타일,모양,위젯,아이콘,도구 모음,텍스트,강조,프로그램,KDE 프로그램
+ Keywords[lt]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications, stilius,stiliai,išvaizda,valdiklis,ženkliukai,piktogramos,įrankių juostos,paryškinimas,KDE taikomosios programos
+ Keywords[mk]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,стил,стилови,изглед,икони,алатници,текст,KDE апликации
+--- a/kcontrol/style/kcmstyle.cpp
++++ b/kcontrol/style/kcmstyle.cpp
+@@ -73,7 +73,7 @@
+     KDE_EXPORT void kcminit_style()
+     {
+         uint flags = KRdbExportQtSettings | KRdbExportQtColors | KRdbExportXftSettings;
+-        KConfig _config( "kcmdisplayrc", KConfig::CascadeConfig  );
++        KConfig _config( "kcmdisplayrc", KConfig::NoGlobals  );
+         KConfigGroup config(&_config, "X11");
+ 
+         // This key is written by the "colors" module.
+@@ -631,7 +631,7 @@
+ 	if (m_bStyleDirty | m_bEffectsDirty)	// Export only if necessary
+ 	{
+ 		uint flags = KRdbExportQtSettings;
+-		KConfig _kconfig( "kcmdisplayrc", KConfig::CascadeConfig  );
++		KConfig _kconfig( "kcmdisplayrc", KConfig::NoGlobals  );
+ 		KConfigGroup kconfig(&_kconfig, "X11");
+ 		bool exportKDEColors = kconfig.readEntry("exportKDEColors", true);
+ 		if (exportKDEColors)
+--- a/kcontrol/style/CMakeLists.txt
++++ b/kcontrol/style/CMakeLists.txt
+@@ -12,7 +12,7 @@
+ 
+ kde4_add_plugin(kcm_style ${kcm_style_PART_SRCS})
+ 
+-target_link_libraries(kcm_style ${KDE4_KDE3SUPPORT_LIBS} ${BLITZ_LIBRARIES})
++target_link_libraries(kcm_style ${KDE4_KDEUI_LIBS} ${BLITZ_LIBRARIES})
+ 
+ install(TARGETS kcm_style  DESTINATION ${PLUGIN_INSTALL_DIR})
+ 
+--- /dev/null
++++ b/kcontrol/colors/schemes/BeOS
+@@ -0,0 +1,84 @@
++[$Version]
++update_info=kaccel.upd:kde3.3/r1
++
++[Colors:Button]
++BackgroundAlternate=217,217,217
++BackgroundNormal=217,217,217
++DecorationFocus=160,153,120
++DecorationHover=255,212,0
++ForegroundActive=255,0,0
++ForegroundInactive=128,128,128
++ForegroundLink=0,0,238
++ForegroundNegative=128,0,0
++ForegroundNeutral=0,128,128
++ForegroundNormal=0,0,0
++ForegroundPositive=0,128,0
++ForegroundVisited=81,24,139
++
++[Colors:Selection]
++BackgroundAlternate=188,184,168
++BackgroundNormal=168,168,168
++DecorationFocus=160,153,120
++DecorationHover=255,212,0
++ForegroundActive=255,0,0
++ForegroundInactive=96,96,96
++ForegroundLink=0,0,238
++ForegroundNegative=128,0,0
++ForegroundNeutral=0,128,128
++ForegroundNormal=0,0,0
++ForegroundPositive=0,128,0
++ForegroundVisited=81,24,139
++
++[Colors:Tooltip]
++BackgroundAlternate=224,224,160
++BackgroundNormal=255,255,192
++DecorationFocus=160,153,120
++DecorationHover=255,212,0
++ForegroundActive=255,0,0
++ForegroundInactive=128,128,128
++ForegroundLink=0,0,238
++ForegroundNegative=128,0,0
++ForegroundNeutral=0,128,128
++ForegroundNormal=0,0,0
++ForegroundPositive=0,128,0
++ForegroundVisited=81,24,139
++
++[Colors:View]
++BackgroundAlternate=255,252,235
++BackgroundNormal=255,255,255
++DecorationFocus=160,153,120
++DecorationHover=255,212,0
++ForegroundActive=255,0,0
++ForegroundInactive=128,128,128
++ForegroundLink=0,0,238
++ForegroundNegative=128,0,0
++ForegroundNeutral=0,128,128
++ForegroundNormal=0,0,0
++ForegroundPositive=0,128,0
++ForegroundVisited=81,24,139
++
++[Colors:Window]
++BackgroundAlternate=227,224,220
++BackgroundNormal=227,227,227
++DecorationFocus=160,153,120
++DecorationHover=255,212,0
++ForegroundActive=255,0,0
++ForegroundInactive=128,128,128
++ForegroundLink=0,0,238
++ForegroundNegative=128,0,0
++ForegroundNeutral=0,128,128
++ForegroundNormal=0,0,0
++ForegroundPositive=0,128,0
++ForegroundVisited=81,24,139
++
++[General]
++shadeSortColumn=true
++
++[KDE]
++contrast=7
++
++[WM]
++activeBackground=255,212,0
++activeForeground=0,0,0
++inactiveBackground=237,237,237
++inactiveForeground=0,0,0
+--- a/kcontrol/colors/colorscm.cpp
++++ b/kcontrol/colors/colorscm.cpp
+@@ -23,20 +23,47 @@
+ #include <QtCore/QFileInfo>
+ #include <QtGui/QHeaderView>
+ #include <QtGui/QStackedWidget>
++#include <QtGui/QPainter>
++#include <QtGui/QBitmap>
+ #include <QtDBus/QtDBus>
+ 
++#include <KAboutData>
+ #include <KColorButton>
+ #include <KColorDialog>
++#include <KFileDialog>
+ #include <KGenericFactory>
+ #include <KGlobal>
+ #include <KGlobalSettings>
+-#include <KAboutData>
++#include <KInputDialog>
+ #include <KListWidget>
++#include <KMessageBox>
+ #include <KStandardDirs>
++#include <kio/netaccess.h>
+ 
+ K_PLUGIN_FACTORY( KolorFactory, registerPlugin<KColorCm>(); )
+ K_EXPORT_PLUGIN( KolorFactory("kcmcolors") )
+ 
++//BEGIN WindecoColors
++KColorCm::WindecoColors::WindecoColors(const KSharedConfigPtr &config)
++{
++    load(config);
++}
++
++void KColorCm::WindecoColors::load(const KSharedConfigPtr &config)
++{
++    KConfigGroup group(config, "WM");
++    m_colors[ActiveBackground] = group.readEntry("activeBackground", KGlobalSettings::activeTitleColor());
++    m_colors[ActiveForeground] = group.readEntry("activeForeground", KGlobalSettings::activeTextColor());
++    m_colors[InactiveBackground] = group.readEntry("inactiveBackground", KGlobalSettings::inactiveTitleColor());
++    m_colors[InactiveForeground] = group.readEntry("inactiveForeground", KGlobalSettings::activeTitleColor());
++}
++
++QColor KColorCm::WindecoColors::color(WindecoColors::Role role) const
++{
++    return m_colors[role];
++}
++//END WindecoColors
++
+ KColorCm::KColorCm(QWidget *parent, const QVariantList &)
+     : KCModule( KolorFactory::componentData(), parent )
+ {
+@@ -65,19 +92,25 @@
+ 
+ KColorCm::~KColorCm()
+ {
+-    m_config->clean();
++    m_config->markAsClean();
+ }
+ 
+ void KColorCm::populateSchemeList()
+ {
++    // clear the list in case this is being called from reset button click
++    schemeList->clear();
+     QStringList schemeFiles = KGlobal::dirs()->findAllResources("data", "color-schemes/*");
+     for (int i = 0; i < schemeFiles.size(); ++i)
+     {
+-        // TODO: add some processing to show some sample of the colorscheme in the icon 
+-        // like kde3 colors kcm had
++        // get the file name
+         QString filename = schemeFiles[i];
+         QFileInfo info(filename);
+-        schemeList->addItem(info.fileName());
++
++        // add the entry
++        KSharedConfigPtr config = KSharedConfig::openConfig(filename);
++        QIcon icon = createSchemePreviewIcon(KGlobalSettings::createApplicationPalette(config),
++                                             WindecoColors(config));
++        schemeList->addItem(new QListWidgetItem(icon, info.fileName()));
+     }
+ }
+ 
+@@ -85,8 +118,13 @@
+ {
+     if (schemeList->currentItem() != NULL)
+     {
+-        QString path = KGlobal::dirs()->findResource("data", 
++        QString path = KGlobal::dirs()->findResource("data",
+             "color-schemes/" + schemeList->currentItem()->text());
++
++        int permissions = QFile(path).permissions();
++        bool canWrite = (permissions & QFile::WriteUser);
++        schemeRemoveButton->setEnabled(canWrite);
++
+         KSharedConfigPtr temp = m_config;
+         m_config = KSharedConfig::openConfig(path);
+         updateColorSchemes();
+@@ -106,6 +144,115 @@
+     }
+ }
+ 
++void KColorCm::on_schemeRemoveButton_clicked()
++{
++    if (schemeList->currentItem() != NULL)
++    {
++        QString path = KGlobal::dirs()->findResource("data",
++            "color-schemes/" + schemeList->currentItem()->text());
++        KIO::NetAccess::del(path, this);
++        delete schemeList->takeItem(schemeList->currentRow());
++    }
++}
++
++void KColorCm::on_schemeImportButton_clicked()
++{
++    // get the path to the scheme to import
++    KUrl url = KFileDialog::getOpenUrl(KUrl(), QString(), this, i18n("Import Color Scheme"));
++
++    // TODO: possibly untar or uncompress it
++    // open it
++    KSharedConfigPtr temp = m_config;
++    m_config = KSharedConfig::openConfig(url.path());
++
++    // test to see if it has color scheme info
++    // read it
++    updateColorSchemes();
++    KConfigGroup group(m_config, "General");
++    shadeSortedColumn->setChecked(group.readEntry("shadeSortColumn", true) ? Qt::Checked : Qt::Unchecked);
++    KConfigGroup group2(m_config, "KDE");
++    contrastSlider->setValue(group2.readEntry("contrast").toInt());
++
++    // set m_config back to previous value
++    m_config = temp;
++    updateFromColorSchemes();
++    updateColorTable();
++
++    schemePreview->setPalette(m_config);
++    inactivePreview->setPalette(m_config, QPalette::Inactive);
++    disabledPreview->setPalette(m_config, QPalette::Disabled);
++
++    // save it
++    saveScheme(url.fileName());
++}
++
++void KColorCm::on_schemeSaveButton_clicked()
++{
++    QString previousName;
++    if (schemeList->currentItem() != NULL)
++    {
++        previousName = schemeList->currentItem()->text();
++    }
++    // prompt for the name to save as
++    bool ok;
++    QString name = KInputDialog::getText(i18n("Save Color Scheme"),
++        i18n("&Enter a name for the color scheme:"), previousName, &ok, this);
++    if (ok)
++    {
++        saveScheme(name);
++    }
++}
++
++void KColorCm::saveScheme(const QString &name)
++{
++    // check if that name is already in the list
++    QString path = KGlobal::dirs()->findResource("data",
++        "color-schemes/" + name);
++
++    QFile file(path);
++    int permissions = file.permissions();
++    bool canWrite = (permissions & QFile::WriteUser);
++    // or if we can overwrite it if it exists
++    if (path.isEmpty() || !file.exists() ||
++        (canWrite && KMessageBox::questionYesNo(this,
++        i18n("A color scheme with that name already exists.\nDo you want to overwrite it?"),
++        i18n("Save Color Scheme"),
++        KStandardGuiItem::overwrite(),
++        KStandardGuiItem::cancel())
++        == KMessageBox::Yes))
++    {
++        // go ahead and save it
++        QString newpath = KGlobal::dirs()->saveLocation("data", "color-schemes/");
++        newpath += name;
++        KSharedConfigPtr temp = m_config;
++        m_config = KSharedConfig::openConfig(newpath);
++        // then copy current colors into new config
++        updateFromColorSchemes();
++        KConfigGroup group(m_config, "General");
++        group.writeEntry("shadeSortColumn", (bool)shadeSortedColumn->checkState());
++        KConfigGroup group2(m_config, "KDE");
++        group2.writeEntry("contrast", contrastSlider->value());
++        // sync it
++        m_config->sync();
++        // set m_config back to the system one
++        m_config = temp;
++        // add it to the list if it's not in there already
++        if (path.isEmpty() || !file.exists())
++        {
++            schemeList->addItem(name);
++
++            // then select the new item
++            schemeList->setCurrentRow(schemeList->count() - 1);
++        }
++        emit changed(false);
++    }
++    else if (!canWrite && file.exists())
++    {
++        // give error message if !canWrite && file.exists()
++        KMessageBox::error(this, i18n("You do not have permission to overwrite that scheme"), i18n("Error"));
++    }
++}
++
+ void KColorCm::createColorEntry(QString text, QString key, QList<KColorButton *> &list, int index)
+ {
+     KColorButton *button = new KColorButton(this);
+@@ -126,13 +273,49 @@
+     int row = sender()->objectName().toInt();
+ 
+     QColor color;
+-    if(KColorDialog::getColor(color, this ) != QDialog::Rejected ) 
++    if(KColorDialog::getColor(color, this ) != QDialog::Rejected )
+     {
+         changeColor(row, color);
+         m_stackedWidgets[row - 9]->setCurrentIndex(0);
+     }
+ }
+ 
++QPixmap KColorCm::createSchemePreviewIcon(const QPalette &pal, const WindecoColors &wm)
++{
++    const uchar bits1[] = { 0xff, 0xff, 0xff, 0x2c, 0x16, 0x0b };
++    const uchar bits2[] = { 0x68, 0x34, 0x1a, 0xff, 0xff, 0xff };
++    const QSize bitsSize(24,2);
++    const QBitmap b1 = QBitmap::fromData(bitsSize, bits1);
++    const QBitmap b2 = QBitmap::fromData(bitsSize, bits2);
++
++    QPixmap pixmap(23, 16);
++    pixmap.fill(Qt::black); // ### use some color other than black for borders?
++
++    QPainter p(&pixmap);
++
++    p.fillRect( 1,  1, 7, 7, pal.brush(QPalette::Window));
++    p.fillRect( 2,  2, 5, 2, QBrush(pal.color(QPalette::WindowText), b1));
++
++    p.fillRect( 8,  1, 7, 7, pal.brush(QPalette::Button));
++    p.fillRect( 9,  2, 5, 2, QBrush(pal.color(QPalette::ButtonText), b1));
++
++    p.fillRect(15,  1, 7, 7, wm.color(WindecoColors::ActiveBackground));
++    p.fillRect(16,  2, 5, 2, QBrush(wm.color(WindecoColors::ActiveForeground), b1));
++
++    p.fillRect( 1,  8, 7, 7, pal.brush(QPalette::Base));
++    p.fillRect( 2, 12, 5, 2, QBrush(pal.color(QPalette::Text), b2));
++
++    p.fillRect( 8,  8, 7, 7, pal.brush(QPalette::Highlight));
++    p.fillRect( 9, 12, 5, 2, QBrush(pal.color(QPalette::HighlightedText), b2));
++
++    p.fillRect(15,  8, 7, 7, wm.color(WindecoColors::InactiveBackground));
++    p.fillRect(16, 12, 5, 2, QBrush(wm.color(WindecoColors::InactiveForeground), b2));
++
++    p.end();
++
++    return pixmap;
++}
++
+ void KColorCm::updateColorSchemes()
+ {
+     m_colorSchemes.clear();
+@@ -142,6 +325,12 @@
+     m_colorSchemes.append(KColorScheme(QPalette::Active, KColorScheme::Button, m_config));
+     m_colorSchemes.append(KColorScheme(QPalette::Active, KColorScheme::Selection, m_config));
+     m_colorSchemes.append(KColorScheme(QPalette::Active, KColorScheme::Tooltip, m_config));
++
++    m_wmColors.load(m_config);
++
++    // TODO KConfigGroup KDEgroup(m_config, "KDE");
++    // TODO m_contrast = KDEgroup.readEntry("contrast", contrastSlider->value());
++    // TODO m_shadeSorted = KDEgroup.readEntry("shadeSortColumn", (bool)shadeSortedColumn->checkState());
+ }
+ 
+ void KColorCm::updateFromColorSchemes()
+@@ -153,7 +342,7 @@
+         group.writeEntry("BackgroundAlternate", m_colorSchemes[i].background(KColorScheme::AlternateBackground).color());
+         group.writeEntry("ForegroundNormal", m_colorSchemes[i].foreground(KColorScheme::NormalText).color());
+         group.writeEntry("ForegroundInactive", m_colorSchemes[i].foreground(KColorScheme::InactiveText).color());
+-        group.writeEntry("ForegroundActive", m_colorSchemes[i].foreground(KColorScheme::InactiveText).color());
++        group.writeEntry("ForegroundActive", m_colorSchemes[i].foreground(KColorScheme::ActiveText).color());
+         group.writeEntry("ForegroundLink", m_colorSchemes[i].foreground(KColorScheme::LinkText).color());
+         group.writeEntry("ForegroundVisited", m_colorSchemes[i].foreground(KColorScheme::VisitedText).color());
+         group.writeEntry("ForegroundNegative", m_colorSchemes[i].foreground(KColorScheme::NegativeText).color());
+@@ -163,6 +352,12 @@
+         group.writeEntry("DecorationHover", m_colorSchemes[i].decoration(KColorScheme::HoverColor).color());
+     }
+ 
++    KConfigGroup WMGroup(m_config, "WM");
++    WMGroup.writeEntry("activeBackground", m_wmColors.color(WindecoColors::ActiveBackground));
++    WMGroup.writeEntry("activeForeground", m_wmColors.color(WindecoColors::ActiveForeground));
++    WMGroup.writeEntry("inactiveBackground", m_wmColors.color(WindecoColors::InactiveBackground));
++    WMGroup.writeEntry("inactiveForeground", m_wmColors.color(WindecoColors::InactiveForeground));
++
+     KConfigGroup KDEgroup(m_config, "KDE");
+     KDEgroup.writeEntry("contrast", contrastSlider->value());
+ 
+@@ -181,14 +376,14 @@
+     commonColorTable->horizontalHeader()->setMinimumSectionSize(minWidth);
+     commonColorTable->horizontalHeader()->setResizeMode(1, QHeaderView::ResizeToContents);
+ 
+-    for (int i = 0; i < 22; ++i)
++    for (int i = 0; i < 24; ++i)
+     {
+         KColorButton * button = new KColorButton(this);
+         button->setObjectName(QString::number(i));
+         connect(button, SIGNAL(changed(const QColor &)), this, SLOT(colorChanged(const QColor &)));
+         m_commonColorButtons << button;
+ 
+-        if (i > 8 && i < 16)
++        if (i > 8 && i < 18)
+         {
+             // Inactive Text row through Positive Text role all need a varies button
+             KPushButton * variesButton = new KPushButton(NULL);
+@@ -237,19 +432,41 @@
+     updateColorTable();
+ }
+ 
+-QColor KColorCm::commonForeground(KColorScheme::ForegroundRole index)
++void KColorCm::setCommonForeground(KColorScheme::ForegroundRole role, int stackIndex,
++                                   int buttonIndex)
+ {
+-    QColor temp = m_colorSchemes[KColorScheme::View].foreground(index).color();
++    QColor color = m_colorSchemes[KColorScheme::View].foreground(role).color();
+     for (int i = KColorScheme::Window; i < KColorScheme::Tooltip; ++i)
+     {
+-        if (m_colorSchemes[i].foreground(index).color() != temp)
+-        {
+-            temp = QColor(); // make it an invalid color
++        if (i == KColorScheme::Selection && role == KColorScheme::InactiveText)
+             break;
++
++        if (m_colorSchemes[i].foreground(role).color() != color)
++        {
++            m_stackedWidgets[stackIndex]->setCurrentIndex(1);
++            return;
+         }
+     }
+ 
+-    return temp;
++    m_stackedWidgets[stackIndex]->setCurrentIndex(0);
++    m_commonColorButtons[buttonIndex]->setColor(color);
++}
++
++void KColorCm::setCommonDecoration(KColorScheme::DecorationRole role, int stackIndex,
++                                   int buttonIndex)
++{
++    QColor color = m_colorSchemes[KColorScheme::View].decoration(role).color();
++    for (int i = KColorScheme::Window; i < KColorScheme::Tooltip; ++i)
++    {
++        if (m_colorSchemes[i].decoration(role).color() != color)
++        {
++            m_stackedWidgets[stackIndex]->setCurrentIndex(1);
++            return;
++        }
++    }
++
++    m_stackedWidgets[stackIndex]->setCurrentIndex(0);
++    m_commonColorButtons[buttonIndex]->setColor(color);
+ }
+ 
+ void KColorCm::updateColorTable()
+@@ -278,77 +495,24 @@
+         m_commonColorButtons[7]->setColor(m_colorSchemes[KColorScheme::Selection].foreground(KColorScheme::NormalText).color());
+         m_commonColorButtons[8]->setColor(m_colorSchemes[KColorScheme::Selection].foreground(KColorScheme::InactiveText).color());
+ 
+-        QColor color = commonForeground(KColorScheme::InactiveText);
+-        m_stackedWidgets[0]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[9]->setColor(color);
+-        }
+-        color = commonForeground(KColorScheme::ActiveText);
+-        m_stackedWidgets[1]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[10]->setColor(color);
+-        }
+-        color = commonForeground(KColorScheme::LinkText);
+-        m_stackedWidgets[2]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[11]->setColor(color);
+-        }
+-        color = commonForeground(KColorScheme::VisitedText);
+-        m_stackedWidgets[3]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[12]->setColor(color);
+-        }
+-        color = commonForeground(KColorScheme::NegativeText);
+-        m_stackedWidgets[4]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[13]->setColor(color);
+-        }
+-        color = commonForeground(KColorScheme::NeutralText);
+-        m_stackedWidgets[5]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[14]->setColor(color);
+-        }
+-        color = commonForeground(KColorScheme::PositiveText);
+-        m_stackedWidgets[6]->setCurrentIndex(color.isValid() ? 0 : 1);
+-        if (color.isValid())
+-        {
+-            m_commonColorButtons[15]->setColor(color);
+-        }
+-
+-        m_commonColorButtons[16]->setColor(m_colorSchemes[KColorScheme::Tooltip].background(KColorScheme::NormalBackground).color());
+-        m_commonColorButtons[17]->setColor(m_colorSchemes[KColorScheme::Tooltip].foreground(KColorScheme::NormalText).color());
+-
+-        // use KGS accessors to get the defaults when none have been written to m_config
+-        color = KConfigGroup(m_config, "WM").readEntry("activeBackground");
+-        if (!color.isValid())
+-        {
+-            color = KGlobalSettings::activeTitleColor();
+-        }
+-        m_commonColorButtons[18]->setColor(color);
+-        color = KConfigGroup(m_config, "WM").readEntry("activeForeground");
+-        if (!color.isValid())
+-        {
+-            color = KGlobalSettings::activeTextColor();
+-        }
+-        m_commonColorButtons[19]->setColor(color);
+-        color = KConfigGroup(m_config, "WM").readEntry("inactiveBackground");
+-        if (!color.isValid())
+-        {
+-            color = KGlobalSettings::inactiveTitleColor();
+-        }
+-        m_commonColorButtons[20]->setColor(color);
+-        color = KConfigGroup(m_config, "WM").readEntry("inactiveForeground");
+-        if (!color.isValid())
+-        {
+-            color = KGlobalSettings::activeTitleColor();
+-        }
+-        m_commonColorButtons[21]->setColor(color);
++        setCommonForeground(KColorScheme::InactiveText, 0,  9);
++        setCommonForeground(KColorScheme::ActiveText,   1, 10);
++        setCommonForeground(KColorScheme::LinkText,     2, 11);
++        setCommonForeground(KColorScheme::VisitedText,  3, 12);
++        setCommonForeground(KColorScheme::NegativeText, 4, 13);
++        setCommonForeground(KColorScheme::NeutralText,  5, 14);
++        setCommonForeground(KColorScheme::PositiveText, 6, 15);
++
++        setCommonDecoration(KColorScheme::FocusColor, 7, 16);
++        setCommonDecoration(KColorScheme::HoverColor, 8, 17);
++
++        m_commonColorButtons[18]->setColor(m_colorSchemes[KColorScheme::Tooltip].background(KColorScheme::NormalBackground).color());
++        m_commonColorButtons[19]->setColor(m_colorSchemes[KColorScheme::Tooltip].foreground(KColorScheme::NormalText).color());
++
++        m_commonColorButtons[20]->setColor(m_wmColors.color(WindecoColors::ActiveBackground));
++        m_commonColorButtons[21]->setColor(m_wmColors.color(WindecoColors::ActiveForeground));
++        m_commonColorButtons[22]->setColor(m_wmColors.color(WindecoColors::InactiveBackground));
++        m_commonColorButtons[23]->setColor(m_wmColors.color(WindecoColors::InactiveForeground));
+ 
+         foreach (button, m_commonColorButtons)
+         {
+@@ -433,7 +597,7 @@
+                 KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundNormal", newColor);
+                 break;
+             case 8:
+-                // Window Text Button
++                // Selection Inactive Text Button
+                 KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundInactive", newColor);
+                 break;
+ 
+@@ -454,7 +618,7 @@
+                 KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundActive", newColor);
+                 break;
+             case 11:
+-                // Link Text Button (set all active text colors)
++                // Link Text Button (set all link text colors)
+                 KConfigGroup(m_config, "Colors:View").writeEntry("ForegroundLink", newColor);
+                 KConfigGroup(m_config, "Colors:Window").writeEntry("ForegroundLink", newColor);
+                 KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundLink", newColor);
+@@ -462,7 +626,7 @@
+                 KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundLink", newColor);
+                 break;
+             case 12:
+-                // Visited Text Button (set all active text colors)
++                // Visited Text Button (set all visited text colors)
+                 KConfigGroup(m_config, "Colors:View").writeEntry("ForegroundVisited", newColor);
+                 KConfigGroup(m_config, "Colors:Window").writeEntry("ForegroundVisited", newColor);
+                 KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundVisited", newColor);
+@@ -470,15 +634,15 @@
+                 KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundVisited", newColor);
+                 break;
+             case 13:
+-                // Negative Text Button (set all active text colors)
+-                KConfigGroup(m_config, "Colors:View").writeEntry("ForegroundNegavite", newColor);
+-                KConfigGroup(m_config, "Colors:Window").writeEntry("ForegroundNegavite", newColor);
+-                KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundNegavite", newColor);
+-                KConfigGroup(m_config, "Colors:Button").writeEntry("ForegroundNegavite", newColor);
+-                KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundNegavite", newColor);
++                // Negative Text Button (set all negative text colors)
++                KConfigGroup(m_config, "Colors:View").writeEntry("ForegroundNegative", newColor);
++                KConfigGroup(m_config, "Colors:Window").writeEntry("ForegroundNegative", newColor);
++                KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundNegative", newColor);
++                KConfigGroup(m_config, "Colors:Button").writeEntry("ForegroundNegative", newColor);
++                KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundNegative", newColor);
+                 break;
+             case 14:
+-                // Neutral Text Button (set all active text colors)
++                // Neutral Text Button (set all neutral text colors)
+                 KConfigGroup(m_config, "Colors:View").writeEntry("ForegroundNeutral", newColor);
+                 KConfigGroup(m_config, "Colors:Window").writeEntry("ForegroundNeutral", newColor);
+                 KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundNeutral", newColor);
+@@ -486,7 +650,7 @@
+                 KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundNeutral", newColor);
+                 break;
+             case 15:
+-                // Positive Text Button (set all active text colors)
++                // Positive Text Button (set all positive text colors)
+                 KConfigGroup(m_config, "Colors:View").writeEntry("ForegroundPositive", newColor);
+                 KConfigGroup(m_config, "Colors:Window").writeEntry("ForegroundPositive", newColor);
+                 KConfigGroup(m_config, "Colors:Selection").writeEntry("ForegroundPositive", newColor);
+@@ -495,26 +659,43 @@
+                 break;
+ 
+             case 16:
++                // Focus Decoration Button (set all focus decoration colors)
++                KConfigGroup(m_config, "Colors:View").writeEntry("DecorationFocus", newColor);
++                KConfigGroup(m_config, "Colors:Window").writeEntry("DecorationFocus", newColor);
++                KConfigGroup(m_config, "Colors:Selection").writeEntry("DecorationFocus", newColor);
++                KConfigGroup(m_config, "Colors:Button").writeEntry("DecorationFocus", newColor);
++                KConfigGroup(m_config, "Colors:Tooltip").writeEntry("DecorationFocus", newColor);
++                break;
++            case 17:
++                // Hover Decoration Button (set all hover decoration colors)
++                KConfigGroup(m_config, "Colors:View").writeEntry("DecorationHover", newColor);
++                KConfigGroup(m_config, "Colors:Window").writeEntry("DecorationHover", newColor);
++                KConfigGroup(m_config, "Colors:Selection").writeEntry("DecorationHover", newColor);
++                KConfigGroup(m_config, "Colors:Button").writeEntry("DecorationHover", newColor);
++                KConfigGroup(m_config, "Colors:Tooltip").writeEntry("DecorationHover", newColor);
++                break;
++
++            case 18:
+                 // Tooltip Background button
+                 KConfigGroup(m_config, "Colors:Tooltip").writeEntry("BackgroundNormal", newColor);
+                 break;
+-            case 17:
++            case 19:
+                 // Tooltip Text button
+                 KConfigGroup(m_config, "Colors:Tooltip").writeEntry("ForegroundNormal", newColor);
+                 break;
+-            case 18:
++            case 20:
+                 // Active Window
+                 KConfigGroup(m_config, "WM").writeEntry("activeBackground", newColor);
+                 break;
+-            case 19:
++            case 21:
+                 // Active Window Text
+                 KConfigGroup(m_config, "WM").writeEntry("activeForeground", newColor);
+                 break;
+-            case 20:
++            case 22:
+                 // Inactive Window
+                 KConfigGroup(m_config, "WM").writeEntry("inactiveBackground", newColor);
+                 break;
+-            case 21:
++            case 23:
+                 // Inactive Window Text
+                 KConfigGroup(m_config, "WM").writeEntry("inactiveForeground", newColor);
+                 break;
+@@ -583,7 +764,8 @@
+ void KColorCm::load()
+ {
+     // clean the config, in case we have changed the in-memory kconfig
+-    m_config->clean();
++    m_config->markAsClean();
++    m_config->reparseConfiguration();
+ 
+     // update the color table
+     updateColorTable();
+--- a/kcontrol/colors/previewwidget.cpp
++++ b/kcontrol/colors/previewwidget.cpp
+@@ -86,6 +86,11 @@
+                              QPalette::ColorRole role)
+ {
+     palette.setBrush(QPalette::Active, role, palette.brush(state, role));
++    if (state == QPalette::Disabled)
++        // ### hack, while Qt has no inactive+disabled state
++        // TODO copy from Inactive+Disabled to Inactive instead
++        palette.setBrush(QPalette::Inactive, role,
++                         palette.brush(QPalette::Disabled, role));
+ }
+ 
+ void PreviewWidget::setPaletteRecursive(QWidget *widget,
+--- a/kcontrol/colors/colorscm.h
++++ b/kcontrol/colors/colorscm.h
+@@ -73,7 +73,37 @@
+     /** slot called when the schemeList selection changes */
+     void loadScheme();
+ 
++    /** slot called when the remove button is clicked*/
++    void on_schemeRemoveButton_clicked();
++
++    /** slot called when the save button is clicked */
++    void on_schemeSaveButton_clicked();
++
++    /** slot called when the import button is clicked */
++    void on_schemeImportButton_clicked();
++
+ private:
++    class WindecoColors {
++        public:
++            enum Role {
++                ActiveForeground = 0,
++                ActiveBackground = 1,
++                InactiveForeground = 2,
++                InactiveBackground = 3
++            };
++
++            WindecoColors() {}
++            WindecoColors(const KSharedConfigPtr&);
++            virtual ~WindecoColors() {}
++
++            void load(const KSharedConfigPtr&);
++            QColor color(Role) const;
++        private:
++            QColor m_colors[4];
++    };
++
++    /** create a preview of a color scheme */
++    static QPixmap createSchemePreviewIcon(const QPalette &pal, const WindecoColors &wm);
+ 
+     /** populate the schemeList with color schemes found on the system */
+     void populateSchemeList();
+@@ -83,22 +113,35 @@
+ 
+     /** setup the colortable with its buttons and labels */
+     void setupColorTable();
+-    
++
+     /** setup the effects page */
+     void setupEffectsPage();
+ 
+     /** helper to create color entries */
+-    void createColorEntry(QString text, QString key, QList<KColorButton *> &list, int index);
+-    
++    void createColorEntry(QString text,
++                          QString key,
++                          QList<KColorButton *> &list,
++                          int index);
++
+     /** copy color entries from color schemes into m_config */
+     void updateFromColorSchemes();
+-    
++
+     void changeColor(int row, const QColor &newColor);
+-    
++
+     /** get the groupKey for the given colorSet */
+     static QString colorSetGroupKey(int colorSet);
+-    
+-    QColor commonForeground(KColorScheme::ForegroundRole index);
++
++    /** save the current scheme with the given name
++     @param name name to save the scheme as
++     */
++    void saveScheme(const QString &name);
++
++    void setCommonForeground(KColorScheme::ForegroundRole role,
++                             int stackIndex,
++                             int buttonIndex);
++    void setCommonDecoration(KColorScheme::DecorationRole role,
++                             int stackIndex,
++                             int buttonIndex);
+ 
+     QList<KColorButton *> m_backgroundButtons;
+     QList<KColorButton *> m_foregroundButtons;
+@@ -108,6 +151,7 @@
+     QStringList m_colorKeys;
+ 
+     QList<KColorScheme> m_colorSchemes;
++    WindecoColors m_wmColors;
+ 
+     KSharedConfigPtr m_config;
+ };
+--- a/kcontrol/colors/colors.desktop
++++ b/kcontrol/colors/colors.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell colors
++Exec=kcmshell4 colors
+ Icon=preferences-desktop-color
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/colors/colorsettings.ui
++++ b/kcontrol/colors/colorsettings.ui
+@@ -40,10 +40,19 @@
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
++            <property name="iconSize" >
++             <size>
++              <width>23</width>
++              <height>16</height>
++             </size>
++            </property>
+            </widget>
+           </item>
+           <item row="1" column="0" >
+            <widget class="QPushButton" name="schemeSaveButton" >
++            <property name="toolTip" >
++             <string>Save the current color scheme</string>
++            </property>
+             <property name="text" >
+              <string>&amp;Save...</string>
+             </property>
+@@ -51,6 +60,12 @@
+           </item>
+           <item row="1" column="1" >
+            <widget class="QPushButton" name="schemeRemoveButton" >
++            <property name="enabled" >
++             <bool>false</bool>
++            </property>
++            <property name="toolTip" >
++             <string>Remove the selected scheme</string>
++            </property>
+             <property name="text" >
+              <string>Rem&amp;ove</string>
+             </property>
+@@ -58,6 +73,9 @@
+           </item>
+           <item row="1" column="2" >
+            <widget class="QPushButton" name="schemeImportButton" >
++            <property name="toolTip" >
++             <string>Import a color scheme from a file</string>
++            </property>
+             <property name="text" >
+              <string>I&amp;mport...</string>
+             </property>
+@@ -80,6 +98,9 @@
+          <layout class="QVBoxLayout" >
+           <item>
+            <widget class="QComboBox" name="colorSet" >
++            <property name="toolTip" >
++             <string>Colorset to view/modify</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Common Colors</string>
+@@ -243,6 +264,16 @@
+                   <string>New Row</string>
+                  </property>
+                 </row>
++                <row>
++                 <property name="text" >
++                  <string>New Row</string>
++                 </property>
++                </row>
++                <row>
++                 <property name="text" >
++                  <string>New Row</string>
++                 </property>
++                </row>
+                 <column>
+                  <property name="text" >
+                   <string>0</string>
+@@ -335,32 +366,42 @@
+                 </item>
+                 <item row="16" column="0" >
+                  <property name="text" >
+-                  <string>Tooltip Background</string>
++                  <string>Focus Decoration</string>
+                  </property>
+                 </item>
+                 <item row="17" column="0" >
+                  <property name="text" >
+-                  <string>Tooltip Text</string>
++                  <string>Hover Decoration</string>
+                  </property>
+                 </item>
+                 <item row="18" column="0" >
+                  <property name="text" >
+-                  <string>Active Window</string>
++                  <string>Tooltip Background</string>
+                  </property>
+                 </item>
+                 <item row="19" column="0" >
+                  <property name="text" >
+-                  <string>Active Window Text</string>
++                  <string>Tooltip Text</string>
+                  </property>
+                 </item>
+                 <item row="20" column="0" >
+                  <property name="text" >
+-                  <string>Inactive Window</string>
++                  <string>Active Titlebar</string>
+                  </property>
+                 </item>
+                 <item row="21" column="0" >
+                  <property name="text" >
+-                  <string>InactiveWindowText</string>
++                  <string>Active Titlebar Text</string>
++                 </property>
++                </item>
++                <item row="22" column="0" >
++                 <property name="text" >
++                  <string>Inactive Titlebar</string>
++                 </property>
++                </item>
++                <item row="23" column="0" >
++                 <property name="text" >
++                  <string>Inactive Titlebar Text</string>
+                  </property>
+                 </item>
+                </widget>
+@@ -403,6 +444,9 @@
+        </item>
+        <item row="3" column="1" >
+         <widget class="QGroupBox" name="groupBox_5" >
++         <property name="toolTip" >
++          <string>Contrast used for 3D objects</string>
++         </property>
+          <property name="title" >
+           <string>Contrast</string>
+          </property>
+@@ -465,6 +509,9 @@
+           </item>
+           <item row="0" column="1" >
+            <widget class="QComboBox" name="inactiveIntensityBox" >
++            <property name="toolTip" >
++             <string>Inactive intensity effect type</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Shade</string>
+@@ -484,6 +531,9 @@
+           </item>
+           <item row="0" column="2" >
+            <widget class="QSlider" name="inactiveIntensitySlider" >
++            <property name="toolTip" >
++             <string>Inactive intensity effect amount</string>
++            </property>
+             <property name="maximum" >
+              <number>20</number>
+             </property>
+@@ -520,6 +570,9 @@
+           </item>
+           <item row="1" column="1" >
+            <widget class="QComboBox" name="inactiveColorBox" >
++            <property name="toolTip" >
++             <string>Inactive color effect type</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Desaturate</string>
+@@ -544,6 +597,9 @@
+           </item>
+           <item row="1" column="2" >
+            <widget class="QSlider" name="inactiveColorSlider" >
++            <property name="toolTip" >
++             <string>Inactive color amount</string>
++            </property>
+             <property name="maximum" >
+              <number>20</number>
+             </property>
+@@ -556,7 +612,11 @@
+            </widget>
+           </item>
+           <item row="1" column="3" >
+-           <widget class="KColorButton" name="inactiveColorButton" />
++           <widget class="KColorButton" name="inactiveColorButton" >
++            <property name="toolTip" >
++             <string>Inactive color</string>
++            </property>
++           </widget>
+           </item>
+           <item row="2" column="0" >
+            <widget class="QLabel" name="label_3" >
+@@ -567,6 +627,9 @@
+           </item>
+           <item row="2" column="1" >
+            <widget class="QComboBox" name="inactiveContrastBox" >
++            <property name="toolTip" >
++             <string>Inactive contrast effect type</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Fade</string>
+@@ -586,6 +649,9 @@
+           </item>
+           <item row="2" column="2" >
+            <widget class="QSlider" name="inactiveContrastSlider" >
++            <property name="toolTip" >
++             <string>Inactive contrast effect amount</string>
++            </property>
+             <property name="maximum" >
+              <number>10</number>
+             </property>
+@@ -641,6 +707,9 @@
+           </item>
+           <item row="0" column="1" >
+            <widget class="QComboBox" name="disabledIntensityBox" >
++            <property name="toolTip" >
++             <string>Disabled intensity effect type</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Shade</string>
+@@ -660,6 +729,9 @@
+           </item>
+           <item row="0" column="2" >
+            <widget class="QSlider" name="disabledIntensitySlider" >
++            <property name="toolTip" >
++             <string>Disabled intensity effect amount</string>
++            </property>
+             <property name="maximum" >
+              <number>20</number>
+             </property>
+@@ -696,6 +768,9 @@
+           </item>
+           <item row="1" column="1" >
+            <widget class="QComboBox" name="disabledColorBox" >
++            <property name="toolTip" >
++             <string>Disabled color effect type</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Desaturate</string>
+@@ -720,6 +795,9 @@
+           </item>
+           <item row="1" column="2" >
+            <widget class="QSlider" name="disabledColorSlider" >
++            <property name="toolTip" >
++             <string>Disabled color effect amount</string>
++            </property>
+             <property name="maximum" >
+              <number>20</number>
+             </property>
+@@ -732,7 +810,11 @@
+            </widget>
+           </item>
+           <item row="1" column="3" >
+-           <widget class="KColorButton" name="disabledColorButton" />
++           <widget class="KColorButton" name="disabledColorButton" >
++            <property name="toolTip" >
++             <string>Disabled color</string>
++            </property>
++           </widget>
+           </item>
+           <item row="2" column="0" >
+            <widget class="QLabel" name="label_6" >
+@@ -743,6 +825,9 @@
+           </item>
+           <item row="2" column="1" >
+            <widget class="QComboBox" name="disabledContrastBox" >
++            <property name="toolTip" >
++             <string>Disabled contrast type</string>
++            </property>
+             <item>
+              <property name="text" >
+               <string>Fade</string>
+@@ -762,6 +847,9 @@
+           </item>
+           <item row="2" column="2" >
+            <widget class="QSlider" name="inactiveContrastSlider_2" >
++            <property name="toolTip" >
++             <string>Disabled contrast amount</string>
++            </property>
+             <property name="maximum" >
+              <number>10</number>
+             </property>
+--- a/kcontrol/colors/CMakeLists.txt
++++ b/kcontrol/colors/CMakeLists.txt
+@@ -5,9 +5,16 @@
+ kde4_add_ui_files(kcm_colors_PART_SRCS colorsettings.ui preview.ui)
+ 
+ kde4_add_plugin(kcm_colors ${kcm_colors_PART_SRCS})
+-target_link_libraries(kcm_colors ${KDE4_KDEUI_LIBS})
++target_link_libraries(kcm_colors ${KDE4_KFILE_LIBS} ${KDE4_KDEUI_LIBS})
+ 
+ install(TARGETS kcm_colors  DESTINATION ${PLUGIN_INSTALL_DIR})
+ install( FILES colors.desktop  DESTINATION  ${SERVICES_INSTALL_DIR} )
+ 
++# built-in color schemes
++set(schemefiles
++    schemes/BeOS
++    "schemes/Midnight Meadow"
++)
++install( FILES ${schemefiles} DESTINATION ${DATA_INSTALL_DIR}/color-schemes )
++
+ kde4_install_icons( ${ICON_INSTALL_DIR}  )
+--- a/kcontrol/access/kaccess.desktop
++++ b/kcontrol/access/kaccess.desktop
+@@ -16,7 +16,7 @@
+ Name[el]=Εργαλείο προσιτότητας του KDE
+ Name[eo]=KDE-ilo por Alirebleco
+ Name[es]=Herramienta de accesibilidad de KDE
+-Name[et]=KDE hõlbustusvahend
++Name[et]=KDE hõlbustustööriist
+ Name[eu]=KDEren erabilerraztasun tresna
+ Name[fa]=ابزار دستیابی‌پذیری KDE
+ Name[fi]=KDE:n helppokäyttötoiminnot
+--- a/kcontrol/access/kaccess.cpp
++++ b/kcontrol/access/kaccess.cpp
+@@ -101,8 +101,6 @@
+   _activeWindow = KWindowSystem::activeWindow();
+   connect(KWindowSystem::self(), SIGNAL(activeWindowChanged(WId)), this, SLOT(activeWindowChanged(WId)));
+ 
+-  connect(_player, SIGNAL(finished()), SLOT(slotBellFinished()));
+-
+   features = 0;
+   requestedFeatures = 0;
+   dialog = 0;
+@@ -130,7 +128,7 @@
+   // bell ---------------------------------------------------------------
+   _systemBell = cg.readEntry("SystemBell", true);
+   _artsBell = cg.readEntry("ArtsBell", false);
+-  _player->setCurrentSource(cg.readPathEntry("ArtsBellFile"));
++  _player->setCurrentSource(cg.readPathEntry("ArtsBellFile", QString()));
+   _visibleBell = cg.readEntry("VisibleBell", false);
+   _visibleBellInvert = cg.readEntry("VisibleBellInvert", false);
+   _visibleBellColor = cg.readEntry("VisibleBellColor", QColor(Qt::red));
+@@ -147,8 +145,7 @@
+     XkbChangeEnabledControls(QX11Info::display(), XkbUseCoreKbd, XkbAudibleBellMask, XkbAudibleBellMask);
+ 
+   // keyboard -------------------------------------------------------------
+-
+-  cg.changeGroup("Keyboard");
++  KConfigGroup keyboardGroup(_config,"Keyboard");
+ 
+   // get keyboard state
+   XkbDescPtr xkb = XkbGetMap(QX11Info::display(), 0, XkbUseCoreKbd);
+@@ -158,17 +155,17 @@
+     return;
+ 
+   // sticky keys
+-  if (cg.readEntry("StickyKeys", false))
++  if (keyboardGroup.readEntry("StickyKeys", false))
+     {
+-      if (cg.readEntry("StickyKeysLatch", true))
++      if (keyboardGroup.readEntry("StickyKeysLatch", true))
+         xkb->ctrls->ax_options |= XkbAX_LatchToLockMask;
+       else
+         xkb->ctrls->ax_options &= ~XkbAX_LatchToLockMask;
+-      if (cg.readEntry("StickyKeysAutoOff", false))
++      if (keyboardGroup.readEntry("StickyKeysAutoOff", false))
+          xkb->ctrls->ax_options |= XkbAX_TwoKeysMask;
+       else
+          xkb->ctrls->ax_options &= ~XkbAX_TwoKeysMask;
+-      if (cg.readEntry("StickyKeysBeep", false))
++      if (keyboardGroup.readEntry("StickyKeysBeep", false))
+          xkb->ctrls->ax_options |= XkbAX_StickyKeysFBMask;
+       else
+          xkb->ctrls->ax_options &= ~XkbAX_StickyKeysFBMask;
+@@ -178,22 +175,22 @@
+     xkb->ctrls->enabled_ctrls &= ~XkbStickyKeysMask;
+ 
+   // toggle keys
+-  if (cg.readEntry("ToggleKeysBeep", false))
++  if (keyboardGroup.readEntry("ToggleKeysBeep", false))
+      xkb->ctrls->ax_options |= XkbAX_IndicatorFBMask;
+   else
+      xkb->ctrls->ax_options &= ~XkbAX_IndicatorFBMask;
+ 
+   // slow keys
+-  if (cg.readEntry("SlowKeys", false)) {
+-      if (cg.readEntry("SlowKeysPressBeep", false))
++  if (keyboardGroup.readEntry("SlowKeys", false)) {
++      if (keyboardGroup.readEntry("SlowKeysPressBeep", false))
+          xkb->ctrls->ax_options |= XkbAX_SKPressFBMask;
+       else
+          xkb->ctrls->ax_options &= ~XkbAX_SKPressFBMask;
+-      if (cg.readEntry("SlowKeysAcceptBeep", false))
++      if (keyboardGroup.readEntry("SlowKeysAcceptBeep", false))
+          xkb->ctrls->ax_options |= XkbAX_SKAcceptFBMask;
+       else
+          xkb->ctrls->ax_options &= ~XkbAX_SKAcceptFBMask;
+-      if (cg.readEntry("SlowKeysRejectBeep", false))
++      if (keyboardGroup.readEntry("SlowKeysRejectBeep", false))
+          xkb->ctrls->ax_options |= XkbAX_SKRejectFBMask;
+       else
+          xkb->ctrls->ax_options &= ~XkbAX_SKRejectFBMask;
+@@ -201,11 +198,11 @@
+     }
+   else
+       xkb->ctrls->enabled_ctrls &= ~XkbSlowKeysMask;
+-  xkb->ctrls->slow_keys_delay = cg.readEntry("SlowKeysDelay", 500);
++  xkb->ctrls->slow_keys_delay = keyboardGroup.readEntry("SlowKeysDelay", 500);
+ 
+   // bounce keys
+-  if (cg.readEntry("BounceKeys", false)) {
+-      if (cg.readEntry("BounceKeysRejectBeep", false))
++  if (keyboardGroup.readEntry("BounceKeys", false)) {
++      if (keyboardGroup.readEntry("BounceKeysRejectBeep", false))
+          xkb->ctrls->ax_options |= XkbAX_BKRejectFBMask;
+       else
+          xkb->ctrls->ax_options &= ~XkbAX_BKRejectFBMask;
+@@ -213,19 +210,19 @@
+     }
+   else
+       xkb->ctrls->enabled_ctrls &= ~XkbBounceKeysMask;
+-  xkb->ctrls->debounce_delay = cg.readEntry("BounceKeysDelay", 500);
++  xkb->ctrls->debounce_delay = keyboardGroup.readEntry("BounceKeysDelay", 500);
+ 
+   // gestures for enabling the other features
+-  _gestures = cg.readEntry("Gestures", true);
++  _gestures = keyboardGroup.readEntry("Gestures", true);
+   if (_gestures)
+       xkb->ctrls->enabled_ctrls |= XkbAccessXKeysMask;
+   else
+       xkb->ctrls->enabled_ctrls &= ~XkbAccessXKeysMask;
+ 
+   // timeout
+-  if (cg.readEntry("AccessXTimeout", false))
++  if (keyboardGroup.readEntry("AccessXTimeout", false))
+     {
+-      xkb->ctrls->ax_timeout = cg.readEntry("AccessXTimeoutDelay", 30)*60;
++      xkb->ctrls->ax_timeout = keyboardGroup.readEntry("AccessXTimeoutDelay", 30)*60;
+       xkb->ctrls->axt_opts_mask = 0;
+       xkb->ctrls->axt_opts_values = 0;
+       xkb->ctrls->axt_ctrls_mask = XkbStickyKeysMask | XkbSlowKeysMask;
+@@ -236,39 +233,39 @@
+     xkb->ctrls->enabled_ctrls &= ~XkbAccessXTimeoutMask;
+ 
+   // gestures for enabling the other features
+-  if (cg.readEntry("AccessXBeep", true))
++  if (keyboardGroup.readEntry("AccessXBeep", true))
+      xkb->ctrls->ax_options |= XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask;
+   else
+      xkb->ctrls->ax_options &= ~(XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask);
+ 
+-  _gestureConfirmation = cg.readEntry("GestureConfirmation", true);
++  _gestureConfirmation = keyboardGroup.readEntry("GestureConfirmation", true);
+ 
+-  _kNotifyModifiers = cg.readEntry("kNotifyModifiers", false);
+-  _kNotifyAccessX = cg.readEntry("kNotifyAccessX", false);
++  _kNotifyModifiers = keyboardGroup.readEntry("kNotifyModifiers", false);
++  _kNotifyAccessX = keyboardGroup.readEntry("kNotifyAccessX", false);
+ 
+   // mouse-by-keyboard ----------------------------------------------
+ 
+-  cg.changeGroup("Mouse");
++  KConfigGroup mouseGroup(_config,"Mouse");
+ 
+-  if (cg.readEntry("MouseKeys", false))
++  if (mouseGroup.readEntry("MouseKeys", false))
+     {
+-      xkb->ctrls->mk_delay = cg.readEntry("MKDelay", 160);
++      xkb->ctrls->mk_delay = mouseGroup.readEntry("MKDelay", 160);
+ 
+       // Default for initial velocity: 200 pixels/sec
+-      int interval = cg.readEntry("MKInterval", 5);
++      int interval = mouseGroup.readEntry("MKInterval", 5);
+       xkb->ctrls->mk_interval = interval;
+ 
+       // Default time to reach maximum speed: 5000 msec
+-      xkb->ctrls->mk_time_to_max = cg.readEntry("MKTimeToMax",
++      xkb->ctrls->mk_time_to_max = mouseGroup.readEntry("MKTimeToMax",
+                                              (5000+interval/2)/interval);
+ 
+       // Default maximum speed: 1000 pixels/sec
+       //     (The old default maximum speed from KDE <= 3.4
+       //     (100000 pixels/sec) was way too fast)
+-      xkb->ctrls->mk_max_speed = cg.readEntry("MKMaxSpeed", interval);
++      xkb->ctrls->mk_max_speed = mouseGroup.readEntry("MKMaxSpeed", interval);
+ 
+-      xkb->ctrls->mk_curve = cg.readEntry("MKCurve", 0);
+-      xkb->ctrls->mk_dflt_btn = cg.readEntry("MKDefaultButton", 0);
++      xkb->ctrls->mk_curve = mouseGroup.readEntry("MKCurve", 0);
++      xkb->ctrls->mk_dflt_btn = mouseGroup.readEntry("MKDefaultButton", 0);
+ 
+       xkb->ctrls->enabled_ctrls |= XkbMouseKeysMask;
+     }
+@@ -828,13 +825,13 @@
+    else if (disabled & XkbStickyKeysMask)
+       config.writeEntry("StickyKeys", false);
+ 
+-   config.changeGroup("Mouse");
++   KConfigGroup mousegrp(KGlobal::config(),"Mouse");
+ 
+    if (enabled & XkbMouseKeysMask)
+-      config.writeEntry("MouseKeys", true);
++      mousegrp.writeEntry("MouseKeys", true);
+    else if (disabled & XkbMouseKeysMask)
+-      config.writeEntry("MouseKeys", false);
+-
++      mousegrp.writeEntry("MouseKeys", false);
++   mousegrp.sync();
+    config.sync();
+ }
+ 
+--- a/kcontrol/access/kcmaccess.desktop
++++ b/kcontrol/access/kcmaccess.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kcmaccess
++Exec=kcmshell4 kcmaccess
+ Icon=preferences-desktop-accessibility
+ Type=Service
+ ServiceTypes=KCModule,KCModuleInit
+--- a/kcontrol/access/kaccess.notifyrc
++++ b/kcontrol/access/kaccess.notifyrc
+@@ -6,9 +6,10 @@
+ Comment[br]=Ostilh haezadusted KDE
+ Comment[cy]=Erfyn Hygyrchedd KDE
+ Comment[da]=KDE Tilgængelighedsværktøj
++Comment[de]=KDE-Zugangshilfen
+ Comment[el]=Εργαλείο προσιτότητας του KDE
+ Comment[eo]=KDE-ilo por Alirebleco
+-Comment[et]=KDE hõlbustusvahend
++Comment[et]=KDE hõlbustustööriist
+ Comment[eu]=KDEren erabilerraztasun tresna
+ Comment[fi]=KDE:n helppokäyttötoiminnot
+ Comment[fr]=Outil d'accessibilité de KDE
+@@ -33,6 +34,7 @@
+ Comment[pt]=Ferramenta de Acessibilidade do KDE
+ Comment[pt_BR]=Ferramenta de Acessibilidade do KDE
+ Comment[ru]=Специальные возможности KDE
++Comment[sr]=KDE alatka za pristupačnost
+ Comment[sr at latin]=KDE alatka za pristupačnost
+ Comment[sv]=Handikappverktyg för KDE
+ Comment[th]=เครื่องมือปรับแต่งการช่วยใช้งาน KDE
+@@ -46,6 +48,7 @@
+ Name=A modifier key has become active
+ Name[af]='n Verandering sleutel was geaktiveer
+ Name[da]=En ændringstast er blevet aktiv
++Name[de]=Eine Modifikator-Taste wurde aktiviert
+ Name[el]=Ένα πλήκτρο τροποποιητή έγινε ενεργό
+ Name[eo]=Modifigita klavo aktiviĝis
+ Name[et]=Muuteklahv muutus aktiivseks
+@@ -71,6 +74,7 @@
+ Name[pt_BR]=Uma tecla modificadora se tornou ativa
+ Name[ro]=Un modificator de taste a devenit activ
+ Name[ru]=Нажата клавиша модификатора
++Name[sr]=Modifikatorski taster je aktiviran
+ Name[sr at latin]=Modifikatorski taster je aktiviran
+ Name[sv]=En väljartangent har aktiverats
+ Name[th]=ปุ่มแปลงหน้าที่เปิดทำงาน
+@@ -78,7 +82,9 @@
+ Name[zh_CN]=修饰键变为激活
+ Name[zh_TW]=組合鍵已啟動
+ Comment=A modifier key (e.g., Shift or Control) has changed its state and is now active
++Comment[de]=Eine Modifikator-Taste (Umschalt oder Strg) hat ihren Status verändert und ist nun aktiv
+ Comment[el]=Ένα πλήκτρο τροποποιητή (π.χ., Shift ή Control) άλλαξε την κατάστασή του και είναι τώρα ενεργό
++Comment[et]=Muuteklahv (nt. Shift või Ctrl) muutis oma olekut ning on nüüd aktiivne
+ Comment[ja]=修飾キー (Shift や Control) の状態が変更され、アクティブになりました
+ Comment[km]=គ្រាប់ចុច​កែប្រែ (ឧ. ប្ដូរ (Shift) ឬ ជំនួស (Control)) បាន​ផ្លាស់ប្ដូរ​សភាព​របស់​វា ឥឡូវ​នេះ​សកម្ម
+ Comment[nb]=En valgtast (f.eks. Shift eller Ctrl) har endret status og er nå aktiv
+@@ -100,6 +106,7 @@
+ Name=A modifier key has become inactive
+ Name[af]='n Verandering sleutel was gedeaktiveer
+ Name[da]=En ændringstast er blevet deaktiveret
++Name[de]=Eine Modifikator-Taste wurde deaktiviert
+ Name[el]=Ένα πλήκτρο τροποποιητή έγινε ανενεργό
+ Name[eo]=Modifigita klavo malaktiviĝis
+ Name[et]=Muuteklahv muutus mitteaktiivseks
+@@ -125,13 +132,16 @@
+ Name[pt_BR]=Uma tecla modificadora se tornou inativa
+ Name[ro]=Un modificator de taste a devenit inactiv
+ Name[ru]=Отжата клавиша модификатора
++Name[sr]=Modifikatorski taster je deaktiviran
+ Name[sr at latin]=Modifikatorski taster je deaktiviran
+ Name[sv]=En väljartangent har inaktiverats
+ Name[x-test]=xxA modifier key has become inactivexx
+ Name[zh_CN]=修饰键变为非激活
+ Name[zh_TW]=組合鍵已放開
+ Comment=A modifier key (e.g., Shift or Control) has changed its state and is now inactive
++Comment[de]=Eine Modifikator-Taste (Umschalt oder Strg) hat ihren Status verändert und ist nun inaktiv
+ Comment[el]=Ένα πλήκτρο τροποποιητή (π.χ., Shift ή Control) άλλαξε την κατάστασή του και είναι τώρα ανενεργό
++Comment[et]=Muuteklahv (nt. Shift või Ctrl) muutis oma olekut ning on nüüd mitteaktiivne
+ Comment[ja]=修飾キー (Shift や Control) の状態が変更され、非アクティブになりました
+ Comment[km]=គ្រាប់​ចុច​កែប្រែ (ឧ. ប្ដូរ (Shift) ឬ បញ្ជា (Control)) បាន​ផ្លាស់ប្ដូរ​សភាព​របស់​វា ហើយ​ឥឡូវ​នេះ​អសកម្ម
+ Comment[nb]=En valgtast (f.eks. Shift eller Ctrl) har endret status og er nå inaktiv
+@@ -152,6 +162,7 @@
+ Name=A modifier key has been locked
+ Name[af]='n Verandering sleutel was gesluit
+ Name[da]=En ændringstast er blevet låst
++Name[de]=Eine Modifikator-Taste wurde gesperrt
+ Name[el]=Ένα πλήκτρο τροποποιητή κλειδώθηκε
+ Name[eo]=Modifigita klavo ŝlosiĝis
+ Name[et]=Muuteklahv on lukustatud
+@@ -177,15 +188,18 @@
+ Name[pt_BR]=Uma tecla modificadora foi bloqueada
+ Name[ro]=Un modificator de taste a fost blocat
+ Name[ru]=Клавиша модификатора зафиксирована
++Name[sr]=Modifikatorski taster je zaključan
+ Name[sr at latin]=Modifikatorski taster je zaključan
+ Name[sv]=En väljartangent har låsts
+ Name[x-test]=xxA modifier key has been lockedxx
+ Name[zh_CN]=修饰键现已锁定
+ Name[zh_TW]=組合鍵已鎖定
+ Comment=A modifier key (e.g., Shift or Control) has been locked and is now active for all of the following keypresses
++Comment[de]=Eine Modifikator-Taste (Umschalt oder Strg) wurde gesperrt und ist nun für alle folgenden Tastendrücke aktiv
+ Comment[el]=Ένα πλήκτρο τροποποιητή (π.χ., Shift ή Control) κλειδώθηκε και τώρα είναι ενεργό για όλα τα ακόλουθα πατήματα πλήκτρων
++Comment[et]=Muuteklahv (nt. Shift või Ctrl) on lukustatud ja on nüüd aktiivne kõikide järgnevate klahvivajutuste jaoks
+ Comment[ja]=修飾キー (Shift や Control) がロックされ、続くキー押下のすべてに対してアクティブになりました
+-Comment[km]=គ្រាប់​ចុច​កែប្រែ (ឧ. ប្ដូរ (Shift) ឬ បញ្ជា (Control)) ត្រូវ​បាន​ចាក់​សោ ហើយ​ឥឡូវ​នេះ​សកម្ម​សម្រាប់​ការ​ចុច​គ្រាប់​ចុច​ខាងក្រោម
++Comment[km]=គ្រាប់​ចុច​កែប្រែ (ឧ. ប្ដូរ (Shift) ឬ បញ្ជា (Control)) ត្រូវ​បាន​ចាក់​សោ ហើយ​ឥឡូវ​នេះ​សកម្ម​សម្រាប់​ការ​ចុច​គ្រាប់​ចុច​ខាង​ក្រោម
+ Comment[nb]=En valgtast (f.eks. Shift eller Ctrl) har blitt låst og er nå aktiv for alle etterfølgende tastetrykk
+ Comment[nds]=En Sünnertast (Ümschalt oder Stüern (Strg) a.B.) wöör fastsett un is nu för all nakamen Tasten aktiev
+ Comment[nl]=Een modificatietoets (bijv. Shift of Ctrl) is vergrendeld en nu actief voor alle volgende toetsaanslagen
+@@ -204,6 +218,7 @@
+ Name=A lock key has been activated
+ Name[af]='n Sluit sleutel was geaktiveer
+ Name[da]=En låsetast er blevet aktiveret
++Name[de]=Eine Sperrtaste wurde aktiviert
+ Name[el]=Ένα πλήκτρο κλειδώματος έχει ενεργοποιηθεί
+ Name[eo]=Ŝlosa klavo aktiviĝis
+ Name[et]=Lukustusklahv on aktiveeritud
+@@ -230,16 +245,19 @@
+ Name[pt_BR]=Uma tecla de bloqueio foi ativada
+ Name[ro]=O tastă de blocare a fost activată
+ Name[ru]=Активирована клавиша переключения режимов
++Name[sr]=Taster za zaključavanje je aktiviran
+ Name[sr at latin]=Taster za zaključavanje je aktiviran
+ Name[sv]=En låstangent har aktiverats
+ Name[x-test]=xxA lock key has been activatedxx
+ Name[zh_CN]=锁定键现已激活
+ Name[zh_TW]=已啟動鎖定鍵
+ Comment=A lock key (e.g., Caps Lock or Num Lock) has changed its state and and is now active
++Comment[de]=Eine Sperrtaste (Hochstelltaste oder Nummernblocksperre) hat ihren Status geändert und ist nun aktiv
+ Comment[el]=Ένα πλήκτρο κλειδώματος (π.χ., Caps Lock ή Num Lock) άλλαξε την κατάστασή του και είναι τώρα ενεργό
++Comment[et]=Lukustusklahv (nt. Caps Lock või Num Lock) muutis oma seisundit ning on nüüd mitteaktiivne
+ Comment[it]=Un tasto di blocco (ad es. Bloc Maiusc o Bloc Num) ha cambiato stato ed ora è attivo
+ Comment[ja]=ロックキー (Caps Lock や Num Lock) の状態が変更され、アクティブになりました
+-Comment[km]=គ្រាប់​ចុច​ចាក់​សោ (ឧ. ប្ដូរ​ជាប់ (Caps Lock) ឬ លេខ (Num Lock)) បាន​ផ្លាស់ប្ដូរ​សភាព​របស់​វា ហើយ​ឥឡូវ​នេះ​វា​សកម្ម
++Comment[km]=គ្រាប់​ចុច​ចាក់​សោ (ឧ. ប្ដូរ​ជាប់ (Caps Lock) ឬ លេខ (Num Lock)) បាន​ផ្លាស់ប្ដូរ​​ស្ថានភាព​របស់​​វា ហើយ​ឥឡូវ​នេះ​វា​សកម្ម
+ Comment[nb]=En låsetast (f.eks. Caps Lock eller Num Lock) har endret status og er nå aktiv
+ Comment[nds]=En Fastsetttast (Tallenrast oder Grootschrievtast a.B.) hett sien Tostand ännert un is nu aktiev
+ Comment[nl]=Een vergrendeltoets (bijv. Caps Lock of Num Lock) is nu actief
+@@ -258,6 +276,7 @@
+ Name=A lock key has been deactivated
+ Name[af]='n Sluit sleutel was gedeaktiveer
+ Name[da]=En låsetast er blevet deaktiveret
++Name[de]=Eine Sperrtaste wurde deaktiviert
+ Name[el]=Ένα πλήκτρο κλειδώματος απενεργοποιήθηκε
+ Name[eo]=Ŝlosa klavo malaktiviĝis
+ Name[et]=Lukustusklahv on nüüd mitteaktiivne
+@@ -272,7 +291,7 @@
+ Name[it]=Un tasto di blocco è stato disattivato
+ Name[ja]=ロックキーが非アクティブになりました
+ Name[ka]=დაბლოკვის ღილაკი ამორთულია
+-Name[km]=គ្រាប់​ចុច​ចាក់​សោ​បាន​ត្រូវ​ធ្វើ​ឲ្យ​អសកម្ម
++Name[km]=គ្រាប់​ចុច​ចាក់​សោ​ត្រូវ​បាន​​​ធ្វើ​ឲ្យ​អសកម្ម
+ Name[lt]=Užrakto klavišas buvo išjungtas
+ Name[mk]=Некое копче за заклучување беше активирано
+ Name[nb]=En låsetast er blitt deaktivert
+@@ -284,16 +303,19 @@
+ Name[pt_BR]=Uma tecla de bloqueio foi desativada
+ Name[ro]=O tastă de blocare a fost deactivată
+ Name[ru]=Деактивирована клавиша переключения режимов
++Name[sr]=Taster za zaključavanje je deaktiviran
+ Name[sr at latin]=Taster za zaključavanje je deaktiviran
+ Name[sv]=En låstangent har inaktiverats
+ Name[x-test]=xxA lock key has been deactivatedxx
+ Name[zh_CN]=锁定键现已非激活
+ Name[zh_TW]=已解除鎖定鍵
+ Comment=A lock key (e.g., Caps Lock or Num Lock) has changed its state and is now inactive
++Comment[de]=Eine Sperrtaste (Hochstelltaste oder Nummernblocksperre) hat ihren Status geändert und ist nun inaktiv
+ Comment[el]=Ένα πλήκτρο κλειδώματος (π.χ., Caps Lock ή Num Lock) άλλαξε την κατάστασή του και είναι τώρα ανενεργό
++Comment[et]=Lukustusklahv (nt. Caps Lock või Num Lock) muutis oma seisundit ning on nüüd mitteaktiivne
+ Comment[it]=Un tasto di blocco (ad es. Bloc Maiusc o Bloc Num) ha cambiato stato ed ora è inattivo
+ Comment[ja]=ロックキー (Caps Lock や Num Lock) の状態が変更され、非アクティブになりました
+-Comment[km]=គ្រាប់​ចុច​ចាក់​សោ (ឧ. ប្ដូរ​ជាប់ (Caps Lock) ឬ លេខ (Num Lock)) បាន​ត្រូវ​ផ្លាស់ប្ដូរ​សភាព​របស់​វា ហើយ​ឥឡូវ​នេះ​អសកម្ម
++Comment[km]=គ្រាប់​ចុច​ចាក់​សោ (ឧ. ប្ដូរ​ជាប់ (Caps Lock) ឬ លេខ (Num Lock)) បាន​ត្រូវ​ផ្លាស់ប្ដូរ​ស្ថានភាព​​របស់​​វា ហើយ​ឥឡូវ​នេះ​អសកម្ម
+ Comment[nb]=En låsetast (f.eks. Caps Lock eller Num Lock) har endret status og er nå inaktiv
+ Comment[nds]=En Fastsetttast (Tallenrast oder Grootschrievtast a.B.) hett sien Tostand ännert un is nu nich mehr aktiev
+ Comment[nl]=Een vergrendeltoers (bijv. Caps Lock of Num Lock ) is nu inactief
+@@ -312,6 +334,7 @@
+ Name=Sticky keys has been enabled or disabled
+ Name[af]=Sticky sleutels was geaktiveer of gedeaktiveer
+ Name[da]=Klæbrige taster er aktiveret eller deaktiveret
++Name[de]=Klebende Tasten wurden aktiviert oder deaktiviert
+ Name[el]=Τα κολλημένα πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Name[eo]=Adherklavoj validiĝis aŭ malvalidiĝis
+ Name[et]=Kleepuvad klahvid on keelatud või lubatud
+@@ -324,7 +347,7 @@
+ Name[hu]=Ragadós billentyűk átkapcsolva
+ Name[is]=Slökkt eða kveikt hefur verið á klístruðum lyklum
+ Name[ja]=スティッキーキーが有効または無効になりました
+-Name[km]=គ្រាប់​ចុច​ស្អិត​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Name[km]=គ្រាប់​ចុច​ស្អិត​​ត្រូវ​បាន​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Name[lt]=Lipnūs klavišai buvo įgalinti arba išjungti
+ Name[mk]=„Лепливи копчиња“ е овозможено или оневозможено
+ Name[nb]=Faste valgtaster er blitt slått på eller av
+@@ -336,6 +359,7 @@
+ Name[pt_BR]=Teclas de aderência foram habilitadas ou desabilitadas
+ Name[ro]=Taste lipicioase (Sticky keys) au fost activate sau deactivate
+ Name[ru]=Включены или отключены "залипающие" клавиши
++Name[sr]=Lepljivi tasteri su uključeni ili isključeni
+ Name[sr at latin]=Lepljivi tasteri su uključeni ili isključeni
+ Name[sv]=Klistriga tangenter har aktiverats eller inaktiverats
+ Name[x-test]=xxSticky keys has been enabled or disabledxx
+@@ -344,6 +368,7 @@
+ Comment=Sticky keys has been enabled or disabled
+ Comment[af]=Sticky sleutels was geaktiveer of gedeaktiveer
+ Comment[da]=Klæbrige taster er aktiveret eller deaktiveret
++Comment[de]=Die Funktion "Klebende Tasten" wurde aktiviert oder deaktiviert
+ Comment[el]=Τα κολλημένα πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Comment[et]=Kleepuvad klahvid on keelatud või lubatud
+ Comment[eu]=Tekla itsakorrak gaitu edo desgaitu dira
+@@ -355,7 +380,7 @@
+ Comment[hu]=A ragadós billentyűk használatát ki- vagy bekapcsolták
+ Comment[is]=Slökkt eða kveikt hefur verið á klístruðum lyklum
+ Comment[ja]=スティッキーキーが有効または無効になりました
+-Comment[km]=គ្រាប់​ចុច​ស្អិត​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Comment[km]=គ្រាប់​ចុច​ស្អិត​​ត្រូវ​បាន​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Comment[lt]=Lipnūs klavišai buvo įjungti arba išjungti
+ Comment[mk]=„Лепливи копчиња“ е овозможено или оневозможено
+ Comment[nb]=Faste valgtaster er blitt slått på eller av
+@@ -367,6 +392,7 @@
+ Comment[pt_BR]=Teclas de aderência foram habilitadas ou desabilitadas
+ Comment[ro]=Taste lipicioase (Sticky keys) au fost activate sau deactivate
+ Comment[ru]=Включены или отключены "залипающие" клавиши
++Comment[sr]=Lepljivi tasteri su uključeni ili isključeni
+ Comment[sr at latin]=Lepljivi tasteri su uključeni ili isključeni
+ Comment[sv]=Klistriga tangenter har aktiverats eller inaktiverats
+ Comment[x-test]=xxSticky keys has been enabled or disabledxx
+@@ -380,6 +406,7 @@
+ Name=Slow keys has been enabled or disabled
+ Name[af]=Stadige sleutels was geaktiveer of gedeaktiveer
+ Name[da]=Langsomme taster er aktiveret eller deaktiveret
++Name[de]=Langsame Tasten wurden aktiviert oder deaktiviert
+ Name[el]=Τα αργά πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Name[eo]=Malrapidklavoj validiĝis aŭ malvalidiĝis
+ Name[et]=Aeglased klahvid on keelatud või lubatud
+@@ -392,7 +419,7 @@
+ Name[hu]=A lassú billentyűk használata átkapcsolva
+ Name[is]=Slökkt eða kveikt hefur verið á hægum lyklum
+ Name[ja]=スローキーが有効または無効になりました
+-Name[km]=គ្រាប់​ចុច​យឺត​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Name[km]=គ្រាប់​ចុច​យឺត​​ត្រូវ​បាន​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Name[lt]=Lėti klavišai buvo įgalinti arba išjungti
+ Name[mk]=„Спори копчиња“ е овозможено или оневозможено
+ Name[nb]=Trege taster er blitt slått på eller av
+@@ -404,6 +431,7 @@
+ Name[pt_BR]=Teclas lentas foram habilitadas ou desabilitadas
+ Name[ro]=Taste lente (Slow keys) au fost activate sau deactivate
+ Name[ru]=Включены или отключены замедленные клавиши
++Name[sr]=Spori tasteri su uključeni ili isključeni
+ Name[sr at latin]=Spori tasteri su uključeni ili isključeni
+ Name[sv]=Långsamma tangenter har aktiverats eller inaktiverats
+ Name[x-test]=xxSlow keys has been enabled or disabledxx
+@@ -412,6 +440,7 @@
+ Comment=Slow keys has been enabled or disabled
+ Comment[af]=Stadige sleutels was geaktiveer of gedeaktiveer
+ Comment[da]=Langsomme taster er aktiveret eller deaktiveret
++Comment[de]=Die Funktion "Langsame Tasten" wurde aktiviert oder deaktiviert
+ Comment[el]=Τα αργά πλήκτρα ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Comment[et]=Aeglased klahvid on keelatud või lubatud
+ Comment[eu]=Tekla motelak gaitu edo desgaitu dira
+@@ -423,7 +452,7 @@
+ Comment[hu]=A lassú billentyűk használatát ki- vagy bekapcsolták
+ Comment[is]=Slökkt eða kveikt hefur verið á hægum lyklum
+ Comment[ja]=スローキーが有効または無効になりました
+-Comment[km]=គ្រាប់​ចុច​យឺត​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Comment[km]=គ្រាប់​ចុច​យឺត​ត្រូវ​បាន​​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Comment[lt]=Lėti klavišai buvo įgalinti arba išjungti
+ Comment[mk]=„Спори копчиња“ е овозможено или оневозможено
+ Comment[nb]=Trege taster er blitt slått på eller av
+@@ -435,6 +464,7 @@
+ Comment[pt_BR]=Teclas lentas foram habilitadas ou desabilitadas
+ Comment[ro]=Taste lente (Slow keys) au fost activate sau deactivate
+ Comment[ru]=Включены или отключены замедленные клавиши
++Comment[sr]=Spori tasteri su uključeni ili isključeni
+ Comment[sr at latin]=Spori tasteri su uključeni ili isključeni
+ Comment[sv]=Långsamma tangenter har aktiverats eller inaktiverats
+ Comment[x-test]=xxSlow keys has been enabled or disabledxx
+@@ -447,6 +477,7 @@
+ [Event/bouncekeys]
+ Name=Bounce keys has been enabled or disabled
+ Name[da]=Elastiske taster er aktiveret eller deaktiveret
++Name[de]=Zurückschnellende Tasten wurden aktiviert oder deaktiviert
+ Name[el]=Τα πλήκτρα αναπήδησης ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Name[eo]=Revenklavoj validiĝis aŭ malvalidiĝis
+ Name[et]=Põrkavad klahvid on keelatud või lubatud
+@@ -459,7 +490,7 @@
+ Name[hu]=A visszaugró billentyűk átkapcsolva
+ Name[is]=Slökkt eða kveikt hefur verið á skoppandi lyklum
+ Name[ja]=バウンスキーが有効または無効になりました
+-Name[km]=គ្រាប់​ចុច​លោត​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Name[km]=គ្រាប់​ចុច​លោត​​ត្រូវ​បាន​​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Name[lt]=Tamprūs klavišai buvo įgalinti arba išjungti
+ Name[mk]=„Скокачки копчиња“ е овозможено или оневозможено
+ Name[nb]=Filtertaster er blitt slått på eller av
+@@ -471,6 +502,7 @@
+ Name[pt_BR]=Teclas de repercussão foram habilitadas ou desabilitadas
+ Name[ro]=Taste săltăreţe (Bounce keys) au fost activate sau deactivate
+ Name[ru]=Включены или отключены "прыгающие" клавиши
++Name[sr]=Odskačući tasteri su uključeni ili isključeni
+ Name[sr at latin]=Odskačući tasteri su uključeni ili isključeni
+ Name[sv]=Studsande tangenter har aktiverats eller inaktiverats
+ Name[x-test]=xxBounce keys has been enabled or disabledxx
+@@ -479,6 +511,7 @@
+ Comment=Bounce keys has been enabled or disabled
+ Comment[af]=Hop sleutels was geaktiveer of gedeaktiveer
+ Comment[da]=Elastiske taster er aktiveret eller deaktiveret
++Comment[de]=Die Funktion "Zurückschnellende Tasten" wurde aktiviert oder deaktiviert
+ Comment[el]=Τα πλήκτρα αναπήδησης ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Comment[et]=Põrkavad klahvid on keelatud või lubatud
+ Comment[eu]=Errebotatze-teklak gaitu edo desgaitu dira
+@@ -490,7 +523,7 @@
+ Comment[hu]=A visszaugró billentyűk használatát ki- vagy bekapcsolták
+ Comment[is]=Slökkt eða kveikt hefur verið á skoppandi lyklum
+ Comment[ja]=バウンスキーが有効または無効になりました
+-Comment[km]=គ្រាប់​ចុច​លោត​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Comment[km]=គ្រាប់​ចុច​លោត​​ត្រូវបាន​​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Comment[lt]=Tamprūs klavišai buvo įgalinti arba išjungti
+ Comment[mk]=„Скокачки копчиња“ е овозможено или оневозможено
+ Comment[nb]=Filtertaster er blitt slått på eller av
+@@ -502,6 +535,7 @@
+ Comment[pt_BR]=Teclas de repercussão foram habilitadas ou desabilitadas
+ Comment[ro]=Taste săltăreţe (Bounce keys) au fost activate sau deactivate
+ Comment[ru]=Включены или отключены "прыгающие" клавиши
++Comment[sr]=Odskačući tasteri su uključeni ili isključeni
+ Comment[sr at latin]=Odskačući tasteri su uključeni ili isključeni
+ Comment[sv]=Studsande tangenter har aktiverats eller inaktiverats
+ Comment[x-test]=xxBounce keys has been enabled or disabledxx
+@@ -515,6 +549,7 @@
+ Name=Mouse keys has been enabled or disabled
+ Name[af]=Muis sleutels was geaktiveer of gedeaktiveer
+ Name[da]=Musetaster er aktiveret eller deaktiveret
++Name[de]=Maustasten wurden aktiviert oder deaktiviert
+ Name[el]=Τα πλήκτρα ποντικιού ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Name[eo]=Musklavoj validiĝis aŭ malvalidiĝis
+ Name[et]=Hiire klahvid on keelatud või lubatud
+@@ -527,7 +562,7 @@
+ Name[hu]=Az egérmozgató billentyűk átkapcsolva
+ Name[is]=Slökkt eða kveikt hefur verið á músarlyklum
+ Name[ja]=マウスキーが有効または無効になりました
+-Name[km]=គ្រាប់​ចុច​កណ្ដុរ​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Name[km]=គ្រាប់​ចុច​កណ្ដុរ​ត្រូវ​បាន​​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Name[lt]=Pelės klavišai buvo įgalinti arba išjungti
+ Name[mk]=„Копчиња на глушецот“ е овозможено или оневозможено
+ Name[nb]=Musetaster er blitt slått på eller av
+@@ -539,6 +574,7 @@
+ Name[pt_BR]=Teclas de mouse foram habilitadas ou desabilitadas
+ Name[ro]=Taste de maus au fost activate sau deactivate
+ Name[ru]=Нажаты или отжаты клавиши мыши
++Name[sr]=Tasteri za miš su uključeni ili isključeni
+ Name[sr at latin]=Tasteri za miš su uključeni ili isključeni
+ Name[sv]=Mustangenter har aktiverats eller inaktiverats
+ Name[x-test]=xxMouse keys has been enabled or disabledxx
+@@ -547,6 +583,7 @@
+ Comment=Mouse keys has been enabled or disabled
+ Comment[af]=Muis sleutels was geaktiveer of gedeaktiveer
+ Comment[da]=Musetaster er aktiveret eller deaktiveret
++Comment[de]=Die Funktion "Maustasten" wurde aktiviert oder deaktiviert
+ Comment[el]=Τα πλήκτρα ποντικιού ενεργοποιήθηκαν ή απενεργοποιήθηκαν
+ Comment[eo]=Musklavoj validiĝis aŭ malvalidiĝis
+ Comment[et]=Hiire klahvid on keelatud või lubatud
+@@ -560,7 +597,7 @@
+ Comment[is]=Slökkt eða kveikt hefur verið á músarlyklum
+ Comment[it]=Il mouse da tastiera è stato abilitato o disabilitato
+ Comment[ja]=マウスキーが有効または無効になりました
+-Comment[km]=គ្រាប់​ចុច​កណ្ដុរ​បាន​ត្រូវ​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
++Comment[km]=គ្រាប់​ចុច​កណ្ដុរ​ត្រូវ​បាន​​​អនុញ្ញាត ឬ​មិន​អនុញ្ញាត
+ Comment[lt]=Pelės mygtukai buvo įgalinti arba išjungti
+ Comment[mk]=„Копчиња на глушецот“ е овозможено или оневозможено
+ Comment[nb]=Musetaster er blitt slått på eller av
+@@ -572,6 +609,7 @@
+ Comment[pt_BR]=Teclas de mouse foram habilitadas ou desabilitadas
+ Comment[ro]=Taste de maus au fost activate sau deactivate
+ Comment[ru]=Нажаты или отжаты клавиши мыши
++Comment[sr]=Tasteri za miš su uključeni ili isključeni
+ Comment[sr at latin]=Tasteri za miš su uključeni ili isključeni
+ Comment[sv]=Mustangenter har aktiverats eller inaktiverats
+ Comment[x-test]=xxMouse keys has been enabled or disabledxx
+--- a/kcontrol/access/kcmaccess.cpp
++++ b/kcontrol/access/kcmaccess.cpp
+@@ -408,7 +408,7 @@
+   stickyKeysBeep = new QCheckBox(i18n("Use system bell whenever a modifier gets latched, locked or unlocked"), grp);
+   hbox->addWidget(stickyKeysBeep);
+ 
+-  grp = new Q3GroupBox(i18n("Locking keys"), modifiers);
++  grp = new Q3GroupBox(i18n("Locking Keys"), modifiers);
+   grp->setColumnLayout( 0, Qt::Horizontal );
+   vbox->addWidget(grp);
+ 
+@@ -426,7 +426,7 @@
+   vvbox->addItem(hbox);
+   hbox->setSpacing(KDialog::spacingHint());
+   hbox->addStretch(1);
+-  kNotifyModifiersButton = new QPushButton("Configure system notification", grp);
++  kNotifyModifiersButton = new QPushButton("Configure System Notification...", grp);
+   kNotifyModifiersButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+   hbox->addWidget(kNotifyModifiersButton);
+ 
+@@ -601,7 +601,7 @@
+   vvbox->addItem(hbox);
+   hbox->setSpacing(KDialog::spacingHint());
+   hbox->addStretch(1);
+-  kNotifyAccessXButton = new QPushButton("Configure system notification", grp);
++  kNotifyAccessXButton = new QPushButton("Configure System Notification...", grp);
+   kNotifyAccessXButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+   hbox->addWidget(kNotifyAccessXButton);
+ 
+@@ -664,7 +664,7 @@
+ 
+   systemBell->setChecked(cg.readEntry("SystemBell", true));
+   customBell->setChecked(cg.readEntry("ArtsBell", false));
+-  soundEdit->setText(cg.readPathEntry("ArtsBellFile"));
++  soundEdit->setText(cg.readPathEntry("ArtsBellFile", QString()));
+ 
+   visibleBell->setChecked(cg.readEntry("VisibleBell", false));
+   invertScreen->setChecked(cg.readEntry("VisibleBellInvert", true));
+@@ -673,33 +673,32 @@
+ 
+   durationSlider->setValue(cg.readEntry("VisibleBellPause", 500));
+ 
++  KConfigGroup keyboardGroup(KSharedConfig::openConfig("kaccessrc"),"Keyboard");
+ 
+-  cg.changeGroup("Keyboard");
+-
+-  stickyKeys->setChecked(cg.readEntry("StickyKeys", false));
+-  stickyKeysLock->setChecked(cg.readEntry("StickyKeysLatch", true));
+-  stickyKeysAutoOff->setChecked(cg.readEntry("StickyKeysAutoOff", false));
+-  stickyKeysBeep->setChecked(cg.readEntry("StickyKeysBeep", true));
+-  toggleKeysBeep->setChecked(cg.readEntry("ToggleKeysBeep", false));
+-  kNotifyModifiers->setChecked(cg.readEntry("kNotifyModifiers", false));
+-
+-  slowKeys->setChecked(cg.readEntry("SlowKeys", false));
+-  slowKeysDelay->setValue(cg.readEntry("SlowKeysDelay", 500));
+-  slowKeysPressBeep->setChecked(cg.readEntry("SlowKeysPressBeep", true));
+-  slowKeysAcceptBeep->setChecked(cg.readEntry("SlowKeysAcceptBeep", true));
+-  slowKeysRejectBeep->setChecked(cg.readEntry("SlowKeysRejectBeep", true));
+-
+-  bounceKeys->setChecked(cg.readEntry("BounceKeys", false));
+-  bounceKeysDelay->setValue(cg.readEntry("BounceKeysDelay", 500));
+-  bounceKeysRejectBeep->setChecked(cg.readEntry("BounceKeysRejectBeep", true));
+-
+-  gestures->setChecked(cg.readEntry("Gestures", true));
+-  timeout->setChecked(cg.readEntry("AccessXTimeout", false));
+-  timeoutDelay->setValue(cg.readEntry("AccessXTimeoutDelay", 30));
+-
+-  accessxBeep->setChecked(cg.readEntry("AccessXBeep", true));
+-  gestureConfirmation->setChecked(cg.readEntry("GestureConfirmation", false));
+-  kNotifyAccessX->setChecked(cg.readEntry("kNotifyAccessX", false));
++  stickyKeys->setChecked(keyboardGroup.readEntry("StickyKeys", false));
++  stickyKeysLock->setChecked(keyboardGroup.readEntry("StickyKeysLatch", true));
++  stickyKeysAutoOff->setChecked(keyboardGroup.readEntry("StickyKeysAutoOff", false));
++  stickyKeysBeep->setChecked(keyboardGroup.readEntry("StickyKeysBeep", true));
++  toggleKeysBeep->setChecked(keyboardGroup.readEntry("ToggleKeysBeep", false));
++  kNotifyModifiers->setChecked(keyboardGroup.readEntry("kNotifyModifiers", false));
++
++  slowKeys->setChecked(keyboardGroup.readEntry("SlowKeys", false));
++  slowKeysDelay->setValue(keyboardGroup.readEntry("SlowKeysDelay", 500));
++  slowKeysPressBeep->setChecked(keyboardGroup.readEntry("SlowKeysPressBeep", true));
++  slowKeysAcceptBeep->setChecked(keyboardGroup.readEntry("SlowKeysAcceptBeep", true));
++  slowKeysRejectBeep->setChecked(keyboardGroup.readEntry("SlowKeysRejectBeep", true));
++
++  bounceKeys->setChecked(keyboardGroup.readEntry("BounceKeys", false));
++  bounceKeysDelay->setValue(keyboardGroup.readEntry("BounceKeysDelay", 500));
++  bounceKeysRejectBeep->setChecked(keyboardGroup.readEntry("BounceKeysRejectBeep", true));
++
++  gestures->setChecked(keyboardGroup.readEntry("Gestures", true));
++  timeout->setChecked(keyboardGroup.readEntry("AccessXTimeout", false));
++  timeoutDelay->setValue(keyboardGroup.readEntry("AccessXTimeoutDelay", 30));
++
++  accessxBeep->setChecked(keyboardGroup.readEntry("AccessXBeep", true));
++  gestureConfirmation->setChecked(keyboardGroup.readEntry("GestureConfirmation", false));
++  kNotifyAccessX->setChecked(keyboardGroup.readEntry("kNotifyAccessX", false));
+ 
+   checkAccess();
+ 
+@@ -721,43 +720,43 @@
+ 
+   cg.writeEntry("VisibleBellPause", durationSlider->value());
+ 
++  KConfigGroup keyboardGroup(KSharedConfig::openConfig("kaccessrc"),"Keyboard");
+ 
+-  cg.changeGroup("Keyboard");
+-
+-  cg.writeEntry("StickyKeys", stickyKeys->isChecked());
+-  cg.writeEntry("StickyKeysLatch", stickyKeysLock->isChecked());
+-  cg.writeEntry("StickyKeysAutoOff", stickyKeysAutoOff->isChecked());
+-  cg.writeEntry("StickyKeysBeep", stickyKeysBeep->isChecked());
+-  cg.writeEntry("ToggleKeysBeep", toggleKeysBeep->isChecked());
+-  cg.writeEntry("kNotifyModifiers", kNotifyModifiers->isChecked());
+-
+-  cg.writeEntry("SlowKeys", slowKeys->isChecked());
+-  cg.writeEntry("SlowKeysDelay", slowKeysDelay->value());
+-  cg.writeEntry("SlowKeysPressBeep", slowKeysPressBeep->isChecked());
+-  cg.writeEntry("SlowKeysAcceptBeep", slowKeysAcceptBeep->isChecked());
+-  cg.writeEntry("SlowKeysRejectBeep", slowKeysRejectBeep->isChecked());
+-
+-
+-  cg.writeEntry("BounceKeys", bounceKeys->isChecked());
+-  cg.writeEntry("BounceKeysDelay", bounceKeysDelay->value());
+-  cg.writeEntry("BounceKeysRejectBeep", bounceKeysRejectBeep->isChecked());
+-
+-  cg.writeEntry("Gestures", gestures->isChecked());
+-  cg.writeEntry("AccessXTimeout", timeout->isChecked());
+-  cg.writeEntry("AccessXTimeoutDelay", timeoutDelay->value());
+-
+-  cg.writeEntry("AccessXBeep", accessxBeep->isChecked());
+-  cg.writeEntry("GestureConfirmation", gestureConfirmation->isChecked());
+-  cg.writeEntry("kNotifyAccessX", kNotifyAccessX->isChecked());
++  keyboardGroup.writeEntry("StickyKeys", stickyKeys->isChecked());
++  keyboardGroup.writeEntry("StickyKeysLatch", stickyKeysLock->isChecked());
++  keyboardGroup.writeEntry("StickyKeysAutoOff", stickyKeysAutoOff->isChecked());
++  keyboardGroup.writeEntry("StickyKeysBeep", stickyKeysBeep->isChecked());
++  keyboardGroup.writeEntry("ToggleKeysBeep", toggleKeysBeep->isChecked());
++  keyboardGroup.writeEntry("kNotifyModifiers", kNotifyModifiers->isChecked());
++
++  keyboardGroup.writeEntry("SlowKeys", slowKeys->isChecked());
++  keyboardGroup.writeEntry("SlowKeysDelay", slowKeysDelay->value());
++  keyboardGroup.writeEntry("SlowKeysPressBeep", slowKeysPressBeep->isChecked());
++  keyboardGroup.writeEntry("SlowKeysAcceptBeep", slowKeysAcceptBeep->isChecked());
++  keyboardGroup.writeEntry("SlowKeysRejectBeep", slowKeysRejectBeep->isChecked());
++
++
++  keyboardGroup.writeEntry("BounceKeys", bounceKeys->isChecked());
++  keyboardGroup.writeEntry("BounceKeysDelay", bounceKeysDelay->value());
++  keyboardGroup.writeEntry("BounceKeysRejectBeep", bounceKeysRejectBeep->isChecked());
++
++  keyboardGroup.writeEntry("Gestures", gestures->isChecked());
++  keyboardGroup.writeEntry("AccessXTimeout", timeout->isChecked());
++  keyboardGroup.writeEntry("AccessXTimeoutDelay", timeoutDelay->value());
++
++  keyboardGroup.writeEntry("AccessXBeep", accessxBeep->isChecked());
++  keyboardGroup.writeEntry("GestureConfirmation", gestureConfirmation->isChecked());
++  keyboardGroup.writeEntry("kNotifyAccessX", kNotifyAccessX->isChecked());
+ 
+ 
+   cg.sync();
++  keyboardGroup.sync();
+ 
+   if (systemBell->isChecked() ||
+       customBell->isChecked() ||
+       visibleBell->isChecked())
+   {
+-    KConfig _cfg("kdeglobals", KConfig::CascadeConfig);
++    KConfig _cfg("kdeglobals", KConfig::NoGlobals);
+     KConfigGroup cfg(&_cfg, "General");
+     cfg.writeEntry("UseSystemBell", true);
+     cfg.sync();
+@@ -879,7 +878,7 @@
+    */
+   KDE_EXPORT void kcminit_access()
+   {
+-    KConfig *config = new KConfig( "kaccessrc", KConfig::CascadeConfig );
++    KConfig *config = new KConfig( "kaccessrc", KConfig::NoGlobals );
+     bool run = needToRunKAccessDaemon( config );
+ 
+     delete config;
+--- a/kcontrol/xinerama/kcmxinerama.cpp
++++ b/kcontrol/xinerama/kcmxinerama.cpp
+@@ -63,8 +63,8 @@
+ 	setQuickHelp( i18n("<h1>Multiple Monitors</h1> This module allows you to configure KDE support"
+      " for multiple monitors."));
+ 
+-	config = new KConfig("kdeglobals", KConfig::CascadeConfig);
+-	ksplashrc = new KConfig("ksplashrc", KConfig::CascadeConfig);
++	config = new KConfig("kdeglobals", KConfig::NoGlobals);
++	ksplashrc = new KConfig("ksplashrc", KConfig::NoGlobals);
+ 
+ 	_timer.setSingleShot(true);
+ 	connect(&_timer, SIGNAL(timeout()), this, SLOT(clearIndicator()));
+--- a/kcontrol/xinerama/xinerama.desktop
++++ b/kcontrol/xinerama/xinerama.desktop
+@@ -2,7 +2,7 @@
+ Icon=preferences-desktop-display-multiple
+ Type=Service
+ ServiceTypes=KCModule
+-Exec=kcmshell xinerama
++Exec=kcmshell4 xinerama
+ DocPath=kcontrol/multiplemonitors.html
+ Hidden[$e]=$(if test_kcm_xinerama; then echo "false"; else echo "true"; fi)
+ 
+@@ -160,7 +160,7 @@
+ Keywords[hu]=Xinerama,két fejes,két fej,monitor
+ Keywords[it]=Xinerama,dual head,multihead,monitor,monitor multipli
+ Keywords[ja]=Xinerama,デュアルヘッド,マルチヘッド,モニタ
+-Keywords[km]=Xinerama,​ក្បាល​ពីរ,​ក្បាល​ច្រើន,​ម៉ូនីទ័រ
++Keywords[km]=Xinerama ​ក្បាល​ពីរ ​ក្បាល​ច្រើន ​ម៉ូនីទ័រ
+ Keywords[ko]=Xinerama,듀얼 헤드,모니터,다중 모니터
+ Keywords[lt]=Xinerama,dual head,multihead,monitor,dviejų monitorių,monitorius
+ Keywords[lv]=Xinerama,dual head,multihead,monitori
+--- a/kcontrol/xinerama/CMakeLists.txt
++++ b/kcontrol/xinerama/CMakeLists.txt
+@@ -19,7 +19,7 @@
+ kde4_add_plugin(kcm_xinerama ${kcm_xinerama_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_xinerama  ${KDE4_KDE3SUPPORT_LIBS} ${X11_Xinerama_LIB})
++target_link_libraries(kcm_xinerama  ${KDE4_KDEUI_LIBS} ${QT_QT3SUPPORT_LIBRARY} ${X11_Xinerama_LIB})
+ 
+ install(TARGETS kcm_xinerama  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/kcontrol/randr/CMakeLists.txt
++++ b/kcontrol/randr/CMakeLists.txt
+@@ -31,7 +31,7 @@
+ kde4_add_plugin(kcm_randr ${kcm_randr_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_randr  ${KDE4_KDEUI_LIBS} ${X11_Xrandr_LIB} ${QT_QTGUI_LIBRARY} ${QT_QT3SUPPORT_LIBRARY})
++target_link_libraries(kcm_randr  ${KDE4_KDEUI_LIBS} ${X11_Xrandr_LIB} )
+ 
+ install(TARGETS kcm_randr  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+@@ -50,7 +50,7 @@
+ 
+ kde4_add_executable(krandrtray ${krandrtray_SRCS})
+ 
+-target_link_libraries(krandrtray  ${KDE4_KUTILS_LIBS} ${X11_Xrandr_LIB} ${QT_QTGUI_LIBRARY} ${QT_QT3SUPPORT_LIBRARY})
++target_link_libraries(krandrtray  ${KDE4_KUTILS_LIBS} ${X11_Xrandr_LIB} )
+ 
+ install(TARGETS krandrtray DESTINATION ${BIN_INSTALL_DIR})
+ 
+--- a/kcontrol/randr/krandrtray.desktop
++++ b/kcontrol/randr/krandrtray.desktop
+@@ -74,8 +74,9 @@
+ Comment[cs]=Applet pro změnu velikosti a orientace obrazovky
+ Comment[csb]=Panel apletu do zmianë miarë ë pòłóżenia ekranów X
+ Comment[de]=Ein Werkzeug zum Ändern der Bildschirmgröße und -ausrichtung
+-Comment[el]=Ένα εφαρμογίδιο αλλαγής μεγέθους και προσανατολισμού οθονών Χ.
++Comment[el]=Μια μικροεφαρμογή αλλαγής μεγέθους και προσανατολισμού οθονών Χ.
+ Comment[es]=Una miniaplicación del panel para redimensionar y reorientar pantallas X.
++Comment[et]=Paneeliaplett X'i ekraanide suuruse muutmiseks ja pööramiseks
+ Comment[fa]=برنامک تابلویی برای تغییر اندازه و تغییر جهت پرده‌های X.
+ Comment[he]=יישומון לוח לשינוי גודל וכיוון המסך
+ Comment[it]=Un'applet del pannello per ridimensionare e ruotare gli schermi X.
+--- a/kcontrol/randr/layoutmanager.h
++++ b/kcontrol/randr/layoutmanager.h
+@@ -29,7 +29,6 @@
+ 
+ class LayoutManager : public QObject
+ {
+-	Q_OBJECT
+ public:
+ 	LayoutManager(RandRScreen *screen, QGraphicsScene *scene);
+ 	~LayoutManager();
+@@ -43,6 +42,11 @@
+ private:
+ 	RandRScreen *m_screen;
+ 	QGraphicsScene *m_scene;
++
++public:
++
++	Q_OBJECT
++
+ };
+ 
+ #endif // HAS_RANDR_1_2
+--- a/kcontrol/randr/randr.desktop
++++ b/kcontrol/randr/randr.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell randr
++Exec=kcmshell4 randr
+ Icon=preferences-desktop-display-randr
+ Type=Service
+ ServiceTypes=KCModule
+@@ -88,7 +88,7 @@
+ Comment[el]=Αλλαγή μεγέθους και Περιστροφή της οθόνης σας
+ Comment[eo]=Grandigu kaj turnu viajn ekranblokon
+ Comment[es]=Ajustar el tamaño y rotar la pantalla
+-Comment[et]=Oma vaate suuruse muutmine ja pööramine
++Comment[et]=Oma kuva suuruse muutmine ja pööramine
+ Comment[eu]=Aldatu tamaina eta biratu zure pantaila
+ Comment[fa]=تغییر اندازه و چرخش صفحه نمایش شما
+ Comment[fi]=Resoluution muuttaminen ja ruudun kääntäminen
+@@ -103,7 +103,7 @@
+ Comment[ja]=ディスプレイのリサイズと回転
+ Comment[ka]=ეკრანის ზომის და ორიენტაციის შეცვლა
+ Comment[kk]=Дисплейдің өлшемін және бағытын өзгерту
+-Comment[km]=ប្ដូរ​ទំហំ និង​​បង្វិល​ការ​បង្ហាញ​របស់​អ្នក
++Comment[km]=ផ្លាស់ប្ដូរ​​ទំហំ និង​​បង្វិល​ការ​បង្ហាញ​របស់​អ្នក
+ Comment[ko]=디스플레이의 크기와 방향 조정
+ Comment[lt]=Keisti ekrano dydį ir orientaciją
+ Comment[lv]=Maina izmēru un rotē Jūsu ekrānu
+@@ -164,7 +164,7 @@
+ Keywords[is]=resize,rotate,display,color,depth,size,horizontal,vertical,stækka,minnka,snúa
+ Keywords[it]=ridimensiona,ruota,schermo,colori,profondità di colore,dimensione,orizzontale,verticale
+ Keywords[ja]=リサイズ,回転,ディスプレイ,色,深度,サイズ,水平,垂直
+-Keywords[km]=ផ្លាស់ប្ដូរ​ទំហំ,បង្វិល,ការ​បង្ហាញ,ពណ៌,ជម្រៅ,ទំហំ,ផ្ដេក,បញ្ឈរ
++Keywords[km]=ផ្លាស់ប្ដូរ​ទំហំ បង្វិល ការ​បង្ហាញ ពណ៌ ជម្រៅ ទំហំ ផ្ដេក បញ្ឈរ
+ Keywords[ko]=크기 조정,회전,색,깊이,크기,수평,수직
+ Keywords[lt]=resize,rotate,display,color,depth,size,horizontal,vertical,keisti dydį,pasukti,sukti,ekranas,spalva,gylis,dydis,horizontalus,vertikalus
+ Keywords[lv]=mainīt izmēru,rotēt,ekrāns,krāsa,dziļums,izmērs,horizontāls,vertikāls
+--- a/kcontrol/smserver/kcmsmserver.cpp
++++ b/kcontrol/smserver/kcmsmserver.cpp
+@@ -64,7 +64,7 @@
+ 
+ void SMServerConfig::load()
+ {
+-  KConfigGroup c(KSharedConfig::openConfig("ksmserverrc", KConfig::CascadeConfig), "General");
++  KConfigGroup c(KSharedConfig::openConfig("ksmserverrc", KConfig::NoGlobals), "General");
+   dialog->confirmLogoutCheck->setChecked(c.readEntry("confirmLogout", true));
+   bool en = c.readEntry("offerShutdown", true);
+   dialog->offerShutdownCheck->setChecked(en);
+@@ -96,7 +96,7 @@
+ 
+ void SMServerConfig::save()
+ {
+-  KConfig *c = new KConfig("ksmserverrc", KConfig::CascadeConfig);
++  KConfig *c = new KConfig("ksmserverrc", KConfig::NoGlobals);
+   KConfigGroup group = c->group("General");
+   group.writeEntry( "confirmLogout", dialog->confirmLogoutCheck->isChecked());
+   group.writeEntry( "offerShutdown", dialog->offerShutdownCheck->isChecked());
+--- a/kcontrol/smserver/kcmsmserver.desktop
++++ b/kcontrol/smserver/kcmsmserver.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kcmsmserver
++Exec=kcmshell4 kcmsmserver
+ Icon=preferences-system-session
+ Type=Service
+ ServiceTypes=KCModule
+@@ -168,7 +168,7 @@
+ Keywords[is]=ksmserver,seta,stimpla út,innskráning,staðfesting,vista,endurheimta
+ Keywords[it]=ksmserver,sessione,uscita,conferma,salva,ripristina
+ Keywords[ja]=ksmserver,セッション,ログアウト,確認,保存,復旧
+-Keywords[km]=ksmserver,សម័យ,ចេញ,ការ​អះអាង,រក្សា​ទុក,ស្ដារ
++Keywords[km]=ksmserver សម័យ ចេញ ការ​អះអាង រក្សា​ទុក ស្ដារ
+ Keywords[ko]=ksmserver,세션,로그아웃,확인,저장,복원
+ Keywords[lt]=ksmserver,sesija,išsiregistravimas,patvirtinimas,išsaugoti,atstatyti
+ Keywords[lv]=ksmserveris,sesija,atteikšanās,apstiprinājums,saglabāt,atjaunot
+--- a/kcontrol/smserver/CMakeLists.txt
++++ b/kcontrol/smserver/CMakeLists.txt
+@@ -9,7 +9,7 @@
+ kde4_add_plugin(kcm_smserver ${kcm_smserver_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_smserver  ${KDE4_KDE3SUPPORT_LIBS} )
++target_link_libraries(kcm_smserver  ${QT_QT3SUPPORT_LIBRARY} ${KDE4_KDEUI_LIBS} )
+ 
+ install(TARGETS kcm_smserver  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/kcontrol/kthememanager/kthememanager.desktop
++++ b/kcontrol/kthememanager/kthememanager.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kthememanager
++Exec=kcmshell4 kthememanager
+ Icon=preferences-desktop-theme-manager
+ Type=Service
+ ServiceTypes=KCModule
+@@ -163,7 +163,7 @@
+ Keywords[hu]=témák,megjelenés
+ Keywords[it]=temi,aspetto
+ Keywords[ja]=テーマ,look and feel,外観,ルックアンドフィール
+-Keywords[km]=ស្បែក,រូបរាង និង​មុខងារ
++Keywords[km]=ស្បែក រូូបរាង និង​មុខងារ
+ Keywords[ko]=테마,모습과 느낌
+ Keywords[lt]=themes,look and feel,temos,išvaizda ir jausena
+ Keywords[lv]=tēmas,izskats un sajūtas
+--- a/kcontrol/kthememanager/kthememanager.cpp
++++ b/kcontrol/kthememanager/kthememanager.cpp
+@@ -136,7 +136,7 @@
+     listThemes();
+ 
+     // Load the current theme name
+-    KConfig _conf("kcmthememanagerrc", KConfig::CascadeConfig);
++    KConfig _conf("kcmthememanagerrc", KConfig::NoGlobals);
+     KConfigGroup conf(&_conf, "General" );
+     QString themeName = conf.readEntry( "CurrentTheme" );
+     Q3ListViewItem * cur =  dlg->lvThemes->findItem( themeName, 0 );
+@@ -166,7 +166,7 @@
+         m_theme->apply();
+ 
+         // Save the current theme name
+-        KConfig _conf("kcmthememanagerrc", KConfig::CascadeConfig);
++        KConfig _conf("kcmthememanagerrc", KConfig::NoGlobals);
+         KConfigGroup conf(&_conf, "General" );
+         conf.writeEntry( "CurrentTheme", themeName );
+         conf.sync();
+--- a/kcontrol/kthememanager/newthemewidget.ui
++++ b/kcontrol/kthememanager/newthemewidget.ui
+@@ -94,7 +94,7 @@
+         </widget>
+       </item>
+       <item row="5" column="1" >
+-        <widget class="Q3TextEdit" name="teComment" />
++        <widget class="QTextEdit" name="teComment" />
+       </item>
+       <item row="4" column="1" >
+         <widget class="QLineEdit" name="leVersion" />
+--- a/kcontrol/kthememanager/ktheme.cpp
++++ b/kcontrol/kthememanager/ktheme.cpp
+@@ -144,34 +144,34 @@
+         QDomElement desktopElem = m_dom.createElement( "desktop" );
+         desktopElem.setAttribute( "number", i );
+         desktopElem.setAttribute( "common", common );
+-
+-        desktopConf.changeGroup( "Desktop" + QString::number( i ) );
++        
++        KConfigGroup group(&_desktopConf,"Desktop" + QString::number( i ));
+ 
+         QDomElement modeElem = m_dom.createElement( "mode" );
+-        modeElem.setAttribute( "id", desktopConf.readEntry( "BackgroundMode", "Flat" ) );
++        modeElem.setAttribute( "id", group.readEntry( "BackgroundMode", "Flat" ) );
+         desktopElem.appendChild( modeElem );
+ 
+         QDomElement c1Elem = m_dom.createElement( "color1" );
+-        c1Elem.setAttribute( "rgb", desktopConf.readEntry( "Color1",QColor() ).name() );
++        c1Elem.setAttribute( "rgb", group.readEntry( "Color1",QColor() ).name() );
+         desktopElem.appendChild( c1Elem );
+ 
+         QDomElement c2Elem = m_dom.createElement( "color2" );
+-        c2Elem.setAttribute( "rgb", desktopConf.readEntry( "Color2",QColor() ).name() );
++        c2Elem.setAttribute( "rgb", group.readEntry( "Color2",QColor() ).name() );
+         desktopElem.appendChild( c2Elem );
+ 
+         QDomElement blendElem = m_dom.createElement( "blending" );
+-        blendElem.setAttribute( "mode", desktopConf.readEntry( "BlendMode", QString( "NoBlending" ) ) );
+-        blendElem.setAttribute( "balance", desktopConf.readEntry( "BlendBalance", QString::number( 100 ) ) );
+-        blendElem.setAttribute( "reverse", desktopConf.readEntry( "ReverseBlending", false ) );
++        blendElem.setAttribute( "mode", group.readEntry( "BlendMode", QString( "NoBlending" ) ) );
++        blendElem.setAttribute( "balance", group.readEntry( "BlendBalance", QString::number( 100 ) ) );
++        blendElem.setAttribute( "reverse", group.readEntry( "ReverseBlending", false ) );
+         desktopElem.appendChild( blendElem );
+ 
+         QDomElement patElem = m_dom.createElement( "pattern" );
+-        patElem.setAttribute( "name", desktopConf.readEntry( "Pattern" ) );
++        patElem.setAttribute( "name", group.readEntry( "Pattern" ) );
+         desktopElem.appendChild( patElem );
+ 
+         QDomElement wallElem = m_dom.createElement( "wallpaper" );
+-        wallElem.setAttribute( "url", processFilePath( "desktop", desktopConf.readPathEntry( "Wallpaper" ) ) );
+-        wallElem.setAttribute( "mode", desktopConf.readEntry( "WallpaperMode" ) );
++        wallElem.setAttribute( "url", processFilePath( "desktop", group.readPathEntry( "Wallpaper", QString() ) ) );
++        wallElem.setAttribute( "mode", group.readEntry( "WallpaperMode" ) );
+         desktopElem.appendChild( wallElem );
+ 
+         // TODO handle multi wallpapers (aka slideshow)
+@@ -183,9 +183,9 @@
+     }
+ 
+     // 11. Screensaver
+-    desktopConf.changeGroup( "ScreenSaver" );
++    KConfigGroup saver(&_desktopConf,"ScreenSaver" );
+     QDomElement saverElem = m_dom.createElement( "screensaver" );
+-    saverElem.setAttribute( "name", desktopConf.readEntry( "Saver" ) );
++    saverElem.setAttribute( "name", saver.readEntry( "Saver" ) );
+     m_root.appendChild( saverElem );
+ 
+     // 3. Icons
+@@ -278,7 +278,7 @@
+     KConfigGroup konqConf(&_konqConf, "Settings" );
+     QDomElement konqElem = m_dom.createElement( "konqueror" );
+     QDomElement konqWallElem = m_dom.createElement( "wallpaper" );
+-    QString bgImagePath = konqConf.readPathEntry( "BgImage" );
++    QString bgImagePath = konqConf.readPathEntry( "BgImage", QString() );
+     konqWallElem.setAttribute( "url", processFilePath( "konqueror", bgImagePath ) );
+     konqElem.appendChild( konqWallElem );
+     QDomElement konqBgColorElem = m_dom.createElement( "bgcolor" );
+@@ -295,7 +295,7 @@
+     if ( kickerConf.readEntry( "UseBackgroundTheme" , false) )
+     {
+         QDomElement backElem = m_dom.createElement( "background" );
+-        QString kbgPath = kickerConf.readPathEntry( "BackgroundTheme" );
++        QString kbgPath = kickerConf.readPathEntry( "BackgroundTheme", QString() );
+         backElem.setAttribute( "url", processFilePath( "panel", kbgPath ) );
+         backElem.setAttribute( "colorize", kickerConf.readEntry( "ColorizeBackground" , false) );
+         panelElem.appendChild( backElem );
+@@ -347,8 +347,8 @@
+         QString value;
+ 
+         if ( group == "FMSettings" ) {
+-            desktopConf.changeGroup( group );
+-            value = desktopConf.readEntry( key, QString() );
++            KConfigGroup grp(&_desktopConf,group );
++            value = grp.readEntry( key, QString() );
+         }
+         else {
+             value = globalConf->group(group).readEntry( key, QString() );
+@@ -411,19 +411,19 @@
+             desktopConf.writeEntry( "CommonDesktop", common );
+             desktopConf.writeEntry( "DeskNum", desktopElem.attribute( "number", "0" ).toUInt() );
+ 
+-            desktopConf.changeGroup( QString( "Desktop%1" ).arg( i ) );
+-            desktopConf.writeEntry( "BackgroundMode", getProperty( desktopElem, "mode", "id" ) );
+-            desktopConf.writeEntry( "Color1", QColor( getProperty( desktopElem, "color1", "rgb" ) ) );
+-            desktopConf.writeEntry( "Color2", QColor( getProperty( desktopElem, "color2", "rgb" ) ) );
+-            desktopConf.writeEntry( "BlendMode", getProperty( desktopElem, "blending", "mode" ) );
+-            desktopConf.writeEntry( "BlendBalance", getProperty( desktopElem, "blending", "balance" ) );
+-            desktopConf.writeEntry( "ReverseBlending",
++            KConfigGroup grp(&_desktopConf, QString( "Desktop%1" ).arg( i ) );
++            grp.writeEntry( "BackgroundMode", getProperty( desktopElem, "mode", "id" ) );
++            grp.writeEntry( "Color1", QColor( getProperty( desktopElem, "color1", "rgb" ) ) );
++            grp.writeEntry( "Color2", QColor( getProperty( desktopElem, "color2", "rgb" ) ) );
++            grp.writeEntry( "BlendMode", getProperty( desktopElem, "blending", "mode" ) );
++            grp.writeEntry( "BlendBalance", getProperty( desktopElem, "blending", "balance" ) );
++            grp.writeEntry( "ReverseBlending",
+                                     static_cast<bool>( getProperty( desktopElem, "blending", "reverse" ).toUInt() ) );
+-            desktopConf.writeEntry( "Pattern", getProperty( desktopElem, "pattern", "name" ) );
+-            desktopConf.writeEntry( "Wallpaper",
++            grp.writeEntry( "Pattern", getProperty( desktopElem, "pattern", "name" ) );
++            grp.writeEntry( "Wallpaper",
+                                     unprocessFilePath( QLatin1String("desktop"),
+                                                        getProperty( desktopElem, "wallpaper", "url" ) ) );
+-            desktopConf.writeEntry( "WallpaperMode", getProperty( desktopElem, "wallpaper", "mode" ) );
++            grp.writeEntry( "WallpaperMode", getProperty( desktopElem, "wallpaper", "mode" ) );
+ 
+             if ( common )
+                 break;          // stop here
+@@ -435,8 +435,8 @@
+ 
+     if ( !saverElem.isNull() )
+     {
+-        desktopConf.changeGroup( "ScreenSaver" );
+-        desktopConf.writeEntry( "Saver", saverElem.attribute( "name" ) );
++        KConfigGroup grp(&_desktopConf,"ScreenSaver" );
++        grp.writeEntry( "Saver", saverElem.attribute( "name" ) );
+     }
+ 
+     desktopConf.sync();         // TODO sync and signal only if <desktop> elem present
+@@ -459,15 +459,15 @@
+             QDomElement iconSubElem = iconList.item( i ).toElement();
+             QString object = iconSubElem.attribute( "object" );
+             if ( object == "desktop" )
+-                iconConf.changeGroup( "DesktopIcons" );
++                iconConf=KConfigGroup(KGlobal::config(), "DesktopIcons" );
+             else if ( object == "mainToolbar" )
+-                iconConf.changeGroup( "MainToolbarIcons" );
++                iconConf=KConfigGroup(KGlobal::config(),"MainToolbarIcons" );
+             else if ( object == "panel" )
+-                iconConf.changeGroup( "PanelIcons" );
++                iconConf=KConfigGroup(KGlobal::config(),"PanelIcons" );
+             else if ( object == "small" )
+-                iconConf.changeGroup( "SmallIcons" );
++                iconConf=KConfigGroup(KGlobal::config(),"SmallIcons" );
+             else if ( object == "toolbar" )
+-                iconConf.changeGroup( "ToolbarIcons" );
++                iconConf=KConfigGroup(KGlobal::config(),"ToolbarIcons" );
+ 
+             QString iconName = iconSubElem.tagName();
+             if ( iconName.contains( "Color" ) )
+@@ -503,13 +503,13 @@
+ 
+             if ( object == "global" )
+             {
+-                soundGroup.changeGroup(eventElem.attribute("name"));
+-                soundGroup.writeEntry( "soundfile", unprocessFilePath( QLatin1String("sounds"), eventElem.attribute( "url" ) ) );
+-                soundGroup.writeEntry( "presentation", soundGroup.readEntry( "presentation" ,0) | 1 );
++                KConfigGroup grp(KSharedConfig::openConfig("knotify.eventsrc"),eventElem.attribute("name"));
++                grp.writeEntry( "soundfile", unprocessFilePath( QLatin1String("sounds"), eventElem.attribute( "url" ) ) );
++                grp.writeEntry( "presentation", soundGroup.readEntry( "presentation" ,0) | 1 );
+             }
+             else if ( object == "kwin" )
+             {
+-                kwinSoundGroup.changeGroup(eventElem.attribute("name"));
++                kwinSoundGroup=KConfigGroup(KSharedConfig::openConfig("kwin.eventsrc"),eventElem.attribute("name"));
+                 kwinSoundGroup.writeEntry( "soundfile", unprocessFilePath( QLatin1String("sounds"), eventElem.attribute( "url" ) ) );
+                 kwinSoundGroup.writeEntry( "presentation", soundGroup.readEntry( "presentation",0 ) | 1 );
+             }
+@@ -541,9 +541,9 @@
+             QDomElement colorElem = colorList.item( i ).toElement();
+             QString object = colorElem.attribute( "object" );
+             if ( object == "global" )
+-                colorGroup.changeGroup("General");
++                colorGroup=KConfigGroup(KGlobal::config(),"General");
+             else if ( object == "kwin" )
+-                colorGroup.changeGroup("WM");
++                colorGroup=KConfigGroup(KGlobal::config(),"WM");
+ 
+             QString colName = colorElem.tagName();
+             QColor curColor = QColor( colorElem.attribute( "rgb" ) );
+@@ -551,7 +551,7 @@
+             colorScheme.writeEntry( colName, curColor ); // thememgr.kcsrc
+         }
+ 
+-        colorGroup.changeGroup("KDE");
++        colorGroup=KConfigGroup(KGlobal::config(),"KDE");
+         colorGroup.writeEntry( "colorScheme", "thememgr.kcsrc", KConfig::Persistent|KConfig::Global);
+         colorGroup.writeEntry( "contrast", colorsElem.attribute( "contrast", "7" ), KConfig::Persistent|KConfig::Global);
+         colorScheme.writeEntry( "contrast", colorsElem.attribute( "contrast", "7" ) );
+@@ -785,7 +785,7 @@
+         KConfigGroup group(cfg, *it);
+         if ( group.exists() )
+         {
+-            QString soundURL = group.readPathEntry( "soundfile" );
++            QString soundURL = group.readPathEntry( "soundfile", QString() );
+             int pres = group.readEntry( "presentation", 0 );
+             if ( !soundURL.isEmpty() && ( ( pres & 1 ) == 1 ) )
+             {
+--- a/kcontrol/kthememanager/kthemedlg.ui.h
++++ b/kcontrol/kthememanager/kthemedlg.ui.h
+@@ -19,32 +19,32 @@
+ 
+ void KThemeDlg::startBackground()
+ {
+-    KRun::runCommand("kcmshell background", this);
++    KRun::runCommand("kcmshell4 background", this);
+ }
+ 
+ void KThemeDlg::startColors()
+ {
+-    KRun::runCommand("kcmshell colors", this);
++    KRun::runCommand("kcmshell4 colors", this);
+ }
+ 
+ void KThemeDlg::startStyle()
+ {
+-    KRun::runCommand("kcmshell style", this);
++    KRun::runCommand("kcmshell4 style", this);
+ }
+ 
+ void KThemeDlg::startIcons()
+ {
+-    KRun::runCommand("kcmshell icons", this);
++    KRun::runCommand("kcmshell4 icons", this);
+ }
+ 
+ void KThemeDlg::startFonts()
+ {
+-   KRun::runCommand("kcmshell fonts", this);
++   KRun::runCommand("kcmshell4 fonts", this);
+ }
+ 
+ void KThemeDlg::startSaver()
+ {
+-    KRun::runCommand("kcmshell screensaver", this);
++    KRun::runCommand("kcmshell4 screensaver", this);
+ }
+ 
+ #endif // KTHEMEDLG_UI_H
+--- a/kcontrol/launch/kcmlaunch.cpp
++++ b/kcontrol/launch/kcmlaunch.cpp
+@@ -91,7 +91,7 @@
+     lbl_cursorTimeout->setText( i18n( "&Startup indication timeout:" ) );
+     GroupBox1Layout->addWidget( lbl_cursorTimeout, 2, 0 );
+     sb_cursorTimeout = new KIntNumInput( GroupBox1);
+-    sb_cursorTimeout->setRange( 0, 99, 1, true );
++    sb_cursorTimeout->setRange( 0, 99 );
+     sb_cursorTimeout->setSuffix( i18n(" sec") );
+     GroupBox1Layout->addWidget( sb_cursorTimeout, 2, 1 );
+     lbl_cursorTimeout->setBuddy( sb_cursorTimeout );
+@@ -131,7 +131,7 @@
+     lbl_taskbarTimeout->setText( i18n( "Start&up indication timeout:" ) );
+     GroupBox2Layout->addWidget( lbl_taskbarTimeout, 1, 0 );
+     sb_taskbarTimeout = new KIntNumInput( GroupBox2);
+-    sb_taskbarTimeout->setRange( 0, 99, 1, true );
++    sb_taskbarTimeout->setRange( 0, 99 );
+     sb_taskbarTimeout->setSuffix( i18n(" sec") );
+     GroupBox2Layout->addWidget( sb_taskbarTimeout, 1, 1 );
+     lbl_taskbarTimeout->setBuddy( sb_taskbarTimeout );
+@@ -164,7 +164,7 @@
+   void
+ LaunchConfig::load()
+ {
+-  KConfig conf("klaunchrc", KConfig::CascadeConfig);
++  KConfig conf("klaunchrc", KConfig::NoGlobals);
+   KConfigGroup c = conf.group("FeedbackStyle");
+ 
+   bool busyCursor =
+@@ -200,7 +200,7 @@
+   void
+ LaunchConfig::save()
+ {
+-  KConfig conf("klaunchrc", KConfig::CascadeConfig);
++  KConfig conf("klaunchrc", KConfig::NoGlobals);
+   KConfigGroup  c = conf.group("FeedbackStyle");
+ 
+   c.writeEntry("BusyCursor",   cb_busyCursor->currentIndex() != 0);
+@@ -244,7 +244,7 @@
+   void
+ LaunchConfig::checkChanged()
+ {
+-  KConfig conf("klaunchrc", KConfig::CascadeConfig);
++  KConfig conf("klaunchrc", KConfig::NoGlobals);
+   KConfigGroup  c = conf.group("FeedbackStyle");
+ 
+   bool savedBusyCursor =
+--- a/kcontrol/launch/kcmlaunch.desktop
++++ b/kcontrol/launch/kcmlaunch.desktop
+@@ -4,7 +4,7 @@
+ Type=Service
+ ServiceTypes=KCModule
+ DocPath=kcontrol/kcmlaunch/index.html
+-Exec=kcmshell kcmlaunch
++Exec=kcmshell4 kcmlaunch
+ 
+ X-KDE-Library=kcm_launch
+ X-KDE-ParentApp=kcontrol
+@@ -160,7 +160,7 @@
+ Keywords[is]=forrit,start,keyrsla,upptekin,bendill,upplýsingar,mús,pointer,rotating,spinning,disk,startup,program,report
+ Keywords[it]=applicazione,avvio,lancio,occupato,cursore,feedback,segnalazione,mouse,puntatore,rotazione,disco,programma,segnale
+ Keywords[ja]=アプリケーション,開始,起動,ビジー,カーソル,フィードバック,マウス,ポインタ,回転,スピン,開始,プログラム,レポート
+-Keywords[km]=កម្មវិធី,ចាប់ផ្ដើម,ដំណើរ​ការ,រវល់,ទស្សន៍​ទ្រនិច,មតិ​អ្នកប្រើ,កណ្ដុរ,ព្រួញ​កណ្តុរ,​បង្វិល,បង្កើន​បន្ថយ, ថាស,ចាប់ផ្ដើម,កម្មវិធី,របាយការណ៍
++Keywords[km]=កម្មវិធី ចាប់ផ្ដើម ដំណើរ​ការ រវល់ ទស្សន៍​ទ្រនិច មតិ​អ្នកប្រើ កណ្ដុរ ព្រួញ​កណ្តុរ ​បង្វិល បង្កើន​បន្ថយ  ថាស ចាប់ផ្ដើម កម្មវិធី របាយការណ៍
+ Keywords[ko]=프로그램,시작,실행,바쁨,커서,피드백,마우스,포인터,회전,디스크,시작
+ Keywords[lt]=application,start,launch,busy,cursor,feedback,mouse,pointer,rotating,spinning,disk,startup,program,report, programa,startas,paleisti,užimtas,kursorius,atgalinis ryšys, pelė, sukimasis, diskas, paleidimas, raportas
+ Keywords[lv]=aplikācija,startēt,palaist,aizņemts,kursors,atbilde,pele,bultiņa,rotēšana,sagriešanās,disks,startēšana,programma,reports
+--- a/kcontrol/kdm/kdm.desktop
++++ b/kcontrol/kdm/kdm.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kdm
++Exec=kcmshell4 kdm
+ Icon=preferences-desktop-login
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kcontrol/keys/shortcuts.cpp
++++ b/kcontrol/keys/shortcuts.cpp
+@@ -120,10 +120,6 @@
+ #define NOSLOTS
+ //#define KICKER_ALL_BINDINGS
+ #include "../../kwin/kwinbindings.cpp"
+-//#include "../../kicker/kicker/core/kickerbindings.cpp"
+-//#include "../../kicker/taskbar/taskbarbindings.cpp"
+-//#include "../../kdesktop/kdesktopbindings.cpp"
+-#include "../../klipper/klipperbindings.cpp"
+ #include "../kxkb/kxkbbindings.cpp"
+ 
+ 	kDebug(125) << "B-----------";
+--- a/kcontrol/keys/keys.desktop
++++ b/kcontrol/keys/keys.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell keys
++Exec=kcmshell4 keys
+ Icon=preferences-desktop-keyboard-shortcut
+ Type=Service
+ ServiceTypes=KCModule,KCModuleInit
+@@ -168,7 +168,7 @@
+ Keywords[is]=Lyklar,Hnappar,Flýtihnappar,Flýtilyklar,Lyklabindingar
+ Keywords[it]=tasti,associazioni globali di tasti,schema di tasti,associazioni di tasti,scorciatoie,scorciatoie delle applicazioni
+ Keywords[ja]=キー,グローバルキー,キーバインド,Key sheme,キーバインド,ショートカット,アプリケーションショートカット
+-Keywords[km]=គ្រាប់ចុច,ការ​ចង​គ្រាប់ចុច​សកល,គ្រោងការណ៍​គ្រាប់ចុច,ការ​ចង​គ្រាប់ចុច,ផ្លូវកាត់,ផ្លូវកាត់​កម្មវិធី
++Keywords[km]=គ្រាប់ចុច ការ​ចង​គ្រាប់ចុច​សកល គ្រោងការណ៍​គ្រាប់ចុច ការ​ចង​គ្រាប់ចុច ផ្លូវកាត់ ផ្លូវកាត់​កម្មវិធី
+ Keywords[ko]=키,전역 키 바인딩,키 배열,키 바인딩,단축키,프로그램 단축키
+ Keywords[lt]=Keys,klavišai,Global key bindings,klavišų sietis,Key scheme,klavišų schema,klavišų išdėstymas,Key bindings,shortcuts,spartieji klavišai,application shortcuts,programų spartieji klavišai
+ Keywords[lv]=Taustiņi,Globālās taustiņu sasaistes,Taustiņu shēma,Taustiņu sasaistes,īsinājumikonas,aplikāciju īsinājumikonas
+--- a/kcontrol/keys/keyconfig.cpp
++++ b/kcontrol/keys/keyconfig.cpp
+@@ -62,9 +62,6 @@
+ #define NOSLOTS
+ #define KShortcuts KAccelShortcuts
+ #include "../../kwin/kwinbindings.cpp"
+-#include "../../kicker/kicker/core/kickerbindings.cpp"
+-#include "../../kicker/taskbar/taskbarbindings.cpp"
+-#include "../../klipper/klipperbindings.cpp"
+ #include "../kxkb/kxkbbindings.cpp"
+ #undef KShortcuts
+     KeyScheme = "Global Key Scheme";
+@@ -114,24 +111,24 @@
+   connect( sList, SIGNAL( highlighted( int ) ),
+            SLOT( slotPreviewScheme( int ) ) );
+ 
+-  QLabel *label = new QLabel( i18n("&Key Scheme"), this );
++  QLabel *label = new QLabel( i18nc("@label","&Key Scheme"), this );
+   label->setBuddy( sList );
+ 
+-  wtstr = i18n("Here you can see a list of the existing key binding schemes with 'Current scheme'"
++  wtstr = i18nc("@info:whatsthis","Here you can see a list of the existing key binding schemes with 'Current scheme'"
+     " referring to the settings you are using right now. Select a scheme to use, remove or"
+     " change it.");
+   QWhatsThis::add( label, wtstr );
+   QWhatsThis::add( sList, wtstr );
+ 
+-  addBt = new QPushButton(  i18n("&Save Scheme..."), this );
++  addBt = new QPushButton(  i18nc("@action:button","&Save Scheme..."), this );
+   connect( addBt, SIGNAL( clicked() ), SLOT( slotAdd() ) );
+-  QWhatsThis::add(addBt, i18n("Click here to add a new key bindings scheme. You will be prompted for a name."));
++  QWhatsThis::add(addBt, i18nc("@info:whatsthis","Click here to add a new key bindings scheme. You will be prompted for a name."));
+ 
+-  removeBt = new QPushButton(  i18n("&Remove Scheme"), this );
++  removeBt = new QPushButton(  i18nc("@action:button","&Remove Scheme"), this );
+   removeBt->setEnabled(false);
+   connect( removeBt, SIGNAL( clicked() ), SLOT( slotRemove() ) );
+-  QWhatsThis::add( removeBt, i18n("Click here to remove the selected key bindings scheme. You can not"
+-    " remove the standard system wide schemes, 'Current scheme' and 'KDE default'.") );
++  QWhatsThis::add( removeBt, i18nc("@info:whatsthis","Click here to remove the selected key bindings scheme. You cannot"
++    " remove the standard system-wide schemes 'Current scheme' and 'KDE default'.") );
+ 
+   // Hack to get this setting only displayed once.  It belongs in main.cpp instead.
+   // That move will take a lot of UI redesigning, though, so i'll do it once CVS
+@@ -139,12 +136,12 @@
+   /* Needed to remove because this depended upon non-BC changes in KeyEntry.*/
+   // If this is the "Global Keys" section of the KDE Control Center:
+   if( isGlobal && !bSeriesOnly ) {
+-	preferMetaBt = new QCheckBox( i18n("Prefer 4-modifier defaults"), this );
++	preferMetaBt = new QCheckBox( i18nc("@option:check","Prefer 4-modifier defaults"), this );
+ 	if( !KKeySequence::keyboardHasMetaKey() )
+ 		preferMetaBt->setEnabled( false );
+ 	preferMetaBt->setChecked( KKeySequence::useFourModifierKeys() );
+ 	connect( preferMetaBt, SIGNAL(clicked()), SLOT(slotPreferMeta()) );
+-	QWhatsThis::add( preferMetaBt, i18n("If your keyboard has a Meta key, but you would "
++	QWhatsThis::add( preferMetaBt, i18nc("@info:whatsthis","If your keyboard has a Meta key, but you would "
+ 		"like KDE to prefer the 3-modifier configuration defaults, then this option "
+ 		"should be unchecked.") );
+   } else
+@@ -280,7 +277,7 @@
+   //  kc->allDefault( true );
+   else {
+     KConfig* config = 0;
+-    if( index == 0 )	config = new KConfig( "kdeglobals", KConfig::CascadeConfig );
++    if( index == 0 )	config = new KConfig( "kdeglobals", KConfig::NoGlobals );
+     //else		config = new KConfig( *sFileList->at( index ), KConfig::SimpleConfig );
+ 
+     actions.readActions( (index == 0) ? KeySet : KeyScheme, config );
+@@ -475,10 +472,7 @@
+ // this should match the included files above
+ #define NOSLOTS
+ #define KShortcuts KAccelShortcuts
+-#include "../../../workspace/klipper/klipperbindings.cpp"
+ #include "../../kwin/kwinbindings.cpp"
+-#include "../../kicker/kicker/core/kickerbindings.cpp"
+-#include "../../kicker/taskbar/taskbarbindings.cpp"
+ #include "../kxkb/kxkbbindings.cpp"
+ #undef KShortcuts
+ 
+--- a/kcontrol/keys/mac4.kksrc
++++ b/kcontrol/keys/mac4.kksrc
+@@ -30,7 +30,7 @@
+ Name[ja]=Macintosh スキーマ
+ Name[ka]=Mac სქემა
+ Name[kk]=Mac сұлбасы
+-Name[km]=គ្រោងការណ៍ Mac
++Name[km]=គ្រោងការណ៍​មេក
+ Name[ko]=Mac 배열
+ Name[lt]=Mac schema
+ Name[mk]=Mac-шема
+--- a/kcontrol/keys/kde4.kksrc
++++ b/kcontrol/keys/kde4.kksrc
+@@ -26,7 +26,7 @@
+ Name[it]=Predefinito di KDE per 4 tasti modificatori
+ Name[ja]=KDE 標準 (4 モディファイアキー)
+ Name[kk]=4 түрлендіру перне үшін KDE-нің әдетті баптауы
+-Name[km]=លំនាំ​ដើម​របស់ KDE ​សម្រាប់​​គ្រាប់​ចុច​កែប្រែ​ ៤
++Name[km]=លំនាំដើម​របស់ KDE ​សម្រាប់​​គ្រាប់​ចុច​កែប្រែ​ ៤
+ Name[ko]=네 개의 수정자 키를 사용하는 KDE 기본값
+ Name[lt]=KDE numatytoji 4 klavišams - modifikatoriams
+ Name[mk]=KDE-стандардно за 4 копчиња-модификатори
+--- a/kcontrol/keys/main.cpp
++++ b/kcontrol/keys/main.cpp
+@@ -121,6 +121,12 @@
+ {
+   KDE_EXPORT void kcminit_keys()
+   {
++#ifdef __GNUC__
++#warning TODO Check if this is still needed and redo it
++#endif
++// This is currently disabled - it makes the kdedglobalaccel module think the shortcuts
++// are for kcminit, and it takes the shortcuts away from e.g. Klipper.
++#if 0
+ 	kDebug(125) << "KeyModule::init()\n";
+ 
+ 	kDebug(125) << "KeyModule::init() - Load Included Bindings\n";
+@@ -129,7 +135,7 @@
+ 	QAction* a = 0L;
+ // this should match the included files above
+ #define NOSLOTS
+-#include "../..//klipper/klipperbindings.cpp"
++//#include "../..//klipper/klipperbindings.cpp"
+ #include "../../kwin/kwinbindings.cpp"
+ //#define KICKER_ALL_BINDINGS
+ //#include "../../kicker/kicker/core/kickerbindings.cpp"
+@@ -146,22 +152,17 @@
+ 	    kDebug(125) << "KeyModule::init() - Read Config Bindings\n";
+ 	    // Check for old group,
+ 	    if( KGlobal::config()->hasGroup( "Global Keys" ) ) {
+-#ifdef __GNUC__
+-#warning TODO PORT ME (KGlobalAccel related)
+-#endif
+ //		KGlobalAccel::self()->readSettings();
+ 		KGlobal::config()->deleteGroup( "Global Keys", KConfig::Global);
+ 	    }
+             KGlobal::config()->deleteGroup( "deprecated Global Shortcuts from kcontrol/keys", KConfig::Global);
+ 
+ 	    kDebug(125) << "KeyModule::init() - Write Config Bindings\n";
+-#ifdef __GNUC__
+-#warning TODO PORT ME (KGlobalAccel related)
+-#endif
+         //KGlobalAccel::self()->writeSettings();
+             group.writeEntry( "Defaults timestamp", __DATE__ __TIME__, KConfig::Normal|KConfig::Global);
+         }
+ 	delete actionCollection;
++#endif
+   }
+ }
+ 
+--- a/kcontrol/CMakeLists.txt
++++ b/kcontrol/CMakeLists.txt
+@@ -11,9 +11,11 @@
+    add_subdirectory( randr )
+ endif(X11_Xrandr_FOUND )
+ 
+-if(X11_Xaccess_FOUND)
++if(X11_Xkb_FOUND)
+     add_subdirectory( kxkb )
+-endif(X11_Xaccess_FOUND)
++    add_subdirectory( keyboard )
++endif(X11_Xkb_FOUND)
++
+ add_subdirectory( bell )
+ add_subdirectory( background )
+ 
+--- a/kcontrol/bell/bell.cpp
++++ b/kcontrol/bell/bell.cpp
+@@ -20,15 +20,16 @@
+ */
+ 
+ #include <QCheckBox>
+-#include <Qt3Support/Q3GroupBox>
+ #include <QLayout>
+ #include <QPushButton>
+ 
++
+ //Added by qt3to4:
+ #include <QVBoxLayout>
+ #include <QHBoxLayout>
+ #include <QGridLayout>
+ #include <QBoxLayout>
++#include <QGroupBox>
+ 
+ #include <kcmodule.h>
+ #include <kaboutdata.h>
+@@ -63,7 +64,7 @@
+ 
+     XGetKeyboardControl(QX11Info::display(), &kbd);
+ 
+-    KConfig _config( "kcmbellrc", KConfig::CascadeConfig  );
++    KConfig _config( "kcmbellrc", KConfig::NoGlobals  );
+     KConfigGroup config(&_config, "General");
+ 
+     kbdc.bell_percent = config.readEntry("Volume", kbd.bell_percent);
+@@ -83,8 +84,8 @@
+   layout->setSpacing(KDialog::spacingHint());
+ 
+   int row = 0;
+-  Q3GroupBox *box = new Q3GroupBox( i18n("Bell Settings"), this );
+-  box->setColumnLayout( 0, Qt::Horizontal );
++  QGroupBox *box = new QGroupBox(i18n("Bell Settings"), this );
++  new QVBoxLayout( box );
+   layout->addWidget(box);
+   layout->addStretch();
+   QGridLayout *grid = new QGridLayout();
+@@ -117,7 +118,7 @@
+   m_volume->setWhatsThis( i18n("Here you can customize the volume of the system bell. For further"
+     " customization of the bell, see the \"Accessibility\" control module.") );
+ 
+-  m_pitch = new KIntNumInput(m_volume, 800, box);
++  m_pitch = new KIntNumInput(800, box);
+   m_pitch->setLabel(i18n("&Pitch:"));
+   m_pitch->setRange(20, 2000, 20);
+   m_pitch->setSuffix(i18n(" Hz"));
+@@ -126,7 +127,7 @@
+   m_pitch->setWhatsThis( i18n("Here you can customize the pitch of the system bell. For further"
+     " customization of the bell, see the \"Accessibility\" control module.") );
+ 
+-  m_duration = new KIntNumInput(m_pitch, 100, box);
++  m_duration = new KIntNumInput(100, box);
+   m_duration->setLabel(i18n("&Duration:"));
+   m_duration->setRange(1, 1000, 50);
+   m_duration->setSuffix(i18n(" msec"));
+@@ -171,7 +172,7 @@
+   m_pitch->setValue(kbd.bell_pitch);
+   m_duration->setValue(kbd.bell_duration);
+ 
+-  KConfig _cfg("kdeglobals", KConfig::CascadeConfig);
++  KConfig _cfg("kdeglobals", KConfig::NoGlobals);
+   KConfigGroup cfg(&_cfg, "General");
+   m_useBell->setChecked(cfg.readEntry("UseSystemBell", false));
+   useBell(m_useBell->isChecked());
+@@ -192,7 +193,7 @@
+                          KBBellPercent | KBBellPitch | KBBellDuration,
+                          &kbd);
+ 
+-  KConfig _config("kcmbellrc", KConfig::CascadeConfig);
++  KConfig _config("kcmbellrc", KConfig::NoGlobals);
+   KConfigGroup config(&_config, "General");
+   config.writeEntry("Volume",bellVolume);
+   config.writeEntry("Pitch",bellPitch);
+@@ -200,7 +201,7 @@
+ 
+   config.sync();
+ 
+-  KConfig _cfg("kdeglobals", KConfig::CascadeConfig);
++  KConfig _cfg("kdeglobals", KConfig::NoGlobals);
+   KConfigGroup cfg(&_cfg, "General");
+   cfg.writeEntry("UseSystemBell", m_useBell->isChecked());
+   cfg.sync();
+--- a/kcontrol/bell/bell.desktop
++++ b/kcontrol/bell/bell.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell bell
++Exec=kcmshell4 bell
+ Icon=preferences-desktop-notification-bell
+ Type=Service
+ ServiceTypes=KCModule,KCModuleInit
+--- a/kcontrol/bell/CMakeLists.txt
++++ b/kcontrol/bell/CMakeLists.txt
+@@ -9,7 +9,7 @@
+ kde4_add_plugin(kcm_bell ${kcm_bell_PART_SRCS})
+ 
+ 
+-target_link_libraries(kcm_bell  ${KDE4_KDEUI_LIBS} ${QT_QTGUI_LIBRARY} ${QT_QT3SUPPORT_LIBRARY} ${X11_X11_LIB})
++target_link_libraries(kcm_bell  ${KDE4_KDEUI_LIBS} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB})
+ 
+ install(TARGETS kcm_bell  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/startkde.cmake
++++ b/startkde.cmake
+@@ -74,9 +74,10 @@
+ kcmrandrrc [Screen3]
+ kcmfonts General forceFontDPI 0
+ EOF
+-kstartupconfig
++kstartupconfig4
+ if test $? -ne 0; then
+-    xmessage -geometry 500x100 "Could not start kstartupconfig. Check your installation."
++    xmessage -geometry 500x100 "Could not start kstartupconfig4. Check your installation."
++    exit 1
+ fi
+ . $kdehome/share/config/startupconfig
+ 
+@@ -151,16 +152,17 @@
+ dl=$DESKTOP_LOCKED
+ unset DESKTOP_LOCKED # Don't want it in the environment
+ 
++ksplash_pid=
+ if test -z "$dl"; then
+   # the splashscreen and progress indicator
+   case "$ksplashrc_ksplash_engine" in
+     KSplashX)
+-      ksplashx ${ksplashrc_ksplash_theme}
++      ksplash_pid=`ksplashx ${ksplashrc_ksplash_theme} --pid`
+       ;;
+     None)
+       ;;
+     Simple)
+-      ksplashsimple
++      ksplash_pid=`ksplashsimple --pid`
+       ;;
+     *)
+       ;;
+@@ -264,6 +266,7 @@
+ for resource in tmp cache socket; do
+     if ! "$lnusertemp" $resource >/dev/null; then
+         echo 'startkde: Call to lnusertemp failed (temporary directories full?). Check your installation.'  1>&2
++        test -n "$ksplash_pid" && kill "$ksplash_pid"
+         xmessage -geometry 600x100 "Call to lnusertemp failed (temporary directories full?). Check your installation."
+         exit 1
+     fi
+@@ -274,13 +277,22 @@
+ 
+ echo 'startkde: Starting up...'  1>&2
+ 
+-# Make sure that D-Bus is running, running qdbus will auto-launch it
+-# if it is not
++# Make sure that D-Bus is running
++if test -z "$XDG_DATA_DIRS"; then
++    XDG_DATA_DIRS="`kde4-config --prefix`/share:/usr/share:/usr/local/share"
++    export XDG_DATA_DIRS
++fi
++# D-Bus autolaunch is broken
++if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
++    eval `dbus-launch --sh-syntax --exit-with-session`
++fi
+ if qdbus >/dev/null 2>/dev/null; then
+     : # ok
+ else
+     echo 'startkde: Could not start D-Bus. Check your installation.'  1>&2
++    test -n "$ksplash_pid" && kill "$ksplash_pid"
+     xmessage -geometry 500x100 "Could not start D-Bus. Check your installation."
++    exit 1
+ fi
+ 
+ 
+@@ -319,7 +331,9 @@
+ if test $? -ne 0; then
+   # Startup error
+   echo 'startkde: Could not start kdeinit4. Check your installation.'  1>&2
++  test -n "$ksplash_pid" && kill "$ksplash_pid"
+   xmessage -geometry 500x100 "Could not start kdeinit4. Check your installation."
++  exit 1
+ fi
+ 
+ # If the session should be locked from the start (locked autologin),
+@@ -346,6 +360,7 @@
+ if test $? -eq 255; then
+   # Startup error
+   echo 'startkde: Could not start ksmserver. Check your installation.'  1>&2
++  test -n "$ksplash_pid" && kill "$ksplash_pid"
+   xmessage -geometry 500x100 "Could not start ksmserver. Check your installation."
+ fi
+ 
+@@ -355,6 +370,8 @@
+ done
+ 
+ echo 'startkde: Shutting down...'  1>&2
++# just in case
++test -n "$ksplash_pid" && kill "$ksplash_pid"
+ 
+ # Clean up
+ kdeinit4_shutdown
+--- a/menu/desktop/kde-education.directory
++++ b/menu/desktop/kde-education.directory
+@@ -8,6 +8,7 @@
+ Name[de]=Lernprogramme
+ Name[el]=Εκπαίδευση
+ Name[es]=Educación
++Name[et]=Õpptimine
+ Name[fa]=آموزش
+ Name[ga]=Oideachas
+ Name[he]=חינוך
+--- a/menu/desktop/kde-utilities.directory
++++ b/menu/desktop/kde-utilities.directory
+@@ -15,7 +15,7 @@
+ Name[el]=Εργαλεία
+ Name[eo]=Utilaĵoj
+ Name[es]=Utilidades
+-Name[et]=Utiliidid
++Name[et]=Tööriistad
+ Name[eu]=Tresnak
+ Name[fa]=برنامه‌های سودمند
+ Name[fi]=Apuohjelmat
+@@ -31,7 +31,7 @@
+ Name[ja]=ユーティリティ
+ Name[ka]=ხელსაწყოები
+ Name[kk]=Утилиталары
+-Name[km]=ឧបករណ៍
++Name[km]=ឧបករណ៍​ប្រើ​ប្រាស់
+ Name[ko]=유틸리티
+ Name[lt]=Pagalbininkai
+ Name[lv]=Utilītas
+@@ -80,7 +80,7 @@
+ Comment[el]=Εργαλεία
+ Comment[eo]=Utilaĵoj
+ Comment[es]=Utilidades
+-Comment[et]=Utiliidid
++Comment[et]=Tööriistad
+ Comment[eu]=Tresnak
+ Comment[fa]=برنامه‌های سودمند
+ Comment[fi]=Apuohjelmat
+@@ -96,7 +96,7 @@
+ Comment[ja]=ユーティリティ
+ Comment[ka]=ხელსაწყოები
+ Comment[kk]=Утилиталары
+-Comment[km]=ឧបករណ៍
++Comment[km]=ឧបករណ៍​ប្រើប្រាស់
+ Comment[ko]=유틸리티
+ Comment[lt]=Pagalbininkai
+ Comment[lv]=Utilītas
+--- a/menu/desktop/kde-edu-languages.directory
++++ b/menu/desktop/kde-edu-languages.directory
+@@ -10,6 +10,7 @@
+ Name[de]=Sprachen
+ Name[el]=Γλώσσες
+ Name[es]=Idiomas
++Name[et]=Keeled
+ Name[fa]=زبانها
+ Name[ga]=Teangacha
+ Name[he]=שפות
+--- a/menu/desktop/kde-edu-science.directory
++++ b/menu/desktop/kde-edu-science.directory
+@@ -6,10 +6,12 @@
+ Name[ar]=العلوم
+ Name[be]=Навука
+ Name[bg]=Наука
++Name[br]=Skiantoù
+ Name[csb]=Ùczba
+ Name[de]=Wissenschaft
+ Name[el]=Επιστήμη
+ Name[es]=Ciencia
++Name[et]=Teadus
+ Name[fa]=علم
+ Name[ga]=Eolaíocht
+ Name[he]=מדע
+--- a/menu/desktop/kde-internet.directory
++++ b/menu/desktop/kde-internet.directory
+@@ -17,7 +17,7 @@
+ Name[ja]=インターネット
+ Name[ka]=ინტერნეტი
+ Name[kk]=Интернет
+-Name[km]=អ៊ិនធឺណិត
++Name[km]=អ៊ីនធឺណិត
+ Name[ko]=인터넷
+ Name[lt]=Internetas
+ Name[lv]=Internets
+--- a/menu/desktop/kde-games.directory
++++ b/menu/desktop/kde-games.directory
+@@ -64,7 +64,7 @@
+ Name[wa]=Djeus
+ Name[x-test]=xxGamesxx
+ Name[xh]=Imidlalo
+-Name[zh_CN]=Name=游戏
++Name[zh_CN]=游戏
+ Name[zh_TW]=遊戲
+ Icon=package_games
+ 
+--- a/menu/desktop/kde-development-webdevelopment.directory
++++ b/menu/desktop/kde-development-webdevelopment.directory
+@@ -31,7 +31,7 @@
+ Name[ja]=ウェブ開発
+ Name[ka]=ვებ პროგრამირება
+ Name[kk]=Веб жобалау
+-Name[km]=​អភិវឌ្ឍន៍​បណ្តាញ
++Name[km]=ការ​​អភិវឌ្ឍន៍​បណ្តាញ
+ Name[ko]=웹 개발
+ Name[lt]=Žiniatinklio programavimas
+ Name[mk]=Веб-развој
+@@ -96,7 +96,7 @@
+ Name[ja]=ウェブ開発
+ Name[ka]=ვებ პროგრამირება
+ Name[kk]=Веб жобалау
+-Name[km]=​អភិវឌ្ឍន៍​បណ្តាញ
++Name[km]=ការ​​អភិវឌ្ឍន៍​បណ្តាញ
+ Name[ko]=웹 개발
+ Name[lt]=Žiniatinklio programavimas
+ Name[mk]=Веб-развој
+--- a/menu/desktop/kde-internet-terminal.directory
++++ b/menu/desktop/kde-internet-terminal.directory
+@@ -16,7 +16,7 @@
+ Name[el]=Εφαρμογές τερματικού
+ Name[eo]=Terminal-Aplikaĵoj
+ Name[es]=Aplicaciones de terminal
+-Name[et]=Terminali rakendused
++Name[et]=Terminalirakendused
+ Name[eu]=Terminaleko aplikazioak
+ Name[fa]=کاربردهای پایانه
+ Name[fi]=Päätesovellukset
+--- a/menu/desktop/kde-games-arcade.directory
++++ b/menu/desktop/kde-games-arcade.directory
+@@ -24,7 +24,7 @@
+ Name[is]=Spilasalur
+ Name[ja]=アーケード
+ Name[kk]=Аркад ойындары
+-Name[km]=ធ្វើ​ដំណើរ
++Name[km]=អារខាដ
+ Name[ko]=아케이드
+ Name[lt]=Arkada
+ Name[lv]=Arkāde
+--- a/menu/desktop/kde-edu-tools.directory
++++ b/menu/desktop/kde-edu-tools.directory
+@@ -10,6 +10,7 @@
+ Name[de]=Unterrichts-Anwendungen
+ Name[el]=Εργαλείο διδασκαλίας
+ Name[es]=Herramienta de enseñanza
++Name[et]=Õpperakendused
+ Name[fa]=ابزارهای آموزشی
+ Name[ga]=Uirlisí Múinteoireachta
+ Name[he]=כלי לימוד
+--- a/menu/desktop/kde-edu-miscellaneous.directory
++++ b/menu/desktop/kde-edu-miscellaneous.directory
+@@ -10,6 +10,7 @@
+ Name[de]=Verschiedenes
+ Name[el]=Διάφορα
+ Name[es]=Diversos
++Name[et]=Muud
+ Name[fa]=متفرقه
+ Name[ga]=Éagsúil
+ Name[he]=שונות
+--- a/menu/desktop/kde-development.directory
++++ b/menu/desktop/kde-development.directory
+@@ -32,7 +32,7 @@
+ Name[ja]=開発
+ Name[ka]=განვითარება
+ Name[kk]=Жетілдіру
+-Name[km]=​អភិវឌ្ឍន៍
++Name[km]=ការ​​អភិវឌ្ឍន៍
+ Name[ko]=개발
+ Name[lt]=Programavimas
+ Name[lv]=Izstrāde
+--- a/menu/desktop/kde-utilities-peripherals.directory
++++ b/menu/desktop/kde-utilities-peripherals.directory
+@@ -64,7 +64,7 @@
+ Name[wa]=Periferikes
+ Name[x-test]=xxPeripheralsxx
+ Name[xh]=Iilayini zomda
+-Name[zh_CN]=Name=外设
++Name[zh_CN]=外设
+ Name[zh_TW]=週邊設備
+ Icon=input_devices_settings
+ Comment=Peripherals
+--- a/menu/desktop/kde-utilities-file.directory
++++ b/menu/desktop/kde-utilities-file.directory
+@@ -33,7 +33,7 @@
+ Name[kk]=Файл
+ Name[km]=ឯកសារ
+ Name[ko]=파일
+-Name[lt]=Byla
++Name[lt]=Failas
+ Name[mk]=Датотека
+ Name[ms]=Fail
+ Name[nb]=Fil
+@@ -94,7 +94,7 @@
+ Comment[kk]=Файл
+ Comment[km]=ឯកសារ
+ Comment[ko]=파일
+-Comment[lt]=Byla
++Comment[lt]=Failas
+ Comment[mk]=Датотека
+ Comment[ms]=Fail
+ Comment[nb]=Fil
+--- a/menu/desktop/kde-system-terminal.directory
++++ b/menu/desktop/kde-system-terminal.directory
+@@ -16,7 +16,7 @@
+ Name[el]=Εφαρμογές τερματικού
+ Name[eo]=Terminal-Aplikaĵoj
+ Name[es]=Aplicaciones de terminal
+-Name[et]=Terminali rakendused
++Name[et]=Terminalirakendused
+ Name[eu]=Terminaleko aplikazioak
+ Name[fa]=کاربردهای پایانه
+ Name[fi]=Päätesovellukset
+--- a/menu/desktop/kde-unknown.directory
++++ b/menu/desktop/kde-unknown.directory
+@@ -30,7 +30,8 @@
+ Name[is]=Tapað & fundið
+ Name[it]=Oggetti smarriti
+ Name[kk]=Жоғалып табылғандар
+-Name[km]=បាត់ និង​រកឃើញ
++Name[km]=បាត់ ហើយ​រកឃើញ
++Name[ko]=기타 프로그램
+ Name[lt]=Pamesta ir rasta
+ Name[lv]=Pazudis & Atrasts
+ Name[mk]=Изгубено-најдено
+--- a/menu/desktop/kde-utilities-xutils.directory
++++ b/menu/desktop/kde-utilities-xutils.directory
+@@ -15,7 +15,7 @@
+ Name[el]=Εργαλεία-X
+ Name[eo]=X-Utilaĵoj
+ Name[es]=Utilidades-X
+-Name[et]=X'i utiliidid
++Name[et]=X'i tööriistad
+ Name[eu]=X-tresnak
+ Name[fa]=برنامه‌های سودمند X
+ Name[fi]=X-Apuohjelmat
+@@ -31,7 +31,7 @@
+ Name[ja]=X-ユーティリティ
+ Name[ka]= X-ხელსაწყოები
+ Name[kk]=X-утилиталар
+-Name[km]=ឧបករណ៍-X
++Name[km]=ឧបករណ៍​ប្រើប្រាស់-X
+ Name[ko]=X 유틸리티
+ Name[lt]=X pagalbininkai
+ Name[lv]=X Utilītas
+@@ -63,7 +63,7 @@
+ Name[wa]=Usteyes X
+ Name[x-test]=xxX-Utilitiesxx
+ Name[xh]=Izinto eziluncedo ze-X
+-Name[zh_CN]=Name=X 实用工具
++Name[zh_CN]=X 实用工具
+ Name[zh_TW]=X-實用工具
+ Comment=X Window Utilities
+ Comment[af]=X Window Nutsprogramme
+@@ -79,7 +79,7 @@
+ Comment[el]=Εργαλεία των X Windows
+ Comment[eo]=Utilaĵoj por la X-Fenestrosistemo
+ Comment[es]=Utilidades X Window
+-Comment[et]=X Window utiliidid
++Comment[et]=X Window tööriistad
+ Comment[eu]=X Window tresnak
+ Comment[fa]=برنامه‌های سودمند پنجرۀ X
+ Comment[fi]=X Window -apuohjelmat
+@@ -95,7 +95,7 @@
+ Comment[ja]=X ウィンドウユーティリティ
+ Comment[ka]=X Window–ს ხელსაწყოები
+ Comment[kk]=X Window утилиталары
+-Comment[km]=ឧបករណ៍ X Window
++Comment[km]=ឧបករណ៍​ប្រើប្រាស់ X Window
+ Comment[ko]=X 윈도 유틸리티
+ Comment[lt]=X Window pagalbininkai
+ Comment[lv]=X logu utilītas
+--- a/menu/desktop/kde-more.directory
++++ b/menu/desktop/kde-more.directory
+@@ -33,7 +33,7 @@
+ Name[ja]=その他のアプリケーション
+ Name[ka]=დამატებითი პროგრამები
+ Name[kk]=Басқа қолданбалар
+-Name[km]=កម្មវិធីបន្ថែម​ទៀត
++Name[km]=កម្មវិធី​ផ្សេង​ទៀត
+ Name[ko]=더 많은 프로그램
+ Name[lt]=Daugiau programų
+ Name[lv]=Vairāk aplikāciju
+--- a/menu/desktop/kde-edu-mathematics.directory
++++ b/menu/desktop/kde-edu-mathematics.directory
+@@ -11,6 +11,7 @@
+ Name[de]=Mathematik
+ Name[el]=Μαθηματικά
+ Name[es]=Matemáticas
++Name[et]=Matemaatika
+ Name[fa]=ریاضیات
+ Name[ga]=Matamaitic
+ Name[he]=מתמטיקה
+--- a/doc/kdm/kdmrc-ref.docbook
++++ b/doc/kdm/kdmrc-ref.docbook
+@@ -1,4 +1,4 @@
+-<!-- generated from ../../workspace/kdm/config.def - DO NOT EDIT! -->
++<!-- generated from ../../kdm/config.def - DO NOT EDIT! -->
+ 
+ <chapter id="kdm-files">
+ <title>The Files &kdm; Uses for Configuration</title>
+@@ -993,6 +993,16 @@
+ </varlistentry>
+ 
+ <varlistentry>
++<term id="option-forceuserauthdir"><option>ForceUserAuthDir</option></term>
++<listitem>
++<para>
++If true, <option>UserAuthDir</option> will be used unconditionally.
++</para>
++<para>The default is <quote>false</quote>.</para>
++</listitem>
++</varlistentry>
++
++<varlistentry>
+ <term id="option-autorelogin"><option>AutoReLogin</option></term>
+ <listitem>
+ <para>
+@@ -1228,15 +1238,50 @@
+ <listitem>
+ <para>
+ The file (relative to the user's home directory) to redirect the session
+-output to. One occurrence of <parameter>%s</parameter> in this string will be
+-substituted with the display name. Use <parameter>%%</parameter> to obtain a
+-literal <literal>%</literal>.
++output to.
++</para><para>
++The following character pairs are replaced by their value:
++<variablelist>
++<varlistentry>
++<term><parameter>%d</parameter></term>
++<listitem><para>name of the current display</para></listitem>
++</varlistentry>
++<varlistentry>
++<term><parameter>%u</parameter></term>
++<listitem><para>login name of the current user</para></listitem>
++</varlistentry>
++<varlistentry>
++<term><parameter>%r</parameter></term>
++<listitem><para>empty at first. See below.</para></listitem>
++</varlistentry>
++<varlistentry>
++<term><parameter>%%</parameter></term>
++<listitem><para>a single <literal>%</literal></para></listitem>
++</varlistentry>
++</variablelist>
++When the constructed filename cannot be used safely and the specification
++contains
++<literal>%</literal><replaceable>stuff</replaceable><literal>r</literal>,
++other names will be tried - this time expanding
++<literal>%</literal><replaceable>stuff</replaceable><literal>r</literal>
++to <replaceable>stuff</replaceable> followed by a random number.
+ </para>
+ <para>The default is <quote>.xsession-errors</quote>.</para>
+ </listitem>
+ </varlistentry>
+ 
+ <varlistentry>
++<term id="option-clientlogfallback"><option>ClientLogFallback</option></term>
++<listitem>
++<para>
++Fallback when <option>ClientLogFile</option> cannot be used. The same expansions are
++supported. <emphasis>Do not</emphasis> use relative paths here.
++</para>
++<para>The default is <quote>/tmp/xerr-%u-%d%-r</quote>.</para>
++</listitem>
++</varlistentry>
++
++<varlistentry>
+ <term id="option-usesessreg"><option>UseSessReg</option></term>
+ <listitem>
+ <para>
+--- a/doc/CMakeLists.txt
++++ b/doc/CMakeLists.txt
+@@ -1,8 +1,6 @@
+ add_subdirectory(kdm)
+-add_subdirectory(kicker)
+ add_subdirectory(kinfocenter)
+ add_subdirectory(klipper)
+ add_subdirectory(kmenuedit)
+-add_subdirectory(kompmgr)
+ add_subdirectory(ksysguard)
+ add_subdirectory(kxkb)
+--- a/systemsettings/categories/settings-notifications.desktop
++++ b/systemsettings/categories/settings-notifications.desktop
+@@ -10,9 +10,11 @@
+ Name[ar]=تنبيهات
+ Name[be]=Абвяшчэнні
+ Name[bg]=Уведомяване
++Name[br]=Kemenn
+ Name[de]=Benachrichtigungen
+ Name[el]=Ειδοποιήσεις
+ Name[es]=Notificaciones
++Name[et]=Märguanded
+ Name[fa]=اخطارها
+ Name[ga]=Fógairt
+ Name[he]=הודעות מערכת
+--- a/systemsettings/categories/settings-about-me.desktop
++++ b/systemsettings/categories/settings-about-me.desktop
+@@ -12,6 +12,7 @@
+ Name[de]=Persönliche Informationen
+ Name[el]=Σχετικά με μένα
+ Name[es]=Acerca de mí
++Name[et]=Isiklik info
+ Name[fa]=درباره من
+ Name[ga]=Maidir Liomsa
+ Name[he]=אודותיי
+--- a/systemsettings/categories/settings-look-and-feel.desktop
++++ b/systemsettings/categories/settings-look-and-feel.desktop
+@@ -14,6 +14,7 @@
+ Name[de]=Erscheinungsbild & Verhalten
+ Name[el]=Όψη & αίσθηση
+ Name[es]=Aspecto y comportamiento
++Name[et]=Välimus
+ Name[fa]=ظاهر و احساس
+ Name[ga]=Cuma
+ Name[he]=מראה ותחושה
+--- a/systemsettings/categories/settings-general.desktop
++++ b/systemsettings/categories/settings-general.desktop
+@@ -9,9 +9,11 @@
+ Name[ar]=عام
+ Name[be]=Агульныя
+ Name[bg]=Основно
++Name[br]=Pennañ
+ Name[csb]=Spòdlowé
+ Name[de]=Allgemein
+ Name[el]=Γενικά
++Name[et]=Üldine
+ Name[fa]=عمومی
+ Name[ga]=Ginearálta
+ Name[he]=כללי
+--- a/systemsettings/categories/settings-advanced-user-settings.desktop
++++ b/systemsettings/categories/settings-advanced-user-settings.desktop
+@@ -13,6 +13,7 @@
+ Name[de]=Erweiterte Benutzereinstellungen
+ Name[el]=Προχωρημένες ρυθμίσεις χρήστη
+ Name[es]=Preferencias para usuarios avanzados
++Name[et]=Muud kasutaja seadistused
+ Name[fa]=تنظیمات کاربر پیشرفته
+ Name[ga]=Ardsocruithe Úsáideora
+ Name[he]=הגדרות משתמש מתקדמות
+--- a/systemsettings/categories/settings-computer-administration.desktop
++++ b/systemsettings/categories/settings-computer-administration.desktop
+@@ -13,6 +13,7 @@
+ Name[de]=Systemverwaltung
+ Name[el]=Διαχείριση συστήματος
+ Name[es]=Administración del equipo
++Name[et]=Arvuti haldamine
+ Name[fa]=سرپرستی رایانه
+ Name[he]=ניהול המחשב
+ Name[it]=Amministrazione del computer
+--- a/systemsettings/categories/settings-regional-and-language.desktop
++++ b/systemsettings/categories/settings-regional-and-language.desktop
+@@ -10,9 +10,11 @@
+ Name[ar]=البلد واللغة
+ Name[be]=Краіна/Рэгіён і Мова
+ Name[bg]=Държава и език
++Name[br]=Rann-vro & yezh
+ Name[de]=Land/Region & Sprache
+ Name[el]=Τοπικές ρυθμίσεις & γλώσσα
+ Name[es]=Región e idioma
++Name[et]=Riik/regioon ja keel
+ Name[fa]=منطقه‌ای و زبان
+ Name[ga]=Réigiún agus Teanga
+ Name[he]=איזור ושפה
+--- a/systemsettings/categories/settings-personal.desktop
++++ b/systemsettings/categories/settings-personal.desktop
+@@ -12,6 +12,7 @@
+ Name[bg]=Лични бележки
+ Name[de]=Persönliches
+ Name[el]=Προσωπικά
++Name[et]=Isiklik
+ Name[fa]=شخصی
+ Name[ga]=Pearsanta
+ Name[he]=הגדרות אישיות
+--- a/systemsettings/categories/settings-keyboard-and-mouse.desktop
++++ b/systemsettings/categories/settings-keyboard-and-mouse.desktop
+@@ -13,6 +13,7 @@
+ Name[de]=Tastatur & Maus
+ Name[el]=Πληκτρολόγιο & ποντίκι
+ Name[es]=Teclado y ratón
++Name[et]=Klaviatuur ja hiir
+ Name[fa]=صفحه کلید و موشی
+ Name[ga]=Méarchlár & Luch
+ Name[he]=מקלדת ועכבר
+--- a/systemsettings/categories/settings-network-settings.desktop
++++ b/systemsettings/categories/settings-network-settings.desktop
+@@ -10,9 +10,11 @@
+ Name[ar]=إعدادات الشبكة
+ Name[be]=Настаўленні сеткі
+ Name[bg]=Мрежови настройки
++Name[br]=Kefluniadur ar Rouedad
+ Name[de]=Netzwerk-Einstellungen
+ Name[el]=Ρυθμίσεις δικτύου
+ Name[es]=Preferencias de red
++Name[et]=Võrguseadistused
+ Name[fa]=تنظیمات شبکه
+ Name[ga]=Socruithe Líonra
+ Name[he]=הגדרות רשת
+--- a/systemsettings/categories/settings-sharing.desktop
++++ b/systemsettings/categories/settings-sharing.desktop
+@@ -10,9 +10,11 @@
+ Name[ar]=مشاركة
+ Name[be]=Абмен
+ Name[bg]=Споделяне
++Name[br]=Rannañ
+ Name[de]=Freigabe
+ Name[el]=Διαμοιρασμός
+ Name[es]=Compartición
++Name[et]=Jagamine
+ Name[fa]=اشتراک
+ Name[ga]=Comhroinnt
+ Name[he]=שיתוף
+--- a/systemsettings/categories/settings-network-and-connectivity.desktop
++++ b/systemsettings/categories/settings-network-and-connectivity.desktop
+@@ -13,6 +13,7 @@
+ Name[de]=Netzwerk & Verbindungen
+ Name[el]=Δίκτυο & συνδεσιμότητα
+ Name[es]=Red y conectividad
++Name[et]=Võrk
+ Name[fa]=شبکه و اتصال
+ Name[ga]=Líonra & Nascacht
+ Name[he]=רשת וקישוריות
+--- a/systemsettings/categories/systemsettingscategory.desktop
++++ b/systemsettings/categories/systemsettingscategory.desktop
+@@ -9,6 +9,7 @@
+ Name[de]=Systemeinstellungen-Kategorie
+ Name[el]=Κατηγορία ρυθμίσεων συστήματος
+ Name[es]=Categoría de preferencias del sistema
++Name[et]=Süsteemi seadistuste kategooria
+ Name[fa]=دسته تنظیمات سیستم
+ Name[he]=קטגוריית הגדרות מערכת
+ Name[ja]=システム設定のカテゴリ
+--- a/systemsettings/modulesview.h
++++ b/systemsettings/modulesview.h
+@@ -26,6 +26,7 @@
+ #include <QListWidget>
+ #include <QList>
+ 
++#include <KService>
+ /**
+  * Overloaded to give a larger default size that fits with text of two lines.
+  */
+@@ -102,6 +103,7 @@
+ 	QList<RowIconView*> groups;
+ 	KCModuleMenu *rootMenu;
+ 	QString menuPath;
++	KService::List categories;
+ 
+ 	void createRow( const QString &parentPath, QBoxLayout *layout );
+ };
+--- a/systemsettings/kcmodulemenu.cpp
++++ b/systemsettings/kcmodulemenu.cpp
+@@ -28,22 +28,28 @@
+ class KCModuleMenuPrivate {
+ public:
+ 	KCModuleMenuPrivate(){
++		categories = KServiceTypeTrader::self()->query("SystemSettingsCategory");
++		modules = KServiceTypeTrader::self()->query("KCModule");
+ 	}
+-				
++
+ 	QMap<QString, QList<MenuItem> > menus;
+ 	QString basePath;
++	KService::List categories;
++	KService::List modules;
++
+ };
+ 
+ KCModuleMenu::KCModuleMenu( const QString &menuName ) :
+ 	d( new KCModuleMenuPrivate )
+ {
++	Q_UNUSED(menuName);
+ 	// Make sure we can find the menu
+ 	QString menuRoot = "System Settings"; //just a handy key to use, not part of UI
+ 	d->basePath = menuRoot + '/';
+ 	readMenu( "", menuRoot );
+ 
+-	QMapIterator<QString, QList<MenuItem> > i(d->menus);
+ 	/*debugging
++	QMapIterator<QString, QList<MenuItem> > i(d->menus);
+ 	while (i.hasNext()) {
+ 		i.next();
+ 		kDebug() << "menu: " << i.key();
+@@ -54,7 +60,6 @@
+ 		}
+ 	}
+ 	*/
+-	KService::List offers = KServiceTypeTrader::self()->query("KCModule");
+ }
+ 
+ KCModuleMenu::~KCModuleMenu()
+@@ -64,12 +69,9 @@
+ 
+ void KCModuleMenu::readMenu( const QString &parentName, const QString &caption )
+ {
+-	typedef KSharedPtr<KService> MySharedPtr_KService;
+-
+ 	QList<MenuItem> currentMenu;
+-	KService::List categories = KServiceTypeTrader::self()->query("SystemSettingsCategory");
+-	for (int i = 0; i < categories.size(); ++i) {
+-		const KService* entry = categories.at(i).data();
++	for (int i = 0; i < d->categories.size(); ++i) {
++		const KService* entry = d->categories.at(i).data();
+ 		QString parentCategory = entry->property("X-KDE-System-Settings-Parent-Category").toString();
+ 		QString category = entry->property("X-KDE-System-Settings-Category").toString();
+ 
+@@ -83,9 +85,8 @@
+ 		}
+ 	}
+ 
+-	KService::List modules = KServiceTypeTrader::self()->query("KCModule");
+-	for (int i = 0; i < modules.size(); ++i) {
+-		const KService* entry = modules.at(i).data();
++	for (int i = 0; i < d->modules.size(); ++i) {
++		const KService* entry = d->modules.at(i).data();
+ 		QString category = entry->property("X-KDE-System-Settings-Parent-Category").toString();
+ 		if( category == parentName && !parentName.isEmpty() ) {
+ 			// Add the module info to the menu
+@@ -98,6 +99,7 @@
+ 		}
+ 	}
+ 
++	qSort(currentMenu);
+ 	d->menus.insert( caption + '/', currentMenu );
+ }
+ 
+@@ -105,11 +107,11 @@
+ 	if( !entry->isType(KST_KService) )
+ 		return false;
+ 	
+-  KSharedPtr<KService> service(static_cast<KService*>(entry));
++	KService::Ptr service(static_cast<KService*>(entry));
+ 
+ 	if ( !KAuthorized::authorizeControlModule( service->menuId()) ) {
+ 		return false;
+-  }
++	}
+ 
+ 	KCModuleInfo module( service );
+ 	if ( module.library().isEmpty() )
+@@ -157,3 +159,18 @@
+ 	}
+ 	return d->menus[menuPath];
+ }
++
++bool MenuItem::operator<(const MenuItem& rhs) const
++{
++    //kDebug() << "comparing" << caption << "to" << rhs.caption;
++    if (caption == i18n("General")) {
++        //kDebug() << "General tab ... we're always the smallest even if we have to lie about it";
++        return true;
++    } else if (rhs.caption == i18n("General")) {
++        //kDebug() << "Other guy is 'General', let's always say we're bigger";
++        return false;
++    }
++
++    return caption < rhs.caption;
++}
++
+--- a/systemsettings/systemsettings.desktop
++++ b/systemsettings/systemsettings.desktop
+@@ -10,9 +10,11 @@
+ Name[ar]=إعدادات النظام
+ Name[be]=Сістэмныя настаўленні
+ Name[bg]=Системни настройки
++Name[br]=Dibarzhoù ar reizhiad
+ Name[de]=Systemeinstellungen
+ Name[el]=Ρυθμίσεις συστήματος
+ Name[es]=Preferencias del sistema
++Name[et]=Süsteemi seadistused
+ Name[fa]=تنظیمات سیستم
+ Name[ga]=Socruithe an Chórais
+ Name[he]=הגדרות מערכת
+--- a/systemsettings/kcmsearch.cpp
++++ b/systemsettings/kcmsearch.cpp
+@@ -50,6 +50,7 @@
+ 	int page = 0;
+ 	int *hitArray = new int[moduleViewList->count()];
+ 
++	QRegExp reSearch('*'+search+'*', Qt::CaseInsensitive, QRegExp::Wildcard);
+ 	while ( moduleViewListIt.hasNext() ) {
+ 		mainView = moduleViewListIt.next();
+ 
+@@ -58,7 +59,8 @@
+ 			int itemCounter = 0;
+ 			QListWidgetItem *item = (*it)->item(itemCounter);
+ 			while( item ) {
+-				bool hit = itemMatches(item, search);
++				bool hit = reSearch.indexIn( item->text() ) >= 0 ||
++						itemMatches(item, search);
+ 				((ModuleIconItem*)item)->loadIcon(hit);
+ 				count += hit ? 1 : 0;
+ 				//item = item->nextItem();
+--- a/systemsettings/modulesview.cpp
++++ b/systemsettings/modulesview.cpp
+@@ -36,6 +36,7 @@
+ {
+ 	this->rootMenu = rootMenu;	
+ 	this->menuPath = menuPath;
++	this->categories = KServiceTypeTrader::self()->query("SystemSettingsCategory");
+ 
+ 	QVBoxLayout *layout = new QVBoxLayout( this );
+ 	layout->setMargin( 11 );
+@@ -97,7 +98,6 @@
+ {
+ 	//find the category name and search for it
+ 	QString categoryName = parentPath.section('/', -2, -2);
+-	KService::List categories = KServiceTypeTrader::self()->query("SystemSettingsCategory");
+ 	QString iconName;
+ 	for (int i = 0; i < categories.size(); ++i) {
+ 		const KService* entry = categories.at(i).data();
+--- a/systemsettings/mainwindow.cpp
++++ b/systemsettings/mainwindow.cpp
+@@ -85,11 +85,11 @@
+ 	QScrollArea *modulesScroller;
+ 	moduleTabs->show();
+ 
+-    foreach( const MenuItem &item , subMenus ) {
++	foreach( const MenuItem &item , subMenus ) {
+ 		if( item.menu ) {
+ 			modulesScroller = new QScrollArea(moduleTabs);
+ 
+-            modulesScroller->setFrameStyle( QFrame::NoFrame );
++			modulesScroller->setFrameStyle( QFrame::NoFrame );
+ 
+ 			modulesScroller->setWidgetResizable(true);
+ 			ModulesView *modulesView = new ModulesView( menu, item.subMenu, modulesScroller );
+@@ -187,7 +187,7 @@
+ 
+ 	// Now it's time to draw our display
+ 	foreach( const MenuItem &item , menu->menuList() ) {
+-        	if( item.menu ) {
++		if( item.menu ) {
+ 			KServiceGroup::Ptr group = KServiceGroup::group( item.subMenu );
+ 			if ( !group ){
+ 				kDebug() << "Invalid Group \"" << item.subMenu << "\".  Check your installation.";
+@@ -364,11 +364,11 @@
+ 	} else {
+ 		
+ 		if(length>=1) {
+-			generalHitLabel->setText(i18np("%1 hit in General","%1 hits in General",hitList[1]));
++			generalHitLabel->setText(i18np("%1 hit in General","%1 hits in General",hitList[0]));
+ 		}
+ 	
+ 		if(length>=2) {
+-			advancedHitLabel->setText(i18np("%1 hit in Advanced","%1 hits in Advanced",hitList[0]));
++			advancedHitLabel->setText(i18np("%1 hit in Advanced","%1 hits in Advanced",hitList[1]));
+ 		}
+ 
+ 	}
+--- a/systemsettings/kcmodulemenu.h
++++ b/systemsettings/kcmodulemenu.h
+@@ -77,7 +77,8 @@
+  */
+ class MenuItem {
+ public:
+-	MenuItem( bool isMenu=false ){ menu = isMenu; }	
++	MenuItem( bool isMenu=false ){ menu = isMenu; }
++	bool operator<(const MenuItem& rhs) const;
+ 	bool menu;
+ 	QString subMenu;
+ 	QString caption;
+--- a/klipper/klipper-kde31.sh
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#!/bin/sh
+-filename=`kde4-config --localprefix`share/autostart/klipper.desktop
+-if grep 'Hidden=true' "$filename" > /dev/null 2> /dev/null; then
+-  echo AutoStart=false
+-else
+-  echo AutoStart=true
+-fi
+-rm -f "$filename"
+--- a/klipper/klipperbindings.cpp
++++ /dev/null
+@@ -1,42 +0,0 @@
+-// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8; -*-
+-/* This file is part of the KDE project
+-   Copyright (C) by Andrew Stanley-Jones
+-
+-   This program is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU General Public
+-   License as published by the Free Software Foundation; either
+-   version 2 of the License, or (at your option) any later version.
+-
+-   This program is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    General Public License for more details.
+-
+-   You should have received a copy of the GNU General Public License
+-   along with this program; see the file COPYING.  If not, write to
+-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+-   Boston, MA 02110-1301, USA.
+-*/
+-
+-#ifndef NOSLOTS
+-# define DEF( name, key, fnSlot ) \
+-   a = actionCollection->addAction( name );                        \
+-   a->setText( i18n(name) );                                       \
+-   qobject_cast<KAction*>( a )->setGlobalShortcut(KShortcut(key)); \
+-   connect(a, SIGNAL(triggered(bool)), SLOT(fnSlot))
+-#else
+-# define DEF( name, key, fnSlot ) \
+-   a = actionCollection->addAction( name );             \
+-   a->setText( i18n(name) );                            \
+-   qobject_cast<KAction*>( a )->setGlobalShortcut(KShortcut(key));
+-#endif
+-
+-        a = actionCollection->addAction( "Program:klipper" );
+-        a->setText( i18n("Clipboard") );
+-
+-	DEF( I18N_NOOP("Show Klipper Popup-Menu"), Qt::ALT+Qt::CTRL+Qt::Key_V, slotPopupMenu() );
+-
+-        DEF( I18N_NOOP("Manually Invoke Action on Current Clipboard"), Qt::ALT+Qt::CTRL+Qt::Key_R, slotRepeatAction() );
+-	DEF( I18N_NOOP("Enable/Disable Clipboard Actions"), Qt::ALT+Qt::CTRL+Qt::Key_X, toggleURLGrabber() );
+-
+-#undef DEF
+--- a/klipper/klipper-1-2.pl
++++ /dev/null
+@@ -1,63 +0,0 @@
+-#!/usr/bin/perl
+-
+-my ($section, %data);
+-
+-#read in all the data, split it up into hashes. Thanks again to malte for much input
+-while (<>) {
+-	if (/\[(.*)\]/) {
+-		$sections{$section} = {%data} if $section;
+-		$section = $1;
+-		undef %data;
+-		next;
+- 	}
+-	$data{$1} = $2 if /^([^=]*)=(.*)$/;
+-}
+-
+-$sections{$section} = {%data} if $section;
+-
+-# not used up to now
+-# $version = $sections{'General'}->{'Version'};
+-
+-# if "Action description" is not available, we have a new, fresh configuration
+-# without any need for conversion.
+-if ( ! $sections{'Action_0'}->{'Action description'} ) {
+-    exit;
+-}
+-
+-$numActions = $sections{'General'}->{'Number of Actions'};
+-for my $i (0..($numActions - 1)) {
+-    my $actionGroup = "Action_$i";
+-    my $numCommands = $sections{$actionGroup}->{'Number of commands'};
+-
+-    print "[$actionGroup]\n";
+-    # rename some keys
+-    print "Description=$sections{$actionGroup}->{'Action description'}\n";
+-    print "Regexp=$sections{$actionGroup}->{'Action regexp'}\n";
+-    print "Number of commands=$numCommands\n";
+-
+-    # move the command entries from "Action_x" to "Action_x/Command_y"
+-    for my $k (0..($numCommands - 1)) {
+-	my $command = "Command_$k";
+-	my $commandGroup = "$actionGroup/$command";
+-	print "\n[$commandGroup]\n";
+-	my $value = $sections{$actionGroup}->{"$command: commandline"};
+-	print "Commandline=$value\n";
+-	$value = $sections{$actionGroup}->{"$command: description"};
+-	print "Description=$value\n";
+-	$value = $sections{$actionGroup}->{"$command: enabled"};
+-	print "Enabled=$value\n";
+-    }
+-    print "\n";
+-}
+-
+-&copySection( "General" );
+-&copySection( "Global Keys" );
+-
+-sub copySection()
+-{
+-    my ($group) = @_;
+-    print "\n[$group]\n";
+-    while (($key,$value) = each(%{$sections{$group}})) {
+-	print "$key=$value\n";
+-    }
+-}
+--- a/klipper/klipperrc.upd
++++ /dev/null
+@@ -1,7 +0,0 @@
+-Id=25082001
+-File=klipperrc
+-Script=klipper-1-2.pl,perl
+-Id=kde3.1
+-File=klipperrc
+-Group=General
+-Script=klipper-kde31.sh,sh
+--- a/klipper/klippershortcuts.upd
++++ /dev/null
+@@ -1,5 +0,0 @@
+-Id=04112002
+-File=klipperrc,kdeglobals
+-Group=Global Shortcuts
+-AllKeys
+-RemoveGroup=Global Shortcuts
+--- a/klipper/klipperpopup.h
++++ b/klipper/klipperpopup.h
+@@ -17,14 +17,13 @@
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+ */
+-#ifndef _KLIPPERPOPUP_H_
+-#define _KLIPPERPOPUP_H_
++#ifndef KLIPPERPOPUP_H
++#define KLIPPERPOPUP_H
+ 
+-#include <kmenu.h>
+-#include <Qt3Support/Q3PtrList>
++#include <QList>
++#include <QWidgetAction>
+ 
+-//Added by qt3to4:
+-#include <QKeyEvent>
++#include <kmenu.h>
+ 
+ class History;
+ class KHelpMenu;
+@@ -96,7 +95,7 @@
+     /**
+      * (unowned) actions to plug into the primary popup menu
+      */
+-    Q3PtrList<QAction> m_actions;
++    QList<QAction*> m_actions;
+ 
+     /**
+      * Proxy helper object used to track history items
+@@ -109,9 +108,9 @@
+     KLineEdit* m_filterWidget;
+ 
+     /**
+-     * id of search widget, for convenience
++     * Action of search widget
+      */
+-    int m_filterWidgetId;
++    QWidgetAction *m_filterWidgetAction;
+ 
+     /**
+      * The current number of history items in the clipboard
+--- a/klipper/history.cpp
++++ b/klipper/history.cpp
+@@ -31,12 +31,12 @@
+       m_topIsUserSelected( false )
+ {
+     connect( this, SIGNAL( changed() ), m_popup, SLOT( slotHistoryChanged() ) );
+-    itemList.setAutoDelete( true );
+ 
+ }
+ 
+ 
+ History::~History() {
++    qDeleteAll(itemList);
+ }
+ 
+ History::iterator History::youngest() {
+@@ -85,14 +85,10 @@
+     if ( !newItem )
+         return;
+ 
+-    for ( const HistoryItem* item = itemList.first(); item; item=next() ) {
+-        if ( *item == *newItem ) {
+-            itemList.remove();
+-            emit changed();
+-            return;
+-        }
++    if (itemList.contains(newItem)) {
++        itemList.removeAll(newItem);
++        emit changed();
+     }
+-
+ }
+ 
+ 
+@@ -101,20 +97,20 @@
+     emit changed();
+ }
+ 
+-void History::slotMoveToTop(int pos ) {
+-    if ( pos < 0 || static_cast<unsigned>( pos ) >= itemList.count() ) {
++void History::slotMoveToTop(QAction *action) {
++    bool ok = false;
++    int pos = action->data().toInt(&ok);
++    if (!ok) // not an action from popupproxy
++        return;
++
++    if ( pos < 0 || pos >= itemList.count() ) {
+         kDebug() << "Argument pos out of range: " << pos;
+         return;
+     }
+ 
+     m_topIsUserSelected = true;
+ 
+-    itemList.first();
+-    for ( ; pos; pos-- ) {
+-        itemList.next();
+-    }
+-    HistoryItem* item = itemList.take();
+-    itemList.prepend( item );
++    itemList.move(pos, 0);
+     emit changed();
+     emit topChanged();
+ }
+--- a/klipper/historyurlitem.cpp
++++ b/klipper/historyurlitem.cpp
+@@ -19,9 +19,7 @@
+ */
+ #include "historyurlitem.h"
+ 
+-#include <k3multipledrag.h>
+-#include <k3urldrag.h>
+-#include <Qt3Support/Q3CString>
++#include <QMimeData>
+ 
+ HistoryURLItem::HistoryURLItem( const KUrl::List &_urls, KUrl::MetaDataMap _metaData, bool _cut )
+     : urls( _urls ), metaData( _metaData ), cut( _cut )
+--- a/klipper/popupproxy.cpp
++++ b/klipper/popupproxy.cpp
+@@ -42,6 +42,7 @@
+       nextItemNumber( 0 )
+ {
+     connect( parent->history(), SIGNAL( changed() ), SLOT( slotHistoryChanged() ) );
++    connect(proxy_for_menu, SIGNAL(triggered(QAction*)), parent->history(), SLOT(slotMoveToTop(QAction*)));
+ }
+ 
+ void PopupProxy::slotHistoryChanged() {
+@@ -87,33 +88,35 @@
+                                 int& remainingHeight,
+                                 const int index )
+ {
+-
+-    // Insert item
+-    int id = -1;
++    QAction *action = new QAction(this);
+     QPixmap image( item->image() );
+     if ( image.isNull() ) {
+         // Squeeze text strings so that do not take up the entire screen (or more)
+         QString text = proxy_for_menu->fontMetrics().elidedText( item->text().simplified(), Qt::ElideMiddle, m_menu_width );
+         text.replace( "&", "&&" );
+-        id = proxy_for_menu->insertItem( text, -1, index );
++        action->setText(text);
+     } else {
+         const QSize max_size( m_menu_width,m_menu_height/4 );
+         if ( image.height() > max_size.height() || image.width() > max_size.width() ) {
+             image = image.scaled( max_size, Qt::KeepAspectRatio, Qt::SmoothTransformation );
+         }
+-        id = proxy_for_menu->insertItem( image, -1, index );
++        action->setIcon(QIcon(image));
+     }
+ 
++    action->setData(nextItemNumber);
++
++    proxy_for_menu->insertAction(proxy_for_menu->actions().at(index), action);
+ 
+     // Determine height of a menu item.
++
++    int itemheight = QFontMetrics(proxy_for_menu->fontMetrics()).height();
++
++//TODO Use old-style QStyle and QStyleOption API
++#if 0
+     Q_ASSERT( id != -1 ); // Be sure that the item was inserted.
+     QMenuItem* mi = proxy_for_menu->findItem( id );
+-    int fontheight = QFontMetrics( proxy_for_menu->fontMetrics()  ).height();
+-#ifdef __GNUC__
+-#warning Use old-style QStyle and QStyleOption API
+-#endif    
+-    int itemheight = fontheight;
+-#if 0
++
++
+     int itemheight = proxy_for_menu->style().sizeFromContents(QStyle::CT_PopupMenuItem,
+                                                               proxy_for_menu,
+                                                               QSize( 0, fontheight ),
+@@ -121,12 +124,6 @@
+ #endif
+     // Test if there was enough space
+     remainingHeight -= itemheight;
+-    History* history = parent()->history();
+-    proxy_for_menu->connectItem(  id,
+-                                  history,
+-                                  SLOT( slotMoveToTop( int ) ) );
+-    proxy_for_menu->setItemParameter(  id, nextItemNumber );
+-
+ }
+ 
+ int PopupProxy::insertFromSpill( int index ) {
+@@ -142,23 +139,25 @@
+     int remainingHeight = m_menu_height - proxy_for_menu->sizeHint().height();
+     // Force at least one item to be inserted.
+     remainingHeight = qMax( remainingHeight, 0 );
+-    for ( const HistoryItem* item = spillPointer.current();
+-          item && remainingHeight >= 0;
+-          nextItemNumber++, item = ++spillPointer )
+-    {
++
++    while (spillPointer.hasNext() && remainingHeight >= 0) {
++        const HistoryItem *item = spillPointer.next();
+         if ( m_filter.indexIn( item->text() ) == -1) {
+             continue;
+         }
+         tryInsertItem( item, remainingHeight, index++ );
+         count++;
++        nextItemNumber++;
+     }
+ 
+     // If there is more items in the history, insert a new "More..." menu and
+     // make *this a proxy for that menu ('s content).
+-    if ( spillPointer.current() ) {
++    if (spillPointer.hasNext()) {
+         KMenu* moreMenu = new KMenu( proxy_for_menu );
+-        proxy_for_menu->insertItem( i18n( "&More" ), moreMenu, -1, index );
+-        connect( moreMenu, SIGNAL( aboutToShow() ), SLOT( slotAboutToShow() ) );
++        QAction *menuAction = new QAction(i18n("&More"), this);
++        menuAction->setMenu(moreMenu);
++        connect(moreMenu, SIGNAL(aboutToShow()), SLOT(slotAboutToShow()));
++        proxy_for_menu->insertAction(proxy_for_menu->actions().at(index), menuAction);
+         proxy_for_menu = moreMenu;
+     }
+ 
+--- a/klipper/history.h
++++ b/klipper/history.h
+@@ -18,11 +18,12 @@
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+ */
+-#ifndef _HISTORY_H_
+-#define _HISTORY_H_
++#ifndef HISTORY_H
++#define HISTORY_H
++
++#include <QAction>
++#include <QList>
+ 
+-#include <QObject>
+-#include <Qt3Support/Q3PtrList>
+ #include "historyitem.h"
+ 
+ class KlipperPopup;
+@@ -36,7 +37,7 @@
+     /**
+      * Iterator for history
+      */
+-    typedef Q3PtrListIterator<HistoryItem> iterator;
++    typedef QListIterator<const HistoryItem*> iterator;
+ 
+     /**
+      * Return (toplevel) popup menu (or default view, of you like)
+@@ -70,11 +71,6 @@
+     const HistoryItem* first();
+ 
+     /**
+-     * Traversal: Get current item
+-     */
+-    const HistoryItem* next();
+-
+-    /**
+      * Get an iterator pointing to the first (most recent) item
+      * This iterator should probably be a constant iterator, but
+      * the QTL doesn't support this easily.
+@@ -112,7 +108,7 @@
+     /**
+      * move the history in position pos to top
+      */
+-    void slotMoveToTop(int pos );
++    void slotMoveToTop(QAction *action);
+ 
+     /**
+      * Clear history
+@@ -132,7 +128,7 @@
+     /**
+      * The history
+      */
+-    Q3PtrList<HistoryItem> itemList;
++    QList<const HistoryItem*> itemList;
+ 
+     /**
+      * ensure that the number of items does not exceed max_size()
+@@ -161,6 +157,4 @@
+ 
+ inline const HistoryItem* History::first() { return itemList.first(); }
+ 
+-inline const HistoryItem* History::next() { return itemList.next();  }
+-
+ #endif
+--- a/klipper/klipper.cpp
++++ b/klipper/klipper.cpp
+@@ -22,41 +22,20 @@
+ */
+ 
+ #include <QClipboard>
+-#include <QCursor>
+-#include <QDateTime>
+-#include <QFile>
+-#include <QPainter>
+-
+-#include <QtGui/QMacMime>
+-#include <Qt3Support/Q3ColorDrag>
+-#include <QPaintEvent>
+-#include <QMouseEvent>
+-#include <QX11Info>
++#include <QtDBus/QDBusConnection>
+ 
+ #include <kaboutdata.h>
+-#include <kaction.h>
+-#include <kapplication.h>
+-#include <kconfig.h>
+-#include <kglobal.h>
+-#include <kicon.h>
+ #include <klocale.h>
+ #include <kmessagebox.h>
+ #include <ksavefile.h>
+ #include <ksessionmanager.h>
+ #include <kstandarddirs.h>
+-#include <kstringhandler.h>
+ #include <ksystemtrayicon.h>
+-#include <k3urldrag.h>
+-#include <kwindowsystem.h>
+ #include <kdebug.h>
+ #include <kglobalsettings.h>
+-#include <QtDBus/QDBusConnection>
+-#include <kiconloader.h>
+-#include <khelpmenu.h>
+-#include <kstandardguiitem.h>
+ #include <kactioncollection.h>
+ #include <ktoggleaction.h>
+-#include <kconfiggroup.h>
++#include <KConfigSkeleton>
+ 
+ #include "configdialog.h"
+ #include "klipper.h"
+@@ -73,6 +52,8 @@
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
+ 
++//#define NOISY_KLIPPER
++
+ namespace {
+     /**
+      * Use this when manipulating the clipboard
+@@ -151,7 +132,7 @@
+ 
+     // we need that collection, otherwise KToggleAction is not happy :}
+     //QString defaultGroup( "default" );
+-    KActionCollection *collection = new KActionCollection( this );
++    collection = new KActionCollection( this );
+     toggleURLGrabAction = new KToggleAction( this );
+     collection->addAction( "toggleUrlGrabAction", toggleURLGrabAction );
+     toggleURLGrabAction->setEnabled( true );
+@@ -159,8 +140,8 @@
+     clearHistoryAction = collection->addAction( "clearHistoryAction" );
+     clearHistoryAction->setIcon( KIcon("history-clear") );
+     clearHistoryAction->setText( i18n("C&lear Clipboard History") );
+-    connect(clearHistoryAction, SIGNAL(triggered(bool) ), history(), SLOT( slotClear() ));
+-    connect( clearHistoryAction, SIGNAL( activated() ), SLOT( slotClearClipboard() ) );
++    connect(clearHistoryAction, SIGNAL(triggered() ), history(), SLOT( slotClear() ));
++    connect( clearHistoryAction, SIGNAL( triggered() ), SLOT( slotClearClipboard() ) );
+     //clearHistoryAction->setGroup( defaultGroup );
+     configureAction = collection->addAction( "configureAction" );
+     configureAction->setIcon( KIcon("configure") );
+@@ -187,19 +168,22 @@
+     connect( poll, SIGNAL( clipboardChanged( bool ) ),
+              this, SLOT( newClipData( bool ) ) );
+ 
+-    m_pixmap = KSystemTrayIcon::loadIcon( "klipper" ).pixmap();
++    QAction *a = collection->addAction("show_klipper_popup");
++    a->setText(i18n("Show Klipper Popup-Menu"));
++    qobject_cast<KAction*>(a)->setGlobalShortcut(KShortcut(Qt::ALT+Qt::CTRL+Qt::Key_V));
++    connect(a, SIGNAL(triggered()), SLOT(slotPopupMenu()));
++
++    a = collection->addAction("repeat_action");
++    a->setText(i18n("Manually Invoke Action on Current Clipboard"));
++    qobject_cast<KAction*>(a)->setGlobalShortcut(KShortcut(Qt::ALT+Qt::CTRL+Qt::Key_R));
++    connect(a, SIGNAL(triggered()), SLOT(slotRepeatAction()));
++
++    a = collection->addAction("clipboard_action");
++    a->setText(i18n("Enable/Disable Clipboard Actions"));
++    qobject_cast<KAction*>(a)->setGlobalShortcut(KShortcut(Qt::ALT+Qt::CTRL+Qt::Key_X));
++    connect(a, SIGNAL(triggered()), SLOT(toggleURLGrabber()));
+ 
+-    globalKeys = KGlobalAccel::self();
+-    KActionCollection* actionCollection = collection;
+-    QAction* a = 0L;
+-#ifdef __GNUC__
+-#warning TODO PORT ME (KGlobalAccel related)
+-#endif
+-#include "klipperbindings.cpp"
+-    // the keys need to be read from kdeglobals, not kickerrc --ellis, 22/9/02
+-    //globalKeys->readSettings();
+-    //globalKeys->updateConnections();
+-    //toggleURLGrabAction->setShortcut(globalKeys->shortcut("Enable/Disable Clipboard Actions"));
++    toggleURLGrabAction->setShortcut(qobject_cast<KAction*>(collection->action("clipboard_action"))->globalShortcut());
+ 
+     connect( toggleURLGrabAction, SIGNAL( toggled( bool )),
+              this, SLOT( setURLGrabberEnabled( bool )));
+@@ -388,9 +372,13 @@
+     QByteArray data;
+     QDataStream history_stream( &data, QIODevice::WriteOnly );
+     history_stream << klipper_version; // const char*
+-    for (  const HistoryItem* item = history()->first(); item; item = history()->next() ) {
++
++    History::iterator it = history()->youngest();
++    while (it.hasNext()) {
++        const HistoryItem *item = it.next();
+         history_stream << item;
+     }
++
+     quint32 crc = crc32( 0, reinterpret_cast<unsigned char *>( data.data() ), data.size() );
+     QDataStream ds ( &history_file );
+     ds << crc << data;
+@@ -476,12 +464,7 @@
+ void Klipper::slotSettingsChanged( int category )
+ {
+     if ( category == (int) KGlobalSettings::SETTINGS_SHORTCUTS ) {
+-#ifdef __GNUC__
+-#warning TODO PORT ME (KGlobalAccel related)
+-#endif
+-        //globalKeys->readSettings();
+-        //globalKeys->updateConnections();
+-        //toggleURLGrabAction->setShortcut(globalKeys->shortcut("Enable/Disable Clipboard Actions"));
++        toggleURLGrabAction->setShortcut(qobject_cast<KAction*>(collection->action("clipboard_action"))->globalShortcut());
+     }
+ }
+ 
+@@ -502,8 +485,7 @@
+         readConfiguration( m_config.data() );
+     }
+ 
+-    ConfigDialog *dlg = new ConfigDialog( myURLGrabber->actionList(),
+-                                          globalKeys, isApplet() );
++    ConfigDialog *dlg = new ConfigDialog( 0, new KConfigSkeleton(), myURLGrabber->actionList(), collection, isApplet() );
+     dlg->setKeepContents( bKeepContents );
+     dlg->setPopupAtMousePos( bPopupAtMouse );
+     dlg->setStripWhiteSpace( myURLGrabber->trimmed() );
+@@ -525,12 +507,8 @@
+         bSynchronize = dlg->synchronize();
+         bUseGUIRegExpEditor = dlg->useGUIRegExpEditor();
+         dlg->commitShortcuts();
+-#ifdef __GNUC__
+-#warning TODO PORT ME (KGlobalAccel related)
+-#endif
+-        //globalKeys->writeSettings();
+-        //globalKeys->updateConnections();
+-        //toggleURLGrabAction->setShortcut(globalKeys->shortcut("Enable/Disable Clipboard Actions"));
++
++        toggleURLGrabAction->setShortcut(qobject_cast<KAction*>(collection->action("clipboard_action"))->globalShortcut());
+ 
+         myURLGrabber->setActionList( dlg->actionList() );
+         myURLGrabber->setPopupTimeout( dlg->popupTimeout() );
+@@ -557,7 +535,9 @@
+     }
+ 
+     saveSession();
+-    int autoStart = KMessageBox::questionYesNoCancel( 0L, i18n("Should Klipper start automatically\nwhen you login?"), i18n("Automatically Start Klipper?"),KGuiItem(i18n("Start")), KGuiItem(i18n("Do Not Start")) );
++    int autoStart = KMessageBox::questionYesNoCancel(0, i18n("Should Klipper start automatically when you login?"),
++                                                     i18n("Automatically Start Klipper?"), KGuiItem(i18n("Start")),
++                                                     KGuiItem(i18n("Do Not Start")), KStandardGuiItem::cancel(), "StartAutomatically");
+ 
+     KConfigGroup config( KGlobal::config(), "General");
+     if ( autoStart == KMessageBox::Yes ) {
+@@ -736,9 +716,15 @@
+ //   while the user is doing a selection using the mouse, OOo stops updating the clipboard
+ //   contents, so in practice it's like the user has selected only the part which was
+ //   selected when Klipper asked first.
+-	Qt::ButtonState buttonstate = QApplication::mouseButtons();
+-    if( ( buttonstate & ( Qt::ShiftModifier | Qt::LeftButton )) == Qt::ShiftModifier // #85198
+-        || ( buttonstate & Qt::LeftButton ) == Qt::LeftButton ) { // #80302
++// Use XQueryPointer rather than QApplication::mouseButtons()/keyboardModifiers(), because
++//   Klipper needs the very current state.
++    Window root, child;
++    int root_x, root_y, win_x, win_y;
++    uint state;
++    XQueryPointer( QX11Info::display(), QX11Info::appRootWindow(), &root, &child,
++                   &root_x, &root_y, &win_x, &win_y, &state );
++    if( ( state & ( ShiftMask | Button1Mask )) == ShiftMask // #85198
++        || ( state & Button1Mask ) == Button1Mask ) { // #80302
+         m_pendingContentsCheck = true;
+         m_pendingCheckTimer.start( 100 );
+         return true;
+@@ -834,12 +820,10 @@
+     if ( selectionMode && bIgnoreSelection )
+         return;
+ 
+-    if( selectionMode && bSelectionTextOnly && data->hasText())
++    if( selectionMode && bSelectionTextOnly && !data->hasText())
+         return;
+ 
+-#ifdef __GNUC__
+-#warning This should be maybe extended for KDE4 or at least get a checkbox somewhere in UI
+-#endif
++// TODO: This should be maybe extended for KDE4 or at least get a checkbox somewhere in UI
+     if( KUrl::List::canDecode( data ) )
+         ; // ok
+     else if( data->hasText() )
+@@ -944,18 +928,25 @@
+ QStringList Klipper::getClipboardHistoryMenu()
+ {
+     QStringList menu;
+-    for ( const HistoryItem* item = history()->first(); item; item = history()->next() ) {
++
++    History::iterator it = history()->youngest();
++    while (it.hasNext()) {
++        const HistoryItem *item = it.next();
+         menu << item->text();
+     }
++
+     return menu;
+ }
+ 
+ QString Klipper::getClipboardHistoryItem(int i)
+ {
+-    for ( const HistoryItem* item = history()->first(); item; item = history()->next() , i-- ) {
++    History::iterator it = history()->youngest();
++    while (it.hasNext()) {
++        const HistoryItem *item = it.next();
+         if ( i == 0 ) {
+             return item->text();
+         }
++        i--;
+     }
+     return QString();
+ 
+--- a/klipper/klipper.h
++++ b/klipper/klipper.h
+@@ -18,24 +18,20 @@
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+ */
+-#ifndef _KLIPPER_H_
+-#define _KLIPPER_H_
++#ifndef KLIPPER_H
++#define KLIPPER_H
+ 
+-#include <kapplication.h>
+-#include <kglobalaccel.h>
+-#include <kmenu.h>
+-#include <QMap>
+-#include <QPixmap>
+-//Added by qt3to4:
+-#include <QMouseEvent>
+-#include <QPaintEvent>
++#include <QKeyEvent>
++#include <QMenu>
+ #include <QTimer>
+-#include <kglobal.h>
+-#include <kconfig.h>
++
++#include <KApplication>
++#include <KIcon>
+ 
+ class QClipboard;
+ class KToggleAction;
+ class KAboutData;
++class KActionCollection;
+ class URLGrabber;
+ class ClipboardPoll;
+ class QTime;
+@@ -62,8 +58,6 @@
+     Klipper(QObject *parent, const KSharedConfigPtr &config);
+     ~Klipper();
+ 
+-    KGlobalAccel *globalKeys;
+-
+     /**
+      * Get clipboard history (the "document")
+      */
+@@ -207,6 +201,7 @@
+ 
+     bool blockFetchingNewData();
+     KlipperSessionManager* session_managed;
++    KActionCollection *collection;
+ };
+ 
+ #endif
+--- a/klipper/historyitem.cpp
++++ b/klipper/historyitem.cpp
+@@ -17,14 +17,11 @@
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+ */
+-#include <QtGui/QMacMime>
+-#include <Qt3Support/Q3ColorDrag>
+ #include <QMap>
+ 
+ #include <QPixmap>
+ 
+ #include <kdebug.h>
+-#include <k3urldrag.h>
+ 
+ #include "historyitem.h"
+ #include "historystringitem.h"
+--- a/klipper/klipperrc.desktop
++++ b/klipper/klipperrc.desktop
+@@ -676,7 +676,7 @@
+ Description[en_GB]=Launch &Mutt
+ Description[eo]=Lanĉi poŝtilon "&Mutt"
+ Description[es]=Iniciar &mutt
+-Description[et]=&Mutt'i käivitamine
++Description[et]=&Mutti käivitamine
+ Description[eu]=Abiarazi &mutt 
+ Description[fa]=راه‌اندازی &mutt‌
+ Description[fi]=Käynistä &Mutt
+@@ -759,7 +759,7 @@
+ Description[ka]=ტექსტური ფაილი
+ Description[kk]=Мәтін файлы
+ Description[km]=ឯកសារ​អត្ថបទ
+-Description[lt]=Tekstinė byla
++Description[lt]=Teksto failas
+ Description[lv]=Teksta Fails
+ Description[mk]=Текстуална датотека
+ Description[ms]=Fail Teks
+@@ -895,7 +895,7 @@
+ Description[ja]=KWrite を起動(&W)
+ Description[ka]=K&Write-ის გაშვება
+ Description[kk]=K&Write-ты жегу
+-Description[km]=ចាប់ផ្ដើម  KWrite
++Description[km]=ចាប់ផ្ដើម KWrite
+ Description[lt]=Paleisti K&Write
+ Description[lv]=Palaist K&Write
+ Description[mk]=Стартувај K&Write
+@@ -961,7 +961,7 @@
+ Description[ka]=ბმული ლოკალურ ფაილზე
+ Description[kk]=Жергілікті файлдың URL
+ Description[km]=URL ឯកសារ​មូលដ្ឋាន
+-Description[lt]=Vietinės bylos URL
++Description[lt]=Vietinio failo URL
+ Description[lv]=Lokāla faila URL
+ Description[mk]=URL на локалната датотека
+ Description[ms]=URL fail setempat
+@@ -1098,7 +1098,7 @@
+ Description[ka]=&ფაილის გაგზავნა
+ Description[kk]=&Файлды жіберу
+ Description[km]=ផ្ញើ​ឯកសារ
+-Description[lt]=Siųsti &bylą
++Description[lt]=Siųsti &failą
+ Description[lv]=Sūtīt &Failu
+ Description[mk]=Испрати &датотека
+ Description[ms]=Hantar &Fail
+@@ -1145,7 +1145,7 @@
+ Description[de]=Gopher-Adresse (URL)
+ Description[eo]=Gofer-URL
+ Description[es]=URL de Gopher
+-Description[et]=Gopher'i URL
++Description[et]=Gopheri URL
+ Description[eu]=Gopher URLa
+ Description[fa]=نشانی وب گوفر
+ Description[fr]=URL Gopher
+@@ -1285,7 +1285,7 @@
+ Description[ka]=&ფაილის გაგზავნა
+ Description[kk]=&Файлды жіберу
+ Description[km]=ផ្ញើ​ឯកសារ
+-Description[lt]=Siųsti &bylą
++Description[lt]=Siųsti &failą
+ Description[lv]=Sūtīt &Failu
+ Description[mk]=Испрати &датотека
+ Description[ms]=Hantar &Fail
+@@ -1680,7 +1680,7 @@
+ Description[ka]=&ფაილის გაგზავნა
+ Description[kk]=&Файлды жіберу
+ Description[km]=ផ្ញើ​ឯកសារ
+-Description[lt]=Siųsti &bylą
++Description[lt]=Siųsti &failą
+ Description[lv]=Sūtīt &Failu
+ Description[mk]=Испрати &датотека
+ Description[ms]=Hantar &Fail
+@@ -1717,7 +1717,7 @@
+ 
+ [General]
+ KeepClipboardContents=true
+-No Actions for WM_CLASS=Navigator,navigator:browser,konqueror,keditbookmarks,mozilla-bin,Mozilla,Opera main window,opera,gnumeric,Gnumeric,Galeon,kcontrol,ksirc,MozillaFirebird-bin,firefox-bin,Firefox-bin,klipper,Gecko
++No Actions for WM_CLASS=Navigator,navigator:browser,konqueror,keditbookmarks,mozilla-bin,Mozilla,Opera main window,opera,gnumeric,Gnumeric,Galeon,kcontrol,ksirc,MozillaFirebird-bin,firefox-bin,Firefox-bin,klipper,Gecko,gecko
+ Number of Actions=7
+ PopupAtMousePosition=false
+ URLGrabberEnabled=false
+--- a/klipper/historyimageitem.cpp
++++ b/klipper/historyimageitem.cpp
+@@ -18,9 +18,7 @@
+    Boston, MA 02110-1301, USA.
+ */
+ 
+-
+-//Added by qt3to4:
+-#include <QPixmap>
++#include <QMimeData>
+ 
+ #include <kdebug.h>
+ 
+--- a/klipper/configdialog.cpp
++++ b/klipper/configdialog.cpp
+@@ -19,53 +19,36 @@
+ */
+ #include <QLabel>
+ #include <QLayout>
+-#include <Qt3Support/Q3CheckListItem>
+ #include <QPushButton>
++#include <QHeaderView>
+ 
+-
+-//Added by qt3to4:
+-#include <QPixmap>
+-#include <QFrame>
+-#include <Q3VButtonGroup>
+-
+-#include <assert.h>
+-
+-#include <kiconloader.h>
+ #include <klocale.h>
+ #include <kmenu.h>
+-#include <kwindowsystem.h>
+-#include <kregexpeditorinterface.h>
+ #include <kshortcutsdialog.h>
+-#include <kparts/componentfactory.h>
+-#include <kvbox.h>
+-#include <khbox.h>
++#include <KServiceTypeTrader>
+ 
+ #include "configdialog.h"
+ 
+-ConfigDialog::ConfigDialog( const ActionList *list, KGlobalAccel *accel,
+-                            bool isApplet )
+-    : KPageDialog()
+-{
+-    setFaceType( Tabbed );
+-    setCaption( i18n("Configure") );
+-    setButtons( Ok | Cancel | Help );
+-
++ConfigDialog::ConfigDialog(QWidget *parent, KConfigSkeleton *skeleton, const ActionList *list, KActionCollection *collection,
++                           bool isApplet)
++    : KConfigDialog(parent, "preferences", skeleton)
++{
+     if ( isApplet )
+         setHelp( QString(), "klipper" );
+ 
+-    KVBox *w = 0L; // the parent for the widgets
++    QWidget *w = 0; // the parent for the widgets
+ 
+-    w = new KVBox( this );
+-    generalWidget = new GeneralWidget( w, "general widget" );
+-    addPage( w, i18n("&General") );
+-
+-    w = new KVBox( this );
+-    actionWidget = new ActionWidget( list, this, w, "actions widget" );
+-    addPage( w, i18n("Ac&tions") );
+-
+-    w = new KVBox( this );
+-    shortcutsWidget = new KShortcutsEditor( w, KShortcutsEditor::GlobalAction );
+-    addPage( w, i18n("&Shortcuts") );
++    w = new QWidget(this);
++    generalWidget = new GeneralWidget(w);
++    addPage(generalWidget, i18nc("General Config", "General"), "klipper", i18n("General Config"));
++
++    w = new QWidget(this);
++    actionWidget = new ActionWidget(list, w);
++    addPage(actionWidget, i18nc("Actions Config", "Actions"), "configure", i18n("Actions Config"));
++
++    w = new QWidget(this);
++    shortcutsWidget = new KShortcutsEditor( collection, w, KShortcutsEditor::GlobalAction );
++    addPage(shortcutsWidget, i18nc("Shortcuts Config", "Shortcuts"), "configure-shortcuts", i18n("Shortcuts Config"));
+ }
+ 
+ 
+@@ -73,112 +56,86 @@
+ {
+ }
+ 
+-// prevent huge size due to long regexps in the action-widget
+-void ConfigDialog::showEvent( QShowEvent *event )
+-{
+-    QSize s1 = sizeHint();
+-    QSize s2 = KWindowSystem::workArea().size();
+-    int w = s1.width();
+-    int h = s1.height();
+-
+-    if ( s1.width() >= s2.width() )
+-        w = s2.width();
+-    if ( s1.height() >= s2.height() )
+-        h = s2.height();
+-
+-    resize( w, h );
+-
+-    KDialog::showEvent( event );
+-}
+-
+ void ConfigDialog::commitShortcuts()
+ {
+     //keysWidget->commitChanges();
+ }
+ 
+-/////////////////////////////////////////
+-////
++GeneralWidget::GeneralWidget( QWidget *parent )
++    : QWidget( parent )
++{
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ 
++    cbMousePos = new QCheckBox(i18n("&Popup menu at mouse-cursor position"), this);
++    mainLayout->addWidget(cbMousePos);
+ 
+-GeneralWidget::GeneralWidget( QWidget *parent, const char *name )
+-    : KVBox( parent )
+-{
+-    setObjectName(name);
+-    setSpacing(KDialog::spacingHint());
+-
+-    cbMousePos = new QCheckBox( i18n("&Popup menu at mouse-cursor position"),
+-                                this );
+-    cbSaveContents = new QCheckBox( i18n("Save clipboard contents on e&xit"),
+-                                    this );
+-    cbStripWhitespace = new QCheckBox( i18n("Remove whitespace when executing actions"), this );
+-    cbStripWhitespace->setWhatsThis(
+-                     i18n("Sometimes, the selected text has some whitespace at the end, which, if loaded as URL in a browser would cause an error. Enabling this option removes any whitespace at the beginning or end of the selected string (the original clipboard contents will not be modified).") );
+-
+-    cbReplayAIH = new QCheckBox( i18n("&Replay actions on an item selected from history"),
+-                                    this );
+-
+-    cbNoNull = new QCheckBox( i18n("Pre&vent empty clipboard"), this );
+-    cbNoNull->setWhatsThis(
+-                     i18n("Selecting this option has the effect, that the "
+-                          "clipboard can never be emptied. E.g. when an "
+-                          "application exits, the clipboard would usually be "
+-                          "emptied.") );
+-
+-    cbIgnoreSelection = new QCheckBox( i18n("&Ignore selection"), this );
+-    cbIgnoreSelection->setWhatsThis(
+-                     i18n("This option prevents the selection being recorded "
+-                          "in the clipboard history. Only explicit clipboard "
+-                          "changes are recorded.") );
+-
+-    Q3VButtonGroup *group = new Q3VButtonGroup( i18n("Clipboard/Selection Behavior"), this );
+-    group->setExclusive( true );
+-
+-    group->setWhatsThis(
+-     i18n("<qt>There are two different clipboard buffers available:<br /><br />"
+-          "<b>Clipboard</b> is filled by selecting something "
+-          "and pressing Ctrl+C, or by clicking \"Copy\" in a toolbar or "
+-          "menubar.<br /><br />"
+-          "<b>Selection</b> is available immediately after "
+-          "selecting some text. The only way to access the selection "
+-          "is to press the middle mouse button.<br /><br />"
+-          "You can configure the relationship between Clipboard and Selection."
+-          "</qt>" ));
+-
+-    cbSynchronize = new QRadioButton(
+-        i18n("Sy&nchronize contents of the clipboard and the selection"),
+-        group );
+-    cbSynchronize->setWhatsThis(
+-      i18n("Selecting this option synchronizes these two buffers, so they "
+-           "work the same way as in KDE 1.x and 2.x.") );
+-
+-    cbSeparate = new QRadioButton(
+-        i18n("Separate clipboard and selection"), group );
+-    cbSeparate->setWhatsThis(
+-        i18n("Using this option will only set the selection when highlighting "
+-             "something and the clipboard when choosing e.g. \"Copy\" "
+-             "in a menubar.") );
+-
+-    cbSeparate->setChecked( !cbSynchronize->isChecked() );
+-
+-    popupTimeout = new KIntNumInput( this );
+-    popupTimeout->setLabel( i18n( "Tim&eout for action popups:" ) );
+-    popupTimeout->setRange( 0, 200, 1, true );
+-    popupTimeout->setSuffix( i18n( " sec" ) );
+-    popupTimeout->setToolTip( i18n("A value of 0 disables the timeout") );
+-
+-    maxItems = new KIntNumInput( this );
+-    maxItems->setLabel(  i18n( "C&lipboard history size:" ) );
+-    maxItems->setRange( 2, 2048, 1, true );
+-    connect( maxItems, SIGNAL( valueChanged( int )),
+-             SLOT( historySizeChanged( int ) ));
++    cbSaveContents = new QCheckBox(i18n("Save clipboard contents on e&xit"), this);
++    mainLayout->addWidget(cbSaveContents);
++
++    cbStripWhitespace = new QCheckBox(i18n("Remove whitespace when executing actions"), this);
++    cbStripWhitespace->setWhatsThis(i18n("Sometimes, the selected text has some whitespace at the end, which, "
++                                         "if loaded as URL in a browser would cause an error. Enabling this option "
++                                         "removes any whitespace at the beginning or end of the selected string (the original "
++                                         "clipboard contents will not be modified)."));
++    mainLayout->addWidget(cbStripWhitespace);
++
++    cbReplayAIH = new QCheckBox(i18n("&Replay actions on an item selected from history"), this);
++    mainLayout->addWidget(cbReplayAIH);
++
++    cbNoNull = new QCheckBox(i18n("Pre&vent empty clipboard"), this);
++    cbNoNull->setWhatsThis(i18n("Selecting this option has the effect, that the "
++                                "clipboard can never be emptied. E.g. when an application "
++                                "exits, the clipboard would usually be emptied."));
++    mainLayout->addWidget(cbNoNull);
++
++    cbIgnoreSelection = new QCheckBox(i18n("&Ignore selection"), this);
++    cbIgnoreSelection->setWhatsThis(i18n("This option prevents the selection being recorded "
++                                         "in the clipboard history. Only explicit clipboard "
++                                         "changes are recorded."));
++    mainLayout->addWidget(cbIgnoreSelection);
++
++    QGroupBox *group = new QGroupBox(i18n("Clipboard/Selection Behavior"), this);
++    group->setWhatsThis(i18n("<qt>There are two different clipboard buffers available:<br /><br />"
++                             "<b>Clipboard</b> is filled by selecting something "
++                             "and pressing Ctrl+C, or by clicking \"Copy\" in a toolbar or "
++                             "menubar.<br /><br />"
++                             "<b>Selection</b> is available immediately after "
++                             "selecting some text. The only way to access the selection "
++                             "is to press the middle mouse button.<br /><br />"
++                             "You can configure the relationship between Clipboard and Selection."
++                             "</qt>"));
++    mainLayout->addWidget(group);
++
++    QVBoxLayout *groupLayout = new QVBoxLayout(group);
++
++    cbSynchronize = new QRadioButton(i18n("Sy&nchronize contents of the clipboard and the selection"), group);
++    cbSynchronize->setWhatsThis(i18n("Selecting this option synchronizes these two buffers."));
++    connect(cbSynchronize, SIGNAL(clicked()), SLOT(slotClipConfigChanged()));
++    groupLayout->addWidget(cbSynchronize);
++
++    cbSeparate = new QRadioButton(i18n("Separate clipboard and selection"), group);
++    cbSeparate->setWhatsThis(i18n("Using this option will only set the selection when highlighting "
++                                  "something and the clipboard when choosing e.g. \"Copy\" "
++                                  "in a menubar."));
++    connect(cbSeparate, SIGNAL(clicked()), SLOT(slotClipConfigChanged()));
++    groupLayout->addWidget(cbSeparate);
++
++    cbSeparate->setChecked(!cbSynchronize->isChecked());
++
++    popupTimeout = new KIntNumInput(this);
++    popupTimeout->setLabel(i18n("Tim&eout for action popups:"));
++    popupTimeout->setRange(0, 200);
++    popupTimeout->setSuffix(i18n(" sec"));
++    popupTimeout->setToolTip(i18n("A value of 0 disables the timeout"));
++    mainLayout->addWidget(popupTimeout);
++
++    maxItems = new KIntNumInput(this);
++    maxItems->setLabel(i18n("C&lipboard history size:"));
++    maxItems->setRange(2, 2048);
++    connect(maxItems, SIGNAL(valueChanged(int)), SLOT(historySizeChanged(int)));
++    mainLayout->addWidget(maxItems);
+ 
+-    connect( group, SIGNAL( clicked( int )),
+-             SLOT( slotClipConfigChanged() ));
+     slotClipConfigChanged();
+-
+-    // Add some spacing at the end
+-    QWidget *dummy = new QWidget( this );
+-    setStretchFactor( dummy, 1 );
+ }
+ 
+ GeneralWidget::~GeneralWidget()
+@@ -197,9 +154,10 @@
+     cbIgnoreSelection->setEnabled( !cbSynchronize->isChecked() );
+ }
+ 
+-/////////////////////////////////////////
+-////
+-
++// it does not make sense to port / enable this since KRegExpEditor is in a very bad shape. just keep this
++// code here because it will probably help at a later point to port it when KRegExpEditor is again usable.
++// 2007-10-20, uwolfer
++#if 0
+ void ListView::rename( Q3ListViewItem* item, int c )
+ {
+   bool gui = false;
+@@ -215,7 +173,7 @@
+       _regExpEditor = KServiceTypeTrader::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor", QString(), this );
+     KRegExpEditorInterface *iface = qobject_cast<KRegExpEditorInterface *>(_regExpEditor);
+ 
+-    assert( iface );
++    Q_ASSERT( iface );
+     iface->setRegExp( item->text( 0 ) );
+ 
+     bool ok = _regExpEditor->exec();
+@@ -225,134 +183,132 @@
+   else
+     K3ListView::rename( item ,c );
+ }
++#endif
++
++ActionWidget::ActionWidget( const ActionList *list, QWidget *parent )
++    : QWidget(parent),
++      advancedWidget(0)
++{
++    Q_ASSERT(list);
++
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
++
++    QLabel *lblAction = new QLabel(i18n("Action &list (right click to add/remove commands):"), this);
++    mainLayout->addWidget(lblAction);
++
++    treeWidget = new QTreeWidget(this);
++    lblAction->setBuddy(treeWidget);
+ 
++    treeWidget->setHeaderLabels(QStringList() << i18n("Regular Expression") << i18n("Description"));
++    treeWidget->header()->resizeSection(0, 250);
++    treeWidget->setSelectionBehavior(QTreeWidget::SelectRows);
++    treeWidget->setSelectionMode(QTreeWidget::SingleSelection);
+ 
+-ActionWidget::ActionWidget( const ActionList *list, ConfigDialog* configWidget, QWidget *parent,
+-                            const char *name )
+-    : KVBox( parent ),
+-      advancedWidget( 0L )
+-{
+-    setObjectName(name);
+-
+-    Q_ASSERT( list != 0L );
+-
+-    QLabel *lblAction = new QLabel(
+-	  i18n("Action &list (right click to add/remove commands):"), this );
+-
+-    listView = new ListView( configWidget, this );
+-    lblAction->setBuddy( listView );
+-    listView->addColumn( i18n("Regular Expression (see http://doc.trolltech.com/qregexp.html#details)") );
+-    listView->addColumn( i18n("Description") );
+-
+-    listView->setRenameable(0);
+-    listView->setRenameable(1);
+-    listView->setItemsRenameable( true );
+-    listView->setItemsMovable( false );
+-//     listView->setAcceptDrops( true );
+-//     listView->setDropVisualizer( true );
+-//     listView->setDragEnabled( true );
+-
+-    listView->setRootIsDecorated( true );
+-    listView->setMultiSelection( false );
+-    listView->setAllColumnsShowFocus( true );
+-    listView->setSelectionMode( Q3ListView::Single );
+-    connect( listView, SIGNAL(executed( Q3ListViewItem*, const QPoint&, int )),
+-             SLOT( slotItemChanged( Q3ListViewItem*, const QPoint& , int ) ));
+-    connect( listView, SIGNAL( selectionChanged ( Q3ListViewItem * )),
+-             SLOT(selectionChanged ( Q3ListViewItem * )));
+-    connect(listView,
+-            SIGNAL(contextMenu(K3ListView *, Q3ListViewItem *, const QPoint&)),
+-            SLOT( slotContextMenu(K3ListView*, Q3ListViewItem*, const QPoint&)));
++    mainLayout->addWidget(treeWidget);
+ 
+     ClipAction *action   = 0L;
+     ClipCommand *command = 0L;
+-    Q3ListViewItem *item  = 0L;
+-    Q3ListViewItem *child = 0L;
+-    Q3ListViewItem *after = 0L; // QListView's default inserting really sucks
++
+     ActionListIterator it( *list );
+ 
+-    const QPixmap& doc = SmallIcon( "misc" );
+-    const QPixmap& exec = SmallIcon( "exec" );
++    while (it.hasNext()) {
++        action = it.next();
+ 
+-    for ( action = it.current(); action; action = ++it ) {
+-        item = new Q3ListViewItem( listView, after,
+-                                  action->regExp(), action->description() );
+-        item->setPixmap( 0, doc );
+-
+-        Q3PtrListIterator<ClipCommand> it2( action->commands() );
+-        for ( command = it2.current(); command; command = ++it2 ) {
+-            child = new Q3ListViewItem( item, after,
+-                                       command->command, command->description);
+-        if ( command->pixmap.isEmpty() )
+-            child->setPixmap( 0, exec );
+-        else
+-            child->setPixmap( 0, SmallIcon( command->pixmap ) );
+-            after = child;
++        QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget,
++                                                    QStringList() << action->regExp() << action->description());
++        item->setIcon(0, KIcon("bookmark"));
++        item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
++
++        QListIterator<ClipCommand*> it2( action->commands() );
++        while (it2.hasNext()) {
++            command = it2.next();
++
++            QTreeWidgetItem *child = new QTreeWidgetItem(item, QStringList()
++                                                         << command->command << command->description);
++            child->setIcon(0, KIcon(command->pixmap.isEmpty() ? "exec" : command->pixmap));
++            child->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
+         }
+-        after = item;
+     }
+ 
+-    listView->setSorting( -1 ); // newly inserted items just append unsorted
++    connect(treeWidget, SIGNAL(itemSelectionChanged()), SLOT(selectionChanged()));
++
++    treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
++    connect(treeWidget, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(slotContextMenu(const QPoint &)));
++
++    connect(treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), SLOT(slotItemChanged(QTreeWidgetItem*, int)));
+ 
+-    cbUseGUIRegExpEditor = new QCheckBox( i18n("&Use graphical editor for editing regular expressions" ), this );
+-    if ( KServiceTypeTrader::self()->query("KRegExpEditor/KRegExpEditor").isEmpty() )
++    treeWidget->setSortingEnabled(false);
++
++    cbUseGUIRegExpEditor = new QCheckBox(i18n("&Use graphical editor for editing regular expressions" ), this);
++    if ( /*KServiceTypeTrader::self()->query("KRegExpEditor/KRegExpEditor").isEmpty()*/ true) // see notice above about KRegExpEditor
+     {
+-	cbUseGUIRegExpEditor->hide();
+-	cbUseGUIRegExpEditor->setChecked( false );
++        cbUseGUIRegExpEditor->hide();
++        cbUseGUIRegExpEditor->setChecked( false );
+     }
++    mainLayout->addWidget(cbUseGUIRegExpEditor);
++
++    QHBoxLayout *buttonLayout = new QHBoxLayout;
++    mainLayout->addLayout(buttonLayout);
+ 
+-    KHBox *box = new KHBox( this );
+-    box->setSpacing( KDialog::spacingHint() );
+-    QPushButton *button = new QPushButton( i18n("&Add Action"), box );
+-    connect( button, SIGNAL( clicked() ), SLOT( slotAddAction() ));
+-
+-    delActionButton = new QPushButton( i18n("&Delete Action"), box );
+-    connect( delActionButton, SIGNAL( clicked() ), SLOT( slotDeleteAction() ));
+-
+-    QLabel *label = new QLabel(i18n("Click on a highlighted item's column to change it. \"%s\" in a command will be replaced with the clipboard contents."), box);
+-    label->setAlignment( Qt::TextWordWrap | Qt::AlignLeft | Qt::AlignVCenter );
+-
+-    box->setStretchFactor( label, 5 );
+-
+-    box = new KHBox( this );
+-    QPushButton *advanced = new QPushButton( i18n("Advanced..."), box );
+-    advanced->setFixedSize( advanced->sizeHint() );
+-    connect( advanced, SIGNAL( clicked() ), SLOT( slotAdvanced() ));
+-    (void) new QWidget( box ); // spacer
++    QPushButton *button = new QPushButton(KIcon("edit-add"), i18n("&Add Action"), this);
++    connect(button, SIGNAL(clicked()), SLOT(slotAddAction()));
++    buttonLayout->addWidget(button);
++
++    delActionButton = new QPushButton(KIcon("edit-delete"), i18n("&Delete Action"), this);
++    connect(delActionButton, SIGNAL(clicked()), SLOT(slotDeleteAction()));
++    buttonLayout->addWidget(delActionButton);
++
++    buttonLayout->addStretch();
++
++    QPushButton *advanced = new QPushButton(KIcon("configure"), i18n("Advanced..."), this);
++    connect(advanced, SIGNAL(clicked()), SLOT(slotAdvanced()));
++    buttonLayout->addWidget(advanced);
++
++    QLabel *label = new QLabel(i18n("Click on a highlighted item's column to change it. \"%s\" in a "
++                                    "command will be replaced with the clipboard contents."), this);
++    label->setWordWrap(true);
++    mainLayout->addWidget(label);
++
++    QLabel *labelRegexp = new QLabel(i18n("For more information about regular expressions, you could have a look at the "
++                                          "<a href=\"http://en.wikipedia.org/wiki/Regular_expression\">Wikipedia entry "
++                                          "about this topic</a>."), this);
++    labelRegexp->setOpenExternalLinks(true);
++    labelRegexp->setWordWrap(true);
++    mainLayout->addWidget(labelRegexp);
+ 
+-    delActionButton->setEnabled(listView->currentItem () !=0);
++    delActionButton->setEnabled(treeWidget->currentItem());
+ }
+ 
+ ActionWidget::~ActionWidget()
+ {
+ }
+ 
+-void ActionWidget::selectionChanged ( Q3ListViewItem * item)
++void ActionWidget::selectionChanged()
+ {
+-    delActionButton->setEnabled(item!=0);
++    delActionButton->setEnabled(!treeWidget->selectedItems().isEmpty());
+ }
+ 
+-void ActionWidget::slotContextMenu( K3ListView *, Q3ListViewItem *item,
+-                                    const QPoint& pos )
++void ActionWidget::slotContextMenu(const QPoint& pos)
+ {
++    QTreeWidgetItem *item = treeWidget->itemAt(pos);
+     if ( !item )
+         return;
+ 
+     KMenu *menu = new KMenu;
+-    QAction* addCmd = menu->addAction( i18n("Add Command") );
+-    QAction* rmCmd = menu->addAction( i18n("Remove Command") );
++    QAction *addCmd = menu->addAction(KIcon("edit-add"), i18n("Add Command"));
++    QAction *rmCmd = menu->addAction(KIcon("edit-delete"), i18n("Remove Command"));
+     if ( !item->parent() ) {// no "command" item
+         rmCmd->setEnabled( false );
+-        item->setOpen( true );
++        item->setExpanded ( true );
+     }
+ 
+-    QAction* executed = menu->exec( pos );
++    QAction *executed = menu->exec(mapToGlobal(pos));
+     if ( executed == addCmd ) {
+-        Q3ListViewItem *p = item->parent() ? item->parent() : item;
+-        Q3ListViewItem *cmdItem = new Q3ListViewItem( p, item,
+-                         i18n("Click here to set the command to be executed"),
+-                         i18n("<new command>") );
+-        cmdItem->setPixmap( 0, SmallIcon( "exec" ) );
++        QTreeWidgetItem *child = new QTreeWidgetItem(item->parent() ? item->parent() : item, QStringList()
++                                                     << i18n("Double-click here to set the command to be executed")
++                                                     << i18n("<new command>"));
++        child->setIcon(0, KIcon("exec"));
++        child->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
+     }
+     else if ( executed == rmCmd )
+         delete item;
+@@ -360,27 +316,30 @@
+     delete menu;
+ }
+ 
+-void ActionWidget::slotItemChanged( Q3ListViewItem *item, const QPoint&, int col )
++void ActionWidget::slotItemChanged(QTreeWidgetItem *item, int column)
+ {
+-    if ( !item->parent() || col != 0 )
++    if (!item->parent() || column != 0)
+         return;
+     ClipCommand command( item->text(0), item->text(1) );
+-        item->setPixmap( 0, SmallIcon( command.pixmap.isEmpty() ?
+-                                                   "exec" : command.pixmap ) );
++
++    treeWidget->blockSignals(true); // don't lead in infinite recursion...
++    item->setIcon(0, KIcon(command.pixmap.isEmpty() ? "exec" : command.pixmap));
++    treeWidget->blockSignals(false);
+ }
+ 
+ void ActionWidget::slotAddAction()
+ {
+-    Q3ListViewItem *item = new Q3ListViewItem( listView );
+-    item->setPixmap( 0, SmallIcon( "misc" ));
+-    item->setText( 0, i18n("Click here to set the regexp"));
+-    item->setText( 1, i18n("<new action>"));
++    QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget,
++                                                QStringList() << i18n("Double-click here to set the regexp")
++                                                              << i18n("<new action>"));
++    item->setIcon(0, KIcon("bookmark"));
++    item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
+ }
+ 
+ 
+ void ActionWidget::slotDeleteAction()
+ {
+-    Q3ListViewItem *item = listView->currentItem();
++    QTreeWidgetItem *item = treeWidget->currentItem();
+     if ( item && item->parent() )
+         item = item->parent();
+     delete item;
+@@ -389,64 +348,61 @@
+ 
+ ActionList * ActionWidget::actionList()
+ {
+-    Q3ListViewItem *item = listView->firstChild();
+-    Q3ListViewItem *child = 0L;
+-    ClipAction *action = 0L;
++    ClipAction *action = 0;
+     ActionList *list = new ActionList;
+-    list->setAutoDelete( true );
+-    while ( item ) {
+-        action = new ClipAction( item->text( 0 ), item->text( 1 ) );
+-        child = item->firstChild();
+-
+-        // add the commands
+-        while ( child ) {
+-            action->addCommand( child->text( 0 ), child->text( 1 ), true );
+-            child = child->nextSibling();
+-        }
+ 
+-        list->append( action );
+-        item = item->nextSibling();
++    QTreeWidgetItemIterator it(treeWidget);
++    while (*it) {
++        if (!(*it)->parent()) {
++            if (action) {
++                list->append(action);
++                action = 0;
++            }
++            action = new ClipAction((*it)->text(0), (*it)->text(1));
++        } else {
++            action->addCommand((*it)->text(0), (*it)->text(1), true);
++        }
++        it++;
+     }
++    if (action)
++        list->append(action);
+ 
+     return list;
+ }
+ 
+ void ActionWidget::slotAdvanced()
+ {
+-    KDialog dlg( 0 );
+-    dlg.setModal( true );
++    KDialog dlg(this);
++    dlg.setModal(true);
+     dlg.setCaption( i18n("Advanced Settings") );
+     dlg.setButtons( KDialog::Ok | KDialog::Cancel );
+ 
+-    KVBox *box = new KVBox( &dlg );
+-    dlg.setMainWidget( box );
+-
+-    AdvancedWidget *widget = new AdvancedWidget( box );
++    AdvancedWidget *widget = new AdvancedWidget(&dlg);
+     widget->setWMClasses( m_wmClasses );
+ 
+-    dlg.resize( dlg.sizeHint().width(),
+-                dlg.sizeHint().height() +40); // or we get an ugly scrollbar :(
++    dlg.setMainWidget(widget);
+ 
+     if ( dlg.exec() == KDialog::Accepted ) {
+         m_wmClasses = widget->wmClasses();
+     }
+ }
+ 
+-AdvancedWidget::AdvancedWidget( QWidget *parent, const char *name )
+-    : KVBox( parent )
++AdvancedWidget::AdvancedWidget( QWidget *parent )
++    : QWidget(parent)
+ {
+-    setObjectName(name);
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ 
+-    editListBox = new KEditListBox( i18n("D&isable Actions for Windows of Type WM_CLASS"), this, "editlistbox", true, KEditListBox::Add | KEditListBox::Remove );
++    editListBox = new KEditListBox(i18n("D&isable Actions for Windows of Type WM_CLASS"), this, "editlistbox",
++                                   true, KEditListBox::Add | KEditListBox::Remove);
+ 
+-    editListBox->setWhatsThis(
+-          i18n("<qt>This lets you specify windows in which Klipper should "
+-	       "not invoke \"actions\". Use<br /><br />"
+-	       "<center><b>xprop | grep WM_CLASS</b></center><br />"
+-	       "in a terminal to find out the WM_CLASS of a window. "
+-	       "Next, click on the window you want to examine. The "
+-	       "first string it outputs after the equal sign is the one "
+-	       "you need to enter here.</qt>"));
++    editListBox->setWhatsThis(i18n("<qt>This lets you specify windows in which Klipper should "
++                                   "not invoke \"actions\". Use<br /><br />"
++                                   "<center><b>xprop | grep WM_CLASS</b></center><br />"
++                                   "in a terminal to find out the WM_CLASS of a window. "
++                                   "Next, click on the window you want to examine. The "
++                                   "first string it outputs after the equal sign is the one "
++                                   "you need to enter here.</qt>"));
++    mainLayout->addWidget(editListBox);
+ 
+     editListBox->setFocus();
+ }
+@@ -461,21 +417,4 @@
+     editListBox->insertStringList( items );
+ }
+ 
+-
+-
+-///////////////////////////////////////////////////////
+-//////////
+-
+-/*
+-KeysWidget::KeysWidget( KAccelActions &keyMap, QWidget *parent, const char *name)
+-    : QVBox( parent, name )
+-{
+-    keyChooser = new KKeyChooser( keyMap, this );
+-}
+-
+-KeysWidget::~KeysWidget()
+-{
+-}
+-*/
+-
+ #include "configdialog.moc"
+--- a/klipper/urlgrabber.cpp
++++ b/klipper/urlgrabber.cpp
+@@ -18,13 +18,12 @@
+    Boston, MA 02110-1301, USA.
+ */
+ 
+-#include <cstdlib>
++#include <netwm.h>
+ 
+-#include <QCursor>
+-#include <QHash>
+ #include <QTimer>
++#include <QX11Info>
++#include <QUuid>
+ 
+-#include <kapplication.h>
+ #include <kconfig.h>
+ #include <kdialog.h>
+ #include <ktextedit.h>
+@@ -32,23 +31,15 @@
+ #include <kmenu.h>
+ #include <kprocess.h>
+ #include <kservice.h>
+-#include <kiconloader.h>
+ #include <kdebug.h>
+-#include <netwm.h>
+ #include <kstringhandler.h>
+ #include <kmacroexpander.h>
++#include <kglobal.h>
+ 
+ #include "urlgrabber.h"
+-#include <QX11Info>
+-#include <kglobal.h>
+ 
+ // TODO:
+ // - script-interface?
+-// - Bug in KMenu::clear() (insertTitle() doesn't go away sometimes)
+-
+-#define URL_EDIT_ITEM 10
+-#define DO_NOTHING_ITEM 11
+-#define DISABLE_POPUP 12
+ 
+ URLGrabber::URLGrabber(const KSharedConfigPtr &config)
+  : m_config( config )
+@@ -62,8 +53,6 @@
+     m_trimmed = true;
+ 
+     myActions = new ActionList();
+-    myActions->setAutoDelete( true );
+-    myMatches.setAutoDelete( false );
+ 
+     readConfiguration( m_config.data() );
+ 
+@@ -94,7 +83,10 @@
+ 
+ URLGrabber::~URLGrabber()
+ {
++    if (myMenu)
++        delete myMenu;
+     delete myActions;
++    qDeleteAll(myMatches);
+ }
+ 
+ //
+@@ -104,7 +96,7 @@
+ void URLGrabber::invokeAction( const QString& clip )
+ {
+     if ( !clip.isEmpty() )
+-	myClipData = clip;
++        myClipData = clip;
+     if ( m_trimmed )
+         myClipData = myClipData.trimmed();
+ 
+@@ -123,8 +115,10 @@
+ {
+     myMatches.clear();
+     ClipAction *action = 0L;
++
+     ActionListIterator it( *myActions );
+-    for ( action = it.current(); action; action = ++it ) {
++    while (it.hasNext()) {
++        action = it.next();
+         if ( action->matches( clipData ) )
+             myMatches.append( action );
+     }
+@@ -159,8 +153,8 @@
+     ClipAction *action = 0L;
+     ClipCommand *command = 0L;
+ 
+-    if ( it.count() > 0 ) {
+-	// don't react on konqi's/netscape's urls...
++    if (it.hasNext()) {
++        // don't react on konqi's/netscape's urls...
+         if ( wm_class_check && isAvoidedWindow() )
+             return;
+ 
+@@ -168,28 +162,34 @@
+         myCommandMapper.clear();
+ 
+         myPopupKillTimer->stop();
+-        delete myMenu;
++
+         myMenu = new KMenu;
+-        connect( myMenu, SIGNAL( activated( int )),
+-                 SLOT( slotItemSelected( int )));
+ 
+-        for ( action = it.current(); action; action = ++it ) {
+-            Q3PtrListIterator<ClipCommand> it2( action->commands() );
+-            if ( it2.count() > 0 )
+-                myMenu->addTitle( SmallIcon( "klipper" ), action->description() +
+-				     i18n(" - Actions For: ") +
+-				     KStringHandler::csqueeze(myClipData, 45));
+-            for ( command = it2.current(); command; command = ++it2 ) {
++        connect(myMenu, SIGNAL(triggered(QAction*)), SLOT(slotItemSelected(QAction*)));
++
++        while (it.hasNext()) {
++            action = it.next();
++            QListIterator<ClipCommand*> it2( action->commands() );
++            if ( it2.hasNext() )
++                myMenu->addTitle(KIcon( "klipper" ), action->description() +
++                                 i18n(" - Actions For: ") +
++                                 KStringHandler::csqueeze(myClipData, 45));
++            while (it2.hasNext()) {
++                command = it2.next();
+                 item = command->description;
+                 if ( item.isEmpty() )
+                     item = command->command;
+ 
+-                int id;
+-                if ( command->pixmap.isEmpty() )
+-                    id = myMenu->insertItem( item );
+-                else
+-                    id = myMenu->insertItem( SmallIcon(command->pixmap), item);
+-                myCommandMapper.insert( id, command );
++                QString id = QUuid::createUuid().toString();
++                QAction * action = new QAction(this);
++                action->setData(id);
++                action->setText(item);
++
++                if (!command->pixmap.isEmpty())
++                    action->setIcon(KIcon(command->pixmap));
++
++                myCommandMapper.insert(id, command);
++                myMenu->addAction(action);
+             }
+         }
+ 
+@@ -198,13 +198,19 @@
+         if ( wm_class_check )
+         {
+             myMenu->addSeparator();
+-            myMenu->insertItem( i18n( "Disable This Popup" ), DISABLE_POPUP );
++            QAction *disableAction = new QAction(i18n("Disable This Popup"), this);
++            connect(disableAction, SIGNAL(triggered()), SLOT(editData()));
++            myMenu->addAction(disableAction);
+         }
+         myMenu->addSeparator();
+         // add an edit-possibility
+-        myMenu->insertItem( SmallIcon("edit"), i18n("&Edit Contents..."),
+-                            URL_EDIT_ITEM );
+-        myMenu->insertItem( KIcon("cancel"), i18n("&Cancel"), DO_NOTHING_ITEM );
++        QAction *editAction = new QAction(KIcon("edit"), i18n("&Edit Contents..."), this);
++        connect(editAction, SIGNAL(triggered()), SLOT(editData()));
++        myMenu->addAction(editAction);
++
++        QAction *cancelAction = new QAction(KIcon("dialog-cancel"), i18n("&Cancel"), this);
++        connect(cancelAction, SIGNAL(triggered()), myMenu, SLOT(hide()));
++        myMenu->addAction(cancelAction);
+ 
+         if ( myPopupKillTimeout > 0 )
+             myPopupKillTimer->start( 1000 * myPopupKillTimeout );
+@@ -214,27 +220,24 @@
+ }
+ 
+ 
+-void URLGrabber::slotItemSelected( int id )
++void URLGrabber::slotItemSelected(QAction *action)
+ {
+     myMenu->hide(); // deleted by the timer or the next action
+ 
+-    switch ( id ) {
+-    case -1:
+-    case DO_NOTHING_ITEM:
+-        break;
+-    case URL_EDIT_ITEM:
+-        editData();
+-        break;
+-    case DISABLE_POPUP:
+-	emit sigDisablePopup();
+-	break;
+-    default:
+-        ClipCommand *command = myCommandMapper.find( id );
+-        if ( !command )
+-            qWarning("Klipper: cannot find associated action");
+-        else
+-            execute( command );
++    QString id = action->data().toString();
++
++    if (id.isEmpty()) {
++        kDebug() << "Klipper: no command associated";
++        return;
+     }
++
++    QHash<QString, ClipCommand*>::iterator i = myCommandMapper.find(id);
++    ClipCommand *command = i.value();
++
++    if (command)
++        execute(command);
++    else
++        kDebug() << "Klipper: cannot find associated action";
+ }
+ 
+ 
+@@ -251,7 +254,7 @@
+         KProcess proc;
+         proc.setShellCommand(cmdLine.trimmed());
+         if (!proc.startDetached())
+-            qWarning("Klipper: Could not start process!");
++            kDebug() << "Klipper: Could not start process!";
+     }
+ }
+ 
+@@ -272,16 +275,14 @@
+     dlg->adjustSize();
+ 
+     if ( dlg->exec() == KDialog::Accepted ) {
+-        myClipData = edit->text();
+-        delete dlg;
++        myClipData = edit->toPlainText();
+         QTimer::singleShot( 0, this, SLOT( slotActionMenu() ) );
+     }
+     else
+     {
+-        delete dlg;
+-        myMenu->deleteLater();
+-        myMenu = 0L;
++        delete myMenu;
+     }
++    delete dlg;
+ }
+ 
+ 
+@@ -314,11 +315,11 @@
+ 
+     int i = 0;
+     QString group;
+-    while ( (action = it.current()) ) {
++    while (it.hasNext()) {
++        action = it.next();
+         group = QString("Action_%1").arg( i );
+         action->save( kc, group );
+         ++i;
+-        ++it;
+     }
+ }
+ 
+@@ -357,7 +358,7 @@
+                             &unused, &data_ret ) == Success) {
+         if ( type_ret == XA_STRING && format_ret == 8 && nitems_ret > 0 ) {
+             wmClass = QString::fromUtf8( (const char *) data_ret );
+-            ret = (myAvoidWindows.find( wmClass ) != myAvoidWindows.end());
++            ret = (myAvoidWindows.indexOf( wmClass ) != -1);
+         }
+ 
+         XFree( data_ret );
+@@ -380,7 +381,6 @@
+     }
+ 
+     delete myMenu;
+-    myMenu = 0L;
+ }
+ 
+ ///////////////////////////////////////////////////////////////////////////
+@@ -412,20 +412,18 @@
+ ClipAction::ClipAction( const QString& regExp, const QString& description )
+     : myRegExp( regExp ), myDescription( description )
+ {
+-    myCommands.setAutoDelete( true );
+ }
+ 
+ 
+ ClipAction::ClipAction( const ClipAction& action )
+ {
+-    myCommands.setAutoDelete( true );
+     myRegExp      = action.myRegExp;
+     myDescription = action.myDescription;
+ 
+     ClipCommand *command = 0L;
+-    Q3PtrListIterator<ClipCommand> it( myCommands );
+-    for ( ; it.current(); ++it ) {
+-        command = it.current();
++    QListIterator<ClipCommand*> it( myCommands );
++    while (it.hasNext()) {
++        command = it.next();
+         addCommand(command->command, command->description, command->isEnabled);
+     }
+ }
+@@ -437,7 +435,6 @@
+ {
+     KConfigGroup cg(kc, group);
+ 
+-    myCommands.setAutoDelete( true );
+     int num = cg.readEntry( "Number of commands", 0 );
+ 
+     // read the commands
+@@ -445,7 +442,7 @@
+         QString _group = group + "/Command_%1";
+         KConfigGroup _cg(kc, _group.arg(i));
+ 
+-        addCommand( _cg.readPathEntry( "Commandline" ),
++        addCommand( _cg.readPathEntry( "Commandline", QString() ),
+                     _cg.readEntry( "Description" ), // i18n'ed
+                     _cg.readEntry( "Enabled" , false),
+                     _cg.readEntry( "Icon") );
+@@ -455,6 +452,7 @@
+ 
+ ClipAction::~ClipAction()
+ {
++    qDeleteAll(myCommands);
+ }
+ 
+ 
+@@ -479,11 +477,12 @@
+     cg.writeEntry( "Number of commands", myCommands.count() );
+ 
+     struct ClipCommand *cmd;
+-    Q3PtrListIterator<struct ClipCommand> it( myCommands );
++    QListIterator<struct ClipCommand*> it( myCommands );
+ 
+     // now iterate over all commands of this action
+     int i = 0;
+-    while ( (cmd = it.current()) ) {
++    while (it.hasNext()) {
++        cmd = it.next();
+         QString _group = group + "/Command_%1";
+         KConfigGroup cg(kc, _group.arg(i));
+ 
+@@ -492,7 +491,6 @@
+         cg.writeEntry( "Enabled", cmd->isEnabled );
+ 
+         ++i;
+-        ++it;
+     }
+ }
+ 
+--- a/klipper/historyimageitem.h
++++ b/klipper/historyimageitem.h
+@@ -18,12 +18,10 @@
+    Boston, MA 02110-1301, USA.
+ */
+ 
+-#ifndef _HISTORYIMAGEITEM_H_
+-#define _HISTORYIMAGEITEM_H_
++#ifndef HISTORYIMAGEITEM_H
++#define HISTORYIMAGEITEM_H
+ 
+ #include "historyitem.h"
+-#include <QPixmap>
+-#include <Qt3Support/Q3ColorDrag>
+ 
+ /**
+  * A image entry in the clipboard history.
+--- a/klipper/configdialog.h
++++ b/klipper/configdialog.h
+@@ -21,33 +21,29 @@
+ #define CONFIGDIALOG_H
+ 
+ #include <QCheckBox>
+-#include <QEvent>
+-#include <Qt3Support/Q3Header>
+ #include <QRadioButton>
++#include <QTreeWidget>
+ 
+-#include <kpagedialog.h>
+ #include <keditlistbox.h>
+-#include <k3listview.h>
+ #include <knuminput.h>
+-#include <kvbox.h>
++#include <KConfigDialog>
+ 
+ #include "urlgrabber.h"
+ 
+-class KGlobalAccel;
++class KConfigSkeleton;
+ class KShortcutsEditor;
+-class K3ListView;
+ class QPushButton;
+ class QDialog;
+ class ConfigDialog;
+ 
+-class GeneralWidget : public KVBox
++class GeneralWidget : public QWidget
+ {
+     Q_OBJECT
+ 
+     friend class ConfigDialog;
+ 
+ public:
+-    GeneralWidget( QWidget *parent, const char *name );
++    GeneralWidget( QWidget *parent );
+     ~GeneralWidget();
+ 
+ private Q_SLOTS:
+@@ -64,12 +60,12 @@
+ 
+ 
+ // only for use inside ActionWidget
+-class AdvancedWidget : public KVBox
++class AdvancedWidget : public QWidget
+ {
+     Q_OBJECT
+ 
+ public:
+-    explicit AdvancedWidget( QWidget *parent = 0L, const char *name = 0L );
++    explicit AdvancedWidget( QWidget *parent = 0L );
+     ~AdvancedWidget();
+ 
+     void setWMClasses( const QStringList& items );
+@@ -79,14 +75,14 @@
+     KEditListBox *editListBox;
+ };
+ 
+-class ActionWidget : public KVBox
++class ActionWidget : public QWidget
+ {
+     Q_OBJECT
+ 
+     friend class ConfigDialog;
+ 
+ public:
+-    ActionWidget( const ActionList *list, ConfigDialog* configWidget, QWidget *parent, const char *name );
++    ActionWidget( const ActionList *list, QWidget *parent );
+     ~ActionWidget();
+ 
+     /**
+@@ -102,40 +98,25 @@
+ private Q_SLOTS:
+     void slotAddAction();
+     void slotDeleteAction();
+-    void slotItemChanged( Q3ListViewItem *, const QPoint& , int );
++    void slotItemChanged(QTreeWidgetItem *item, int column);
+     void slotAdvanced();
+-    void slotContextMenu( K3ListView *, Q3ListViewItem *, const QPoint& );
+-    void selectionChanged ( Q3ListViewItem *);
++    void slotContextMenu(const QPoint& pos);
++    void selectionChanged();
+ 
+ private:
+-    K3ListView *listView;
++    QTreeWidget *treeWidget;
+     QStringList m_wmClasses;
+     AdvancedWidget *advancedWidget;
+     QPushButton *delActionButton;
+     QCheckBox *cbUseGUIRegExpEditor;
+ };
+ 
+-/*class KeysWidget : public QVBox
+-{
+-    Q_OBJECT
+-
+-    friend class ConfigDialog;
+-
+-public:
+-    KeysWidget( KAccelActions &keyMap, QWidget *parent, const char *name );
+-    ~KeysWidget();
+-
+-private:
+-    KShortcutsEditor *shortcutsEditor;
+-};*/
+-
+-
+-class ConfigDialog : public KPageDialog
++class ConfigDialog : public KConfigDialog
+ {
+     Q_OBJECT
+ 
+ public:
+-    ConfigDialog( const ActionList *list, KGlobalAccel *accel, bool isApplet );
++    ConfigDialog( QWidget *parent, KConfigSkeleton *config, const ActionList *list, KActionCollection *collection, bool isApplet );
+     ~ConfigDialog();
+ 
+     ActionList * actionList() const { return actionWidget->actionList(); }
+@@ -221,9 +202,6 @@
+ 
+     void commitShortcuts();
+ 
+-protected:
+-    virtual void showEvent( QShowEvent *event );
+-
+ private:
+     GeneralWidget *generalWidget;
+     ActionWidget *actionWidget;
+@@ -231,33 +209,4 @@
+ 
+ };
+ 
+-class ListView : public K3ListView
+-{
+-public:
+-    ListView( ConfigDialog* configWidget, QWidget *parent )
+-	: K3ListView( parent ), _configWidget( configWidget ),
+-          _regExpEditor(0L) {}
+-    // QListView has a weird idea of a sizeHint...
+-    virtual QSize sizeHint () const {
+-	int w = minimumSizeHint().width();
+-	int h = header()->height();
+-	h += viewport()->sizeHint().height();
+-	h += horizontalScrollBar()->height();
+-	
+-	Q3ListViewItem *item = firstChild();
+-	while ( item ) {
+-	    h += item->totalHeight();
+-	    item = item->nextSibling();
+-	}
+-
+-	return QSize( w, h );
+-    }
+-
+-protected:
+-    virtual void rename( Q3ListViewItem* item, int c );
+-private:
+-    ConfigDialog* _configWidget;
+-    QDialog* _regExpEditor;
+-};
+-
+ #endif // CONFIGDIALOG_H
+--- a/klipper/klipperpopup.cpp
++++ b/klipper/klipperpopup.cpp
+@@ -19,16 +19,11 @@
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+ */
+-#include <kmessagebox.h>
++
+ #include <khelpmenu.h>
+-#include <kiconloader.h>
+ #include <klineedit.h>
+-
+ #include <klocale.h>
+-#include <kaction.h>
+-#include <kglobalsettings.h>
+ #include <kwindowsystem.h>
+-#include <kapplication.h>
+ #include <kdebug.h>
+ 
+ #include "klipperpopup.h"
+@@ -45,16 +40,16 @@
+ #ifdef DEBUG_EVENTS__
+ kdbgstream& operator<<( kdbgstream& stream, const QKeyEvent& e ) {
+     stream << "(QKeyEvent(text=" << e.text() << ",key=" << e.key() << ( e.isAccepted()?",accepted":",ignored)" ) << ",count=" << e.count();
+-    if ( e.state() & Qt::AltModifier ) {
++    if ( e.modifiers() & Qt::AltModifier ) {
+         stream << ",ALT";
+     }
+-    if ( e.state() & Qt::ControlModifier ) {
++    if ( e.modifiers() & Qt::ControlModifier ) {
+         stream << ",CTRL";
+     }
+-    if ( e.state() & Qt::MetaModifier ) {
++    if ( e.modifiers() & Qt::MetaModifier ) {
+         stream << ",META";
+     }
+-    if ( e.state() & Qt::ShiftModifier ) {
++    if ( e.modifiers() & Qt::ShiftModifier ) {
+         stream << ",SHIFT";
+     }
+     if ( e.isAutoRepeat() ) {
+@@ -73,10 +68,6 @@
+  */
+ class KLineEditBlackKey : public KLineEdit {
+ public:
+-    KLineEditBlackKey(const QString& string, QWidget* parent )
+-        : KLineEdit( string, parent )
+-        {}
+-
+     KLineEditBlackKey( QWidget* parent )
+         : KLineEdit( parent )
+         {}
+@@ -100,7 +91,7 @@
+       helpmenu( new KHelpMenu( this, Klipper::aboutData(), false ) ),
+       m_popupProxy( 0 ),
+       m_filterWidget( 0 ),
+-      m_filterWidgetId( 10 ),
++      m_filterWidgetAction( 0 ),
+       n_history_items( 0 )
+ {
+     KWindowInfo i = KWindowSystem::windowInfo( winId(), NET::WMGeometry );
+@@ -123,8 +114,7 @@
+         if ( !m_filterWidget->text().isEmpty() ) {
+             m_dirty = true;
+             m_filterWidget->clear();
+-            setItemVisible( m_filterWidgetId, false );
+-            m_filterWidget->hide();
++            m_filterWidgetAction->setVisible(false);
+         }
+     }
+     ensureClean();
+@@ -141,99 +131,82 @@
+ }
+ 
+ void KlipperPopup::buildFromScratch() {
+-    m_filterWidget = new KLineEditBlackKey( this );
+-    addTitle( SmallIcon( "klipper" ), i18n("Klipper - Clipboard Tool"));
+-#ifdef __GNUC__
+-#warning "KlipperPopup::buildFromScratch, insertItem does not take a QWidget as first parameter"
+-#endif
+-#if 0
+-    m_filterWidgetId = insertItem( m_filterWidget, m_filterWidgetId, 1 );
+-#endif
++    addTitle(KIcon("klipper"), i18n("Klipper - Clipboard Tool"));
++
++    m_filterWidget = new KLineEditBlackKey(this);
++    m_filterWidgetAction = new QWidgetAction(this);
++    m_filterWidgetAction->setDefaultWidget(m_filterWidget);
++
++    addAction(m_filterWidgetAction);
+     m_filterWidget->setFocusPolicy( Qt::NoFocus );
+-    setItemVisible( m_filterWidgetId, false );
+-    m_filterWidget->hide();
+-    QString lastGroup;
+-
+-    // Bit of a hack here. It would be better of KHelpMenu could be an action.
+-    //    Insert Help-menu at the butttom of the "default" group.
+-    QString group;
+-    QString defaultGroup( "default" );
+-    for ( QAction* action = m_actions.first(); action; action = m_actions.next() ) {
+-#ifdef __GNUC__
+-#warning no more group() in action, this hack needs to be revised
+-#endif
+-        //group = action->group();
+-        if ( group != lastGroup ) {
+-            if ( lastGroup == defaultGroup ) {
+-                insertItem( KIcon("help-contents"), KStandardGuiItem::help().text(), helpmenu->menu() );
+-            }
++    m_filterWidgetAction->setVisible(false);
++
++    QListIterator<QAction *> i(m_actions);
++    for (int i = 0; i < m_actions.count(); i++) {
++        if (i == 0)
++            addSeparator();
++
++        if (i + 1 == m_actions.count()) {
++            addMenu(helpmenu->menu())->setIcon(KIcon("help-contents"));
+             addSeparator();
+         }
+-        lastGroup = group;
+-        addAction(action);
++
++        addAction(m_actions.at(i));
+     }
+ 
+     if ( KGlobalSettings::insertTearOffHandle() ) {
+-        insertTearOffHandle();
++        setTearOffEnabled(true);
+     }
+ 
+ }
+ 
+ void KlipperPopup::rebuild( const QString& filter ) {
+-
+-    bool from_scratch = ( count() == 0 );
+-    if ( from_scratch ) {
++    if (actions().isEmpty()) {
+         buildFromScratch();
+     } else {
+         for ( int i=0; i<n_history_items; i++ ) {
+-            removeItemAt( TOP_HISTORY_ITEM_INDEX );
++            if (i < actions().count())
++                removeAction(actions().at(TOP_HISTORY_ITEM_INDEX));
+         }
+     }
+ 
+     QRegExp filterexp( filter );
+-    QPalette palette;
++    QPalette palette = m_filterWidget->palette();
+     if ( filterexp.isValid() ) {
+         palette.setColor( m_filterWidget->foregroundRole(), palette.color(foregroundRole()) );
+     } else {
+         palette.setColor( m_filterWidget->foregroundRole(), Qt::red );
+     }
+-    m_filterWidget->setPalette( palette );
+     n_history_items = m_popupProxy->buildParent( TOP_HISTORY_ITEM_INDEX, filterexp );
+-
+     if ( n_history_items == 0 ) {
+         if ( m_history->empty() ) {
+-            insertItem( QSempty, -1, TOP_HISTORY_ITEM_INDEX  );
++            insertAction(actions().at(TOP_HISTORY_ITEM_INDEX), new QAction(QSempty, this));
+         } else {
+-            insertItem( QSnomatch, -1, TOP_HISTORY_ITEM_INDEX );
++            palette.setColor( m_filterWidget->foregroundRole(), Qt::red );
++            insertAction(actions().at(TOP_HISTORY_ITEM_INDEX), new QAction(QSnomatch, this));
+         }
+         n_history_items++;
+     } else {
+         if ( history()->topIsUserSelected() ) {
+-            int id = idAt( TOP_HISTORY_ITEM_INDEX );
+-            if ( id != -1 ) {
+-                setItemChecked( id,true );
+-            }
++            actions().at(TOP_HISTORY_ITEM_INDEX)->setCheckable(true);
++            actions().at(TOP_HISTORY_ITEM_INDEX)->setChecked(true);
+         }
+     }
+-
+-
++    m_filterWidget->setPalette( palette );
+     m_dirty = false;
+-
+ }
+ 
+ void KlipperPopup::plugAction( QAction* action ) {
+-    m_actions.append( action );
++    m_actions.append(action);
+ }
+ 
+ 
+-
+-
+ /* virtual */
+ void KlipperPopup::keyPressEvent( QKeyEvent* e ) {
+     // If alt-something is pressed, select a shortcut
+     // from the menu. Do this by sending a keyPress
+     // without the alt-modifier to the superobject.
+-    if ( e->state() & Qt::AltModifier ) {
++    if ( e->modifiers() & Qt::AltModifier ) {
+         QKeyEvent ke( QEvent::KeyPress,
+                       e->key(),
+                       e->modifiers() ^ Qt::AltModifier,
+@@ -242,9 +215,9 @@
+                       e->count() );
+         KMenu::keyPressEvent( &ke );
+ #ifdef DEBUG_EVENTS__
+-        kDebug() << "Passing this event to ancestor (KMenu): " << e "->" << ke;
++        kDebug() << "Passing this event to ancestor (KMenu): " << e << "->" << ke;
+ #endif
+-        if ( ke.isAccepted() ) {
++        if (ke.isAccepted()) {
+             e->accept();
+             return;
+         } else {
+@@ -269,15 +242,10 @@
+ #ifdef DEBUG_EVENTS__
+         kDebug() << "Passing this event to ancestor (KMenu): " << e;
+ #endif
+-        KMenu::keyPressEvent( e );
+-        if ( isItemActive( m_filterWidgetId ) ) {
+-#ifdef __GNUC__
+-#warning setActiveItem do not exist in Q3PopupMenu class
+-#endif
+-#if 0
+-            setActiveItem( TOP_HISTORY_ITEM_INDEX );
+-#endif
+-        }
++        KMenu::keyPressEvent(e);
++        if (activeAction() ==  m_filterWidgetAction)
++            setActiveAction(actions().at(TOP_HISTORY_ITEM_INDEX));
++
+         break;
+     }
+     default:
+@@ -285,32 +253,25 @@
+ #ifdef DEBUG_EVENTS__
+         kDebug() << "Passing this event down to child (KLineEdit): " << e;
+ #endif
+-	QString lastString = m_filterWidget->text();
+-        QApplication::sendEvent( m_filterWidget, e );
+-        if ( m_filterWidget->text().isEmpty() ) {
+-            if ( isItemVisible( m_filterWidgetId ) )
+-            {
+-                setItemVisible( m_filterWidgetId, false );
+-                m_filterWidget->hide();
+-            }
++        setActiveAction(actions().at(actions().indexOf(m_filterWidgetAction)));
++        QString lastString = m_filterWidget->text();
++        QApplication::sendEvent(m_filterWidget, e);
++
++        if (m_filterWidget->text().isEmpty()) {
++            if (m_filterWidgetAction->isVisible())
++                m_filterWidgetAction->setVisible(false);
+         }
+-        else if ( !isItemVisible( m_filterWidgetId ) )
+-        {
+-            setItemVisible( m_filterWidgetId, true );
+-            m_filterWidget->show();
++        else if (!m_filterWidgetAction->isVisible() )
++            m_filterWidgetAction->setVisible(true);
+ 
+-        }
+-	if ( m_filterWidget->text() != lastString) {
++        if (m_filterWidget->text() != lastString) {
+             slotHistoryChanged();
+-            rebuild( m_filterWidget->text() );
+-	}
+-        break;
++            rebuild(m_filterWidget->text());
++        }
+ 
++        break;
+     } //default:
+     } //case
+-
+ }
+ 
+-
+-
+ #include "klipperpopup.moc"
+--- a/klipper/CMakeLists.txt
++++ b/klipper/CMakeLists.txt
+@@ -1,39 +1,32 @@
+-
+ KDE4_NO_ENABLE_FINAL(klipper)
+-include_directories(
+-   ${KDEBASE_WORKSPACE_SOURCE_DIR}/kicker/libkicker/ )
+-
+-########### next target ###############
+-
+-add_definitions (-DQT3_SUPPORT)
+-
+-########### next target ###############
+-
+-set(libklipper_common_SRCS klipper.cpp urlgrabber.cpp configdialog.cpp clipboardpoll.cpp history.cpp historyitem.cpp historystringitem.cpp klipperpopup.cpp popupproxy.cpp  historyimageitem.cpp historyurlitem.cpp )
+ 
++set(libklipper_common_SRCS
++    klipper.cpp
++    urlgrabber.cpp
++    configdialog.cpp
++    clipboardpoll.cpp
++    history.cpp
++    historyitem.cpp
++    historystringitem.cpp
++    klipperpopup.cpp
++    popupproxy.cpp
++    historyimageitem.cpp
++    historyurlitem.cpp
++)
+ 
+ set(klipper_KDEINIT_SRCS ${libklipper_common_SRCS} main.cpp tray.cpp)
+ 
++kde4_add_kdeinit_executable(klipper ${klipper_KDEINIT_SRCS})
+ 
+-kde4_add_kdeinit_executable( klipper ${klipper_KDEINIT_SRCS})
+-
+-target_link_libraries(kdeinit_klipper  ${KDE4_KDE3SUPPORT_LIBS}  )
++target_link_libraries(kdeinit_klipper ${KDE4_KDEUI_LIBS} ${QT_QT3SUPPORT_LIBRARY})
+ if (X11_Xfixes_FOUND)
+   target_link_libraries(kdeinit_klipper ${X11_Xfixes_LIB})
+ endif (X11_Xfixes_FOUND)
+ 
+-install(TARGETS kdeinit_klipper  DESTINATION ${LIB_INSTALL_DIR} )
++install(TARGETS kdeinit_klipper DESTINATION ${LIB_INSTALL_DIR})
+ 
+-target_link_libraries( klipper kdeinit_klipper )
+-install(TARGETS klipper DESTINATION ${BIN_INSTALL_DIR})
+-
+-########### install files ###############
++target_link_libraries(klipper kdeinit_klipper)
+ 
+-install(FILES klipper.desktop  DESTINATION  ${XDG_APPS_INSTALL_DIR})
++install(TARGETS klipper DESTINATION ${BIN_INSTALL_DIR})
++install(FILES klipper.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
+ install(FILES klipper.desktop DESTINATION ${AUTOSTART_INSTALL_DIR})
+-install(FILES klipperrc.upd klippershortcuts.upd  DESTINATION  ${KCONF_UPDATE_INSTALL_DIR})
+-install(PROGRAMS klipper-1-2.pl klipper-kde31.sh DESTINATION  ${KCONF_UPDATE_INSTALL_DIR})
+-
+-
+-kde4_install_icons( ${ICON_INSTALL_DIR}  )
+-
+--- a/klipper/urlgrabber.h
++++ b/klipper/urlgrabber.h
+@@ -20,14 +20,11 @@
+ #ifndef URLGRABBER_H
+ #define URLGRABBER_H
+ 
+-#include <Qt3Support/Q3PtrList>
+-#include <Qt3Support/Q3IntDict>
++#include <QHash>
+ #include <QRegExp>
+ 
+-
+ #include <kconfig.h>
+ 
+-
+ class QTimer;
+ 
+ class KConfig;
+@@ -35,8 +32,8 @@
+ 
+ class ClipAction;
+ struct ClipCommand;
+-typedef Q3PtrList<ClipAction> ActionList;
+-typedef Q3PtrListIterator<ClipAction> ActionListIterator;
++typedef QList<ClipAction*> ActionList;
++typedef QListIterator<ClipAction*> ActionListIterator;
+ 
+ class URLGrabber : public QObject
+ {
+@@ -68,11 +65,10 @@
+ 
+   bool trimmed() const { return m_trimmed; }
+   void setStripWhiteSpace( bool enable ) { m_trimmed = enable; }
+-    
++
+ private:
+   const ActionList& matchingActions( const QString& );
+   void execute( const struct ClipCommand *command ) const;
+-  void editData();
+   bool isAvoidedWindow() const;
+   void actionMenu( bool wm_class_check );
+ 
+@@ -81,7 +77,7 @@
+   QStringList myAvoidWindows;
+   QString myClipData;
+   ClipAction *myCurrentAction;
+-  Q3IntDict<ClipCommand> myCommandMapper;
++  QHash<QString, ClipCommand*> myCommandMapper;
+   KMenu *myMenu;
+   QTimer *myPopupKillTimer;
+   int myPopupKillTimeout;
+@@ -90,8 +86,9 @@
+ 
+ private Q_SLOTS:
+   void slotActionMenu() { actionMenu( true ); }
+-  void slotItemSelected( int );
++  void slotItemSelected(QAction *action);
+   void slotKillPopupMenu();
++  void editData();
+ 
+ 
+ Q_SIGNALS:
+@@ -108,7 +105,6 @@
+     QString description;
+     bool isEnabled;
+     QString pixmap;
+-    //  int id; // the index reflecting the position in the list of commands
+ };
+ 
+ /**
+@@ -139,7 +135,7 @@
+   void clearCommands() { myCommands.clear(); }
+ 
+   void  addCommand( const QString& command, const QString& description, bool, const QString& icon = "" );
+-  const Q3PtrList<ClipCommand>& commands() 	const { return myCommands; }
++  const QList<ClipCommand*>& commands() 	const { return myCommands; }
+ 
+   /**
+    * Saves this action to a a given KConfig object
+@@ -150,7 +146,7 @@
+ private:
+   QRegExp 		myRegExp;
+   QString 		myDescription;
+-  Q3PtrList<ClipCommand> 	myCommands;
++  QList<ClipCommand*> 	myCommands;
+ 
+ };
+ 
+--- a/solid/bluez/solid_bluez.desktop
++++ b/solid/bluez/solid_bluez.desktop
+@@ -12,6 +12,7 @@
+ Comment[bg]=Bluetooth с BlueZ
+ Comment[de]=Bluetooth-Verwaltung mit Hilfe von Bluez
+ Comment[el]=Διαχείριση bluetooth με χρήση της στοίβας BlueZ
++Comment[et]=Bluetoothi haldamine BlueZi pinuga
+ Comment[fa]=مدیریت بلوتوث با استفاده از پشته BlueZ
+ Comment[he]=ניהול Bluetooth באמצעות מחסנית BlueZ
+ Comment[ja]=BlueZ スタックによる Bluetooth 管理
+--- a/solid/bluez/bluez-bluetoothmanager.cpp
++++ b/solid/bluez/bluez-bluetoothmanager.cpp
+@@ -195,7 +195,8 @@
+     } else {
+         out = new BluezBluetoothSecurity(interface,this);
+     }
+-    new BluezBluetoothSecurityAdaptor(out);
++	new BluezBluetoothSecurityPasskeyAgentAdaptor(out);
++	new BluezBluetoothSecurityAuthorizationAgentAdaptor(out);
+     return out;
+ }
+ 
+--- a/solid/bluez/bluez-bluetoothsecurityadaptor.cpp
++++ b/solid/bluez/bluez-bluetoothsecurityadaptor.cpp
+@@ -21,13 +21,12 @@
+ #include "bluez-bluetoothsecurityadaptor.h"
+ #include <kdebug.h>
+ #include <ctime>
+-
+-BluezBluetoothSecurityAdaptor::BluezBluetoothSecurityAdaptor(BluezBluetoothSecurity * security)
++//BluezBluetoothSecurityPasskeyAgentAdaptor
++BluezBluetoothSecurityPasskeyAgentAdaptor::BluezBluetoothSecurityPasskeyAgentAdaptor(BluezBluetoothSecurity * security)
+     :QDBusAbstractAdaptor(security),security(security),conn(QDBusConnection::systemBus())
+ {
+-    serviceName = QString("/org/kde/solid/BluezBluetoothSecurityAdaptor%1").arg(time(NULL));
+-    bool done = conn.registerObject(
+-            serviceName,security,QDBusConnection::ExportAdaptors);
++    serviceName = QString("/org/kde/solid/BluezBluetoothSecurityPasskeyAgentAdaptor%1").arg(time(NULL));
++    bool done = conn.registerObject(serviceName,security,QDBusConnection::ExportAdaptors);
+     if (!done) {
+         kDebug() << "Failed to register the object: " << conn.lastError().name() << " : " << conn.lastError().message();
+         serviceName = "";
+@@ -46,7 +45,7 @@
+ 
+ }
+ 
+-BluezBluetoothSecurityAdaptor::~ BluezBluetoothSecurityAdaptor()
++BluezBluetoothSecurityPasskeyAgentAdaptor::~ BluezBluetoothSecurityPasskeyAgentAdaptor()
+ {
+     kDebug() << k_funcinfo;
+     if (!serviceName.isEmpty())
+@@ -62,7 +61,7 @@
+     }
+ }
+ 
+-QString BluezBluetoothSecurityAdaptor::Request(const QString & path, const QString & address, bool numeric,const QDBusMessage &msg)
++QString BluezBluetoothSecurityPasskeyAgentAdaptor::Request(const QString & path, const QString & address, bool numeric,const QDBusMessage &msg)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(path)
+@@ -78,7 +77,7 @@
+     return "";//To satisfy the compiler, but the answer is already sent
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Confirm(const QString & path, const QString & address, const QString & value,const QDBusMessage &msg)
++void BluezBluetoothSecurityPasskeyAgentAdaptor::Confirm(const QString & path, const QString & address, const QString & value,const QDBusMessage &msg)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(path)
+@@ -92,7 +91,7 @@
+     }
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Display(const QString & path, const QString & address, const QString & value)
++void BluezBluetoothSecurityPasskeyAgentAdaptor::Display(const QString & path, const QString & address, const QString & value)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(path)
+@@ -101,7 +100,7 @@
+     }
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Keypress(const QString & path, const QString & address)
++void BluezBluetoothSecurityPasskeyAgentAdaptor::Keypress(const QString & path, const QString & address)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(path)
+@@ -110,7 +109,7 @@
+     }
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Complete(const QString & path, const QString & address)
++void BluezBluetoothSecurityPasskeyAgentAdaptor::Complete(const QString & path, const QString & address)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(path)
+@@ -119,7 +118,7 @@
+     }
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Cancel(const QString & path, const QString & address)
++void BluezBluetoothSecurityPasskeyAgentAdaptor::Cancel(const QString & path, const QString & address)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(path)
+@@ -128,12 +127,52 @@
+     }
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Release()
++void BluezBluetoothSecurityPasskeyAgentAdaptor::Release()
+ {
+     kDebug() << k_funcinfo;
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Authorize(const QString & adapter_path, const QString & address, const QString & service_path, const QString & uuid,const QDBusMessage &msg)
++//BluezBluetoothSecurityAuthorizationAgentAdaptor
++BluezBluetoothSecurityAuthorizationAgentAdaptor::BluezBluetoothSecurityAuthorizationAgentAdaptor(BluezBluetoothSecurity * security)
++    :QDBusAbstractAdaptor(security),security(security),conn(QDBusConnection::systemBus())
++{
++    serviceName = QString("/org/kde/solid/BluezBluetoothSecurityAuthorizationAgentAdaptor%1").arg(time(NULL));
++    bool done = conn.registerObject(
++                                    serviceName,security,QDBusConnection::ExportAdaptors);
++    if (!done) {
++        kDebug() << "Failed to register the object: " << conn.lastError().name() << " : " << conn.lastError().message();
++        serviceName = "";
++    } else {
++        kDebug() << "DBus service registered at "<< serviceName <<endl;
++                //TODO Add support for an specific local device
++        QDBusInterface iface("org.bluez", "/org/bluez","org.bluez.Security",conn, this);
++        iface.call("RegisterDefaultAuthorizationAgent",serviceName);
++        if (iface.lastError().isValid()) {
++            kDebug() << "RegisterDefaultAuthorizationAgent failed :" << iface.lastError().name() << " : " << iface.lastError().message();
++            serviceName = "";
++        } else {
++            kDebug() << "RegisterDefaultAuthorizationAgent succesfull!";
++        }
++    }
++
++}
++BluezBluetoothSecurityAuthorizationAgentAdaptor::~ BluezBluetoothSecurityAuthorizationAgentAdaptor()
++{
++    kDebug() << k_funcinfo;
++    if (!serviceName.isEmpty())
++    {
++        QDBusInterface iface("org.bluez", "/org/bluez","org.bluez.Security",conn, this);
++        iface.call("UnregisterDefaultAuthorizationAgent",serviceName);
++        if (iface.lastError().isValid()) {
++            kDebug() << "UnregisterDefaultAuthorizationAgent failed :" << iface.lastError().name() << " : " << iface.lastError().message();
++            serviceName = "";
++        } else {
++            kDebug() << "UnregisterDefaultAuthorizationAgent Successful!:" << iface.lastError().name() << " : " << iface.lastError().message();
++        }
++    }
++}
++
++void BluezBluetoothSecurityAuthorizationAgentAdaptor::Authorize(const QString & adapter_path, const QString & address, const QString & service_path, const QString & uuid,const QDBusMessage &msg)
+ {
+     kDebug() << k_funcinfo;
+     Q_UNUSED(service_path)
+@@ -147,7 +186,7 @@
+     }
+ }
+ 
+-void BluezBluetoothSecurityAdaptor::Cancel(const QString & adapter_path, const QString & address, const QString & service_path, const QString & uuid)
++void BluezBluetoothSecurityAuthorizationAgentAdaptor::Cancel(const QString & adapter_path, const QString & address, const QString & service_path, const QString & uuid)
+ {
+     Q_UNUSED(service_path)
+     if (security) {
+@@ -155,4 +194,9 @@
+     }
+ }
+ 
++void BluezBluetoothSecurityAuthorizationAgentAdaptor::Release()
++{
++    kDebug() << k_funcinfo;
++}
++
+ #include "bluez-bluetoothsecurityadaptor.moc"
+--- a/solid/bluez/bluez-bluetoothsecurityadaptor.h
++++ b/solid/bluez/bluez-bluetoothsecurityadaptor.h
+@@ -30,14 +30,13 @@
+  * Acts as a proxy to BluezBluetoothSecurity to expose it's functionalities to the D-Bus, which is needed
+  * by the BlueZ system.
+  */
+-class BluezBluetoothSecurityAdaptor: public QDBusAbstractAdaptor
++class BluezBluetoothSecurityPasskeyAgentAdaptor: public QDBusAbstractAdaptor
+ {
+     Q_OBJECT
+     Q_CLASSINFO("D-Bus Interface","org.bluez.PasskeyAgent")
+-    Q_CLASSINFO("D-Bus Interface","org.bluez.AuthorizationAgent")
+     public:
+-        BluezBluetoothSecurityAdaptor(BluezBluetoothSecurity *security);
+-        ~BluezBluetoothSecurityAdaptor();
++        BluezBluetoothSecurityPasskeyAgentAdaptor(BluezBluetoothSecurity *security);
++        ~BluezBluetoothSecurityPasskeyAgentAdaptor();
+     public Q_SLOTS:
+         //org.bluez.PasskeyAgent
+         QString Request(const QString & path, const QString & address, bool numeric,const QDBusMessage &msg);
+@@ -47,13 +46,28 @@
+         void Complete(const QString & path, const QString & address);
+         void Cancel(const QString & path, const QString & address);
+ 
++        void Release();
++    private:
++        QString serviceName;
++        BluezBluetoothSecurity *security;
++        QDBusInterface *manager;
++        QDBusConnection conn;
++};
++class BluezBluetoothSecurityAuthorizationAgentAdaptor: public QDBusAbstractAdaptor
++{
++    Q_OBJECT
++    Q_CLASSINFO("D-Bus Interface","org.bluez.AuthorizationAgent")
++    public:
++		BluezBluetoothSecurityAuthorizationAgentAdaptor(BluezBluetoothSecurity *security);
++		~BluezBluetoothSecurityAuthorizationAgentAdaptor();
++    public Q_SLOTS:
+ 
+         //org.bluez.AuthorizationAgent
+         void Authorize(const QString & adapter_path, const QString & address,
+                        const QString & service_path, const QString & uuid,const QDBusMessage &msg);
+         void Cancel(const QString & adapter_path, const QString & address,
+-                            const QString & service_path, const QString & uuid);
+-        //common
++                    const QString & service_path, const QString & uuid);
++        
+         void Release();
+     private:
+         QString serviceName;
+--- a/solid/solidshell/main.cpp
++++ b/solid/solidshell/main.cpp
+@@ -399,7 +399,7 @@
+ 
+       cout << "  solidshell network set network 'device-uni' 'network-uni' [authentication 'key']" << endl;
+       cout << i18n("             # Activate the network 'network-uni' on 'device-uni'.\n"
+-                    "             # Optionally, use WEP128, open-system encryption with hex key 'key'. (Hardcoded)"
++                    "             # Optionally, use WEP128, open-system encryption with hex key 'key'. (Hardcoded)\n"
+                     "             # Where 'authentication' is one of:\n"
+                     "             # wep hex64|ascii64|hex128|ascii128|passphrase64|passphrase128 'key' [open|shared]\n"
+                     "             # wpapsk wpa|wpa2 tkip|ccmp-aes password\n"
+--- a/solid/hal/solid_hal_power.desktop
++++ b/solid/hal/solid_hal_power.desktop
+@@ -25,6 +25,7 @@
+ Comment[de]=Energieverwaltung mit Hilfe des HAL-Dienstes von freedesktop.org
+ Comment[el]=Διαχείριση ενέργειας υλικού με χρήση του δαίμονα HAL του freedesktop.org
+ Comment[es]=Gestión de energía del hardware usando el servicio HAL de freedesktop.org
++Comment[et]=Riistvara voolutarbe haldamine freedesktop.org-i HAL-deemoni abil
+ Comment[fa]=مدیریت توان سخت‌افزار با استفاده از شبح freedesktop.org HAL
+ Comment[he]=ניהול צריכת החשמל של החומרה בעזרת שירות HAL של freedesktop.org
+ Comment[ja]=freedesktop.org の HAL デーモンを用いたハードウェア電源管理
+--- a/solid/networkmanager/solid_networkmanager.desktop
++++ b/solid/networkmanager/solid_networkmanager.desktop
+@@ -10,6 +10,7 @@
+ Name[csb]=Menadżer logòwaniô
+ Name[de]=Netzwerkverwaltung
+ Name[el]=Διαχειριστής δικτύου
++Name[et]=Võrguhaldur
+ Name[km]=កម្មវិធី​គ្រប់គ្រង​បណ្តាញ​
+ Name[nb]=Nettverksstyring
+ Name[nds]=Nettwark-Pleger
+@@ -30,6 +31,7 @@
+ Comment[de]=Netzwerkverwaltung mit dem Netzwerkverwaltungs-Dienst
+ Comment[el]=Διαχείριση δικτύου με χρήση του δαίμονα HAL του freedesktop.org
+ Comment[es]=Gestión de red usando el servicio NetworkManager
++Comment[et]=Võrgu haldamine NetworkManageri deemoni abil
+ Comment[fa]=مدیریت شبکه با استفاده از شبح NetworkManager
+ Comment[he]=ניהול הרשת באמצעות השירות NetworkManager
+ Comment[ja]=NetworkManager デーモンを用いたネットワーク管理
+--- a/solid/networking/kded/networkstatus.desktop
++++ b/solid/networking/kded/networkstatus.desktop
+@@ -6,6 +6,7 @@
+ Name[de]=Netzwerkstatus-Dienst
+ Name[el]=Δαίμονας κατάστασης δικτύου
+ Name[es]=Servicio del estado de red
++Name[et]=Võrguoleku deemon
+ Name[fa]=شبح وضعیت شبکه
+ Name[he]=צג מצב הרשת
+ Name[it]=Demone dello stato della rete
+@@ -30,11 +31,12 @@
+ Comment[bg]=Проверява състоянието на мрежата и изпраща уведомление на програмите в мрежата
+ Comment[de]=Überprüft den Status von Netzwerkschnittstellen und benachrichtigt Programme, die das Netzwerk verwenden.
+ Comment[el]=Παρακολουθεί την κατάσταση των διασυνδέσεων δικτύου και προσφέρει ειδοποιήσεις σε εφαρμογές που χρησιμοποιούν το δίκτυο.
++Comment[et]=Võrguliideste oleku jälgimine ja märguannete edastamine rakendustele võrgu vahendusel.
+ Comment[fa]=وضعیت واسطهای شبکه را ردیابی کرده و با استفاده از شبکه برای کاربرد، اخطار فراهم می‌کند.
+ Comment[he]=עוקב אחר מצב ממשקי רשת ומספק עידכונים לתוכניות שמשתמשות ברשת
+ Comment[ja]=ネットワークインターフェースの状態を追跡し、ネットワークを使うアプリケーションに情報を提供します。
+ Comment[kk]=Желі интерфейстерінің күйін қадағалап желісін пайдаланатын қолданбаларды құлақтандырады.
+-Comment[km]=តាម​ដាន​ស្ថានភាព​ចំណុច​ប្រទាក់​បណ្តាញ និង​ផ្តល់​នូវ​សេចក្តី​ជូន​ដំណឹង​ទៅ​កម្មវិធី​ដោយ​ប្រើ​បណ្តាញ ។
++Comment[km]=តាម​ដាន​ស្ថានភាពរបស់​​ចំណុច​ប្រទាក់​បណ្តាញ និង​ផ្តល់​នូវ​សេចក្តី​ជូន​ដំណឹង​ទៅ​កម្មវិធី​ដោយ​ប្រើ​បណ្តាញ ។
+ Comment[ko]=네트워크 인터페이스의 상태를 추적하고 네트워크를 사용하는 프로그램에게 알려 줍니다.
+ Comment[lt]=Seka tinklo sąsajų būseną ir informuoja apie jas programas, naudojančias tinklą
+ Comment[nb]=Holder øye med status for nettverks-grensesnitt og varsler programmer som bruker nettverket.
+--- a/solid/kcm/kcm_solid.desktop
++++ b/solid/kcm/kcm_solid.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kcm_solid
++Exec=kcmshell4 kcm_solid
+ Icon=preferences-system-solid
+ Type=Service
+ ServiceTypes=KCModule
+@@ -27,6 +27,7 @@
+ Comment[de]=Einrichtung zur Hardware-Einbindung
+ Comment[el]=Ρυθμίσεις ενσωμάτωσης υλικού
+ Comment[es]=Configuración de la integración del hardware
++Comment[et]=Riistvara lõimimise seadistamine
+ Comment[fa]=پیکربندی مجتمع‌سازی سخت‌افزار
+ Comment[he]=הגדרות שילוב חומרה
+ Comment[it]=Configurazione dell'integrazione hardware
+@@ -54,12 +55,13 @@
+ Keywords[de]=Solid,Hardware,Energie,Netzwerk,Discovery,Management,Verwaltung,Erkennung
+ Keywords[el]=Solid,Υλικό,Hardware,Ενέργεια,Power,Δίκτυο,Network,Εντοπισμός,Discovery,Διαχείριση,Management
+ Keywords[es]=Solid,Hardware,Energía,Red,Detección,Gestión
++Keywords[et]=Solid,riistvara,voolutarve,võrg,tuvastamine,haldamine
+ Keywords[fa]=Solid، سخت‌افزار، توان، شبکه، اکتشاف، مدیریت
+ Keywords[ga]=Solid,Crua-earraí,Cumhacht,Líonra,Fionnachtain,Bainistíocht
+ Keywords[he]=Solid,Hardware,Power,Network,Discovery,Management,חומרה,צריכת חשמל,רשת,גילוי,ניהול
+ Keywords[it]=Solid,Hardware,Power,Network,Discovery,Management,Rete,Gestione,Esplorazione,Scoperta
+ Keywords[ja]=Solid,ハードウェア,電源,ネットワーク,ディスカバリ,発見,管理
+-Keywords[km]=តាន់,ផ្នែករឹង,ថាមពល,បណ្តាញ,ការ​រក​ឃើញ,ការ​គ្រប់គ្រង
++Keywords[km]=តាន់ ផ្នែករឹង ថាមពល បណ្តាញ ការ​រក​ឃើញ ការ​គ្រប់គ្រង
+ Keywords[ko]=Solid,하드웨어,전원,네트워크,발견,관리
+ Keywords[nb]=Solid,maskinvare,strøm,nettverk,oppdage,styring
+ Keywords[nds]=Solid,Hardware,Stroom,Nettwark,Opdecken,Pleeg,Pleger
+--- a/solid/CMakeLists.txt
++++ b/solid/CMakeLists.txt
+@@ -4,7 +4,6 @@
+ macro_optional_find_package(BlueZ)
+ macro_log_feature(BLUEZ_FOUND "BlueZ" "BlueZ is the linux bluetooth subsystem" "http://www.bluez.org")
+ 
+-add_subdirectory( control )
+ add_subdirectory( kcm )
+ add_subdirectory( solidshell )
+ add_subdirectory( hal )
+--- a/wallpapers/Time-For-Lunch-2.jpg.desktop
++++ b/wallpapers/Time-For-Lunch-2.jpg.desktop
+@@ -26,7 +26,7 @@
+ Name[ja]=昼食の時間
+ Name[ka]=სადილის დრო
+ Name[kk]=Түс кезі
+-Name[km]=ដល់​ពេល​អាហារ​ថ្ងៃ​ត្រង់
++Name[km]=ដល់​ពេល​អាហារ​ថ្ងៃ​ត្រង់​ហើយ
+ Name[ko]=점심 시간
+ Name[lt]=Laikas pietauti
+ Name[lv]=Laiks pusdienām
+--- a/wallpapers/andes-venezolanos.svgz.desktop
++++ b/wallpapers/andes-venezolanos.svgz.desktop
+@@ -28,6 +28,6 @@
+ Name[te]=ఆండిస్ వెంజొలానొస్
+ Name[uk]=Анди Венесуели
+ Name[x-test]=xxAndes Venezolanosxx
+-Name[zh_CN]=飘逸(SVG)
++Name[zh_CN]=飘逸
+ Author=Xavier Araque Arguello
+ ImageType=scalable
+--- a/wallpapers/lineart.svgz.desktop
++++ b/wallpapers/lineart.svgz.desktop
+@@ -46,6 +46,6 @@
+ Name[uk]=Графічний логотип
+ Name[vi]=Biểu tượng Lineart
+ Name[x-test]=xxLineart Logoxx
+-Name[zh_CN]=线条族(SVG)
++Name[zh_CN]=线条族
+ Author=Jan-Victor Krille
+ ImageType=scalable
+--- a/wallpapers/kde_box.png.desktop
++++ b/wallpapers/kde_box.png.desktop
+@@ -4,10 +4,12 @@
+ Name=KDE Box
+ Name[ar]=مربع كدي
+ Name[be]=Каробка KDE
++Name[br]=Boest KDE
+ Name[csb]=Kastka KDE
+ Name[de]=KDE-Kiste
+ Name[el]=Σύστημα KDE
+ Name[es]=Caja KDE
++Name[et]=KDE boks
+ Name[fa]=جعبۀ KDE
+ Name[ga]=Bosca KDE
+ Name[kk]=KDE Бокс
+--- a/wallpapers/moon.svgz.desktop
++++ b/wallpapers/moon.svgz.desktop
+@@ -30,7 +30,7 @@
+ Name[ja]=ムーン
+ Name[ka]=მთვარე
+ Name[kk]=Ай
+-Name[km]=ព្រះចន្ទ
++Name[km]=ព្រះច័ន្ទ
+ Name[ko]=달
+ Name[mk]=Месечина
+ Name[nb]=Måne
+@@ -58,7 +58,7 @@
+ Name[vi]=Mặt Trăng
+ Name[wa]=Lune
+ Name[x-test]=xxMoonxx
+-Name[zh_CN]=月亮(SVG)
++Name[zh_CN]=月亮
+ Name[zh_TW]=月
+ Author=Chris Tooley
+ ImageType=scalable
+--- a/wallpapers/stelvio.jpg.desktop
++++ b/wallpapers/stelvio.jpg.desktop
+@@ -6,6 +6,7 @@
+ Name[eo]=Ŝtormo
+ Name[ka]=სტელვიო
+ Name[km]=ស្តេលវីអូ
++Name[ko]=스텔비오
+ Name[mk]=Стелвио
+ Name[ne]=स्टेलभिव
+ Name[pa]=ਸਟਾਲਵੀਓ
+--- a/wallpapers/CMakeLists.txt
++++ b/wallpapers/CMakeLists.txt
+@@ -16,6 +16,8 @@
+     floating-leaves.jpg.desktop
+     No-Ones-Laughing-3.jpg
+     No-Ones-Laughing-3.jpg.desktop
++    plasma-default.png
++    plasma-default.png.desktop
+     seaofconero.jpg
+     seaofconero.jpg.desktop
+     soft-green.jpg
+--- a/wallpapers/default_blue.jpg.desktop
++++ b/wallpapers/default_blue.jpg.desktop
+@@ -5,6 +5,7 @@
+ Name[af]=Standaard Blou
+ Name[ar]=أزرق افتراضي
+ Name[be]=Стандартныя блакітныя
++Name[br]=Glas dre ziouer
+ Name[ca]=Blau per omissió
+ Name[cs]=Výchozí modrá
+ Name[csb]=Domëslnô - mòdrô
+--- a/wallpapers/globe.svgz.desktop
++++ b/wallpapers/globe.svgz.desktop
+@@ -47,7 +47,7 @@
+ Name[uk]=Земна куля в шестерні
+ Name[vi]=Quả cầu Bánh răng
+ Name[x-test]=xxGeared Globexx
+-Name[zh_CN]=全球动力(SVG)
++Name[zh_CN]=全球动力
+ Name[zh_TW]=齒輪球
+ Author=Jakob Kohl
+ ImageType=scalable
+--- a/wallpapers/aurora.svgz.desktop
++++ b/wallpapers/aurora.svgz.desktop
+@@ -30,7 +30,7 @@
+ Name[uz]=Аврора
+ Name[vi]=Cực quang
+ Name[x-test]=xxAuroraxx
+-Name[zh_CN]=夜思(SVG)
++Name[zh_CN]=夜思
+ Name[zh_TW]=極光
+ Author=Raoul Duke
+ ImageType=scalable
+--- /dev/null
++++ b/wallpapers/plasma-default.png.desktop
+@@ -0,0 +1,5 @@
++[Wallpaper]
++Encoding=UTF-8
++File=plasma_default.jpg
++Name=Default Wallpaper for Plasma
++ImageType=pixmap
+--- a/wallpapers/here-gear.svgz.desktop
++++ b/wallpapers/here-gear.svgz.desktop
+@@ -46,7 +46,7 @@
+ Name[tr]=Üçlü Çarklar
+ Name[vi]=Chúng ta Là Bánh răng
+ Name[x-test]=xxWe Are Gearxx
+-Name[zh_CN]=齿轮在此(SVG)
++Name[zh_CN]=齿轮在此
+ Name[zh_TW]=我們是齒輪
+ Author=Tony
+ ImageType=scalable
+--- a/wallpapers/celtic.svgz.desktop
++++ b/wallpapers/celtic.svgz.desktop
+@@ -46,7 +46,7 @@
+ Name[uz]=Селтик
+ Name[vi]=Xen-tơ
+ Name[x-test]=xxCelticxx
+-Name[zh_CN]=静谧(SVG)
++Name[zh_CN]=静谧
+ Name[zh_TW]=塞爾特
+ Author=Mark Ger
+ ImageType=scalable
+--- a/wallpapers/konqui.svgz.desktop
++++ b/wallpapers/konqui.svgz.desktop
+@@ -15,6 +15,5 @@
+ Name[tg]=Конки
+ Name[uk]=Конкві
+ Name[x-test]=xxKonquixx
+-Name[zh_CN]=Konqui(SVG)
+ Author=Pedro Carbajal
+ ImageType=scalable
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -35,10 +35,8 @@
+ )
+ 
+ include_directories(
+-    ${CMAKE_BINARY_DIR}/workspace/kicker/libkicker
+     ${CMAKE_CURRENT_BINARY_DIR}
+     ${CMAKE_CURRENT_SOURCE_DIR}/kdm
+-    ${CMAKE_CURRENT_SOURCE_DIR}/kicker/libkicker
+     ${CMAKE_CURRENT_SOURCE_DIR}/libs
+     ${CMAKE_CURRENT_SOURCE_DIR}/libs/workspace
+ )
+@@ -77,16 +75,6 @@
+ add_subdirectory( wallpapers )
+ add_subdirectory( menu )
+ 
+-# let it rest in peace for now. do not enable as it
+-# is not enabled anymore in the release tarballs and
+-# anything that depends on it would have to be fixed
+-# anyway
+-set(BUILD_KICKER FALSE)
+-
+-if(BUILD_KICKER)
+-  add_subdirectory( kicker)
+-endif(BUILD_KICKER)
+-
+ if(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
+   	add_subdirectory( kdm )
+ else(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
+--- a/krunner/lock/lockdlg.cc
++++ b/krunner/lock/lockdlg.cc
+@@ -65,7 +65,8 @@
+ #include <QX11Info>
+ #include <kauthorized.h>
+ 
+-#include <kxkb_interface.h>
++#include <KPluginLoader>
++#include <KPluginFactory>
+ 
+ #ifndef AF_LOCAL
+ # define AF_LOCAL	AF_UNIX
+@@ -73,6 +74,7 @@
+ 
+ #define PASSDLG_HIDE_TIMEOUT 10000
+ 
++
+ //===========================================================================
+ //
+ // Simple dialog for entering a password.
+@@ -91,10 +93,10 @@
+     QLabel *pixLabel = new QLabel( frame );
+     pixLabel->setPixmap(DesktopIcon("system-lock-screen"));
+ 
+-    KUser user;
+-    QLabel *greetLabel = new QLabel( user.fullName().isEmpty() ?
++    KUser user; QString fullName=user.property(KUser::FullName).toString();
++    QLabel *greetLabel = new QLabel( fullName.isEmpty() ?
+             i18n("<nobr><b>The session is locked</b></nobr><br />") :
+-            i18n("<nobr><b>The session was locked by %1</b></nobr><br />",  user.fullName() ), frame );
++            i18n("<nobr><b>The session was locked by %1</b></nobr><br />", fullName ), frame );
+ 
+     mStatusLabel = new QLabel( "<b> </b>", frame );
+     mStatusLabel->setAlignment( Qt::AlignCenter );
+@@ -109,8 +111,15 @@
+     cancel = new KPushButton( KStandardGuiItem::cancel(), frame );
+     mNewSessButton = new KPushButton( KGuiItem(i18n("Sw&itch User..."), "fork"), frame );
+ 
+-    mLayoutButton = new KPushButton( frame );
+-    mLayoutButton->setFlat( true );
++    // Using KXKB component
++    KPluginFactory *kxkbFactory = KPluginLoader("libkdeinit4_kxkb").factory();
++    QWidget *kxkbComponent = NULL;
++    if (kxkbFactory) {
++        kxkbComponent = kxkbFactory->create<QWidget>(this);
++    }
++    else {
++        kDebug() << "can't load kxkb component library";
++    }
+ 
+     QVBoxLayout *unlockDialogLayout = new QVBoxLayout(w);
+     unlockDialogLayout->addWidget( frame );
+@@ -119,7 +128,9 @@
+     layStatus->setSpacing( KDialog::spacingHint() );
+     layStatus->setMargin( 0 );
+     layStatus->addWidget( mStatusLabel );
+-    layStatus->addWidget( mLayoutButton );
++
++    if( kxkbComponent )
++        layStatus->addWidget( kxkbComponent );
+ 
+     QHBoxLayout *layButtons = new QHBoxLayout();
+     layButtons->setSpacing( KDialog::spacingHint() );
+@@ -139,7 +150,7 @@
+     frameLayout->addWidget( sep, 3, 0, 1, 2 );
+     frameLayout->addLayout( layButtons, 4, 0, 1, 2 );
+ 
+-    connect(mLayoutButton, SIGNAL(clicked()), this, SLOT(layoutClicked()));
++    setButtons(None);
+     connect(cancel, SIGNAL(clicked()), SLOT(reject()));
+     connect(ok, SIGNAL(clicked()), SLOT(slotOK()));
+     connect(mNewSessButton, SIGNAL(clicked()), SLOT(slotSwitchUser()));
+@@ -154,24 +165,7 @@
+     connect(qApp, SIGNAL(activity()), SLOT(slotActivity()) );
+ 
+     greet->start();
+-
+-    org::kde::KXKB kxkb("org.kde.kxkb", "/kxkb" , QDBusConnection::sessionBus());
+-    if( kxkb.isValid() ) {
+-        QDBusReply<QStringList> replyLayouts = kxkb.getLayoutsList();
+-        layoutsList = replyLayouts;
+-        QDBusReply<QString> replyCurrentLayout = kxkb.getCurrentLayout();
+-        QString currentLayout = replyCurrentLayout;
+-        if( !currentLayout.isEmpty() && layoutsList.count() > 1 ) {
+-            currLayout = layoutsList.indexOf(currentLayout);
+-            if (currLayout < 0)
+-                setLayoutText("err");
+-            else
+-                setLayoutText(layoutsList[currLayout]);
+-        } else
+-            mLayoutButton->hide();
+-    } else {
+-        mLayoutButton->hide(); // no kxkb running
+-    }
++    
+     capsLocked();
+ }
+ 
+@@ -181,27 +175,6 @@
+     delete greet;
+ }
+ 
+-void PasswordDlg::layoutClicked()
+-{
+-
+-    if( ++currLayout == layoutsList.size() )
+-        currLayout = 0;
+-    org::kde::KXKB kxkb("org.kde.kxkb", "/kxkb" , QDBusConnection::sessionBus());
+-    if( kxkb.isValid() ) {
+-        const QString currentLayout = layoutsList.at(currLayout);
+-        QDBusReply<bool> setLayoutReply = kxkb.setLayout(currentLayout );
+-        setLayoutText( setLayoutReply ? currentLayout : "err" );
+-    }
+-}
+-
+-void PasswordDlg::setLayoutText( const QString &txt )
+-{
+-    mLayoutButton->setText( txt );
+-    QSize sz = mLayoutButton->fontMetrics().size( 0, txt );
+-    int mrg = mLayoutButton->style()->pixelMetric( QStyle::PM_ButtonMargin ) * 2;
+-    mLayoutButton->setFixedSize( sz.width() + mrg, sz.height() + mrg );
+-}
+-
+ void PasswordDlg::updateLabel()
+ {
+     if (mUnlockingFailed)
+--- a/krunner/lock/lockdlg.h
++++ b/krunner/lock/lockdlg.h
+@@ -12,7 +12,7 @@
+ #include <kgreeterplugin.h>
+ 
+ #include <KDialog>
+-//Added by qt3to4:
++
+ #include <QLabel>
+ #include <QTimerEvent>
+ #include <QFrame>
+@@ -59,11 +59,9 @@
+     void slotSessionActivated();
+     void slotStartNewSession();
+     void slotOK();
+-    void layoutClicked();
+     void slotActivity();
+ 
+ private:
+-    void setLayoutText( const QString &txt );
+     void capsLocked();
+     void updateLabel();
+     int Reader (void *buf, int count);
+@@ -83,13 +81,10 @@
+     QGridLayout *frameLayout;
+     QLabel      *mStatusLabel;
+     KPushButton *mNewSessButton, *ok, *cancel;
+-    KPushButton *mLayoutButton;
+     int         mFailedTimerId;
+     int         mTimeoutTimerId;
+     int         mCapsLocked;
+     bool        mUnlockingFailed;
+-    QStringList layoutsList;
+-    int         currLayout;
+     int         sPid, sFd;
+     Q3ListView   *lv;
+ };
+--- a/krunner/lock/lockprocess.cc
++++ b/krunner/lock/lockprocess.cc
+@@ -396,7 +396,7 @@
+ 
+         if (config.hasActionGroup("Root"))
+         {
+-            mSaverExec = config.actionGroup("Root").readPathEntry("Exec");
++            mSaverExec = config.actionGroup("Root").readPathEntry("Exec", QString());
+         }
+     }
+ }
+--- a/krunner/krunnerapp.h
++++ b/krunner/krunnerapp.h
+@@ -52,9 +52,7 @@
+     //UGLY
+     static bool s_haveCompositeManager;
+ 
+-public slots:
+-    /** Show taskmanager */
+-    void showTaskManager();
++public Q_SLOTS:
+     //void showWindowList();
+ 
+     void logout();
+@@ -63,8 +61,11 @@
+     void rebootWithoutConfirmation();
+ 
+     // DBUS interface. if you change these methods, you MUST run:
+-    // qdbuscpp2xml -s krunnerapp.h -o org.kde.krunner.App.xml
++    // qdbuscpp2xml -m krunnerapp.h -o org.kde.krunner.App.xml
+     Q_SCRIPTABLE void initializeStartupNotification();
++    
++    /** Show taskmanager */
++    Q_SCRIPTABLE void showTaskManager();
+ 
+ private slots:
+     /**
+--- a/krunner/CMakeLists.txt
++++ b/krunner/CMakeLists.txt
+@@ -41,7 +41,6 @@
+ endif(X11_Xss_LIB)
+ 
+ add_subdirectory( lock )
+-add_subdirectory( runners )
+ 
+ install(TARGETS krunner DESTINATION ${BIN_INSTALL_DIR})
+ install(FILES krunner.desktop  DESTINATION  ${AUTOSTART_INSTALL_DIR})
+--- a/krunner/org.kde.krunner.App.xml
++++ b/krunner/org.kde.krunner.App.xml
+@@ -3,5 +3,7 @@
+   <interface name="org.kde.krunner.App">
+     <method name="initializeStartupNotification">
+     </method>
++    <method name="showTaskManager">
++    </method>
+   </interface>
+ </node>
+--- a/krunner/runners/krunnerrunner.desktop
++++ /dev/null
+@@ -1,35 +0,0 @@
+-[Desktop Entry]
+-Encoding=UTF-8
+-Type=ServiceType
+-X-KDE-ServiceType=KRunner/Runner
+-
+-Comment=KRunner plugin
+-Comment[ar]=KRunner ملحق
+-Comment[be]=Утулка Krunner
+-Comment[bg]=Приставка за KRunner
+-Comment[csb]=Wtëkôcze zrëszôcza KRunner
+-Comment[de]=Programmstarter-Modul
+-Comment[el]=Πρόσθετο του KRunner
+-Comment[es]=Complementos de Konqueror
+-Comment[fa]=وصلۀ KRunner
+-Comment[ga]=Breiseáin KRunner
+-Comment[he]=תוסף של KRunner
+-Comment[it]=Plugin di KRunner
+-Comment[ja]=KRunner プラグイン
+-Comment[kk]=KRunner плагин модулі
+-Comment[km]=កម្មវិធី​ជំនួយ KRunner
+-Comment[nb]=KRunner-programtillegg
+-Comment[nds]=KRunner-Moduul
+-Comment[ne]=केडीई रनर प्लगइन
+-Comment[nl]=KRunner-plugin
+-Comment[nn]=KRunner-tillegg
+-Comment[pa]=ਕੇ-ਰਨਰ ਪਲੱਗਇਨ
+-Comment[pt]='Plugin' do KRunner
+-Comment[pt_BR]=Plugin do KRunner
+-Comment[sl]=Vstavek za KRunner
+-Comment[sv]=Krunner-insticksprogram
+-Comment[th]=ปลั๊กอินของ KRunner
+-Comment[vi]=Bổ sung KRunner
+-Comment[x-test]=xxKRunner pluginxx
+-Comment[zh_CN]=KRunner 插件
+-Comment[zh_TW]=KRunner 外掛程式
+--- a/krunner/runners/CMakeLists.txt
++++ /dev/null
+@@ -1,9 +0,0 @@
+-# the following two are included directly in krunner itself
+-#add_subdirectory(app)
+-#add_subdirectory(shell)
+-
+-# these are all loadable runners
+-add_subdirectory(search)
+-add_subdirectory(calculator)
+-
+-install( FILES  krunnerrunner.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}  )
+--- a/krunner/runners/services/servicerunner.cpp
++++ b/krunner/runners/services/servicerunner.cpp
+@@ -50,7 +50,7 @@
+ ServiceRunner::ServiceRunner( QObject* parent )
+     : Plasma::AbstractRunner( parent )
+ {
+-    setObjectName( i18n( "Application" ) );
++    setObjectName(i18n("Application"));
+ }
+ 
+ ServiceRunner::~ServiceRunner()
+@@ -62,7 +62,7 @@
+     KService::Ptr service = KService::serviceByName(term);
+     QAction* action = 0;
+ 
+-    if ( service && !service->exec().isEmpty() ) {
++    if (service && !service->exec().isEmpty()) {
+         action = new ServiceAction(service, this);
+     }
+ 
+@@ -76,13 +76,16 @@
+     Q_UNUSED( max )
+     Q_UNUSED( offset )
+ 
+-    QString query = QString("exist Exec and '%1' ~in Keywords and Name != '%2'").arg(term, term);
++    if (term.length() <  3) {
++        return;
++    }
+ 
+-    const KService::List services = KServiceTypeTrader::self()->query( "Application", query );
++    QString query = QString("exist Exec and ('%1' ~in Keywords or '%2' ~~ GenericName or '%3' ~~ Name) and Name != '%4'").arg(term, term, term, term);
++    const KService::List services = KServiceTypeTrader::self()->query("Application", query);
+ 
+     //kDebug() << "got " << services.count() << " services from " << query;
+ 
+-    foreach ( const KService::Ptr service, services ) {
++    foreach (const KService::Ptr service, services) {
+         ServiceAction* action = new ServiceAction(service, matches);
+         matches->addAction(service->name(), action);
+         connect(action, SIGNAL(triggered()), SLOT(launchService()));
+--- a/krunner/krunner.desktop
++++ b/krunner/krunner.desktop
+@@ -9,6 +9,7 @@
+ Name[de]=Programmstarter
+ Name[el]=Εκτελεστής εντολών
+ Name[es]=Ejecución de órdenes
++Name[et]=Käsu käivitaja
+ Name[fa]=اجراکننده فرمان
+ Name[he]=מפעיל פקודות
+ Name[ja]=コマンド Runner
+--- a/krunner/krunnerapp.cpp
++++ b/krunner/krunnerapp.cpp
+@@ -222,6 +222,7 @@
+ 
+         m_tasks = new KDialog(0);
+         m_tasks->setWindowTitle(i18n("System Activity"));
++        m_tasks->setWindowIcon(KIcon("utilities-system-monitor"));
+         connect(m_tasks, SIGNAL(finished()),
+                 this, SLOT(taskDialogFinished()));
+         m_tasks->setButtons(KDialog::Close);
+@@ -237,6 +238,7 @@
+     m_tasks->raise();
+     KWindowSystem::setOnDesktop(m_tasks->winId(), KWindowSystem::currentDesktop());
+     KWindowSystem::forceActiveWindow(m_tasks->winId());
++    KWindowSystem::setState( m_tasks->winId(), NET::KeepAbove );
+ }
+ 
+ void KRunnerApp::taskDialogFinished()
+--- a/kmenuedit/basictab.cpp
++++ b/kmenuedit/basictab.cpp
+@@ -375,7 +375,7 @@
+         //_keyEdit->setShortcut( entryInfo->shortcut() );
+     }
+ 
+-    QString temp = df->desktopGroup().readPathEntry("Exec");
++    QString temp = df->desktopGroup().readPathEntry("Exec", QString());
+     if (temp.left(12) == "ksystraycmd ")
+     {
+       _execEdit->lineEdit()->setText(temp.right(temp.length()-12));
+--- a/kmenuedit/menuinfo.cpp
++++ b/kmenuedit/menuinfo.cpp
+@@ -302,7 +302,7 @@
+ 
+ MenuEntryInfo::~MenuEntryInfo()
+ {
+-   m_desktopFile->clean();
++   m_desktopFile->markAsClean();
+    delete m_desktopFile;
+ }
+ 
+--- /dev/null
++++ b/libs/solid/control/bluetoothmanager.cpp
+@@ -0,0 +1,353 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006 Kévin Ottens <ervin at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QMap>
++#include <QPair>
++#include <QStringList>
++
++#include "ifaces/bluetoothmanager.h"
++#include "ifaces/bluetoothinterface.h"
++#include "ifaces/bluetoothinputdevice.h"
++#include "ifaces/bluetoothsecurity.h"
++
++#include "soliddefs_p.h"
++#include "managerbase_p.h"
++
++#include "bluetoothinterface.h"
++#include "bluetoothmanager.h"
++#include "bluetoothsecurity.h"
++
++#include <kdebug.h>
++
++namespace Solid
++{
++namespace Control
++{
++class BluetoothManagerPrivate : public ManagerBasePrivate
++{
++public:
++    BluetoothManagerPrivate(BluetoothManager *parent)
++        : q(parent) { }
++
++    BluetoothManager * const q;
++
++    QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> findRegisteredBluetoothInterface(const QString &ubi) const;
++    QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> findRegisteredBluetoothInputDevice(const QString &ubi) const;
++
++    void connectBackend(QObject *newBackend);
++
++    void _k_interfaceAdded(const QString &ubi);
++    void _k_interfaceRemoved(const QString &ubi);
++    void _k_interfaceDestroyed(QObject *object);
++
++    void _k_inputDeviceCreated(const QString &ubi);
++    void _k_inputDeviceRemoved(const QString &ubi);
++    void _k_inputDeviceDestroyed(QObject *object);
++
++    mutable QMap<QString, QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> > bluetoothInterfaceMap;
++    mutable QMap<QString, QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> > bluetoothInputDeviceMap;
++
++    BluetoothInterface invalidInterface;
++    BluetoothInputDevice invalidInputDevice;
++};
++}
++}
++
++SOLID_SINGLETON_IMPLEMENTATION(Solid::Control::BluetoothManager, BluetoothManager)
++
++
++Solid::Control::BluetoothManager::BluetoothManager()
++        : QObject(), d(new BluetoothManagerPrivate(this))
++{
++    d->loadBackend("Bluetooth Management",
++                   "SolidBluetoothManager",
++                   "Solid::Control::Ifaces::BluetoothManager");
++
++    if (d->managerBackend() != 0) {
++        d->connectBackend(d->managerBackend());
++    }
++}
++
++Solid::Control::BluetoothManager::~BluetoothManager()
++{
++    // Delete all the interfaces, they are now outdated
++    typedef QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> BluetoothInterfaceIfacePair;
++
++    // Delete all the devices, they are now outdated
++    foreach (const BluetoothInterfaceIfacePair &pair, d->bluetoothInterfaceMap.values()) {
++        delete pair.first;
++        delete pair.second;
++    }
++
++    d->bluetoothInterfaceMap.clear();
++}
++
++Solid::Control::BluetoothInterfaceList Solid::Control::BluetoothManager::buildDeviceList(const QStringList  & ubiList) const
++{
++    BluetoothInterfaceList list;
++    Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(d->managerBackend());
++
++    if (backend == 0) return list;
++
++    foreach (const QString &ubi, ubiList) {
++        QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> pair = d->findRegisteredBluetoothInterface(ubi);
++
++        if (pair.first != 0) {
++            list.append(*pair.first);
++        }
++    }
++
++    return list;
++}
++
++Solid::Control::BluetoothInterfaceList Solid::Control::BluetoothManager::bluetoothInterfaces() const
++{
++    Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(d->managerBackend());
++
++    if (backend != 0) {
++        return buildDeviceList(backend->bluetoothInterfaces());
++    } else {
++        return BluetoothInterfaceList();
++    }
++}
++
++QString Solid::Control::BluetoothManager::defaultInterface() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothManager *, d->managerBackend(), QString(), defaultInterface());
++}
++
++Solid::Control::BluetoothInterface Solid::Control::BluetoothManager::findBluetoothInterface(const QString &ubi) const
++{
++    Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(d->managerBackend());
++
++    if (backend == 0) return d->invalidInterface;
++
++    QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> pair = d->findRegisteredBluetoothInterface(ubi);
++
++    if (pair.first != 0) {
++        return *pair.first;
++    } else {
++        return d->invalidInterface;
++    }
++}
++
++Solid::Control::BluetoothInputDevice Solid::Control::BluetoothManager::findBluetoothInputDevice(const QString &ubi) const
++{
++    Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(d->managerBackend());
++
++    if (backend == 0) return d->invalidInputDevice;
++
++    QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> pair = d->findRegisteredBluetoothInputDevice(ubi);
++
++    if (pair.first != 0) {
++        return *pair.first;
++    } else {
++        return d->invalidInputDevice;
++    }
++}
++
++KJob *Solid::Control::BluetoothManager::setupInputDevice(const QString &ubi)
++{
++    return_SOLID_CALL(Ifaces::BluetoothManager *, d->managerBackend(), 0, setupInputDevice(ubi));
++}
++
++Solid::Control::BluetoothInputDeviceList Solid::Control::BluetoothManager::bluetoothInputDevices() const
++{
++    BluetoothInputDeviceList list;
++    Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(d->managerBackend());
++
++    if (backend == 0) return list;
++
++    QStringList ubis = backend->bluetoothInputDevices();
++
++    foreach (const QString &ubi, ubis) {
++        QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> pair =
++            d->findRegisteredBluetoothInputDevice(ubi);
++
++        if (pair.first != 0) {
++            list.append(*pair.first);
++        }
++    }
++
++    return list;
++}
++
++Solid::Control::BluetoothSecurity *Solid::Control::BluetoothManager::security(const QString &interface)
++{
++    Ifaces::BluetoothManager *backendManager = qobject_cast<Ifaces::BluetoothManager*>(d->managerBackend());
++    if (backendManager!=0) {
++        Ifaces::BluetoothSecurity *backendSecurity = backendManager->security(interface);
++        return new Solid::Control::BluetoothSecurity(backendSecurity);
++    }
++    return 0;
++}
++
++void Solid::Control::BluetoothManager::removeInputDevice(const QString &ubi)
++{
++    SOLID_CALL(Ifaces::BluetoothManager *, d->managerBackend(), removeInputDevice(ubi));
++}
++
++void Solid::Control::BluetoothManagerPrivate::_k_interfaceAdded(const QString &ubi)
++{
++    QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> pair = bluetoothInterfaceMap.take(ubi);
++
++    if (pair.first != 0) {
++        // Oops, I'm not sure it should happen...
++        // But well in this case we'd better kill the old device we got, it's probably outdated
++
++        delete pair.first;
++        delete pair.second;
++    }
++
++    emit q->interfaceAdded(ubi);
++}
++
++void Solid::Control::BluetoothManagerPrivate::_k_interfaceRemoved(const QString &ubi)
++{
++    QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> pair = bluetoothInterfaceMap.take(ubi);
++
++    if (pair.first != 0) {
++        delete pair.first;
++        delete pair.second;
++    }
++
++    emit q->interfaceRemoved(ubi);
++}
++
++void Solid::Control::BluetoothManagerPrivate::_k_interfaceDestroyed(QObject *object)
++{
++    Ifaces::BluetoothInterface *device = qobject_cast<Ifaces::BluetoothInterface *>(object);
++
++    if (device != 0) {
++        QString ubi = device->ubi();
++        QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> pair = bluetoothInterfaceMap.take(ubi);
++        delete pair.first;
++    }
++}
++
++void Solid::Control::BluetoothManagerPrivate::_k_inputDeviceCreated(const QString &ubi)
++{
++    QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> pair = bluetoothInputDeviceMap.take(ubi);
++
++    if (pair.first != 0) {
++        // Oops, I'm not sure it should happen...
++        // But well in this case we'd better kill the old device we got, it's probably outdated
++
++        delete pair.first;
++        delete pair.second;
++    }
++
++    emit q->inputDeviceCreated(ubi);
++}
++
++void Solid::Control::BluetoothManagerPrivate::_k_inputDeviceRemoved(const QString &ubi)
++{
++    QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> pair = bluetoothInputDeviceMap.take(ubi);
++
++    if (pair.first != 0) {
++        delete pair.first;
++        delete pair.second;
++    }
++
++    emit q->inputDeviceRemoved(ubi);
++}
++
++void Solid::Control::BluetoothManagerPrivate::_k_inputDeviceDestroyed(QObject *object)
++{
++    Ifaces::BluetoothInputDevice *device = qobject_cast<Ifaces::BluetoothInputDevice *>(object);
++
++    if (device != 0) {
++        QString ubi = device->ubi();
++        QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> pair = bluetoothInputDeviceMap.take(ubi);
++        delete pair.first;
++    }
++}
++
++
++/***************************************************************************/
++
++void Solid::Control::BluetoothManagerPrivate::connectBackend(QObject *newBackend)
++{
++    QObject::connect(newBackend, SIGNAL(interfaceAdded(const QString &)),
++                     q, SLOT(_k_interfaceAdded(const QString &)));
++    QObject::connect(newBackend, SIGNAL(interfaceRemoved(const QString &)),
++                     q, SLOT(_k_interfaceRemoved(const QString &)));
++
++    QObject::connect(newBackend, SIGNAL(inputDeviceCreated(const QString &)),
++                     q, SLOT(_k_inputDeviceCreated(const QString &)));
++    QObject::connect(newBackend, SIGNAL(inputDeviceRemoved(const QString &)),
++                     q, SLOT(_k_inputDeviceRemoved(const QString &)));
++
++}
++
++QPair<Solid::Control::BluetoothInterface *, Solid::Control::Ifaces::BluetoothInterface *> Solid::Control::BluetoothManagerPrivate::findRegisteredBluetoothInterface(const QString &ubi) const
++{
++    if (bluetoothInterfaceMap.contains(ubi)) {
++        return bluetoothInterfaceMap[ubi];
++    } else {
++        Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(managerBackend());
++        Ifaces::BluetoothInterface *iface = 0;
++
++        if (backend != 0) {
++            iface = qobject_cast<Ifaces::BluetoothInterface *>(backend->createInterface(ubi));
++        }
++
++        if (iface != 0) {
++            BluetoothInterface *device = new BluetoothInterface(iface);
++            QPair<BluetoothInterface *, Ifaces::BluetoothInterface *> pair(device, iface);
++            QObject::connect(iface, SIGNAL(destroyed(QObject *)),
++                             q, SLOT(_k_interfaceDestroyed(QObject *)));
++            bluetoothInterfaceMap[ubi] = pair;
++            return pair;
++        } else {
++            return QPair<BluetoothInterface *, Ifaces::BluetoothInterface *>(0, 0);
++        }
++    }
++}
++
++QPair<Solid::Control::BluetoothInputDevice *, Solid::Control::Ifaces::BluetoothInputDevice *> Solid::Control::BluetoothManagerPrivate::findRegisteredBluetoothInputDevice(const QString &ubi) const
++{
++    if (bluetoothInputDeviceMap.contains(ubi)) {
++        return bluetoothInputDeviceMap[ubi];
++    } else {
++        Ifaces::BluetoothManager *backend = qobject_cast<Ifaces::BluetoothManager *>(managerBackend());
++        Ifaces::BluetoothInputDevice *iface = 0;
++
++        if (backend != 0) {
++            iface = qobject_cast<Ifaces::BluetoothInputDevice *>(backend->createBluetoothInputDevice(ubi));
++        }
++
++        if (iface != 0) {
++            BluetoothInputDevice *device = new BluetoothInputDevice(iface);
++            QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *> pair(device, iface);
++            bluetoothInputDeviceMap[ubi] = pair;
++            QObject::connect(iface, SIGNAL(destroyed(QObject *)),
++                             q, SLOT(_k_inputDeviceDestroyed(QObject *)));
++            return pair;
++        } else {
++            return QPair<BluetoothInputDevice *, Ifaces::BluetoothInputDevice *>(0, 0);
++        }
++    }
++}
++
++
++#include "bluetoothmanager.moc"
+--- /dev/null
++++ b/libs/solid/control/soliddefs_p.h
+@@ -0,0 +1,49 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_SOLIDDEFS_P_H
++#define SOLID_SOLIDDEFS_P_H
++
++#include <QObject>
++
++
++
++#define return_SOLID_CALL(Type, Object, Default, Method) \
++    Type t = qobject_cast<Type>(Object); \
++    if (t!=0) \
++    { \
++         return t->Method; \
++    } \
++    else \
++    { \
++         return Default; \
++    }
++
++
++
++#define SOLID_CALL(Type, Object, Method) \
++    Type t = qobject_cast<Type>(Object); \
++    if (t!=0) \
++    { \
++         t->Method; \
++    }
++
++
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/bluetoothremotedevice.cpp
+@@ -0,0 +1,259 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QMap>
++#include <QStringList>
++
++#include <solid/control/ifaces/bluetoothremotedevice.h>
++
++#include "frontendobject_p.h"
++
++#include "soliddefs_p.h"
++#include "bluetoothmanager.h"
++#include "bluetoothinterface.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class BluetoothRemoteDevicePrivate : public FrontendObjectPrivate
++    {
++    public:
++        BluetoothRemoteDevicePrivate(QObject *parent)
++            : FrontendObjectPrivate(parent) { }
++
++        void setBackendObject(QObject *object);
++    };
++}
++}
++
++Solid::Control::BluetoothRemoteDevice::BluetoothRemoteDevice(QObject *backendObject)
++    : QObject(), d_ptr(new BluetoothRemoteDevicePrivate(this))
++{
++    Q_D(BluetoothRemoteDevice);
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::BluetoothRemoteDevice::BluetoothRemoteDevice(const BluetoothRemoteDevice &device)
++    : QObject(), d_ptr(new BluetoothRemoteDevicePrivate(this))
++{
++    Q_D(BluetoothRemoteDevice);
++    d->setBackendObject(device.d_ptr->backendObject());
++}
++
++Solid::Control::BluetoothRemoteDevice::~BluetoothRemoteDevice()
++{}
++
++Solid::Control::BluetoothRemoteDevice &Solid::Control::BluetoothRemoteDevice::operator=(const Solid::Control::BluetoothRemoteDevice  & dev)
++{
++    Q_D(BluetoothRemoteDevice);
++    d->setBackendObject(dev.d_ptr->backendObject());
++
++    return *this;
++}
++
++bool Solid::Control::BluetoothRemoteDevice::operator==(const BluetoothRemoteDevice  & other) const
++{
++	return ubi() == other.ubi();
++}
++
++QString Solid::Control::BluetoothRemoteDevice::ubi() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), ubi());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::address() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), address());
++}
++
++bool Solid::Control::BluetoothRemoteDevice::isConnected() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), false, isConnected());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::version() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), version());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::revision() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), revision());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::manufacturer() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), manufacturer());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::company() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), company());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::majorClass() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), majorClass());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::minorClass() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), minorClass());
++}
++
++QStringList Solid::Control::BluetoothRemoteDevice::serviceClasses() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QStringList(), serviceClasses());
++}
++QString Solid::Control::BluetoothRemoteDevice::name() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), name());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::alias() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), alias());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::lastSeen() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), lastSeen());
++}
++
++QString Solid::Control::BluetoothRemoteDevice::lastUsed() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), QString(), lastUsed());
++}
++
++bool Solid::Control::BluetoothRemoteDevice::hasBonding() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), false, hasBonding());
++}
++
++int Solid::Control::BluetoothRemoteDevice::pinCodeLength() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), 0, pinCodeLength());
++}
++
++int Solid::Control::BluetoothRemoteDevice::encryptionKeySize() const
++{
++    Q_D(const BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), 0, encryptionKeySize());
++}
++
++KJob *Solid::Control::BluetoothRemoteDevice::createBonding()
++{
++    Q_D(BluetoothRemoteDevice);
++    return_SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), 0, createBonding());
++}
++
++void Solid::Control::BluetoothRemoteDevice::setAlias(const QString &alias)
++{
++    Q_D(BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), setAlias(alias));
++}
++
++void Solid::Control::BluetoothRemoteDevice::clearAlias()
++{
++    Q_D(BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), clearAlias());
++}
++
++void Solid::Control::BluetoothRemoteDevice::disconnect()
++{
++    Q_D(BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), disconnect());
++}
++
++void Solid::Control::BluetoothRemoteDevice::cancelBondingProcess()
++{
++    Q_D(BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), cancelBondingProcess());
++}
++
++void Solid::Control::BluetoothRemoteDevice::removeBonding()
++{
++    Q_D(const BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), removeBonding());
++}
++void Solid::Control::BluetoothRemoteDevice::serviceHandles(const QString &filter) const
++{
++    Q_D(const BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), serviceHandles(filter));
++}
++
++void Solid::Control::BluetoothRemoteDevice::serviceRecordAsXml(uint handle) const
++{
++    Q_D(const BluetoothRemoteDevice);
++    SOLID_CALL(Ifaces::BluetoothRemoteDevice *, d->backendObject(), serviceRecordAsXml(handle));
++}
++
++void Solid::Control::BluetoothRemoteDevicePrivate::setBackendObject(QObject *object)
++{
++    FrontendObjectPrivate::setBackendObject(object);
++
++    if (object) {
++        QObject::connect(object, SIGNAL(classChanged(uint)),
++                         parent(), SIGNAL(classChanged(uint)));
++        QObject::connect(object, SIGNAL(nameChanged(const QString &)),
++                         parent(), SIGNAL(nameChanged(const QString &)));
++        QObject::connect(object, SIGNAL(nameResolvingFailed()),
++                         parent(), SIGNAL(nameResolvingFailed()));
++        QObject::connect(object, SIGNAL(aliasChanged(const QString &)),
++                         parent(), SIGNAL(aliasChanged(const QString &)));
++        QObject::connect(object, SIGNAL(aliasCleared()),
++                         parent(), SIGNAL(aliasCleared()));
++        QObject::connect(object, SIGNAL(connected()),
++                         parent(), SIGNAL(connected()));
++        QObject::connect(object, SIGNAL(requestDisconnection()),
++                         parent(), SIGNAL(requestDisconnection()));
++        QObject::connect(object, SIGNAL(disconnected()),
++                         parent(), SIGNAL(disconnected()));
++        QObject::connect(object, SIGNAL(bondingCreated()),
++                         parent(), SIGNAL(bondingCreated()));
++        QObject::connect(object, SIGNAL(bondingRemoved()),
++                         parent(), SIGNAL(bondingRemoved()));
++	QObject::connect(object, SIGNAL(serviceHandlesAvailable(const QString &, const QList<uint> &)),
++			 parent(), SIGNAL(serviceHandlesAvailable(const QString &, const QList<uint> &)));
++	QObject::connect(object, SIGNAL(serviceRecordXmlAvailable(const QString &, const QString &)),
++			 parent(), SIGNAL(serviceRecordXmlAvailable(const QString &, const QString &)));
++	
++    }
++}
++
++#include "bluetoothremotedevice.moc"
+--- /dev/null
++++ b/libs/solid/control/networkmanager_p.h
+@@ -0,0 +1,66 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++#ifndef SOLID_NETWORKMANAGER_P_H
++#define SOLID_NETWORKMANAGER_P_H
++
++#include <QObject>
++#include <QMap>
++#include <QPair>
++
++#include "managerbase_p.h"
++
++#include "networkmanager.h"
++#include "networkinterface.h"
++
++namespace Solid
++{
++namespace Control
++{
++    namespace Ifaces
++    {
++        class NetworkInterface;
++    }
++
++    class NetworkManagerPrivate : public NetworkManager::Notifier, public ManagerBasePrivate
++    {
++        Q_OBJECT
++    public:
++        NetworkManagerPrivate();
++        ~NetworkManagerPrivate();
++
++        NetworkInterfaceList networkInterfaces();
++        const NetworkInterface &findNetworkInterface(const QString &uni);
++
++    private Q_SLOTS:
++        void _k_networkInterfaceAdded(const QString &uni);
++        void _k_networkInterfaceRemoved(const QString &uni);
++        void _k_destroyed(QObject *object);
++
++    private:
++        NetworkInterfaceList buildDeviceList(const QStringList &uniList);
++        QPair<NetworkInterface *, Ifaces::NetworkInterface *> findRegisteredNetworkInterface(const QString &uni);
++
++        QMap<QString, QPair<NetworkInterface *, Ifaces::NetworkInterface *> > m_networkInterfaceMap;
++        NetworkInterface m_invalidDevice;
++    };
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/network.h
+@@ -0,0 +1,111 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_NETWORK_H
++#define SOLID_IFACES_NETWORK_H
++
++#include <solid/control/solid_control_export.h>
++
++#include <QtCore/QObject>
++#include <QtCore/QList>
++#include <QtNetwork/QNetworkAddressEntry>
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++    /**
++     * This interface represents a generic Internet Protocol (IP) network which we may be connected to.
++     */
++    class SOLIDCONTROLIFACES_EXPORT Network
++    {
++    public:
++        /**
++         * Destroys a Network object.
++         */
++        virtual ~Network();
++
++        /**
++         * Retrieves the Unique Network Identifier (UNI) of the Network.
++         * This identifier is unique for each network and network interface in the system.
++         *
++         * @returns the Unique Network Identifier of the current network
++         */
++        virtual QString uni() const = 0;
++
++        /**
++         * Retrieves the addresses the device has on this network.
++         *
++         * @return the list of addresses
++         */
++        virtual QList<QNetworkAddressEntry> addressEntries() const = 0;
++
++        /**
++         * Retrieves the route we must follow when using this network. It's
++         * in particular used for VPN.
++         *
++         * @return the route address is available, QString() otherwise
++         */
++        virtual QString route() const = 0;
++
++        /**
++         * Retrieves the list of DNS servers to use on this network.
++         *
++         * @return the dns servers
++         */
++        virtual QList<QHostAddress> dnsServers() const = 0;
++
++        /**
++         * Retrieves the activation status of this network. For ethernets, this will always be true.
++         *
++         * @return true if this network is active, false otherwise
++         */
++        virtual bool isActive() const = 0;
++
++        /**
++         * Activates or deactivates this network. For ethernets, this has no effect.
++         *
++         * @param activated true to activate this network, false otherwise
++         */
++        virtual void setActivated(bool activated) = 0;
++
++    protected:
++    //Q_SIGNALS:
++        /**
++         * This signal is emitted when the settings of this network have changed.
++         */
++        virtual void ipDetailsChanged() = 0;
++
++        /**
++         * This signal is emitted when the activation state of this network
++         * has changed.
++         *
++         * @param activated true if the network is activated, false otherwise
++         */
++        virtual void activationStateChanged(bool activated) = 0;
++    };
++} //Ifaces
++} //Control
++} //Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::Network, "org.kde.Solid.Control.Ifaces.Network/0.1")
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothmanager.cpp
+@@ -0,0 +1,31 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "bluetoothmanager.h"
++#include "bluetoothsecurity.h"
++
++Solid::Control::Ifaces::BluetoothManager::BluetoothManager(QObject * parent) : QObject(parent)
++{}
++
++Solid::Control::Ifaces::BluetoothManager::~BluetoothManager()
++{}
++
++#include "bluetoothmanager.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothremotedevice.cpp
+@@ -0,0 +1,30 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "bluetoothremotedevice.h"
++
++Solid::Control::Ifaces::BluetoothRemoteDevice::BluetoothRemoteDevice(QObject * parent) : QObject(parent)
++{}
++
++Solid::Control::Ifaces::BluetoothRemoteDevice::~BluetoothRemoteDevice()
++{}
++
++#include "bluetoothremotedevice.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothsecurity.h
+@@ -0,0 +1,73 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++    Copyright (C) 2007 Juan González <jaguilera at opsiland.info>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_BLUETOOTHSECURITY_H
++#define SOLID_IFACES_BLUETOOTHSECURITY_H
++
++#include <solid/control/solid_control_export.h>
++#include <solid/control/bluetoothsecurity.h> // So we know about Solid::Control::BluetoothPassKeyAgent
++
++#include <QObject>
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++/**
++ * Represents a bluetooth interface as seen by the bluetooth subsystem.
++ */
++class SOLIDCONTROLIFACES_EXPORT BluetoothSecurity : public QObject
++{
++    Q_OBJECT
++public:
++    /**
++     * Create a BluetoothSecurity object for all Bluetooth Interfaces.
++     *
++     * @param parent the parent object
++     */
++    BluetoothSecurity(QObject *parent = 0);
++
++    /**
++     * Create a BluetoothSecurity object for a certain Bluetooth Interfaces.
++     *
++     * @param interface the ubi of a certain Bluetooth Interface
++     * @param parent the parent object
++     */
++    BluetoothSecurity(const QString &interface, QObject *parent = 0);
++
++    /**
++     * Destructs a BluetoothSecurity object.
++     */
++    virtual ~BluetoothSecurity();
++public Q_SLOTS:
++    virtual void setPasskeyAgent(Solid::Control::BluetoothPasskeyAgent *agent) = 0;
++    virtual void setAuthorizationAgent(Solid::Control::BluetoothAuthorizationAgent *agent) = 0;
++};
++} //Ifaces
++} //Control
++} //Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::BluetoothSecurity, "org.kde.Solid.Ifaces.BluetoothSecurity/0.1")
++
++#endif
++
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothmanager.h
+@@ -0,0 +1,164 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_BLUETOOTHMANAGER
++#define SOLID_IFACES_BLUETOOTHMANAGER
++
++#include <QtCore/QObject>
++#include <solid/control/solid_control_export.h>
++
++class KJob;
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++class BluetoothSecurity;
++/**
++ * This class specifies the interface a backend will have to implement in
++ * order to be used in the system.
++ *
++ * A bluetooth manager allow to query the underlying platform to discover the
++ * available bluetooth interfaces.
++ */
++class SOLIDCONTROLIFACES_EXPORT BluetoothManager : public QObject
++{
++    Q_OBJECT
++public:
++    /**
++     * Constructs a BluetoothManager.
++     *
++     * @param parent the parent object
++     */
++    BluetoothManager(QObject * parent = 0);
++    /**
++     * Destructs a BluetoothManager object.
++     */
++    virtual ~BluetoothManager();
++
++    /**
++     * Retrieves the list of all the bluetooth interfaces Universal Bluetooth Identifiers (UBIs)
++     * in the system.
++     *
++     * @return the list of bluetooth interfaces available in this system
++     */
++    virtual QStringList bluetoothInterfaces() const = 0;
++
++    /**
++     * Retrieves the default bluetooth interface Universal Bluetooth Identifiers (UBIs)
++     * of the system.
++     *
++     * @return the UBI of the default bluetooth interface
++     */
++    virtual QString defaultInterface() const = 0;
++
++    /**
++     * Instantiates a new BluetoothInterface object from this backend given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth interface instantiated
++     * @returns a new BluetoothInterface object if there's a device having the given UBI, 0 otherwise
++     */
++    virtual QObject *createInterface(const QString &ubi) = 0;
++
++    /**
++     * Retrieves the list of Universal Bluetooth Identifiers (UBIs) of bluetooth input devices
++     * which are configured in the system. Configured means also not connected devices.
++     *
++     * @return the list of bluetooth input devices configured in this system
++     */
++    virtual QStringList bluetoothInputDevices() const = 0;
++
++    /**
++     * Instantiates a new BluetoothInputDevice object from this backend given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth input device instantiated
++     * @returns a new BluetoothInputDevice object if there's a device having the given UBI, 0 otherwise
++     */
++    virtual QObject *createBluetoothInputDevice(const QString &ubi) = 0;
++
++    /**
++     * Setup a new bluetooth input device.
++     *
++     * @param ubi the ubi of the bluetooth input device
++     * @returns job handling of the operation.
++     */
++    virtual KJob *setupInputDevice(const QString &ubi) = 0;
++    
++    /**
++     * Gets an instance of BluetoothSecurity to handle pairing/authorization requests
++     */
++    virtual Solid::Control::Ifaces::BluetoothSecurity* security(const QString &interface) = 0;
++
++public Q_SLOTS:
++    /**
++     * Remove the configuraiton of a bluetooth input device.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    virtual void removeInputDevice(const QString  & ubi) = 0;
++
++Q_SIGNALS:
++    /**
++     * This signal is emitted when a new bluetooth interface is available.
++     *
++     * @param ubi the bluetooth interface identifier
++     */
++    void interfaceAdded(const QString  & ubi);
++
++    /**
++     * This signal is emitted when a bluetooth interface is not available anymore.
++     *
++     * @param ubi the bluetooth interface identifier
++     */
++    void interfaceRemoved(const QString  & ubi);
++
++    /**
++     * This signal is emitted when the default bluetooth interface changed. 
++     *
++     * @param ubi the bluetooth interface identifier
++     */
++    void defaultInterfaceChanged(const QString  & ubi);
++
++    /**
++     * This signal is emitted when a new bluetooth input device got configured/created.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    void inputDeviceCreated(const QString  & ubi);
++
++    /**
++     * This signal is emitted when a bluetooth input device configuration is not available anymore.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    void inputDeviceRemoved(const QString  & ubi);
++
++};
++
++} // Ifaces
++
++} // Control
++
++} // Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothinputdevice.cpp
+@@ -0,0 +1,30 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "bluetoothinputdevice.h"
++
++Solid::Control::Ifaces::BluetoothInputDevice::BluetoothInputDevice(QObject * parent) : QObject(parent)
++{}
++
++Solid::Control::Ifaces::BluetoothInputDevice::~BluetoothInputDevice()
++{}
++
++#include "bluetoothinputdevice.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothremotedevice.h
+@@ -0,0 +1,316 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_BLUETOOTHREMOTEDEVICE
++#define SOLID_IFACES_BLUETOOTHREMOTEDEVICE
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++#include <solid/control/solid_control_export.h>
++
++class KJob;
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++/**
++ * This interface represents a remote bluetooth device which we may be connected to.
++ */
++class SOLIDCONTROLIFACES_EXPORT BluetoothRemoteDevice : public QObject
++{
++    Q_OBJECT
++public:
++    /**
++     * Create a BluetoothRemoteDevice.
++     *
++     * @param parent the parent object
++     */
++    BluetoothRemoteDevice(QObject *parent = 0);
++
++    /**
++     * Destructs a BluetoothRemoteDevice object.
++     */
++    virtual ~BluetoothRemoteDevice();
++
++    /**
++     * Retrieves the Universal Bluetooth Identifier (UBI) of the remote device.
++     * This identifier is unique for each remote device and bluetooth interface in the system.
++     *
++     * @returns the Universal Bluetooth Identifier of the current remote device.
++     */
++    virtual QString ubi() const = 0;
++
++    /**
++     * Retrieves MAC address of the bluetooth remote device.
++     *
++     * @returns MAC address of remote device.
++     */
++    virtual QString address() const = 0;
++
++
++    /**
++     * Retrieves true if remote device is connected.
++     *
++     * @returns true if remote bluetooth device is connected otherwise false.
++     */
++    virtual bool isConnected() const = 0;
++
++    /**
++     * Retrieves the bluetooth version of the remote device.
++     * LMP version (+ EDR support)
++     *
++     * @returns version of bluetooth chip.
++     */
++    virtual QString version() const = 0;
++
++    /**
++     * Retrieves the revision of the bluetooth chip of the remote device.
++     *
++     * @returns revision of bluetooth chip.
++     */
++    virtual QString revision() const = 0;
++
++    /**
++     * Retrieves company name based on the device address.
++     *
++     * @returns manufacturer string of bluetooth chip.
++     */
++    virtual QString manufacturer() const = 0;
++
++    /**
++     * Retrieves the manufacturer of the bluetooth chip of the remote device.
++     *
++     * @returns company string of the bluetooth chip.
++     */
++    virtual QString company() const = 0;
++
++    /**
++     * Retrieves the major class of the remote device.
++     * Example: "computer"
++     *
++     * @returns major class of remote device.
++     */
++    virtual QString majorClass() const = 0;
++
++    /**
++     * Retrieves the minor class of the remote device.
++     * Exampe: "laptop"
++     *
++     * @returns minor class of the remote device.
++     */
++    virtual QString minorClass() const = 0;
++
++    /**
++     * Retrieves a list of service classes of the remote device.
++     * Example: ["networking", "object transfer"]
++     *
++     * @returns list of service classes of the remote device.
++     */
++    virtual QStringList serviceClasses() const = 0;
++    /**
++     * Retrieves the real name of the remote device. See also alias().
++     * Example: "Daniel's mobile"
++     *
++     * @returns name of remote device.
++     */
++    virtual QString name() const = 0;
++
++    /**
++     * Retrieves alias of remote device. This is a local alias name for the remote device.
++     * If this string is empty the frontend should should use name(). This is handy if
++     * someone is using several bluetooth remote device with the same name. alias() should
++     * be preferred used by the frontend.
++     * Example: "Company mobile"
++     *
++     * @retuns local alias of remote device.
++     */
++    virtual QString alias() const = 0;
++
++    /**
++     * Retrieves the date and time when the remote device has been seen.
++     * Example: "2007-03-20 22:14:00 GMT"
++     *
++     * @returns date and time when the remote device has been seen.
++     */
++    virtual QString lastSeen() const = 0;
++
++    /**
++     * Retrieves the date and time when the remote device has been used.
++     * Example: "2007-03-20 22:14:00 GMT"
++     *
++     * @returns date and time when the remote device has been used.
++     */
++    virtual QString lastUsed() const = 0;
++
++    /**
++     * Retrieves true if remote device has bonding.
++     *
++     * @returns true if remote device has bonding.
++     */
++    virtual bool hasBonding() const = 0;
++
++    /**
++     * Retrieves PIN code length that was used in the pairing process of remote device.
++     *
++     * @returns PIN code length of pairing.
++     */
++    virtual int pinCodeLength() const = 0;
++
++    /**
++     * Retrieves currently used encryption key size of remote device.
++     *
++     * @returns encryption key size.
++     */
++    virtual int encryptionKeySize() const = 0;
++
++    /**
++     * Create bonding ("pairing") with remote device.
++     *
++     * @returns the job handling of the operation.
++     */
++    virtual KJob *createBonding() = 0;
++
++
++public Q_SLOTS:
++    /**
++     * Set alias for remote device.
++     *
++     * @param alias new alias name
++     */
++    virtual void setAlias(const QString &alias) = 0;
++
++    /**
++     * Clear alias for remote device.
++     */
++    virtual void clearAlias() = 0;
++
++    /**
++     * Disconnect remote device.
++     */
++    virtual void disconnect() = 0;
++
++    /**
++     * Cancel bonding process of remote device.
++     */
++    virtual void cancelBondingProcess() = 0;
++
++    /**
++     * Remove bonding bonding of remote device.
++     */
++    virtual void removeBonding() = 0;
++    /**
++     * Obtains a list of unique identifiers to each service provided by this remote device.
++     * As this is a slow operation, this method only queues the message
++     * in the dbus and returns the list of handles using the serviceHandlesAvailable signal
++     * 
++     * NOTE: Most local adapters won't support more than one search at a time, so serialize your requests
++     * 
++     * @param filter A filter to apply to the search (look at http://wiki.bluez.org/wiki/HOWTO/DiscoveringServices#Searchpatterns)
++     */
++    virtual void serviceHandles(const QString &filter) const = 0;
++    /**
++     * Requests the service record associated with the given handle.
++     * As this is a slow operation, this method only queues the message
++     * in the dbus and returns the XML record using the serviceRecordXmlAvailable signal.
++     * 
++     * NOTE: Most local adapters won't support more than one search at a time, so serialize your requests
++     * 
++     * @param handle The handle that uniquely identifies the service record requested.
++       */
++    virtual void serviceRecordAsXml(uint handle) const = 0;
++Q_SIGNALS:
++    /**
++     * Class has been changed of remote device.
++     *
++     * @params deviceClass the device class of the remote device
++     */
++    virtual void classChanged(uint deviceClass) = 0;
++
++    /**
++     * Name has beend changed of remote device.
++     *
++     * @params name the name of the remote device
++     */
++    virtual void nameChanged(const QString &name) = 0;
++
++    /**
++     * Resolving of remote device name failed.
++     */
++    virtual void nameResolvingFailed() = 0;
++
++    /**
++     * Alias has been changed of remote device.
++     *
++     * @params alias the alias of the remote device
++     */
++    virtual void aliasChanged(const QString &alias) = 0;
++
++    /**
++     * Alias got cleared of remote device.
++     */
++    virtual void aliasCleared() = 0;
++
++    /**
++     * Remote device has been connected.
++     */
++    virtual void connected() = 0;
++
++    /**
++     * Disconnection has been requested for remote device.
++     */
++    virtual void requestDisconnection() = 0;
++
++    /**
++     * Remote device has been disconnected.
++     */
++    virtual void disconnected() = 0;
++
++    /**
++     * Bonding with remote device has been created.
++     */
++    virtual void bondingCreated() = 0;
++
++    /**
++     * Bonding has been removed of remote device.
++     */
++    virtual void bondingRemoved() = 0;
++    /**
++     * A new service record is available
++     */
++    virtual void serviceRecordXmlAvailable(const QString &ubi, const QString &record) = 0;
++    /**
++     * Search for service handles is done
++     */
++    virtual void serviceHandlesAvailable(const QString &ubi, const QList<uint> &handles) = 0;
++};
++
++} // Ifaces
++
++} // Control
++
++} // Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::BluetoothRemoteDevice, "org.kde.Solid.Control.Ifaces.BluetoothRemoteDevice/0.1")
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/wirelessnetwork.cpp
+@@ -0,0 +1,28 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "wirelessnetwork.h"
++
++Solid::Control::Ifaces::WirelessNetwork::~WirelessNetwork()
++{
++
++}
++
++
++
+--- /dev/null
++++ b/libs/solid/control/ifaces/networkinterface.cpp
+@@ -0,0 +1,33 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "networkinterface.h"
++
++Solid::Control::Ifaces::NetworkInterface::NetworkInterface(QObject *parent)
++    : QObject(parent)
++{
++
++}
++
++Solid::Control::Ifaces::NetworkInterface::~NetworkInterface()
++{
++
++}
++
++#include "networkinterface.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothinputdevice.h
+@@ -0,0 +1,130 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_BLUETOOTHINPUTDEVICE
++#define SOLID_IFACES_BLUETOOTHINPUTDEVICE
++
++#include <QtCore/QObject>
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++/**
++ * A BluetoothInputDevice object allows to manage the connection of a bluetooth input device.
++ */
++class SOLIDCONTROLIFACES_EXPORT BluetoothInputDevice : public QObject
++{
++    Q_OBJECT
++public:
++    /**
++     * Constructs a BluetoothInputDevice.
++     *
++     * @param parent the parent object
++     */
++    BluetoothInputDevice(QObject * parent = 0);
++
++    /**
++     * Destructs a BluetoothInputDevice object.
++     */
++    virtual ~BluetoothInputDevice();
++
++    /**
++     * Retrieves ubi of bluetooth input device.
++     *
++     * @returns ubi of bluetooth input device
++     */
++    virtual QString ubi() const = 0;
++
++    /**
++     * Retrieves connection status of bluetooth input device.
++     *
++     * @returns true if bluetooth input device is connected
++     */
++    virtual bool isConnected() const = 0;
++
++    /**
++     * Retrieves MAC address of bluetooth input device.
++     *
++     * @returns MAC address of bluetooth input device
++     */
++    virtual QString address() const = 0;
++
++    /**
++     * Retrievies Name of bluetooth input device.
++     *
++     * @returns Name of bluetooth input device
++     */
++    virtual QString name() const = 0;
++
++    /**
++     * Retrieves Product ID of bluetooth input device.
++     *
++     * @returns Product ID of bluetooth input device
++     */
++    virtual QString productID() const = 0;
++
++    /**
++     * Retrieves Vendor ID of bluetooth input device.
++     *
++     * @returns Vendor ID of bluetooth input device
++     */
++    virtual QString vendorID() const = 0;
++
++public Q_SLOTS:
++    /**
++     * Connect bluetooth input device.
++     */
++    virtual void slotConnect() = 0;
++
++    /**
++     * Disconnect bluetooth input device.
++     */
++    virtual void slotDisconnect() = 0;
++
++Q_SIGNALS:
++    /**
++     * This signal is emitted when the bluetooth input device is connected.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    virtual void connected() = 0;
++
++    /**
++     * This signal is emitted when the bluetooth input device is not available anymore.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    virtual void disconnected() = 0;
++};
++
++} // Ifaces
++
++} // Control
++
++} // Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::BluetoothInputDevice, "org.kde.Solid.Control.Ifaces.BluetoothInputDevice/0.1")
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/wirelessnetwork.h
+@@ -0,0 +1,181 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006,2007 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_WIRELESSNETWORK_H
++#define SOLID_IFACES_WIRELESSNETWORK_H
++
++#include <solid/control/solid_control_export.h>
++
++#include <QtCore/QStringList>
++
++#include <solid/control/wirelessnetwork.h>
++#include <solid/control/ifaces/network.h>
++
++
++typedef QString MacAddress;
++typedef QStringList MacAddressList;
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++    /**
++     * This type of networks is used by wifi network interfaces.
++     */
++    class SOLIDCONTROLIFACES_EXPORT WirelessNetwork : virtual public Network
++    {
++    public:
++        /**
++         * Destroys a WirelessNetwork object
++         */
++        virtual ~WirelessNetwork();
++
++        /**
++         * Retrieves the current signal strength of this wifi network.
++         *
++         * @return the signal strength as a percentage
++         */
++        virtual int signalStrength() const = 0;
++
++        /**
++         * Retrieves the announced bitrate of this wifi network.
++         *
++         * @return the bitrate in bit/s
++         */
++        virtual int bitrate() const = 0;
++
++        /**
++         * Retrieves the radio channel frequency that this wifi network is visible on.
++         *
++         * @return the frequency
++         */
++        virtual double frequency() const = 0;
++
++        /**
++         * Retrieves the capabilities of this wifi network.
++         *
++         * @return the flag set describing the capabilities
++         * @see Solid::Control::WirelessNetwork::DeviceInterface
++         */
++        virtual Solid::Control::WirelessNetwork::Capabilities capabilities() const = 0;
++
++
++
++
++        /**
++         * Retrieves the Extended Service Set Identifier (ESSID) of this wifi network.
++         *
++         * @return the network essid
++         */
++        virtual QString essid() const = 0;
++
++        /**
++         * Retrieves the operation mode of this network.
++         *
++         * @return the current mode
++         * @see Solid::Control::WirelessNetwork::OperationMode
++         */
++        virtual Solid::Control::WirelessNetwork::OperationMode mode() const = 0;
++
++        /**
++         * Indicates if the network interface is associated to this network.
++         *
++         * @return true if the device is associated, false otherwise
++         */
++        virtual bool isAssociated() const = 0;
++
++        /**
++         * Indicates if this network uses an encryption scheme.
++         *
++         * @return true if the network is encrypted, false otherwise
++         */
++        virtual bool isEncrypted() const = 0;
++
++        /**
++         * Indicates if the network is hidden and doesn't announce its ESSID.
++         *
++         * @return true if the network is hidden, false otherwise
++         */
++        virtual bool isHidden() const = 0;
++
++        /**
++         * Retrieves the list of access points or ad hoc network nodes making up the
++         * network that are currently visible to the device.
++         *
++         * @return the list of MAC address of the currently visible nodes
++         */
++        virtual MacAddressList bssList() const = 0;
++
++        /**
++         * Retrieves the current authentication scheme used by this network.
++         *
++         * @return the current authentication object, or 0 if none is used for now
++         */
++        virtual Solid::Control::Authentication *authentication() const = 0;
++
++        /**
++         * Sets the authentication object to use with this network.
++         *
++         * @param authentication the new authentication scheme to use
++         */
++        virtual void setAuthentication(Authentication *authentication) = 0;
++
++    protected:
++    //Q_SIGNALS:
++
++        /**
++         * This signal is emitted when the signal strength of this network has changed.
++         *
++         * @param strength the new signal strength value for this network
++         */
++        virtual void signalStrengthChanged(int strength) = 0;
++
++        /**
++         * This signal is emitted when the bitrate of this network has changed.
++         *
++         * @param bitrate the new bitrate value for this network
++         */
++        virtual void bitrateChanged(int bitrate) = 0;
++
++        /**
++         * This signal is emitted when the association state of this device
++         * has changed.
++         *
++         * @param associated true if the network is associated, false otherwise
++         */
++        virtual void associationChanged(bool associated) = 0;
++
++        /**
++         * Emitted when the network requires authentication data in order to be able to connect.
++         * Respond to this by calling setAuthentication.
++         *
++         * This signal is emitted when the network requires authentication data in order
++         * to be able to connect. Respond to this by calling setAuthentication().
++         */
++        virtual void authenticationNeeded() = 0;
++    };
++} //Ifaces
++} //Control
++} //Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::WirelessNetwork, "org.kde.Solid.Control.Ifaces.WirelessNetwork/0.1")
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/authentication.cpp
+@@ -0,0 +1,27 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006,2007 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "authentication.h"
++
++
++/******************************************************************************/
++
++Solid::Control::Ifaces::AuthenticationValidator::~AuthenticationValidator()
++{
++}
+--- /dev/null
++++ b/libs/solid/control/ifaces/networkinterface.h
+@@ -0,0 +1,195 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_NETWORKINTERFACE_H
++#define SOLID_IFACES_NETWORKINTERFACE_H
++
++#include <QtCore/QList>
++#include <solid/control/solid_control_export.h>
++
++#include <solid/control/networkinterface.h>
++
++#include <QtCore/QObject>
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++    /**
++     * Represents a network interface as seen by the networking subsystem.
++     *
++     * For non network specific hardware details,
++     * @see Solid::Control::Ifaces::NetworkHw
++     */
++    class SOLIDCONTROLIFACES_EXPORT NetworkInterface : public QObject
++    {
++        Q_OBJECT
++    public:
++        /**
++         * Create a NetworkInterface.
++         *
++         * @param parent the parent object
++         */
++        NetworkInterface(QObject *parent = 0);
++
++        /**
++         * Destructs a NetworkInterface object.
++         */
++        virtual ~NetworkInterface();
++
++        /**
++         * Retrieves the Unique Network Identifier (UNI) of the NetworkInterface.
++         * This identifier is unique for each network and network interface in the system.
++         *
++         * @returns the Unique Network Identifier of the current network interface
++         */
++        virtual QString uni() const = 0;
++
++        /**
++         * Retrieves the activation status of this network interface.
++         *
++         * @return true if this network interface is active, false otherwise
++         */
++        virtual bool isActive() const = 0;
++
++        /**
++         * Retrieves the type of this network interface. For example it allows to check
++         * if a device is wired or wireless.
++         *
++         * @return this network interface type
++         * @see Solid::Control::NetworkInterface::Type
++         */
++        virtual Solid::Control::NetworkInterface::Type type() const = 0;
++
++        /**
++         * Retrieves the current state of the network connection held by this device.
++         * It's a high level view of the connection. It's user oriented so technically
++         * it provides states coming from different layers.
++         *
++         * @return the current connection state
++         * @see Solid::Control::NetworkInterface::ConnectionState
++         */
++        virtual Solid::Control::NetworkInterface::ConnectionState connectionState() const = 0;
++
++        /**
++         * Retrieves the current signal strength of this network interface. It ranges from 0 to 100.
++         *
++         * @return the signal strength as a percentage, for ethernet device it reports 100
++         */
++        virtual int signalStrength() const = 0;
++
++        /**
++         * Retrieves the maximum speed as reported by the device. Note that it's a design
++         * related information and that the device might not reach this maximum.
++         *
++         * @return the device maximum speed
++         */
++        virtual int designSpeed() const = 0;
++
++        /**
++         * Indicates if the network interfaces sees a carrier.
++         *
++         * @return true if there's a carrier, false otherwise
++         */
++        virtual bool isLinkUp() const = 0;
++
++        /**
++         * Retrieves the capabilities supported by this device.
++         *
++         * @return the capabilities of the device
++         * @see Solid::Control::NetworkInterface::Capabilities
++         */
++        virtual Solid::Control::NetworkInterface::Capabilities capabilities() const = 0;
++
++        /**
++         * Instantiates a new Network object from the current backend given its UNI.
++         *
++         * @param uni the identifier of the network instantiated
++         * @returns a new Network object if there's a network having the given UNI for this device, 0 otherwise
++         */
++        virtual QObject *createNetwork(const QString  & uni) = 0;
++
++        /**
++         * Retrieves the networks available via this network interfaces.
++         *
++         * For wired network interfaces, this will probably be a single network,
++         * but with wireless, multiple networks may be accessible.
++         *
++         * @return a list of network UNIs.
++         */
++        virtual QStringList networks() const = 0;
++
++    Q_SIGNALS:
++
++        /**
++         * This signal is emitted when the device's activation status changed.
++         * This may be emitted if the user turns off the network interface via a physical switch.
++         *
++         * @param activated true if the device is active, false otherwise
++         */
++        void activeChanged(bool activated);
++
++        /**
++         * This signal is emitted when the device's link status changed. For example, if there
++         * is no carrier anymore.
++         *
++         * @param linkActivated true if the carrier got detected, false otherwise
++         */
++        void linkUpChanged(bool linkActivated);
++
++
++        /**
++         * This signal is emitted when the device's signal strength changed.
++         *
++         * @param strength the new device signal strength
++         */
++        void signalStrengthChanged(int strength);
++
++        /**
++         * This signal is emitted when the device's connection state changed.
++         * For example, if the device was disconnected and started to activate
++         *
++         * @param state the new state of the connection
++         * @see Solid::Control::NetworkInterface::ConnectionState
++         */
++        void connectionStateChanged(int state);
++
++        /**
++         * This signal is emitted when the device detects a new reachable network.
++         *
++         * @param uni the new network identifier
++         */
++        void networkAppeared(const QString  & uni);
++
++        /**
++         * This signal is emitted when the device decides that a network is not reachable anymore.
++         *
++         * @param uni the identifier of the network that disappeared
++         */
++        void networkDisappeared(const QString  & uni);
++    };
++} //Ifaces
++} //Control
++} //Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::NetworkInterface, "org.kde.Solid.Control.Ifaces.NetworkInterface/0.1")
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/authentication.h
+@@ -0,0 +1,58 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006,2007 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_AUTHENTICATION_H
++#define SOLID_IFACES_AUTHENTICATION_H
++
++#include <QtCore/QObject>
++#include <QtCore/QMap>
++#include <QtCore/QString>
++
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++    class Authentication;
++
++namespace Ifaces
++{
++    /**
++     * Utility interface
++     * Specifies a backend specific validator class to validate authentication
++     * Can be used for example to authenticate user input as they type
++     */
++    class SOLIDCONTROLIFACES_EXPORT AuthenticationValidator
++    {
++        public:
++            virtual ~AuthenticationValidator();
++            /**
++             * Call this to check if an authentication is valid
++             * (All secrets present, passphrase length correct
++             */
++            virtual bool validate(const Authentication *) = 0;
++    };
++} // Ifaces
++} // Control
++} // Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::AuthenticationValidator, "org.kde.Solid.Control.Ifaces.AuthenticationValidator/0.1")
++
++#endif /* SOLID_IFACES_AUTHENTICATION_H */
+--- /dev/null
++++ b/libs/solid/control/ifaces/networkmanager.cpp
+@@ -0,0 +1,32 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "networkmanager.h"
++
++Solid::Control::Ifaces::NetworkManager::NetworkManager(QObject * parent) : QObject(parent)
++{
++
++}
++
++Solid::Control::Ifaces::NetworkManager::~NetworkManager()
++{
++
++}
++
++#include "networkmanager.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothinterface.cpp
+@@ -0,0 +1,31 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "bluetoothinterface.h"
++
++Solid::Control::Ifaces::BluetoothInterface::BluetoothInterface(QObject *parent)
++        : QObject(parent)
++{}
++
++Solid::Control::Ifaces::BluetoothInterface::~BluetoothInterface()
++{}
++
++#include "bluetoothinterface.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/powermanager.cpp
+@@ -0,0 +1,34 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "powermanager.h"
++
++
++Solid::Control::Ifaces::PowerManager::PowerManager(QObject *parent)
++    : QObject(parent)
++{
++
++}
++
++Solid::Control::Ifaces::PowerManager::~PowerManager()
++{
++
++}
++
++#include "powermanager.moc"
+--- /dev/null
++++ b/libs/solid/control/ifaces/network.cpp
+@@ -0,0 +1,26 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "network.h"
++
++Solid::Control::Ifaces::Network::~Network()
++{
++
++}
++
+--- /dev/null
++++ b/libs/solid/control/ifaces/networkmanager.h
+@@ -0,0 +1,139 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_NETWORKMANAGER
++#define SOLID_IFACES_NETWORKMANAGER
++
++#include <QtCore/QObject>
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++    /**
++     * This class specifies the interface a backend will have to implement in
++     * order to be used in the system.
++     *
++     * A network manager allow to query the underlying platform to discover the
++     * available network interfaces and reachable network. It has also the
++     * responsibility to notify when a network interface or a network appear or disappear.
++     */
++    class SOLIDCONTROLIFACES_EXPORT NetworkManager : public QObject
++    {
++        Q_OBJECT
++    public:
++        /**
++         * Constructs a NetworkManager.
++         *
++         * @param parent the parent object
++         */
++        NetworkManager(QObject * parent = 0);
++        /**
++         * Destructs a NetworkManager object.
++         */
++        virtual ~NetworkManager();
++
++
++        /**
++         * Retrieves the list of all the network interfaces Unique Network Identifiers (UNIs)
++         * in the system. It includes both hardware and virtual devices.
++         *
++         * @return the list of network interfaces available in this system
++         */
++        virtual QStringList networkInterfaces() const = 0;
++
++        /**
++         * Instantiates a new NetworkInterface object from this backend given its UNI.
++         *
++         * @param uni the identifier of the network interface instantiated
++         * @returns a new NetworkInterface object if there's a device having the given UNI, 0 otherwise
++         */
++        virtual QObject *createNetworkInterface(const QString &uni) = 0;
++
++        /**
++         * Instantiates a new AuthenticationValidator object.
++         *
++         * @returns a new AuthenticationValidator object, or 0 on failure
++         */
++        virtual QObject *createAuthenticationValidator() = 0;
++
++
++        /**
++         * Retrieves the activation status of networking (as a whole) in the system.
++         *
++         * @return true if this networking is enabled, false otherwise
++         */
++        virtual bool isNetworkingEnabled() const = 0;
++
++        /**
++         * Retrieves the activation status of wireless networking in the system.
++         *
++         * @return true if this wireless networking is enabled, false otherwise
++         */
++        virtual bool isWirelessEnabled() const = 0;
++
++
++    public Q_SLOTS:
++        /**
++         * Activates or deactivates networking (as a whole).
++         *
++         * @param enabled true to activate networking, false otherwise
++         */
++        virtual void setNetworkingEnabled(bool enabled) = 0;
++
++        /**
++         * Activates or deactivates wireless networking.
++         *
++         * @param enabled true to activate wireless networking, false otherwise
++         */
++        virtual void setWirelessEnabled(bool enabled) = 0;
++
++        /**
++         * Informs the system of hidden networks.
++         *
++         * @param networkName the name of the hidden network that could be discovered
++         */
++        virtual void notifyHiddenNetwork(const QString &networkName) = 0;
++
++    Q_SIGNALS:
++        /**
++         * This signal is emitted when a new network interface is available.
++         *
++         * @param uni the network interface identifier
++         */
++        void networkInterfaceAdded(const QString  & uni);
++
++        /**
++         * This signal is emitted when a network interface is not available anymore.
++         *
++         * @param uni the network interface identifier
++         */
++        void networkInterfaceRemoved(const QString  & uni);
++    };
++
++} // Ifaces
++
++} // Control
++
++} // Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothinterface.h
+@@ -0,0 +1,360 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_BLUETOOTHINTERFACE_H
++#define SOLID_IFACES_BLUETOOTHINTERFACE_H
++
++#include <QtCore/QList>
++#include <solid/control/solid_control_export.h>
++
++#include <solid/control/bluetoothinterface.h>
++#include <solid/control/ifaces/bluetoothremotedevice.h>
++
++#include <QtCore/QObject>
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++/**
++ * Represents a bluetooth interface as seen by the bluetooth subsystem.
++ */
++class SOLIDCONTROLIFACES_EXPORT BluetoothInterface : public QObject
++{
++    Q_OBJECT
++public:
++    /**
++     * Create a BluetoothInterface.
++     *
++     * @param parent the parent object
++     */
++    BluetoothInterface(QObject *parent = 0);
++
++    /**
++     * Destructs a BluetoothInterface object.
++     */
++    virtual ~BluetoothInterface();
++
++    /**
++     * Retrieves the Universal Bluetooth Identifier (UBI) of the BluetoothInterface.
++     * This identifier is unique for each bluetooth remote device and bluetooth interface in the system.
++     *
++     * @returns the Universal Bluetooth Identifier of the current bluetooth interface
++     */
++    virtual QString ubi() const = 0;
++
++    /**
++     * Retrieves the MAC address of the bluetooth interface/adapter.
++     *
++     * @returns MAC address of bluetooth interface
++     */
++    virtual QString address() const = 0;
++
++    /**
++     * Retrieves the version of the chip of the bluetooth interface/adapter.
++     * Example: "Bluetooth 2.0 + EDR"
++     *
++     * @returns bluetooth chip version
++     */
++    virtual QString version() const = 0;
++
++    /**
++     * Retrieves the revision of the chip of the bluetooth interface/adapter.
++     * Example: "HCI 19.2"
++     *
++     * @returns bluetooth chip revision
++     */
++    virtual QString revision() const = 0;
++
++    /**
++     * Retrieves the name of the bluetooth chip manufacturer.
++     * Example: "Cambdirge Silicon Radio"
++     *
++     * @returns manufacturer string of bluetooth interface/adapter
++     */
++    virtual QString manufacturer() const = 0;
++
++    /**
++     * Retrieves the name of the bluetooth chip company.
++     * Based on device address.
++     *
++     * @returns company string of bluetooth interface/adapter
++     */
++    virtual QString company() const = 0;
++
++
++    /**
++     * Retrieves the current mode of the bluetooth interface/adapter.
++     * Valid modes: "off", "connectable", "discoverable"
++     *
++     * @todo determine unify type for valid modes.. enum?! what about other bluetooth APIs?
++     * three modes?
++     *
++     * @returns current mode of bluetooth interface/adaoter
++     */
++    virtual Solid::Control::BluetoothInterface::Mode mode() const = 0;
++
++    /**
++     * Retrieves the discoverable timeout of the bluetooth interface/adapter.
++     * Discoverable timeout of 0 means never disappear.
++     *
++     * @returns current discoverable timeout in seconds
++     */
++    virtual int discoverableTimeout() const = 0;
++
++    /**
++     * Retrieves the current discoverable staut of the bluetooth interface/adapter.
++     *
++     * @returns current discoverable status of bluetooth interface/adapter
++     */
++    virtual bool isDiscoverable() const = 0;
++
++
++    /**
++     * List all UBIs of connected remote bluetooth devices of this handled bluetooth
++     * interface/adapter.
++     *
++     * @returns list UBIs of connected bluetooth remote devices
++     */
++    virtual QStringList listConnections() const = 0;
++
++
++    /**
++     * Retrieves major class of the bluetooth interface/adapter.
++     *
++     * @returns current major class of the bluetooth interface/adapter
++     */
++    virtual QString majorClass() const = 0;
++
++    /**
++     * List supported minor classes of the bluetooth interface/adapter.
++     *
++     * @returns list of supported minor classes by bluetooth interface/adapter
++     */
++    virtual QStringList listAvailableMinorClasses() const = 0;
++
++    /**
++     * Retrievies minor class of the bluetooth interface/adapter.
++     * Valid classes, see listAvailableMinorClasses()
++     *
++     * @returns minor class of the bluetooth interface/adapter.
++     */
++    virtual QString minorClass() const = 0;
++
++    /**
++     * List services class of the bluetooth interface/adapter.
++     *
++     * @returns list of service classes or empty list if no services registered
++     */
++    virtual QStringList serviceClasses() const = 0;
++    /**
++     * Retrieves name of bluetooth interface/adapter.
++     *
++     * @returns name of bluetooth interface/adapter
++     */
++    virtual QString name() const = 0;
++
++    /**
++     * List UBIs of bonded/paired remote bluetooth devices with this bluetooth
++     * interface/adapter.
++     *
++     * @returns UBIs of bonded/paired bluetooth remote devices
++     */
++    virtual QStringList listBondings() const = 0;
++
++    /**
++     * Periodic discovery status of this bluetooth interface/adapter.
++     *
++     * @returns true if periodic discovery is already active otherwise false
++     */
++    virtual bool isPeriodicDiscoveryActive() const = 0;
++
++    /**
++     * Name resolving status of periodic discovery routing. 
++     *
++     * @returns true if name got resolved while periodic discovery of this bluetooth
++     * interface/adapter
++     */
++    virtual bool isPeriodicDiscoveryNameResolvingActive() const = 0;
++
++    /**
++     * List the Universal Bluetooth Identifier (UBI) of all known remote devices, which are
++     * seen, used or paired/bonded.
++     *
++     * See listConnections()
++     *
++     * @returns a QStringList of UBIs of all known remote bluetooth devices
++     */
++    virtual QStringList listRemoteDevices() const = 0;
++
++    /**
++     * List the Universal Bluetooth Identifier (UBI) of all known remote devices since a specific
++     * datestamp. Known remote  devices means remote bluetooth which are seen, used or
++     * paired/bonded.
++     *
++     * See listConnections(), listRemoteDevices()
++     *
++     * @param date the datestamp of the beginning of recent used devices
++     * @returns a QStringList of UBIs of all known remote bluetooth devices
++     */
++    virtual QStringList listRecentRemoteDevices(const QDateTime &date) const = 0;
++
++public Q_SLOTS:
++    /**
++     * Set mode of bluetooth interface/adapter.
++     * Valid modes, see mode()
++     *
++     * @param mode the mode of the bluetooth interface/adapter
++     */
++    virtual void setMode(const Solid::Control::BluetoothInterface::Mode mode) = 0;
++
++    /**
++     * Set discoverable timeout of bluetooth interface/adapter.
++     *
++     * @param timeout timeout in seconds
++     */
++    virtual void setDiscoverableTimeout(int timeout) = 0;
++
++    /**
++     * Set minor class of bluetooth interface/adapter.
++     *
++     * @param minor set minor class. Valid mode see listAvaliableMinorClasses()
++     */
++    virtual void setMinorClass(const QString &minor) = 0;
++
++    /**
++     * Set name of bluetooth interface/adapter.
++     *
++     * @param name the name of bluetooth interface/adapter
++     */
++    virtual void setName(const QString &name) = 0;
++
++
++    /**
++     * Start discovery of remote bluetooth devices with device name resolving.
++     */
++    virtual void discoverDevices() = 0;
++    /**
++     * Start discovery of remote bluetooth devices without device name resolving.
++     */
++    virtual void discoverDevicesWithoutNameResolving() = 0;
++    /**
++     * Cancel discovery of remote bluetooth devices.
++     */
++    virtual void cancelDiscovery() = 0;
++
++    /**
++     * Start periodic discovery of remote bluetooth devices.
++     * See stopPeriodicDiscovery()
++     */
++    virtual void startPeriodicDiscovery() = 0;
++
++    /**
++     * Stop periodic discovery of remote bluetooth devices.
++     */
++    virtual void stopPeriodicDiscovery() = 0;
++
++    /**
++     * Enable/Disable name resolving of remote bluetooth devices in periodic discovery.
++     *
++     * @param resolveName true to enable name resolving otherwise false
++     */
++    virtual void setPeriodicDiscoveryNameResolving(bool resolveNames) = 0;
++
++    /**
++     * Instantiates a new BluetoothRemoteDevice object from this backend given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth remote device instantiated
++     * @returns a new BluetoothRemoteDevice object if there's a device having the given UBI, 0 otherwise
++     */
++    virtual QObject *createBluetoothRemoteDevice(const QString &ubi) = 0;
++
++Q_SIGNALS:
++
++    /**
++     * This signal is emitted if the mode of the bluetooth interface/adapter has changed.
++     * See mode() for valid modes.
++     *
++     * @param mode the changed mode
++     */
++    void modeChanged(Solid::Control::BluetoothInterface::Mode);
++
++    /**
++     * The signal is emitted if the discoverable timeout of the bluetooth interface/adapter
++     * has changed.
++     *
++     * @param timeout the changed timeout in seconds
++     */
++    void discoverableTimeoutChanged(int timeout);
++
++    /**
++     * The signal is emitted if the minor class of the bluetooth interface/adapter has changed.
++     *
++     * @param minor the new minor class
++     */
++    void minorClassChanged(const QString &minor);
++
++    /**
++     * The signal is emitted if the name of the bluetooth interface/adapter has changed.
++     *
++     * @param name the new name of the device
++     */
++    void nameChanged(const QString &name);
++
++    /**
++     * This signal is emitted if a discovery has started.
++     */
++    void discoveryStarted();
++
++    /**
++     * This signal is emitted if a discovery has completed.
++     */
++    void discoveryCompleted();
++
++    /**
++     * This signal is emitted if the bluetooth interface/adapter detects a new remote bluetooth device.
++     *
++     * @todo change arguments types of deviceClass (uint32) and rssi (int16)
++     *
++     * @param ubi the new bluetooth identifier
++     * @param deviceClass the device Class of the remote device
++     * @param rssi the RSSI link of the remote device
++     */
++    void remoteDeviceFound(const QString &ubi, int deviceClass, int rssi);
++
++    /**
++     * This signal is emitted if the bluetooth interface/adapter detectes a bluetooth device
++     * disappeared.
++     *
++     * @param ubi the ubi of the disappering bluetooth remote device
++     */
++    void remoteDeviceDisappeared(const QString &ubi);
++
++};
++} //Ifaces
++} //Control
++} //Solid
++
++Q_DECLARE_INTERFACE(Solid::Control::Ifaces::BluetoothInterface, "org.kde.Solid.Control.Ifaces.BluetoothInterface/0.1")
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/CMakeLists.txt
+@@ -0,0 +1,30 @@
++
++
++########### next target ###############
++
++set(solidcontrolifaces_LIB_SRCS 
++   powermanager.cpp
++   networkmanager.cpp
++   networkinterface.cpp
++   network.cpp
++   wirelessnetwork.cpp
++   authentication.cpp
++   bluetoothremotedevice.cpp
++   bluetoothinputdevice.cpp
++   bluetoothinterface.cpp
++   bluetoothmanager.cpp
++   bluetoothsecurity.cpp )
++
++
++kde4_add_library(solidcontrolifaces SHARED ${solidcontrolifaces_LIB_SRCS})
++
++target_link_libraries(solidcontrolifaces  ${KDE4_KDECORE_LIBS} )
++
++set_target_properties(solidcontrolifaces PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} )
++install(TARGETS solidcontrolifaces DESTINATION ${LIB_INSTALL_DIR}  )
++
++
++########### install files ###############
++
++install( FILES powermanager.h networkmanager.h networkinterface.h network.h wirelessnetwork.h authentication.h bluetoothremotedevice.h bluetoothinputdevice.h bluetoothinterface.h bluetoothmanager.h DESTINATION ${INCLUDE_INSTALL_DIR}/solid/control/ifaces)
++
+--- /dev/null
++++ b/libs/solid/control/ifaces/powermanager.h
+@@ -0,0 +1,214 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_IFACES_POWERMANAGER_H
++#define SOLID_IFACES_POWERMANAGER_H
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++
++#include <solid/control/solid_control_export.h>
++
++#include <solid/control/powermanager.h>
++
++class KJob;
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++    /**
++     * This class specifies the interface a backend will have to implement in
++     * order to be used in the system.
++     *
++     * A power manager allows to control or query the power management features
++     * or the underlying platform.
++     */
++    class SOLIDCONTROLIFACES_EXPORT PowerManager : public QObject
++    {
++        Q_OBJECT
++
++    public:
++        /**
++         * Constructs a PowerManager
++         */
++        PowerManager(QObject *parent = 0);
++
++        /**
++         * Destructs a PowerManager object
++         */
++        virtual ~PowerManager();
++
++
++        /**
++         * Retrieves the list of power management schemes available on this system.
++         *
++         * @return the available power management schemes
++         */
++        virtual QStringList supportedSchemes() const = 0;
++
++        /**
++         * Retrieves a localized description corresponding to the given scheme.
++         *
++         * @param schemeName the name of the scheme we request the description for
++         * @return the associated description
++         */
++        virtual QString schemeDescription(const QString &schemeName) const = 0;
++
++        /**
++         * Retrieves the name of the current power management scheme used
++         * by the system.
++         *
++         * @return the current scheme
++         */
++        virtual QString scheme() const = 0;
++
++        /**
++         * Changes the current power management scheme.
++         *
++         * @param name the name of the new scheme
++         * @return true if the scheme change succeeded, false otherwise
++         */
++        virtual bool setScheme(const QString &name) = 0;
++
++
++        /**
++         * Retrieves the current state of the system battery.
++         *
++         * @return the current battery state
++         * @see Solid::Control::PowerManager::BatteryState
++         */
++        virtual Solid::Control::PowerManager::BatteryState batteryState() const = 0;
++
++        /**
++         * Retrieves the current charge percentage of the system batteries.
++         *
++         * @return the current global battery charge percentage
++         */
++        virtual int batteryChargePercent() const = 0;
++
++        /**
++         * Retrieves the current state of the system AC adapter.
++         *
++         * @return the current AC adapter state
++         * @see Solid::Control::PowerManager::AcAdapterState
++         */
++        virtual Solid::Control::PowerManager::AcAdapterState acAdapterState() const = 0;
++
++
++        /**
++         * Retrieves the set of suspend methods supported by the system.
++         *
++         * @return the suspend methods supported by this system
++         * @see Solid::Control::PowerManager::SuspendMethod
++         * @see Solid::Control::PowerManager::SuspendMethods
++         */
++        virtual Solid::Control::PowerManager::SuspendMethods supportedSuspendMethods() const = 0;
++
++        /**
++         * Requests a suspend of the system.
++         *
++         * @param method the suspend method to use
++         * @return the job handling the operation
++         */
++        virtual KJob *suspend(Solid::Control::PowerManager::SuspendMethod method) const = 0;
++
++
++        /**
++         * Retrieves the set of CPU frequency policies supported by the system.
++         *
++         * @return the CPU frequency policies supported by this system
++         * @see Solid::Control::PowerManager::CpuFreqPolicy
++         * @see Solid::Control::PowerManager::CpuFreqPolicies
++         */
++        virtual Solid::Control::PowerManager::CpuFreqPolicies supportedCpuFreqPolicies() const = 0;
++
++        /**
++         * Retrieves the current CPU frequency policy of the system.
++         *
++         * @return the current CPU frequency policy used by the system
++         * @see Solid::Control::PowerManager::CpuFreqPolicy
++         */
++        virtual Solid::Control::PowerManager::CpuFreqPolicy cpuFreqPolicy() const = 0;
++
++        /**
++         * Changes the current CPU frequency policy of the system.
++         *
++         * @param newPolicy the new policy
++         * @return true if the policy change succeeded, false otherwise
++         * @see Solid::Control::PowerManager::CpuFreqPolicy
++         */
++        virtual bool setCpuFreqPolicy(Solid::Control::PowerManager::CpuFreqPolicy newPolicy) = 0;
++
++        /**
++         * Checks if a CPU can be disabled.
++         *
++         * @param cpuNum the number of the CPU we want to check
++         * @return true if the given CPU can be disabled, false otherwise
++         */
++        virtual bool canDisableCpu(int cpuNum) const = 0;
++
++        /**
++         * Enables or disables a CPU.
++         *
++         * @param cpuNum the number of the CPU we want to enable or disable
++         * @param enabled the new state of the CPU
++         * @return true if the state change succeeded, false otherwise
++         */
++        virtual bool setCpuEnabled(int cpuNum, bool enabled) = 0;
++
++    Q_SIGNALS:
++        /**
++         * This signal is emitted when the power management scheme has changed.
++         *
++         * @param newScheme the new scheme name
++         */
++        void schemeChanged(QString newScheme);
++
++        /**
++         * This signal is emitted when the AC adapter is plugged or unplugged.
++         *
++         * @param newState the new state of the AC adapter, it's one of the
++         * type @see Solid::Control::PowerManager::AcAdapterState
++         */
++        void acAdapterStateChanged(int newState);
++
++        /**
++         * This signal is emitted when the system battery state changed.
++         *
++         * @param newState the new state of the system battery, it's one of the
++         * type @see Solid::Control::PowerManager::BatteryState
++         */
++        void batteryStateChanged(int newState);
++
++        /**
++         * This signal is emitted when a button has been pressed.
++         *
++         * @param buttonType the pressed button type, it's one of the
++         * type @see Solid::Control::PowerManager::ButtonType
++         */
++        void buttonPressed(int buttonType);
++    };
++}
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/ifaces/bluetoothsecurity.cpp
+@@ -0,0 +1,38 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++    Copyright (C) 2007 Juan González <jaguilera at opsiland.info>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "bluetoothsecurity.h"
++
++Solid::Control::Ifaces::BluetoothSecurity::BluetoothSecurity(QObject *parent)
++        : QObject(parent)
++{}
++
++Solid::Control::Ifaces::BluetoothSecurity::BluetoothSecurity(const QString & interface, QObject * parent)
++    : QObject(parent)
++{
++    Q_UNUSED(interface)
++}
++
++Solid::Control::Ifaces::BluetoothSecurity::~BluetoothSecurity()
++{}
++
++
++#include "bluetoothsecurity.moc"
+--- /dev/null
++++ b/libs/solid/control/singletondefs.h
+@@ -0,0 +1,56 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_SINGLETONDEFS_H
++#define SOLID_SINGLETONDEFS_H
++
++#include <kglobal.h>
++
++class QObject;
++
++namespace Solid
++{
++namespace Control
++{
++    /**
++     * @internal
++     */
++    template<typename T>
++    class SingletonHelper { public: T instance; };
++
++#define SOLID_SINGLETON(Type)                                   \
++public:                                                           \
++    static Type &self();                                          \
++    static Type &selfForceBackend(QObject *backend);            \
++private:                                                          \
++    friend class Solid::Control::SingletonHelper< Type >;
++
++#define SOLID_SINGLETON_IMPLEMENTATION(Type, Name)              \
++    K_GLOBAL_STATIC(Solid::Control::SingletonHelper< Type >, global##Name) \
++                                                                  \
++    Type &Type::self()                                            \
++    {                                                             \
++        Solid::Control::SingletonHelper< Type > *singleton = global##Name; \
++                                                                  \
++        return singleton->instance;                               \
++    }
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/bluetoothinputdevice.h
+@@ -0,0 +1,149 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_BLUETOOTHINPUTDEVICE_H
++#define SOLID_BLUETOOTHINPUTDEVICE_H
++
++#include <QtCore/QObject>
++
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++class BluetoothInputDevicePrivate;
++
++/**
++ * Represents a bluetooth remote device as seen by the bluetoothing subsystem.
++ */
++class SOLIDCONTROL_EXPORT BluetoothInputDevice : public QObject
++{
++    Q_OBJECT
++
++public:
++    /**
++     * Creates a new BluetoothInputDevice object.
++     *
++     * @param backendObject the bluetooth remote device object provided by the backend
++     */
++    BluetoothInputDevice(QObject *backendObject = 0);
++
++    /**
++     * Constructs a copy of a bluetooth remote device.
++     *
++     * @param device the bluetooth remote device to copy
++     */
++    BluetoothInputDevice(const BluetoothInputDevice &device);
++
++    /**
++     * Destroys the device.
++     */
++    ~BluetoothInputDevice();
++
++    /**
++     * Assigns a bluetooth remote device to this bluetooth remote device and returns a reference to it.
++     *
++     * @param device the bluetooth remote device to assign
++     * @return a reference to the bluetooth remote device
++     */
++    BluetoothInputDevice &operator=(const BluetoothInputDevice &device);
++
++    /**
++     * Retrieves the Universal Network Identifier (UBI) of the BluetoothInputDevice.
++     * This identifier is ubique for each bluetooth and bluetooth remote device in the system.
++     *
++     * @returns the Universal Network Identifier of the current bluetooth remote device
++     */
++    QString ubi() const;
++
++    /**
++     * Retrieves connection status of bluetooth input device.
++     *
++     * @returns true if bluetooth input device is connected
++     */
++    bool isConnected() const;
++
++    /**
++     * Retrieves MAC address of bluetooth input device.
++     *
++     * @returns MAC address of bluetooth input device
++     */
++    QString address() const;
++
++    /**
++     * Retrievies Name of bluetooth input device.
++     *
++     * @returns Name of bluetooth input device
++     */
++    QString name() const;
++
++    /**
++     * Retrieves Product ID of bluetooth input device.
++     *
++     * @returns Product ID of bluetooth input device
++     */
++    QString productID() const;
++
++    /**
++     * Retrieves Vendor ID of bluetooth input device.
++     *
++     * @returns Vendor ID of bluetooth input device
++     */
++    QString vendorID() const;
++
++
++public Q_SLOTS:
++    /**
++     * Connect bluetooth input device.
++     */
++    void slotConnect();
++
++    /**
++     * Disconnect bluetooth input device.
++     */
++    void slotDisconnect();
++
++
++Q_SIGNALS:
++    /**
++     * This signal is emitted when the bluetooth input device is connected.
++     */
++    void connected();
++
++    /**
++     * This signal is emitted when the bluetooth input device is not available anymore.
++     */
++    void disconnected();
++
++private:
++    Q_PRIVATE_SLOT(d, void _k_destroyed(QObject *))
++
++    BluetoothInputDevicePrivate * const d;
++};
++
++} //Control
++
++} //Solid
++
++//Q_DECLARE_OPERATORS_FOR_FLAGS(Solid::Control::BluetoothInputDevice::Capabilities)
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/networking_p.h
+@@ -0,0 +1,109 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++#ifndef SOLID_CONTROL_NETWORKING_P_H
++#define SOLID_CONTROL_NETWORKING_P_H
++
++#include <QtCore/QMap>
++
++#include <solid/networking.h>
++
++#include "networking.h"
++
++class OrgKdeSolidNetworkingInterface;
++class QAbstractSocket;
++class QTimer;
++
++
++namespace Solid
++{
++namespace Control
++{
++
++    class ManagedSocketContainer;
++
++    class NetworkingPrivate : public QObject
++    {
++    Q_OBJECT
++    public:
++        NetworkingPrivate();
++        ~NetworkingPrivate();
++        Networking::Result beginManagingSocket( QAbstractSocket * socket, int autoDisconnectTimeout );
++        void stopManagingSocket( QAbstractSocket * socket );
++    public Q_SLOTS:
++        uint requestConnection( QObject* receiver = 0, const char * member = 0 ); /*Result*/
++        void releaseConnection();
++    Q_SIGNALS:
++        /**
++         * Indicates the result of the previous requestConnection() call
++         */
++        void connectionResult( Solid::Networking::Status );
++    private:
++        OrgKdeSolidNetworkingInterface * iface;
++        QMap<QAbstractSocket *, Solid::Control::ManagedSocketContainer*> mManagedSockets;
++        bool mNotifyConnectionResult;
++    };
++
++    /**
++     * ManagedSocketContainer manages a single socket's state in accordance
++     * with what the network management backend does.  If it detects that the
++     * socket tries to connect and fails, it initiates a Networking connection,
++     * waits for the connection to come up, then connects the socket to its
++     * original host.
++     *
++     * STATE DIAGRAM
++     *
++     * Disconnected
++     *      |
++     * (sock connecting)
++     *      |
++     *      V
++     * Connecting
++     *      |
++     *  ( TBD - currently exists on paper )
++     */
++    class ManagedSocketContainer : public QObject
++    {
++    Q_OBJECT
++    public:
++        enum State { SocketUnconnected, SocketConnecting, AwaitingNetworkConnection, SocketConnected, DisconnectWait };
++        ManagedSocketContainer( QAbstractSocket * socket, int autoDisconnectTimeout = -1 );
++    private Q_SLOTS:
++        // update our state and try to connect the socket if waiting for a connection
++        void networkStatusChanged( Solid::Networking::Status );
++        // the socket errored, go to AwaitingConnection if offline
++        void socketError( QAbstractSocket::SocketError );
++        // update our state and connect the socket if required
++        void socketStateChanged( QAbstractSocket::SocketState );
++        // perform an automatic disconnect
++        void autoDisconnect();
++        void socketDestroyed();
++    private:
++        void performConnectToHost();
++        QAbstractSocket * mSocket;
++        QTimer * mAutoDisconnectTimer;
++        uint mAutoDisconnectTimeout;
++        State mState;
++        QString mPeerName;
++        quint16 mPeerPort;
++        QIODevice::OpenMode mSocketOpenMode;
++    };
++} // namespace Control
++} // namespace Solid
++#endif
+--- /dev/null
++++ b/libs/solid/control/powermanager_p.h
+@@ -0,0 +1,41 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_POWERMANAGER_P_H
++#define SOLID_POWERMANAGER_P_H
++
++#include "managerbase_p.h"
++
++#include "powermanager.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class PowerManagerPrivate : public PowerManager::Notifier, public ManagerBasePrivate
++    {
++        Q_OBJECT
++    public:
++        PowerManagerPrivate();
++        ~PowerManagerPrivate();
++    };
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/wirelessnetwork.h
+@@ -0,0 +1,207 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_WIRELESSNETWORK_H
++#define SOLID_WIRELESSNETWORK_H
++
++#include <solid/control/network.h>
++#include <solid/control/authentication.h>
++
++
++namespace Solid
++{
++namespace Control
++{
++    typedef QString MacAddress;
++    typedef QStringList MacAddressList;
++    class WirelessNetworkPrivate;
++
++    /**
++     * This type of networks is used by wifi network interfaces.
++     */
++    class SOLIDCONTROL_EXPORT WirelessNetwork : public Network
++    {
++        Q_OBJECT
++        Q_ENUMS(OperationMode DeviceInterface)
++        Q_FLAGS(Capabilities)
++        Q_DECLARE_PRIVATE(WirelessNetwork)
++
++    public:
++        enum OperationMode { Unassociated, Adhoc, Managed, Master, Repeater };
++        // corresponding to 802.11 capabilities defined in NetworkManager.h
++        enum DeviceInterface { Unencrypted = 0x1, Wep = 0x2, Wpa = 0x4, Wpa2 = 0x8, Psk = 0x10,
++                          Ieee8021x = 0x20, Wep40 = 0x40, Wep104 = 0x80, Wep192 = 0x100, Wep256 = 0x200,
++                          WepOther = 0x400, Tkip = 0x800, Ccmp = 0x1000 };
++        Q_DECLARE_FLAGS(Capabilities, DeviceInterface)
++
++
++
++        /**
++         * Creates a new WirelessNetwork object.
++         *
++         * @param backendObject the network object provided by the backend
++         */
++        explicit WirelessNetwork(QObject *backendObject);
++
++        /**
++         * Creates a new WirelessNetwork object as a copy of another instance.
++         */
++        WirelessNetwork(const WirelessNetwork  &);
++
++        /**
++         * Destroys a WirelessNetwork object
++         */
++        virtual ~WirelessNetwork();
++
++        /**
++         * Indicates if two WirelessNetwork objects describe in fact the same network.
++         *
++         * @param other the network to compare
++         * @return true if other and this wireless network are the same network, false otherwise
++         */
++        bool isSameAs(const WirelessNetwork &other) const;
++
++        /**
++         * Retrieves the current signal strength of this wifi network.
++         *
++         * @return the signal strength as a percentage
++         */
++        int signalStrength() const;
++
++        /**
++         * Retrieves the announced bitrate of this wifi network.
++         *
++         * @return the bitrate in bit/s
++         */
++        int bitrate() const;
++
++        /**
++         * Retrieves the frequency of this wifi network.
++         *
++         * @return the frequency
++         */
++        double frequency() const;
++
++        /**
++         * Retrieves the capabilities of this wifi network.
++         *
++         * @return the flag set describing the capabilities
++         * @see Solid::Control::WirelessNetwork::DeviceInterface
++         */
++        Capabilities capabilities() const;
++
++        /**
++         * Retrieves the Extended Service Set Identifier (ESSID) of this wifi network.
++         *
++         * @return the network essid
++         */
++
++        QString essid() const;
++
++        /**
++         * Retrieves the operation mode of this network.
++         *
++         * @return the current mode
++         * @see Solid::Control::WirelessNetwork::OperationMode
++         */
++        OperationMode mode() const;
++
++        /**
++         * Indicates if the network interface is associated to this network.
++         *
++         * @return true if the device is associated, false otherwise
++         */
++        bool isAssociated() const;
++
++        /**
++         * Indicates if this network uses an encryption scheme.
++         *
++         * @return true if the network is encrypted, false otherwise
++         */
++        bool isEncrypted() const;
++
++        /**
++         * Indicates if the network is hidden and doesn't announce its ESSID.
++         *
++         * @return true if the network is hidden, false otherwise
++         */
++        bool isHidden() const;
++
++        /**
++         * Retrieves the list of access points or ad hoc network nodes making up the
++         * network that are currently visible to the device.
++         *
++         * @return the list of MAC address of the currently visible nodes
++         */
++        MacAddressList bssList() const;
++
++        /**
++         * Retrieves the current authentication scheme used by this network.
++         *
++         * @return the current authentication object, or 0 if none is used for now
++         */
++        Authentication *authentication() const;
++
++        /**
++         * Sets the authentication object to with this network.
++         *
++         * @param authentication the new authentication scheme to use
++         */
++        void setAuthentication(Authentication *authentication);
++
++    Q_SIGNALS:
++        /**
++         * This signal is emitted when the signal strength of this network has changed.
++         *
++         * @param strength the new signal strength value for this network
++         */
++        void signalStrengthChanged(int strength);
++
++        /**
++         * This signal is emitted when the bitrate of this network has changed.
++         *
++         * @param bitrate the new bitrate value for this network
++         */
++        void bitrateChanged(int bitrate);
++
++        /**
++         * This signal is emitted when the association state of this device
++         * has changed.
++         *
++         * @param associated true if the network is associated, false otherwise
++         */
++        void associationChanged(bool associated);
++
++        /**
++         * Emitted when the network requires authentication data in order to be able to connect.
++         * Respond to this by calling setAuthentication.
++         *
++         * This signal is emitted when the network requires authentication data in order
++         * to be able to connect. Respond to this by calling setAuthentication().
++         */
++        void authenticationNeeded();
++    };
++
++} //Control
++} //Solid
++
++Q_DECLARE_OPERATORS_FOR_FLAGS(Solid::Control::WirelessNetwork::Capabilities)
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/network_p.h
+@@ -0,0 +1,41 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_NETWORK_P_H
++#define SOLID_NETWORK_P_H
++
++#include "frontendobject_p.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class NetworkPrivate : public FrontendObjectPrivate
++    {
++    public:
++        explicit NetworkPrivate(QObject *parent)
++            : FrontendObjectPrivate(parent) { }
++
++        void setBackendObject(QObject *object);
++    };
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/networkinterface.h
+@@ -0,0 +1,265 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006,2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_NETWORKINTERFACE_H
++#define SOLID_NETWORKINTERFACE_H
++
++#include <QtCore/QObject>
++#include <solid/control/network.h>
++
++namespace Solid
++{
++namespace Control
++{
++    class NetworkInterfacePrivate;
++
++    /**
++     * Represents a network interface as seen by the networking subsystem.
++     *
++     * For non-networking specific hardware details,
++     * @see Solid::Control::NetworkHw
++     */
++    class SOLIDCONTROL_EXPORT NetworkInterface : public QObject
++    {
++        Q_OBJECT
++        Q_ENUMS(ConnectionState Capability Type)
++        Q_FLAGS(Capabilities)
++
++    public:
++        // == NM ActivationStage
++        /**
++         * Device connection states describe the possible states of a
++         * network connection from the user's point of view.  For
++         * simplicity, states from several different layers are present -
++         * this is a high level view
++         */
++        enum ConnectionState{ UnknownState, Prepare, Configure, NeedUserKey,
++                              IPStart, IPGet, IPCommit, Activated, Failed,
++                              Cancelled };
++        /**
++         * Possible Device capabilities
++         * - IsManageable: denotes that the device can be controlled by this API
++         * - SupportsCarrierDetect: the device informs us when it is plugged in to the medium
++         * - SupportsWirelessScan: the device can scan for wireless networks
++         */
++        enum Capability { IsManageable = 0x1, SupportsCarrierDetect = 0x2,
++                          SupportsWirelessScan = 0x4 };
++        /**
++         * Device medium types
++         * - Ieee8023: wired ethernet
++         * - Ieee80211: the popular family of wireless networks
++         */
++        enum Type { UnknownType, Ieee8023, Ieee80211 };
++
++        Q_DECLARE_FLAGS(Capabilities, Capability)
++
++
++
++        /**
++         * Constructs an invalid network interface
++         */
++        NetworkInterface();
++
++        /**
++         * Constructs a network interface for a given Unique Network Identifier (UNI).
++         *
++         * @param uni the uni of the network interface to create
++         */
++        explicit NetworkInterface(const QString &uni);
++
++        /**
++         * Constructs a new network interface taking its data from a backend.
++         *
++         * @param backendObject the object given by the backend
++         */
++        explicit NetworkInterface(QObject *backendObject);
++
++        /**
++         * Constructs a copy of a network interface.
++         *
++         * @param device the network interface to copy
++         */
++        NetworkInterface(const NetworkInterface &device);
++
++        /**
++         * Destroys the device.
++         */
++        ~NetworkInterface();
++
++        /**
++         * Assigns a network interface to this network interface and returns a reference to it.
++         *
++         * @param device the network interface to assign
++         * @return a reference to the network interface
++         */
++        NetworkInterface &operator=(const NetworkInterface &device);
++
++        /**
++         * Indicates if this network interface is valid.
++         * A network interface is considered valid if it's available in the system.
++         *
++         * @return true if this network interface is available, false otherwise
++         */
++        bool isValid() const;
++
++        /**
++         * Retrieves the Unique Network Identifier (UNI) of the NetworkInterface.
++         * This identifier is unique for each network and network interface in the system.
++         *
++         * @returns the Unique Network Identifier of the current network interface
++         */
++        QString uni() const;
++
++        /**
++         * Retrieves the activation status of this network interface.
++         *
++         * @return true if this network interface is active, false otherwise
++         */
++        bool isActive() const;
++
++        /**
++         * Retrieves the type of this network interface. For example it allows to check
++         * if a device is wired or wireless.
++         *
++         * @return this network interface type
++         * @see Solid::Control::NetworkInterface::Type
++         */
++        Type type() const;
++
++        /**
++         * Retrieves the current state of the network connection held by this device.
++         * It's a high level view of the connection. It is user oriented, so
++         * actually it provides state coming from different layers.
++         *
++         * @return the current connection state
++         * @see Solid::Control::NetworkInterface::ConnectionState
++         */
++        ConnectionState connectionState() const;
++
++        /**
++         * Retrieves the current signal strength of this network interface.
++         * It ranges from 0 to 100.
++         *
++         * @return the signal strength as a percentage, for ethernet devices it always reports 100.
++         */
++        int signalStrength() const;
++
++        /**
++         * Retrieves the maximum speed as reported by the device.
++         * Note that this is only a design related piece of information, and that
++         * the device might not reach this maximum.
++         *
++         * @return the device's maximum speed
++         */
++        int designSpeed() const;
++
++        /**
++         * Indicates if the network interface sees a carrier, e.g. that an
++         * ethernet device is connected, or a wireless device is associated.
++         *
++         * @return true if there's a carrier, false otherwise
++         */
++        bool isLinkUp() const;
++
++        /**
++         * Retrieves the capabilities supported by this device.
++         *
++         * @return the capabilities of the device
++         */
++        Capabilities capabilities() const;
++
++        /**
++         * Finds Network object given its Unique Network Identifier.
++         *
++         * @param uni the identifier of the network to find from this network interface
++         * @returns a valid Network object if a network having the given UNI for this device is known to the system, an invalid Network object otherwise
++         */
++        Network *findNetwork(const QString  & uni) const;
++
++        /**
++         * Retrieves the networks available via this network interfaces.
++         *
++         * For wired network interfaces, this will probably be a single network,
++         * but with wireless, multiple networks may be accessible.
++         *
++         * @return a list of network UNIs.
++         */
++        NetworkList networks() const;
++
++    Q_SIGNALS:
++        /**
++         * This signal is emitted when the device's activation status changed.
++         * This may be emitted if the user turns off the network interface via a physical switch.
++         *
++         * @param activated true if the device is active, false otherwise
++         */
++        void activeChanged(bool activated);
++
++        /**
++         * This signal is emitted when the device's link status changed. For example, if there
++         * is no carrier anymore.
++         *
++         * @param linkActivated true if the carrier got detected, false otherwise
++         */
++        void linkUpChanged(bool linkActivated);
++
++        /**
++         * This signal is emitted when the device's signal strength changed.
++         *
++         * @param strength the new device signal strength
++         */
++        void signalStrengthChanged(int strength);
++
++        /**
++         * This signal is emitted when the device's link status changed. For example, if there
++         * is no carrier anymore.
++         *
++         * @param state the new state of the connection
++         * @see Solid::Control::NetworkInterface::ConnectionState
++         */
++        void connectionStateChanged(int state);
++
++        /**
++         * This signal is emitted when the device detects a new reachable network.
++         *
++         * @param uni the new network identifier
++         */
++        void networkAppeared(const QString  & uni);
++
++        /**
++         * This signal is emitted when the device decides that a network is not reachable anymore.
++         *
++         * @param uni the identifier of the network that disappeared
++         */
++        void networkDisappeared(const QString  & uni);
++
++
++    private:
++        Q_PRIVATE_SLOT(d, void _k_destroyed(QObject *))
++
++        NetworkInterfacePrivate * const d;
++    };
++
++} //Control
++} //Solid
++
++Q_DECLARE_OPERATORS_FOR_FLAGS(Solid::Control::NetworkInterface::Capabilities)
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/authentication.cpp
+@@ -0,0 +1,336 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Kevin Ottens <ervin at kde.org>
++    Copyright (C) 2006,2007 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "soliddefs_p.h"
++#include "authentication.h"
++#include "networkmanager_p.h"
++#include <solid/control/networkmanager.h>
++#include <solid/control/ifaces/networkmanager.h>
++#include <solid/control/ifaces/authentication.h>
++
++namespace Solid
++{
++namespace Control
++{
++    class AuthenticationValidator::Private
++    {
++    public:
++        QObject *backendObject;
++    };
++
++    class Authentication::Private
++    {
++    public:
++        SecretMap secrets;
++    };
++
++    class AuthenticationWep::Private
++    {
++    public:
++        WepMethod method;
++        WepType type;
++        int keyLength;
++    };
++
++    class AuthenticationWpa::Private
++    {
++    public:
++        WpaProtocol protocol;
++        WpaVersion version;
++        WpaKeyManagement mgmt;
++    };
++
++    class AuthenticationWpaEnterprise::Private
++    {
++    public:
++        QString identity;
++        QString anonIdentity;
++        QString certClient;
++        QString certCA;
++        QString certPrivate;
++        EapMethod method;
++        QString idPasswordKey;
++        QString certPrivatePasswordKey;
++    };
++}
++}
++
++
++/******************************************************************************/
++
++Solid::Control::Authentication::Authentication()
++    : d(new Private)
++{
++
++}
++
++Solid::Control::Authentication::~Authentication()
++{
++    delete d;
++}
++
++void Solid::Control::Authentication::setSecrets(const SecretMap &secrets)
++{
++    d->secrets = secrets;
++}
++
++Solid::Control::Authentication::SecretMap Solid::Control::Authentication::secrets() const
++{
++    return d->secrets;
++}
++
++
++
++/******************************************************************************/
++
++Solid::Control::AuthenticationNone::AuthenticationNone()
++    : d(0)
++{
++
++}
++
++Solid::Control::AuthenticationNone::~AuthenticationNone()
++{
++
++}
++
++
++
++/******************************************************************************/
++
++Solid::Control::AuthenticationWep::AuthenticationWep()
++    : d(new Private)
++{
++
++}
++
++Solid::Control::AuthenticationWep::~AuthenticationWep()
++{
++    delete d;
++}
++
++void Solid::Control::AuthenticationWep::setMethod(WepMethod method)
++{
++    d->method = method;
++}
++
++Solid::Control::AuthenticationWep::WepMethod Solid::Control::AuthenticationWep::method() const
++{
++    return d->method;
++}
++
++void Solid::Control::AuthenticationWep::setType(WepType type)
++{
++    d->type = type;
++}
++
++Solid::Control::AuthenticationWep::WepType Solid::Control::AuthenticationWep::type() const
++{
++    return d->type;
++}
++
++void Solid::Control::AuthenticationWep::setKeyLength(int length)
++{
++    d->keyLength = length;
++}
++
++int Solid::Control::AuthenticationWep::keyLength() const
++{
++    return d->keyLength;
++}
++
++/******************************************************************************/
++
++Solid::Control::AuthenticationWpa::AuthenticationWpa()
++    : d(new Private)
++{
++
++}
++
++Solid::Control::AuthenticationWpa::~AuthenticationWpa()
++{
++    delete d;
++}
++
++void Solid::Control::AuthenticationWpa::setProtocol(WpaProtocol protocol)
++{
++    d->protocol = protocol;
++}
++
++Solid::Control::AuthenticationWpa::WpaProtocol Solid::Control::AuthenticationWpa::protocol() const
++{
++    return d->protocol;
++}
++
++void Solid::Control::AuthenticationWpa::setVersion(WpaVersion version)
++{
++    d->version = version;
++}
++
++Solid::Control::AuthenticationWpa::WpaVersion Solid::Control::AuthenticationWpa::version() const
++{
++    return d->version;
++}
++
++void Solid::Control::AuthenticationWpa::setKeyManagement(WpaKeyManagement mgmt)
++{
++    d->mgmt = mgmt;
++}
++
++Solid::Control::AuthenticationWpa::WpaKeyManagement Solid::Control::AuthenticationWpa::keyManagement() const
++{
++    return d->mgmt;
++}
++
++/******************************************************************************/
++
++Solid::Control::AuthenticationWpaPersonal::AuthenticationWpaPersonal()
++    : d(0)
++{
++
++}
++
++Solid::Control::AuthenticationWpaPersonal::~AuthenticationWpaPersonal()
++{
++
++}
++
++
++
++/******************************************************************************/
++
++Solid::Control::AuthenticationWpaEnterprise::AuthenticationWpaEnterprise()
++    : d(new Private)
++{
++
++}
++
++Solid::Control::AuthenticationWpaEnterprise::~AuthenticationWpaEnterprise()
++{
++    delete d;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setIdentity(const QString &identity)
++{
++    d->identity = identity;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::identity() const
++{
++    return d->identity;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setAnonIdentity(const QString &anonIdentity)
++{
++    d->anonIdentity = anonIdentity;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::anonIdentity() const
++{
++    return d->anonIdentity;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setCertClient(const QString &certClient)
++{
++    d->certClient = certClient;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::certClient() const
++{
++    return d->certClient;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setCertCA(const QString &certCA)
++{
++    d->certCA = certCA;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::certCA() const
++{
++    return d->certCA;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setCertPrivate(const QString &certPrivate)
++{
++    d->certPrivate = certPrivate;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::certPrivate() const
++{
++    return d->certPrivate;
++}
++
++
++void Solid::Control::AuthenticationWpaEnterprise::setMethod(EapMethod method)
++{
++    d->method = method;
++}
++
++Solid::Control::AuthenticationWpaEnterprise::EapMethod Solid::Control::AuthenticationWpaEnterprise::method() const
++{
++    return d->method;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setIdPasswordKey(const QString &idPasswordKey)
++{
++    d->idPasswordKey = idPasswordKey;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::idPasswordKey() const
++{
++    return d->idPasswordKey;
++}
++
++void Solid::Control::AuthenticationWpaEnterprise::setCertPrivatePasswordKey(const QString &certPrivatePasswordKey)
++{
++    d->certPrivatePasswordKey = certPrivatePasswordKey;
++}
++
++QString Solid::Control::AuthenticationWpaEnterprise::certPrivatePasswordKey() const
++{
++    return d->certPrivatePasswordKey;
++}
++
++
++
++Solid::Control::AuthenticationValidator::AuthenticationValidator()
++    : d(new Private)
++{
++#if 0
++    Ifaces::NetworkManager *backend = qobject_cast<Ifaces::NetworkManager *>(NetworkManager::self().d->managerBackend());
++
++    if (backend)
++    {
++        d->backendObject = backend->createAuthenticationValidator();
++    }
++#endif
++}
++
++Solid::Control::AuthenticationValidator::~AuthenticationValidator()
++{
++    delete d->backendObject;
++    delete d;
++}
++
++bool Solid::Control::AuthenticationValidator::validate(const Solid::Control::Authentication *authentication)
++{
++    return_SOLID_CALL(Ifaces::AuthenticationValidator *, d->backendObject, false, validate(authentication));
++}
++
+--- /dev/null
++++ b/libs/solid/control/tests/solidbluetoothtest.cpp
+@@ -0,0 +1,80 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2005 Kevin Ottens <ervin at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "solidbluetoothtest.h"
++
++#include <qtest_kde.h>
++
++#include <solid/control/bluetoothmanager.h>
++#include <solid/control/bluetoothinterface.h>
++#include "solid/control/managerbase_p.h"
++#include <kdebug.h>
++
++#include <fakebluetoothmanager.h>
++
++#ifndef FAKE_BLUETOOTH_XML
++#error "FAKE_BLUETOOTH_XML not set. An XML file describing a bluetooth context is required for this test"
++#endif
++
++QTEST_KDEMAIN_CORE(SolidBluetoothTest)
++
++void SolidBluetoothTest::initTestCase()
++{
++    fakeManager = new FakeBluetoothManager(0, QStringList(), FAKE_BLUETOOTH_XML);
++    Solid::Control::ManagerBasePrivate::_k_forcePreloadedBackend("Solid::Control::Ifaces::BluetoothManager", fakeManager);
++}
++
++void SolidBluetoothTest::testBluetoothInterfaces()
++{
++    Solid::Control::BluetoothManager &manager = Solid::Control::BluetoothManager::self();
++
++    Solid::Control::BluetoothInterfaceList interfaces = manager.bluetoothInterfaces();
++
++    // Verify that the framework reported correctly the interfaces available
++    // in the backend.
++    QSet<QString> expected_ubis, received_ubis;
++
++    expected_ubis = QSet<QString>::fromList(fakeManager->bluetoothInterfaces());
++
++    foreach (Solid::Control::BluetoothInterface iface , interfaces) {
++        received_ubis << iface.ubi();
++    }
++
++    QCOMPARE(expected_ubis, received_ubis);
++}
++
++void SolidBluetoothTest::testManagerBasicFeatures()
++{
++    //Solid::Control::BluetoothManager &manager = Solid::Control::BluetoothManager::self();
++
++}
++
++void SolidBluetoothTest::testInterfaceBasicFeatures()
++{
++    //Solid::Control::BluetoothManager &manager = Solid::Control::BluetoothManager::self();
++
++    // Retrieve a valid BluetoothInterface object
++    Solid::Control::BluetoothInterface valid_iface("/org/kde/solid/fakebluetooth/hci0");
++
++}
++
++#include "solidbluetoothtest.moc"
++
+--- /dev/null
++++ b/libs/solid/control/tests/solidnettest.cpp
+@@ -0,0 +1,157 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2005 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "solidnettest.h"
++
++#include <qtest_kde.h>
++
++#include <solid/control/networkmanager.h>
++#include <solid/control/networkinterface.h>
++#include <solid/control/managerbase_p.h>
++#include <kdebug.h>
++
++#include <fakenetworkmanager.h>
++
++#ifndef FAKE_NETWORKING_XML
++    #error "FAKE_NETWORKING_XML not set. An XML file describing a networking context is required for this test"
++#endif
++
++QTEST_KDEMAIN_CORE(SolidNetTest)
++
++void SolidNetTest::initTestCase()
++{
++    fakeManager = new FakeNetworkManager(0, QStringList(), FAKE_NETWORKING_XML);
++    Solid::Control::ManagerBasePrivate::_k_forcePreloadedBackend("Solid::Control::Ifaces::NetworkManager", fakeManager);
++}
++
++void SolidNetTest::testNetworkInterfaces()
++{
++    Solid::Control::NetworkInterfaceList interfaces = Solid::Control::NetworkManager::networkInterfaces();
++
++    // Verify that the framework reported correctly the interfaces available
++    // in the backend.
++    QSet<QString> expected_unis, received_unis;
++
++    expected_unis = QSet<QString>::fromList(fakeManager->networkInterfaces());
++
++    foreach (Solid::Control::NetworkInterface iface , interfaces)
++    {
++        received_unis << iface.uni();
++    }
++
++    QCOMPARE(expected_unis, received_unis);
++}
++
++void SolidNetTest::testFindNetworkInterface()
++{
++    QCOMPARE(Solid::Control::NetworkManager::findNetworkInterface("/org/kde/solid/fakenet/eth0").isValid(), true);
++    QCOMPARE(Solid::Control::NetworkManager::findNetworkInterface("/org/kde/solid/fakenet/eth1").isValid(), true);
++
++    // Note the extra space
++    QCOMPARE(Solid::Control::NetworkManager::findNetworkInterface("/org/kde/solid/fakenet/eth0 ").isValid(), false);
++    QCOMPARE(Solid::Control::NetworkManager::findNetworkInterface("#'({(�").isValid(), false);
++    QCOMPARE(Solid::Control::NetworkManager::findNetworkInterface(QString()).isValid(), false);
++}
++
++void SolidNetTest::testManagerBasicFeatures()
++{
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), true);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), true);
++
++    Solid::Control::NetworkManager::setNetworkingEnabled(false);
++
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), false);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), false);
++
++    Solid::Control::NetworkManager::setNetworkingEnabled(true);
++
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), true);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), true);
++
++    Solid::Control::NetworkManager::setWirelessEnabled(false);
++
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), true);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), false);
++
++    Solid::Control::NetworkManager::setNetworkingEnabled(false);
++
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), false);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), false);
++
++    Solid::Control::NetworkManager::setNetworkingEnabled(true);
++
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), true);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), false);
++
++    Solid::Control::NetworkManager::setWirelessEnabled(true);
++
++    QCOMPARE(Solid::Control::NetworkManager::isNetworkingEnabled(), true);
++    QCOMPARE(Solid::Control::NetworkManager::isWirelessEnabled(), true);
++}
++
++void SolidNetTest::testInterfaceBasicFeatures()
++{
++    // Retrieve a valid NetworkInterface object
++    Solid::Control::NetworkInterface valid_iface("/org/kde/solid/fakenet/eth0");
++
++    QCOMPARE(valid_iface.isValid(), true);
++
++
++    // A few attempts at creating invalid Device objects
++    Solid::Control::NetworkInterface invalid_iface("uhoh? doesn't exist, I guess");
++    QCOMPARE(invalid_iface.isValid(), false);
++    invalid_iface = Solid::Control::NetworkManager::findNetworkInterface(QString());
++    QCOMPARE(invalid_iface.isValid(), false);
++    invalid_iface = Solid::Control::NetworkInterface();
++    QCOMPARE(invalid_iface.isValid(), false);
++
++
++
++    QCOMPARE(valid_iface.uni(), QString("/org/kde/solid/fakenet/eth0"));
++    QCOMPARE(invalid_iface.uni(), QString());
++
++
++    QCOMPARE(valid_iface.isActive(), true);
++    QCOMPARE(valid_iface.type(), Solid::Control::NetworkInterface::Ieee80211);
++    QCOMPARE(valid_iface.connectionState(), Solid::Control::NetworkInterface::NeedUserKey);
++    QCOMPARE(valid_iface.signalStrength(), 90);
++    QCOMPARE(valid_iface.designSpeed(), 83886080);
++    QCOMPARE(valid_iface.isLinkUp(), true);
++    QCOMPARE(valid_iface.capabilities(), Solid::Control::NetworkInterface::IsManageable
++                                         |Solid::Control::NetworkInterface::SupportsCarrierDetect
++                                         |Solid::Control::NetworkInterface::SupportsWirelessScan);
++
++    QVERIFY(valid_iface.findNetwork("/org/kde/solid/fakenet/eth0/net1")!=0);
++    QCOMPARE(valid_iface.findNetwork("/org/kde/solid/fakenet/eth0/net1")->isValid(), true);
++
++    QVERIFY(valid_iface.findNetwork("emldzn")!=0);
++    QCOMPARE(valid_iface.findNetwork("emldzn")->isValid(), false);
++
++    QVERIFY(valid_iface.findNetwork("/org/kde/solid/fakenet/eth1/net0")!=0);
++    QCOMPARE(valid_iface.findNetwork("/org/kde/solid/fakenet/eth1/net0")->isValid(), false);
++
++    QVERIFY(valid_iface.findNetwork("/org/kde/solid/fakenet/eth0/net0 ")!=0);
++    QCOMPARE(valid_iface.findNetwork("/org/kde/solid/fakenet/eth0/net0")->isValid(), true);
++
++    QCOMPARE(valid_iface.findNetwork("/org/kde/solid/fakenet/eth0/net0")->addressEntries().size(), 1);
++    QCOMPARE(valid_iface.networks().size(), 4);
++}
++
++#include "solidnettest.moc"
++
+--- /dev/null
++++ b/libs/solid/control/tests/solidbluetoothtest.h
+@@ -0,0 +1,42 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2005 Kevin Ottens <ervin at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLIDBLUETOOTHTEST_H
++#define SOLIDBLUETOOTHTEST_H
++
++#include <QObject>
++
++class FakeBluetoothManager;
++
++class SolidBluetoothTest : public QObject
++{
++    Q_OBJECT
++private slots:
++    void initTestCase();
++    void testBluetoothInterfaces();
++    void testManagerBasicFeatures();
++    void testInterfaceBasicFeatures();
++
++private:
++    FakeBluetoothManager *fakeManager;
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/tests/solidnettest.h
+@@ -0,0 +1,41 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2005 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLIDNETTEST_H
++#define SOLIDNETTEST_H
++
++#include <QObject>
++
++class FakeNetworkManager;
++
++class SolidNetTest : public QObject
++{
++    Q_OBJECT
++private slots:
++    void initTestCase();
++    void testNetworkInterfaces();
++    void testFindNetworkInterface();
++    void testManagerBasicFeatures();
++    void testInterfaceBasicFeatures();
++
++private:
++    FakeNetworkManager *fakeManager;
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/tests/CMakeLists.txt
+@@ -0,0 +1,30 @@
++set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
++
++
++########### solidnettest ###############
++
++set(solidnettest_SRCS
++   solidnettest.cpp )
++
++
++kde4_add_unit_test(solidnettest ${solidnettest_SRCS})
++add_definitions(-DFAKE_NETWORKING_XML="\\"${CMAKE_CURRENT_SOURCE_DIR}/../backends/fakenet/fakenetworking.xml\\"")
++
++include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../backends/fakenet )
++
++target_link_libraries(solidnettest ${KDE4_KDECORE_LIBS} ${QT_QTTEST_LIBRARY} solidcontrol solidcontrolifaces solid_fakenet_static)
++
++########### solidbluetoothtest ###############
++
++set(solidbluetoothtest_SRCS
++   solidbluetoothtest.cpp )
++
++
++kde4_add_unit_test(solidbluetoothtest ${solidbluetoothtest_SRCS})
++add_definitions(-DFAKE_BLUETOOTH_XML="\\"${CMAKE_CURRENT_SOURCE_DIR}/../backends/fakebluetooth/fakebluetooth.xml\\"")
++
++include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../backends/fakebluetooth )
++
++target_link_libraries(solidbluetoothtest ${KDE4_KDECORE_LIBS} ${QT_QTTEST_LIBRARY} solidcontrol solidcontrolifaces solid_fakebluetooth_static)
++
++########### install files ###############
+--- /dev/null
++++ b/libs/solid/control/networkmanager.h
+@@ -0,0 +1,131 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_NETWORKMANAGER
++#define SOLID_NETWORKMANAGER
++
++#include <QtCore/QObject>
++
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++    namespace Ifaces
++    {
++        class NetworkManager;
++    }
++    class Network;
++    class NetworkInterface;
++    typedef QList<NetworkInterface> NetworkInterfaceList;
++        
++    /**
++     * This class allow to query the underlying system to discover the available
++     * network interfaces and reachable network.It has also the
++     * responsibility to notify when a network interface or a network appear or disappear.
++     *
++     * It's the unique entry point for network management. Applications should use
++     * it to find network interfaces, or to be notified about network related changes.
++     *
++     * Note that it's implemented as a singleton and encapsulates the backend logic.
++     */
++    namespace NetworkManager
++    {
++        /**
++         * Retrieves the list of all the network interfaces in the system.
++         * It includes both hardware and virtual devices.
++         *
++         * @return the list of network interfaces available in this system
++         */
++        SOLIDCONTROL_EXPORT NetworkInterfaceList networkInterfaces();
++
++        /**
++         * Find a new NetworkInterface object given its UNI.
++         *
++         * @param uni the identifier of the network interface to find
++         * @returns a valid NetworkInterface object if there's a device having the given UNI, an invalid one otherwise
++         */
++        SOLIDCONTROL_EXPORT const NetworkInterface &findNetworkInterface(const QString &uni);
++
++        /**
++         * Retrieves the status of networking (as a whole) in the system.
++         * This is distinct from whether the system's networking is online or offline.
++         * To check that, see @ref NetworkStatus.
++         *
++         * @return true if this networking is enabled, false otherwise
++         */
++        SOLIDCONTROL_EXPORT bool isNetworkingEnabled();
++
++        /**
++         * Retrieves the activation status of wireless networking in the system.
++         *
++         * @return true if this wireless networking is enabled, false otherwise
++         */
++        SOLIDCONTROL_EXPORT bool isWirelessEnabled();
++
++
++        /**
++         * Activates or deactivates networking (as a whole).
++         *
++         * @param enabled true to activate networking, false otherwise
++         */
++        SOLIDCONTROL_EXPORT void setNetworkingEnabled(bool enabled);
++
++        /**
++         * Activates or deactivates wireless networking.
++         *
++         * @param enabled true to activate wireless networking, false otherwise
++         */
++        SOLIDCONTROL_EXPORT void setWirelessEnabled(bool enabled);
++
++        /**
++         * Informs the system of hidden networks.
++         *
++         * @param networkName the name of the hidden network that could be discovered
++         */
++        SOLIDCONTROL_EXPORT void notifyHiddenNetwork(const QString &networkName);
++
++        class SOLIDCONTROL_EXPORT Notifier : public QObject
++        {
++            Q_OBJECT
++        Q_SIGNALS:
++            /**
++             * This signal is emitted when a new network interface is available.
++             *
++             * @param uni the network interface identifier
++             */
++            void networkInterfaceAdded(const QString &uni);
++
++            /**
++             * This signal is emitted when a network interface is not available anymore.
++             *
++             * @param uni the network interface identifier
++             */
++            void networkInterfaceRemoved(const QString &uni);
++        };
++
++        SOLIDCONTROL_EXPORT Notifier *notifier();
++    }
++
++} // Control
++} // Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/bluetoothinterface.h
+@@ -0,0 +1,409 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_BLUETOOTHINTERFACE_H
++#define SOLID_BLUETOOTHINTERFACE_H
++
++#include <QtCore/QDateTime>
++#include <QtCore/QPair>
++#include <QtCore/QObject>
++
++#include <solid/control/bluetoothremotedevice.h>
++#include <solid/control/ifaces/bluetoothremotedevice.h>
++
++
++
++namespace Solid
++{
++namespace Control
++{
++class BluetoothRemoteDevice;
++typedef QList<BluetoothRemoteDevice> BluetoothRemoteDeviceList;
++class BluetoothInterfacePrivate;
++
++/**
++ * Represents a bluetooth interface as seen by the bluetooth subsystem.
++ */
++class SOLIDCONTROL_EXPORT BluetoothInterface : public QObject
++{
++    Q_OBJECT
++
++public:
++    /**
++     * Describes the operating mode of a bluetooth interface
++     *
++     * - Off : The interface's transceiver is turned off
++     * - Discoverable : The interface may be discovered by other devices and connected to
++     * - Connectable : The interface may only be connected to but not discovered
++     */
++    enum Mode { Off, Discoverable, Connectable };
++    /**
++     * Constructs an invalid bluetooth interface
++     */
++    BluetoothInterface();
++
++    /**
++     * Constructs a bluetooth interface for a given Unique Bluetooth Identifier (UBI).
++     * This object will be auto deleted, DON'T delete it.
++     * @param ubi the ubi of the bluetooth interface to create
++     */
++    explicit BluetoothInterface(const QString &ubi);
++
++    /**
++     * Constructs a new bluetooth interface taking its data from a backend.
++     *
++     * @param backendObject the object given by the backend
++     */
++    explicit BluetoothInterface(QObject *backendObject);
++
++    /**
++     * Constructs a copy of a bluetooth interface.
++     *
++     * @param device the bluetooth interface to copy
++     */
++    BluetoothInterface(const BluetoothInterface &device);
++
++    /**
++     * Destroys the device.
++     */
++    ~BluetoothInterface();
++
++
++    /**
++     * Assigns a bluetooth interface to this bluetooth interface and returns a reference to it.
++     *
++     * @param device the bluetooth interface to assign
++     * @return a reference to the bluetooth interface
++     */
++    BluetoothInterface &operator=(const BluetoothInterface &device);
++
++    /**
++     * Retrieves the Unique Bluetooth Identifier (UBI) of the BluetoothInterface.
++     * This identifier is ubique for each bluetooth and bluetooth interface in the system.
++     *
++     * @returns the Unique Bluetooth Identifier of the current bluetooth interface
++     */
++    QString ubi() const;
++
++    /**
++     * Create new BluetoothRemoteDevice object from this interface given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth device to instantiate
++     * @returns a bluetooth object, if a bluetooth device having the given UBI, for this interface exists, 0 otherwise
++     */
++    BluetoothRemoteDevice *createBluetoothRemoteDevice(const QString  & ubi);
++
++    /**
++     * Finds a BluetoothRemoteDevice object given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth remote device to find from this bluetooth interface
++     * @returns a valid BluetoothRemoteDevice object if a remote device having the given UBI for this interface exists, an invalid BluetoothRemoteDevice object otherwise.
++     */
++    BluetoothRemoteDevice findBluetoothRemoteDevice(const QString &ubi) const;
++
++    /**
++     * Retrieves the MAC address of the bluetooth interface/adapter.
++     *
++     * @returns MAC address of bluetooth interface
++     */
++    QString address() const;
++
++    /**
++     * Retrieves the version of the chip of the bluetooth interface/adapter.
++     * Example: "Bluetooth 2.0 + EDR"
++     *
++     * @returns bluetooth chip version
++     */
++    QString version() const;
++
++    /**
++     * Retrieves the revision of the chip of the bluetooth interface/adapter.
++     * Example: "HCI 19.2"
++     *
++     * @returns bluetooth chip revision
++     */
++    QString revision() const;
++
++    /**
++     * Retrieves the name of the bluetooth chip manufacturer.
++     * Example: "Cambridge Silicon Radio"
++     *
++     * @returns manufacturer string of bluetooth interface/adapter
++     */
++    QString manufacturer() const;
++
++    /**
++     * Retrieves the name of the manufacturer of the bluetooth interface,
++     * using the chip supplied by BluetoothInterface::manufacterer()
++     * Based on device address.
++     *
++     * @returns company string of bluetooth interface/adapter
++     */
++    QString company() const;
++
++    /**
++     * Retrieves the current mode of the bluetooth interface/adapter.
++     *
++     * @returns the current mode of bluetooth interface/adapter
++     */
++    Mode mode() const;
++
++    /**
++     * Retrieves the discoverable timeout of the bluetooth interface/adapter.
++     * Discoverable timeout of 0 means never disappear.
++     *
++     * @returns current discoverable timeout in seconds
++     */
++    int discoverableTimeout() const;
++
++    /**
++     * Retrieves the current discoverable staut of the bluetooth interface/adapter.
++     *
++     * @returns current discoverable status of bluetooth interface/adapter
++     */
++    bool isDiscoverable() const;
++
++    /**
++     * List all UBIs of connected remote bluetooth devices of this handled bluetooth
++     * interface/adapter.
++     *
++     * @returns list UBIs of connected bluetooth remote devices
++     */
++    BluetoothRemoteDeviceList listConnections() const;
++
++    /**
++     * Retrieves major class of the bluetooth interface/adapter.
++     * @todo enum
++     * @returns current major class of the bluetooth interface/adapter
++     */
++    QString majorClass() const;
++
++    /**
++     * List supported minor classes of the bluetooth interface/adapter.
++     * @todo enum
++     *
++     * @returns list of supported minor classes by bluetooth interface/adapter
++     */
++    QStringList listAvailableMinorClasses() const;
++
++    /**
++     * Retrieves minor class of the bluetooth interface/adapter.
++     * Valid classes, see listAvailableMinorClasses()
++     * @todo enum
++     *
++     * @returns minor class of the bluetooth interface/adapter.
++     */
++    QString minorClass() const;
++
++    /**
++     * List services class of the bluetooth interface/adapter.
++     * @todo enum
++     *
++     * @returns list of service classes or empty list if no services registered
++     */
++    QStringList serviceClasses() const;
++
++    /**
++     * Retrieves name of bluetooth interface/adapter.
++     * @todo enum
++     *
++     * @returns name of bluetooth interface/adapter
++     */
++    QString name() const;
++
++    /**
++     * List UBIs of bonded/paired remote bluetooth devices with this bluetooth
++     * interface/adapter.
++     *
++     * @returns UBIs of bonded/paired bluetooth remote devices
++     */
++    QStringList listBondings() const;
++
++    /**
++     * Periodic discovery status of this bluetooth interface/adapter.
++     *
++     * @returns true if periodic discovery is already active otherwise false
++     */
++    bool isPeriodicDiscoveryActive() const;
++
++    /**
++     * Name resolving status of periodic discovery routing.
++     *
++     * @returns true if name got resolved while periodic discovery of this bluetooth
++     * interface/adapter
++     */
++    bool isPeriodicDiscoveryNameResolvingActive() const;
++
++    /**
++     * List the Unique Bluetooth Identifier (UBI) of all known remote devices, 
++     * whether they are seen, used or paired/bonded.
++     *
++     * See listConnections()
++     *
++     * @returns a QStringList of UBIs of all known remote bluetooth devices
++     */
++    QStringList listRemoteDevices() const;
++
++    /**
++     * List the Unique Bluetooth Identifier (UBI) of all known remote devices since a specific
++     * datestamp. Known remote devices means remote bluetooth which are seen, used or
++     * paired/bonded.
++     *
++     * See listConnections(), listRemoteDevices()
++     *
++     * @param date the datestamp of the beginning of recent used devices
++     * @returns a QStringList of UBIs of all known remote bluetooth devices
++     */
++    QStringList listRecentRemoteDevices(const QDateTime &date) const;
++
++public Q_SLOTS:
++    /**
++     * Set mode of bluetooth interface/adapter.
++     * Valid modes, see mode()
++     *
++     * @param mode the mode of the bluetooth interface/adapter
++     */
++    void setMode(const Mode mode);
++
++    /**
++     * Set discoverable timeout of bluetooth interface/adapter.
++     *
++     * @param timeout timeout in seconds
++     */
++    void setDiscoverableTimeout(int timeout);
++
++    /**
++     * Set minor class of bluetooth interface/adapter.
++     *
++     * @param minor set minor class. Valid mode see listAvaliableMinorClasses()
++     */
++    void setMinorClass(const QString &minor);
++
++    /**
++     * Set name of bluetooth interface/adapter.
++     *
++     * @param name the name of bluetooth interface/adapter
++     */
++    void setName(const QString &name);
++
++    /**
++     * Start discovery of remote bluetooth devices with device name resolving.
++     */
++    void discoverDevices();
++    /**
++     * Start discovery of remote bluetooth devices without device name resolving.
++     */
++    void discoverDevicesWithoutNameResolving();
++    /**
++     * Cancel discovery of remote bluetooth devices.
++     */
++    void cancelDiscovery();
++
++    /**
++     * Start periodic discovery of remote bluetooth devices.
++     * See stopPeriodicDiscovery()
++     */
++    void startPeriodicDiscovery();
++
++    /**
++     * Stop periodic discovery of remote bluetooth devices.
++     */
++    void stopPeriodicDiscovery();
++
++    /**
++     * Enable/Disable name resolving of remote bluetooth devices in periodic discovery.
++     *
++     * @param resolveName true to enable name resolving otherwise false
++     */
++    void setPeriodicDiscoveryNameResolving(bool resolveNames);
++
++Q_SIGNALS:
++
++    /**
++     * This signal is emitted if the mode of the bluetooth interface/adapter has changed.
++     * See mode() for valid modes.
++     *
++     * @param mode the changed mode
++     */
++    void modeChanged(Solid::Control::BluetoothInterface::Mode);
++
++    /**
++     * The signal is emitted if the discoverable timeout of the bluetooth interface/adapter
++     * has changed.
++     *
++     * @param timeout the changed timeout in seconds
++     */
++    void discoverableTimeoutChanged(int timeout);
++
++    /**
++     * The signal is emitted if the minor class of the bluetooth interface/adapter has changed.
++     *
++     * @param minor the new minor class
++     */
++    void minorClassChanged(const QString &minor);
++
++    /**
++     * The signal is emitted if the name of the bluetooth interface/adapter has changed.
++     *
++     * @param name the new name of the device
++     */
++    void nameChanged(const QString &name);
++
++    /**
++     * This signal is emitted if a discovery has started.
++     */
++    void discoveryStarted();
++
++    /**
++     * This signal is emitted if a discovery has completed.
++     */
++    void discoveryCompleted();
++
++    /**
++     * This signal is emitted if the bluetooth interface/adapter detects a new remote bluetooth device.
++     *
++     * @todo change arguments types of deviceClass (uint32) and rssi (int16)
++     *
++     * @param ubi the new bluetooth identifier
++     * @param deviceClass the device class of the remote device
++     * @param rssi the Received Signal Strength Information (RSSI) of the remote device
++     */
++    void remoteDeviceFound(const QString &ubi, int deviceClass, int rssi);
++
++    /**
++     * This signal is emitted if the bluetooth interface/adapter detectes a bluetooth device
++     * disappeared.
++     *
++     * @param ubi the ubi of the disappering bluetooth remote device
++     */
++    void remoteDeviceDisappeared(const QString &ubi);
++
++private:
++    Q_PRIVATE_SLOT(d, void _k_destroyed(QObject *))
++
++    BluetoothInterfacePrivate * const d;
++};
++
++} //Control
++} //Solid
++
++#endif
++
+--- /dev/null
++++ b/libs/solid/control/networking.h
+@@ -0,0 +1,99 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_NETWORKING_CONTROL
++#define SOLID_NETWORKING_CONTROL
++
++#include <QtCore/QObject>
++
++#include <solid/control/solid_control_export.h>
++class QAbstractSocket;
++
++namespace Solid
++{
++namespace Control
++{
++    /**
++     * This class allow to query the underlying system to discover the available
++     * network interfaces and reachable network.It has also the
++     * responsibility to notify when a network interface or a network appear or disappear.
++     *
++     * It's the unique entry point for network management. Applications should use
++     * it to find network interfaces, or to be notified about network related changes.
++     *
++     * Note that it's implemented as a singleton and encapsulates the backend logic.
++     */
++    namespace Networking
++    {
++        /**
++         * Describe the result of a connection request
++         * - Accepted : the request was accepted and is being acted upon
++         * - AlreadyConnected : the system was already connected
++         * - Denied : the request was denied
++         */
++        enum Result { Accepted, AlreadyConnected, Denied };
++
++        /**
++         * Magic network management for application's sockets.
++         * When the socket begins to connect it will automatically bring up
++         * networking, if not already available.
++         * When the network disconnects, optionally disconnects the socket early
++         * so that an application may continue.
++         * @param socket the socket to manage.
++         * @param autoDisconnectTimeout wait this many milliseconds after receiving a disconnected
++         * event from the networking subsystem before disconnecting the socket. A value of 0 means
++         * never automatically disconnect.
++         * @return whether the management request succeeded.
++         */
++        SOLIDCONTROL_EXPORT Result beginManagingSocket( QAbstractSocket * socket, uint autoDisconnectTimeout = 0 );
++
++        /**
++         * Remove the socket from the list of sockets to manage.  The socket's state is unaltered.
++         * @param socket the socket to stop managing.
++         */
++        SOLIDCONTROL_EXPORT void stopManagingSocket( QAbstractSocket * socket );
++
++        /**
++         * Requests that the networking subsystem makes a connection.  If an on-demand connection
++         * is started as a result of this request, the connection is refcounted and KDE's use of
++         * the connection is dropped when the last application uses it calls @ref
++         * releaseConnection().
++         * Optionally, pass in a QObject and slot to call on it, to receive notification when the
++         * connection is available or not.  The slot may take a Solid::Networking::Status to 
++         * indicate success or failure.
++         *
++         * @param receiver the QObject to call a slot on.
++         * @param member the slot to call.
++         * @return a Result indication whether the request was accepted.
++         */
++        SOLIDCONTROL_EXPORT Result requestConnection( QObject * receiver = 0, const char * member = 0 );
++
++        /**
++         * Activates or deactivates networking (as a whole).
++         *
++         * @param enabled true to activate networking, false otherwise
++         */
++        SOLIDCONTROL_EXPORT void releaseConnection();
++    } // Networking
++
++} // namespace Control
++} // Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/CMakeLists.txt
+@@ -0,0 +1,44 @@
++include_directories( ${CMAKE_SOURCE_DIR}/workspace/libs )
++
++add_subdirectory( ifaces )
++add_subdirectory( backends )
++add_subdirectory( tests )
++
++########### next target ###############
++
++set(solidcontrol_LIB_SRCS 
++   frontendobject.cpp
++   managerbase.cpp
++   powermanager.cpp
++   networkmanager.cpp
++   networkinterface.cpp
++   network.cpp
++   wirelessnetwork.cpp
++   authentication.cpp
++   bluetoothinterface.cpp
++   bluetoothmanager.cpp
++   bluetoothremotedevice.cpp
++   bluetoothinputdevice.cpp
++   bluetoothsecurity.cpp
++   networking.cpp
++)
++
++qt4_add_dbus_interface(solidcontrol_LIB_SRCS org.kde.Solid.Networking.xml org_kde_solid_networking)
++
++
++kde4_add_library(solidcontrol SHARED ${solidcontrol_LIB_SRCS})
++
++target_link_libraries(solidcontrol ${KDE4_KDECORE_LIBS} ${KDE4_SOLID_LIBS} solidcontrolifaces )
++
++set_target_properties(solidcontrol PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} )
++install(TARGETS solidcontrol DESTINATION ${LIB_INSTALL_DIR} )
++
++
++########### install files ###############
++
++install( FILES solidpowermanager.desktop solidnetworkmanager.desktop solidbluetoothmanager.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}  )
++install( FILES powermanager.h networkmanager.h networkinterface.h network.h wirelessnetwork.h
++    authentication.h bluetoothmanager.h bluetoothinterface.h bluetoothremotedevice.h
++    bluetoothinputdevice.h bluetoothsecurity.h singletondefs.h networking.h solid_control_export.h DESTINATION 
++${INCLUDE_INSTALL_DIR}/solid/control)
++
+--- /dev/null
++++ b/libs/solid/control/powermanager.h
+@@ -0,0 +1,271 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_POWERMANAGER_H
++#define SOLID_POWERMANAGER_H
++
++#include <QtCore/QObject>
++
++#include <solid/control/solid_control_export.h>
++
++class KJob;
++
++namespace Solid
++{
++namespace Control
++{
++    /**
++     * This namespace allows to query the underlying system to obtain information
++     * about the hardware available.
++     *
++     * It's the unique entry point for power management. Applications should use
++     * it to control or query the power management features of the system.
++     *
++     * Note that it's implemented as a singleton and encapsulates the backend logic.
++     *
++     * @author Kevin Ottens <ervin at kde.org>
++     */
++    namespace PowerManager
++    {
++       /**
++         * This enum type defines the different states of the system battery.
++         *
++         * - NoBatteryState: No battery available
++         * - Normal: The battery is at its normal charge level
++         * - Warning: The battery is at its warning charge level
++         * - Low: The battery is at its low charge level
++         * - Critical: The battery is at its critical charge level
++         */
++        enum BatteryState{ NoBatteryState, Normal, Warning, Low, Critical };
++
++        /**
++         * This enum type defines the different states of the AC adapter.
++         *
++         * - UnknownAcAdapterState: The AC adapter has an unknown state
++         * - Plugged: The AC adapter is plugged
++         * - Unplugged: The AC adapter is unplugged
++         */
++        enum AcAdapterState{ UnknownAcAdapterState, Plugged, Unplugged };
++
++        /**
++         * This enum type defines the types of system button events.
++         *
++         * - UnknownButtonType: An unknown button
++         * - PowerButton: A power button pressed event, generally used to turn on or off the system
++         * - SleepButton: A sleep button pressed event, generally used to make the system asleep
++         * - LidOpen: A laptop lid open event
++         * - LidClose: A laptop lid close event
++         */
++        enum ButtonType{ UnknownButtonType, PowerButton, SleepButton, LidOpen, LidClose };
++
++        /**
++         * This enum type defines the different suspend methods.
++         *
++         * - UnknownSuspendMethod: The name says it all
++         * - Standby: Processes are stopped, some hardware is deactivated (ACPI S1)
++         * - ToRam: Most devices are deactivated, only RAM is powered (ACPI S3)
++         * - ToDisk: State of the machine is saved to disk, and it's powered down (ACPI S4)
++         */
++        enum SuspendMethod{ UnknownSuspendMethod = 0, Standby = 1, ToRam = 2, ToDisk = 4};
++
++        /**
++         * This type stores an OR combination of SuspendMethod values.
++         */
++        Q_DECLARE_FLAGS(SuspendMethods, SuspendMethod)
++
++        /**
++         * This enum type defines the different CPU frequency policies.
++         *
++         * - UnknownCpuFreqPolicy: The name says it all
++         * - OnDemand: Frequency is changed by the kernel depending on the processor load
++         * - Userspace: Frequency is changed by a userspace agent depending on the processor load
++         * - Powersave: Frequency is always set to the lowest available
++         * - Performance: Frequency is always set to the highest available
++         */
++        enum CpuFreqPolicy{ UnknownCpuFreqPolicy = 0, OnDemand = 1, Userspace = 2, Powersave = 4, Performance = 8 };
++
++        /**
++         * This type stores an OR combination of CpuFreqPolicy values.
++         */
++        Q_DECLARE_FLAGS(CpuFreqPolicies, CpuFreqPolicy)
++
++
++
++        /**
++         * Retrieves the list of power management schemes available on this system.
++         *
++         * @return the available power management schemes
++         */
++        SOLIDCONTROL_EXPORT QStringList supportedSchemes();
++
++        /**
++         * Retrieves a localized description corresponding to the given scheme.
++         *
++         * @param schemeName the name of the scheme we request the description for
++         * @return the associated description
++         */
++        SOLIDCONTROL_EXPORT QString schemeDescription(const QString &schemeName);
++
++        /**
++         * Retrieves the name of the current power management scheme used
++         * by the system.
++         *
++         * @return the current scheme
++         */
++        SOLIDCONTROL_EXPORT QString scheme();
++
++        /**
++         * Changes the current power management scheme.
++         *
++         * @param name the name of the new scheme
++         * @return true if the scheme change succeeded, false otherwise
++         */
++        SOLIDCONTROL_EXPORT bool setScheme(const QString &name);
++
++
++        /**
++         * Retrieves the current state of the system battery.
++         *
++         * @return the current battery state
++         * @see Solid::Control::PowerManager::BatteryState
++         */
++        SOLIDCONTROL_EXPORT BatteryState batteryState();
++
++        /**
++         * Retrieves the current charge percentage of the system batteries.
++         *
++         * @return the current global battery charge percentage
++         */
++        SOLIDCONTROL_EXPORT int batteryChargePercent();
++
++        /**
++         * Retrieves the current state of the system AC adapter.
++         *
++         * @return the current AC adapter state
++         * @see Solid::Control::PowerManager::AcAdapterState
++         */
++        SOLIDCONTROL_EXPORT AcAdapterState acAdapterState();
++
++
++        /**
++         * Retrieves the set of suspend methods supported by the system.
++         *
++         * @return the suspend methods supported by this system
++         * @see Solid::Control::PowerManager::SuspendMethod
++         * @see Solid::Control::PowerManager::SuspendMethods
++         */
++        SOLIDCONTROL_EXPORT SuspendMethods supportedSuspendMethods();
++
++        /**
++         * Requests a suspend of the system.
++         *
++         * @param method the suspend method to use
++         * @return the job handling the operation
++         */
++        SOLIDCONTROL_EXPORT KJob *suspend(SuspendMethod method);
++
++
++        /**
++         * Retrieves the set of CPU frequency policies supported by the system.
++         *
++         * @return the CPU frequency policies supported by this system
++         * @see Solid::Control::PowerManager::CpuFreqPolicy
++         * @see Solid::Control::PowerManager::CpuFreqPolicies
++         */
++        SOLIDCONTROL_EXPORT CpuFreqPolicies supportedCpuFreqPolicies();
++
++        /**
++         * Retrieves the current CPU frequency policy of the system.
++         *
++         * @return the current CPU frequency policy used by the system
++         * @see Solid::Control::PowerManager::CpuFreqPolicy
++         */
++        SOLIDCONTROL_EXPORT CpuFreqPolicy cpuFreqPolicy();
++
++        /**
++         * Changes the current CPU frequency policy of the system.
++         *
++         * @param newPolicy the new policy
++         * @return true if the policy change succeeded, false otherwise
++         * @see Solid::Control::PowerManager::CpuFreqPolicy
++         */
++        SOLIDCONTROL_EXPORT bool setCpuFreqPolicy(CpuFreqPolicy newPolicy);
++
++        /**
++         * Checks if a CPU can be disabled.
++         *
++         * @param cpuNum the number of the CPU we want to check
++         * @return true if the given CPU can be disabled, false otherwise
++         */
++        SOLIDCONTROL_EXPORT bool canDisableCpu(int cpuNum);
++
++        /**
++         * Enables or disables a CPU.
++         *
++         * @param cpuNum the number of the CPU we want to enable or disable
++         * @param enabled the new state of the CPU
++         * @return true if the state change succeeded, false otherwise
++         */
++        SOLIDCONTROL_EXPORT bool setCpuEnabled(int cpuNum, bool enabled);
++
++        class SOLIDCONTROL_EXPORT Notifier : public QObject
++        {
++            Q_OBJECT
++        Q_SIGNALS:
++            /**
++             * This signal is emitted when the power management scheme has changed.
++             *
++             * @param newScheme the new scheme name
++             */
++            void schemeChanged(QString newScheme);
++
++            /**
++             * This signal is emitted when the AC adapter is plugged or unplugged.
++             *
++             * @param newState the new state of the AC adapter, it's one of the
++             * type @see Solid::Control::PowerManager::AcAdapterState
++             */
++            void acAdapterStateChanged(int newState);
++
++            /**
++             * This signal is emitted when the system battery state changed.
++             *
++             * @param newState the new state of the system battery, it's one of the
++             * type @see Solid::Control::PowerManager::BatteryState
++             */
++            void batteryStateChanged(int newState);
++
++            /**
++             * This signal is emitted when a button has been pressed.
++             *
++             * @param buttonType the pressed button type, it's one of the
++             * type @see Solid::Control::PowerManager::ButtonType
++             */
++            void buttonPressed(int buttonType);
++        };
++
++        SOLIDCONTROL_EXPORT Notifier *notifier();
++    }
++}
++}
++
++Q_DECLARE_OPERATORS_FOR_FLAGS(Solid::Control::PowerManager::SuspendMethods)
++Q_DECLARE_OPERATORS_FOR_FLAGS(Solid::Control::PowerManager::CpuFreqPolicies)
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/network.h
+@@ -0,0 +1,159 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_NETWORK_H
++#define SOLID_NETWORK_H
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++#include <QtNetwork/QNetworkAddressEntry>
++
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++    class NetworkInterface;
++    class NetworkInterfacePrivate;
++    class NetworkPrivate;
++
++    /**
++     * This interface represents a generic Internet Protocol (IP) network which we may be connected to.
++     */
++    class SOLIDCONTROL_EXPORT Network : public QObject
++    {
++        Q_OBJECT
++        Q_DECLARE_PRIVATE(Network)
++
++    public:
++        /**
++         * Creates a new Network object.
++         *
++         * @param backendObject the network object provided by the backend
++         */
++        Network(QObject *backendObject = 0);
++
++        /**
++         * Constructs a copy of a network.
++         *
++         * @param network the network to copy
++         */
++        Network(const Network &network);
++
++        /**
++         * Destroys a Network object.
++         */
++        virtual ~Network();
++
++        /**
++         * Indicates if this network is valid.
++         * A network is considered valid if it's available to the system.
++         *
++         * @return true if this network is available, false otherwise
++         */
++        bool isValid() const;
++
++        /**
++         * Retrieves the Unique Network Identifier (UNI) of the Network.
++         * This identifier is unique for each network and network interface in the system.
++         *
++         * @returns the Unique Network Identifier of the current network
++         */
++        QString uni() const;
++
++
++
++        /**
++         * Retrieves the addresses that the device has on this network.
++         *
++         * @return the list of addresses
++         */
++        QList<QNetworkAddressEntry> addressEntries() const;
++
++        /**
++         * Retrieves the route we must follow when using this network. It's
++         * in particular used for VPN.
++         *
++         * @return the route address is available, QString() otherwise
++         */
++        QString route() const;
++
++        /**
++         * Retrieves the list of DNS servers to use on this network.
++         *
++         * @return the dns servers
++         */
++        QList<QHostAddress> dnsServers() const;
++
++        /**
++         * Retrieves the activation status of this network. For ethernets, this will always be true.
++         *
++         * @return true if this network is active, false otherwise
++         */
++        bool isActive() const;
++
++        /**
++         * Activates or deactivates this network. For ethernets, this has no effect.
++         *
++         * @param activated true to activate this network, false otherwise
++         */
++        void setActivated(bool activated);
++
++    Q_SIGNALS:
++        /**
++         * This signal is emitted when the settings of this network have changed.
++         */
++        void ipDetailsChanged();
++
++        /**
++         * This signal is emitted when the activation state of this network
++         * has changed.
++         *
++         * @param activated true if the network is activated, false otherwise
++         */
++        void activationStateChanged(bool activated);
++
++    protected:
++        /**
++         * @internal
++         */
++        Network(NetworkPrivate &dd, QObject *backendObject);
++
++        /**
++         * @internal
++         */
++        Network(NetworkPrivate &dd, const Network &network);
++
++        NetworkPrivate *d_ptr;
++
++    private:
++        friend class NetworkInterface;
++        friend class NetworkInterfacePrivate;
++    //HACK: to make NetworkList polymorphic (containing both wired and wireless networks, I used Network * here - Will.
++    };
++    typedef QList<Network *> NetworkList;
++
++
++} //Control
++} //Solid
++
++#endif
++
+--- /dev/null
++++ b/libs/solid/control/Messages.sh
+@@ -0,0 +1,2 @@
++#! /usr/bin/env bash
++$XGETTEXT *.cpp -o $podir/solidcontrol.pot
+--- /dev/null
++++ b/libs/solid/control/bluetoothsecurity.h
+@@ -0,0 +1,184 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++    Copyright (C) 2007 Juan González <jaguilera at opsiland.info>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_BLUETOOTHSECURITY_H
++#define SOLID_BLUETOOTHSECURITY_H
++
++#include <QtCore/QObject>
++#include <QtCore/QPair>
++
++#include <solid/control/singletondefs.h>
++#include <solid/control/solid_control_export.h>
++
++namespace Solid
++{
++namespace Control
++{
++    /**
++     * This is the interface a class must implement to act as a Passkey Agent.
++     * A class that acts as a PassKeyAgent will handle the process of pairing 
++     * (stablish a trusted connection) with a remote device.
++     */
++    class SOLIDCONTROL_EXPORT BluetoothPasskeyAgent : public QObject
++    {
++        Q_OBJECT
++        Q_PROPERTY(QString remote READ remote)
++        public:
++            /**
++             * Initializes the passkey agent
++             * @param parent pointer to the parent object for auto deletion
++             * @param remote address of the remote device for this agent in 00:00:00:00:00:00 format. If empty the agent will act as the default passkey agent for all devices.
++             */
++            BluetoothPasskeyAgent(QObject *parent = 0,const QString &remote="");
++            //FIXME This method shouldn't be virtual, but the linker complains (and halts) if it isn't
++            /**
++             * Gets the UBI of the remote device this agent authenticates. 
++             * @return Universal Bluetooth Identifier of the associated agent. If empty the agent authenticates any remote device that requires it.
++             */
++            virtual QString remote();
++        public Q_SLOTS:
++            /**
++             * This method gets called when the bluetooth system needs to get the passkey for a remote authentication.
++             * @param ubi Universal Bluetooth Identifier of the remote device
++             * @param isNumeric Indicates whether a numerical passkey is expected.
++             * @return The passkey to be used in this authentication, or an empty string if the request has been rejected/canceled
++             */
++            virtual QString requestPasskey(const QString &ubi, bool isNumeric);
++            /**
++             * This method gets called when the bluetooth system needs to verify a passkey. The verification is
++             * done by showing the value to the passkey agent.
++             * @param ubi Universal Bluetooth Identifier of the remote device
++             * @param passkey The passkey to confirm.
++             * @return Whether the passkey accepts or not the remote passkey
++             */
++            virtual bool confirmPasskey(const QString &ubi, const QString &passkey);
++            /**
++             * Gets called when the bluetooth system needs to show a passkey. No answer is
++             * expected from the agent.
++             * @param ubi Universal Bluetooth Identifier of the remote device
++             * @param passkey The passkey to show
++             */
++            virtual void displayPasskey(const QString &ubi, const QString &passkey);
++            /**
++             * Indicates keypresses from a remote device,this can happen, for example, when pairing with a keyboard.
++             * @param ubi Universal Bluetooth Identifier of the remote device that emitted the keypress
++             */
++            virtual void keypress(const QString &ubi);
++            /**
++             * Indicates to the agent that the authentication has been completed.
++             * @param ubi Universal Bluetooth Identifier of the remote device that has been authenticated
++             */
++            virtual void completedAuthentication(const QString &ubi);
++            /**
++             * Indicates to the agent that the authentication has been canceled before completion.
++             * @param ubi Universal Bluetooth Identifier of the remote device which authentication was 
++             */
++            virtual void cancelAuthentication(const QString &ubi);
++        private:
++            /// UBI of the remote device this passkey agent handles authentication for.
++            QString m_remote;
++    };
++    
++    /**
++     * This is the interface a class must implement to act as an Authorization Agent.
++     * An Authorization Agent handles requests to access local services from a remote
++     * device.
++     */
++    class SOLIDCONTROL_EXPORT BluetoothAuthorizationAgent: public QObject
++    {
++        Q_OBJECT
++        public:
++            /**
++             * Used to keep the QObject deletion chain working.
++             * @param parent The parent of this object that will take care of deletion.
++             */
++            BluetoothAuthorizationAgent(QObject *parent);
++        public Q_SLOTS:
++            /**
++             * This method gets called when the bluetooth system wants to get an authorization for accessing a local service.
++             * @param localUbi Universal Bluetooth Identifier of the local device providing the service
++             * @param remoteAddress of the remote device that wants to use our services
++             * @param serviceUuid Universal unique identifier for the local service
++             * @return whether the remote device is authorized to use the local service.
++             */
++            virtual bool authorize(const QString &localUbi,const QString &remoteAddress,const QString& serviceUuid)=0;
++            /**
++             * Cancels the currently active authorization request for the given local/remote device.
++             * @param localUbi Universal Bluetooth Identifier of the local device providing the service
++             * @param remoteAddress of the remote device that wanted to use our services but canceled before completion.
++             * @param serviceUuid Universal unique identifier for the local service
++             */
++            virtual void cancel(const QString &localUbi,const QString &remoteAddress,const QString& serviceUuid)=0;
++    };
++    
++    class BluetoothSecurityPrivate;
++    /**
++     * Represents a bluetooth security interface which handles passkey request by the backend.
++     * To get an instance of this class use Solid::Control::BluetoothManager::security().
++     */
++    class SOLIDCONTROL_EXPORT BluetoothSecurity : public QObject
++    {
++    Q_OBJECT
++    public:
++        /**
++         * Constructs an invalid bluetooth security object 
++         */
++        BluetoothSecurity();
++
++        /**
++         * Constructs a new bluetooth security object taking its data from a backend.
++         *
++         * @param backendObject the object given by the backend
++         */
++        explicit BluetoothSecurity(QObject *backendObject);
++
++        /**
++         * Destroys the device.
++         */
++        ~BluetoothSecurity();
++
++        /**
++         * Assigns a bluetooth security object to this bluetooth security object and returns a reference to it.
++         *
++         * @param device the bluetooth security object to assign
++         * @return a reference to the bluetooth security object 
++                     */
++        BluetoothSecurity &operator=(const BluetoothSecurity &object);
++    public Q_SLOTS:
++        /**
++         * Sets the passkeyagent that will handle authentication (for pairing) requests in this process
++         * @param agent The PasskeyAgent for this process. If there is a previously registered agent it WON'T be deleted, track/parent your objects.
++         */
++        void setPasskeyAgent(Solid::Control::BluetoothPasskeyAgent *agent);
++        /**
++         * Sets the authorizationagent that will handle service usage authorization requests in this process.
++         * @param agent The AuthorizationAgent for this process.If there is a previously registered agent it WON'T be deleted, track/parent your objects.
++         */
++        void setAuthorizationAgent(Solid::Control::BluetoothAuthorizationAgent *agent);
++    private:
++        Q_PRIVATE_SLOT(d, void _k_destroyed(QObject *))
++
++        BluetoothSecurityPrivate * const d;
++    };
++} //Control
++} //Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/managerbase.cpp
+@@ -0,0 +1,116 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "managerbase_p.h"
++
++#include <kservicetypetrader.h>
++#include <kservice.h>
++#include <klibloader.h>
++
++#include <klocale.h>
++#include <kdebug.h>
++
++static QMap<QString, QObject *> _k_preloadedBackends;
++
++Solid::Control::ManagerBasePrivate::ManagerBasePrivate()
++    : m_backend(0)
++{
++}
++
++Solid::Control::ManagerBasePrivate::~ManagerBasePrivate()
++{
++}
++
++void Solid::Control::ManagerBasePrivate::loadBackend(const QString &description, const char *serviceName,
++                                            const char *backendClassName)
++{
++    if (_k_preloadedBackends.contains(backendClassName)) {
++        m_backend = _k_preloadedBackends[backendClassName];
++        return;
++    }
++
++    QStringList error_msg;
++
++    KService::List offers = KServiceTypeTrader::self()->query(serviceName, "(Type == 'Service')");
++
++    foreach (KService::Ptr ptr, offers)
++    {
++        int error = 0;
++        m_backend = KService::createInstance<QObject>(ptr, 0, QStringList(), &error);
++
++        if(m_backend!=0) {
++            if (m_backend->inherits(backendClassName)) {
++                kDebug() << "Backend loaded: " << ptr->name();
++                break;
++            } else {
++                QString error_string = i18n("Backend loaded but wrong type obtained, expected %1",
++                                             backendClassName);
++
++                kDebug() << "Error loading '" << ptr->name() << "': " << error_string;
++                error_msg.append(error_string);
++
++                delete m_backend;
++                m_backend = 0;
++            }
++        } else {
++            QString error_string = KLibLoader::errorString(error);
++            kDebug() << "Error loading '" << ptr->name() << "', KLibLoader said: " << error_string;
++            error_msg.append(error_string);
++        }
++    }
++
++    if (m_backend==0) {
++        if (offers.size() == 0)
++        {
++            m_errorText = i18n("No %1 Backend found", description);
++        }
++        else
++        {
++            m_errorText = "<qt>";
++            m_errorText+= i18n("Unable to use any of the %1 Backends", description);
++            m_errorText+= "<table>";
++
++            QString line = "<tr><td><b>%1</b></td><td>%2</td></tr>";
++
++            for (int i = 0; i< offers.size(); i++)
++            {
++                m_errorText+= line.arg(offers[i]->name()).arg(error_msg[i]);
++            }
++
++            m_errorText+= "</table></qt>";
++        }
++    }
++}
++
++QString Solid::Control::ManagerBasePrivate::errorText() const
++{
++    return m_errorText;
++}
++
++QObject *Solid::Control::ManagerBasePrivate::managerBackend() const
++{
++    return m_backend;
++}
++
++void Solid::Control::ManagerBasePrivate::_k_forcePreloadedBackend(const char *backendClassName, QObject *backend)
++{
++    _k_preloadedBackends[backendClassName] = backend;
++}
++
++
+--- /dev/null
++++ b/libs/solid/control/bluetoothinputdevice.cpp
+@@ -0,0 +1,122 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QMap>
++#include <QStringList>
++
++#include <solid/control/ifaces/bluetoothinputdevice.h>
++
++#include "frontendobject_p.h"
++
++#include "soliddefs_p.h"
++
++#include "bluetoothinputdevice.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class BluetoothInputDevicePrivate : public FrontendObjectPrivate
++    {
++    public:
++        BluetoothInputDevicePrivate(QObject *parent)
++            : FrontendObjectPrivate(parent) { }
++
++        void setBackendObject(QObject *object);
++    };
++}
++}
++
++Solid::Control::BluetoothInputDevice::BluetoothInputDevice(QObject *backendObject)
++    : QObject(), d(new BluetoothInputDevicePrivate(this))
++{
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::BluetoothInputDevice::BluetoothInputDevice(const BluetoothInputDevice &device)
++    : QObject(), d(new BluetoothInputDevicePrivate(this))
++{
++    d->setBackendObject(device.d->backendObject());
++}
++
++Solid::Control::BluetoothInputDevice::~BluetoothInputDevice()
++{}
++
++Solid::Control::BluetoothInputDevice &Solid::Control::BluetoothInputDevice::operator=(const Solid::Control::BluetoothInputDevice  & dev)
++{
++    d->setBackendObject(dev.d->backendObject());
++
++    return *this;
++}
++
++QString Solid::Control::BluetoothInputDevice::ubi() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), QString(), ubi());
++}
++
++bool Solid::Control::BluetoothInputDevice::isConnected() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), false, isConnected());
++}
++
++QString Solid::Control::BluetoothInputDevice::name() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), QString(), name());
++}
++
++QString Solid::Control::BluetoothInputDevice::address() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), QString(), address());
++}
++
++QString Solid::Control::BluetoothInputDevice::productID() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), QString(), productID());
++}
++
++QString Solid::Control::BluetoothInputDevice::vendorID() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), QString(), vendorID());
++}
++
++void Solid::Control::BluetoothInputDevice::slotConnect()
++{
++    SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), slotConnect());
++}
++
++void Solid::Control::BluetoothInputDevice::slotDisconnect()
++{
++    SOLID_CALL(Ifaces::BluetoothInputDevice *, d->backendObject(), slotDisconnect());
++}
++
++void Solid::Control::BluetoothInputDevicePrivate::setBackendObject(QObject *object)
++{
++    FrontendObjectPrivate::setBackendObject(object);
++
++    if (object) {
++        QObject::connect(object, SIGNAL(connected()),
++                         parent(), SIGNAL(connected()));
++        QObject::connect(object, SIGNAL(disconnected()),
++                         parent(), SIGNAL(disconnected()));
++    }
++}
++
++#include "bluetoothinputdevice.moc"
+--- /dev/null
++++ b/libs/solid/control/bluetoothmanager.h
+@@ -0,0 +1,192 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006 Kevin Ottens <ervin at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_BLUETOOTHMANAGER
++#define SOLID_BLUETOOTHMANAGER
++
++#include <QtCore/QObject>
++
++#include <solid/control/singletondefs.h>
++#include <solid/control/solid_control_export.h>
++
++#include <solid/control/bluetoothinterface.h>
++#include <solid/control/bluetoothinputdevice.h>
++
++class KJob;
++
++namespace Solid
++{
++namespace Control
++{
++namespace Ifaces
++{
++    class BluetoothManager;
++}
++
++class BluetoothInterface;
++class BluetoothSecurity;
++
++typedef QList<BluetoothInterface> BluetoothInterfaceList;
++typedef QList<BluetoothInputDevice> BluetoothInputDeviceList;
++class BluetoothManagerPrivate;
++
++/**
++ * This class specifies the interface a backend will have to implement in
++ * order to be used in the system.
++ *
++ * A bluetooth manager allow to query the underlying platform to discover the
++ * available bluetooth interfaces.
++ */
++class SOLIDCONTROL_EXPORT BluetoothManager : public QObject
++{
++    Q_OBJECT
++    SOLID_SINGLETON(BluetoothManager)
++
++public:
++    /**
++     * Retrieves the list of all the bluetooth interfaces Universal Bluetooth Identifiers (UBIs)
++     * in the system.
++     *
++     * @return the list of bluetooth interfaces available in this system
++     */
++    BluetoothInterfaceList bluetoothInterfaces() const;
++
++    /**
++     * Retrieves the default bluetooth interface Universal Bluetooth Identifiers (UBIs)
++     * of the system.
++     *
++     * @return the UBI of the default bluetooth interface
++     */
++    QString defaultInterface() const;
++
++    /**
++     * Find a new BluetoothInterface object given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth interface to find
++     * @returns a valid BlueoothInterface object if there's a device having the given UBI, an invalid one otherwise
++     */
++    BluetoothInterface findBluetoothInterface(const QString  & ubi) const;
++
++
++    /**
++     * Find a new BluetoothInputDevice object given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth input device to find
++     * @returns a valid BlueoothInputDevice object if there's a device having the given UBI, an invalid one otherwise
++     */
++    BluetoothInputDevice findBluetoothInputDevice(const QString  & ubi) const;
++
++    /**
++     * Retrieves the list of Universal Bluetooth Identifiers (UBIs) of bluetooth input devices
++     * which are configured in the system. Configured means also not connected devices.
++     *
++     * @return the list of bluetooth input devices configured in this system
++     */
++    BluetoothInputDeviceList bluetoothInputDevices() const;
++
++    /**
++     * Instantiates a new BluetoothInputDevice object from this backend given its UBI.
++     *
++     * @param ubi the identifier of the bluetooth input device instantiated
++     * @returns a new BluetoothInputDevice object if there's a device having the given UBI, 0 otherwise
++     */
++    BluetoothInputDevice *createBluetoothInputDevice(const QString &ubi);
++
++    /**
++     * Setup a new bluetooth input device.
++     *
++     * @param ubi the ubi of the bluetooth input device
++     * @returns the job handling of the operation.
++     */
++    KJob *setupInputDevice(const QString &ubi);
++
++    /**
++     * Gets an instance of BluetoothSecurity to handle pairing/authorization requests
++     */
++    BluetoothSecurity *security(const QString &interface = QString());
++
++public Q_SLOTS:
++    /**
++     * Remove the configuraiton of a bluetooth input device.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    void removeInputDevice(const QString  & ubi);
++
++Q_SIGNALS:
++    /**
++     * This signal is emitted when a new bluetooth interface is available.
++     *
++     * @param ubi the bluetooth interface identifier
++     */
++    void interfaceAdded(const QString  & ubi);
++
++    /**
++     * This signal is emitted when a bluetooth interface is not available anymore.
++     *
++     * @param ubi the bluetooth interface identifier
++     */
++    void interfaceRemoved(const QString  & ubi);
++
++    /**
++     * This signal is emitted when the default bluetooth interface changed.
++     *
++     * @param ubi the bluetooth interface identifier
++     */
++    void defaultInterfaceChanged(const QString  & ubi);
++
++    /**
++     * This signal is emitted when a new bluetooth input device got configured/created.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    void inputDeviceCreated(const QString  & ubi);
++
++    /**
++     * This signal is emitted when a bluetooth input device configuration is not available anymore.
++     *
++     * @param ubi the bluetooth input device identifier
++     */
++    void inputDeviceRemoved(const QString  & ubi);
++
++
++private:
++    BluetoothManager();
++    ~BluetoothManager();
++
++    BluetoothInterfaceList buildDeviceList(const QStringList  & ubiList) const;
++
++    Q_PRIVATE_SLOT(d, void _k_interfaceAdded(const QString &))
++    Q_PRIVATE_SLOT(d, void _k_interfaceRemoved(const QString &))
++    Q_PRIVATE_SLOT(d, void _k_interfaceDestroyed(QObject *))
++
++    Q_PRIVATE_SLOT(d, void _k_inputDeviceCreated(const QString &))
++    Q_PRIVATE_SLOT(d, void _k_inputDeviceRemoved(const QString &))
++    Q_PRIVATE_SLOT(d, void _k_inputDeviceDestroyed(QObject *))
++
++    BluetoothManagerPrivate * const d;
++    friend class BluetoothManagerPrivate;
++};
++} // Control
++} // Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/org.kde.Solid.Networking.xml
+@@ -0,0 +1,17 @@
++<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
++<node>
++  <interface name="org.kde.Solid.Networking">
++    <property name="Status" type="u" access="read"/>
++    <signal name="statusChanged">
++      <arg type="u" direction="out"/>
++    </signal>
++    <method name="requestConnection">
++      <arg type="u" direction="out"/>
++    </method>
++    <method name="releaseConnection">
++    </method>
++    <method name="status">
++      <arg type="u" direction="out"/>
++    </method>
++  </interface>
++</node>
+--- /dev/null
++++ b/libs/solid/control/bluetoothremotedevice.h
+@@ -0,0 +1,343 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_BLUETOOTHREMOTEDEVICE_H
++#define SOLID_BLUETOOTHREMOTEDEVICE_H
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++#include <QtCore/QMap>
++
++#include <solid/control/bluetoothmanager.h>
++#include <solid/control/bluetoothinterface.h>
++
++class KJob;
++
++namespace Solid
++{
++namespace Control
++{
++class BluetoothRemoteDevicePrivate;
++/**
++ * Represents a bluetooth remote device as seen by the bluetoothing subsystem.
++ */
++class SOLIDCONTROL_EXPORT BluetoothRemoteDevice : public QObject
++{
++    Q_OBJECT
++    Q_DECLARE_PRIVATE(BluetoothRemoteDevice)
++
++public:
++    /**
++     * Creates a new BluetoothRemoteDevice object.
++     *
++     * @param backendObject the bluetooth remote device object provided by the backend
++     */
++    BluetoothRemoteDevice(QObject *backendObject = 0);
++
++    /**
++     * Constructs a copy of a bluetooth remote device.
++     *
++     * @param device the bluetooth remote device to copy
++     */
++    BluetoothRemoteDevice(const BluetoothRemoteDevice &device);
++
++    /**
++     * Destroys the device.
++     */
++    ~BluetoothRemoteDevice();
++
++    /**
++     * Assigns a bluetooth remote device to this bluetooth remote device and returns a reference to it.
++     *
++     * @param device the bluetooth remote device to assign
++     * @return a reference to the bluetooth remote device
++     */
++    BluetoothRemoteDevice &operator=(const BluetoothRemoteDevice &device);
++
++    /**
++     * Checks for equality.
++     * @param other the bluetooth remote device to compare with this
++     * @return true if this->ubi() equals other.ubi(), false otherwise
++     */
++    bool operator==(const BluetoothRemoteDevice  & other) const;
++
++    /**
++     * Retrieves the Universal Bluetooth Identifier (UBI) of the remote device.
++     * This identifier is unique for each remote device and bluetooth interface in the system.
++     *
++     * @returns the Universal Bluetooth Identifier of the current remote device.
++     */
++    QString ubi() const;
++
++    /**
++     * Retrieves MAC address of the bluetooth remote device.
++     *
++     * @returns MAC address of remote device.
++     */
++    QString address() const;
++
++
++    /**
++     * Retrieves true if remote device is connected.
++     *
++     * @returns true if remote bluetooth device is connected otherwise false.
++     */
++    bool isConnected() const;
++
++    /**
++     * Retrieves the bluetooth version of the remote device.
++     * LMP version (+ EDR support)
++     *
++     * @returns version of bluetooth chip.
++     */
++    QString version() const;
++
++    /**
++     * Retrieves the revision of the bluetooth chip of the remote device.
++     *
++     * @returns revision of bluetooth chip.
++     */
++    QString revision() const;
++
++    /**
++     * Retrieves company name based on the device address.
++     *
++     * @returns manufacturer string of bluetooth chip.
++     */
++    QString manufacturer() const;
++
++    /**
++     * Retrieves the manufacturer of the bluetooth chip of the remote device.
++     *
++     * @returns company string of the bluetooth chip.
++     */
++    QString company() const;
++
++    /**
++     * Retrieves the major class of the remote device.
++     * Example: "computer"
++     *
++     * @returns major class of remote device.
++     */
++    QString majorClass() const;
++
++    /**
++     * Retrieves the minor class of the remote device.
++     * Exampe: "laptop"
++     *
++     * @returns minor class of the remote device.
++     */
++    QString minorClass() const;
++
++    /**
++     * Retrieves a list of service classes of the remote device.
++     * Example: ["networking", "object transfer"]
++     *
++     * @returns list of service classes of the remote device.
++     */
++    QStringList serviceClasses() const;
++
++    /**
++     * Retrieves the real name of the remote device. See also alias().
++     * Example: "Daniel's mobile"
++     *
++     * @returns name of remote device.
++     */
++    QString name() const;
++
++    /**
++     * Retrieves alias of remote device. This is a local alias name for the remote device.
++     * If this string is empty the frontend should should use name(). This is handy if
++     * someone is using several bluetooth remote device with the same name. alias() should
++     * be preferred used by the frontend.
++     * Example: "Company mobile"
++     *
++     * @retuns local alias of remote device.
++     */
++    QString alias() const;
++
++    /**
++     * Retrieves the date and time when the remote device has been seen.
++     * Example: "2007-03-20 22:14:00 GMT"
++     *
++     * @returns date and time when the remote device has been seen.
++     */
++    QString lastSeen() const;
++
++    /**
++     * Retrieves the date and time when the remote device has been used.
++     * Example: "2007-03-20 22:14:00 GMT"
++     *
++     * @returns date and time when the remote device has been used.
++     */
++    QString lastUsed() const;
++
++    /**
++     * Retrieves true if remote device has bonding.
++     *
++     * @returns true if remote device has bonding.
++     */
++    bool hasBonding() const;
++
++    /**
++     * Retrieves PIN code length that was used in the pairing process of remote device.
++     *
++     * @returns PIN code length of pairing.
++     */
++    int pinCodeLength() const;
++
++    /**
++     * Retrieves currently used encryption key size of remote device.
++     *
++     * @returns encryption key size.
++     */
++    int encryptionKeySize() const;
++
++    /**
++     * Create bonding ("pairing") with remote device.
++     *
++     * @returns the job handling of the operation.
++     */
++    KJob *createBonding();
++
++public Q_SLOTS:
++    /**
++     * Set alias for remote device.
++     *
++     * @param alias new alias name
++     */
++    void setAlias(const QString &alias);
++
++    /**
++     * Clear alias for remote device.
++     */
++    void clearAlias();
++
++    /**
++     * Disconnect remote device.
++     */
++    void disconnect();
++
++    /**
++     * Cancel bonding process of remote device.
++     */
++    void cancelBondingProcess();
++
++    /**
++     * Remove bonding bonding of remote device.
++     */
++    void removeBonding();
++    /**
++     * Obtains a list of unique identifiers to each service provided by this remote device.
++     * As this is a slow operation, this method only queues the message
++     * in the dbus and returns the list of handles using the serviceHandlesAvailable signal
++     * 
++     * NOTE: Most local adapters won't support more than one search at a time, so serialize your requests
++     * 
++     * @param filter A filter to apply to the search (look at http://wiki.bluez.org/wiki/HOWTO/DiscoveringServices#Searchpatterns)
++     */
++    void serviceHandles(const QString &filter ="") const;
++    /**
++     * Requests the service record associated with the given handle.
++     * As this is a slow operation, this method only queues the message
++     * in the dbus and returns the XML record using the serviceRecordXmlAvailable signal.
++     * 
++     * NOTE: Most local adapters won't support more than one search at a time, so serialize your requests
++     * 
++     * @param handle The handle that uniquely identifies the service record requested.
++     */
++    void serviceRecordAsXml(uint handle) const;
++Q_SIGNALS:
++    /**
++     * Class has been changed of remote device.
++     *
++     * @params deviceClass the device class of the remote device
++     */
++    void classChanged(uint deviceClass);
++
++    /**
++     * Name has beend changed of remote device.
++     *
++     * @params name the name of the remote device
++     */
++    void nameChanged(const QString &name);
++
++    /**
++     * Resolving of remote device name failed.
++     */
++    void nameResolvingFailed();
++
++    /**
++     * Alias has been changed of remote device.
++     *
++     * @params alias the alias of the remote device
++     */
++    void aliasChanged(const QString &alias);
++
++    /**
++     * Alias got cleared of remote device.
++     */
++    void aliasCleared();
++
++    /**
++     * Remote device has been connected.
++     */
++    void connected();
++
++    /**
++     * Disconnection has been requested for remote device.
++     */
++    void requestDisconnection();
++
++    /**
++     * Remote device has been disconnected.
++     */
++    void disconnected();
++
++    /**
++     * Bonding with remote device has been created.
++     */
++    void bondingCreated();
++
++    /**
++     * Bonding has been removed of remote device.
++     */
++    void bondingRemoved();
++    
++    /**
++     * Search for service handles is done
++     */
++    void serviceHandlesAvailable(const QString &ubi, const QList<uint> &handles);
++    /**
++     * A new service record is available
++     */
++    void serviceRecordXmlAvailable(const QString &ubi, const QString &record);
++protected:
++    BluetoothRemoteDevicePrivate *d_ptr;
++
++private:
++    Q_PRIVATE_SLOT(d_func(), void _k_destroyed(QObject *))
++};
++
++} //Control
++} //Solid
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/frontendobject.cpp
+@@ -0,0 +1,65 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "frontendobject_p.h"
++
++#include <QtCore/QObject>
++
++Solid::Control::FrontendObjectPrivate::FrontendObjectPrivate(QObject *parent)
++    : m_parent(parent), m_backendObject(0)
++{
++}
++
++Solid::Control::FrontendObjectPrivate::~FrontendObjectPrivate()
++{
++}
++
++QObject *Solid::Control::FrontendObjectPrivate::parent() const
++{
++    return m_parent;
++}
++
++QObject *Solid::Control::FrontendObjectPrivate::backendObject() const
++{
++    return m_backendObject;
++}
++
++void Solid::Control::FrontendObjectPrivate::setBackendObject(QObject *object)
++{
++    if (m_backendObject)
++    {
++        QObject::disconnect(m_parent, 0, m_backendObject, 0);
++        m_backendObject->disconnect(m_parent);
++    }
++
++    m_backendObject = object;
++
++    if (m_backendObject)
++    {
++        QObject::connect(m_backendObject, SIGNAL(destroyed(QObject *)),
++                         m_parent, SLOT(_k_destroyed(QObject *)));
++    }
++}
++
++void Solid::Control::FrontendObjectPrivate::_k_destroyed(QObject *object)
++{
++    if (m_backendObject == object) {
++        m_backendObject = 0;
++    }
++}
+--- /dev/null
++++ b/libs/solid/control/solidnetworkmanager.desktop
+@@ -0,0 +1,34 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=ServiceType
++X-KDE-ServiceType=SolidNetworkManager
++
++Comment=Network Management Backend
++Comment[be]=Кіраванне сеткай
++Comment[bg]=Заден слой за управление на мрежа
++Comment[de]=Backend zur Netzwerkverwaltung
++Comment[el]=Σύστημα διαχείρισης δικτύου
++Comment[et]=Võrgu haldamise taustaprogramm
++Comment[fa]=پایانۀ پشتیبانی مدیریت شبکه
++Comment[he]=ממשק ניהול רשת
++Comment[ja]=ネットワーク管理のバックエンド
++Comment[kk]=Желіні басқару тетігі
++Comment[km]=ការ​គ្រប់គ្រង​បណ្តាញ​កម្មវិធី​ខាងក្រោយ
++Comment[ko]=네트워크 관리 백엔드
++Comment[nb]=Bakgrunnsmotor for nettverksstyring
++Comment[nds]=Hülpprogramm för den Nettwark-Pleger
++Comment[ne]=सञ्जाल व्यवस्थापन ब्याकइन्ड
++Comment[nl]=Netwerkbeheer backend
++Comment[nn]=Motor for nettverkshandtering
++Comment[pa]=ਨੈਟਵਰਕ ਪਰਬੰਧ ਬੈਕਐਂਡ
++Comment[pt]=Infra-Estrutura de Gestão da Rede
++Comment[pt_BR]=Infra-estrutura do Gerenciamento de Rede
++Comment[sv]=Nätverkshanteringsgränssnitt
++Comment[vi]=Hậu phương quản lý mạng
++Comment[x-test]=xxNetwork Management Backendxx
++Comment[zh_CN]=网络管理后端
++Comment[zh_TW]=網路管理後端介面
++
++[PropertyDef::X-KDE-SolidBackendInfo-Version]
++Type=QString
++
+--- /dev/null
++++ b/libs/solid/control/wirelessnetwork.cpp
+@@ -0,0 +1,167 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "wirelessnetwork.h"
++
++#include "network_p.h"
++#include "soliddefs_p.h"
++#include <solid/control/ifaces/wirelessnetwork.h>
++
++namespace Solid
++{
++namespace Control
++{
++    class WirelessNetworkPrivate : public NetworkPrivate
++    {
++    public:
++        WirelessNetworkPrivate(QObject *parent)
++            : NetworkPrivate(parent) { }
++
++        void setBackendObject(QObject *object);
++    };
++}
++}
++
++Solid::Control::WirelessNetwork::WirelessNetwork(QObject *backendObject)
++    : Network(*new WirelessNetworkPrivate(this), backendObject)
++{
++    Q_D(WirelessNetwork);
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::WirelessNetwork::WirelessNetwork(const WirelessNetwork  & network)
++    : Network(*new WirelessNetworkPrivate(this), network)
++{
++    Q_D(WirelessNetwork);
++    d->setBackendObject(network.d_ptr->backendObject());
++}
++
++void Solid::Control::WirelessNetworkPrivate::setBackendObject(QObject *object)
++{
++    FrontendObjectPrivate::setBackendObject(object);
++
++    if (object) {
++        QObject::connect(object, SIGNAL(signalStrengthChanged(int)),
++                         parent(), SIGNAL(signalStrengthChanged(int)));
++        QObject::connect(object, SIGNAL(bitrateChanged(int)),
++                         parent(), SIGNAL(bitrateChanged(int)));
++        QObject::connect(object, SIGNAL(associationChanged(bool)),
++                         parent(), SIGNAL(associationChanged(bool)));
++        QObject::connect(object, SIGNAL(authenticationNeeded()),
++                         parent(), SIGNAL(authenticationNeeded()));
++    }
++}
++
++Solid::Control::WirelessNetwork::~WirelessNetwork()
++{
++
++}
++
++bool Solid::Control::WirelessNetwork::isSameAs(const WirelessNetwork  & other) const
++{
++    if (other.essid() == essid())
++    {
++        QStringListIterator it(bssList());
++        const QStringList otherBSSList = other.bssList();
++        while (it.hasNext())
++        {
++            QString bss = it.next();
++            if (other.bssList().contains(bss))
++            {
++                return true;
++            }
++        }
++    }
++    return false;
++}
++
++int Solid::Control::WirelessNetwork::signalStrength() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), 0, signalStrength());
++}
++
++int Solid::Control::WirelessNetwork::bitrate() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), 0, bitrate());
++}
++
++double Solid::Control::WirelessNetwork::frequency() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), 0, frequency());
++}
++
++Solid::Control::MacAddressList Solid::Control::WirelessNetwork::bssList() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), MacAddressList(), bssList());
++}
++
++Solid::Control::Authentication *Solid::Control::WirelessNetwork::authentication() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), 0, authentication());
++}
++
++Solid::Control::WirelessNetwork::Capabilities Solid::Control::WirelessNetwork::capabilities() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), Capabilities(), capabilities());
++}
++
++QString Solid::Control::WirelessNetwork::essid() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), QString(), essid());
++}
++
++Solid::Control::WirelessNetwork::OperationMode Solid::Control::WirelessNetwork::mode() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), Unassociated, mode());
++}
++
++bool Solid::Control::WirelessNetwork::isAssociated() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), false, isAssociated());
++}
++
++bool Solid::Control::WirelessNetwork::isEncrypted() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), false, isEncrypted());
++}
++
++bool Solid::Control::WirelessNetwork::isHidden() const
++{
++    Q_D(const WirelessNetwork);
++    return_SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), false, isHidden());
++}
++
++void Solid::Control::WirelessNetwork::setAuthentication(Authentication *authentication)
++{
++    Q_D(WirelessNetwork);
++    SOLID_CALL(Ifaces::WirelessNetwork *, d->backendObject(), setAuthentication(authentication));
++}
++
++#include "wirelessnetwork.moc"
+--- /dev/null
++++ b/libs/solid/control/solidpowermanager.desktop
+@@ -0,0 +1,35 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=ServiceType
++X-KDE-ServiceType=SolidPowerManager
++
++Comment=Power Management Backend
++Comment[be]=Кіраванне сілкаваннем
++Comment[bg]=Заден слой за управление на захранване
++Comment[de]=Backend zur Energieverwaltung
++Comment[el]=Σύστημα διαχείρισης ενέργειας
++Comment[es]=Motor de la gestión de energía
++Comment[et]=Voolutarbe haldamise taustaprogramm
++Comment[fa]=پایانۀ پشتیبانی مدیریت توان
++Comment[he]=ממשק ניהול צריכת חשמל
++Comment[ja]=電源管理のバックエンド
++Comment[kk]=Қуаттандыруды басқару тетігі
++Comment[km]=ការ​គ្រប់គ្រង​ថាមពល​កម្មវិធី​ខាង​ក្រោយ
++Comment[ko]=전력 관리 백엔드
++Comment[nb]=Bakgrunnsmotor for strømstyring
++Comment[nds]=Hülpprogramm för de Stroomkuntrull
++Comment[ne]=शक्ति व्यवस्थापन ब्याकइन्ड
++Comment[nl]=Energiebeheer backend
++Comment[nn]=Motor for straumstyring
++Comment[pa]=ਊਰਜਾ ਪਰਬੰਧ ਬੈਕਐਂਡ
++Comment[pt]=Infra-Estrutura de Gestão da Energia
++Comment[pt_BR]=Infra-estrutura do Gerenciamento de Energia
++Comment[sv]=Gränssnitt för strömsparhantering
++Comment[vi]=Hậu phương quản lý nguồn điện
++Comment[x-test]=xxPower Management Backendxx
++Comment[zh_CN]=电源管理后端
++Comment[zh_TW]=電源管理後端介面
++
++[PropertyDef::X-KDE-SolidBackendInfo-Version]
++Type=QString
++
+--- /dev/null
++++ b/libs/solid/control/networkinterface.cpp
+@@ -0,0 +1,254 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QMap>
++#include <QStringList>
++
++#include <solid/control/ifaces/network.h>
++#include <solid/control/ifaces/networkinterface.h>
++#include <solid/control/ifaces/wirelessnetwork.h>
++
++#include "frontendobject_p.h"
++
++#include "soliddefs_p.h"
++#include "networkmanager.h"
++#include "network.h"
++#include "network_p.h"
++#include "networkinterface.h"
++#include "wirelessnetwork.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class NetworkInterfacePrivate : public FrontendObjectPrivate
++    {
++    public:
++        NetworkInterfacePrivate(QObject *parent)
++            : FrontendObjectPrivate(parent) { }
++
++        void setBackendObject(QObject *object);
++        void _k_destroyed(QObject *object);
++
++        Solid::Control::Network *findRegisteredNetwork(const QString &uni) const;
++
++
++        mutable QMap<QString, Network *> networkMap;
++        mutable Network invalidNetwork;
++    };
++}
++}
++
++
++Solid::Control::NetworkInterface::NetworkInterface()
++    : QObject(), d(new NetworkInterfacePrivate(this))
++{
++}
++
++Solid::Control::NetworkInterface::NetworkInterface(const QString &uni)
++    : QObject(), d(new NetworkInterfacePrivate(this))
++{
++    const NetworkInterface &device = NetworkManager::findNetworkInterface(uni);
++    d->setBackendObject(device.d->backendObject());
++}
++
++Solid::Control::NetworkInterface::NetworkInterface(QObject *backendObject)
++    : QObject(), d(new NetworkInterfacePrivate(this))
++{
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::NetworkInterface::NetworkInterface(const NetworkInterface &device)
++    : QObject(), d(new NetworkInterfacePrivate(this))
++{
++    d->setBackendObject(device.d->backendObject());
++}
++
++Solid::Control::NetworkInterface::~NetworkInterface()
++{
++    foreach (QObject *network, d->networkMap)
++    {
++        delete network;
++    }
++}
++
++Solid::Control::NetworkInterface &Solid::Control::NetworkInterface::operator=(const Solid::Control::NetworkInterface  & dev)
++{
++    d->setBackendObject(dev.d->backendObject());
++    return *this;
++}
++
++bool Solid::Control::NetworkInterface::isValid() const
++{
++    return d->backendObject()!=0;
++}
++
++QString Solid::Control::NetworkInterface::uni() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), QString(), uni());
++}
++
++bool Solid::Control::NetworkInterface::isActive() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), false, isActive());
++}
++
++Solid::Control::NetworkInterface::Type Solid::Control::NetworkInterface::type() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), UnknownType, type());
++}
++Solid::Control::NetworkInterface::ConnectionState Solid::Control::NetworkInterface::connectionState() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), UnknownState, connectionState());
++}
++
++int Solid::Control::NetworkInterface::signalStrength() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), 0, signalStrength());
++}
++
++int Solid::Control::NetworkInterface::designSpeed() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), 0, designSpeed());
++}
++
++bool Solid::Control::NetworkInterface::isLinkUp() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), false, isLinkUp());
++}
++
++Solid::Control::NetworkInterface::Capabilities Solid::Control::NetworkInterface::capabilities() const
++{
++    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), Capabilities(), capabilities());
++}
++
++Solid::Control::Network * Solid::Control::NetworkInterface::findNetwork(const QString  & uni) const
++{
++    if (!isValid()) return 0;
++
++    Network *network = d->findRegisteredNetwork(uni);
++
++    if (network!=0)
++    {
++        return network;
++    }
++    else
++    {
++        return &(d->invalidNetwork);
++    }
++}
++
++Solid::Control::NetworkList Solid::Control::NetworkInterface::networks() const
++{
++    NetworkList list;
++    Ifaces::NetworkInterface *device = qobject_cast<Ifaces::NetworkInterface *>(d->backendObject());
++
++    if (device==0) return list;
++
++    QStringList uniList = device->networks();
++
++    foreach (const QString &uni, uniList)
++    {
++        Network *network = d->findRegisteredNetwork(uni);
++        if (network!=0)
++        {
++            list.append(network);
++        }
++    }
++
++    return list;
++}
++
++void Solid::Control::NetworkInterfacePrivate::_k_destroyed(QObject *object)
++{
++    if (object == backendObject())
++    {
++        FrontendObjectPrivate::_k_destroyed(object);
++
++        foreach (Network *network, networkMap)
++        {
++            delete network->d_func()->backendObject();
++            delete network;
++        }
++
++        networkMap.clear();
++    }
++}
++
++void Solid::Control::NetworkInterfacePrivate::setBackendObject(QObject *object)
++{
++    foreach (QObject *network, networkMap) {
++        delete network;
++    }
++
++    networkMap.clear();
++
++
++    FrontendObjectPrivate::setBackendObject(object);
++
++    if (object) {
++        QObject::connect(object, SIGNAL(activeChanged(bool)),
++                         parent(), SIGNAL(activeChanged(bool)));
++        QObject::connect(object, SIGNAL(linkUpChanged(bool)),
++                         parent(), SIGNAL(linkUpChanged(bool)));
++        QObject::connect(object, SIGNAL(signalStrengthChanged(int)),
++                         parent(), SIGNAL(signalStrengthChanged(int)));
++        QObject::connect(object, SIGNAL(connectionStateChanged(int)),
++                         parent(), SIGNAL(connectionStateChanged(int)));
++        QObject::connect(object, SIGNAL(networkAppeared(const QString &)),
++                         parent(), SIGNAL(networkAppeared(const QString &)));
++        QObject::connect(object, SIGNAL(networkDisappeared(const QString &)),
++                         parent(), SIGNAL(networkDisappeared(const QString &)));
++    }
++}
++
++Solid::Control::Network *Solid::Control::NetworkInterfacePrivate::findRegisteredNetwork(const QString &uni) const
++{
++    Network *network = 0;
++
++    if (networkMap.contains(uni)) {
++        network = networkMap[uni];
++    } else {
++        Ifaces::NetworkInterface *device = qobject_cast<Ifaces::NetworkInterface *>(backendObject());
++
++        if (device!=0)
++        {
++            QObject *iface = device->createNetwork(uni);
++
++            if (qobject_cast<Ifaces::WirelessNetwork *>(iface)!=0)
++            {
++                network = new WirelessNetwork(iface);
++            }
++            else if (qobject_cast<Ifaces::Network *>(iface)!=0)
++            {
++                network = new Network(iface);
++            }
++
++            if (network != 0)
++            {
++                networkMap[uni] = network;
++            }
++        }
++    }
++
++    return network;
++}
++
++#include "networkinterface.moc"
+--- /dev/null
++++ b/libs/solid/control/solid_control_export.h
+@@ -0,0 +1,56 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 David Faure <faure at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef SOLID_CONTROL_EXPORT_H
++#define SOLID_CONTROL_EXPORT_H
++
++/* needed for KDE_EXPORT and KDE_IMPORT macros */
++#include <kdemacros.h>
++
++/* We use _WIN32/_WIN64 instead of Q_OS_WIN so that this header can be used from C files too */
++#if defined _WIN32 || defined _WIN64
++
++#ifndef SOLIDCONTROL_EXPORT
++# if defined(MAKE_SOLIDCONTROL_LIB)
++   /* We are building this library */
++#  define SOLIDCONTROL_EXPORT KDE_EXPORT
++# else
++   /* We are using this library */
++#  define SOLIDCONTROL_EXPORT KDE_IMPORT
++# endif
++#endif
++
++#ifndef SOLIDCONTROLIFACES_EXPORT
++# if defined(MAKE_SOLIDCONTROLIFACES_LIB)
++   /* We are building this library */
++#  define SOLIDCONTROLIFACES_EXPORT KDE_EXPORT
++# else
++   /* We are using this library */
++#  define SOLIDCONTROLIFACES_EXPORT KDE_IMPORT
++# endif
++#endif
++
++#else /* UNIX */
++
++#define SOLIDCONTROL_EXPORT KDE_EXPORT
++#define SOLIDCONTROLIFACES_EXPORT KDE_EXPORT
++
++#endif
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/solidbluetoothmanager.desktop
+@@ -0,0 +1,35 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=ServiceType
++X-KDE-ServiceType=SolidBluetoothManager
++
++Comment=Bluetooth Management Backend
++Comment[be]=Кіраванне Bluetooth
++Comment[bg]=Заден слой за управление на Bluetooth
++Comment[de]=Backend zur Bluetooth-Verwaltung
++Comment[el]=Σύστημα διαχείρισης Bluetooth
++Comment[et]=Bluetoothi haldamise taustaprogramm
++Comment[fa]=پایانۀ پشتیبانی مدیریت بلوتوث
++Comment[he]=ממשק ניהול Bluetooth
++Comment[ja]=Bluetooth 管理のバックエンド
++Comment[kk]=Bluetooth басқару тетігі
++Comment[km]=ការ​គ្រប់គ្រង​ប៊្លូធូស​​កម្មវិធី​ខាង​ក្រោយ
++Comment[ko]=Bluetooth 관리 백엔드
++Comment[lt]=Bluetooth tvarkymo programinė sąsaja
++Comment[nb]=Bakgrunnsmotor for Bluetooth-styring
++Comment[nds]=Hülprogramm för den Bluetooth-Pleger
++Comment[ne]=ब्लुटुथ व्यवस्थापन ब्याकइन्ड
++Comment[nl]=Bluetooth-beheer backend
++Comment[nn]=Motor for Bluetooth-handtering
++Comment[pa]=ਬਲਿਊਟੁੱਥ ਪਰਬੰਧ ਬੈਕਐਂਡ
++Comment[pt]=Infra-Estrutura de Gestão do Bluetooth
++Comment[pt_BR]=Infra-estrutura do Gerenciamento de Bluetooth
++Comment[sv]=Blåtandshanteringsgränssnitt
++Comment[vi]=Hậu phương quản lý kỹ thuật Bluetooth
++Comment[x-test]=xxBluetooth Management Backendxx
++Comment[zh_CN]=蓝牙管理后端
++Comment[zh_TW]=藍芽管理後端介面
++
++[PropertyDef::X-KDE-SolidBackendInfo-Version]
++Type=QString
++
+--- /dev/null
++++ b/libs/solid/control/networkmanager.cpp
+@@ -0,0 +1,223 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "ifaces/networkmanager.h"
++#include "ifaces/networkinterface.h"
++
++#include "soliddefs_p.h"
++#include "networkmanager_p.h"
++#include "networkinterface.h"
++
++#include "networkmanager.h"
++
++#include <kglobal.h>
++
++K_GLOBAL_STATIC(Solid::Control::NetworkManagerPrivate, globalNetworkManager)
++
++Solid::Control::NetworkManagerPrivate::NetworkManagerPrivate()
++{
++    loadBackend("Network Management",
++                "SolidNetworkManager",
++                "Solid::Control::Ifaces::NetworkManager");
++
++    if (managerBackend()!=0) {
++        connect(managerBackend(), SIGNAL(networkInterfaceAdded(const QString &)),
++                this, SLOT(_k_networkInterfaceAdded(const QString &)));
++        connect(managerBackend(), SIGNAL(networkInterfaceRemoved(const QString &)),
++                this, SLOT(_k_networkInterfaceRemoved(const QString &)));
++    }
++}
++
++Solid::Control::NetworkManagerPrivate::~NetworkManagerPrivate()
++{
++    // Delete all the devices, they are now outdated
++    typedef QPair<NetworkInterface *, Ifaces::NetworkInterface *> NetworkInterfaceIfacePair;
++
++    // Delete all the devices, they are now outdated
++    foreach (const NetworkInterfaceIfacePair &pair, m_networkInterfaceMap.values()) {
++        delete pair.first;
++        delete pair.second;
++    }
++
++    m_networkInterfaceMap.clear();
++}
++
++Solid::Control::NetworkInterfaceList Solid::Control::NetworkManagerPrivate::buildDeviceList(const QStringList &uniList)
++{
++    NetworkInterfaceList list;
++    Ifaces::NetworkManager *backend = qobject_cast<Ifaces::NetworkManager *>(managerBackend());
++
++    if (backend == 0) return list;
++
++    foreach (const QString &uni, uniList)
++    {
++        QPair<NetworkInterface *, Ifaces::NetworkInterface *> pair = findRegisteredNetworkInterface(uni);
++
++        if (pair.first!= 0)
++        {
++            list.append(*pair.first);
++        }
++    }
++
++    return list;
++}
++
++Solid::Control::NetworkInterfaceList Solid::Control::NetworkManagerPrivate::networkInterfaces()
++{
++    Ifaces::NetworkManager *backend = qobject_cast<Ifaces::NetworkManager *>(managerBackend());
++
++    if (backend!= 0)
++    {
++        return buildDeviceList(backend->networkInterfaces());
++    }
++    else
++    {
++        return NetworkInterfaceList();
++    }
++}
++
++Solid::Control::NetworkInterfaceList Solid::Control::NetworkManager::networkInterfaces()
++{
++    return globalNetworkManager->networkInterfaces();
++}
++
++bool Solid::Control::NetworkManager::isNetworkingEnabled()
++{
++    return_SOLID_CALL(Ifaces::NetworkManager *, globalNetworkManager->managerBackend(), false, isNetworkingEnabled());
++}
++
++bool Solid::Control::NetworkManager::isWirelessEnabled()
++{
++    return_SOLID_CALL(Ifaces::NetworkManager *, globalNetworkManager->managerBackend(), false, isWirelessEnabled());
++}
++
++void Solid::Control::NetworkManager::setNetworkingEnabled(bool enabled)
++{
++    SOLID_CALL(Ifaces::NetworkManager *, globalNetworkManager->managerBackend(), setNetworkingEnabled(enabled));
++}
++
++void Solid::Control::NetworkManager::setWirelessEnabled(bool enabled)
++{
++    SOLID_CALL(Ifaces::NetworkManager *, globalNetworkManager->managerBackend(), setWirelessEnabled(enabled));
++}
++
++void Solid::Control::NetworkManager::notifyHiddenNetwork(const QString &networkName)
++{
++    SOLID_CALL(Ifaces::NetworkManager *, globalNetworkManager->managerBackend(), notifyHiddenNetwork(networkName));
++}
++
++const Solid::Control::NetworkInterface &Solid::Control::NetworkManagerPrivate::findNetworkInterface(const QString &uni)
++{
++    Ifaces::NetworkManager *backend = qobject_cast<Ifaces::NetworkManager *>(managerBackend());
++
++    if (backend == 0) return m_invalidDevice;
++
++    QPair<NetworkInterface *, Ifaces::NetworkInterface *> pair = findRegisteredNetworkInterface(uni);
++
++    if (pair.first != 0)
++    {
++        return *pair.first;
++    }
++    else
++    {
++        return m_invalidDevice;
++    }
++}
++
++const Solid::Control::NetworkInterface &Solid::Control::NetworkManager::findNetworkInterface(const QString &uni)
++{
++    return globalNetworkManager->findNetworkInterface(uni);
++}
++
++void Solid::Control::NetworkManagerPrivate::_k_networkInterfaceAdded(const QString &uni)
++{
++    QPair<NetworkInterface *, Ifaces::NetworkInterface *> pair = m_networkInterfaceMap.take(uni);
++
++    if (pair.first!= 0)
++    {
++        // Oops, I'm not sure it should happen...
++        // But well in this case we'd better kill the old device we got, it's probably outdated
++
++        delete pair.first;
++        delete pair.second;
++    }
++
++    emit networkInterfaceAdded(uni);
++}
++
++void Solid::Control::NetworkManagerPrivate::_k_networkInterfaceRemoved(const QString &uni)
++{
++    QPair<NetworkInterface *, Ifaces::NetworkInterface *> pair = m_networkInterfaceMap.take(uni);
++
++    if (pair.first!= 0)
++    {
++        delete pair.first;
++        delete pair.second;
++    }
++
++    emit networkInterfaceRemoved(uni);
++}
++
++void Solid::Control::NetworkManagerPrivate::_k_destroyed(QObject *object)
++{
++    Ifaces::NetworkInterface *device = qobject_cast<Ifaces::NetworkInterface *>(object);
++
++    if (device!=0)
++    {
++        QString uni = device->uni();
++        QPair<NetworkInterface *, Ifaces::NetworkInterface *> pair = m_networkInterfaceMap.take(uni);
++        delete pair.first;
++    }
++}
++
++/***************************************************************************/
++
++QPair<Solid::Control::NetworkInterface *, Solid::Control::Ifaces::NetworkInterface *>
++Solid::Control::NetworkManagerPrivate::findRegisteredNetworkInterface(const QString &uni)
++{
++    if (m_networkInterfaceMap.contains(uni)) {
++        return m_networkInterfaceMap[uni];
++    } else {
++        Ifaces::NetworkManager *backend = qobject_cast<Ifaces::NetworkManager *>(managerBackend());
++        Ifaces::NetworkInterface *iface = 0;
++
++        if (backend!=0)
++        {
++            iface = qobject_cast<Ifaces::NetworkInterface *>(backend->createNetworkInterface(uni));
++        }
++
++        if (iface!=0)
++        {
++            NetworkInterface *device = new NetworkInterface(iface);
++            QPair<NetworkInterface *, Ifaces::NetworkInterface *> pair(device, iface);
++            connect(iface, SIGNAL(destroyed(QObject *)),
++                    this, SLOT(_k_destroyed(QObject *)));
++            m_networkInterfaceMap[uni] = pair;
++            return pair;
++        }
++        else
++        {
++            return QPair<NetworkInterface *, Ifaces::NetworkInterface *>(0, 0);
++        }
++    }
++}
++
++#include "networkmanager_p.moc"
++#include "networkmanager.moc"
+--- /dev/null
++++ b/libs/solid/control/authentication.h
+@@ -0,0 +1,309 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Kevin Ottens <ervin at kde.org>
++    Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_AUTHENTICATION_H
++#define SOLID_AUTHENTICATION_H
++
++#include <solid/control/ifaces/authentication.h>
++
++namespace Solid
++{
++namespace Control
++{
++    /**
++     * Base class for wireless authentication schemes.  No need to instantiate this
++     */
++    class SOLIDCONTROL_EXPORT Authentication
++    {
++    public:
++        typedef QMap<QString, QString> SecretMap;
++
++        Authentication();
++        virtual ~Authentication();
++
++        /**
++         * All the authentication's secrets are stored in this map.
++         * These can be plaintext passwords, hashed passwords, certificate passphrases
++         */
++        void setSecrets(const SecretMap &);
++        /**
++         * retrieve the map containing secrets.
++         */
++        SecretMap secrets() const;
++
++    private:
++        class Private;
++        Private * const d;
++    };
++
++    /**
++     * This Authentication is a null authentication.  Used for open networks
++     */
++    class SOLIDCONTROL_EXPORT AuthenticationNone : public Authentication
++    {
++    public:
++        AuthenticationNone();
++        virtual ~AuthenticationNone();
++
++    private:
++        class Private;
++        Private * const d;
++    };
++
++    /**
++     * WEP (Wired Equivalent Privacy) Authentication.
++     * Better than prayer for protecting your data, but not much.
++     */
++    class SOLIDCONTROL_EXPORT AuthenticationWep : public Authentication
++    {
++    public:
++        /**
++         * Wep password type.  WepAscii and WepPassphrase are both hashed to WepHex using
++         * standard algorithms, but are easier to remember.
++         */
++        enum WepType { WepAscii, WepHex, WepPassphrase };
++        /**
++         * Authentication schemes
++         * Open System has no authentication, if you have the encryption key, you are able to use the network
++         * Shared Key means that the station must know a secret key to authenticate to the network.
++         * Not sure if the same key is used for both Auth and Encryption though.
++         */
++        enum WepMethod { WepOpenSystem, WepSharedKey };
++
++        AuthenticationWep();
++        virtual ~AuthenticationWep();
++
++        /**
++         * Set the auth scheme in use
++         */
++        void setMethod(WepMethod);
++        /**
++         * Get the auth scheme in use
++         */
++        WepMethod method() const;
++        /**
++         * Set the password scheme in use
++         */
++        void setType(WepType);
++        /**
++         * Get the password scheme in use
++         */
++        WepType type() const;
++        /**
++         * Set the key length in bits
++         * Valid values are 40 or 64 (equivalent)
++         *                  104 or 128
++         *                  192
++         *                  256
++         *                  other values (rare)
++         */
++        void setKeyLength(int);
++        /**
++         * Get the key length, in bits
++         */
++        int keyLength() const;
++
++    private:
++        class Private;
++        Private * const d;
++    };
++
++    /**
++     * AuthenticationWpa contains functionality shared by both Personal and Enterprise
++     * authentication flavors
++     */
++    class SOLIDCONTROL_EXPORT AuthenticationWpa : public Authentication
++    {
++    public:
++        /**
++         * Possible Authentication schemes
++         */
++        enum WpaProtocol { WpaAuto, WpaTkip, WpaCcmpAes, // WPA Personal only
++                           WpaEap /* WPA Enterprise only */ };
++        /**
++         * WPA Versions
++         */
++        enum WpaVersion { Wpa1, Wpa2 };
++
++        /**
++         * WPA key management schemes
++         */
++        enum WpaKeyManagement { WpaPsk, Wpa8021x };
++
++        AuthenticationWpa();
++        virtual ~AuthenticationWpa();
++
++        /**
++         * Set the protocol in use
++         */
++        void setProtocol(WpaProtocol);
++        /**
++         * Set the protocol in use
++         */
++        WpaProtocol protocol() const;
++
++        /**
++         * Set the WPA version
++         */
++        void setVersion(WpaVersion);
++        /**
++         * Get the WPA version
++         */
++        WpaVersion version() const;
++
++        /**
++         * Set the key management scheme
++         */
++        void setKeyManagement(WpaKeyManagement);
++
++        /**
++         * Get the key management scheme
++         */
++        WpaKeyManagement keyManagement() const;
++
++    private:
++        class Private;
++        Private * const d;
++    };
++
++    /**
++     * WPA Personal authentication.
++     */
++    class SOLIDCONTROL_EXPORT AuthenticationWpaPersonal : public AuthenticationWpa
++    {
++    public:
++        AuthenticationWpaPersonal();
++        virtual ~AuthenticationWpaPersonal();
++
++    private:
++        class Private;
++        Private * const d;
++    };
++
++    /**
++     * WPA Enterprise
++     */
++    class SOLIDCONTROL_EXPORT AuthenticationWpaEnterprise : public AuthenticationWpa
++    {
++    public:
++        /**
++         * Subtypes of Enterprise Authentication Protocol
++         */
++        enum EapMethod { EapPeap, EapTls, EapTtls, EapMd5, EapMsChap, EapOtp, EapGtc };
++        AuthenticationWpaEnterprise();
++        virtual ~AuthenticationWpaEnterprise();
++
++        /**
++         * TODO: check with thoenig what this means - probably identity off one of the certs
++         */
++        void setIdentity(const QString  &);
++        /**
++         * TODO: check with thoenig what this means - probably identity off one of the certs
++         */
++        QString identity() const;
++
++        /**
++         * TODO: check with thoenig what this means - probably identity off one of the certs
++         */
++        void setAnonIdentity(const QString  &);
++        /**
++         * TODO: check with thoenig what this means - probably identity off one of the certs
++         */
++        QString anonIdentity() const;
++
++        /**
++         * Set path to the client certificate
++         */
++        void setCertClient(const QString  &);
++        /**
++         * Get path to the client certificate
++         */
++        QString certClient() const;
++        /**
++         * Set path to the certification authority certificate
++         */
++        void setCertCA(const QString  &);
++        /**
++         * Get path to the certification authority certificate
++         */
++        QString certCA() const;
++
++        /**
++         * Set path to the private certificate
++         */
++        void setCertPrivate(const QString  &);
++        /**
++         * Get path to the private certificate
++         */
++        QString certPrivate() const;
++        /**
++         * Set the EAP method
++         */
++        void setMethod(EapMethod);
++        /**
++         * Get the EAP method
++         */
++        EapMethod method() const;
++        /**
++         * Set the ID password key (helper method)
++         */
++        void setIdPasswordKey(const QString  &);
++        /**
++         * Set the ID password key (helper method)
++         */
++        QString idPasswordKey() const;
++
++        /**
++         * Set the private certificate password key (helper method)
++         */
++        void setCertPrivatePasswordKey(const QString  &);
++        /**
++         * Get the private certificate password key (helper method)
++         */
++        QString certPrivatePasswordKey() const;
++
++    private:
++        class Private;
++        Private * const d;
++    };
++
++    /**
++     * Utility class
++     * Contains a backend specific validator instance to validate authentication
++     * Can be used for example to authenticate user input as they type
++     */
++    class SOLIDCONTROL_EXPORT AuthenticationValidator
++    {
++        public:
++            AuthenticationValidator();
++            virtual ~AuthenticationValidator();
++            /**
++             * Call this to check if an authentication is valid
++             * (All secrets present, passphrase length correct
++             */
++            bool validate(const Authentication *);
++        private:
++            class Private;
++            Private * const d;
++    };
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/bluetoothinterface.cpp
+@@ -0,0 +1,336 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QMap>
++#include <QPair>
++#include <QStringList>
++
++#include <kdebug.h>
++
++#include <solid/control/ifaces/bluetoothinterface.h>
++
++#include "frontendobject_p.h"
++
++#include "soliddefs_p.h"
++#include "bluetoothmanager.h"
++#include "bluetoothinterface.h"
++#include "bluetoothremotedevice.h"
++
++namespace Solid
++{
++namespace Control
++{
++class BluetoothInterfacePrivate : public FrontendObjectPrivate
++{
++public:
++    BluetoothInterfacePrivate(QObject *parent)
++        : FrontendObjectPrivate(parent) { }
++
++    void setBackendObject(QObject *object);
++
++    QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *> findRegisteredBluetoothRemoteDevice(const QString &ubi) const;
++
++    mutable QMap<QString, QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *> > remoteDeviceMap;
++    mutable BluetoothRemoteDevice invalidDevice;
++};
++}
++}
++
++Solid::Control::BluetoothInterface::BluetoothInterface()
++        : QObject(), d(new BluetoothInterfacePrivate(this))
++{}
++
++Solid::Control::BluetoothInterface::BluetoothInterface(const QString &ubi)
++        : QObject(), d(new BluetoothInterfacePrivate(this))
++{
++    const BluetoothInterface &device = BluetoothManager::self().findBluetoothInterface(ubi);
++    d->setBackendObject(device.d->backendObject());
++}
++
++Solid::Control::BluetoothInterface::BluetoothInterface(QObject *backendObject)
++        : QObject(), d(new BluetoothInterfacePrivate(this))
++{
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::BluetoothInterface::BluetoothInterface(const BluetoothInterface &device)
++        : QObject(), d(new BluetoothInterfacePrivate(this))
++{
++    d->setBackendObject(device.d->backendObject());
++}
++
++Solid::Control::BluetoothInterface::~BluetoothInterface()
++{
++    // Delete all the interfaces, they are now outdated
++    typedef QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *> BluetoothRemoteDeviceIfacePair;
++
++    // Delete all the devices, they are now outdated
++    foreach (const BluetoothRemoteDeviceIfacePair &pair, d->remoteDeviceMap.values()) {
++        delete pair.first;
++        delete pair.second;
++    }
++}
++
++Solid::Control::BluetoothInterface &Solid::Control::BluetoothInterface::operator=(const Solid::Control::BluetoothInterface  & dev)
++{
++    d->setBackendObject(dev.d->backendObject());
++
++    return *this;
++}
++
++QString Solid::Control::BluetoothInterface::ubi() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), ubi());
++}
++
++Solid::Control::BluetoothRemoteDevice Solid::Control::BluetoothInterface::findBluetoothRemoteDevice(const QString &ubi) const
++{
++    QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *> pair = d->findRegisteredBluetoothRemoteDevice(ubi);
++
++    if (pair.first != 0) {
++        return *pair.first;
++    } else {
++        return d->invalidDevice;
++    }
++}
++
++Solid::Control::BluetoothRemoteDevice * Solid::Control::BluetoothInterface::createBluetoothRemoteDevice(const QString & ubi)
++{
++    QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *> pair = d->findRegisteredBluetoothRemoteDevice(ubi);
++    return pair.first;
++
++}
++QString Solid::Control::BluetoothInterface::address() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), address());
++}
++
++QString Solid::Control::BluetoothInterface::version() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), version());
++}
++
++QString Solid::Control::BluetoothInterface::revision() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), revision());
++}
++
++QString Solid::Control::BluetoothInterface::manufacturer() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), manufacturer());
++}
++
++QString Solid::Control::BluetoothInterface::company() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), company());
++}
++
++Solid::Control::BluetoothInterface::Mode Solid::Control::BluetoothInterface::mode() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), Solid::Control::BluetoothInterface::Off, mode());
++}
++
++int Solid::Control::BluetoothInterface::discoverableTimeout() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), 0, discoverableTimeout());
++}
++
++bool Solid::Control::BluetoothInterface::isDiscoverable() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), false, isDiscoverable());
++}
++
++Solid::Control::BluetoothRemoteDeviceList Solid::Control::BluetoothInterface::listConnections() const
++{
++    BluetoothRemoteDeviceList list;
++    Ifaces::BluetoothInterface *backend = qobject_cast<Ifaces::BluetoothInterface *>(d->backendObject());
++
++    if (backend == 0) return list;
++
++    QStringList ubis = backend->listConnections();
++
++    foreach (const QString &ubi, ubis) {
++        BluetoothRemoteDevice remoteDevice = findBluetoothRemoteDevice(ubi);
++        list.append(remoteDevice);
++    }
++
++    return list;
++}
++
++QString Solid::Control::BluetoothInterface::majorClass() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), majorClass());
++}
++
++QStringList Solid::Control::BluetoothInterface::listAvailableMinorClasses() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QStringList(), listAvailableMinorClasses());
++}
++
++QString Solid::Control::BluetoothInterface::minorClass() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), minorClass());
++}
++
++QStringList Solid::Control::BluetoothInterface::serviceClasses() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QStringList(), serviceClasses());
++}
++
++QString Solid::Control::BluetoothInterface::name() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QString(), name());
++}
++
++QStringList Solid::Control::BluetoothInterface::listBondings() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QStringList(), listBondings());
++}
++
++bool Solid::Control::BluetoothInterface::isPeriodicDiscoveryActive() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), false, isPeriodicDiscoveryActive());
++}
++
++bool Solid::Control::BluetoothInterface::isPeriodicDiscoveryNameResolvingActive() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), false,
++                      isPeriodicDiscoveryNameResolvingActive());
++}
++
++// TODO: QStringList or BluetoothRemoteDeviceList?
++QStringList Solid::Control::BluetoothInterface::listRemoteDevices() const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QStringList(),
++                      listRemoteDevices());
++}
++
++// TODO: QStringList or BluetoothRemoteDeviceList?
++QStringList Solid::Control::BluetoothInterface::listRecentRemoteDevices(const QDateTime &date) const
++{
++    return_SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), QStringList(),
++                      listRecentRemoteDevices(date));
++}
++
++/***************************************************************/
++
++void Solid::Control::BluetoothInterface::setMode(const Solid::Control::BluetoothInterface::Mode mode)
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), setMode(mode));
++}
++
++void Solid::Control::BluetoothInterface::setDiscoverableTimeout(int timeout)
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), setDiscoverableTimeout(timeout));
++}
++
++void Solid::Control::BluetoothInterface::setMinorClass(const QString &minor)
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), setMinorClass(minor));
++}
++
++void Solid::Control::BluetoothInterface::setName(const QString &name)
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), setName(name));
++}
++
++void Solid::Control::BluetoothInterface::discoverDevices()
++{
++    kDebug() ;
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), discoverDevices());
++}
++
++void Solid::Control::BluetoothInterface::discoverDevicesWithoutNameResolving()
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), discoverDevicesWithoutNameResolving());
++}
++
++void Solid::Control::BluetoothInterface::cancelDiscovery()
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), cancelDiscovery());
++}
++
++void Solid::Control::BluetoothInterface::startPeriodicDiscovery()
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), startPeriodicDiscovery());
++}
++
++void Solid::Control::BluetoothInterface::stopPeriodicDiscovery()
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), stopPeriodicDiscovery());
++}
++
++void Solid::Control::BluetoothInterface::setPeriodicDiscoveryNameResolving(bool resolveNames)
++{
++    SOLID_CALL(Ifaces::BluetoothInterface *, d->backendObject(), setPeriodicDiscoveryNameResolving(resolveNames));
++}
++
++void Solid::Control::BluetoothInterfacePrivate::setBackendObject(QObject *object)
++{
++    FrontendObjectPrivate::setBackendObject(object);
++
++    if (object) {
++        QObject::connect(object, SIGNAL(modeChanged(Solid::Control::BluetoothInterface::Mode)),
++                         parent(), SIGNAL(modeChanged(Solid::Control::BluetoothInterface::Mode)));
++        QObject::connect(object, SIGNAL(discoverableTimeoutChanged(int)),
++                         parent(), SIGNAL(discoverableTimeoutChanged(int)));
++        QObject::connect(object, SIGNAL(minorClassChanged(const QString &)),
++                         parent(), SIGNAL(minorClassChanged(const QString &)));
++        QObject::connect(object, SIGNAL(nameChanged(const QString &)),
++                         parent(), SIGNAL(nameChanged(const QString &)));
++        QObject::connect(object, SIGNAL(discoveryStarted()),
++                         parent(), SIGNAL(discoveryStarted()));
++        QObject::connect(object, SIGNAL(discoveryCompleted()),
++                         parent(), SIGNAL(discoveryCompleted()));
++        QObject::connect(object, SIGNAL(remoteDeviceFound(const QString &, int, int)),
++                         parent(), SIGNAL(remoteDeviceFound(const QString &, int, int)));
++        QObject::connect(object, SIGNAL(remoteDeviceDisappeared(const QString &)),
++                         parent(), SIGNAL(remoteDeviceDisappeared(const QString &)));
++    }
++}
++
++QPair<Solid::Control::BluetoothRemoteDevice *, Solid::Control::Ifaces::BluetoothRemoteDevice *> Solid::Control::BluetoothInterfacePrivate::findRegisteredBluetoothRemoteDevice(const QString &ubi) const
++{
++    if (remoteDeviceMap.contains(ubi)) {
++        return remoteDeviceMap[ubi];
++    } else {
++        Ifaces::BluetoothInterface *backend = qobject_cast<Ifaces::BluetoothInterface *>(backendObject());
++        Ifaces::BluetoothRemoteDevice *iface = 0;
++
++        if (backend != 0) {
++            iface = qobject_cast<Ifaces::BluetoothRemoteDevice *>(backend->createBluetoothRemoteDevice(ubi));
++        }
++
++        if (iface != 0) {
++            BluetoothRemoteDevice *device = new BluetoothRemoteDevice(iface);
++
++            QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *> pair(device, iface);
++            remoteDeviceMap[ubi] = pair;
++
++            return pair;
++        } else {
++            return QPair<BluetoothRemoteDevice *, Ifaces::BluetoothRemoteDevice *>(0, 0);
++        }
++
++    }
++}
++
++#include "bluetoothinterface.moc"
+--- /dev/null
++++ b/libs/solid/control/networking.cpp
+@@ -0,0 +1,323 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QtNetwork/QAbstractSocket>
++#include <QtCore/QTimer>
++
++#include <kglobal.h>
++
++#include "networking_p.h"
++#include "networking.h"
++#include "org_kde_solid_networking.h"
++
++K_GLOBAL_STATIC(Solid::Control::NetworkingPrivate, globalNetworkControl)
++
++Solid::Control::NetworkingPrivate::NetworkingPrivate() : iface( 
++        new OrgKdeSolidNetworkingInterface( "org.kde.Solid.Networking",
++            "/status",
++            QDBusConnection::sessionBus(),
++            this ) )
++{
++}
++
++Solid::Control::NetworkingPrivate::~NetworkingPrivate()
++{
++}uint Solid::Control::NetworkingPrivate::requestConnection( QObject * receiver, const char * member )
++{
++    connect( this, SIGNAL( connectionResult( bool ) ), receiver, member );
++    return iface->requestConnection();
++}
++
++void Solid::Control::NetworkingPrivate::releaseConnection()
++{
++    iface->releaseConnection();
++}
++
++Solid::Control::Networking::Result Solid::Control::NetworkingPrivate::beginManagingSocket( QAbstractSocket * socket, int autoDisconnectTimeout )
++{
++    mManagedSockets.insert( socket, new ManagedSocketContainer( socket, autoDisconnectTimeout ) );
++    return Solid::Control::Networking::Accepted;
++}
++
++void Solid::Control::NetworkingPrivate::stopManagingSocket( QAbstractSocket * socket )
++{
++    ManagedSocketContainer * removed = mManagedSockets.take( socket );
++    delete removed;
++}
++
++Solid::Control::Networking::Result Solid::Control::Networking::requestConnection( QObject * receiver, const char * member )
++{
++    return static_cast<Solid::Control::Networking::Result>( globalNetworkControl->requestConnection( receiver, member ) );
++}
++
++void Solid::Control::Networking::releaseConnection()
++{
++    globalNetworkControl->releaseConnection();
++}
++
++/*=========================================================================*/
++
++
++Solid::Control::ManagedSocketContainer::ManagedSocketContainer( QAbstractSocket * socket, int autoDisconnectTimeout ) : mSocket( socket ), mAutoDisconnectTimer( 0 )
++{
++    if ( autoDisconnectTimeout >= 0 )
++    {
++        mAutoDisconnectTimer = new QTimer( this );
++        mAutoDisconnectTimer->setSingleShot( true );
++        mAutoDisconnectTimer->setInterval( autoDisconnectTimeout );
++        connect( mAutoDisconnectTimer, SIGNAL( timeout() ), SLOT( autoDisconnect() ) );
++    }
++    // react to network management events
++    connect( Solid::Networking::notifier(), SIGNAL( statusChanged( uint ) ), this, SLOT( networkStatusChanged( Networking::Status ) ) );
++
++    if ( socket )
++    {
++        // react to socket events
++        connect( socket, SIGNAL( destroyed() ), SLOT( socketDestroyed() ) );
++        connect( socket, SIGNAL( error( QAbstractSocket::SocketError ) ), SLOT( socketError( QAbstractSocket::SocketError ) ) );
++        connect( socket, SIGNAL( stateChanged( QAbstractSocket::SocketState ) ), SLOT( socketStateChanged( QAbstractSocket::SocketState ) ) );
++        // initialise our state from that of the socket
++        switch ( socket->state() )
++        {
++            case QAbstractSocket::UnconnectedState:
++                mState = SocketUnconnected;
++                break;
++            case QAbstractSocket::HostLookupState:
++            case QAbstractSocket::ConnectingState:
++                mState = SocketConnecting;
++                break;
++            case QAbstractSocket::ConnectedState:
++            case QAbstractSocket::ClosingState:
++                mState = SocketConnected;
++                break;
++            default:
++                mState = SocketUnconnected;
++        }
++    }
++}
++
++void Solid::Control::ManagedSocketContainer::networkStatusChanged( Solid::Networking::Status netStatus )
++{
++    switch ( mState )
++    {
++        case SocketUnconnected:
++            break;
++        case SocketConnecting:
++            break;
++        case AwaitingNetworkConnection:
++            switch ( netStatus )
++            {
++                case Solid::Networking::Connected:
++                    performConnectToHost();
++                    break;
++                default:
++                    //do nothing
++                    ;
++            }
++            break;
++        case SocketConnected:
++            switch ( netStatus )
++            {
++                case Solid::Networking::Unconnected:
++                case Solid::Networking::Disconnecting:
++                    mState = DisconnectWait;
++                    if ( mAutoDisconnectTimer )
++                    {
++                        mAutoDisconnectTimer->start();
++                    }
++                    break;
++                default:
++                    // do nothing
++                    ;
++            }
++            break;
++        case DisconnectWait:
++            switch ( netStatus )
++            {
++                case Solid::Networking::Connected:
++                    // RECOVERED
++                    mState = SocketConnected;
++                    if ( mAutoDisconnectTimer )
++                    {
++                        mAutoDisconnectTimer->stop();
++                    }
++                    break;
++                default:
++                    // do nothing
++                    ;
++            }
++            break;
++    }
++}
++
++void Solid::Control::ManagedSocketContainer::socketError( QAbstractSocket::SocketError socketError )
++{
++    switch ( mState )
++    {
++        case SocketUnconnected:
++            break;
++        case SocketConnecting:
++            switch ( socketError )
++            {
++                case QAbstractSocket::HostNotFoundError:
++                case QAbstractSocket::NetworkError:
++                    // socket tried to resolve and failed
++                    // Either the host doesn't exist at all
++                    // or the resolve failed because we're offline, so request that we go online
++                    if ( Solid::Networking::status() != Solid::Networking::Connected )
++                    {
++                        mState = AwaitingNetworkConnection;
++                        globalNetworkControl->requestConnection();
++                    }
++                    else
++                    {
++                        mState = SocketUnconnected;
++                    }
++                    break;
++                default:
++                    mState = SocketUnconnected;
++            }
++            break;
++        case AwaitingNetworkConnection:
++        case SocketConnected:
++            // setup automatic reconnect now when/if we impl this
++        case DisconnectWait:
++            // maybe check the socket state that it thinks it is now unconnected too
++            mState = SocketUnconnected;
++            break;
++    }
++}
++
++void Solid::Control::ManagedSocketContainer::socketStateChanged( QAbstractSocket::SocketState socketState )
++{
++    switch ( mState )
++    {
++        case SocketUnconnected:
++            switch ( socketState )
++            {
++                case QAbstractSocket::HostLookupState:
++                case QAbstractSocket::ConnectingState:
++                    // the socket is trying to connect, cache its connection parameter in case it
++                    // fails and we want to reconnect it when the network is available.
++                    mState = SocketConnecting;
++                    if ( mSocket )
++                    {
++                        mPeerName = mSocket->peerName();
++                        mPeerPort = mSocket->peerPort();
++                        mSocketOpenMode = mSocket->openMode();
++                    }
++                    break;
++                default:
++                    ;
++            }
++            break;
++        case SocketConnecting:
++            switch ( socketState )
++            {
++                case QAbstractSocket::HostLookupState:
++                case QAbstractSocket::ConnectingState:
++                    // still connecting, do nothing
++                    break;
++                case QAbstractSocket::BoundState:
++                case QAbstractSocket::ConnectedState:
++                case QAbstractSocket::ListeningState:
++                    // socket connected unaided
++                    mState = SocketConnected;
++                    break;
++                case QAbstractSocket::UnconnectedState:
++                    // this state is preceded by ClosingState, so no action needed
++                    break;
++                case QAbstractSocket::ClosingState:
++                    // it's unlikely that an unconnected socket can go to this state, but...
++                    mState = SocketUnconnected;
++                    break;
++            }
++            break;
++        case AwaitingNetworkConnection:
++            switch ( socketState )
++            {
++                case QAbstractSocket::ConnectedState:
++                    // somehow the socket connected itself when it shouldn't have been able to.
++                    mState = SocketConnected;
++
++                    break;
++                default:
++                    //do nothing
++                    ;
++            }
++            break;
++        case SocketConnected:
++            switch ( socketState )
++            {
++                case QAbstractSocket::UnconnectedState:
++                case QAbstractSocket::ClosingState:
++                    // socket disconnected
++                    mState = SocketUnconnected;
++                    break;
++                case QAbstractSocket::ConnectingState:
++                    mState = SocketConnected;
++                    break;
++                default:
++                    ;
++            }
++            break;
++        case DisconnectWait:
++            switch ( socketState )
++            {
++                case QAbstractSocket::UnconnectedState:
++                case QAbstractSocket::ClosingState:
++                    // socket disconnected anyway
++                    mState = SocketUnconnected;
++                    if ( mAutoDisconnectTimer )
++                    {
++                        mAutoDisconnectTimer->stop();
++                    }
++                    break;
++                default:
++                    break;
++            }
++            break;
++    }
++}
++
++void Solid::Control::ManagedSocketContainer::autoDisconnect()
++{
++    if ( mAutoDisconnectTimer && mSocket )
++        mSocket->disconnectFromHost();
++}
++
++void Solid::Control::ManagedSocketContainer::socketDestroyed()
++{
++    mSocket = 0;
++    delete mAutoDisconnectTimer;
++    mAutoDisconnectTimer = 0;
++    disconnect( globalNetworkControl );
++}
++
++void Solid::Control::ManagedSocketContainer::performConnectToHost()
++{
++    if ( mSocket )
++    {
++        mSocket->connectToHost( mPeerName, mPeerPort, mSocketOpenMode );
++    }
++}
++
++#include "networking_p.moc"
++#include "networking.moc"
+--- /dev/null
++++ b/libs/solid/control/powermanager.cpp
+@@ -0,0 +1,141 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "powermanager.h"
++#include "powermanager_p.h"
++
++#include "soliddefs_p.h"
++#include "managerbase_p.h"
++#include "ifaces/powermanager.h"
++
++#include <kglobal.h>
++
++K_GLOBAL_STATIC(Solid::Control::PowerManagerPrivate, globalPowerManager)
++
++Solid::Control::PowerManagerPrivate::PowerManagerPrivate()
++{
++    loadBackend("Power Management", "SolidPowerManager", "Solid::Control::Ifaces::PowerManager");
++
++    if (managerBackend()!=0) {
++        connect(managerBackend(), SIGNAL(schemeChanged(QString)),
++                this, SIGNAL(schemeChanged(QString)));
++        connect(managerBackend(), SIGNAL(acAdapterStateChanged(int)),
++                this, SIGNAL(acAdapterStateChanged(int)));
++        connect(managerBackend(), SIGNAL(batteryStateChanged(int)),
++                this, SIGNAL(batteryStateChanged(int)));
++        connect(managerBackend(), SIGNAL(buttonPressed(int)),
++                this, SIGNAL(buttonPressed(int)));
++    }
++}
++
++Solid::Control::PowerManagerPrivate::~PowerManagerPrivate()
++{
++}
++
++QStringList Solid::Control::PowerManager::supportedSchemes()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      QStringList(), supportedSchemes());
++}
++
++QString Solid::Control::PowerManager::schemeDescription(const QString &schemeName)
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      QString(), schemeDescription(schemeName));
++}
++
++QString Solid::Control::PowerManager::scheme()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(), QString(), scheme());
++}
++
++bool Solid::Control::PowerManager::setScheme(const QString &name)
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      false, setScheme(name));
++}
++
++Solid::Control::PowerManager::BatteryState Solid::Control::PowerManager::batteryState()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      NoBatteryState, batteryState());
++}
++
++int Solid::Control::PowerManager::batteryChargePercent()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      -1, batteryChargePercent());
++}
++
++Solid::Control::PowerManager::AcAdapterState Solid::Control::PowerManager::acAdapterState()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      Plugged, acAdapterState());
++}
++
++Solid::Control::PowerManager::SuspendMethods Solid::Control::PowerManager::supportedSuspendMethods()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      UnknownSuspendMethod, supportedSuspendMethods());
++}
++
++KJob *Solid::Control::PowerManager::suspend(SuspendMethod method)
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      0, suspend(method));
++}
++
++Solid::Control::PowerManager::CpuFreqPolicies Solid::Control::PowerManager::supportedCpuFreqPolicies()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      UnknownCpuFreqPolicy, supportedCpuFreqPolicies());
++}
++
++Solid::Control::PowerManager::CpuFreqPolicy Solid::Control::PowerManager::cpuFreqPolicy()
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      UnknownCpuFreqPolicy, cpuFreqPolicy());
++}
++
++bool Solid::Control::PowerManager::setCpuFreqPolicy(CpuFreqPolicy newPolicy)
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      false, setCpuFreqPolicy(newPolicy));
++}
++
++bool Solid::Control::PowerManager::canDisableCpu(int cpuNum)
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      false, canDisableCpu(cpuNum));
++}
++
++bool Solid::Control::PowerManager::setCpuEnabled(int cpuNum, bool enabled)
++{
++    return_SOLID_CALL(Ifaces::PowerManager *, globalPowerManager->managerBackend(),
++                      false, setCpuEnabled(cpuNum, enabled));
++}
++
++Solid::Control::PowerManager::Notifier *Solid::Control::PowerManager::notifier()
++{
++    return globalPowerManager;
++}
++
++#include "powermanager_p.moc"
++#include "powermanager.moc"
++
+--- /dev/null
++++ b/libs/solid/control/network.cpp
+@@ -0,0 +1,114 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "network.h"
++#include "network_p.h"
++
++#include "soliddefs_p.h"
++#include <solid/control/ifaces/network.h>
++
++Solid::Control::Network::Network(QObject *backendObject)
++    : QObject(), d_ptr(new NetworkPrivate(this))
++{
++    Q_D(Network);
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::Network::Network(const Network &network)
++    : QObject(), d_ptr(new NetworkPrivate(this))
++{
++    Q_D(Network);
++    d->setBackendObject(network.d_ptr->backendObject());
++}
++
++Solid::Control::Network::Network(NetworkPrivate &dd, QObject *backendObject)
++    : QObject(), d_ptr(&dd)
++{
++    Q_D(Network);
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::Network::Network(NetworkPrivate &dd, const Network &network)
++    : d_ptr(&dd)
++{
++    Q_D(Network);
++    d->setBackendObject(network.d_ptr->backendObject());
++}
++
++Solid::Control::Network::~Network()
++{
++
++}
++
++bool Solid::Control::Network::isValid() const
++{
++    Q_D(const Network);
++    return d->backendObject()!=0;
++}
++
++QList<QNetworkAddressEntry> Solid::Control::Network::addressEntries() const
++{
++    Q_D(const Network);
++    return_SOLID_CALL(Ifaces::Network *, d->backendObject(), QList<QNetworkAddressEntry>(), addressEntries());
++}
++
++QString Solid::Control::Network::route() const
++{
++    Q_D(const Network);
++    return_SOLID_CALL(Ifaces::Network *, d->backendObject(), QString(), route());
++}
++
++QList<QHostAddress> Solid::Control::Network::dnsServers() const
++{
++    Q_D(const Network);
++    return_SOLID_CALL(Ifaces::Network *, d->backendObject(), QList<QHostAddress>(), dnsServers());
++}
++
++void Solid::Control::Network::setActivated(bool active)
++{
++    Q_D(const Network);
++    SOLID_CALL(Ifaces::Network *, d->backendObject(), setActivated(active));
++}
++
++bool Solid::Control::Network::isActive() const
++{
++    Q_D(const Network);
++    return_SOLID_CALL(Ifaces::Network *, d->backendObject(), false, isActive());
++}
++
++QString Solid::Control::Network::uni() const
++{
++    Q_D(const Network);
++    return_SOLID_CALL(Ifaces::Network *, d->backendObject(), QString(), uni());
++}
++
++void Solid::Control::NetworkPrivate::setBackendObject(QObject *object)
++{
++    FrontendObjectPrivate::setBackendObject(object);
++
++    if (object) {
++        QObject::connect(object, SIGNAL(ipDetailsChanged()),
++                         parent(), SIGNAL(ipDetailsChanged()));
++        QObject::connect(object, SIGNAL(activationStateChanged(bool)),
++                         parent(), SIGNAL(activationStateChanged(bool)));
++    }
++}
++
++#include "network.moc"
+--- /dev/null
++++ b/libs/solid/control/managerbase_p.h
+@@ -0,0 +1,51 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_MANAGERBASE_P_H
++#define SOLID_MANAGERBASE_P_H
++
++#include <QObject>
++#include <QString>
++
++#include "solid/control/solid_control_export.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class ManagerBasePrivate
++    {
++    public:
++        ManagerBasePrivate();
++        virtual ~ManagerBasePrivate();
++        void loadBackend(const QString &description, const char *serviceName, const char *backendClassName);
++
++        SOLIDCONTROL_EXPORT static void _k_forcePreloadedBackend(const char *backendClassName, QObject *backend);
++
++        QObject *managerBackend() const;
++        QString errorText() const;
++
++    private:
++        QObject *m_backend;
++        QString m_errorText;
++    };
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothinputdevice.h
+@@ -0,0 +1,93 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_BLUETOOTH_INPUTDEVICE_H
++#define FAKE_BLUETOOTH_INPUTDEVICE_H
++
++#include <QString>
++#include <QVariant>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/bluetoothinputdevice.h>
++
++using namespace Solid::Control::Ifaces;
++
++class KDE_EXPORT FakeBluetoothInputDevice : public Solid::Control::Ifaces::BluetoothInputDevice
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Control::Ifaces::BluetoothInputDevice)
++public:
++    FakeBluetoothInputDevice(const QMap<QString, QVariant>  & propertyMap,
++                             QObject *parent = 0);
++    virtual ~FakeBluetoothInputDevice();
++    QString ubi() const
++    {
++        return mUbi;
++    }
++    bool isConnected() const
++    {
++        return mConnected;
++    }
++    QString address() const
++    {
++        return mAddress;
++    }
++    QString name() const
++    {
++        return mName;
++    }
++    QString productID() const
++    {
++        return mProductID;
++    }
++    QString vendorID() const
++    {
++        return mVendorID;
++    }
++
++private:
++    QString mUbi;
++    bool mConnected;
++    QString mAddress;
++    QString mName;
++    QString mVendorID;
++    QString mProductID;
++
++public Q_SLOTS:
++    void slotConnected()
++    {
++        mConnected = true;
++    }
++    void slotDisconnected()
++    {
++        mConnected = false;
++    }
++
++Q_SIGNALS:
++    void connected();
++    void disconnected();
++
++protected:
++    QMap<QString, QVariant> mPropertyMap;
++
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/tests/fakebluetoothtest.h
+@@ -0,0 +1,34 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2006 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKEBACKENDTEST_H
++#define FAKEBACKENDTEST_H
++
++#include <QObject>
++
++class FakeBluetooth_Test : public QObject
++{
++    Q_OBJECT
++private slots:
++    void testFakeBluetooth();
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/tests/CMakeLists.txt
+@@ -0,0 +1,19 @@
++set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
++
++include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/.. )
++
++########### next target ###############
++
++set(fakebluetoothtest_SRCS fakebluetoothtest.cpp )
++
++
++kde4_add_unit_test(fakebluetoothtest ${fakebluetoothtest_SRCS})
++
++target_link_libraries(fakebluetoothtest solid_fakebluetooth_static solidcontrolifaces ${KDE4_KDECORE_LIBS} ${QT_QTTEST_LIBRARY} )
++add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../fakebluetooth.xml\\"")
++
++
++########### install files ###############
++
++
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/tests/fakebluetoothtest.cpp
+@@ -0,0 +1,72 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++// KDE-QTestLib include
++#include <qtest_kde.h>
++
++#include "fakebluetoothmanager.h"
++
++#include "fakebluetoothtest.h"
++
++QTEST_KDEMAIN_CORE(FakeBluetooth_Test)
++
++void FakeBluetooth_Test::testFakeBluetooth()
++{
++    FakeBluetoothManager *fbm = new FakeBluetoothManager(0, QStringList(), TEST_DATA);
++    QVERIFY(!fbm->bluetoothInterfaces().isEmpty());
++
++    // Bluetooth Interface
++    FakeBluetoothInterface *interface = static_cast<FakeBluetoothInterface *>(fbm->createBluetoothInterface("/org/kde/solid/fakebluetooth/hci0"));
++
++    QCOMPARE(interface->ubi(), QString("/org/kde/solid/fakebluetooth/hci0"));
++    QCOMPARE(interface->address(), QString("00:E0:98:DD:4E:FF"));
++    QCOMPARE(interface->version(), QString("Bluetooth 1.1"));
++    QCOMPARE(interface->revision(), QString("Build 525"));
++    QCOMPARE(interface->name(), QString("Daniel's Laptop"));
++
++    interface->setName("CrashDummy");
++    QCOMPARE(interface->name(), QString("CrashDummy"));
++
++    // Bluetooth Remote Devices
++    QCOMPARE(interface->bluetoothRemoteDevices().count(), 4);
++    kDebug() << "REMOTE DEVICES: " << interface->bluetoothRemoteDevices();
++    FakeBluetoothRemoteDevice *device =
++        static_cast<FakeBluetoothRemoteDevice *>(interface->createBluetoothRemoteDevice("/org/kde/solid/fakebluetooth/hci0/EE:EE:EE:EE:EE:EE"));
++
++    QCOMPARE(device->name(), QString("N800"));
++    QCOMPARE(device->alias(), QString("My N800"));
++
++    // Bluetooth Interface
++    interface = static_cast<FakeBluetoothInterface *>(fbm->createBluetoothInterface("/org/kde/solid/fakebluetooth/XXX"));
++
++    QCOMPARE(interface->ubi(), QString("/org/kde/solid/fakebluetooth/XXX"));
++    QCOMPARE(interface->address(), QString("AA:FF:EE:AA:FF:EE"));
++    QCOMPARE(interface->version(), QString("Bluetooth 2.0"));
++    QCOMPARE(interface->company(), QString(""));
++    QCOMPARE(interface->name(), QString("BlueZ (0) sugga"));
++
++    interface->setName("CrashDummy2");
++    QCOMPARE(interface->name(), QString("CrashDummy2"));
++
++    delete fbm;
++}
++
++#include "fakebluetoothtest.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothinterface.h
+@@ -0,0 +1,205 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_BLUETOOTH_INTERFACE_H
++#define FAKE_BLUETOOTH_INTERFACE_H
++
++#include <QString>
++#include <QVariant>
++
++#include <kdebug.h>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/bluetoothinterface.h>
++
++#include "fakebluetoothremotedevice.h"
++
++using namespace Solid::Control::Ifaces;
++
++class KDE_EXPORT FakeBluetoothInterface : public Solid::Control::Ifaces::BluetoothInterface
++{
++    friend class FakeBluetoothManager;
++    Q_OBJECT
++    Q_INTERFACES(Solid::Control::Ifaces::BluetoothInterface)
++public:
++    FakeBluetoothInterface(const QMap<QString, QVariant>  & propertyMap,
++                           QObject *parent = 0);
++    virtual ~FakeBluetoothInterface();
++
++    QObject * createBluetoothRemoteDevice(const QString  & ubi);
++    QStringList bluetoothRemoteDevices() const;
++
++    QString ubi() const
++    {
++        return mUbi;
++    }
++
++    QString address() const
++    {
++        kDebug() ; return mAddress;
++    }
++    QString version() const
++    {
++        return mVersion;
++    }
++    QString revision() const
++    {
++        return mRevision;
++    }
++    QString manufacturer() const
++    {
++        return mManufacturer;
++    }
++    QString company() const
++    {
++        return mCompany;
++    }
++    Solid::Control::BluetoothInterface::Mode mode() const
++    {
++        return mMode;
++    }
++    int discoverableTimeout() const
++    {
++        return mDiscoverableTimeout;
++    }
++    bool isDiscoverable() const
++    {
++        return mDiscoverable;
++    }
++    QStringList listConnections() const
++    {
++        return mConnections;
++    }
++    QString majorClass() const
++    {
++        return mMajorClass;
++    }
++    QStringList listAvailableMinorClasses() const
++    {
++        return mMinorClasses;
++    }
++    QString minorClass() const
++    {
++        return mMinorClass;
++    }
++    QStringList serviceClasses() const
++    {
++        return mServiceClasses;
++    }
++    QString name() const
++    {
++        return mName;
++    }
++    QStringList listBondings() const
++    {
++        return mBondings;
++    }
++    bool isPeriodicDiscoveryActive() const
++    {
++        return mPeriodicDiscovery;
++    }
++    bool isPeriodicDiscoveryNameResolvingActive() const
++    {
++        return mPeriodicDiscoveryNameResolving;
++    }
++    QStringList listRemoteDevices() const
++    {
++        return mRemoteDevices;
++    }
++    QStringList listRecentRemoteDevices(const QDateTime &) const
++    {
++        return mRecentRemoteDevices;
++    }
++
++    void injectDevice(const QString &, FakeBluetoothRemoteDevice *);
++private:
++    int mTimeout;
++    QString mName;
++    QString mUbi;
++    QString mAddress;
++    QString mVersion;
++    QString mRevision;
++    QString mManufacturer;
++    QString mCompany;
++    Solid::Control::BluetoothInterface::Mode mMode;
++    int mDiscoverableTimeout;
++    bool mDiscoverable;
++    QStringList mConnections;
++    QString mMajorClass;
++    QStringList mMinorClasses;
++    QString mMinorClass;
++    QStringList mServiceClasses;
++    QStringList mBondings;
++    bool mPeriodicDiscovery;
++    bool mPeriodicDiscoveryNameResolving;
++    QStringList mRemoteDevices;
++    QStringList mRecentRemoteDevices;
++
++public Q_SLOTS:
++    void setMode(const Solid::Control::BluetoothInterface::Mode mode)
++    {
++        mMode = mode; /* emit modeChanged(mMode); */
++    }
++    void setDiscoverableTimeout(int timeout)
++    {
++        mTimeout = timeout;
++    }
++    void setMinorClass(const QString &minorClass)
++    {
++        mMinorClass = minorClass;
++    }
++    void setName(const QString &name)
++    {
++        mName = name;
++    }
++    void discoverDevices();
++    void discoverDevicesWithoutNameResolving()
++    {}
++    void cancelDiscovery()
++    {}
++    void startPeriodicDiscovery()
++    {}
++    void stopPeriodicDiscovery()
++    {}
++    void setPeriodicDiscoveryNameResolving(bool resolving)
++    {
++        mPeriodicDiscoveryNameResolving = resolving;
++    }
++
++Q_SIGNALS:
++    void modeChanged(Solid::Control::BluetoothInterface::Mode mode);
++    void discoverableTimeoutChanged(int timeout);
++    void minorClassChanged(const QString &minor);
++    void nameChanged(const QString &name);
++    void discoveryStarted();
++    void discoveryCompleted();
++    void remoteDeviceFound(const QString &ubi, int deviceClass, int rssi);
++    void remoteDeviceDisappeared(const QString &ubi);
++
++protected:
++    /* These methods are operations that are carried out by the manager
++       In a real backend they would be events coming up from the network layer */
++    void injectBluetooth(const QString  & ubi, FakeBluetoothRemoteDevice * device);
++    QMap<QString, FakeBluetoothRemoteDevice *> mBluetoothRemoteDevices;
++    QMap<QString, QVariant> mPropertyMap;
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothsecurity.cpp
+@@ -0,0 +1,31 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Juan González <jaguilera at opsiland.info>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++#include "fakebluetoothsecurity.h"
++
++void FakeBluetoothSecurity::setPasskeyAgent(Solid::Control::BluetoothPasskeyAgent * agent)
++{
++    Q_UNUSED(agent)
++}
++
++void FakeBluetoothSecurity::setAuthorizationAgent(Solid::Control::BluetoothAuthorizationAgent * agent)
++{
++    Q_UNUSED(agent)
++}
++
++#include "fakebluetoothsecurity.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/module.cpp
+@@ -0,0 +1,28 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "fakebluetoothmanager.h"
++
++// KDE includes
++#include <kgenericfactory.h>
++
++typedef KGenericFactory<FakeBluetoothManager, Solid::Control::Ifaces::BluetoothManager> FakeBluetoothBackendFactory;
++K_EXPORT_COMPONENT_FACTORY(solid_fake_bluetoothmgmt, FakeBluetoothBackendFactory("fakebluetoothbackend"))
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothmanager.cpp
+@@ -0,0 +1,222 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++#include <QFile>
++#include <QtXml>
++#include <QLatin1String>
++
++#include <kstandarddirs.h>
++#include <kdebug.h>
++
++#include "fakebluetoothmanager.h"
++
++FakeBluetoothManager::FakeBluetoothManager(QObject * parent, const QStringList &) : Solid::Control::Ifaces::BluetoothManager(parent)
++{
++    kDebug() ;
++
++    mXmlFile = KStandardDirs::locate("data", "solidfakebackend/fakebluetooth.xml");
++
++//     QDBusConnection::sessionBus().registerObject("/org/kde/solid/fake", this, QDBusConnection::ExportNonScriptableSlots);
++
++    parseBluetoothFile();
++}
++
++FakeBluetoothManager::FakeBluetoothManager(QObject * parent, const QStringList &, const QString &xmlFile) : Solid::Control::Ifaces::BluetoothManager(parent)
++{
++    kDebug() ;
++    mXmlFile = xmlFile;
++    if (mXmlFile.isEmpty()) {
++        kDebug() << "Falling back to installed bluetoothing xml";
++        mXmlFile = KStandardDirs::locate("data", "solidfakebackend/fakebluetooth.xml");
++    }
++    parseBluetoothFile();
++}
++
++FakeBluetoothManager::~FakeBluetoothManager()
++{
++    foreach (FakeBluetoothInterface *interface, mBluetoothInterfaces) {
++        delete interface;
++    }
++
++    mBluetoothInterfaces.clear();
++}
++
++QStringList FakeBluetoothManager::bluetoothInterfaces() const
++{
++    return mBluetoothInterfaces.keys();
++}
++
++QObject * FakeBluetoothManager::createInterface(const QString  & ubi)
++{
++    if (mBluetoothInterfaces.contains(ubi))
++        return mBluetoothInterfaces[ubi];
++    else
++        return 0;
++}
++
++QString FakeBluetoothManager::defaultInterface() const
++{
++    return "";
++}
++
++void FakeBluetoothManager::parseBluetoothFile()
++{
++    QFile machineFile(mXmlFile);
++    if (!machineFile.open(QIODevice::ReadOnly)) {
++        kDebug() << "Error while opening " << mXmlFile;
++        return;
++    }
++
++    QDomDocument fakeDocument;
++    QString error;
++    int line;
++    if (!fakeDocument.setContent(&machineFile, &error, &line)) {
++        kDebug() << "Error while creating the QDomDocument: " << error << " line: " <<
++        line <<  endl;
++        machineFile.close();
++        return;
++    }
++    machineFile.close();
++
++    kDebug() << "Parsing fake computer XML: " << mXmlFile;
++    QDomElement mainElement = fakeDocument.documentElement();
++    QDomNode node = mainElement.firstChild();
++    while (!node.isNull()) {
++        QDomElement tempElement = node.toElement();
++        if (!tempElement.isNull() && tempElement.tagName() == QLatin1String("interface")) {
++            FakeBluetoothInterface *tempDevice = parseDeviceElement(tempElement);
++            if (tempDevice) {
++                mBluetoothInterfaces.insert(tempDevice->ubi(), tempDevice);
++// Use the DeviceManager for now, the udi/ubi should
++//                emit deviceAdded(tempDevice->ubi());
++            }
++        }
++        node = node.nextSibling();
++    }
++}
++
++FakeBluetoothInterface *FakeBluetoothManager::parseDeviceElement(const QDomElement &deviceElement)
++{
++    FakeBluetoothInterface *interface = 0;
++    QMap<QString, QVariant> propertyMap;
++    QString ubi = deviceElement.attribute("ubi");
++    propertyMap.insert("ubi", ubi);
++    kDebug() << "Listing device: " << ubi;
++    propertyMap.insert("ubi", QVariant(ubi));
++
++    QDomNode childNode = deviceElement.firstChild();
++    while (!childNode.isNull()) {
++        QDomElement childElement = childNode.toElement();
++        //kDebug() << "found child=" << childElement.tagName();
++        if (!childElement.isNull() && childElement.tagName() == QLatin1String("property")) {
++            QString propertyKey;
++            QVariant propertyValue;
++
++            propertyKey = childElement.attribute("key");
++            propertyValue = QVariant(childElement.text());
++            //    kDebug() << "Got property key=" << propertyKey << ", value=" << propertyValue.toString();
++            propertyMap.insert(propertyKey, propertyValue);
++        } else if (!childElement.isNull() && childElement.tagName() == QLatin1String("device")) {
++            QString ubi = childElement.attribute("ubi");
++            kDebug() << "Listing properties: " << ubi;
++            FakeBluetoothRemoteDevice * remoteDevice = new FakeBluetoothRemoteDevice(parseBluetoothElement(childElement));
++            mBluetoothRemoteDevices.insert(ubi, remoteDevice);
++        }
++        childNode = childNode.nextSibling();
++    }
++    //kDebug() << "Done listing. ";
++
++    kDebug() << "Creating FakeBluetoothInterface for " << ubi;
++    interface = new FakeBluetoothInterface(propertyMap);
++
++    // Inject Remote devices....
++    foreach (FakeBluetoothRemoteDevice *device, mBluetoothRemoteDevices) {
++        kDebug() << "Injecting " << device->name();
++        interface->injectDevice(device->ubi(), device);
++    }
++
++    mBluetoothRemoteDevices.clear();
++
++    return interface;
++}
++
++QMap<QString, QVariant> FakeBluetoothManager::parseBluetoothElement(const QDomElement &deviceElement)
++{
++    QMap<QString, QVariant> propertyMap;
++
++    QString ubi = deviceElement.attribute("ubi");
++    propertyMap.insert("ubi", ubi);
++
++    QDomNode propertyNode = deviceElement.firstChild();
++    while (!propertyNode.isNull()) {
++        QDomElement propertyElement = propertyNode.toElement();
++        if (!propertyElement.isNull() && propertyElement.tagName() == QLatin1String("property")) {
++            QString propertyKey;
++            QVariant propertyValue;
++
++            propertyKey = propertyElement.attribute("key");
++            propertyValue = QVariant(propertyElement.text());
++//            kDebug() << "Got property key=" << propertyKey << ", value=" << propertyValue.toString();
++            propertyMap.insert(propertyKey, propertyValue);
++        }
++
++        propertyNode = propertyNode.nextSibling();
++    }
++    return propertyMap;
++}
++
++FakeBluetoothInterface *FakeBluetoothManager::createBluetoothInterface(const QString &ubi)
++{
++    if (mBluetoothInterfaces.contains(ubi))
++        return mBluetoothInterfaces[ubi];
++    else
++        return 0;
++}
++
++QStringList FakeBluetoothManager::bluetoothInputDevices() const
++{
++    return QStringList();
++}
++
++FakeBluetoothInputDevice *FakeBluetoothManager::createBluetoothInputDevice(const QString &ubi)
++{
++    if (mBluetoothInputDevices.contains(ubi))
++        return mBluetoothInputDevices[ubi];
++    else
++        return 0;
++}
++
++KJob *FakeBluetoothManager::setupInputDevice(const QString  & /*ubi */)
++{
++    // TODO
++    return NULL;
++}
++Solid::Control::Ifaces::BluetoothSecurity *FakeBluetoothManager::security(const QString &/*interface*/)
++{
++    return NULL;
++}
++
++void FakeBluetoothManager::removeInputDevice(const QString  & /*ubi */)
++{
++    //TODO
++}
++
++
++#include "fakebluetoothmanager.moc"
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothremotedevice.cpp
+@@ -0,0 +1,66 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QStringList>
++
++#include "fakebluetoothmanager.h"
++#include "fakebluetoothinterface.h"
++#include "fakebluetoothremotedevice.h"
++
++#include <kdebug.h>
++
++FakeBluetoothRemoteDevice::FakeBluetoothRemoteDevice(const QMap<QString, QVariant>  & propertyMap, QObject * parent)
++        : Solid::Control::Ifaces::BluetoothRemoteDevice(parent), mPropertyMap(propertyMap)
++{
++
++    mUbi = mPropertyMap["ubi"].toString();
++
++    kDebug() << "UBI: " << mUbi;
++
++    mAddress = mPropertyMap["address"].toString();
++    mConnected = mPropertyMap["connected"].toBool();
++    mVersion = mPropertyMap["version"].toString();
++    mRevision = mPropertyMap["revision"].toString();
++    mManufacturer = mPropertyMap["manufacturer"].toString();
++    mCompany = mPropertyMap["company"].toString();
++    mMajorClass = mPropertyMap["majorClass"].toString();
++    mMinorClass = mPropertyMap["minorClass"].toString();
++    mServiceClass.append(mPropertyMap["serviceClasses"].toString());
++    mName = mPropertyMap["name"].toString();
++    mAlias = mPropertyMap["alias"].toString();
++    mLastSeen = mPropertyMap["lastSeen"].toString();
++    mLastUsed = mPropertyMap["lastUsed"].toString();
++    mBonded = mPropertyMap["bonded"].toBool();
++    mPinCodeLength = mPropertyMap["pinCodeLength"].toInt();
++    mEncryptionKeySize = mPropertyMap["encryptionKeySize"].toInt();
++
++}
++
++FakeBluetoothRemoteDevice::~FakeBluetoothRemoteDevice()
++{}
++
++// TODO
++KJob *FakeBluetoothRemoteDevice::createBonding()
++{
++    mBonded = true;
++    return NULL;
++}
++
++#include "fakebluetoothremotedevice.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothsecurity.h
+@@ -0,0 +1,34 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Juan González <jaguilera at opsiland.info>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++#ifndef __FAKE_BLUETOOTH_SECURITY__
++#define __FAKE_BLUETOOTH_SECURITY__
++
++#include <solid/control/ifaces/bluetoothsecurity.h>
++#include <solid/control/bluetoothsecurity.h>
++
++class KDE_EXPORT FakeBluetoothSecurity : public Solid::Control::Ifaces::BluetoothSecurity
++{
++    Q_OBJECT
++    public Q_SLOTS:
++        void setPasskeyAgent(Solid::Control::BluetoothPasskeyAgent *agent);
++        void setAuthorizationAgent(Solid::Control::BluetoothAuthorizationAgent *agent);
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetooth.xml
+@@ -0,0 +1,168 @@
++<machine>
++
++    <interface ubi="/org/kde/solid/fakebluetooth/hci0">
++        <property key="address">00:E0:98:DD:4E:FF</property>
++        <property key="version">Bluetooth 1.1</property>
++        <property key="revision">Build 525</property>
++        <property key="manufacturer">Cambridge Silicon Radio</property>
++        <property key="company">Longshine</property>
++        <property key="mode">1</property>
++        <property key="discoverableTimeout">120</property>
++        <property key="isDiscoverable">true</property>
++        <property key="listConnections">/org/kde/solid/fakebluetooth/hci0/FF:FF:FF:FF:FF:FF,/org/kde/solid/fakebluetooth/hci0/AA:BB:CC:DD:EE:FF</property>
++        <property key="majorClass">computer</property>
++        <property key="minorClass">uncategorized</property>
++        <property key="serviceClasses">networking,rendering,capturing,object,transfer,audio</property>
++        <property key="name">Daniel's Laptop</property>
++        <property key="bondings">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF,FF:EE:DD:CC:BB:AA</property>
++        <property key="isPeriodicDiscovery">true</property>
++        <property key="isPeriodicDiscoveryNameResolving">true</property>
++        <property key="remoteDevices">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF,FF:EE:DD:CC:BB:AA</property>
++        <property key="recentRemoteDevices">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF</property>
++
++        <device ubi="/org/kde/solid/fakebluetooth/hci0/EE:EE:EE:EE:EE:EE">
++            <property key="address">EE:EE:EE:EE:EE:EE</property>
++            <property key="connected">true</property>
++            <property key="version">Bluetooth 1.2</property>
++            <property key="revision">Build 525</property>
++            <property key="manufacturer">Cambridge Silicon Radio</property>
++            <property key="company">Nokia</property>
++            <property key="majorClass">computer</property>
++            <property key="minorClass">uncategorized</property>
++            <property key="serviceClass">networking,rendering,capturing,object,transfer,audio</property>
++            <property key="name">N800</property>
++            <property key="alias">My N800</property>
++            <property key="lastSeen">2007-03-25 02:45:00 GMT</property>
++            <property key="lastUsed">2007-03-25 00:40:00 GMT</property>
++            <property key="hasBonding">true</property>
++            <property key="pinCodeLength"></property>
++            <property key="encryptionKeySize"></property>
++        </device>
++
++        <device ubi="/org/kde/solid/fakebluetooth/hci0/DD:DD:DD:DD:DD:DD">
++            <property key="address">DD:DD:DD:DD:DD:DD</property>
++            <property key="connected">false</property>
++            <property key="version">Bluetooth 1.1</property>
++            <property key="revision">Build 525</property>
++            <property key="manufacturer">Cambridge Silicon Radio</property>
++            <property key="company">Nokia</property>
++            <property key="majorClass">phone</property>
++            <property key="minorClass">cellular</property>
++            <property key="serviceClass">networking,rendering,capturing,object,transfer,audio</property>
++            <property key="name">Nokia 6230</property>
++            <property key="alias">Company cellphone</property>
++            <property key="lastSeen">2007-03-25 02:45:00 GMT</property>
++            <property key="lastUsed">2007-03-25 00:40:00 GMT</property>
++            <property key="hasBonding">false</property>
++            <property key="pinCodeLength"></property>
++            <property key="encryptionKeySize"></property>
++        </device>
++
++        <device ubi="/org/kde/solid/fakebluetooth/hci0/00:04:61:81:74:0F">
++            <property key="address">00:04:61:81:74:0F</property>
++            <property key="connected">false</property>
++            <property key="version">Bluetooth 1.1</property>
++            <property key="revision">HCI 0x356</property>
++            <property key="manufacturer">Cambridge Silicon Radio</property>
++            <property key="company"></property>
++            <property key="majorClass">peripheral</property>
++            <property key="minorClass">keyboard</property>
++            <property key="serviceClass"></property>
++            <property key="name">Bluetooth-Keyboard 81740F</property>
++            <property key="alias">Epox Test Keyboard</property>
++            <property key="lastSeen">2007-03-25 02:45:00 GMT</property>
++            <property key="lastUsed">2007-03-25 00:40:00 GMT</property>
++            <property key="hasBonding">true</property>
++            <property key="pinCodeLength"></property>
++            <property key="encryptionKeySize"></property>
++        </device>
++
++        <device ubi="/org/kde/solid/fakebluetooth/hci0/00:04:61:81:75:BE">
++            <property key="address">00:04:61:81:75:BE</property>
++            <property key="connected">false</property>
++            <property key="version">Bluetooth 1.1</property>
++            <property key="revision">HCI 0x356</property>
++            <property key="manufacturer">Cambridge Silicon Radio</property>
++            <property key="company"></property>
++            <property key="majorClass">peripheral</property>
++            <property key="minorClass">pointing</property>
++            <property key="serviceClass"></property>
++            <property key="name">Bluetooth-Mouse 8175BE</property>
++            <property key="alias">Epox Test Mouse</property>
++            <property key="lastSeen">2007-03-25 02:45:00 GMT</property>
++            <property key="lastUsed">2007-03-25 00:40:00 GMT</property>
++            <property key="hasBonding">false</property>
++            <property key="pinCodeLength"></property>
++            <property key="encryptionKeySize"></property>
++        </device>
++
++
++    </interface>
++
++
++    <interface ubi="/org/kde/solid/fakebluetooth/hci1">
++        <property key="address">00:00:98:DD:4E:00</property>
++        <property key="version">Bluetooth 1.1</property>
++        <property key="revision">Build 525</property>
++        <property key="manufacturer">Cambridge Silicon Radio</property>
++        <property key="company">Longshine</property>
++        <property key="mode">2</property>
++        <property key="discoverableTimeout">120</property>
++        <property key="isDiscoverable">true</property>
++        <property key="listConnections">/org/kde/solid/fakebluetooth/hci0/FF:FF:FF:FF:FF:FF,/org/kde/solid/fakebluetooth/hci0/AA:BB:CC:DD:EE:FF</property>
++        <property key="majorClass">computer</property>
++        <property key="minorClass">uncategorized</property>
++        <property key="serviceClasses">networking,rendering,capturing,object,transfer,audio</property>
++        <property key="name">Daniel's Laptop</property>
++        <property key="bondings">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF,FF:EE:DD:CC:BB:AA</property>
++        <property key="isPeriodicDiscovery">true</property>
++        <property key="isPeriodicDiscoveryNameResolving">true</property>
++        <property key="remoteDevices">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF,FF:EE:DD:CC:BB:AA</property>
++        <property key="recentRemoteDevices">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF</property>
++    </interface>
++
++
++    <interface ubi="/org/kde/solid/fakebluetooth/hci2">
++        <property key="address">FF:E0:98:DD:FF:FF</property>
++        <property key="version">Bluetooth 1.2</property>
++        <property key="revision"></property>
++        <property key="manufacturer">Cambridge Silicon Radio</property>
++        <property key="company"></property>
++        <property key="mode">0</property>
++        <property key="discoverableTimeout">120</property>
++        <property key="isDiscoverable">true</property>
++        <property key="listConnections">/org/kde/solid/fakebluetooth/hci0/FF:FF:FF:FF:FF:FF,/org/kde/solid/fakebluetooth/hci0/AA:BB:CC:DD:EE:FF</property>
++        <property key="majorClass">computer</property>
++        <property key="minorClass">server</property>
++        <property key="serviceClasses">networking,rendering,capturing,object,transfer,audio</property>
++        <property key="name">Daniel's Laptop</property>
++        <property key="bondings">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF,FF:EE:DD:CC:BB:AA</property>
++        <property key="isPeriodicDiscovery">true</property>
++        <property key="isPeriodicDiscoveryNameResolving">false</property>
++        <property key="remoteDevices"></property>
++        <property key="recentRemoteDevices"></property>
++    </interface>
++
++    <interface ubi="/org/kde/solid/fakebluetooth/XXX">
++        <property key="address">AA:FF:EE:AA:FF:EE</property>
++        <property key="version">Bluetooth 2.0</property>
++        <property key="revision">Build 525</property>
++        <property key="manufacturer">Cambridge Silicon Radio</property>
++        <property key="company"></property>
++        <property key="mode">1</property>
++        <property key="discoverableTimeout">180</property>
++        <property key="isDiscoverable">true</property>
++        <property key="listConnections">/org/kde/solid/fakebluetooth/hci0/FF:FF:FF:FF:FF:FF,/org/kde/solid/fakebluetooth/hci0/AA:BB:CC:DD:EE:FF</property>
++        <property key="majorClass">computer</property>
++        <property key="minorClass">laptop</property>
++        <property key="serviceClasses">networking,rendering,capturing,object,transfer,audio</property>
++        <property key="name">BlueZ (0) sugga</property>
++        <property key="bondings">FF:FF:FF:FF:FF:FF,AA:BB:CC:DD:EE:FF,FF:EE:DD:CC:BB:AA</property>
++        <property key="isPeriodicDiscovery">true</property>
++        <property key="isPeriodicDiscoveryNameResolving">true</property>
++        <property key="remoteDevices"></property>
++        <property key="recentRemoteDevices"></property>
++    </interface>
++
++
++</machine>
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/CMakeLists.txt
+@@ -0,0 +1,31 @@
++
++add_subdirectory( tests )
++
++########### next target ###############
++
++set(solid_fakebluetooth_PART_SRCS
++   fakebluetoothinterface.cpp
++   fakebluetoothmanager.cpp
++   fakebluetoothremotedevice.cpp
++   fakebluetoothinputdevice.cpp
++   fakebluetoothsecurity.cpp
++)
++
++
++kde4_add_library(solid_fakebluetooth_static STATIC ${solid_fakebluetooth_PART_SRCS} )
++target_link_libraries(solid_fakebluetooth_static solidcontrolifaces ${KDE4_KDECORE_LIBS} ${QT_QTXML_LIBRARY} )
++
++kde4_add_plugin(solid_fakebluetooth module.cpp ${solid_fakebluetooth_PART_SRCS})
++
++
++target_link_libraries(solid_fakebluetooth solidcontrolifaces ${KDE4_KDECORE_LIBS} ${QT_QTXML_LIBRARY} )
++
++install(TARGETS solid_fakebluetooth DESTINATION ${PLUGIN_INSTALL_DIR}  )
++
++
++########### install files ###############
++
++install( FILES solid_fakebluetooth.desktop DESTINATION ${SERVICES_INSTALL_DIR}/solidbackends  )
++install( FILES fakebluetooth.xml DESTINATION ${DATA_INSTALL_DIR}/solidfakebluetoothbackend  )
++
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothinputdevice.cpp
+@@ -0,0 +1,43 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QStringList>
++
++#include "fakebluetoothinputdevice.h"
++
++#include <kdebug.h>
++
++FakeBluetoothInputDevice::FakeBluetoothInputDevice(const QMap<QString, QVariant>  & propertyMap, QObject * parent)
++        : Solid::Control::Ifaces::BluetoothInputDevice(parent), mPropertyMap(propertyMap)
++{
++
++    mUbi = mPropertyMap["ubi"].toString();
++
++    kDebug() << "UBI: " << mUbi;
++
++    mAddress = mPropertyMap["address"].toString();
++    mConnected = mPropertyMap["connected"].toBool();
++    mName = mPropertyMap["name"].toString();
++}
++
++FakeBluetoothInputDevice::~FakeBluetoothInputDevice()
++{}
++
++#include "fakebluetoothinputdevice.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothmanager.h
+@@ -0,0 +1,66 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_BLUETOOTH_MANAGER_H
++#define FAKE_BLUETOOTH_MANAGER_H
++
++#include <QObject>
++#include <QStringList>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/bluetoothmanager.h>
++#include "fakebluetoothinterface.h"
++#include "fakebluetoothinputdevice.h"
++#include "fakebluetoothsecurity.h"
++
++class QDomElement;
++
++class KDE_EXPORT FakeBluetoothManager : public Solid::Control::Ifaces::BluetoothManager
++{
++    Q_OBJECT
++public:
++    FakeBluetoothManager(QObject * parent, const QStringList  & args);
++    FakeBluetoothManager(QObject * parent, const QStringList  & args, const QString  & xmlFile);
++    ~FakeBluetoothManager();
++    QStringList bluetoothInterfaces() const;
++    FakeBluetoothInterface *createBluetoothInterface(const QString &);
++    QString defaultInterface() const;
++    QObject *createInterface(const QString &);
++
++    QStringList bluetoothInputDevices() const;
++    FakeBluetoothInputDevice *createBluetoothInputDevice(const QString &ubi);
++    KJob *setupInputDevice(const QString &ubi);
++    Solid::Control::Ifaces::BluetoothSecurity * security(const QString &interface);
++public Q_SLOTS:
++    void removeInputDevice(const QString  & ubi);
++
++private:
++    void parseBluetoothFile();
++    FakeBluetoothInterface *parseDeviceElement(const QDomElement &deviceElement);
++    QMap<QString, QVariant> parseBluetoothElement(const QDomElement &deviceElement);
++
++    QMap<QString, FakeBluetoothInterface *> mBluetoothInterfaces;
++    QMap<QString, FakeBluetoothInputDevice *> mBluetoothInputDevices;
++    QMap<QString, FakeBluetoothRemoteDevice *> mBluetoothRemoteDevices;
++    QString mXmlFile;
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothinterface.cpp
+@@ -0,0 +1,101 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QStringList>
++#include <QTimer>
++
++#include "fakebluetoothinterface.h"
++#include "fakebluetoothremotedevice.h"
++
++#include <kdebug.h>
++
++FakeBluetoothInterface::FakeBluetoothInterface(const QMap<QString, QVariant>  & propertyMap, QObject * parent)
++        : Solid::Control::Ifaces::BluetoothInterface(parent), mPropertyMap(propertyMap)
++{
++    mAddress = mPropertyMap["address"].toString();
++    mVersion = mPropertyMap["version"].toString();
++    mRevision = mPropertyMap["revision"].toString();
++    mManufacturer = mPropertyMap["manufacturer"].toString();
++    mCompany = mPropertyMap["company"].toString();
++    mMode = (Solid::Control::BluetoothInterface::Mode) mPropertyMap["mode"].toInt();
++    mDiscoverableTimeout = mPropertyMap["discoverableTimeout"].toInt();
++    mDiscoverable = mPropertyMap["isDiscoverable"].toBool();
++    mConnections.append(mPropertyMap["connections"].toString());
++    mMajorClass = mPropertyMap["majorClass"].toString();
++    mMinorClasses.append(mPropertyMap["minorClasses"].toString());
++    mMinorClass = mPropertyMap["minorClass"].toString();
++    mServiceClasses.append(mPropertyMap["serviceClasses"].toString());
++    mName = mPropertyMap["name"].toString();
++    mBondings.append(mPropertyMap["bondings"].toString());
++    mPeriodicDiscovery = mPropertyMap["isPeriodicDiscovery"].toBool();
++    mPeriodicDiscoveryNameResolving = mPropertyMap["periodicDiscoveryNameResolving"].toBool();
++    mRemoteDevices.append(mPropertyMap["remoteDevices"].toString());
++    mRecentRemoteDevices.append(mPropertyMap["recentRemoteDevices"].toString());
++
++    mUbi = mPropertyMap["ubi"].toString();
++}
++
++FakeBluetoothInterface::~FakeBluetoothInterface()
++{
++    foreach (FakeBluetoothRemoteDevice *device, mBluetoothRemoteDevices) {
++        kDebug() << "DEVICE: " << device->ubi();
++        delete device;
++    }
++
++    mBluetoothRemoteDevices.clear();
++}
++
++QObject * FakeBluetoothInterface::createBluetoothRemoteDevice(const QString  & ubi)
++{
++    if (mBluetoothRemoteDevices.contains(ubi)) {
++        kDebug() << "found " << ubi;
++        return mBluetoothRemoteDevices[ubi];
++    } else {
++        kDebug() << "NOT found " << ubi;
++        return 0;
++    }
++}
++
++QStringList FakeBluetoothInterface::bluetoothRemoteDevices() const
++{
++    kDebug() ;
++    return mBluetoothRemoteDevices.keys();
++}
++
++void FakeBluetoothInterface::discoverDevices()
++{
++    kDebug() ;
++    QTimer::singleShot(1000, this,
++                       SIGNAL(remoteDeviceFound(QString("/org/kde/solid/fakebluetooth/hci0/EE:EE:EE:EE:EE:EE"),
++                                                0, 99)));
++    QTimer::singleShot(5000, this,
++                       SIGNAL(remoteDeviceFound(QString("/org/kde/solid/fakebluetooth/hci0/EE:FF:EE:FF:EE:FF"),
++                                                0, 42)));
++
++}
++
++/*************************************/
++
++void FakeBluetoothInterface::injectDevice(const QString &ubi , FakeBluetoothRemoteDevice *device)
++{
++    mBluetoothRemoteDevices.insert(ubi, device);
++}
++
++#include "fakebluetoothinterface.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/fakebluetoothremotedevice.h
+@@ -0,0 +1,175 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_BLUETOOTH_REMOTEDEVICE_H
++#define FAKE_BLUETOOTH_REMOTEDEVICE_H
++
++#include <QString>
++#include <QVariant>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/bluetoothremotedevice.h>
++
++using namespace Solid::Control::Ifaces;
++
++class KDE_EXPORT FakeBluetoothRemoteDevice : public Solid::Control::Ifaces::BluetoothRemoteDevice
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Control::Ifaces::BluetoothRemoteDevice)
++public:
++    FakeBluetoothRemoteDevice(const QMap<QString, QVariant>  & propertyMap,
++                              QObject *parent = 0);
++    virtual ~FakeBluetoothRemoteDevice();
++    QString ubi() const
++    {
++        return mUbi;
++    }
++    QString address() const
++    {
++        return mAddress;
++    }
++    bool isConnected() const
++    {
++        return mConnected;
++    }
++    QString version() const
++    {
++        return mVersion;
++    }
++    QString revision() const
++    {
++        return mRevision;
++    }
++    QString manufacturer() const
++    {
++        return mManufacturer;
++    }
++    QString company() const
++    {
++        return mCompany;
++    }
++    QString majorClass() const
++    {
++        return mMajorClass;
++    }
++    QString minorClass() const
++    {
++        return mMinorClass;
++    }
++    QStringList serviceClasses() const
++    {
++        return mServiceClass;
++    }
++    QString name() const
++    {
++        return mName;
++    }
++    QString alias() const
++    {
++        return mAlias;
++    }
++    QString lastSeen() const
++    {
++        return mLastSeen;
++    }
++    QString lastUsed() const
++    {
++        return mLastUsed;
++    }
++    bool hasBonding() const
++    {
++        return mBonded;
++    }
++    int pinCodeLength() const
++    {
++        return mPinCodeLength;
++    }
++    int encryptionKeySize() const
++    {
++        return mEncryptionKeySize;
++    }
++    KJob *createBonding();
++
++private:
++    QString mUbi;
++    QString mAddress;
++    bool mConnected;
++    QString mVersion;
++    QString mRevision;
++    QString mManufacturer;
++    QString mCompany;
++    QString mMajorClass;
++    QString mMinorClass;
++    QStringList mServiceClass;
++    QString mName;
++    QString mAlias;
++    QString mLastSeen;
++    QString mLastUsed;
++    bool mBonded;
++    int mPinCodeLength;
++    int mEncryptionKeySize;
++    bool servicesFound;
++
++public Q_SLOTS:
++    void setAlias(const QString &alias)
++    {
++        mAlias = alias;
++    }
++    void clearAlias()
++    {
++        mAlias = "";
++    }
++    void disconnect()
++    {
++        mConnected = false;
++    }
++    void cancelBondingProcess()
++    {}
++    void removeBonding()
++    {
++        mBonded = false;
++    }
++    void serviceHandles(const QString &) const
++    {
++	    
++    }
++    void serviceRecordAsXml(uint ) const
++    {
++    }
++Q_SIGNALS:
++    void classChanged(uint devClass);
++    void nameChanged(const QString &name);
++    void nameResolvingFailed();
++    void aliasChanged(const QString &alias);
++    void aliasCleared();
++    void connected();
++    void requestDisconnection();
++    void disconnected();
++    void bondingCreated();
++    void bondingRemoved();
++    void serviceRecordXmlAvailable(const QString &ubi, const QString &record);
++    void serviceHandlesAvailable(const QString &ubi, const QList<uint> &handles);
++protected:
++    QMap<QString, QVariant> mPropertyMap;
++
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakebluetooth/solid_fakebluetooth.desktop
+@@ -0,0 +1,60 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=Service
++ServiceTypes=SolidBluetoothManager
++X-KDE-Library=solid_fakebluetooth
++InitialPreference=10
++Icon=system
++Name=Fake Bluetooth
++Name[be]=Падробка пад Bluetooth
++Name[bg]=Фалшив Bluetooth
++Name[csb]=Falszëwi Bluetooth
++Name[de]=Bluetooth (Dummy)
++Name[el]=Πλαστό Bluetooth
++Name[et]=Liba-Bluetooth
++Name[fa]=بلوتوث جعلی
++Name[he]=‏Bluetooth מזוייף
++Name[ja]=疑似 Bluetooth
++Name[km]=ប៊្លូធូស​​ក្លែងក្លាយ
++Name[ko]=가짜 Bluetooth
++Name[nb]=Falsk Bluetooth
++Name[nds]=Bluetooth (Platzholler)
++Name[ne]=नक्कली ब्लुटुथ
++Name[nl]=Nep Bluetooth
++Name[nn]=Falsk Bluetooth
++Name[pa]=ਫ਼ਰਜ਼ੀ ਬਲਿਊਟੁੱਥ
++Name[pt]=Bluetooth Falso
++Name[pt_BR]=Bluetooth Falso
++Name[sv]=Blåtandstest
++Name[vi]=Bluetooth giả
++Name[x-test]=xxFake Bluetoothxx
++Name[zh_CN]=虚假蓝牙
++Name[zh_TW]=Fake 藍芽
++Comment=Fake Bluetooth Management
++Comment[be]=Кіраванне падробным Buletooth
++Comment[bg]=Фалшив Bluetooth
++Comment[csb]=Sprôwianié falszëwim Bluetoothã
++Comment[de]=Bluetooth-Verwaltung (Dummy)
++Comment[el]=Διαχείριση πλαστού Bluetooth
++Comment[et]=Liba-Bluetoothi haldur
++Comment[fa]=مدیریت بلوتوث جعلی
++Comment[he]=ניהול Bluetooth מזוייף
++Comment[it]=Gestione di un falso Bluetooth
++Comment[ja]=疑似 Bluetooth の管理
++Comment[kk]=Fake Bluetooth-ды басқару
++Comment[km]=ការ​គ្រប់គ្រង​ប៊្លូធូស​ក្លែងក្លាយ​
++Comment[ko]=가짜 Bluetooth 관리
++Comment[lt]=Netikro Bluetooth tvarkymas
++Comment[nb]=Falsk Bluetooth-styring
++Comment[nds]=Bluetooth-Pleger (Platzholler)
++Comment[ne]=नक्कली ब्लुटुथ व्यवस्थापन
++Comment[nl]=Nep Bluetooth-beheer
++Comment[nn]=Falsk Bluetooth-handtering
++Comment[pa]=ਫ਼ਰਜ਼ੀ ਬਲਿਊਟੁੱਥ ਪਰਬੰਧ
++Comment[pt]=Gestão do Bluetooth Falso
++Comment[pt_BR]=Gerenciamento de Bluetooth Falso
++Comment[sv]=Blåtandshanteringstest
++Comment[vi]=Quản lý Bluetooth giả
++Comment[x-test]=xxFake Bluetooth Managementxx
++Comment[zh_CN]=虚假蓝牙管理
++Comment[zh_TW]=Fake 藍芽管理
+--- /dev/null
++++ b/libs/solid/control/backends/CMakeLists.txt
+@@ -0,0 +1,3 @@
++add_subdirectory( fakenet )
++add_subdirectory( fakebluetooth )
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakewirelessnetwork.cpp
+@@ -0,0 +1,135 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "fakewirelessnetwork.h"
++
++FakeWirelessNetwork::FakeWirelessNetwork(const QString  & uni,
++                                          const QMap<QString, QVariant>  & propertyMap,
++                                          QObject * parent)
++: FakeNetwork(uni, propertyMap, parent)
++{
++}
++
++FakeWirelessNetwork::~FakeWirelessNetwork()
++{
++
++}
++
++// PHY stuff
++int FakeWirelessNetwork::signalStrength() const
++{
++    return mPropertyMap["signalstrength"].toInt();
++}
++
++int FakeWirelessNetwork::bitrate() const
++{
++    return mPropertyMap["bitrate"].toInt();
++}
++
++double FakeWirelessNetwork::frequency() const
++{
++    return mPropertyMap["frequency"].toInt();
++}
++
++Solid::Control::WirelessNetwork::Capabilities FakeWirelessNetwork::capabilities() const
++{
++    QStringList capStrings = mPropertyMap["capabilities"].toStringList();
++
++    Solid::Control::WirelessNetwork::Capabilities caps = 0;
++    if (capStrings.contains("wep"))
++        caps |= Solid::Control::WirelessNetwork::Wep;
++    if (capStrings.contains("wpa"))
++        caps |= Solid::Control::WirelessNetwork::Wpa;
++    if (capStrings.contains("wpa2"))
++        caps |= Solid::Control::WirelessNetwork::Wpa2;
++    if (capStrings.contains("psk"))
++        caps |= Solid::Control::WirelessNetwork::Psk;
++    if (capStrings.contains("ieee8021x"))
++        caps |= Solid::Control::WirelessNetwork::Ieee8021x;
++    if (capStrings.contains("wep40"))
++        caps |= Solid::Control::WirelessNetwork::Wep40;
++    if (capStrings.contains("wep104"))
++        caps |= Solid::Control::WirelessNetwork::Wep104;
++    if (capStrings.contains("wep192"))
++        caps |= Solid::Control::WirelessNetwork::Wep192;
++    if (capStrings.contains("wep256"))
++        caps |= Solid::Control::WirelessNetwork::Wep256;
++    if (capStrings.contains("wep_other"))
++        caps |= Solid::Control::WirelessNetwork::WepOther;
++    if (capStrings.contains("tkip"))
++        caps |= Solid::Control::WirelessNetwork::Tkip;
++    if (capStrings.contains("ccmp"))
++        caps |= Solid::Control::WirelessNetwork::Ccmp;
++
++    return caps;
++}
++
++QString FakeWirelessNetwork::essid() const
++{
++    return mPropertyMap["essid"].toString();
++}
++
++Solid::Control::WirelessNetwork::OperationMode FakeWirelessNetwork::mode() const
++{
++    QString modeName = mPropertyMap["mode"].toString();
++
++    if (modeName == "adhoc")
++        return Solid::Control::WirelessNetwork::Adhoc;
++    else if (modeName == "managed")
++        return Solid::Control::WirelessNetwork::Managed;
++    else if (modeName == "master")
++        return Solid::Control::WirelessNetwork::Master;
++    else if (modeName == "repeater")
++        return Solid::Control::WirelessNetwork::Repeater;
++    else
++        return Solid::Control::WirelessNetwork::Unassociated;
++}
++
++bool FakeWirelessNetwork::isAssociated() const
++{
++    return mPropertyMap["signalstrength"].toBool();
++}
++
++bool FakeWirelessNetwork::isEncrypted() const
++{
++    return mPropertyMap["encrypted"].toBool();
++}
++
++bool FakeWirelessNetwork::isHidden() const
++{
++    return mPropertyMap["hidden"].toBool();
++}
++
++MacAddressList FakeWirelessNetwork::bssList() const
++{
++    return mPropertyMap["bsslist"].toStringList();
++}
++
++Solid::Control::Authentication *FakeWirelessNetwork::authentication() const
++{
++    return mAuthentication;
++}
++
++void FakeWirelessNetwork::setAuthentication(Solid::Control::Authentication *authentication)
++{
++    mAuthentication = authentication;
++}
++
++
++#include "fakewirelessnetwork.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/solid_fakenet.desktop
+@@ -0,0 +1,59 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=Service
++ServiceTypes=SolidNetworkManager
++X-KDE-Library=solid_fakenet
++InitialPreference=10
++Icon=system
++Name=Fake Net
++Name[be]=Падробка пад сетку
++Name[csb]=Falszëwô séc
++Name[de]=Netzwerk (Dummy)
++Name[el]=Πλαστό δίκτυο
++Name[et]=Liba-võrk
++Name[fa]=شبکۀ جعلی
++Name[he]=רשת מזוייפת
++Name[ja]=疑似ネット
++Name[km]=សំណាញ់​ក្លែងក្លាយ​
++Name[ko]=가짜 네트워크
++Name[nb]=Falsk nettverk
++Name[nds]=Nettwark (Platzholler)
++Name[ne]=नक्कली नेट
++Name[nl]=Nep net
++Name[nn]=Flaskt nettverk
++Name[pa]=ਫ਼ਰਜੀ ਨੈੱਟ
++Name[pt]=Rede Falsa
++Name[pt_BR]=Rede Falsa
++Name[sv]=Testnät
++Name[vi]=Mạng giả
++Name[x-test]=xxFake Netxx
++Name[zh_CN]=虚假网络
++Name[zh_TW]=Fake 網路
++Comment=Fake Network Management
++Comment[be]=Кіраванне падробная сеткай
++Comment[bg]=Фалшива мрежа
++Comment[csb]=Sprôwianié falszëwą sécą
++Comment[de]=Netzwerkverwaltung (Dummy)
++Comment[el]=Διαχειριστής πλαστού δικτύου
++Comment[et]=Liba-võrgu haldur
++Comment[fa]=مدیریت شبکۀ جعلی
++Comment[he]=ניהול רשת מזוייף
++Comment[it]=Gestione di una falsa rete
++Comment[ja]=疑似ネット管理
++Comment[kk]=Fake басқару тетігі
++Comment[km]=ការ​គ្រប់គ្រង​បណ្តាញ​ក្លែងក្លាយ​
++Comment[ko]=가짜 네트워크 관리
++Comment[lt]=Netikro tinklo tvarkymas
++Comment[nb]=Falsk nettverksstyring
++Comment[nds]=Nettwark-Pleger (Platzholler)
++Comment[ne]=नक्कली सञ्जाल व्यवस्थापन
++Comment[nl]=Nep netwerkbeheer
++Comment[nn]=Falskt nettverk-handtering
++Comment[pa]=ਫ਼ਰਜ਼ੀ ਨੈੱਟਵਰਕ ਪਰਬੰਧ
++Comment[pt]=Gestão da Rede Falsa
++Comment[pt_BR]=Gerenciamento de Rede Falsa
++Comment[sv]=Hantering av testnätverk
++Comment[vi]=Quản lý mạng giả
++Comment[x-test]=xxFake Network Managementxx
++Comment[zh_CN]=虚假网络管理
++Comment[zh_TW]=Fake 網路管理
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetwork.cpp
+@@ -0,0 +1,96 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "fakenetwork.h"
++
++QList<QHostAddress> FakeNetwork::stringlistToKIpAddress( const QStringList  & addrStringList) const
++{
++    QList<QHostAddress> ipv4Addrs;
++    foreach (const QString &addrString, addrStringList)
++    {
++        QHostAddress addr( addrString);
++        ipv4Addrs.append( addr);
++    }
++    return ipv4Addrs;
++}
++
++QList<QNetworkAddressEntry> FakeNetwork::stringlistsToQNetworkAddressEntries(const QStringList  & addrStringList, const QStringList  & subnets, const QStringList  & bcasts) const
++{
++    if (!(addrStringList.count() == subnets.count() && subnets.count() == bcasts.count()))
++        return QList<QNetworkAddressEntry>();
++
++    QList<QNetworkAddressEntry> entries;
++    for (int i = 0; i< addrStringList.count(); ++i)
++    {
++        QNetworkAddressEntry addr;
++        addr.setIp(QHostAddress(addrStringList[i]));
++        addr.setNetmask(QHostAddress(subnets[i]));
++        addr.setBroadcast(QHostAddress(bcasts[i]));
++        entries.append(addr);
++    }
++    return entries;
++
++}
++
++FakeNetwork::FakeNetwork(const QString  & uni, const QMap<QString, QVariant>  & propertyMap,
++                          QObject * parent)
++: QObject(parent), mPropertyMap(propertyMap)
++{
++    mPropertyMap.insert("uni", QVariant(uni));
++}
++
++FakeNetwork::~FakeNetwork()
++{
++
++}
++
++QList<QNetworkAddressEntry> FakeNetwork::addressEntries() const
++{
++    return stringlistsToQNetworkAddressEntries(mPropertyMap["addresses"].toStringList(),
++                                   mPropertyMap["subnet"].toStringList(),
++                                   mPropertyMap["broadcast"].toStringList()
++                                );
++}
++
++QString FakeNetwork::route() const
++{
++    return mPropertyMap["route"].toString();
++}
++
++QList<QHostAddress> FakeNetwork::dnsServers() const
++{
++        return stringlistToKIpAddress(mPropertyMap["dns"].toString().simplified().split(','));
++}
++
++void FakeNetwork::setActivated(bool active)
++{
++    mPropertyMap.insert("active", QVariant(active));
++}
++
++bool FakeNetwork::isActive() const
++{
++    return mPropertyMap["active"].toBool();
++}
++
++QString FakeNetwork::uni() const
++{
++    return mPropertyMap["uni"].toString();
++}
++
++#include "fakenetwork.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetworkmanager.h
+@@ -0,0 +1,83 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_NETWORK_MANAGER_H
++#define FAKE_NETWORK_MANAGER_H
++
++#include <QObject>
++#include <QStringList>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/networkmanager.h>
++#include <solid/control/authentication.h>
++
++#include "fakenetworkinterface.h"
++
++
++class FakeAuthenticationValidator;
++class QDomElement;
++//class FakeNetworkInterface;
++
++namespace Solid {
++    class Authentication;
++}
++
++class KDE_EXPORT FakeNetworkManager : public Solid::Control::Ifaces::NetworkManager
++{
++Q_OBJECT
++    public:
++        FakeNetworkManager(QObject * parent, const QStringList  & args);
++        FakeNetworkManager(QObject * parent, const QStringList  & args, const QString  & xmlFile);
++        virtual ~FakeNetworkManager();
++        QStringList networkInterfaces() const;
++        QStringList activeNetworkInterfaces() const;
++        QObject * createNetworkInterface(const QString &);
++        QObject * createAuthenticationValidator();
++
++        bool isNetworkingEnabled() const;
++        bool isWirelessEnabled() const;
++    public Q_SLOTS:
++        void setWirelessEnabled(bool);
++        void setNetworkingEnabled(bool);
++        void notifyHiddenNetwork(const QString  &);
++
++    private:
++        void parseNetworkingFile();
++        FakeNetworkInterface *parseDeviceElement(const QDomElement &deviceElement);
++        QMap<QString,QVariant> parseNetworkElement(const QDomElement &deviceElement);
++
++        bool mUserNetworkingEnabled;
++        bool mUserWirelessEnabled;
++        QMap<QString, FakeNetworkInterface *> mNetworkInterfaces;
++        FakeAuthenticationValidator * mAuthValidator;
++        QString mXmlFile;
++};
++
++class FakeAuthenticationValidator : public QObject, public Solid::Control::Ifaces::AuthenticationValidator
++{
++Q_OBJECT
++Q_INTERFACES(Solid::Control::Ifaces::AuthenticationValidator)
++    public:
++        FakeAuthenticationValidator(QObject * parent);
++        virtual ~FakeAuthenticationValidator();
++        bool validate(const Solid::Control::Authentication *);
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetworkinterface.cpp
+@@ -0,0 +1,141 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include <QStringList>
++
++#include "fakenetworkinterface.h"
++#include "fakenetwork.h"
++
++#include <kdebug.h>
++
++FakeNetworkInterface::FakeNetworkInterface(const QMap<QString, QVariant>  & propertyMap, QObject * parent)
++: Solid::Control::Ifaces::NetworkInterface(parent), mPropertyMap(propertyMap)
++{
++}
++
++FakeNetworkInterface::~FakeNetworkInterface()
++{
++}
++
++
++QString FakeNetworkInterface::uni() const
++{
++    return mPropertyMap["uni"].toString();
++}
++
++bool FakeNetworkInterface::isActive() const
++{
++    return mPropertyMap["active"].toBool();
++}
++
++Solid::Control::NetworkInterface::Type FakeNetworkInterface::type() const
++{
++    QString typeString = mPropertyMap["type"].toString();
++
++    if (typeString == "ieee8023")
++        return Solid::Control::NetworkInterface::Ieee8023;
++    else if (typeString == "ieee80211")
++        return Solid::Control::NetworkInterface::Ieee80211;
++    else
++        return Solid::Control::NetworkInterface::UnknownType;
++}
++
++Solid::Control::NetworkInterface::ConnectionState FakeNetworkInterface::connectionState() const
++{
++    QString stateString = mPropertyMap["state"].toString();
++
++    if (stateString == "prepare")
++        return Solid::Control::NetworkInterface::Prepare;
++    else if (stateString == "configure")
++        return Solid::Control::NetworkInterface::Configure;
++    else if (stateString == "needuserkey")
++        return Solid::Control::NetworkInterface::NeedUserKey;
++    else if (stateString == "ipstart")
++        return Solid::Control::NetworkInterface::IPStart;
++    else if (stateString == "ipget")
++        return Solid::Control::NetworkInterface::IPGet;
++    else if (stateString == "ipcommit")
++        return Solid::Control::NetworkInterface::IPCommit;
++    else if (stateString == "activated")
++        return Solid::Control::NetworkInterface::Activated;
++    else if (stateString == "failed")
++        return Solid::Control::NetworkInterface::Failed;
++    else if (stateString == "cancelled")
++        return Solid::Control::NetworkInterface::Cancelled;
++    else
++        return Solid::Control::NetworkInterface::UnknownState;
++}
++
++int FakeNetworkInterface::signalStrength() const
++{
++    return mPropertyMap["signalstrength"].toInt();
++}
++
++int FakeNetworkInterface::designSpeed() const
++{
++    return mPropertyMap["speed"].toInt();
++}
++
++bool FakeNetworkInterface::isLinkUp() const
++{
++    return mPropertyMap["linkup"].toBool();
++}
++
++Solid::Control::NetworkInterface::Capabilities FakeNetworkInterface::capabilities() const
++{
++    QStringList capStrings = mPropertyMap["capabilities"].toString().simplified().split(',');
++
++    Solid::Control::NetworkInterface::Capabilities caps = 0;
++    if (capStrings.contains("manageable"))
++        caps |= Solid::Control::NetworkInterface::IsManageable;
++    if (capStrings.contains("carrierdetect"))
++        caps |= Solid::Control::NetworkInterface::SupportsCarrierDetect;
++    if (capStrings.contains("wirelessscan"))
++        caps |= Solid::Control::NetworkInterface::SupportsWirelessScan;
++
++    return caps;
++}
++
++QObject * FakeNetworkInterface::createNetwork(const QString  & uni)
++{
++    if (mNetworks.contains(uni))
++    {
++        kDebug() << "found " << uni;
++        return mNetworks[uni];
++    }
++    else
++        kDebug() << "NOT found " << uni;
++        return 0;
++}
++
++QStringList FakeNetworkInterface::networks() const
++{
++    return mNetworks.keys();
++}
++void FakeNetworkInterface::setActive(bool active)
++{
++    mPropertyMap.insert("active", QVariant(active));
++}
++
++void FakeNetworkInterface::injectNetwork(const QString  & uni, FakeNetwork * net)
++{
++   mNetworks.insert(uni, net);
++}
++
++#include "fakenetworkinterface.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/tests/fakenetworktest.cpp
+@@ -0,0 +1,38 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++// KDE-QTestLib include
++#include <qtest_kde.h>
++
++#include "fakenetworkmanager.h"
++
++#include "fakenetworktest.h"
++
++QTEST_KDEMAIN_CORE(FakeNetworking_Test)
++
++void FakeNetworking_Test::testFakeNetworking()
++{
++    FakeNetworkManager *fnm = new FakeNetworkManager(0, QStringList(), TEST_DATA);
++    QVERIFY(!fnm->networkInterfaces().isEmpty());
++    QVERIFY(fnm->createNetworkInterface("/org/kde/solid/fakenet/eth0") != 0);
++    QVERIFY(fnm->createNetworkInterface("/org/kde/wobbly/jellynet/eth0") == 0);
++    delete fnm;
++}
++
++#include "fakenetworktest.moc"
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/tests/fakenetworktest.h
+@@ -0,0 +1,32 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKEBACKENDTEST_H
++#define FAKEBACKENDTEST_H
++
++#include <QObject>
++
++class FakeNetworking_Test : public QObject
++{
++    Q_OBJECT
++private slots:
++    void testFakeNetworking();
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/tests/CMakeLists.txt
+@@ -0,0 +1,18 @@
++set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
++
++include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/.. )
++
++########### next target ###############
++
++set(fakenetworktest_SRCS fakenetworktest.cpp )
++
++
++kde4_add_unit_test(fakenetworktest ${fakenetworktest_SRCS})
++
++target_link_libraries(fakenetworktest solid_fakenet_static solidcontrolifaces ${KDE4_KDECORE_LIBS} ${QT_QTTEST_LIBRARY} )
++add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../fakenetworking.xml\\"")
++
++########### install files ###############
++
++
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakewirelessnetwork.h
+@@ -0,0 +1,94 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_WIRELESSNETWORK_H
++#define FAKE_WIRELESSNETWORK_H
++
++#include <QString>
++#include <QVariant>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/wirelessnetwork.h>
++#include "fakenetwork.h"
++
++namespace Solid {
++    class Authentication;
++}
++
++using namespace Solid::Control::Ifaces;
++/**
++ * Fakes a wireless network.
++ * TODO: Add some kind of dynamic behaviour
++ */
++class KDE_EXPORT FakeWirelessNetwork : public FakeNetwork, virtual public Solid::Control::Ifaces::WirelessNetwork
++{
++Q_OBJECT
++Q_INTERFACES(Solid::Control::Ifaces::WirelessNetwork)
++
++public:
++    FakeWirelessNetwork(const QString  & uni, const QMap<QString, QVariant>  & propertyMap,
++                 QObject * parent = 0);
++    virtual ~FakeWirelessNetwork();
++
++    // PHY stuff
++    int signalStrength() const;
++
++    int bitrate() const;
++
++    double frequency() const;
++
++    Solid::Control::WirelessNetwork::Capabilities capabilities() const;
++
++    // Service Set stuff
++    QString essid() const;
++
++    Solid::Control::WirelessNetwork::OperationMode mode() const;
++
++    bool isAssociated() const;
++
++    bool isEncrypted() const;
++
++    bool isHidden() const;
++
++    /**
++     * List of access points or ad hoc network nodes making up the
++     * network that are currently visible to the card.
++     */
++    MacAddressList bssList() const;
++
++    Solid::Control::Authentication *authentication() const;
++    /**
++     * set the authentication currently in use on this network
++     */
++    void setAuthentication(Solid::Control::Authentication *);
++Q_SIGNALS:
++    void signalStrengthChanged(int);
++    void bitrateChanged(int);
++    void associationChanged(bool);
++    /**
++        * Emitted when the network requires authentication data in order to be able to connect.
++        * Respond to this by calling setAuthentication.
++        */
++    void authenticationNeeded();
++private:
++    Solid::Control::Authentication * mAuthentication;
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetwork.h
+@@ -0,0 +1,62 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_NETWORK_H
++#define FAKE_NETWORK_H
++
++#include <QStringList>
++#include <QVariant>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/network.h>
++
++using namespace Solid::Control::Ifaces;
++
++class KDE_EXPORT FakeNetwork : public QObject, virtual public Solid::Control::Ifaces::Network
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Control::Ifaces::Network)
++public:
++    FakeNetwork(const QString  & uni, const QMap<QString, QVariant>  & propertyMap,
++                 QObject * parent = 0);
++    virtual ~FakeNetwork();
++
++    QList<QNetworkAddressEntry> addressEntries() const;
++
++    QString route() const;
++
++    QList<QHostAddress> dnsServers() const;
++
++    void setActivated(bool);
++    bool isActive() const;
++
++    QString uni() const;
++Q_SIGNALS:
++    void ipDetailsChanged();
++    void activationStateChanged(bool);
++
++protected:
++    QList<QHostAddress> stringlistToKIpAddress( const QStringList  & addrStringList) const;
++    QList<QNetworkAddressEntry> stringlistsToQNetworkAddressEntries(const QStringList &,const QStringList &,const QStringList  &) const;
++    QMap<QString, QVariant> mPropertyMap;
++};
++
++#endif
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/module.cpp
+@@ -0,0 +1,27 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#include "fakenetworkmanager.h"
++
++// KDE includes
++#include <kgenericfactory.h>
++
++typedef KGenericFactory<FakeNetworkManager, Solid::Control::Ifaces::NetworkManager> FakeNetBackendFactory;
++K_EXPORT_COMPONENT_FACTORY(solid_fake_netmgmt, FakeNetBackendFactory("fakenetbackend"))
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetworkinterface.h
+@@ -0,0 +1,70 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef FAKE_NETWORK_INTERFACE_H
++#define FAKE_NETWORK_INTERFACE_H
++
++#include <QString>
++#include <QVariant>
++
++#include <kdemacros.h>
++
++#include <solid/control/ifaces/networkinterface.h>
++
++using namespace Solid::Control::Ifaces;
++
++class FakeNetwork;
++
++class KDE_EXPORT FakeNetworkInterface : public Solid::Control::Ifaces::NetworkInterface
++{
++    friend class FakeNetworkManager;
++    Q_OBJECT
++    Q_INTERFACES(Solid::Control::Ifaces::NetworkInterface)
++public:
++        FakeNetworkInterface(const QMap<QString, QVariant>  & propertyMap,
++                          QObject *parent = 0);
++        virtual ~FakeNetworkInterface();
++        QString uni() const;
++        bool isActive() const;
++        Solid::Control::NetworkInterface::Type type() const;
++        Solid::Control::NetworkInterface::ConnectionState connectionState() const;
++        int signalStrength() const;
++        int designSpeed() const;
++        bool isLinkUp() const;
++        Solid::Control::NetworkInterface::Capabilities capabilities() const;
++        QObject * createNetwork(const QString  & uni);
++        QStringList networks() const;
++    Q_SIGNALS:
++        void activeChanged(bool);
++        void linkUpChanged(bool);
++        void signalStrengthChanged(int);
++        void connectionStateChanged(int /*NetworkStatus::ConnectionState */);
++        void networkAppeared(const QString  & uni);
++        void networkDisappeared(const QString  & uni);
++
++    protected:
++        /* These methods are operations that are carried out by the manager
++           In a real backend they would be events coming up from the network layer */
++        void setActive(bool active);
++        void injectNetwork(const QString  & uni, FakeNetwork * net);
++        QMap<QString, FakeNetwork *> mNetworks;
++        QMap<QString, QVariant> mPropertyMap;
++};
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetworkmanager.cpp
+@@ -0,0 +1,295 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++#include <QFile>
++#include <QtXml>
++#include <QLatin1String>
++
++#include <kstandarddirs.h>
++#include <kdebug.h>
++
++#include "fakenetworkmanager.h"
++#include "fakenetwork.h"
++#include "fakewirelessnetwork.h"
++
++FakeAuthenticationValidator::FakeAuthenticationValidator(QObject * parent) : QObject(parent)
++{
++}
++
++FakeAuthenticationValidator::~FakeAuthenticationValidator()
++{
++}
++
++bool FakeAuthenticationValidator::validate(const Solid::Control::Authentication *)
++{
++    return true;
++}
++
++FakeNetworkManager::FakeNetworkManager(QObject * parent, const QStringList  &) : Solid::Control::Ifaces::NetworkManager(parent), mAuthValidator(0)
++{
++    mUserNetworkingEnabled = true;
++    mUserWirelessEnabled = true;
++
++    mXmlFile = KStandardDirs::locate("data", "solidfakebackend/fakenetworking.xml");
++
++//     QDBusConnection::sessionBus().registerObject("/org/kde/solid/fake", this, QDBusConnection::ExportNonScriptableSlots);
++
++    parseNetworkingFile();
++}
++
++FakeNetworkManager::FakeNetworkManager(QObject * parent, const QStringList &, const QString &xmlFile) : Solid::Control::Ifaces::NetworkManager(parent), mAuthValidator(0)
++{
++    mUserNetworkingEnabled = true;
++    mUserWirelessEnabled = true;
++
++    mXmlFile = xmlFile;
++    if (mXmlFile.isEmpty())
++    {
++       kDebug() << "Falling back to installed networking xml";
++       mXmlFile = KStandardDirs::locate("data", "solidfakebackend/fakenetworking.xml");
++    }
++    parseNetworkingFile();
++}
++
++FakeNetworkManager::~FakeNetworkManager()
++{
++    delete mAuthValidator;
++}
++
++QStringList FakeNetworkManager::networkInterfaces() const
++{
++    return mNetworkInterfaces.keys();
++}
++
++QStringList FakeNetworkManager::activeNetworkInterfaces() const
++{
++    QStringList activeDevices;
++    QMapIterator<QString, FakeNetworkInterface *> it(mNetworkInterfaces);
++    while (it.hasNext())
++    {
++        it.next();
++        FakeNetworkInterface * netDevice = it.value();
++        if (netDevice->isActive())
++            activeDevices.append(netDevice->uni());
++    }
++    return activeDevices;
++}
++
++QObject * FakeNetworkManager::createNetworkInterface(const QString  & undi)
++{
++    if (mNetworkInterfaces.contains(undi))
++        return mNetworkInterfaces[undi];
++    else
++        return 0;
++}
++
++QObject * FakeNetworkManager::createAuthenticationValidator()
++{
++    if (mAuthValidator == 0)
++        mAuthValidator = new FakeAuthenticationValidator(this);
++    return mAuthValidator;
++}
++
++bool FakeNetworkManager::isWirelessEnabled() const
++{
++    QMapIterator<QString, FakeNetworkInterface *> it(mNetworkInterfaces);
++    while (it.hasNext())
++    {
++        it.next();
++        FakeNetworkInterface * netDevice = it.value();
++        if (netDevice->type() == Solid::Control::NetworkInterface::Ieee80211)
++            if (netDevice->isActive())
++                return true;
++    }
++    return false;
++}
++
++bool FakeNetworkManager::isNetworkingEnabled() const
++{
++    QMapIterator<QString, FakeNetworkInterface *> it(mNetworkInterfaces);
++    while (it.hasNext())
++    {
++        it.next();
++        FakeNetworkInterface * netDevice = it.value();
++        if (netDevice->isActive())
++            return true;
++    }
++    return false;
++}
++
++void FakeNetworkManager::setWirelessEnabled(bool enabled)
++{
++    QMapIterator<QString, FakeNetworkInterface *> it(mNetworkInterfaces);
++    if (mUserNetworkingEnabled)
++    {
++        while (it.hasNext())
++        {
++            it.next();
++            FakeNetworkInterface * netDevice = it.value();
++            if (netDevice->type() == Solid::Control::NetworkInterface::Ieee80211)
++                netDevice->setActive(enabled);
++        }
++    }
++    mUserWirelessEnabled = enabled;
++}
++
++void FakeNetworkManager::setNetworkingEnabled(bool enabled)
++{
++    QMapIterator<QString, FakeNetworkInterface *> it(mNetworkInterfaces);
++    while (it.hasNext())
++    {
++        it.next();
++        FakeNetworkInterface * netDevice = it.value();
++        if ((netDevice->type() == Solid::Control::NetworkInterface::Ieee80211 && mUserWirelessEnabled)
++           || netDevice->type() == Solid::Control::NetworkInterface::Ieee8023)
++            netDevice->setActive(enabled);
++    }
++    mUserNetworkingEnabled = enabled;
++}
++
++void FakeNetworkManager::notifyHiddenNetwork(const QString  & essid)
++{
++    // look up the device hosting the hidden net.
++    // move the hidden net into the device's networks list
++}
++
++void FakeNetworkManager::parseNetworkingFile()
++{
++    QFile machineFile(mXmlFile);
++    if (!machineFile.open(QIODevice::ReadOnly))
++    {
++        kDebug() << "Error while opening " << mXmlFile;
++        return;
++    }
++
++    QDomDocument fakeDocument;
++    if (!fakeDocument.setContent(&machineFile))
++    {
++        kDebug() << "Error while creating the QDomDocument.";
++        machineFile.close();
++        return;
++    }
++    machineFile.close();
++
++    kDebug() << "Parsing fake computer XML: " << mXmlFile;
++    QDomElement mainElement = fakeDocument.documentElement();
++    QDomNode node = mainElement.firstChild();
++    while (!node.isNull())
++    {
++        QDomElement tempElement = node.toElement();
++        if (!tempElement.isNull() && tempElement.tagName() == QLatin1String("device"))
++        {
++            FakeNetworkInterface *tempDevice = parseDeviceElement(tempElement);
++            if(tempDevice)
++            {
++               mNetworkInterfaces.insert(tempDevice->uni(), tempDevice);
++// Use the DeviceManager for now, the udi/uni should
++//                emit deviceAdded(tempDevice->uni());
++            }
++        }
++        node = node.nextSibling();
++    }
++}
++
++FakeNetworkInterface *FakeNetworkManager::parseDeviceElement(const QDomElement &deviceElement)
++{
++    FakeNetworkInterface *device = 0;
++    QMap<QString,QVariant> propertyMap;
++    QString uni = deviceElement.attribute("uni");
++    propertyMap.insert("uni", uni);
++    kDebug() << "Listing device: " << uni;
++    propertyMap.insert("uni", QVariant(uni));
++    QList< FakeNetwork * > networks;
++
++    QDomNode childNode = deviceElement.firstChild();
++    while (!childNode.isNull())
++    {
++        QDomElement childElement = childNode.toElement();
++        //kDebug() << "found child=" << childElement.tagName();
++        if (!childElement.isNull() && childElement.tagName() == QLatin1String("property"))
++        {
++            QString propertyKey;
++            QVariant propertyValue;
++
++            propertyKey = childElement.attribute("key");
++            propertyValue = QVariant(childElement.text());
++            //kDebug() << "Got property key=" << propertyKey << ", value=" << propertyValue.toString();
++            propertyMap.insert(propertyKey, propertyValue);
++        }
++        else if (!childElement.isNull() && childElement.tagName() == QLatin1String("network"))
++        {
++            QString uni = childElement.attribute("uni");
++            kDebug() << "Listing properties: " << uni;
++            FakeNetwork * net = new FakeNetwork(uni, parseNetworkElement(childElement));
++            networks.append(net);
++        }
++        else if (!childElement.isNull() && childElement.tagName() == QLatin1String("wireless"))
++        {
++            QString uni = childElement.attribute("uni");
++            kDebug() << "Listing properties: " << uni;
++            FakeNetwork * wifi = new FakeWirelessNetwork(uni, parseNetworkElement(childElement));
++            networks.append(wifi);
++        }
++        childNode = childNode.nextSibling();
++    }
++    //kDebug() << "Done listing. ";
++
++/*    if (!propertyMap.isEmpty())
++    { */
++        kDebug() << "Creating FakeNetworkDevice for " << uni;
++        device = new FakeNetworkInterface(propertyMap);
++        QListIterator< FakeNetwork * > it (networks);
++        while (it.hasNext())
++        {
++            FakeNetwork * net = it.next();
++            kDebug() << "Injecting " << net->uni();
++            device->injectNetwork(net->uni(), net);
++        }
++
++//     }
++
++    return device;
++}
++
++QMap<QString,QVariant> FakeNetworkManager::parseNetworkElement(const QDomElement &deviceElement)
++{
++    QMap<QString,QVariant> propertyMap;
++
++    QDomNode propertyNode = deviceElement.firstChild();
++    while (!propertyNode.isNull())
++    {
++        QDomElement propertyElement = propertyNode.toElement();
++        if (!propertyElement.isNull() && propertyElement.tagName() == QLatin1String("property"))
++        {
++            QString propertyKey;
++            QVariant propertyValue;
++
++            propertyKey = propertyElement.attribute("key");
++            propertyValue = QVariant(propertyElement.text());
++            //kDebug() << "Got property key=" << propertyKey << ", value=" << propertyValue.toString();
++            propertyMap.insert(propertyKey, propertyValue);
++        }
++
++        propertyNode = propertyNode.nextSibling();
++    }
++    return propertyMap;
++}
++
++
++#include "fakenetworkmanager.moc"
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/CMakeLists.txt
+@@ -0,0 +1,30 @@
++
++add_subdirectory( tests )
++
++########### next target ###############
++
++set(solid_fakenet_PART_SRCS
++   fakenetwork.cpp 
++   fakewirelessnetwork.cpp
++   fakenetworkinterface.cpp
++   fakenetworkmanager.cpp
++)
++
++
++kde4_add_library(solid_fakenet_static STATIC ${solid_fakenet_PART_SRCS} )
++target_link_libraries(solid_fakenet_static solidcontrolifaces ${KDE4_KDECORE_LIBS} ${QT_QTXML_LIBRARY} )
++
++kde4_add_plugin(solid_fakenet module.cpp ${solid_fakenet_PART_SRCS})
++
++
++target_link_libraries(solid_fakenet solidcontrolifaces ${KDE4_KDECORE_LIBS} ${QT_QTXML_LIBRARY} )
++
++install(TARGETS solid_fakenet DESTINATION ${PLUGIN_INSTALL_DIR}  )
++
++
++########### install files ###############
++
++install( FILES solid_fakenet.desktop DESTINATION ${SERVICES_INSTALL_DIR}/solidbackends  )
++install( FILES fakenetworking.xml DESTINATION ${DATA_INSTALL_DIR}/solidfakenetbackend  )
++
++
+--- /dev/null
++++ b/libs/solid/control/backends/fakenet/fakenetworking.xml
+@@ -0,0 +1,77 @@
++<machine>
++
++    <device uni="/org/kde/solid/fakenet/eth0">
++        <property key="active">true</property>
++        <property key="type">ieee80211</property>
++        <property key="state">needuserkey</property>
++        <property key="signalstrength">90</property>
++        <property key="speed">83886080</property>
++        <property key="linkup">true</property>
++        <property key="capabilities">manageable,carrierdetect,wirelessscan</property>
++
++        <wireless uni="/org/kde/solid/fakenet/eth0/net0">
++            <property key="addresses">193.1.234.22</property>
++            <property key="subnet">193.1.234.0</property>
++            <property key="broadcast">193.1.234.255</property>
++            <property key="dns">193.1.214.50,193.1.214.55</property>
++            <property key="active">true</property>
++            <property key="signalstrength">45</property>
++            <property key="bitrate">56623104</property>
++            <property key="frequency">11</property>
++            <property key="capabilities">wep,wpa,wpa2</property>
++            <property key="essid">aKademy</property>
++            <property key="encrypted">true</property>
++            <property key="bsslist">00:0D:65:48:6C:06,00:12:01:B5:21:E0</property>
++        </wireless>
++        <wireless uni="/org/kde/solid/fakenet/eth0/net1">
++            <property key="active">false</property>
++            <property key="signalstrength">60</property>
++            <property key="bitrate">11534336</property>
++            <property key="frequency">9</property>
++            <property key="capabilities"></property>
++            <property key="essid">Kennedy's</property>
++            <property key="encrypted">false</property>
++            <property key="bsslist">00:0D:65:48:7A:2E</property>
++        </wireless>
++        <wireless uni="/org/kde/solid/fakenet/eth0/net2">
++            <property key="active">false</property>
++            <property key="signalstrength">30</property>
++            <property key="bitrate">56623104</property>
++            <property key="frequency">5</property>
++            <property key="capabilities">wep</property>
++            <property key="hidden">true</property>
++            <property key="encrypted">true</property>
++            <property key="bsslist">00:0D:65:48:6B:B8</property>
++        </wireless>
++        <wireless uni="/org/kde/solid/fakenet/eth0/net3">
++            <property key="active">false</property>
++            <property key="signalstrength">80</property>
++            <property key="bitrate">56623104</property>
++            <property key="frequency">7</property>
++            <property key="capabilities">wpa2</property>
++            <property key="hidden">true</property>
++            <property key="encrypted">true</property>
++            <property key="bsslist">00:14:1B:B6:73:F0</property>
++        </wireless>
++    </device>
++
++    <device uni="/org/kde/solid/fakenet/eth1">
++        <property key="active">true</property>
++        <property key="type">ieee8023</property>
++        <property key="state">connected</property>
++        <property key="signalstrength">100</property>
++        <property key="speed">1073741824</property>
++        <property key="linkup">true</property>
++        <property key="capabilities">manageable,carrierdetect</property>
++
++        <network uni="/org/kde/solid/fakenet/eth1/net0">
++            <property key="ipv4addresses">193.1.233.16</property>
++            <property key="ipv6addresses">fe80::20a:e4ff:fed9:b407/64</property>
++            <property key="subnet">193.1.233.0</property>
++            <property key="broadcast">193.1.233.255</property>
++            <property key="dns">193.1.219.90,193.1.219.94</property>
++            <property key="active">false</property>
++        </network>
++    </device>
++
++</machine>
+--- /dev/null
++++ b/libs/solid/control/frontendobject_p.h
+@@ -0,0 +1,49 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006-2007 Kevin Ottens <ervin at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++
++#ifndef SOLID_FRONTENDOBJECT_P_H
++#define SOLID_FRONTENDOBJECT_P_H
++
++class QObject;
++
++namespace Solid
++{
++namespace Control
++{
++    class FrontendObjectPrivate
++    {
++    public:
++        FrontendObjectPrivate(QObject *parent);
++        virtual ~FrontendObjectPrivate();
++
++        QObject *parent() const;
++
++        QObject *backendObject() const;
++        virtual void setBackendObject(QObject *object);
++
++        virtual void _k_destroyed(QObject *object);
++
++    private:
++        QObject *m_parent;
++        QObject *m_backendObject;
++    };
++}
++}
++
++#endif
+--- /dev/null
++++ b/libs/solid/control/bluetoothsecurity.cpp
+@@ -0,0 +1,132 @@
++/*  This file is part of the KDE project
++    Copyright (C) 2006 Will Stephenson <wstephenson at kde.org>
++    Copyright (C) 2007 Daniel Gollub <dgollub at suse.de>
++    Copyright (C) 2007 Juan González <jaguilera at opsiland.info>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License version 2 as published by the Free Software Foundation.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++
++*/
++#include <QMetaMethod>
++
++#include <QMap>
++#include <QPair>
++#include <QStringList>
++
++#include "ifaces/bluetoothsecurity.h"
++
++#include "soliddefs_p.h"
++
++#include "bluetoothmanager.h"
++#include "bluetoothsecurity.h"
++#include "bluetoothremotedevice.h"
++
++#include "frontendobject_p.h"
++#include "managerbase_p.h"
++
++namespace Solid
++{
++namespace Control
++{
++    class BluetoothSecurityPrivate: public FrontendObjectPrivate
++    {
++        public:
++            BluetoothSecurityPrivate(QObject *parent)
++                :FrontendObjectPrivate(parent){};
++        QList<BluetoothPasskeyAgent *> registeredAgents;
++    };
++} //Control
++} //Solid
++
++Solid::Control::BluetoothSecurity::BluetoothSecurity()
++    :QObject(0),d(new BluetoothSecurityPrivate(this))
++{
++}
++
++Solid::Control::BluetoothSecurity::BluetoothSecurity(QObject *backendObject)
++    :QObject(backendObject),d(new BluetoothSecurityPrivate(this))
++{
++    d->setBackendObject(backendObject);
++}
++
++Solid::Control::BluetoothSecurity::~BluetoothSecurity()
++{
++}
++
++Solid::Control::BluetoothSecurity &Solid::Control::BluetoothSecurity::operator=(const Solid::Control::BluetoothSecurity & dev)
++{
++    if (dev.d) {
++        d->setBackendObject(dev.d->backendObject());
++    }
++    //FIXME We are loosing the reference to the agents here...
++    return *this;
++}
++
++void Solid::Control::BluetoothSecurity::setPasskeyAgent(Solid::Control::BluetoothPasskeyAgent * agent)
++{
++    SOLID_CALL(Solid::Control::Ifaces::BluetoothSecurity *,d->backendObject(),setPasskeyAgent(agent))
++}
++
++void Solid::Control::BluetoothSecurity::setAuthorizationAgent(Solid::Control::BluetoothAuthorizationAgent * agent)
++{
++    SOLID_CALL(Solid::Control::Ifaces::BluetoothSecurity *,d->backendObject(),setAuthorizationAgent(agent))
++}
++/****************************** BluetoothPasskeyAgent implementation ******************************/
++Solid::Control::BluetoothPasskeyAgent::BluetoothPasskeyAgent(QObject * parent,const QString &interface)
++    :QObject(parent)
++{
++    //TODO Auto register all subclasses on BluetoothSecurity?
++}
++
++QString Solid::Control::BluetoothPasskeyAgent::remote()
++{
++    return m_remote;
++}
++
++QString Solid::Control::BluetoothPasskeyAgent::requestPasskey(const QString & ubi, bool isNumeric)
++{
++    Q_UNUSED(ubi)
++    Q_UNUSED(isNumeric)
++    return "";
++}
++
++bool Solid::Control::BluetoothPasskeyAgent::confirmPasskey(const QString & ubi, const QString & passkey)
++{
++    Q_UNUSED(ubi)
++    Q_UNUSED(passkey)
++    return false;
++}
++
++void Solid::Control::BluetoothPasskeyAgent::displayPasskey(const QString & ubi, const QString & passkey)
++{
++    Q_UNUSED(ubi)
++    Q_UNUSED(passkey)
++}
++
++void Solid::Control::BluetoothPasskeyAgent::keypress(const QString & ubi)
++{
++    Q_UNUSED(ubi)
++}
++
++void Solid::Control::BluetoothPasskeyAgent::completedAuthentication(const QString & ubi)
++{
++    Q_UNUSED(ubi)
++}
++
++void Solid::Control::BluetoothPasskeyAgent::cancelAuthentication(const QString & ubi)
++{
++    Q_UNUSED(ubi)
++}
++
++#include "bluetoothsecurity.moc"
+--- /dev/null
++++ b/libs/solid/CMakeLists.txt
+@@ -0,0 +1,2 @@
++add_subdirectory( control )
++
+--- a/libs/kdm/kgreet_winbind.h
++++ b/libs/kdm/kgreet_winbind.h
+@@ -29,11 +29,13 @@
+ #include "kgreeterplugin.h"
+ 
+ #include <QObject>
++#include <QtCore/QTimer>
+ 
+ class KComboBox;
+ class KLineEdit;
+ class KSimpleConfig;
+ class QLabel;
++class K3ProcIO;
+ 
+ class KWinbindGreeter : public QObject, public KGreeterPlugin {
+ 	Q_OBJECT
+@@ -66,6 +68,9 @@
+ 	void slotLoginLostFocus();
+ 	void slotChangedDomain( const QString &dom );
+ 	void slotActivity();
++        void slotStartDomainList();
++        void slotReadDomainList();
++        void slotEndDomainList();
+ 
+   private:
+ 	void setActive( bool enable );
+@@ -78,7 +83,10 @@
+ 	KLineEdit *passwdEdit, *passwd1Edit, *passwd2Edit;
+ 	KSimpleConfig *stsFile;
+ 	QString fixedDomain, fixedUser, curUser;
+-	QStringList allUsers;
++	QStringList allUsers, mDomainListing;
++	K3ProcIO* m_domainLister;
++        QTimer mDomainListTimer;
++
+ 	Function func;
+ 	Context ctx;
+ 	int exp, pExp, has;
+--- a/libs/kdm/kgreet_winbind.cpp
++++ b/libs/kdm/kgreet_winbind.cpp
+@@ -32,6 +32,7 @@
+ #include <kcombobox.h>
+ #include <klineedit.h>
+ #include <kuser.h>
++#include <k3procio.h>
+ 
+ #include <QRegExp>
+ #include <QLayout>
+@@ -59,7 +60,7 @@
+ 
+ static int echoMode;
+ static char separator;
+-static QStringList domains;
++static QStringList staticDomains;
+ static QString defaultDomain;
+ 
+ static void
+@@ -103,6 +104,7 @@
+ 	domainCombo = 0;
+ 	loginEdit = 0;
+ 	passwdEdit = passwd1Edit = passwd2Edit = 0;
++	m_domainLister = 0;
+ 	if (ctx == ExUnlock || ctx == ExChangeTok)
+ 		splitEntity( KUser().loginName(), fixedDomain, fixedUser );
+ 	else
+@@ -138,8 +140,9 @@
+ 			connect( loginEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) );
+ 			connect( loginEdit, SIGNAL(textChanged( const QString & )), SLOT(slotActivity()) );
+ 			connect( loginEdit, SIGNAL(selectionChanged()), SLOT(slotActivity()) );
+-			domainCombo->addItems( domains );
+-			domainCombo->setCurrentIndex( domainCombo->findText( defaultDomain ) );
++			connect(&mDomainListTimer, SIGNAL(timeout()), SLOT(slotStartDomainList()));
++			domainCombo->addItems( staticDomains );
++			QTimer::singleShot(0, this, SLOT(slotStartDomainList()));
+ 		} else if (ctx != Login && ctx != Shutdown && grid) {
+ 			domainLabel = new QLabel( i18n("Domain:"), parent );
+ 			grid->addWidget( domainLabel, line, 0 );
+@@ -541,6 +544,67 @@
+ 		handler->gplugActivity();
+ }
+ 
++void
++KWinbindGreeter::slotStartDomainList()
++{
++    mDomainListTimer.stop();
++    mDomainListing.clear();
++
++    m_domainLister = new K3ProcIO;
++    connect(m_domainLister, SIGNAL(readReady(K3ProcIO*)), SLOT(slotReadDomainList()));
++    connect(m_domainLister, SIGNAL(processExited(K3Process*)), SLOT(slotEndDomainList()));
++
++    (*m_domainLister) << "wbinfo" << "--own-domain" << "--trusted-domains";
++    m_domainLister->setComm (K3Process::Stdout);
++    m_domainLister->start();
++}
++
++void
++KWinbindGreeter::slotReadDomainList()
++{
++    QString line;
++
++    while ( m_domainLister->readln( line ) != -1 ) {
++        mDomainListing.append(line);
++    }
++}
++
++void
++KWinbindGreeter::slotEndDomainList()
++{
++    delete m_domainLister;
++    m_domainLister = 0;
++
++    QStringList domainList;
++    domainList = staticDomains;
++
++    for (QStringList::const_iterator it = mDomainListing.begin();
++         it != mDomainListing.end(); ++it) {
++
++        if (!domainList.contains(*it))
++            domainList.append(*it);
++    }
++
++    QString current = domainCombo->currentText();
++
++    for (int i = 0; i < domainList.count(); ++i) {
++        if (i < domainCombo->count())
++            domainCombo->setItemText(i, domainList[i]);
++        else
++            domainCombo->insertItem(i, domainList[i]);
++    }
++
++    while (domainCombo->count() > domainList.count())
++        domainCombo->removeItem(domainCombo->count()-1);
++
++    domainCombo->setCurrentItem( current );
++
++    if (domainCombo->currentText() != current)
++        domainCombo->setCurrentItem( defaultDomain );
++
++    mDomainListTimer.start(5 * 1000);
++}
++
+ // factory
+ 
+ static bool init( const QString &,
+@@ -549,22 +613,10 @@
+ {
+ 	echoMode = getConf( ctx, "EchoPasswd", QVariant( -1 ) ).toInt();
+ 
+-	domains = getConf( ctx, "winbind.Domains", QVariant( "" ) ).toString().split( ':', QString::SkipEmptyParts );
+-	if (!domains.size()) {
+-		FILE *domfile = popen( "wbinfo --all-domains 2>/dev/null", "r" );
+-		if (domfile) {
+-			QString tmp;
+-			QTextStream is( domfile );
+-			while (!is.atEnd()) {
+-				is >> tmp;
+-				domains << tmp;
+-			}
+-			if (pclose( domfile )) // error
+-				domains = QStringList();
+-		}
+-		domains << "<local>";
+-	}
+-	defaultDomain = getConf( ctx, "winbind.DefaultDomain", QVariant( domains.first() ) ).toString();
++	staticDomains = getConf( ctx, "winbind.Domains", QVariant( "" ) ).toString().split( ':', QString::SkipEmptyParts );
++	if (!staticDomains.size())
++		staticDomains << "<local>";
++	defaultDomain = getConf( ctx, "winbind.DefaultDomain", QVariant( staticDomains.first() ) ).toString();
+ 	QString sepstr = getConf( ctx, "winbind.Separator", QVariant( QString() ) ).toString();
+ 	if (sepstr.isNull()) {
+ 		FILE *sepfile = popen( "wbinfo --separator 2>/dev/null", "r" );
+@@ -585,7 +637,7 @@
+ {
+ 	KGlobal::locale()->removeCatalog( "kgreet_winbind" );
+ 	// avoid static deletion problems ... hopefully
+-	domains.clear();
++	staticDomains.clear();
+ 	defaultDomain.clear();
+ }
+ 
+--- a/libs/kdm/CMakeLists.txt
++++ b/libs/kdm/CMakeLists.txt
+@@ -22,7 +22,7 @@
+ kde4_add_plugin(kgreet_winbind ${kgreet_winbind_PART_SRCS})
+ 
+ 
+-target_link_libraries(kgreet_winbind  ${KDE4_KDEUI_LIBS})
++target_link_libraries(kgreet_winbind  ${KDE4_KDEUI_LIBS} ${KDE4_KDE3SUPPORT_LIBS} )
+ 
+ install(TARGETS kgreet_winbind  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/libs/CMakeLists.txt
++++ b/libs/CMakeLists.txt
+@@ -1,4 +1,6 @@
+-add_subdirectory(workspace)
+-add_subdirectory(plasma)
+ add_subdirectory(kdm)
++add_subdirectory(solid)
+ add_subdirectory(taskmanager)
++add_subdirectory(plasma)
++add_subdirectory(workspace)
++
+--- a/libs/plasma/karambamanager.h
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/*
+- *   Copyright 2007 Alexander Wiedenbruch <wirr01 at gmail.com>
+- *
+- *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU Library General Public License as
+- *   published by the Free Software Foundation; either version 2, or
+- *   (at your option) any later version.
+- *
+- *   This program is distributed in the hope that it will be useful,
+- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- *   GNU General Public License for more details
+- *
+- *   You should have received a copy of the GNU Library General Public
+- *   License along with this program; if not, write to the
+- *   Free Software Foundation, Inc.,
+- *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+- */
+-
+-#ifndef KARAMBA_MANAGER_H
+-#define KARAMBA_MANAGER_H
+-
+-#include <QtCore/QObject>
+-#include <QtGui/QGraphicsScene>
+-
+-#include <KUrl>
+-
+-#include <plasma/plasma_export.h>
+-
+-extern "C" {
+-    typedef QGraphicsItemGroup* (*startKaramba)(const KUrl &theme, QGraphicsView *view);
+-}
+-
+-namespace KarambaManager
+-{
+-PLASMA_EXPORT QGraphicsItemGroup* loadKaramba(const KUrl &themePath, QGraphicsScene *scene);
+-}
+-
+-#endif
+--- a/libs/plasma/karambamanager.cpp
++++ /dev/null
+@@ -1,47 +0,0 @@
+-/*
+- *   Copyright 2007 Alexander Wiedenbruch <wirr01 at gmail.com>
+- *
+- *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU Library General Public License as
+- *   published by the Free Software Foundation; either version 2, or
+- *   (at your option) any later version.
+- *
+- *   This program is distributed in the hope that it will be useful,
+- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- *   GNU General Public License for more details
+- *
+- *   You should have received a copy of the GNU Library General Public
+- *   License along with this program; if not, write to the
+- *   Free Software Foundation, Inc.,
+- *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+- */
+-
+-#include "karambamanager.h"
+-
+-#include <QFile>
+-
+-#include <KLibLoader>
+-#include <KLibrary>
+-#include <KDebug>
+-
+-QGraphicsItemGroup* KarambaManager::loadKaramba(const KUrl &themePath, QGraphicsScene *scene)
+-{
+-    QString karambaLib = QFile::encodeName(KLibLoader::self()->findLibrary(QLatin1String("libsuperkaramba")));
+-
+-    QGraphicsItemGroup *karamba = 0;
+-
+-    KLibrary *lib = KLibLoader::self()->library(karambaLib);
+-    if (lib) {
+-        startKaramba createKaramba = 0;
+-        createKaramba = (startKaramba)lib->resolveFunction("startKaramba");
+-        if (createKaramba) {
+-            karamba = createKaramba(themePath, scene->views()[0]);
+-        }
+-    } else {
+-        kWarning() << "Could not load " << karambaLib ;
+-    }
+-
+-    return karamba;
+-}
+-
+--- a/libs/plasma/abstractrunner.h
++++ b/libs/plasma/abstractrunner.h
+@@ -163,8 +163,8 @@
+ 
+ } // Plasma namespace
+ 
+-#define K_EXPORT_KRUNNER_RUNNER( libname, classname )     \
++#define K_EXPORT_PLASMA_RUNNER( libname, classname )     \
+ K_PLUGIN_FACTORY(factory, registerPlugin<classname>();) \
+-K_EXPORT_PLUGIN(factory("krunner_" #libname))
++K_EXPORT_PLUGIN(factory("plasma_runner_" #libname))
+ 
+ #endif
+--- a/libs/plasma/servicetypes/plasma-containment.desktop
++++ b/libs/plasma/servicetypes/plasma-containment.desktop
+@@ -4,7 +4,8 @@
+ X-KDE-ServiceType=Plasma/Containment
+ 
+ Comment=Plasma applet container and background painter
+-Comment[el]=Περιέχει εφαρμογίδια Plasma και σχεδιάζει το φόντο
++Comment[el]=Περιέχει μικροεφαρμογές Plasma και σχεδιάζει το φόντο
++Comment[et]=Plasma apleti konteiner ja tausta joonistaja
+ Comment[ja]=Plasma アプレットのコンテナおよび背景描画
+ Comment[km]=ឧបករណ៍​ផ្ទុក​អាប់ភ្លេត​ប្លាស្មា និង​ឧបករណ៍​គូរ​ផ្ទៃ​ខាងក្រោយ
+ Comment[ko]=Plasma 애플릿 컨테이너와 배경 칠하는 도구
+--- a/libs/plasma/servicetypes/plasma-dataengine.desktop
++++ b/libs/plasma/servicetypes/plasma-dataengine.desktop
+@@ -9,6 +9,7 @@
+ Comment[de]=Plasma Daten-Treiber
+ Comment[el]=Μηχανή δεδομένων Plasma
+ Comment[es]=Motor de datos de Plasma
++Comment[et]=Plasma andmete mootor
+ Comment[fa]=موتور داده پلاسما
+ Comment[ga]=Inneall Sonraí Plasma
+ Comment[he]=מנוע נתונים של Plasma
+@@ -18,7 +19,7 @@
+ Comment[km]=ម៉ាស៊ីន​ទិន្នន័យ​ប្លាស្មា
+ Comment[ko]=Plasma 데이터 엔진
+ Comment[nb]=Plasma datamotor
+-Comment[nds]=Plasma-Datenhanteerkarn
++Comment[nds]=Plasma-Hanteerkarn
+ Comment[ne]=प्लाज्मा डेटा इन्जिन
+ Comment[nl]=Plasma data-engine
+ Comment[nn]=Plasma-datamotor
+--- a/libs/plasma/servicetypes/plasma-applet.desktop
++++ b/libs/plasma/servicetypes/plasma-applet.desktop
+@@ -8,14 +8,15 @@
+ Comment[bg]=Аплет за Plasma
+ Comment[csb]=Aplet plazmë
+ Comment[de]=Plasma-Miniprogramm
+-Comment[el]=Εφαρμογίδιο plasma
++Comment[el]=Μικροεφαρμογή plasma
+ Comment[es]=Miniaplicación de Plasma
++Comment[et]=Plasma aplett
+ Comment[fa]=برنامک پلاسما
+ Comment[ga]=Feidhmchláirín Plasma
+ Comment[he]=יישומון Plasma
+ Comment[ja]=Plasma アプレット
+ Comment[kk]=Plasma апплеті
+-Comment[km]=អាប់​ភ្លេត​​ប្លាស្មា​
++Comment[km]=អាប់ភ្លេត​​ប្លាស្មា​
+ Comment[ko]=Plasma 애플릿
+ Comment[nb]=Plasma miniprogram
+ Comment[nds]=Plasma-Lüttprogramm
+--- /dev/null
++++ b/libs/plasma/servicetypes/plasma-runner.desktop
+@@ -0,0 +1,41 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=ServiceType
++X-KDE-ServiceType=Plasma/Runner
++
++Comment=KRunner plugin
++Comment[ar]=KRunner ملحق
++Comment[be]=Утулка Krunner
++Comment[bg]=Приставка за KRunner
++Comment[csb]=Wtëkôcze zrëszôcza KRunner
++Comment[de]=Programmstarter-Modul
++Comment[el]=Πρόσθετο του KRunner
++Comment[es]=Complementos de Konqueror
++Comment[et]=KRunneri plugin
++Comment[fa]=وصلۀ KRunner
++Comment[ga]=Breiseáin KRunner
++Comment[he]=תוסף של KRunner
++Comment[it]=Plugin di KRunner
++Comment[ja]=KRunner プラグイン
++Comment[kk]=KRunner плагин модулі
++Comment[km]=កម្មវិធី​ជំនួយ KRunner
++Comment[ko]=KRunner 플러그인
++Comment[nb]=KRunner-programtillegg
++Comment[nds]=KRunner-Moduul
++Comment[ne]=केडीई रनर प्लगइन
++Comment[nl]=KRunner-plugin
++Comment[nn]=KRunner-tillegg
++Comment[pa]=ਕੇ-ਰਨਰ ਪਲੱਗਇਨ
++Comment[pt]='Plugin' do KRunner
++Comment[pt_BR]=Plugin do KRunner
++Comment[sl]=Vstavek za KRunner
++Comment[sv]=Krunner-insticksprogram
++Comment[th]=ปลั๊กอินของ KRunner
++Comment[vi]=Bổ sung KRunner
++Comment[x-test]=xxKRunner pluginxx
++Comment[zh_CN]=KRunner 插件
++Comment[zh_TW]=KRunner 外掛程式
++
++[PropertyDef::X-Plasma-RunnerPhase]
++Type=QString
++
+--- a/libs/plasma/servicetypes/plasma-animator.desktop
++++ b/libs/plasma/servicetypes/plasma-animator.desktop
+@@ -8,6 +8,7 @@
+ Comment[de]=Plasma Animations-Treiber
+ Comment[el]=Μηχανή κίνησης του Plasma
+ Comment[es]=Motor de animaciones de Plasma
++Comment[et]=Plasma animatsiooni mootor
+ Comment[fa]=موتور پویانمایی پلاسما
+ Comment[ga]=Inneall Beochana Plasma
+ Comment[he]=מנוע האנימציה של Plasma
+--- a/libs/plasma/servicetypes/plasma-scriptengine.desktop
++++ b/libs/plasma/servicetypes/plasma-scriptengine.desktop
+@@ -8,13 +8,14 @@
+ Comment[de]=Skriptsprachen-Erweiterung für Plasma
+ Comment[el]=Επέκταση γλώσσας σεναρίων για το Plasma
+ Comment[es]=Extensión de lenguaje de programación para Plasma
++Comment[et]=Plasma skriptikeele laiend
+ Comment[fa]=پسوند زبان اسکریپتی برای پلاسما
+ Comment[ga]=Eisínteacht teanga scriptithe le haghaidh Plasma
+ Comment[he]=הרחבת שפת תסריטים של Plasma
+ Comment[it]=Estensione per i linguaggi di script per Plasma
+ Comment[ja]=Plasma のためのスクリプト言語拡張
+ Comment[kk]=Plasma-ның скрипт тілі
+-Comment[km]=ផ្នែក​បន្ថែម​ការ​ស្គ្រីប​ភាសា​សម្រាប់​ប្លាស្មា
++Comment[km]=ផ្នែក​បន្ថែម​​ភាសា​ស្គ្រីប​សម្រាប់​​ប្លាស្មា
+ Comment[ko]=Plasma를 위한 스크립트 언어 확장
+ Comment[nb]=Skriptspråk-utvidelse for Plasma
+ Comment[nds]=Skriptspraak-Verwiedern för Plasma
+--- a/libs/plasma/phase.h
++++ b/libs/plasma/phase.h
+@@ -39,7 +39,6 @@
+ {
+     Q_OBJECT
+     Q_ENUMS( Animation )
+-    Q_ENUMS( RenderOp )
+     Q_ENUMS( CurveShape )
+     Q_ENUMS( Movement )
+ 
+@@ -58,11 +57,6 @@
+         ElementDisappear /*<< Animate the disappearance of an element */
+     };
+ 
+-    enum RenderOp
+-    {
+-        RenderBackground = 0 /*<< Render the background of an item */
+-    };
+-
+     enum CurveShape
+     {
+         EaseInCurve = 0,
+@@ -89,15 +83,40 @@
+ 
+     Q_INVOKABLE void animateItem(QGraphicsItem* item, Animation anim);
+     Q_INVOKABLE void moveItem(QGraphicsItem* item, Movement movement, const QPoint &destination);
+-    Q_INVOKABLE void render(QGraphicsItem* item, QImage& image, RenderOp op);
+ 
+-    AnimId animateElement(QGraphicsItem *obj, ElementAnimation);
+-    void stopElementAnimation(AnimId id);
+-    void setAnimationPixmap(AnimId id, const QPixmap &pixmap);
+-    QPixmap animationResult(AnimId id);
++    /**
++     * Starts a custom animation, preventing the need to create a timeline
++     * with its own timer tick.
++     *
++     * @arg frames the number of frames this animation should persist for
++     * @arg duration the length, in milliseconds, the animation will take
++     * @arg curve the curve applied to the frame rate
++     * @arg receive the object that will handle the actual animation
++     * @arg method the method name of slot to be invoked on each update.
++     *             It must take a qreal. So if the slot is animate(qreal),
++     *             pass in "animate" as the method parameter.
++     *
++     * @return an id that can be used to identify this animation.
++     */
++    Q_INVOKABLE AnimId customAnimation(int frames, int duration, Phase::CurveShape curve,
++                                       QObject* receiver, const char* method);
++
++    /**
++     * Stops a custom animation. Note that it is not necessary to call
++     * this on object destruction, as custom animations associated with
++     * a given QObject are cleaned up automatically on QObject destruction.
++     *
++     * @arg id the id of the animation as returned by customAnimation
++     */
++    Q_INVOKABLE void stopCustomAnimation(AnimId id);
++
++    Q_INVOKABLE AnimId animateElement(QGraphicsItem *obj, ElementAnimation);
++    Q_INVOKABLE void stopElementAnimation(AnimId id);
++    Q_INVOKABLE void setAnimationPixmap(AnimId id, const QPixmap &pixmap);
++    Q_INVOKABLE QPixmap animationResult(AnimId id);
+ 
+ Q_SIGNALS:
+-    void animationComplete(QGraphicsItem *item, Animation anim);
++    void animationComplete(QGraphicsItem *item, Plasma::Phase::Animation anim);
+     void movementComplete(QGraphicsItem *item);
+ 
+ protected:
+@@ -105,6 +124,7 @@
+ 
+ protected Q_SLOTS:
+     void appletDestroyed(QObject*);
++    void customAnimReceiverDestroyed(QObject*);
+ 
+ private:
+     void init();
+--- a/libs/plasma/appletbrowser/Messages.sh
++++ /dev/null
+@@ -1,2 +0,0 @@
+-#! /usr/bin/env bash
+-$XGETTEXT *.cpp -o $podir/plasmaappletbrowser.pot
+--- a/libs/plasma/appletbrowser/CMakeLists.txt
++++ /dev/null
+@@ -1,16 +0,0 @@
+-
+-set(
+-  plasma_appletbrowser_SRCS
+-  kcategorizeditemsview.cpp
+-  kcategorizeditemsviewmodels.cpp
+-  kcategorizeditemsviewdelegate.cpp
+-  appletbrowserwindow.cpp
+-  plasmaappletitemmodel.cpp
+-)
+-
+-kde4_add_ui_files(
+-  plasma_appletbrowser_SRCS
+-  kcategorizeditemsviewbase.ui
+-  appletbrowserwindowbase.ui
+-)
+-
+--- a/libs/plasma/appletbrowser/kcategorizeditemsviewmodels_p.h
++++ b/libs/plasma/appletbrowser/kcategorizeditemsviewmodels_p.h
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/appletbrowser/customdragtreeview.cpp
++++ b/libs/plasma/appletbrowser/customdragtreeview.cpp
+@@ -1,3 +1,22 @@
++/*
++ *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library/Lesser General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
+ #include "kcategorizeditemsview_p.h"
+ 
+ #define PIX_SIZE 64
+--- a/libs/plasma/appletbrowser/kcategorizeditemsviewdelegate.cpp
++++ b/libs/plasma/appletbrowser/kcategorizeditemsviewdelegate.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/appletbrowser/plasmaappletitemmodel.cpp
++++ b/libs/plasma/appletbrowser/plasmaappletitemmodel.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+@@ -19,39 +19,19 @@
+ 
+ #include "plasmaappletitemmodel_p.h"
+ 
+-PlasmaAppletItem::PlasmaAppletItem(QObject * parent, QString name,
+-        QString pluginName, QString description, QString category, QIcon icon,
+-        FilterFlags flags) :
+-    QObject(parent)
+-{
+-    QMap<QString, QVariant> attrs;
+-    attrs.insert("name", QVariant(name));
+-    attrs.insert("pluginName", QVariant(pluginName));
+-    attrs.insert("description", QVariant(description));
+-    attrs.insert("category", QVariant(category));
+-    attrs.insert("favorite", flags & Favorite ? true : false);
+-    attrs.insert("used", flags & Used ? true : false);
+-    attrs.insert("recommended", flags & Recommended ? true : false);
+-    setText(name + " - "+ description);
+-    setData(QVariant(attrs));
+-    setIcon(icon);
+-}
++PlasmaAppletItem::PlasmaAppletItem(PlasmaAppletItemModel * model, const QMap<QString, QVariant>& info,
++        FilterFlags flags, QMap<QString, QVariant> * extraAttrs) :
++    QObject(model), m_model(model)
++{
++    QMap<QString, QVariant> attrs(info);
+ 
+-PlasmaAppletItem::PlasmaAppletItem(QObject *parent, const KPluginInfo& info,
+-        FilterFlags flags) :
+-    QObject(parent)
+-{
+-    QMap<QString, QVariant> attrs;
+-    attrs.insert("name", info.name());
+-    attrs.insert("pluginName", info.pluginName());
+-    attrs.insert("description", info.comment());
+-    attrs.insert("category", info.category());
+     attrs.insert("favorite", flags & Favorite ? true : false);
+     attrs.insert("used", flags & Used ? true : false);
+-    attrs.insert("recommended", flags & Recommended ? true : false);
+-    setText(info.name() + " - "+ info.category());
++    //attrs.insert("recommended", flags & Recommended ? true : false);
++    if (extraAttrs) attrs.unite(* extraAttrs);
++    setText(info["name"].toString() + " - "+ info["category"].toString());
+     setData(attrs);
+-    setIcon(KIcon(info.icon().isEmpty()?"application-x-plasma":info.icon()));
++    setIcon(qvariant_cast<QIcon>(info["icon"]));
+ }
+ 
+ QString PlasmaAppletItem::name() const
+@@ -74,6 +54,19 @@
+     QMap<QString, QVariant> attrs = data().toMap();
+     attrs.insert("favorite", favorite ? true : false);
+     setData(QVariant(attrs));
++
++    QString pluginName = attrs["pluginName"].toString();
++
++    if (pluginName == "skapplet" && attrs.contains("arguments")) {
++        // skapplet can be used with all SuperKaramba themes,
++        // so when setting skapplet as favorite it is also
++        // necessary to know which theme is meant
++        QString themePath = qvariant_cast<QVariantList>(attrs["arguments"])[0].toString();
++
++        m_model->setFavorite(pluginName + " - " + themePath, favorite);
++    } else {
++        m_model->setFavorite(pluginName, favorite);
++    }
+ }
+ 
+ bool PlasmaAppletItem::passesFiltering(
+@@ -82,30 +75,60 @@
+     return data().toMap()[filter.first] == filter.second;
+ }
+ 
+-PlasmaAppletItemModel::PlasmaAppletItemModel(QObject * parent) :
+-    KCategorizedItemsViewModels::DefaultItemModel(parent)
++QVariantList PlasmaAppletItem::arguments() const
+ {
+-    /* some test items that do have FilterFlags as well as overly long text
+-    appendRow(new PlasmaAppletItem(this, 
+-        i18n("This is a very long name for an applet, isn't it?"), "null", 
+-        i18n("This is a Graphics applet whose description is even longer than it's title. And it was hard to achieve!"), 
+-        QString("graph"),
+-        QIcon("/usr/share/icons/oxygen/64x64/apps/k3b.png"), PlasmaAppletItem::Used));
+-    appendRow(new PlasmaAppletItem(this, 
+-        i18n("This is a very long name for another applet, isn't it?"), "null", 
+-        i18n("This is a Graphics applet whose description is even longer than it's title. And it was hard to achieve!"), 
+-        QString("graph"),
+-        QIcon("/usr/share/icons/oxygen/64x64/apps/kfind.png"), PlasmaAppletItem::Used | PlasmaAppletItem::Recommended));
+-    appendRow(new PlasmaAppletItem(this, 
+-        i18n("This is my favorite item!"), "null",
+-        i18n("This is a Graphics applet whose description is even longer than it's title. And it was hard to achieve!"), 
+-        QString("graph"),
+-        QIcon("/usr/share/icons/oxygen/64x64/apps/okular.png"), PlasmaAppletItem::Favorite | PlasmaAppletItem::Recommended));
+-    */
++    return qvariant_cast<QVariantList>(data().toMap()["arguments"]);
++}
++
++PlasmaAppletItemModel::PlasmaAppletItemModel(KConfigGroup configGroup, QObject * parent) :
++    KCategorizedItemsViewModels::DefaultItemModel(parent),
++    m_configGroup(configGroup)
++{
++
++    // Recommended emblems and filters
++    QRegExp rx("recommended[.]([0-9A-Za-z]+)[.]plugins");
++    QMapIterator<QString, QString> i(m_configGroup.entryMap());
++    QMap < QString, QMap < QString, QVariant > > extraPluginAttrs;
++    while (i.hasNext()) {
++        i.next();
++        if (!rx.exactMatch(i.key())) continue;
++        QString id = rx.cap(1);
++
++        foreach (QString plugin, i.value().split(",")) {
++            extraPluginAttrs[plugin]["recommended." + id] = true;
++        }
++    }
++
++    m_favorites = m_configGroup.readEntry("favorites").split(",");
++    m_used = m_configGroup.readEntry("used").split(",");
+ 
+     //TODO: get recommended, favorit, used, etc out of knownApplets()
+     foreach (const KPluginInfo& info, Plasma::Applet::knownApplets()) {
+-        appendRow(new PlasmaAppletItem(this, info));
++        //kDebug() << info.pluginName() << "NoDisplay" << info.property("NoDisplay").toBool();
++        if (info.property("NoDisplay").toBool()) {
++            // we don't want to show the hidden category
++            continue;
++        }
++        //kDebug() << info.pluginName() << " is the name of the plugin\n";
++
++        if (info.pluginName() == "skapplet") {
++            // If there is the SuperKaramba applet,
++            // add SuperKaramba themes to the
++            // model too
++            loadSuperKarambaThemes(info);
++        } else {
++            QMap<QString, QVariant> attrs;
++            attrs.insert("name", info.name());
++            attrs.insert("pluginName", info.pluginName());
++            attrs.insert("description", info.comment());
++            attrs.insert("category", info.category());
++            attrs.insert("icon", static_cast<QIcon>(KIcon(info.icon().isEmpty()?"application-x-plasma":info.icon())));
++
++            appendRow(new PlasmaAppletItem(this, attrs,
++                        ((m_favorites.contains(info.pluginName())) ? PlasmaAppletItem::Favorite : PlasmaAppletItem::NoFilter) |
++                        ((m_used.contains(info.pluginName())) ? PlasmaAppletItem::Used : PlasmaAppletItem::NoFilter)
++                        , &(extraPluginAttrs[info.pluginName()])));
++        }
+     }
+ }
+ 
+@@ -141,3 +164,63 @@
+ 
+     return data;
+ }
++
++void PlasmaAppletItemModel::setFavorite(QString plugin, bool favorite)
++{
++    if (favorite) {
++        if (!m_favorites.contains(plugin)) {
++            m_favorites.append(plugin);
++        }
++    } else {
++        if (m_favorites.contains(plugin)) {
++            m_favorites.removeAll(plugin);
++        }
++    }
++    m_configGroup.writeEntry("favorites", m_favorites.join(","));
++    m_configGroup.sync();
++
++}
++
++/*
++ * Define function type to get the SuperKaramba themes
++ * from skapplet (see skapplet.cpp in kdeutils/superkaramba)
++ */
++extern "C" {
++    typedef QList<QMap<QString, QVariant> > (*installedThemes)();
++}
++
++void PlasmaAppletItemModel::loadSuperKarambaThemes(const KPluginInfo &info)
++{
++    KService::Ptr service = info.service();
++    QString libName = service->library();
++
++    // Load the Plugin as library to get access
++    // to installedThemes() in skapplet
++    KLibrary *lib = KLibLoader::self()->library(libName);
++    if (lib) {
++        installedThemes loadThemes = 0;
++
++        loadThemes = (installedThemes)lib->resolveFunction("installedThemes");
++
++        if (loadThemes) {
++            // loadThemes() returns the name, description, the icon
++            // and one argument (file path) from the theme
++            QList<QMap<QString, QVariant> > themeMetadata = loadThemes();
++
++            QMap <QString, QVariant> metadata;
++            foreach (metadata, themeMetadata) {
++                metadata.insert("pluginName", "skapplet");
++                metadata.insert("category", "SuperKaramba");
++
++                QString favorite = info.pluginName() + " - " + qvariant_cast<QVariantList>(metadata["arguments"])[0].toString();
++
++                appendRow(new PlasmaAppletItem(this, metadata,
++                    ((m_favorites.contains(favorite)) ? PlasmaAppletItem::Favorite : PlasmaAppletItem::NoFilter) |
++                    ((m_used.contains(info.pluginName())) ? PlasmaAppletItem::Used : PlasmaAppletItem::NoFilter)));
++            }
++        }
++    } else {
++        kWarning() << "Could not load" << libName;
++    }
++}
++
+--- a/libs/plasma/appletbrowser/main.cpp
++++ b/libs/plasma/appletbrowser/main.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/appletbrowser/customdragtreeview_p.h
++++ b/libs/plasma/appletbrowser/customdragtreeview_p.h
+@@ -1,3 +1,22 @@
++/*
++ *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library/Lesser General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
+ #include <QTreeView>
+ #include "kcategorizeditemsviewmodels_p.h"
+ 
+--- a/libs/plasma/appletbrowser/kcategorizeditemsviewdelegate_p.h
++++ b/libs/plasma/appletbrowser/kcategorizeditemsviewdelegate_p.h
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/appletbrowser/plasmaappletitemmodel_p.h
++++ b/libs/plasma/appletbrowser/plasmaappletitemmodel_p.h
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+@@ -26,6 +26,8 @@
+ 
+ #include "kcategorizeditemsview_p.h"
+ 
++class PlasmaAppletItemModel;
++
+ /**
+  * Implementation of the KCategorizedItemsViewModels::AbstractItem
+  */
+@@ -35,17 +37,12 @@
+ public:
+     enum FilterFlag {NoFilter = 0,
+         Favorite = 1,
+-        Used = 2,
+-        Recommended = 4};
++        Used = 2};
+ 
+     Q_DECLARE_FLAGS(FilterFlags, FilterFlag)
+ 
+-    PlasmaAppletItem(QObject * parent, QString name, QString pluginName,
+-            QString description, QString category, QIcon icon,
+-            FilterFlags flags = NoFilter);
+-
+-    PlasmaAppletItem(QObject *parent, const KPluginInfo& info,
+-            FilterFlags flags = NoFilter);
++    PlasmaAppletItem(PlasmaAppletItemModel * model, const QMap<QString, QVariant>& info,
++            FilterFlags flags = NoFilter, QMap<QString, QVariant> * extraAttrs = NULL);
+ 
+     virtual QString name() const;
+     QString pluginName() const;
+@@ -53,17 +50,30 @@
+     virtual void setFavorite(bool favorite);
+     virtual bool passesFiltering(
+             const KCategorizedItemsViewModels::Filter & filter) const;
++    virtual QVariantList arguments() const;
++
++private:
++    PlasmaAppletItemModel * m_model;
+ };
+ 
+ class PlasmaAppletItemModel :
+     public KCategorizedItemsViewModels::DefaultItemModel
+ {
+ public:
+-    PlasmaAppletItemModel(QObject * parent = 0);
++    PlasmaAppletItemModel(KConfigGroup configGroup, QObject * parent = 0);
+ 
+     QStringList mimeTypes() const;
+ 
+     QMimeData* mimeData(const QModelIndexList & indexes) const;
++    
++    void setFavorite(QString plugin, bool favorite);
++
++private:
++    QStringList m_favorites;
++    QStringList m_used;
++    KConfigGroup m_configGroup;
++
++    void loadSuperKarambaThemes(const KPluginInfo &info);
+ };
+ 
+ Q_DECLARE_OPERATORS_FOR_FLAGS(PlasmaAppletItem::FilterFlags)
+--- a/libs/plasma/appletbrowser/kcategorizeditemsview.cpp
++++ b/libs/plasma/appletbrowser/kcategorizeditemsview.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+@@ -27,7 +27,8 @@
+ 
+ KCategorizedItemsView::KCategorizedItemsView(QWidget * parent, Qt::WindowFlags f)
+         : QWidget(parent, f), m_modelCategories(NULL), m_modelFilters(NULL),
+-        m_modelItems(NULL), m_modelFilterItems(NULL), m_delegate(NULL)
++        m_modelItems(NULL), m_modelFilterItems(NULL), m_delegate(NULL),
++        m_viewWidth(0)
+ {
+     setupUi(this);
+     itemsView->m_view = this;
+--- a/libs/plasma/appletbrowser/kcategorizeditemsview_p.h
++++ b/libs/plasma/appletbrowser/kcategorizeditemsview_p.h
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/appletbrowser/kcategorizeditemsviewmodels.cpp
++++ b/libs/plasma/appletbrowser/kcategorizeditemsviewmodels.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/animator.cpp
++++ b/libs/plasma/animator.cpp
+@@ -109,24 +109,19 @@
+     Q_UNUSED(drawable)
+ }
+ 
+-void Animator::slideIn(qreal progress, QGraphicsItem *item, const QPoint &destination)
++void Animator::slideIn(qreal progress, QGraphicsItem *item, const QPoint &start, const QPoint &destination)
+ {
+-    //FIXME: rewrite
+-    Q_UNUSED(progress);
+-    item->translate(-destination.x(), -destination.y());
++    int x = start.x() + (destination.x() - start.x()) * progress;
++    int y = start.y() + (destination.y() - start.y()) * progress;
++    item->setPos(x, y);
+ }
+ 
+-void Animator::slideOut(qreal progress, QGraphicsItem *item, const QPoint &destination)
++void Animator::slideOut(qreal progress, QGraphicsItem *item, const QPoint &start, const QPoint &destination)
+ {
+-    //FIXME: rewrite
+-    Q_UNUSED(progress);
+     //kDebug();
+-    item->translate(destination.x(), destination.y());
+-}
+-
+-void Animator::renderBackground(QImage& background)
+-{
+-    Q_UNUSED(background)
++    int x = start.x() + (destination.x() - start.x()) * progress;
++    int y = start.y() + (destination.y() - start.y()) * progress;
++    item->setPos(x, y);
+ }
+ 
+ } // Plasma namespace
+--- a/libs/plasma/packages.cpp
++++ b/libs/plasma/packages.cpp
+@@ -44,7 +44,7 @@
+     mimetypes << "text/*";
+     setMimetypes("scripts", mimetypes);
+ 
+-    addFileDefinition("mainconfigui", "config/ui/main.ui", i18n("Main Config UI File"));
++    addFileDefinition("mainconfiggui", "config/ui/main.ui", i18n("Main Config UI File"));
+     addFileDefinition("mainconfigxml", "config/xml/main.xml", i18n("Configuration XML file"));
+     addFileDefinition("mainscript", "code/main", i18n("Main Script File"));
+     setRequired("mainscript", true);
+--- a/libs/plasma/corona.cpp
++++ b/libs/plasma/corona.cpp
+@@ -36,7 +36,6 @@
+ 
+ #include "containment.h"
+ #include "dataengine.h"
+-#include "karambamanager.h"
+ #include "phase.h"
+ #include "widgets/freelayout.h"
+ #include "widgets/boxlayout.h"
+@@ -153,12 +152,11 @@
+             if (c) {
+                 containments.insert(c->id(), c);
+                 c->initConstraints(&appletConfig);
+-                c->setGeometry(appletConfig.readEntry("geometry", QRectF()));
+-                kDebug() << "Containment" << c->id() << "geometry is" << c->geometry();
++                //kDebug() << "Containment" << c->id() << "geometry is" << c->geometry();
+             }
+         } else {
+             // it's an applet, let's grab the containment association
+-            kDebug() << "insert multi" << group;
++            //kDebug() << "insert multi" << group;
+             applets.append(appletConfig);
+         }
+     }
+@@ -167,7 +165,7 @@
+     //kDebug() << "number of applets?" << applets.count();
+     foreach (KConfigGroup cg, applets) {
+         int cid = cg.readEntry("containment", 0);
+-        kDebug() << "trying to load applet " << cg.name() << " in containment " << cid;
++        //kDebug() << "trying to load applet " << cg.name() << " in containment " << cid;
+ 
+         Containment* c = containments.value(cid, 0);
+ 
+@@ -176,12 +174,10 @@
+             continue;
+         }
+ 
+-        kDebug() << "loading containment " << cid;
+-
+-        kDebug() << "creating applet " << cg.name();
++        //kDebug() << "creating applet " << cg.name() << "in containment" << cid;
+         int appId = cg.name().left(cg.name().indexOf('-')).toUInt();
+         c->addApplet(cg.readEntry("plugin", QString()), QVariantList(),
+-                        appId, cg.readEntry("geometry", QRectF()), true);
++                     appId, cg.readEntry("geometry", QRectF()), true);
+     }
+ 
+     foreach (Containment* c, containments) {
+@@ -192,13 +188,14 @@
+ 
+     if (d->containments.count() < 1) {
+         loadDefaultSetup();
+-    }
+-
+-    foreach (Containment* containment, d->containments) {
+-        containment->init(); //FIXME: is this being called twice?
++    } else {
++        foreach (Containment* containment, d->containments) {
++            containment->init();
++            addItem(containment);
+ 
+-        foreach(Applet* applet, containment->applets()) {
+-            applet->init();
++            foreach(Applet* applet, containment->applets()) {
++                applet->init();
++            }
+         }
+     }
+ 
+@@ -226,17 +223,10 @@
+     Containment* panel = addContainment("panel", (QVariantList() << (int)Plasma::BottomEdge));
+ 
+     // some default applets to get a usable UI
+-    QList<Plasma::Applet*> applets;
+-    Plasma::Applet *tasksApplet = panel->addApplet("tasks");
+-    Plasma::Applet *systemTrayApplet = panel->addApplet("systemtray");
+-    Plasma::Applet *clockApplet = panel->addApplet("digital-clock");
+-
+-    applets << tasksApplet << systemTrayApplet << clockApplet;
+-
+-    foreach (Plasma::Applet* applet , applets) {
+-        // If we have a Panel class (is a Container), this should move there
+-        applet->setDrawStandardBackground(false);
+-    }
++    panel->addApplet("launcher");
++    panel->addApplet("tasks");
++    panel->addApplet("systemtray");
++    panel->addApplet("digital-clock");
+ }
+ 
+ Containment* Corona::containmentForScreen(int screen) const
+@@ -268,7 +258,7 @@
+     Containment* containment = 0;
+     Applet* applet = 0;
+ 
+-    kDebug() << "Loading" << name << args << id;
++    //kDebug() << "Loading" << name << args << id;
+ 
+     if (pluginName.isEmpty()) {
+         // default to the desktop containment
+@@ -279,21 +269,17 @@
+     containment = dynamic_cast<Containment*>(applet);
+ 
+     if (!containment) {
+-        kDebug() << "loading failed.";
++        kDebug() << "loading of containment" << name << "failed.";
+         delete applet; // in case we got a non-Containment from Applet::loadApplet
+         containment = new Containment;
+         containment->setFailedToLaunch(false); // we want to provide something and don't care about the failure to launch
+     }
+ 
+-    addItem(containment);
+-
+     if (!delayedInit) {
+         containment->init();
++        addItem(containment);
+     }
+ 
+-    // in case it was set in the Containment (or Applet), we don't want this
+-    containment->setDrawStandardBackground(false);
+-
+     d->containments.append(containment);
+     connect(containment, SIGNAL(destroyed(QObject*)),
+             this, SLOT(containmentDestroyed(QObject*)));
+@@ -312,19 +298,6 @@
+     return d->containments[0]->addApplet(name, args, id, geometry);
+ }
+ 
+-void Corona::addKaramba(const KUrl& path)
+-{
+-    //FIXME: i think this is slightly broken now that we have containments?
+-    //       it should go into a containment...
+-    QGraphicsItemGroup* karamba = KarambaManager::loadKaramba(path, this);
+-    if (karamba) {
+-        addItem(karamba);
+-        Phase::self()->animateItem(karamba, Phase::Appear);
+-    } else {
+-        kDebug() << "Karamba " << path << " could not be loaded.";
+-    }
+-}
+-
+ void Corona::dragEnterEvent( QGraphicsSceneDragDropEvent *event)
+ {
+ //    kDebug() << "Corona::dragEnterEvent(QGraphicsSceneDragDropEvent* event)";
+--- a/libs/plasma/packagestructure.h
++++ b/libs/plasma/packagestructure.h
+@@ -75,22 +75,22 @@
+     /**
+      * The directories defined for this package
+      **/
+-    QStringList directories();
++    QList<const char*> directories();
+ 
+     /**
+      * The required directories defined for this package
+      **/
+-    QStringList requiredDirectories();
++    QList<const char*> requiredDirectories();
+ 
+     /**
+-     * The individual files defined for this package
++     * The individual files, by key, that are defined for this package
+      **/
+-    QStringList files();
++    QList<const char*> files();
+ 
+     /**
+-     * The individual required files defined for this package
++     * The individual required files, by key, that are defined for this package
+      **/
+-    QStringList requiredFiles();
++    QList<const char*> requiredFiles();
+ 
+     /**
+      * Adds a directory to the structure of the package. It is added as
+--- /dev/null
++++ b/libs/plasma/tests/packagestructuretest.h
+@@ -0,0 +1,52 @@
++/******************************************************************************
++*   Copyright 2007 by Aaron Seigo <aseigo at kde.org>                        *
++*                                                                             *
++*   This library is free software; you can redistribute it and/or             *
++*   modify it under the terms of the GNU Library General Public               *
++*   License as published by the Free Software Foundation; either              *
++*   version 2 of the License, or (at your option) any later version.          *
++*                                                                             *
++*   This library is distributed in the hope that it will be useful,           *
++*   but WITHOUT ANY WARRANTY; without even the implied warranty of            *
++*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU          *
++*   Library General Public License for more details.                          *
++*                                                                             *
++*   You should have received a copy of the GNU Library General Public License *
++*   along with this library; see the file COPYING.LIB.  If not, write to      *
++*   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,      *
++*   Boston, MA 02110-1301, USA.                                               *
++*******************************************************************************/
++
++#ifndef PACKAGESTRUCTURETEST_H
++
++#include <qtest_kde.h>
++
++#include "plasma/packages_p.h"
++
++class PackageStructureTest : public QObject
++{
++    Q_OBJECT
++
++public Q_SLOTS:
++    void init();
++    void cleanup();
++
++private Q_SLOTS:
++    void type();
++    void directories();
++    void requiredDirectories();
++    void files();
++    void requiredFiles();
++    void path();
++    void name();
++    void required();
++    void mimetypes();
++
++    //TODO: add tests for copy construction
++
++private:
++    Plasma::PackageStructure *ps;
++};
++
++#endif
++
+--- /dev/null
++++ b/libs/plasma/tests/CMakeLists.txt
+@@ -0,0 +1,13 @@
++set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
++
++MACRO(PLASMA_UNIT_TESTS)
++       FOREACH(_testname ${ARGN})
++               kde4_add_unit_test(${_testname} ${_testname}.cpp)
++               target_link_libraries(${_testname} plasma ${QT_QTTEST_LIBRARY})
++       ENDFOREACH(_testname)
++ENDMACRO(PLASMA_UNIT_TESTS)
++
++PLASMA_UNIT_TESTS(
++    packagestructuretest
++)
++
+--- /dev/null
++++ b/libs/plasma/tests/packagestructuretest.cpp
+@@ -0,0 +1,103 @@
++/******************************************************************************
++*   Copyright 2007 by Aaron Seigo <aseigo at kde.org>                            *
++*                                                                             *
++*   This library is free software; you can redistribute it and/or             *
++*   modify it under the terms of the GNU Library General Public               *
++*   License as published by the Free Software Foundation; either              *
++*   version 2 of the License, or (at your option) any later version.          *
++*                                                                             *
++*   This library is distributed in the hope that it will be useful,           *
++*   but WITHOUT ANY WARRANTY; without even the implied warranty of            *
++*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU          *
++*   Library General Public License for more details.                          *
++*                                                                             *
++*   You should have received a copy of the GNU Library General Public License *
++*   along with this library; see the file COPYING.LIB.  If not, write to      *
++*   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,      *
++*   Boston, MA 02110-1301, USA.                                               *
++*******************************************************************************/
++
++#include "packagestructuretest.h"
++#include "plasma/packages.cpp"
++
++void PackageStructureTest::init()
++{
++    ps = new Plasma::PlasmoidStructure;
++}
++
++void PackageStructureTest::cleanup()
++{
++    delete ps;
++}
++
++void PackageStructureTest::type()
++{
++    QCOMPARE(ps->type(), QString("Plasmoid"));
++}
++
++#include <KDebug>
++void PackageStructureTest::directories()
++{
++    QList<const char*> dirs;
++    dirs << "images" << "config" << "configui" << "scripts";
++    qSort(dirs);
++
++    QList<const char*> psDirs = ps->directories();
++    qSort(psDirs);
++
++    QCOMPARE(psDirs, dirs);
++}
++
++void PackageStructureTest::requiredDirectories()
++{
++    QList<const char*> dirs;
++    QCOMPARE(ps->requiredDirectories(), dirs);
++}
++
++void PackageStructureTest::files()
++{
++    QList<const char*> files;
++    files << "mainconfiggui" << "mainconfigxml" << "mainscript";
++    qSort(files);
++
++    QList<const char*> psFiles = ps->files();
++    qSort(psFiles);
++
++    QCOMPARE(psFiles, files);
++}
++
++void PackageStructureTest::requiredFiles()
++{
++    QList<const char*> files;
++    files << "mainscript";
++    QCOMPARE(ps->requiredFiles(), files);
++}
++
++void PackageStructureTest::path()
++{
++    QCOMPARE(ps->path("images"), QString("images"));
++    QCOMPARE(ps->path("mainscript"), QString("code/main"));
++}
++
++void PackageStructureTest::name()
++{
++    QCOMPARE(ps->name("config"), i18n("Configuration Definitions"));
++    QCOMPARE(ps->name("mainscript"), i18n("Main Script File"));
++}
++
++void PackageStructureTest::required()
++{
++    QVERIFY(ps->required("mainscript"));
++}
++
++void PackageStructureTest::mimetypes()
++{
++    QStringList mimetypes;
++    mimetypes << "image/svg+xml" << "image/png" << "image/jpeg";
++    QCOMPARE(ps->mimetypes("images"), mimetypes);
++}
++
++QTEST_KDEMAIN(PackageStructureTest, NoGUI)
++
++//#include "packagestructuretest.moc"
++
+--- a/libs/plasma/containment.h
++++ b/libs/plasma/containment.h
+@@ -28,6 +28,7 @@
+ #include <kgenericfactory.h>
+ 
+ #include <plasma/applet.h>
++#include <plasma/phase.h>
+ 
+ namespace Plasma
+ {
+@@ -61,6 +62,10 @@
+         typedef QList<Applet*> List;
+         typedef QHash<QString, Applet*> Dict;
+ 
++        enum Type { DesktopContainment = 0 /**< A desktop containment */,
++                    PanelContainment /**< A desktop panel */
++                  };
++
+         /**
+          * @arg parent the QGraphicsItem this applet is parented to
+          * @arg servideId the name of the .desktop file containing the
+@@ -92,6 +97,11 @@
+         void init();
+ 
+         /**
++         * Returns the type of containment
++         */
++        virtual Type type();
++
++        /**
+          * Paints a default background image. Nothing fancy, but that's what plugins
+          * are for. Reimplemented from Applet;
+          */
+@@ -187,11 +197,6 @@
+         void saveConstraints(KConfigGroup* group) const;
+ 
+         /**
+-         * Adds a Superkaramba theme to this Containment
+-         */
+-        void addKaramba(const KUrl& path);
+-
+-        /**
+          * @internal
+          */
+         void initConstraints(KConfigGroup* group);
+@@ -226,6 +231,8 @@
+          * @internal
+          */
+         void appletDestroyed(QObject*);
++        void destroyApplet();
++        void appletDisappearComplete(QGraphicsItem *item, Plasma::Phase::Animation anim);
+         void dropEvent(QGraphicsSceneDragDropEvent* event);
+ 
+     private:
+--- /dev/null
++++ b/libs/plasma/includes/AppletBrowser
+@@ -0,0 +1 @@
++#include "../../plasma/appletbrowser.h"
+--- a/libs/plasma/applet.h
++++ b/libs/plasma/applet.h
+@@ -102,7 +102,7 @@
+          * This method is called once the applet is loaded and added to a Corona.
+          * If the applet requires a QGraphicsScene or has an particularly intensive
+          * set of initialization routines to go through, consider implementing it
+-         * in this method instead of the contsructor.
++         * in this method instead of the constructor.
+          **/
+         virtual void init();
+ 
+@@ -279,15 +279,6 @@
+         bool hasConfigurationInterface();
+ 
+         /**
+-         * Reimplement this slot to show a configuration dialog.
+-         *
+-         * Let the user play with the plasmoid options.
+-         * Called when the user selects the configure entry
+-         * from the context menu.
+-         */
+-        virtual void showConfigurationInterface();
+-
+-        /**
+          * Attempts to load an applet
+          *
+          * Returns a pointer to the applet if successful.
+@@ -507,6 +498,15 @@
+          */
+         void destroy();
+ 
++        /**
++         * Reimplement this slot to show a configuration dialog.
++         *
++         * Let the user play with the plasmoid options.
++         * Called when the user selects the configure entry
++         * from the context menu.
++         */
++        virtual void showConfigurationInterface();
++
+     protected:
+         /**
+          * Called when a request to save the state of the applet is made
+--- a/libs/plasma/package.cpp
++++ b/libs/plasma/package.cpp
+@@ -74,15 +74,15 @@
+         return false;
+     }
+ 
+-    foreach (const QString& dir, d->structure.requiredDirectories()) {
+-        if (QFile::exists(d->basePath + '/' + dir)) {
++    foreach (const char *dir, d->structure.requiredDirectories()) {
++        if (QFile::exists(d->basePath + '/' + d->structure.path(dir))) {
+             d->valid = false;
+             return false;
+         }
+     }
+ 
+-    foreach (const QString& file, d->structure.requiredFiles()) {
+-        if (QFile::exists(d->basePath + '/' + file)) {
++    foreach (const char *file, d->structure.requiredFiles()) {
++        if (QFile::exists(d->basePath + '/' + d->structure.path(file))) {
+             d->valid = false;
+             return false;
+         }
+@@ -295,7 +295,7 @@
+         creation.addLocalFile(metadata.preview(), "preview.png");
+     }
+ 
+-    creation.addLocalDirectory(source, "contents/");
++    creation.addLocalDirectory(source, "contents");
+     creation.close();
+     return true;
+ }
+--- a/libs/plasma/CMakeLists.txt
++++ b/libs/plasma/CMakeLists.txt
+@@ -2,7 +2,8 @@
+ 
+ find_package(OpenGL)
+ 
+-add_subdirectory( widgets )
++add_subdirectory(widgets)
++add_subdirectory(tests)
+ 
+ ########### next target ###############
+ 
+@@ -37,12 +38,12 @@
+     shadowitem.cpp
+     svg.cpp
+     theme.cpp
+-    karambamanager.cpp
+     uiloader.cpp
+     widgets/boxlayout.cpp
+     widgets/borderlayout.cpp
+     widgets/checkbox.cpp
+     widgets/freelayout.cpp
++    widgets/nodelayout.cpp
+     widgets/flowlayout.cpp
+     widgets/flash.cpp
+     widgets/icon.cpp
+@@ -123,6 +124,7 @@
+ install(FILES
+     widgets/boxlayout.h
+     widgets/borderlayout.h
++    widgets/nodelayout.h
+     widgets/hboxlayout.h
+     widgets/vboxlayout.h
+     widgets/freelayout.h
+@@ -160,6 +162,7 @@
+     includes/UiLoader
+     includes/PackageMetadata
+     includes/Containment
++    includes/AppletBrowser
+     DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Plasma)
+ 
+ if(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
+@@ -173,6 +176,7 @@
+     servicetypes/plasma-animator.desktop
+     servicetypes/plasma-applet.desktop
+     servicetypes/plasma-dataengine.desktop
++    servicetypes/plasma-runner.desktop
+     servicetypes/plasma-scriptengine.desktop
+     DESTINATION ${SERVICETYPES_INSTALL_DIR})
+ 
+--- a/libs/plasma/abstractrunner.cpp
++++ b/libs/plasma/abstractrunner.cpp
+@@ -113,21 +113,32 @@
+ 
+ AbstractRunner::List AbstractRunner::loadRunners( QWidget* parent )
+ {
++    List firstRunners;
+     List runners;
+-    KService::List offers = KServiceTypeTrader::self()->query("KRunner/Runner");
++    List lastRunners;
++
++    KService::List offers = KServiceTypeTrader::self()->query("Plasma/Runner");
+     QString error;
+     foreach (KService::Ptr service, offers) {
+         AbstractRunner* runner = service->createInstance<AbstractRunner>(parent, QVariantList(), &error);
+-        if ( runner ) {
++        if (runner) {
+             kDebug() << "loaded runner : " << service->name();
+-            runners.append( runner );
++            QString phase = service->property("X-Plasma-RunnerPhase").toString();
++            if (phase == "last") {
++                lastRunners.append(runner);
++            } else if (phase == "first") {
++                firstRunners.append(runner);
++            } else {
++                runners.append(runner);
++            }
+         }
+         else {
+             kDebug() << "failed to load runner : " << service->name() << ". error reported: " << error;
+         }
+     }
+ 
+-    return runners;
++    firstRunners << runners << lastRunners;
++    return firstRunners;
+ }
+ 
+ } // Plasma namespace
+--- a/libs/plasma/appletbrowser.h
++++ b/libs/plasma/appletbrowser.h
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/Messages.sh
++++ b/libs/plasma/Messages.sh
+@@ -1,2 +1,2 @@
+ #! /usr/bin/env bash
+-$XGETTEXT *.cpp *.h -o $podir/libplasma.pot
++$XGETTEXT *.cpp *.h */*.h */*.cpp -o $podir/libplasma.pot
+--- a/libs/plasma/phase.cpp
++++ b/libs/plasma/phase.cpp
+@@ -32,6 +32,7 @@
+ namespace Plasma
+ {
+ 
++static const qreal MIN_TICK_RATE = 40;
+ 
+ struct AnimationState
+ {
+@@ -66,9 +67,22 @@
+     int currentInterval;
+     int frames;
+     int currentFrame;
++    QPoint start;
+     QPoint destination;
+ };
+ 
++struct CustomAnimationState
++{
++    Phase::CurveShape curve;
++    int frames;
++    int currentFrame;
++    int interval;
++    int currentInterval;
++    Phase::AnimId id;
++    QObject* receiver;
++    char* slot;
++};
++
+ class Phase::Private
+ {
+     public:
+@@ -84,10 +98,27 @@
+         {
+             qDeleteAll(animatedItems);
+             qDeleteAll(animatedElements);
++            qDeleteAll(movingItems);
++
++            QMutableMapIterator<AnimId, CustomAnimationState*> it(customAnims);
++            while (it.hasNext()) {
++                delete it.value()->slot;
++                delete it.value();
++                it.remove();
++            }
++
+             // Animator is a QObject
+             // and we don't own the items
+         }
+ 
++        qreal calculateProgress(int frames, int currentFrame)
++        {
++            qreal progress = frames;
++            progress = currentFrame / progress;
++            progress = qMin(1.0, qMax(0.0, progress));
++            return progress;
++        }
++
+         void performAnimation(qreal amount, const AnimationState* state)
+         {
+             switch (state->animation) {
+@@ -113,10 +144,12 @@
+         {
+             switch (state->movement) {
+                 case Phase::SlideIn:
+-                    animator->slideIn(amount, state->item, state->destination);
++                    //kDebug() << "performMovement, SlideIn";
++                    animator->slideIn(amount, state->item, state->start, state->destination);
+                     break;
+                 case Phase::SlideOut:
+-                    animator->slideOut(amount, state->item, state->destination);
++                    //kDebug() << "performMovement, SlideOut";
++                    animator->slideOut(amount, state->item, state->start, state->destination);
+                     break;
+             }
+         }
+@@ -131,6 +164,7 @@
+         QMap<QGraphicsItem*, AnimationState*> animatedItems;
+         QMap<QGraphicsItem*, MovementState*> movingItems;
+         QMap<Phase::AnimId, ElementAnimationState*> animatedElements;
++        QMap<AnimId, CustomAnimationState*> customAnims;
+ };
+ 
+ class PhaseSingleton
+@@ -181,6 +215,18 @@
+     }
+ }
+ 
++void Phase::customAnimReceiverDestroyed(QObject* o)
++{
++    QMutableMapIterator<AnimId, CustomAnimationState*> it(d->customAnims);
++    while (it.hasNext()) {
++        if (it.next().value()->receiver == o) {
++            delete it.value()->slot;
++            delete it.value();
++            it.remove();
++        }
++    }
++}
++
+ void Phase::animateItem(QGraphicsItem* item, Animation animation)
+ {
+      //kDebug();
+@@ -208,14 +254,14 @@
+     state->frames = frames / 3;
+     state->currentFrame = 0;
+     state->interval = 333 / state->frames;
+-    state->interval = (state->interval / 40) * 40;
++    state->interval = (state->interval / MIN_TICK_RATE) * MIN_TICK_RATE;
+     state->currentInterval = state->interval;
+ 
+     d->animatedItems[item] = state;
+     d->performAnimation(0, state);
+ 
+     if (!d->timerId) {
+-        d->timerId = startTimer(40);
++        d->timerId = startTimer(MIN_TICK_RATE);
+         d->time.restart();
+     }
+ }
+@@ -237,34 +283,69 @@
+      }
+ 
+      MovementState* state = new MovementState;
+-     state->destination=destination;
++     state->destination = destination;
++     state->start = item->pos().toPoint();
+      state->item = item;
+      state->movement = movement;
+      state->curve = d->animator->curve(movement);
+      //TODO: variance in times based on the value of animation
+      state->frames = frames / 2;
+      state->currentFrame = 0;
+-     state->interval = 500 / state->frames;
+-     state->interval = (state->interval / 40) * 40;
++     state->interval = 400 / state->frames;
++     state->interval = (state->interval / MIN_TICK_RATE) * MIN_TICK_RATE;
+      state->currentInterval = state->interval;
+ 
+      d->movingItems[item] = state;
+      d->performMovement(0, state);
+ 
+      if (!d->timerId) {
+-          d->timerId = startTimer(40);
++          d->timerId = startTimer(MIN_TICK_RATE);
+           d->time.restart();
+      }
+ }
+ 
+-void Phase::render(QGraphicsItem* item, QImage& image, RenderOp op)
++Phase::AnimId Phase::customAnimation(int frames, int duration, Phase::CurveShape curve,
++                                     QObject* receiver, const char* slot)
+ {
+-    Q_UNUSED(item);
+-    switch (op) {
+-        case RenderBackground:
+-            d->animator->renderBackground(image);
+-            break;
++    if (frames < 1 || duration < 1 || !receiver || !slot) {
++        return -1;
++    }
++
++    CustomAnimationState *state = new CustomAnimationState;
++    state->id = ++d->animId;
++    state->frames = frames;
++    state->currentFrame = 0;
++    state->curve = curve;
++    state->interval = duration / qreal(state->frames);
++    state->interval = (state->interval / MIN_TICK_RATE) * MIN_TICK_RATE;
++    state->currentInterval = state->interval;
++    state->receiver = receiver;
++    state->slot = qstrdup(slot);
++
++    d->customAnims[state->id] = state;
++
++    connect(receiver, SIGNAL(destroyed(QObject*)),
++            this, SLOT(customAnimReceiverDestroyed(QObject*)));
++
++    QMetaObject::invokeMethod(receiver, slot, Q_ARG(qreal, 0));
++
++    if (!d->timerId) {
++        d->timerId = startTimer(MIN_TICK_RATE);
++        d->time.restart();
++    }
++
++    return state->id;
++}
++
++void Phase::stopCustomAnimation(AnimId id)
++{
++    QMap<AnimId, CustomAnimationState*>::iterator it = d->customAnims.find(id);
++    if (it != d->customAnims.end()) {
++        delete it.value()->slot;
++        delete it.value();
++        d->customAnims.erase(it);
+     }
++    //kDebug() << "stopCustomAnimation(AnimId " << id << ") done";
+ }
+ 
+ Phase::AnimId Phase::animateElement(QGraphicsItem *item, ElementAnimation animation)
+@@ -278,7 +359,7 @@
+     state->frames = d->animator->framesPerSecond(animation) / 5;
+     state->currentFrame = 0;
+     state->interval = 200 / state->frames;
+-    state->interval = (state->interval / 40) * 40;
++    state->interval = (state->interval / MIN_TICK_RATE) * MIN_TICK_RATE;
+     state->currentInterval = state->interval;
+     state->id = ++d->animId;
+ 
+@@ -297,7 +378,7 @@
+     if (needTimer && !d->timerId) {
+         // start a 20fps timer;
+         //TODO: should be started at the maximum frame rate needed only?
+-        d->timerId = startTimer(40);
++        d->timerId = startTimer(MIN_TICK_RATE);
+         d->time.restart();
+     }
+     return state->id;
+@@ -357,7 +438,7 @@
+ {
+     Q_UNUSED(event)
+     bool animationsRemain = false;
+-    int elapsed = 40;
++    int elapsed = MIN_TICK_RATE;
+     if (d->time.elapsed() > elapsed) {
+         elapsed = d->time.elapsed();
+     }
+@@ -370,9 +451,7 @@
+             state->currentFrame += qMax(1, elapsed / state->interval);
+ 
+             if (state->currentFrame < state->frames) {
+-                qreal progress = state->frames;
+-                progress = state->currentFrame / progress;
+-                progress = qMin(1.0, qMax(0.0, progress));
++                qreal progress = d->calculateProgress(state->frames, state->currentFrame);
+                 d->performAnimation(progress, state);
+                 state->currentInterval = state->interval;
+                 //TODO: calculate a proper interval based on the curve
+@@ -396,11 +475,8 @@
+             state->currentFrame += qMax(1, elapsed / state->interval);
+ 
+             if (state->currentFrame < state->frames) {
+-                qreal progress = state->frames;
+-                progress = state->currentFrame / progress;
+-                progress = qMin(1.0, qMax(0.0, progress));
+-                //kDebug()<<progress;
+-                d->performMovement(progress, state);
++                d->performMovement(d->calculateProgress(state->frames, state->currentFrame), state);
++                //TODO: calculate a proper interval based on the curve
+                 state->currentInterval = state->interval;
+                 animationsRemain = true;
+             } else {
+@@ -435,11 +511,36 @@
+             if (state->currentFrame < state->frames) {
+                 state->currentInterval = state->interval;
+                 //TODO: calculate a proper interval based on the curve
+-                qreal progress = state->frames;
+-                progress = state->currentFrame / progress;
+-                progress = qMin(1.0, qMax(0.0, progress));
+-                state->interval *= 1 - progress;
++                state->interval *= 1 - d->calculateProgress(state->frames, state->currentFrame);
++                animationsRemain = true;
++            }
++        } else {
++            state->currentInterval -= elapsed;
++            animationsRemain = true;
++        }
++    }
++
++    foreach (CustomAnimationState *state, d->customAnims) {
++        if (state->currentInterval <= elapsed) {
++            // advance the frame
++            state->currentFrame += qMax(1, elapsed / state->interval);
++            /*kDebug() << "custom anim for" << state->receiver << "to slot" << state->slot
++                     << "with interval of" << state->interval << "at frame" << state->currentFrame;*/
++
++            if (state->currentFrame < state->frames) {
++                //kDebug () << "not the final frame";
++                //TODO: calculate a proper interval based on the curve
++                state->currentInterval = state->interval;
+                 animationsRemain = true;
++                // signal the object
++                QMetaObject::invokeMethod(state->receiver, state->slot,
++                                          Q_ARG(qreal,
++                                                d->calculateProgress(state->frames, state->currentFrame)));
++            } else {
++                QMetaObject::invokeMethod(state->receiver, state->slot, Q_ARG(qreal, 1));
++                d->customAnims.erase(d->customAnims.find(state->id));
++                delete state->slot;
++                delete state;
+             }
+         } else {
+             state->currentInterval -= elapsed;
+--- a/libs/plasma/packages_p.h
++++ b/libs/plasma/packages_p.h
+@@ -28,13 +28,13 @@
+ class PlasmoidStructure : public PackageStructure
+ {
+ public:
+-    PlasmoidStructure();
++    explicit PlasmoidStructure();
+ };
+ 
+ class ThemePackageStructure : public PackageStructure
+ {
+ public:
+-    ThemePackageStructure();
++    explicit ThemePackageStructure();
+ };
+ 
+ } // namespace Plasma
+--- a/libs/plasma/dataengine.h
++++ b/libs/plasma/dataengine.h
+@@ -81,7 +81,7 @@
+          * Connects a source to an object for data updates. The object must
+          * have a slot with the following signature:
+          *
+-         * updated(QString sourceName, Plasma::DataEngine::Data data)
++         * updated(const QString &sourceName, const Plasma::DataEngine::Data &data)
+          *
+          * The data is a QHash of QVariants keyed by QString names, allowing
+          * one data source to provide sets of related data.
+--- a/libs/plasma/packagestructure.cpp
++++ b/libs/plasma/packagestructure.cpp
+@@ -89,54 +89,53 @@
+     return d->type;
+ }
+ 
+-QStringList PackageStructure::directories()
++QList<const char*> PackageStructure::directories()
+ {
+-    QStringList dirs;
++    QList<const char*> dirs;
+     QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
+     while (it != d->contents.constEnd()) {
+         if (it.value().directory) {
+-            dirs << it.value().path;
++            dirs << it.key();
+         }
+         ++it;
+     }
+     return dirs;
+ }
+ 
+-QStringList PackageStructure::requiredDirectories()
++QList<const char*> PackageStructure::requiredDirectories()
+ {
+-    QStringList dirs;
++    QList<const char*> dirs;
+     QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
+     while (it != d->contents.constEnd()) {
+         if (it.value().directory &&
+             it.value().required) {
+-            dirs << it.value().path;
++            dirs << it.key();
+         }
+         ++it;
+     }
+     return dirs;
+ }
+ 
+-QStringList PackageStructure::files()
++QList<const char*> PackageStructure::files()
+ {
+-    QStringList files;
++    QList<const char*> files;
+     QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
+     while (it != d->contents.constEnd()) {
+-        if (!it.value().directory &&
+-            it.value().required) {
+-            files << it.value().path;
++        if (!it.value().directory) {
++            files << it.key();
+         }
+         ++it;
+     }
+     return files;
+ }
+ 
+-QStringList PackageStructure::requiredFiles()
++QList<const char*> PackageStructure::requiredFiles()
+ {
+-    QStringList files;
++    QList<const char*> files;
+     QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
+     while (it != d->contents.constEnd()) {
+-        if (!it.value().directory) {
+-            files << it.value().path;
++        if (!it.value().directory && it.value().required) {
++            files << it.key();
+         }
+         ++it;
+     }
+@@ -148,6 +147,7 @@
+     ContentStructure s;
+     s.name = name;
+     s.path = path;
++    s.directory = true;
+ 
+     d->contents[key] = s;
+ }
+--- a/libs/plasma/animator.h
++++ b/libs/plasma/animator.h
+@@ -62,11 +62,8 @@
+     virtual void activate(qreal progress, QGraphicsItem* item);
+ 
+     // Item movements
+-    virtual void slideIn(qreal progress, QGraphicsItem* item, const QPoint &destination);
+-    virtual void slideOut(qreal progress, QGraphicsItem* item, const QPoint &destination);
+-
+-    // Rendering
+-    virtual void renderBackground(QImage& background);
++    virtual void slideIn(qreal progress, QGraphicsItem* item, const QPoint &start, const QPoint &destination);
++    virtual void slideOut(qreal progress, QGraphicsItem* item, const QPoint &start, const QPoint &destination);
+ 
+ private:
+     class Private;
+--- a/libs/plasma/containment.cpp
++++ b/libs/plasma/containment.cpp
+@@ -34,9 +34,9 @@
+ #include <KMimeType>
+ #include <KRun>
+ #include <KServiceTypeTrader>
++#include <KStandardDirs>
+ 
+ #include "corona.h"
+-#include "karambamanager.h"
+ #include "phase.h"
+ #include "svg.h"
+ 
+@@ -46,6 +46,8 @@
+ namespace Plasma
+ {
+ 
++static const int INTER_CONTAINMENT_MARGIN = 6;
++
+ class Containment::Private
+ {
+ public:
+@@ -55,7 +57,7 @@
+           layout(0),
+           background(0),
+           bitmapBackground(0),
+-          screen(-1),
++          screen(0),
+           immutable(false)
+     {
+     }
+@@ -101,26 +103,45 @@
+ 
+ void Containment::init()
+ {
+-//    setCachePaintMode(NoCacheMode);
++    setCachePaintMode(NoCacheMode);
+     setFlag(QGraphicsItem::ItemIsMovable, false);
+-    KConfigGroup config(KGlobal::config(), "General");
+-    d->wallpaperPath = config.readEntry("wallpaper", QString());
++    setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
++    setAcceptDrops(true);
+ 
+-    //kDebug() << "wallpaperPath is" << d->wallpaperPath << QFile::exists(d->wallpaperPath);
+-    if (d->wallpaperPath.isEmpty() ||
+-        !QFile::exists(d->wallpaperPath)) {
+-        //kDebug() << "SVG wallpaper!";
+-        d->background = new Plasma::Svg("widgets/wallpaper", this);
++    if (type() == DesktopContainment) {
++        KConfigGroup config(KGlobal::config(), "General");
++        d->wallpaperPath = config.readEntry("wallpaper", KStandardDirs::locate("wallpaper", "plasma-default.png"));
++
++        kDebug() << "wallpaperPath is" << d->wallpaperPath << QFile::exists(d->wallpaperPath);
++        if (d->wallpaperPath.isEmpty() ||
++            !QFile::exists(d->wallpaperPath)) {
++            kDebug() << "SVG wallpaper!";
++            d->background = new Plasma::Svg("widgets/wallpaper", this);
++        }
+     }
+-    setAcceptDrops(true);
++
++    if (type() == PanelContainment) {
++        //kDebug() << "we are a panel, let's move ourselves to a negative coordinate system";
++        QDesktopWidget desktop;
++        QRect r = desktop.screenGeometry(screen());
++        //FIXME PANELS: multiple panel support means having to move the panels up
++        //              this requires a proper panel manager, discuss in the panel
++        //              irc meeting
++        translate(0, -r.height() - INTER_CONTAINMENT_MARGIN);
++    }
++
++    //TODO: would be nice to not do this on init, as it causes Phase to init
++    connect(Phase::self(), SIGNAL(animationComplete(QGraphicsItem*,Plasma::Phase::Animation)),
++            this, SLOT(appletDisappearComplete(QGraphicsItem*,Plasma::Phase::Animation)));
+ }
+ 
+ void Containment::initConstraints(KConfigGroup* group)
+ {
+-    //kDebug() << "initConstraints" << group->group();
+-    setScreen(group->readEntry("screen", -1));
+-    setFormFactor((Plasma::FormFactor)group->readEntry("formfactor", (int)Plasma::Planar));
++    //kDebug() << "initConstraints" << group->name() << type();
+     setLocation((Plasma::Location)group->readEntry("location", (int)Plasma::Desktop));
++    setGeometry(group->readEntry("geometry", QRectF()));
++    setFormFactor((Plasma::FormFactor)group->readEntry("formfactor", (int)Plasma::Planar));
++    setScreen(group->readEntry("screen", 0));
+ }
+ 
+ void Containment::saveConstraints(KConfigGroup* group) const
+@@ -130,10 +151,22 @@
+     group->writeEntry("location", (int)d->location);
+ }
+ 
++Containment::Type Containment::type()
++{
++    return DesktopContainment;
++}
++
+ void Containment::paintInterface(QPainter *painter,
+                                  const QStyleOptionGraphicsItem *option,
+                                  const QRect& contentsRect)
+ {
++    //FIXME: this should probably ALL move to the Desktop containment, save for drawing a rect
++    //       in case there is no other drawing going on
++    if (type() != DesktopContainment) {
++        return;
++    }
++
++    //kDebug() << "paintInterface of background";
+     //TODO: we should have a way to do this outside of the paint event!
+     if (d->background) {
+         d->background->resize(contentsRect.size());
+@@ -145,7 +178,8 @@
+         }
+     } else {
+         // got nothing to paint!
+-        painter->drawRect(contentsRect);
++        //kDebug() << "got nothing?";
++        painter->drawRect(contentsRect.adjusted(1, 1, -1, -1));
+         return;
+     }
+ 
+@@ -159,11 +193,13 @@
+     if (d->background) {
+         // Plasma::Svg doesn't support drawing only part of the image (it only
+         // supports drawing the whole image to a rect), so we blit to 0,0-w,h
+-        d->background->paint(painter, 0, 0);
++        d->background->paint(painter, contentsRect);
++    //kDebug() << "draw svg of background";
+     } else if (d->bitmapBackground) {
+         // for pixmaps we draw only the exposed part (untransformed since the
+         // bitmapBackground already has the size of the viewport)
+         painter->drawPixmap(option->exposedRect, *d->bitmapBackground, option->exposedRect);
++    //kDebug() << "draw pixmap of background";
+     }
+ 
+     // restore transformation and composition mode
+@@ -177,25 +213,13 @@
+ 
+ void Containment::contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
+ {
+-    kDebug() << "let's see if we manage to get a context menu here, huh";
++    //kDebug() << "let's see if we manage to get a context menu here, huh";
+     if (!scene() || !KAuthorized::authorizeKAction("desktop_contextmenu")) {
+         QGraphicsItem::contextMenuEvent(event);
+         return;
+     }
+ 
+     QPointF point = event->scenePos();
+-    /*
+-    * example for displaying the SuperKaramba context menu
+-    QGraphicsItem *item = itemAt(point);
+-    if(item) {
+-    QObject *object = dynamic_cast<QObject*>(item->parentItem());
+-    if(object && object->objectName().startsWith("karamba")) {
+-    QContextMenuEvent event(QContextMenuEvent::Mouse, point);
+-    contextMenuEvent(&event);
+-    return;
+-}
+-}
+-    */
+     QGraphicsItem* item = scene()->itemAt(point);
+     if (item == this) {
+         item = 0;
+@@ -247,8 +271,11 @@
+ 
+         if (scene() && !static_cast<Corona*>(scene())->isImmutable()) {
+             QAction* closeApplet = new QAction(i18n("Remove this %1", applet->name()), &desktopMenu);
++            QVariant appletV;
++            appletV.setValue((QObject*)applet);
++            closeApplet->setData(appletV);
+             connect(closeApplet, SIGNAL(triggered(bool)),
+-                    applet, SLOT(destroy()));
++                    this, SLOT(destroyApplet()));
+             desktopMenu.addAction(closeApplet);
+             hasEntries = true;
+         }
+@@ -269,7 +296,7 @@
+     }
+ 
+     event->accept();
+-    desktopMenu.exec(point.toPoint());
++    desktopMenu.exec(event->screenPos());
+ }
+ 
+ void Containment::setFormFactor(FormFactor formFactor)
+@@ -353,6 +380,10 @@
+     }
+ 
+     applet->setParentItem(this);
++    //panels don't want backgrounds, which is important when setting geometry
++    if (type() == PanelContainment) {
++        applet->setDrawStandardBackground(false);
++    }
+     //the applet needs to be given constraints before it can set its geometry
+     applet->updateConstraints(Plasma::AllConstraints);
+ 
+@@ -395,17 +426,6 @@
+     return applet;
+ }
+ 
+-void Containment::addKaramba(const KUrl& path)
+-{
+-    QGraphicsItemGroup* karamba = KarambaManager::loadKaramba(path, scene());
+-    if (karamba) {
+-        karamba->setParentItem(this);
+-        Phase::self()->animateItem(karamba, Phase::Appear);
+-    } else {
+-        kDebug() << "Karamba " << path << " could not be loaded.";
+-    }
+-}
+-
+ void Containment::appletDestroyed(QObject* object)
+ {
+     // we do a static_cast here since it really isn't an Applet by this
+@@ -420,6 +440,31 @@
+     }
+ }
+ 
++void Containment::destroyApplet()
++{
++    QAction *action = qobject_cast<QAction*>(sender());
++
++    if (!action) {
++        return;
++    }
++
++    Applet *applet = qobject_cast<Applet*>(action->data().value<QObject*>());
++    Phase::self()->animateItem(applet, Phase::Disappear);
++}
++
++void Containment::appletDisappearComplete(QGraphicsItem *item, Plasma::Phase::Animation anim)
++{
++    if (anim == Phase::Disappear) {
++        if (item->parentItem() == this) {
++            Applet *applet = qgraphicsitem_cast<Applet*>(item);
++
++            if (applet) {
++                applet->destroy();
++            }
++        }
++    }
++}
++
+ Applet::List Containment::applets() const
+ {
+     return d->applets;
+@@ -434,9 +479,10 @@
+         screen = -1;
+     }
+ 
+-    if (screen > -1) {
++    //kDebug() << "setting scrreen to " << screen << "and type is" << type();
++    if (screen > -1 && type() == DesktopContainment) {
+         setGeometry(desktop.screenGeometry(screen));
+-        //kDebug() << "setting geometry to" << desktop.screenGeometry(screen);
++        //kDebug() << "setting geometry to" << desktop.screenGeometry(screen) << geometry();
+     }
+ 
+     d->screen = screen;
+--- a/libs/plasma/applet.cpp
++++ b/libs/plasma/applet.cpp
+@@ -268,6 +268,9 @@
+                 p.drawTiledPixmap(QRect(contentLeft, bottomOffset, contentWidth, bottomHeight), bottom);
+             }
+ 
++            // re-enable this once Qt's svg rendering is un-buggered
++            //background->resize(contentWidth, contentHeight);
++            //background->paint(&p, QRect(contentLeft, contentTop, contentWidth, contentHeight), "center");
+         }
+ 
+         p2->drawPixmap(leftOffset, topOffset, *cachedBackground);
+@@ -424,8 +427,7 @@
+ KConfigGroup Applet::config(const QString& group) const
+ {
+     KConfigGroup cg = config();
+-    cg.changeGroup(instanceName() + '-' + group);
+-    return cg;
++    return KConfigGroup(cg.config(), instanceName() + '-' + group);
+ }
+ 
+ KConfigGroup Applet::globalConfig() const
+@@ -696,6 +698,7 @@
+ 
+ QList<QAction*> Applet::contextActions()
+ {
++    kDebug() << "empty actions";
+     return QList<QAction*>();
+ }
+ 
+@@ -995,6 +998,8 @@
+         //      from the network at this point
+         kDebug() << "Applet::loadApplet: offers is empty for \"" << appletName << "\"";
+         return 0;
++    } else if (offers.count() > 1) {
++        kDebug() << "hey! we got more than one! let's blindly take the first one";
+     }
+ 
+     if (appletId == 0) {
+@@ -1089,7 +1094,7 @@
+ 
+ void Applet::setGeometry(const QRectF& geometry)
+ {
+-    if (size() != geometry.size()) {
++    if (geometry.size().width() > 0 && geometry.size().height() > 0 && size() != geometry.size()) {
+         prepareGeometryChange();
+         qreal width = qBound(minimumSize().width(), geometry.size().width(), maximumSize().width());
+         qreal height = qBound(minimumSize().height(), geometry.size().height(), maximumSize().height());
+--- a/libs/plasma/widgets/flash.h
++++ b/libs/plasma/widgets/flash.h
+@@ -1,5 +1,5 @@
+ /*
+- *   Copyright 2007 by André Duffeck <andre at duffeck.de>
++ *   Copyright 2007 by André Duffeck <duffeck at kde.org>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+  *   it under the terms of the GNU Library General Public License as
+@@ -43,9 +43,9 @@
+ 
+         void paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+         QRectF boundingRect() const;
+-        QSize size() const;
+-        int height() const;
+-        int width() const;
++        QSizeF minimumSize() const;
++        QSizeF maximumSize() const;
++        virtual QSizeF sizeHint() const;
+         void setSize(const QSize &size);
+         void setWidth(int width);
+         void setHeight(int height);
+--- a/libs/plasma/widgets/borderlayout.h
++++ b/libs/plasma/widgets/borderlayout.h
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2,
+- *   or (at your option) any later version, as published by the Free 
+- *   Software Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+--- a/libs/plasma/widgets/label.h
++++ b/libs/plasma/widgets/label.h
+@@ -24,6 +24,7 @@
+ 
+ #include <plasma/widgets/widget.h>
+ #include <QtGui/QPen>
++#include <QtGui/QFont>
+ 
+ class QGraphicsTextItem;
+ 
+@@ -107,6 +108,16 @@
+         QPen pen() const;
+ 
+         /**
++         * Sets the font used for the text.
++         */
++        void setFont(const QFont& font);
++
++        /**
++         * Returns the font used for the text.
++         */
++        QFont font() const;
++
++        /**
+          * Paint function.
+          */
+         void paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+--- a/libs/plasma/widgets/icon.cpp
++++ b/libs/plasma/widgets/icon.cpp
+@@ -915,18 +915,21 @@
+ 
+ void Icon::mousePressEvent(QGraphicsSceneMouseEvent *event)
+ {
++    kDebug();
+     foreach (IconAction *action, d->cornerActions) {
+         action->event(event->type(), event->pos());
+     }
+ 
+     d->state = Private::PressedState;
++    emit pressed(true);
+ 
+-    QGraphicsItem::mousePressEvent(event);
++    event->ignore();
+     update();
+ }
+ 
+ void Icon::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+ {
++    kDebug();
+     bool inside = boundingRect().contains(event->pos());
+     Private::ButtonState was = d->state;
+ 
+@@ -939,8 +942,11 @@
+                 break;
+             }
+         }
++    } else {
++        d->state = Private::NoState;
+     }
+-    else if (was == Private::PressedState) {
++
++    if (was == Private::PressedState) {
+         emit pressed(false);
+ 
+         if (inside) {
+@@ -948,11 +954,8 @@
+         }
+         d->state = Private::NoState;
+     }
+-    else {
+-        d->state = Private::NoState;
+-    }
+ 
+-    QGraphicsItem::mouseReleaseEvent(event);
++    event->ignore();
+     update();
+ }
+ 
+@@ -964,7 +967,7 @@
+     }
+ 
+     d->state = Private::HoverState;
+-    QGraphicsItem::hoverEnterEvent(event);
++    Widget::hoverEnterEvent(event);
+ }
+ 
+ void Icon::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+@@ -975,7 +978,7 @@
+     }
+ 
+     d->state = Private::NoState;
+-    QGraphicsItem::hoverLeaveEvent(event);
++    Widget::hoverLeaveEvent(event);
+ }
+ 
+ void Icon::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+@@ -984,7 +987,7 @@
+         d->state = Private::HoverState;
+     }
+ 
+-    QGraphicsItem::mouseMoveEvent(event);
++    Widget::mouseMoveEvent(event);
+ }
+ 
+ QSizeF Icon::sizeHint() const
+--- a/libs/plasma/widgets/widget.h
++++ b/libs/plasma/widgets/widget.h
+@@ -45,7 +45,8 @@
+  * Widgets are rectangular, but can be in any visible shape by just using transparency to mask
+  * out non-rectangular areas.
+  *
+- * To implement a Widget, just subclass Plasma::Widget and implement at minimum, sizeHint() and paint()
++ * To implement a Widget, just subclass Plasma::Widget and implement at minimum,
++ * sizeHint() and paintWidget()
+  */
+ class PLASMA_EXPORT Widget  : public QObject,
+                               public QGraphicsItem,
+@@ -256,6 +257,7 @@
+      */
+     virtual void paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+     void setSize(const QSizeF& size);
++    void managingLayoutChanged();
+ 
+ private:
+     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+--- /dev/null
++++ b/libs/plasma/widgets/nodelayout.h
+@@ -0,0 +1,119 @@
++/*
++ *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library/Lesser General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef PLASMA_NODE_LAYOUT
++#define PLASMA_NODE_LAYOUT
++
++#include <QtCore/QMap>
++#include <cmath>
++
++#include <plasma/plasma_export.h>
++#include <plasma/plasma.h>
++#include <plasma/widgets/layout.h>
++
++namespace Plasma {
++
++/**
++ * Node layout has an advanced layouting mechanism. Every item's position
++ * is defined by two nodes - one for top-left corner, and the other one for
++ * bottom-right corner.
++ * 
++ * Each node is defined by a pair of relative (xr, yr) and a pair of 
++ * absolute (xa, ya) coordinates. The calculated node coordinates depend
++ * on the size and position of the NodeLayout object in the following
++ * manner:
++ *   x = layoutLeft + (xr * layoutWidth)  + xa
++ *   y = layoutTop  + (yr * layoutHeight) + ya
++ *
++ * Alternatively, the item's position can be defined by using one node and
++ * one pair of relative coordinates (xr, yr). In that case, the item is sized
++ * following the sizeHint(). The relative coordinates (this time they are 
++ * relative to the item's geometry, not the layout's) specify what point of
++ * the item will be bound to the defined node.
++ */
++
++class PLASMA_EXPORT NodeLayout : public Layout {
++public:
++    class PLASMA_EXPORT NodeCoordinate {
++    public:
++        /**
++         * Position is calculated:
++         * x = parentLeft + (xRelative * parentWidth)  + xAbsolute
++         * y = parentTop  + (yRelative * parentHeight) + yAbsolute
++         */
++        NodeCoordinate(qreal xRelative = 0, qreal yRelative = 0, qreal xAbsolute = 0, qreal yAbsolute = 0);
++
++        enum CoordinateType {
++            Relative = 0,
++            Absolute = 1,
++            InnerRelative = 2 };
++
++        static NodeCoordinate simple(qreal x, qreal y, CoordinateType xType = Relative, CoordinateType yType = Relative);
++
++        float xr, xa;
++        float yr, ya;
++    };
++
++    // reimplemented
++    virtual Qt::Orientations expandingDirections() const;
++
++    explicit NodeLayout(LayoutItem * parent = 0);
++    virtual ~NodeLayout();
++
++    virtual QRectF geometry() const;
++    void setGeometry(const QRectF& geometry);
++
++    QSizeF sizeHint() const;
++
++    /**
++     * Adds item at top-left corner, with automatic sizing
++     * (using sizeHint of the item)
++     */
++    void addItem (LayoutItem * item);
++
++    /**
++     * Adds item with specified top-left and bottom right corners.
++     */
++    void addItem (LayoutItem * item,
++            NodeCoordinate topLeft, NodeCoordinate bottomRight);
++
++    /**
++     * Adds item with automatic sizing turned on. xr and yr specify
++     * which point of the item is bound to node coordinate. Those
++     * are relative coordinates so (0, 0) represent top left corner,
++     * (0.5, 0.5) represent the center of the item etc.
++     */
++    void addItem (LayoutItem * item,
++            NodeCoordinate node, qreal xr = 0, qreal yr = 0);
++
++    void removeItem (LayoutItem * item);
++
++    virtual int count() const;
++    virtual int indexOf(LayoutItem * item) const;
++    virtual LayoutItem * itemAt(int i) const;
++    virtual LayoutItem * takeAt(int i);
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif /* PLASMA_NODE_LAYOUT */
+--- a/libs/plasma/widgets/flash.cpp
++++ b/libs/plasma/widgets/flash.cpp
+@@ -1,5 +1,5 @@
+ /*
+- *   Copyright 2007 by André Duffeck <andre at duffeck.de>
++ *   Copyright 2007 by André Duffeck <duffeck at kde.org>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+  *   it under the terms of the GNU Library General Public License as
+@@ -74,6 +74,8 @@
+     d->width = 100 ;
+     d->animId = 0;
+     d->state = Private::Invisible;
++
++    setCachePaintMode( NoCacheMode );
+ }
+ 
+ Flash::~Flash()
+@@ -86,16 +88,6 @@
+     return QRectF(0,0,d->width,d->height);
+ }
+ 
+-int Flash::height() const
+-{
+-    return d->height;
+-}
+-
+-int Flash::width() const
+-{
+-    return d->width;
+-}
+-
+ void Flash::setHeight(int h)
+ {
+     prepareGeometryChange ();
+@@ -115,7 +107,12 @@
+     d->defaultDuration = duration;
+ }
+ 
+-QSize Flash::size() const
++QSizeF Flash::minimumSize() const
++{
++    return QSize(d->width,d->height);
++}
++
++QSizeF Flash::maximumSize() const
+ {
+     return QSize(d->width,d->height);
+ }
+@@ -128,6 +125,11 @@
+     update();
+ }
+ 
++QSizeF Flash::sizeHint() const
++{
++    return minimumSize();
++}
++
+ void Flash::setColor( const QColor &color )
+ {
+     d->color = color;
+@@ -140,8 +142,9 @@
+ 
+ void Flash::flash( const QString &text, int duration, const QTextOption &option)
+ {
++    kDebug() << duration << endl;
+     d->type = Private::Text;
+-    d->duration = (duration == 0) ? duration : d->defaultDuration;
++    d->duration = (duration == 0) ? d->defaultDuration : duration;
+     d->text = text;
+     d->textOption = option;
+     QTimer::singleShot( 0, this, SLOT(fadeIn()) );
+@@ -150,7 +153,7 @@
+ void Flash::flash( const QPixmap &pixmap, int duration, Qt::Alignment align )
+ {
+     d->type = Private::Pixmap;
+-    d->duration = (duration == 0) ? duration : d->defaultDuration;
++    d->duration = (duration == 0) ? d->defaultDuration : duration;
+     d->pixmap = pixmap;
+     d->alignment = align;
+     QTimer::singleShot( 0, this, SLOT(fadeIn()) );
+@@ -184,14 +187,14 @@
+ 
+ QPixmap Flash::renderPixmap()
+ {
+-    QPixmap pm( width(), height() );
++    QPixmap pm( size().toSize() );
+     pm.fill(Qt::transparent);
+ 
+     QPainter painter( &pm );
+     if( d->type == Private::Text ) {
+         painter.setPen( d->color );
+         painter.setFont( d->font );
+-        painter.drawText( QRect( 0, 0, width(), height() ), d->text, d->textOption);
++        painter.drawText( QRect( QPoint(0, 0), size().toSize() ), d->text, d->textOption);
+     } else if( d->type == Private::Pixmap ) {
+         QPoint p;
+         if( d->alignment & Qt::AlignLeft )
+@@ -212,7 +215,6 @@
+     }
+     return pm;
+ }
+-
+ void Flash::paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+     Q_UNUSED(option)
+--- a/libs/plasma/widgets/layoutitem.h
++++ b/libs/plasma/widgets/layoutitem.h
+@@ -149,6 +149,12 @@
+          */
+         virtual QGraphicsItem* graphicsItem();
+ 
++    protected:
++        /**
++         * Reimplement to respond to a change in managing layout
++         */
++        virtual void managingLayoutChanged();
++
+     private:
+         class Private;
+         Private *const d;
+--- a/libs/plasma/widgets/borderlayout.cpp
++++ b/libs/plasma/widgets/borderlayout.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2,
+- *   or (at your option) any later version, as published by the Free 
+- *   Software Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+@@ -83,39 +83,45 @@
+ 
+ void BorderLayout::invalidate()
+ {
+-
+-    QPointF origin = d->geometry.topLeft();
+-    qreal top = 0, bottom = 0, left = 0, right = 0;
++    QRectF geometry = d->geometry;
++    geometry.setTopLeft(geometry.topLeft() + QPointF(margin(), margin()));
++    geometry.setBottomRight(geometry.bottomRight() - QPointF(margin(), margin()));
++
++    QPointF origin = geometry.topLeft();
++    qreal top, bottom, left, right;
++    top    = (d->sizes[TopPositioned] >= 0)    ? d->sizes[TopPositioned]    : 0;
++    left   = (d->sizes[LeftPositioned] >= 0)   ? d->sizes[LeftPositioned]   : 0;
++    bottom = geometry.height() - ((d->sizes[BottomPositioned] >= 0) ? d->sizes[BottomPositioned] : 0);
++    right  = geometry.width()  - ((d->sizes[RightPositioned] >= 0)  ? d->sizes[RightPositioned]  : 0);
+ 
+     if (d->itemPositions[TopPositioned] /*&& d->itemPositions[TopPositioned]->isVisible()*/) {
+         top = (d->sizes[TopPositioned] >= 0) ? d->sizes[TopPositioned] : d->itemPositions[TopPositioned]->sizeHint().height();
+         d->itemPositions[TopPositioned]->setGeometry(QRectF(origin, QSizeF(
+-                d->geometry.width(), top)));
+-	top += spacing();
+-
++                geometry.width(), top)));
++        top += spacing();
+     }
+ 
+     if (d->itemPositions[BottomPositioned] /*&& d->itemPositions[BottomPositioned]->isVisible()*/) {
+         bottom = (d->sizes[BottomPositioned] >= 0) ? d->sizes[BottomPositioned]
+                 : d->itemPositions[BottomPositioned]->sizeHint().height();
+         d->itemPositions[BottomPositioned]->setGeometry(QRectF(origin + QPointF(0,
+-                d->geometry.height() - bottom), QSizeF(d->geometry.width(),
++                geometry.height() - bottom), QSizeF(geometry.width(),
+                 bottom)));
+-        bottom = d->geometry.height() - bottom - spacing();
++        bottom = geometry.height() - bottom - spacing();
+     }
+ 
+     if (d->itemPositions[LeftPositioned] /*&& d->itemPositions[LeftPositioned]->isVisible()*/) {
+         left = (d->sizes[LeftPositioned] >= 0) ? d->sizes[LeftPositioned] : d->itemPositions[LeftPositioned]->sizeHint().width();
+         d->itemPositions[LeftPositioned]->setGeometry(QRectF(origin + QPointF(0, top),
+                 QSizeF(left, bottom - top)));
+-	left += spacing();
++        left += spacing();
+     }
+ 
+     if (d->itemPositions[RightPositioned] /*&& d->itemPositions[RightPositioned]->isVisible()*/) {
+         right = (d->sizes[RightPositioned] >= 0) ? d->sizes[RightPositioned] : d->itemPositions[RightPositioned]->sizeHint().width();
+         d->itemPositions[RightPositioned]->setGeometry(QRectF(origin + QPointF(
+-                d->geometry.width() - right, top), QSizeF(right, bottom - top)));
+-        right = d->geometry.width() - right - spacing();
++                geometry.width() - right, top), QSizeF(right, bottom - top)));
++        right = geometry.width() - right - spacing();
+     }
+ 
+     if (d->itemPositions[CenterPositioned] /*&& d->itemPositions[CenterPositioned]->isVisible()*/) {
+@@ -151,7 +157,7 @@
+         hintWidth += d->itemPositions[CenterPositioned]->sizeHint().width();
+     }
+ 
+-    return QSizeF(hintWidth, hintHeight);
++    return QSizeF(hintWidth + 2 * margin(), hintHeight + 2 * margin());
+ }
+ 
+ void BorderLayout::addItem(Plasma::LayoutItem * item)
+--- a/libs/plasma/widgets/label.cpp
++++ b/libs/plasma/widgets/label.cpp
+@@ -14,6 +14,7 @@
+         QString text;
+         Qt::Alignment alignment;
+         QPen textPen;
++        QFont textFont;
+ };
+ 
+ Label::Label(Widget *parent)
+@@ -47,9 +48,9 @@
+ 
+ QSizeF Label::sizeHint() const
+ {
+-    QFontMetricsF m(QFont("Arial", 12));
++    QFontMetricsF m(d->textFont);
+ 
+-    return m.boundingRect(d->text).size();
++    return m.boundingRect(QRectF(0,0,9999,9999), d->alignment | Qt::TextWordWrap, d->text).size();
+ }
+ 
+ void Label::setText(const QString& text)
+@@ -82,12 +83,23 @@
+     return d->textPen;
+ }
+ 
++void Label::setFont(const QFont& font)
++{
++    d->textFont = font;
++}
++
++QFont Label::font() const
++{
++    return d->textFont;
++}
++
+ void Label::paintWidget(QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+     Q_UNUSED(option);
+     Q_UNUSED(widget);
+ 
+     p->setPen(d->textPen);
++    p->setFont(d->textFont);
+     p->drawText(option->rect, d->alignment | Qt::TextWordWrap, d->text);
+ }
+ 
+--- /dev/null
++++ b/libs/plasma/widgets/nodelayout.cpp
+@@ -0,0 +1,240 @@
++/*
++ *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library/Lesser General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "nodelayout.h"
++
++#include <QPair>
++#include <QMap>
++
++namespace Plasma
++{
++NodeLayout::NodeCoordinate::NodeCoordinate(qreal xRelative, qreal yRelative, qreal xAbsolute, qreal yAbsolute)
++    : xr(xRelative), xa(xAbsolute), yr(yRelative), ya(yAbsolute) {}
++
++NodeLayout::NodeCoordinate NodeLayout::NodeCoordinate::simple(qreal x, qreal y,
++        CoordinateType xType, CoordinateType yType)
++{
++    NodeLayout::NodeCoordinate coo;
++    switch (xType) {
++    case Relative:
++        coo.xr = x;
++        coo.xa = 0;
++        break;
++    case Absolute:
++        coo.xr = 0;
++        coo.xa = x;
++        break;
++    case InnerRelative:
++        coo.xr = x;
++        coo.xa = INFINITY;
++        break;
++    }
++
++    switch (yType) {
++    case Relative:
++        coo.yr = y;
++        coo.ya = 0;
++        break;
++    case Absolute:
++        coo.yr = 0;
++        coo.ya = y;
++        break;
++    case InnerRelative:
++        coo.yr = y;
++        coo.ya = INFINITY;
++        break;
++    }
++    return coo;
++}
++
++class NodeLayout::Private {
++public:
++    QMap <LayoutItem * , QPair < NodeCoordinate, NodeCoordinate > > items;
++    QRectF geometry;
++    QSizeF sizeHint;
++
++    qreal calculateXPosition(const NodeCoordinate & coo, const QRectF & parentGeometry) const
++    {
++        return parentGeometry.left() + (coo.xr * parentGeometry.width())  + coo.xa;
++    }
++
++    qreal calculateYPosition(const NodeCoordinate & coo, const QRectF & parentGeometry) const
++    {
++        return parentGeometry.top() + (coo.yr * parentGeometry.height())  + coo.ya;
++    }
++
++    QPointF calculatePosition(const NodeCoordinate & coo, const QRectF & parentGeometry) const
++    {
++        return QPointF(
++            calculateXPosition(coo, geometry),
++            calculateYPosition(coo, geometry)
++        );
++    }
++
++
++    QRectF calculateRectangle(LayoutItem * item, QRectF geometry = QRectF()) const
++    {
++        if (geometry == QRectF()) geometry = this->geometry;
++
++        QRectF result;
++        if (!item || !items.contains(item)) return QRectF();
++
++        result.setTopLeft(calculatePosition(items[item].first, geometry));
++
++        if (items[item].second.xa != INFINITY) {
++            result.setRight(calculateXPosition(items[item].second, geometry));
++        } else {
++            result.setWidth(item->sizeHint().width());
++            result.moveLeft(result.left() - items[item].second.xr * result.width());
++        }
++
++        if (items[item].second.ya != INFINITY) {
++            result.setBottom(calculateYPosition(items[item].second, geometry));
++        } else {
++            result.setHeight(item->sizeHint().height());
++            result.moveTop(result.top() - items[item].second.yr * result.height());
++        }
++
++        return result;
++    }
++
++    void invalidate()
++    {
++        foreach (LayoutItem * item, items.keys()) {
++            if (item) {
++                item->setGeometry(calculateRectangle(item));
++            }
++        }
++    }
++
++    void calculateSizeHint(LayoutItem * item = NULL) {
++        if (item == NULL) {
++            // Recalculate the sizeHint using all items
++            sizeHint = QSizeF();
++            foreach (LayoutItem * item, items.keys()) {
++                if (item) {
++                    calculateSizeHint(item);
++                }
++            }
++        } else {
++            // Calculate size hint for current item
++            QRectF scaled = calculateRectangle(item, QRectF(0, 0, 1, 1));
++
++            // qMin(..., 1.0) so that for autosized elements we don't get smaller
++            // size than the item's size itself. The sizeHint for NodeLayout can
++            // not do anything smarter concerning the sizeHint when there are
++            // autosized elements.
++
++            qreal width  = item->sizeHint().width()  / qMin(scaled.width(), 1.0);
++            qreal height = item->sizeHint().height() / qMin(scaled.height(), 1.0);
++
++            if (width > sizeHint.width())   sizeHint.setWidth(width);
++            if (height > sizeHint.height()) sizeHint.setHeight(height);
++        }
++    }
++
++};
++
++
++NodeLayout::NodeLayout(LayoutItem * parent) 
++  : Layout(parent), d(new Private())
++{
++}
++
++NodeLayout::~NodeLayout()
++{
++    delete d;
++}
++
++Qt::Orientations NodeLayout::expandingDirections() const
++{
++    return Qt::Horizontal | Qt::Vertical;
++}
++
++QRectF NodeLayout::geometry() const
++{
++    return d->geometry;
++}
++
++void NodeLayout::setGeometry(const QRectF& geometry)
++{
++    if (!geometry.isValid() || geometry.isEmpty()) {
++        return;
++    }
++
++    d->geometry = geometry;
++    d->invalidate();
++}
++
++QSizeF NodeLayout::sizeHint() const
++{
++    return d->sizeHint;
++}
++
++void NodeLayout::addItem (LayoutItem * item)
++{
++    NodeLayout::addItem (item, NodeCoordinate());
++}
++
++void NodeLayout::addItem (LayoutItem * item, NodeCoordinate topLeft, NodeCoordinate bottomRight)
++{
++    if (!item) return;
++    d->items[item] = QPair<NodeCoordinate, NodeCoordinate>(topLeft, bottomRight);
++    d->calculateSizeHint(item);
++}
++
++void NodeLayout::addItem (LayoutItem * item, NodeCoordinate node, qreal xr, qreal yr)
++{
++    if (!item) return;
++    d->items[item] = QPair<NodeCoordinate, NodeCoordinate>(node,
++        NodeCoordinate::simple(xr, yr, NodeCoordinate::InnerRelative, NodeCoordinate::InnerRelative));
++    d->calculateSizeHint(item);
++}
++
++void NodeLayout::removeItem (LayoutItem * item)
++{
++    if (!item) return;
++    d->items.remove(item);
++    d->calculateSizeHint();
++}
++
++int NodeLayout::count() const
++{
++    return d->items.count();
++}
++
++int NodeLayout::indexOf(LayoutItem * item) const
++{
++    if (!item) return -1;
++    return d->items.keys().indexOf(item);
++}
++
++LayoutItem * NodeLayout::itemAt(int i) const
++{
++    return d->items.keys()[i];
++}
++
++LayoutItem * NodeLayout::takeAt(int i)
++{
++    LayoutItem * item = itemAt(i);
++    removeItem(item);
++    return item;
++}
++
++}
+--- a/libs/plasma/widgets/widget.cpp
++++ b/libs/plasma/widgets/widget.cpp
+@@ -34,7 +34,7 @@
+ 
+ #include <KDebug>
+ 
+-#include "layout.h"
++#include "freelayout.h"
+ #include "plasma/plasma.h"
+ 
+ namespace Plasma
+@@ -44,12 +44,13 @@
+ {
+     public:
+         Private()
+-            : minimumSize(0,0)
+-            , maximumSize(std::numeric_limits<qreal>::infinity(),
+-                          std::numeric_limits<qreal>::infinity())
+-            , parent(0)
+-            , opacity(1.0)
+-            , cachePaintMode(Widget::NoCacheMode)
++            : minimumSize(0,0),
++              maximumSize(std::numeric_limits<qreal>::infinity(),
++                          std::numeric_limits<qreal>::infinity()),
++              parent(0),
++              opacity(1.0),
++              cachePaintMode(Widget::NoCacheMode),
++              wasMovable(false)
+         { }
+         ~Private() { }
+ 
+@@ -71,6 +72,8 @@
+         QString cacheKey;
+         QRectF cacheInvalidated;
+ 
++        bool wasMovable;
++
+         bool shouldPaint(QPainter *painter, const QTransform &transform);
+ };
+ 
+@@ -208,7 +211,7 @@
+ 
+ void Widget::setGeometry(const QRectF& geometry)
+ {
+-    if (d->size != geometry.size()) {
++    if (geometry.size().width() > 0 && geometry.size().height() > 0 && d->size != geometry.size()) {
+         prepareGeometryChange();
+         qreal width = qBound(d->minimumSize.width(), geometry.size().width(), d->maximumSize.width());
+         qreal height = qBound(d->minimumSize.height(), geometry.size().height(), d->maximumSize.height());
+@@ -233,6 +236,8 @@
+ {
+     if (managingLayout()) {
+         managingLayout()->invalidate();
++    } else {
++        setGeometry(QRectF(pos(), sizeHint()));
+     }
+ }
+ 
+@@ -241,7 +246,7 @@
+     if (layout()) {
+         return layout()->sizeHint();
+     } else {
+-        return QSizeF();
++        return boundingRect().size();
+     }
+ }
+ 
+@@ -290,7 +295,7 @@
+     w->reparent(this);
+     d->childList.append(w);
+ 
+-    qDebug("Added Child Widget : %p", (void*)w);
++    //kDebug() << "Added Child Widget" <<  w;
+ 
+     if (layout()) {
+         layout()->addItem(w);
+@@ -325,7 +330,7 @@
+         // Recreate the pixmap if it's gone.
+         if (pix.isNull()) {
+             pix = QPixmap(d->cacheSize);
+- 	    pix.fill(Qt::transparent);
++            pix.fill(Qt::transparent);
+             exposed = brect;
+         }
+ 
+@@ -431,5 +436,17 @@
+     update();
+ }
+ 
++void Widget::managingLayoutChanged()
++{
++    if (managingLayout()) {
++        d->wasMovable = flags() & ItemIsMovable;
++        if (!dynamic_cast<FreeLayout*>(managingLayout())) {
++//            setFlag(ItemIsMovable, false);
++        }
++    } else {
++//        setFlag(ItemIsMovable, d->wasMovable);
++    }
++}
++
+ } // Plasma namespace
+ 
+--- a/libs/plasma/widgets/boxlayout.cpp
++++ b/libs/plasma/widgets/boxlayout.cpp
+@@ -396,12 +396,11 @@
+         else
+             expansionSpace[i] = 0;
+ 
++        available -= sizes[i];
+         // adjust the per-item size if the space was over or under used
+         if ( sizes[i] != perItemSize && i != sizes.count()-1 ) {
+             perItemSize = available / (sizes.count()-i-1);
+         }
+-
+-        available -= sizes[i];
+     }
+ 
+     // distribute out any remaining space to items which can still expand
+--- a/libs/plasma/widgets/layoutitem.cpp
++++ b/libs/plasma/widgets/layoutitem.cpp
+@@ -115,6 +115,7 @@
+     }
+ 
+     d->managingLayout = layout;
++    managingLayoutChanged();
+ }
+ 
+ void LayoutItem::unsetManagingLayout(Layout* layout)
+@@ -122,6 +123,11 @@
+     if (d->managingLayout == layout) {
+         d->managingLayout = 0;
+     }
++    managingLayoutChanged();
++}
++
++void LayoutItem::managingLayoutChanged()
++{
+ }
+ 
+ Layout* LayoutItem::managingLayout() const
+--- a/libs/plasma/widgets/lineedit.cpp
++++ b/libs/plasma/widgets/lineedit.cpp
+@@ -186,7 +186,6 @@
+ 
+ QSizeF LineEdit::sizeHint() const
+ {
+-    kDebug() << "LineEdit::sizeeHint() " << document()->size();
+     return document()->size();
+ }
+ 
+--- a/libs/plasma/corona.h
++++ b/libs/plasma/corona.h
+@@ -146,13 +146,6 @@
+     QList<Containment*> containments() const;
+ 
+     /**
+-     * Adds a SuperKaramba theme to the scene
+-     *
+-     * @param path the path to the theme file
+-     */
+-    void addKaramba(const KUrl& path);
+-
+-    /**
+      * Sets if the applets are Immutable
+      */
+     void setImmutable(bool immutable_);
+--- a/libs/plasma/appletbrowser.cpp
++++ b/libs/plasma/appletbrowser.cpp
+@@ -2,16 +2,16 @@
+  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
+  *
+  *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU General Public License version 2 (or,
+- *   at your option, any later version) as published by the Free Software
+- *   Foundation
++ *   it under the terms of the GNU Library/Lesser General Public License
++ *   version 2, or (at your option) any later version, as published by the
++ *   Free Software Foundation
+  *
+  *   This program is distributed in the hope that it will be useful,
+  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  *   GNU General Public License for more details
+  *
+- *   You should have received a copy of the GNU Library General Public
++ *   You should have received a copy of the GNU Library/Lesser General Public
+  *   License along with this program; if not, write to the
+  *   Free Software Foundation, Inc.,
+  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+@@ -21,6 +21,8 @@
+ 
+ #include <KAction>
+ #include <KStandardAction>
++#include <KConfig>
++#include <KConfigGroup>
+ 
+ 
+ #include "plasma/corona.h"
+@@ -38,15 +40,20 @@
+         : corona(co),
+           containment(cont),
+           appletList(0),
+-          itemModel(q),
++          config("plasmarc"),
++          configGroup(&config, "Applet Browser"),
++          itemModel(configGroup, q),
+           filterModel(q)
+     {
+-
+     }
+ 
+     Plasma::Corona *corona;
+     Plasma::Containment *containment;
+     KCategorizedItemsView *appletList;
++
++    KConfig config;
++    KConfigGroup configGroup;
++
+     PlasmaAppletItemModel itemModel;
+     KCategorizedItemsViewModels::DefaultFilterModel filterModel;
+ };
+@@ -68,8 +75,11 @@
+ void AppletBrowser::init()
+ {
+     d->appletList = new KCategorizedItemsView(this);
++    connect(d->appletList, SIGNAL(activated(const QModelIndex &)), this, SLOT(addApplet()));
+     setMainWidget(d->appletList);
+ 
++    setWindowTitle("Add Applets");
++
+     setButtons(KDialog::Apply | KDialog::Close | KDialog::User1);
+     setButtonText(KDialog::Apply, i18n("Add Applet"));
+     setButtonText(KDialog::User1, i18n("Get New Applets")); //TODO: not overly happy with this text
+@@ -81,20 +91,38 @@
+     QAction* quit = KStandardAction::quit(qApp, SLOT(quit()), this);
+     addAction(quit);
+ 
+-    // Emblems
+-    d->appletList->addEmblem(i18n("Recommended by KDE"), new KIcon("about-kde"), 
+-                                KCategorizedItemsViewModels::Filter("recommended", true));
+-    d->appletList->addEmblem(i18n("Used in past"), new KIcon("history"), 
++    d->filterModel.addFilter(i18n("All Applets"),
++        KCategorizedItemsViewModels::Filter(), new KIcon("application-x-plasma"));
++
++    // Recommended emblems and filters
++    QRegExp rx("recommended[.]([0-9A-Za-z]+)[.]caption");
++    QMapIterator<QString, QString> i(d->configGroup.entryMap());
++    while (i.hasNext()) {
++        i.next();
++        if (!rx.exactMatch(i.key())) continue;
++        //kDebug() << "These are the key/vals in rc file " << rx.cap(1) << "\n";
++
++        QString id = rx.cap(1);
++        QString caption = d->configGroup.readEntry("recommended." + id + ".caption");
++        QString icon    = d->configGroup.readEntry("recommended." + id + ".icon");
++        QString plugins = d->configGroup.readEntry("recommended." + id + ".plugins");
++
++        d->appletList->addEmblem(i18n("Recommended by %1", caption), new KIcon(icon), 
++            KCategorizedItemsViewModels::Filter("recommended." + id, true));
++        d->filterModel.addFilter(i18n("Recommended by %1", caption),
++            KCategorizedItemsViewModels::Filter("recommended." + id, true), new KIcon(icon));
++
++        //foreach (QString plugin, plugins.split(",")) {}
++    }
++
++    // Other Emblems
++    d->appletList->addEmblem(i18n("Used in Past"), new KIcon("history"), 
+                                 KCategorizedItemsViewModels::Filter("used", true));
+ 
+     // Filters: Special
+-    d->filterModel.addFilter(i18n("All applets"),
+-        KCategorizedItemsViewModels::Filter(), new KIcon("application-x-plasma"));
+-    d->filterModel.addFilter(i18n("Recommended by KDE"),
+-        KCategorizedItemsViewModels::Filter("recommended", true), new KIcon("about-kde"));
+     d->filterModel.addFilter(i18n("Favorites"),
+         KCategorizedItemsViewModels::Filter("favorite", true), new KIcon("bookmark"));
+-    d->filterModel.addFilter(i18n("Used in past"),
++    d->filterModel.addFilter(i18n("Used in Past"),
+         KCategorizedItemsViewModels::Filter("used", true), new KIcon("history"));
+ 
+     d->filterModel.addSeparator(i18n("Categories:"));
+@@ -124,10 +152,12 @@
+         kDebug() << "Adding applet " << selectedItem->name();
+         if (d->corona) {
+             kDebug() << " to corona\n";
+-            d->corona->addApplet(selectedItem->pluginName());
++            d->corona->addApplet(selectedItem->pluginName(),
++                    selectedItem->arguments());
+         } else if (d->containment) {
+-            kDebug() << " to conatainment\n";
+-            d->containment->addApplet(selectedItem->pluginName());
++            kDebug() << " to containment\n";
++            d->containment->addApplet(selectedItem->pluginName(),
++                    selectedItem->arguments());
+         }
+ 
+     }
+--- a/libs/taskmanager/taskrmbmenu.cpp
++++ b/libs/taskmanager/taskrmbmenu.cpp
+@@ -63,79 +63,80 @@
+ 
+ void TaskRMBMenu::fillMenu(Task::TaskPtr t)
+ {
+-    int id;
+-    setCheckable(true);
++    QAction *a;
+ 
+-    insertItem(i18n("Ad&vanced"), makeAdvancedMenu(t));
++    addMenu(makeAdvancedMenu(t));
+     bool checkActions = KWindowSystem::allowedActionsSupported();
+ 
+     if (TaskManager::self()->numberOfDesktops() > 1)
+     {
+-        id = insertItem(i18n("To &Desktop"), makeDesktopsMenu(t));
++        a = addMenu(makeDesktopsMenu(t));
+ 
+         if (showAll)
+         {
+-            id = insertItem(i18n("&To Current Desktop"),
++            a = addAction(i18n("&To Current Desktop"),
+                             t.data(), SLOT(toCurrentDesktop()));
+-            setItemEnabled( id, !t->isOnCurrentDesktop() );
++            a->setEnabled(!t->isOnCurrentDesktop());
+         }
+ 
+         if (checkActions)
+         {
+-            setItemEnabled(id, t->info().actionSupported(NET::ActionChangeDesktop));
++            a->setEnabled(t->info().actionSupported(NET::ActionChangeDesktop));
+         }
+     }
+ 
+-    id = insertItem(KIcon("move"), i18n("&Move"), t.data(), SLOT(move()));
+-    setItemEnabled(id, !checkActions || t->info().actionSupported(NET::ActionMove));
++    a = addAction(KIcon("move"), i18n("&Move"), t.data(), SLOT(move()));
++    a->setEnabled(!checkActions || t->info().actionSupported(NET::ActionMove));
+ 
+-    id = insertItem(i18n("Re&size"), t.data(), SLOT(resize()));
+-    setItemEnabled(id, !checkActions || t->info().actionSupported(NET::ActionResize));
++    a = addAction(i18n("Re&size"), t.data(), SLOT(resize()));
++    a->setEnabled(!checkActions || t->info().actionSupported(NET::ActionResize));
+ 
+-    id = insertItem(i18n("Mi&nimize"), t.data(), SLOT(toggleIconified()));
+-    setItemChecked(id, t->isIconified());
+-    setItemEnabled(id, !checkActions || t->info().actionSupported(NET::ActionMinimize));
+-
+-    id = insertItem(i18n("Ma&ximize"), t.data(), SLOT(toggleMaximized()));
+-    setItemChecked(id, t->isMaximized());
+-    setItemEnabled(id, !checkActions || t->info().actionSupported(NET::ActionMax));
+-
+-    id = insertItem(i18n("&Shade"), t.data(), SLOT(toggleShaded()));
+-    setItemChecked(id, t->isShaded());
+-    setItemEnabled(id, !checkActions || t->info().actionSupported(NET::ActionShade));
++    a = addAction(i18n("Mi&nimize"), t.data(), SLOT(toggleIconified()));
++    a->setCheckable(true);
++    a->setChecked(t->isIconified());
++    a->setEnabled(!checkActions || t->info().actionSupported(NET::ActionMinimize));
++
++    a = addAction(i18n("Ma&ximize"), t.data(), SLOT(toggleMaximized()));
++    a->setCheckable(true);
++    a->setChecked(t->isMaximized());
++    a->setEnabled(!checkActions || t->info().actionSupported(NET::ActionMax));
++
++    a = addAction(i18n("&Shade"), t.data(), SLOT(toggleShaded()));
++    a->setCheckable(true);
++    a->setChecked(t->isShaded());
++    a->setEnabled(!checkActions || t->info().actionSupported(NET::ActionShade));
+ 
+     addSeparator();
+ 
+-    id = insertItem(KIcon("window-close"), i18n("&Close"), t.data(), SLOT(close()));
+-    setItemEnabled(id, !checkActions || t->info().actionSupported(NET::ActionClose));
++    a = addAction(KIcon("window-close"), i18n("&Close"), t.data(), SLOT(close()));
++    a->setEnabled(!checkActions || t->info().actionSupported(NET::ActionClose));
+ }
+ 
+ void TaskRMBMenu::fillMenu()
+ {
+-	int id;
+-	setCheckable( true );
++    QAction *a;
+ 
+     Task::List::iterator itEnd = tasks.end();
+     for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
+     {
+-		Task::TaskPtr t = (*it);
++        Task::TaskPtr t = (*it);
+ 
+-		id = insertItem( QIcon( t->pixmap() ),
+-				 t->visibleNameWithState(),
+-		                 new TaskRMBMenu(t, this) );
+-		setItemChecked( id, t->isActive() );
+-		connectItem( id, t.data(), SLOT( activateRaiseOrIconify() ) );
+-	}
++        a = addMenu( new TaskRMBMenu(t, this) );
++        a->setIcon( QIcon( t->pixmap() ) );
++        a->setText( t->visibleNameWithState() );
++        a->setChecked(t->isActive());
++        connect( a, SIGNAL(triggered()), t.data(), SLOT( activateRaiseOrIconify() ) );
++    }
+ 
+-	addSeparator();
++    addSeparator();
+ 
+     bool enable = false;
+ 
+     if (TaskManager::self()->numberOfDesktops() > 1)
+     {
+-        id = insertItem(i18n("All to &Desktop"), makeDesktopsMenu());
++        a = addMenu(makeDesktopsMenu());
+ 
+-        id = insertItem(i18n("All &to Current Desktop"), this, SLOT(slotAllToCurrentDesktop()));
++        a = addAction(i18n("All &to Current Desktop"), this, SLOT(slotAllToCurrentDesktop()));
+         Task::List::iterator itEnd = tasks.end();
+         for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
+         {
+@@ -145,80 +146,82 @@
+                 break;
+             }
+         }
+-        setItemEnabled(id, enable);
++        a->setEnabled(enable);
+     }
+ 
+     enable = false;
+ 
+-	id = insertItem( i18n( "Mi&nimize All" ), this, SLOT( slotMinimizeAll() ) );
++    a = addAction( i18n( "Mi&nimize All" ), this, SLOT( slotMinimizeAll() ) );
+     itEnd = tasks.end();
+     for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
+     {
+-		if( !(*it)->isIconified() ) {
+-			enable = true;
+-			break;
+-		}
+-	}
+-	setItemEnabled( id, enable );
++        if( !(*it)->isIconified() ) {
++            enable = true;
++            break;
++        }
++    }
++    a->setEnabled( enable );
+ 
+-	enable = false;
++    enable = false;
+ 
+-	id = insertItem( i18n( "Ma&ximize All" ), this, SLOT( slotMaximizeAll() ) );
++    a = addAction( i18n( "Ma&ximize All" ), this, SLOT( slotMaximizeAll() ) );
+     itEnd = tasks.end();
+     for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
+     {
+         if( !(*it)->isMaximized() ) {
+-			enable = true;
+-			break;
+-		}
+-	}
+-	setItemEnabled( id, enable );
++            enable = true;
++            break;
++        }
++    }
++    a->setEnabled( enable );
+ 
+-	enable = false;
++    enable = false;
+ 
+-	id = insertItem( i18n( "&Restore All" ), this, SLOT( slotRestoreAll() ) );
++    a = addAction( i18n( "&Restore All" ), this, SLOT( slotRestoreAll() ) );
+     itEnd = tasks.end();
+     for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
+     {
+-		if( (*it)->isIconified() || (*it)->isMaximized() ) {
+-			enable = true;
+-			break;
+-		}
+-	}
+-	setItemEnabled( id, enable );
++        if( (*it)->isIconified() || (*it)->isMaximized() ) {
++            enable = true;
++            break;
++        }
++    }
++    a->setEnabled( enable );
+ 
+-	addSeparator();
++    addSeparator();
+ 
+-	enable = false;
++    enable = false;
+ 
+-	insertItem( KIcon( "list-remove" ), i18n( "&Close All" ), this, SLOT( slotCloseAll() ) );
++    addAction( KIcon( "list-remove" ), i18n( "&Close All" ), this, SLOT( slotCloseAll() ) );
+ }
+ 
+ QMenu* TaskRMBMenu::makeAdvancedMenu(Task::TaskPtr t)
+ {
+-    int id;
++    QAction *a;
+     QMenu* menu = new QMenu(this);
++    menu->setTitle(i18n("Ad&vanced"));
+ 
+-    menu->setCheckable(true);
+-
+-    id = menu->insertItem(KIcon("go-up"),
++    a = menu->addAction(KIcon("go-up"),
+                           i18n("Keep &Above Others"),
+                           t.data(), SLOT(toggleAlwaysOnTop()));
+-    menu->setItemChecked(id, t->isAlwaysOnTop());
++    a->setCheckable(true);
++    a->setChecked(t->isAlwaysOnTop());
+ 
+-    id = menu->insertItem(KIcon("go-down"),
++    a = menu->addAction(KIcon("go-down"),
+                           i18n("Keep &Below Others"),
+                           t.data(), SLOT(toggleKeptBelowOthers()));
+-    menu->setItemChecked(id, t->isKeptBelowOthers());
++    a->setCheckable(true);
++    a->setChecked(t->isKeptBelowOthers());
+ 
+-    id = menu->insertItem(KIcon("view-fullscreen"),
++    a = menu->addAction(KIcon("view-fullscreen"),
+                           i18n("&Fullscreen"),
+                           t.data(), SLOT(toggleFullScreen()));
+-    menu->setItemChecked(id, t->isFullScreen());
++    a->setCheckable(true);
++    a->setChecked(t->isFullScreen());
+ 
+     if (KWindowSystem::allowedActionsSupported())
+     {
+-        menu->setItemEnabled(id, t->info().actionSupported(NET::ActionFullScreen));
++        a->setEnabled(t->info().actionSupported(NET::ActionFullScreen));
+     }
+ 
+     return menu;
+@@ -226,39 +229,44 @@
+ 
+ QMenu* TaskRMBMenu::makeDesktopsMenu(Task::TaskPtr t)
+ {
+-	QMenu* m = new QMenu( this );
+-	m->setCheckable( true );
+-
+-	int id = m->insertItem( i18n("&All Desktops"), t.data(), SLOT( toDesktop(int) ) );
+-	m->setItemParameter( id, 0 ); // 0 means all desktops
+-	m->setItemChecked( id, t->isOnAllDesktops() );
+-
+-	m->addSeparator();
+-
+-	for (int i = 1; i <= TaskManager::self()->numberOfDesktops(); i++) {
+-		QString name = QString("&%1 %2").arg(i).arg(TaskManager::self()->desktopName(i).replace('&', "&&"));
+-		id = m->insertItem( name, t.data(), SLOT( toDesktop(int) ) );
+-		m->setItemParameter( id, i );
+-		m->setItemChecked( id, !t->isOnAllDesktops() && t->desktop() == i );
+-	}
++    QMenu* m = new QMenu( this );
++    int it = toDesktopMap.size() + 1;
++    m->setTitle( i18n("To &Desktop") );
++
++    QAction *a = m->addAction( i18n("&All Desktops"), this, SLOT( slotToDesktop() ) );
++    a->setCheckable(true);
++    toDesktopMap.append( QPair<Task::TaskPtr, int>( t, 0 ) ); // 0 means all desktops
++    a->setData( it++ );
++    a->setChecked( t->isOnAllDesktops() );
++
++    m->addSeparator();
++
++    for (int i = 1; i <= TaskManager::self()->numberOfDesktops(); i++) {
++        QString name = QString("&%1 %2").arg(i).arg(TaskManager::self()->desktopName(i).replace('&', "&&"));
++        a = m->addAction( name, this, SLOT( slotToDesktop() ) );
++        a->setCheckable(true);
++        toDesktopMap.append( QPair<Task::TaskPtr, int>( t, i ) );
++        a->setData( i );
++        a->setChecked( !t->isOnAllDesktops() && t->desktop() == i );
++    }
+ 
+-	return m;
++    return m;
+ }
+ 
+ QMenu* TaskRMBMenu::makeDesktopsMenu()
+ {
+ 	QMenu* m = new QMenu( this );
+-	m->setCheckable( true );
++	QAction *a;
+ 
+-	int id = m->insertItem( i18n("&All Desktops"), this, SLOT( slotAllToDesktop(int) ) );
+-	m->setItemParameter( id, 0 ); // 0 means all desktops
++	a = m->addAction( i18n("&All Desktops"), this, SLOT( slotAllToDesktop() ) );
++	a->setData( 0 ); // 0 means all desktops
+ 
+ 	m->addSeparator();
+ 
+ 	for (int i = 1; i <= TaskManager::self()->numberOfDesktops(); i++) {
+ 		QString name = QString("&%1 %2").arg(i).arg(TaskManager::self()->desktopName(i).replace('&', "&&"));
+-		id = m->insertItem( name, this, SLOT( slotAllToDesktop(int) ) );
+-		m->setItemParameter( id, i );
++		a = m->addAction( name, this, SLOT( slotAllToDesktop() ) );
++		a->setData( i );
+ 	}
+ 
+ 	return m;
+@@ -309,12 +317,16 @@
+     }
+ }
+ 
+-void TaskRMBMenu::slotAllToDesktop( int desktop )
++void TaskRMBMenu::slotAllToDesktop()
+ {
+-    Task::List::iterator itEnd = tasks.end();
+-    for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
+-    {
+-        (*it)->toDesktop( desktop );
++    QAction *action = qobject_cast<QAction *>( sender() );
++    if( action ) {
++      int desktop = action->data().toInt();
++      Task::List::iterator itEnd = tasks.end();
++      for (Task::List::iterator it = tasks.begin(); it != itEnd; ++it)
++      {
++          (*it)->toDesktop( desktop );
++      }
+     }
+ }
+ 
+@@ -326,3 +338,12 @@
+         (*it)->toCurrentDesktop();
+     }
+ }
++
++void TaskRMBMenu::slotToDesktop()
++{
++    QAction *action = qobject_cast<QAction *>( sender() );
++    if( action ) {
++        QPair<Task::TaskPtr, int> pair = toDesktopMap[action->data().toInt()];
++        pair.first->toDesktop( pair.second );
++    }
++}
+--- a/libs/taskmanager/CMakeLists.txt
++++ b/libs/taskmanager/CMakeLists.txt
+@@ -3,7 +3,7 @@
+ 
+ ########### next target ###############
+ 
+-set(taskmanager_LIB_SRCS taskmanager.cpp) 
++set(taskmanager_LIB_SRCS taskmanager.cpp taskrmbmenu.cpp) 
+ 
+ kde4_add_library(taskmanager SHARED ${taskmanager_LIB_SRCS})
+ 
+--- a/libs/taskmanager/taskmanager.cpp
++++ b/libs/taskmanager/taskmanager.cpp
+@@ -145,7 +145,7 @@
+     connect( d->startupInfo,
+         SIGNAL( gotRemoveStartup( const KStartupInfoId&, const KStartupInfoData& )),
+         SLOT( killStartup( const KStartupInfoId& )));
+-    c.changeGroup( "TaskbarButtonSettings" );
++    c=KConfigGroup(&_c, "TaskbarButtonSettings");
+     d->startupInfo->setTimeout( c.readEntry( "Timeout", 30 ));
+ }
+ 
+@@ -354,7 +354,7 @@
+         }
+     }
+ 
+-    Task::TaskPtr t( new Task( w, this ) );
++    Task::TaskPtr t( new Task( w, 0 ) );
+     d->tasksByWId[w] = t;
+ 
+     // kDebug() << "TM: Task added for WId: " << w;
+@@ -518,7 +518,7 @@
+ 
+ void TaskManager::gotNewStartup( const KStartupInfoId& id, const KStartupInfoData& data )
+ {
+-    Startup::StartupPtr s( new Startup( id, data, this ) );
++    Startup::StartupPtr s( new Startup( id, data, 0 ) );
+     d->startups.append(s);
+ 
+     emit startupAdded(s);
+--- a/libs/taskmanager/taskrmbmenu.h
++++ b/libs/taskmanager/taskrmbmenu.h
+@@ -26,6 +26,8 @@
+ #define __taskrmbmenu_h__
+ 
+ #include <QMenu>
++#include <QList>
++#include <QPair>
+ 
+ class KDE_EXPORT TaskRMBMenu : public QMenu
+ {
+@@ -48,12 +50,14 @@
+ 	void slotRestoreAll();
+ 	void slotShadeAll();
+ 	void slotCloseAll();
+-	void slotAllToDesktop( int desktop );
++	void slotAllToDesktop();
+ 	void slotAllToCurrentDesktop();
++	void slotToDesktop();
+ 
+ private:
+ 	Task::List tasks;
+ 	bool showAll;
++	QList< QPair<Task::TaskPtr, int> > toDesktopMap;
+ };
+ 
+ #endif
+--- a/libs/workspace/kworkspace.cpp
++++ b/libs/workspace/kworkspace.cpp
+@@ -31,6 +31,7 @@
+ #include <stdlib.h> // getenv()
+ #include <ksmserver_interface.h>
+ #include <kdefakes.h>
++#include <QSocketNotifier>
+ 
+ #ifdef Q_WS_X11
+ #include <X11/Xlib.h>
+@@ -46,17 +47,113 @@
+ #define DISPLAY "QWS_DISPLAY"
+ #endif
+ 
++#include <unistd.h>
++#include <pwd.h>
++#include <sys/types.h>
++
++#include "kworkspace_p.h"
++
+ namespace KWorkSpace
+ {
+ 
+-static SmcConn tmpSmcConnection = 0;
++static void save_yourself_callback( SmcConn conn_P, SmPointer, int, Bool , int, Bool )
++    {
++    SmcSaveYourselfDone( conn_P, True );
++    }
++
++static void dummy_callback( SmcConn, SmPointer )
++    {
++    }
++
++KRequestShutdownHelper::KRequestShutdownHelper()
++    {
++    SmcCallbacks calls;
++    calls.save_yourself.callback = save_yourself_callback;
++    calls.die.callback = dummy_callback;
++    calls.save_complete.callback = dummy_callback;
++    calls.shutdown_cancelled.callback = dummy_callback;
++    char* id = NULL;
++    char err[ 11 ];
++    conn = SmcOpenConnection( NULL, NULL, 1, 0,
++        SmcSaveYourselfProcMask | SmcDieProcMask | SmcSaveCompleteProcMask
++        | SmcShutdownCancelledProcMask, &calls, NULL, &id, 10, err );
++    if( id != NULL )
++        free( id );
++    if( conn == NULL )
++        return; // no SM
++    // set the required properties, mostly dummy values
++    SmPropValue propvalue[ 5 ];
++    SmProp props[ 5 ];
++    propvalue[ 0 ].length = sizeof( int );
++    int value0 = SmRestartNever; // so that this extra SM connection doesn't interfere
++    propvalue[ 0 ].value = &value0;
++    props[ 0 ].name = const_cast< char* >( SmRestartStyleHint );
++    props[ 0 ].type = const_cast< char* >( SmCARD8 );
++    props[ 0 ].num_vals = 1;
++    props[ 0 ].vals = &propvalue[ 0 ];
++    struct passwd* entry = getpwuid( geteuid() );
++    propvalue[ 1 ].length = entry != NULL ? strlen( entry->pw_name ) : 0;
++    propvalue[ 1 ].value = (SmPointer)( entry != NULL ? entry->pw_name : "" );
++    props[ 1 ].name = const_cast< char* >( SmUserID );
++    props[ 1 ].type = const_cast< char* >( SmARRAY8 );
++    props[ 1 ].num_vals = 1;
++    props[ 1 ].vals = &propvalue[ 1 ];
++    propvalue[ 2 ].length = 0;
++    propvalue[ 2 ].value = (SmPointer)( "" );
++    props[ 2 ].name = const_cast< char* >( SmRestartCommand );
++    props[ 2 ].type = const_cast< char* >( SmLISTofARRAY8 );
++    props[ 2 ].num_vals = 1;
++    props[ 2 ].vals = &propvalue[ 2 ];
++    propvalue[ 3 ].length = strlen( "requestshutdownhelper" );
++    propvalue[ 3 ].value = (SmPointer)"requestshutdownhelper";
++    props[ 3 ].name = const_cast< char* >( SmProgram );
++    props[ 3 ].type = const_cast< char* >( SmARRAY8 );
++    props[ 3 ].num_vals = 1;
++    props[ 3 ].vals = &propvalue[ 3 ];
++    propvalue[ 4 ].length = 0;
++    propvalue[ 4 ].value = (SmPointer)( "" );
++    props[ 4 ].name = const_cast< char* >( SmCloneCommand );
++    props[ 4 ].type = const_cast< char* >( SmLISTofARRAY8 );
++    props[ 4 ].num_vals = 1;
++    props[ 4 ].vals = &propvalue[ 4 ];
++    SmProp* p[ 5 ] = { &props[ 0 ], &props[ 1 ], &props[ 2 ], &props[ 3 ], &props[ 4 ] };
++    SmcSetProperties( conn, 5, p );
++    notifier = new QSocketNotifier( IceConnectionNumber( SmcGetIceConnection( conn )),
++        QSocketNotifier::Read, this );
++    connect( notifier, SIGNAL( activated( int )), SLOT( processData()));
++    }
++
++KRequestShutdownHelper::~KRequestShutdownHelper()
++    {
++    if( conn != NULL )
++        {
++        delete notifier;
++        SmcCloseConnection( conn, 0, NULL );
++        }
++    }
++
++void KRequestShutdownHelper::processData()
++    {
++    if( conn != NULL )
++        IceProcessMessages( SmcGetIceConnection( conn ), 0, 0 );
++    }
++
++bool KRequestShutdownHelper::requestShutdown( ShutdownConfirm confirm )
++    {
++    if( conn == NULL )
++        return false;
++    SmcRequestSaveYourself( conn, SmSaveBoth, True, SmInteractStyleAny,
++        confirm == ShutdownConfirmNo, True );
++    // flush the request
++    IceFlush(SmcGetIceConnection(conn));
++    return true;
++    }
++
++static KRequestShutdownHelper* helper = NULL;
+ 
+ static void cleanup_sm()
+ {
+-  if (tmpSmcConnection) {
+-      SmcCloseConnection( tmpSmcConnection, 0, 0 );
+-      tmpSmcConnection = 0;
+-  }
++    delete helper;
+ }
+ 
+ bool requestShutDown(
+@@ -73,51 +170,12 @@
+         QDBusReply<void> reply = ksmserver.logout((int)confirm,  (int)sdtype,  (int)sdmode);
+         return (reply.isValid());
+     }
+-
+-    if (! tmpSmcConnection) {
+-	char cerror[256];
+-	char* myId = 0;
+-	char* prevId = 0;
+-	SmcCallbacks cb;
+-	tmpSmcConnection = SmcOpenConnection( 0, 0, 1, 0,
+-					      0, &cb,
+-					      prevId,
+-					      &myId,
+-					      255,
+-					      cerror );
+-	::free( myId ); // it was allocated by C
+-	if (!tmpSmcConnection )
+-	    return false;
+-
++    if( helper == NULL )
++    {
++        helper = new KRequestShutdownHelper();
+         qAddPostRoutine(cleanup_sm);
+     }
+-
+-    if ( tmpSmcConnection ) {
+-        // we already have a connection to the session manager, use it.
+-        SmcRequestSaveYourself( tmpSmcConnection, SmSaveBoth, True,
+-				SmInteractStyleAny,
+-				confirm == ShutdownConfirmNo, True );
+-
+-	// flush the request
+-	IceFlush(SmcGetIceConnection(tmpSmcConnection));
+-        return true;
+-    }
+-
+-    // open a temporary connection, if possible
+-
+-    propagateSessionManager();
+-    QByteArray smEnv = ::getenv("SESSION_MANAGER");
+-    if (smEnv.isEmpty())
+-        return false;
+-
+-    SmcRequestSaveYourself( tmpSmcConnection, SmSaveBoth, True,
+-			    SmInteractStyleAny, False, True );
+-
+-    // flush the request
+-    IceFlush(SmcGetIceConnection(tmpSmcConnection));
+-    SmcCloseConnection( tmpSmcConnection, 0, 0 );
+-
+-    return true;
++    return helper->requestShutdown( confirm );
+ }
+ 
+ static QTime smModificationTime;
+@@ -156,3 +214,4 @@
+ 
+ } // end namespace
+ 
++#include "kworkspace_p.moc"
+--- /dev/null
++++ b/libs/workspace/kworkspace_p.h
+@@ -0,0 +1,49 @@
++/* This file is part of the KDE libraries
++    Copyright (C) 2007 Lubos Lunak <l.lunak at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef KWORKSPACE_P_H
++#define KWORKSPACE_P_H
++
++#include "kworkspace.h"
++
++class QSocketNotifier;
++
++namespace KWorkSpace
++{
++
++// A class that creates another connection to ksmserver and handles it properly.
++class KRequestShutdownHelper
++    : public QObject
++    {
++    Q_OBJECT
++    public:
++        KRequestShutdownHelper();
++        virtual ~KRequestShutdownHelper();
++        bool requestShutdown( ShutdownConfirm confirm );
++    private slots:
++        void processData();
++    private:
++        SmcConn connection() const { return conn; }
++        QSocketNotifier* notifier;
++        SmcConn conn;
++    };
++ 
++}
++
++#endif
+--- a/kscreensaver/libkscreensaver/main.cpp
++++ b/kscreensaver/libkscreensaver/main.cpp
+@@ -115,7 +115,7 @@
+        args->clear();
+        dlg->exec();
+        delete dlg;
+-       exit(0);
++       return 0;
+     }
+ 
+     if (args->isSet("window-id"))
+--- a/kscreensaver/libkscreensaver/screensaver.desktop
++++ b/kscreensaver/libkscreensaver/screensaver.desktop
+@@ -9,6 +9,7 @@
+ Comment[csb]=Wëgaszôcz ekranu
+ Comment[de]=Bildschirmschoner
+ Comment[el]=Προφύλαξη οθόνης
++Comment[et]=Ekraanisäästja
+ Comment[fa]=محافظ صفحه نمایش
+ Comment[ga]=Spárálaí Scáileáin
+ Comment[he]=שומר מסך
+--- a/kscreensaver/krandom_screensaver/random.cpp
++++ b/kscreensaver/krandom_screensaver/random.cpp
+@@ -52,6 +52,15 @@
+ 
+ static const char version[] = "2.0.0";
+ 
++static QString exeFromActionGroup(const QList<KServiceAction>& actions, const char* name)
++{
++    foreach(const KServiceAction& action, actions) {
++        if (action.name() == name)
++            return action.exec();
++    }
++    return QString();
++}
++
+ //----------------------------------------------------------------------------
+ 
+ int main(int argc, char *argv[])
+@@ -93,76 +102,54 @@
+ 		windowId = RootWindow(QX11Info::display(), info.screen());
+ 	}
+ 	args->clear();
+-	KService::List lst = KServiceTypeTrader::self()->query( "ScreenSaver");
+-	QStringList saverFileList;
++	const KService::List lst = KServiceTypeTrader::self()->query( "ScreenSaver");
++        KService::List availableSavers;
+ 
+-	KConfig type("krandom.kssrc", KConfig::CascadeConfig);
++	KConfig type("krandom.kssrc", KConfig::NoGlobals);
+         const KConfigGroup configGroup = type.group("Settings");
+-	bool opengl = configGroup.readEntry("OpenGL", false);
+-	bool manipulatescreen = configGroup.readEntry("ManipulateScreen", false);
+-        bool fortune = !KStandardDirs::findExe("fortune").isEmpty();
+-        for( KService::List::const_iterator it = lst.begin();
+-            it != lst.end(); ++it)
+-	{
+-		QString file = KStandardDirs::locate("services", (*it)->entryPath());
+-		kDebug() << "Looking at " << file;
+-		KDesktopFile saver( file );
+-		kDebug() << "read X-KDE-Type";
+-		QString saverType = saver.desktopGroup().readEntry("X-KDE-Type");
+-		if (saverType.isEmpty()) // no X-KDE-Type defined so must be OK
+-		{
+-			saverFileList.append(file);
+-		}
+-		else
+-		{
+-			QStringList saverTypes = saverType.split( ";");
+-			for (QStringList::ConstIterator it =  saverTypes.begin(); it != saverTypes.end(); ++it )
+-			{
+-				kDebug() << "saverTypes is "<< *it;
+-				if (*it == "ManipulateScreen")
+-				{
+-					if (manipulatescreen)
+-					{
+-						saverFileList.append(file);
+-					}
+-				}
+-				else
+-				if (*it == "OpenGL")
+-				{
+-					if (opengl)
+-					{
+-						saverFileList.append(file);
+-					}
+-				}
+-				if (*it == "Fortune")
+-				{
+-					if (fortune)
+-					{
+-						saverFileList.append(file);
+-					}
+-				}
+-
+-			}
++	const bool opengl = configGroup.readEntry("OpenGL", false);
++	const bool manipulatescreen = configGroup.readEntry("ManipulateScreen", false);
++        // TODO replace this with TryExec=fortune in the desktop files
++        const bool fortune = !KStandardDirs::findExe("fortune").isEmpty();
++        foreach( const KService::Ptr& service, lst ) {
++            //QString file = KStandardDirs::locate("services", service->entryPath());
++            //kDebug() << "Looking at " << file;
++            const QString saverType = service->property("X-KDE-Type").toString();
++            if (saverType.isEmpty()) { // no X-KDE-Type defined so must be OK
++                availableSavers.append(service);
++            } else {
++                const QStringList saverTypes = saverType.split( ";");
++                for (QStringList::ConstIterator it =  saverTypes.begin(); it != saverTypes.end(); ++it ) {
++                    kDebug() << "saverTypes is "<< *it;
++                    if (*it == "ManipulateScreen") {
++                        if (manipulatescreen) {
++                            availableSavers.append(service);
++                        }
++                    } else if (*it == "OpenGL") {
++                        if (opengl) {
++                            availableSavers.append(service);
++                        }
++                    } else if (*it == "Fortune") {
++                        if (fortune) {
++                            availableSavers.append(service);
++                        }
++                    }
+ 		}
++            }
+ 	}
+ 
+ 	KRandomSequence rnd;
+-	int indx = rnd.getLong(saverFileList.count());
+-	QString filename = saverFileList.at(indx);
++	const int indx = rnd.getLong(availableSavers.count());
++        const KService::Ptr service = availableSavers.at(indx);
++        const QList<KServiceAction> actions = service->actions();
+ 
+-	KDesktopFile config( filename );
+-
+-        KConfigGroup cg = config.desktopGroup();
+ 	QString cmd;
+-	if (windowId && config.hasActionGroup("InWindow"))
+-	{
+-		cg = config.actionGroup("InWindow");
+-	}
+-	else if ((windowId == 0) && config.hasActionGroup("Root"))
+-	{
+-		cg = config.actionGroup("Root");
+-	}
+-	cmd = cg.readPathEntry("Exec");
++	if (windowId)
++            cmd = exeFromActionGroup(actions, "InWindow");
++        if (cmd.isEmpty() && windowId == 0)
++            cmd = exeFromActionGroup(actions, "Root");
++        if (cmd.isEmpty())
++            cmd = service->exec();
+ 
+ 	QTextStream ts(&cmd, QIODevice::ReadOnly);
+ 	QString word;
+@@ -228,7 +215,7 @@
+ 
+ 	setMinimumSize( sizeHint() );
+ 
+-	KConfig config("krandom.kssrc", KConfig::CascadeConfig);
++	KConfig config("krandom.kssrc", KConfig::NoGlobals);
+         const KConfigGroup configGroup = config.group("Settings");
+ 	openGL->setChecked(configGroup.readEntry("OpenGL", true));
+ 	manipulateScreen->setChecked(configGroup.readEntry("ManipulateScreen", true));
+--- a/khotkeys/shared/actions.cpp
++++ b/khotkeys/shared/actions.cpp
+@@ -23,7 +23,6 @@
+ #include <kdesktopfile.h>
+ #include <klocale.h>
+ #include <kservice.h>
+-#include <ksharedptr.h>
+ #include <kprocess.h>
+ 
+ #include "windows.h"
+--- a/khotkeys/data/konqueror_gestures_kde321.khotkeys
++++ b/khotkeys/data/konqueror_gestures_kde321.khotkeys
+@@ -9,6 +9,7 @@
+ Comment[csb]=Pòdspòdlowé gestë Konquerora
+ Comment[de]=Grundlegende Gesten für Konqueror
+ Comment[el]=Βασικές χειρονομίες Konqueror.
++Comment[et]=Konquerori põhilised žestid.
+ Comment[fa]=وضعیتهای Konqueror پایه‌ای
+ Comment[fy]=Basis stjoerrings foar Konqueror.
+ Comment[ga]=Bunghothaí Konqueror.
+@@ -17,6 +18,7 @@
+ Comment[ja]=Konqueror の基本的なジェスチャーです。(マウスジェスチャーに使用するボタンは「全体設定」で変更できます)
+ Comment[kk]=Konqueror-дың негізгі ым қимылдары.
+ Comment[km]=កាយវិការ Konqueror ជា​មូលដ្ឋាន ។
++Comment[ko]=기본 Konqueror 제스처입니다.
+ Comment[nb]=Grunnleggende musebevegelser for Konqueror
+ Comment[nds]=Eenfach Muustekens för Konqueror
+ Comment[ne]=आधारभूत कन्क्वेरर गेस्चर ।
+@@ -38,6 +40,7 @@
+ Name[csb]=Gestë Konquerora
+ Name[de]=Konqueror-Gesten
+ Name[el]=Χειρονομίες Konqueror
++Name[et]=Konquerori žestid
+ Name[fa]=وضعیتهای Konqueror
+ Name[fy]=Konqueror stjoerrings
+ Name[ga]=Gothaí Konqueror
+@@ -46,6 +49,7 @@
+ Name[ja]=Konqueror ジェスチャー
+ Name[kk]=Konqueror ым қимылдары
+ Name[km]=កាយវិការ​ Konqueror
++Name[ko]=Konqueror 제스처
+ Name[nb]=Konqueror musebevegelser
+ Name[nds]=Konqueror-Muustekens
+ Name[ne]=कन्क्वेरर गेस्चर
+@@ -71,6 +75,7 @@
+ Comment[de]=Konqueror-Fenster
+ Comment[el]=Παράθυρο του Konqueror
+ Comment[es]=Ventana de Konqueror
++Comment[et]=Konquerori aken
+ Comment[fa]=پنجرۀ Konqueror
+ Comment[fy]=Konqueror finster
+ Comment[ga]=Fuinneog Konqueror
+@@ -79,6 +84,7 @@
+ Comment[ja]=Konqueror ウィンドウ
+ Comment[kk]=Konqueror терезесі
+ Comment[km]=បង្អួច Konqueror
++Comment[ko]=Konqueror 창
+ Comment[nb]=Konqueror-vindu
+ Comment[nds]=Konqueror-Finster
+ Comment[ne]=कन्क्वेरर सञ्झ्याल
+@@ -127,6 +133,7 @@
+ Comment[bg]=Натискане, движение наляво, пускане.
+ Comment[de]=Drücken, nach links, loslassen.
+ Comment[el]=Πιέστε, μετακινηθείτε αριστερά, ελευθερώστε.
++Comment[et]=Vajuta, liiguta vasakule, vabasta.
+ Comment[fa]=فشار، حرکت به چپ، رها کردن
+ Comment[fy]=Yndrukke, nei lofts, loslitte
+ Comment[he]=לחץ, הזז שמאלה, שחרר
+@@ -157,6 +164,7 @@
+ Name[de]=Zurück
+ Name[el]=Πίσω
+ Name[es]=Atrás
++Name[et]=Tagasi
+ Name[fa]=عقب
+ Name[fy]=Werom
+ Name[ga]=Siar
+@@ -165,6 +173,7 @@
+ Name[ja]=戻る
+ Name[kk]=Шегіну
+ Name[km]=ថយ​ក្រោយ
++Name[ko]=뒤로
+ Name[nb]=Tilbake
+ Name[nds]=Torüch
+ Name[ne]=पछाडि
+@@ -188,6 +197,7 @@
+ Comment[bg]=Стил Opera: натискане, движение нагоре, пускане.\nЗАБЕЛЕЖКА:Има конфликт с "Нов подпрозорец" и затова е изключено по подразбиране.
+ Comment[de]=Opera-Stil: Drücken, nach oben, loslassen.\nHinweis: Dies steht in Konflikt mit der Aktion "Neues Unterfenster" und ist daher in der Voreinstellung nicht aktiviert.
+ Comment[el]=Στυλ Opera: Πιέστε, μετακινήστε πάνω, ελευθερώστε.\nΣΗΜΕΙΩΣΗ: Αυτό συγκρούεται με την 'Νέα καρτέλα', και οπότε είναι προκαθορισμένα απενεργοποιημένο.
++Comment[et]=Opera stiilis: vajuta, liiguta üles, vabasta.\nMärkus: konfliktis toiminguga 'Uus kaart' ja seetõttu vaikimisi välja lülitatud.
+ Comment[fa]=سبک اَپرا: فشار، حرکت به بالا، رها کردن.\nنکته: ناسازگار با »تب جدید«، و به طور پیش‌فرض غیر فعال.
+ Comment[fy]=Opera-styl: yndrukke, nei omheech, loslitte.\nTink derom: Konflikten mei 'Nije ljepper', en sa binne standert útskeakele.
+ Comment[he]=נוסח Opera: לחץ, הזז למעלה, שחרר.\nשים לב: מחווה זו מתנגשת עם "לשונית חדשה" ולכן היא אינה מאופשרת כברירת מחדל.
+@@ -195,6 +205,18 @@
+ Comment[ja]=Opera スタイル: マウスの中ボタンを押したまま、マウスを上に動かし、ボタンを放します。\n[注意] 「新規タブ」と競合するため、デフォルトでは無効になっています。
+ Comment[kk]=Opera-стилі: Бас, жоғарға жүгірт, босат.\nЕСКЕРТУ: 'Жаңа қойынды' дегенмен қайшылықта, сондықтан әдетте рұқсат етілмеген.
+ Comment[km]=រចនាប័ទ្ម Opera ៖ ចុច​ ផ្លាស់ទី​ឡើង​លើ លែង ។\nចំណាំ ៖ មាន​ការ​ប៉ទង្គិច​ជាមួយ 'ផ្ទាំង​ថ្មី' ហើយ​តាម​លំនាំ​ដើម​មិន​ត្រូវ​បាន​អនុញ្ញាត​ឡើយ ។
++Comment[nb]=Opera-stil: Trykk, flytt oppover, slipp.\nMerk: Slått av som standard pga. konflikt med «Nytt faneblad».
++Comment[nds]=Opera-Stil: Drücken, na baven, looslaten.\nBeacht: Verdreegt sik nich mit "Nieg Paneel" un is dorüm standardwies utmaakt.
++Comment[ne]=ओपेरा-शैली: थिच्नुहोस्, माथि सार्नुहोस्, छोड्नुहोस् ।\nद्रष्टब्य: 'नयाव ट्याब' सँग द्वन्द गर्दछ, र पूर्वनिर्धारितद्वारा अक्षम गरिन्छ ।
++Comment[nl]=Opera-stijl: indrukken, omhoog bewegen, loslaten.\nOpmerking: Botst met 'Nieuw tabblad', en is standaard uitgeschakeld.
++Comment[nn]=Opera-stil: Trykk, flytt opp, slepp.\nMERK: Konflikt med «Ny fane», og er derfor slått av som standard.
++Comment[pt]=Estilo Opera: Carregar, mover para cima, largar.\nNOTA: Existem conflitos com a 'Nova Página', por isso está desactivado por omissão.
++Comment[pt_BR]=Estilo Opera: Pressionar, mover para cima, largar.\nNOTA: Conflita com 'Nova Aba', e por isso está desativado por padrão.
++Comment[sv]=Enligt Opera: Tryck ner, flytta uppåt, släpp.\nObservera: Ger konflikt med "Ny flik", och är därför normalt inte aktiverad.
++Comment[vi]=Kiểu Opera: bấm, chuyên lên, nhả.\nGHI CHÚ : xung đột với hành động « Thẻ mới » thì bị tắt theo mặc định.
++Comment[x-test]=xxOpera-style: Press, move up, release.\nNOTE: Conflicts with 'New Tab', and as such is disabled by default.xx
++Comment[zh_CN]=Opera 风格:按下,向上移动,释放。\n注意:和“新建标签页”冲突,并且默认是禁用的。
++Comment[zh_TW]=Opera 風格:按下,往上移,再放開。\n注意:會與「新增分頁」衝突,預設為關閉。
+ Enabled=false
+ Name=Stop Loading
+ Name[ar]=أوقف التحميل
+@@ -204,6 +226,7 @@
+ Name[de]=Ladevorgang abbrechen
+ Name[el]=Σταμάτημα φόρτωσης
+ Name[es]=Detener la carga
++Name[et]=Laadimise peatamine
+ Name[fa]=ایست بارگذاری
+ Name[fy]=it laden stopje
+ Name[he]=הפסק טעינה
+@@ -211,6 +234,7 @@
+ Name[ja]=読み込みを停止
+ Name[kk]=Жүктеуді тоқтату
+ Name[km]=បញ្ឈប់​ការ​ផ្ទុក​
++Name[ko]=불러 오기 멈추기
+ Name[nb]=Stopp innlasting
+ Name[nds]=Laden anhollen
+ Name[ne]=लोडिङ रोक्नुहोस्
+@@ -244,6 +268,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -269,6 +294,7 @@
+ Comment[bg]=Едно ниво нагоре в директорията..\nСтил Мозила: натискане, движение нагоре, движение наляво, движение нагоре, пускане.
+ Comment[de]=Geht in der Adress-/Ordnerstruktur eine Ebene höher.\nMozilla-Stil: Drücken, nach oben, nach links, nach oben, loslassen.
+ Comment[el]=Μετάβαση προς τα πάνω στη δομή URL/καταλόγου.\nΣτυλ Mozilla: Πιέστε, μετακίνηση πάνω, μετακίνηση αριστερά, μετακίνηση πάνω, ελευθέρωση.
++Comment[et]=Liikumine URL-i/kataloogistruktuuris üles.\nMozilla stiilis: vajuta, liiguta üles, liiguta vasakule, liiguta üles, vabasta.
+ Comment[fa]=بالا رفتن در ساختار نشانی وب/فهرست راهنما. \nسبک موزیلا: فشار، حرکت به بالا، حرکت به چپ، حرکت به بالا، رها کردن.
+ Comment[fy]=Omheech gean yn adres-/triemtafelstruktuer.\nMozilla-styl: Yndrukke, nei omheech, nei lofts, nei omheech, loslitte. 
+ Comment[it]=Risale nella struttura dell'URL o delle directory.\nStile Mozilla: Premi, sposta in su, sposta a sinistra, sposta in su, rilascia.
+@@ -296,6 +322,7 @@
+ Name[de]=Aufwärts
+ Name[el]=Πάνω
+ Name[es]=Arriba
++Name[et]=Üles
+ Name[fa]=بالا
+ Name[fy]=Omheech
+ Name[ga]=Suas
+@@ -304,6 +331,7 @@
+ Name[ja]=上
+ Name[kk]=Жоғары
+ Name[km]=ឡើង​លើ​
++Name[ko]=위로
+ Name[nb]=Opp
+ Name[nds]=Na baven
+ Name[ne]=माथि
+@@ -338,6 +366,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -363,13 +392,14 @@
+ Comment[bg]=Едно ниво нагоре.\nСтил Opera: натискане, движение нагоре, движение наляво, движение нагоре, пускане.\nЗАБЕЛЕЖКА:Има конфликт с "Активиране на предишен подпрозорец" и затова е изключено по подразбиране.
+ Comment[de]=Geht in der Adress-/Ordnerstruktur eine Ebene höher.\nOpera-Stil: Drücken, nach oben, nach links, nach oben, loslassen.\nHinweis: Dies steht in Konflikt mit der Aktion "Vorheriges Unterfenster aktivieren und ist daher in der Voreinstellung nicht aktiviert.
+ Comment[el]=Μετάβαση προς τα πάνω στη δομή URL/καταλόγου.\nΣτυλ Opera: Πιέστε, μετακίνηση πάνω, μετακίνηση αριστερά, μετακίνηση πάνω, ελευθέρωση.\nΣΗΜΕΙΩΣΗ: Συγκρούεται με το "Ενεργοποίηση προηγούμενης καρτέλας", οπότε είναι προκαθορισμένα απενεργοποιημένο.
++Comment[et]=Liikumine URL-i/kataloogistruktuuris üles.\nOpera stiilis: vajuta, liiguta üles, liiguta vasakule, liiguta üles, vabasta.\nMärkus: konfliktis toiminguga "Eelmise kaardi aktiveerimine" ja seetõttu vaikimisi välja lülitatud.
+ Comment[fa]=بالا رفتن در ساختار نشانی وب/فهرست راهنما.\nسبک اَپرا: فشار، حرکت به بالا، حرکت به چپ، حرکت به بالا، رها کردن.\nنکته: ناسازگار با  »تب فعال قبلی«، و به طور پیش‌فرض غیر فعال است.
+ Comment[fy]=Omheech gean yn adres-/triemtafelstruktuer.\nOpera-styl: Yndrukke, nei omheech, nei lofts, nei omheech, loslitte. \nTink derom: Konflikten mei "Foarige ljepper aktivearje", en sa is standert útskeakele.
+ Comment[it]=Risale nella struttura dell'URL o directory.\nStile Opera: Premi, sposta in su, sposta a sinistra, sposta in su, rilascia.\nNOTA: È in conflitto con "Attiva scheda precedente", e quindi è normalmente disabilitato.
+ Comment[ja]=URL/ディレクトリ構造の一つ上に移動します。\nOpera スタイル: マウスの中ボタンを押したまま、マウスを上->左->上の順に動かし、ボタンを放します。\n[注意] 「前のタブをアクティブに」と競合するため、デフォルトでは無効になっています。
+ Comment[kk]=URL/каталогтар құрылымында жоғарлау.\nOpera-стилі: Бас, жоғары, сосын солға, сосын жоғары жүгірт, босат.\nЕСКЕРТУ: 'Алдыңғы қойындыға өту' дегенмен қайшылықта, сондықтан әдетте рұқсат етілмеген.
+ Comment[km]=ឡើង​លើ​ក្នុង​រចនាសម្ព័ន្ធ ថត/URL ។\nរចនាប័ទ្ម Opera ៖ ចុច ផ្លាស់ទី​ឡើង​លើ ផ្លាស់ទី​ទៅ​ឆ្វេង ផ្លាស់ទី​ឡើង​លើ លែង ។\nចំណាំ ៖ មាន​ការ​ប៉ះទង្គិច​ជា​មួយ  "ធ្វើ​ឲ្យ​ផ្ទាំង​មុន​សកម្ម" ហើយ​តាម​លំនាំដើម​វា​ត្រូវ​បាន​បិទ ។
+-Comment[nb]=Går oppover i URL/katalogstruktur.\nOpera-stil: Trykk, flytt opp, flytt til venstre, flytt opp, slipp.\nMERK: slått av som standard pga. konflikt med «Gå til forrige arkfane».
++Comment[nb]=Går oppover i URL/katalogstruktur.\nOpera-stil: Trykk, flytt opp, flytt til venstre, flytt opp, slipp.\nMERK: slått av som standard pga. konflikt med «Gå til forrige fane».
+ Comment[nds]=Na överornt Orner gahn.\nOpera-Stil: Drücken, na baven, na links, looslaten.\nBeacht: Verdreegt sik nich mit "Verleden Paneel aktiv maken" un is dorüm standardwies utmaakt.
+ Comment[ne]=यूआरएल/डाइरेक्टरी संरचना जाँदै । \nओपेरा-शैली: थिच्नुहोस्, माथि सार्नुहोस्, बायाँ सार्नुहोस्, माथि सार्नुहोस्, छोड्नुहोस् ।\nद्रष्टब्य: "अघिल्लो ट्याब सक्रिय गर्नुहोस्" सँग द्वन्द हुन्छ, र सो पूर्वनिर्धारितद्वारा अक्षम गरिन्छ ।
+ Comment[nl]=Omhoog gaan in de URL- of mappenstructuur.\nOpera-stijl: Indrukken, omhoog bewegen, naar links bewegen, omhoog bewegen,loslaten.\Opmerking: Botst met "Vorige tabblad activeren", en is daarom standaard uitgeschakel
+@@ -386,12 +416,13 @@
+ Name[bg]=Нагоре #2
+ Name[de]=Nach oben (2)
+ Name[el]=Πάνω #2
++Name[et]=Üles nr. 2
+ Name[fy]=Omheech #2
+ Name[he]=למעלה 2
+ Name[it]=Su #2
+ Name[ja]=上 #2
+ Name[kk]=Жоғары #2
+-Name[km]=ឡើង​លើ #2
++Name[km]=ឡើងលើ #2
+ Name[nb]=Opp nr. 2
+ Name[nds]=Na baven (2)
+ Name[nl]=Omhoog #2
+@@ -422,6 +453,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -447,6 +479,7 @@
+ Comment[bg]=Натискане, движение нагоре, движение надясно, пускане.
+ Comment[de]=Drücken, nach oben, nach rechts, loslassen.
+ Comment[el]=Πίεση, μετακίνηση πάνω, μετακίνηση δεξιά, ελευθέρωση.
++Comment[et]=Vajuta, liiguta üles, liiguta paremale, vabasta.
+ Comment[fa]=فشار، حرکت به بالا، حرکت به راست، رها کردن.
+ Comment[fy]=Yndrukke, nei omheech, nei rjochts, loslitte.
+ Comment[it]=Premi, sposta in su, sposta a destra, rilascia.
+@@ -475,6 +508,7 @@
+ Name[de]=Nächstes Unterfenster aktivieren
+ Name[el]=Ενεργοποίηση επόμενης καρτέλας
+ Name[es]=Activar la siguiente solapa
++Name[et]=Järgmise kaardi aktiveerimine
+ Name[fa]=فعال کردن تب بعدی
+ Name[fy]=Folgjende ljepper aktivearje
+ Name[ga]=Gníomhachtaigh an Chéad Chluaisín Eile
+@@ -483,7 +517,7 @@
+ Name[ja]=次のタブをアクティブに
+ Name[kk]=Келесі қойындыға өту
+ Name[km]=ធ្វើ​ឲ្យ​ផ្ទាំង​បន្ទាប់​សកម្ម
+-Name[nb]=Gå til neste arkfane
++Name[nb]=Gå til neste fane
+ Name[nds]=Nakamen Paneel aktiv maken
+ Name[ne]=पछिल्लो ट्याब सक्रिय पार्नुहोस्
+ Name[nl]=Volgend tabblad activeren
+@@ -517,6 +551,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -542,6 +577,7 @@
+ Comment[bg]=Натискане, движение нагоре, движение наляво, пускане.
+ Comment[de]=Drücken, nach oben, nach links, loslassen.
+ Comment[el]=Πίεση, μετακίνηση πάνω, μετακίνηση αριστερά, ελευθέρωση.
++Comment[et]=Vajuta, liiguta üles, liiguta vasakule, vabasta.
+ Comment[fa]=فشار، حرکت به بالا، حرکت به چپ، رها کردن.
+ Comment[fy]=Yndrukke, nei omheech, neo lofts, loslitte.
+ Comment[it]=Premi, sposta in su, sposta a sinistra, rilascia.
+@@ -568,6 +604,7 @@
+ Name[de]=Vorheriges Unterfenster aktivieren
+ Name[el]=Ενεργοποίηση προηγούμενης καρτέλας
+ Name[es]=Activar la solapa anterior
++Name[et]=Eelmise kaardi aktiveerimine
+ Name[fa]=فعال کردن تب قبلی
+ Name[fy]=Foarige ljepper aktivearje
+ Name[ga]=Gníomhachtaigh an Cluaisín Roimhe Seo
+@@ -576,7 +613,8 @@
+ Name[ja]=前のタブをアクティブに
+ Name[kk]=Алдыңғы қойындыға өту
+ Name[km]=ធ្វើ​ឲ្យ​ផ្ទាំង​មុន​សកម្ម
+-Name[nb]=Gå til forrige arkfane
++Name[ko]=이전 탭 활성화시키기
++Name[nb]=Gå til forrige fane
+ Name[nds]=Verleden Paneel aktiv maken
+ Name[ne]=अघिल्लो ट्याब सक्रिय बनाउनुहोस्
+ Name[nl]=Vorig tabblad activeren
+@@ -610,6 +648,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -647,6 +686,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -672,6 +712,7 @@
+ Comment[bg]=Натискане, движение надолу, движение нагоре, движение надолу, пускане.
+ Comment[de]=Drücken, nach unten, nach oben, nach unten, loslassen.
+ Comment[el]=Πίεση, μετακίνηση κάτω, μετακίνηση πάνω, μετακίνηση κάτω, ελευθέρωση.
++Comment[et]=Vajuta, liiguta alla, liiguta üles, liiguta alla, vabasta.
+ Comment[fa]=فشار، حرکت به پایین، حرکت به بالا، حرکت به پایین، رها کردن.
+ Comment[fy]=Yndrukke, nei omleech, nei omheech, nei omleech, loslitte.
+ Comment[it]=Premi, sposta in giù, sposta in su, sposta in giù, rilascia.
+@@ -697,6 +738,7 @@
+ Name[de]=Unterfenster duplizieren
+ Name[el]=Αντίγραφο καρτέλας
+ Name[es]=Duplicar la solapa
++Name[et]=Kaardi dubleerimine
+ Name[fa]=تب مضاعف
+ Name[fy]=Ljepper duplisearje
+ Name[he]=שכפל לשונית
+@@ -704,6 +746,7 @@
+ Name[ja]=タブを複製
+ Name[kk]=Қойындының көшірмесін жасау
+ Name[km]=ផ្ទាំង​ស្ទួន​
++Name[ko]=탭 복제하기
+ Name[nb]=Lag kopi av fane
+ Name[nds]=Paneel verdubbeln
+ Name[ne]=नक्कली ट्याब
+@@ -738,6 +781,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -763,6 +807,7 @@
+ Comment[bg]=Натискане, движение надолу, движение нагоре, пускане.
+ Comment[de]=Drücken, nach unten, nach oben, loslassen.
+ Comment[el]=Πίεση, μετακίνηση κάτω, μετακίνηση πάνω, ελευθέρωση.
++Comment[et]=Vajuta, liiguta alla, liiguta üles, vabasta.
+ Comment[fa]=فشار، حرکت به پایین، حرکت به بالا، رها کردن.
+ Comment[fy]=Yndrukke, nei omleech, nei omheech, loslitte.
+ Comment[it]=Premi, sposta in giù, sposta in su, rilascia.
+@@ -791,6 +836,7 @@
+ Name[de]=Fenster duplizieren
+ Name[el]=Αντίγραφο παραθύρου
+ Name[es]=Duplicar la ventana
++Name[et]=Akna dubleerimine
+ Name[fa]=پنجرۀ تکراری
+ Name[fy]=Finster duplisearje
+ Name[he]=שכפל חלון
+@@ -798,6 +844,7 @@
+ Name[ja]=ウィンドウを複製
+ Name[kk]=Терезесінің көшірмесін жасау
+ Name[km]=បង្អួច​ស្ទួន
++Name[ko]=창 복제하기
+ Name[nb]=Dupliser vindu
+ Name[nds]=Finster verdubbeln
+ Name[ne]=नक्कली सञ्झ्याल
+@@ -833,6 +880,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -858,6 +906,7 @@
+ Comment[bg]=Натискане, движение надясно, пускане.
+ Comment[de]=Drücken, nach rechts, loslassen
+ Comment[el]=Πίεση, μετακίνηση δεξιά, ελευθέρωση.
++Comment[et]=Vajuta, liiguta paremale, vabasta.
+ Comment[fa]=فشار، حرکت به راست، رها کردن.
+ Comment[fy]=Yndrukke, nei rjochts, loslitte.
+ Comment[it]=Premi, sposta a desta, rilascia.
+@@ -885,6 +934,7 @@
+ Name[de]=Nach vorne
+ Name[el]=Εμπρός
+ Name[es]=Adelante
++Name[et]=Edasi
+ Name[fa]=پیش‌سو
+ Name[fy]=Foarút
+ Name[ga]=Ar Aghaidh
+@@ -893,6 +943,7 @@
+ Name[ja]=進む
+ Name[kk]=Алға
+ Name[km]=ទៅ​មុខ
++Name[ko]=앞으로
+ Name[nb]=Forover
+ Name[nds]=Vörut
+ Name[ne]=अगाडि
+@@ -927,6 +978,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -952,6 +1004,7 @@
+ Comment[bg]=Натискане, движение надясно, полудвижение нагоре, движение надясно, движение надолу, пускане.\n(Пише се малка буква "h".)
+ Comment[de]=Drücken, nach unten, halb nach oben, nach rechts, nach unten, loslassen. (ein kleines "h" zeichnen")
+ Comment[el]=Πίεση, μετακίνηση κάτω, μετακίνηση κατά το ήμισυ πάνω, μετακίνηση δεξιά, μετακίνηση κάτω,ελευθέρωση.\n(Σχεδίαση ενός μικρού 'h'.)
++Comment[et]=Vajuta, liiguta alla, liiguta pool teed üles, liiguta paremale, liiguta alla, vabasta.\n(Väikese h-tähe joonistamine.)
+ Comment[fa]=فشار، حرکت به پایین، نیم حرکت به بالا، حرکت به راست، حرکت به پایین، رها کردن.\n)ترسیم حرف کوچک »h«.(
+ Comment[fy]=Yndrukke, nei omleech, heal nei omheech, nei rjochts, nei omleech, loslitte.\n(Tekenje in lytse letter 'h'.)
+ Comment[it]=Premi, sposta in giù, sposta in su a metà, sposta a destra, sposta in giù, rilascia.\n(Disegna un'"h" minuscola.)
+@@ -1054,6 +1107,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -1083,6 +1137,7 @@
+ Comment[bg]=Натискане, движение надолу, движение нагоре, движение надолу, пускане.
+ Comment[de]=Drücken, nach rechts, nach unten, nach rechts, loslassen.\nMozilla-Stil: Drücken, nach unten, nach rechts, loslassen.
+ Comment[el]=Πίεση, μετακίνηση δεξιά, μετακίνηση κάτω, μετακίνηση δεξιά, ελευθέρωση.\nΣτυλ Mozilla: Πίεση, μετακίνηση κάτω, μετακίνηση δεξιά, ελευθέρωση.
++Comment[et]=Vajuta, liiguta paremale, liiguta alla, liiguta paremale, vabasta.\nMozilla stiilis: vajuta, liiguta alla, liiguta paremale, vabasta.
+ Comment[fa]=فشار، حرکت به راست، حرکت به پایین، حرکت به راست، رها کردن.\nسبک موزیلا: فشار، حرکت به پایین، حرکت به راست، رها کردن.
+ Comment[fy]=Yndrukke, nei rjochts, nei omleech, nei rjochts, loslitte.\nMozilla-styl: Yndrukke, nei omleech, nei rjochts, loslitte.
+ Comment[it]=Premi, sposta a destra, sposta in giù, sposta a destra, rilascia.\nStile Mozilla: Premi, sposta in giù, sposta a destra, rilascia.
+@@ -1111,6 +1166,7 @@
+ Name[de]=Unterfenster schließen
+ Name[el]=Κλείσιμο καρτέλας
+ Name[es]=Cerrar la solapa
++Name[et]=Kaardi sulgemine
+ Name[fa]=بستن تب
+ Name[fy]=Ljepper slute
+ Name[ga]=Dún an Cluaisín
+@@ -1119,6 +1175,7 @@
+ Name[ja]=タブを閉じる
+ Name[kk]=Қойындыны жабу
+ Name[km]=បិទ​ផ្ទាំង
++Name[ko]=탭 닫기
+ Name[nb]=Lukk fane
+ Name[nds]=Paneel tomaken
+ Name[ne]=ट्याब बन्द गर्नुहोस्
+@@ -1154,6 +1211,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -1183,6 +1241,7 @@
+ Comment[bg]=Натискане, движение нагоре, пускане.\nИма конфликт със стила на Opera "Нагоре 2", който е по подразбиране.
+ Comment[de]=Drücken, nach oben, loslassen.\nSteht in Konflikt mit dem Opera-Stil von "Nach oben (2)", der aber in der Voreinstellung nicht aktiviert ist.
+ Comment[el]=Πίεση, μετακίνηση πάνω, ελευθέρωση.\nΣύγκρουση με το στυλ Opera 'Πάνω #2', το οποίο είναι προκαθορισμένα απενεργοποιημένο.
++Comment[et]=Vajuta, liiguta üles, vabasta.\nKonfliktis Opera stiilis 'Üles nr. 2', mis on vaikimisi välja lülitatud.
+ Comment[fa]=فشار، حرکت به بالا، رها کردن\nمتناقض با سبک اَپرا »بالا #۲«، که به طور پیش‌فرض غیرفعال است.
+ Comment[fy]=Yndrukke, nei omheech, loslitte.\nKonflikt mei Opera-styl 'nei omheech #2', hokker standert útskeakele is.
+ Comment[it]=Premi, sposta in su, rilascia.\nÈ in conflitto con il gesto in stile Opera "Su #2", che è disabilitato normalmente.
+@@ -1212,6 +1271,7 @@
+ Name[de]=Neues Unterfenster
+ Name[el]=Νέα καρτέλα
+ Name[es]=Nueva solapa
++Name[et]=Uus kaart
+ Name[fa]=تب جدید
+ Name[fy]=Nije ljepper
+ Name[ga]=Cluaisín Nua
+@@ -1220,7 +1280,7 @@
+ Name[ja]=新規タブ
+ Name[kk]=Жаңа қойынды
+ Name[km]=ផ្ទាំង​ថ្មី
+-Name[nb]=Ny arkfane
++Name[nb]=Ny fane
+ Name[nds]=Nieg Paneel
+ Name[ne]=नयाँ ट्याब
+ Name[nl]=Nieuw tabblad
+@@ -1255,6 +1315,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -1280,6 +1341,7 @@
+ Comment[bg]=Натискане, движение надолу, пускане.
+ Comment[de]=Drücken, nach unten, loslassen.
+ Comment[el]=Πίεση, μετακίνηση κάτω, ελευθέρωση.
++Comment[et]=Vajuta, liiguta alla, vabasta.
+ Comment[fa]=فشار، حرکت به پایین، رها کردن.
+ Comment[fy]=Yndrukke, nei omleech, loslitte
+ Comment[it]=Premi, sposta in giù, rilascia.
+@@ -1384,6 +1446,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+@@ -1409,6 +1472,7 @@
+ Comment[bg]=Натискане, движение нагоре, движение надолу, пускане.
+ Comment[de]=Drücken, nach oben, nach unten, loslassen.
+ Comment[el]=Πίεση, μετακίνηση πάνω, μετακίνηση κάτω, ελευθέρωση.
++Comment[et]=Vajuta, liiguta üles, liiguta alla, vabasta.
+ Comment[fa]=فشار، حرکت به بالا، حرکت به پایین، رها کردن.
+ Comment[fy]=Yndrukke, nei omheech, nei omleech, loslitte.
+ Comment[it]=Premi, sposta in su, sposta in giù, rilascia.
+@@ -1437,6 +1501,7 @@
+ Name[de]=Dokument erneut laden
+ Name[el]=Επαναφόρτωση
+ Name[es]=Recargar
++Name[et]=Laadi uuesti
+ Name[fa]=بارگذاری مجدد
+ Name[fy]=Ferfarskje
+ Name[ga]=Athluchtaigh
+@@ -1445,6 +1510,7 @@
+ Name[ja]=再読み込み
+ Name[kk]=Қайта жүктеу
+ Name[km]=ផ្ទុក​ឡើង​វិញ
++Name[ko]=새로 고침
+ Name[nb]=Last på nytt
+ Name[nds]=Nieg laden
+ Name[ne]=पुन: लोड गर्नुहोस्
+@@ -1479,6 +1545,7 @@
+ Comment[bg]=Жестове
+ Comment[de]=Gesten_Aktivierung
+ Comment[el]=Ενεργοποιήσεις χειρονομίας
++Comment[et]=Žesti käivitajad
+ Comment[fy]=Stjoerring_starters
+ Comment[it]=Interruttori_gesti
+ Comment[kk]=Ым_Қимыл_жіберушілері
+--- a/khotkeys/data/printscreen.khotkeys
++++ b/khotkeys/data/printscreen.khotkeys
+@@ -6,6 +6,7 @@
+ Comment[bg]=Тази група съдържа действия, които са зададени по подразбирани.
+ Comment[de]=Diese Gruppe enthält einige voreingestellte Aktionen.
+ Comment[el]=Η ομάδα αυτή περιέχει ενέργειες που είναι προκαθορισμένα καθορισμένες.
++Comment[et]=See grupp sisaldab vaikimisi määratud toiminguid.
+ Comment[fa]=این گروه شامل کنشهایی است که به طور پیش‌فرض برپا می‌شوند.
+ Comment[fy]=Dizze groep befettet aksjes dy standert ynsteld binne. 
+ Comment[he]=קבוצה זו כוללת פעולות המוגדרות כברירת מחדל
+@@ -36,6 +37,7 @@
+ Name[de]=Voreingestellte Aktionen
+ Name[el]=Προκαθορισμένες ενέργειες
+ Name[es]=Acciones predefinidas
++Name[et]=Valmistoimingud
+ Name[fa]=پیش‌تنظیم کنشها
+ Name[fy]=Foarynstelde aksjes
+ Name[ga]=Gníomhartha Réamhshocraithe
+@@ -71,6 +73,7 @@
+ Comment[bg]=Стартиране на KSnapShot при натискане на клавиша "PrintScrn"
+ Comment[de]=Startet KSnapShot wenn "Bildschirm Drucken" gedrückt wurde.
+ Comment[el]=Εκτέλεση του KSnapShot όταν πατηθεί το PrintScrn.
++Comment[et]=Käivitab PrintSrcni vajutamisel KSnapShoti.
+ Comment[fa]=وقتی PrintScrn فشار داده می‌شود، KSnapShot را راه می‌اندازد.
+ Comment[fy]=Set útein mei KSnapShot as PrintScrn yndrukt wurdt.
+ Comment[he]=הפעלת KSnapShot בעת הקשה על PrintScrn.
+@@ -130,6 +133,7 @@
+ Comment[de]=Einfache_Aktion
+ Comment[el]=Απλή_ενέργεια
+ Comment[es]=Acción sencilla
++Comment[et]=Lihtne toiming
+ Comment[fy]=Ienfâldige_aksje
+ Comment[ga]=Gníomh simplí
+ Comment[he]=פעולה פשוטה
+--- a/khotkeys/kcontrol/khotkeys.desktop
++++ b/khotkeys/kcontrol/khotkeys.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell khotkeys
++Exec=kcmshell4 khotkeys
+ Icon=preferences-desktop-keyboard-khotkeys
+ Type=Service
+ ServiceTypes=KCModule
+--- a/kstartupconfig/kstartupconfig.cpp
++++ b/kstartupconfig/kstartupconfig.cpp
+@@ -90,7 +90,7 @@
+     strlcat( filename, "/share/config/startupconfig", 1024 );
+     if( access( filename, R_OK ) != 0 )
+         {
+-        int ret = system( "kdostartupconfig" );
++        int ret = system( "kdostartupconfig4" );
+         return WEXITSTATUS( ret );
+         }
+     strlcpy( filename, kdehome, 1024 );
+@@ -98,14 +98,14 @@
+     struct stat st;
+     if( stat( filename, &st ) != 0 )
+         {
+-        int ret = system( "kdostartupconfig" );
++        int ret = system( "kdostartupconfig4" );
+         return WEXITSTATUS( ret );
+         }
+     time_t config_time = st.st_mtime;
+     FILE* config = fopen( filename, "r" );
+     if( config == NULL )
+         {
+-        int ret = system( "kdostartupconfig" );
++        int ret = system( "kdostartupconfig4" );
+         return WEXITSTATUS( ret );
+         }
+     strlcpy( filename, kdehome, 1024 );
+@@ -169,7 +169,7 @@
+     fclose( config );
+     if( need_update )
+         {
+-        int ret = system( "kdostartupconfig" );
++        int ret = system( "kdostartupconfig4" );
+         return WEXITSTATUS( ret );
+         }
+     return 0;
+--- a/kstartupconfig/CMakeLists.txt
++++ b/kstartupconfig/CMakeLists.txt
+@@ -2,19 +2,19 @@
+ 
+ set(kstartupconfig_SRCS kstartupconfig.cpp )
+ 
+-kde4_add_executable(kstartupconfig NOGUI ${kstartupconfig_SRCS})
++kde4_add_executable(kstartupconfig4 NOGUI ${kstartupconfig_SRCS})
+ 
+-target_link_libraries(kstartupconfig kdefakes ${KDE4_KDECORE_LIBS})
++target_link_libraries(kstartupconfig4 kdefakes ${KDE4_KDECORE_LIBS})
+ 
+-install(TARGETS kstartupconfig DESTINATION ${BIN_INSTALL_DIR} )
++install(TARGETS kstartupconfig4 DESTINATION ${BIN_INSTALL_DIR} )
+ 
+ ########### kdostartupconfig ###############
+ 
+ set(kdostartupconfig_SRCS kdostartupconfig.cpp )
+ 
+-kde4_add_executable(kdostartupconfig NOGUI ${kdostartupconfig_SRCS})
++kde4_add_executable(kdostartupconfig4 NOGUI ${kdostartupconfig_SRCS})
+ 
+-target_link_libraries(kdostartupconfig ${KDE4_KDECORE_LIBS} )
++target_link_libraries(kdostartupconfig4 ${KDE4_KDECORE_LIBS} )
+ 
+-install(TARGETS kdostartupconfig DESTINATION ${BIN_INSTALL_DIR} )
++install(TARGETS kdostartupconfig4 DESTINATION ${BIN_INSTALL_DIR} )
+ 
+--- a/ksplash/simple/main.cpp
++++ b/ksplash/simple/main.cpp
+@@ -31,14 +31,36 @@
+ 
+ int main( int argc, char* argv[])
+     {
+-    if( fork() != 0 )
++    bool test = false;
++    bool print_pid = false;
++    for( int i = 1;
++         i < argc;
++         ++i )
++        {
++        if( strcmp( argv[ i ], "--test" ) == 0 )
++            test = true;
++        if( strcmp( argv[ i ], "--pid" ) == 0 )
++            print_pid = true;
++        }
++    pid_t pid = fork();
++    if( pid < -1 )
++        {
++        perror( "fork()" );
++        return -1;
++        }
++    if( pid != 0 )
++        { // parent
++        if( print_pid )
++            printf( "%d\n", pid );
+         return 0;
++        }
++    // child
++    close( 0 ); // close stdin,stdout,stderr, otherwise startkde will block
++    close( 1 );
++    close( 2 );
+     Display* dpy = XOpenDisplay( NULL );
+     if( dpy == NULL )
+         return 1;
+-    bool test = false;
+-    if( argc == 2 && strcmp( argv[ 1 ], "--test" ) == 0 )
+-        test = true;
+     int sx, sy, sw, sh;
+ #ifdef HAVE_XINERAMA
+     // Xinerama code from Qt
+--- a/ksplash/kcm/ksplashthememgr.desktop
++++ b/ksplash/kcm/ksplashthememgr.desktop
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Icon=preferences-system-splash
+-Exec=kcmshell ksplashthememgr
++Exec=kcmshell4 ksplashthememgr
+ DocPath=ksplashml/themes.html
+ 
+ Type=Service
+@@ -150,7 +150,7 @@
+ Keywords[el]=αρχική οθόνη,θέμα αρχικής οθόνης,ξεκίνημα
+ Keywords[eo]=Kcm_salutŝildo,Salutŝildo,Saluto
+ Keywords[es]=pantalla de inicio,tema de inicio,inicio
+-Keywords[et]=käivitusekraan,käivutusteema,käivitamine
++Keywords[et]=käivitusekraan,käivitusteema,käivitamine
+ Keywords[eu]=splash pantaila,splash gaia,abioa
+ Keywords[fa]=رنگ‌پاشی پرده، چهرۀ رنگ‌پاشی، راه‌اندازی
+ Keywords[fi]=aloitusruutu,aloitusruututeema,käynnistys
+@@ -163,7 +163,7 @@
+ Keywords[hu]=nyitókép,indítási téma,indulás
+ Keywords[it]=schermata di avvio,splash screen,splash theme,tema schermata di avvio,avvio,startup
+ Keywords[ja]=スプラッシュスクリーン,スプラッシュテーマ,起動
+-Keywords[km]=អេក្រង់​ស្វាគមន៍, ស្បែក​ពេល​ស្វាគមន៍, ដំឡើង​
++Keywords[km]=អេក្រង់​ស្វាគមន៍ ស្បែក​ពេល​ស្វាគមន៍ ដំឡើង​
+ Keywords[ko]=시작 화면,시작,테마
+ Keywords[lt]=splash screen,splash theme,startup,pasveikinimo ekranas,pasveikinimo tema
+ Keywords[lv]=šļakstekrāns,šļakstekrāna tēma,palaišanās
+--- a/ksplash/ksplashx/main.cpp
++++ b/ksplash/ksplashx/main.cpp
+@@ -6,52 +6,59 @@
+ 
+ static void usage( char* name )
+     {
+-    fprintf( stderr, "Usage: %s <theme> [--test]\n", name );
++    fprintf( stderr, "Usage: %s <theme> [--test] [--pid]\n", name );
+     exit( 1 );
+     }
+ 
+ int main( int argc, char* argv[] )
+     {
+-    if( argc != 2 && argc != 3 )
++    if( argc != 2 && argc != 3 && argc != 4 )
+         usage( argv[ 0 ] );
+     bool test = false;
+-    if( argc == 3 )
++    bool print_pid = false;
++    for( int i = 2; // 1 is the theme
++         i < argc;
++         ++i )
+         {
+-        if( strcmp( argv[ 2 ], "--test" ) == 0 )
++        if( strcmp( argv[ i ], "--test" ) == 0 )
+             test = true;
++        else if( strcmp( argv[ i ], "--pid" ) == 0 )
++            print_pid = true;
+         else
+             usage( argv[ 0 ] );
+         }
+     char* theme = argv[ 1 ];
++    int pipes[ 2 ];
++    if( pipe( pipes ) < 0 )
++        {
++        perror( "pipe()" );
++        abort();
++        }
+     int parent_pipe = -1;
+-    if( !test )
++    pid_t pid = fork();
++    if( pid < 0 )
+         {
+-        int pipes[ 2 ];
+-        if( pipe( pipes ) < 0 )
+-            {
+-            perror( "pipe()" );
+-            abort();
+-            }
+-        int f = fork();
+-        if( f < 0 )
+-            {
+-            perror( "fork()" );
+-            abort();
+-            }
+-        if( f == 0 )
+-            { // child
+-            close( pipes[ 0 ] );
+-            parent_pipe = pipes[ 1 ];
+-            }
+-        else
+-            {
+-            close( pipes[ 1 ] );
+-            char buf;
+-            while( read( pipes[ 0 ], &buf, 1 ) < 0
+-                && ( errno == EINTR || errno == EAGAIN || errno == ECHILD ))
+-                ;
+-            return 0;
+-            }
++        perror( "fork()" );
++        abort();
++        }
++    if( pid == 0 )
++        { // child
++        close( pipes[ 0 ] );
++        parent_pipe = pipes[ 1 ];
++        close( 0 ); // close stdin,stdout,stderr, otherwise startkde will block
++        close( 1 );
++        close( 2 );
++        }
++    else
++        { // parent
++        close( pipes[ 1 ] );
++        char buf;
++        while( read( pipes[ 0 ], &buf, 1 ) < 0
++            && ( errno == EINTR || errno == EAGAIN || errno == ECHILD ))
++            ;
++        if( print_pid )
++            printf( "%d\n", pid );
++        return 0;
+         }
+     if( !openDisplay())
+         return 2;
+--- a/config-workspace.h.cmake
++++ b/config-workspace.h.cmake
+@@ -54,6 +54,12 @@
+ /* Define to 1 if you have the <sys/loadavg.h> header file. */
+ #cmakedefine HAVE_SYS_LOADAVG_H 1
+ 
++/* Define to 1 if you have the <sys/mount.h> header file. */
++#cmakedefine HAVE_SYS_MOUNT_H 1
++
++/* Define to 1 if you have the <sys/param.h> header file. */
++#cmakedefine HAVE_SYS_PARAM_H 1
++
+ /* Define to 1 if you have the <sys/select.h> header file. */
+ #cmakedefine HAVE_SYS_SELECT_H 1
+ 
+@@ -66,6 +72,9 @@
+ /* Define to 1 if you have the <sys/types.h> header file. */
+ #cmakedefine HAVE_SYS_TYPES_H 1
+ 
++/* Define to 1 if you have the <sys/vfs.h> header file. */
++#cmakedefine HAVE_SYS_VFS_H 1
++
+ /* Define to 1 if you have the <sys/wait.h> header file. */
+ #cmakedefine HAVE_SYS_WAIT_H 1
+ 
+@@ -91,13 +100,13 @@
+ #cmakedefine HAVE_VSNPRINTF 1
+ 
+ /* KDE's binaries directory */
+-#define KDE_BINDIR "${CMAKE_INSTALL_PREFIX}/bin"
++#define KDE_BINDIR "${BIN_INSTALL_DIR}"
+ 
+ /* KDE's configuration directory */
+-#define KDE_CONFDIR "${CMAKE_INSTALL_PREFIX}/share/config"
++#define KDE_CONFDIR "${CONFIG_INSTALL_DIR}"
+ 
+ /* KDE's static data directory */
+-#define KDE_DATADIR "${CMAKE_INSTALL_PREFIX}/share/apps"
++#define KDE_DATADIR "${DATA_INSTALL_DIR}"
+ 
+ /* Define where your java executable is */
+ #undef PATH_JAVA
+--- a/ktip/tips
++++ b/ktip/tips
+@@ -6,10 +6,7 @@
+ also useful sites for major applications like
+ <A HREF="http://www.konqueror.org/">Konqueror</A>,
+ <A HREF="http://www.koffice.org/">KOffice</A> and
+-<A HREF="http://www.kdevelop.org/">KDevelop</A>, or important
+-KDE utilities like
+-<A HREF="http://printing.kde.org/">KDEPrint</A>,
+-which can be put to its full usage even outside KDE...
++<A HREF="http://www.kdevelop.org/">KDevelop</A>.
+ </P>
+ <br>
+ <center>
+@@ -106,23 +103,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p>For quick access to KDEPrint Manager type
+-<strong>"print:/manager"</strong>... --  <em>"Type where?"</em>,
+- you may ask. Type it...</p>
+-<ul>
+-  <li>...either in Konqueror's <i>address field</i>,</li>
+-  <li>...or in a <i>Run Command</i> dialog,
+-         opened by pressing <strong>Alt+F2</strong>.</li>
+-</ul>
+-</p>
+-<center>
+-<img src="crystalsvg/48x48/devices/printer1.png">
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+ <tip category="KDE2|Desktop">
+ <html>
+ <p>
+@@ -213,43 +193,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p align="center"><strong>KDEPrinting (I)</strong></p>
+-<p><strong>kprinter</strong>, KDE's new printing utility supports
+-different print subsystems. These subsystems differ very much
+-in their abilities.</p>
+-<p>Among the supported systems are:
+-<ul>
+-<li>CUPS, the new Common UNIX Printing System;</li>
+-<li>LPR/LPD, traditional BSD-style printing;</li>
+-<li>RLPR (no need for "printcap" editing or root privileges to
+-use network printers);</li>
+-<li>printing through an external program (generic).</li>
+-</ul>
+-</html>
+-</tip>
+-
+-
+-<tip category="General">
+-<html>
+-<p align="center"><strong>KDEPrinting (II)</strong></p>
+-
+-<p>Not all print subsystems provide equal abilities
+-for KDEPrint to build on.</p>
+-<p>The <A HREF="http://printing.kde.org/">KDEPrinting Team</A>
+-recommends installing <A
+-HREF="http://www.cups.org/"><strong>CUPS</strong></A>
+-as the underlying print subsystem.</p>
+-<p> CUPS provides easy usage, powerful features, broad printer
+-support and a modern design (based on IPP, the "Internet
+-Printing Protocol"). Its usefulness is proven for home users
+-as well as for large networks.
+-</p>
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+ 
+ <tip category="General">
+ <html>
+@@ -283,34 +226,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p>You can start <strong>kprinter</strong> as a standalone program
+-from any xterm, Konsole window or from the "Run Command" dialog (started
+-by pressing <i>Alt+F2</i>). Then select the file to print. You can print
+-as many items of different types as you want, all at once.
+-</p>
+-<center>
+-<img src="crystalsvg/48x48/devices/printer1.png"></center>
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+-
+-
+-<tip category="General">
+-<html>
+-<p>You may at any time switch <strong>kprinter</strong> to another
+-print subsystem "on the fly" (and you do not need to be root to do it.)
+-</p>
+-<p>Laptop users who frequently change to different environments may find
+-<A HREF="ftp://truffula.com/pub/">RLPR</A> a useful complement to CUPS
+-(or any other print subsystem they use as their preferred one).
+-</p>
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+ <tip category="General|Help">
+ <html>
+ <P>
+@@ -343,26 +258,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p>
+-Need comprehensive info about KDEPrinting?<br> </p>
+-<p> Type <strong>help:/kdeprint/</strong> into a Konqueror address field
+-and get the
+- <a href="http://printing.kde.org/documentation/handbook/">KDEPrint Handbook</a>
+-displayed.</p> <p>This, plus more material (like a
+- <a href="http://printing.kde.org/faq/">FAQ</a>, various
+- <a href="http://printing.kde.org/documentation/tutorials/">Tutorials</a>,
+-a "TipsNTricks" section and the
+- <a href="http://mail.kde.org/mailman/listinfo/kde-print/">kdeprint mailing list</a>)
+- are available at
+-<a href="http://printing.kde.org/">printing.kde.org</a>...
+-</p>
+-<center>
+-<img src="crystalsvg/48x48/devices/printer1.png">
+-</html>
+-</tip>
+-
+ 
+ <tip category="General">
+ <html>
+@@ -527,21 +422,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p> Want KDE's printing power in non-KDE apps?  </p>
+-<p> Then use <strong>'kprinter'</strong> as "print command".
+-Works with Netscape, Mozilla, Galeon, gv, Acrobat Reader,
+- StarOffice, OpenOffice.org, any GNOME application and many more...</p>
+-<p>See <a href="http://printing.kde.org/faq/kdeprint.phtml#out">printing.kde.org</a>
+-for more detailed hints...
+-</p>
+-<center>
+-<img src="crystalsvg/48x48/devices/printer1.png">
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+ 
+ <tip category="Keyboard|Desktop">
+ <html>
+@@ -611,39 +491,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p align="center"><strong>KDE Command Line Printing (I)</strong></p>
+-<p> Want to print from command line, without missing KDE's printing power?</p>
+-<p> Type <strong>'kprinter'</strong>. Up pops the
+-KDEPrint dialog. Select printer, print options and
+-print files (note that you may select <em>different</em>
+-files of <em>different</em> types for <em>one</em> print job...). </p>
+-<p>This works from Konsole, any x-Terminal, or "Run Command"
+-(called by pressing <em>Alt+F2</em>)</p>
+-</html>
+-</tip>
+-
+-
+-<tip category="General">
+-<html>
+-<p align="center"><strong>KDE Command Line Printing (II)</strong></p>
+-<p>
+-You may specify print files and/or name a printer from the command line:
+-<pre>
+-kprinter -d infotec \
+-   /home/kurt/paragliding.jpg \
+-   ../kdeprint-handbook.pdf \
+-   /opt/kde3/flyer.ps
+-</pre>
+- This prints 3 different files (from different folders) to printer "infotec".
+- </p>
+-<center>
+-<img src="crystalsvg/48x48/devices/printer1.png">
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+ <tip category="LookNFeel">
+ <html>
+ <p>
+@@ -795,23 +642,6 @@
+ </html>
+ </tip>
+ 
+-<tip category="General">
+-<html>
+-<p>
+-Want to print by using "DragNDrop"?
+-</p>
+-<p>
+-Drag a file and drop it on the "Files" tab of an opened
+-<strong>kprinter</strong> dialog. </p>
+-<p>Then continue as you would normally: select a printer, job options, etc.
+-and click the "Print" button.
+-</p>
+-<center>
+-<img src="crystalsvg/48x48/devices/printer1.png">
+-<p align="right"><em>Contributed by Kurt Pfeifle</em></p>
+-</html>
+-</tip>
+-
+ 
+ <tip category="General">
+ <html>
+--- a/kwin/effects/invert.desktop
++++ b/kwin/effects/invert.desktop
+@@ -6,6 +6,7 @@
+ Name[de]=Invertieren
+ Name[el]=Αντιστροφή
+ Name[es]=Invertir
++Name[et]=Teistpidi
+ Name[fa]=وارونه
+ Name[he]=הפוך צבעים
+ Name[ja]=色調反転
+@@ -30,6 +31,7 @@
+ Comment[de]=Invertiert Farben der Arbeitsfläche
+ Comment[el]=Αντιστρέφει τα χρώματα της επιφάνειας εργασίας
+ Comment[es]=Invierte (niega) los colores del escritorio
++Comment[et]=Muudab töölaua värvid vastupidiseks
+ Comment[fa]=رنگهای رومیزی را وارونه )خنثی( می‌کند
+ Comment[he]=הופך את צבעי שולחן העבודה
+ Comment[ja]=デスクトップの色を反転させます
+--- a/kwin/effects/maketransparent.cpp
++++ b/kwin/effects/maketransparent.cpp
+@@ -10,6 +10,8 @@
+ 
+ #include "maketransparent.h"
+ 
++#include <kconfiggroup.h>
++
+ namespace KWin
+ {
+ 
+@@ -17,10 +19,10 @@
+ 
+ MakeTransparentEffect::MakeTransparentEffect()
+     {
+-    // TODO options
+-    decoration = 0.7;
+-    moveresize = 0.5;
+-    dialogs = 1.0;
++    KConfigGroup conf = effects->effectConfig("MakeTransparent");
++    decoration = conf.readEntry( "Decoration", 0.7 );
++    moveresize = conf.readEntry( "MoveResize", 0.8 );
++    dialogs = conf.readEntry( "Dialogs", 1.0 );
+     }
+ 
+ void MakeTransparentEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time )
+--- a/kwin/effects/dialogparent.desktop
++++ b/kwin/effects/dialogparent.desktop
+@@ -6,6 +6,7 @@
+ Name[de]=Eltern-Dialog
+ Name[el]=Γονικός διάλογος
+ Name[es]=Padre de la ventana
++Name[et]=Dialoogi eellane
+ Name[fa]=پدر محاوره
+ Name[ga]=Máthairdialóg
+ Name[he]=חלונות־אב של תיבות דו־שיח
+@@ -31,6 +32,7 @@
+ Comment[bg]=Потъмнение на главните от активните прозорци
+ Comment[de]=Dunkelt den Eltern-Dialog des aktiven Fensters ab
+ Comment[el]=Σκίαση γονικών παραθύρων των ενεργών διαλόγων
++Comment[et]=Tumendab aktiivsete dialoogide eellasaknad
+ Comment[fa]=پنجره‌های پدر محاوره‌های فعال را تیره می‌کند
+ Comment[he]=מחשיך חלונות־אב של תיבות דו־שיח פעילות
+ Comment[ja]=アクティブなダイアログの親ウィンドウを暗くします
+--- a/kwin/effects/trackmouse.desktop
++++ b/kwin/effects/trackmouse.desktop
+@@ -6,6 +6,7 @@
+ Name[de]=Mausspur
+ Name[el]=Ανίχνευση ποντικιού
+ Name[es]=Seguir el ratón
++Name[et]=Hiire jälgimine
+ Name[fa]=ردگیری موشی
+ Name[he]=עקבות עכבר
+ Name[ja]=トラックマウス
+--- a/kwin/effects/desktopgrid.desktop
++++ b/kwin/effects/desktopgrid.desktop
+@@ -7,6 +7,7 @@
+ Name[de]=Arbeitsflächen-Raster
+ Name[el]=Πλέγμα επιφάνειας εργασίας
+ Name[es]=Rejilla del escritorio
++Name[et]=Töölauavõrgustik
+ Name[fa]=توری رومیزی
+ Name[he]=רשת שולחנות עבודה
+ Name[it]=Griglia dei Desktop
+@@ -32,6 +33,7 @@
+ Comment[bg]=Превключване между работните плотове в мрежа
+ Comment[de]=Arbeitsflächenumschaltung (Fensteranordnung in einem Raster)
+ Comment[el]=Εναλλαγή επιφάνειας εργασίας με τοποθέτηση των επιφανειών σε έναν κάνναβο
++Comment[et]=Töölauavahetaja, mis näitab töölaudu võrgustikus
+ Comment[fa]=سوده رومیزی که رومیزیها را به بیرون توری می‌کشد
+ Comment[he]=מחליף שולחנות עבודה שמסדר את שולחנות העבודה ברשת
+ Comment[ja]=デスクトップを格子状に並べるデスクトップスイッチャー
+--- a/kwin/effects/presentwindows_config.cpp
++++ b/kwin/effects/presentwindows_config.cpp
+@@ -59,7 +59,7 @@
+     KGlobalAccel::self()->overrideMainComponentData(componentData());
+     KActionCollection* actionCollection = new KActionCollection( this );
+     KAction* a = (KAction*)actionCollection->addAction( "Expose" );
+-    a->setText( i18n("Toggle Expose effect" ));
++    a->setText( i18n("Toggle Expose Effect" ));
+     a->setGlobalShortcut(KShortcut(Qt::CTRL + Qt::Key_F10));
+     KAction* b = (KAction*)actionCollection->addAction( "ExposeAll" );
+     b->setText( i18n("Toggle Expose effect (incl other desktops)" ));
+--- a/kwin/effects/lookingglass.desktop
++++ b/kwin/effects/lookingglass.desktop
+@@ -2,6 +2,7 @@
+ Encoding=UTF-8
+ Name=Looking Glass
+ Name[es]=Espejo
++Name[et]=Suurendusklaas
+ Name[he]=מראה
+ Name[kk]=Айна
+ Name[km]=កញ្ចក់​មើល
+@@ -20,6 +21,7 @@
+ Comment[de]=Looking Glass erweiterte Lupe
+ Comment[el]=Βελτιωμένος μεγεθυντικός φακός Looking Glass
+ Comment[es]=Lupa de espejo mejorada
++Comment[et]=Suurendusklaas on täiustatud suurendaja
+ Comment[he]=זכוכית מגדלת משופרת
+ Comment[kk]=Айнамен күшейткен ұлғайтқыш
+ Comment[km]=​កញ្ចក់​មើល​ដែល​បាន​បន្ថែម​ទៅ​ក្នុង​កែវ​ពង្រីក​
+--- a/kwin/effects/shadow.cpp
++++ b/kwin/effects/shadow.cpp
+@@ -13,6 +13,7 @@
+ #include <kwinglutils.h>
+ 
+ #include <kconfiggroup.h>
++#include <kdebug.h>
+ #include <KStandardDirs>
+ 
+ namespace KWin
+@@ -40,16 +41,22 @@
+     return windowRectangle.adjusted( shadowXOffset - shadowGrow, shadowYOffset - shadowGrow,
+             shadowXOffset + shadowGrow, shadowYOffset + shadowGrow);
+     }
++
+ void ShadowEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time )
+     {
+-    data.mask |= PAINT_WINDOW_TRANSLUCENT;
+-    data.paint |= QRegion( shadowRectangle( ( QRegion( w->geometry()) & data.paint ).boundingRect() ));
++    if( useShadow( w ))
++        {
++        data.mask |= PAINT_WINDOW_TRANSLUCENT;
++        QRect r = ( QRegion( w->geometry()) & data.paint ).boundingRect();
++        if( !r.isEmpty())
++            data.paint |= shadowRectangle( r );
++        }
+     effects->prePaintWindow( w, data, time );
+     }
+ 
+ void ShadowEffect::paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data )
+     {
+-    if( !w->isDeleted() && !w->isDesktop() && !w->isDock() )
++    if( useShadow( w ))
+         drawShadow( w, mask, region, data );
+     effects->paintWindow( w, mask, region, data );
+     }
+@@ -61,10 +68,17 @@
+ 
+ QRect ShadowEffect::transformWindowDamage( EffectWindow* w, const QRect& r )
+     {
++    if( !useShadow( w ))
++        return effects->transformWindowDamage( w, r );
+     QRect r2 = r | shadowRectangle( r );
+     return effects->transformWindowDamage( w, r2 );
+     }
+ 
++bool ShadowEffect::useShadow( EffectWindow* w ) const
++    {
++    return !w->isDeleted() && !w->isDesktop() && !w->isDock();
++    }
++
+ void ShadowEffect::addQuadVertices(QVector<float>& verts, float x1, float y1, float x2, float y2) const
+ {
+     verts << x1 << y1;
+--- a/kwin/effects/fade.desktop
++++ b/kwin/effects/fade.desktop
+@@ -5,6 +5,7 @@
+ Name[de]=Verblassen
+ Name[el]=Ομαλή εμφάνιση
+ Name[es]=Fundido
++Name[et]=Hääbumine
+ Name[fa]=محو کردن
+ Name[he]=חשיפה והיעלמות
+ Name[ja]=フェード
+@@ -29,8 +30,10 @@
+ Comment[de]=Blendet Fenster beim Öffnen/Schließen langsam ein bzw. aus.
+ Comment[el]=Κάνει τα παράθυρα να εμφανίζονται/αποκρύπτονται ομαλά
+ Comment[es]=Hace que las ventanas aparezcan suavemente o se desvanezcan al mostrarlas u ocultarlas
++Comment[et]=Paneb aknad sujuvalt hääbuma või tugevnema, kui need peidetakse või nähtavale tuuakse
+ Comment[fa]=پنجره‌ها را هنگام نمایش یا مخفی شدن، به صورت هموار به درون/بیرون محو می‌کند
+ Comment[he]=חשיפה והיעלמות חלקה של חלונות בעת הצגתם או הסתרתם
++Comment[it]=Fa svanire e comparire gradualmente le finestre quando sono mostrate o nascoste
+ Comment[ja]=ウィンドウの表示/非表示を切り替えるときに滑らかにフェードイン/フェードアウトします
+ Comment[kk]=Терезелерді көрсету/жасыруды біртіндеп пайда болу/ғайып ету
+ Comment[km]=ធ្វើ​ឲ្យ​បង្អួច​លេច​បន្តិច​ម្តង​/លិចបន្តិច​ម្តង​យ៉ាង​រលូន ពេល​ពួក​វា​ត្រូវ​បាន​បង្ហាញ ឬ​លាក់
+--- a/kwin/effects/maketransparent.desktop
++++ b/kwin/effects/maketransparent.desktop
+@@ -1,31 +1,38 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Name=Make Transparent
+-Name[be]=Зрабіць празрыстым
+-Name[bg]=Прозрачност
+-Name[csb]=Robi transparentné
+-Name[de]=Transparent machen
+-Name[el]=Εμφάνιση διαφανούς
+-Name[es]=Hacer transparente
+-Name[fa]=ایجاد شفافیت
+-Name[he]=הפוך לשקוף
+-Name[ja]=透明
+-Name[kk]=Мөлдір қылу
+-Name[km]=ធ្វើ​ឲ្យ​ថ្លា​
+-Name[nb]=Gjør gjennomsiktig
+-Name[nds]=Dörsichtig maken
+-Name[ne]=पारदर्शी बनाउनुहोस्
+-Name[nl]=Transparant maken
+-Name[nn]=Gjer gjennomsiktig
+-Name[pa]=ਪਾਰਦਰਸ਼ੀ ਬਣਾਓ
+-Name[pt]=Tornar Transparente
+-Name[pt_BR]=Tornar Transparente
+-Name[sl]=Naredi prozorno
+-Name[sv]=Gör genomskinlig
+-Name[vi]=Làm trong suốt
+-Name[x-test]=xxMake Transparentxx
+-Name[zh_CN]=制造透明
+-Name[zh_TW]=製造透明
++Name=Translucency
++Name[af]=Deursigtigheid
++Name[be]=Празрыстасць
++Name[br]=Treuzwel
++Name[da]=Gennemsigtighed
++Name[eo]=Travidebleco
++Name[et]=Läbipaistvus
++Name[eu]=Gardentasuna
++Name[fi]=Läpikuultavuus
++Name[fr]=Transparence
++Name[fy]=Trochsichtichheid
++Name[ga]=Tréshoilseacht
++Name[gl]=Translucidez
++Name[hr]=Prozirnost
++Name[hu]=Áttetszőség
++Name[is]=Gegnsæi
++Name[ka]=ნახევრადგამჭირვალეობა
++Name[lt]=Permatomumas
++Name[mk]=Провидност
++Name[nds]=Dörschienen
++Name[ne]=पारभासकता
++Name[pl]=Przezroczystość
++Name[pt]=Translucidez
++Name[pt_BR]=Transparência
++Name[ro]=Translucenţă
++Name[ru]=Полупрозрачность
++Name[sv]=Genomskinlighet
++Name[ta]=ஒளிகசிவு
++Name[tr]=Şeffaflık
++Name[uk]=Прозорість
++Name[uz]=Шаффофлик
++Name[vi]=Trong mờ
++Name[zh_TW]=半透明
+ Icon=kwin-effect-maketransparent
+ 
+ Type=Service
+--- a/kwin/effects/sharpen.desktop
++++ b/kwin/effects/sharpen.desktop
+@@ -4,6 +4,7 @@
+ Name[bg]=Отчетливост
+ Name[de]=Schärfen
+ Name[el]=Όξυνση
++Name[et]=Teravdus
+ Name[fa]=تیز کردن
+ Name[he]=חדד
+ Name[ja]=シャープ化
+@@ -27,6 +28,7 @@
+ Comment[bg]=Прави работния плот по-отчетлив
+ Comment[de]=Lässt Ihre Arbeitsfläche schärfer erscheinen
+ Comment[el]=Κάνει την επιφάνεια εργασίας σας να δείχνει πιο οξεία
++Comment[et]=Muudab töölaua välimuse teravamaks
+ Comment[fa]=رومیزیتان تیزتر به نظر می‌رسد
+ Comment[he]=מחדד את מראה שולחן העבודה שלך
+ Comment[it]=Rende il desktop più nitido
+--- a/kwin/effects/blur.desktop
++++ b/kwin/effects/blur.desktop
+@@ -4,6 +4,7 @@
+ Name[bg]=Замъгляване
+ Name[de]=Verwischen
+ Name[el]=Θόλωμα
++Name[et]=Hägu
+ Name[fa]=محو
+ Name[he]=טשטש
+ Name[it]=Sfocatura
+@@ -30,6 +31,7 @@
+ Comment[bg]=Замъгляване на фона на полупрозрачни прозорци
+ Comment[de]=Verwischt den Hintergrund halbtransparenter Fenster
+ Comment[el]=Θόλωμα φόντου των ημιδιαφανών παραθύρων
++Comment[et]=Poolläbipaistvate akende tausta hägustamine
+ Comment[fa]=زمینه پنجره‌های نیمه شفاف را محو می‌کند
+ Comment[he]=טישטוש הרקע של חלונות שקופים למחצה
+ Comment[it]=Sfoca lo sfondo delle finestre semitrasparenti
+--- a/kwin/effects/fallapart.desktop
++++ b/kwin/effects/fallapart.desktop
+@@ -4,6 +4,7 @@
+ Name[de]=Auseinanderfallen
+ Name[el]=Κατάρρευση
+ Name[es]=Desmenuzar
++Name[et]=Lagunemine
+ Name[he]=התפרקות
+ Name[ja]=崩壊
+ Name[kk]=Қирау
+--- a/kwin/effects/boxswitch.desktop
++++ b/kwin/effects/boxswitch.desktop
+@@ -4,6 +4,7 @@
+ Name[bg]=Превключване между прозорци
+ Name[de]=Würfel-Fensterwechsel
+ Name[el]=Εναλλαγή πλαισίου
++Name[et]=Aknavahetaja
+ Name[fa]=سودهی جعبه
+ Name[he]=מחליף מבוסס תיבה
+ Name[ja]=ボックススイッチ
+@@ -24,12 +25,13 @@
+ Comment[bg]=Подобрено превключване между прозорците с Alt-табулация
+ Comment[de]=Verbesserter Fensterwechsel mittels Alt-Tabulator
+ Comment[el]=Βελτιωμένη εναλλαγή παραθύρου Alt-tab
++Comment[et]=Täiustatud Alt+TAB akende vahetaja
+ Comment[fa]=سوده پنجره دگرساز-تب بهبودیافته
+ Comment[he]=מחליף חלונות משופר מבוסס Alt-tab
+ Comment[it]=Scambiafinestre Alt-Tab migliorato
+ Comment[ja]=Alt+Tab によるウィンドウ切り替えの改良版
+ Comment[kk]=Жетілдірген Alt-Tab терезе ауыстырғышы
+-Comment[km]=កម្មវិធី​ប្តូរ​បង្អួច​ ជំនួស (Alt) ​- ថេប (Tab) ​ដែល​បាន​ធ្វើ​ឲ្យ​ប្រសើរ​ឡើង​
++Comment[km]=កម្មវិធី​ប្តូរ​បង្អួច​ ជំនួស(Alt)​-ថេប(Tab) ​ដែល​បាន​ធ្វើ​ឲ្យ​ប្រសើរ​ឡើង​
+ Comment[nb]=Forbedret Alt-tab vindusveksler
+ Comment[nds]=Verbetert Wesseln vun Finster mit Alt+Tabtast
+ Comment[ne]=सुधार गरिएको Alt-tab सञ्झ्याल स्विचकर्ता
+--- a/kwin/effects/explosion.desktop
++++ b/kwin/effects/explosion.desktop
+@@ -1,9 +1,11 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Name=Explosion
++Name[br]=Tarzhad
+ Name[csb]=Wëbùch
+ Name[el]=Έκρηξη
+ Name[es]=Explosión
++Name[et]=Plahvatus
+ Name[fa]=انفجار
+ Name[he]=התפוצצות
+ Name[it]=Esplosione
+@@ -31,6 +33,7 @@
+ Comment[de]=Lässt Fenster beim Schließen explodieren
+ Comment[el]=Έκρηξη των παραθύρων κατά το κλείσιμο
+ Comment[es]=Hace que las ventanas exploten al cerrarlas
++Comment[et]=Paneb aknad sulgemisel plahvatama
+ Comment[fa]=پنجره‌ها وقتی که بسته می‌شوند، منفجر می‌سازد
+ Comment[he]=פיצוץ חלונות בעת סגירתם
+ Comment[it]=Fa esplodere le finestre alla chiusura
+--- a/kwin/effects/presentwindows_config.desktop
++++ b/kwin/effects/presentwindows_config.desktop
+@@ -14,6 +14,7 @@
+ Name[csb]=Prezentëjë òkna
+ Name[de]=Fenster zeigen
+ Name[el]=Παρουσίαση παραθύρων
++Name[et]=Olemasolevad aknad
+ Name[fa]=پنجره‌های موجود
+ Name[he]=הצג חלונות
+ Name[ja]=すべてのウィンドウを表示
+--- a/kwin/effects/zoom.desktop
++++ b/kwin/effects/zoom.desktop
+@@ -8,6 +8,7 @@
+ Name[de]=Vergrößerung
+ Name[el]=Εστίαση
+ Name[es]=Ampliación
++Name[et]=Suurendus
+ Name[fa]=بزرگ‌نمایی
+ Name[ga]=Súmáil
+ Name[he]=התקרבות
+--- a/kwin/effects/shadow.desktop
++++ b/kwin/effects/shadow.desktop
+@@ -7,6 +7,7 @@
+ Name[de]=Schatten
+ Name[el]=Σκιά
+ Name[es]=Sombra
++Name[et]=Vari
+ Name[fa]=سایه
+ Name[he]=צל
+ Name[it]=Ombra
+@@ -37,6 +38,7 @@
+ Comment[de]=Lässt Fenster einen Schatten werfen
+ Comment[el]=Προσθήκη σκιάς κάτω από τα παράθυρα
+ Comment[es]=Añade una sombra bajo las ventanas
++Comment[et]=Lisab akende alla varju
+ Comment[fa]=زیر پنجره‌ها سایه اضافه می‌کند
+ Comment[he]=הוספת צל מתחת לחלונות
+ Comment[it]=Aggiunge l'ombra sotto le finestre
+--- a/kwin/effects/thumbnailaside.desktop
++++ b/kwin/effects/thumbnailaside.desktop
+@@ -4,6 +4,7 @@
+ Name[bg]=Манипулатор на мини изображения
+ Name[de]=Seitliche Vorschaubilder
+ Name[el]=Εικόνα επισκόπησης στο πλάι
++Name[et]=Pisipildid kõrval
+ Name[he]=דוגמית בצד
+ Name[ja]=サムネイルをわきに表示
+ Name[kk]=Нобайды шеттеу
+--- a/kwin/effects/diminactive.desktop
++++ b/kwin/effects/diminactive.desktop
+@@ -4,6 +4,7 @@
+ Name[bg]=Замъгляване на неактивния
+ Name[de]=Inaktive abdunkeln
+ Name[el]=Θαμπάδα ανενεργού
++Name[et]=Tuhm mitteaktiivne
+ Name[he]=עמעם חלונות לא פעילים
+ Name[ja]=非アクティブを暗く
+ Name[kk]=Белсенді еместі күңгірттеу
+@@ -27,6 +28,7 @@
+ Comment[cs]=Ztmavuje neaktivní okna
+ Comment[de]=Dunkelt inaktive Fenster ab
+ Comment[el]=Σκίαση μη ενεργών παραθύρων
++Comment[et]=Tumendab mitteaktiivsed aknad
+ Comment[fa]=پنجره‌های غیرفعال را تیره می‌کند
+ Comment[he]=עימעום חלונות לא פעילים
+ Comment[it]=Oscura le finestre inattive
+--- a/kwin/effects/magnifier.desktop
++++ b/kwin/effects/magnifier.desktop
+@@ -6,6 +6,7 @@
+ Name[de]=Lupe
+ Name[el]=Μεγεθυντικός φακός
+ Name[es]=Lupa
++Name[et]=Suurendaja
+ Name[fa]=ذره‌بین
+ Name[ga]=Formhéadaitheoir
+ Name[he]=זכוכית מגדלת
+@@ -33,6 +34,7 @@
+ Comment[de]=Vergrößert den Arbeitsflächenbereich unter der Maus
+ Comment[el]=Μεγέθυνση του τμήματος της οθόνη κάτω από το ποντίκι
+ Comment[es]=Amplía la parte de la pantalla que esté bajo el ratón
++Comment[et]=Suurendab hiire all olevat ekraaniosa
+ Comment[fa]=جزئی از پرده را که زیر موشی است درشت‌نما می‌کند
+ Comment[he]=הגדלת החלק של המסך שנמצא מתחת למצביע העכבר
+ Comment[it]=Ingrandisce la parte dello schermo sotto il mouse
+--- a/kwin/effects/presentwindows.cpp
++++ b/kwin/effects/presentwindows.cpp
+@@ -45,7 +45,7 @@
+ 
+     KActionCollection* actionCollection = new KActionCollection( this );
+     KAction* a = (KAction*)actionCollection->addAction( "Expose" );
+-    a->setText( i18n("Toggle Expose effect" ));
++    a->setText( i18n("Toggle Expose Effect" ));
+     a->setGlobalShortcut(KShortcut(Qt::CTRL + Qt::Key_F10));
+     connect(a, SIGNAL(triggered(bool)), this, SLOT(toggleActive()));
+     KAction* b = (KAction*)actionCollection->addAction( "ExposeAll" );
+--- a/kwin/effects/videorecord.desktop
++++ b/kwin/effects/videorecord.desktop
+@@ -8,6 +8,7 @@
+ Name[de]=Video-Aufnahme
+ Name[el]=Εγγραφή βίντεο
+ Name[es]=Grabación de vídeo
++Name[et]=Videosalvestus
+ Name[fa]=ضبط ویدیو
+ Name[he]=הקלטת סרט
+ Name[it]=Registra video
+@@ -35,6 +36,7 @@
+ Comment[de]=Zeichnet Videos von der Arbeitsfläche auf
+ Comment[el]=Επιτρέπει την εγγραφή βίντεο της επιφάνειας εργασίας σας
+ Comment[es]=Le permite grabar vídeos de su escritorio
++Comment[et]=Võimaldab salvestada videoid töölauast
+ Comment[fa]=اجازه ضبط تصویری رومیزیتان را می‌دهد
+ Comment[he]=מאפשר לך להקליט סרטי וידאו של שולחן העבודה שלך
+ Comment[it]=Permette di registrare video del desktop
+--- a/kwin/effects/shadow_config.desktop
++++ b/kwin/effects/shadow_config.desktop
+@@ -14,6 +14,7 @@
+ Name[de]=Schatten
+ Name[el]=Σκιά
+ Name[es]=Sombra
++Name[et]=Vari
+ Name[fa]=سایه
+ Name[he]=צל
+ Name[it]=Ombra
+--- /dev/null
++++ b/kwin/effects/showpaint.cpp
+@@ -0,0 +1,101 @@
++/*****************************************************************
++ KWin - the KDE window manager
++ This file is part of the KDE project.
++
++Copyright (C) 2007 Lubos Lunak <l.lunak at kde.org>
++
++You can Freely distribute this program under the GNU General Public
++License. See the file "COPYING" for the exact licensing terms.
++******************************************************************/
++
++#include "showpaint.h"
++
++#include <config-X11.h>
++
++#ifdef HAVE_OPENGL
++#include <GL/gl.h>
++#endif
++#ifdef HAVE_XRENDER
++#include <X11/Xlib.h>
++#include <X11/extensions/Xrender.h>
++#endif
++
++#include <math.h>
++
++#include <qcolor.h>
++
++namespace KWin
++{
++
++KWIN_EFFECT( showpaint, ShowPaintEffect )
++
++static QColor colors[] = { Qt::red, Qt::green, Qt::blue, Qt::cyan, Qt::magenta,
++    Qt::yellow, Qt::gray };
++
++ShowPaintEffect::ShowPaintEffect()
++    : color_index( 0 )
++    {
++    }
++
++void ShowPaintEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
++    {
++    painted = QRegion();
++    effects->paintScreen( mask, region, data );
++#ifdef HAVE_OPENGL
++    if( effects->compositingType() == OpenGLCompositing)
++        paintGL();
++#endif
++#ifdef HAVE_XRENDER
++    if( effects->compositingType() == XRenderCompositing)
++        paintXrender();
++#endif
++    if( ++color_index == sizeof( colors ) / sizeof( colors[ 0 ] ))
++        color_index = 0;
++    }
++
++void ShowPaintEffect::paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data )
++    {
++    painted |= region;
++    effects->paintWindow( w, mask, region, data );
++    }
++
++// TODO I think we need some kind of generic paintRect()
++void ShowPaintEffect::paintGL()
++    {
++#ifdef HAVE_OPENGL
++    glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT );
++    glEnable( GL_BLEND );
++    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
++    float alpha = 0.2;
++    const QColor& color = colors[ color_index ];
++    glColor4f( color.red() / 255., color.green() / 255., color.blue() / 255., alpha );
++    glBegin( GL_QUADS );
++    foreach( QRect r, painted.rects())
++        {
++        glVertex2i( r.x(), r.y());
++        glVertex2i( r.x() + r.width(), r.y());
++        glVertex2i( r.x() + r.width(), r.y() + r.height());
++        glVertex2i( r.x(), r.y() + r.height());
++        }
++    glEnd();
++    glPopAttrib();
++#endif
++    }
++
++void ShowPaintEffect::paintXrender()
++    {
++#ifdef HAVE_XRENDER
++    XRenderColor col;
++    int alpha = 0.2;
++    const QColor& color = colors[ color_index ];
++    col.alpha = int( alpha * 0xffff );
++    col.red = int( alpha * 0xffff * color.red() / 255 );
++    col.green = int( alpha * 0xffff * color.green() / 255 );
++    col.blue= int( alpha * 0xffff * color.blue() / 255 );
++    foreach( QRect r, painted.rects())
++        XRenderFillRectangle( display(), PictOpOver, effects->xrenderBufferPicture(),
++            &col, r.x(), r.y(), r.width(), r.height());
++#endif
++    }
++
++} // namespace
+--- a/kwin/effects/presentwindows.desktop
++++ b/kwin/effects/presentwindows.desktop
+@@ -7,6 +7,7 @@
+ Name[csb]=Prezentëjë òkna
+ Name[de]=Fenster zeigen
+ Name[el]=Παρουσίαση παραθύρων
++Name[et]=Olemasolevad aknad
+ Name[fa]=پنجره‌های موجود
+ Name[he]=הצג חלונות
+ Name[ja]=すべてのウィンドウを表示
+@@ -32,6 +33,7 @@
+ Comment[csb]=Wëskrzëni wszëtczé òkna, starna pò stranie
+ Comment[de]=Zeigt alle Fenster nebeneinander an
+ Comment[el]=Εμφάνιση όλων των παραθύρων σε παράθεση
++Comment[et]=Näitab kõiki aknaid üksteise kõrval
+ Comment[fa]=همه پنجره‌ها را در کنار هم نمایش می‌دهد
+ Comment[he]=מציג את כל החלונות זה לצד זה
+ Comment[it]=Mostra tutte le finestre affiancate
+--- /dev/null
++++ b/kwin/effects/maketransparent_config.cpp
+@@ -0,0 +1,105 @@
++/*****************************************************************
++ KWin - the KDE window manager
++ This file is part of the KDE project.
++
++Copyright (C) 2007 Rivo Laks <rivolaks at hot.ee>
++
++You can Freely distribute this program under the GNU General Public
++License. See the file "COPYING" for the exact licensing terms.
++******************************************************************/
++
++#include "maketransparent_config.h"
++
++#include <kwineffects.h>
++
++#include <klocale.h>
++#include <kdebug.h>
++#include <kconfiggroup.h>
++
++#include <QGridLayout>
++#include <QLabel>
++#include <QSpinBox>
++
++#ifndef KDE_USE_FINAL
++KWIN_EFFECT_CONFIG_FACTORY
++#endif
++
++namespace KWin
++{
++
++MakeTransparentEffectConfig::MakeTransparentEffectConfig(QWidget* parent, const QVariantList& args) :
++        KCModule(EffectFactory::componentData(), parent, args)
++    {
++    kDebug() ;
++
++    QGridLayout* layout = new QGridLayout(this);
++
++    layout->addWidget(new QLabel(i18n("Changes opacity of following elements:"), this), 0, 0, 1, 2);
++
++    layout->addWidget(new QLabel(i18n("Decorations:"), this), 1, 0);
++    mDecoration = new QSpinBox(this);
++    mDecoration->setRange(0, 100);
++    mDecoration->setSuffix("%");
++    connect(mDecoration, SIGNAL(valueChanged(int)), this, SLOT(changed()));
++    layout->addWidget(mDecoration, 1, 1);
++
++    layout->addWidget(new QLabel(i18n("Moved/resized windows:"), this), 2, 0);
++    mMoveResize = new QSpinBox(this);
++    mMoveResize->setRange(0, 100);
++    mMoveResize->setSuffix("%");
++    connect(mMoveResize, SIGNAL(valueChanged(int)), this, SLOT(changed()));
++    layout->addWidget(mMoveResize, 2, 1);
++
++    layout->addWidget(new QLabel(i18n("Dialogs:"), this), 3, 0);
++    mDialogs = new QSpinBox(this);
++    mDialogs->setRange(0, 100);
++    mDialogs->setSuffix("%");
++    connect(mDialogs, SIGNAL(valueChanged(int)), this, SLOT(changed()));
++    layout->addWidget(mDialogs, 3, 1);
++
++    layout->addItem(new QSpacerItem(10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding), 4, 0, 1, 2);
++
++    load();
++    }
++
++void MakeTransparentEffectConfig::load()
++    {
++    kDebug() ;
++    KCModule::load();
++
++    KConfigGroup conf = EffectsHandler::effectConfig("MakeTransparent");
++    mDecoration->setValue( (int)( conf.readEntry( "Decoration", 0.7 ) * 100 ) );
++    mMoveResize->setValue( (int)( conf.readEntry( "MoveResize", 0.8 ) * 100 ) );
++    mDialogs->setValue( (int)( conf.readEntry( "Dialogs", 1.0 ) * 100 ) );
++
++    emit changed(false);
++    }
++
++void MakeTransparentEffectConfig::save()
++    {
++    kDebug() ;
++    KCModule::save();
++
++    KConfigGroup conf = EffectsHandler::effectConfig("MakeTransparent");
++    conf.writeEntry( "Decoration", mDecoration->value() / 100.0 );
++    conf.writeEntry( "MoveResize", mMoveResize->value() / 100.0 );
++    conf.writeEntry( "Dialogs", mDialogs->value() / 100.0 );
++    conf.sync();
++
++    emit changed(false);
++    EffectsHandler::sendReloadMessage( "translucentdecorations" );
++    }
++
++void MakeTransparentEffectConfig::defaults()
++    {
++    kDebug() ;
++    mDecoration->setValue( 70 );
++    mMoveResize->setValue( 80 );
++    mDialogs->setValue( 100 );
++    emit changed(true);
++    }
++
++
++} // namespace
++
++#include "maketransparent_config.moc"
+--- a/kwin/effects/desktopgrid_config.desktop
++++ b/kwin/effects/desktopgrid_config.desktop
+@@ -14,6 +14,7 @@
+ Name[de]=Arbeitsflächen-Raster
+ Name[el]=Πλέγμα επιφάνειας εργασίας
+ Name[es]=Rejilla del escritorio
++Name[et]=Töölauavõrgustik
+ Name[fa]=توری رومیزی
+ Name[he]=רשת שולחנות עבודה
+ Name[it]=Griglia dei Desktop
+--- a/kwin/effects/CMakeLists.txt
++++ b/kwin/effects/CMakeLists.txt
+@@ -53,6 +53,20 @@
+     zoom.desktop
+     DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
+ 
++# config modules
++KWIN4_ADD_EFFECT_CONFIG( builtins
++    presentwindows_config.cpp
++    shadow_config.cpp
++    desktopgrid_config.cpp
++    maketransparent_config.cpp
++    configs_builtins.cpp)
++install( FILES
++    presentwindows_config.desktop
++    shadow_config.desktop
++    desktopgrid_config.desktop
++    maketransparent_config.desktop
++    DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
++
+ if(OPENGL_FOUND)
+     # opengl-based effects
+     SET(kwin4_effect_builtins_sources ${kwin4_effect_builtins_sources}
+@@ -97,29 +111,17 @@
+         data/circle.png
+         data/circle-edgy.png
+         DESTINATION  ${DATA_INSTALL_DIR}/kwin )
+-
+-    # config modules
+-    KWIN4_ADD_EFFECT_CONFIG( builtins
+-        presentwindows_config.cpp
+-        shadow_config.cpp
+-        desktopgrid_config.cpp
+-        configs_builtins.cpp)
+-    install( FILES
+-        presentwindows_config.desktop
+-        shadow_config.desktop
+-        desktopgrid_config.desktop
+-        DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
+-
+-
+ endif(OPENGL_FOUND)
+ 
+-# showfps - need both xrender and opengl
++# showfps, showpaint - need both xrender and opengl
+ if( OPENGL_FOUND AND X11_Xrender_FOUND )
+     SET(kwin4_effect_builtins_sources ${kwin4_effect_builtins_sources}
+         showfps.cpp
++        showpaint.cpp
+         )
+     install( FILES
+         showfps.desktop
++        showpaint.desktop
+         DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
+ endif( OPENGL_FOUND AND X11_Xrender_FOUND )
+ 
+--- a/kwin/effects/drunken.desktop
++++ b/kwin/effects/drunken.desktop
+@@ -4,6 +4,7 @@
+ Name[de]=Betrunken
+ Name[el]=Κούνημα
+ Name[es]=Borracho
++Name[et]=Purjus
+ Name[he]=שתוי
+ Name[it]=Ubriaco
+ Name[ja]=酔っぱらい
+--- a/kwin/effects/configs_builtins.cpp
++++ b/kwin/effects/configs_builtins.cpp
+@@ -11,6 +11,7 @@
+ #include "shadow_config.h"
+ #include "presentwindows_config.h"
+ #include "desktopgrid_config.h"
++#include "maketransparent_config.h"
+ 
+ #include <kwineffects.h>
+ 
+@@ -21,6 +22,7 @@
+ K_PLUGIN_FACTORY_DEFINITION(EffectFactory, registerPlugin<KWin::ShadowEffectConfig>("shadow");
+                                 registerPlugin<KWin::PresentWindowsEffectConfig>("presentwindows");
+                                 registerPlugin<KWin::DesktopGridEffectConfig>("desktopgrid");
++                                registerPlugin<KWin::MakeTransparentEffectConfig>("maketransparent");
+                            )
+ K_EXPORT_PLUGIN(EffectFactory("kwin"))
+ 
+--- /dev/null
++++ b/kwin/effects/showpaint.desktop
+@@ -0,0 +1,23 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Show Paint
++Name[et]=Joonistatud alade näitamine
++Name[ga]=Taispeáin Péint
++Name[sv]=Visa uppritning
++Name[zh_TW]=顯示繪製
++Comment=Shows areas painted by KWin
++Comment[et]=KWini joonistatud alade näitamine
++Comment[sv]=Visar områden uppritade av Kwin
++Comment[zh_TW]=顯示 KWin 繪製的區域
++
++Type=Service
++ServiceTypes=KWin/Effect
++X-KDE-PluginInfo-Author=Luboš Luňák
++X-KDE-PluginInfo-Email=l.lunak at kde.org
++X-KDE-PluginInfo-Name=kwin4_effect_showpaint
++X-KDE-PluginInfo-Version=0.1.0
++X-KDE-PluginInfo-Category=Misc
++X-KDE-PluginInfo-Depends=
++X-KDE-PluginInfo-License=GPL
++X-KDE-PluginInfo-EnabledByDefault=false
++X-KDE-Library=kwin4_effect_builtins
+--- a/kwin/effects/scalein.desktop
++++ b/kwin/effects/scalein.desktop
+@@ -4,6 +4,7 @@
+ Name[bg]=Увеличаване
+ Name[de]=Hineinzoomen
+ Name[el]=Εστίαση
++Name[et]=Skaleerimine
+ Name[fa]=مقیاس در
+ Name[he]=התקרב
+ Name[ja]=スケールイン
+--- a/kwin/effects/minimizeanimation.desktop
++++ b/kwin/effects/minimizeanimation.desktop
+@@ -7,6 +7,7 @@
+ Name[de]=Minimieren-Animation
+ Name[el]=Κίνηση ελαχιστοποίησης
+ Name[es]=Animación de minimización
++Name[et]=Minimeerimise animatsioon
+ Name[fa]=پویانمایی کمینه‌سازی
+ Name[he]=אנימציית מיזעור
+ Name[ja]=最小化のアニメーション
+@@ -33,6 +34,7 @@
+ Comment[de]=Animiert den Minimieren-Vorgang von Fenstern
+ Comment[el]=Κίνηση στα παράθυρα που ελαχιστοποιούνται
+ Comment[es]=Anima la minimización de ventanas
++Comment[et]=Animeerib akende minimeerimise
+ Comment[fa]=کمینه‌سازی پنجره‌ها را پویا می‌کند
+ Comment[he]=הנפשת מיזעור חלונות
+ Comment[ja]=ウィンドウの最小化をアニメーション化します
+--- a/kwin/effects/flame.desktop
++++ b/kwin/effects/flame.desktop
+@@ -2,15 +2,18 @@
+ Encoding=UTF-8
+ Name=Flame
+ Name[be]=Полымя
++Name[br]=Flamm
+ Name[de]=Flamme
+ Name[el]=Φλόγα
+ Name[es]=Llama
++Name[et]=Leek
+ Name[fa]=شعله
+ Name[he]=להבה
+ Name[it]=Fiamma
+ Name[ja]=炎
+ Name[kk]=Жалын
+ Name[km]=អណ្តាត​ភ្លើង​
++Name[lt]=Liepsna
+ Name[nb]=Flamme
+ Name[nds]=Flamm
+ Name[ne]=फ्लेम
+--- /dev/null
++++ b/kwin/effects/maketransparent_config.desktop
+@@ -0,0 +1,42 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=Service
++ServiceTypes=KCModule
++
++X-KDE-Library=kcm_kwin4_effect_builtins
++X-KDE-ParentComponents=kwin4_effect_maketransparent
++X-KDE-PluginKeyword=maketransparent
++
++Name=Translucency
++Name[af]=Deursigtigheid
++Name[be]=Празрыстасць
++Name[br]=Treuzwel
++Name[da]=Gennemsigtighed
++Name[eo]=Travidebleco
++Name[et]=Läbipaistvus
++Name[eu]=Gardentasuna
++Name[fi]=Läpikuultavuus
++Name[fr]=Transparence
++Name[fy]=Trochsichtichheid
++Name[ga]=Tréshoilseacht
++Name[gl]=Translucidez
++Name[hr]=Prozirnost
++Name[hu]=Áttetszőség
++Name[is]=Gegnsæi
++Name[ka]=ნახევრადგამჭირვალეობა
++Name[lt]=Permatomumas
++Name[mk]=Провидност
++Name[nds]=Dörschienen
++Name[ne]=पारभासकता
++Name[pl]=Przezroczystość
++Name[pt]=Translucidez
++Name[pt_BR]=Transparência
++Name[ro]=Translucenţă
++Name[ru]=Полупрозрачность
++Name[sv]=Genomskinlighet
++Name[ta]=ஒளிகசிவு
++Name[tr]=Şeffaflık
++Name[uk]=Прозорість
++Name[uz]=Шаффофлик
++Name[vi]=Trong mờ
++Name[zh_TW]=半透明
+--- a/kwin/effects/kwineffect.desktop
++++ b/kwin/effects/kwineffect.desktop
+@@ -11,6 +11,7 @@
+ Comment[de]=KWin-Effekt
+ Comment[el]=Εφέ KWin
+ Comment[es]=Efecto de KWin
++Comment[et]=KWin'i efektid
+ Comment[fa]=جلوه‌های KWin
+ Comment[ga]=Maisíocht KWin
+ Comment[he]=אפקט של KWin
+--- a/kwin/effects/desktopgrid.cpp
++++ b/kwin/effects/desktopgrid.cpp
+@@ -403,8 +403,16 @@
+         else // current position is not on current desktop, do full progress
+             progress = 0;
+         diffPos = rect.topLeft() - currentPos;
+-        // Compute starting point for this new move (given current and end positions)
+-        slide_start_pos = rect.topLeft() - diffPos * 1 / ( 1 - progress );
++        if( progress <= 0 )
++            {
++            // Compute starting point for this new move (given current and end positions)
++            slide_start_pos = rect.topLeft() - diffPos * 1 / ( 1 - progress );
++            }
++        else
++            { // at the end, stop
++            slide = false;
++            progress = 0;
++            }
+         }
+     else
+         {
+--- a/kwin/effects/showfps.desktop
++++ b/kwin/effects/showfps.desktop
+@@ -6,7 +6,9 @@
+ Name[csb]=Wëskrzëni FPS
+ Name[de]=Bilder pro Sekunde anzeigen
+ Name[el]=Εμφάνιση καρέ ανά δευτερόλεπτο
++Name[et]=FPS-i näitamine
+ Name[fa]=نمایش FPS
++Name[ga]=Taispeáin FSS
+ Name[he]=הצג מסגרות לשנייה
+ Name[it]=Mostra FPS
+ Name[ja]=フレームレート (FPS) 表示
+@@ -35,6 +37,7 @@
+ Comment[de]=Zeigt die Leistung von KWin
+ Comment[el]=Εμφάνιση επίδοσης του KWin
+ Comment[es]=Muestra el rendimiento de KWin
++Comment[et]=KWin'i jõudluse näitamine
+ Comment[fa]=کارایی KWin را نشان می‌دهد
+ Comment[he]=מציג את הביצועים של KWin
+ Comment[it]=Mostra le prestazioni di KWin
+--- /dev/null
++++ b/kwin/effects/showpaint.h
+@@ -0,0 +1,35 @@
++/*****************************************************************
++ KWin - the KDE window manager
++ This file is part of the KDE project.
++
++Copyright (C) 2007 Lubos Lunak <l.lunak at kde.org>
++
++You can Freely distribute this program under the GNU General Public
++License. See the file "COPYING" for the exact licensing terms.
++******************************************************************/
++
++#ifndef KWIN_SHOWPAINT_H
++#define KWIN_SHOWPAINT_H
++
++#include <kwineffects.h>
++
++namespace KWin
++{
++
++class ShowPaintEffect
++    : public Effect
++    {
++    public:
++        ShowPaintEffect();
++        virtual void paintScreen( int mask, QRegion region, ScreenPaintData& data );
++        virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data );
++    private:
++        void paintGL();
++        void paintXrender();
++        QRegion painted; // what's painted in one pass
++        int color_index;
++    };
++
++} // namespace
++
++#endif
+--- /dev/null
++++ b/kwin/effects/maketransparent_config.h
+@@ -0,0 +1,41 @@
++/*****************************************************************
++ KWin - the KDE window manager
++ This file is part of the KDE project.
++
++Copyright (C) 2007 Rivo Laks <rivolaks at hot.ee>
++
++You can Freely distribute this program under the GNU General Public
++License. See the file "COPYING" for the exact licensing terms.
++******************************************************************/
++
++#ifndef KWIN_MAKETRANSPARENT_CONFIG_H
++#define KWIN_MAKETRANSPARENT_CONFIG_H
++
++#define KDE3_SUPPORT
++#include <kcmodule.h>
++#undef KDE3_SUPPORT
++
++class QSpinBox;
++
++namespace KWin
++{
++
++class MakeTransparentEffectConfig : public KCModule
++    {
++    Q_OBJECT
++    public:
++        explicit MakeTransparentEffectConfig(QWidget* parent = 0, const QVariantList& args = QVariantList());
++
++        virtual void save();
++        virtual void load();
++        virtual void defaults();
++
++    private:
++        QSpinBox* mDecoration;
++        QSpinBox* mMoveResize;
++        QSpinBox* mDialogs;
++    };
++
++} // namespace
++
++#endif
+--- a/kwin/effects/mousemark.desktop
++++ b/kwin/effects/mousemark.desktop
+@@ -7,6 +7,7 @@
+ Name[de]=Mausspur
+ Name[el]=Σήμανση ποντικιού
+ Name[es]=Marcación con el ratón
++Name[et]=Hiirejälg
+ Name[fa]=نشان موشی
+ Name[he]=סימון בעזרת העכבר
+ Name[ja]=マウスマーク
+@@ -31,6 +32,7 @@
+ Comment[de]=Zeichnet Mausspuren auf der Arbeitsfläche
+ Comment[el]=Σας επιτρέπει τη σχεδίαση γραμμών στην επιφάνεια εργασίας σας
+ Comment[es]=Le deja dibujar líneas en el escritorio
++Comment[et]=Võimaldab tõmmata töölauale jooni
+ Comment[fa]=به شما اجازه ترسیم خطوط بر روی رومیزیتان را می‌دهد
+ Comment[he]=מאפשר לך לצייר קווים על גבי שולחן העבודה שלך
+ Comment[it]=Permette di disegnare sul desktop
+--- a/kwin/effects/shadow.h
++++ b/kwin/effects/shadow.h
+@@ -33,6 +33,7 @@
+         void addQuadVertices(QVector<float>& verts, float x1, float y1, float x2, float y2) const;
+         // transforms window rect -> shadow rect
+         QRect shadowRectangle(const QRect& windowRectangle) const;
++        bool useShadow( EffectWindow* w ) const;
+ 
+         int shadowXOffset, shadowYOffset;
+         double shadowOpacity;
+--- a/kwin/useractions.cpp
++++ b/kwin/useractions.cpp
+@@ -109,7 +109,7 @@
+         action = popup->addMenu( advanced_popup );
+         action->setText( i18n("Ad&vanced") );
+ 
+-        if (options->useCompositing){
++        if (compositing()){
+             trans_popup = new QMenu( popup );
+             trans_popup->setFont(KGlobalSettings::menuFont());
+             connect( trans_popup, SIGNAL( triggered(QAction*) ), this, SLOT( setPopupClientOpacity(QAction*)));
+@@ -222,7 +222,7 @@
+     mNoBorderOpAction->setChecked( active_popup_client->noBorder() );
+     mMinimizeOpAction->setEnabled( active_popup_client->isMinimizable() );
+     mCloseOpAction->setEnabled( active_popup_client->isCloseable() );
+-    if (options->useCompositing)
++    if( trans_popup != NULL )
+         {
+         foreach( QAction* action, trans_popup->actions())
+             {
+--- a/kwin/composite.cpp
++++ b/kwin/composite.cpp
+@@ -266,12 +266,13 @@
+     // The event loop apparently tries to fire a QTimer as often as possible, even
+     // at the expense of not processing many X events. This means that the composite
+     // repaints can seriously impact performance of everything else, therefore throttle
+-    // them - leave at least 5msec time after one repaint is finished and next one
++    // them - leave at least 1msec time after one repaint is finished and next one
+     // is started.
+-    if( lastCompositePaint.elapsed() < 5 )
++    if( lastCompositePaint.elapsed() < 1 )
+         return;
+     checkCursorPos();
+-    if( repaints_region.isEmpty() && !windowRepaintsPending()) // no damage
++    if(( repaints_region.isEmpty() && !windowRepaintsPending()) // no damage
++        || !overlay_visible ) // nothing is visible anyway
+         {
+         scene->idle();
+         return;
+@@ -365,6 +366,7 @@
+         XMapWindow( display(), w );
+         }
+     XMapRaised( display(), overlay );
++    XSelectInput( display(), overlay, VisibilityChangeMask );
+     }
+ 
+ void Workspace::destroyOverlay()
+@@ -546,6 +548,8 @@
+     {
+     if( !compositing())
+         return;
++    if( effectWindow() == NULL ) // TODO - this can happen during window destruction
++        return workspace()->addRepaint( r2 );
+     QRect r = effects->transformWindowDamage( effectWindow(), r2 );
+     workspace()->addRepaint( r );
+     }
+--- a/kwin/workspace.h
++++ b/kwin/workspace.h
+@@ -715,6 +715,7 @@
+         int compositeRate;
+         QRegion repaints_region;
+         Window overlay; // XComposite overlay window
++        bool overlay_visible;
+         QSlider *transSlider;
+         QPushButton *transButton;
+ 
+--- a/kwin/events.cpp
++++ b/kwin/events.cpp
+@@ -246,7 +246,7 @@
+             was_user_interaction = true;
+             int keyQt;
+             KKeyServer::xEventToQt(e, &keyQt);
+-            kDebug(125) << "Workspace::keyPress( " << keyQt << " )";
++//            kDebug(125) << "Workspace::keyPress( " << keyQt << " )";
+             if (movingClient)
+                 {
+                 movingClient->keyPressEvent(keyQt);
+@@ -455,8 +455,16 @@
+                 return true;
+             break;
+         case Expose:
+-            if( e->xexpose.window == rootWindow() && compositing())  // root window needs repainting
++            if( compositing()
++                && ( e->xexpose.window == rootWindow()  // root window needs repainting
++                    || overlay != None && e->xexpose.window == overlay )) // overlay needs repainting
++                {
+                 addRepaint( e->xexpose.x, e->xexpose.y, e->xexpose.width, e->xexpose.height );
++                }
++            break;
++        case VisibilityNotify:
++            if( compositing() && overlay != None && e->xvisibility.window == overlay )
++                overlay_visible = ( e->xvisibility.state != VisibilityFullyObscured );
+             break;
+         default:
+             if( e->type == Extensions::randrNotifyEvent() && Extensions::randrAvailable() )
+--- a/kwin/clients/b2/b2client.cpp
++++ b/kwin/clients/b2/b2client.cpp
+@@ -13,9 +13,9 @@
+  */
+ 
+ #include "b2client.h"
++
+ #include <QApplication>
+ #include <QLayout>
+-#include <qdrawutil.h>
+ #include <QPixmap>
+ #include <QPaintEvent>
+ #include <QPolygon>
+@@ -31,7 +31,6 @@
+ #include <QTextStream>
+ #include <kicontheme.h>
+ #include <kiconeffect.h>
+-//#include <kdrawutil.h>
+ #include <klocale.h>
+ #include <kconfig.h>
+ #include <QBitmap>
+@@ -115,10 +114,10 @@
+ {
+     // Force button size to be in a reasonable range.
+     // If the frame width is large, the button size must be large too.
+-    buttonSize = (QFontMetrics(options()->font(true)).height() + 1) & 0x3e;
++    buttonSize = (QFontMetrics(options()->font(true)).height() - 1) & 0x3e;
+     if (buttonSize < 16) buttonSize = 16;
+ 
+-    KConfig _conf( "kwinb2rc" );
++    KConfig _conf("kwinb2rc");
+     KConfigGroup conf(&_conf, "General");
+     colored_frame = conf.readEntry("UseTitleBarBorderColors", false);
+     do_draw_handle = conf.readEntry("DrawGrabHandle", true);
+@@ -206,7 +205,7 @@
+     for (i = 0; i < NUM_PIXMAPS; i++) {
+ 
+         switch (i / NumStates) {
+-	case P_MAX: // will be initialized by copying P_CLOSE
++	case P_CLOSE: // will be initialized by copying P_MAX
+ 	case P_RESIZE:
+ 	    pixmap[i] = new QPixmap();
+ 	    break;
+@@ -214,7 +213,8 @@
+ 	    pixmap[i] = new QPixmap(10, 10);
+ 	    break;
+ 	case P_SHADE:
+-	case P_CLOSE:
++	case P_MAX:
++	case P_HELP:
+ 	    pixmap[i] = new QPixmap(bsize, bsize);
+ 	    break;
+ 	default:
+@@ -236,11 +236,9 @@
+     QBitmap pinupMask = QBitmap::fromData(QSize(16, 16), pinup_mask_bits);
+     QBitmap pindownMask = QBitmap::fromData(QSize(16, 16), pindown_mask_bits);
+     QBitmap menuMask = QBitmap::fromData(QSize(16, 16), menu_mask_bits);
+-    QBitmap helpMask = QBitmap::fromData(QSize(16, 16), help_mask_bits);
+     for (i = 0; i < NumStates; i++) {
+ 	bool isDown = (i == Down) || (i == IDown);
+ 	pixmap[P_MENU * NumStates + i]->setMask(menuMask);
+-	pixmap[P_HELP * NumStates + i]->setMask(helpMask);
+ 	pixmap[P_PINUP * NumStates + i]->setMask(isDown ? pindownMask: pinupMask);
+     }
+ 
+@@ -319,21 +317,22 @@
+ bool B2ClientFactory::supports(Ability ability)
+ {
+     switch (ability) {
+-        case AbilityAnnounceButtons:
+-        case AbilityButtonMenu:
+-        case AbilityButtonOnAllDesktops:
+-        case AbilityButtonSpacer:
+-        case AbilityButtonHelp:
+-        case AbilityButtonMinimize:
+-        case AbilityButtonMaximize:
+-        case AbilityButtonClose:
+-        case AbilityButtonAboveOthers:
+-        case AbilityButtonBelowOthers:
+-        case AbilityButtonShade:
+-        case AbilityButtonResize:
+-            return true;
+-        default:
+-            return false;
++    case AbilityAnnounceButtons:
++    case AbilityButtonMenu:
++    case AbilityButtonOnAllDesktops:
++    case AbilityButtonSpacer:
++    case AbilityButtonHelp:
++    case AbilityButtonMinimize:
++    case AbilityButtonMaximize:
++    case AbilityButtonClose:
++    case AbilityButtonShade:
++    case AbilityButtonResize:
++	return true;
++    // These are not (yet) supported.
++    case AbilityButtonAboveOthers:
++    case AbilityButtonBelowOthers:
++    default:
++	return false;
+     };
+ }
+ 
+@@ -382,10 +381,9 @@
+     // Check this early, otherwise the preview will be rendered badly.
+     resizable = isResizable();
+ 
+-    createMainWidget(Qt::WResizeNoErase | Qt::WRepaintNoErase);
+-    widget()->installEventFilter(this);
+-
++    createMainWidget();
+     widget()->setAttribute(Qt::WA_NoSystemBackground);
++    widget()->installEventFilter(this);
+ 
+     // Set button pointers to NULL so we know what has been created
+     for (int i = 0; i < BtnCount; i++)
+@@ -976,14 +974,14 @@
+     QColor inactiveColor = iPal.color(QPalette::Button);
+     QColor activeColor = aPal.color(QPalette::Button);
+ 
+-    // close
+-    drawB2Rect(PIXMAP_A(P_CLOSE), activeColor, false);
+-    drawB2Rect(PIXMAP_AH(P_CLOSE), activeColor, true);
+-    drawB2Rect(PIXMAP_AD(P_CLOSE), activeColor, true);
+-
+-    drawB2Rect(PIXMAP_I(P_CLOSE), inactiveColor, false);
+-    drawB2Rect(PIXMAP_IH(P_CLOSE), inactiveColor, true);
+-    drawB2Rect(PIXMAP_ID(P_CLOSE), inactiveColor, true);
++    // maximize
++    for (int i = 0; i < NumStates; i++) {
++	bool is_act = (i < 2);
++	bool is_down = ((i & 1) == 1);
++	QPixmap *pix = pixmap[P_MAX * NumStates + i];
++	QColor color = is_act ? activeColor : inactiveColor;
++	drawB2Rect(pix, color, is_down);
++    }
+ 
+     // shade
+     QPixmap thinBox(buttonSize - 2, 6);
+@@ -998,15 +996,9 @@
+ 		0, 0, thinBox.width(), thinBox.height());
+     }
+ 
+-    // maximize
+-    for (int i = 0; i < NumStates; i++) {
+-	*pixmap[P_MAX * NumStates + i] = *pixmap[P_CLOSE * NumStates + i];
+-	pixmap[P_MAX * NumStates + i]->detach();
+-    }
+-
+     // normalize + iconify
+-    QPixmap smallBox( 10, 10 );
+-    QPixmap largeBox( 12, 12 );
++    QPixmap smallBox(10, 10);
++    QPixmap largeBox(12, 12);
+ 
+     for (int i = 0; i < NumStates; i++) {
+ 	bool is_act = (i < 3);
+@@ -1028,42 +1020,54 @@
+     for (int i = 0; i < NumStates; i++) {
+ 	bool is_act = (i < 3);
+ 	bool is_down = (i == Down || i == IDown);
+-	*pixmap[P_RESIZE * NumStates + i] = *pixmap[P_CLOSE * NumStates + i];
++	*pixmap[P_RESIZE * NumStates + i] = *pixmap[P_MAX * NumStates + i];
+ 	pixmap[P_RESIZE * NumStates + i]->detach();
+ 	drawB2Rect(&smallBox, is_act ? activeColor : inactiveColor, is_down);
+ 	bitBlt(pixmap[P_RESIZE * NumStates + i],
+ 		0, 0, &smallBox, 0, 0, 10, 10);
+     }
+ 
+-
+     QPainter p;
+-    // x for close + menu + help
+-    for (int j = 0; j < 3; j++) {
+-        int pix;
+-        unsigned const char *light, *dark;
+-        switch (j) {
+-        case 0:
+-            pix = P_CLOSE; light = close_white_bits; dark = close_dgray_bits;
+-            break;
+-        case 1:
+-            pix = P_MENU; light = menu_white_bits; dark = menu_dgray_bits;
+-            break;
+-        default:
+-            pix = P_HELP; light = help_light_bits; dark = help_dark_bits;
+-            break;
+-        }
+-	int off = (pixmap[pix * NumStates]->width() - 16) / 2;
++    // close: copy the maximize image, then add the X
++    for (int i = 0; i < NumStates; i++) {
++	*pixmap[P_CLOSE * NumStates + i] = *pixmap[P_MAX * NumStates + i];
++	pixmap[P_CLOSE * NumStates + i]->detach();
++    }
++
++    for (int i = 0; i < NumStates; i++) {
++	bool isAct = (i < 3);
++	QPixmap *pixm = pixmap[P_CLOSE * NumStates + i];
++	p.begin(pixm);
++	QColor color = isAct ? activeColor : inactiveColor;
++	QRect r = QRect(3, 3, pixm->width() - 6, pixm->height() - 6);
++	for (int j = 0; j < 2; j++) {
++	    r.moveTo(j + 3, 3);
++	    p.setPen(j == 0 ? color.light(150) : color.dark(150));
++	    p.drawLine(r.left(), r.top(), r.right() - 1, r.bottom() - 1);
++	    p.drawLine(r.left(), r.top() + 1, r.right() - 1, r.bottom());
++	    p.drawLine(r.right() - 1, r.top(), r.left(), r.bottom() - 1);
++	    p.drawLine(r.right() - 1, r.top() + 1, r.left(), r.bottom());
++	}
++	p.end();
++    }
++    for (int i = 0; i < 2; i++) {
++	
++    }
++
++    // menu 
++    {
++	int off = (pixmap[P_MENU * NumStates]->width() - 16) / 2;
+ 	QSize bSize(16, 16);
+ 	QBitmap lightBitmap = QBitmap::fromData(bSize, 
+-		    light, QImage::Format_MonoLSB);
++		    menu_white_bits, QImage::Format_MonoLSB);
+ 	//lightBitmap.setMask(lightBitmap);
+ 	QBitmap darkBitmap = QBitmap::fromData(bSize, 
+-		    dark, QImage::Format_MonoLSB);
++		    menu_dgray_bits, QImage::Format_MonoLSB);
+ 	//darkBitmap.setMask(darkBitmap);
+ 
+         for (int i = 0; i < NumStates; i++) {
+ 	    bool isAct = (i < 3);
+-	    QPixmap *pixm = pixmap[pix* NumStates + i];
++	    QPixmap *pixm = pixmap[P_MENU * NumStates + i];
+ 	    p.begin(pixm);
+ 	    QColor color = isAct ? activeColor : inactiveColor;
+ 	    p.setPen(color.light(150));
+@@ -1074,6 +1078,33 @@
+         }
+     }
+ 
++    // Help button: a question mark.
++    {
++	QFont font = options()->font(true);
++	font.setWeight(QFont::Black);
++	font.setStretch(110);
++	font.setPointSizeF(font.pointSizeF() * 1.1);
++	for (int i = 0; i < NumStates; i++) {
++	    bool isAct = (i < 3);
++	    QPixmap *pixm = pixmap[P_HELP * NumStates + i];
++	    pixm->fill(QColor(qRgba(0, 0, 0, 0)));
++	    pixm->setAlphaChannel(*pixm);
++	    p.begin(pixm);
++	    QColor color = isAct ? activeColor : inactiveColor;
++	    QRect r = QRect(0, 0, pixm->width(), pixm->height());
++	    p.setFont(font);
++	    QString label = i18nc("Help button label, one character", "?");
++	    r.moveTo(1, 2);
++	    p.setPen(color.light(150));
++	    p.drawText(r, Qt::AlignCenter | Qt::AlignVCenter, label);
++	    r.moveTo(0, 1);
++	    p.setPen(color.dark(150));
++	    p.drawText(r, Qt::AlignCenter | Qt::AlignVCenter, label);
++	    p.end();
++	}
++    }
++
++    // Help button: a question mark.
+     // pin
+     for (int i = 0; i < NumStates; i++) {
+ 	const bool isDown = (i == Down || i == IDown);
+@@ -1116,7 +1147,6 @@
+ 	*pixmap[offset + IHover] = hilighted;
+     }
+ 
+-
+     // Create the titlebar gradients
+     if (QPixmap::defaultDepth() > 8) {
+ 	QColor titleColor[4] = {
+@@ -1171,10 +1201,10 @@
+ }
+ 
+ // Transparent bound stuff.
+-
+ static QRect *visible_bound;
+ static QPolygon bound_shape;
+ 
++
+ bool B2Client::drawbound(const QRect& geom, bool clear)
+ {
+     if (clear) {
+@@ -1210,17 +1240,23 @@
+     } else {
+ 	*visible_bound = geom;
+     }
+-/**
+- * TODO: Replace by QRubberBand
+- *   QPainter p(workspaceWidget());
+- *   p.setPen(QPen(Qt::white, 5));
+- *   p.setRasterOp(Qt::XorROP);
+- *   p.drawPolygon(bound_shape);
+- */
+-    if (clear) {
+-	delete visible_bound;
+-	visible_bound = 0;
++    if (!workspaceWidget()) {
++	kDebug() << "workspaceWidget is null";
++    } else {
++	kDebug() << "workspaceWidget is " << workspaceWidget();
++	QPainter p;
++	if (p.begin(workspaceWidget())) {
++	    p.setPen(QPen(Qt::white, 5));
++	    p.setCompositionMode(QPainter::CompositionMode_Xor);
++	    p.drawPolygon(bound_shape);
++	    if (clear) {
++		delete visible_bound;
++		visible_bound = 0;
++	    }
++	    p.end();
++	}
+     }
++
+     return true;
+ }
+ 
+@@ -1367,7 +1403,7 @@
+       set_x11mask(false), isfullyobscured(false), shift_move(false)
+ {
+     setAttribute(Qt::WA_NoSystemBackground);
+-    captionSpacer = new QSpacerItem(buttonSize, buttonSize + 4,
++    captionSpacer = new QSpacerItem(buttonSize, buttonSize + 3,
+ 	    QSizePolicy::Expanding, QSizePolicy::Fixed);
+ }
+ 
+@@ -1423,7 +1459,7 @@
+     p.setPen(options()->color(KDecoration::ColorFont, state));
+     p.setFont(options()->font(state));
+     t = captionSpacer->geometry();
+-    p.drawText(t, Qt::AlignCenter | Qt::AlignVCenter, client->caption());
++    p.drawText(t.translated(0, 1), Qt::AlignCenter | Qt::AlignVCenter, client->caption());
+ }
+ 
+ void B2Titlebar::recalcBuffer()
+--- a/kwin/clients/b2/bitmaps.h
++++ b/kwin/clients/b2/bitmaps.h
+@@ -8,16 +8,6 @@
+  * These are all the bitmaps.
+  */
+ 
+-static const unsigned char close_white_bits[] = {
+-  0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x04, 0x08, 0x08, 0x04, 0x10, 0x02,
+-  0x20, 0x01, 0x40, 0x00, 0x40, 0x00, 0x20, 0x01, 0x10, 0x02, 0x08, 0x04,
+-  0x04, 0x08, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00};
+-
+-static const unsigned char close_dgray_bits[] = {
+-  0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x18, 0x30, 0x30, 0x18, 0x60, 0x0c,
+-  0xc0, 0x06, 0x80, 0x03, 0x80, 0x03, 0xc0, 0x06, 0x60, 0x0c, 0x30, 0x18,
+-  0x18, 0x30, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00};
+-
+ static const unsigned char menu_white_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xfc, 0x3f, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+@@ -73,26 +63,5 @@
+   0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0xc0, 0x3f, 0xc0, 0x31, 0xc0, 0x20,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ 
+-static const unsigned char help_mask_bits[] = {
+- 0x00,0x00,0x00,0x00,0xe0,0x03,0xf0,0x07,0x70,0x0e,0x60,0x0e,0x00,0x0f,0x80,
+- 0x07,0xc0,0x03,0xc0,0x01,0x80,0x01,0xc0,0x00,0xc0,0x01,0x80,0x01,0x00,0x00,
+- 0x00,0x00,0x00,0x00,0x00,0x4c,0x0b,0x08,0x58,0x65,0x09,0x08,0x90,0x00,0x00,
+- 0x00,0x09,0x04,0x00,0x00,0x72,0x6f,0x6f,0x74,0x00,0x24,0x31,0x24,0x47,0x6b,
+- 0x65,0x44,0x78,0x63 };
+-
+-static const unsigned char help_dark_bits[] = {
+- 0x00,0x00,0x00,0x00,0xe0,0x03,0x30,0x06,0x30,0x06,0x00,0x06,0x00,0x03,0x80,
+- 0x01,0xc0,0x00,0xc0,0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+- 0x00,0x00,0x00,0x00,0x65,0x64,0x28,0x29,0x00,0x00,0x00,0x00,0x90,0x00,0x00,
+- 0x00,0x21,0x00,0x00,0x00,0x34,0xfe,0x12,0x2b,0x00,0x00,0xff,0xff,0x58,0xc0,
+- 0x01,0x2b,0x45,0xfe };
+-
+-static const unsigned char help_light_bits[] = {
+- 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x40,0x08,0x60,0x08,0x00,0x0c,0x00,
+- 0x06,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0x00,0x00,0x01,0x80,0x01,0x00,0x00,
+- 0x00,0x00,0x00,0x00,0x00,0x4c,0x0b,0x08,0x58,0x65,0x09,0x08,0x90,0x00,0x00,
+- 0x00,0x09,0x04,0x00,0x00,0x72,0x6f,0x6f,0x74,0x00,0x24,0x31,0x24,0x47,0x6b,
+- 0x65,0x44,0x78,0x63 };
+-
+ #endif
+ 
+--- a/kwin/clients/oxygen/definitions.cpp
++++ /dev/null
+@@ -1,35 +0,0 @@
+-//////////////////////////////////////////////////////////////////////////////
+-// oxygenbutton.h
+-// -------------------
+-// Oxygen window decoration for KDE. Definitions of some global constants using
+-// preprocessor directives.
+-// -------------------
+-// Copyright (c) 2006, 2007 Riccardo Iaconelli <ruphy at fsfe.org>
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a copy
+-// of this software and associated documentation files (the "Software"), to
+-// deal in the Software without restriction, including without limitation the
+-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+-// sell copies of the Software, and to permit persons to whom the Software is
+-// furnished to do so, subject to the following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included in
+-// all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+-// IN THE SOFTWARE.
+-//////////////////////////////////////////////////////////////////////////////
+-
+-#define BUTTONSIZE 18
+-#define DECOSIZE 8
+-#define TITLESIZE 18
+-#define TFRAMESIZE 4
+-#define BFRAMESIZE 4
+-#define LFRAMESIZE 4
+-#define RFRAMESIZE 4
+-#define FRAMEBUTTONSPACE 67
+--- a/kwin/clients/oxygen/oxygen.h
++++ b/kwin/clients/oxygen/oxygen.h
+@@ -33,7 +33,11 @@
+ {
+ // OxygenFactory /////////////////////////////////////////////////////////////
+ 
+-static const int OXYGEN_BUTTONSIZE      = 21;
++static const int OXYGEN_BUTTONSIZE      = 22;
++#define TFRAMESIZE 3
++#define BFRAMESIZE 4
++#define LFRAMESIZE 4
++#define RFRAMESIZE 4
+ 
+ enum ButtonType {
+     ButtonHelp=0,
+--- a/kwin/clients/oxygen/oxygenclient.desktop
++++ b/kwin/clients/oxygen/oxygenclient.desktop
+@@ -4,7 +4,7 @@
+ Name=Oxygen
+ Name[csb]=Krziseń
+ Name[kk]=Оттегі
+-Name[km]=អុកស៊ីសែន
++Name[km]=អុកស៊ីហ្សែន
+ Name[ne]=अक्सिजन
+ Name[nn]=Oksygen
+ Name[pa]=ਆਕਸੀਜਨ
+--- a/kwin/clients/oxygen/oxygenbutton.cpp
++++ b/kwin/clients/oxygen/oxygenbutton.cpp
+@@ -31,18 +31,16 @@
+ 
+ #include <kdecoration.h>
+ #include <kglobal.h>
++#include <KColorUtils>
++#include <kdebug.h>
++#include <KColorScheme>
+ 
+ #include "oxygenclient.h"
+ #include "oxygenbutton.h"
+ #include "oxygen.h"
+-#include "definitions.cpp"
+-#include "lib/helper.h"
+ 
+ namespace Oxygen
+ {
+-#ifndef KDE_USE_FINAL
+-K_GLOBAL_STATIC_WITH_ARGS(OxygenHelper, globalHelper, ("OxygenDeco"))
+-#endif
+ // class OxygenClient;
+ /*
+ extern int BUTTONSIZE;
+@@ -58,12 +56,14 @@
+ // ---------------
+ // Constructor
+ 
+-OxygenButton::OxygenButton(OxygenClient *parent,
++OxygenButton::OxygenButton(OxygenClient &parent,
+                              const QString& tip, ButtonType type)
+-    : KCommonDecorationButton((::ButtonType)type,(KCommonDecoration*) parent)
++    : KCommonDecorationButton((::ButtonType)type, &parent)
+     , client_(parent)
++    , helper_(parent.helper_)
+     , type_(type)
+     , lastmouse_(0)
++    , colorCacheInvalid_(true)
+ {
+     setAutoFillBackground(false);
+     setAttribute(Qt::WA_OpaquePaintEvent, false);
+@@ -76,6 +76,28 @@
+ {
+ }
+ 
++//declare function from oxygenclient.cpp
++QColor reduceContrast(const QColor &c0, const QColor &c1, double t);
++
++
++QColor OxygenButton::buttonDetailColor(const QPalette &palette)
++{
++    if (client_.isActive())
++        return palette.color(QPalette::Active, QPalette::ButtonText);
++    else {
++        if (colorCacheInvalid_) {
++            QColor ab = palette.color(QPalette::Active, QPalette::Button);
++            QColor af = palette.color(QPalette::Active, QPalette::ButtonText);
++            QColor nb = palette.color(QPalette::Inactive, QPalette::Button);
++            QColor nf = palette.color(QPalette::Inactive, QPalette::ButtonText);
++
++            colorCacheInvalid_ = false;
++            cachedButtonDetailColor_ = reduceContrast(nb, nf, qMax(2.5, KColorUtils::contrastRatio(ab, KColorUtils::mix(ab, af, 0.4))));
++        }
++        return cachedButtonDetailColor_;
++    }
++}
++
+ //////////////////////////////////////////////////////////////////////////////
+ // sizeHint()
+ // ----------
+@@ -93,11 +115,11 @@
+ 
+ void OxygenButton::enterEvent(QEvent *e)
+ {
+-    // if we wanted to do mouseovers, we would keep track of it here
++    KCommonDecorationButton::enterEvent(e);
+     if (status_ != Oxygen::Pressed) {
+         status_ = Oxygen::Hovered;
+     }
+-    QAbstractButton::enterEvent(e);
++    update();
+ }
+ 
+ //////////////////////////////////////////////////////////////////////////////
+@@ -107,9 +129,10 @@
+ 
+ void OxygenButton::leaveEvent(QEvent *e)
+ {
++    KCommonDecorationButton::leaveEvent(e);
+     // if we wanted to do mouseovers, we would keep track of it here
+     status_ = Oxygen::Normal;
+-    QAbstractButton::leaveEvent(e);
++    update();
+ }
+ 
+ //////////////////////////////////////////////////////////////////////////////
+@@ -130,53 +153,86 @@
+ void OxygenButton::paintEvent(QPaintEvent *)
+ {
+     QPainter painter(this);
++    QPalette pal = palette(); // de-const-ify
+ 
+     if (type_ == ButtonMenu) {
+         // we paint the mini icon (which is 16 pixels high)
+         int dx = (width() - 16) / 2;
+         int dy = (height() - 16) / 2;
+-        painter.drawPixmap(dx, dy, client_->icon().pixmap(16));
++        painter.drawPixmap(dx, dy, client_.icon().pixmap(16));
+         return;
+     }
+ 
+-    QColor bg = globalHelper->backgroundTopColor(palette().window());
+-    painter.drawPixmap(0, 0, globalHelper->windecoButton(palette().button()));
++    // Set palette to the right group. Lubos disagrees with this being a kwin
++    // bug, but anyway, we need the palette group to match the current window.
++    // Since kwin doesn't set it correctly, we have to do it ourselves.
++    if (client_.isActive())
++        pal.setCurrentColorGroup(QPalette::Active);
++    else
++        pal.setCurrentColorGroup(QPalette::Inactive);
++
++    if(client_.maximizeMode() == OxygenClient::MaximizeRestore)
++        painter.translate(0,-1);
++
++    QColor bg = helper_.backgroundTopColor(pal.window());
++
++    QLinearGradient lg = helper_.decoGradient(QRect(4,4,13,13), buttonDetailColor(pal));
++
++    if(status_ == Oxygen::Hovered) {
++        if(type_ == ButtonClose) {
++            QColor color = KColorScheme(pal.currentColorGroup()).foreground(KColorScheme::NegativeText).color();
++            lg = helper_.decoGradient(QRect(4,4,13,13), color);
++            painter.drawPixmap(0, 0, helper_.windecoButtonFocused(pal.button(), color,7));
++        }
++        else{
++            QColor color = KColorScheme(pal.currentColorGroup()).decoration(KColorScheme::HoverColor).color();
++            painter.drawPixmap(0, 0, helper_.windecoButtonFocused(pal.button(), color, 7));
++        }
++    }
++    else
++        painter.drawPixmap(0, 0, helper_.windecoButton(pal.button()));
+ 
+-    painter.translate(1.5,1.5);
+     painter.setRenderHints(QPainter::Antialiasing);
+     painter.setBrush(Qt::NoBrush);
+-    QLinearGradient lg(0, 6, 0, 12);
+-    lg.setColorAt(0.45, QColor(0,0,0,150));
+-    lg.setColorAt(0.80, QColor(0,0,0,80));
+-    painter.setPen(QPen(lg,2));
++    painter.setPen(QPen(lg, 2.2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+     switch(type_)
+     {
+         case ButtonSticky:
+-                    painter.drawPoint(9,9);
++            painter.drawPoint(QPointF(10.5,10.5));
+             break;
+         case ButtonHelp:
++            painter.translate(1.5, 1.5);
++            painter.drawArc(7,5,4,4,135*16, -180*16);
++            painter.drawArc(9,8,4,4,135*16,45*16);
++            painter.drawPoint(9,12);
+             break;
+         case ButtonMin:
+-            painter.drawLine(6,8,9,11);
+-            painter.drawLine(9,11,12,8);
++            painter.drawLine(QPointF( 7.5, 9.5), QPointF(10.5,12.5));
++            painter.drawLine(QPointF(10.5,12.5), QPointF(13.5, 9.5));
+             break;
+         case ButtonMax:
+-            switch(client_->maximizeMode())
++            switch(client_.maximizeMode())
+             {
+                 case OxygenClient::MaximizeRestore:
+                 case OxygenClient::MaximizeVertical:
+                 case OxygenClient::MaximizeHorizontal:
+-                    painter.drawLine(9,8,12,11);
+-                    painter.drawLine(6,11,9,8);
++                    painter.drawLine(QPointF( 7.5,11.5), QPointF(10.5, 8.5));
++                    painter.drawLine(QPointF(10.5, 8.5), QPointF(13.5,11.5));
+                     break;
+                 case OxygenClient::MaximizeFull:
+-                    painter.drawLine(6,9,12,9);
++                {
++                    painter.translate(1.5, 1.5);
++                    //painter.setBrush(lg);
++                    QPoint points[4] = {QPoint(9, 6), QPoint(12, 9), QPoint(9, 12), QPoint(6, 9)};
++                    //QPoint points[4] = {QPoint(9, 5), QPoint(13, 9), QPoint(9, 13), QPoint(5, 9)};
++                    painter.drawPolygon(points, 4);
+                     break;
++                }
+             }
+             break;
+         case ButtonClose:
+-            painter.drawLine(6,6,12,12);
+-            painter.drawLine(12,6,6,12);
++            painter.drawLine(QPointF( 7.5,7.5), QPointF(13.5,13.5));
++            painter.drawLine(QPointF(13.5,7.5), QPointF( 7.5,13.5));
+             break;
+         default:
+             break;
+--- a/kwin/clients/oxygen/oxygenclient.cpp
++++ b/kwin/clients/oxygen/oxygenclient.cpp
+@@ -12,10 +12,11 @@
+ // #ifndef OXYGENCLIENT_H
+ // #define OXYGENCLIENT_H
+ 
+-#include <kconfig.h>
+-#include <kglobal.h>
+-#include <klocale.h>
+-#include <kdebug.h>
++#include <KConfig>
++#include <KGlobal>
++#include <KLocale>
++#include <KDebug>
++#include <KColorUtils>
+ 
+ #include <qbitmap.h>
+ #include <qlabel.h>
+@@ -34,29 +35,16 @@
+ #include <QTimer>
+ #include <QCache>
+ 
+-#include "lib/helper.h"
++#include "math.h"
+ 
+ #include "oxygenclient.h"
+ #include "oxygenclient.moc"
+ #include "oxygenbutton.h"
+ #include "oxygen.h"
+ 
+-#include "definitions.cpp"
+-
+ namespace Oxygen
+ {
+ 
+-// global constants
+-
+-// static const int BUTTONSIZE      = 18;
+-// static const int DECOSIZE        = 8;
+-// static const int TITLESIZE       = 18;
+-// static const int TFRAMESIZE       = 8;
+-// static const int BFRAMESIZE       = 7;
+-// static const int LFRAMESIZE       = 8;
+-// static const int RFRAMESIZE       = 7;BUTTONSIZE
+-// static const int FRAMEBUTTONSPACE       = 67;
+-
+ K_GLOBAL_STATIC_WITH_ARGS(OxygenHelper, globalHelper, ("OxygenDeco"))
+ 
+ void renderDot(QPainter *p, const QPointF &point, qreal diameter)
+@@ -66,7 +54,11 @@
+ 
+ 
+ OxygenClient::OxygenClient(KDecorationBridge *b, KDecorationFactory *f)
+-    : KCommonDecoration(b, f) { ; }
++    : KCommonDecoration(b, f)
++    , helper_(*globalHelper)
++    , colorCacheInvalid_(true)
++{
++}
+ 
+ OxygenClient::~OxygenClient()
+ {
+@@ -92,7 +84,7 @@
+ 
+     widget()->setAutoFillBackground(false);
+     widget()->setAttribute(Qt::WA_OpaquePaintEvent);
+-    widget()->setAttribute( Qt::WA_PaintOnScreen, false);
++    widget()->setAttribute(Qt::WA_PaintOnScreen, false);
+ }
+ 
+ bool OxygenClient::decorationBehaviour(DecorationBehaviour behaviour) const
+@@ -183,19 +175,19 @@
+ {
+     switch (type) {
+         case MenuButton:
+-            return new OxygenButton(this, i18n("Menu"), ButtonMenu);
++            return new OxygenButton(*this, i18n("Menu"), ButtonMenu);
+ 
+         case HelpButton:
+-            return new OxygenButton(this, i18n("Help"), ButtonHelp);
++            return new OxygenButton(*this, i18n("Help"), ButtonHelp);
+ 
+         case MinButton:
+-            return new OxygenButton(this, i18n("Minimize"), ButtonMin);
++            return new OxygenButton(*this, i18n("Minimize"), ButtonMin);
+ 
+         case MaxButton:
+-            return new OxygenButton(this, i18n("Minimize"), ButtonMax);
++            return new OxygenButton(*this, i18n("Minimize"), ButtonMax);
+ 
+         case CloseButton:
+-            return new OxygenButton(this, i18n("Minimize"), ButtonClose);
++            return new OxygenButton(*this, i18n("Minimize"), ButtonClose);
+ 
+         default:
+             return 0;
+@@ -203,6 +195,52 @@
+ }
+ 
+ 
++// c0 - background
++// c1 - foreground
++// t - target contrast ratio
++QColor reduceContrast(const QColor &c0, const QColor &c1, double t)
++{
++    double s = KColorUtils::contrastRatio(c0, c1);
++    if (s < t)
++        return c1;
++
++    double l = 0.0, h = 1.0;
++    double x = s, a;
++    QColor r = c1;
++    for (int maxiter = 16; maxiter; --maxiter) {
++        a = 0.5 * (l + h);
++        r = KColorUtils::mix(c0, c1, a);
++        x = KColorUtils::contrastRatio(c0, r);
++        if (fabs(x - t) < 0.01)
++            break;
++        if (x > t)
++            h = a;
++        else
++            l = a;
++    }
++    return r;
++}
++
++
++QColor OxygenClient::titlebarTextColor(const QPalette &palette)
++{
++    if (isActive())
++        return palette.color(QPalette::Active, QPalette::WindowText);
++    else {
++        if(colorCacheInvalid_) {
++            QColor ab = palette.color(QPalette::Active, QPalette::Window);
++            QColor af = palette.color(QPalette::Active, QPalette::WindowText);
++            QColor nb = palette.color(QPalette::Inactive, QPalette::Window);
++            QColor nf = palette.color(QPalette::Inactive, QPalette::WindowText);
++
++            colorCacheInvalid_ = false;
++            cachedTitlebarTextColor_ = reduceContrast(nb, nf, qMax(2.5, KColorUtils::contrastRatio(ab, KColorUtils::mix(ab, af, 0.4))));
++        }
++        return cachedTitlebarTextColor_;
++    }
++}
++
++
+ void OxygenClient::paintEvent(QPaintEvent *e)
+ {
+     Q_UNUSED(e)
+@@ -213,10 +251,9 @@
+     QPalette palette = widget()->palette();
+     QPainter painter(widget());
+ 
+-    // ### - This feels like a kwin bug; the palette we get back always seems
+-    // to be (incorrectly) using the Inactive group, which is wrong; active
+-    // windows should have currentColorGroup() == Active. So, hack around it...
+-    // I don't think a window can be disabled?
++    // Set palette to the right group. Lubos disagrees with this being a kwin
++    // bug, but anyway, we need the palette group to match the current window.
++    // Since kwin doesn't set it correctly, we have to do it ourselves.
+     if (isActive())
+         palette.setCurrentColorGroup(QPalette::Active);
+     else
+@@ -241,21 +278,21 @@
+ 
+     int splitY = qMin(300, 3*frame.height()/4);
+ 
+-    QPixmap tile = globalHelper->verticalGradient(color, splitY);
++    QPixmap tile = helper_.verticalGradient(color, splitY);
+     painter.drawTiledPixmap(QRect(0, 0, frame.width(), titleHeight + TFRAMESIZE), tile);
+ 
+     painter.drawTiledPixmap(QRect(0, 0, LFRAMESIZE, splitY), tile);
+-    painter.fillRect(0, splitY, LFRAMESIZE, frame.height() - splitY, globalHelper->backgroundBottomColor(color));
++    painter.fillRect(0, splitY, LFRAMESIZE, frame.height() - splitY, helper_.backgroundBottomColor(color));
+ 
+     painter.drawTiledPixmap(QRect(frame.width()-RFRAMESIZE, 0,
+                                                         RFRAMESIZE, splitY), tile,
+                                                         QPoint(frame.width()-RFRAMESIZE, 0));
+-    painter.fillRect(frame.width()-RFRAMESIZE, splitY, RFRAMESIZE, frame.height() - splitY, globalHelper->backgroundBottomColor(color));
++    painter.fillRect(frame.width()-RFRAMESIZE, splitY, RFRAMESIZE, frame.height() - splitY, helper_.backgroundBottomColor(color));
+ 
+-    painter.fillRect(0, frame.height() - BFRAMESIZE, frame.width(), BFRAMESIZE, globalHelper->backgroundBottomColor(color));
++    painter.fillRect(0, frame.height() - BFRAMESIZE, frame.width(), BFRAMESIZE, helper_.backgroundBottomColor(color));
+ 
+     int radialW = qMin(600, frame.width());
+-    tile = globalHelper->radialGradient(color, radialW);
++    tile = helper_.radialGradient(color, radialW);
+     QRect radialRect = QRect((frame.width() - radialW) / 2, 0, radialW, 64);
+     painter.drawPixmap(radialRect, tile);
+ 
+@@ -263,41 +300,67 @@
+ 
+     // draw title text
+     painter.setFont(options()->font(isActive(), false));
+-    painter.setPen(palette.windowText());
+-    painter.drawText(titleLeft, titleTop, titleWidth, titleHeight,
++    painter.setPen(titlebarTextColor(palette));
++    painter.drawText(titleLeft, titleTop-1, titleWidth, titleHeight,  // -1 is to go into top resizearea
+               OxygenFactory::titleAlign() | Qt::AlignVCenter, caption());
+ 
+     painter.setRenderHint(QPainter::Antialiasing);
+ 
+-    // shadows of the frame
++    // Draw dividing line
+     frame = widget()->rect();
+     frame.getRect(&x, &y, &w, &h);
+ 
+-    painter.setBrush(Qt::NoBrush);
+-    QLinearGradient lg(0, 0, 0, 10);
+-    QGradientStops stops;
+-    stops << QGradientStop( 0, QColor(255,255,255, 110) )
+-           << QGradientStop( 1, QColor(128,128,128, 60) );
+-    lg.setStops(stops);
+-    painter.setPen(QPen(QBrush(lg),1));
+-    painter.drawLine(QPointF(6.3, 0.5), QPointF(w-6.3, 0.5));
+-    painter.drawArc(QRectF(0.5, 0.5, 9.5, 9.5),90*16, 90*16);
+-    painter.drawArc(QRectF(w-9.5-0.5, 0.5, 9.5, 9.5), 0, 90*16);
++    QColor light = helper_.calcLightColor(palette.window());
++    QColor dark = helper_.calcDarkColor(palette.window());
++    dark.setAlpha(120);
++
++    if(!isActive()) {
++        light.setAlpha(120);
++        dark.setAlpha(50);
++    }
+ 
+-    painter.setPen(QColor(128,128,128, 60));
+-    painter.drawLine(QPointF(0.5, 6.3), QPointF(0.5, h-6.3));
+-    painter.drawLine(QPointF(w-0.5, 6.3), QPointF(w-0.5, h-6.3));
++    QLinearGradient lg(x,0,x+w,0);
++    lg.setColorAt(0.5, dark);
++    dark.setAlpha(0);
++    lg.setColorAt(0.0, dark);
++    lg.setColorAt(1.0, dark);
++    painter.setPen(QPen(lg,1));
++
++    painter.drawLine(QPointF(x, titleTop+titleHeight-1.5),
++                            QPointF(x+w, titleTop+titleHeight-1.5));
++
++    lg = QLinearGradient(x,0,x+w,0);
++    lg.setColorAt(0.5, light);
++    light.setAlpha(0);
++    lg.setColorAt(0.0, light);
++    lg.setColorAt(1.0, light);
++    painter.setPen(QPen(lg,1));
++
++    painter.drawLine(QPointF(x, titleTop+titleHeight-0.5),
++                           QPointF(x+w, titleTop+titleHeight-0.5));
+ 
+-    lg = QLinearGradient(0, h-10, 0, h);
+-    stops.clear();
+-    stops << QGradientStop( 0, QColor(128,128,128, 60) )
+-           << QGradientStop( 1, QColor(0,0,0, 50) );
+-    lg.setStops(stops);
+-    painter.setPen(QPen(QBrush(lg),1));
+-    painter.drawArc(QRectF(0.5, h-9.5-0.5, 9.5, 9.5),180*16, 90*16);
+-    painter.drawArc(QRectF(w-9.5-0.5, h-9.5-0.5, 9.5, 9.5), 270*16, 90*16);
+-    painter.drawLine(QPointF(6.3, h-0.5), QPointF(w-6.3, h-0.5));
++    // Draw shadows of the frame
+ 
++    painter.setBrush(Qt::NoBrush);
++    painter.setPen(QColor(255,255,255, 120));
++    painter.drawLine(QPointF(0, 0.5), QPointF(w, 0.5));
++    painter.setPen(QColor(128,128,128, 60));
++    painter.drawLine(QPointF(0.5, 0), QPointF(0.5, h));
++    painter.drawLine(QPointF(w-0.5, 0), QPointF(w-0.5, h));
++    painter.setPen(QColor(0,0,0, 60));
++    painter.drawLine(QPointF(0, h-0.5), QPointF(w, h-0.5));
++
++    painter.setPen(QColor(0,0,0, 40));
++    painter.drawPoint(QPointF(1.5, 1.5)); // top middle point
++    painter.drawPoint(QPointF(w-1.5, 1.5));
++    painter.drawPoint(QPointF(3.5, 0.5)); // top away points
++    painter.drawPoint(QPointF(w-3.5, 0.5));
++    painter.drawPoint(QPointF(0.5, 3.5));
++    painter.drawPoint(QPointF(w-0.5, 3.5));
++    painter.drawPoint(QPointF(1.5, h-1.5)); // bottom middle point
++    painter.drawPoint(QPointF(w-1.5, h-1.5));
++
++    // Draw the 3-dots resize handles
+     qreal cenY = frame.height() / 2 + 0.5;
+     qreal posX = frame.width() - 2.5;
+     painter.setPen(Qt::NoPen);
+@@ -314,27 +377,34 @@
+ 
+ void OxygenClient::doShape()
+ {
++    bool maximized = maximizeMode()==MaximizeFull && !options()->moveResizeMaximizedWindows();
+   int r=widget()->width();
+   int b=widget()->height();
+ QRegion mask(0,0,r,b);
++
++    if(maximized) {
++        setMask(mask);
++        return;
++    }
++
+     // Remove top-left corner.
+     mask -= QRegion(0, 0, 3, 1);
+-    mask -= QRegion(0, 1, 2, 1);
++    mask -= QRegion(0, 1, 1, 1);
+     mask -= QRegion(0, 2, 1, 1);
+ 
+     // Remove top-right corner.
+     mask -= QRegion(r - 3, 0, 3, 1);
+-    mask -= QRegion(r - 2, 1, 2, 1);
++    mask -= QRegion(r - 1, 1, 1, 1);
+     mask -= QRegion(r - 1, 2, 1, 1);
+ 
+     // Remove bottom-left corner.
+     mask -= QRegion(0, b-1-0, 3, b-1-1);
+-    mask -= QRegion(0, b-1-1, 2, b-1-1);
++    mask -= QRegion(0, b-1-1, 1, b-1-1);
+     mask -= QRegion(0, b-1-2, 1, b-1-1);
+ 
+     // Remove bottom-right corner.
+     mask -= QRegion(r - 3, b-1-0, 3, b-1-1);
+-    mask -= QRegion(r - 2, b-1-1, 2, b-1-1);
++    mask -= QRegion(r - 1, b-1-1, 1, b-1-1);
+     mask -= QRegion(r - 1, b-1-2, 1, b-1-1);
+ 
+     setMask(mask);
+--- a/kwin/clients/oxygen/oxygenbutton.h
++++ b/kwin/clients/oxygen/oxygenbutton.h
+@@ -30,6 +30,7 @@
+ #include <kcommondecoration.h>
+ 
+ #include "oxygen.h"
++#include "oxygenclient.h"
+ 
+ namespace Oxygen
+ {
+@@ -45,7 +46,7 @@
+ class OxygenButton : public KCommonDecorationButton
+ {
+ public:
+-    explicit OxygenButton(OxygenClient *parent=0,
++    explicit OxygenButton(OxygenClient &parent,
+                   const QString &tip=NULL,
+                   ButtonType type=ButtonHelp);
+     ~OxygenButton();
+@@ -58,15 +59,19 @@
+     void enterEvent(QEvent *e);
+     void leaveEvent(QEvent *e);
+     void paintEvent(QPaintEvent *e);
++    QColor buttonDetailColor(const QPalette &palette);
+ 
+ private Q_SLOTS:
+     void pressSlot();
+ 
+ private:
+-    OxygenClient *client_;
++    OxygenClient &client_;
++    OxygenHelper &helper_;
+     ButtonType type_;
+     ButtonState status_;
+     int lastmouse_;
++    bool colorCacheInvalid_;
++    QColor cachedButtonDetailColor_;
+ };
+ 
+ } //namespace Oxygen
+--- a/kwin/clients/oxygen/CMakeLists.txt
++++ b/kwin/clients/oxygen/CMakeLists.txt
+@@ -5,7 +5,6 @@
+      oxygenclient.cpp
+      oxygenbutton.cpp
+      oxygen.cpp
+-     definitions.cpp
+    )
+ 
+ 
+--- a/kwin/clients/oxygen/oxygenclient.h
++++ b/kwin/clients/oxygen/oxygenclient.h
+@@ -31,7 +31,7 @@
+ 
+ #include <kcommondecoration.h>
+ 
+-#include "oxygenbutton.h"
++#include "lib/helper.h"
+ 
+ class QPoint;
+ 
+@@ -56,6 +56,13 @@
+ private:
+     void paintEvent(QPaintEvent *e);
+     void doShape();
++    QColor titlebarTextColor(const QPalette &palette);
++    bool colorCacheInvalid_;
++    QColor cachedTitlebarTextColor_;
++
++protected:
++    friend class OxygenButton;
++    OxygenHelper &helper_;
+ };
+ 
+ 
+--- a/kwin/clients/web/Web.cpp
++++ b/kwin/clients/web/Web.cpp
+@@ -224,8 +224,8 @@
+   const int titleEdgeBottom = layoutMetric(LM_TitleEdgeBottom);
+   const int ttlHeight = layoutMetric(LM_TitleHeight);
+   const int titleEdgeBottomBottom = r_y+titleEdgeTop+ttlHeight+titleEdgeBottom-1;
+-  QRect titleRect = QRect(r_x+titleEdgeLeft+buttonsLeftWidth(), r_y+titleEdgeTop,
+-            r_x2-titleEdgeRight-buttonsRightWidth()-(r_x+titleEdgeLeft+buttonsLeftWidth()),
++  QRect titleRect = QRect(r_x+titleEdgeLeft+buttonsLeftWidth()+1, r_y+titleEdgeTop,
++            r_x2-titleEdgeRight-buttonsRightWidth()-(r_x+titleEdgeLeft+buttonsLeftWidth()+1),
+             titleEdgeBottomBottom-(r_y+titleEdgeTop) );
+   titleRect.setTop(1);
+ 
+--- a/kwin/clients/CMakeLists.txt
++++ b/kwin/clients/CMakeLists.txt
+@@ -3,12 +3,9 @@
+ add_subdirectory( b2 ) 
+ add_subdirectory( kde2 ) 
+ add_subdirectory( keramik ) 
+-message(STATUS "TODO - remove kdefx usage in laptop")
+-#add_subdirectory( laptop ) 
+-message(STATUS "TODO - remove kdefx usage in modernsystem")
+-#add_subdirectory( modernsystem ) 
++add_subdirectory( laptop ) 
++add_subdirectory( modernsystem ) 
+ add_subdirectory( oxygen ) 
+ add_subdirectory( quartz ) 
+-message(STATUS "TODO - remove kdefx usage in redmond")
+-#add_subdirectory( redmond ) 
++add_subdirectory( redmond ) 
+ add_subdirectory( web ) 
+--- a/kwin/kcmkwin/kwindecoration/kwindecoration.desktop
++++ b/kwin/kcmkwin/kwindecoration/kwindecoration.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kwindecoration
++Exec=kcmshell4 kwindecoration
+ Icon=preferences-system-windows-decoration
+ Type=Service
+ ServiceTypes=KCModule
+@@ -11,69 +11,7 @@
+ 
+ X-KDE-System-Settings-Parent-Category=appearance
+ 
+-Name=Window Decorations
+-Name[af]=Venster Versierings
+-Name[ar]=زخرفة النوافذ
+-Name[be]=Дэкарацыі вокнаў
+-Name[bg]=Декорация
+-Name[br]=Kinkladur ar prenester
+-Name[ca]=Decoració de les finestres
+-Name[cs]=Dekorace oken
+-Name[csb]=Dekòracëje òkna
+-Name[cy]=Addurniadau Ffenestr
+-Name[da]=Vinduesdekorationer
+-Name[de]=Fensterdekorationen
+-Name[el]=Διακοσμήσεις παραθύρων
+-Name[eo]=Fenestroaspekto
+-Name[es]=Decoración de ventanas
+-Name[et]=Akna dekoratsioonid
+-Name[eu]=Leihoaren dekorazioak
+-Name[fa]=تزئینات پنجره
+-Name[fi]=Ikkunoiden kehykset
+-Name[fr]=Décoration des fenêtres
+-Name[fy]=Finsterdekoraasjes
+-Name[ga]=Maisíochtaí Fuinneoige
+-Name[gl]=Decoracións das Fiestras
+-Name[he]=קישוטי חלונות
+-Name[hr]=Ukrasi prozora
+-Name[hu]=Ablakkeret-stílus
+-Name[is]=Gluggaskreytingar
+-Name[it]=Decorazioni finestra
+-Name[ja]=ウィンドウの装飾
+-Name[ka]=ფანჯრის დეკორაცია
+-Name[kk]=Терезе безендіруі
+-Name[km]=ការ​តុបតែង​បង្អួច
+-Name[ko]=창 장식
+-Name[lt]=Langų išvaizda
+-Name[lv]=Loga Dekorācijas
+-Name[mk]=Декорации на прозорците
+-Name[nb]=Vinduspynt
+-Name[nds]=Finsterdekoratschoon
+-Name[ne]=सञ्झ्याल सजावट
+-Name[nl]=Vensterdecoraties
+-Name[nn]=Vindaugsdekorasjonar
+-Name[pa]=ਝਰੋਖਾ ਸਜਾਵਟ
+-Name[pl]=Dekoracje okna
+-Name[pt]=Decorações das Janelas
+-Name[pt_BR]=Decorações de Janela
+-Name[ro]=Decorări
+-Name[ru]=Декорации окон
+-Name[se]=Lásehearvvat
+-Name[sl]=Okraski oken
+-Name[sr]=Декорација прозора
+-Name[sr at latin]=Dekoracija prozora
+-Name[sv]=Fönsterdekoration
+-Name[ta]=சாளர அலங்கரிப்புகள்
+-Name[tg]=Декоратсияҳои тиреза
+-Name[tr]=Pencere Dekorasyonları
+-Name[uk]=Обрамлення вікон
+-Name[uz]=Ойнанинг безаклари
+-Name[vi]=Trang trí Cửa sổ
+-Name[wa]=Gåliotaedjes des purneas
+-Name[x-test]=xxWindow Decorationsxx
+-Name[xh]=Izihombiso zeWindow 
+-Name[zh_CN]=窗口装饰
+-Name[zh_TW]=視窗裝飾
++Name=Windows
+ 
+ Comment=Configure the look and feel of window titles
+ Comment[af]=Stel die uitdrukking en gevoek van venster titels op
+@@ -164,7 +102,7 @@
+ Keywords[is]=kwin,gluggi,gluggastjóri,gluggar,kantar,rammi,skreyting,þema,stíll,útlit,takki,kwm,skraut
+ Keywords[it]=kwin,finestra,window manager,bordo,stile,tema,aspetto,pulsante,maniglia,bordo,kwm,decorazione
+ Keywords[ja]=kwin,ウィンドウ,マネージャ,枠,スタイル,テーマ,ルック,外観,レイアウト,ボタン,ハンドル,エッジ,kwm,装飾
+-Keywords[km]=kwin,បង្អួច,កម្មវិធី​គ្រប់គ្រង,ស៊ុម,រចនាប័ទ្ម,ស្បែក,មើល,ស្គាល់,ប្លង់,ប៊ូតុង,ការ​គ្រប់គ្រង,គែម,kwm ,ការ​តុបតែង
++Keywords[km]=kwin បង្អួច កម្មវិធី​គ្រប់គ្រង ស៊ុម រចនាប័ទ្ម ស្បែក មើល ស្គាល់ ប្លង់ ប៊ូតុង ការ​គ្រប់គ្រង គែម kwm ការ​តុបតែង
+ Keywords[ko]=kwin,window,manager,border,style,theme,look,feel,layout,button,handle,edge,kwm,decoration ,창,윈도,관리자,매니저,테두리,꼴,스타일,테마,모양새,보이기,쓰임새,느끼기 ,배치,단추
+ Keywords[lt]=kwin,window,manager,border,style,theme,look,feel,layout,buttons,handle,edge,kwm,decoration,langas,tvarkyklė,rėmelis,stilius,tema,žiūrėti,jausti,išdėstymas,mygtukai,kraštas,dekoracija
+ Keywords[lv]=kwin, logs, menedžeris, rāmis, stils, tēma, skats, gars, izkārtojums, poga, rokturis, stūris, kwm, dekorācija
+--- a/kwin/kcmkwin/kwinrules/kwinrules.desktop
++++ b/kwin/kcmkwin/kwinrules/kwinrules.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kwinrules
++Exec=kcmshell4 kwinrules
+ Icon=preferences-system-windows-specific
+ Type=Service
+ ServiceTypes=KCModule
+@@ -11,64 +11,7 @@
+ 
+ X-KDE-System-Settings-Parent-Category=window-behaviour
+ 
+-Name=Window-Specific Settings
+-Name[af]=Venser spesifike Instellings
+-Name[ar]=إعدادات خاصة بالنوافذ
+-Name[be]=Настаўленні для асобных вокнаў
+-Name[bg]=Потребителски
+-Name[ca]=Arranjament específic de finestra
+-Name[cs]=Specifická nastavení oken
+-Name[csb]=Nastôw specyficzny dlô òkna
+-Name[cy]=Gosodiadau sy'n Benodol i'r Ffenestr
+-Name[da]=Vinduesspecifik opsætning
+-Name[de]=Fensterspezifische Einstellungen
+-Name[el]=Ρυθμίσεις σχετικές με παράθυρα
+-Name[eo]=Nurfenestra Agordoj
+-Name[es]=Preferencias específicas de la ventana
+-Name[et]=Akende seadistused
+-Name[eu]=Leihoen ezarpen espezifikoak
+-Name[fa]=تنظیمات مشخص پنجره
+-Name[fi]=Ikkunakohtaiset asetukset
+-Name[fr]=Paramètres spécifiques à la fenêtre
+-Name[fy]=Finsterspesifike ynstellings
+-Name[gl]=Opcións específicas da fiestra
+-Name[he]=הגדרות ספציפיות לחלון
+-Name[hr]=Postavke za prozor
+-Name[hu]=Egyedi ablakbeállítások
+-Name[is]=Stillingar einstakra glugga
+-Name[it]=Impostazioni specifiche della finestra
+-Name[ja]=ウィンドウ固有の設定
+-Name[ka]=ფანჯრის განსაკუთრებული პარამეტრები
+-Name[kk]=Терезенің ерекше параметрлері
+-Name[km]=ការ​កំណត់​បង្អួច​ជាក់លាក់​
+-Name[ko]=창 개별 설정
+-Name[lt]=Nuo lango priklausantys nustatymai
+-Name[lv]=Specifiski logu parametri
+-Name[mk]=Поставувања по прозорец
+-Name[nb]=Vindus-spesifikke innstillinger
+-Name[nds]=Instellen för enkelte Finstern
+-Name[ne]=सञ्झ्याल निर्दिष्ट सेटिङ
+-Name[nl]=Vensterspecifieke instellingen
+-Name[nn]=Instillingar for vindauge
+-Name[pa]=ਝਰੋਖਾ-ਖਾਸ ਸਥਾਪਨ
+-Name[pl]=Ustawienia danego okna
+-Name[pt]=Opções Específicas da Janela
+-Name[pt_BR]=Configurações Específicas da Janela
+-Name[ro]=Setări specifice fereastră
+-Name[ru]=Особые параметры окна
+-Name[se]=Láseheivehusat
+-Name[sl]=Nastavitve glede na okno
+-Name[sr]=Посебне поставке за прозоре
+-Name[sr at latin]=Posebne postavke za prozore
+-Name[sv]=Fönsterspecifika inställningar
+-Name[ta]=சாளர-குறிப்பிடும் அமைப்புகள்
+-Name[tr]=Pencereye Özel Seçenekler
+-Name[uk]=Параметри для окремих вікон
+-Name[uz]=Ойнага оид мосламалар
+-Name[vi]=Thiết lập Danh riêng cho Cửa sổ
+-Name[x-test]=xxWindow-Specific Settingsxx
+-Name[zh_CN]=特定窗口的设置
+-Name[zh_TW]=特定視窗設定
++Name=Window-Specific
+ 
+ Comment=Configure settings specifically for a window
+ Comment[af]=Stel spesifieke venster instellings op
+@@ -157,7 +100,7 @@
+ Keywords[hu]=méret,pozíció,állapot,ablakműködés,ablakok,specifikus,megjegyzés,szabályok
+ Keywords[it]=dimensione,posizione,stato,comportamento finestra,finestre,specifico,ricorda,regole
+ Keywords[ja]=サイズ,位置,状態,ウィンドウの挙動,windows,特定,ワークアラウンド,記憶,ルール
+-Keywords[km]=ទំហំ,ទីតាំង,សភាព,ឥរិយាបថ​បង្អួច,បង្អួច,ជាក់លាក់,workarounds,ចងចាំ,ច្បាប់
++Keywords[km]=ទំហំ ទីតាំង សភាព ឥរិយាបថ​បង្អួច បង្អួច ជាក់លាក់ workarounds ចងចាំ ច្បាប់
+ Keywords[lt]=size,position,state,window behavior,windows,specific,workarounds,remember,rules,dydis,pozicija,būsena,lango eelgesys,langai,atsiminti,taisyklės
+ Keywords[lv]=izmērs,novietojums,statuss,loga izturēšanās,logi,specifisks,apjājiens,atcerēties,noteikumi
+ Keywords[mk]=size,position,state,window behavior,windows,specific,workarounds,remember,rules,големина,позиција,состојба,однесување на прозорец,специфично,заобиколни
+--- a/kwin/kcmkwin/kwinrules/main.cpp
++++ b/kwin/kcmkwin/kwinrules/main.cpp
+@@ -41,7 +41,7 @@
+          i <= count;
+          ++i )
+         {
+-        cfg.changeGroup( QString::number( i ));
++        cfg = KConfigGroup(&_cfg,QString::number( i ));
+         Rules* rule = new Rules( cfg );
+         rules.append( rule );
+         }
+--- a/kwin/kcmkwin/kwinrules/ruleswidgetbase.ui
++++ b/kwin/kcmkwin/kwinrules/ruleswidgetbase.ui
+@@ -329,7 +329,7 @@
+                             <cstring>types</cstring>
+                         </property>
+                     </widget>
+-                    <widget class="KListWidget" row="1" column="0" rowspan="1" colspan="4">
++                    <widget class="QListWidget" row="1" column="0" rowspan="1" colspan="4">
+                         <item>
+                             <property name="text">
+                                 <string>Normal Window</string>
+--- a/kwin/kcmkwin/kwinrules/ruleslist.cpp
++++ b/kwin/kcmkwin/kwinrules/ruleslist.cpp
+@@ -161,7 +161,7 @@
+          i <= count;
+          ++i )
+         {
+-        cfg.changeGroup( QString::number( i ));
++        cfg = KConfigGroup(&_cfg,QString::number( i ));
+         Rules* rule = new Rules( cfg );
+         rules.append( rule );
+         rules_listbox->addItem( rule->description );
+--- a/kwin/kcmkwin/kwinrules/CMakeLists.txt
++++ b/kwin/kcmkwin/kwinrules/CMakeLists.txt
+@@ -11,7 +11,8 @@
+ 
+ kde4_add_kdeinit_executable( kwin_rules_dialog ${kwin_rules_dialog_KDEINIT_SRCS})
+ 
+-target_link_libraries(kdeinit_kwin_rules_dialog   ${KDE4_KDE3SUPPORT_LIBS} )
++target_link_libraries(kdeinit_kwin_rules_dialog   ${QT_QT3SUPPORT_LIBRARY}
++${KDE4_KDEUI_LIBS} )
+ 
+ install(TARGETS kdeinit_kwin_rules_dialog  DESTINATION ${LIB_INSTALL_DIR} )
+ 
+@@ -25,7 +26,8 @@
+ 
+ kde4_add_plugin(kcm_kwinrules ${kcm_kwinrules_PART_SRCS})
+ 
+-target_link_libraries(kcm_kwinrules   ${KDE4_KDE3SUPPORT_LIBS} )
++target_link_libraries(kcm_kwinrules   ${KDE4_KDEUI_LIBS}
++${QT_QT3SUPPORT_LIBRARY} )
+ 
+ install(TARGETS kcm_kwinrules  DESTINATION ${PLUGIN_INSTALL_DIR} )
+ 
+--- a/kwin/kcmkwin/kwincompositing/main.ui
++++ b/kwin/kcmkwin/kwincompositing/main.ui
+@@ -97,7 +97,7 @@
+             <item>
+              <widget class="QPushButton" name="advancedOptions" >
+               <property name="text" >
+-               <string>Advanced options...</string>
++               <string>Advanced Options...</string>
+               </property>
+              </widget>
+             </item>
+@@ -126,7 +126,7 @@
+      </widget>
+      <widget class="QWidget" name="tab_2" >
+       <attribute name="title" >
+-       <string>All effects</string>
++       <string>All Effects</string>
+       </attribute>
+       <layout class="QVBoxLayout" >
+        <item>
+--- a/kwin/kcmkwin/kwincompositing/advanced.ui
++++ b/kwin/kcmkwin/kwincompositing/advanced.ui
+@@ -38,7 +38,7 @@
+    <item>
+     <widget class="QGroupBox" name="glGroup" >
+      <property name="title" >
+-      <string>OpenGL options</string>
++      <string>OpenGL Options</string>
+      </property>
+      <layout class="QVBoxLayout" >
+       <item>
+@@ -121,7 +121,7 @@
+    <item>
+     <widget class="QGroupBox" name="xrenderGroup" >
+      <property name="title" >
+-      <string>XRender options</string>
++      <string>XRender Options</string>
+      </property>
+      <layout class="QVBoxLayout" >
+       <item>
+--- a/kwin/kcmkwin/kwincompositing/main.cpp
++++ b/kwin/kcmkwin/kwincompositing/main.cpp
+@@ -188,10 +188,10 @@
+     // Load effect settings
+     KConfigGroup effectconfig(mTmpConfig, "Plugins");
+ #define LOAD_EFFECT_CONFIG(effectname)  effectconfig.readEntry("kwin4_effect_" effectname "Enabled", true)
+-    bool winManagementEnabled = LOAD_EFFECT_CONFIG("presentwindows");
+-    winManagementEnabled &= LOAD_EFFECT_CONFIG("boxswitch");
+-    winManagementEnabled &= LOAD_EFFECT_CONFIG("desktopgrid");
+-    winManagementEnabled &= LOAD_EFFECT_CONFIG("dialogparent");
++    bool winManagementEnabled = LOAD_EFFECT_CONFIG("presentwindows")
++        && LOAD_EFFECT_CONFIG("boxswitch")
++        && LOAD_EFFECT_CONFIG("desktopgrid")
++        && LOAD_EFFECT_CONFIG("dialogparent");
+     ui.effectWinManagement->setChecked(winManagementEnabled);
+     ui.effectShadows->setChecked(LOAD_EFFECT_CONFIG("shadow"));
+     ui.effectAnimations->setChecked(LOAD_EFFECT_CONFIG("minimizeanimation"));
+--- a/kwin/kcmkwin/kwincompositing/advanced.cpp
++++ b/kwin/kcmkwin/kwincompositing/advanced.cpp
+@@ -26,7 +26,7 @@
+     mKWinConfig = config;
+     mDefaultPrefs = defaults;
+ 
+-    setCaption(i18n("Advanced compositing options"));
++    setCaption(i18n("Advanced Compositing Options"));
+     setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Apply);
+     setModal(true);
+ 
+--- a/kwin/kcmkwin/kwincompositing/kwincompositing.desktop
++++ b/kwin/kcmkwin/kwincompositing/kwincompositing.desktop
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kwincompositing
+-Icon=preferences-system-windows-effects
++Exec=kcmshell4 kwincompositing
++Icon=preferences-desktop-effects
+ Type=Service
+ ServiceTypes=KCModule
+ DocPath=kcontrol/kwincompositing/index.html
+@@ -16,6 +16,7 @@
+ Name[de]=Arbeitsflächen-Effekte
+ Name[el]=Εφέ επιφάνειας εργασίας
+ Name[es]=Efectos del escritorio
++Name[et]=Töölauaefektid
+ Name[fa]=جلوه‌های رومیزی
+ Name[ga]=Maisíochtaí Deisce
+ Name[he]=אפקטי שולחן עבודה
+@@ -43,6 +44,7 @@
+ Comment[bg]=Настройване активирането на прозорците
+ Comment[de]=Arbeitsflächen-Effekte einrichten
+ Comment[el]=Ρύθμιση εφέ επιφάνειας εργασίας
++Comment[et]=Töölauaefektide seadistamine
+ Comment[fa]=پیکربندی جلوه‌های رومیزی
+ Comment[ga]=Cumraigh maisíochtaí deisce
+ Comment[he]=שינוי הגדרות אפקטי שולחן העבודה
+@@ -68,12 +70,13 @@
+ Keywords[bg]=kwin,window,manager,compositing,effect,прозорец,мениджър,ефект
+ Keywords[de]=kwin,fenster,manager,effekt,verwaltung,composit
+ Keywords[el]=παράθυρο,διαχειριστής,εφέ,kwin,παράθυρο,διαχειριστής,εφέ
++Keywords[et]=kwin,aken,haldur,komposiit,efekt
+ Keywords[fa]=kwin، پنجره، مدیر، ترکیب، جلوه
+ Keywords[ga]=kwin,fuinneog,bainisteoir,comhshuíomh,maisíocht
+ Keywords[he]=kwin,window,manager,compositing,effect,מנהל,חלונות,שזירה,אפקט
+ Keywords[it]=kwin,window,manager,compositing,effect,finestra,composizione,effetto,gestione
+ Keywords[ja]=kwin,ウィンドウ,マネージャ,コンポジティング,効果,エフェクト
+-Keywords[km]=kwin,បង្អួច,កម្មវិធី​គ្រប់គ្រង,សមាសភាគ,បែបផែន
++Keywords[km]=kwin បង្អួច កម្មវិធី​គ្រប់គ្រង សមាសភាគ បែបផែន
+ Keywords[nb]=kwin,vindu,vindusstyring,sammensetting,effekt
+ Keywords[nds]=kwin,Finster,Pleger,Effekt,Tosamensetten
+ Keywords[nl]=kwin,window,venster,window manager,effect,3D,compositing
+--- a/kwin/kcmkwin/kwinoptions/kwinfocus.desktop
++++ b/kwin/kcmkwin/kwinoptions/kwinfocus.desktop
+@@ -3,7 +3,7 @@
+ Icon=kcmkwm
+ Type=Service
+ ServiceTypes=KCModule
+-Exec=kcmshell kwinfocus
++Exec=kcmshell4 kwinfocus
+ DocPath=kcontrol/windowmanagement/index.html#action-focus
+ 
+ X-KDE-Library=kcm_kwinoptions
+@@ -153,7 +153,7 @@
+ Keywords[is]=fókus,staðsetning,fleyta upp sjálfkrafa, fleyta upp,smellur fleytir upp,lyklaborð,CDE,alt-tab,öll skjáborð
+ Keywords[it]=focus,piazzamento,alza automaticamente,alza,clic per alzare,tastiera, CDE,alt-tab,tutti i desktop
+ Keywords[ja]=フォーカス,配置,自動的に前面に,前面に,クリックして前面に,キーボード,CDE,alt-tab,すべてのデスクトップ
+-Keywords[km]=ផ្តោត​អារម្មណ៍,ការ​ដាក់,លើក​ឡើង​ស្វ័យប្រវត្តិ,លើក​ឡើង,ចុច,លើក​ឡើង,ក្ដារ​ចុច,CDE,ជំនួស (alt) - ថេប (tab),ផ្ទៃតុ​ទាំងអស់
++Keywords[km]=ផ្តោត​អារម្មណ៍ ការ​ដាក់ លើក​ឡើង​ស្វ័យប្រវត្តិ លើក​ឡើង ចុច លើក​ឡើង ក្ដារ​ចុច CDE ជំនួស(alt)-ថេប (tab) ផ្ទៃតុ​ទាំងអស់
+ Keywords[lt]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop, fokusas,perkėlimas į pirmą planą, pirmas planas, klaviatūra, CDE,visi darbastaliai
+ Keywords[lv]=fokuss,novietojums,automātiska pacelšanās,pacelšanās,klikšķaraise,tastatūra,CDE,alt-tab,visas darbavirsmas
+ Keywords[mk]=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,фокус,позиција,авто подигање,подигање,клик подигање,сите десктопи
+--- a/kwin/kcmkwin/kwinoptions/kwinoptions.desktop
++++ b/kwin/kcmkwin/kwinoptions/kwinoptions.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Exec=kcmshell kwinoptions
++Exec=kcmshell4 kwinoptions
+ Icon=preferences-system-windows-behaviour
+ Type=Service
+ ServiceTypes=KCModule
+@@ -167,7 +167,7 @@
+ Keywords[is]=virkni glugga,staðsetning,hegðun,högun glugga,hækka,hækka sjálfkrafa,gluggar,titilslá,titilrönd,tvísmella
+ Keywords[it]=focus,piazzamento,comportamento finestre,animazione,alza,alza automaticamente,finestre,cornice,barra del titolo,doppio clic
+ Keywords[ja]=フォーカス,配置,ウィンドウの挙動,アニメーション,前面へ,自動的に前面へ,ウィンドウ,フレーム,タイトルバー,ダブルクリック
+-Keywords[km]=ផ្ដោត​អារម្មណ៍,ការ​ដាក់,ឥរិយាបថ​បង្អួច,ចលនា,លើកឡើង​លើ,លើក​ឡើង​ស្វ័យប្រវត្ត,បង្អួច,ស៊ុម,របារ​ចំណងជើង,ចុច​ទ្វេ​ដង
++Keywords[km]=ផ្ដោត​អារម្មណ៍ ការ​ដាក់ ឥរិយាបថ​បង្អួច ចលនា លើកឡើង​លើ លើក​ឡើង​ស្វ័យប្រវត្ត បង្អួច ស៊ុម របារ​ចំណងជើង ចុច​ទ្វេ​ដង
+ Keywords[lt]=focus,placement,window behaviour,animation,raise,auto raise,windows,frame,titlebar,doubleclick,lango išdėstymas,elgesys,langai,rėmelis,lango antraštė
+ Keywords[lv]=fokuss,novietojums,loga izturēšanās,animācija,celt,auto celt,logi,kadrs,virsraksta josla,dubultklikšķis
+ Keywords[mk]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,фокус,позиционирање,однесување на прозорците, анимација,подигање,авто подигање,прозорци,рамка,насловна лента,двоен клик
+--- a/kwin/kcmkwin/kwinoptions/kwinmoving.desktop
++++ b/kwin/kcmkwin/kwinoptions/kwinmoving.desktop
+@@ -3,7 +3,7 @@
+ Icon=kcmkwm
+ Type=Service
+ ServiceTypes=KCModule
+-Exec=kcmshell kwinmoving
++Exec=kcmshell4 kwinmoving
+ DocPath=kcontrol/windowmanagement/index.html#action-moving
+ 
+ X-KDE-Library=kcm_kwinoptions
+@@ -159,7 +159,7 @@
+ Keywords[is]=færi,snjallt,stafla,hámarka,gripsvæði,grip,rammi,jaðar
+ Keywords[it]=spostamento,intelligente,cascata,massimizza,zona magnetica,bordi,bordi magnetici
+ Keywords[ja]=移動,スマート,カスケード,最大化,スナップゾーン,スナップ境界
+-Keywords[km]=ការ​ផ្លាស់ទី,ឆ្លាត,ល្បាក់,ពង្រីក​អប្បបរមា,តំបន់​ខ្ទាស់,ខ្ទាស់,ស៊ុម
++Keywords[km]=ការ​ផ្លាស់ទី ឆ្លាត ល្បាក់ ពង្រីក​អប្បបរមា តំបន់​ខ្ទាស់ ខ្ទាស់ ស៊ុម
+ Keywords[lt]=moving,smart,cascade,maximize,maximise,snap zone,snap,border, perkėlimas,išmoningas,kaskada,išdidinti,rėmelis,riba
+ Keywords[lv]=pārvietošana,gudra,kaskāde,maksimizē,maksimizēšana,pielipsanas zona,pielipt,mala
+ Keywords[mk]=moving,smart,cascade,maximize,maximise,snap zone,snap,border, движење,паметно,каскадно,рашири,спушти,граница
+--- a/kwin/kcmkwin/kwinoptions/kwinactions.desktop
++++ b/kwin/kcmkwin/kwinoptions/kwinactions.desktop
+@@ -3,7 +3,7 @@
+ Icon=kcmkwm
+ Type=Service
+ ServiceTypes=KCModule
+-Exec=kcmshell kwinactions
++Exec=kcmshell4 kwinactions
+ DocPath=kcontrol/windowmanagement/index.html#action-actions
+ 
+ X-KDE-Library=kcm_kwinoptions
+--- a/kwin/kcmkwin/kwinoptions/kwinadvanced.desktop
++++ b/kwin/kcmkwin/kwinoptions/kwinadvanced.desktop
+@@ -3,7 +3,7 @@
+ Icon=kcmkwm
+ Type=Service
+ ServiceTypes=KCModule
+-Exec=kcmshell kwinadvanced
++Exec=kcmshell4 kwinadvanced
+ DocPath=kcontrol/windowmanagement/index.html#action-advanced
+ 
+ X-KDE-Library=kcm_kwinoptions
+@@ -163,7 +163,7 @@
+ Keywords[is]=rúlla upp,skyggja,rammi,svif,hover,virkir rammar
+ Keywords[it]=arrotola,bordi,passaggio del mouse,bordi attivi
+ Keywords[ja]=畳む,境界,復元,アクティブ境界
+-Keywords[km]=ស្រមោល,ស៊ុម,សំកាំង,ស៊ុម​សកម្ម
++Keywords[km]=ស្រមោល ស៊ុម សំកាំង ស៊ុម​សកម្ម
+ Keywords[lt]=shading,border,hover,active borders, tik antraštės juosta, rėmelis, aktyvūs rėmeliai
+ Keywords[lv]=ēnošana,mala,hover,aktīvās malas
+ Keywords[mk]=shading,border,hover,active borders,засенчување,граница,лебди,активни граници
+--- a/kwin/kcmkwin/kwinoptions/windows.cpp
++++ b/kwin/kcmkwin/kwinoptions/windows.cpp
+@@ -179,7 +179,7 @@
+ 
+     autoRaise = new KIntNumInput(500, fcsBox);
+     autoRaise->setLabel(i18n("Dela&y:"), Qt::AlignVCenter|Qt::AlignLeft);
+-    autoRaise->setRange(0, 3000, 100, true);
++    autoRaise->setRange(0, 3000, 100);
+     autoRaise->setSteps(100,100);
+     autoRaise->setSuffix(i18n(" msec"));
+     fLay->addWidget(autoRaise);
+@@ -192,7 +192,7 @@
+ 
+     delayFocus = new KIntNumInput(500, fcsBox);
+     delayFocus->setLabel(i18n("Dela&y:"), Qt::AlignVCenter|Qt::AlignLeft);
+-    delayFocus->setRange(0, 3000, 100, true);
++    delayFocus->setRange(0, 3000, 100);
+     delayFocus->setSteps(100,100);
+     delayFocus->setSuffix(i18n(" msec"));
+     fLay->addWidget(delayFocus);
+@@ -590,7 +590,7 @@
+ 
+     shadeHover = new KIntNumInput(500, shBox);
+     shadeHover->setLabel(i18n("Dela&y:"), Qt::AlignVCenter|Qt::AlignLeft);
+-    shadeHover->setRange(0, 3000, 100, true);
++    shadeHover->setRange(0, 3000, 100);
+     shadeHover->setSteps(100, 100);
+     shadeHover->setSuffix(i18n(" msec"));
+ 
+@@ -619,7 +619,7 @@
+     active_always  = new QRadioButton(i18n("A&lways enabled"), electricBox);
+ 
+     delays = new KIntNumInput(10, electricBox);
+-    delays->setRange(0, MAX_EDGE_RES, 50, true);
++    delays->setRange(0, MAX_EDGE_RES, 50);
+     delays->setSuffix(i18n(" msec"));
+     delays->setLabel(i18n("Desktop &switch delay:"));
+     delays->setWhatsThis( i18n("Here you can set a delay for switching desktops using the active"
+--- a/kwin/options.cpp
++++ b/kwin/options.cpp
+@@ -85,7 +85,7 @@
+     if( !focusPolicyIsReasonable()) // #48786, comments #7 and later
+         focusStealingPreventionLevel = 0;
+ 
+-    KConfig *gc = new KConfig("kdeglobals", KConfig::CascadeConfig);
++    KConfig *gc = new KConfig("kdeglobals", KConfig::NoGlobals);
+     bool isVirtual = KApplication::desktop()->isVirtualDesktop();
+     KConfigGroup gWindowsConfig(gc, "Windows");
+     xineramaEnabled = gWindowsConfig.readEntry ("XineramaEnabled", isVirtual) &&
+@@ -161,7 +161,7 @@
+     showDesktopIsMinimizeAll = config.readEntry( "ShowDesktopIsMinimizeAll", false );
+ 
+     // Mouse bindings
+-    config.changeGroup("MouseBindings");
++    config = KConfigGroup(_config,"MouseBindings");
+     CmdActiveTitlebar1 = mouseCommand(config.readEntry("CommandActiveTitlebar1","Raise"), true );
+     CmdActiveTitlebar2 = mouseCommand(config.readEntry("CommandActiveTitlebar2","Lower"), true );
+     CmdActiveTitlebar3 = mouseCommand(config.readEntry("CommandActiveTitlebar3","Operations menu"), true );
+@@ -178,11 +178,10 @@
+     CmdAll3 = mouseCommand(config.readEntry("CommandAll3","Resize"), false );
+     CmdAllWheel = mouseWheelCommand(config.readEntry("CommandAllWheel","Nothing"));
+ 
+-    config.changeGroup("Translucency");
++    config=KConfigGroup(_config,"Compositing");
+     refreshRate = config.readEntry( "RefreshRate", 0 );
+-    glStrictBinding = config.readEntry( "GLStrictBinding", false );
+     const HiddenPreviews hps[] = { HiddenPreviewsNever, HiddenPreviewsKeep, HiddenPreviewUpdate, HiddenPreviewsActive };
+-    hiddenPreviews = hps[ qBound( 0, config.readEntry( "HiddenPreviews", 3 ), 3 ) ];
++    hiddenPreviews = hps[ qBound( 0, config.readEntry( "HiddenPreviews", 0 ), 3 ) ];
+ 
+     // Read button tooltip animation effect from kdeglobals
+     // Since we want to allow users to enable window decoration tooltips
+@@ -231,6 +230,7 @@
+     glDirect = config.readEntry("GLDirect", prefs.enableDirectRendering() );
+     glVSync = config.readEntry("GLVSync", prefs.enableVSync() );
+     smoothScale = qBound( -1, config.readEntry( "GLTextureFilter", -1 ), 2 );
++    glStrictBinding = config.readEntry( "GLStrictBinding", prefs.strictBinding());
+ 
+     xrenderSmoothScale = config.readEntry("XRenderSmoothScale", false );
+     }
+--- a/kwin/scene.cpp
++++ b/kwin/scene.cpp
+@@ -227,6 +227,8 @@
+         if( !w->isPaintingEnabled())
+             continue;
+         data.paint -= allclips; // make sure to avoid already clipped areas
++        // no painting outside visible screen (and no transformations)
++        data.paint &= QRect( 0, 0, displayWidth(), displayHeight());
+         if( data.paint.isEmpty()) // completely clipped
+             continue;
+         if( data.paint != region ) // prepaint added area to draw
+--- a/kwin/compositingprefs.h
++++ b/kwin/compositingprefs.h
+@@ -44,17 +44,20 @@
+     bool enableCompositing() const  { return mEnableCompositing; }
+     bool enableVSync() const  { return mEnableVSync; }
+     bool enableDirectRendering() const  { return mEnableDirectRendering; }
++    bool strictBinding() const { return mStrictBinding; }
+ 
+     void detect();
+ 
+     QString driver() const  { return mDriver; }
+     Version version() const  { return mVersion; }
++    bool xgl() const { return mXgl; }
+ 
+ 
+ protected:
+ 
+     void detectDriverAndVersion();
+     void applyDriverSpecificOptions();
++    static bool detectXgl();
+ 
+     bool createGLXContext();
+     void deleteGLXContext();
+@@ -66,10 +69,12 @@
+     QString mGLVersion;
+     QString mDriver;
+     Version mVersion;
++    bool mXgl;
+ 
+     bool mEnableCompositing;
+     bool mEnableVSync;
+     bool mEnableDirectRendering;
++    bool mStrictBinding;
+ 
+ #ifdef HAVE_OPENGL
+     GLXContext mGLContext;
+--- a/kwin/scene_opengl.cpp
++++ b/kwin/scene_opengl.cpp
+@@ -870,7 +870,9 @@
+             createTexture();
+         // when the pixmap is bound to the texture, they share the same data, so the texture
+         // updates automatically - no need to do anything in such case
+-        if( bound_glxpixmap == None )
++        if( bound_glxpixmap != None )
++            glBindTexture( mTarget, mTexture );
++        else
+             {
+             int attrs[] =
+                 {
+@@ -911,11 +913,12 @@
+             }
+         findTarget();
+ #ifdef CHECK_GL_ERROR
+-            checkGLError( "TextureLoadSHM1" );
++        checkGLError( "TextureLoadSHM1" );
+ #endif
+         if( mTexture == None )
+             {
+             createTexture();
++            glBindTexture( mTarget, mTexture );
+             y_inverted = false;
+             glTexImage2D( mTarget, 0, depth == 32 ? GL_RGBA : GL_RGB,
+                 mSize.width(), mSize.height(), 0,
+@@ -970,6 +973,7 @@
+         if( mTexture == None )
+             {
+             createTexture();
++            glBindTexture( mTarget, mTexture );
+             y_inverted = false;
+             glCopyTexImage2D( mTarget, 0,
+                 depth == 32 ? GL_RGBA : GL_RGB,
+--- a/kwin/COMPOSITE_TODO
++++ b/kwin/COMPOSITE_TODO
+@@ -23,12 +23,8 @@
+ KDE 4.0 TODO
+ =================================
+ 
+-- animations
+-    - need to be faster (300ms at most)
+-    - global setting?
+-
+-- shortcut configuration
+-    - configurable per effect (in the options dialog)
++/ shortcut configuration
++    / configurable per effect (in the options dialog)
+ 
+ / different handling of differeng gfx cards
+     / check that nvidia/ati/intel work and add specific hacks if needed
+@@ -42,8 +38,6 @@
+     / split effects to groups (eyecandy, accessibility, whatever)
+     - login effect, e.g. fade to desktop
+     - logout effect [Seli]
+-    - effect for windows demanding attention
+-        - rays? ripples?
+     - explosion
+ ?       - use for forcible killing (add support to windowClosed())
+     - diminactive
+@@ -87,7 +81,6 @@
+ 
+ / handling of window pixmaps for unmapped windows [Seli]
+   - config option?
+-- strict binding
+ 
+ - shm mode needs support for more data formats than GL_BGRA
+ 
+@@ -159,6 +152,11 @@
+ 
+ + hidden preview has two modes unimplemented
+ 
++- global setting for animation speed?
++- effects (to do)
++    - effect for windows demanding attention
++        - rays? ripples?
++
+ 
+ OpenGL TODO
+ =================================
+@@ -211,7 +209,6 @@
+ % __GL_YIELD=NOTHING for NVidia reportedly improves perceived performance
+     - it needs to be set somehow (http://lists.kde.org/?l=kwin&m=117794153720348&w=2)
+ 
+-
+ XRender TODO
+ ==============================
+ 
+--- a/kwin/client.cpp
++++ b/kwin/client.cpp
+@@ -141,6 +141,7 @@
+     ignore_focus_stealing = false;
+     demands_attention = false;
+     hidden_preview = false;
++    raw_shown = false;
+     check_active_modal = false;
+ 
+     Pdeletewindow = 0;
+@@ -866,6 +867,9 @@
+  */
+ void Client::rawShow()
+     {
++    if( raw_shown ) // this flag is used to purely avoid repeated calls to rawShow(),
++        return;     // it doesn't say anything more about the state
++    raw_shown = true;
+     if( decoration != NULL )
+         decoration->widget()->show(); // not really necessary, but let it know the state
+     XMapWindow( display(), frameId());
+@@ -896,6 +900,9 @@
+ */
+ void Client::rawHide()
+     {
++    if( !raw_shown )
++        return;
++    raw_shown = false;
+     StackingUpdatesBlocker blocker( workspace());
+     addWorkspaceRepaint( geometry());
+     if( options->hiddenPreviews == HiddenPreviewsNever )
+--- a/kwin/sm.cpp
++++ b/kwin/sm.cpp
+@@ -205,45 +205,54 @@
+     // First search ``session''
+     if (! sessionId.isEmpty() ) 
+         {
+-			// look for a real session managed client (algorithm suggested by ICCCM)
+-			foreach( SessionInfo* info, session ) {
+-				if ( realInfo )
+-					break;
+-				if ( info->sessionId == sessionId && sessionInfoWindowTypeMatch( c, info )) 
+-				{
+-				if ( ! windowRole.isEmpty() ) 
+-					{
+-					if ( info->windowRole == windowRole )
+-						realInfo = info;
+-						session.removeAll(info);
+-					}
+-				else 
+-					{
+-					if ( info->windowRole.isEmpty() &&
+-						 info->resourceName == resourceName &&
+-						 info->resourceClass == resourceClass )
+-						realInfo = info;
+-						session.removeAll(info);
+-					}
+-				}
+-			}
++        // look for a real session managed client (algorithm suggested by ICCCM)
++        foreach( SessionInfo* info, session )
++            {
++            if( realInfo )
++                break;
++            if( info->sessionId == sessionId && sessionInfoWindowTypeMatch( c, info )) 
++                {
++                if( ! windowRole.isEmpty() ) 
++                    {
++                    if( info->windowRole == windowRole )
++                        {
++                        realInfo = info;
++                        session.removeAll(info);
++                        }
++                    }
++                else 
++                    {
++                    if( info->windowRole.isEmpty()
++                        && info->resourceName == resourceName
++                        && info->resourceClass == resourceClass )
++                        {
++                        realInfo = info;
++                        session.removeAll(info);
++                        }
++                    }
++                }
++            }
+         }
+     else 
+         {
+-			// look for a sessioninfo with matching features.
+-			foreach( SessionInfo* info, session ) {
+-				if ( realInfo ) break;
+-				if ( info->resourceName == resourceName &&
+-						info->resourceClass == resourceClass &&
+-						info->wmClientMachine == wmClientMachine &&
+-						sessionInfoWindowTypeMatch( c, info ))
+-					if ( wmCommand.isEmpty() || info->wmCommand == wmCommand ) {
+-						realInfo = info;
+-						session.removeAll( info );
+-					}
+-			}
++        // look for a sessioninfo with matching features.
++        foreach( SessionInfo* info, session )
++            {
++            if( realInfo )
++                break;
++            if( info->resourceName == resourceName
++                && info->resourceClass == resourceClass
++                && info->wmClientMachine == wmClientMachine
++                && sessionInfoWindowTypeMatch( c, info ))
++                {
++                if ( wmCommand.isEmpty() || info->wmCommand == wmCommand )
++                    {
++                    realInfo = info;
++                    session.removeAll( info );
++                    }
++                }
++            }
+         }
+-
+     return realInfo;
+     }
+ 
+@@ -386,8 +395,8 @@
+     props[ 2 ].type = const_cast< char* >( SmLISTofARRAY8 );
+     props[ 2 ].num_vals = 1;
+     props[ 2 ].vals = &propvalue[ 2 ];
+-    propvalue[ 3 ].length = 0;
+-    propvalue[ 3 ].value = qApp->argv()[ 0 ];
++    propvalue[ 3 ].length = strlen( "kwinsmhelper" );
++    propvalue[ 3 ].value = (SmPointer)"kwinsmhelper";
+     props[ 3 ].name = const_cast< char* >( SmProgram );
+     props[ 3 ].type = const_cast< char* >( SmARRAY8 );
+     props[ 3 ].num_vals = 1;
+--- a/kwin/kwin.notifyrc
++++ b/kwin/kwin.notifyrc
+@@ -6,6 +6,7 @@
+ Comment[br]=Merour prenester KDE
+ Comment[cy]=Y Trefnydd Ffenestri KDE
+ Comment[da]=KDE Vindueshåndtering
++Comment[de]=Der KDE-Fenstermanager
+ Comment[el]=Ο διαχειριστής παραθύρων KDE
+ Comment[eo]=KDE-fenestroadministrilo
+ Comment[et]=KDE aknahaldur
+@@ -35,6 +36,7 @@
+ Comment[pt_BR]=O Gerenciador de Janelas KDE
+ Comment[ro]=Managerul de ferestre KDE
+ Comment[ru]=Оконный менеджер KDE
++Comment[sr]=KDE menadžer prozora
+ Comment[sr at latin]=KDE menadžer prozora
+ Comment[sv]=KDE:s fönsterhanterare
+ Comment[ta]=KDE சாளர மேலாளர்
+@@ -52,6 +54,7 @@
+ Name[br]=Gwintañ da vurev 1
+ Name[cy]=Newid i Penbwrdd 1
+ Name[da]=Skift til desktop 1
++Name[de]=Auf Arbeitsfläche 1 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 1
+ Name[eo]=Al tabulo 1
+ Name[et]=Liikumine 1. töölauale
+@@ -80,6 +83,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 1
+ Name[ro]=Trece în ecranul 1
+ Name[ru]=Перейти на рабочий стол 1
++Name[sr]=Promeni na radnu površinu 1
+ Name[sr at latin]=Promeni na radnu površinu 1
+ Name[sv]=Byt till skrivbord 1
+ Name[ta]=மேல்மேசை 1க்கு மாற்று
+@@ -93,6 +97,7 @@
+ Comment[af]=Virtuele Werkskerm een is gekies
+ Comment[br]=Burev galloudel Unan a zo diuzet
+ Comment[da]=Virtuel desktop én er valgt
++Comment[de]=Arbeitsfläche 1 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η πρώτη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo unua estas elektita
+ Comment[et]=Esimene virtuaalne töölaud on valitud
+@@ -122,6 +127,7 @@
+ Comment[pt_BR]=Área de trabalho virtual um está selecionada
+ Comment[ro]=Ecranul virtual 1 este selectat
+ Comment[ru]=Выбран первый виртуальный рабочий стол
++Comment[sr]=Izabrana je prva virtuelna radna površina
+ Comment[sr at latin]=Izabrana je prva virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord ett är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை ஒன்று தேர்ந்தெடுக்கப்பட்டது
+@@ -141,6 +147,7 @@
+ Name[br]=Gwintañ da vurev 2
+ Name[cy]=Newid i Penbwrdd 2
+ Name[da]=Skift til desktop 2
++Name[de]=Auf Arbeitsfläche 2 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 2
+ Name[eo]=Al tabulo 2
+ Name[et]=Liikumine 2. töölauale
+@@ -169,6 +176,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 2
+ Name[ro]=Trece în ecranul 2
+ Name[ru]=Перейти на рабочий стол 2
++Name[sr]=Promeni na radnu površinu 2
+ Name[sr at latin]=Promeni na radnu površinu 2
+ Name[sv]=Byt till skrivbord 2
+ Name[ta]=மேல்மேசை 2க்கு மாற்று
+@@ -182,6 +190,7 @@
+ Comment[af]=Virtuele Werkskerm twee is gekies
+ Comment[br]=Burev galloudel Daou a zo diuzet
+ Comment[da]=Virtuel desktop to er valgt
++Comment[de]=Arbeitsfläche 2 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η δεύτερη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dua estas elektita
+ Comment[et]=Teine virtuaalne töölaud on valitud
+@@ -211,6 +220,7 @@
+ Comment[pt_BR]=Área de trabalho virtual dois está selecionada
+ Comment[ro]=Ecranul virtual 2 este selectat
+ Comment[ru]=Выбран второй виртуальный рабочий стол
++Comment[sr]=Izabrana je druga virtuelna radna površina
+ Comment[sr at latin]=Izabrana je druga virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord två är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை இரண்டு தேர்ந்தெடுக்கப்பட்டது
+@@ -230,6 +240,7 @@
+ Name[br]=Gwintañ da vurev 3
+ Name[cy]=Newid i Penbwrdd 3
+ Name[da]=Skift til desktop 3
++Name[de]=Auf Arbeitsfläche 3 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 3
+ Name[eo]=Al tabulo 3
+ Name[et]=Liikumine 3. töölauale
+@@ -258,6 +269,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 3
+ Name[ro]=Trece în ecranul 3
+ Name[ru]=Перейти на рабочий стол 3
++Name[sr]=Promeni na radnu površinu 3
+ Name[sr at latin]=Promeni na radnu površinu 3
+ Name[sv]=Byt till skrivbord 3
+ Name[ta]=மேல்மேசை 3க்கு மாற்று
+@@ -271,6 +283,7 @@
+ Comment[af]=Virtuele Werkskerm drie is gekies
+ Comment[br]=Burev galloudel Tri a zo diuzet
+ Comment[da]=Virtuel desktop tre er valgt
++Comment[de]=Arbeitsfläche 3 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η τρίτη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo tria estas elektita
+ Comment[et]=Kolmas virtuaalne töölaud on valitud
+@@ -300,6 +313,7 @@
+ Comment[pt_BR]=Área de trabalho virtual três está selecionada
+ Comment[ro]=Ecranul virtual 3 este selectat
+ Comment[ru]=Выбран третий виртуальный рабочий стол
++Comment[sr]=Izabrana je treća virtuelna radna površina
+ Comment[sr at latin]=Izabrana je treća virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord tre är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை மூன்று தேர்ந்தெடுக்கப்பட்டது
+@@ -319,6 +333,7 @@
+ Name[br]=Gwintañ da vurev 4
+ Name[cy]=Newid i Penbwrdd 4
+ Name[da]=Skift til desktop 4
++Name[de]=Auf Arbeitsfläche 4 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 4
+ Name[eo]=Al tabulo 4
+ Name[et]=Liikumine 4. töölauale
+@@ -347,6 +362,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 4
+ Name[ro]=Trece în ecranul 4
+ Name[ru]=Перейти на рабочий стол 4
++Name[sr]=Promeni na radnu površinu 4
+ Name[sr at latin]=Promeni na radnu površinu 4
+ Name[sv]=Byt till skrivbord 4
+ Name[ta]=மேல்மேசை 4க்கு மாற்று
+@@ -360,6 +376,7 @@
+ Comment[af]=Virtuele Werkskerm vier is gekies
+ Comment[br]=Burev galloudel Pevar a zo diuzet
+ Comment[da]=Virtuel desktop fire er valgt
++Comment[de]=Arbeitsfläche 4 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η τέταρτη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo kvara estas elektita
+ Comment[et]=Neljas virtuaalne töölaud on valitud
+@@ -389,6 +406,7 @@
+ Comment[pt_BR]=Área de trabalho virtual quatro está selecionada
+ Comment[ro]=Ecranul virtual 4 este selectat
+ Comment[ru]=Выбран четвёртый виртуальный рабочий стол
++Comment[sr]=Izabrana je četvrta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je četvrta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord fyra är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை நான்கு தேர்ந்தெடுக்கப்பட்டது
+@@ -408,6 +426,7 @@
+ Name[br]=Gwintañ da vurev 5
+ Name[cy]=Newid i Penbwrdd 5
+ Name[da]=Skift til desktop 5
++Name[de]=Auf Arbeitsfläche 5 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 5
+ Name[eo]=Al tabulo 5
+ Name[et]=Liikumine 5. töölauale
+@@ -436,6 +455,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 5
+ Name[ro]=Trece în ecranul 5
+ Name[ru]=Перейти на рабочий стол 5
++Name[sr]=Promeni na radnu površinu 5
+ Name[sr at latin]=Promeni na radnu površinu 5
+ Name[sv]=Byt till skrivbord 5
+ Name[ta]=மேல்மேசை 5க்கு மாற்று
+@@ -449,6 +469,7 @@
+ Comment[af]=Virtuele Werkskerm vyf is gekies
+ Comment[br]=Burev galloudel Pemp a zo diuzet
+ Comment[da]=Virtuel desktop fem er valgt
++Comment[de]=Arbeitsfläche 5 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η πέμπτη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo kvina estas elektita
+ Comment[et]=Viies virtuaalne töölaud on valitud
+@@ -478,6 +499,7 @@
+ Comment[pt_BR]=Área de trabalho virtual cinco está selecionada
+ Comment[ro]=Ecranul virtual 5 este selectat
+ Comment[ru]=Выбран пятый виртуальный рабочий стол
++Comment[sr]=Izabrana je peta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je peta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord fem är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை ஐந்து தேர்ந்தெடுக்கப்பட்டது
+@@ -497,6 +519,7 @@
+ Name[br]=Gwintañ da vurev 6
+ Name[cy]=Newid i Penbwrdd 6
+ Name[da]=Skift til desktop 6
++Name[de]=Auf Arbeitsfläche 6 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 6
+ Name[eo]=Al tabulo 6
+ Name[et]=Liikumine 6. töölauale
+@@ -525,6 +548,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 6
+ Name[ro]=Trece în ecranul 6
+ Name[ru]=Перейти на рабочий стол 6
++Name[sr]=Promeni na radnu površinu 6
+ Name[sr at latin]=Promeni na radnu površinu 6
+ Name[sv]=Byt till skrivbord 6
+ Name[ta]=மேல்மேசை 6க்கு மாற்று
+@@ -536,7 +560,9 @@
+ Name[zh_TW]=切換到桌面 6
+ Comment=Virtual desktop six is selected
+ Comment[br]=Burev galloudel C'hwec'h a zo diuzet
++Comment[de]=Arbeitsfläche 6 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η έκτη εικονική επιφάνεια εργασίας
++Comment[et]=Kuues virtuaalne töölaud on valitud
+ Comment[ga]=Roghnaíodh deasc fhíorúil a sé
+ Comment[it]=Il desktop virtuale sei è selezionato
+ Comment[ja]=仮想デスクトップ 6 が選択されました
+@@ -566,6 +592,7 @@
+ Name[br]=Gwintañ da vurev 7
+ Name[cy]=Newid i Penbwrdd 7
+ Name[da]=Skift til desktop 7
++Name[de]=Auf Arbeitsfläche 7 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 7
+ Name[eo]=Al tabulo 7
+ Name[et]=Liikumine 7. töölauale
+@@ -594,6 +621,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 7
+ Name[ro]=Trece în ecranul 7
+ Name[ru]=Перейти на рабочий стол 7
++Name[sr]=Promeni na radnu površinu 7
+ Name[sr at latin]=Promeni na radnu površinu 7
+ Name[sv]=Byt till skrivbord 7
+ Name[ta]=மேல்மேசை 7க்கு மாற்று
+@@ -607,6 +635,7 @@
+ Comment[af]=Virtuele Werkskerm sewe is gekies
+ Comment[br]=Burev galloudel Seizh a zo diuzet
+ Comment[da]=Virtuel desktop syv er valgt
++Comment[de]=Arbeitsfläche 7 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η έβδομη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo sepa estas elektita
+ Comment[et]=Seitsmes virtuaalne töölaud on valitud
+@@ -636,6 +665,7 @@
+ Comment[pt_BR]=Área de trabalho virtual sete está selecionada
+ Comment[ro]=Ecranul virtual 7 este selectat
+ Comment[ru]=Выбран седьмой виртуальный рабочий стол
++Comment[sr]=Izabrana je sedma virtuelna radna površina
+ Comment[sr at latin]=Izabrana je sedma virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord sju är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை ஏழு தேர்ந்தெடுக்கப்பட்டது
+@@ -655,6 +685,7 @@
+ Name[br]=Gwintañ da vurev 8
+ Name[cy]=Newid i Penbwrdd 8
+ Name[da]=Skift til desktop 8
++Name[de]=Auf Arbeitsfläche 8 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 8
+ Name[eo]=Al tabulo 8
+ Name[et]=Liikumine 8. töölauale
+@@ -683,6 +714,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 8
+ Name[ro]=Trece în ecranul 8
+ Name[ru]=Перейти на рабочий стол 8
++Name[sr]=Promeni na radnu površinu 8
+ Name[sr at latin]=Promeni na radnu površinu 8
+ Name[sv]=Byt till skrivbord 8
+ Name[ta]=மேல்மேசை 8க்கு மாற்று
+@@ -696,6 +728,7 @@
+ Comment[af]=Virtuele Werkskerm agt is gekies
+ Comment[br]=Burev galloudel Eizh a zo diuzet
+ Comment[da]=Virtuel desktop otte er valgt
++Comment[de]=Arbeitsfläche 8 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η όγδοη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo oka estas elektita
+ Comment[et]=Kaheksas virtuaalne töölaud on valitud
+@@ -725,6 +758,7 @@
+ Comment[pt_BR]=Área de trabalho virtual oito está selecionada
+ Comment[ro]=Ecranul virtual 8 este selectat
+ Comment[ru]=Выбран восьмой виртуальный рабочий стол
++Comment[sr]=Izabrana je osma virtuelna radna površina
+ Comment[sr at latin]=Izabrana je osma virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord åtta är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை எட்டு தேர்ந்தெடுக்கப்பட்டது
+@@ -743,6 +777,7 @@
+ Name[be]=Паказаць працоўны стол 9
+ Name[br]=Gwintañ da vurev 9
+ Name[da]=Skift til desktop 9
++Name[de]=Auf Arbeitsfläche 9 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 9
+ Name[eo]=Al tabulo 9
+ Name[et]=Liikumine 9. töölauale
+@@ -770,6 +805,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 9
+ Name[ro]=Trece în ecranul 9
+ Name[ru]=Перейти на рабочий стол 9
++Name[sr]=Promeni na radnu površinu 9
+ Name[sr at latin]=Promeni na radnu površinu 9
+ Name[sv]=Byt till skrivbord 9
+ Name[ta]=மேல்மேசை 9க்கு மாற்று
+@@ -782,6 +818,7 @@
+ Comment[af]=Virtuele Werkskerm nege is gekies
+ Comment[br]=Burev galloudel Nav a zo dibabet
+ Comment[da]=Virtuel desktop ni er valgt
++Comment[de]=Arbeitsfläche 9 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η ένατη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo naŭa estas elektita
+ Comment[et]=Üheksas virtuaalne töölaud on valitud
+@@ -810,6 +847,7 @@
+ Comment[pt_BR]=Área de trabalho virtual nove está selecionada
+ Comment[ro]=Ecranul virtual 9 este selectat
+ Comment[ru]=Выбран девятый виртуальный рабочий стол
++Comment[sr]=Izabrana je deveta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je deveta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord nio är valt
+ Comment[tr]=Sanal masaüstü dokuz seçili
+@@ -825,6 +863,7 @@
+ Name[be]=Паказаць працоўны стол 10
+ Name[br]=Gwintañ da vurev 10
+ Name[da]=Skift til desktop 10
++Name[de]=Auf Arbeitsfläche 10 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 10
+ Name[eo]=Al tabulo 10
+ Name[et]=Liikumine 10. töölauale
+@@ -852,6 +891,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 10
+ Name[ro]=Trece în ecranul 10
+ Name[ru]=Перейти на рабочий стол 10
++Name[sr]=Promeni na radnu površinu 10
+ Name[sr at latin]=Promeni na radnu površinu 10
+ Name[sv]=Byt till skrivbord 10
+ Name[ta]=மேல்மேசை 10க்கு மாற்று
+@@ -864,6 +904,7 @@
+ Comment[af]=Virtuele Werkskerm tien is gekies
+ Comment[br]=Burev galloudel Dek a zo dibabet
+ Comment[da]=Virtuel desktop ti er valgt
++Comment[de]=Arbeitsfläche 10 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η δέκατη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo deka estas elektita
+ Comment[et]=Kümnes virtuaalne töölaud on valitud
+@@ -892,6 +933,7 @@
+ Comment[pt_BR]=Área de trabalho virtual dez está selecionada
+ Comment[ro]=Ecranul virtual 10 este selectat
+ Comment[ru]=Выбран десятый виртуальный рабочий стол
++Comment[sr]=Izabrana je deseta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je deseta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord tio är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பத்து தேர்ந்தெடுக்கப்பட்டது
+@@ -908,6 +950,7 @@
+ Name[be]=Паказаць працоўны стол 11
+ Name[br]=Gwintañ da vurev 11
+ Name[da]=Skift til desktop 11
++Name[de]=Auf Arbeitsfläche 11 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 11
+ Name[eo]=Al tabulo 11
+ Name[et]=Liikumine 11. töölauale
+@@ -935,6 +978,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 11
+ Name[ro]=Trece în ecranul 11
+ Name[ru]=Перейти на рабочий стол 11
++Name[sr]=Promeni na radnu površinu 11
+ Name[sr at latin]=Promeni na radnu površinu 11
+ Name[sv]=Byt till skrivbord 11
+ Name[ta]=மேல்மேசை 11க்கு மாற்று
+@@ -947,6 +991,7 @@
+ Comment[af]=Virtuele Werkskerm elf is gekies
+ Comment[br]=Burev galloudel Unnek a zo dibabet
+ Comment[da]=Virtuel desktop elleve er valgt
++Comment[de]=Arbeitsfläche 11 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η ενδέκατη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek unua estas elektita
+ Comment[et]=Üheteistkümnes virtuaalne töölaud on valitud
+@@ -975,6 +1020,7 @@
+ Comment[pt_BR]=Área de trabalho virtual onze está selecionada
+ Comment[ro]=Ecranul virtual 11 este selectat
+ Comment[ru]=Выбран одиннадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je jedanaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je jedanaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord elva är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதினொன்று தேர்ந்தெடுக்கப்பட்டது
+@@ -991,6 +1037,7 @@
+ Name[be]=Паказаць працоўны стол 12
+ Name[br]=Gwintañ da vurev 12
+ Name[da]=Skift til desktop 12
++Name[de]=Auf Arbeitsfläche 12 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 12
+ Name[eo]=Al tabulo 12
+ Name[et]=Liikumine 12. töölauale
+@@ -1018,6 +1065,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 12
+ Name[ro]=Trece în ecranul 12
+ Name[ru]=Перейти на рабочий стол 12
++Name[sr]=Promeni na radnu površinu 12
+ Name[sr at latin]=Promeni na radnu površinu 12
+ Name[sv]=Byt till skrivbord 12
+ Name[ta]=மேல்மேசை 12க்கு மாற்று
+@@ -1030,6 +1078,7 @@
+ Comment[af]=Virtuele Werkskerm twaalf is gekies
+ Comment[br]=Burev galloudel daouzek a zo dibabet
+ Comment[da]=Virtuel desktop tolv er valgt
++Comment[de]=Arbeitsfläche 12 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η δωδέκατη εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek dua estas elektita
+ Comment[et]=Kaheteistkümnes virtuaalne töölaud on valitud
+@@ -1058,6 +1107,7 @@
+ Comment[pt_BR]=Área de trabalho virtual doze está selecionada
+ Comment[ro]=Ecranul virtual 12 este selectat
+ Comment[ru]=Выбран двенадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je dvanaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je dvanaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord tolv är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பன்னிரெண்டு தேர்ந்தெடுக்கப்பட்டது
+@@ -1074,6 +1124,7 @@
+ Name[be]=Паказаць працоўны стол 13
+ Name[br]=Gwintañ da vurev 13
+ Name[da]=Skift til desktop 13
++Name[de]=Auf Arbeitsfläche 13 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 13
+ Name[eo]=Al tabulo 13
+ Name[et]=Liikumine 13. töölauale
+@@ -1101,6 +1152,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 13
+ Name[ro]=Trece în ecranul 13
+ Name[ru]=Перейти на рабочий стол 13
++Name[sr]=Promeni na radnu površinu 13
+ Name[sr at latin]=Promeni na radnu površinu 13
+ Name[sv]=Byt till skrivbord 13
+ Name[ta]=மேல்மேசை 13க்கு மாற்று
+@@ -1113,6 +1165,7 @@
+ Comment[af]=Virtuele Werkskerm dertien is gekies
+ Comment[br]=Burev galloudel trizek a zo dibabet
+ Comment[da]=Virtuel desktop tretten er valgt
++Comment[de]=Arbeitsfläche 13 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 13η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek tria estas elektita
+ Comment[et]=Kolmeteistkümnes virtuaalne töölaud on valitud
+@@ -1141,6 +1194,7 @@
+ Comment[pt_BR]=Área de trabalho virtual treze está selecionada
+ Comment[ro]=Ecranul virtual 13 este selectat
+ Comment[ru]=Выбран тринадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je trinaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je trinaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord tretton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதின்மூன்று தேர்ந்தெடுக்கப்பட்டது
+@@ -1157,6 +1211,7 @@
+ Name[be]=Паказаць працоўны стол 14
+ Name[br]=Gwintañ da vurev 14
+ Name[da]=Skift til desktop 14
++Name[de]=Auf Arbeitsfläche 14 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 14
+ Name[eo]=Al tabulo 14
+ Name[et]=Liikumine 14. töölauale
+@@ -1184,6 +1239,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 14
+ Name[ro]=Trece în ecranul 14
+ Name[ru]=Перейти на рабочий стол 14
++Name[sr]=Promeni na radnu površinu 14
+ Name[sr at latin]=Promeni na radnu površinu 14
+ Name[sv]=Byt till skrivbord 14
+ Name[ta]=மேல்மேசை 14க்கு மாற்று
+@@ -1196,6 +1252,7 @@
+ Comment[af]=Virtuele Werkskerm veertien is gekies
+ Comment[br]=Burev galloudel pevarezk a zo dibabet
+ Comment[da]=Virtuel desktop fjorten er valgt
++Comment[de]=Arbeitsfläche 14 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 14η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek kvara estas elektita
+ Comment[et]=Neljateistkümnes virtuaalne töölaud on valitud
+@@ -1224,6 +1281,7 @@
+ Comment[pt_BR]=Área de trabalho virtual quatorze está selecionada
+ Comment[ro]=Ecranul virtual 14 este selectat
+ Comment[ru]=Выбран четырнадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je četrnaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je četrnaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord fjorton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதினான்கு தேர்ந்தெடுக்கப்பட்டது
+@@ -1240,6 +1298,7 @@
+ Name[be]=Паказаць працоўны стол 15
+ Name[br]=Gwintañ da vurev 15
+ Name[da]=Skift til desktop 15
++Name[de]=Auf Arbeitsfläche 15 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 15
+ Name[eo]=Al tabulo 15
+ Name[et]=Liikumine 15. töölauale
+@@ -1267,6 +1326,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 15
+ Name[ro]=Trece în ecranul 15
+ Name[ru]=Перейти на рабочий стол 15
++Name[sr]=Promeni na radnu površinu 15
+ Name[sr at latin]=Promeni na radnu površinu 15
+ Name[sv]=Byt till skrivbord 15
+ Name[ta]=மேல்மேசை 15க்கு மாற்று
+@@ -1279,6 +1339,7 @@
+ Comment[af]=Virtuele Werkskerm vyftien is gekies
+ Comment[br]=Burev galloudel pempzek a zo dibabet
+ Comment[da]=Virtuel desktop femten er valgt
++Comment[de]=Arbeitsfläche 15 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 15η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek kvina estas elektita
+ Comment[et]=Viieteistkümnes virtuaalne töölaud on valitud
+@@ -1307,6 +1368,7 @@
+ Comment[pt_BR]=Área de trabalho virtual quinze está selecionada
+ Comment[ro]=Ecranul virtual 15 este selectat
+ Comment[ru]=Выбран пятнадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je petnaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je petnaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord femton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதினைந்து தேர்ந்தெடுக்கப்பட்டது
+@@ -1323,6 +1385,7 @@
+ Name[be]=Паказаць працоўны стол 16
+ Name[br]=Gwintañ da vurev 16
+ Name[da]=Skift til desktop 16
++Name[de]=Auf Arbeitsfläche 16 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 16
+ Name[eo]=Al tabulo 16
+ Name[et]=Liikumine 16. töölauale
+@@ -1350,6 +1413,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 16
+ Name[ro]=Trece în ecranul 16
+ Name[ru]=Перейти на рабочий стол 16
++Name[sr]=Promeni na radnu površinu 16
+ Name[sr at latin]=Promeni na radnu površinu 16
+ Name[sv]=Byt till skrivbord 16
+ Name[ta]=மேல்மேசை 116க்கு மாற்று
+@@ -1362,6 +1426,7 @@
+ Comment[af]=Virtuele Werkskerm sestien is gekies
+ Comment[br]=Burev galloudel c'hwezek a zo dibabet
+ Comment[da]=Virtuel desktop seksten er valgt
++Comment[de]=Arbeitsfläche 16 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 16η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek sesa estas elektita
+ Comment[et]=Kuueteistkümnes virtuaalne töölaud on valitud
+@@ -1390,6 +1455,7 @@
+ Comment[pt_BR]=Área de trabalho virtual dezesseis está selecionada
+ Comment[ro]=Ecranul virtual 17 este selectat
+ Comment[ru]=Выбран шестнадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je šesnaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je šesnaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord sexton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதினாறு தேர்ந்தெடுக்கப்பட்டது
+@@ -1406,6 +1472,7 @@
+ Name[be]=Паказаць працоўны стол 17
+ Name[br]=Gwintañ da vurev 17
+ Name[da]=Skift til desktop 17
++Name[de]=Auf Arbeitsfläche 17 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 17
+ Name[eo]=Al tabulo 17
+ Name[et]=Liikumine 17. töölauale
+@@ -1433,6 +1500,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 17
+ Name[ro]=Trece în ecranul 17
+ Name[ru]=Перейти на рабочий стол 17
++Name[sr]=Promeni na radnu površinu 17
+ Name[sr at latin]=Promeni na radnu površinu 17
+ Name[sv]=Byt till skrivbord 17
+ Name[ta]=மேல்மேசை 17க்கு மாற்று
+@@ -1445,6 +1513,7 @@
+ Comment[af]=Virtuele Werkskerm sewentien is gekies
+ Comment[br]=Burev galloudel seitek a zo dibabet
+ Comment[da]=Virtuel desktop sytten er valgt
++Comment[de]=Arbeitsfläche 17 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 17η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek sepa estas elektita
+ Comment[et]=Seitsmeteistkümnes virtuaalne töölaud on valitud
+@@ -1473,6 +1542,7 @@
+ Comment[pt_BR]=Área de trabalho virtual dezessete está selecionada
+ Comment[ro]=Ecranul virtual 17 este selectat
+ Comment[ru]=Выбран семнадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je sedamnaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je sedamnaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord sjutton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதினேழு தேர்ந்தெடுக்கப்பட்டது
+@@ -1489,6 +1559,7 @@
+ Name[be]=Паказаць працоўны стол 18
+ Name[br]=Gwintañ da vurev 18
+ Name[da]=Skift til desktop 18
++Name[de]=Auf Arbeitsfläche 18 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 18
+ Name[eo]=Al tabulo 18
+ Name[et]=Liikumine 18. töölauale
+@@ -1516,6 +1587,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 18
+ Name[ro]=Trece în ecranul 18
+ Name[ru]=Перейти на рабочий стол 18
++Name[sr]=Promeni na radnu površinu 18
+ Name[sr at latin]=Promeni na radnu površinu 18
+ Name[sv]=Byt till skrivbord 18
+ Name[ta]=மேல்மேசை 18க்கு மாற்று
+@@ -1528,9 +1600,10 @@
+ Comment[af]=Virtuele Werkskerm agtien is gekies
+ Comment[br]=Burev galloudel triwec'h a zo dibabet
+ Comment[da]=Virtuel desktop atten er valgt
++Comment[de]=Arbeitsfläche 18 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 18η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek oka estas elektita
+-Comment[et]=Kaheksateiskümnes virtuaalne töölaud on valitud
++Comment[et]=Kaheksateistkümnes virtuaalne töölaud on valitud
+ Comment[eu]=Hamazortzigarren mahaigain birtuala hautatua dago
+ Comment[fi]=Virtuaalityöpöytä kahdeksantoista on valittu
+ Comment[fr]=Le bureau virtuel 18 est sélectionné
+@@ -1556,6 +1629,7 @@
+ Comment[pt_BR]=Área de trabalho virtual dezoito está selecionada
+ Comment[ro]=Ecranul virtual 18 este selectat
+ Comment[ru]=Выбран восемнадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je osamnaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je osamnaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord arton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பதினெட்டு தேர்ந்தெடுக்கப்பட்டது
+@@ -1572,6 +1646,7 @@
+ Name[be]=Паказаць працоўны стол 19
+ Name[br]=Gwintañ da vurev 19
+ Name[da]=Skift til desktop 19
++Name[de]=Auf Arbeitsfläche 19 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 19
+ Name[eo]=Al tabulo 19
+ Name[et]=Liikumine 19. töölauale
+@@ -1599,6 +1674,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 19
+ Name[ro]=Trece în ecranul 19
+ Name[ru]=Перейти на рабочий стол 19
++Name[sr]=Promeni na radnu površinu 19
+ Name[sr at latin]=Promeni na radnu površinu 19
+ Name[sv]=Byt till skrivbord 19
+ Name[ta]=மேல்மேசை 19க்கு மாற்று
+@@ -1611,6 +1687,7 @@
+ Comment[af]=Virtuele Werkskerm negentien is gekies
+ Comment[br]=Burev galloudel naontek a zo dibabet
+ Comment[da]=Virtuel desktop nitten er valgt
++Comment[de]=Arbeitsfläche 19 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 19η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo dek naŭa estas elektita
+ Comment[et]=Üheksateistkümnes virtuaalne töölaud on valitud
+@@ -1639,6 +1716,7 @@
+ Comment[pt_BR]=Área de trabalho virtual dezenove está selecionada
+ Comment[ro]=Ecranul virtual 19 este selectat
+ Comment[ru]=Выбран девятнадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je devetnaesta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je devetnaesta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord nitton är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை பத்தொன்பது தேர்ந்தெடுக்கப்பட்டது
+@@ -1655,6 +1733,7 @@
+ Name[be]=Паказаць працоўны стол 20
+ Name[br]=Gwintañ da vurev 20
+ Name[da]=Skift til desktop 20
++Name[de]=Auf Arbeitsfläche 20 wechseln
+ Name[el]=Μετάβαση στην επιφάνεια εργασίας 20
+ Name[eo]=Al tabulo 20
+ Name[et]=Liikumine 20. töölauale
+@@ -1682,6 +1761,7 @@
+ Name[pt_BR]=Alternar para Área de Trabalho 20
+ Name[ro]=Trece în ecranul 20
+ Name[ru]=Перейти на рабочий стол 20
++Name[sr]=Prelaz na radnu površinu 20
+ Name[sr at latin]=Prelaz na radnu površinu 20
+ Name[sv]=Byt till skrivbord 20
+ Name[ta]=மேல்மேசை 20க்கு மாற்று
+@@ -1694,6 +1774,7 @@
+ Comment[af]=Virtuele Werkskerm twintig is gekies
+ Comment[br]=Burev galloudel warn-ugent a zo dibabet
+ Comment[da]=Virtuel desktop tyve er valgt
++Comment[de]=Arbeitsfläche 20 ist ausgewählt
+ Comment[el]=Επιλέχθηκε η 20η εικονική επιφάνεια εργασίας
+ Comment[eo]=Tabulo du deka estas elektita
+ Comment[et]=Kahekümnes virtuaalne töölaud on valitud
+@@ -1722,6 +1803,7 @@
+ Comment[pt_BR]=Área de trabalho virtual vinte está selecionada
+ Comment[ro]=Ecranul virtual 20 este selectat
+ Comment[ru]=Выбран двадцатый виртуальный рабочий стол
++Comment[sr]=Izabrana je dvadeseta virtuelna radna površina
+ Comment[sr at latin]=Izabrana je dvadeseta virtuelna radna površina
+ Comment[sv]=Virtuellt skrivbord tjugo är valt
+ Comment[ta]=மெய்நிகர் மேல்மேசை இருபது தேர்ந்தெடுக்கப்பட்டது
+@@ -1735,12 +1817,15 @@
+ [Event/activate]
+ Name=Activate Window
+ Name[be]=Актывізаваць акно
++Name[de]=Fenster aktivieren
+ Name[el]=Ενεργοποίηση παραθύρου
++Name[et]=Akna aktiveerimine
+ Name[fy]=Finster aktivearje
+ Name[ga]=Gníomhachtaigh Fuinneog
+ Name[it]=Attiva finestra
+ Name[ja]=ウィンドウがアクティブに
+ Name[km]=ធ្វើ​ឲ្យ​បង្អួច​សកម្ម
++Name[ko]=창 활성화됨
+ Name[lt]=Suaktyvinti langą
+ Name[nb]=Aktiver vindu
+ Name[nds]=Finster aktiev maken
+@@ -1756,6 +1841,7 @@
+ Comment[af]='n Ander venster is geaktiveer
+ Comment[br]=Ur prenestr all a zo dihunet
+ Comment[da]=Et andet vindue er aktiveret
++Comment[de]=Ein anderes Fenster wird aktiviert
+ Comment[el]=Κάποιο άλλο παράθυρο ενεργοποιήθηκε
+ Comment[eo]=Alia fenestro aktiviĝis
+ Comment[et]=Teine aken on aktiveeritud
+@@ -1771,6 +1857,7 @@
+ Comment[ja]=他のウィンドウがアクティブになりました
+ Comment[ka]=სხვა ფანჯარაა აქტიური
+ Comment[km]=បាន​ធ្វើ​ឲ្យ​​បង្អួច​មួយ​ផ្សេង​ទៀត​សកម្ម
++Comment[ko]=또 다른 창이 활성화됨
+ Comment[lt]=Suaktyvintas kitas langas
+ Comment[lv]=Cits Logs jau ir aktivizēts
+ Comment[mk]=Активиран е друг прозорец
+@@ -1784,6 +1871,7 @@
+ Comment[pt_BR]=Outra janela está ativada
+ Comment[ro]=A fost activată altă fereastră
+ Comment[ru]=Активировано другое окно
++Comment[sr]=Aktiviran je drugi prozor
+ Comment[sr at latin]=Aktiviran je drugi prozor
+ Comment[sv]=Ett annat fönster är aktiverat
+ Comment[ta]=மற்றொரு சாளரம் செயலாக்கப்படது
+@@ -1862,12 +1950,15 @@
+ Name[zh_TW]=新視窗
+ Comment=New window
+ Comment[be]=Новае акно
++Comment[de]=Neues Fenster
+ Comment[el]=Νέο παράθυρο
++Comment[et]=Uus aken
+ Comment[fy]=Nij finster
+ Comment[ga]=Fuinneog nua
+ Comment[it]=Nuova finestra
+ Comment[ja]=新規ウィンドウ
+ Comment[km]=បង្អួច​ថ្មី
++Comment[ko]=새 창
+ Comment[lt]=Naujas langas
+ Comment[nb]=Nytt vindu
+ Comment[nds]=Nieg Finster
+@@ -1886,10 +1977,13 @@
+ [Event/delete]
+ Name=Delete Window
+ Name[be]=Выдаліць акно
++Name[de]=Fenster entfernen
+ Name[el]=Διαγραφή παραθύρου
++Name[et]=Akna kustutamine
+ Name[ga]=Scrios Fuinneog
+ Name[ja]=ウィンドウを削除
+ Name[km]=លុប​បង្អួច
++Name[ko]=창 삭제
+ Name[lt]=Pašalinti langą
+ Name[nb]=Slett vindu
+ Name[nds]=Finster wegdoon
+@@ -1906,6 +2000,7 @@
+ Comment[be]=Выдаліць акно
+ Comment[br]=Lemel ur prenestr
+ Comment[da]=Slet vindue
++Comment[de]=Fenster entfernen
+ Comment[el]=Διαγραφή παραθύρου
+ Comment[eo]=Forigu fenestron
+ Comment[et]=Akna kustutamine
+@@ -1934,6 +2029,7 @@
+ Comment[pt_BR]=Apagar janela
+ Comment[ro]=Închide fereastra
+ Comment[ru]=Удалить окно
++Comment[sr]=Prozor se briše
+ Comment[sr at latin]=Prozor se briše
+ Comment[sv]=Ta bort fönster
+ Comment[ta]=சாளரத்தை நீக்கு
+@@ -1947,12 +2043,14 @@
+ Name=Window Close
+ Name[be]=Закрыць акно
+ Name[br]=Serriñ ar Prenestr
++Name[de]=Fenster schließen
+ Name[el]=Κλείσιμο παραθύρου
++Name[et]=Aken sulgub
+ Name[fy]=Finster slute
+ Name[ga]=Dún fuinneog
+ Name[it]=Chiusura finestra
+ Name[ja]=ウィンドウを閉じる
+-Name[km]=ការ​បិទ​បង្អួច
++Name[km]=បិទ​បង្អួច
+ Name[lt]=Uždaryti langą
+ Name[nb]=Vindu lukkes
+ Name[nds]=Finster tomaken
+@@ -1970,6 +2068,7 @@
+ Comment[be]=Акно закрываецца
+ Comment[br]=Sarret eo ur prenestr
+ Comment[da]=Et vindue lukker
++Comment[de]=Ein Fenster wird geschlossen
+ Comment[el]=Ένα παράθυρο κλείνει
+ Comment[eo]=Fenestro fermiĝas
+ Comment[et]=Aken sulgub
+@@ -1999,6 +2098,7 @@
+ Comment[pt_BR]=Uma janela fecha
+ Comment[ro]=A fost închisă o fereastră
+ Comment[ru]=Окно закрывается
++Comment[sr]=Prozor se zatvara
+ Comment[sr at latin]=Prozor se zatvara
+ Comment[sv]=Ett fönster stängs
+ Comment[ta]=சாளரம் மூடுகிறது
+@@ -2017,6 +2117,7 @@
+ Name[br]=Rollañ ar prenestr
+ Name[cy]=Rholio'r Ffenestr i Fyny
+ Name[da]=Skyg vindue op
++Name[de]=Fenster einklappen (Fensterheber)
+ Name[el]=Τύλιγμα παραθύρου
+ Name[eo]=Fenestro supren volviĝas
+ Name[et]=Akna varjamine
+@@ -2043,6 +2144,7 @@
+ Name[pt_BR]=Enrolar Janela
+ Name[ro]=Strînge fereastra
+ Name[ru]=Свернуть в заголовок
++Name[sr]=Prozor se namotava
+ Name[sr at latin]=Prozor se namotava
+ Name[sv]=Fönster rullas upp
+ Name[ta]=சாளர நிழல் ஏற்று
+@@ -2055,6 +2157,7 @@
+ Comment[af]='n Venster se skaduwee is geaktiveer
+ Comment[br]=Rollet eo ur prenestr
+ Comment[da]=Et vindue skygges op
++Comment[de]=Ein Fenster wird mittels Fensterheber eingeklappt
+ Comment[el]=Ένα παράθυρο έχει τυλιχθεί
+ Comment[eo]=Fenestro volviĝis supren
+ Comment[et]=Aken rullitakse kokku
+@@ -2080,6 +2183,7 @@
+ Comment[pt_BR]=Uma janela é enrolada
+ Comment[ro]=O fereastră s-a strîns
+ Comment[ru]=Окно свёрнуто в заголовок
++Comment[sr]=Prozor je namotan
+ Comment[sr at latin]=Prozor je namotan
+ Comment[sv]=Ett fönster rullas upp
+ Comment[ta]=சாளரம் நிழலிடப்பட்டுள்ளது.
+@@ -2097,6 +2201,7 @@
+ Name[br]=Dirollañ ar Prenestr
+ Name[cy]=Rholio'r Ffenestr i Lawr
+ Name[da]=Skyg vindue ned
++Name[de]=Fenster aufklappen (Fensterheber)
+ Name[el]=Ξετύλιγμα παραθύρου
+ Name[eo]=Fenestro malsupren volviĝas
+ Name[et]=Akna taasnäitamine
+@@ -2123,6 +2228,7 @@
+ Name[pt_BR]=Desenrolar Janela
+ Name[ro]=Derulează fereastra
+ Name[ru]=Развернуть из заголовка
++Name[sr]=Prozor se odmotava
+ Name[sr at latin]=Prozor se odmotava
+ Name[sv]=Fönster rullas ner
+ Name[ta]=சாளர நிழல் இறக்கு
+@@ -2135,6 +2241,7 @@
+ Comment[af]='n Venster se skaduwee is gedeaktiveer
+ Comment[br]=Dirollet eo ur prenestr
+ Comment[da]=Et vindue skygges ned
++Comment[de]=Ein Fenster wird mittels Fensterheber ausgeklappt
+ Comment[el]=Ένα παράθυρο έχει ξετυλιχθεί
+ Comment[eo]=Fenestro volviĝis malsupren
+ Comment[et]=Aken rullitakse lahti
+@@ -2160,6 +2267,7 @@
+ Comment[pt_BR]=Uma janela é desenrolada
+ Comment[ro]=O fereastră s-a derulat
+ Comment[ru]=Окно развёрнуто из заголовка
++Comment[sr]=Prozor je odmotan
+ Comment[sr at latin]=Prozor je odmotan
+ Comment[sv]=Ett fönster rullas ner
+ Comment[ta]=சாளரமொன்று நிழலிடப்பட்டது
+@@ -2177,6 +2285,7 @@
+ Name[br]=Kilbleg ar prenestr
+ Name[cy]=Lleihau Ffenestr
+ Name[da]=Minimér vindue
++Name[de]=Fenster minimieren
+ Name[el]=Ελαχιστοποίηση παραθύρου
+ Name[en_GB]=Window Minimise
+ Name[eo]=Fenestro minimumiĝas
+@@ -2192,7 +2301,7 @@
+ Name[is]=Glugga lágmarkað
+ Name[ja]=ウィンドウ最小化
+ Name[ka]=ფანჯრის მინიმიზება
+-Name[km]=បង្អួច​បង្រួម​អប្បបរមា
++Name[km]=​បង្រួម​បង្អួច​អប្បបរមា
+ Name[lt]=Sumažinti langą
+ Name[lv]=Minimizet logu
+ Name[mk]=Спушти прозорец
+@@ -2205,6 +2314,7 @@
+ Name[pt_BR]=Minimizar Janela
+ Name[ro]=Minimizează fereastra
+ Name[ru]=Минимизация окна
++Name[sr]=Minimizacija prozora
+ Name[sr at latin]=Minimizacija prozora
+ Name[sv]=Fönster minimeras
+ Name[ta]=சாளரத்தைப் சிறிதாக்கு
+@@ -2218,6 +2328,7 @@
+ Comment[be]=Акно згорнута
+ Comment[br]=Kilbleget eo ur prenestr
+ Comment[da]=Et vindue minimeres
++Comment[de]=Ein Fenster wird minimiert
+ Comment[el]=Ένα παράθυρο ελαχιστοποιήθηκε
+ Comment[en_GB]=A window is minimised
+ Comment[eo]=Fenestro minimumiĝas
+@@ -2233,7 +2344,7 @@
+ Comment[is]=Gluggi er lágmarkaður
+ Comment[ja]=ウィンドウが最小化されました
+ Comment[ka]=ფანჯარა მინიმიზირებულია
+-Comment[km]=បង្រួម​បង្អួច​អប្បបរមា
++Comment[km]=បង្អួច​ត្រូវ​បាន​បង្រួម​អប្បបរមា
+ Comment[lt]=Langas sumažintas
+ Comment[lv]=Logs ir Minimizēts
+ Comment[mk]=Прозорецот се спушта
+@@ -2246,6 +2357,7 @@
+ Comment[pt_BR]=Uma janela é minimizada
+ Comment[ro]=O fereastră a fost minimizată
+ Comment[ru]=Окно минимизировано
++Comment[sr]=Prozor je minimizovan
+ Comment[sr at latin]=Prozor je minimizovan
+ Comment[sv]=Ett fönster minimeras
+ Comment[ta]=சாளரம் சிறிதாக்கப்பட்டுள்ளது
+@@ -2263,6 +2375,7 @@
+ Name[af]=Venster nie meer geminimeer
+ Name[cy]=Dad-leihau Ffenestr
+ Name[da]=Afminimér vindue
++Name[de]=Fenster wiederherstellen
+ Name[el]=Επαναφορά παραθύρου από ελαχιστοποίηση
+ Name[en_GB]=Window Unminimise
+ Name[eo]=Fenestro neminimumiĝas
+@@ -2290,6 +2403,7 @@
+ Name[pt_BR]=Restaurar Janela
+ Name[ro]=Reface fereastra
+ Name[ru]=Восстановление размеров окна
++Name[sr]=Prozor se obnavlja posle minimizacije
+ Name[sr at latin]=Prozor se obnavlja posle minimizacije
+ Name[sv]=Fönsterminimering tas bort
+ Name[ta]=சாளர சிறிதாக்காதே
+@@ -2301,6 +2415,7 @@
+ Comment[af]='n Venster is herstel
+ Comment[br]=Assavet eo ur prenestr
+ Comment[da]=Et vindue genetableres
++Comment[de]=Ein Fenster wird wiederhergestellt
+ Comment[el]=Ένα παράθυρο επανήλθε από ελαχιστοποίηση
+ Comment[eo]=Fenestro reaperas
+ Comment[et]=Aken on taastatud
+@@ -2327,6 +2442,7 @@
+ Comment[pt_BR]=Uma janela é restaurada
+ Comment[ro]=O fereastră a fost restaurată
+ Comment[ru]=Размер окна восстановлен
++Comment[sr]=Prozor je obnovljen
+ Comment[sr at latin]=Prozor je obnovljen
+ Comment[sv]=Ett fönster återställs
+ Comment[ta]=சாளரமொன்று மீளமைக்கப்பட்டது
+@@ -2345,6 +2461,7 @@
+ Name[br]=Astenn ar Prenestr
+ Name[cy]=Ehangu Ffenestr
+ Name[da]=Maksimér vindue
++Name[de]=Fenster maximieren
+ Name[el]=Μεγιστοποίηση παραθύρου
+ Name[en_GB]=Window Maximise
+ Name[eo]=Fenestro maksimumiĝas
+@@ -2362,6 +2479,7 @@
+ Name[ja]=ウィンドウ最大化
+ Name[ka]=ფანჯრის მახსიმიზება
+ Name[km]=បង្អួច​ពង្រីក​អតិបរមា
++Name[ko]=창 최대화
+ Name[lt]=Išdidinti langą
+ Name[lv]=Maksimizēt logu
+ Name[mk]=Рашири прозорец
+@@ -2374,6 +2492,7 @@
+ Name[pt_BR]=Maximizar Janela
+ Name[ro]=Maximizează fereastra
+ Name[ru]=Распахнуть окно
++Name[sr]=Prozor se maksimizuje
+ Name[sr at latin]=Prozor se maksimizuje
+ Name[sv]=Fönster maximeras
+ Name[ta]=சாளரத்தைப் பெரிதாக்கு
+@@ -2388,6 +2507,7 @@
+ Comment[be]=Акно разгорнута
+ Comment[br]=Astennet eo ur prenestr
+ Comment[da]=Et vindue maksimeres
++Comment[de]=Ein Fenster wird maximiert
+ Comment[el]=Ένα παράθυρο μεγιστοποιήθηκε
+ Comment[en_GB]=A window is maximised
+ Comment[eo]=Fenestro maksimumiĝas
+@@ -2403,7 +2523,8 @@
+ Comment[is]=Gluggi er hámarkaður
+ Comment[ja]=ウィンドウが最大化されました
+ Comment[ka]=ფანჯარა მაქსიმიზირებულია
+-Comment[km]=ពង្រីក​អតិបរមា​បង្អួច
++Comment[km]=ពង្រីក​បង្អួច​អតិបរមា​
++Comment[ko]=창이 최대화됨
+ Comment[lt]=Langas išdidintas
+ Comment[lv]=Logs ir Maksimizēts
+ Comment[mk]=Прозорецот се раширува
+@@ -2416,6 +2537,7 @@
+ Comment[pt_BR]=Uma janela é maximizada
+ Comment[ro]=O fereastră a fost maximizată
+ Comment[ru]=Окно распахнуто на весь экран
++Comment[sr]=Prozor je maksimizovan
+ Comment[sr at latin]=Prozor je maksimizovan
+ Comment[sv]=Ett fönster maximeras
+ Comment[ta]=சாளரம் பெரிதாக்கப்பட்டுள்ளது
+@@ -2434,6 +2556,7 @@
+ Name[br]=Krennañ ar Prenestr
+ Name[cy]=Dad_ehangu Ffenestr
+ Name[da]=Afmaksimér vindue
++Name[de]=Fenstermaximierung aufheben
+ Name[el]=Επαναφορά παραθύρου από μεγιστοποίηση
+ Name[en_GB]=Window Unmaximise
+ Name[eo]=Fenestro nemaksimumiĝas
+@@ -2450,6 +2573,7 @@
+ Name[ja]=ウィンドウ最大化解除
+ Name[ka]=ფანჯრის ზომა აღდგენილია
+ Name[km]=បង្អួច​មិន​ពង្រីក​អតិបរមា
++Name[ko]=창 최대화 취소
+ Name[lt]=Sumažinti langą
+ Name[lv]=Loga Atmaksimizēšana
+ Name[mk]=Одрашири прозорец
+@@ -2462,6 +2586,7 @@
+ Name[pt_BR]=Restaurar Janela
+ Name[ro]=Reface fereastra
+ Name[ru]=Восстановить размер окна
++Name[sr]=Prozor se obnavlja posle maksimizovanja
+ Name[sr at latin]=Prozor se obnavlja posle maksimizovanja
+ Name[sv]=Fönstermaximering tas bort
+ Name[ta]=சாளரத்தை பெரிதாக்காதே
+@@ -2474,6 +2599,7 @@
+ Comment[af]='n Venster het sy maksimisering verloor
+ Comment[br]=Koll a ra ur prenestr e astenn
+ Comment[da]=Et vindue afmaksimeres
++Comment[de]=Ein Fenster ist nicht mehr maximiert
+ Comment[el]=Ένα παράθυρο επανέρχεται από μεγιστοποίηση
+ Comment[en_GB]=A window loses maximisation
+ Comment[eo]=Fenestro nemaksimumiĝis
+@@ -2490,6 +2616,7 @@
+ Comment[ja]=ウィンドウの最大化が解除されました
+ Comment[ka]=ფანჯარა აღარაა მაქსიმიზირებული
+ Comment[km]=បង្អួច​បាត់​ការ​ពង្រីក​អតិបរមា
++Comment[ko]=창 최대화가 취소됨
+ Comment[lt]=Langas prarado išdidinimą
+ Comment[lv]=Logs Zaudējis Maksimizāciju
+ Comment[mk]=Прозорецот го губи раширувањето
+@@ -2502,6 +2629,7 @@
+ Comment[pt_BR]=Uma janela perde a maximização
+ Comment[ro]=O fereastră a pierdut maximizarea
+ Comment[ru]=Окно более не распахнуто
++Comment[sr]=Prozor više nije maksimizovan
+ Comment[sr at latin]=Prozor više nije maksimizovan
+ Comment[sv]=Ett fönster förlorar maximering
+ Comment[ta]=சாளரம் பெரிதாவதை இழந்தது
+@@ -2516,7 +2644,9 @@
+ [Event/on_all_desktops]
+ Name=Window on All Desktops
+ Name[be]=Акно на ўсіх працоўных сталах
++Name[de]=Fenster auf allen Arbeitsflächen
+ Name[el]=Παράθυρο σε όλες τις επιφάνειες
++Name[et]=Aken kõigil töölaudadel
+ Name[ga]=Fuinneog ar Gach Deasc
+ Name[it]=Finestra su tutti i desktop
+ Name[ja]=ウィンドウがすべてのデスクトップに
+@@ -2534,6 +2664,7 @@
+ Comment=A window is made visible on all desktops
+ Comment[af]='n Venster is sigbaar op al die werkskerms
+ Comment[da]=Et vindue gøres synligt på alle desktoppe
++Comment[de]=Ein Fenster soll auf allen Arbeitsflächen erscheinen
+ Comment[el]=Ένα παράθυρο έγινε ορατό σε όλες τις επιφάνειες εργασίας
+ Comment[eo]=Fenestro videbliĝis sur ĉiuj labortabloj
+ Comment[et]=Aken on muudetud nähtavaks kõigil töölaudadel
+@@ -2561,6 +2692,7 @@
+ Comment[pt_BR]=Uma janela se torna visível em todas as áreas de trabalho
+ Comment[ro]=O fereastră a fost făcută vizibilă pe toate ecranele
+ Comment[ru]=Окно сделано видимым на всех рабочих столах
++Comment[sr]=Prozor je učinjen vidljivim na svim radnim površinama
+ Comment[sr at latin]=Prozor je učinjen vidljivim na svim radnim površinama
+ Comment[sv]=Ett fönster görs synligt på alla skrivbord
+ Comment[ta]=சாளரத்தை அனைத்து மேல்மேசையிலும் பார்க்க முடியும்
+@@ -2575,10 +2707,12 @@
+ 
+ [Event/not_on_all_desktops]
+ Name=Window Not on All Desktops
++Name[de]=Fenster nicht auf allen Arbeitsflächen
+ Name[el]=Παράθυρο εκτός όλων των επιφανειών
++Name[et]=Aken ei ole kõigil töölaudadel
+ Name[it]=Finestra non su tutti i desktop
+ Name[ja]=ウィンドウが一部のデスクトップのみに
+-Name[km]=បង្អួច​មិន​នៅ​លើ​ផ្ទៃតុ​ទាំងអស់
++Name[km]=បង្អួច​មិន​នៅ​លើ​ផ្ទៃតុ​ទាំងអស់​ទេ
+ Name[nb]=Vindu ikke på alle skrivebord
+ Name[nds]=Finster nich op all Schriefdischen
+ Name[nl]=Venster niet op alle bureaubladen
+@@ -2592,6 +2726,7 @@
+ Comment=A Window is no longer visible on all desktops
+ Comment[af]='n Venster is nie meer op al die werkskerms sigbaar nie
+ Comment[da]=Et vindue er ikke længere synligt på alle desktoppe
++Comment[de]=Ein Fenster soll nicht auf allen Arbeitsflächen erscheinen
+ Comment[el]=Ένα παράθυρο δεν είναι πάντα ορατό σε όλες τις επιφάνειες εργασίας
+ Comment[eo]=Fenestro nevidebliĝis sur ĉiuj labortabloj
+ Comment[et]=Aken ei ole enam nähtav kõigil töölaudadel
+@@ -2606,7 +2741,7 @@
+ Comment[it]=Una finestra non è più visibile su tutti i desktop
+ Comment[ja]=ウィンドウが一部のデスクトップで不可視になりました
+ Comment[ka]=ფანჯარა არ ჩანს ყველა სამუშაო დაფაზე
+-Comment[km]=បង្អួច​មិន​អាច​មើល​ឃើញ​នៅ​លើ​ផ្ទៃតុ​ទាំងអស់​ទេ
++Comment[km]=បង្អួច​មិន​អាច​មើល​ឃើញ​នៅ​លើ​ផ្ទៃតុ​ទាំងអស់​ទៀតទេ
+ Comment[lt]=Langas nebematomas visuose darbastaliuose
+ Comment[lv]=Logs vairs nav redzams uz visām darba virsmām
+ Comment[mk]=Прозорецот не е повеќе видлив на сите површини
+@@ -2619,6 +2754,7 @@
+ Comment[pt_BR]=Uma janela não é mais visível em todas as áreas de trabalho
+ Comment[ro]=O fereastră nu mai este vizibilă pe toate ecranele
+ Comment[ru]=Окно более не является видимым на всех рабочих столах
++Comment[sr]=Prozor više nije vidljiv na svim radnim površinama
+ Comment[sr at latin]=Prozor više nije vidljiv na svim radnim površinama
+ Comment[sv]=Ett fönster blir inte längre synligt på alla skrivbord
+ Comment[ta]=அனைத்து மேல்மேசையிலும் சாளரம் தெரியாது
+@@ -2637,6 +2773,7 @@
+ Name[br]=Kendiviz nevez
+ Name[cy]=Ymgom Newydd
+ Name[da]=Ny dialog
++Name[de]=Neuer Dialog
+ Name[el]=Νέος διάλογος
+ Name[en_GB]=New Dialogue
+ Name[eo]=Nova dialogo
+@@ -2654,6 +2791,7 @@
+ Name[ja]=新規ダイアログ
+ Name[ka]=ახალი დიალოგი
+ Name[km]=ប្រអប់​ថ្មី
++Name[ko]=새 대화 상자
+ Name[lt]=Naujas dialogas
+ Name[lv]=Jauns Dialogs
+ Name[mk]=Нов дијалог
+@@ -2666,6 +2804,7 @@
+ Name[pt_BR]=Novo Diálogo
+ Name[ro]=Dialog nou
+ Name[ru]=Новый диалог
++Name[sr]=Novi dijalog
+ Name[sr at latin]=Novi dijalog
+ Name[sv]=Ny dialogruta
+ Name[ta]=புதிய உரையாடல்
+@@ -2677,9 +2816,11 @@
+ Name[zh_TW]=新對話框
+ Comment=Transient window (a dialog) appears
+ Comment[el]=Ένα προσωρινό παράθυρο (διάλογος) εμφανίζεται
++Comment[et]=Avaneb ajutine aken (dialoog)
+ Comment[it]=Appare una finestra di dialogo
+ Comment[ja]=ダイアログウィンドウが表示されました
+-Comment[km]=បង្អួច​បណ្ដោះ​អាសន្ន​បាន​លេចឡើង
++Comment[km]=បង្អួច​បណ្ដោះ​អាសន្ន​បាន​លេច​ឡើង
++Comment[ko]=임시 창(대화상자)이 나타남
+ Comment[lt]=Atsiranda laikinas langas (dialogas)
+ Comment[nb]=Et midlertidig vindu (en dialog) vises
+ Comment[nds]=En temporeer Finster (en Dialoog) dukt op
+@@ -2702,6 +2843,7 @@
+ Name[br]=Lemel ar gendiviz
+ Name[cy]=Dileu Ymgom
+ Name[da]=Slet dialog
++Name[de]=Dialog schließen
+ Name[el]=Διαγραφή διαλόγου
+ Name[en_GB]=Delete Dialogue
+ Name[eo]=Forigo de dialogo
+@@ -2718,6 +2860,7 @@
+ Name[ja]=ダイアログを削除
+ Name[ka]=დიალოგის წაშლა
+ Name[km]=លុប​ប្រអប់
++Name[ko]=대화 상자 삭제
+ Name[lt]=Pašalinti dialogą
+ Name[lv]=Dzēst Dialogu
+ Name[mk]=Избриши дијалог
+@@ -2730,6 +2873,7 @@
+ Name[pt_BR]=Apagar Diálogo
+ Name[ro]=Închide dialog
+ Name[ru]=Удалить диалог
++Name[sr]=Dijalog se briše
+ Name[sr at latin]=Dijalog se briše
+ Name[sv]=Ta bort dialogruta
+ Name[ta]=உரையாடலை நீக்கு
+@@ -2757,6 +2901,7 @@
+ Comment[it]=Scompare una finestra di dialogo
+ Comment[ja]=ダイアログウィンドウが閉じられました
+ Comment[km]=បង្អួច​បណ្ដោះ​អាសន្ន​ត្រូវ​បាន​យក​ចេញ
++Comment[ko]=임시 창(대화상자)이 삭제됨
+ Comment[lt]=Laikinas langas (dialogas) yra pašalintas
+ Comment[lv]=Īslaicīgais Logs (dialogs) ir aizvākts
+ Comment[mk]=Отстранет е преодниот прозорец (дијалог)
+@@ -2769,6 +2914,7 @@
+ Comment[pt_BR]=Janela temporária (um diálogo) é removida
+ Comment[ro]=A dispărut o fereastră de dialog
+ Comment[ru]=Временное окно (диалог) удалено
++Comment[sr]=Prolazni prozor (dijalog) je uklonjen
+ Comment[sr at latin]=Prolazni prozor (dijalog) je uklonjen
+ Comment[sv]=Ett tillfälligt fönster (en dialogruta) försvinner
+ Comment[ta]=தற்காலிக சாளரம்(உரையாடல் பெட்டி) நீக்கப்பட்டது
+@@ -2787,6 +2933,7 @@
+ Name[br]=Kregiñ da zilec'hiañ ar prenestr
+ Name[cy]=Cychwyn Symud y Ffenestr
+ Name[da]=Vindue flyt begynd
++Name[de]=Fensterverschiebung (Start)
+ Name[el]=Αρχή μετακίνησης παραθύρου
+ Name[eo]=Komenco de fenestromovo
+ Name[et]=Akna liigutamise algus
+@@ -2802,6 +2949,7 @@
+ Name[ja]=ウィンドウ移動開始
+ Name[ka]=ფანჯრის მოძრაობა დაიწყო
+ Name[km]=ការ​ចាប់ផ្ដើម​ផ្លាស់ទី​បង្អួច
++Name[ko]=창 이동 시작됨
+ Name[lt]=Lango perkėlimo pradžia
+ Name[lv]=Loga Pārvietošana Sākta
+ Name[mk]=Почеток на преместување на прозорец
+@@ -2814,6 +2962,7 @@
+ Name[pt_BR]=Início do Movimento da Janela
+ Name[ro]=Început mutare fereastră
+ Name[ru]=Начало передвижения окна
++Name[sr]=Početak premeštanja prozora
+ Name[sr at latin]=Početak premeštanja prozora
+ Name[sv]=Fönsterförflyttning börjar
+ Name[ta]=சாளர நகர்த்தல் ஆரம்பம்
+@@ -2826,6 +2975,7 @@
+ Comment=A window has begun moving
+ Comment[af]='n Venster het begin beweeg
+ Comment[da]=Et vindue er begyndt at flyttes
++Comment[de]=Ein Fenster wird verschoben (Start)
+ Comment[el]=Ένα παράθυρο άρχισε να μετακινείται
+ Comment[eo]=Fenestro komencis movadon
+ Comment[et]=Aken on hakanud liikuma
+@@ -2841,6 +2991,7 @@
+ Comment[ja]=ウィンドウの移動を開始しました
+ Comment[ka]=ფანჯარამ დაიწყო მოძრაობა
+ Comment[km]=បង្អួច​បាន​ចាប់ផ្ដើម​ផ្លាស់ទី
++Comment[ko]=창 이동이 시작됨
+ Comment[lt]=Langas pradėjo judėti
+ Comment[lv]=Logs ir Sācis Pārvietoties
+ Comment[mk]=Прозорецот почнува да се преместува
+@@ -2853,6 +3004,7 @@
+ Comment[pt_BR]=Uma janela começou a se mover
+ Comment[ro]=O fereastră a început să se mişte
+ Comment[ru]=Окно начало перемещаться
++Comment[sr]=Prozor je počeo sa premeštanjem
+ Comment[sr at latin]=Prozor je počeo sa premeštanjem
+ Comment[sv]=Ett fönster har börjat flyttas
+ Comment[ta]=சாளரம் நகர ஆரம்பித்தது
+@@ -2869,6 +3021,7 @@
+ Name[br]=Echuiñ da zilec'hiañ ar prenestr
+ Name[cy]=Gorffen Symud y Ffenestr
+ Name[da]=Vindue flyt slut
++Name[de]=Fensterverschiebung (Ende)
+ Name[el]=Τέλος μετακίνησης παραθύρου
+ Name[eo]=Fino de fenestromovo
+ Name[et]=Akna liigutamise lõpp
+@@ -2884,6 +3037,7 @@
+ Name[ja]=ウィンドウ移動終了
+ Name[ka]=ფანჯრის მოძრაობის დასასრული
+ Name[km]=ចុង​បញ្ចប់​នៃ​ការ​ផ្លាស់ទី​បង្អួច
++Name[ko]=창 이동이 끝났음
+ Name[lt]=Lango perkėlimo pabaiga
+ Name[lv]=Loga Pārvietošana Beigta
+ Name[mk]=Крај на преместување на прозорец
+@@ -2896,6 +3050,7 @@
+ Name[pt_BR]=Fim do Movimento da Janela
+ Name[ro]=Sfîrşit mutare fereastră
+ Name[ru]=Конец передвижения окна
++Name[sr]=Kraj premeštanja prozora
+ Name[sr at latin]=Kraj premeštanja prozora
+ Name[sv]=Fönsterförflyttning slutar
+ Name[ta]=சாளர நகர்த்தல் முடிவு
+@@ -2908,6 +3063,7 @@
+ Comment=A window has completed its moving
+ Comment[af]='n Venster het  sy beweging voltooi
+ Comment[da]=Et vindue er færdigt med at flytte
++Comment[de]=Ein Fenster wird verschoben (abgeschlossen)
+ Comment[el]=Ένα παράθυρο ολοκλήρωσε τη μετακίνησή του
+ Comment[eo]=Fenestro finis la movadon
+ Comment[et]=Aken on lõpetanud liikumise
+@@ -2923,6 +3079,7 @@
+ Comment[ja]=ウィンドウの移動を終了しました
+ Comment[ka]=ფანჯრის მოძრაობა სრულდება
+ Comment[km]=បង្អួច​បាន​បញ្ចប់​ការ​ផ្លាស់ទី​របស់​វា
++Comment[ko]=창 이동이 끝났음
+ Comment[lt]=Lango perkėlimas baigtas
+ Comment[lv]=Logs ir Pabeidzis Pārvietošanos
+ Comment[mk]=Прозорецот го заврши своето преместување
+@@ -2935,6 +3092,7 @@
+ Comment[pt_BR]=Uma janela completou seu movimento
+ Comment[ro]=O fereastră şi-a terminat mişcarea
+ Comment[ru]=Перемещение окна завершилось
++Comment[sr]=Prozor je završio premeštanje
+ Comment[sr at latin]=Prozor je završio premeštanje
+ Comment[sv]=Ett fönster har flyttats klart
+ Comment[ta]=நகர்த்துவதன் மூலம் சாளரம் முழுமையடைந்தது.
+@@ -2964,7 +3122,8 @@
+ Name[is]=Stærðarbreyting glugga hefst
+ Name[ja]=ウィンドウリサイズ開始
+ Name[ka]=ფანჯრის ზომა იზვლბა
+-Name[km]=ការ​ចាប់ផ្ដើម​ប្ដូរ​ទំហំ​បង្អួច
++Name[km]=ចាប់ផ្ដើម​ផ្លាស់ប្ដូរ​ទំហំ​បង្អួច
++Name[ko]=창 크기 조절 시작됨
+ Name[lt]=Lango dydžio keitimo pradžia
+ Name[lv]=Sākas Loga Izmēra Maiņa
+ Name[mk]=Почеток на промена на големината на прозорец
+@@ -2977,6 +3136,7 @@
+ Name[pt_BR]=Início do Redimensionamento da Janela
+ Name[ro]=Început redimensionare fereastră
+ Name[ru]=Меняется размер окна
++Name[sr]=Početak menjanja veličine prozora
+ Name[sr at latin]=Početak menjanja veličine prozora
+ Name[sv]=Storleksändring av fönster börjar
+ Name[ta]=சாளர அளவு மாற்ற ஆரம்பம்
+@@ -3002,7 +3162,8 @@
+ Comment[is]=Stærð glugga er byrjuð að breytast
+ Comment[ja]=ウィンドウのリサイズを開始しました
+ Comment[ka]=ფანჯარამ დაიწყო ზომის შეცვლა
+-Comment[km]=បង្អួច​បាន​ចាប់ផ្ដើម​ប្ដូរ​ទំហំ
++Comment[km]=បង្អួច​បាន​ចាប់ផ្ដើម​ផ្លាស់ប្ដូរ​ទំហំ
++Comment[ko]=창 크기 조절이 시작됨
+ Comment[lt]=Lango dydis pradėtas keisti
+ Comment[lv]=Loga Izmēra Maiņa Sākusies
+ Comment[mk]=Прозорецот започна да ја менува големината
+@@ -3015,6 +3176,7 @@
+ Comment[pt_BR]=Uma janela começou a ser redimensionada
+ Comment[ro]=O fereastră şi-a început redimensionarea
+ Comment[ru]=Окно начало изменять размер
++Comment[sr]=Prozor je počeo menjanje veličine
+ Comment[sr at latin]=Prozor je počeo menjanje veličine
+ Comment[sv]=Storleksändring av ett fönster har påbörjats
+ Comment[ta]=சாளரத்தின் அளவு மாறத்துவங்குகிறது
+@@ -3044,7 +3206,8 @@
+ Name[is]=Stærðarbreyting glugga lýkur
+ Name[ja]=ウィンドウリサイズ終了
+ Name[ka]=ფანჯრის ზომა შეიცვალა
+-Name[km]=ចុង​បញ្ចប់​ការ​ប្ដូរ​ទំហំ​បង្អួច
++Name[km]=ចុង​បញ្ចប់​ការ​ផ្លាស់ប្ដូរ​​ទំហំ​បង្អួច
++Name[ko]=창 닫기가 끝났음
+ Name[lt]=Lango dydžio keitimo pabaiga
+ Name[lv]=Loga Izmēra Maiņa Beidzas
+ Name[mk]=Крај на промена на големината на прозорец
+@@ -3057,6 +3220,7 @@
+ Name[pt_BR]=Fim do Redimensionamento da Janela
+ Name[ro]=Sfîrşit redimensionare fereastră
+ Name[ru]=Размер окна изменился
++Name[sr]=Kraj menjanja veličine prozora
+ Name[sr at latin]=Kraj menjanja veličine prozora
+ Name[sv]=Storleksändring av fönster slutar
+ Name[ta]=சாளர அளவு மாற்ற முடிவு
+@@ -3082,7 +3246,8 @@
+ Comment[is]=Stærð glugga hefur breyst
+ Comment[ja]=ウィンドウのリサイズが終了しました
+ Comment[ka]=ფანჯრის ზომის ცვლილება დასრულდა
+-Comment[km]=បង្អួច​បាន​បញ្ចប់​ការ​ប្ដូរ​ទំហំ
++Comment[km]=បង្អួច​បាន​បញ្ចប់​ការ​ផ្លាស់ប្ដូរ​ទំហំ
++Comment[ko]=창 크기 조절이 끝났음
+ Comment[lt]=Lango dydžio keitimas baigtas
+ Comment[lv]=Loga Izmēra Maiņa Beigusies
+ Comment[mk]=Прозорецот заврши со менувањето на големината
+@@ -3095,6 +3260,7 @@
+ Comment[pt_BR]=Uma janela terminou de ser redimensionada
+ Comment[ro]=O fereastră şi-a terminat redimensionarea
+ Comment[ru]=Изменение размеров окна завершено
++Comment[sr]=Prozor je završio promenu veličine
+ Comment[sr at latin]=Prozor je završio promenu veličine
+ Comment[sv]=Storleksändring av ett fönster har avslutats
+ Comment[ta]=சாளரத்தின் அளவு மாற்றுதல் முடிந்தது
+@@ -3108,8 +3274,10 @@
+ [Event/demandsattentioncurrent]
+ Name=Window on Current Desktop Demands Attention
+ Name[el]=Παράθυρο της τρέχουσας επιφάνειας απαιτεί προσοχή
++Name[et]=Aken aktiivsel töölaual nõuab tähelepanu
+ Name[ja]=現在のデスクトップのウィンドウが注意を要求
+ Name[km]=បង្អួច​នៅ​លើ​ផ្ទៃតុ​បច្ចុប្បន្ន​ទាមទារ​ការ​ចាប់អារម្មណ៍
++Name[ko]=현재 데스크톱의 창이 응답을 기다림
+ Name[nb]=VIndu på gjeldende skrivebord vil ha oppmerksomhet
+ Name[nds]=Finster op aktuell Schriefdisch bruukt Acht
+ Name[nl]=Venster op huidig bureaublad vraagt om aandacht
+@@ -3136,7 +3304,8 @@
+ Comment[is]=Gluggi á núverandi sýndarskjáborði krefst athygli
+ Comment[ja]=現在の仮想ウィンドウ上のウィンドウが注意を促しています
+ Comment[ka]=მიმდინარე ვირტუალური სამუშაო დაფის ფანჯარა ყურადღებას მოითხოვს
+-Comment[km]=បង្អួច​លើ​ផ្ទៃតុ​និម្មិត​បច្ចុប្បន្ន​ទាមទារ​ការ​ចាប់អារម្មណ៍
++Comment[km]=បង្អួច​លើ​ផ្ទៃតុ​និម្មិត​បច្ចុប្បន្ន​ទាមទារ​ការ​ចាប់​អារម្មណ៍
++Comment[ko]=현재 가상 데스크톱의 창이 응답을 기다림
+ Comment[lt]=Langas dabartiniame menamame darbastalyje reikalauja dėmesio
+ Comment[mk]=Некој од прозорците на тековната површина бара внимание
+ Comment[nb]=Et vIndu på gjeldende skrivebord vil ha oppmerksomhet
+@@ -3148,6 +3317,7 @@
+ Comment[pt_BR]=Uma janela na área de trabalho virtual atual exige atenção
+ Comment[ro]=O fereastră în ecranul virtual curent necesită atenţie
+ Comment[ru]=Произошло событие, требующее вашего внимания, в окне на текущем рабочем столе
++Comment[sr]=Prozor na tekućoj virtuelnoj radnoj površini zahteva pažnju
+ Comment[sr at latin]=Prozor na tekućoj virtuelnoj radnoj površini zahteva pažnju
+ Comment[sv]=Ett fönster på det nuvarande virtuella skrivbordet kräver uppmärksamhet
+ Comment[x-test]=xxA window on the current virtual desktop demands attentionxx
+@@ -3158,8 +3328,10 @@
+ [Event/demandsattentionother]
+ Name=Window on Other Desktop Demands Attention
+ Name[el]=Παράθυρο σε άλλη επιφάνεια εργασίας απαιτεί προσοχή
++Name[et]=Aken teisel töölaual nõuab tähelepanu
+ Name[ja]=他のデスクトップのウィンドウが注意を要求
+ Name[km]=បង្អួច​នៅ​លើ​ផ្ទៃតុ​និម្មិត​ផ្សេង​ទៀត​ទាមទារ​ការ​ចាប់​អារម្មណ៍
++Name[ko]=다른 데스크톱의 창이 응답을 기다림
+ Name[nb]=VIndu på annet skrivebord vil ha oppmerksomhet
+ Name[nds]=Finster op anner Schriefdisch bruukt Acht
+ Name[nl]=Venster op ander bureaublad vraagt om aandacht
+@@ -3186,6 +3358,7 @@
+ Comment[is]=Gluggi á óvirku sýndarskjáborði krefst athygli
+ Comment[ja]=非アクティブな仮想デスクトップ上のウィンドウが注意を促しています
+ Comment[km]=បង្អួច​នៅ​លើ​ផ្ទៃតុ​និម្មិត​អសកម្ម​ទាមទារ​ការ​ចាប់​អារម្មណ៍
++Comment[ko]=비활성 가상 데스크톱의 창이 응답을 기다림
+ Comment[lt]=Langas neaktyviame virtualiame darbastalyje reikalauja dėmesio
+ Comment[mk]=Некој прозорец на неактивна виртуелна површина бара внимание
+ Comment[nb]=Et vIndu på et inaktivt virtuelt skrivebord vil ha oppmerksomhet
+@@ -3197,6 +3370,7 @@
+ Comment[pt_BR]=Uma janela em uma área de trabalho virtual inativa exige atenção
+ Comment[ro]=O fereastră pe un ecran virtual inactiv necesită atenţie
+ Comment[ru]=Произошло событие, требующее вашего внимания, в окне на другом рабочем столе
++Comment[sr]=Prozor na neaktivnoj virtuelnoj radnoj površini zahteva pažnju
+ Comment[sr at latin]=Prozor na neaktivnoj virtuelnoj radnoj površini zahteva pažnju
+ Comment[sv]=Ett fönster på ett inaktivt skrivbord kräver uppmärksamhet
+ Comment[x-test]=xxA window on an inactive virtual desktop demands attentionxx
+--- a/kwin/compositingprefs.cpp
++++ b/kwin/compositingprefs.cpp
+@@ -20,11 +20,14 @@
+ {
+ 
+ CompositingPrefs::CompositingPrefs()
++    : mXgl( false )
++    , mEnableCompositing( false )
++    , mEnableVSync( true )
++    , mEnableDirectRendering( true )
++    , mStrictBinding( true )
+     {
+-    mEnableCompositing = false;
+-    mEnableVSync = true;
+-    mEnableDirectRendering = true;
+     }
++
+ CompositingPrefs::~CompositingPrefs()
+     {
+     }
+@@ -163,26 +166,28 @@
+     mGLVendor = QString((const char*)glGetString( GL_VENDOR ));
+     mGLRenderer = QString((const char*)glGetString( GL_RENDERER ));
+     mGLVersion = QString((const char*)glGetString( GL_VERSION ));
++    mXgl = detectXgl();
+     kDebug() << "GL vendor is" << mGLVendor;
+     kDebug() << "GL renderer is" << mGLRenderer;
+     kDebug() << "GL version is" << mGLVersion;
++    kDebug() << "XGL:" << ( mXgl ? "yes" : "no" );
+ 
+     if( mGLRenderer.contains( "Intel" ))
+-    {
++        {
+         mDriver = "intel";
+         QStringList words = mGLRenderer.split(" ");
+         mVersion = Version( words[ words.count() - 2 ] );
+-    }
++        }
+     else if( mGLVendor.contains( "NVIDIA" ))
+-    {
++        {
+         mDriver = "nvidia";
+         QStringList words = mGLVersion.split(" ");
+         mVersion = Version( words[ words.count() - 1 ] );
+-    }
++        }
+     else
+-    {
++        {
+         mDriver = "unknown";
+-    }
++        }
+ 
+     kDebug() << "Detected driver" << mDriver << ", version" << mVersion.join(".");
+ #endif
+@@ -190,7 +195,13 @@
+ 
+ void CompositingPrefs::applyDriverSpecificOptions()
+     {
+-    if( mDriver == "intel")
++    if( mXgl )
++        {
++        kDebug() << "xgl, enabling";
++        mEnableCompositing = true;
++        mStrictBinding = false;
++        }
++    else if( mDriver == "intel")
+         {
+         kDebug() << "intel driver, disabling vsync, enabling direct";
+         mEnableVSync = false;
+@@ -203,17 +214,27 @@
+         }
+     else if( mDriver == "nvidia" )
+         {
+-        kDebug() << "nvidia driver, disabling vsync";
+-        mEnableVSync = false;
+-        if( mVersion >= Version( "96.39" ))
++        mStrictBinding = false;
++        if( mVersion >= Version( "100.14.23" ))
+             {
+-            kDebug() << "nvidia >= 96.39, enabling compositing";
++            kDebug() << "nvidia >= 100.14.23, enabling compositing";
+             mEnableCompositing = true;
+             }
++        else if( mVersion >= Version( "96.39" ))
++            {
++            kDebug() << "nvidia >= 96.39, enabling compositing, disabling vsync";
++            mEnableCompositing = true;
++            mEnableVSync = false;
++            }
+         }
+     }
+ 
+ 
++bool CompositingPrefs::detectXgl()
++    { // Xgl apparently uses only this specific X version
++    return VendorRelease(display()) == 70000001;
++    }
++
+ CompositingPrefs::Version::Version( const QString& str ) :
+         QStringList()
+     {
+--- a/kwin/client.h
++++ b/kwin/client.h
+@@ -449,6 +449,7 @@
+         uint ignore_focus_stealing : 1; // don't apply focus stealing prevention to this client
+         uint demands_attention : 1;
+         uint hidden_preview : 1; // mapped only to get a window pixmap for compositing
++        uint raw_shown : 1; // for use in rawShow()/rawHide()
+         WindowRules client_rules;
+         void getWMHints();
+         void readIcons();
+--- a/kwin/lib/kwineffects.cpp
++++ b/kwin/lib/kwineffects.cpp
+@@ -282,7 +282,7 @@
+ 
+ KConfigGroup EffectsHandler::effectConfig( const QString& effectname )
+     {
+-    KSharedConfig::Ptr kwinconfig = KSharedConfig::openConfig( "kwinrc", KConfig::CascadeConfig );
++    KSharedConfig::Ptr kwinconfig = KSharedConfig::openConfig( "kwinrc", KConfig::NoGlobals );
+     return kwinconfig->group( "Effect-" + effectname );
+     }
+ 
+--- a/kwin/data/fsp_workarounds_1.kwinrules
++++ b/kwin/data/fsp_workarounds_1.kwinrules
+@@ -3,6 +3,7 @@
+ Description[bg]=(По подразбиране) Изключване открадването на фокуса за XV
+ Description[de]=(Standard) Aktivierungsübernahme verhindern für XV
+ Description[el]=(Προκαθορισμένο) Αποτροπή κλεψίματος εστίασης για το XV
++Description[et]=(Vaikimisi) Fookuse röövimise vältimise keelamine XV puhul
+ Description[fy]=(standert) Foarkomme fan ôfpakke fan toetseboerdfokus foar XV
+ Description[he]=(ברירת מחדל) אל תאפשר מניעת גניבת התמקדות עבור XV
+ Description[it]=(Predefinita) Disabilita la prevenzione della cattura del fuoco per XV
+--- a/kwin/data/update_window_settings.cpp
++++ b/kwin/data/update_window_settings.cpp
+@@ -41,9 +41,9 @@
+     bool skipTaskbar;
+     bool skipPager;
+     bool userNoBorder;
+-    NET::WindowType windowType;
+     bool active; // means 'was active in the saved session', not used otherwise
+     bool fake; // fake session, i.e. 'save window settings', not SM restored
++    NET::WindowType windowType;
+     };
+ 
+ QList<SessionInfo*> fakeSession;
+--- a/kwin/workspace.cpp
++++ b/kwin/workspace.cpp
+@@ -128,6 +128,7 @@
+     cm_selection( NULL ),
+     compositeRate( 0 ),
+     overlay( None ),
++    overlay_visible( true ),
+     transSlider( NULL ),
+     transButton( NULL )
+     {
+@@ -1140,7 +1141,7 @@
+ 
+ void Workspace::configureWM()
+     {
+-	KToolInvocation::kdeinitExec( "kcmshell", configModules(false) );
++	KToolInvocation::kdeinitExec( "kcmshell4", configModules(false) );
+     }
+ 
+ /*!
+--- a/kdm/kfrontend/themes/circles/KdmGreeterTheme.desktop
++++ b/kdm/kfrontend/themes/circles/KdmGreeterTheme.desktop
+@@ -30,6 +30,7 @@
+ Name[ka]=წრეები
+ Name[kk]=Дөңгелектер
+ Name[km]=រង្វង់
++Name[ko]=원
+ Name[lt]=Skrituliai
+ Name[mk]=Кругови
+ Name[ms]=Bulatan
+@@ -86,6 +87,7 @@
+ Description[ka]=ლურჯ წრეებიანი თემა
+ Description[kk]=Көк дөңгелекті нақыш
+ Description[km]=ស្បែក​មាន​រង្វង់​ពណ៌​ខៀវ
++Description[ko]=파란 원이 있는 테마
+ Description[lt]=Tema su melsvais skrituliais
+ Description[lv]=Tēma ar ziliem riņķiem
+ Description[mk]=Тема со сини кругови
+--- a/kdm/kfrontend/sessions/twm.desktop
++++ b/kdm/kfrontend/sessions/twm.desktop
+@@ -33,6 +33,7 @@
+ Comment[ka]=X11 სისტემის ტრადიციული ფანჯრის მენეჯერი
+ Comment[kk]=Tab терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ជា​ផ្ទាំង
++Comment[ko]=탭 창 관리자
+ Comment[lt]=Kortelių langų tvarkyklė
+ Comment[lv]=Tabu logu menedžeris
+ Comment[mk]=Tab Window Manager
+--- a/kdm/kfrontend/sessions/xfce4.desktop
++++ b/kdm/kfrontend/sessions/xfce4.desktop
+@@ -35,7 +35,7 @@
+ Comment[ja]=Cholesterol Free Desktop Environment, version 4, CDE を思わせる、むだのないデスクトップ環境
+ Comment[ka]=CDE-ს მაგვარი უქოლესტერინო სამუშაო დაფა xfce 4
+ Comment[kk]=Cholesterol Free Desktop Environment, 4-нұсқа. CDE-ге ұқсас графикалық орта
+-Comment[km]=បរិស្ថាន​ផ្ទៃ​តុ​ Cholesterol ឥតគិត​ថ្លៃ​កំណែ ៤។ បរិស្ថាន​ផ្ទៃតុ​ដែល​សំអាង​លើ CDE
++Comment[km]=បរិស្ថាន​ផ្ទៃ​តុ​ Cholesterol ឥតគិត​ថ្លៃ​កំណែ ៤ ។ បរិស្ថាន​ផ្ទៃតុ​ដែល​សំអាង​លើ CDE
+ Comment[lt]=Darbatalio aplinka „Be cholesterolio“ , 4 versija. CDE primenanti darbastalio aplinka
+ Comment[lv]=Darbvirsmas vide bez holesterīna, versija 4. Darbavirsmas vide, kas atgādina CDE
+ Comment[mk]=Cholesterol Free Desktop Environment, верзија 4. Работна околина која потсетува на CDE
+--- a/kdm/kfrontend/sessions/oroborus.desktop
++++ b/kdm/kfrontend/sessions/oroborus.desktop
+@@ -37,6 +37,7 @@
+ Comment[ka]=მსუბუქი ფანჯრის მენეჯერი თემების მხარდაჭერით
+ Comment[kk]=Жеңіл, нақыштары бар терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​អាច​ប្ដូរ​ស្បែក​បាន​​មាន​សមត្ថភាព​ខ្សោយ
++Comment[ko]=가벼운 테마를 설정할 수 있는 창 관리자
+ Comment[lt]=Nedaug resursų reikalaujanti temas palaikanti langų tvarkyklė
+ Comment[lv]=Viegls logu menedžeris ar tēmu atbalstu
+ Comment[mk]=Лесен менаџер на прозорци со теми
+--- a/kdm/kfrontend/sessions/ctwm.desktop
++++ b/kdm/kfrontend/sessions/ctwm.desktop
+@@ -34,7 +34,7 @@
+ Comment[ja]=TWM に仮想デスクトップなどを強化した Claude のウィンドウマネージャ
+ Comment[ka]=Claude's Tab Window Manager - TWM-ის გაუმჯობესებული ვერსია
+ Comment[kk]=Claude's Tab Window Manager, TWM-ның жетілдірген нұсқасы.
+-Comment[km]=កម្មវិធី​គ្រប់គ្រង​ផ្ទាំង​បង្អួច​របស់ Claude TWM ដែលបាន​​ធ្វើ​ឲ្យ​ប្រសើរ​ដោយ​អេក្រង់​និមិត្ត​ជាដើម ។ល។
++Comment[km]=កម្មវិធី​គ្រប់គ្រង​ផ្ទាំង​បង្អួច​របស់ Claude TWM ដែល​បាន​​ធ្វើ​ឲ្យ​ប្រសើរ​ដោយ​អេក្រង់​និមិត្ត​ជា​ដើម ។ល។
+ Comment[lt]=Claude kortelių langų tvarkyklė, TWM praplėsta virtualių ekranų palaikymu ir t.t.
+ Comment[mk]=Claude's Tab Window Manager, TWM подобрен менаџер со виртуелни екрани итн.
+ Comment[nb]=Claude's Tab Window Manager, TWM forbedret med virtuelle skrivebord,osv.
+--- a/kdm/kfrontend/sessions/sapphire.desktop
++++ b/kdm/kfrontend/sessions/sapphire.desktop
+@@ -43,6 +43,7 @@
+ Comment[ka]=მინიმალური მაგრამ კონფიგურირებადი ფანჯრის მენეჯერი
+ Comment[kk]=Шағын, баптауы бар, терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​មាន​លក្ខណៈ​ពិសេស​តិចតួច តែ​អាច​កំណត់​រចនាសម្ព័ន្ធ​បាន
++Comment[ko]=설정 가능한 최소한의 창 관리자
+ Comment[lt]=Minimalistinė tačiau konfigūruojama langų tvarkyklė
+ Comment[lv]=Minimālistisks, bet konfigurējams logu menedžeris
+ Comment[mk]=Минимален но конфигурабилен менаџер на прозорци
+--- a/kdm/kfrontend/sessions/ude.desktop
++++ b/kdm/kfrontend/sessions/ude.desktop
+@@ -19,7 +19,7 @@
+ Comment[el]=Το περιβάλλον επιφάνειας εργασίας του UNIX
+ Comment[eo]=La Uniksa Labortablo Ĉirkauaĵo
+ Comment[es]=El UNIX Desktop Environment
+-Comment[et]=UNIXi töölaua keskkond
++Comment[et]=UNIX-i töölaua keskkond
+ Comment[eu]=UNIX mahaigain ingurunea
+ Comment[fa]=محیط رومیزی یونیکس
+ Comment[fi]=UNIX-työpöytäympäristö
+@@ -35,6 +35,7 @@
+ Comment[ka]=UNIX-ის სამუშაო გარემო
+ Comment[kk]=UNIX Desktop Environment
+ Comment[km]=បរិស្ថាន​ផ្ទៃ​តុ​របស់​យូនីក
++Comment[ko]=UNIX 데스크톱 환경
+ Comment[lt]=UNIX darbastalio aplinka
+ Comment[lv]= UNIX Darba virsmas vide
+ Comment[mk]=UNIX Desktop Environment
+--- a/kdm/kfrontend/sessions/qvwm.desktop
++++ b/kdm/kfrontend/sessions/qvwm.desktop
+@@ -36,7 +36,8 @@
+ Comment[ja]=Windows95 風のウィンドウマネージャ
+ Comment[ka]=ფანჯრის მენეჯერი Windows 95-ს სტილში
+ Comment[kk]=Windows 95 секілді терезе менеджері
+-Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ស្រដៀង Windows 95
++Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ស្រដៀងនឹង Windows 95
++Comment[ko]=윈도 95를 닮은 창 관리자
+ Comment[lt]=Langų tvarkyklė, primenanti Windows 95
+ Comment[lv]=Windows 95 līdzīgs logu menedžeris
+ Comment[mk]=Менаџер на прозорци со изглед на Windows 95
+--- a/kdm/kfrontend/sessions/enlightenment.desktop
++++ b/kdm/kfrontend/sessions/enlightenment.desktop
+@@ -41,6 +41,7 @@
+ Comment[ka]=მრავალფუნქციური ფანჯრის მენეჯერი თემების მხარდაჭერით
+ Comment[kk]=Қасиеттер жағынан бай, көп нақышты терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​​មាន​លក្ខណៈ​ពិសេស​សម្បូរ​បែប ដែល​អាច​ប្ដូរ​រូបរាង​បាន​តាម​ចិត្ត
++Comment[ko]=다양한 곳을 꾸밀 수 있는 기능이 풍부한 창 관리자
+ Comment[lt]=Daug temų ir savybių turinti langų tvarkyklė
+ Comment[lv]=Tēmām un iespējām bagāts logu menedžeris
+ Comment[mk]=Менаџер на прозорци богат со можности и екстремно подложен на стилизирање со теми
+--- a/kdm/kfrontend/sessions/golem.desktop
++++ b/kdm/kfrontend/sessions/golem.desktop
+@@ -37,6 +37,7 @@
+ Comment[ka]=მსუბუქი ფანჯრი მენეჯერი
+ Comment[kk]=Жеңіл терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​នៅ​ខាង​លើ
++Comment[ko]=가벼운 창 관리자
+ Comment[lt]=Nedaug resursų eikvojanti langų tvarkyklė
+ Comment[lv]=Viegls logu menedžeris
+ Comment[mk]=Лесен менаџер на прозорци
+--- a/kdm/kfrontend/sessions/waimea.desktop
++++ b/kdm/kfrontend/sessions/waimea.desktop
+@@ -38,6 +38,7 @@
+ Comment[ka]=კონფიგურირებადი ფანჯრის მენეჯერი Blackbox-ს ბაზაზე
+ Comment[kk]=Blackbox-негіздеген, баптау жағынан бай, терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ដែល​អាច​ប្ដូរ​តាម​បំណង​កម្រិត​ខ្ពស់ ដែល​មាន​មូលដ្ឋាន​លើ​ប្រអប់​​ខ្មៅ​
++Comment[ko]=Blackbox 기반의 사용자 정의가 가능한 관리자
+ Comment[lt]=Daug konfigūravimo parinkčių turinti langų tvarkyklė, paremta Blackbox
+ Comment[lv]=Plaši konfigurējams logu menedžeris bāzēts uz Blackbox
+ Comment[mk]=Менаџер на прозорци базиран на Blackbox со голем број опции
+--- a/kdm/kfrontend/sessions/icewm.desktop
++++ b/kdm/kfrontend/sessions/icewm.desktop
+@@ -37,6 +37,7 @@
+ Comment[ka]=ფანჯრების მენეჯერი Windows95-OS/2-Motif სტილში
+ Comment[kk]=Windows 95-OS/2-Motif-секілді терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ស្រដៀង​នឹង​ Windows 95-OS/2-Motif
++Comment[ko]=윈도 95, OS/2, Motif를 닮은 창 관리자
+ Comment[lt]=A Windows 95-OS/2-Motif-primenanti langų tvarkyklė
+ Comment[lv]=Windows 95 - OS/2 - Motif līdzīgs logu menedžeris
+ Comment[mk]=Менаџер на прозорци со изглед на Windows 95, OS/2 и Motif
+--- a/kdm/kfrontend/sessions/asclassic.desktop
++++ b/kdm/kfrontend/sessions/asclassic.desktop
+@@ -39,7 +39,7 @@
+ Comment[ja]=AfterStep クラシック, AfterStep v1.1 ベースのウィンドウマネージャ
+ Comment[ka]=AfterStep Classic, ფანჯრის მენეჯერი AfterStep v1.1 -ის ბაზაზე
+ Comment[kk]=AfterStep v1.1 негіздеген AfterStep Classic терезе менеджері
+-Comment[km]=AfterStep បុរាណ, កម្មវិធី​គ្រប់គ្រង​បង្អួច​ដែល​ផ្អែក​លើ AfterStep v1.1
++Comment[km]=AfterStep បុរាណ កម្មវិធី​គ្រប់គ្រង​បង្អួច​ដែល​ផ្អែក​លើ AfterStep v1.1
+ Comment[ko]=AfterStrp 1.1 기반 창 관리자
+ Comment[lt]=AfterStep Classic, langų tvarkyklė, paremta AfterStep v1.1
+ Comment[lv]=Klasiskais Afterstep, logu menedžeris bāzēts uz AfterStem v1.1
+--- a/kdm/kfrontend/sessions/flwm.desktop
++++ b/kdm/kfrontend/sessions/flwm.desktop
+@@ -36,6 +36,7 @@
+ Comment[ka]=სწრაფი და მსუბუქი ფანჯრების მენეჯერი WM2 -ის ბაზაზე
+ Comment[kk]=WM2-негіздеген жеңіл және жедел терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អូច​ភ្លឺ​ច្បាស់ ផ្អែក​ជា​ចម្បង​លើ WM2
++Comment[ko]=WM2에 기반을 둔 빠르고 가벼운 창 관리자
+ Comment[lt]=Greita ir lengva langų tvarkyklė, paremta daugiausiai WM2
+ Comment[lv]=Fast Light logu menedžeris, bāzēts galvenokārt uz WM2
+ Comment[mk]=Fast Light Window Manager, менаџер примарно базиран на WM2
+--- a/kdm/kfrontend/sessions/openbox.desktop
++++ b/kdm/kfrontend/sessions/openbox.desktop
+@@ -41,6 +41,7 @@
+ Comment[ka]=Blackbox-ის ბაზაზე ფანჯრიოს მენეჯერი
+ Comment[kk]=Blackbox-негіздеген жеңіл терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ដែល​មាន​​សមត្ថភាព​ខ្សោយ ដែល​មាន​មូលដ្ឋាន​​លើ​ប្រអប់​ខ្មៅ
++Comment[ko]=Blackbox 기반 가벼운 창 관리자
+ Comment[lt]=Nedaug resursų reikalaujanti langų tvarkyklė, paremta Blackbox
+ Comment[lv]=Viegls logu menedžeris, bāzēts uz Blackbox
+ Comment[mk]=Лесен менаџер на прозорци базиран на Blackbox
+--- a/kdm/kfrontend/sessions/amiwm.desktop
++++ b/kdm/kfrontend/sessions/amiwm.desktop
+@@ -35,7 +35,7 @@
+ Comment[ja]=Amiga に似たウィンドウマネージャ
+ Comment[ka]=ფანჯრის მენეჯერი Amiga-ს სტილში
+ Comment[kk]=Amiga секілді терезе менеджері
+-Comment[km]=កម្មវិធី​គ្រប់គ្រប់​បង្អួច​ស្រដៀង Amiga
++Comment[km]=កម្មវិធី​គ្រប់គ្រប់​បង្អួច​ស្រដៀង​នឹង Amiga
+ Comment[ko]=Amiga를 닮은 창 관리자
+ Comment[lt]=Langų tvarkyklė, panaši į Amiga
+ Comment[lv]=Amiga izskata logu menedžeris
+--- a/kdm/kfrontend/sessions/fvwm.desktop
++++ b/kdm/kfrontend/sessions/fvwm.desktop
+@@ -33,6 +33,7 @@
+ Comment[ka]=ძლიერი ICCCM-თავსებადი ვირტულური სამუშაო დაფების მხარდამჭერი ფანჯრის მენეჯერი
+ Comment[kk]=Қуатты ICCCM-үйлесімді, көп виртуалды үстел қолдайтын терезе менеджері
+ Comment[km]=ICCCM ដ៏​មាន​អានុភាព-កម្មវិធី​គ្រប់គ្រង​បង្អួច​ផ្ទៃតុ​និម្មិត​ច្រើន​ដែល​អាច​ប្រតិបត្តិ​បាន
++Comment[ko]=다중 가상 데스크톱을 사용하는 ICCCM 호환 창 관리자
+ Comment[lt]=galinga, su ICCCM suderinama daugelio virtualių darbastalių langų tvarkyklė
+ Comment[lv]=Spēcīgs ICCCM-savietojams logu menedžeris ar vairāku darbvirsmu atbalstu
+ Comment[mk]=Моќен менаџер на прозорци со повеќе виртуелни површини во согласност со ICCCM
+--- a/kdm/kfrontend/sessions/phluid.desktop
++++ b/kdm/kfrontend/sessions/phluid.desktop
+@@ -37,6 +37,7 @@
+ Comment[ka]=ფანჯრის მენეჯერი imlib2 ის ბაზაზე
+ Comment[kk]=Imlib2-негіздеген терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​​មាន​មូលដ្ឋាន​​លើ Imlib2
++Comment[ko]=Imlib2 기반 창 관리자
+ Comment[lt]=Langų tvarkyklė, paremta Imlib2
+ Comment[lv]=Imlib 2 bāzēts logu menedžeris
+ Comment[mk]=Менаџер на прозорци базиран на Imlib2
+--- a/kdm/kfrontend/sessions/fluxbox.desktop
++++ b/kdm/kfrontend/sessions/fluxbox.desktop
+@@ -40,6 +40,7 @@
+ Comment[ka]=კონფიგურირებადი ფანჯრის მენეჯერი Blackbox -ის ბაზაზე
+ Comment[kk]=Blackbox-негіздеген, баптаулары көп, үнемді терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​ធនធាន​ទាប និង​អាច​កំណត់​រចនាសម្ព័ន្ធ​យ៉ាង​ខ្ពស់ ដែល​មាន​មូលដ្ឋាន​លើ​ប្រអប់​ខ្មៅ
++Comment[ko]=Blackbox 기반의 다양하게 설정 가능하고 자원을 적게 사용하는 창 관리자
+ Comment[lt]=Daug konfigūravimo parinkčių turinti ir mažai resursų naudojanti langų tvarkyklė, paremta Blackbox
+ Comment[lv]=Plaši konfigurējams un resursus taupošs logu menedžeris bāzēts uz Blackbox
+ Comment[mk]=Високо конфигурабилен менаџер на прозорци со мали побарувања на ресурси базиран на Blackbox
+--- a/kdm/kfrontend/sessions/cde.desktop
++++ b/kdm/kfrontend/sessions/cde.desktop
+@@ -33,7 +33,7 @@
+ Comment[ja]=Common Desktop Environment,プロプライエタリな業界標準のデスクトップ環境
+ Comment[ka]=Common Desktop Environment, UNIX -ის სამუშაო სფეროს სამრეწვლო სტანდარტი
+ Comment[kk]=Common Desktop Environment - UNIX жұмыс ортаның өнеркәсіп стандарты
+-Comment[km]=បរិស្ថាន​ផ្ទៃតុ​ធម្មតា,បរិស្ថាន​ផ្ទៃតុ​ស្តង់ដារ​ឧស្សាហ៍កម្ម​កម្មវិធី​មានកម្មសិទ្ធិ
++Comment[km]=បរិស្ថាន​ផ្ទៃតុ​ធម្មតា បរិស្ថាន​ផ្ទៃតុ​ស្តង់ដារ​ឧស្សាហ៍កម្ម​កម្មវិធី​មាន​កម្មសិទ្ធិ
+ Comment[lt]=Common Desktop Environment, nuosavybinių sistemų standartinė darbastalio tvarkyklė
+ Comment[mk]=Common Desktop Environment, сопственичка индустриски стандардна работна околина
+ Comment[ms]=Persekitaran Desktop Biasa, persekitaran desktop standard industri proprietari
+--- a/kdm/kfrontend/sessions/fvwm95.desktop
++++ b/kdm/kfrontend/sessions/fvwm95.desktop
+@@ -34,6 +34,7 @@
+ Comment[ka]=FVWM კლონი Windows 95-ის სტილში
+ Comment[kk]=Windows 95 секілді FVWM-негіздеген терезе менеджері
+ Comment[km]=ស្រដៀង Windows 95 ដែល​ក្លាយ​មក​ពី FVWM
++Comment[ko]=FVWM의 윈도 95를 닮은 변종
+ Comment[lt]=Windows 95 išvaizdą primenanti FVWM atmaina
+ Comment[lv]=Windows 95 līdzīgs FVWM atvasinājums
+ Comment[mk]=Деривација на FVWM менаџерот со изглед на Windows 95
+--- a/kdm/kfrontend/sessions/evilwm.desktop
++++ b/kdm/kfrontend/sessions/evilwm.desktop
+@@ -35,7 +35,8 @@
+ Comment[ja]=AEWM ベースの小さなウィンドウマネージャ
+ Comment[ka]=მინიმალისტური ფანჯრის მენეჯერი AEWM-ის ბაზაზე
+ Comment[kk]=AEWM-негіздеген шағын терезе менеджері
+-Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​លក្ខណៈ​ពិសេស​តិចតួច ដែល​​មាន​មូលដ្ឋាន​លើ AEWM
++Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​លក្ខណៈ​ពិសេស​តិច ដែល​​មាន​មូលដ្ឋាន​លើ AEWM
++Comment[ko]=AEWM 기반 창 관리자
+ Comment[lt]=Minimalistinė langų tvarkyklė, paremta AEWM
+ Comment[lv]=Minimālistisks logu menedžeris bāzēts uz AEWM
+ Comment[mk]=Минималистички менаџер на прозорци базиран на AEWM
+--- a/kdm/kfrontend/sessions/larswm.desktop
++++ b/kdm/kfrontend/sessions/larswm.desktop
+@@ -5,6 +5,7 @@
+ TryExec=larswm
+ Name=LarsWM
+ Name[eo]=Lazero
++Name[ko]=라이코스
+ Name[sv]=Lars WM
+ Name[te]=లార్స్ డబ్ల్యు ఎం
+ Name[x-test]=xxLarsWMxx
+--- a/kdm/kfrontend/sessions/gnome.desktop
++++ b/kdm/kfrontend/sessions/gnome.desktop
+@@ -6,6 +6,7 @@
+ Name=GNOME
+ Name[ar]=جنوم
+ Name[eo]=Gnomikuo
++Name[ko]=그놈
+ Name[ne]=जिनोम
+ Name[sv]=Gnome
+ Name[ta]=க்னோம்
+@@ -39,6 +40,7 @@
+ Comment[ka]=GNU Network Object Model Environment - სრული, თავისუფალი და ადვილად გამოყენებადი სამუშაო გარემო
+ Comment[kk]=GNU Network Object Model Environment. Толық, еркін таратылатын, ыңғайлы графикалық орта
+ Comment[km]=បរិស្ថាន​ផ្ទៃតុ​ម៉ូដែល​វត្ថុ​​បណ្តាញ GNU ។ បរិស្ថាន​ផ្ទៃតុ​​ពេញលេញ ឥត​គិត​ថ្លៃ និង​ងាយស្រួល​ប្រើ
++Comment[ko]=GNU Network Object Model Environment(그놈). 완전한 자유 소프트웨어 데스크톱 환경입니다.
+ Comment[lt]=GNU tinklo objektų modeliavimo aplinka. Savarankiška, laisva ir lengvai naudojama darbastalio aplinka
+ Comment[lv]=GNU Network Object Model Environment. Pilnvērtīga bezmaksas viegli lietojama darba vide. 
+ Comment[mk]=GNU Network Object Model Environment. Работна околина која е комплетна, слободна и едноставна за користење
+--- a/kdm/kfrontend/sessions/wm2.desktop
++++ b/kdm/kfrontend/sessions/wm2.desktop
+@@ -35,6 +35,7 @@
+ Comment[ka]=პატარა და არაკონფიგურირებადი ფანჯრის მენეჯერი
+ Comment[kk]=Шағын, баптауы жоқ, терезе менеджері
+ Comment[km]=កម្មវិធី​គ្រប់គ្រង​បង្អួច​តូច ហើយ​មិន​អាច​កំណត់​រចនាសម្ព័ន្ធ​
++Comment[ko]=설정할 수 없는 작은 창 관리자
+ Comment[lt]=Maža, nekonfigūruojama langų tvarkyklė
+ Comment[lv]=Mazs, nekonfigurējams logu menedžeris
+ Comment[mk]=Мал и неконфигурабилен менаџер на прозорци
+--- a/ksysguard/ksysguardd/NetBSD/loadavg.c
++++ b/ksysguard/ksysguardd/NetBSD/loadavg.c
+@@ -37,17 +37,24 @@
+ 	if (updateLoadAvg() < 0)
+ 		return;
+ 
+-	registerMonitor("cpu/loadavg1", "float", printLoadAvg1,
+-					printLoadAvg1Info, sm);
+-	registerMonitor("cpu/loadavg5", "float", printLoadAvg5,
+-					printLoadAvg5Info, sm);
+-	registerMonitor("cpu/loadavg15", "float", printLoadAvg15,
+-					printLoadAvg15Info, sm);
++	registerMonitor("cpu/system/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm);
++	registerMonitor("cpu/system/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm);
++	registerMonitor("cpu/system/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm);
++	
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor("cpu/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm);
++	registerLegacyMonitor("cpu/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm);
++	registerLegacyMonitor("cpu/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm);
+ }
+ 
+ void
+ exitLoadAvg(void)
+ {
++	removeMonitor("cpu/system/loadavg1");
++	removeMonitor("cpu/system/loadavg5");
++	removeMonitor("cpu/system/loadavg15");
++	
++	/* These were registered as legacy monitors */
+ 	removeMonitor("cpu/loadavg1");
+ 	removeMonitor("cpu/loadavg5");
+ 	removeMonitor("cpu/loadavg15");
+--- a/ksysguard/ksysguardd/NetBSD/CPU.c
++++ b/ksysguard/ksysguardd/NetBSD/CPU.c
+@@ -53,14 +53,17 @@
+ initCpuInfo(struct SensorModul* sm)
+ {
+ 	/* Total CPU load */
+-	registerMonitor("cpu/system/user", "integer", printCPUUser,
+-			printCPUUserInfo, sm);
+-	registerMonitor("cpu/system/nice", "integer", printCPUNice,
+-			printCPUNiceInfo, sm);
+-	registerMonitor("cpu/system/sys", "integer", printCPUSys,
+-			printCPUSysInfo, sm);
+-	registerMonitor("cpu/system/idle", "integer", printCPUIdle,
+-			printCPUIdleInfo, sm);
++	registerMonitor("cpu/system/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerMonitor("cpu/system/nice", "integer", printCPUNice, printCPUNiceInfo, sm);
++	registerMonitor("cpu/system/sys", "integer", printCPUSys, printCPUSysInfo, sm);
++	registerMonitor("cpu/system/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
++	
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor("cpu/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerLegacyMonitor("cpu/nice", "integer", printCPUNice, printCPUNiceInfo, sm);
++	registerLegacyMonitor("cpu/sys", "integer", printCPUSys, printCPUSysInfo, sm);
++	registerLegacyMonitor("cpu/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
++	
+ 	kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open");
+ 	kvm_nlist(kd, my_nlist);
+ 	cp_time_offset = my_nlist[0].n_value;
+@@ -71,6 +74,18 @@
+ void
+ exitCpuInfo(void)
+ {
++	removeMonitor("cpu/system/user");
++	removeMonitor("cpu/system/nice");
++	removeMonitor("cpu/system/sys");
++	removeMonitor("cpu/system/idle");
++
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/user");
++	removeMonitor("cpu/nice");
++	removeMonitor("cpu/sys");
++	removeMonitor("cpu/idle");
++
++
+ 	kvm_close(kd);
+ }
+ 
+--- a/ksysguard/ksysguardd/Tru64/LoadAvg.c
++++ b/ksysguard/ksysguardd/Tru64/LoadAvg.c
+@@ -42,16 +42,28 @@
+ 
+ void initLoadAvg( struct SensorModul* sm ) {
+ #ifdef HAVE_KSTAT
+-	registerMonitor( "cpu/loadavg1", "float",
+-					printLoadAvg1, printLoadAvg1Info, sm );
+-	registerMonitor( "cpu/loadavg5", "float",
+-					printLoadAvg5, printLoadAvg5Info, sm );
+-	registerMonitor( "cpu/loadavg15", "float",
+-					printLoadAvg15, printLoadAvg15Info, sm );
++	registerMonitor( "cpu/system/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++	registerMonitor( "cpu/system/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++	registerMonitor( "cpu/system/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
++	
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerMonitor( "cpu/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++	registerMonitor( "cpu/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++	registerMonitor( "cpu/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
+ #endif
+ }
+ 
+ void exitLoadAvg( void ) {
++#ifdef HAVE_KSTAT
++	removeMonitor("cpu/system/loadavg1");
++	removeMonitor("cpu/system/loadavg5");
++	removeMonitor("cpu/system/loadavg15");
++	
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/loadavg1");
++	removeMonitor("cpu/loadavg5");
++	removeMonitor("cpu/loadavg15");
++#endif
+ }
+ 
+ int updateLoadAvg( void ) {
+--- a/ksysguard/ksysguardd/OpenBSD/cpu.c
++++ b/ksysguard/ksysguardd/OpenBSD/cpu.c
+@@ -44,16 +44,17 @@
+ initCpuInfo(struct SensorModul* sm)
+ {
+ 	/* Total CPU load */
+-	registerMonitor("cpu/system/user", "integer", printCPUUser,
+-			printCPUUserInfo, sm);
+-	registerMonitor("cpu/system/nice", "integer", printCPUNice,
+-			printCPUNiceInfo, sm);
+-	registerMonitor("cpu/system/sys", "integer", printCPUSys,
+-			printCPUSysInfo, sm);
+-	registerMonitor("cpu/system/idle", "integer", printCPUIdle,
+-			printCPUIdleInfo, sm);
+-	registerMonitor("cpu/interrupt", "integer", printCPUInterrupt,
+-			printCPUInterruptInfo, sm);
++	registerMonitor("cpu/system/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerMonitor("cpu/system/nice", "integer", printCPUNice, printCPUNiceInfo, sm);
++	registerMonitor("cpu/system/sys", "integer", printCPUSys, printCPUSysInfo, sm);
++	registerMonitor("cpu/system/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
++	registerMonitor("cpu/interrupt", "integer", printCPUInterrupt, printCPUInterruptInfo, sm);
++
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor("cpu/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerLegacyMonitor("cpu/nice", "integer", printCPUNice, printCPUNiceInfo, sm);
++	registerLegacyMonitor("cpu/sys", "integer", printCPUSys, printCPUSysInfo, sm);
++	registerLegacyMonitor("cpu/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
+ 
+ 	updateCpuInfo();
+ }
+@@ -61,6 +62,17 @@
+ void
+ exitCpuInfo(void)
+ {
++	removeMonitor("cpu/system/user");
++	removeMonitor("cpu/system/nice");
++	removeMonitor("cpu/system/sys");
++	removeMonitor("cpu/system/idle");
++	removeMonitor("cpu/interrupt");
++	
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/user");
++	removeMonitor("cpu/nice");
++	removeMonitor("cpu/sys");
++	removeMonitor("cpu/idle");
+ }
+ 
+ int
+--- a/ksysguard/ksysguardd/Linux/stat.c
++++ b/ksysguard/ksysguardd/Linux/stat.c
+@@ -297,15 +297,15 @@
+ 			
+ 			/* Disk device has disappeared. We have to remove it from
+ 			* the list and unregister the monitors. */
+-			sprintf( sensorName, "disk/%s_(%d:%d)26/total", ptr->devname, ptr->major, ptr->minor );
++			sprintf( sensorName, "disk/%s_(%d:%d)24/total", ptr->devname, ptr->major, ptr->minor );
+ 			removeMonitor( sensorName );
+-			sprintf( sensorName, "disk/%s_(%d:%d)26/rio", ptr->devname, ptr->major, ptr->minor );
++			sprintf( sensorName, "disk/%s_(%d:%d)24/rio", ptr->devname, ptr->major, ptr->minor );
+ 			removeMonitor( sensorName );
+-			sprintf( sensorName, "disk/%s_(%d:%d)26/wio", ptr->devname, ptr->major, ptr->minor );
++			sprintf( sensorName, "disk/%s_(%d:%d)24/wio", ptr->devname, ptr->major, ptr->minor );
+ 			removeMonitor( sensorName );
+-			sprintf( sensorName, "disk/%s_(%d:%d)26/rblk", ptr->devname, ptr->major, ptr->minor );
++			sprintf( sensorName, "disk/%s_(%d:%d)24/rblk", ptr->devname, ptr->major, ptr->minor );
+ 			removeMonitor( sensorName );
+-			sprintf( sensorName, "disk/%s_(%d:%d)26/wblk", ptr->devname, ptr->major, ptr->minor );
++			sprintf( sensorName, "disk/%s_(%d:%d)24/wblk", ptr->devname, ptr->major, ptr->minor );
+ 			removeMonitor( sensorName );
+ 			if ( last ) {
+ 				last->next = ptr->next;
+@@ -492,6 +492,14 @@
+ 			registerMonitor( "cpu/system/TotalLoad", "float", printCPUTotalLoad, printCPUTotalLoadInfo, StatSM );
+ 			registerMonitor( "cpu/system/idle", "float", printCPUIdle, printCPUIdleInfo, StatSM );
+ 			registerMonitor( "cpu/system/wait", "float", printCPUWait, printCPUWaitInfo, StatSM );
++
++			/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++			registerLegacyMonitor( "cpu/user", "float", printCPUUser, printCPUUserInfo, StatSM );
++			registerLegacyMonitor( "cpu/nice", "float", printCPUNice, printCPUNiceInfo, StatSM );
++			registerLegacyMonitor( "cpu/sys", "float", printCPUSys, printCPUSysInfo, StatSM );
++			registerLegacyMonitor( "cpu/TotalLoad", "float", printCPUTotalLoad, printCPUTotalLoadInfo, StatSM );
++			registerLegacyMonitor( "cpu/idle", "float", printCPUIdle, printCPUIdleInfo, StatSM );
++			registerLegacyMonitor( "cpu/wait", "float", printCPUWait, printCPUWaitInfo, StatSM );
+ 		}
+ 		else if ( strncmp( "cpu", tag, 3 ) == 0 ) {
+ 			char cmdName[ 24 ];
+@@ -608,6 +616,19 @@
+ 	
+ 	free( Intr );
+ 	Intr = 0;
++	
++	removeMonitor("cpu/system/user");
++	removeMonitor("cpu/system/nice");
++	removeMonitor("cpu/system/sys");
++	removeMonitor("cpu/system/idle");
++	
++	/* Todo: Dynamically registered monitors (per cpu, per disk) are not removed yet) */
++	
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/user");
++	removeMonitor("cpu/nice");
++	removeMonitor("cpu/sys");
++	removeMonitor("cpu/idle");
+ }
+ 	
+ int updateStat( void ) {
+@@ -1006,7 +1027,7 @@
+ 	char name[ 17 ];
+ 	DiskIOInfo* ptr;
+ 	
+-	sscanf( cmd, "disk/%[^_]_(%d:%d)26/%16s", devname, &major, &minor, name );
++	sscanf( cmd, "disk/%[^_]_(%d:%d)/%16s", devname, &major, &minor, name );
+ 	
+ 	if ( Dirty )
+ 		process24Stat();
+@@ -1045,7 +1066,7 @@
+ 	char name[ 17 ];
+ 	DiskIOInfo* ptr = DiskIO;
+ 	
+-	sscanf( cmd, "disk/%[^_]_(%d:%d)26/%16s", devname, &major, &minor, name );
++	sscanf( cmd, "disk/%[^_]_(%d:%d)/%16s", devname, &major, &minor, name );
+ 	
+ 	while ( ptr && ( ptr->major != major || ptr->minor != minor ) )
+ 		ptr = ptr->next;
+--- a/ksysguard/ksysguardd/Linux/acpi.c
++++ b/ksysguard/ksysguardd/Linux/acpi.c
+@@ -336,6 +336,8 @@
+ 
+ void printThermalZoneTemperatureInfo(const char *cmd)
+ {
++	(void)cmd;
++
+ 	fprintf(CurrentClient, "Current temperature\t0\t0\tC\n");
+ }
+ 
+@@ -434,7 +436,7 @@
+ 
+ void printFanStateInfo(const char *cmd)
+ {
++	(void)cmd;
++
+ 	fprintf(CurrentClient, "Fan status\t0\t1\tboolean\n");
+ }
+-
+-
+--- a/ksysguard/ksysguardd/Linux/loadavg.c
++++ b/ksysguard/ksysguardd/Linux/loadavg.c
+@@ -57,6 +57,11 @@
+   registerMonitor( "cpu/system/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
+   registerMonitor( "cpu/system/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
+   registerMonitor( "cpu/system/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
++
++  /* Register some legacy monitors. These will be hidden from the module list. */
++  registerLegacyMonitor( "cpu/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++  registerLegacyMonitor( "cpu/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++  registerLegacyMonitor( "cpu/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
+ }
+ 
+ void exitLoadAvg( void )
+--- a/ksysguard/ksysguardd/Linux/cpuinfo.c
++++ b/ksysguard/ksysguardd/Linux/cpuinfo.c
+@@ -34,8 +34,12 @@
+ #include "cpuinfo.h"
+ 
+ static int CpuInfoOK = 0;
+-static float* Clocks = 0;
+-static int CPUs = 0;
++static int numProcessors = 0; /* Total number of physical processors */
++static int HighNumProcessors = 0; /* Highest # number of physical processors ever seen */
++static int* ProcessorCores = 0; /* Array with one entry per processor */
++static int numCores = 0; /* Total # of cores */
++static int HighNumCores = 0; /* Highest # of cores ever seen */
++static float* Clocks = 0; /* Array with one entry per core */
+ 
+ #define CPUINFOBUFSIZE (32 * 1024)
+ static char CpuInfoBuf[ CPUINFOBUFSIZE ];
+@@ -48,7 +52,14 @@
+   char tag[ 32 ];
+   char value[ 256 ];
+   char* cibp = CpuInfoBuf;
+-  int cpuId = 0;
++
++  /* coreUniqueId is not per processor; it is a counter of the number of cores encountered
++   * by the parse thus far */
++  int coreUniqueId = 0;
++
++  /* Reset global variables */
++  numCores = 0;
++  numProcessors = 0;
+ 
+   if ( !CpuInfoOK )
+     return;
+@@ -58,8 +69,10 @@
+ 
+   while ( sscanf( cibp, format, tag, value ) == 2 ) {
+     char* p;
++
+     tag[ sizeof( tag ) - 1 ] = '\0';
+     value[ sizeof( value ) - 1 ] = '\0';
++
+     /* remove trailing whitespaces */
+     p = tag + strlen( tag ) - 1;
+     /* remove trailing whitespaces */
+@@ -67,20 +80,45 @@
+       *p-- = '\0';
+ 
+     if ( strcmp( tag, "processor" ) == 0 ) {
+-      if ( sscanf( value, "%d", &cpuId ) == 1 ) {
+-        if ( cpuId >= CPUs ) {
++      if ( sscanf( value, "%d", &coreUniqueId ) == 1 ) {
++        if ( coreUniqueId >= HighNumCores ) {
++	  /* Found a new processor core. Maybe even a new processor. (We'll check later) */
+           char cmdName[ 24 ];
+-          if ( Clocks )
+-            free( Clocks );
+-          CPUs = cpuId + 1;
+-          Clocks = (float*) malloc( CPUs * sizeof( float ) );
+-          snprintf( cmdName, sizeof( cmdName ) - 1, "cpu/cpu%d/clock", cpuId );
++
++	  HighNumCores = coreUniqueId + 1;
++
++	  /* Each core has a clock speed. Allocate one per core found. */
++	  Clocks = (float*) realloc( Clocks, HighNumCores * sizeof( float ) );
++
++	  snprintf( cmdName, sizeof( cmdName ) - 1, "cpu/cpu%d/clock", coreUniqueId );
+           registerMonitor( cmdName, "float", printCPUxClock, printCPUxClockInfo,
+                            CpuInfoSM );
+-        }
++	}
++      }
++    } else if ( strcmp( tag, "cpu MHz" ) == 0 ) {
++      if (HighNumCores > coreUniqueId) {
++        /* The if statement above *should* always be true, but there's no harm in being safe. */
++        sscanf( value, "%f", &Clocks[ coreUniqueId ] );
++      }
++    } else if ( strcmp( tag, "core id" ) == 0 ) {
++      /* the core id is per processor */
++      int curCore;
++      
++      if ( (sscanf( value, "%d", &curCore ) == 1) && curCore == 0 ) {
++	/* core id is back at 0. We just found a new processor. */
++	numProcessors++;
++
++	if (numProcessors > HighNumProcessors) {
++	    HighNumProcessors = numProcessors;
++	    ProcessorCores = (int*) realloc( ProcessorCores, HighNumProcessors * sizeof( int ) );
++	}
+       }
+-    } else if ( strcmp( tag, "cpu MHz" ) == 0 )
+-      sscanf( value, "%f", &Clocks[ cpuId ] );
++    } else if ( strcmp( tag, "cpu cores" ) == 0 ) {
++      if (numProcessors > 0) {
++        /* numProcessors *should* be > 0, we were just making sure. */
++        sscanf( value, "%d", &ProcessorCores[ numProcessors - 1 ] );
++      }
++    }
+ 
+     /* Move cibp to beginning of next line, if there is one. */
+     cibp = strchr( cibp, '\n' );
+@@ -90,6 +128,8 @@
+       cibp = CpuInfoBuf + strlen( CpuInfoBuf );
+   }
+ 
++  numCores = coreUniqueId + 1;
++
+   Dirty = 0;
+ }
+ 
+@@ -104,6 +144,11 @@
+   if ( updateCpuInfo() < 0 )
+     return;
+ 
++  registerMonitor( "system/processors", "integer", printNumCpus, printNumCpusInfo,
++                           CpuInfoSM );
++  registerMonitor( "system/cores", "integer", printNumCores, printNumCoresInfo,
++                           CpuInfoSM );
++
+   processCpuInfo();
+ }
+ 
+@@ -166,3 +211,29 @@
+   sscanf( cmd + 7, "%d", &id );
+   fprintf( CurrentClient, "CPU%d Clock Frequency\t0\t0\tMHz\n", id );
+ }
++
++void printNumCpus( const char* cmd )
++{
++  if ( Dirty )
++    processCpuInfo();
++
++  fprintf( CurrentClient, "%d\n", numProcessors );
++}
++
++void printNumCpusInfo( const char* cmd )
++{
++  fprintf( CurrentClient, "Number of physical CPUs\t0\t0\t\n" );
++}
++
++void printNumCores( const char* cmd )
++{
++  if ( Dirty )
++    processCpuInfo();
++
++  fprintf( CurrentClient, "%d\n", numCores );
++}
++
++void printNumCoresInfo( const char* cmd )
++{
++  fprintf( CurrentClient, "Total number of processor cores\t0\t0\t\n" );
++}
+--- a/ksysguard/ksysguardd/Linux/cpuinfo.h
++++ b/ksysguard/ksysguardd/Linux/cpuinfo.h
+@@ -29,4 +29,10 @@
+ void printCPUxClock( const char* );
+ void printCPUxClockInfo( const char* );
+ 
++void printNumCpus( const char* cmd );
++void printNumCpusInfo( const char* cmd );
++
++void printNumCores( const char* cmd );
++void printNumCoresInfo( const char* cmd );
++
+ #endif
+--- a/ksysguard/ksysguardd/Linux/diskstats.c
++++ b/ksysguard/ksysguardd/Linux/diskstats.c
+@@ -80,12 +80,7 @@
+ static struct SensorModul* StatSM;
+ 
+ static DiskLoadInfo* DiskLoad = 0;
+-static unsigned DiskCount = 0;
+ static DiskIOInfo* DiskIO = 0;
+-static unsigned long PageIn = 0;
+-static unsigned long OldPageIn = 0;
+-static unsigned long PageOut = 0;
+-static unsigned long OldPageOut = 0;
+ 
+ static char IOStatBuf[ DISKSTATSBUFSIZE ];	/* Buffer for /proc/diskstats */
+ static int Dirty = 0;
+--- a/ksysguard/ksysguardd/Linux/ProcessList.c
++++ b/ksysguard/ksysguardd/Linux/ProcessList.c
+@@ -29,6 +29,10 @@
+ #include <sys/resource.h>
+ #include <time.h>
+ #include <unistd.h>
++#include <sys/ptrace.h>
++#include <asm/unistd.h>
++
++
+ 
+ #include "../../gui/SignalIDs.h"
+ #include "Command.h"
+@@ -42,6 +46,58 @@
+ #define TAGSIZE 32
+ #define KDEINITLEN sizeof( "kdeinit: " )
+ 
++/* For ionice */
++extern int sys_ioprio_set(int, int, int);
++extern int sys_ioprio_get(int, int);
++
++#define HAVE_IONICE
++
++/* Check if this system has ionice */
++#if !defined(SYS_ioprio_get) || !defined(SYS_ioprio_set)
++/* All new kernels have SYS_ioprio_get and _set defined, but for the few that do not, here are the definitions */
++#if defined(__i386__)
++#define __NR_ioprio_set         289
++#define __NR_ioprio_get         290
++#elif defined(__ppc__) || defined(__powerpc__)
++#define __NR_ioprio_set         273
++#define __NR_ioprio_get         274
++#elif defined(__x86_64__)
++#define __NR_ioprio_set         251
++#define __NR_ioprio_get         252
++#elif defined(__ia64__)
++#define __NR_ioprio_set         1274
++#define __NR_ioprio_get         1275
++#else
++#ifdef __GNUC__
++#warning "This architecture does not support IONICE.  Disabling ionice feature."
++#endif
++#undef HAVE_IONICE
++#endif
++/* Map these to SYS_ioprio_get */
++#define SYS_ioprio_get                __NR_ioprio_get
++#define SYS_ioprio_set                __NR_ioprio_set
++
++#endif /* !SYS_ioprio_get */
++
++/* Set up ionice functions */
++#ifdef HAVE_IONICE
++#define IOPRIO_WHO_PROCESS 1
++#define IOPRIO_CLASS_SHIFT 13
++
++/* Expose the kernel calls to usespace via syscall
++ * See man ioprio_set  and man ioprio_get   for information on these functions */
++static int ioprio_set(int which, int who, int ioprio)
++{
++  return syscall(SYS_ioprio_set, which, who, ioprio);
++}
++ 
++static int ioprio_get(int which, int who)
++{
++  return syscall(SYS_ioprio_get, which, who);
++}
++#endif
++
++
+ #ifndef bool
+ #define bool char
+ #define true 1
+@@ -57,22 +113,22 @@
+ 
+ typedef struct {
+ 
+-  /* The parent process ID */
++  /** The parent process ID */
+   pid_t ppid;
+ 
+-  /* The real user ID */
++  /** The real user ID */
+   uid_t uid;
+ 
+-  /* The real group ID */
++  /** The real group ID */
+   gid_t gid;
+ 
+-  /* The process ID of any application that is debugging this one. 0 if none */
++  /** The process ID of any application that is debugging this one. 0 if none */
+   pid_t tracerpid;
+ 
+-  /* A character description of the process status */
++  /** A character description of the process status */
+   char status[ 16 ];
+ 
+-  /* The tty the process owns */
++  /** The tty the process owns */
+   char tty[10];
+ 
+   /**
+@@ -81,9 +137,13 @@
+    */
+   int niceLevel;
+ 
+-  /* The scheduling priority. */
++  /** The scheduling priority. */
+   int priority;
+ 
++  /** The i/o scheduling class and priority. */
++  int ioPriorityClass;  /** 0 for none, 1 for realtime, 2 for best-effort, 3 for idle.  -1 for error. */
++  int ioPriority;       /** Between 0 and 7.  0 is highest priority, 7 is lowest.  -1 for error. */
++
+   /**
+     The total amount of virtual memory space that this process uses. This includes shared and
+     swapped memory, plus graphics memory and mmap'ed files and so on.
+@@ -102,8 +162,8 @@
+   
+   unsigned long vmRss;
+ 
+-  /* The amount of physical memory that is used by this process, not including any memory used by any shared libraries.
+-   * This is in KiB */
++  /** The amount of physical memory that is used by this process, not including any memory used by any shared libraries.
++   *  This is in KiB */
+   unsigned long vmURss;
+ 
+   /**
+@@ -124,17 +184,20 @@
+ 
+   /* NOTE:  To get the user/system percentage, record the userTime and sysTime from between calls, then use the difference divided by the difference in time measure in 100th's of a second */
+ 
+-  /* The name of the process */
++  /** The name of the process */
+   char name[ 64 ];
+ 
+-  /* The command used to start the process */
++  /** The command used to start the process */
+   char cmdline[ 256 ];
+ 
+-  /* The login name of the user that owns this process */
++  /** The login name of the user that owns this process */
+   char userName[ 32 ];
+ 
+ } ProcessInfo;
+ 
++void getIOnice( int pid, ProcessInfo *ps );
++void ioniceProcess( const char* cmd );
++
+ static unsigned ProcessCount;
+ static DIR* procDir;
+ static void validateStr( char* str )
+@@ -311,6 +374,9 @@
+   strncpy( ps->userName, uName, sizeof( ps->userName ) - 1 );
+   ps->userName[ sizeof( ps->userName ) - 1 ] = '\0';
+   validateStr( ps->userName );
++
++  getIOnice(pid, ps);
++
+   return true;
+ }
+ 
+@@ -327,11 +393,11 @@
+       long pid;
+       pid = atol( entry->d_name );
+       if(getProcess( pid, &ps ))
+-        fprintf( CurrentClient, "%s\t%ld\t%ld\t%lu\t%lu\t%s\t%lu\t%lu\t%d\t%lu\t%lu\t%lu\t%s\t%ld\t%s\t%s\n",
++        fprintf( CurrentClient, "%s\t%ld\t%ld\t%lu\t%lu\t%s\t%lu\t%lu\t%d\t%lu\t%lu\t%lu\t%s\t%ld\t%s\t%s\t%d\t%d\n",
+ 	     ps.name, pid, (long)ps.ppid,
+              (long)ps.uid, (long)ps.gid, ps.status, ps.userTime,
+              ps.sysTime, ps.niceLevel, ps.vmSize, ps.vmRss, ps.vmURss,
+-             ps.userName, (long)ps.tracerpid, ps.tty, ps.cmdline
++             ps.userName, (long)ps.tracerpid, ps.tty, ps.cmdline, ps.ioPriorityClass, ps.ioPriority
+ 	     );
+     }
+   }
+@@ -339,6 +405,22 @@
+   return;
+ }
+ 
++void getIOnice( int pid, ProcessInfo *ps ) {
++#ifdef HAVE_IONICE
++  int ioprio = ioprio_get(IOPRIO_WHO_PROCESS, pid);  /* Returns from 0 to 7 for the iopriority, and -1 if there's an error */
++  if(ioprio == -1) {
++	  ps->ioPriority = -1;
++	  ps->ioPriorityClass = -1;
++	  return; /* Error. Just give up. */
++  }
++  ps->ioPriority = ioprio & 0xff;  /* Bottom few bits are the priority */
++  ps->ioPriorityClass = ioprio >> IOPRIO_CLASS_SHIFT; /* Top few bits are the class */
++#else
++  return;  /* Do nothing, if we do not support this architecture */
++#endif
++}
++
++
+ /*
+ ================================ public part =================================
+ */
+@@ -353,6 +435,9 @@
+   if ( !RunAsDaemon ) {
+     registerCommand( "kill", killProcess );
+     registerCommand( "setpriority", setPriority );
++#ifdef HAVE_IONICE
++    registerCommand( "ionice", ioniceProcess );
++#endif
+   }
+ 
+ #ifdef HAVE_XRES
+@@ -361,6 +446,7 @@
+     registerMonitor( "xres", "table", printXresList, printXresListInfo, sm);
+   }
+ #endif
++
+   /*open /proc now in advance*/
+   /* read in current process list via the /proc file system entry */
+   if ( ( procDir = opendir( "/proc" ) ) == NULL ) {
+@@ -407,8 +493,8 @@
+ {
+   (void)cmd;
+   fprintf( CurrentClient, "Name\tPID\tPPID\tUID\tGID\tStatus\tUser Time\tSystem Time\tNice\tVmSize"
+-                          "\tVmRss\tVmURss\tLogin\tTracerPID\tTTY\tCommand\n" );
+-  fprintf( CurrentClient, "s\td\td\td\td\tS\td\td\td\tD\tD\tD\ts\td\ts\ts\n" );
++                          "\tVmRss\tVmURss\tLogin\tTracerPID\tTTY\tCommand\tIO Priority Class\tIO Priority\n" );
++  fprintf( CurrentClient, "s\td\td\td\td\tS\td\td\td\tD\tD\tD\ts\td\ts\ts\td\td\n" );
+ }
+ 
+ void printProcessCount( const char* cmd )
+@@ -433,6 +519,7 @@
+ 
+ void killProcess( const char* cmd )
+ {
++  /* Sends a signal (not neccessarily kill!) to the process.  cmd is a string containing "kill <pid> <signal>" */
+   int sig, pid;
+ 
+   sscanf( cmd, "%*s %d %d", &pid, &sig );
+@@ -542,3 +629,52 @@
+   } else
+     fprintf( CurrentClient, "0\t%d\t%d\n",pid, prio );
+ }
++
++void ioniceProcess( const char* cmd )
++{
++  /* Re-ionice's a process. cmd is a string containing "ionice <pid> <class> <priority>" 
++   * where c = 1 for real time, 2 for best-effort, 3 for idle
++   * and priority is between 0 and 7, 0 being the highest priority, and ignored if c=3
++   *
++   * For more information, see:  man ionice
++   */
++  int pid = 0;
++  int class = 2;
++  int priority = 0;
++  if(sscanf( cmd, "%*s %d %d %d", &pid, &class, &priority ) < 2) {
++    fprintf( CurrentClient, "4\t%d\n", pid ); /* 4 means error in values */
++    return; /* Error with input. */
++  }
++
++#ifdef HAVE_IONICE
++  if(pid < 1 || class < 0 || class > 3) {
++    fprintf( CurrentClient, "4\t%d\n", pid ); /* 4 means error in values */
++    return; /* Error with input. Just ignore. */
++  }
++
++  if (ioprio_set(IOPRIO_WHO_PROCESS, pid, priority | class << IOPRIO_CLASS_SHIFT) == -1) {
++    switch ( errno ) {
++      case EINVAL:
++        fprintf( CurrentClient, "4\t%d\n", pid );
++        break;
++      case ESRCH:
++        fprintf( CurrentClient, "3\t%d\n", pid );
++        break;
++      case EPERM:
++        fprintf( CurrentClient, "2\t%d\n", pid );
++        break;
++      default: /* unknown error */
++        fprintf( CurrentClient, "1\t%d\n", pid );
++        break;
++    }
++  } else {
++    /* Successful */
++    fprintf( CurrentClient, "0\t%d\n", pid );
++  }
++  return;
++#else
++  /** should never reach here */
++  fprintf( CurrentClient, "1\t%d\n", pid );
++  return;
++#endif
++}
+--- a/ksysguard/ksysguardd/Linux/softraid.c
++++ b/ksysguard/ksysguardd/Linux/softraid.c
+@@ -214,7 +214,11 @@
+ 	char* mdadmStatBufP;
+ 
+ 	/* Create a pipe */
+-	pipe(fd);
++	if(pipe(fd) == -1)
++	{
++		perror("Could not create a pipe to launch mdadm.");
++		exit(1);
++	}
+ 
+ 	/* Fork */
+ 	if((ChildPID = fork()) == -1)
+--- a/ksysguard/ksysguardd/Linux/ProcessList.h
++++ b/ksysguard/ksysguardd/Linux/ProcessList.h
+@@ -39,5 +39,6 @@
+ 
+ void killProcess( const char* );
+ void setPriority( const char* );
++void ioniceProcess( const char* );
+ 
+ #endif
+--- a/ksysguard/ksysguardd/Linux/netstat.c
++++ b/ksysguard/ksysguardd/Linux/netstat.c
+@@ -271,7 +271,7 @@
+ 	char buffer[1024];
+ 	uint local_addr, local_port;
+ 	uint remote_addr, remote_port;
+-	int uid, i;
++	int uid;
+ 	uint state;
+ 	SocketInfo *socket_info;
+ 
+@@ -367,7 +367,7 @@
+ 	FILE *file;
+ 	char buffer[1024];
+ 	char path[256];
+-	int ref_count, type, state, inode, i;
++	int ref_count, type, state, inode;
+ 	UnixInfo *unix_info;
+ 
+ 	if ((file = fopen("/proc/net/unix", "r")) == NULL) {
+--- a/ksysguard/ksysguardd/Command.c
++++ b/ksysguard/ksysguardd/Command.c
+@@ -36,6 +36,7 @@
+   cmdExecutor ex;
+   char* type;
+   int isMonitor;
++  int isLegacy;
+   struct SensorModul* sm;
+ } Command;
+ 
+@@ -139,8 +140,8 @@
+   ReconfigureFlag = 1;
+ }
+ 
+-void registerMonitor( const char* command, const char* type, cmdExecutor ex,
+-                      cmdExecutor iq, struct SensorModul* sm )
++void registerAnyMonitor( const char* command, const char* type, cmdExecutor ex,
++                      cmdExecutor iq, struct SensorModul* sm, int isLegacy )
+ {
+   /* Monitors are similar to regular commands except that every monitor
+    * registers two commands. The first is the value request command and
+@@ -156,6 +157,7 @@
+   cmd->type = (char*)malloc( strlen( type ) + 1 );
+   strcpy( cmd->type, type );
+   cmd->isMonitor = 1;
++  cmd->isLegacy = isLegacy;
+   cmd->sm = sm;
+   push_ctnr( CommandList, cmd );
+ 
+@@ -171,6 +173,22 @@
+   push_ctnr( CommandList, cmd );
+ }
+ 
++void registerMonitor( const char* command, const char* type, cmdExecutor ex,
++                      cmdExecutor iq, struct SensorModul* sm )
++{
++  int legacyFlag = 0;
++
++  registerAnyMonitor( command, type, ex, iq, sm, legacyFlag );
++}
++
++void registerLegacyMonitor( const char* command, const char* type, cmdExecutor ex,
++                      cmdExecutor iq, struct SensorModul* sm )
++{
++  int legacyFlag = 1;
++
++  registerAnyMonitor( command, type, ex, iq, sm, legacyFlag );
++}
++
+ void removeMonitor( const char* command )
+ {
+   char* buf;
+@@ -229,7 +247,7 @@
+   (void)c;
+ 
+   for ( cmd = first_ctnr( CommandList ); cmd; cmd = next_ctnr( CommandList ) ) {
+-    if ( cmd->isMonitor )
++    if ( cmd->isMonitor && !cmd->isLegacy )
+       fprintf(CurrentClient, "%s\t%s\n", cmd->command, cmd->type);
+   }
+ 
+--- a/ksysguard/ksysguardd/ksysguardd.c
++++ b/ksysguard/ksysguardd/ksysguardd.c
+@@ -154,7 +154,11 @@
+     fseek( file, 0, SEEK_SET );
+     fprintf( file, "%d\n", getpid() );
+     fflush( file );
+-    ftruncate( fileno( file ), ftell( file ) );
++    if (ftruncate( fileno( file ), ftell( file ) ) == -1) {
++      log_error( "Cannot set size of lockfile '%s'", LockFile );
++      fprintf( stderr, "Cannot set size of lockfile '%s'\n", LockFile );
++      return -2;
++    }
+   } else {
+     log_error( "Cannot create lockfile '%s'", LockFile );
+     fprintf( stderr, "Cannot create lockfile '%s'\n", LockFile );
+--- a/ksysguard/ksysguardd/Command.h
++++ b/ksysguard/ksysguardd/Command.h
+@@ -78,10 +78,37 @@
+   @ref sm is a parameter to the sensor module object that is passed by
+   the initXXX method.
+  */
++void registerAnyMonitor( const char* monitor, const char* type, cmdExecutor ex,
++                      cmdExecutor iq, struct SensorModul* sm, int isLegacy );
++
++/**
++  Use this function to add a new monitior with the name @ref monitor
++  from the type @ref type.
++  It will be marked as non-legacy.
++  @ref ex is a pointer to the function that is called to get a value
++  and @ref iq is a pointer to the function that returns information
++  about this monitor.
++  @ref sm is a parameter to the sensor module object that is passed by
++  the initXXX method.
++ */
+ void registerMonitor( const char* monitor, const char* type, cmdExecutor ex,
+                       cmdExecutor iq, struct SensorModul* sm );
+ 
+ /**
++  Use this function to add a new monitior with the name @ref monitor
++  from the type @ref type. This monitor will be flagged as legacy,
++  which will forbid it from being listed by the 'modules' command.
++  The command will continue to function normally otherwise.
++  @ref ex is a pointer to the function that is called to get a value
++  and @ref iq is a pointer to the function that returns information
++  about this monitor.
++  @ref sm is a parameter to the sensor module object that is passed by
++  the initXXX method.
++ */
++void registerLegacyMonitor( const char* monitor, const char* type, cmdExecutor ex,
++                      cmdExecutor iq, struct SensorModul* sm );
++
++/**
+   Use this function to remove the monitior with the name @ref monitor.
+  */
+ void removeMonitor( const char* monitor );
+--- a/ksysguard/ksysguardd/FreeBSD/loadavg.c
++++ b/ksysguard/ksysguardd/FreeBSD/loadavg.c
+@@ -37,17 +37,24 @@
+ 	if (updateLoadAvg() < 0)
+ 		return;
+ 
+-	registerMonitor("cpu/loadavg1", "float", printLoadAvg1,
+-					printLoadAvg1Info, sm);
+-	registerMonitor("cpu/loadavg5", "float", printLoadAvg5,
+-					printLoadAvg5Info, sm);
+-	registerMonitor("cpu/loadavg15", "float", printLoadAvg15,
+-					printLoadAvg15Info, sm);
++	registerMonitor("cpu/system/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm);
++	registerMonitor("cpu/system/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm);
++	registerMonitor("cpu/system/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm);
++
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor("cpu/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm);
++	registerLegacyMonitor("cpu/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm);
++	registerLegacyMonitor("cpu/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm);
+ }
+ 
+ void
+ exitLoadAvg(void)
+ {
++	removeMonitor("cpu/system/loadavg1");
++	removeMonitor("cpu/system/loadavg5");
++	removeMonitor("cpu/system/loadavg15");
++
++	/* These were registered as legacy monitors */
+ 	removeMonitor("cpu/loadavg1");
+ 	removeMonitor("cpu/loadavg5");
+ 	removeMonitor("cpu/loadavg15");
+--- a/ksysguard/ksysguardd/FreeBSD/CPU.c
++++ b/ksysguard/ksysguardd/FreeBSD/CPU.c
+@@ -71,14 +71,16 @@
+ initCpuInfo(struct SensorModul* sm)
+ {
+ 	/* Total CPU load */
+-	registerMonitor("cpu/system/user", "integer", printCPUUser,
+-			printCPUUserInfo, sm);
+-	registerMonitor("cpu/system/nice", "integer", printCPUNice,
+-			printCPUNiceInfo, sm);
+-	registerMonitor("cpu/system/sys", "integer", printCPUSys,
+-			printCPUSysInfo, sm);
+-	registerMonitor("cpu/system/idle", "integer", printCPUIdle,
+-			printCPUIdleInfo, sm);
++	registerMonitor("cpu/system/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerMonitor("cpu/system/nice", "integer", printCPUNice, printCPUNiceInfo, sm);
++	registerMonitor("cpu/system/sys", "integer", printCPUSys, printCPUSysInfo, sm);
++	registerMonitor("cpu/system/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
++
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor("cpu/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerLegacyMonitor("cpu/nice", "integer", printCPUNice, printCPUNiceInfo, sm);
++	registerLegacyMonitor("cpu/sys", "integer", printCPUSys, printCPUSysInfo, sm);
++	registerLegacyMonitor("cpu/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
+ 
+ 	updateCpuInfo();
+ }
+@@ -86,6 +88,16 @@
+ void
+ exitCpuInfo(void)
+ {
++	removeMonitor("cpu/system/user");
++	removeMonitor("cpu/system/nice");
++	removeMonitor("cpu/system/sys");
++	removeMonitor("cpu/system/idle");
++	
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/user");
++	removeMonitor("cpu/nice");
++	removeMonitor("cpu/sys");
++	removeMonitor("cpu/idle");
+ }
+ 
+ int
+--- a/ksysguard/ksysguardd/Irix/cpu.c
++++ b/ksysguard/ksysguardd/Irix/cpu.c
+@@ -70,12 +70,14 @@
+ 	g_ci = malloc(sizeof(struct cpu_info) * nCPUs);
+ 	memset(g_ci,0,sizeof(struct cpu_info) * nCPUs);
+ 
+-	registerMonitor("cpu/system/user", "integer", printCPUUser,
+-		printCPUUserInfo, sm);
+-	registerMonitor("cpu/system/sys",  "integer", printCPUSys,
+-		printCPUSysInfo, sm);
+-	registerMonitor("cpu/system/idle", "integer", printCPUIdle,
+-		printCPUIdleInfo, sm);
++	registerMonitor("cpu/system/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerMonitor("cpu/system/sys",  "integer", printCPUSys, printCPUSysInfo, sm);
++	registerMonitor("cpu/system/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
++	
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor("cpu/user", "integer", printCPUUser, printCPUUserInfo, sm);
++	registerLegacyMonitor("cpu/sys",  "integer", printCPUSys, printCPUSysInfo, sm);
++	registerLegacyMonitor("cpu/idle", "integer", printCPUIdle, printCPUIdleInfo, sm);
+ 
+ 	if (nCPUs > 1) for (i=0;i<nCPUs;i++){
+ 		/* indidividual CPU load */
+@@ -96,6 +98,20 @@
+ void
+ exitCpuInfo(void)
+ {
++	removeMonitor("cpu/system/user");
++	removeMonitor("cpu/system/nice");
++	removeMonitor("cpu/system/sys");
++	removeMonitor("cpu/system/idle");
++	
++	/* Todo: Dynamically registered monitors (per cpu, per disk) are not removed yet) */
++	
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/user");
++	removeMonitor("cpu/nice");
++	removeMonitor("cpu/sys");
++	removeMonitor("cpu/idle");
++	
++
+ 	free(g_ci);
+ }
+ 
+--- a/ksysguard/ksysguardd/Irix/LoadAvg.c
++++ b/ksysguard/ksysguardd/Irix/LoadAvg.c
+@@ -37,15 +37,25 @@
+ double loadavg15 = 0.0;
+ 
+ void initLoadAvg(struct SensorModul* sm ) {
+-	registerMonitor( "cpu/loadavg1", "float",
+-					printLoadAvg1, printLoadAvg1Info, sm );
+-	registerMonitor( "cpu/loadavg5", "float",
+-					printLoadAvg5, printLoadAvg5Info, sm );
+-	registerMonitor( "cpu/loadavg15", "float",
+-					printLoadAvg15, printLoadAvg15Info, sm );
++	registerMonitor( "cpu/system/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++	registerMonitor( "cpu/system/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++	registerMonitor( "cpu/system/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
++
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor( "cpu/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++	registerLegacyMonitor( "cpu/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++	registerLegacyMonitor( "cpu/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
+ }
+ 
+ void exitLoadAvg( void ) {
++	removeMonitor("cpu/system/loadavg1");
++	removeMonitor("cpu/system/loadavg5");
++	removeMonitor("cpu/system/loadavg15");
++
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/loadavg1");
++	removeMonitor("cpu/loadavg5");
++	removeMonitor("cpu/loadavg15");
+ }
+ 
+ int updateLoadAvg( void ) {
+--- a/ksysguard/ksysguardd/Solaris/LoadAvg.c
++++ b/ksysguard/ksysguardd/Solaris/LoadAvg.c
+@@ -39,16 +39,28 @@
+ 
+ void initLoadAvg( struct SensorModul* sm ) {
+ #ifdef HAVE_KSTAT
+-	registerMonitor( "cpu/loadavg1", "float",
+-					printLoadAvg1, printLoadAvg1Info, sm );
+-	registerMonitor( "cpu/loadavg5", "float",
+-					printLoadAvg5, printLoadAvg5Info, sm );
+-	registerMonitor( "cpu/loadavg15", "float",
+-					printLoadAvg15, printLoadAvg15Info, sm );
++	registerMonitor( "cpu/system/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++	registerMonitor( "cpu/system/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++	registerMonitor( "cpu/system/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
++	
++	/* Monitor names changed from kde3 => kde4. Remain compatible with legacy requests when possible. */
++	registerLegacyMonitor( "cpu/loadavg1", "float", printLoadAvg1, printLoadAvg1Info, sm );
++	registerLegacyMonitor( "cpu/loadavg5", "float", printLoadAvg5, printLoadAvg5Info, sm );
++	registerLegacyMonitor( "cpu/loadavg15", "float", printLoadAvg15, printLoadAvg15Info, sm );
+ #endif
+ }
+ 
+ void exitLoadAvg( void ) {
++#ifdef HAVE_KSTAT
++	removeMonitor("cpu/system/loadavg1");
++	removeMonitor("cpu/system/loadavg5");
++	removeMonitor("cpu/system/loadavg15");
++	
++	/* These were registered as legacy monitors */
++	removeMonitor("cpu/loadavg1");
++	removeMonitor("cpu/loadavg5");
++	removeMonitor("cpu/loadavg15");
++#endif
+ }
+ 
+ int updateLoadAvg( void ) {
+--- a/ksysguard/libksysguard/processcore/process.cpp
++++ b/ksysguard/libksysguard/processcore/process.cpp
+@@ -31,13 +31,36 @@
+ }
+ 
+ QString KSysGuard::Process::niceLevelAsString() const {
++	// Just some rough heuristic to map a number to how nice it is
+ 	if( niceLevel == 0) return i18nc("Process Niceness", "Normal");
+-	if( niceLevel > 15) return i18nc("Process Niceness", "Very low priority");
++	if( niceLevel >= 10) return i18nc("Process Niceness", "Very low priority");
+ 	if( niceLevel > 0) return i18nc("Process Niceness", "Low priority");
+-	if( niceLevel < -1) return i18nc("Process Niceness", "High priority");
+-	if( niceLevel < -15) return i18nc("Process Niceness", "Very high priority");
++	if( niceLevel <= -10) return i18nc("Process Niceness", "Very high priority");
++	if( niceLevel < 0) return i18nc("Process Niceness", "High priority");
+ 	return QString(); //impossible;
+ }
++
++QString KSysGuard::Process::ioniceLevelAsString() const {
++	// Just some rough heuristic to map a number to how nice it is
++	if( ioniceLevel == 4) return i18nc("Process Niceness", "Normal");
++	if( ioniceLevel >= 6) return i18nc("Process Niceness", "Very low priority");
++	if( ioniceLevel > 4) return i18nc("Process Niceness", "Low priority");
++	if( ioniceLevel <= 2) return i18nc("Process Niceness", "Very high priority");
++	if( ioniceLevel < 4) return i18nc("Process Niceness", "High priority");
++	return QString(); //impossible;
++
++}
++
++QString KSysGuard::Process::ioPriorityClassAsString() const {
++	switch( ioPriorityClass ) {
++		case None: return i18nc("Priority Class", "None");
++		case RealTime: return i18nc("Priority Class", "Real Time");
++		case BestEffort: return i18nc("Priority Class", "Best Effort");
++		case Idle: return i18nc("Priority Class", "Idle");
++		default: return i18nc("Priority Class", "Unknown");
++	}
++}
++
+ QString KSysGuard::Process::translatedStatus() const { 
+ 	switch( status ) { 
+ 		case Running: return i18nc("process status", "running");
+@@ -70,5 +93,7 @@
+ 	vmURSS = 0; 
+ 	status=OtherStatus;
+ 	parent = NULL;
++	ioPriorityClass = None;
++	ioniceLevel = -1;
+ }
+ 
+--- a/ksysguard/libksysguard/processcore/processes_freebsd_p.cpp
++++ b/ksysguard/libksysguard/processcore/processes_freebsd_p.cpp
+@@ -33,7 +33,8 @@
+ #include <err.h>
+ #endif
+ #include <signal.h>
+-#include <unistd.h>  
++#include <unistd.h>
++#include <stdlib.h>
+ 
+ 
+ 
+@@ -257,6 +258,14 @@
+     return true;
+ }
+ 
++bool ProcessesLocal::setIoNiceness(long pid, int priorityClass, int priority) {
++    return false; //Not yet supported
++}
++
++bool ProcessesLocal::supportsIoNiceness() {
++    return false;
++}
++
+ long long ProcessesLocal::totalPhysicalMemory() {
+ 
+     size_t Total;
+--- a/ksysguard/libksysguard/processcore/processes_openbsd_p.cpp
++++ b/ksysguard/libksysguard/processcore/processes_openbsd_p.cpp
+@@ -249,6 +249,14 @@
+     return true;
+ }
+ 
++bool ProcessesLocal::setIoNiceness(long pid, int priorityClass, int priority) {
++    return false; //Not yet supported
++}
++
++bool ProcessesLocal::supportsIoNiceness() {
++    return false;
++}
++
+ long long ProcessesLocal::totalPhysicalMemory() {
+ 
+     static int physmem_mib[] = { CTL_HW, HW_PHYSMEM };
+--- a/ksysguard/libksysguard/processcore/processes_remote_p.cpp
++++ b/ksysguard/libksysguard/processcore/processes_remote_p.cpp
+@@ -63,9 +63,20 @@
+     return false;
+ }
+ 
++bool ProcessesRemote::setIoNiceness(long pid, int priorityClass, int priority) {
++    return false; //Not yet supported
++}
++
++bool ProcessesRemote::supportsIoNiceness() {
++    return false;
++}
++
+ long long ProcessesRemote::totalPhysicalMemory() {
+     return 0;
+ }
++long ProcessesRemote::numberProcessorCores() {
++    return 0;
++}
+ 
+ ProcessesRemote::~ProcessesRemote()
+ {
+--- a/ksysguard/libksysguard/processcore/process.h
++++ b/ksysguard/libksysguard/processcore/process.h
+@@ -32,7 +32,8 @@
+ 
+   class KDE_EXPORT Process {
+     public:
+-	typedef enum { Running, Sleeping, DiskSleep, Zombie, Stopped, Paging, OtherStatus } ProcessStatus;
++	enum ProcessStatus { Running, Sleeping, DiskSleep, Zombie, Stopped, Paging, OtherStatus };
++	enum IoPriorityClass { None, RealTime, BestEffort, Idle };
+         Process();
+         Process(long long _pid, long long _ppid, Process *_parent);
+ 
+@@ -67,6 +68,8 @@
+         int totalSysUsage; ///Percentage (0 to 100) from the sum of itself and all its children recursively. If there's no children, it's equal to sysUsage. It might be more than 100% on multiple cpu core systems
+         unsigned long numChildren; ///Number of children recursively that this process has.  From 0+
+         int niceLevel;      ///Niceness (-20 to 20) of this process.  A lower number means a higher priority.
++        IoPriorityClass ioPriorityClass; /// The IO priority class.  See man ionice for detailed information.
++        int ioniceLevel;    ///IO Niceless (0 to 7) of this process.  A lower number means a higher io priority.  -1 if not known or not applicable because ioPriorityClass is Idle or None
+         long vmSize;   ///Virtual memory size in KiloBytes, including memory used, mmap'ed files, graphics memory etc,
+         long vmRSS;    ///Physical memory used by the process and its shared libraries.  If the process and libraries are swapped to disk, this could be as low as 0
+         long vmURSS;   ///Physical memory used only by the process, and not counting the code for shared libraries. Set to -1 if unknown
+@@ -78,9 +81,10 @@
+ 
+ 	QString translatedStatus() const;  /// Returns a translated string of the status. e.g. "Running" etc
+ 	QString niceLevelAsString() const; /// Returns a simple translated string of the nice priority.  e.g. "Normal", "High", etc
+-
+-
+-	int index;
++	QString ioniceLevelAsString() const; /// Returns a simple translated string of the io nice priority.  e.g. "Normal", "High", etc
++	QString ioPriorityClassAsString() const; /// Returns a translated string of the io nice class.  i.e. "None", "Real Time", "Best Effort", "Idle"
++        
++	int index;  /// Each process has a parent process.  Each sibling has a unique number to identify it under that parent.  This is that number.
+ 
+   private:
+         void clear();
+--- a/ksysguard/libksysguard/processcore/processes_base_p.h
++++ b/ksysguard/libksysguard/processcore/processes_base_p.h
+@@ -81,10 +81,31 @@
+ 	virtual bool setNiceness(long pid, int priority) = 0;
+ 
+ 	/**
+-	 *  Return the total amount of physical memory in KB.  This will be fairly expensive, so cache the result
++	 *  Return the total amount of physical memory in KB.  This is fast (just a system call)
+ 	 *  Returns 0 on error
+ 	 */
+ 	virtual long long totalPhysicalMemory() = 0;
++
++	/**
++	 *  Set the io priority for a process.  This is from 7 (very nice, lowest io priority) to
++	 *  0 (highest priority).  The default value is determined as: io_nice = (cpu_nice + 20) / 5.
++	 *
++	 *  @return false if you do not have permission to set the priority
++	 */
++	virtual bool setIoNiceness(long pid, int priorityClass, int priority) = 0;
++
++	/**
++	 *  Returns true if ionice is supported on this system
++	 */
++	virtual bool supportsIoNiceness() = 0;
++
++	/**
++	 *  Return the number of processor cores enabled. 
++	 *  (A system can disable procesors.  Disabled processors are not counted here).
++	 *  This is fast (just a system call) */
++	virtual long numberProcessorCores() = 0;
++
++
+     };
+ }
+ 
+--- a/ksysguard/libksysguard/processcore/processes_linux_p.cpp
++++ b/ksysguard/libksysguard/processcore/processes_linux_p.cpp
+@@ -36,10 +36,64 @@
+ #include <sys/resource.h>
+ #include <dirent.h>
+ #include <stdlib.h>
+-
++//for ionice
++#include <sys/ptrace.h>
++#include <asm/unistd.h>
+ 
+ #define PROCESS_BUFFER_SIZE 1000
+ 
++/* For ionice */
++extern int sys_ioprio_set(int, int, int);
++extern int sys_ioprio_get(int, int);
++
++#define HAVE_IONICE
++/* Check if this system has ionice */
++#if !defined(SYS_ioprio_get) || !defined(SYS_ioprio_set)
++/* All new kernels have SYS_ioprio_get and _set defined, but for the few that do not, here are the definitions */
++#if defined(__i386__)
++#define __NR_ioprio_set         289
++#define __NR_ioprio_get         290
++#elif defined(__ppc__) || defined(__powerpc__)
++#define __NR_ioprio_set         273
++#define __NR_ioprio_get         274
++#elif defined(__x86_64__)
++#define __NR_ioprio_set         251
++#define __NR_ioprio_get         252
++#elif defined(__ia64__)
++#define __NR_ioprio_set         1274
++#define __NR_ioprio_get         1275
++#else
++#ifdef __GNUC__
++#warning "This architecture does not support IONICE.  Disabling ionice feature."
++#endif
++#undef HAVE_IONICE
++#endif
++/* Map these to SYS_ioprio_get */
++#define SYS_ioprio_get                __NR_ioprio_get
++#define SYS_ioprio_set                __NR_ioprio_set
++
++#endif /* !SYS_ioprio_get */
++
++/* Set up ionice functions */
++#ifdef HAVE_IONICE
++#define IOPRIO_WHO_PROCESS 1
++#define IOPRIO_CLASS_SHIFT 13
++
++/* Expose the kernel calls to usespace via syscall
++ * See man ioprio_set  and man ioprio_get   for information on these functions */
++static int ioprio_set(int which, int who, int ioprio)
++{
++  return syscall(SYS_ioprio_set, which, who, ioprio);
++}
++ 
++static int ioprio_get(int which, int who)
++{
++  return syscall(SYS_ioprio_get, which, who);
++}
++#endif
++
++
++
+ 
+ namespace KSysGuard
+ {
+@@ -53,6 +107,7 @@
+       inline bool readProcStat(long pid, Process *process);
+       inline bool readProcStatm(long pid, Process *process);
+       inline bool readProcCmdline(long pid, Process *process);
++      inline bool getIoNice(long pid, Process *process);
+       QFile mFile;
+       char mBuffer[PROCESS_BUFFER_SIZE+1]; //used as a buffer to read data into      
+       DIR* mProcDir;
+@@ -291,12 +346,30 @@
+     mFile.close();
+     return true;
+ }
++
++bool ProcessesLocal::Private::getIoNice(long pid, Process *process) {
++#ifdef HAVE_IONICE
++  int ioprio = ioprio_get(IOPRIO_WHO_PROCESS, pid);  /* Returns from 0 to 7 for the iopriority, and -1 if there's an error */
++  if(ioprio == -1) {
++	  process->ioniceLevel = -1;
++	  process->ioPriorityClass = KSysGuard::Process::None;
++	  return false; /* Error. Just give up. */
++  }
++  process->ioniceLevel = ioprio & 0xff;  /* Bottom few bits are the priority */
++  process->ioPriorityClass = (KSysGuard::Process::IoPriorityClass)(ioprio >> IOPRIO_CLASS_SHIFT); /* Top few bits are the class */
++#else
++  return false;  /* Do nothing, if we do not support this architecture */
++#endif
++  return true;
++}
++
+ bool ProcessesLocal::updateProcessInfo( long pid, Process *process)
+ {
+     if(!d->readProcStat(pid, process)) return false;
+     if(!d->readProcStatus(pid, process)) return false;
+     if(!d->readProcStatm(pid, process)) return false;
+     if(!d->readProcCmdline(pid, process)) return false;
++    if(!d->getIoNice(pid, process)) return false;
+ 
+     return true;
+ }
+@@ -328,9 +401,34 @@
+     }
+     return true;
+ }
++bool ProcessesLocal::setIoNiceness(long pid, int priorityClass, int priority) {
++#ifdef HAVE_IONICE
++    if (ioprio_set(IOPRIO_WHO_PROCESS, pid, priority | priorityClass << IOPRIO_CLASS_SHIFT) == -1) {
++	    //set io niceness failed
++	    return false;
++    }
++    return true;
++#else
++    return false;
++#endif
++}
+ 
++bool ProcessesLocal::supportsIoNiceness() {
++#ifdef HAVE_IONICE
++    return true;
++#else
++    return false;
++#endif
++}
+ 
+ long long ProcessesLocal::totalPhysicalMemory() {
++    //Try to get the memory via sysconf.  Note the cast to long long to try to avoid a long overflow
++    //Should we use sysconf(_SC_PAGESIZE)  or getpagesize()  ?
++    long long memory = ((long long)sysconf(_SC_PHYS_PAGES)) * (sysconf(_SC_PAGESIZE)/1024);
++    if(memory > 0) return memory;
++
++    //This is backup code incase the above failed.  It should never fail on a linux system.
++
+     d->mFile.setFileName("/proc/meminfo");
+     if(!d->mFile.open(QIODevice::ReadOnly | QIODevice::Text))
+         return 0; 
+--- a/ksysguard/libksysguard/processcore/processes_local_p.h
++++ b/ksysguard/libksysguard/processcore/processes_local_p.h
+@@ -20,6 +20,8 @@
+ #define PROCESSES_LOCAL_H_
+ 
+ #include "processes_base_p.h"
++#include <unistd.h>  //For sysconf
++
+ 
+ #include <QSet>
+ 
+@@ -40,6 +42,9 @@
+ 	virtual bool sendSignal(long pid, int sig);
+         virtual bool setNiceness(long pid, int priority);
+ 	virtual long long totalPhysicalMemory();
++	virtual bool setIoNiceness(long pid, int priorityClass, int priority);
++	virtual bool supportsIoNiceness();
++	virtual long numberProcessorCores() { return sysconf(_SC_NPROCESSORS_ONLN); } //This should work on any posix system
+ 
+       private:
+ 	/**
+--- a/ksysguard/libksysguard/processcore/processes_remote_p.h
++++ b/ksysguard/libksysguard/processcore/processes_remote_p.h
+@@ -37,6 +37,9 @@
+ 	virtual bool sendSignal(long pid, int sig);
+         virtual bool setNiceness(long pid, int priority);
+ 	virtual long long totalPhysicalMemory();
++	virtual bool setIoNiceness(long pid, int priorityClass, int priority);
++	virtual bool supportsIoNiceness();
++	virtual long numberProcessorCores();
+ 
+       private:
+ 	/**
+--- a/ksysguard/libksysguard/processcore/processes.cpp
++++ b/ksysguard/libksysguard/processcore/processes.cpp
+@@ -92,7 +92,7 @@
+     }
+ }
+ 
+-void Processes::returnInstance(const QString &host) { //static
++void Processes::returnInstance(const QString &/*host*/) { //static
+ 	//Implement - we need reference counting etc
+ }
+ Processes::Processes(AbstractProcesses *abstractProcesses) : d(new Private())
+@@ -163,7 +163,11 @@
+        ps->name != old_process.name ||
+        ps->command != old_process.command ||
+        ps->status != old_process.status ||
+-       ps->uid != old_process.uid ) {
++       ps->uid != old_process.uid || 
++       ps->tracerpid != old_process.tracerpid ||
++       ps->niceLevel != old_process.niceLevel ||
++       ps->ioniceLevel != old_process.ioniceLevel ||
++       ps->ioPriorityClass != old_process.ioPriorityClass ) {
+ 
+        emit processChanged(ps, false);
+ 
+@@ -316,9 +320,22 @@
+     return d->mAbstractProcesses->setNiceness(pid, priority);
+ }
+ 
++bool Processes::setIoNiceness(long pid, KSysGuard::Process::IoPriorityClass priorityClass, int priority) {
++    return d->mAbstractProcesses->setIoNiceness(pid, priorityClass, priority);
++}
++
++bool Processes::supportsIoNiceness() { 
++    return d->mAbstractProcesses->supportsIoNiceness();
++}
++
+ long long Processes::totalPhysicalMemory() {
+     return d->mAbstractProcesses->totalPhysicalMemory();
+ }
++
++long Processes::numberProcessorCores() {
++    return d->mAbstractProcesses->numberProcessorCores();
++}
++
+ Processes::~Processes()
+ {
+ 
+--- a/ksysguard/libksysguard/processcore/processes.h
++++ b/ksysguard/libksysguard/processcore/processes.h
+@@ -112,18 +112,39 @@
+ 	 */
+ 	bool setNiceness(long pid, int priority);
+ 
++	/**
++	 *  Set the io priority for a process.  This is from 7 (very nice, lowest io priority) to
++	 *  0 (highest priority).  The default value is determined as: io_nice = (cpu_nice + 20) / 5.
++	 *
++	 *  @return false if you do not have permission to set the priority
++	 */
++	bool setIoNiceness(long pid, KSysGuard::Process::IoPriorityClass priorityClass, int priority);
++
++	/**
++	 *  Returns true if ionice is supported on this system
++	 */
++	bool supportsIoNiceness();
++
+ 	/** 
+ 	 *  Return the internal pointer of all the processes.  The order of the processes 
+ 	 *  is guaranteed to never change.  Call updateAllProcesses first to actually
+ 	 *  update the information.
+ 	 */
+ 	QList< Process *> getAllProcesses() const;
++	
+ 	/**
+-	 *  Return the total amount of physical memory in KB.  This will be fairly expensive, so cache the result
++	 *  Return the total amount of physical memory in KB.  This is fast (just a system call)
+ 	 *  Returns 0 on error
+ 	 */
+ 	long long totalPhysicalMemory();
+ 
++	/**
++	 *  Return the number of processor cores enabled. 
++	 *  (A system can disable procesors.  Disabled processors are not counted here).
++	 *  This is fast (just a system call) */
++	long numberProcessorCores();
++
++
+     Q_SIGNALS:
+ 	/** The data for a process has changed.
+ 	 *  if @p onlyCpuOrMem is set, only the cpu usage or memory information has been 
+--- a/ksysguard/libksysguard/processui/ProcessModel.cc
++++ b/ksysguard/libksysguard/processui/ProcessModel.cc
+@@ -56,19 +56,21 @@
+ 	mSimple = true;
+ 	mIsLocalhost = true;
+ 	mMemTotal = -1;
++	mNumProcessorCores = 1;
+ 	
+ 	mShowChildTotals = true;
+ 	mIsChangingLayout = false;
+-
+ }
+ 
+ ProcessModel::ProcessModel(QObject* parent)
+ 	: QAbstractItemModel(parent), d(new ProcessModelPrivate)
+ {
++	KGlobal::locale()->insertCatalog("processui");  //Make sure we include the translation stuff.  This needs to be run before any i18n call here
+ 	d->q=this;
+ 	d->setupProcesses();
+ 	setupHeader();
+ 	d->setupWindows();
++	d->mUnits = UnitsKB;
+ }
+ 
+ ProcessModel::~ProcessModel()
+@@ -146,6 +148,8 @@
+ 			       SLOT( beginMoveProcess(KSysGuard::Process *, KSysGuard::Process *)));
+         connect( mProcesses, SIGNAL( endMoveProcess()), this, SLOT(endMoveRow()));
+ 	mMemTotal = mProcesses->totalPhysicalMemory();
++	mNumProcessorCores = mProcesses->numberProcessorCores();
++	if(mNumProcessorCores < 1) mNumProcessorCores=1;  //Default to 1 if there was an error getting the number
+ 	q->update();
+ }
+ 
+@@ -359,7 +363,7 @@
+ 
+ 	//Deal with the case that we are showing it as a tree
+ 	int row = process->parent->children.count();
+-	QModelIndex parentModelIndex = getQModelIndex(process->parent, 0);
++	QModelIndex parentModelIndex = q->getQModelIndex(process->parent, 0);
+ 
+ 	//Only here can we actually change the model.  First notify the view/proxy models then modify
+ 	q->beginInsertRows(parentModelIndex, row, row);
+@@ -386,7 +390,7 @@
+ 			return;
+ 		}
+ 
+-		return q->beginRemoveRows(getQModelIndex(process->parent,0), row, row);
++		return q->beginRemoveRows(q->getQModelIndex(process->parent,0), row, row);
+ 	}
+ }
+ void ProcessModelPrivate::endRemoveRow() 
+@@ -421,19 +425,19 @@
+ }
+ 
+ 
+-QModelIndex ProcessModelPrivate::getQModelIndex( KSysGuard::Process *process, int column) const
++QModelIndex ProcessModel::getQModelIndex( KSysGuard::Process *process, int column) const
+ {
+ 	Q_ASSERT(process);
+ 	int pid = process->pid;
+ 	if(pid == 0) return QModelIndex(); //pid 0 is our fake process meaning the very root (never drawn).  To represent that, we return QModelIndex() which also means the top element
+ 	int row = 0;
+-        if(mSimple) {
++        if(d->mSimple) {
+ 		row = process->index;
+ 	} else {
+ 		row = process->parent->children.indexOf(process);
+ 	}
+ 	Q_ASSERT(row != -1);
+-	return q->createIndex(row, column, process);
++	return createIndex(row, column, process);
+ }
+ 
+ QModelIndex ProcessModel::parent ( const QModelIndex & index ) const
+@@ -445,12 +449,39 @@
+         if(d->mSimple)
+ 		return QModelIndex();
+ 	else 
+-		return d->getQModelIndex(process->parent,0);
++		return getQModelIndex(process->parent,0);
+ }
+ 
+ QVariant ProcessModel::headerData(int section, Qt::Orientation orientation,
+                                   int role) const
+ {
++	if (role == Qt::ToolTipRole) {
++
++		switch(section) {
++		    case HeadingName:
++			return i18n("The process name");
++		    case HeadingUser:
++			return i18n("The user that owns this process");
++		    case HeadingTty:
++			return i18n("The controlling terminal that this process is running on.");
++		    case HeadingNiceness:
++			return i18n("The priority that this process is being run with. Ranges from 19 (very nice, least priority) to -19 (top priority)");
++		    case HeadingCPUUsage:
++			return i18n("The current CPU usage of the process, divided by the number of processor cores in the machine.");
++		    case HeadingVmSize:
++			return i18n("<qt>This is the amount of virtual memory space that the process is using, included shared libraries, graphics memory, files on disk, and so on. This number is almost meaningless.</qt>");
++		    case HeadingMemory:
++			return i18n("<qt>This is the amount of real physical memory that this process is using by itself. It does not include any swapped out memory, nor the code size of its shared libraries. This is often the most useful figure to judge the memory use of a program.</qt>");
++		    case HeadingSharedMemory:
++			return i18n("<qt>This is the amount of real physical memory that this process's shared libraries are using. This memory is shared among all processes that use this library</qt>");
++		    case HeadingCommand:
++			return i18n("<qt>The command that this process was launched with</qt>");
++		    case HeadingXTitle:
++			return i18n("<qt>The title of any windows that this process is showing</qt>");
++		    default:
++			return QVariant();
++		}
++	}
+ 	if (role != Qt::DisplayRole)
+ 		return QVariant();
+ 	if(orientation != Qt::Horizontal)
+@@ -634,6 +665,7 @@
+ 				double total;
+ 				if(d->mShowChildTotals && !d->mSimple) total = process->totalUserUsage + process->totalSysUsage;
+ 				else total = process->userUsage + process->sysUsage;
++				total = total / d->mNumProcessorCores;
+ 
+ 				if(total < 1 && process->status != KSysGuard::Process::Sleeping && process->status != KSysGuard::Process::Running)
+ 					return process->translatedStatus();  //tell the user when the process is a zombie or stopped
+@@ -647,20 +679,16 @@
+ 			if(process->vmURSS == -1) {
+ 				//If we don't have the URSS (the memory used by only the process, not the shared libraries)
+ 				//then return the RSS (physical memory used by the process + shared library) as the next best thing
+-				return KGlobal::locale()->formatLong(process->vmRSS) + " k";
+-//				return KGlobal::locale()->formatByteSize(process->vmRSS * 1024);
++				return formatMemoryInfo(process->vmRSS);
+ 			} else {
+-				return KGlobal::locale()->formatLong(process->vmURSS) + " k";
+-//				return KGlobal::locale()->formatByteSize(process->vmURSS * 1024);
++				return formatMemoryInfo(process->vmURSS);
+ 			}
+ 		case HeadingVmSize:
+ 			if(process->vmSize == 0) return QVariant(QVariant::String);
+-			return KGlobal::locale()->formatLong(process->vmSize) + " k";
+-			return KGlobal::locale()->formatByteSize(process->vmSize * 1024);
++			return formatMemoryInfo(process->vmSize);
+ 		case HeadingSharedMemory:
+ 			if(process->vmRSS - process->vmURSS <= 0 || process->vmURSS == -1) return QVariant(QVariant::String);
+-			return KGlobal::locale()->formatLong(process->vmRSS - process->vmURSS) + " k";
+-//			return KGlobal::locale()->formatByteSize( (process->vmRSS-process->vmURSS) * 1024);
++			return formatMemoryInfo(process->vmRSS - process->vmURSS);
+ 		case HeadingCommand: 
+ 			{
+ 				return process->command;
+@@ -695,7 +723,7 @@
+ 			KSysGuard::Process *process_tracer = d->mProcesses->getProcess(process->tracerpid);
+ 			if(process_tracer) { //it is possible for this to be not the case in certain race conditions
+ 				KSysGuard::Process *process_tracer = d->mProcesses->getProcess(process->tracerpid);
+-				tracer = i18nc("tooltip. name,pid ","This process is being debugged by %1 (%2)", process_tracer->name, (long int)process->tracerpid);
++				tracer = i18nc("tooltip. name,pid ","This process is being debugged by %1 (<numid>%2</numid>)", process_tracer->name, (long int)process->tracerpid);
+ 			}
+ 		}
+ 		switch(index.column()) {
+@@ -715,9 +743,9 @@
+ 			}
+ 			*/
+ 			if(process->parent_pid == 0)
+-				tooltip	= i18nc("name column tooltip. first item is the name","<qt><b>%1</b><br />Process ID: %2<br />Command: %3</qt>", process->name, (long int)process->pid, process->command);
++				tooltip	= i18nc("name column tooltip. first item is the name","<qt><b>%1</b><br />Process ID: <numid>%2</numid><br />Command: %3</qt>", process->name, (long int)process->pid, process->command);
+ 			else
+-				tooltip	= i18nc("name column tooltip. first item is the name","<qt><b>%1</b><br />Process ID: %2<br />Parent's ID: %3<br />Command: %4</qt>", process->name, (long int)process->pid, (long int)process->parent_pid, process->command);
++				tooltip	= i18nc("name column tooltip. first item is the name","<qt><b>%1</b><br />Process ID: <numid>%2</numid><br />Parent's ID: <numid>%3</numid><br />Command: %4</qt>", process->name, (long int)process->pid, (long int)process->parent_pid, process->command);
+ 			if(!process->tty.isEmpty())
+ 				tooltip += i18n( "<br />Running on: %1", QString(process->tty));
+ 			if(!tracer.isEmpty())
+@@ -727,7 +755,7 @@
+ 
+ 		case HeadingCommand: {
+ 			QString tooltip =
+-				i18n("<qt>This process was run with the following command:<br />%1</qt>", process->command);
++				i18n("<qt>This process was run with the following command:<br />%1", process->command);
+ 			if(!process->tty.isEmpty())
+ 				tooltip += i18n( "<br /><br />Running on: %1", QString(process->tty));
+ 		        if(tracer.isEmpty()) return tooltip;
+@@ -738,24 +766,32 @@
+ 				return d->getTooltipForUser(process) + "<br />" + tracer;
+ 			return d->getTooltipForUser(process);
+ 		}
+-		case HeadingNiceness:
+-			return i18n("Nice level: %1 (%2)", process->niceLevel, process->niceLevelAsString() );
++		case HeadingNiceness: {
++		        QString tooltip = i18n("<qt>Nice level: %1 (%2)", process->niceLevel, process->niceLevelAsString() );
++			if(process->ioPriorityClass != KSysGuard::Process::None) {
++				if((process->ioPriorityClass == KSysGuard::Process::RealTime || process->ioPriorityClass == KSysGuard::Process::BestEffort) && process->ioniceLevel != -1)
++					tooltip += i18n("<br/>I/O Nice level: %1 (%2)", process->ioniceLevel, process->ioniceLevelAsString() );
++				tooltip += i18n("<br/>I/O Class: %1", process->ioPriorityClassAsString() );
++			}
++		        if(tracer.isEmpty()) return tooltip;
++			return tooltip + "<br />" + tracer;
++		}	
+ 		case HeadingCPUUsage: {
+ 			QString tooltip = ki18n("<qt>Process status: %1 %2<br />"
+ 						"User CPU usage: %3%<br />System CPU usage: %4%</qt>")
+ 						.subs(process->translatedStatus())
+ 						.subs(d->getStatusDescription(process->status))
+-						.subs(process->userUsage)
+-						.subs(process->sysUsage)
++						.subs((float)(process->userUsage) / d->mNumProcessorCores)
++						.subs((float)(process->sysUsage) / d->mNumProcessorCores)
+ 						.toString();
+ 
+ 			if(process->numChildren > 0) {
+ 				tooltip += ki18n("<br />Number of children: %1<br />Total User CPU usage: %2%<br />"
+ 						"Total System CPU usage: %3%<br />Total CPU usage: %4%")
+ 						.subs(process->numChildren)
+-						.subs(process->totalUserUsage)
+-						.subs(process->totalSysUsage)
+-						.subs(process->totalUserUsage + process->totalSysUsage)
++						.subs((float)(process->totalUserUsage)/ d->mNumProcessorCores)
++						.subs((float)(process->totalSysUsage) / d->mNumProcessorCores)
++						.subs((float)(process->totalUserUsage + process->totalSysUsage) / d->mNumProcessorCores)
+ 						.toString();
+ 			}
+ 			if(process->userTime > 0) 
+@@ -768,22 +804,23 @@
+ 						.toString();
+ 			if(process->niceLevel != 0)
+ 				tooltip += i18n("<br />Nice level: %1 (%2)", process->niceLevel, process->niceLevelAsString() );
++			if(process->ioPriorityClass != KSysGuard::Process::None) {
++				if((process->ioPriorityClass == KSysGuard::Process::RealTime || process->ioPriorityClass == KSysGuard::Process::BestEffort) && process->ioniceLevel != -1)
++					tooltip += i18n("<br/>I/O Nice level: %1 (%2)", process->ioniceLevel, process->ioniceLevelAsString() );
++				tooltip += i18n("<br/>I/O Class: %1", process->ioPriorityClassAsString() );
++			}
+ 
+ 			if(!tracer.isEmpty())
+ 				return tooltip + "<br />" + tracer;
+ 			return tooltip;
+ 		}
+ 		case HeadingVmSize: {
+-			QString tooltip = i18n("<qt>This is the amount of virtual memory space that the process is using, included shared libraries, graphics memory, files on disk, and so on.  This number is almost meaningless.</qt>");
+-			return tooltip;
++			return QVariant();
+ 		}
+ 		case HeadingMemory: {
+-			QString tooltip;
+-			if(process->vmURSS == -1)
++			QString tooltip = "<qt>";
++			if(process->vmURSS != -1) {
+ 				//We don't have information about the URSS, so just fallback to RSS
+-				tooltip = i18n("<qt>This is the amount of real physical memory that this process is using.  It does not include any swapped out memory, but does include the code size for shared libraries etc.<br /><br /></qt>");
+-			else {
+-				tooltip = i18n("<qt>This is the amount of real physical memory that this process is using by itself.  It does not include any swapped out memory, nor the code size of its shared libraries.  This is often the most useful figure to judge the memory use of a program.<br /><br /></qt>");
+ 				if(d->mMemTotal > 0)
+ 					tooltip += i18n("Memory usage: %1 out of %2  (%3 %)<br />", KGlobal::locale()->formatByteSize(process->vmURSS * 1024), KGlobal::locale()->formatByteSize(d->mMemTotal*1024), process->vmURSS*100/d->mMemTotal);
+ 				else
+@@ -798,11 +835,11 @@
+ 		case HeadingSharedMemory: {
+ 			if(process->vmURSS == -1)
+ 				return i18n("<qt>Your system does not seem to have this information for us to read, sorry.</qt>");
+-			QString tooltip = i18n("<qt>This is the amount of real physical memory that this process's shared libraries are using.  This memory is shared among all processes that use this library</qt>");
++			QString tooltip = "<qt>";
+ 			if(d->mMemTotal >0)
+-				tooltip += i18n("<br /><br />Shared library memory usage: %1 out of %2  (%3 %)", KGlobal::locale()->formatByteSize((process->vmRSS - process->vmURSS) * 1024), KGlobal::locale()->formatByteSize(d->mMemTotal*1024), (process->vmRSS-process->vmURSS)*100/d->mMemTotal);
++				tooltip += i18n("Shared library memory usage: %1 out of %2  (%3 %)", KGlobal::locale()->formatByteSize((process->vmRSS - process->vmURSS) * 1024), KGlobal::locale()->formatByteSize(d->mMemTotal*1024), (process->vmRSS-process->vmURSS)*100/d->mMemTotal);
+ 			else
+-				tooltip += i18n("<br /><br />Shared library memory usage: %1", KGlobal::locale()->formatByteSize((process->vmRSS - process->vmURSS) * 1024));
++				tooltip += i18n("Shared library memory usage: %1", KGlobal::locale()->formatByteSize((process->vmRSS - process->vmURSS) * 1024));
+ 
+ 			return tooltip;
+ 		}
+@@ -987,6 +1024,7 @@
+ 	headings << i18nc("process heading", "User Name");
+ 	headings << i18nc("process heading", "Tty");
+ 	headings << i18nc("process heading", "Niceness");
++	// xgettext: no-c-format
+ 	headings << i18nc("process heading", "CPU %");
+ 	headings << i18nc("process heading", "Virtual Size");
+ 	headings << i18nc("process heading", "Memory");
+@@ -996,9 +1034,22 @@
+ 	headings << i18nc("process heading", "Title Name");
+ #endif
+ 
+-	beginInsertColumns(QModelIndex(), 0, headings.count()-1);
++	if(d->mHeadings.isEmpty()) { // If it's empty, this is the first time this has been called, so insert the headings
++		beginInsertColumns(QModelIndex(), 0, headings.count()-1);
++			d->mHeadings = headings;
++		endInsertColumns();
++	} else {
++		// This was called to retranslate the headings.  Just use the new translations and call headerDataChanged
++		Q_ASSERT(d->mHeadings.count() == headings.count());
+ 		d->mHeadings = headings;
+-	endInsertColumns();
++		headerDataChanged(Qt::Horizontal, 0 , headings.count()-1);
++
++	}
++}
++
++void ProcessModel::retranslateUi()
++{
++	setupHeader();
+ }
+ 
+ KSysGuard::Process *ProcessModel::getProcess(long long pid) {
+@@ -1032,3 +1083,25 @@
+ {
+ 	return d->mMemTotal;
+ }
++void ProcessModel::setUnits(Units units)
++{
++	d->mUnits = units;
++}
++ProcessModel::Units ProcessModel::units() const
++{
++	return (Units) d->mUnits;
++}
++
++QString ProcessModel::formatMemoryInfo(long amountInKB) const
++{
++	switch(d->mUnits) {
++	  case UnitsKB:
++		return  i18n("%1 k", amountInKB);
++	  case UnitsMB:
++		return  i18n("%1 m", (amountInKB+512)/1024);  //Round to nearest megabyte
++	  case UnitsGB:
++		return  i18n("%1 g", (amountInKB+512*1024)/(1024*1024)); //Round to nearest gigabyte
++	}
++	return "";  //error
++}
++
+--- a/ksysguard/libksysguard/processui/ProcessModel_p.h
++++ b/ksysguard/libksysguard/processui/ProcessModel_p.h
+@@ -89,11 +89,7 @@
+ 	void setupProcesses();
+         /** A mapping of running,stopped,etc  to a friendly description like 'Stopped, either by a job control signal or because it is being traced.'*/
+ 	QString getStatusDescription(KSysGuard::Process::ProcessStatus status) const;
+-	/** This returns a QModelIndex for the given process.  It has to look up the parent for this pid, find the offset this 
+-	 *  pid is from the parent, and return that.  It's not that slow, but does involve a couple of hash table lookups.
+-	 */
+-	QModelIndex getQModelIndex ( KSysGuard::Process *process, int column) const;
+-	
++		
+ 	/** Return a qt markup tooltip string for a local user.  It will have their full name etc.
+ 	 *  This will be slow the first time, as it practically indirectly reads the whole of /etc/passwd
+ 	 *  But the second time will be as fast as hash lookup as we cache the result
+@@ -148,6 +144,7 @@
+ 	QTime mLastUpdated; ///Time that we last updated the processes.
+ 
+ 	long long mMemTotal; /// the total amount of physical memory in kb in the machine.  We can used this to determine the percentage of memory an app is using
++	int mNumProcessorCores;  /// The number of (enabled) processor cores in the this machine
+ 
+ 	KSysGuard::Processes *mProcesses;  ///The processes instance
+ 
+@@ -155,6 +152,9 @@
+ 
+ 	QPixmap mBlankPixmap; ///Used to pad out process names which don't have an icon
+ 
++	/** When displaying memory sizes, this is the units it should be displayed in */
++	int mUnits;
++
+ 	ProcessModel* q;
+ };
+ 
+--- a/ksysguard/libksysguard/processui/ProcessModel.h
++++ b/ksysguard/libksysguard/processui/ProcessModel.h
+@@ -35,6 +35,7 @@
+ class KDE_EXPORT ProcessModel : public QAbstractItemModel
+ {
+ 	Q_OBJECT
++	Q_ENUMS(Units)
+ 		
+ public:
+ 	ProcessModel(QObject* parent = 0);
+@@ -52,8 +53,9 @@
+ 	
+ 	/* Functions for setting the model */
+ 
+-	/** Set the untranslated heading names for the incoming data that will be sent in setData.
+-	 *  The column names we show to the user are based mostly on this information, translated if known, hidden if not necessary etc */
++	/** Setup the column headings by inserting the appropriate headings into the model.
++	 *  Can be called more than once to retranslate the headings if the system language changes.
++	 */
+ 	void setupHeader();
+ 
+ 	/** Update data.  You can pass in the time between updates to only update if there hasn't
+@@ -83,6 +85,11 @@
+ 	/** Returns the total amount of physical memory in the machine. */
+ 	long long totalMemory() const;
+ 
++        /** This returns a QModelIndex for the given process.  It has to look up the parent for this pid, find the offset this 
++	 *  pid is from the parent, and return that.  It's not that slow, but does involve a couple of hash table lookups.
++	 */
++	QModelIndex getQModelIndex ( KSysGuard::Process *process, int column) const;
++
+ 	/** Whether this is showing the processes for the current machine
+ 	 */
+ 	bool isLocalhost() const;
+@@ -99,7 +106,21 @@
+ 
+ 	bool showTotals() const;
+ 
++	/** When displaying memory sizes, this is the units it should be displayed in */
++	enum Units { UnitsKB, UnitsMB, UnitsGB  };
++	/** Set the units memory sizes etc should be displayed in */
++	void setUnits(Units units);
++	/** The units memory sizes etc should be displayed in */
++	Units units() const;
++	/** Take an amount in kb, and return a string in the units set by setUnits() */
++	QString formatMemoryInfo(long amountInKB) const;
++
++	/** Retranslate the GUI, for when the system language changes */
++	void retranslateUi();
++
+ public Q_SLOTS:
++
++	/** Whether to show the total cpu for the process plus all of its children */
+ 	void setShowTotals(bool showTotals);
+ 
+ private:
+--- a/ksysguard/libksysguard/processui/ksysguardprocesslist.cpp
++++ b/ksysguard/libksysguard/processui/ksysguardprocesslist.cpp
+@@ -51,7 +51,7 @@
+ #include "processcore/processes.h"
+ 
+ 
+-//Trolltech have a testing class for classes that inherit QAbstractItemModel.  If you want to run with this run-time testing enabled, put themodeltest.* files in this directory and uncomment the next line
++//Trolltech have a testing class for classes that inherit QAbstractItemModel.  If you want to run with this run-time testing enabled, put the modeltest.* files in this directory and uncomment the next line
+ //#define DO_MODELCHECK
+ #ifdef DO_MODELCHECK
+ #include "modeltest.h"
+@@ -65,19 +65,7 @@
+ 	virtual void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option,
+ 		                                 const QRect &rect, const QString &text) const
+ 	{
+-/*		if(throb > 0) {
+-			QPen old = painter->pen();
+-			painter->setPen(Qt::NoPen);
+-			QColor throbColor(255, 255-throb, 255-throb, 100);
+-//			QLinearGradient linearGrad( rect.x(), rect.y(), rect.x(), rect.y() + rect.height());
+-//			linearGrad.setColorAt(0, QColor(255,255,255,100));
+-//			linearGrad.setColorAt(1, QColor(255, 255-throb, 255-throb, 100));
+-
+-			painter->fillRect( rect.x(), rect.y(), rect.width(), rect.height(), QBrush(throbColor));
+-			painter->setPen( old );
+-
+-		}
+-*/
++		
+ 		if(percentage > 0 && percentage * rect.width() > 100 ) { //make sure the line will have a width of more than 1 pixel
+ 			QPen old = painter->pen();
+ 			painter->setPen(Qt::NoPen);
+@@ -87,7 +75,7 @@
+ 			painter->fillRect( rect.x(), rect.y(), rect.width() * percentage /100 , rect.height(), QBrush(linearGrad));
+ 			painter->setPen( old );
+ 		}
+-
++		
+ 		QItemDelegate::drawDisplay( painter, option, rect, text);
+ 	}
+ 	void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+@@ -114,18 +102,9 @@
+ 			}
+ 		} else
+ 			percentage = 0;
+-		if(percentage > 100) percentage = 100;
+-		if(process->timeKillWasSent.isNull())
+-			throb = 0;
+-		else {
+-			throb = process->timeKillWasSent.elapsed() % 200;
+-			if(throb > 100) throb = 200 - throb;
+-		}
+-
+ 		QItemDelegate::paint(painter, option, index);
+ 	}
+ 	mutable int percentage;
+-	mutable int throb;
+ 	QColor startProgressColor;
+ 	QColor endProgressColor;
+ 	mutable long long totalMemory;
+@@ -134,12 +113,11 @@
+ 
+ struct KSysGuardProcessListPrivate {
+     
+-	KSysGuardProcessListPrivate(KSysGuardProcessList* q) : mModel(q), mFilterModel(q), mUi(new Ui::ProcessWidget()) {}
+-    	/** The column context menu when you right click on a column.*/
+-	QMenu *mColumnContextMenu;
+-	
+-	/** The context menu when you right click on a process */
+-	QMenu *mProcessContextMenu;
++	KSysGuardProcessListPrivate(KSysGuardProcessList* q) 
++            : mModel(q), mFilterModel(q), mUi(new Ui::ProcessWidget()), mProcessContextMenu(NULL), mUpdateTimer(NULL) 
++        {}
++
++        ~KSysGuardProcessListPrivate() { delete mUi; mUi = NULL; }
+ 	
+ 	/** The process model.  This contains all the data on all the processes running on the system */
+ 	ProcessModel mModel;
+@@ -151,15 +129,15 @@
+ 	
+ 	/** The graphical user interface for this process list widget, auto-generated by Qt Designer */
+ 	Ui::ProcessWidget *mUi;
+-
+-	/** The time to wait, in milliseconds, between updating the process list */
+-	int mUpdateIntervalMSecs;
+ 	
++	/** The context menu when you right click on a process */
++	QMenu *mProcessContextMenu;
++
+ 	/** A timer to call updateList() every mUpdateIntervalMSecs */
+ 	QTimer *mUpdateTimer;
+ 
+-	/** A timer to rapidly pulse a process being killed */
+-	QTimer *mPulseTimer;
++	/** The time to wait, in milliseconds, between updating the process list */
++	int mUpdateIntervalMSecs;
+ };
+ 
+ KSysGuardProcessList::KSysGuardProcessList(QWidget* parent)
+@@ -174,8 +152,6 @@
+ #endif
+ 	d->mUi->treeView->setItemDelegate(new ProgressBarItemDelegate(d->mUi->treeView));
+ 
+-	d->mColumnContextMenu = new QMenu(d->mUi->treeView->header());
+-	connect(d->mColumnContextMenu, SIGNAL(triggered(QAction*)), this, SLOT(showOrHideColumn(QAction *)));
+ 	d->mUi->treeView->header()->setContextMenuPolicy(Qt::CustomContextMenu);
+ 	connect(d->mUi->treeView->header(), SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showColumnContextMenu(const QPoint&)));
+ 
+@@ -195,13 +171,7 @@
+ 	connect(d->mUi->treeView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex & , const QModelIndex & )), this, SLOT(currentRowChanged(const QModelIndex &)));
+ 	setMinimumSize(sizeHint());
+ 
+-        enum State {AllProcesses=0,AllProcessesInTreeForm, SystemProcesses, UserProcesses, OwnProcesses};
+-
+-	d->mUi->cmbFilter->setItemIcon(ProcessFilter::AllProcesses, KIcon("view-process-all"));
+-	d->mUi->cmbFilter->setItemIcon(ProcessFilter::AllProcessesInTreeForm, KIcon("view-process-all-tree"));
+-	d->mUi->cmbFilter->setItemIcon(ProcessFilter::SystemProcesses, KIcon("view-process-system"));
+-	d->mUi->cmbFilter->setItemIcon(ProcessFilter::UserProcesses, KIcon("view-process-users"));
+-	d->mUi->cmbFilter->setItemIcon(ProcessFilter::OwnProcesses, KIcon("view-process-own"));
++	enum State {AllProcesses=0,AllProcessesInTreeForm, SystemProcesses, UserProcesses, OwnProcesses};
+ 
+ 	/*  Hide the vm size column by default since it's not very useful */
+ 	d->mUi->treeView->header()->hideSection(ProcessModel::HeadingVmSize);
+@@ -221,7 +191,9 @@
+ 	//Sort by username by default
+ 	d->mUi->treeView->sortByColumn(ProcessModel::HeadingUser, Qt::AscendingOrder);
+ 	d->mFilterModel.sort(ProcessModel::HeadingUser, Qt::AscendingOrder);
+-	
++
++	retranslateUi();
++
+ 	// Dynamic sort filter seems to require repainting the whole screen, slowing everything down drastically.
+ 	// When this bug is fixed we can re-enable this.
+ 	//d->mFilterModel.setDynamicSortFilter(true);
+@@ -241,7 +213,7 @@
+ 
+ KSysGuardProcessList::~KSysGuardProcessList()
+ {
+-    delete d;
++	delete d;
+ }
+ 
+ QTreeView *KSysGuardProcessList::treeView() const {
+@@ -272,66 +244,172 @@
+ void KSysGuardProcessList::showProcessContextMenu(const QPoint &point){
+ 	d->mProcessContextMenu->clear();
+ 
+-	QAction *renice = new QAction(d->mProcessContextMenu);
+-	renice->setText(i18n("Renice Process..."));
+-	d->mProcessContextMenu->addAction(renice);
+-
+-	QAction *kill = new QAction(d->mProcessContextMenu);
+-	kill->setText(i18n("Kill Process"));
+-	kill->setIcon(KIcon("stop"));
+-	d->mProcessContextMenu->addAction(kill);
++	QModelIndexList selectedIndexes = d->mUi->treeView->selectionModel()->selectedRows();
++	int numProcesses = selectedIndexes.size();
++        
++	if(numProcesses == 0) return;  //No processes selected, so no context menu
++
++	KSysGuard::Process *process = reinterpret_cast<KSysGuard::Process *> (d->mFilterModel.mapToSource(selectedIndexes.at(0)).internalPointer());
++
++
++	QAction *renice = 0;
++	QAction *kill = 0;
++	QAction *selectParent = 0;
++	QAction *selectTracer = 0;
++	QAction *resume = 0;
++	if(numProcesses != 1 || process->status != KSysGuard::Process::Zombie) {  //If the selected process is a zombie, don't bother offering renice and kill options
++
++		renice = new QAction(d->mProcessContextMenu);
++		renice->setText(i18np("Renice Process...", "Renice Processes...", numProcesses));
++		d->mProcessContextMenu->addAction(renice);
++
++		kill = new QAction(d->mProcessContextMenu);
++		kill->setText(i18np("Kill Process", "Kill Processes", numProcesses));
++		kill->setIcon(KIcon("stop"));
++		d->mProcessContextMenu->addAction(kill);
++	}
++
++	if(numProcesses == 1 && process->parent_pid > 1) {
++		//As a design decision, I do not show the 'Jump to parent process' option when the 
++		//parent is just 'init'.
++		selectParent = new QAction(d->mProcessContextMenu);
++		selectParent->setText(i18n("Jump to Parent Process"));
++		d->mProcessContextMenu->addAction(selectParent);
++	}
++
++	if(numProcesses == 1 && process->tracerpid > 0) {
++		//If the process is being debugged, offer to select it
++		selectTracer = new QAction(d->mProcessContextMenu);
++		selectTracer->setText(i18n("Jump to process debugging this one"));
++		d->mProcessContextMenu->addAction(selectTracer);
++	}
++        
++	if(numProcesses == 1 && process->status == KSysGuard::Process::Stopped) {
++		//If the process is being debugged, offer to select it
++		resume = new QAction(d->mProcessContextMenu);
++		resume->setText(i18n("Resume stopped process"));
++		d->mProcessContextMenu->addAction(resume);
++	}
++
+ 
+-	QAction *result = d->mProcessContextMenu->exec(d->mUi->treeView->mapToGlobal(point));	
+-	if(result == renice) {
++	QAction *result = d->mProcessContextMenu->exec(d->mUi->treeView->mapToGlobal(point));
++	if(result == 0) {
++		//Escape was pressed. Do nothing.
++	} else if(result == renice) {
+ 		reniceSelectedProcesses();
+ 	} else if(result == kill) {
+ 		killSelectedProcesses();
++	} else if(result == selectParent) {
++		selectAndJumpToProcess(process->parent_pid);
++	} else if(result == selectTracer) {
++		selectAndJumpToProcess(process->tracerpid);
++	} else if(result == resume) {
++		QList< long long > pidlist;
++		pidlist << process->pid;
++		killProcesses(pidlist, SIGCONT);  //Despite the function name, this sends a signal, rather than kill it.  Silly unix :)
++		updateList();
+ 	}
+ }
+ 
++void KSysGuardProcessList::selectAndJumpToProcess(int pid) {
++	KSysGuard::Process *process = d->mModel.getProcess(pid);
++	if(!process) return;
++	QModelIndex filterIndex = d->mFilterModel.mapFromSource( d->mModel.getQModelIndex(process, 0));
++	d->mUi->treeView->clearSelection();
++	d->mUi->treeView->setCurrentIndex(filterIndex);
++	d->mUi->treeView->scrollTo( filterIndex, QAbstractItemView::PositionAtCenter);
++	
++}
++
+ void KSysGuardProcessList::showColumnContextMenu(const QPoint &point){
+-	d->mColumnContextMenu->clear();
++	QMenu *menu = new QMenu();
+ 	
+-	{
+-		int index = d->mUi->treeView->header()->logicalIndexAt(point);
+-		if(index >= 0) {
+-			//selected a column.  Give the option to hide it
+-			QAction *action = new QAction(d->mColumnContextMenu);
+-			action->setData(-index-1); //We set data to be negative (and minus 1) to hide a column, and positive to show a column
+-			action->setText(i18n("Hide column '%1'", d->mFilterModel.headerData(index, Qt::Horizontal, Qt::DisplayRole).toString()));
+-			d->mColumnContextMenu->addAction(action);
+-			if(d->mUi->treeView->header()->sectionsHidden()) {
+-				d->mColumnContextMenu->addSeparator();
+-			}
++	QAction *action;
++	int index = d->mUi->treeView->header()->logicalIndexAt(point);
++	if(index >= 0) {
++		//selected a column.  Give the option to hide it
++		action = new QAction(menu);
++		action->setData(-index-1); //We set data to be negative (and minus 1) to hide a column, and positive to show a column
++		action->setText(i18n("Hide column '%1'", d->mFilterModel.headerData(index, Qt::Horizontal, Qt::DisplayRole).toString()));
++		menu->addAction(action);
++		if(d->mUi->treeView->header()->sectionsHidden()) {
++			menu->addSeparator();
+ 		}
+ 	}
++	
+ 
+ 	if(d->mUi->treeView->header()->sectionsHidden()) {
+ 		int num_headings = d->mFilterModel.columnCount();
+ 		for(int i = 0; i < num_headings; ++i) {
+ 			if(d->mUi->treeView->header()->isSectionHidden(i)) {
+-				QAction *action = new QAction(d->mColumnContextMenu);
++				action = new QAction(menu);
+ 				action->setText(i18n("Show column '%1'", d->mFilterModel.headerData(i, Qt::Horizontal, Qt::DisplayRole).toString()));
+ 				action->setData(i); //We set data to be negative (and minus 1) to hide a column, and positive to show a column
+-				d->mColumnContextMenu->addAction(action);
++				menu->addAction(action);
+ 			}
+ 		}
+ 	}
+-	d->mColumnContextMenu->exec(d->mUi->treeView->header()->mapToGlobal(point));	
+-}
++	QAction *actionKB = NULL;
++	QAction *actionMB = NULL;
++	QAction *actionGB = NULL;
++
++	if( index == ProcessModel::HeadingVmSize || index == ProcessModel::HeadingMemory ||  index == ProcessModel::HeadingSharedMemory) {
++		//If the user right clicks on a column that contains a memory size, show a toggle option for displaying
++		//the memory in different units.  e.g.  "2000 k" or "2 m"
++		menu->addSeparator()->setText(i18n("Display Units"));
++		QActionGroup *unitsGroup = new QActionGroup(menu);
++		actionKB = new QAction(menu);
++		actionKB->setText(i18n("KiloBytes"));
++		actionKB->setCheckable(true);
++		menu->addAction(actionKB);
++		unitsGroup->addAction(actionKB);
++		actionMB = new QAction(menu);
++		actionMB->setText(i18n("MegaBytes"));
++		actionMB->setCheckable(true);
++		menu->addAction(actionMB);
++		unitsGroup->addAction(actionMB);
++		actionGB = new QAction(menu);
++		actionGB->setText(i18n("GigaBytes"));
++		actionGB->setCheckable(true);
++		menu->addAction(actionGB);
++		unitsGroup->addAction(actionGB);
++		unitsGroup->setExclusive(true);
++		switch(d->mModel.units()) {
++		  case ProcessModel::UnitsKB:
++			actionKB->setChecked(true);
++			break;
++		  case ProcessModel::UnitsMB:
++			actionMB->setChecked(true);
++			break;
++		  case ProcessModel::UnitsGB:
++			actionGB->setChecked(true);
++			break;
++		}
++	}
+ 
+-void KSysGuardProcessList::showOrHideColumn(QAction *action)
+-{
+-	int index = action->data().toInt();
++
++	QAction *result = menu->exec(d->mUi->treeView->header()->mapToGlobal(point));
++	if(!result) return; //Menu cancelled
++	if(result == actionKB) {
++		d->mModel.setUnits(ProcessModel::UnitsKB);
++		return;
++	} else if(result == actionMB) {
++		d->mModel.setUnits(ProcessModel::UnitsMB);
++		return;
++	} else if(result == actionGB) {
++		d->mModel.setUnits(ProcessModel::UnitsGB);
++		return;
++	}
++	int i = result->data().toInt();
+ 	//We set data to be negative to hide a column, and positive to show a column
+-	if(index < 0)
+-		d->mUi->treeView->hideColumn(-1-index);
++	if(i < 0)
++		d->mUi->treeView->hideColumn(-1-i);
+ 	else {
+-		d->mUi->treeView->showColumn(index);
+-		d->mUi->treeView->resizeColumnToContents(index);
++		d->mUi->treeView->showColumn(i);
++		d->mUi->treeView->resizeColumnToContents(i);
+ 		d->mUi->treeView->resizeColumnToContents(d->mFilterModel.columnCount());
+ 	}
+-		
++	menu->deleteLater();	
+ }
+ 
+ void KSysGuardProcessList::expandAllChildren(const QModelIndex &parent) 
+@@ -339,8 +417,9 @@
+ 	//This is called when the user expands a node.  This then expands all of its 
+ 	//children.  This will trigger this function again recursively.
+ 	QModelIndex sourceParent = d->mFilterModel.mapToSource(parent);
+-	for(int i = 0; i < d->mModel.rowCount(sourceParent); i++) 
++	for(int i = 0; i < d->mModel.rowCount(sourceParent); i++) {
+ 		d->mUi->treeView->expand(d->mFilterModel.mapFromSource(d->mModel.index(i,0, sourceParent)));
++	}
+ }
+ 
+ void KSysGuardProcessList::expandInit()
+@@ -361,11 +440,32 @@
+ void KSysGuardProcessList::showEvent ( QShowEvent * event )  //virtual protected from QWidget
+ {
+ 	//Start updating the process list again if we are shown again
+-	if(!d->mUpdateTimer->isActive()) 
++	if(!d->mUpdateTimer->isActive()) {
+ 		d->mUpdateTimer->start(d->mUpdateIntervalMSecs);
++	}
++	
+ 	QWidget::showEvent(event);
+ }
+ 
++void KSysGuardProcessList::changeEvent( QEvent * event ) 
++{
++	if (event->type() == QEvent::LanguageChange) {
++		d->mModel.retranslateUi();
++		d->mUi->retranslateUi(this);
++		retranslateUi();
++	}
++	QWidget::changeEvent(event);
++}
++
++void KSysGuardProcessList::retranslateUi()
++{
++	d->mUi->cmbFilter->setItemIcon(ProcessFilter::AllProcesses, KIcon("view-process-all"));
++	d->mUi->cmbFilter->setItemIcon(ProcessFilter::AllProcessesInTreeForm, KIcon("view-process-all-tree"));
++	d->mUi->cmbFilter->setItemIcon(ProcessFilter::SystemProcesses, KIcon("view-process-system"));
++	d->mUi->cmbFilter->setItemIcon(ProcessFilter::UserProcesses, KIcon("view-process-users"));
++	d->mUi->cmbFilter->setItemIcon(ProcessFilter::OwnProcesses, KIcon("view-process-own"));
++}
++
+ void KSysGuardProcessList::updateList()
+ {
+ 	if(isVisible()) {
+@@ -390,8 +490,9 @@
+ 	QList< long long> unreniced_pids;
+         for (int i = 0; i < pids.size(); ++i) {
+ 		bool success = d->mModel.processController()->setNiceness(pids.at(i), niceValue);
+-		if(!success)
++		if(!success) {
+ 			unreniced_pids << pids.at(i);
++		}
+ 	}
+ 	if(unreniced_pids.isEmpty()) return; //All processes were reniced successfully
+ 	if(!d->mModel.isLocalhost()) return; //We can't use kdesu to renice non-localhost processes
+@@ -399,8 +500,9 @@
+ 	QStringList arguments;
+ 	arguments << "--" << "renice" << QString::number(niceValue);
+ 
+-        for (int i = 0; i < unreniced_pids.size(); ++i)
++        for (int i = 0; i < unreniced_pids.size(); ++i) {
+ 		arguments << QString::number(unreniced_pids.at(i));
++	}
+ 
+ 	QProcess *reniceProcess = new QProcess(NULL);
+ 	connect(reniceProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(reniceFailed()));
+@@ -449,30 +551,34 @@
+ 	updateList();
+ }
+ 
+-void KSysGuardProcessList::killProcesses(const QList< long long> &pids, int sig)
++bool KSysGuardProcessList::killProcesses(const QList< long long> &pids, int sig)
+ {
+ 	QList< long long> unkilled_pids;
+         for (int i = 0; i < pids.size(); ++i) {
+ 		bool success = d->mModel.processController()->sendSignal(pids.at(i), sig);
+-		if(!success)
++		if(!success) {
+ 			unkilled_pids << pids.at(i);
++		}
+ 	}
+-	if(unkilled_pids.isEmpty()) return;
+-	if(!d->mModel.isLocalhost()) return; //We can't use kdesu to kill non-localhost processes
++	if(unkilled_pids.isEmpty()) return false;
++	if(!d->mModel.isLocalhost()) return false; //We can't use kdesu to kill non-localhost processes
+ 
+ 	//We must use kdesu to kill the process
+ 	QStringList arguments;
+ 	arguments << "--" << "kill";
+-	if(sig != SIGTERM)
++	if(sig != SIGTERM) {
+ 		arguments << ('-' + QString::number(sig));
++	}
+ 
+-        for (int i = 0; i < unkilled_pids.size(); ++i)
++        for (int i = 0; i < unkilled_pids.size(); ++i) {
+ 		arguments << QString::number(unkilled_pids.at(i));
++	}
+ 	
+ 	QProcess *killProcess = new QProcess(NULL);
+ 	connect(killProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(killFailed()));
+ 	connect(killProcess, SIGNAL(finished( int, QProcess::ExitStatus) ), this, SLOT(updateList()));
+ 	killProcess->start("kdesu", arguments);
++	return true;  //assume it ran successfully :(  We cannot seem to actually check if it did.  There must be a better solution
+ 
+ }
+ void KSysGuardProcessList::killSelectedProcesses()
+@@ -499,7 +605,7 @@
+ 				selectedAsStrings.count());
+ 
+ 		int res = KMessageBox::warningContinueCancelList(this, msg, selectedAsStrings,
+-				                                 i18n("Kill Process"),
++								 i18n("Kill Process"),
+ 								 KGuiItem(i18n("Kill")),
+ 								 KStandardGuiItem::cancel(),
+ 								 "killconfirmation");
+@@ -508,24 +614,25 @@
+ 			return;
+ 		}
+ 	}
++
++
++	Q_ASSERT(selectedPids.size() == selectedAsStrings.size());
++	if(!killProcesses(selectedPids, SIGTERM)) return;
+ 	foreach(KSysGuard::Process *process, processes) {
+ 		process->timeKillWasSent.start();
+ 	}
+-
+-	Q_ASSERT(selectedPids.size() == selectedAsStrings.size());
+-	killProcesses(selectedPids, SIGTERM);
+ 	updateList();
+ }
+ 
+ void KSysGuardProcessList::reniceFailed()
+ {
+ 	KMessageBox::sorry(this, i18n("You do not have the permission to renice the process and there "
+-                                      "was a problem trying to run as root"));
++					"was a problem trying to run as root"));
+ }
+ void KSysGuardProcessList::killFailed()
+ {
+ 	KMessageBox::sorry(this, i18n("You do not have the permission to kill the process and there "
+-                                "was a problem trying to run as root"));
++					"was a problem trying to run as root"));
+ }
+ 
+ bool KSysGuardProcessList::showTotals() const {
+@@ -536,3 +643,11 @@
+ {
+ 	d->mModel.setShowTotals(showTotals);
+ }
++
++ProcessModel::Units KSysGuardProcessList::units() const {
++	return d->mModel.units();
++}
++
++void KSysGuardProcessList::setUnits(ProcessModel::Units unit) {
++	d->mModel.setUnits(unit);
++}
+--- a/ksysguard/libksysguard/processui/ksysguardprocesslist.h
++++ b/ksysguard/libksysguard/processui/ksysguardprocesslist.h
+@@ -52,7 +52,9 @@
+ 	Q_PROPERTY( bool showTotalsInTree READ showTotals WRITE setShowTotals )
+ 	Q_PROPERTY( ProcessFilter::State state READ state WRITE setState )
+ 	Q_PROPERTY( int updateIntervalMSecs READ updateIntervalMSecs WRITE setUpdateIntervalMSecs )
++	Q_PROPERTY( ProcessModel::Units units READ units WRITE setUnits )
+ 	Q_ENUMS( ProcessFilter::State )
++	Q_ENUMS( ProcessModel::Units )
+ 
+ public:
+ 	KSysGuardProcessList(QWidget* parent);
+@@ -72,6 +74,9 @@
+ 	/** Whether the widget will show child totals for CPU and Memory etc usage */
+ 	bool showTotals() const;
+ 
++	/** The units to display memory sizes etc in.  E.g. kb/mb/gb */
++	ProcessModel::Units units() const;
++
+ 	/** Returns a list of the processes that have been selected by the user. */
+ 	QList<KSysGuard::Process *> selectedProcesses() const;
+ 
+@@ -85,8 +90,9 @@
+ 	/** Send a signal to a list of given processes.
+ 	 *   @p pids A list of PIDs that should be sent the signal 
+ 	 *   @p sig  The signal to send. 
++	 *   @return Whether the kill went ahead - false if the user cancelled or it stopped for some other reason
+ 	 */
+-	void killProcesses(const QList< long long> &pids, int sig);
++	bool killProcesses(const QList< long long> &pids, int sig);
+ 
+ 	/** Renice all the processes that the user has selected.  Pops up a dialog box to ask for the nice value and confirm */
+ 	void reniceSelectedProcesses();
+@@ -106,6 +112,12 @@
+ 	/** Set whether to show child totals for CPU and Memory etc usage */
+ 	void setShowTotals(bool showTotals);
+ 
++        /** Focus on a particular process, and select it */
++        void selectAndJumpToProcess(int pid);
++
++	/** The units to display memory sizes etc in. */
++	void setUnits(ProcessModel::Units unit);
++
+ private Q_SLOTS:
+ 
+ 	/** Expand all the children, recursively, of the node given.  Pass an empty QModelIndex to expand all the top level children */
+@@ -120,9 +132,6 @@
+ 	/** Display a context menu for the selected processes allowing the user to kill etc the process */
+ 	void showProcessContextMenu(const QPoint &point);
+ 	
+-	/** Show or hide the column indicated by the action */
+-	void showOrHideColumn(QAction *action);
+-	
+ 	/** Handle the situation where killing a process has failed - usually due to insufficent rights */
+ 	void killFailed();
+ 	
+@@ -139,6 +148,12 @@
+ 	
+ 	/** Inherit QWidget::hideEvent(QShowEvent *) to disable the timer, for updates, when not visible */
+ 	virtual void hideEvent(QHideEvent*);
++	
++	/** Capture any change events sent to this widget.  In particular QEvent::LanguageChange */
++	virtual void changeEvent ( QEvent * event );
++
++	/** Retranslate the Ui as needed */
++	void retranslateUi();
+ };
+ 
+ #endif
+--- a/ksysguard/gui/Workspace.cc
++++ b/ksysguard/gui/Workspace.cc
+@@ -62,7 +62,7 @@
+ void Workspace::readProperties( const KConfigGroup& cfg )
+ {
+   kDebug() << "Reading from " << cfg.name();
+-  QStringList selectedSheets = cfg.readPathListEntry( "SelectedSheets" );
++  QStringList selectedSheets = cfg.readPathEntry( "SelectedSheets", QStringList() );
+   kDebug() << "Selected Sheets = " << selectedSheets;
+ 
+   if ( selectedSheets.isEmpty() ) {
+--- a/ksysguard/gui/ksysguard.desktop
++++ b/ksysguard/gui/ksysguard.desktop
+@@ -7,6 +7,7 @@
+ Name[csb]=Mònitor systemë
+ Name[de]=Systemmonitor
+ Name[el]=Επόπτης συστήματος
++Name[et]=Süsteemi jälgija
+ Name[fa]=نمایشگر سیستم
+ Name[ga]=Monatóir an Chórais
+ Name[he]=צג מערכת
+--- a/ksysguard/gui/SensorDisplayLib/DancingBarsSettings.h
++++ b/ksysguard/gui/SensorDisplayLib/DancingBarsSettings.h
+@@ -28,7 +28,7 @@
+ #include "SensorModel.h"
+ 
+ class KColorButton;
+-class KDoubleSpinBox;
++class QDoubleSpinBox;
+ class KIntNumInput;
+ class KLineEdit;
+ 
+@@ -88,10 +88,10 @@
+     KColorButton *mForegroundColor;
+     KColorButton *mAlarmColor;
+     KColorButton *mBackgroundColor;
+-    KDoubleSpinBox *mMinValue;
+-    KDoubleSpinBox *mMaxValue;
+-    KDoubleSpinBox *mLowerLimit;
+-    KDoubleSpinBox *mUpperLimit;
++    QDoubleSpinBox *mMinValue;
++    QDoubleSpinBox *mMaxValue;
++    QDoubleSpinBox *mLowerLimit;
++    QDoubleSpinBox *mUpperLimit;
+     KLineEdit *mTitle;
+     KIntNumInput *mFontSize;
+ 
+--- a/ksysguard/gui/SensorDisplayLib/DancingBarsSettings.cc
++++ b/ksysguard/gui/SensorDisplayLib/DancingBarsSettings.cc
+@@ -72,7 +72,11 @@
+   QLabel *label = new QLabel( i18n( "Minimum value:" ), groupBox );
+   boxLayout->addWidget( label, 0, 0 );
+ 
+-  mMinValue = new KDoubleSpinBox( 0, 10000, 0.5, 0, groupBox, 2 );
++  mMinValue = new QDoubleSpinBox(groupBox);
++  mMinValue->setRange(0, 10000);
++  mMinValue->setSingleStep(0.5);
++  mMinValue->setValue(0);
++  mMinValue->setDecimals(2);
+   mMinValue->setWhatsThis( i18n( "Enter the minimum value for the display here. If both values are 0, automatic range detection is enabled." ) );
+   boxLayout->addWidget( mMinValue, 0, 1 );
+   label->setBuddy( mMinValue );
+@@ -80,7 +84,11 @@
+   label = new QLabel( i18n( "Maximum value:" ), groupBox );
+   boxLayout->addWidget( label, 0, 3 );
+ 
+-  mMaxValue = new KDoubleSpinBox( 0, 100, 0.5, 100, groupBox, 2 );
++  mMaxValue = new QDoubleSpinBox( groupBox);
++  mMaxValue->setRange(0, 100);
++  mMaxValue->setSingleStep(0.5);
++  mMaxValue->setValue(100);
++  mMaxValue->setDecimals(2);
+   mMaxValue->setWhatsThis( i18n( "Enter the maximum value for the display here. If both values are 0, automatic range detection is enabled." ) );
+   boxLayout->addWidget( mMaxValue, 0, 4 );
+   label->setBuddy( mMaxValue );
+@@ -108,7 +116,11 @@
+   label = new QLabel( i18n( "Lower limit:" ), groupBox );
+   boxLayout->addWidget( label, 0, 2 );
+ 
+-  mLowerLimit = new KDoubleSpinBox( 0, 100, 0.5, 0, groupBox, 2 );
++  mLowerLimit = new QDoubleSpinBox(groupBox);
++  mLowerLimit->setRange(0, 100);
++  mLowerLimit->setSingleStep(0.5);
++  mLowerLimit->setValue(0);
++  mLowerLimit->setDecimals(2);
+   mLowerLimit->setEnabled( false );
+   boxLayout->addWidget( mLowerLimit, 0, 3 );
+   label->setBuddy( mLowerLimit );
+@@ -127,7 +139,10 @@
+   label = new QLabel( i18n( "Upper limit:" ), groupBox );
+   boxLayout->addWidget( label, 0, 2 );
+ 
+-  mUpperLimit = new KDoubleSpinBox( 0, 1000, 0.5, 0, groupBox, 2 );
++  mUpperLimit = new QDoubleSpinBox( groupBox);
++  mUpperLimit->setRange(0, 1000);
++  mUpperLimit->setSingleStep(0.5);
++  mUpperLimit->setDecimals(2);
+   mUpperLimit->setEnabled( false );
+   boxLayout->addWidget( mUpperLimit, 0, 3 );
+   label->setBuddy( mUpperLimit );
+--- a/ksysguard/gui/SensorDisplayLib/MultiMeterSettingsWidget.ui
++++ b/ksysguard/gui/SensorDisplayLib/MultiMeterSettingsWidget.ui
+@@ -283,5 +283,37 @@
+     </hint>
+    </hints>
+   </connection>
++  <connection>
++   <sender>m_lowerLimitActive</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>m_lowerLimit</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>33</x>
++     <y>362</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>396</x>
++     <y>362</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>m_lowerLimitActive</sender>
++   <signal>toggled(bool)</signal>
++   <receiver>m_lblLowerLimit</receiver>
++   <slot>setEnabled(bool)</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>33</x>
++     <y>362</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>320</x>
++     <y>362</y>
++    </hint>
++   </hints>
++  </connection>
+  </connections>
+ </ui>
+--- a/ksysguard/gui/ksysguardapplet.desktop
++++ b/ksysguard/gui/ksysguardapplet.desktop
+@@ -7,6 +7,7 @@
+ Name[csb]=Mònitor systemë
+ Name[de]=Systemmonitor
+ Name[el]=Επόπτης συστήματος
++Name[et]=Süsteemi jälgija
+ Name[fa]=نمایشگر سیستم
+ Name[ga]=Monatóir an Chórais
+ Name[he]=צג מערכת
+@@ -36,7 +37,8 @@
+ Comment[bg]=Аплет за наблюдение на системата
+ Comment[csb]=Aplet jaczi mònitorëje systemòwą wedowiédzã
+ Comment[de]=Anwendung zur Systemüberwachung
+-Comment[el]=Ένα εφαρμογίδιο παρακολούθησης πληροφοριών του συστήματος
++Comment[el]=Μια μικροεφαρμογή παρακολούθησης πληροφοριών του συστήματος
++Comment[et]=Süsteemi infot jälgiv aplett
+ Comment[fa]=برنامکی که اطلاعات سیستم را نمایش می‌دهد
+ Comment[he]=יישומון המציג מידע מערכת
+ Comment[ja]=システムの情報を監視するアプレット
+--- a/ksysguard/gui/ksysguard.h
++++ b/ksysguard/gui/ksysguard.h
+@@ -72,6 +72,8 @@
+ 
+   private:
+     void setSwapInfo( long, long, const QString& );
++    void changeEvent( QEvent * event );
++    void retranslateUi();
+ 
+     QDBusMessage mDBusReply;
+ 
+@@ -85,6 +87,11 @@
+     QAction *mTabRemoveAction;
+     QAction *mTabExportAction;
+     QAction *mMonitorRemoteAction;
++    QAction *mNewWorksheetAction;
++    QAction *mInsertWorksheetAction;
++    QAction *mConfigureSheetAction;
++    QAction *mQuitAction;
++
+     QList<int> mSplitterSize;
+ };
+ 
+--- a/ksysguard/gui/ksysguardui.rc
++++ b/ksysguard/gui/ksysguardui.rc
+@@ -12,6 +12,7 @@
+   <Menu name="edit"><text>&amp;Edit</text>
+     <Action name="configure_sheet"/>
+   </Menu>
++  <Menu name="help"><Action name="switch_application_language"/></Menu>
+   <Menu name="settings"><text>&amp;Settings</text>
+   </Menu>
+ </MenuBar>
+--- a/ksysguard/gui/SystemLoad.sgrd
++++ b/ksysguard/gui/SystemLoad.sgrd
+@@ -3,17 +3,17 @@
+ <WorkSheet title="Sensor Load" interval="2" locked="1" rows="2" columns="2" >
+  <host port="-1" command="ksysguardd" shell="" name="localhost" />
+  <display svgBackground="widgets/plot-background" bColor="4281413681" title="CPU Load" hScale="3" hCount="5" fontColor="4294967295" max="100" vLines="0" hColor="838860800" pause="0" labels="1" autoRange="0" min="0" vDistance="30" globalUpdate="1" fontSize="8" vScroll="0" column="0" topBar="1" unit="" vColor="838860800" hLines="1" showUnit="1" class="FancyPlotter" row="0" >
+-  <beam sensorName="cpu/system/nice" sensorType="float" hostName="localhost" color="872414995" />  
+-  <beam sensorName="cpu/system/user" sensorType="float" hostName="localhost" color="4279798271" />
+-  <beam sensorName="cpu/system/sys" sensorType="float" hostName="localhost" color="4294933768" />
+-  <beam sensorName="cpu/system/wait" sensorType="float" hostName="localhost" color="4294955007" />
++  <beam sensorName="cpu/nice" sensorType="float" hostName="localhost" color="872414995" />  
++  <beam sensorName="cpu/user" sensorType="float" hostName="localhost" color="4279798271" />
++  <beam sensorName="cpu/sys" sensorType="float" hostName="localhost" color="4294933768" />
++  <beam sensorName="cpu/wait" sensorType="float" hostName="localhost" color="4294955007" />
+  </display>
+  <display svgBackground="widgets/plot-background" bColor="4281413681" title="Load Average (1 min)" hScale="3" hCount="5" fontColor="4294967295" vLines="0" hColor="838860800" pause="0" labels="1" autoRange="1" vDistance="30" globalUpdate="1" fontSize="8" vScroll="0" column="1" topBar="1" unit="" vColor="838860800" hLines="1" showUnit="1" class="FancyPlotter" row="0" >
+-  <beam sensorName="cpu/system/loadavg1" sensorType="float" hostName="localhost" color="4279798271" />
++  <beam sensorName="cpu/loadavg1" sensorType="float" hostName="localhost" color="4279798271" />
+  </display>
+  <display svgBackground="widgets/plot-background" bColor="4281413681" title="Physical Memory" hScale="3" hCount="5" fontColor="4294967295" max="1000000" vLines="0" hColor="838860800" pause="0" labels="1" autoRange="0" min="0" vDistance="30" globalUpdate="1" fontSize="8" vScroll="0" column="0" topBar="1" unit="" vColor="838860800" hLines="1" showUnit="1" class="FancyPlotter" row="1" >
+-  <beam sensorName="mem/physical/buf" sensorType="integer" hostName="localhost" color="4294933768" />
+-  <beam sensorName="mem/physical/cached" sensorType="integer" hostName="localhost" color="4294961680" />
++  <beam sensorName="mem/physical/buf" sensorType="integer" hostName="localhost" color="872381704" />
++  <beam sensorName="mem/physical/cached" sensorType="integer" hostName="localhost" color="872409616" />
+   <beam sensorName="mem/physical/application" sensorType="integer" hostName="localhost" color="4279798271" />
+  </display>
+  <display svgBackground="widgets/plot-background" bColor="4281413681" title="Swap Memory" hScale="3" hCount="5" fontColor="4294967295" max="1000000" vLines="0" hColor="838860800" pause="0" labels="1" autoRange="0" min="0" vDistance="30" globalUpdate="1" fontSize="8" vScroll="0" column="1" topBar="1" vColor="838860800" hLines="1" showUnit="1" class="FancyPlotter" row="1" >
+--- a/ksysguard/gui/ksysguard.cc
++++ b/ksysguard/gui/ksysguard.cc
+@@ -79,7 +79,6 @@
+   : KXmlGuiWindow( 0 )
+ {
+   QDBusConnection::sessionBus().registerObject("/", this, QDBusConnection::ExportScriptableSlots);
+-  setPlainCaption( i18n( "System Monitor" ) );
+   mTimerId = -1;
+ 
+   setWindowIcon(KIcon("utilities-system-monitor"));
+@@ -108,41 +107,56 @@
+   statusBar()->hide();
+ 
+   // create actions for menu entries
+-  QAction *action = actionCollection()->addAction("new_worksheet");
+-  action->setIcon(KIcon("tab-new"));
+-  action->setText(i18n( "&New Worksheet..." ));
+-  connect(action, SIGNAL(triggered(bool)), mWorkSpace, SLOT( newWorkSheet() ));
+-  action = actionCollection()->addAction("import_worksheet");
+-  action->setIcon(KIcon("document-open") );
+-  action->setText(i18n( "Import Worksheet..." ));
+-  connect(action, SIGNAL(triggered(bool)), mWorkSpace, SLOT( importWorkSheet() ));
++  mNewWorksheetAction = actionCollection()->addAction("new_worksheet");
++  mNewWorksheetAction->setIcon(KIcon("tab-new"));
++  connect(mNewWorksheetAction, SIGNAL(triggered(bool)), mWorkSpace, SLOT( newWorkSheet() ));
++  mInsertWorksheetAction = actionCollection()->addAction("import_worksheet");
++  mInsertWorksheetAction->setIcon(KIcon("document-open") );
++  connect(mInsertWorksheetAction, SIGNAL(triggered(bool)), mWorkSpace, SLOT( importWorkSheet() ));
+   mTabRemoveAction = actionCollection()->addAction( "remove_worksheet" );
+-  mTabRemoveAction->setIcon( KIcon("tab-remove") );
+-  mTabRemoveAction->setText( i18n( "&Remove Worksheet" ) );
++  mTabRemoveAction->setIcon( KIcon("tab-close") );
+   connect(mTabRemoveAction, SIGNAL(triggered(bool)), mWorkSpace, SLOT( removeWorkSheet() ));
+   mTabExportAction = actionCollection()->addAction( "export_worksheet" );
+   mTabExportAction->setIcon( KIcon("document-save-as") );
+-  mTabExportAction->setText( i18n( "&Export Worksheet..." ) );
+   connect(mTabExportAction, SIGNAL(triggered(bool)), mWorkSpace, SLOT( exportWorkSheet() ));
+ 
+-  KStandardAction::quit( this, SLOT( close() ), actionCollection() );
++  mQuitAction = NULL;
+ 
+   mMonitorRemoteAction = actionCollection()->addAction( "connect_host" );
+   mMonitorRemoteAction->setIcon( KIcon("connection-established") );
+-  mMonitorRemoteAction->setText( i18n( "Monitor remote machine..." ) );
+   connect(mMonitorRemoteAction, SIGNAL(triggered(bool)), SLOT( connectHost() ));
+ 
+-  action = actionCollection()->addAction( "configure_sheet" );
+-  action->setIcon( KIcon("configure") );
+-  action->setText( i18n( "&Worksheet Properties" ) );
+-  connect(action, SIGNAL(triggered(bool)), mWorkSpace, SLOT( configure() ));
++  mConfigureSheetAction = actionCollection()->addAction( "configure_sheet" );
++  mConfigureSheetAction->setIcon( KIcon("configure") );
++  connect(mConfigureSheetAction, SIGNAL(triggered(bool)), mWorkSpace, SLOT( configure() ));
+ 
+   if (!initialGeometrySet())
+     resize( QSize(700, 480).expandedTo(minimumSizeHint()));
+ 
++  retranslateUi();
+   setupGUI(ToolBar | Keys | StatusBar | Create);
+ }
+ 
++void TopLevel::retranslateUi()
++{
++  setPlainCaption( i18n( "System Monitor" ) );
++  mNewWorksheetAction->setText(i18n( "&New Worksheet..." ));
++  mInsertWorksheetAction->setText(i18n( "Import Worksheet..." ));
++  mTabExportAction->setText( i18n( "&Export Worksheet..." ) );
++  mTabRemoveAction->setText( i18n( "&Remove Worksheet" ) );
++  mMonitorRemoteAction->setText( i18n( "Monitor remote machine..." ) );
++  mConfigureSheetAction->setText( i18n( "&Worksheet Properties" ) );
++  if(mQuitAction) {
++    KAction *tmpQuitAction = KStandardAction::quit( NULL, NULL, NULL );
++    mQuitAction->setText(tmpQuitAction->text());
++    mQuitAction->setWhatsThis(tmpQuitAction->whatsThis());
++    mQuitAction->setToolTip(tmpQuitAction->toolTip());
++    delete tmpQuitAction;
++  } else
++    mQuitAction = KStandardAction::quit( this, SLOT( close() ), actionCollection() );
++}
++
++
+ void TopLevel::currentTabChanged(int index)
+ {
+   kDebug() << "Current tab changed to " << index;
+@@ -196,13 +210,23 @@
+ 
+ QStringList TopLevel::listSensors( const QString &hostName )
+ {
+-  startSensorBrowserWidget();
++  if(!mSensorBrowser) {
++    setUpdatesEnabled(false);
++    startSensorBrowserWidget();
++    mSensorBrowser->setVisible(false);
++    setUpdatesEnabled(true);
++  }
+   return mSensorBrowser->listSensors( hostName );
+ }
+ 
+ QStringList TopLevel::listHosts()
+ {
+-  startSensorBrowserWidget();
++  if(!mSensorBrowser) {
++    setUpdatesEnabled(false);
++    startSensorBrowserWidget();
++    mSensorBrowser->setVisible(false);
++    setUpdatesEnabled(true);
++  }
+   return mSensorBrowser->listHosts();
+ }
+ 
+@@ -321,6 +345,18 @@
+   }
+ }
+ 
++void TopLevel::changeEvent( QEvent * event ) 
++{
++  if (event->type() == QEvent::LanguageChange) {
++    KSGRD::SensorMgr->retranslate();
++    setUpdatesEnabled(false);
++    setupGUI(ToolBar | Keys | StatusBar | Create);
++    retranslateUi();
++    setUpdatesEnabled(true);
++  }
++  KXmlGuiWindow::changeEvent(event);
++}
++
+ bool TopLevel::queryClose()
+ {
+   if ( !mWorkSpace->saveOnQuit() )
+--- a/ksysguard/gui/SensorBrowser.cc
++++ b/ksysguard/gui/SensorBrowser.cc
+@@ -81,7 +81,7 @@
+       if(index.column() == 0 && mHostInfoMap.contains(index.internalId())) {
+         return KIcon("system");
+       } else 
+-        return QIcon(); //work around for drawing bug
++        return QIcon();
+       break;
+     }
+   } //switch
+@@ -89,9 +89,13 @@
+ }
+ 
+ QVariant SensorBrowserModel::headerData ( int section, Qt::Orientation , int role) const { //virtual
+-	if(role != Qt::DisplayRole) return QVariant();
+-	if(section==0) return i18n("Sensor Browser");
+-	return QVariant();
++  if(role != Qt::DisplayRole) return QVariant();
++  if(section==0) return i18n("Sensor Browser");
++  return QVariant();
++}
++
++void  SensorBrowserModel::retranslate() {
++  emit headerDataChanged(Qt::Horizontal, 0,0);
+ }
+ 
+ QModelIndex SensorBrowserModel::index ( int row, int column, const QModelIndex & parent) const { //virtual
+@@ -226,7 +230,7 @@
+ 
+   HostInfo *hostInfo = getHostInfo(hostId);
+   if(!hostInfo) {
+-    kDebug(1215) << "SensorBrowserModel::answerReceived with invalid hostId " << hostId ;
++    kDebug(1215) << "Invalid hostId " << hostId ;
+     return;
+   }  
+   for ( int i = 0; i < answer.count(); ++i ) {
+@@ -298,13 +302,23 @@
+   connect( mSensorManager, SIGNAL( update() ), SLOT( update() ) );
+   setModel(&mSensorBrowserModel);
+ 
+-  this->setToolTip( i18n( "Drag sensors to empty cells of a worksheet "
+-                             "or the panel applet." ) );
+ //  setRootIsDecorated( false );
+   setDragDropMode(QAbstractItemView::DragOnly);
+ 
+   //setMinimumWidth( 1 );
++  retranslateUi();
++  connect( &mSensorBrowserModel, SIGNAL(sensorsAddedToHost(const QModelIndex&)), this, SLOT(expand(const QModelIndex&)));
++  update();
++}
+ 
++SensorBrowserWidget::~SensorBrowserWidget()
++{
++}
++
++void SensorBrowserWidget::retranslateUi() {
++  
++  this->setToolTip( i18n( "Drag sensors to empty cells of a worksheet "
++                             "or the panel applet." ) );
+   this->setWhatsThis( i18n( "The sensor browser lists the connected hosts and the sensors "
+                                "that they provide. Click and drag sensors into drop zones "
+                                "of a worksheet or the panel applet. A display will appear "
+@@ -312,12 +326,16 @@
+                                "values provided by the sensor. Some sensor displays can "
+                                "display values of multiple sensors. Simply drag other "
+                                "sensors on to the display to add more sensors." ) );
+-  connect( &mSensorBrowserModel, SIGNAL(sensorsAddedToHost(const QModelIndex&)), this, SLOT(expand(const QModelIndex&)));
+-  update();
+ }
+ 
+-SensorBrowserWidget::~SensorBrowserWidget()
++void SensorBrowserWidget::changeEvent( QEvent * event ) 
+ {
++  if (event->type() == QEvent::LanguageChange) {
++    retranslateUi();
++    mSensorBrowserModel.retranslate();
++    update();
++  }
++  QWidget::changeEvent(event);
+ }
+ 
+ void SensorBrowserWidget::disconnect()
+--- a/ksysguard/gui/SensorBrowser.h
++++ b/ksysguard/gui/SensorBrowser.h
+@@ -67,6 +67,7 @@
+     void disconnectHost(const QString &hostname);
+     virtual Qt::ItemFlags flags ( const QModelIndex & index ) const;
+     virtual QMimeData * mimeData ( const QModelIndexList & indexes ) const;
++    void retranslate();  /// Retranslate the model
+   Q_SIGNALS:
+     void sensorsAddedToHost(const QModelIndex &index );
+   private:
+@@ -106,6 +107,9 @@
+     void update();
+ 
+   private:
++    void retranslateUi();
++    void changeEvent( QEvent * event );
++
+     KSGRD::SensorManager* mSensorManager;
+ 
+     QString mDragText;
+--- a/ksysguard/gui/ksgrd/SensorManager.cc
++++ b/ksysguard/gui/ksgrd/SensorManager.cc
+@@ -63,8 +63,12 @@
+ 
+ SensorManager::SensorManager()
+ {
++  retranslate();
++}
++void SensorManager::retranslate()
++{
+   // Fill the sensor description dictionary.
+-
++  mDict.clear();
+   mDict.insert( QLatin1String( "Delta" ), i18n( "Change" ) );
+   mDict.insert( QLatin1String( "Rate" ), i18n( "Rate" ) );
+  
+@@ -158,13 +162,14 @@
+   }
+ 
+   // TODO: translated descriptions not yet implemented.
+-
++  mUnits.clear();
+   mUnits.insert( QLatin1String( "1/s" ), i18nc( "the unit 1 per second", "1/s" ) );
+   mUnits.insert( QLatin1String( "kBytes" ), i18n( "kBytes" ) );
+   mUnits.insert( QLatin1String( "min" ), i18nc( "the unit minutes", "min" ) );
+   mUnits.insert( QLatin1String( "MHz" ), i18nc( "the frequency unit", "MHz" ) );
+   mUnits.insert( QLatin1String( "%" ), i18nc( "a percentage", "%" ) );
+ 
++  mTypes.clear();
+   mTypes.insert( QLatin1String( "integer" ), i18n( "Integer Value" ) );
+   mTypes.insert( QLatin1String( "float" ), i18n( "Floating Point Value" ) );
+   mTypes.insert( QLatin1String( "table" ), i18n( "Process Controller" ) );
+--- a/ksysguard/gui/ksgrd/SensorManager.h
++++ b/ksysguard/gui/ksgrd/SensorManager.h
+@@ -93,6 +93,8 @@
+     void saveProperties( KConfigGroup& cfg );
+ 
+     void disconnectClient( SensorClient *client );
++    /** Call to retranslate all the strings - for example if the language has changed */
++    void retranslate();
+ 
+   public Q_SLOTS:
+     void reconfigure( const SensorAgent *agent );
+--- a/ksysguard/example/ksysguard.notifyrc
++++ b/ksysguard/example/ksysguard.notifyrc
+@@ -6,6 +6,7 @@
+ Comment[br]=Gward Reizhiad KDE
+ Comment[cy]=Gwarchodwr Cysawd KDE
+ Comment[da]=KDE Systemvagt
++Comment[de]=KDE-Systemüberwachung
+ Comment[el]=Φρουρός συστήματος KDE
+ Comment[eo]=KDE-Sistemobservilo
+ Comment[et]=KDE süsteemi valvur
+@@ -35,6 +36,7 @@
+ Comment[pt_BR]=System Guard do KDE
+ Comment[ro]=Sistem de gardă KDE
+ Comment[ru]=Системный монитор KDE
++Comment[sr]=KDE čuvar sistema
+ Comment[sr at latin]=KDE čuvar sistema
+ Comment[sv]=KDE:s systemövervakare
+ Comment[ta]=KDE கணினி காவலன்
+@@ -47,7 +49,9 @@
+ 
+ [Event/pattern_match]
+ Name=Pattern Matched
++Name[de]=Muster gefunden
+ Name[el]=Ταίριασμα μοτίβου
++Name[et]=Sobiv muster
+ Name[ja]=パターンにマッチ
+ Name[km]=លំនាំ​ដែល​ផ្គូផ្គង
+ Name[nb]=Mønsteret traff
+@@ -63,6 +67,7 @@
+ Comment=Search pattern matched
+ Comment[af]=Soek patroon opgespoor
+ Comment[da]=Søgemønsteret matchede
++Comment[de]=Suchmuster gefunden
+ Comment[el]=Υπάρχει ταίριασμα στο μοτίβο αναζήτησης
+ Comment[eo]=Serĉoŝablonesprimo kunvenita
+ Comment[et]=Otsingu muster sobib
+@@ -90,6 +95,7 @@
+ Comment[pt_BR]=Padrão de busca igualado
+ Comment[ro]=Modelul căutat s-a potrivit
+ Comment[ru]=Соответствие шаблону поиска
++Comment[sr]=Podudaran uzorak je pronađen
+ Comment[sr at latin]=Podudaran uzorak je pronađen
+ Comment[sv]=Sökmönster igenkänt
+ Comment[ta]=மாதிரி பொருத்தத்தை தேடு
+@@ -100,7 +106,9 @@
+ 
+ [Event/sensor_alarm]
+ Name=Sensor Alarm
++Name[de]=Sensor-Alarm
+ Name[el]=Ειδοποίηση αισθητήρα
++Name[et]=Sensori häire
+ Name[ja]=センサーアラーム
+ Name[km]=សំឡេង​រោទិ៍​ឧបករណ៍​ចាប់​សញ្ញា
+ Name[nb]=Følervarsling
+@@ -117,6 +125,7 @@
+ Comment[af]=Sensor oorskry krities beperk
+ Comment[cy]=Aethpwyd dros gyfyngder critigol y synhwyrydd
+ Comment[da]=Sensor gik ud over kritisk grænse
++Comment[de]=Sensor hat kritische Schwelle überschritten
+ Comment[el]=Υπέρβαση κρίσιμου ορίου αισθητήρα
+ Comment[eo]=Sentilo transiris danĝeran limon
+ Comment[et]=Sensor ületas kriitilise piiri
+@@ -144,6 +153,7 @@
+ Comment[pt_BR]=O sensor excedeu o limite crítico
+ Comment[ro]=Senzorul a depăşit limita critică
+ Comment[ru]=Датчик превысил критический предел
++Comment[sr]=Senzor je prešao dozvoljenu granicu
+ Comment[sr at latin]=Senzor je prešao dozvoljenu granicu
+ Comment[sv]=Sensor överskred den kritiska gränsen
+ Comment[ta]=உணர்வான் சிக்கல் கட்டத்தை தாண்டியது
+--- a/ksysguard/version.h
++++ b/ksysguard/version.h
+@@ -1,3 +1,3 @@
+ #ifndef KSYSGUARD_VERSION
+ #define KSYSGUARD_VERSION "4"
+-#endif // KSYSGUARD_VERSION
++#endif
+--- a/plasma/containments/panel/plasma-containment-panel.desktop
++++ b/plasma/containments/panel/plasma-containment-panel.desktop
+@@ -26,6 +26,7 @@
+ Name[ka]=პანელი
+ Name[kk]=Панель
+ Name[km]=បន្ទះ
++Name[ko]=패널
+ Name[lt]=Pultas
+ Name[lv]=Panelis
+ Name[mk]=Панел
+@@ -52,8 +53,9 @@
+ Name[zh_TW]=面板
+ Comment=A containment for a panel
+ Comment[el]=Ένας υποδοχέας για έναν πίνακα
++Comment[et]=Paneeli konteiner
+ Comment[ja]=Plasmoid (Plasma パネル) の入れ物
+-Comment[km]=បន្ទុក​សម្រាប់​បន្ទះ
++Comment[km]=ការ​ផ្ទុក​សម្រាប់​បន្ទះ
+ Comment[nb]=En beholder for et panel
+ Comment[nds]=En Gelaats för en Paneel
+ Comment[nl]=Een insluiting voor een paneel
+@@ -66,6 +68,7 @@
+ Icon=
+ Type=Service
+ ServiceTypes=Plasma/Applet,Plasma/Containment
++NoDisplay=true
+ 
+ X-KDE-Library=plasma_containment_panel
+ X-KDE-PluginInfo-Author=The Plasma Team
+@@ -73,7 +76,7 @@
+ X-KDE-PluginInfo-Name=panel
+ X-KDE-PluginInfo-Version=pre0.1
+ X-KDE-PluginInfo-Website=http://plasma.kde.org/
+-X-KDE-PluginInfo-Category=Miscellaneous
++X-KDE-PluginInfo-Category=Containments
+ X-KDE-PluginInfo-Depends=
+ X-KDE-PluginInfo-License=GPL
+ X-KDE-PluginInfo-EnabledByDefault=true
+--- a/plasma/containments/panel/panel.cpp
++++ b/plasma/containments/panel/panel.cpp
+@@ -30,6 +30,8 @@
+ Panel::Panel(QObject *parent, const QVariantList &args)
+     : Containment(parent, args)
+ {
++    //FIXME: we should do in the init, not here in the ctor as we'll end up resizing/positioning at
++    //       start up?
+     // Place us at the bottom by default, and make us 48px high:
+     Plasma::Location loc = Plasma::BottomEdge;
+     if (args.count() >= 3 && args[2].canConvert(QVariant::Int)) {
+@@ -37,6 +39,7 @@
+     }
+     setLocation(loc);
+ 
++    //FIXME: we need a proper background painting implementation here
+     m_background = new Plasma::Svg("widgets/panel-background", this);
+     setZValue(150);
+     QDesktopWidget desktop;
+@@ -48,6 +51,11 @@
+     delete m_background;
+ }
+ 
++Containment::Type Panel::type()
++{
++    return PanelContainment;
++}
++
+ void Panel::constraintsUpdated(Plasma::Constraints constraints)
+ {
+     if (constraints & Plasma::LocationConstraint) {
+--- a/plasma/containments/panel/panel.h
++++ b/plasma/containments/panel/panel.h
+@@ -33,6 +33,7 @@
+     Panel(QObject *parent, const QVariantList &args);
+     ~Panel();
+ 
++    Containment::Type type();
+     void constraintsUpdated(Plasma::Constraints constraints);
+     Qt::Orientations expandingDirections() const;
+ 
+--- a/plasma/containments/desktop/desktop.h
++++ b/plasma/containments/desktop/desktop.h
+@@ -19,16 +19,64 @@
+ #ifndef PLASMA_DESKTOP_H
+ #define PLASMA_DESKTOP_H
+ 
++#include <QGraphicsItem>
+ #include <QList>
++#include <QObject>
++
++#include <KIcon>
+ 
+ #include <plasma/containment.h>
++#include <plasma/phase.h>
++#include <plasma/widgets/widget.h>
+ 
+ class QAction;
++class QTimeLine;
++
+ namespace Plasma
+ {
+     class AppletBrowser;
+ }
+ 
++/*class Tool : public QObject, public QGraphicsItem
++{
++    Q_OBJECT
++
++public:
++    explicit Tool(QGraphicsItem *parent = 0);
++    QRectF boundingRect() const;
++    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
++
++};*/
++
++class ToolBox : public QObject, public QGraphicsItem
++{
++    Q_OBJECT
++
++public:
++    explicit ToolBox(QGraphicsItem *parent = 0);
++    QRectF boundingRect() const;
++    QPainterPath shape() const;
++
++    void addTool(Plasma::Widget* tool);
++
++protected:
++    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
++    void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
++    void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
++
++protected slots:
++    void animate(qreal progress);
++    void toolMoved(QGraphicsItem*);
++
++private:
++    KIcon m_icon;
++    int m_size;
++    bool m_hidden;
++    bool m_showing;
++    Plasma::Phase::AnimId m_animId;
++    int m_animFrame;
++};
++
+ class DefaultDesktop : public Plasma::Containment
+ {
+     Q_OBJECT
+@@ -36,6 +84,8 @@
+ public:
+     DefaultDesktop(QObject *parent, const QVariantList &args);
+     ~DefaultDesktop();
++    void init();
++    void constraintsUpdated(Plasma::Constraints constraints);
+ 
+     QList<QAction*> contextActions();
+ 
+@@ -52,6 +102,7 @@
+     QAction *m_runCommandAction;
+     QAction *m_lockAction;
+     QAction *m_logoutAction;
++    ToolBox *m_toolbox;
+     Plasma::AppletBrowser *m_appletBrowser;
+ };
+ 
+--- a/plasma/containments/desktop/plasma-containment-desktop.desktop
++++ b/plasma/containments/desktop/plasma-containment-desktop.desktop
+@@ -65,14 +65,15 @@
+ Icon=Plasma
+ Type=Service
+ ServiceTypes=Plasma/Applet,Plasma/Containment
++NoDisplay=true
+ 
+ X-KDE-Library=plasma_containment_desktop
+ X-KDE-PluginInfo-Author=The Plasma Team
+ X-KDE-PluginInfo-Email=panel-devel at kde.org
+ X-KDE-PluginInfo-Name=desktop
+-X-KDE-PluginInfo-Version=pre0.1
++X-KDE-PluginInfo-Version=0.1
+ X-KDE-PluginInfo-Website=http://plasma.kde.org/
+-X-KDE-PluginInfo-Category=Miscellaneous
++X-KDE-PluginInfo-Category=Containments
+ X-KDE-PluginInfo-Depends=
+ X-KDE-PluginInfo-License=GPL
+ X-KDE-PluginInfo-EnabledByDefault=true
+--- a/plasma/containments/desktop/desktop.cpp
++++ b/plasma/containments/desktop/desktop.cpp
+@@ -19,12 +19,17 @@
+ #include "desktop.h"
+ 
+ #include <QAction>
++#include <QPainter>
++#include <QTimeLine>
+ 
+ #include <KAuthorized>
+ #include <KDebug>
+ #include <KRun>
++#include <KWindowSystem>
+ 
+ #include "plasma/appletbrowser.h"
++#include "plasma/phase.h"
++#include "plasma/widgets/pushbutton.h"
+ #include "workspace/kworkspace.h"
+ 
+ #include "krunner_interface.h"
+@@ -32,6 +37,148 @@
+ #include "screensaver_interface.h"
+ 
+ using namespace Plasma;
++/*
++Tool::Tool(QGraphicsItem *parent)
++    : QGraphicsItem(parent)
++{
++}
++*/
++
++
++ToolBox::ToolBox(QGraphicsItem *parent)
++    : QGraphicsItem(parent),
++      m_icon("configure"),
++      m_size(50),
++      m_showing(false),
++      m_animId(0),
++      m_animFrame(0)
++{
++    setAcceptsHoverEvents(true);
++    setZValue(10000);
++    setFlag(ItemClipsToShape, true);
++    setFlag(ItemClipsChildrenToShape, false);
++
++    connect(Plasma::Phase::self(), SIGNAL(movementComplete(QGraphicsItem*)), this, SLOT(toolMoved(QGraphicsItem*)));
++}
++
++/*QRectF ToolBox::sizeHint() const
++{
++    return boundingRect();
++}*/
++
++QRectF ToolBox::boundingRect() const
++{
++    return QRectF(0, 0, m_size*2, m_size*2);
++}
++
++void ToolBox::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
++{
++    Q_UNUSED(option)
++    Q_UNUSED(widget)
++
++    QPainterPath p = shape();
++    QRadialGradient gradient(QPoint(m_size*2, 0), m_size*3);
++    gradient.setFocalPoint(QPointF(m_size*2, 0));
++    gradient.setColorAt(0, QColor(255, 255, 255, 128));
++    gradient.setColorAt(.9, QColor(128, 128, 128, 128));
++    painter->save();
++    painter->setPen(Qt::NoPen);
++    painter->setRenderHint(QPainter::Antialiasing, true);
++    painter->setBrush(gradient);
++    painter->drawPath(p);
++    painter->restore();
++    m_icon.paint(painter, QRect(m_size*2 - 34, 2, 32, 32));
++}
++
++QPainterPath ToolBox::shape() const
++{
++    QPainterPath path;
++    int size = m_size + m_animFrame;
++    path.moveTo(m_size*2, 0);
++    path.arcTo(QRectF(m_size*2 - size, -size, size*2, size*2), 180, 90);
++    return path;
++}
++
++void ToolBox::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
++{
++    Q_UNUSED(event)
++
++//    Plasma::Phase::self()->moveItem(this, Phase::SlideIn, QPoint(-25, -25));
++    int x = -25; // pos().x();
++    int y = 0; // pos().y();
++    Plasma::Phase* phase = Plasma::Phase::self();
++    foreach (QGraphicsItem* tool, QGraphicsItem::children()) {
++//        kDebug() << "let's show and move" << (QObject*)tool << tool->geometry().toRect();
++        tool->show();
++        phase->moveItem(tool, Plasma::Phase::SlideIn, QPoint(x, y));
++        //x += 0;
++        y += tool->boundingRect().height() + 5;
++    }
++
++    if (m_animId) {
++        phase->stopCustomAnimation(m_animId);
++    }
++
++    m_showing = true;
++    m_animId = phase->customAnimation(m_size, 150, Plasma::Phase::EaseInCurve, this, "animate");
++}
++
++void ToolBox::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
++{
++    Q_UNUSED(event)
++//    Plasma::Phase::self->moveItem(this, Phase::SlideOut, boundingRect()QPoint(-50, -50));
++    int x = 0; // pos().x() + geometry().width();
++    int y = 0;
++    Plasma::Phase* phase = Plasma::Phase::self();
++    foreach (QGraphicsItem* tool, QGraphicsItem::children()) {
++        phase->moveItem(tool, Plasma::Phase::SlideOut, QPoint(x, y));
++    }
++
++    if (m_animId) {
++        phase->stopCustomAnimation(m_animId);
++    }
++
++    m_showing = false;
++    m_animId = phase->customAnimation(m_size, 150, Plasma::Phase::EaseOutCurve, this, "animate");
++}
++
++void ToolBox::animate(qreal progress)
++{
++    if (m_showing) {
++        m_animFrame = m_size * progress;
++    } else {
++        m_animFrame = m_size * (1 - progress);
++    }
++
++    //kDebug() << "animating at" << progress << "for" << m_animFrame;
++
++    if (progress >= 1) {
++        m_animId = 0;
++    }
++
++    update();
++}
++
++void ToolBox::toolMoved(QGraphicsItem *item)
++{
++    //kDebug() << "geometry is now " << static_cast<Plasma::Widget*>(item)->geometry();
++    if (!m_showing &&
++        QGraphicsItem::children().indexOf(static_cast<Plasma::Widget*>(item)) != -1) {
++        item->hide();
++    }
++}
++
++void ToolBox::addTool(Plasma::Widget *tool)
++{
++    if (!tool) {
++        return;
++    }
++
++    tool->hide();
++    tool->setPos(pos());
++    tool->setZValue(zValue() + 1);
++    tool->setParentItem(this);
++}
+ 
+ DefaultDesktop::DefaultDesktop(QObject *parent, const QVariantList &args)
+     : Containment(parent, args),
+@@ -40,17 +187,54 @@
+       m_runCommandAction(0),
+       m_lockAction(0),
+       m_logoutAction(0),
++      m_toolbox(0),
+       m_appletBrowser(0)
+ {
++    kDebug() << "!!! loading desktop";
+ }
+ 
+ DefaultDesktop::~DefaultDesktop()
+ {
+ }
+ 
++void DefaultDesktop::init()
++{
++    Containment::init();
++    m_toolbox = new ToolBox(this);
++    //m_toolbox->updateGeometry();
++    m_toolbox->setPos(geometry().width() - m_toolbox->boundingRect().width(), 0);
++
++    Plasma::PushButton *tool = new Plasma::PushButton("Add Widgets", this);
++    tool->resize(tool->sizeHint());
++    m_toolbox->addTool(tool);
++    connect(tool, SIGNAL(clicked()), this, SLOT(launchAppletBrowser()));
++
++    tool = new Plasma::PushButton("Engine Explorer", this);
++    connect(tool, SIGNAL(clicked()), this, SLOT(launchExplorer()));
++    tool->resize(tool->sizeHint());
++    m_toolbox->addTool(tool);
++
++    tool = new Plasma::PushButton("Zoom In", this);
++    //connect(tool, SIGNAL(clicked()), this, SLOT(launchAppletBrowser()));
++    tool->resize(tool->sizeHint());
++    m_toolbox->addTool(tool);
++
++    tool = new Plasma::PushButton("Zoom Out", this);
++    //connect(tool, SIGNAL(clicked()), this, SLOT(launchAppletBrowser()));
++    tool->resize(tool->sizeHint());
++    m_toolbox->addTool(tool);
++}
++
++void DefaultDesktop::constraintsUpdated(Plasma::Constraints constraints)
++{
++    if (constraints & Plasma::ScreenConstraint && m_toolbox) {
++        m_toolbox->setPos(geometry().width() - m_toolbox->boundingRect().width(), 0);
++    }
++}
++
+ void DefaultDesktop::launchExplorer()
+ {
+-    KRun::run("plasmaAppletExplorer", KUrl::List(), 0);
++    KRun::run("plasmaengineexplorer", KUrl::List(), 0);
+ }
+ 
+ void DefaultDesktop::launchAppletBrowser()
+@@ -61,7 +245,9 @@
+         m_appletBrowser = new Plasma::AppletBrowser(this);
+     }
+ 
++    KWindowSystem::setOnDesktop(m_appletBrowser->winId(), KWindowSystem::currentDesktop());
+     m_appletBrowser->show();
++    KWindowSystem::activateWindow(m_appletBrowser->winId());
+ }
+ 
+ void DefaultDesktop::runCommand()
+@@ -102,7 +288,7 @@
+         m_engineExplorerAction = new QAction(i18n("Engine Explorer"), this);
+         connect(m_engineExplorerAction, SIGNAL(triggered(bool)), this, SLOT(launchExplorer()));
+ 
+-        m_appletBrowserAction = new QAction(i18n("Add applet"), this);
++        m_appletBrowserAction = new QAction(i18n("Add Applet..."), this);
+         connect(m_appletBrowserAction, SIGNAL(triggered(bool)), this, SLOT(launchAppletBrowser()));
+ 
+         m_runCommandAction = new QAction(i18n("Run Command..."), this);
+--- /dev/null
++++ b/plasma/dataengines/weather/AUTHORS
+@@ -0,0 +1,2 @@
++Author: Shawn Starr <shawn.starr at rogers.com>
++With Help from Aaron J. Seigo <aseigo at kde.org>
+--- /dev/null
++++ b/plasma/dataengines/weather/TODO
+@@ -0,0 +1 @@
++- For Applet, use Strigi to search though list of cities each Ion provides. This will make it easier choose locations.
+--- /dev/null
++++ b/plasma/dataengines/weather/plasma-engine-weather.desktop
+@@ -0,0 +1,42 @@
++[Desktop Entry]
++Name=Weather Data Engine
++Name[el]=Μηχανή δεδομένων καιρού
++Name[et]=Ilmaandmete mootor
++Name[ga]=Inneall Sonraí Aimsire
++Name[ja]=気象データエンジン
++Name[kk]=Ауа райы қызметі
++Name[km]=ម៉ាស៊ីន​ស្វែងរក​ទិន្នន័យ​អាកាសធាតុ
++Name[ko]=날씨 데이터 엔진
++Name[nb]=Værdata-motor
++Name[nds]=Weder-Hanteerkarn
++Name[nl]=Weer (gegevensengine)
++Name[nn]=Vêrdatamotor
++Name[pt]=Motor de Dados Meteorológicos
++Name[pt_BR]=Mecanismo de Dados Meteorológicos
++Name[sv]=Datagränssnitt för väder
++Name[x-test]=xxWeather Data Enginexx
++Name[zh_CN]=天气数据引擎
++Name[zh_TW]=天氣資料引擎
++Comment=Weather data for Plasmoids
++Comment[el]=Δεδομένα καιρού για πλασμοειδή
++Comment[et]=Ilmaandmed plasmoididele
++Comment[ga]=Sonraí aimsire le haghaidh Plasmoids
++Comment[ja]=Plasmoid のための気象データ
++Comment[kk]=Плазмоидтер үшін ауа райы деректері
++Comment[km]=ទិន្នន័យ​អាកាសធាតុ​សម្រាប់ Plasmoids
++Comment[ko]=Plasmoid를 위한 날씨 정보
++Comment[nb]=Værdata for Plasmoids
++Comment[nds]=Wederdaten för Plasmoiden
++Comment[nl]=Weergegevens voor Plasmoids
++Comment[nn]=Vêrdata for plasmoidar
++Comment[pt]=Dados meteorológicos para os Plasmóides
++Comment[pt_BR]=Dados meteorológicos para os Plasmóides
++Comment[sv]=Väderdata för Plasmoider
++Comment[x-test]=xxWeather data for Plasmoidsxx
++Comment[zh_CN]=Plasmoids 的天气数据
++Comment[zh_TW]=Plasmoid 的天氣資料
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=
++X-KDE-Library=plasma_engine_weather
++X-EngineName=weather
+--- /dev/null
++++ b/plasma/dataengines/weather/weatherengine.cpp
+@@ -0,0 +1,223 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++#include "weatherengine.h"
++#include <KServiceTypeTrader>
++#include <KDateTime>
++#include <KLocale>
++#include "ions/ion.h"
++
++class WeatherEngine::Private
++{
++public:
++    Private() {}
++    ~Private() {
++        qDeleteAll(m_ions);
++    }
++
++    IonInterface* ionForSource(const QString& name)
++    {
++        int offset = name.indexOf(':');
++
++        if (offset < 1) {
++            return 0;
++        }
++
++        QString ionName = name.left(offset);
++
++        if (!this->m_ions.contains(ionName)) {
++            return 0;
++        }
++
++        return this->m_ions[ionName];
++    }
++
++    IonInterface::IonDict m_ions;
++    KDateTime m_localTime;
++};
++
++// Returns an instance of an Ion plugin loaded.
++IonInterface* WeatherEngine::Ion(const QString& name) const
++{
++    IonInterface::IonDict::const_iterator it = d->m_ions.find(name);
++    if (it != d->m_ions.end()) {
++        return *it;
++    }
++
++    return NULL;
++}
++
++// Loads an Ion plugin given a plugin name found via KService.
++IonInterface* WeatherEngine::loadIon(const KService::Ptr& service)
++{
++    IonInterface *ion = 0;
++    QString plugName = service->property("X-IonName").toString();
++    IonInterface::IonDict::const_iterator it = d->m_ions.find(plugName);
++
++    if (it != d->m_ions.end()) {
++         ion = *it;
++         ion->ref();
++         return ion;
++    }
++
++    QString error;
++
++    // Load the Ion plugin, store it into a QMap to handle multiple ions.
++    ion = service->createInstance<IonInterface>(0, QVariantList(), &error);
++    if (!ion) {
++        kDebug() << "weatherengine: Couldn't load ion \"" << plugName << "\"!" << error;
++        return 0;
++    }
++
++    // Increment counter of ions.
++    ion->ref();
++
++    // Set the Ion's long name
++    //ion->setObjectName(offers.first()->name());
++    connect(ion, SIGNAL(newSource(QString)), this, SLOT(newIonSource(QString)));
++    connect(ion, SIGNAL(sourceRemoved(QString)), this, SLOT(removeIonSource(QString)));
++
++    /* Set properties for the ion
++     *
++     * TIMEFORMAT is displaying the time/date in UTC or user's local time
++     * UNITS is setting the weather units used, Celsius/Fahrenheit, Kilopascals/Inches of Mercury, etc
++     * WINDFORMAT enable winds to be displayed as meters per second (m/s) some countries display winds like this
++     */
++
++    ion->option(IonInterface::TIMEFORMAT, QVariant(d->m_localTime.isUtc()));
++    ion->option(IonInterface::UNITS, KGlobal::locale()->measureSystem());
++    ion->option(IonInterface::WINDFORMAT, QVariant(false)); // FIXME: Should be configurable by applet
++
++    // Assign the instantiated ion the key of the name of the ion.
++    d->m_ions[plugName] = ion;
++
++    return ion;
++}
++
++// Unload an Ion plugin given a Ion plugin name.
++void WeatherEngine::unloadIon(const QString &name)
++{
++    IonInterface *ion = Ion(name);
++    if (ion) {
++        ion->deref();
++
++        if (!ion->isUsed()) {
++            d->m_ions.remove(name);
++            delete ion;
++        }
++    }
++}
++
++// Return a list of Ion plugins found.
++KService::List WeatherEngine::knownIons()
++{
++    KService::List offers = KServiceTypeTrader::self()->query("WeatherEngine/Ion");
++
++    if (offers.isEmpty()) {
++        kDebug() << "weatherengine: No plugins to load!";
++        return KService::List();
++    }
++
++    foreach(KService::Ptr service, offers) {
++        setData("ions", service->property("X-IonName").toString(), service->property("Name").toString());
++    }
++
++    return offers;
++}
++
++void WeatherEngine::newIonSource(const QString& source)
++{
++    IonInterface *ion = qobject_cast<IonInterface*>(sender());
++
++    if (!ion) {
++        return;
++    }
++    ion->connectSource(source, this);
++}
++
++void WeatherEngine::removeIonSource(const QString& source)
++{
++    IonInterface *ion = qobject_cast<IonInterface*>(sender());
++    if (!ion) {
++        return;
++    }
++    ion->disconnectSource(source, this);
++}
++
++void WeatherEngine::updated(const QString& source, Plasma::DataEngine::Data data)
++{
++    setData(source, data);
++}
++
++// ctor
++WeatherEngine::WeatherEngine(QObject *parent, const QVariantList& args)
++        :  Plasma::DataEngine(parent), d(new Private())
++{
++    Q_UNUSED(args)
++
++    // Set any local properties for Ion to use
++    d->m_localTime = KDateTime::currentDateTime(KDateTime::LocalZone);
++
++    /* FIXME: For now we just load them all as we find them, we'll need to make this configurable
++              somehow. No point in loading all plugins if your not interested in certain cities.
++    */
++    foreach(KService::Ptr service, knownIons()) {
++        loadIon(service); 
++    }
++}
++
++// dtor
++WeatherEngine::~WeatherEngine()
++{
++    // Cleanup all private data.
++    delete d;
++}
++
++// Setup each Ion for the first time
++bool WeatherEngine::sourceRequested(const QString &source)
++{
++    IonInterface *ion = d->ionForSource(source);
++
++    if (!ion) {
++        return false;
++    }
++
++    ion->connectSource(source, this);
++    kDebug() << "sourceRequested()";
++    setData(source, this);
++    return true;
++}
++
++// SLOT: update the Applet with new data from all ions loaded.
++bool WeatherEngine::updateSource(const QString& source)
++{
++    IonInterface *ion = d->ionForSource(source);
++ 
++    if (!ion) {
++        return false;
++    }
++
++    if (ion->updateSource(source)) {
++        return true;
++    } else {
++        return false;
++    }
++}
++
++#include "weatherengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/weather/COPYING
+@@ -0,0 +1,340 @@
++		    GNU GENERAL PUBLIC LICENSE
++		       Version 2, June 1991
++
++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
++                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++			    Preamble
++
++  The licenses for most software are designed to take away your
++freedom to share and change it.  By contrast, the GNU General Public
++License is intended to guarantee your freedom to share and change free
++software--to make sure the software is free for all its users.  This
++General Public License applies to most of the Free Software
++Foundation's software and to any other program whose authors commit to
++using it.  (Some other Free Software Foundation software is covered by
++the GNU Library General Public License instead.)  You can apply it to
++your programs, too.
++
++  When we speak of free software, we are referring to freedom, not
++price.  Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++this service if you wish), that you receive source code or can get it
++if you want it, that you can change the software or use pieces of it
++in new free programs; and that you know you can do these things.
++
++  To protect your rights, we need to make restrictions that forbid
++anyone to deny you these rights or to ask you to surrender the rights.
++These restrictions translate to certain responsibilities for you if you
++distribute copies of the software, or if you modify it.
++
++  For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must give the recipients all the rights that
++you have.  You must make sure that they, too, receive or can get the
++source code.  And you must show them these terms so they know their
++rights.
++
++  We protect your rights with two steps: (1) copyright the software, and
++(2) offer you this license which gives you legal permission to copy,
++distribute and/or modify the software.
++
++  Also, for each author's protection and ours, we want to make certain
++that everyone understands that there is no warranty for this free
++software.  If the software is modified by someone else and passed on, we
++want its recipients to know that what they have is not the original, so
++that any problems introduced by others will not reflect on the original
++authors' reputations.
++
++  Finally, any free program is threatened constantly by software
++patents.  We wish to avoid the danger that redistributors of a free
++program will individually obtain patent licenses, in effect making the
++program proprietary.  To prevent this, we have made it clear that any
++patent must be licensed for everyone's free use or not licensed at all.
++
++  The precise terms and conditions for copying, distribution and
++modification follow.
++
++		    GNU GENERAL PUBLIC LICENSE
++   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++  0. This License applies to any program or other work which contains
++a notice placed by the copyright holder saying it may be distributed
++under the terms of this General Public License.  The "Program", below,
++refers to any such program or work, and a "work based on the Program"
++means either the Program or any derivative work under copyright law:
++that is to say, a work containing the Program or a portion of it,
++either verbatim or with modifications and/or translated into another
++language.  (Hereinafter, translation is included without limitation in
++the term "modification".)  Each licensee is addressed as "you".
++
++Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope.  The act of
++running the Program is not restricted, and the output from the Program
++is covered only if its contents constitute a work based on the
++Program (independent of having been made by running the Program).
++Whether that is true depends on what the Program does.
++
++  1. You may copy and distribute verbatim copies of the Program's
++source code as you receive it, in any medium, provided that you
++conspicuously and appropriately publish on each copy an appropriate
++copyright notice and disclaimer of warranty; keep intact all the
++notices that refer to this License and to the absence of any warranty;
++and give any other recipients of the Program a copy of this License
++along with the Program.
++
++You may charge a fee for the physical act of transferring a copy, and
++you may at your option offer warranty protection in exchange for a fee.
++
++  2. You may modify your copy or copies of the Program or any portion
++of it, thus forming a work based on the Program, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++    a) You must cause the modified files to carry prominent notices
++    stating that you changed the files and the date of any change.
++
++    b) You must cause any work that you distribute or publish, that in
++    whole or in part contains or is derived from the Program or any
++    part thereof, to be licensed as a whole at no charge to all third
++    parties under the terms of this License.
++
++    c) If the modified program normally reads commands interactively
++    when run, you must cause it, when started running for such
++    interactive use in the most ordinary way, to print or display an
++    announcement including an appropriate copyright notice and a
++    notice that there is no warranty (or else, saying that you provide
++    a warranty) and that users may redistribute the program under
++    these conditions, and telling the user how to view a copy of this
++    License.  (Exception: if the Program itself is interactive but
++    does not normally print such an announcement, your work based on
++    the Program is not required to print an announcement.)
++
++These requirements apply to the modified work as a whole.  If
++identifiable sections of that work are not derived from the Program,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works.  But when you
++distribute the same sections as part of a whole which is a work based
++on the Program, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Program.
++
++In addition, mere aggregation of another work not based on the Program
++with the Program (or with a work based on the Program) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++  3. You may copy and distribute the Program (or a work based on it,
++under Section 2) in object code or executable form under the terms of
++Sections 1 and 2 above provided that you also do one of the following:
++
++    a) Accompany it with the complete corresponding machine-readable
++    source code, which must be distributed under the terms of Sections
++    1 and 2 above on a medium customarily used for software interchange; or,
++
++    b) Accompany it with a written offer, valid for at least three
++    years, to give any third party, for a charge no more than your
++    cost of physically performing source distribution, a complete
++    machine-readable copy of the corresponding source code, to be
++    distributed under the terms of Sections 1 and 2 above on a medium
++    customarily used for software interchange; or,
++
++    c) Accompany it with the information you received as to the offer
++    to distribute corresponding source code.  (This alternative is
++    allowed only for noncommercial distribution and only if you
++    received the program in object code or executable form with such
++    an offer, in accord with Subsection b above.)
++
++The source code for a work means the preferred form of the work for
++making modifications to it.  For an executable work, complete source
++code means all the source code for all modules it contains, plus any
++associated interface definition files, plus the scripts used to
++control compilation and installation of the executable.  However, as a
++special exception, the source code distributed need not include
++anything that is normally distributed (in either source or binary
++form) with the major components (compiler, kernel, and so on) of the
++operating system on which the executable runs, unless that component
++itself accompanies the executable.
++
++If distribution of executable or object code is made by offering
++access to copy from a designated place, then offering equivalent
++access to copy the source code from the same place counts as
++distribution of the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++  4. You may not copy, modify, sublicense, or distribute the Program
++except as expressly provided under this License.  Any attempt
++otherwise to copy, modify, sublicense or distribute the Program is
++void, and will automatically terminate your rights under this License.
++However, parties who have received copies, or rights, from you under
++this License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++  5. You are not required to accept this License, since you have not
++signed it.  However, nothing else grants you permission to modify or
++distribute the Program or its derivative works.  These actions are
++prohibited by law if you do not accept this License.  Therefore, by
++modifying or distributing the Program (or any work based on the
++Program), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Program or works based on it.
++
++  6. Each time you redistribute the Program (or any work based on the
++Program), the recipient automatically receives a license from the
++original licensor to copy, distribute or modify the Program subject to
++these terms and conditions.  You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties to
++this License.
++
++  7. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License.  If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Program at all.  For example, if a patent
++license would not permit royalty-free redistribution of the Program by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Program.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system, which is
++implemented by public license practices.  Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++  8. If the distribution and/or use of the Program is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Program under this License
++may add an explicit geographical distribution limitation excluding
++those countries, so that distribution is permitted only in or among
++countries not thus excluded.  In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++  9. The Free Software Foundation may publish revised and/or new versions
++of the General Public License from time to time.  Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++Each version is given a distinguishing version number.  If the Program
++specifies a version number of this License which applies to it and "any
++later version", you have the option of following the terms and conditions
++either of that version or of any later version published by the Free
++Software Foundation.  If the Program does not specify a version number of
++this License, you may choose any version ever published by the Free Software
++Foundation.
++
++  10. If you wish to incorporate parts of the Program into other free
++programs whose distribution conditions are different, write to the author
++to ask for permission.  For software which is copyrighted by the Free
++Software Foundation, write to the Free Software Foundation; we sometimes
++make exceptions for this.  Our decision will be guided by the two goals
++of preserving the free status of all derivatives of our free software and
++of promoting the sharing and reuse of software generally.
++
++			    NO WARRANTY
++
++  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
++REPAIR OR CORRECTION.
++
++  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGES.
++
++		     END OF TERMS AND CONDITIONS
++
++	    How to Apply These Terms to Your New Programs
++
++  If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++  To do so, attach the following notices to the program.  It is safest
++to attach them to the start of each source file to most effectively
++convey the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++    <one line to give the program's name and a brief idea of what it does.>
++    Copyright (C) <year>  <name of author>
++
++    This program is free software; you can redistribute it and/or modify
++    it under the terms of the GNU General Public License as published by
++    the Free Software Foundation; either version 2 of the License, or
++    (at your option) any later version.
++
++    This program is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++    GNU General Public License for more details.
++
++    You should have received a copy of the GNU General Public License
++    along with this program; if not, write to the Free Software
++    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++
++
++Also add information on how to contact you by electronic and paper mail.
++
++If the program is interactive, make it output a short notice like this
++when it starts in an interactive mode:
++
++    Gnomovision version 69, Copyright (C) year name of author
++    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++    This is free software, and you are welcome to redistribute it
++    under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License.  Of course, the commands you use may
++be called something other than `show w' and `show c'; they could even be
++mouse-clicks or menu items--whatever suits your program.
++
++You should also get your employer (if you work as a programmer) or your
++school, if any, to sign a "copyright disclaimer" for the program, if
++necessary.  Here is a sample; alter the names:
++
++  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
++  `Gnomovision' (which makes passes at compilers) written by James Hacker.
++
++  <signature of Ty Coon>, 1 April 1989
++  Ty Coon, President of Vice
++
++This General Public License does not permit incorporating your program into
++proprietary programs.  If your program is a subroutine library, you may
++consider it more useful to permit linking proprietary applications with the
++library.  If this is what you want to do, use the GNU Library General
++Public License instead of this License.
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion_envcan.cpp
+@@ -0,0 +1,1463 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Ion for Environment Canada XML data */
++
++#include "ion_envcan.h"
++
++class EnvCanadaIon::Private : public QObject
++{
++public:
++    Private() {}
++    ~Private() {}
++
++private:
++    struct XMLMapInfo {
++        QString cityName;
++        QString territoryName;
++        QString cityCode;
++    };
++
++public:
++    // Key dicts
++    QHash<QString, EnvCanadaIon::Private::XMLMapInfo> m_place;
++    QHash<QString, QString> m_locations;
++    QString m_code;
++    QString m_territory;
++    QString m_cityName;
++
++    // Weather information
++    QHash<QString, WeatherData> m_weatherData;
++
++    // Store KIO jobs
++    QMap<KJob *, QXmlStreamReader*> m_jobXml;
++    QMap<KJob *, QString> m_jobList;
++    QXmlStreamReader m_xmlSetup;
++    KUrl *m_url;
++    KIO::TransferJob *m_job;
++
++    bool m_useUTC;  // Ion option: Timezone may be local time or UTC time
++    bool m_useMetric; // Ion option: Units may be Metric or Imperial
++    bool m_windInMeters; // Ion option: Display wind format in meters per second only
++
++    WeatherFormula m_formula;
++};
++
++
++// ctor, dtor
++EnvCanadaIon::EnvCanadaIon(QObject *parent, const QVariantList &args)
++        : IonInterface(parent), d(new Private())
++{
++    Q_UNUSED(args)
++}
++
++EnvCanadaIon::~EnvCanadaIon()
++{
++    // Destroy each warning stored in a QVector
++    foreach(WeatherData item, d->m_weatherData) {
++        foreach(WeatherData::WarningInfo *warning, item.warnings) {
++            if (warning) {
++                delete warning;
++            }
++        }
++        foreach(WeatherData::ForecastInfo *forecast, item.forecasts) {
++            if (forecast) {
++                delete forecast;
++            }
++        }
++    }
++
++    // Destroy dptr
++    delete d;
++}
++
++// Get the master list of locations to be parsed
++void EnvCanadaIon::init()
++{
++    // Get the real city XML URL so we can parse this
++    getXMLSetup();
++}
++
++QString EnvCanadaIon::validate(const QString& source)
++{
++    QHash<QString, QString>::const_iterator it = d->m_locations.find(source);
++    if (it != d->m_locations.end()) {
++        return source;
++    }
++    return QString();
++}
++
++// Get a specific Ion's data
++bool EnvCanadaIon::updateIonSource(const QString& source)
++{
++
++    QString result = this->validate(source);
++
++    if (!result.isEmpty()) {
++        QStringList tokens = result.split(':');
++        setData(source, "Validate", tokens[1]);
++        getXMLData(source);
++        return true;
++    }
++    setData(source, "Validate", "Invalid");
++    return false;
++}
++
++// Parses city list and gets the correct city based on ID number
++void EnvCanadaIon::getXMLSetup()
++{
++
++    d->m_url = new KUrl("http://dd.weatheroffice.ec.gc.ca/EC_sites/xml/siteList.xml");
++
++    KIO::TransferJob *job = KIO::get(d->m_url->url(), KIO::NoReload, KIO::HideProgressInfo);
++
++    if (job) {
++        connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this,
++                SLOT(setup_slotDataArrived(KIO::Job *, const QByteArray &)));
++        connect(job, SIGNAL(result(KJob *)), this, SLOT(setup_slotJobFinished(KJob *)));
++    }
++}
++
++// Gets specific city XML data
++void EnvCanadaIon::getXMLData(const QString& source)
++{
++    KUrl url;
++    url = "http://dd.weatheroffice.ec.gc.ca/EC_sites/xml/" + d->m_place[source].territoryName + "/" + d->m_place[source].cityCode + "_e.xml";
++
++    kDebug() << "URL Location: " << url.url();
++
++    d->m_job = KIO::get(url.url(), KIO::Reload, KIO::HideProgressInfo);
++    d->m_jobXml.insert(d->m_job, new QXmlStreamReader);
++    d->m_jobList.insert(d->m_job, source);
++
++    if (d->m_job) {
++        connect(d->m_job, SIGNAL(data(KIO::Job *, const QByteArray &)), this,
++                SLOT(slotDataArrived(KIO::Job *, const QByteArray &)));
++        connect(d->m_job, SIGNAL(result(KJob *)), this, SLOT(slotJobFinished(KJob *)));
++    }
++}
++
++void EnvCanadaIon::setup_slotDataArrived(KIO::Job *job, const QByteArray &data)
++{
++    Q_UNUSED(job)
++
++    if (data.isEmpty()) {
++        return;
++    }
++
++    // Send to xml.
++    d->m_xmlSetup.addData(data.data());
++}
++
++void EnvCanadaIon::slotDataArrived(KIO::Job *job, const QByteArray &data)
++{
++
++    if (data.isEmpty() || !d->m_jobXml.contains(job)) {
++        return;
++    }
++
++    // Send to xml.
++    d->m_jobXml[job]->addData(data.data());
++}
++
++void EnvCanadaIon::slotJobFinished(KJob *job)
++{
++    // Dual use method, if we're fetching location data to parse we need to do this first
++    readXMLData(d->m_jobList[job], *d->m_jobXml[job]);
++    d->m_jobList.remove(job);
++    delete d->m_jobXml[job];
++    d->m_jobXml.remove(job);
++}
++
++void EnvCanadaIon::setup_slotJobFinished(KJob *job)
++{
++    Q_UNUSED(job)
++    readXMLSetup();
++    this->setInitialized(true);
++}
++
++// Parse the city list and store into a QMap
++bool EnvCanadaIon::readXMLSetup()
++{
++    QString tmp;
++    while (!d->m_xmlSetup.atEnd()) {
++        d->m_xmlSetup.readNext();
++
++        if (d->m_xmlSetup.isStartElement()) {
++
++            // XML ID code to match filename
++            if (d->m_xmlSetup.name() == "site") {
++                d->m_code = d->m_xmlSetup.attributes().value("code").toString();
++            }
++
++            if (d->m_xmlSetup.name() == "nameEn") {
++                d->m_cityName = d->m_xmlSetup.readElementText(); // Name of cities
++            }
++
++            if (d->m_xmlSetup.name() == "provinceCode") {
++                d->m_territory = d->m_xmlSetup.readElementText(); // Provinces/Territory list
++                tmp = "envcan:" + d->m_cityName + ", " + d->m_territory; // Build the key name.
++
++                // Set the mappings
++                d->m_place[tmp].cityCode = d->m_code;
++                d->m_place[tmp].territoryName = d->m_territory;
++                d->m_place[tmp].cityName = d->m_cityName;
++
++                // Set the string list, we will use for the applet to display the available cities.
++                d->m_locations[tmp] = tmp;
++            }
++        }
++
++    }
++    return !d->m_xmlSetup.error();
++}
++
++WeatherData EnvCanadaIon::parseWeatherSite(WeatherData& data, QXmlStreamReader& xml)
++{
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "license") {
++                xml.readElementText();
++            } else if (xml.name() == "location") {
++                parseLocations(data, xml);
++            } else if (xml.name() == "warnings") {
++                parseWarnings(data, xml);
++            } else if (xml.name() == "currentConditions") {
++                parseConditions(data, xml);
++            } else if (xml.name() == "forecastGroup") {
++                parseWeatherForecast(data, xml);
++            } else if (xml.name() == "yesterdayConditions") {
++                parseYesterdayWeather(data, xml);
++            }
++            else if (xml.name() == "riseSet") {
++                parseAstronomicals(data, xml);
++            }
++            else if (xml.name() == "almanac") {
++              parseWeatherRecords(data, xml);
++            }
++            else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++    return data;
++}
++
++// Parse Weather data main loop, from here we have to decend into each tag pair
++bool EnvCanadaIon::readXMLData(const QString& source, QXmlStreamReader& xml)
++{
++    WeatherData data;
++    data.comforttemp = "N/A";
++    data.recordHigh = 0.0;
++    data.recordLow = 0.0;
++    data.shortTerritoryName = d->m_place[source].territoryName;
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "siteData") {
++                data = parseWeatherSite(data, xml);
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++
++    d->m_weatherData[source] = data;
++    updateWeather(source);
++    return !xml.error();
++}
++
++void EnvCanadaIon::parseDateTime(WeatherData& data, QXmlStreamReader& xml, WeatherData::WarningInfo *warning)
++{
++
++    Q_ASSERT(xml.isStartElement() && xml.name() == "dateTime");
++
++    // What kind of date info is this?
++    QString dateType = xml.attributes().value("name").toString();
++    QString dateZone = xml.attributes().value("zone").toString();
++
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (dateType == "xmlCreation") {
++                return;
++            }
++            if (xml.name() == "year") {
++                xml.readElementText();
++            } else if (xml.name() == "month") {
++                xml.readElementText();
++            } else if (xml.name() == "day") {
++                xml.readElementText();
++            } else if (xml.name() == "hour")
++                xml.readElementText();
++            else if (xml.name() == "minute")
++                xml.readElementText();
++            else if (xml.name() == "timeStamp") {
++                if (d->m_useUTC && dateZone == "UTC") {
++                    // Which timestamp are we for?
++
++                    if (dateType == "eventIssue") {
++                        if (warning) {
++                            warning->timestamp = xml.readElementText();
++                        }
++                    } else if (dateType == "observation") {
++                        data.obsTimestamp = xml.readElementText();
++                    } else if (dateType == "forecastIssue") {
++                        data.forecastTimestamp = xml.readElementText();
++                    } else if (dateType == "sunrise") {
++                        data.sunriseTimestamp = xml.readElementText();
++                    } else if (dateType == "sunset") {
++                        data.sunsetTimestamp = xml.readElementText();
++                    } else if (dateType == "moonrise") {
++                        data.moonriseTimestamp = xml.readElementText();
++                    } else if (dateType == "moonset") {
++                        data.moonsetTimestamp = xml.readElementText();
++                    }
++
++                } else if (dateZone != "UTC") {
++                    if (dateType == "eventIssue") {
++                        if (warning) {
++                            warning->timestamp = xml.readElementText();
++                        }
++                    } else if (dateType == "observation") {
++                        data.obsTimestamp = xml.readElementText();
++                    } else if (dateType == "forecastIssue") {
++                        data.forecastTimestamp = xml.readElementText();
++                    } else if (dateType == "sunrise") {
++                        data.sunriseTimestamp = xml.readElementText();
++                    } else if (dateType == "sunset") {
++                        data.sunsetTimestamp = xml.readElementText();
++                    } else if (dateType == "moonrise") {
++                        data.moonriseTimestamp = xml.readElementText();
++                    } else if (dateType == "moonset") {
++                        data.moonsetTimestamp = xml.readElementText();
++                    }
++                }
++            } else if (xml.name() == "textSummary") {
++                xml.readElementText();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseLocations(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "location");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "country") {
++                data.countryName = xml.readElementText();
++            } else if (xml.name() == "province" || xml.name() == "territory") {
++                data.longTerritoryName = xml.readElementText();
++            } else if (xml.name() == "name") {
++                data.cityName = xml.readElementText();
++            } else if (xml.name() == "region") {
++                data.regionName = xml.readElementText();
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseWindInfo(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "wind");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "speed") {
++                data.windSpeed = xml.readElementText();
++            } else if (xml.name() == "gust") {
++                data.windGust = xml.readElementText();
++            } else if (xml.name() == "direction") {
++                data.windDirection = xml.readElementText();
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseConditions(WeatherData& data, QXmlStreamReader& xml)
++{
++
++    Q_ASSERT(xml.isStartElement() && xml.name() == "currentConditions");
++    data.temperature = "N/A";
++    data.dewpoint = "N/A";
++    data.condition = "N/A";
++    data.comforttemp = "N/A";
++    data.stationID = "N/A";
++    data.pressure = 0.0;
++    data.pressureTendency = "N/A";
++    data.visibility = 0;
++    data.humidity = "N/A";
++    data.windSpeed = "N/A";
++    data.windGust = "N/A";
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "currentConditions")
++            break;
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "station") {
++                data.stationID = xml.attributes().value("code").toString();
++            } else if (xml.name() == "dateTime") {
++                parseDateTime(data, xml);
++            } else if (xml.name() == "condition") {
++                data.condition = xml.readElementText();
++            } else if (xml.name() == "temperature") {
++                data.temperature = xml.readElementText();;
++            } else if (xml.name() == "dewpoint") {
++                data.dewpoint = xml.readElementText();
++            } else if (xml.name() == "humidex" || xml.name() == "windChill") {
++                data.comforttemp = xml.readElementText();
++            } else if (xml.name() == "pressure") {
++                data.pressureTendency = xml.attributes().value("tendency").toString();
++                if (data.pressureTendency.isEmpty()) {
++                    data.pressureTendency = "steady";
++                }
++                data.pressure = xml.readElementText().toFloat();
++            } else if (xml.name() == "visibility") {
++                data.visibility = xml.readElementText().toFloat();
++            } else if (xml.name() == "relativeHumidity") {
++                data.humidity = xml.readElementText();
++            } else if (xml.name() == "wind") {
++                parseWindInfo(data, xml);
++            }
++            //} else {
++            //    parseUnknownElement(xml);
++            //}
++        }
++    }
++}
++
++void EnvCanadaIon::parseWarnings(WeatherData &data, QXmlStreamReader& xml)
++{
++    WeatherData::WarningInfo* warning = new WeatherData::WarningInfo;
++
++    Q_ASSERT(xml.isStartElement() && xml.name() == "warnings");
++    QString warningURL = xml.attributes().value("url").toString();
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "warnings") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "dateTime") {
++                parseDateTime(data, xml, warning);
++                if (!warning->timestamp.isEmpty() && !warning->url.isEmpty())  {
++                    data.warnings.append(warning);
++                    warning = new WeatherData::WarningInfo;
++                }
++            } else if (xml.name() == "event") {
++                // Append new event to list.
++                warning->url = warningURL;
++                warning->type = xml.attributes().value("type").toString();
++                warning->priority = xml.attributes().value("priority").toString();
++                warning->description = xml.attributes().value("description").toString();
++            } else {
++                if (xml.name() != "dateTime") {
++                    parseUnknownElement(xml);
++                }
++            }
++        }
++    }
++    delete warning;
++}
++
++
++void EnvCanadaIon::parseWeatherForecast(WeatherData& data, QXmlStreamReader& xml)
++{
++    WeatherData::ForecastInfo* forecast = new WeatherData::ForecastInfo;
++    Q_ASSERT(xml.isStartElement() && xml.name() == "forecastGroup");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "forecastGroup") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "dateTime") {
++                parseDateTime(data, xml);
++            } else if (xml.name() == "regionalNormals") {
++                parseRegionalNormals(data, xml);
++            } else if (xml.name() == "forecast") {
++                parseForecast(data, xml, forecast);
++                forecast = new WeatherData::ForecastInfo;
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++    delete forecast;
++}
++
++void EnvCanadaIon::parseRegionalNormals(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "regionalNormals");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "textSummary") {
++                xml.readElementText();
++            } else if (xml.name() == "temperature" && xml.attributes().value("class") == "high") {
++                data.normalHigh = xml.readElementText();
++            } else if (xml.name() == "temperature" && xml.attributes().value("class") == "low") {
++                data.normalLow = xml.readElementText();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseForecast(WeatherData& data, QXmlStreamReader& xml, WeatherData::ForecastInfo *forecast)
++{
++
++    Q_ASSERT(xml.isStartElement() && xml.name() == "forecast");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "forecast") {
++            data.forecasts.append(forecast);
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "period") {
++                forecast->forecastPeriod = xml.readElementText();
++            } else if (xml.name() == "textSummary") {
++                forecast->forecastSummary = xml.readElementText();
++            } else if (xml.name() == "abbreviatedForecast") {
++                parseShortForecast(forecast, xml);
++            } else if (xml.name() == "temperatures") {
++                parseForecastTemperatures(forecast, xml);
++            } else if (xml.name() == "winds") {
++                parseWindForecast(forecast, xml);
++            } else if (xml.name() == "precipitation") {
++                parsePrecipitationForecast(forecast, xml);
++            } else if (xml.name() == "uv") {
++                data.UVRating = xml.attributes().value("category").toString();
++                parseUVIndex(data, xml);
++                // else if (xml.name() == "frost") { FIXME: Wait until winter to see what this looks like.
++                //  parseFrost(xml, forecast);
++            } else {
++                if (xml.name() != "forecast") {
++                    parseUnknownElement(xml);
++                }
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseShortForecast(WeatherData::ForecastInfo *forecast, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "abbreviatedForecast");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "abbreviatedForecast") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "pop") {
++                forecast->popPrecent = xml.readElementText();
++            }
++            if (xml.name() == "textSummary") {
++                forecast->shortForecast = xml.readElementText();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseUVIndex(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_UNUSED(data);
++    Q_ASSERT(xml.isStartElement() && xml.name() == "uv");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "uv") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "index") {
++                data.UVIndex = xml.readElementText();
++            }
++            if (xml.name() == "textSummary") {
++                xml.readElementText();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseForecastTemperatures(WeatherData::ForecastInfo *forecast, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "temperatures");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "temperatures") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "temperature" && xml.attributes().value("class") == "low") {
++                forecast->forecastTempLow = xml.readElementText();
++            } else if (xml.name() == "temperature" && xml.attributes().value("class") == "high") {
++                forecast->forecastTempHigh = xml.readElementText();
++            } else if (xml.name() == "textSummary") {
++                xml.readElementText();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parsePrecipitationForecast(WeatherData::ForecastInfo *forecast, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "precipitation");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "precipitation") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            //kDebug() << "parsePrecipitationForecast() ====> TAG: " << xml.name().toString();
++            if (xml.name() == "textSummary") {
++                forecast->precipForecast = xml.readElementText();
++            } else if (xml.name() == "precipType") {
++                forecast->precipType = xml.readElementText();
++            } else if (xml.name() == "accumulation") {
++                parsePrecipTotals(forecast, xml);
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parsePrecipTotals(WeatherData::ForecastInfo *forecast, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "accumulation");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "accumulation") {
++            break;
++        }
++
++        if (xml.name() == "name") {
++            xml.readElementText();
++        } else if (xml.name() == "amount") {
++            forecast->precipTotalExpected = xml.readElementText();
++        }
++    }
++}
++
++void EnvCanadaIon::parseWindForecast(WeatherData::ForecastInfo *forecast, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "winds");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "winds") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "textSummary") {
++                forecast->windForecast = xml.readElementText();
++            } else {
++                if (xml.name() != "winds") {
++                    parseUnknownElement(xml);
++                }
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseYesterdayWeather(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "yesterdayConditions");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "temperature" && xml.attributes().value("class") == "high") {
++                data.prevHigh = xml.readElementText();
++            } else if (xml.name() == "temperature" && xml.attributes().value("class") == "low") {
++                data.prevLow = xml.readElementText();
++            } else if (xml.name() == "precip") {
++                data.prevPrecipType = xml.attributes().value("units").toString();
++                if (data.prevPrecipType.isEmpty()) {
++                    data.prevPrecipType = "N/A";
++                }
++                data.prevPrecipTotal = xml.readElementText();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseWeatherRecords(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "almanac");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "almanac") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "temperature" && xml.attributes().value("class") == "extremeMax") {
++                data.recordHigh = xml.readElementText().toFloat();
++            } else if (xml.name() == "temperature" && xml.attributes().value("class") == "extremeMin") {
++                data.recordLow = xml.readElementText().toFloat();
++            } else if (xml.name() == "precipitation" && xml.attributes().value("class") == "extremeRainfall") {
++                data.recordRain = xml.readElementText().toFloat();
++            } else if (xml.name() == "precipitation" && xml.attributes().value("class") == "extremeSnowfall") {
++                data.recordSnow = xml.readElementText().toFloat();
++            }
++        }
++    }
++}
++
++void EnvCanadaIon::parseAstronomicals(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "riseSet");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "riseSet") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "disclaimer") {
++                xml.readElementText();
++            } else if (xml.name() == "dateTime") {
++                parseDateTime(data, xml);
++            }
++        }
++    }
++}
++
++// handle when no XML tag is found
++void EnvCanadaIon::parseUnknownElement(QXmlStreamReader& xml)
++{
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            parseUnknownElement(xml);
++        }
++    }
++}
++
++// User toggleable values set from the dataengine <-> Plasma Applet
++void EnvCanadaIon::option(int option, QVariant value)
++{
++    switch (option) {
++    case IonInterface::UNITS:
++        // Set the Units used (Depends on Ion)
++        if (value.toInt() == KLocale::Metric) {
++            d->m_useMetric = true;
++        }
++        if (value.toInt() == KLocale::Imperial) {
++            d->m_useMetric = false;
++        }
++        break;
++    case IonInterface::TIMEFORMAT:
++        if (value.toBool()) {
++            d->m_useUTC = true;
++        }
++        break;
++    case IonInterface::WINDFORMAT:
++        if (value.toBool()) {
++           d->m_windInMeters = true;
++        } else {
++           d->m_windInMeters = false;
++        }
++        break;
++    }
++}
++
++void EnvCanadaIon::updateWeather(const QString& source)
++{
++    QMap<QString, QString> dataFields;
++    QStringList fieldList;
++    QVector<QString> forecastList;
++    int i = 0;
++
++    setData(source, "Country", this->country(source));
++    setData(source, "Place", QString("%1, %2").arg(this->city(source)).arg(this->territory(source)));
++    setData(source, "Region", this->region(source));
++    setData(source, "Airport Code", this->station(source));
++
++    // Real weather - Current conditions
++    setData(source, "Observations At", this->observationTime(source));
++    setData(source, "Current Conditions", this->condition(source));
++    dataFields = this->temperature(source);
++    setData(source, "Temperature", dataFields["temperature"]);
++
++    // Do we have a comfort temperature? if so display it
++    if (dataFields["comfortTemperature"] != "N/A" && !dataFields["comfortTemperature"].isEmpty()) {
++        if (dataFields["comfortTemperature"].toFloat() <= 0 || (dataFields["comfortTemperature"].toFloat() <= 32 && !d->m_useMetric)) {
++            setData(source, "Windchill", QString("%1%2").arg(dataFields["comfortTemperature"]).arg(QChar(176)));
++        } else {
++            setData(source, "Humidex", QString("%1%2").arg(dataFields["comfortTemperature"]).arg(QChar(176)));
++        }
++     }
++
++     setData(source, "Dewpoint", this->dewpoint(source));
++     if (this->dewpoint(source) != "N/A") {
++         setData(source, "Dewpoint Unit", dataFields["temperatureUnit"]);
++     }
++
++     dataFields = this->pressure(source);
++     setData(source, "Pressure", dataFields["pressure"]);
++  
++     if (dataFields["pressure"] != "N/A") {
++         setData(source, "Pressure Tendency", dataFields["pressureTendency"]);
++         setData(source, "Pressure Unit", dataFields["pressureUnit"]);
++     }
++
++     dataFields = this->visibility(source);
++     setData(source, "Visibility", dataFields["visibility"]);
++     if (dataFields["visibility"] != "N/A") {
++         setData(source, "Visibility Unit", dataFields["visibilityUnit"]);
++     }
++
++     setData(source, "Humidity", this->humidity(source));
++
++     dataFields = this->wind(source);
++     setData(source, "Wind Speed", dataFields["windSpeed"]);
++     if (dataFields["windSpeed"] != "N/A") {
++         setData(source, "Wind Speed Unit", dataFields["windUnit"]);
++     }
++     setData(source, "Wind Gust", dataFields["windGust"]);
++     if (dataFields["windGust"] != "N/A") {
++         setData(source, "Wind Gust Unit", dataFields["windGustUnit"]);
++     }
++     setData(source, "Wind Direction", dataFields["windDirection"]);
++
++     dataFields = this->regionalTemperatures(source);
++     setData(source, "Normal High", dataFields["normalHigh"]);
++     setData(source, "Normal Low", dataFields["normalLow"]);
++     if (dataFields["normalHigh"] != "N/A" && dataFields["normalLow"] != "N/A") {
++         setData(source, "Regional Temperature Unit", dataFields["regionalTempUnit"]);
++     }
++
++     // Check if UV index is available for the location
++     dataFields = this->uvIndex(source);
++     setData(source, "UV Index", dataFields["uvIndex"]);
++     if (dataFields["uvIndex"] != "N/A") {
++         setData(source, "UV Rating", dataFields["uvRating"]);
++     }
++
++     dataFields = this->warnings(source);
++     // Check if we have warnings or watches
++     if (!dataFields["watch"].isEmpty()) {
++         fieldList = dataFields["watch"].split('|');
++         setData(source, "Watch Priority", fieldList[0]);
++         setData(source, "Watch Description", fieldList[1]);
++         setData(source, "Watch Info", fieldList[2]);
++         setData(source, "Watch Timestamp", fieldList[3]);
++     }
++     if (!dataFields["warning"].isEmpty()) {
++         fieldList = dataFields["warning"].split('|');
++         setData(source, "Warning Priority", fieldList[0]);
++         setData(source, "Warning Description", fieldList[1]);
++         setData(source, "Warning Info", fieldList[2]);
++         setData(source, "Warning Timestamp", fieldList[3]);
++     }
++
++     forecastList = this->forecasts(source);
++     foreach(QString forecastItem, forecastList) {
++         fieldList = forecastItem.split('|');
++
++         if (d->m_useMetric) {
++             setData(source, QString("Short Forecast Day %1").arg(i), QString("%1|%2|%3|%4|%5") \
++                     .arg(fieldList[0]).arg(fieldList[1]).arg(fieldList[3]).arg(fieldList[4]).arg(fieldList[5]));
++
++             setData(source, QString("Long Forecast Day %1").arg(i), QString("%1|%2|%3|%4|%5|%6|%7|%8") \
++                     .arg(fieldList[0]).arg(fieldList[2]).arg(fieldList[3]).arg(fieldList[4]).arg(fieldList[6]) \
++                     .arg(fieldList[7]).arg(fieldList[8]).arg(fieldList[9]));
++          } else {
++              setData(source, QString("Short Forecast Day %1").arg(i), QString("%1|%2|%3|%4|%5") \
++                      .arg(fieldList[0]).arg(fieldList[1]).arg(fieldList[3] == "N/A" ? "N/A" : \
++                      QString::number(d->m_formula.celsiusToF(fieldList[3].toFloat()), 'd', 0)) \
++                      .arg(fieldList[4] == "N/A" ? "N/A" : QString::number(d->m_formula.celsiusToF(fieldList[4].toFloat()),'d',0)).arg(fieldList[5]));
++
++               setData(source, QString("Long Forecast Day %1").arg(i), QString("%1|%2|%3|%4|%5|%6|%7|%8") \
++                       .arg(fieldList[0]).arg(fieldList[2]).arg(fieldList[3] == "N/A" ? "N/A" : \
++                       QString::number(d->m_formula.celsiusToF(fieldList[3].toFloat()),'d', 0)) \
++                       .arg(fieldList[4] == "N/A" ? "N/A" : QString::number(d->m_formula.celsiusToF(fieldList[4].toFloat()),'d',0)).arg(fieldList[6]).arg(fieldList[7]) \
++                       .arg(fieldList[8]).arg(fieldList[9]));
++            }
++
++            i++;
++        }
++
++     dataFields = this->yesterdayWeather(source);
++     setData(source, "Yesterday High", dataFields["prevHigh"]);
++     setData(source, "Yesterday Low", dataFields["prevLow"]);
++   
++     if (dataFields["prevHigh"] != "N/A" && dataFields["prevLow"] != "N/A") {
++         setData(source ,"Yesterday Temperature Unit", dataFields["yesterdayTempUnit"]);
++     }
++
++     setData(source, "Yesterday Precip Total", dataFields["prevPrecip"]);
++     setData(source, "Yesterday Precip Unit", dataFields["prevPrecipUnit"]);
++
++     dataFields = this->sunriseSet(source);
++     setData(source, "Sunrise At", dataFields["sunrise"]);
++     setData(source, "Sunset At", dataFields["sunset"]);
++
++     dataFields = this->moonriseSet(source);
++     setData(source, "Moonrise At", dataFields["moonrise"]);
++     setData(source, "Moonset At", dataFields["moonset"]);
++
++     dataFields = this->weatherRecords(source);
++     setData(source, "Record High Temperature", dataFields["recordHigh"]);
++     setData(source, "Record Low Temperature", dataFields["recordLow"]);
++     if (dataFields["recordHigh"] != "N/A" && dataFields["recordLow"] != "N/A") {
++         setData(source, "Record Temperature Unit", dataFields["recordTempUnit"]);
++     }
++
++     setData(source, "Record Rainfall", dataFields["recordRain"]);
++     setData(source, "Record Rainfall Unit", dataFields["recordRainUnit"]);
++     setData(source, "Record Snowfall", dataFields["recordSnow"]);
++     setData(source, "Record Snowfall Unit", dataFields["recordSnowUnit"]);
++
++     setData(source, "Credit", "Environment Canada");
++}
++
++QString EnvCanadaIon::country(const QString& source)
++{
++    return d->m_weatherData[source].countryName;
++}
++QString EnvCanadaIon::territory(const QString& source)
++{
++    return d->m_weatherData[source].shortTerritoryName;
++}
++QString EnvCanadaIon::city(const QString& source)
++{
++    return d->m_weatherData[source].cityName;
++}
++QString EnvCanadaIon::region(const QString& source)
++{
++    return d->m_weatherData[source].regionName;
++}
++QString EnvCanadaIon::station(const QString& source)
++{
++    if (!d->m_weatherData[source].stationID.isEmpty()) {
++         return d->m_weatherData[source].stationID.toUpper();
++    }
++    
++    return QString("N/A");
++}
++
++QString EnvCanadaIon::observationTime(const QString& source)
++{
++    return d->m_weatherData[source].obsTimestamp;
++}
++QString EnvCanadaIon::condition(const QString& source)
++{
++    if (d->m_weatherData[source].condition.isEmpty()) {
++        d->m_weatherData[source].condition = "N/A";
++    }
++    return d->m_weatherData[source].condition;
++}
++
++QString EnvCanadaIon::dewpoint(const QString& source)
++{
++    if (d->m_useMetric) {
++        if (!d->m_weatherData[source].dewpoint.isEmpty()) {
++            return QString("%1").arg(QString::number(d->m_weatherData[source].dewpoint.toFloat(), 'f', 1));
++        }
++    }
++ 
++    if (!d->m_weatherData[source].dewpoint.isEmpty()) {
++         return QString("%1").arg(QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].dewpoint.toFloat()), 'f', 1));
++    }
++
++    return QString("N/A");
++}
++
++QString EnvCanadaIon::humidity(const QString& source)
++{
++    if (!d->m_weatherData[source].humidity.isEmpty()) {
++        return QString("%1%").arg(d->m_weatherData[source].humidity);
++    }
++    return QString("N/A");
++}
++
++QMap<QString,QString> EnvCanadaIon::visibility(const QString& source)
++{
++    QMap<QString, QString> visibilityInfo;
++
++    if (!d->m_weatherData[source].visibility == 0) {
++        if (d->m_useMetric) {
++            visibilityInfo.insert("visibility", QString("%1").arg(QString::number(d->m_weatherData[source].visibility, 'f', 1)));
++            visibilityInfo.insert("visibilityUnit", "km");
++        } else {
++            visibilityInfo.insert("visibility", QString("%1").arg(QString::number(d->m_formula.kilometersToMI(d->m_weatherData[source].visibility), 'f', 2)));
++            visibilityInfo.insert("visibilityUnit", "mi");
++        }
++    } else {
++      visibilityInfo.insert("visibility", "N/A");
++    }
++    return visibilityInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::temperature(const QString& source)
++{
++    QMap<QString, QString> temperatureInfo;
++    if (d->m_useMetric) {
++        if (!d->m_weatherData[source].temperature.isEmpty()) {
++            temperatureInfo.insert("temperature", QString("%1").arg(QString::number(d->m_weatherData[source].temperature.toFloat(), 'f', 1)));
++        }
++    }
++    else {
++        if (!d->m_weatherData[source].temperature.isEmpty()) {
++            temperatureInfo.insert("temperature", QString("%1").arg(QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].temperature.toFloat()), 'f', 1)));
++        } else {
++            temperatureInfo.insert("temperature", "N/A");
++        }
++    }  
++    temperatureInfo.insert("comfortTemperature", "N/A");
++
++    if (d->m_weatherData[source].comforttemp != "N/A") {
++        if (d->m_useMetric) {
++            temperatureInfo.insert("comfortTemperature", d->m_weatherData[source].comforttemp);
++        }
++        else {
++            if (!d->m_weatherData[source].comforttemp.isEmpty()) {
++                temperatureInfo.insert("comfortTemperature", QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].comforttemp.toFloat()), 'f', 1));
++            }
++        }
++    }
++    return temperatureInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::warnings(const QString& source)
++{
++    QMap<QString, QString> warningData;
++    QString warnType;
++    for (int i = 0; i < d->m_weatherData[source].warnings.size(); ++i) {
++        if (d->m_weatherData[source].warnings[i]->type == "watch") {
++            warnType = "watch";
++        } else {
++            warnType = "warning";
++        }
++        warningData[warnType] = QString("%1|%2|%3|%4").arg(d->m_weatherData[source].warnings[i]->priority) \
++                                .arg(d->m_weatherData[source].warnings[i]->description) \
++                                .arg(d->m_weatherData[source].warnings[i]->url) \
++                                .arg(d->m_weatherData[source].warnings[i]->timestamp);
++    }
++    return warningData;
++}
++
++QVector<QString> EnvCanadaIon::forecasts(const QString& source)
++{
++    QVector<QString> forecastData;
++
++    // Do some checks for empty data
++    for (int i = 0; i < d->m_weatherData[source].forecasts.size(); ++i) {
++        if (d->m_weatherData[source].forecasts[i]->forecastPeriod.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->forecastPeriod = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->shortForecast.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->shortForecast = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->forecastSummary.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->forecastSummary = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->forecastTempHigh.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->forecastTempHigh = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->forecastTempLow.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->forecastTempLow = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->popPrecent.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->popPrecent = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->windForecast.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->windForecast = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->precipForecast.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->precipForecast = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->precipType.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->precipType = "N/A";
++        }
++        if (d->m_weatherData[source].forecasts[i]->precipTotalExpected.isEmpty()) {
++            d->m_weatherData[source].forecasts[i]->precipTotalExpected = "N/A";
++        }
++    }
++
++    for (int i = 0; i < d->m_weatherData[source].forecasts.size(); ++i) {
++        forecastData.append(QString("%1|%2|%3|%4|%5|%6|%7|%8|%9|%10") \
++                            .arg(d->m_weatherData[source].forecasts[i]->forecastPeriod) \
++                            .arg(d->m_weatherData[source].forecasts[i]->shortForecast) \
++                            .arg(d->m_weatherData[source].forecasts[i]->forecastSummary) \
++                            .arg(d->m_weatherData[source].forecasts[i]->forecastTempHigh) \
++                            .arg(d->m_weatherData[source].forecasts[i]->forecastTempLow) \
++                            .arg(d->m_weatherData[source].forecasts[i]->popPrecent) \
++                            .arg(d->m_weatherData[source].forecasts[i]->windForecast) \
++                            .arg(d->m_weatherData[source].forecasts[i]->precipForecast) \
++                            .arg(d->m_weatherData[source].forecasts[i]->precipType) \
++                            .arg(d->m_weatherData[source].forecasts[i]->precipTotalExpected));
++    }
++    return forecastData;
++}
++
++QMap<QString, QString> EnvCanadaIon::pressure(const QString& source)
++{
++    QMap<QString, QString> pressureInfo;
++
++    if (d->m_weatherData[source].pressure == 0) {
++        pressureInfo.insert("pressure", "N/A");
++        return pressureInfo;
++    } else {
++        if (d->m_useMetric) {
++            pressureInfo.insert("pressure", QString("%1").arg(QString::number(d->m_weatherData[source].pressure, 'f', 1)));
++            pressureInfo.insert("pressureUnit", "kPa");
++        } else {
++            pressureInfo.insert("pressure", QString("%1").arg(QString::number(d->m_formula.kilopascalsToInches(d->m_weatherData[source].pressure), 'f', 2)));
++            pressureInfo.insert("pressureUnit", "in");
++        }
++        pressureInfo.insert("pressureTendency", d->m_weatherData[source].pressureTendency);
++    }
++    return pressureInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::wind(const QString& source)
++{
++    QMap<QString, QString> windInfo;
++
++    // May not have any winds
++    if (d->m_weatherData[source].windSpeed.isEmpty()) {
++        windInfo.insert("windSpeed", "N/A");
++        windInfo.insert("windUnit", "N/A");
++    } else if (d->m_weatherData[source].windSpeed.toInt() == 0) {
++        windInfo.insert("windSpeed", "Calm");
++        windInfo.insert("windUnit", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            if (d->m_windInMeters) {
++                windInfo.insert("windSpeed", QString("%1").arg(QString::number(d->m_formula.kilometersToMS(d->m_weatherData[source].windSpeed.toInt()), 'f', 2)));
++                windInfo.insert("windUnit", "m/s");
++            } else {
++                windInfo.insert("windSpeed", QString("%1").arg(QString::number(d->m_weatherData[source].windSpeed.toInt())));
++                windInfo.insert("windUnit", "km/h");
++            }
++        } else {
++            windInfo.insert("windSpeed", QString("%1").arg(QString::number(d->m_formula.kilometersToMI(d->m_weatherData[source].windSpeed.toInt()), 'f', 1)));
++            windInfo.insert("windUnit", "mph");
++        }
++    }
++
++    // May not always have gusty winds
++    if (d->m_weatherData[source].windGust.isEmpty()) {
++        windInfo.insert("windGust", "N/A");
++        windInfo.insert("windGustUnit", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            if (d->m_windInMeters) { 
++                windInfo.insert("windGust", QString("%1").arg(QString::number(d->m_formula.kilometersToMS(d->m_weatherData[source].windGust.toInt()), 'f', 2)));
++                windInfo.insert("windGustUnit", "m/s");
++            } else { 
++                windInfo.insert("windGust", QString("%1").arg(QString::number(d->m_weatherData[source].windGust.toInt())));
++                windInfo.insert("windGustUnit", "km/h");
++            }
++        } else {
++            windInfo.insert("windGust", QString("%1").arg(QString::number(d->m_formula.kilometersToMI(d->m_weatherData[source].windGust.toInt()), 'f', 1)));
++            windInfo.insert("windGustUnit", "mph");
++        }
++    }
++
++    if (d->m_weatherData[source].windDirection.isEmpty() && d->m_weatherData[source].windSpeed.isEmpty()) {
++        windInfo.insert("windDirection", "N/A");
++    } else if (d->m_weatherData[source].windSpeed.toInt() == 0) {
++        windInfo.insert("windDirection", "VR");
++    } else {
++        windInfo.insert("windDirection", d->m_weatherData[source].windDirection);
++    }
++    return windInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::uvIndex(const QString& source)
++{
++    QMap<QString, QString> uvInfo;
++
++    if (d->m_weatherData[source].UVRating.isEmpty()) {
++        uvInfo.insert("uvRating", "N/A");
++    } else {
++        uvInfo.insert("uvRating", d->m_weatherData[source].UVRating);
++    }
++
++    if (d->m_weatherData[source].UVIndex.isEmpty()) {
++        uvInfo.insert("uvIndex", "N/A");
++    } else {
++        uvInfo.insert("uvIndex", d->m_weatherData[source].UVIndex);
++    }
++
++    return uvInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::regionalTemperatures(const QString& source)
++{
++    QMap<QString, QString> regionalTempInfo;
++
++    if (d->m_weatherData[source].normalHigh.isEmpty()) {
++        regionalTempInfo.insert("normalHigh", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            regionalTempInfo.insert("normalHigh", QString("%1").arg(d->m_weatherData[source].normalHigh));
++        } else {
++            regionalTempInfo.insert("normalHigh", QString("%1").arg(d->m_formula.celsiusToF(d->m_weatherData[source].normalHigh.toFloat())));
++        }
++    }
++
++    if (d->m_weatherData[source].normalLow.isEmpty()) {
++        regionalTempInfo.insert("normalLow", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            regionalTempInfo.insert("normalLow", QString("%1").arg(d->m_weatherData[source].normalLow));
++        } else {
++            regionalTempInfo.insert("normalLow", QString("%1").arg(d->m_formula.celsiusToF(d->m_weatherData[source].normalLow.toFloat())));
++        }
++    }
++
++    if (d->m_useMetric) {
++        regionalTempInfo.insert("regionalTempUnit", QString("%1C").arg(QChar(176)));
++    } else {
++        regionalTempInfo.insert("regionalTempUnit", QString("%1F").arg(QChar(176)));
++    }
++
++    return regionalTempInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::yesterdayWeather(const QString& source)
++{
++    QMap<QString, QString> yesterdayInfo;
++
++    if (d->m_weatherData[source].prevHigh.isEmpty()) {
++        yesterdayInfo.insert("prevHigh", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            yesterdayInfo.insert("prevHigh", QString("%1").arg(d->m_weatherData[source].prevHigh)); 
++        } else {
++            yesterdayInfo.insert("prevHigh", QString("%1").arg(QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].prevHigh.toFloat()))));
++        }
++    }
++
++    if (d->m_weatherData[source].prevLow.isEmpty()) {
++        yesterdayInfo.insert("prevLow", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            yesterdayInfo.insert("prevLow", QString("%1").arg(d->m_weatherData[source].prevLow));
++        } else {
++            yesterdayInfo.insert("prevLow", QString("%1").arg(QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].prevLow.toFloat()), 'f', 1)));
++        }
++    }
++
++    if (d->m_useMetric) {
++        yesterdayInfo.insert("yesterdayTempUnit", QString("%1C").arg(QChar(176)));
++    } else {
++        yesterdayInfo.insert("yesterdayTempUnit", QString("%1F").arg(QChar(176)));
++    }
++
++    if (d->m_weatherData[source].prevPrecipTotal == "Trace") {
++            yesterdayInfo.insert("prevPrecip", "Trace");
++            return yesterdayInfo;
++    }
++
++    if (d->m_weatherData[source].prevPrecipTotal.isEmpty()) {
++        yesterdayInfo.insert("prevPrecip", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            yesterdayInfo.insert("prevPrecipTotal", QString("%1").arg(d->m_weatherData[source].prevPrecipTotal));
++            yesterdayInfo.insert("prevPrecipUnit", d->m_weatherData[source].prevPrecipType);
++        } else {
++            yesterdayInfo.insert("prevPrecipTotal", QString("%1").arg(QString::number(d->m_formula.millimetersToIN(d->m_weatherData[source].prevPrecipTotal.toFloat()), 'f', 1)));
++            yesterdayInfo.insert("prevPrecipUnit", QString("in"));
++        }
++    }
++
++    return yesterdayInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::sunriseSet(const QString& source)
++{
++    QMap<QString, QString> sunInfo;
++  
++    if (d->m_weatherData[source].sunriseTimestamp.isEmpty()) {
++        sunInfo.insert("sunrise", "N/A");
++    } else {
++        sunInfo.insert("sunrise", d->m_weatherData[source].sunriseTimestamp);
++    }
++ 
++    if (d->m_weatherData[source].sunsetTimestamp.isEmpty()) {
++        sunInfo.insert("sunset", "N/A");
++    } else {
++        sunInfo.insert("sunset", d->m_weatherData[source].sunsetTimestamp);
++    }
++
++    return sunInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::moonriseSet(const QString& source)
++{
++    QMap<QString, QString> moonInfo;
++ 
++    if (d->m_weatherData[source].moonriseTimestamp.isEmpty()) {
++        moonInfo.insert("moonrise", "N/A");
++    } else {
++        moonInfo.insert("moonrise", d->m_weatherData[source].moonriseTimestamp);
++    }
++   
++    if (d->m_weatherData[source].moonsetTimestamp.isEmpty()) {
++        moonInfo.insert("moonset", "N/A");
++    } else {
++        moonInfo.insert("moonset", d->m_weatherData[source].moonsetTimestamp);
++    }
++   
++    return moonInfo;
++}
++
++QMap<QString, QString> EnvCanadaIon::weatherRecords(const QString& source)
++{
++    QMap<QString, QString> recordInfo;
++
++    if (d->m_weatherData[source].recordHigh == 0) {
++        recordInfo.insert("recordHigh", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            recordInfo.insert("recordHigh", QString("%1").arg(d->m_weatherData[source].recordHigh));
++        } else {
++            recordInfo.insert("recordHigh", QString("%1").arg(QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].recordHigh), 'f', 1)));
++        }
++    }
++
++    if (d->m_weatherData[source].recordLow == 0) {
++        recordInfo.insert("recordLow", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            recordInfo.insert("recordLow", QString("%1").arg(d->m_weatherData[source].recordLow));
++        } else {
++            recordInfo.insert("recordLow", QString("%1").arg(QString::number(d->m_formula.celsiusToF(d->m_weatherData[source].recordLow), 'f', 1)));
++        }
++       
++    }
++
++    if (d->m_useMetric) {
++        recordInfo.insert("recordTempUnit", QString("%1C").arg(QChar(176)));
++    } else {
++        recordInfo.insert("recordTempUnit", QString("%1F").arg(QChar(176)));
++    }
++
++    if (d->m_weatherData[source].recordRain == 0) {
++        recordInfo.insert("recordRain", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            recordInfo.insert("recordRain", QString("%1").arg(d->m_weatherData[source].recordRain));
++            recordInfo.insert("recordRainUnit", QString("mm"));
++        } else {
++            recordInfo.insert("recordRain", QString("%1").arg(QString::number(d->m_formula.millimetersToIN(d->m_weatherData[source].recordRain), 'f', 1)));
++            recordInfo.insert("recordRainUnit", QString("in"));
++        }
++    }
++
++    if (d->m_weatherData[source].recordSnow == 0) {
++        recordInfo.insert("recordSnow", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            recordInfo.insert("recordSnow", QString("%1").arg(d->m_weatherData[source].recordSnow));
++            recordInfo.insert("recordSnowUnit", QString("cm"));
++        } else {
++            recordInfo.insert("recordSnow", QString("%1").arg(QString::number(d->m_formula.centimetersToIN(d->m_weatherData[source].recordSnow), 'f', 1)));
++            recordInfo.insert("recordSnowUnit", QString("in"));
++        }
++    }
++
++    return recordInfo;
++}
++ 
++#include "ion_envcan.moc"
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion_bbcukmet.cpp
+@@ -0,0 +1,399 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Ion for BBC's Weather from the UK Met Office */
++
++#include "ion_bbcukmet.h"
++
++class UKMETIon::Private : public QObject
++{
++public:
++    Private() {}
++    ~Private() {}
++
++private:
++    struct XMLMapInfo {
++        QString place;
++        QString XMLurl;
++        bool ukPlace;
++    };
++
++public:
++    // Key dicts
++    QHash<QString, UKMETIon::Private::XMLMapInfo> m_place;
++    QVector<QString> m_locations;
++public:
++    // Weather information
++    QHash<QString, WeatherData> m_weatherData;
++
++    // Store KIO jobs - Search list
++    QMap<KJob *, QXmlStreamReader*> m_jobXml;
++    QMap<KJob *, QString> m_jobList;
++
++    QMap<KJob *, QXmlStreamReader*> m_forecastJobXml;
++    QMap<KJob *, QString> m_forecastJobList;
++
++    KUrl *m_url;
++    KIO::TransferJob *m_job;
++
++    bool m_useUTC;  // Ion option: Timezone may be local time or UTC time
++    bool m_useMetric; // Ion option: Units may be Metric or Imperial
++    bool m_windInMeters; // Ion option: Display wind format in meters per second only
++
++    WeatherFormula m_formula;
++};
++
++
++// ctor, dtor
++UKMETIon::UKMETIon(QObject *parent, const QVariantList &args)
++        : IonInterface(parent), d(new Private())
++{
++    Q_UNUSED(args)
++}
++
++UKMETIon::~UKMETIon()
++{
++    // Destroy dptr
++    delete d;
++}
++
++// Get the master list of locations to be parsed
++void UKMETIon::init()
++{
++return;
++}
++
++// Get a specific Ion's data
++bool UKMETIon::updateIonSource(const QString& source)
++{
++       Q_UNUSED(source)
++       //if (!d->m_locations.contains(source)) {
++       //    searchPlace(source);
++       //} else {
++       //    cachedLocation(source);
++      // }
++return true;
++}
++
++// Parses city list and gets the correct city based on ID number
++void UKMETIon::searchPlace(const QString& key)
++{
++    KUrl url;
++    url = "http://www.bbc.co.uk/cgi-perl/weather/search/new_search.pl?x=0&y=0&=Submit&search_query=" + key + "&tmpl=wap";
++    kDebug() << "URL: " << url;
++
++    d->m_job = KIO::get(url.url(), KIO::Reload, KIO::HideProgressInfo);
++    d->m_jobXml.insert(d->m_job, new QXmlStreamReader);
++    d->m_jobList.insert(d->m_job, key);
++ 
++    if (d->m_job) {
++        connect(d->m_job, SIGNAL(data(KIO::Job *, const QByteArray &)), this,
++                SLOT(slotDataArrived(KIO::Job *, const QByteArray &)));
++        connect(d->m_job, SIGNAL(result(KJob *)), this, SLOT(slotJobFinished(KJob *)));
++    }
++}
++
++bool UKMETIon::readSearchXMLData(const QString& key, QXmlStreamReader& xml)
++{
++    while (!xml.atEnd()) {
++        xml.readNext();
++ 
++        if (xml.isEndElement()) {
++            break;
++        }
++ 
++        if (xml.isStartElement()) {
++            kDebug() << "XML TAG: " << xml.name().toString();
++            if (xml.name() == "wml") {
++                parseSearchLocations(key, xml);
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++
++return !xml.error();
++}
++
++void UKMETIon::cachedLocation(const QString& key)
++{
++    d->m_job = 0;
++    kDebug() << "cachedLocation: d->m_place[key].place = " << d->m_place[key].place;
++    if (d->m_place.contains(key)) {
++        d->m_job = KIO::get(d->m_place[key].XMLurl, KIO::Reload, KIO::HideProgressInfo);
++        kDebug() << "URL: " << d->m_place[key].XMLurl;
++
++        if (d->m_job) {
++             d->m_forecastJobXml.insert(d->m_job, new QXmlStreamReader);
++             d->m_forecastJobList.insert(d->m_job, key);
++             kDebug() << "CACHE FORECAST FOR " << d->m_forecastJobList[d->m_job];
++             connect(d->m_job, SIGNAL(data(KIO::Job *, const QByteArray &)), this,
++                     SLOT(forecast_slotDataArrived(KIO::Job *, const QByteArray &)));
++             connect(d->m_job, SIGNAL(result(KJob *)), this, SLOT(forecast_slotJobFinished(KJob *)));
++        }
++    }
++}
++ 
++void UKMETIon::parseSearchLocations(const QString& source, QXmlStreamReader& xml)
++{ 
++    Q_UNUSED(source) 
++    int flag = 0;
++    QString url;
++    QString place;
++    QStringList tokens;
++    Q_ASSERT(xml.isStartElement() && xml.name() == "wml");
++   
++    while (!xml.atEnd()) {
++        xml.readNext();
++  
++        if (xml.isEndElement() && xml.name() == "wml") {
++           break;
++        }
++     
++        if (xml.isStartElement()) {
++            if (xml.name() == "a" && !xml.attributes().value("href").isEmpty()) {
++                if (xml.attributes().value("href").toString().contains("5day.wml")) {
++
++                    // Split URL to determine station ID number
++                    tokens = xml.attributes().value("href").toString().split("=");
++                    if (xml.attributes().value("href").toString().contains("world")) {
++                        url = "http://feeds.bbc.co.uk/weather/feeds/obs/world/" + tokens[1] + ".xml";
++                        flag = 0;
++                    } else {
++                        url = "http://feeds.bbc.co.uk/weather/feeds/obs/id/" + tokens[1] + ".xml";
++                        flag = 1;
++                    }
++                    place = xml.readElementText();
++  
++                    if (!d->m_locations.contains(place)) {
++                        if (flag) {  // This is a UK specific location
++                            d->m_place[place].XMLurl = url;
++                            d->m_place[place].place = place;
++                            d->m_place[place].ukPlace = true;
++                        } else {
++                            d->m_place[place].XMLurl = url;
++                            d->m_place[place].place = place;
++                            d->m_place[place].ukPlace = false;
++                        }
++                        d->m_locations.append(place);
++                    }
++                }
++            }
++        } 
++    }
++    // All Locations
++    if (d->m_place[source].ukPlace) {
++        //kDebug() << "UKMET: LIST OF UK PLACE: " << source;
++        setData("FoundPlaces", source, QString("%1|%2").arg(source).arg("Local"));
++        //kDebug() << "UKMET: URL OF UK PLACE: " << d->m_place[source].XMLurl;
++    }
++
++    if (!d->m_place[source].ukPlace) {
++        //kDebug() << "UKMET: LIST OF WORLD PLACE: " << source;
++        setData("FoundPlaces", source, QString("%1|%2").arg(source).arg("World"));
++        //kDebug() << "UKMET: URL OF WORLD PLACE: " << d->m_place[source].XMLurl;
++    }
++}
++
++// handle when no XML tag is found
++void UKMETIon::parseUnknownElement(QXmlStreamReader& xml)
++{
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            parseUnknownElement(xml);
++        }
++    }
++}
++    
++void UKMETIon::slotDataArrived(KIO::Job *job, const QByteArray &data)
++{
++    if (data.isEmpty() || !d->m_jobXml.contains(job)) {
++        return;
++    }
++
++    // Send to xml.
++    d->m_jobXml[job]->addData(data.data());
++}
++
++void UKMETIon::slotJobFinished(KJob *job)
++{
++    readSearchXMLData(d->m_jobList[job], *d->m_jobXml[job]);
++    d->m_jobList.remove(job);
++    delete d->m_jobXml[job];
++    d->m_jobXml.remove(job);
++}
++
++void UKMETIon::forecast_slotDataArrived(KIO::Job *job, const QByteArray &data)
++{
++    kDebug() << "UKMET: RECEIVING FORECAST INFORMATION\n";
++    if (data.isEmpty() || !d->m_forecastJobXml.contains(job)) {
++        return;
++    }
++  
++    // Send to xml.
++    d->m_forecastJobXml[job]->addData(data.data());
++}
++
++void UKMETIon::forecast_slotJobFinished(KJob *job)
++{
++    kDebug() << "UKMET: FORECAST INFO FOR " << d->m_forecastJobList[job] << " FINISHED\n";
++    readObservationXMLData(d->m_forecastJobList[job], *d->m_forecastJobXml[job]);
++    d->m_forecastJobList.remove(job);
++    delete d->m_forecastJobXml[job];
++    d->m_forecastJobXml.remove(job);
++}
++
++void UKMETIon::parsePlaceObservation(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "rss");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "rss") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "channel") {
++                parseWeatherChannel(data, xml);
++            }
++        }
++    }
++}
++
++void UKMETIon::parseWeatherChannel(WeatherData& data, QXmlStreamReader& xml)
++{
++    Q_ASSERT(xml.isStartElement() && xml.name() == "channel");
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "channel") {
++            break;
++        }
++  
++        if (xml.isStartElement()) {
++            if (xml.name() == "title") {
++                kDebug() << "PLACE NAME: " << xml.readElementText();
++            } else if (xml.name() == "item") {
++                parseWeatherObservation(data, xml);
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++}
++
++void UKMETIon::parseWeatherObservation(WeatherData& data, QXmlStreamReader& xml)
++{   
++    Q_UNUSED(data)
++    Q_ASSERT(xml.isStartElement() && xml.name() == "item");
++ 
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement() && xml.name() == "item") {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "title") {
++                kDebug() << "CONDITIONS: " << xml.readElementText();
++            } else if (xml.name() == "description") {
++                kDebug() << "OBSERVATIONS: " << xml.readElementText();
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++}
++
++bool UKMETIon::readObservationXMLData(QString& key, QXmlStreamReader& xml)
++{
++    WeatherData data;
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            kDebug() << "XML TAG: " << xml.name().toString();
++            if (xml.name() == "rss") {
++                parsePlaceObservation(data, xml);
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++
++    d->m_weatherData[key] = data;
++    return !xml.error();
++}
++
++// User toggleable values set from the dataengine <-> Plasma Applet
++void UKMETIon::option(int option, QVariant value)
++{
++    switch (option) {
++    case IonInterface::UNITS:
++        // Set the Units used (Depends on Ion)
++        if (value.toInt() == KLocale::Metric) {
++            d->m_useMetric = true;
++        }
++        if (value.toInt() == KLocale::Imperial) {
++            d->m_useMetric = false;
++        }
++        break;
++    case IonInterface::TIMEFORMAT:
++        if (value.toBool()) {
++            d->m_useUTC = true;
++        }
++        break;
++    case IonInterface::WINDFORMAT:
++        if (value.toBool()) {
++            d->m_windInMeters = true;
++        }
++        break;
++    }
++}
++
++bool UKMETIon::validLocation(QString keyName)
++{
++    if (d->m_locations.contains(keyName)) {
++        return true;
++    }
++    return false;
++}
++
++void UKMETIon::updateWeather(const QString& source)
++{
++    Q_UNUSED(source)
++    return;
++}
++
++#include "ion_bbcukmet.moc"
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion_noaa.cpp
+@@ -0,0 +1,594 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Ion for NOAA's National Weather Service XML data */
++
++#include "ion_noaa.h"
++
++class NOAAIon::Private : public QObject
++{
++public:
++    Private() {}
++    ~Private() {}
++
++private:
++    struct XMLMapInfo {
++        QString stateName;
++        QString stationName;
++        QString XMLurl;
++    };
++
++public:
++    // Key dicts
++    QHash<QString, NOAAIon::Private::XMLMapInfo> m_place;
++    QHash<QString, QString> m_locations;
++    QString m_state;
++    QString m_station_name;
++    QString m_xmlurl;
++
++    // Weather information
++    QHash<QString, WeatherData> m_weatherData;
++
++    // Store KIO jobs
++    QMap<KJob *, QXmlStreamReader*> m_jobXml;
++    QMap<KJob *, QString> m_jobList;
++    QXmlStreamReader m_xmlSetup;
++    KUrl *m_url;
++    KIO::TransferJob *m_job;
++
++    bool m_useUTC;  // Ion option: Timezone may be local time or UTC time
++    bool m_useMetric; // Ion option: Units may be Metric or Imperial
++    bool m_windInMeters; // Ion option: Display wind format in meters per second only
++
++    WeatherFormula m_formula;
++};
++
++
++// ctor, dtor
++NOAAIon::NOAAIon(QObject *parent, const QVariantList &args)
++        : IonInterface(parent), d(new Private())
++{
++    Q_UNUSED(args)
++}
++
++NOAAIon::~NOAAIon()
++{
++    // Destroy dptr
++    delete d;
++}
++
++// Get the master list of locations to be parsed
++void NOAAIon::init()
++{
++    // Get the real city XML URL so we can parse this
++    getXMLSetup();
++}
++
++bool NOAAIon::validate(const QString& source) const
++{
++    QHash<QString, QString>::const_iterator it = d->m_locations.find(source);
++    if (it != d->m_locations.end()) {
++        return true;
++    }
++    return false;
++}
++
++bool NOAAIon::updateIonSource(const QString& source)
++{
++    getXMLData(source);
++    return true;
++}
++
++// Parses city list and gets the correct city based on ID number
++void NOAAIon::getXMLSetup()
++{
++    d->m_url = new KUrl("http://www.weather.gov/data/current_obs/index.xml");
++
++    KIO::TransferJob *job = KIO::get(d->m_url->url(), KIO::NoReload, KIO::HideProgressInfo);
++
++    if (job) {
++        connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)), this,
++                SLOT(setup_slotDataArrived(KIO::Job *, const QByteArray &)));
++        connect(job, SIGNAL(result(KJob *)), this, SLOT(setup_slotJobFinished(KJob *)));
++    }
++}
++
++// Gets specific city XML data
++void NOAAIon::getXMLData(const QString& source)
++{
++    KUrl url;
++    url = d->m_place[source].XMLurl;
++
++    kDebug() << "URL Location: " << url.url();
++
++    d->m_job = KIO::get(url.url(), KIO::Reload, KIO::HideProgressInfo);
++    d->m_jobXml.insert(d->m_job, new QXmlStreamReader);
++    d->m_jobList.insert(d->m_job, source);
++
++    if (d->m_job) {
++        connect(d->m_job, SIGNAL(data(KIO::Job *, const QByteArray &)), this,
++                SLOT(slotDataArrived(KIO::Job *, const QByteArray &)));
++        connect(d->m_job, SIGNAL(result(KJob *)), this, SLOT(slotJobFinished(KJob *)));
++    }
++}
++
++void NOAAIon::setup_slotDataArrived(KIO::Job *job, const QByteArray &data)
++{
++    Q_UNUSED(job)
++
++    if (data.isEmpty()) {
++        return;
++    }
++
++    // Send to xml.
++    d->m_xmlSetup.addData(data.data());
++}
++
++void NOAAIon::slotDataArrived(KIO::Job *job, const QByteArray &data)
++{
++
++    if (data.isEmpty() || !d->m_jobXml.contains(job)) {
++        return;
++    }
++
++    // Send to xml.
++    d->m_jobXml[job]->addData(data.data());
++}
++
++void NOAAIon::slotJobFinished(KJob *job)
++{
++    // Dual use method, if we're fetching location data to parse we need to do this first
++    readXMLData(d->m_jobList[job], *d->m_jobXml[job]);
++    d->m_jobList.remove(job);
++    delete d->m_jobXml[job];
++    d->m_jobXml.remove(job);
++}
++
++void NOAAIon::setup_slotJobFinished(KJob *job)
++{
++    Q_UNUSED(job)
++    readXMLSetup();
++    this->setInitialized(true);
++}
++
++void NOAAIon::parseStationID()
++{
++    QString tmp;
++    while (!d->m_xmlSetup.atEnd()) {
++        d->m_xmlSetup.readNext();
++
++        if (d->m_xmlSetup.isEndElement() && d->m_xmlSetup.name() == "station") {
++            break;
++        }
++
++        if (d->m_xmlSetup.isStartElement()) {
++            if (d->m_xmlSetup.name() == "state") {
++                d->m_state = d->m_xmlSetup.readElementText();
++            } else if (d->m_xmlSetup.name() == "station_name") {
++                d->m_station_name= d->m_xmlSetup.readElementText();
++            } else if (d->m_xmlSetup.name() == "xml_url") {
++                d->m_xmlurl = d->m_xmlSetup.readElementText();
++
++                tmp = "noaa:" + d->m_station_name + ", " + d->m_state; // Build the key name.
++                d->m_place[tmp].stateName = d->m_state;
++                d->m_place[tmp].stationName = d->m_station_name;
++	        d->m_place[tmp].XMLurl = d->m_xmlurl;
++
++                d->m_locations[tmp] = tmp;
++            } else {
++                parseUnknownElement(d->m_xmlSetup);
++            }
++        }
++    }
++}
++
++void NOAAIon::parseStationList()
++{
++    while (!d->m_xmlSetup.atEnd()) {
++        d->m_xmlSetup.readNext();
++
++        if (d->m_xmlSetup.isEndElement()) {
++            break;
++        }
++
++        if (d->m_xmlSetup.isStartElement()) {
++            if (d->m_xmlSetup.name() == "station") {
++                parseStationID();
++            } else {
++                parseUnknownElement(d->m_xmlSetup);
++            }
++        }
++    }
++}
++
++// Parse the city list and store into a QMap
++bool NOAAIon::readXMLSetup()
++{
++    while (!d->m_xmlSetup.atEnd()) {
++        d->m_xmlSetup.readNext();
++
++        if (d->m_xmlSetup.isStartElement()) {
++            if (d->m_xmlSetup.name() == "wx_station_index") {
++                parseStationList();
++            }
++        }
++    }
++    return !d->m_xmlSetup.error();
++}
++
++WeatherData NOAAIon::parseWeatherSite(WeatherData& data, QXmlStreamReader& xml)
++{
++    data.temperature_C = "N/A";
++    data.temperature_F = "N/A";
++    data.dewpoint_C = "N/A";
++    data.dewpoint_F = "N/A";
++    data.weather = "N/A";
++    data.stationID = "N/A";
++    data.pressure = "N/A";
++    data.visibility = "N/A";
++    data.humidity = "N/A";
++    data.windSpeed = "N/A";
++    data.windGust = "N/A";
++    data.windchill_F = "N/A";
++    data.windchill_C = "N/A";
++    data.heatindex_F = "N/A";
++    data.heatindex_C = "N/A";
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "location") {
++                data.locationName = xml.readElementText();
++            } else if (xml.name() == "station_id") {
++                data.stationID = xml.readElementText();
++            } else if (xml.name() == "observation_time") {
++                data.observationTime = xml.readElementText();
++            } else if (xml.name() == "weather") { 
++                data.weather = xml.readElementText();
++            } else if (xml.name() == "temp_f") {
++                data.temperature_F = xml.readElementText();
++            } else if (xml.name() == "temp_c") {
++                data.temperature_C = xml.readElementText();
++            } else if (xml.name() == "relative_humidity") {
++                data.humidity = xml.readElementText();
++            } else if (xml.name() == "wind_dir") {
++                data.windDirection = xml.readElementText();
++            } else if (xml.name() == "wind_mph") {
++                data.windSpeed = xml.readElementText();
++            } else if (xml.name() == "wind_gust_mph") {
++                data.windGust = xml.readElementText();
++            } else if (xml.name() == "pressure_in") {
++                data.pressure = xml.readElementText();
++            } else if (xml.name() == "dewpoint_f") { 
++                data.dewpoint_F = xml.readElementText();
++            } else if (xml.name() == "dewpoint_c") {
++                data.dewpoint_C = xml.readElementText();
++            } else if (xml.name() == "heat_index_f") {
++                data.heatindex_F = xml.readElementText();
++            } else if (xml.name() == "heat_index_c") {
++                data.heatindex_C = xml.readElementText();
++            } else if (xml.name() == "windchill_f") {
++                data.windchill_F = xml.readElementText();
++            } else if (xml.name() == "windchill_c") {
++                data.windchill_C = xml.readElementText();
++            } else if (xml.name() == "visibility_mi") {
++                data.visibility = xml.readElementText();
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++    return data;
++}
++
++// Parse Weather data main loop, from here we have to decend into each tag pair
++bool NOAAIon::readXMLData(const QString& source, QXmlStreamReader& xml)
++{
++    WeatherData data;
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            if (xml.name() == "current_observation") {
++                data = parseWeatherSite(data, xml);
++            } else {
++                parseUnknownElement(xml);
++            }
++        }
++    }
++
++    d->m_weatherData[source] = data;
++    updateWeather(source);
++    return !xml.error();
++}
++
++// handle when no XML tag is found
++void NOAAIon::parseUnknownElement(QXmlStreamReader& xml)
++{
++
++    while (!xml.atEnd()) {
++        xml.readNext();
++
++        if (xml.isEndElement()) {
++            break;
++        }
++
++        if (xml.isStartElement()) {
++            parseUnknownElement(xml);
++        }
++    }
++}
++
++// User toggleable values set from the dataengine <-> Plasma Applet
++void NOAAIon::option(int option, QVariant value)
++{
++    switch (option) {
++    case IonInterface::UNITS:
++        // Set the Units used (Depends on Ion)
++        if (value.toInt() == KLocale::Metric) {
++            d->m_useMetric = true;
++        }
++        if (value.toInt() == KLocale::Imperial) {
++            d->m_useMetric = false;
++        }
++        break;
++    case IonInterface::TIMEFORMAT:
++        if (value.toBool()) {
++            d->m_useUTC = true;
++        }
++        break;
++    case IonInterface::WINDFORMAT:
++        if (value.toBool()) {
++           d->m_windInMeters = true;
++        } else {
++           d->m_windInMeters = false;
++        }
++        break;
++    }
++}
++
++void NOAAIon::updateWeather(const QString& source)
++{
++    QMap<QString, QString> dataFields;
++    QStringList fieldList;
++
++    setData(source, "Country", this->country(source));
++    setData(source, "Place", this->place(source));
++    setData(source, "Airport Code", this->station(source));
++
++    // Real weather - Current conditions
++    setData(source, "Observations At", this->observationTime(source));
++    setData(source, "Current Conditions", this->condition(source));
++    dataFields = this->temperature(source);
++    setData(source, "Temperature", dataFields["temperature"]);
++
++    if (dataFields["temperature"] != "N/A") {
++        setData(source, "Temperature Unit", dataFields["temperatureUnit"]);
++    }
++
++    // Do we have a comfort temperature? if so display it
++    if (dataFields["comfortTemperature"] != "N/A") {
++        if (d->m_weatherData[source].windchill_F != "NA") {
++            setData(source, "Windchill", QString("%1%2").arg(dataFields["comfortTemperature"]).arg(QChar(176)));
++        }
++        if (d->m_weatherData[source].heatindex_F != "NA" && d->m_weatherData[source].temperature_F.toInt() != d->m_weatherData[source].heatindex_F.toInt()) {
++            setData(source, "Humidex", QString("%1%2").arg(dataFields["comfortTemperature"]).arg(QChar(176)));
++        }
++     }
++
++     setData(source, "Dewpoint", this->dewpoint(source));
++     if (this->dewpoint(source) != "N/A") {
++         setData(source, "Dewpoint Unit", dataFields["temperatureUnit"]);
++     }
++ 
++     dataFields = this->pressure(source);
++     setData(source, "Pressure", dataFields["pressure"]);
++
++     if (dataFields["pressure"] != "N/A") {
++         setData(source, "Pressure Unit", dataFields["pressureUnit"]);
++     }
++
++     dataFields = this->visibility(source);
++     setData(source, "Visibility", dataFields["visibility"]);
++
++     if (dataFields["visibility"] != "N/A") {
++         setData(source, "Visibility Unit", dataFields["visibilityUnit"]);
++     }
++
++     setData(source, "Humidity", this->humidity(source));
++
++     dataFields = this->wind(source);
++     setData(source, "Wind Speed", dataFields["windSpeed"]);
++
++     if (dataFields["windSpeed"] != "Calm") {
++         setData(source, "Wind Speed Unit", dataFields["windUnit"]);
++     }
++
++     setData(source, "Wind Gust", dataFields["windGust"]);
++     if (dataFields["windGust"] != "N/A") {
++         setData(source, "Wind Gust Unit", dataFields["windGustUnit"]);
++     }
++
++     setData(source, "Wind Direction", dataFields["windDirection"]);
++
++     setData(source, "Credit", "NOAA National Weather Service");
++}
++
++QString NOAAIon::country(const QString& source)
++{
++    Q_UNUSED(source);
++    return QString("United States of America");
++}
++QString NOAAIon::place(const QString& source)
++{
++    return d->m_weatherData[source].locationName;
++}
++QString NOAAIon::station(const QString& source)
++{
++    return d->m_weatherData[source].stationID;
++}
++
++QString NOAAIon::observationTime(const QString& source)
++{
++    return d->m_weatherData[source].observationTime;
++}
++QString NOAAIon::condition(const QString& source)
++{
++    if (d->m_weatherData[source].weather.isEmpty() || d->m_weatherData[source].weather == "NA") {
++        d->m_weatherData[source].weather = "N/A";
++    }
++    return d->m_weatherData[source].weather;
++}
++
++QString NOAAIon::dewpoint(const QString& source)
++{
++    if (d->m_useMetric) {
++        return QString("%1").arg(d->m_weatherData[source].dewpoint_C);
++    }
++    return QString("%1").arg(d->m_weatherData[source].dewpoint_F);
++}
++
++QString NOAAIon::humidity(const QString& source)
++{
++   if (d->m_weatherData[source].humidity == "NA") {
++       return QString("N/A");
++   } else {
++       return QString("%1%").arg(d->m_weatherData[source].humidity);
++   }
++}
++
++QMap<QString, QString> NOAAIon::visibility(const QString& source)
++{
++    QMap<QString, QString> visibilityInfo;
++    if (d->m_weatherData[source].visibility.isEmpty()) {
++        visibilityInfo.insert("visibility", QString("N/A"));
++        return visibilityInfo;
++    }
++    if (d->m_useMetric) {
++        visibilityInfo.insert("visibility", QString("%1").arg(QString::number(d->m_formula.milesToKM(d->m_weatherData[source].visibility.toFloat()), 'f', 1)));
++        visibilityInfo.insert("visibilityUnit", "km");
++        return visibilityInfo;
++    } 
++    visibilityInfo.insert("visibility", QString("%1").arg(d->m_weatherData[source].visibility));
++    visibilityInfo.insert("visibilityUnit", "mi");
++    return visibilityInfo;
++}
++
++QMap<QString, QString> NOAAIon::temperature(const QString& source)
++{
++    QMap<QString, QString> temperatureInfo;
++    if (d->m_useMetric) {
++        temperatureInfo.insert("temperature", QString("%1").arg(d->m_weatherData[source].temperature_C));
++        temperatureInfo.insert("temperatureUnit", QString("%1C").arg(QChar(176)));
++    } else {
++        temperatureInfo.insert("temperature", QString("%1").arg(d->m_weatherData[source].temperature_F));
++        temperatureInfo.insert("temperatureUnit", QString("%1F").arg(QChar(176)));
++    }
++    temperatureInfo.insert("comfortTemperature", "N/A");
++
++    if (d->m_weatherData[source].heatindex_F != "NA" && d->m_weatherData[source].windchill_F == "NA") {
++        if (d->m_useMetric) {
++            temperatureInfo.insert("comfortTemperature", d->m_weatherData[source].heatindex_C);
++        } else {
++            temperatureInfo.insert("comfortTemperature", d->m_weatherData[source].heatindex_F);
++        }
++    }
++    if (d->m_weatherData[source].windchill_F != "NA" && d->m_weatherData[source].heatindex_F == "NA") {
++        if (d->m_useMetric) {
++            temperatureInfo.insert("comfortTemperature", d->m_weatherData[source].windchill_C);
++        } else {
++            temperatureInfo.insert("comfortTemperature", d->m_weatherData[source].windchill_F);
++        }
++    }
++
++    return temperatureInfo;
++}
++
++QMap<QString, QString> NOAAIon::pressure(const QString& source)
++{
++    QMap<QString, QString> pressureInfo;
++    if (d->m_weatherData[source].pressure.isEmpty()) {
++        pressureInfo.insert("pressure", "N/A");
++        return pressureInfo;
++    } 
++    if (d->m_useMetric) {
++        pressureInfo.insert("pressure", QString("%1").arg(QString::number(d->m_formula.inchesToKilopascals(d->m_weatherData[source].pressure.toFloat()), 'f', 1)));
++        pressureInfo.insert("pressureUnit", "kPa");
++    } else {
++        pressureInfo.insert("pressure", QString("%1").arg(d->m_weatherData[source].pressure));
++        pressureInfo.insert("pressureUnit", "in");
++    }
++    return pressureInfo;
++}
++
++QMap<QString, QString> NOAAIon::wind(const QString& source)
++{
++    QMap<QString, QString> windInfo;
++
++    // May not have any winds
++    if (d->m_weatherData[source].windSpeed == "NA") {
++        windInfo.insert("windSpeed", "Calm");
++    } else {
++        if (d->m_useMetric) {
++            if (d->m_windInMeters) {
++                windInfo.insert("windSpeed", QString("%1").arg(QString::number(d->m_formula.milesToMS(d->m_weatherData[source].windSpeed.toFloat()), 'f', 2)));
++                windInfo.insert("windUnit", "m/s");
++            } else {
++                windInfo.insert("windSpeed", QString("%1").arg(QString::number(d->m_formula.milesToKM(d->m_weatherData[source].windSpeed.toFloat()), 'f', 1)));
++                windInfo.insert("windUnit", "km/h");
++            }
++        } else {
++            windInfo.insert("windSpeed", QString("%1").arg(QString::number(d->m_weatherData[source].windSpeed.toFloat(), 'f', 1)));
++            windInfo.insert("windUnit", "mph");
++        }
++    }
++
++    // May not always have gusty winds
++    if (d->m_weatherData[source].windGust == "NA") {
++        windInfo.insert("windGust", "N/A");
++    } else {
++        if (d->m_useMetric) {
++            if (d->m_windInMeters) {
++                windInfo.insert("windGust", QString("%1").arg(QString::number(d->m_formula.milesToMS(d->m_weatherData[source].windGust.toFloat()), 'f', 2)));
++                windInfo.insert("windGustUnit", "m/s");
++            } else {
++                windInfo.insert("windGust", QString("%1").arg(QString::number(d->m_formula.milesToKM(d->m_weatherData[source].windGust.toFloat()), 'f', 1)));
++                windInfo.insert("windGustUnit", "km/h");
++            }
++        } else {
++            windInfo.insert("windGust", QString("%1").arg(QString::number(d->m_weatherData[source].windGust.toFloat(), 'f', 1)));
++            windInfo.insert("windGustUnit", "mph");
++        }
++    }
++
++    if (d->m_weatherData[source].windDirection.isEmpty()) {
++        windInfo.insert("windDirection", "N/A");
++    } else {
++        windInfo.insert("windDirection", d->m_weatherData[source].windDirection);
++    }
++    return windInfo;
++}
++
++#include "ion_noaa.moc"
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion-envcan.desktop
+@@ -0,0 +1,31 @@
++[Desktop Entry]
++Name=Environment Canada
++Name[el]=Περιβάλλον Καναδά
++Name[km]=បរិស្ថាន​ប្រទេស​កាណាដា
++Name[ko]=캐나다 환경부
++Name[nds]=Ümwelt Kanada
++Name[x-test]=xxEnvironment Canadaxx
++Name[zh_CN]=加拿大环境
++Comment=XML Data from Environment Canada
++Comment[el]=Δεδομένα XML για το περιβάλλον του Καναδά
++Comment[et]=Environment Canada XML-andmed
++Comment[ga]=Sonraí XML ó Environment Canada
++Comment[ja]=Environment Canada の XML データ
++Comment[kk]=Environment Canada-ның XML дерегі
++Comment[km]=ទិន្នន័យ XML ពី​បរិស្ថាន​ប្រទេស​កាណាដា
++Comment[ko]=캐나다 환경부의 XML 데이터
++Comment[nb]=XML-data fra Environment Canada
++Comment[nds]=XML-Daten vun Ümwelt Kanada
++Comment[nl]=XML-gegevens van Environment Canada
++Comment[nn]=XML-data frå Environment Canada
++Comment[pt]=Dados em XML do Environment Canada
++Comment[pt_BR]=Dados em XML do Environment Canada
++Comment[sv]=XML-data från Environment Canada
++Comment[x-test]=xxXML Data from Environment Canadaxx
++Comment[zh_CN]=来自加拿大环境的 XML 数据
++Comment[zh_TW]=從 Environment Canada 來的 XML 資料
++ServiceTypes=WeatherEngine/Ion
++Type=Service
++Icon=noneyet
++X-KDE-Library=ion_envcan
++X-IonName=envcan
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion_envcan.h
+@@ -0,0 +1,212 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Ion for Environment Canada XML data */
++
++#ifndef _ION_ENVCAN_H_
++#define _ION_ENVCAN_H_
++
++#include <QtXml/QXmlStreamReader>
++#include <QtCore/QStringList>
++#include <QDebug>
++#include <kurl.h>
++#include <kio/job.h>
++#include <kio/scheduler.h>
++#include <kdemacros.h>
++#include <plasma/dataengine.h>
++#include "ion.h"
++#include "weather_formula.h"
++
++class WeatherData
++{
++
++public:
++    // Warning info, can have more than one, especially in Canada, eh? :)
++    struct WarningInfo {
++        QString url;
++        QString type;
++        QString priority;
++        QString description;
++        QString timestamp;
++    };
++
++    // Five day forecast
++    struct ForecastInfo {
++        QString forecastPeriod;
++        QString forecastSummary;
++        QString shortForecast;
++
++        QString forecastTempHigh;
++        QString forecastTempLow;
++        QString popPrecent;
++        QString windForecast;
++
++        QString precipForecast;
++        QString precipType;
++        QString precipTotalExpected;
++        int forecastHumidity;
++    };
++
++    QString countryName;
++    QString longTerritoryName;
++    QString shortTerritoryName;
++    QString cityName;
++    QString regionName;
++    QString stationID;
++
++    // Current observation information.
++    QString obsTimestamp;
++    QString condition;
++    QString temperature;
++    QString dewpoint;
++
++    // In winter windchill, in summer, humidex
++    QString comforttemp;
++
++    float pressure;
++    QString pressureTendency;
++
++    float visibility;
++    QString humidity;
++
++    QString windSpeed;
++    QString windGust;
++    QString windDirection;
++
++    QVector <WeatherData::WarningInfo *> warnings;
++
++    QString normalHigh;
++    QString normalLow;
++
++    QString forecastTimestamp;
++
++    QString UVIndex;
++    QString UVRating;
++
++    // 5 day Forecast
++    QVector <WeatherData::ForecastInfo *> forecasts;
++
++    // Historical data from previous day.
++    QString prevHigh;
++    QString prevLow;
++    QString prevPrecipType;
++    QString prevPrecipTotal;
++
++    // Almanac info
++    QString sunriseTimestamp;
++    QString sunsetTimestamp;
++    QString moonriseTimestamp;
++    QString moonsetTimestamp;
++
++    // Historical Records
++    float recordHigh;
++    float recordLow;
++    float recordRain;
++    float recordSnow;
++};
++
++class KDE_EXPORT EnvCanadaIon : public IonInterface
++{
++    Q_OBJECT
++
++public:
++    EnvCanadaIon(QObject *parent, const QVariantList &args);
++    ~EnvCanadaIon();
++    void init();  // Setup the city location, fetching the correct URL name.
++    bool updateIonSource(const QString& source); // Sync data source with Applet
++    void option(int option, QVariant value);
++    void updateWeather(const QString& source);
++
++protected slots:
++    void setup_slotDataArrived(KIO::Job *, const QByteArray &);
++    void setup_slotJobFinished(KJob *);
++
++    void slotDataArrived(KIO::Job *, const QByteArray &);
++    void slotJobFinished(KJob *);
++
++private:
++    /* Environment Canada Methods - Internal for Ion */
++
++    // Place information
++    QString country(const QString& source);
++    QString territory(const QString& source);
++    QString city(const QString& source);
++    QString region(const QString& source);
++    QString station(const QString& source);
++
++    // Current Conditions Weather info
++    QString observationTime(const QString& source);
++    QMap<QString, QString> warnings(const QString& source);
++    QString condition(const QString& source);
++    QMap<QString, QString> temperature(const QString& source);
++    QString dewpoint(const QString& source);
++    QString humidity(const QString& source);
++    QMap<QString, QString> visibility(const QString& source);
++    QMap<QString, QString> pressure(const QString& source);
++    QMap<QString, QString> wind(const QString& source);
++    QMap<QString, QString> regionalTemperatures(const QString& source);
++    QMap<QString, QString> uvIndex(const QString& source);
++    QVector<QString> forecasts(const QString& source);
++    QMap<QString, QString> yesterdayWeather(const QString& source);
++    QMap<QString, QString> sunriseSet(const QString& source);
++    QMap<QString, QString> moonriseSet(const QString& source);
++    QMap<QString, QString> weatherRecords(const QString& source);
++
++    // Load and Parse the place XML listing
++    void getXMLSetup(void);
++    bool readXMLSetup(void);
++
++    // Load and parse the specific place(s)
++    void getXMLData(const QString& source);
++    bool readXMLData(const QString& source, QXmlStreamReader& xml);
++
++    // Check if place specified is valid or not
++    QString validate(const QString& source);
++
++    // Catchall for unknown XML tags
++    void parseUnknownElement(QXmlStreamReader& xml);
++
++    // Parse weather XML data
++    WeatherData parseWeatherSite(WeatherData& data, QXmlStreamReader& xml);
++    void parseDateTime(WeatherData& data, QXmlStreamReader& xml, WeatherData::WarningInfo* warning = NULL);
++    void parseLocations(WeatherData& data, QXmlStreamReader& xml);
++    void parseConditions(WeatherData& data, QXmlStreamReader& xml);
++    void parseWarnings(WeatherData& data, QXmlStreamReader& xml);
++    void parseWindInfo(WeatherData& data, QXmlStreamReader& xml);
++    void parseWeatherForecast(WeatherData& data, QXmlStreamReader& xml);
++    void parseRegionalNormals(WeatherData& data, QXmlStreamReader& xml);
++    void parseForecast(WeatherData& data, QXmlStreamReader& xml, WeatherData::ForecastInfo* forecast);
++    void parseShortForecast(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
++    void parseForecastTemperatures(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
++    void parseWindForecast(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
++    void parsePrecipitationForecast(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
++    void parsePrecipTotals(WeatherData::ForecastInfo* forecast, QXmlStreamReader& xml);
++    void parseUVIndex(WeatherData& data, QXmlStreamReader& xml);
++    void parseYesterdayWeather(WeatherData& data, QXmlStreamReader& xml);
++    void parseAstronomicals(WeatherData& data, QXmlStreamReader& xml);
++    void parseWeatherRecords(WeatherData& data, QXmlStreamReader& xml);
++
++private:
++    class Private;
++    Private *const d;
++};
++
++K_EXPORT_PLASMA_ION(envcan, EnvCanadaIon)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/weather_formula.cpp
+@@ -0,0 +1,89 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++#include <math.h>
++#include "weather_formula.h"
++
++WeatherFormula::WeatherFormula()
++{
++}
++
++WeatherFormula::~WeatherFormula()
++{
++}
++
++float WeatherFormula::celsiusToF(float temperature) const
++{
++    return (temperature * 9 / 5 + 32);
++}
++
++float WeatherFormula::fahrenheitToC(float temperature) const
++{
++    return (temperature - 32) * 5 / 9;
++}
++
++float WeatherFormula::milesToKM(float miles) const
++{
++    return (1.609344 * miles);
++}
++
++float WeatherFormula::kilometersToMI(float km) const
++{
++    return (0.621371192 * km);
++}
++
++float WeatherFormula::kilopascalsToInches(float kpa) const
++{
++    return ((0.02952997 * kpa) * 10);
++}
++
++float WeatherFormula::inchesToKilopascals(float inches) const
++{
++    return (inches * 3.386389);
++}
++
++float WeatherFormula::centimetersToIN(float cm) const 
++{
++    return (cm * 0.393700787);
++}
++
++float WeatherFormula::inchesToCM(float inch) const
++{
++    return (inch * 2.54);
++}
++
++float WeatherFormula::millimetersToIN(float mm) const
++{
++    return (mm * 0.0393700787);
++}
++
++float WeatherFormula::inchesToMM(float inch) const
++{
++    return (inch * 25.4);
++}
++
++float WeatherFormula::kilometersToMS(float km) const
++{
++    return (km * 0.277778);
++}
++
++float WeatherFormula::milesToMS(float miles) const
++{
++    return (miles * 0.44704);
++}
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion.cpp
+@@ -0,0 +1,101 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++#include "ion.h"
++#include "ion.moc"
++
++class IonInterface::Private : public QObject
++{
++public:
++    Private(IonInterface *i)
++            : ion(i),
++              initialized(false)
++    {}
++
++    int ref;
++    IonInterface *ion;
++    bool valid;
++    bool initialized;
++};
++
++IonInterface::IonInterface(QObject *parent)
++        : Plasma::DataEngine(parent),
++        d(new Private(this))
++{
++}
++
++// Increment reference counter
++void IonInterface::ref()
++{
++    ++d->ref;
++}
++
++// Decrement reference counter
++void IonInterface::deref()
++{
++    --d->ref;
++}
++
++// Check if Ion is used
++bool IonInterface::isUsed() const
++{
++    return d->ref != 0;
++}
++
++// Check if Ion is valid - Not used yet
++bool IonInterface::isValid() const
++{
++    return d->valid;
++}
++
++bool IonInterface::sourceRequested(const QString &source)
++{
++    setData(source, Plasma::DataEngine::Data());
++   
++    if (d->initialized) {
++        this->updateSource(source);
++    }
++
++    return true;
++}
++
++bool IonInterface::updateSource(const QString& source) 
++{
++     kDebug() << "SOURCE IS = " << source; 
++     if (d->initialized) {
++         if(this->updateIonSource(source)) {
++            return true;
++         } else {
++            return false;
++         }
++     }
++
++     return false; 
++}
++
++void IonInterface::setInitialized(const bool initialized)
++{
++    d->initialized = initialized;
++
++    if (d->initialized) {
++        foreach (const QString &source, sources()) {
++            updateSource(source);
++        }
++    }
++}
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion-bbcukmet.desktop
+@@ -0,0 +1,42 @@
++[Desktop Entry]
++Name=BBC Weather from UK MET Office
++Name[el]=Καιρός του BBC από το γραφείο UK MET
++Name[et]=BBC ilmateade Briti ilmateenistusest
++Name[ga]=Aimsir BBC ó Oifig UK MET
++Name[ja]=英国 Met Office の BBC Weather
++Name[kk]=UK MET Оффистің BBC ауа райы болжамы
++Name[km]=អាកាសធាតុ BBC ពី​ការិយាល័យ UK MET
++Name[ko]=영국 MET 사무소의 BBC 날씨
++Name[nb]=BBC vær fra det britiske meteorologi-kontoret
++Name[nds]=BBC-Weder vun't engelsche Wederkunn-Kontoor
++Name[nl]=BBC Weather van UK MET Office
++Name[nn]=BBC-vêr frå UK MET Office
++Name[pt]=Meteorologia da BBC do Escritório MET na GB
++Name[pt_BR]=BBC Weather do Escritório MET no Reino Unido
++Name[sv]=BBC-väder från brittiska meteorologiska departementet
++Name[x-test]=xxBBC Weather from UK MET Officexx
++Name[zh_CN]=来自英国 MET 办公室来的 BBC 天气报告
++Name[zh_TW]=BBC 天氣報告,從 UK MET 辦公室來
++Comment=XML Data from the UK MET Office
++Comment[el]=Δεδομένα XML από το γραφείο UK MET
++Comment[et]=Briti ilmateenistuse XML-andmed
++Comment[ga]=Sonraí XML ó Oifig UK MET
++Comment[ja]=英国 Met Office の XML データ
++Comment[kk]=UK MET Оффстің XML дерегі
++Comment[km]=ទិន្នន័យ XML ពី​ការិយាល័យ UK MET
++Comment[ko]=영국 MET 사무소의 XML 데이터
++Comment[nb]=XML-data fra det britiske meteorologi-kontoret
++Comment[nds]=XML-Daten vun't engelsche Wederkunn-Kontoor
++Comment[nl]=XML-gegevens van UK MET Office
++Comment[nn]=XML-data frå UK MET Office
++Comment[pt]=Dados em XML do Escritório MET na GB
++Comment[pt_BR]=Dados em XML do Escritório MET no Reino Unido
++Comment[sv]=XML-data från brittiska meteorologiska departementet
++Comment[x-test]=xxXML Data from the UK MET Officexx
++Comment[zh_CN]=来自英国 MET 办公室来的 XML 数据
++Comment[zh_TW]=從 UK MET 辦公室來的 XML 資料
++ServiceTypes=WeatherEngine/Ion
++Type=Service
++Icon=noneyet
++X-KDE-Library=ion_bbcukmet
++X-IonName=bbcukmet
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion_bbcukmet.h
+@@ -0,0 +1,90 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Ion for BBC Weather from UKMET Office */
++
++#ifndef _ION_UKMET_H
++#define _ION_UKMET_H
++
++#include <QtXml/QXmlStreamReader>
++#include <QtCore/QStringList>
++#include <QDebug>
++#include <kurl.h>
++#include <kio/job.h>
++#include <kio/scheduler.h>
++#include <kdemacros.h>
++#include <plasma/dataengine.h>
++#include "ion.h"
++#include "weather_formula.h"
++
++class WeatherData
++{
++
++public:
++    QString title;
++
++    // Current observation information.
++    QString conditionTime;
++    QString weather;
++    QString observations;
++};
++
++class KDE_EXPORT UKMETIon : public IonInterface
++{
++    Q_OBJECT
++
++public:
++    UKMETIon(QObject *parent, const QVariantList &args);
++    ~UKMETIon();
++    void init();  // Setup the city location, fetching the correct URL name.
++    bool updateIonSource(const QString& source);
++    void updateWeather(const QString& source); // Sync data source with Applet
++    void option(int option, QVariant value);
++
++protected slots:
++    void slotDataArrived(KIO::Job *, const QByteArray &);
++    void slotJobFinished(KJob *);
++    void forecast_slotDataArrived(KIO::Job *, const QByteArray &);
++    void forecast_slotJobFinished(KJob *);
++
++private:
++    /* UKMET Methods - Internal for Ion */
++
++    // Load and Parse the place search XML listings
++    void searchPlace(const QString& key);
++    void cachedLocation(const QString& key);
++    bool readSearchXMLData(const QString& key, QXmlStreamReader& xml);
++    void parseSearchLocations(const QString& key, QXmlStreamReader& xml);
++    bool validLocation(QString key);
++
++    // Observation parsing methods
++    bool readObservationXMLData(QString &key, QXmlStreamReader& xml);
++    void parsePlaceObservation(WeatherData& data, QXmlStreamReader& xml);
++    void parseWeatherChannel(WeatherData& data, QXmlStreamReader& xml);
++    void parseWeatherObservation(WeatherData& data, QXmlStreamReader& xml);
++    void parseUnknownElement(QXmlStreamReader& xml);
++
++private:
++    class Private;
++    Private *const d;
++};
++
++K_EXPORT_PLASMA_ION(bbcukmet, UKMETIon)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion-noaa.desktop
+@@ -0,0 +1,41 @@
++[Desktop Entry]
++Name=NOAA's National Weather Service
++Name[el]=Υπηρεσία καιρού NOAA
++Name[et]=NOAA riiklik ilmateenistus
++Name[ja]=NOAA (アメリカ海洋大気圏局) National Weather Service
++Name[kk]=NOAA Ұлттық ауа райы қызметі
++Name[km]=សេវា​អាកាសធាតុ​ជាតិ​របស់ NOAA
++Name[ko]=NOAA 미국 기상 서비스
++Name[nb]=NOAAs nasjonale værtjeneste
++Name[nds]=Wederdeenst vun't US-Ozeaankunn- un Wederamt
++Name[nl]=NOAA's nationale weerdienst
++Name[nn]=NOAAs amerikanske vêrteneste
++Name[pt]=Serviço Meteorológico Nacional da NOAA
++Name[pt_BR]=Serviço Meteorológico Nacional da NOAA
++Name[sv]=NOAA:s nationella vädertjänst
++Name[x-test]=xxNOAA's National Weather Servicexx
++Name[zh_CN]=NOAA 的 国家天气服务
++Name[zh_TW]=NOAA 的國家天氣服務
++Comment=XML Data from NOAA's National Weather Service
++Comment[el]=Δεδομένα XML από την υπηρεσία καιρού NOAA
++Comment[et]=NOAA riikliku ilmateenistuse XML-andmed
++Comment[it]=Dati XML dal NOAA (National Weather Service)
++Comment[ja]=NOAA (アメリカ海洋大気圏局) National Weather Service の XML データ
++Comment[kk]=NOAA Ұлттық ауа райы қызметінің XML дерегі
++Comment[km]=ទិន្នន័យ XML ពី​សេវា​អាកាសធាតុ​ជាតិ​របស់ NOAA
++Comment[ko]=NOAA 미국 기상 서비스의 XML 데이터
++Comment[nb]=XML-data fra NOAAs nasjonale værtjeneste
++Comment[nds]=XML-Daten vun't US-Ozeaankunn- un Wederamt
++Comment[nl]=XML-gegevens van NOAA's nationale weerdienst
++Comment[nn]=XML-data frå NOAAs amerikanske vêrteneste
++Comment[pt]=Dados em XML do Serviço Meteorológico Nacional da NOAA
++Comment[pt_BR]=Dados em XML do Serviço Meteorológico Nacional da NOAA
++Comment[sv]=XML-data från NOAA:s nationella vädertjänst
++Comment[x-test]=xxXML Data from NOAA's National Weather Servicexx
++Comment[zh_CN]=来自 NOAA 的 国家天气服务的 XML 数据
++Comment[zh_TW]=從 NOAA 的國家天氣服務來的 XML 資料
++ServiceTypes=WeatherEngine/Ion
++Type=Service
++Icon=noneyet
++X-KDE-Library=ion_noaa
++X-IonName=noaa
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion_noaa.h
+@@ -0,0 +1,128 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Ion for NOAA's National Weather Service XML data */
++
++#ifndef _ION_NOAA_H
++#define _ION_NOAA_H
++
++#include <QtXml/QXmlStreamReader>
++#include <QtCore/QStringList>
++#include <QDebug>
++#include <kurl.h>
++#include <kio/job.h>
++#include <kio/scheduler.h>
++#include <kdemacros.h>
++#include <plasma/dataengine.h>
++#include "ion.h"
++#include "weather_formula.h"
++
++class WeatherData
++{
++
++public:
++    //QString countryName; // USA
++    QString locationName;
++    QString stationID;
++    QString stateName;
++
++    // Current observation information.
++    QString observationTime;
++    QString weather;
++    QString temperature_F;
++    QString temperature_C;
++    QString humidity;
++    QString windString;
++    QString windDirection;
++    QString windSpeed; // Float value
++    QString windGust; // Float value
++    QString pressure; 
++    QString dewpoint_F;
++    QString dewpoint_C;
++    QString heatindex_F;
++    QString heatindex_C;
++    QString windchill_F;
++    QString windchill_C;
++    QString visibility;
++};
++
++class KDE_EXPORT NOAAIon : public IonInterface
++{
++    Q_OBJECT
++
++public:
++    NOAAIon(QObject *parent, const QVariantList &args);
++    ~NOAAIon();
++    void init(void);  // Setup the city location, fetching the correct URL name.
++    void option(int option, QVariant value);
++    bool updateIonSource(const QString& source); // Sync data source with Applet
++    void updateWeather(const QString& source);
++
++protected slots:
++    void setup_slotDataArrived(KIO::Job *, const QByteArray &);
++    void setup_slotJobFinished(KJob *);
++
++    void slotDataArrived(KIO::Job *, const QByteArray &);
++    void slotJobFinished(KJob *);
++
++private:
++    /* NOAA Methods - Internal for Ion */
++
++    // Place information
++    QString country(const QString& source);
++    QString place(const QString& source);
++    QString station(const QString& source);
++
++    // Current Conditions Weather info
++    QString observationTime(const QString& source);
++    QString condition(const QString& source);
++    QMap<QString, QString> temperature(const QString& source);
++    QString dewpoint(const QString& source);
++    QString humidity(const QString& source);
++    QMap<QString, QString> visibility(const QString& source);
++    QMap<QString, QString> pressure(const QString& source);
++    QMap<QString, QString> wind(const QString& source);
++
++    // Load and Parse the place XML listing
++    void getXMLSetup(void);
++    bool readXMLSetup(void);
++
++    // Load and parse the specific place(s)
++    void getXMLData(const QString& source);
++    bool readXMLData(const QString& source, QXmlStreamReader& xml);
++
++    // Check if place specified is valid or not
++    bool validate(const QString& source) const;
++
++    // Catchall for unknown XML tags
++    void parseUnknownElement(QXmlStreamReader& xml);
++
++    // Parse weather XML data
++    WeatherData parseWeatherSite(WeatherData& data, QXmlStreamReader& xml);
++    void parseStationID(void);
++    void parseStationList(void);
++
++private:
++    class Private;
++    Private *const d;
++};
++
++K_EXPORT_PLASMA_ION(noaa, NOAAIon)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/weather_formula.h
+@@ -0,0 +1,49 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++/* Meteorological formula class */
++
++#ifndef _WEATHERFORMULA_H
++#define _WEATHERFORMULA_H
++
++#include <kdemacros.h>
++
++class KDE_EXPORT WeatherFormula
++{
++public:
++    WeatherFormula();
++    ~WeatherFormula();
++    // Convert Temperatures, pressures
++    float celsiusToF(float temperature) const;
++    float fahrenheitToC(float temperature) const;
++    float milesToKM(float miles) const;
++    float kilometersToMI(float km) const;
++    float kilopascalsToInches(float kpa) const;
++    float inchesToKilopascals(float inches) const;
++    float centimetersToIN(float cm) const;
++    float inchesToCM(float inch) const;
++    float millimetersToIN(float mm) const;
++    float inchesToMM(float inch) const;
++
++    // Winds measured in meters per second
++    float kilometersToMS(float km) const;
++    float milesToMS(float miles) const;
++};
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/ion.h
+@@ -0,0 +1,114 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++#ifndef _ION_H
++#define _ION_H
++
++#include <QObject>
++#include <kdemacros.h>
++#include <KGenericFactory>
++#include <plasma/dataengine.h>
++
++/**
++* This is the base class to be used to implement new ions for the WeatherEngine.
++* The idea is that you can have multiple ions which provide weather information from different services to the engine from which an applet will request the data from.
++* 
++* Basically an ion is a Plasma::DataEngine, which is queried by the WeatherEngine instead of some applet.
++*/
++class KDE_EXPORT IonInterface : public Plasma::DataEngine
++{
++    Q_OBJECT
++public:
++    typedef QHash<QString, IonInterface*> IonDict; // Define Dict as a QHash for Ions
++
++    /**
++    * Constructor for the ion
++    */
++    IonInterface(QObject *parent = 0);
++    /**
++    * Destructor for the ion
++    */
++    virtual ~IonInterface() {}
++
++    /**
++    * Reimplement to do the initialization of the ion.
++    * For example fetching the list of available cities or weather data sources should be fetched here.
++    */
++    virtual void init(void) = 0;
++
++    /**
++    * Increment ion counter. This is used to watch if the ion is being used.
++    */
++    void ref();
++
++    /**
++    * Decrement ion counter.
++    */
++    void deref();
++
++    /**
++    * Returns whether the ion is being used.
++    * @return true if the ion is being used, false otherwise
++    */
++    bool isUsed() const;
++
++    /**
++    * Returns whether the ion is valid. Not used for now.
++    * @return true if the ion is valid.
++    */
++    bool isValid() const;
++
++    enum ionOptions { UNITS, TIMEFORMAT, WINDFORMAT };
++    /**
++    * Reimplement to set the wanted options for the ion such as unit and time, and wind speed formats.
++    */
++    virtual void option(int option, QVariant value) = 0;
++
++public slots:
++    bool updateSource(const QString& source);
++
++protected:
++    /**
++     * Call this method to flush waiting source requests that may be pending
++     * initialization
++     *
++     * @arg initialized whether or not the ion is currently ready to fetch data
++     */
++    void setInitialized(const bool initialized);
++
++    /**
++     * reimplemented from DataEngine
++     */
++    bool sourceRequested(const QString &name);
++
++    /**
++     * Reimplement to fetch the data from the ion
++     * 
++     */
++    virtual bool updateIonSource(const QString &name) = 0;
++   
++private:
++    class Private;
++    Private* const d;
++};
++
++#define K_EXPORT_PLASMA_ION(name, classname) \
++K_PLUGIN_FACTORY(factory, registerPlugin<classname>();) \
++K_EXPORT_PLUGIN(factory("ion_" #name))
++#endif
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/weather_ion.desktop
+@@ -0,0 +1,24 @@
++[Desktop Entry]
++Encoding=UTF-8
++Type=ServiceType
++X-KDE-ServiceType=WeatherEngine/Ion
++
++Comment=WeatherEngine Ion
++Comment[el]=Μηχανή καιρού Ion
++Comment[ja]=WeatherEngine イオン
++Comment[kk]=Ауа райы болжау қызметтер
++Comment[km]=ម៉ាស៊ីន​ស្វែងរក​អាកាសធាតុ lon
++Comment[ko]=날씨 엔진 Ion
++Comment[nb]=Værmotor Ion
++Comment[nds]=Ion-Wederkarn
++Comment[nl]=Weer-engine Ion
++Comment[nn]=Vêrmotor Ion
++Comment[pt]=Motor Meteorológico Ion
++Comment[pt_BR]=Motor Meteorológico Ion
++Comment[sv]=Vädergränssnittsjon
++Comment[x-test]=xxWeatherEngine Ionxx
++Comment[zh_CN]=天气引擎离子
++Comment[zh_TW]=天氣引擎 Ion
++
++[PropertyDef::X-IonName]
++Type=QString
+--- /dev/null
++++ b/plasma/dataengines/weather/ions/CMakeLists.txt
+@@ -0,0 +1,20 @@
++SET (ion_envcan_SRCS ion_envcan.cpp)
++SET (ion_noaa_SRCS ion_noaa.cpp)
++SET (ion_bbcukmet_SRCS ion_bbcukmet.cpp)
++
++kde4_add_plugin(ion_envcan ${ion_envcan_SRCS})
++kde4_add_plugin(ion_noaa ${ion_noaa_SRCS})
++kde4_add_plugin(ion_bbcukmet ${ion_bbcukmet_SRCS})
++
++TARGET_LINK_LIBRARIES (ion_envcan ${KDE4_KDEUI_LIBS} plasma weather_ion)
++TARGET_LINK_LIBRARIES (ion_noaa ${KDE4_KDEUI_LIBS} plasma weather_ion)
++TARGET_LINK_LIBRARIES (ion_bbcukmet ${KDE4_KDEUI_LIBS} plasma weather_ion)
++
++INSTALL (TARGETS ion_envcan DESTINATION ${PLUGIN_INSTALL_DIR})
++INSTALL (TARGETS ion_noaa DESTINATION ${PLUGIN_INSTALL_DIR})
++INSTALL (TARGETS ion_bbcukmet DESTINATION ${PLUGIN_INSTALL_DIR})
++
++INSTALL (FILES weather_ion.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR})
++INSTALL (FILES ion-envcan.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++INSTALL (FILES ion-noaa.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++INSTALL (FILES ion-bbcukmet.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+--- /dev/null
++++ b/plasma/dataengines/weather/weatherengine.h
+@@ -0,0 +1,69 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Shawn Starr <shawn.starr at rogers.com>            *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA          *
++ ***************************************************************************/
++
++#ifndef _WEATHER_ENGINE_H_
++#define _WEATHER_ENGINE_H_
++
++#include <KService>
++#include <KGenericFactory>
++#include <plasma/dataengine.h>
++#include "ions/ion.h"
++
++class QTimer;
++
++/* DataEngine class
++   - Loads Ions (data sources from various inputs).
++   - Handles interaction from Applet <-> Dataengine
++*/
++class WeatherEngine : protected Plasma::DataEngine
++{
++    Q_OBJECT
++
++public:
++    // ctor, dtor
++    WeatherEngine(QObject *parent, const QVariantList &args);
++    ~WeatherEngine();
++
++    // Ion plugin methods
++    IonInterface* Ion(const QString& name) const;  // Returns an Ion instance.
++    IonInterface* loadIon(const KService::Ptr& service);    // Loads an Ion plugin.
++    void unloadIon(const QString& name);           // Unloads an Ion plugin.
++    KService::List knownIons();                // Returns a list of Ion plugin names.
++
++protected:
++    // dataEngine method - We use it to communicate to the Ion plugins to set the data sources
++    bool sourceRequested(const QString &source);
++
++protected slots:
++    // SLOT: trigger to indicate new data is available from an Ion. There are two modes.
++    // When using a timer no ion is specified, otherwise when loading an ion an ion is
++    // specified.
++    void updated(const QString& source, Plasma::DataEngine::Data data);
++    void newIonSource(const QString& source);
++    void removeIonSource(const QString& source);
++    bool updateSource(const QString& source);
++
++private:
++    class Private;
++    Private *const d;
++};
++
++K_EXPORT_PLASMA_DATAENGINE(weather, WeatherEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/weather/CMakeLists.txt
+@@ -0,0 +1,13 @@
++ADD_SUBDIRECTORY(ions)
++
++SET (ionlib_SRCS ions/ion.cpp ions/weather_formula.cpp)
++kde4_add_library (weather_ion SHARED ${ionlib_SRCS})
++TARGET_LINK_LIBRARIES (weather_ion ${KDE4_KIO_LIBS} plasma)
++set_target_properties(weather_ion PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION})
++INSTALL (TARGETS weather_ion DESTINATION ${LIB_INSTALL_DIR})
++
++SET(weather_SRCS weatherengine.cpp)
++kde4_add_plugin(plasma_engine_weather ${weather_SRCS})
++TARGET_LINK_LIBRARIES (plasma_engine_weather ${KDE4_KIO_LIBS} plasma weather_ion)
++INSTALL (TARGETS plasma_engine_weather DESTINATION ${PLUGIN_INSTALL_DIR})
++INSTALL (FILES plasma-engine-weather.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+--- /dev/null
++++ b/plasma/dataengines/weather/README
+@@ -0,0 +1 @@
++Plasma Weather dataengine
+--- /dev/null
++++ b/plasma/dataengines/hotplug/plasma-engine-hotplug.desktop
+@@ -0,0 +1,19 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Hotplug Event Data Engine
++Name[et]=Hotplug-sündmuste andmete mootor
++Name[ja]=Hotplug イベントデータエンジン
++Name[km]=ម៉ាស៊ីន​ទិន្នន័យ​ព្រឹត្តិការណ៍​ដោតដើរ​
++Name[ko]=핫플러그 이벤트 데이터 엔진
++Name[nds]=Tokoppel-Hanteerkarn
++Name[nl]=Hotplug-gebeurtenis (gegevensengine)
++Name[pt]=Motor de Dados de Eventos do Hotplug
++Name[pt_BR]=Mecanismo de Dados de Eventos do Hotplug
++Name[sv]=Datagränssnitt för inkopplingshändelse
++Name[x-test]=xxHotplug Event Data Enginexx
++Name[zh_TW]=熱插拔事件資料引擎
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=notifier
++X-KDE-Library=plasma_engine_hotplug
++X-EngineName=hotplug
+--- /dev/null
++++ b/plasma/dataengines/hotplug/hotplugengine.cpp
+@@ -0,0 +1,104 @@
++/*
++ *   Copyright (C) 2007 Menard Alexis <darktears31 at gmail.com>
++ *
++ * This program is free software you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB.  If not, write to
++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301, USA.
++*/
++
++#include "hotplugengine.h"
++
++#include <KConfigGroup>
++#include <KDebug>
++#include <KLocale>
++#include <KStandardDirs>
++#include <KDesktopFile>
++#include "plasma/datacontainer.h"
++
++//solid specific includes
++#include <solid/devicenotifier.h>
++#include <solid/device.h>
++#include <solid/deviceinterface.h>
++#include <solid/predicate.h>
++
++
++
++HotplugEngine::HotplugEngine(QObject* parent, const QVariantList& args)
++    : Plasma::DataEngine(parent)
++{
++    Q_UNUSED(args)
++    connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceAdded(const QString &)),
++            this, SLOT(onDeviceAdded(const QString &)));
++    connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceRemoved(const QString &)),
++            this, SLOT(onDeviceRemoved(const QString &)));
++    files = KGlobal::dirs()->findAllResources("data", "solid/actions/*.desktop");
++    //kDebug() <<files.size();
++    new_device=false;
++}
++
++HotplugEngine::~HotplugEngine()
++{
++
++}
++
++void HotplugEngine::onDeviceAdded(const QString &udi)
++{
++    Solid::Device device(udi);
++
++    QStringList interestingDesktopFiles;
++    //search in all desktop configuration file if the device inserted is a correct device
++    foreach (QString path, files) {
++        KDesktopFile cfg(path);
++        QString string_predicate = cfg.desktopGroup().readEntry("X-KDE-Solid-Predicate");
++        //kDebug()<<string_predicate;
++        Solid::Predicate predicate = Solid::Predicate::fromString(string_predicate);
++        if (predicate.matches(device)) {
++            new_device=true;
++            interestingDesktopFiles<<path;
++        }
++    }
++
++    if (new_device) {
++        //kDebug()<<device.product();
++        //kDebug()<<device.vendor();
++        //kDebug()<< "number of interesting desktop file : " << interestingDesktopFiles.size();
++        setData(udi, "added", true);
++        setData(udi, "udi", device.udi());
++
++        if (device.vendor().length()==0) {
++            setData(udi, "text", device.product());
++        } else {
++            setData(udi, "text", device.vendor() + ' ' + device.product());
++        }
++        setData(udi, "icon", device.icon());
++        setData(udi, "predicateFiles", interestingDesktopFiles);
++
++        kDebug() << "add hardware solid : " << udi;
++        checkForUpdates();
++    }
++
++    new_device=false;
++}
++
++void HotplugEngine::onDeviceRemoved(const QString &udi)
++{
++    removeSource(udi);
++    Solid::Device device(udi);
++
++    kDebug() << "remove hardware solid : " << udi;
++
++    checkForUpdates();
++}
++
++#include "hotplugengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/hotplug/CMakeLists.txt
+@@ -0,0 +1,9 @@
++set(hotplug_engine_SRCS
++    hotplugengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_hotplug ${hotplug_engine_SRCS})
++target_link_libraries(plasma_engine_hotplug plasma ${KDE4_KDECORE_LIBS} ${KDE4_SOLID_LIBS})
++
++install(TARGETS plasma_engine_hotplug DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-hotplug.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
+--- /dev/null
++++ b/plasma/dataengines/hotplug/hotplugengine.h
+@@ -0,0 +1,50 @@
++/*
++ * Copyright (C) 2007 Menard Alexis <darktears31 at gmail.com>
++ *
++ * This program is free software you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB.  If not, write to
++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301, USA.
++*/
++
++
++#ifndef SOLIDNOTIFIERENGINE_H
++#define SOLIDNOTIFIERENGINE_H
++
++#include <QObject>
++#include <QString>
++#include <QList>
++
++#include "plasma/dataengine.h"
++
++/**
++ * This class is connected with solid, filter devices and provide signal with source for applet in Plasma
++ */
++class HotplugEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++    public:
++        HotplugEngine( QObject* parent, const QVariantList& args);
++        ~HotplugEngine();
++    protected slots :
++        void onDeviceAdded(const QString &udi);
++        void onDeviceRemoved(const QString &udi);
++    private :
++        QStringList files;
++        bool new_device;
++};
++
++K_EXPORT_PLASMA_DATAENGINE(hotplug, HotplugEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/dict/dictengine.h
+@@ -0,0 +1,62 @@
++/*
++ *   Copyright (C) 2007 Thomas Georgiou <TAGeorgiou at gmail.com> and Jeff Cooper <weirdsox11 at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef DICTENGINE_H
++#define DICTENGINE_H
++#include <plasma/dataengine.h>
++#include <QMap>
++#include <QString>
++#include <QList>
++class QTcpSocket;
++
++/**
++ * This class evaluates the basic expressions given in the interface.
++ */
++
++
++class DictEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++    public:
++        DictEngine( QObject* parent, const QVariantList& args );
++        ~DictEngine();
++        void setDict(const QString &dict);
++        void setServer(const QString &server);
++        QHash<QString, QString> *dictHash;
++
++    protected:
++        bool sourceRequested(const QString &word);
++
++    protected slots:
++	void getDefinition();
++        void socketClosed();
++        void getDicts();
++
++    private:
++	QString parseToHtml(QByteArray &text);
++	QTcpSocket *tcpSocket;
++	QString currentWord;
++	QString dictName;
++        QString serverName;
++
++};
++
++K_EXPORT_PLASMA_DATAENGINE(dict, DictEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/dict/Messages.sh
+@@ -0,0 +1,2 @@
++#! /usr/bin/env bash
++$XGETTEXT *.cpp -o $podir/plasma_engine_dict.pot
+--- /dev/null
++++ b/plasma/dataengines/dict/plasma-engine-dict.desktop
+@@ -0,0 +1,42 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Dictionary Data Engine
++Name[el]=Μηχανή δεδομένων λεξικού
++Name[et]=Sõnaraamatu andmete mootor
++Name[ga]=Inneall Sonraí Foclóra
++Name[ja]=辞書データエンジン
++Name[kk]=Сөздік деректер тетігі
++Name[km]=ម៉ាស៊ីន​ទិន្នន័យ​វចនានុក្រម
++Name[ko]=사전 데이터 엔진
++Name[nb]=Ordboksdata-motor
++Name[nds]=Wöörbook-Hanteerkarn
++Name[nl]=Woordenboek (gegevensengine)
++Name[nn]=Ordboksdatamotor
++Name[pt]=Motor de Dados do Dicionário
++Name[pt_BR]=Mecanismo de Dados do Dicionário
++Name[sv]=Datagränssnitt för ordlista
++Name[x-test]=xxDictionary Data Enginexx
++Name[zh_CN]=字典数据引擎
++Name[zh_TW]=字典資料引擎
++Comment=Look up word meanings
++Comment[el]=Αναζήτηση σημασίας λέξεων
++Comment[et]=Sõna tähenduse otsimine
++Comment[ja]=単語の意味を調べる
++Comment[kk]=Сөздің мәнін қарастыру
++Comment[km]=រក​មើល​អត្ថន័យ​របស់​ពាក្យ
++Comment[ko]=단어의 뜻 찾기
++Comment[nb]=Slåopp betydningen av ord
++Comment[nds]=Woortbedüden naslaan
++Comment[nl]=Zoek de betekenis van woorden op
++Comment[nn]=Slå opp tydinga til ord
++Comment[pt]=Procurar os significados das palavras
++Comment[pt_BR]=Procurar os significados das palavras
++Comment[sv]=Slå upp ords betydelse
++Comment[x-test]=xxLook up word meaningsxx
++Comment[zh_CN]=查阅单词含义
++Comment[zh_TW]=尋找單字的意義
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=accessories-dictionary
++X-KDE-Library=plasma_engine_dict
++X-EngineName=dict
+--- /dev/null
++++ b/plasma/dataengines/dict/dictengine.cpp
+@@ -0,0 +1,235 @@
++/*
++ *   Copyright (C) 2007 Thomas Georgiou <TAGeorgiou at gmail.com> and Jeff Cooper <weirdsox11 at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "dictengine.h"
++#include <iostream>
++
++#include <QtNetwork/QTcpSocket>
++#include <KDebug>
++#include <KLocale>
++
++#include <plasma/datacontainer.h>
++
++DictEngine::DictEngine(QObject* parent, const QVariantList& args)
++    : Plasma::DataEngine(parent),
++      dictHash(0),
++      tcpSocket(0)
++{
++    Q_UNUSED(args)
++    serverName="dict.org"; //In case we need to switch it later
++    dictName="wn"; //Default, good dictionary
++}
++
++DictEngine::~DictEngine()
++{
++}
++
++void DictEngine::setDict(const QString &dict)
++{
++	dictName=dict;
++}
++
++void DictEngine::setServer(const QString &server)
++{
++    serverName=server;
++}
++
++void DictEngine::getDefinition()
++{
++      if(currentWord == QLatin1String("about"))
++      {
++          setData(currentWord, "gcide", "<!--PAGE START--><!--DEFINITION START--><dl><dt><b>Developers</b></dt><!--PAGE START--><dd>KDE4 Dictionary Applet for Plasma was written by <i>Thomas Georgiou</i> and <i>Jeff Cooper</i></dd></dl>");
++            return;
++      }
++
++      tcpSocket->waitForReadyRead();
++      tcpSocket->readAll();
++      QByteArray ret;
++
++      tcpSocket->write(QByteArray("DEFINE "));
++      tcpSocket->write(dictName.toAscii());
++      tcpSocket->write(QByteArray(" \""));
++      tcpSocket->write(currentWord.toAscii());
++      tcpSocket->write(QByteArray("\"\n"));
++      tcpSocket->flush();
++
++      while (!ret.contains("250") && !ret.contains("552"))
++      {
++        tcpSocket->waitForReadyRead();
++        ret += tcpSocket->readAll();
++      }
++
++      connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(socketClosed()));
++      tcpSocket->disconnectFromHost();
++      setData(currentWord, dictName, parseToHtml(ret));
++}
++
++
++QString DictEngine::parseToHtml(QByteArray &text)
++{
++      QList<QByteArray> retLines = text.split('\n');
++      QString def;
++      if(currentWord == QLatin1String("plasma")) //EASTER EGG!
++      {
++          def += "<dl><!--PAGE START--><!--DEFINITION START--><dt><b>Plasma</b>  \\Plas\"ma\\, a.(for awesome)</dt><!--PAGE START--><dd>OOH! I know that one! Plasma is that awesome new desktop thing for KDE4! Oh wait, you want an actual definition? Here, No fun...</dd></dl><br />";
++      }
++      def += "<dl>\n";
++
++      bool isFirst=true;
++      QString wordRegex; //case insensitive regex of the word
++      for(int i=0;i<currentWord.size();i++)
++      {
++          wordRegex += ('['+QString(currentWord[i].toUpper())+QString(currentWord[i].toLower())+']');
++      }
++
++      while (!retLines.empty()) //iterate through all the lines
++      {
++          QString currentLine = QString(retLines.takeFirst());
++          if (currentLine.startsWith("552")) //if no match was found
++          {
++              def += "<dt>";
++              def += i18n("<b>No match found for %1 in database "+dictName.toAscii()+".</b>\n",
++                          currentWord).toUtf8();
++              def += "</dt>";
++              break;
++          }
++          if (currentLine.startsWith("151")) //begin definition
++          {
++              isFirst = true;
++              continue;
++          }
++          if (currentLine.startsWith('.')) //end definition
++          {
++              def += "</dd><!--PERIOD-->";
++              continue;
++          }
++          if (!(currentLine.startsWith("150") || currentLine.startsWith("151")// if it is a definition line
++             || currentLine.startsWith("250") || currentLine.startsWith("552")))
++          {
++              currentLine = currentLine.trimmed();
++              if (currentLine.startsWith("1."))
++                  def += "<br />";
++              if (currentLine.contains(QRegExp("^([1-9]{1,2}\\.)")))
++                  def += "<br />";
++              currentLine.replace(QRegExp("\\{([A-Za-z ]+)\\}"), "<a href=\"\\1\" style=\"color: #0000FF\" >\\1</a>");
++              currentLine.replace(QRegExp("^([1-9]{1,2}\\.)"), "<!--PAGE START--><b>\\1</b>");
++              currentLine.replace(QRegExp("((^| |\\.)"+wordRegex+"( |\\.|(i?e)?s|$))"), "<b>\\1</b>"); //the i?e?s is for most plurals... i'll fix it soon
++              currentLine.replace(QRegExp("(^| |\\.)(\\[[^]]+\\])( |\\.|$)"), "<i>\\2</i>");
++
++              //currentLine.replace(currentWord, "<b>"+currentWord+"</b>", Qt::CaseInsensitive);
++
++              if(isFirst)
++              {
++                  def += "<!--PAGE START--><!--DEFINITION START--><dt>" + currentLine.toAscii() + "</dt>\n<dd>\n";
++                  isFirst = false;
++                  continue;
++              }
++
++              if(currentLine == "." || currentLine.isEmpty())
++                  def += "\n<br />\n";
++              else
++                  def += currentLine.toAscii() + '\n';
++          }
++
++      }
++      def+="</dl>";
++      return def;
++}
++
++void DictEngine::getDicts()
++{
++    QMap<QString, QString> theHash;
++    tcpSocket->waitForReadyRead();
++    tcpSocket->readAll();
++    QByteArray ret;
++
++    tcpSocket->write(QByteArray("SHOW DB\n"));;
++    tcpSocket->flush();
++
++    tcpSocket->waitForReadyRead();
++    while (!ret.contains("250"))
++      {
++        tcpSocket->waitForReadyRead();
++        ret += tcpSocket->readAll();
++      }
++
++    QList<QByteArray> retLines = ret.split('\n');
++
++    QString tmp1, tmp2;
++
++
++    while (!retLines.empty())
++    {
++        QString curr = QString(retLines.takeFirst());
++        if (curr.startsWith("554"))
++        {
++            //TODO: What happens if no DB available?
++            //TODO: Eventually there will be functionality to change the server...
++            break;
++        }
++        if (!curr.startsWith('-'))
++        {
++            curr = curr.trimmed();
++            tmp1=curr.section(' ',0,1);
++            tmp2=curr.section(' ',1);
++  //          theHash.insert(tmp1, tmp2);
++            kDebug() << tmp1 + "  " + tmp2;
++            setData("showDictionaries",tmp1,tmp2);
++        }
++    }
++    connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(socketClosed()));
++    tcpSocket->disconnectFromHost();
++//    setData("showDictionaries", "dictionaries", QByteArray(theHash);
++}
++
++
++
++void DictEngine::socketClosed()
++{
++    tcpSocket->deleteLater();
++    tcpSocket = 0;
++}
++
++bool DictEngine::sourceRequested(const QString &word)
++{
++      if (tcpSocket && currentWord != word)
++      {
++          tcpSocket->abort(); //stop if lookup is in progress and new word is requested
++          tcpSocket->deleteLater();
++          tcpSocket = 0;
++      }
++      currentWord = word;
++      if (currentWord.simplified().count() != 0)
++      {
++          setData(currentWord, dictName, QString());
++          tcpSocket = new QTcpSocket(this);
++          tcpSocket->abort();
++          if (currentWord == "showDictionaries")
++          {
++              connect(tcpSocket, SIGNAL(connected()), this, SLOT(getDicts()));
++          } else {
++              connect(tcpSocket, SIGNAL(connected()), this ,SLOT(getDefinition()));
++          }
++          tcpSocket->connectToHost(serverName, 2628);
++      } else {
++          setData(currentWord, dictName, QString());
++      }
++      return true;
++}
++
++#include "dictengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/dict/buggywords
+@@ -0,0 +1 @@
++which
+--- /dev/null
++++ b/plasma/dataengines/dict/CMakeLists.txt
+@@ -0,0 +1,12 @@
++project(plasma-dictengine)
++
++set(dict_engine_SRCS
++    dictengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_dict ${dict_engine_SRCS})
++target_link_libraries(plasma_engine_dict ${KDE4_KDECORE_LIBS} plasma)
++
++install(TARGETS plasma_engine_dict DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-dict.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/filebrowser/filebrowserengine.h
+@@ -0,0 +1,60 @@
++/*
++ *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU General Public License version 2 (or, at
++ *   your option, any later version) as published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef FILEBROWSERENGINE_H
++#define FILEBROWSERENGINE_H
++
++#include "plasma/dataengine.h"
++#include <QMap>
++
++class KDirWatch;
++
++/**
++ * This class evaluates the basic expressions given in the interface.
++ */
++class FileBrowserEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++public:
++    FileBrowserEngine( QObject* parent, const QVariantList& args );
++    ~FileBrowserEngine();
++
++protected:
++    bool sourceRequested(const QString &path);
++    void init();
++
++protected slots:
++    void dirDirty (const QString &path);
++    void dirCreated(const QString &path);
++    void dirDeleted(const QString &path);
++
++private:
++    enum EventType {INIT, DIRTY, CREATED, DELETED};
++    enum ObjectType {NOTHING, FILE, DIRECTORY};
++
++    KDirWatch * m_dirWatch;
++    void updateData(const QString &path, EventType event);
++    void clearData(const QString &path);
++
++    //QMap < QString, QStringList > m_regiteredListeners;
++};
++
++K_EXPORT_PLASMA_DATAENGINE(filebrowser, FileBrowserEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/filebrowser/plasma-engine-filebrowser.desktop
+@@ -0,0 +1,39 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=File and Directory Browser Engine
++Name[el]=Μηχανή περιήγησης αρχείων και φακέλων
++Name[et]=Faili- ja kataloogisirvija mootor
++Name[ja]=ファイルとディレクトリのブラウザエンジン
++Name[km]=ម៉ាស៊ីន​រុករក​ថត និង​ឯកសារ
++Name[ko]=파일 및 디렉터리 탐색 엔진
++Name[nb]=Motor for blaing i filer og mapper
++Name[nds]=Kiekerkarn för Dateien un Ornern
++Name[nl]=Engine voor het bladeren door mappen en bestanden
++Name[nn]=Motor for fil- og mappelesing
++Name[pt]=Motor de Navegação em Ficheiros e Pastas
++Name[pt_BR]=Mecanismo de Navegação em Arquivos e Pastas
++Name[sv]=Gränssnitt för fil- och katalogbläddring
++Name[x-test]=xxFile and Directory Browser Enginexx
++Name[zh_CN]=文件和目录浏览器引擎
++Name[zh_TW]=檔案與目錄瀏覽器引擎
++Comment=Info about files and directories for Plasmoids
++Comment[el]=Πληροφορίες για αρχεία και καταλόγους για πλασμοειδή
++Comment[et]=Failide ja kataloogide info plasmoididele
++Comment[ja]=Plasmoid のためのファイルとディレクトリに関する情報
++Comment[km]=ព័ត៌មាន​អំពី​ឯកសារ និង​ថត​សម្រាប់ Plasmoids
++Comment[ko]=Plasmoid를 위한 파일과 디렉터리 정보
++Comment[nb]=Informasjon om filer og mapper for Plasmoids
++Comment[nds]=Infos över Dateien un Ornern för Plasmoiden
++Comment[nl]=Informatie over bestanden en mappen voor Plasmoids
++Comment[nn]=Informasjon om filer og mapper for Plasmoidar
++Comment[pt]=Informação sobre os ficheiros e pastas nos Plasmóides
++Comment[pt_BR]=Informações sobre arquivos e diretórios, para os Plasmoids
++Comment[sv]=Information om filer och kataloger för Plasmoider
++Comment[x-test]=xxInfo about files and directories for Plasmoidsxx
++Comment[zh_CN]=Plasmoids 下关于文件和目录的信息
++Comment[zh_TW]=Plasmoids 關於檔案與目錄的資訊
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=unknown
++X-KDE-Library=plasma_engine_filebrowser
++X-EngineName=filebrowser
+--- /dev/null
++++ b/plasma/dataengines/filebrowser/filebrowserengine.cpp
+@@ -0,0 +1,159 @@
++/*
++ *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU General Public License version 2 (or, at
++ *   your option, any later version) as published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "filebrowserengine.h"
++
++#include "plasma/datacontainer.h"
++
++#include <QDir>
++#include <KDirWatch>
++#include <KDebug>
++#include <KFileMetaInfo>
++
++#define InvalidIfEmpty(A) ((A.isEmpty())?(QVariant()):(QVariant(A)))
++#define forMatchingSources for (DataEngine::SourceDict::iterator it = sources.begin(); it != sources.end(); it++) \
++  if (dir == QDir(it.key()))
++
++FileBrowserEngine::FileBrowserEngine(QObject* parent, const QVariantList& args) :
++    Plasma::DataEngine(parent), m_dirWatch(NULL)
++{
++    Q_UNUSED(args)
++
++    m_dirWatch = new KDirWatch(this);
++    connect(m_dirWatch, SIGNAL(created(
++        const QString &)), this, SLOT(dirCreated(const QString &)));
++    connect(m_dirWatch, SIGNAL(deleted(
++        const QString &)), this, SLOT(dirDeleted(const QString &)));
++    connect(m_dirWatch, SIGNAL(dirty(
++        const QString &)), this, SLOT(dirDirty(const QString &)));
++}
++
++FileBrowserEngine::~FileBrowserEngine()
++{
++    delete m_dirWatch;
++}
++
++void FileBrowserEngine::init()
++{
++    kDebug() << "init() called";
++}
++
++bool FileBrowserEngine::sourceRequested(const QString &path)
++{
++    kDebug() << "source requested() called: "<< path;
++    m_dirWatch->addDir(path);
++    setData(path, "type", QVariant("unknown"));
++    updateData (path, INIT);
++    return true;
++}
++
++void FileBrowserEngine::dirDirty(const QString &path)
++{
++    updateData(path, DIRTY);
++}
++
++void FileBrowserEngine::dirCreated(const QString &path)
++{
++    updateData(path, CREATED);
++}
++
++void FileBrowserEngine::dirDeleted(const QString &path)
++{
++    updateData(path, DELETED);
++}
++
++void FileBrowserEngine::updateData(const QString &path, EventType event)
++{
++    Q_UNUSED(event)
++
++    ObjectType type = NOTHING;
++    if (QDir(path).exists()) {
++        type = DIRECTORY;
++    } else if (QFile::exists(path)) {
++        type = FILE;
++    }
++
++    DataEngine::SourceDict sources = sourceDict();
++
++    QDir dir(path);
++    clearData(path);
++
++    if (type == DIRECTORY) {
++        kDebug() << "directory info processing: "<< path;
++        if (dir.isReadable()) {
++            QStringList visibleFiles = dir.entryList(QDir::Files, QDir::Name);
++            QStringList allFiles = dir.entryList(QDir::Files | QDir::Hidden,
++                    QDir::Name);
++
++            QStringList visibleDirectories = dir.entryList(QDir::Dirs
++                    | QDir::NoDotAndDotDot, QDir::Name);
++            QStringList allDirectories = dir.entryList(QDir::Dirs
++                    | QDir::NoDotAndDotDot | QDir::Hidden, QDir::Name);
++
++            forMatchingSources {
++                kDebug() << "MATCH";
++                it.value()->setData("item.type", QVariant("directory"));
++
++                it.value()->setData("directories.visible", InvalidIfEmpty(visibleDirectories));
++                it.value()->setData("directories.all", InvalidIfEmpty(allDirectories));
++                it.value()->setData("files.visible", InvalidIfEmpty(visibleFiles));
++                it.value()->setData("files.all", InvalidIfEmpty(allFiles));
++            }
++        }
++    } else if (type == FILE) {
++        kDebug() << "file info processing: "<< path;
++        KFileMetaInfo kfmi(path, QString::null, KFileMetaInfo::Everything);
++        if (kfmi.isValid()) {
++            kDebug() << "METAINFO: " << kfmi.keys();
++
++            forMatchingSources {
++                kDebug() << "MATCH";
++                it.value()->setData("item.type", QVariant("file"));
++
++                for (QHash< QString, KFileMetaInfoItem >::const_iterator i = kfmi.items().constBegin(); i != kfmi.items().constEnd(); i++) {
++                    it.value()->setData(i.key(), i.value().value());
++                }
++            }
++        }
++    } else {
++        forMatchingSources {
++            it.value()->setData("item.type", QVariant("imaginary"));
++        }
++    };
++
++    checkForUpdates();
++
++}
++
++void FileBrowserEngine::clearData(const QString &path)
++{
++    QDir dir(path);
++    DataEngine::SourceDict sources = sourceDict();
++    for (DataEngine::SourceDict::iterator it = sources.begin(); it
++            != sources.end(); it++) {
++        if (dir == QDir(it.key())) {
++            kDebug() << "matched: "<< path << " "<< it.key();
++            it.value()->clearData();
++
++        } else {
++            kDebug() << "didn't match: "<< path << " "<< it.key();
++        }
++    }
++}
++
++#include "filebrowserengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/filebrowser/CMakeLists.txt
+@@ -0,0 +1,10 @@
++set(filebrowser_engine_SRCS
++    filebrowserengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_filebrowser ${filebrowser_engine_SRCS})
++target_link_libraries(plasma_engine_filebrowser ${KDE4_KDECORE_LIBS} plasma)
++
++install(TARGETS plasma_engine_filebrowser DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-filebrowser.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/tasks/tasksengine.h
+@@ -0,0 +1,56 @@
++/*
++ *   Copyright (C) 2007 Robert Knight <robertknight at gmail.com> 
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef TASKSENGINE_H
++#define TASKSENGINE_H
++
++// Qt
++#include <QObject>
++#include <QString>
++#include <QList>
++
++// Plasma
++#include <plasma/dataengine.h>
++#include <taskmanager/taskmanager.h>
++
++/**
++ * This class evaluates the basic expressions given in the interface.
++ */
++class TasksEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++    public:
++		TasksEngine( QObject* parent, const QVariantList& args);
++
++    protected:
++        virtual void init();
++
++    private slots:
++        void taskChanged();
++        void taskAdded(Task::TaskPtr task);
++        void taskRemoved(Task::TaskPtr task);
++
++    private:
++        void connectTask(Task::TaskPtr task);
++        void setDataForTask(Task::TaskPtr task);
++};
++
++K_EXPORT_PLASMA_DATAENGINE(tasks, TasksEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/tasks/plasma-engine-tasks.desktop
+@@ -0,0 +1,20 @@
++[Desktop Entry]
++Name=Task Management Data Engine
++Name[et]=Tegumihalduse andmete mootor
++Name[ja]=タスク管理データエンジン
++Name[km]=ម៉ាស៊ីន​ទិន្នន័យ​ការ​គ្រប់គ្រង​ថាមពល
++Name[ko]=작업 관리 데이터 엔진
++Name[nb]=Motor for oppgavedata
++Name[nds]=Opgavenpleeg-Hanteerkarn
++Name[nl]=Taakbeheer (gegevensengine)
++Name[pt]=Motor de Dados de Gestão de Tarefas
++Name[pt_BR]=Mecanismo de Dados de Gerenciamento Tarefas
++Name[sv]=Datagränssnitt för aktivitetshantering
++Name[x-test]=xxTask Management Data Enginexx
++Name[zh_CN]=任务管理数据引擎
++Name[zh_TW]=工作管理資料引擎
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=alarmclock
++X-KDE-Library=plasma_engine_tasks
++X-EngineName=tasks
+--- /dev/null
++++ b/plasma/dataengines/tasks/tasksengine.cpp
+@@ -0,0 +1,81 @@
++/*
++ *   Copyright (C) 2007 Robert Knight <robertknight at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "tasksengine.h"
++
++#include <KDebug>
++#include <KLocale>
++
++#include <plasma/datacontainer.h>
++
++using namespace Plasma;
++
++TasksEngine::TasksEngine(QObject* parent, const QVariantList& args)
++    : Plasma::DataEngine(parent)
++{
++}
++void TasksEngine::connectTask( Task::TaskPtr task )
++{
++        connect( task.constData() , SIGNAL(changed()) , this , SLOT(taskChanged()) );
++}
++void TasksEngine::init()
++{
++    foreach( Task::TaskPtr task , TaskManager::self()->tasks().values() ) {
++        connectTask(task);
++        setDataForTask(task);
++    }
++
++    connect( TaskManager::self() , SIGNAL(taskAdded(Task::TaskPtr)) , this , SLOT(taskAdded(Task::TaskPtr)) );
++    connect( TaskManager::self() , SIGNAL(taskRemoved(Task::TaskPtr)) , this , SLOT(taskRemoved(Task::TaskPtr)) );
++
++}
++
++void TasksEngine::taskAdded(Task::TaskPtr task)
++{
++    connectTask(task);
++    setDataForTask(task);
++}
++void TasksEngine::taskRemoved(Task::TaskPtr task)
++{
++    removeSource( QString::number(task->window()) );
++}
++void TasksEngine::taskChanged()
++{
++    Task* task = qobject_cast<Task*>(sender());
++
++    Q_ASSERT(task);
++
++    setDataForTask( Task::TaskPtr(task) );
++}
++
++void TasksEngine::setDataForTask(Task::TaskPtr task)
++{
++    Q_ASSERT( task );
++
++    QString name = QString::number(task->window());
++
++    const QMetaObject* metaObject = task->metaObject();
++
++    for ( int i = 0 ; i < metaObject->propertyCount() ; i++ ) {
++        QMetaProperty property = metaObject->property(i);
++
++        setData(name,property.name(),property.read(task.constData()));
++    }
++}
++
++#include "tasksengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/tasks/CMakeLists.txt
+@@ -0,0 +1,11 @@
++set(tasks_engine_SRCS
++    tasksengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_tasks ${tasks_engine_SRCS})
++target_link_libraries(plasma_engine_tasks ${KDE4_KDEUI_LIBS} plasma
++                      taskmanager)
++
++install(TARGETS plasma_engine_tasks DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-tasks.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/places/placesengine.h
+@@ -0,0 +1,58 @@
++/*
++ *   Copyright (C) 2007 Alex Merry <huntedhacker at tiscali.co.uk>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef PLACESENGINE_H
++#define PLACESENGINE_H
++
++#include <plasma/dataengine.h>
++
++#include <QtCore/QMap>
++#include <QtCore/QString>
++#include <QtCore/QStringList>
++
++#include <kfileplacesmodel.h>
++
++class PlacesEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++public:
++    PlacesEngine(QObject* parent, const QVariantList& args);
++    ~PlacesEngine();
++
++private Q_SLOTS:
++    // KFilePlacesModel
++    void modelReset();
++    void placesAdded(const QModelIndex &parent, int start, int end);
++
++    // KFreeDiskSpace
++    void diskFreeSpaceFound(const QString &mountPoint,
++                            quint64 kBSize,
++                            quint64 kBUsed,
++                            quint64 kBAvailable);
++
++private:
++    void tryGetFreeSpace(const KUrl &url);
++
++    void sendData();
++
++    KFilePlacesModel m_placesModel;
++};
++
++
++#endif // PLACESENGINE_H
+--- /dev/null
++++ b/plasma/dataengines/places/TODO
+@@ -0,0 +1,2 @@
++* periodic refresh? KFilePlacesModel doesn't broadcast
++  device setups etc. between programs
+--- /dev/null
++++ b/plasma/dataengines/places/CMakeLists.txt
+@@ -0,0 +1,10 @@
++set(places_engine_SRCS
++    placesengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_places ${places_engine_SRCS})
++target_link_libraries(plasma_engine_places plasma ${KDE4_KFILE_LIBS})
++
++install(TARGETS plasma_engine_places DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-places.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/places/plasma-engine-places.desktop
+@@ -0,0 +1,36 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Places Data Engine
++Name[et]=Asukohtade andmete mootor
++Name[ga]=Inneall Sonraí Áiteanna
++Name[ja]=場所データエンジン
++Name[km]=ដាក់​ម៉ាស៊ីន​ទិន្នន័យ
++Name[ko]=장소 데이터 엔진
++Name[nb]=Steder datamotor
++Name[nds]=Steden-Hanteerkarn
++Name[nl]=Locaties (gegevensengine)
++Name[pt]=Motor de Dados dos Locais
++Name[pt_BR]=Mecanismo de Dados de Locais
++Name[sv]=Datagränssnitt för platser
++Name[x-test]=xxPlaces Data Enginexx
++Name[zh_TW]=Places 資料引擎
++Comment=Places data for Plasmoids
++Comment[et]=Asukohtade andmed plasmoididele
++Comment[ga]=Sonraí áiteanna le haghaidh Plasmoids
++Comment[ja]=Plasmoid のための場所データ
++Comment[km]=ដាក់​ម៉ាស៊ីន​ទិន្នន័យ Plasmoids
++Comment[ko]=Plasmoid를 위한 장소 데이터
++Comment[nb]=Stedsdata for Plasmoids
++Comment[nds]=Steeddaten för Plasmoiden
++Comment[nl]=Locatiegegevens voor Plasmoids
++Comment[pt]=Dados dos locais para os Plasmóides
++Comment[pt_BR]=Dados de locais para os Plasmoids
++Comment[sv]=Platsdata för Plasmoider
++Comment[x-test]=xxPlaces data for Plasmoidsxx
++Comment[zh_CN]=Plasmoids 的位置数据
++Comment[zh_TW]=Plasmoid 的 Places 資料
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=folder
++X-KDE-Library=plasma_engine_places
++X-EngineName=places
+--- /dev/null
++++ b/plasma/dataengines/places/placesengine.cpp
+@@ -0,0 +1,135 @@
++/*
++ *   Copyright (C) 2007 Alex Merry <huntedhacker at tiscali.co.uk>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++// Local includes
++#include "placesengine.h"
++
++// Qt includes
++#include <QtCore/QString>
++#include <QtCore/QVariantList>
++
++
++// KDE includes
++#include <KDiskFreeSpace>
++
++PlacesEngine::PlacesEngine(QObject* parent, const QVariantList&)
++    : Plasma::DataEngine(parent)
++{
++    // dataChanged(), rowsRemoved() and setupDone() signals from
++    // KFilePlacesModel are not propagated between applications.
++    // layoutChanged() is not emitted at all.
++    connect(&m_placesModel, SIGNAL(modelReset()),
++            this, SLOT(modelReset()));
++    connect(&m_placesModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
++            this, SLOT(placesAdded(QModelIndex,int,int)));
++
++    sendData();
++}
++
++PlacesEngine::~PlacesEngine()
++{
++}
++
++void PlacesEngine::modelReset()
++{
++    kDebug() << "Model reset";
++
++    clearSources();
++}
++
++void PlacesEngine::placesAdded(const QModelIndex &parent, int start, int end)
++{
++    kDebug() << "Places added:" << parent << "from" << start << "to" << end;
++    sendData();
++}
++
++void PlacesEngine::diskFreeSpaceFound(const QString &mountPoint,
++                                      quint64 kBSize,
++                                      quint64 kBUsed,
++                                      quint64 kBAvailable)
++{
++    kDebug() << "Sir! We got one!" << mountPoint + ": "
++        << "size =" << kBSize
++        << "used =" << kBUsed
++        << "avail =" << kBAvailable;
++    QString source;
++
++    foreach (QString testsource, sources()) {
++        kDebug() << "Testing" << query(testsource)["url"];
++        KUrl url(query(testsource)["url"].toString());
++        if (url.isLocalFile() && url.path() == mountPoint) {
++            source = testsource;
++            break;
++        }
++    }
++
++    kDebug() << "Source:" << source;
++    if (!source.isEmpty()) {
++        setData(source, "kBSize", kBSize);
++        setData(source, "kBUsed", kBUsed);
++        setData(source, "kBAvailable", kBAvailable);
++    }
++}
++
++void PlacesEngine::tryGetFreeSpace(const KUrl &url)
++{
++    if (!url.isLocalFile()) {
++        return;
++    }
++
++    kDebug() << "Requesting free space on" << url;
++
++    // suicidal object: don't need to worry about cleanup
++    KDiskFreeSpace *diskFreeSpace = new KDiskFreeSpace(this);
++    connect(diskFreeSpace,
++            SIGNAL(foundMountPoint(QString,quint64,quint64,quint64)),
++            this,
++            SLOT(diskFreeSpaceFound(QString,quint64,quint64,quint64)));
++    diskFreeSpace->readDF(url.path());
++}
++
++void PlacesEngine::sendData()
++{
++    int rowCount = m_placesModel.rowCount();
++    for (int i = 0; i < rowCount; ++i) {
++        QModelIndex index = m_placesModel.index(i,0);
++
++        Data map;
++
++        QString source = QString::number(i);
++
++        setData(source, "name", m_placesModel.text(index));
++        setData(source, "url", m_placesModel.url(index).url());
++        setData(source, "icon", m_placesModel.icon(index));
++        setData(source, "hidden",
++                m_placesModel.data(index, KFilePlacesModel::HiddenRole));
++        setData(source, "setupNeeded",
++                m_placesModel.data(index, KFilePlacesModel::SetupNeededRole));
++
++        if (m_placesModel.deviceForIndex(index).isValid()) {
++            setData(source, "isDevice", true);
++            tryGetFreeSpace(m_placesModel.url(index));
++        } else {
++            setData(source, "isDevice", false);
++        }
++    }
++}
++
++K_EXPORT_PLASMA_DATAENGINE(places, PlacesEngine)
++
++
+--- /dev/null
++++ b/plasma/dataengines/mouse/mouseengine.cpp
+@@ -0,0 +1,100 @@
++/*
++ *   Copyright © 2007 Fredrik Höglund <fredrik at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include <QCursor>
++
++#include "mouseengine.h"
++#include "mouseengine.moc"
++
++#include <config-X11.h>
++
++#ifdef HAVE_XFIXES
++#  include "cursornotificationhandler.h"
++#endif
++
++
++MouseEngine::MouseEngine(QObject* parent, const QVariantList& args)
++    : Plasma::DataEngine(parent), timerId(0), handler(0)
++{
++    Q_UNUSED(args)
++}
++
++
++MouseEngine::~MouseEngine()
++{
++    if (timerId)
++        killTimer(timerId);
++
++    delete handler;
++}
++
++
++QStringList MouseEngine::sources() const
++{
++   QStringList list;
++
++   list << QLatin1String("Position");
++#ifdef HAVE_XFIXES
++   list << QLatin1String("Name");
++#endif
++
++   return list;
++}
++
++
++void MouseEngine::init()
++{
++    if (!timerId)
++        timerId = startTimer(40);
++
++    // Init cursor position
++    QPoint pos = QCursor::pos();
++    setData(QLatin1String("Position"), QVariant(pos));
++    lastPosition = pos;
++
++#ifdef HAVE_XFIXES
++    handler = new CursorNotificationHandler;
++    connect(handler, SIGNAL(cursorNameChanged(QString)), SLOT(updateCursorName(QString)));
++
++    setData(QLatin1String("Name"), QVariant(handler->cursorName()));
++#endif
++
++    checkForUpdates();
++}
++
++
++void MouseEngine::timerEvent(QTimerEvent *)
++{
++    QPoint pos = QCursor::pos();
++
++    if (pos != lastPosition)
++    {
++        setData(QLatin1String("Position"), QVariant(pos));
++        lastPosition = pos;
++
++        checkForUpdates();
++    }
++}
++
++
++void MouseEngine::updateCursorName(const QString &name)
++{
++    setData(QLatin1String("Name"), QVariant(name));
++    checkForUpdates();
++}
++
+--- /dev/null
++++ b/plasma/dataengines/mouse/cursornotificationhandler.cpp
+@@ -0,0 +1,112 @@
++/*
++ *   Copyright © 2007 Fredrik Höglund <fredrik at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include <QX11Info>
++
++#include "cursornotificationhandler.h"
++#include "cursornotificationhandler.moc"
++
++#include <X11/extensions/Xfixes.h>
++
++
++/*
++ * This class is a QWidget because we need an X window to
++ * be able to receive XFixes events. We don't actually map
++ * the widget.
++ */
++
++CursorNotificationHandler::CursorNotificationHandler()
++    : QWidget(), currentName(0)
++{
++    Display *dpy = QX11Info::display();
++    int errorBase;
++    haveXfixes = false;
++
++    // Request cursor change notification events
++    if (XFixesQueryExtension(dpy, &fixesEventBase, &errorBase))
++    {
++        int major, minor;
++        XFixesQueryVersion(dpy, &major, &minor);
++
++        if (major >= 2)
++        {
++            XFixesSelectCursorInput(dpy, winId(), XFixesDisplayCursorNotifyMask);
++            haveXfixes = true;
++        }
++    }
++}
++
++
++CursorNotificationHandler::~CursorNotificationHandler()
++{
++}
++
++
++QString CursorNotificationHandler::cursorName()
++{
++    if (!haveXfixes)
++        return QString();
++
++    if (!currentName)
++    {
++        // Xfixes doesn't have a request for getting the current cursor name,
++        // but it's included in the XFixesCursorImage struct.
++        XFixesCursorImage *image = XFixesGetCursorImage(QX11Info::display());
++        currentName = image->atom;
++        XFree(image);
++    }
++
++    return cursorName(currentName);
++}
++
++
++QString CursorNotificationHandler::cursorName(Atom cursor)
++{
++    QString name;
++
++    // XGetAtomName() is a synchronous call, so we cache the name
++    // in an atom<->string map the first time we see a name
++    // to keep the X server round trips down.
++    if (names.contains(cursor))
++        name = names[cursor];
++    else
++    {
++        char *data = XGetAtomName(QX11Info::display(), cursor);
++        name = QString::fromUtf8(data);
++        XFree(data);
++
++        names.insert(cursor, name);
++    }
++
++    return name;
++}
++
++
++bool CursorNotificationHandler::x11Event(XEvent* event)
++{
++    if (event->type != fixesEventBase + XFixesCursorNotify)
++        return false;
++
++    XFixesCursorNotifyEvent *xfe = reinterpret_cast<XFixesCursorNotifyEvent*>(event);
++    currentName = xfe->cursor_name;
++
++    emit cursorNameChanged(cursorName(currentName));
++
++    return false;
++}
++
+--- /dev/null
++++ b/plasma/dataengines/mouse/mouseengine.h
+@@ -0,0 +1,53 @@
++/*
++ *   Copyright © 2007 Fredrik Höglund <fredrik at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef MOUSEENGINE_H
++#define MOUSEENGINE_H
++
++#include <plasma/dataengine.h>
++
++
++class CursorNotificationHandler;
++
++
++class MouseEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++public:
++    MouseEngine(QObject* parent, const QVariantList& args);
++    ~MouseEngine();
++
++    QStringList sources() const;
++
++protected:
++    void init();
++    void timerEvent(QTimerEvent*);
++
++private slots:
++    void updateCursorName(const QString &name);
++
++private:
++    QPoint lastPosition;
++    int timerId;
++    CursorNotificationHandler *handler;
++};
++
++K_EXPORT_PLASMA_DATAENGINE(mouse, MouseEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/mouse/cursornotificationhandler.h
+@@ -0,0 +1,53 @@
++/*
++ *   Copyright © 2007 Fredrik Höglund <fredrik at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef CURSORNOTIFICATIONHANDLER_H
++#define CURSORNOTIFICATIONHANDLER_H
++
++#include <QWidget>
++#include <QMap>
++
++#include <X11/Xlib.h>
++
++class CursorNotificationHandler : public QWidget
++{
++    Q_OBJECT
++
++public:
++    CursorNotificationHandler();
++    ~CursorNotificationHandler();
++
++    QString cursorName();
++
++signals:
++    void cursorNameChanged(const QString &name);
++
++protected:
++    bool x11Event(XEvent *);
++
++private:
++    QString cursorName(Atom cursor);
++
++private:
++    bool haveXfixes;
++    int fixesEventBase;
++    Atom currentName;
++    QMap<Atom, QString> names;
++};
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/mouse/CMakeLists.txt
+@@ -0,0 +1,19 @@
++include_directories( ${CMAKE_CURRENT_BINARY_DIR}/../../)
++
++set(mouse_engine_SRCS
++    mouseengine.cpp
++)
++
++if (X11_Xfixes_FOUND)
++    set(mouse_engine_SRCS ${mouse_engine_SRCS} cursornotificationhandler.cpp)
++endif (X11_Xfixes_FOUND)
++
++kde4_add_plugin(plasma_engine_mouse ${mouse_engine_SRCS})
++target_link_libraries(plasma_engine_mouse ${KDE4_KDEUI_LIBS} plasma)
++if (X11_Xfixes_FOUND)
++	target_link_libraries(plasma_engine_mouse ${X11_Xfixes_LIB})
++endif (X11_Xfixes_FOUND)
++
++install(TARGETS plasma_engine_mouse DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-mouse.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/mouse/plasma-engine-mouse.desktop
+@@ -0,0 +1,35 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Mouse Data Engine
++Name[et]=Hiire andmete mootor
++Name[ja]=マウスデータエンジン
++Name[km]=ម៉ាស៊ីន​ទិន្នន័យ​កណ្ដុរ
++Name[ko]=마우스 데이터 엔진
++Name[nb]=Musedata-motor
++Name[nds]=Muus-Hanteerkarn
++Name[nl]=Muis (gegevensengine)
++Name[pt]=Motor de Dados do Rato
++Name[pt_BR]=Mecanismo de Dados de Mouse
++Name[sv]=Datagränssnitt för mus
++Name[x-test]=xxMouse Data Enginexx
++Name[zh_TW]=滑鼠資料引擎
++Comment=Mouse data for Plasmoids
++Comment[et]=Hiire andmed plasmoididele
++Comment[ga]=Sonraí luiche le haghaidh Plasmoids
++Comment[ja]=Plasmoid のためのマウスデータ
++Comment[km]=ទិន្នន័យកណ្ដុរ​​សម្រាប់ Plasmoids
++Comment[ko]=Plasmoid를 위한 마우스 데이터
++Comment[nb]=Musedata for Plasmoids
++Comment[nds]=Muusdaten för Plasmoiden
++Comment[nl]=Muisgegevens voor Plasmoids
++Comment[pt]=Dados do rato para os Plasmóides
++Comment[pt_BR]=Dados de mouse para os Plasmoids
++Comment[sv]=Musdata för Plasmoider
++Comment[x-test]=xxMouse data for Plasmoidsxx
++Comment[zh_TW]=Plasmoid 的滑鼠資料
++Type=Service
++ServiceTypes=Plasma/DataEngine
++Icon=
++X-KDE-Library=plasma_engine_mouse
++X-EngineName=mouse
++
+--- /dev/null
++++ b/plasma/dataengines/powermanagement/plasma-engine-powermanagement.desktop
+@@ -0,0 +1,22 @@
++[Desktop Entry]
++Name=Powermanagement Data Engine
++Name[el]=Μηχανή δεδομένων διαχείρισης ενέργειας
++Name[et]=Voolutarbe andmete mootor
++Name[ga]=Inneall Sonraí Powermanagement
++Name[ja]=電源管理データエンジン
++Name[km]=ម៉ាស៊ីន​ទិន្នន័យ​ការ​គ្រប់គ្រង​ថាមពល
++Name[ko]=전원 관리 데이터 엔진
++Name[nb]=Motor for strømstyringsdata
++Name[nds]=Stroomkuntrull-Hanteerkarn
++Name[nl]=Energiebeheer (gegevensengine)
++Name[pt]=Motor de Dados de Gestão de Energia
++Name[pt_BR]=Mecanismo de Dados de Gerenciamento de Energia
++Name[sv]=Datagränssnitt för strömsparfunktion
++Name[x-test]=xxPowermanagement Data Enginexx
++Name[zh_CN]=电源管理数据引擎
++Name[zh_TW]=電源管理資料引擎
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=power
++X-KDE-Library=plasma_engine_powermanagement
++X-EngineName=powermanagement
+--- /dev/null
++++ b/plasma/dataengines/powermanagement/powermanagementengine.cpp
+@@ -0,0 +1,168 @@
++/*
++ *   Copyright (C) 2007 Aaron Seigo <aseigo at kde.org>
++ *   Copyright (C) 2007 Sebastian Kuegler <sebas at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "powermanagementengine.h"
++
++//solid specific includes
++#include <solid/devicenotifier.h>
++#include <solid/device.h>
++#include <solid/deviceinterface.h>
++#include <solid/battery.h>
++#include <solid/powermanagement.h>
++
++#include <KDebug>
++#include <KLocale>
++
++#include "plasma/datacontainer.h"
++
++PowermanagementEngine::PowermanagementEngine(QObject* parent, const QVariantList& args)
++        : Plasma::DataEngine(parent)
++        , m_battery(0)
++        , m_acadapter(0)
++        , m_sources(0)
++{
++    Q_UNUSED(args)
++    
++    m_sources = QStringList();
++    m_sources << I18N_NOOP("Battery") << I18N_NOOP("AC Adapter") << I18N_NOOP("Sleepstates");
++    
++    // This following call can be removed, but if we do, the
++    // data is not shown in the plasmaengineexplorer.
++    // sourceRequested("Battery");
++}
++
++PowermanagementEngine::~PowermanagementEngine()
++{}
++
++void PowermanagementEngine::init()
++{}
++
++QStringList PowermanagementEngine::sources() const 
++{
++    return m_sources;
++}
++
++bool PowermanagementEngine::sourceRequested(const QString &name)
++{
++    if (name == I18N_NOOP("Battery")) {
++        // TODO: some machines have more than one battery, right now we only catch the first
++        QList<Solid::Device> list_battery =
++                        Solid::Device::listFromType(Solid::DeviceInterface::Battery, QString());
++        if (list_battery.count() == 0) {
++            setData(I18N_NOOP("Battery"), I18N_NOOP("has Battery"), false);
++            return true;
++        }
++        foreach (Solid::Device device_battery, list_battery) {
++            setData(I18N_NOOP("Battery"), I18N_NOOP("has Battery"), true);
++            m_battery = device_battery.as<Solid::Battery>();
++            if (m_battery->type() != Solid::Battery::PrimaryBattery) {
++                kDebug() << "Some other battery found.";
++            } else {
++                kDebug() << "PMEngine::Primary battery found.";
++
++                connect(m_battery, SIGNAL(chargeStateChanged(int)), this,
++                        SLOT(updateBatteryChargeState(int)));
++                connect(m_battery, SIGNAL(chargePercentChanged(int)), this,
++                        SLOT(updateBatteryChargePercent(int)));
++                connect(m_battery, SIGNAL(plugStateChanged(bool)), this,
++                        SLOT(updateBatteryPlugState(bool)));
++
++                // Set initial values
++                updateBatteryChargeState(m_battery->chargeState());
++                updateBatteryChargePercent(m_battery->chargePercent());
++                updateBatteryPlugState(m_battery->isPlugged());
++            }
++        }
++    } else if (name == I18N_NOOP("AC Adapter")) {
++        // AC Adapter handling
++        QList<Solid::Device> list_ac =
++                        Solid::Device::listFromType(Solid::DeviceInterface::AcAdapter, QString());
++        foreach (Solid::Device device_ac, list_ac) {
++            m_acadapter = device_ac.as<Solid::AcAdapter>();
++            updateAcPlugState(m_acadapter->isPlugged());
++            connect(m_acadapter, SIGNAL(plugStateChanged(bool)), this,
++                    SLOT(updateAcPlugState(bool)));
++        }
++
++    } else if (name == I18N_NOOP("Sleepstates")) {
++        QSet<Solid::PowerManagement::SleepState> sleepstates =
++                                Solid::PowerManagement::supportedSleepStates();
++        kDebug() << sleepstates.count() << " sleepstates supported.";
++
++        // We first set all possible sleepstates to false, then enable the ones that are available
++        setData(I18N_NOOP("Sleepstates"), I18N_NOOP("Standby"), false);
++        setData(I18N_NOOP("Sleepstates"), I18N_NOOP("Suspend"), false);
++        setData(I18N_NOOP("Sleepstates"), I18N_NOOP("Hibernate"), false);
++
++        foreach (Solid::PowerManagement::SleepState sleepstate, sleepstates) {
++            if (sleepstate == Solid::PowerManagement::StandbyState) {
++                setData(I18N_NOOP("Sleepstates"), I18N_NOOP("Supports standby"), true);
++            } else if (sleepstate == Solid::PowerManagement::SuspendState) {
++                setData(I18N_NOOP("Sleepstates"), I18N_NOOP("Supports suspend"), true);
++            } else if (sleepstate == Solid::PowerManagement::HibernateState) {
++                setData(I18N_NOOP("Sleepstates"), I18N_NOOP("Supports hibernate"), true);
++            }
++            kDebug() << "Sleepstate \"" << sleepstate << "\" supported.";
++        }
++    } else {
++        kDebug() << "Data for '" << name << "' not found";
++    }
++    
++    return true;
++}
++
++void PowermanagementEngine::updateBatteryChargeState(int newState)
++{
++    QString state;
++    if (newState == Solid::Battery::NoCharge) {
++        state = I18N_NOOP("NoCharge");
++    } else if (newState == Solid::Battery::Charging) {
++        state = I18N_NOOP("Charging");
++    } else if (newState == Solid::Battery::Discharging) {
++        state = I18N_NOOP("Discharging");
++    } else {
++        state = I18N_NOOP("Could not determine battery status. Something is fishy here. :o");
++    }
++    setData(I18N_NOOP("Battery"), I18N_NOOP("State"), state);
++    kDebug() << "PMEngine::Battery: updateChargeState " << state;
++    checkForUpdates();
++}
++
++void PowermanagementEngine::updateBatteryPlugState(bool newState)
++{
++    kDebug() << "PMEngine::Battery: updatePlugState" << newState;
++    setData(I18N_NOOP("Battery"), I18N_NOOP("Plugged in"), newState);
++    checkForUpdates();
++}
++
++void PowermanagementEngine::updateBatteryChargePercent(int newValue)
++{
++    kDebug() << "PMEngine::Battery: new chargepercent: " << newValue;
++    setData(I18N_NOOP("Battery"), I18N_NOOP("Percent"), newValue);
++    checkForUpdates();
++}
++
++void PowermanagementEngine::updateAcPlugState(bool newState)
++{
++    kDebug() << "PMEngine::AcAdapter: updatePlugState" << newState;
++    setData(I18N_NOOP("AC Adapter"), I18N_NOOP("Plugged in"), newState);
++    checkForUpdates();
++}
++
++#include "powermanagementengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/powermanagement/powermanagementengine.h
+@@ -0,0 +1,59 @@
++/*
++ *   Copyright (C) 2007 Aaron Seigo <aseigo at kde.org>
++ *   Copyright (C) 2007 Sebastian Kuegler <sebas at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef POWERMANAGEMENTENGINE_H
++#define POWERMANAGEMENTENGINE_H
++
++#include "plasma/dataengine.h"
++
++#include <solid/battery.h>
++#include <solid/acadapter.h>
++
++/**
++ * This class provides runtime information about the battery and AC status
++ * for use in a simple batter monitor application.
++ */
++class PowermanagementEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++public:
++    PowermanagementEngine( QObject* parent, const QVariantList& args );
++    ~PowermanagementEngine();
++    QStringList sources() const;
++
++protected:
++    bool sourceRequested(const QString &name);
++    void init();
++
++protected slots:
++    void updateBatteryChargeState(int newState);
++    void updateBatteryChargePercent(int newValue);
++    void updateBatteryPlugState(bool newState);
++    void updateAcPlugState(bool newState);
++
++private:
++    Solid::Battery* m_battery;
++    Solid::AcAdapter* m_acadapter;
++    QStringList m_sources;
++};
++
++K_EXPORT_PLASMA_DATAENGINE(powermanagement, PowermanagementEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/powermanagement/README.txt
+@@ -0,0 +1,30 @@
++TODO:
++======
++- some machines have more than one battery
++- find a way to compute remaining minutes
++- Sleepstates don't match what solidshell reports
++- ac plug state does not get updated
++- this engine probably shares some functionality with
++  the solidengine, have a look at that and evaluate
++
++Notes
++======
++Check out into workspace/plasma/engines/
++
++There's also a battery applet which uses this engine, find it in
++the
++
++Patch plasma/engines/CMakeLists.txt like this to enable building 
++of the battery engine:
++
++-- sebas
++
++Index: CMakeLists.txt
++===================================================================
++--- CMakeLists.txt      (revision 680923)
+++++ CMakeLists.txt      (working copy)
++@@ -1,4 +1,5 @@
++ add_subdirectory("time")
+++add_subdirectory("powermanagement")
++ add_subdirectory("soliddevice")
++ add_subdirectory("systemmonitor")
+\ No newline at end of file
+--- /dev/null
++++ b/plasma/dataengines/powermanagement/CMakeLists.txt
+@@ -0,0 +1,11 @@
++
++set(powermanagement_engine_SRCS
++    powermanagementengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_powermanagement ${powermanagement_engine_SRCS})
++target_link_libraries(plasma_engine_powermanagement ${KDE4_KDECORE_LIBS} ${KDE4_SOLID_LIBS} plasma )
++
++install(TARGETS plasma_engine_powermanagement DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-powermanagement.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/Mainpage.dox
+@@ -0,0 +1,10 @@
++/**
++* @mainpage Engines
++*
++* Plasma engines power widgets.
++*
++*/
++
++// DOXYGEN_SET_PROJECT_NAME = Engines
++// DOXYGEN_SET_RECURSIVE = YES
++// vim:ts=4:sw=4:expandtab:filetype=doxygen
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/plasma-engine-soliddevice.desktop
+@@ -0,0 +1,28 @@
++[Desktop Entry]
++Name=SolidDevice Data Engine
++Name[et]=SolidDevice'i andmete mootor
++Name[ga]=Inneall Sonraí SolidDevice
++Name[ja]=SolidDevice データエンジン
++Name[nds]=SolidDevice-Hanteerkarn
++Name[ne]=ठोस यन्त्र डेटा इन्जिन
++Name[pt]=Motor de Dados do SolidDevice
++Name[pt_BR]=Mecanismo de Dados SolidDevice
++Name[sv]=Datagränssnitt för Solid-enhet
++Name[x-test]=xxSolidDevice Data Enginexx
++Name[zh_TW]=SolidDevice 資料引擎
++Comment=SolidDevice data for Plasmoids
++Comment[et]=SolidDevice'i andmed plasmoididele
++Comment[ga]=Sonraí SolidDevice le haghaidh Plasmoids
++Comment[ja]=Plasmoid のための SolidDevice データ
++Comment[nds]=SolidDevice-Daten för Plasmoiden
++Comment[ne]=प्लासमोइड्सका लागि ठोस यन्त्र डेटा
++Comment[pt]=Dados do SolidDevice para os Plasmóides
++Comment[pt_BR]=Dados de SolidDevice para os Plasmoids
++Comment[sv]=Data från Solid-enhet för Plasmoider
++Comment[x-test]=xxSolidDevice data for Plasmoidsxx
++Comment[zh_TW]=Plasmoids 的 SolidDevice 資料
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=alarmclock
++X-KDE-Library=plasma_engine_soliddevice
++X-EngineName=soliddevice
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/soliddeviceengine.cpp
+@@ -0,0 +1,715 @@
++/*
++ *   Copyright (C) 2007 Christopher Blauvelt <cblauvelt at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "config-workspace.h"
++
++#include "soliddeviceengine.h"
++
++#include <KDebug>
++#include <KLocale>
++
++#include "plasma/datacontainer.h"
++
++// The pattern here is:
++//	FreeBSD: param + mount
++//	Linux: stat + vfs
++#ifdef HAVE_SYS_PARAM_H
++#include <sys/param.h>
++#endif
++
++#ifdef HAVE_SYS_MOUNT_H
++#include <sys/mount.h>
++#endif
++
++#include <sys/stat.h>
++
++#ifdef HAVE_SYS_VFS_H
++#include <sys/vfs.h>
++#endif
++
++SolidDeviceEngine::SolidDeviceEngine(QObject* parent, const QVariantList& args)
++        : Plasma::DataEngine(parent)
++{
++    Q_UNUSED(args)
++    signalmanager = new DeviceSignalMapManager(this);
++}
++
++SolidDeviceEngine::~SolidDeviceEngine()
++{
++    delete signalmanager;
++}
++
++bool SolidDeviceEngine::sourceRequested(const QString &name)
++{
++    /* This creates a list of all available devices.  This must be called first before any other sources
++     * will be available.
++     */
++    if (name == "Devices") {
++        //if the devicelist is already populated, return
++        if (!devicelist.isEmpty()) {
++            return true;
++        }
++
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::Processor)) {
++            processorlist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Proccessor List"), processorlist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::Block)) {
++            blocklist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Block List"), blocklist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::StorageAccess)) {
++            storageaccesslist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Storage Access List"), storageaccesslist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::StorageDrive)) {
++            storagedrivelist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Storage Drive List"), storagedrivelist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::OpticalDrive)) {
++            opticaldrivelist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Optical Drive List"), opticaldrivelist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::StorageVolume)) {
++            storagevolumelist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Storage Volume List"), storagevolumelist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::OpticalDisc)) {
++            opticaldisclist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Optical Disc List"), opticaldisclist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::Camera)) {
++            cameralist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Camera List"), cameralist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::PortableMediaPlayer)) {
++            portablemediaplayerlist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Portable Media Player List"), portablemediaplayerlist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::NetworkInterface)) {
++            networkinterfacelist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Network Interface List"), networkinterfacelist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::AcAdapter)) {
++            acadapterlist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Ac Adapter List"), acadapterlist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::Battery)) {
++            batterylist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Battery List"), batterylist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::Button)) {
++            buttonlist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Button List"), buttonlist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::AudioInterface)) {
++            audiointerfacelist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Audio Interface List"), audiointerfacelist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::DvbInterface)) {
++            dvbinterfacelist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("DVB Interface List"), dvbinterfacelist);
++        foreach(Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::Unknown)) {
++            unknownlist << device.udi();
++            if (!devicelist.contains(device.udi())) {
++                devicelist << device.udi();
++                devicemap[device.udi()] = device;
++            }
++        }
++        setData(name, I18N_NOOP("Unknown List"), unknownlist);
++
++        if (devicelist.isEmpty() ) {
++            return false;
++        }
++        setData(name, I18N_NOOP("Device List"), devicelist);
++
++        //detect when new devices are added
++        Solid::DeviceNotifier *notifier = Solid::DeviceNotifier::instance();
++        connect(notifier, SIGNAL(deviceAdded(const QString&)),
++                this, SLOT(deviceAdded(const QString&)));
++        connect(notifier, SIGNAL(deviceRemoved(const QString&)),
++                this, SLOT(deviceRemoved(const QString&)));
++
++        return true;
++    }
++    else {
++        if (devicelist.contains(name) ) {
++            return populateDeviceData(name);
++        }
++        else {
++            return false;
++        }
++    }
++}
++
++bool SolidDeviceEngine::populateDeviceData(const QString &name)
++{
++    Solid::Device device = devicemap[name];
++    if (!device.isValid()) {
++        return false;
++    }
++
++    QStringList devicetypes;
++    setData(name, I18N_NOOP("Parent UDI"), device.parentUdi());
++    setData(name, I18N_NOOP("Vendor"), device.vendor());
++    setData(name, I18N_NOOP("Product"), device.product());
++    setData(name, I18N_NOOP("Icon"), device.icon());
++
++    if (processorlist.contains(name)) {
++        Solid::Processor *processor = device.as<Solid::Processor>();
++        if (processor == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Processor");
++        setData(name, I18N_NOOP("Number"), processor->number());
++        setData(name, I18N_NOOP("Max Speed"), processor->maxSpeed());
++        setData(name, I18N_NOOP("Can Change Frequency"), processor->canChangeFrequency());
++    }
++    if (blocklist.contains(name)) {
++        Solid::Block *block = device.as<Solid::Block>();
++        if (block == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Block");
++        setData(name, I18N_NOOP("Major"), block->deviceMajor());
++        setData(name, I18N_NOOP("Minor"), block->deviceMajor());
++        setData(name, I18N_NOOP("Device"), block->device());
++    }
++    if (storageaccesslist.contains(name)) {
++        Solid::StorageAccess *storageaccess = device.as<Solid::StorageAccess>();
++        if (storageaccess == 0) return false;
++
++        devicetypes << I18N_NOOP("Storage Access");
++        setData(name, I18N_NOOP("Accessible"), storageaccess->isAccessible());
++        setData(name, I18N_NOOP("File Path"), storageaccess->filePath());
++        setData(name, I18N_NOOP("Free Space"), freeDiskSpace(storageaccess->filePath()));
++
++        //signalmanager->mapDevice(storageaccess, device.udi());
++    }
++    if (storagedrivelist.contains(name)) {
++        Solid::StorageDrive *storagedrive = device.as<Solid::StorageDrive>();
++        if (storagedrive == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Storage Drive");
++
++        QStringList bus;
++        bus << I18N_NOOP("Ide") << I18N_NOOP("Usb") << I18N_NOOP("Ieee1394") << I18N_NOOP("Scsi") << I18N_NOOP("Sata") << I18N_NOOP("Platform");
++        QStringList drivetype;
++        drivetype << I18N_NOOP("Hard Disk") <<  I18N_NOOP("Cdrom Drive") <<  I18N_NOOP("Floppy") <<  I18N_NOOP("Tape") <<  I18N_NOOP("Compact Flash") <<  I18N_NOOP("Memory Stick") <<  I18N_NOOP("Smart Media") <<  I18N_NOOP("SdMmc") <<  I18N_NOOP("Xd");
++
++        setData(name, I18N_NOOP("Bus"), bus.at((int)storagedrive->bus()));
++        setData(name, I18N_NOOP("Drive Type"), drivetype.at((int)storagedrive->driveType()));
++        setData(name, I18N_NOOP("Removable"), storagedrive->isRemovable());
++        setData(name, I18N_NOOP("Hotpluggable"), storagedrive->isHotpluggable());
++    }
++    if (opticaldrivelist.contains(name)) {
++        Solid::OpticalDrive *opticaldrive = device.as<Solid::OpticalDrive>();
++        if (opticaldrive == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Optical Drive");
++
++        QStringList supportedtypes;
++        Solid::OpticalDrive::MediumTypes mediatypes = opticaldrive->supportedMedia();
++        if (mediatypes & Solid::OpticalDrive::Cdr) {
++            supportedtypes << I18N_NOOP("Cdr");
++        }
++        if (mediatypes & Solid::OpticalDrive::Cdrw) {
++            supportedtypes << I18N_NOOP("Cdrw");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvd) {
++            supportedtypes << I18N_NOOP("Dvd");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdr) {
++            supportedtypes << I18N_NOOP("Dvdr");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdrw) {
++            supportedtypes << I18N_NOOP("Dvdrw");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdram) {
++            supportedtypes << I18N_NOOP("Dvdram");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdplusr) {
++            supportedtypes << I18N_NOOP("Dvdplusr");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdplusrw) {
++            supportedtypes << I18N_NOOP("Dvdplusrw");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdplusdl) {
++            supportedtypes << I18N_NOOP("Dvdplusdl");
++        }
++        if (mediatypes & Solid::OpticalDrive::Dvdplusdlrw) {
++            supportedtypes << I18N_NOOP("Dvdplusdlrw");
++        }
++        if (mediatypes & Solid::OpticalDrive::Bd) {
++            supportedtypes << I18N_NOOP("Bd");
++        }
++        if (mediatypes & Solid::OpticalDrive::Bdr) {
++            supportedtypes << I18N_NOOP("Bdr");
++        }
++        if (mediatypes & Solid::OpticalDrive::Bdre) {
++            supportedtypes << I18N_NOOP("Bdre");
++        }
++        if (mediatypes & Solid::OpticalDrive::HdDvd) {
++            supportedtypes << I18N_NOOP("HdDvd");
++        }
++        if (mediatypes & Solid::OpticalDrive::HdDvdr) {
++            supportedtypes << I18N_NOOP("HdDvdr");
++        }
++        if (mediatypes & Solid::OpticalDrive::HdDvdrw) {
++            supportedtypes << I18N_NOOP("HdDvdrw");
++        }
++        setData(name, I18N_NOOP("Supported Media"), supportedtypes);
++
++        setData(name, I18N_NOOP("Read Speed"), opticaldrive->readSpeed());
++        setData(name, I18N_NOOP("Write Speed"), opticaldrive->writeSpeed());
++
++        //the following method return QList<int> so we need to convert it to QList<QVariant>
++        QList<int> writespeeds = opticaldrive->writeSpeeds();
++        QList<QVariant> variantlist = QList<QVariant>();
++        foreach(int num, writespeeds) {
++            variantlist << QVariant(num);
++        }
++        setData(name, I18N_NOOP("Write Speeds"), variantlist);
++
++    }
++    if (storagevolumelist.contains(name)) {
++        Solid::StorageVolume *storagevolume = device.as<Solid::StorageVolume>();
++        if (storagevolume == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Storage Volume");
++
++        QStringList usagetypes;
++        usagetypes << I18N_NOOP("File System") << I18N_NOOP("Partition Table") << I18N_NOOP("Raid") << I18N_NOOP("Other") << I18N_NOOP("Unused");
++
++        setData(name, I18N_NOOP("Ignored"), storagevolume->isIgnored());
++        setData(name, I18N_NOOP("Usage"), usagetypes.at((int)storagevolume->usage()));
++        setData(name, I18N_NOOP("File System Type"), storagevolume->fsType());
++        setData(name, I18N_NOOP("Label"), storagevolume->label());
++        setData(name, I18N_NOOP("Uuid"), storagevolume->uuid());
++        setData(name, I18N_NOOP("Size"), storagevolume->size());
++    }
++    if (opticaldisclist.contains(name)) {
++        Solid::OpticalDisc *opticaldisc = device.as<Solid::OpticalDisc>();
++        if (opticaldisc == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("OpticalDisc");
++
++        //get the content types
++        QStringList contenttypelist;
++        Solid::OpticalDisc::ContentTypes contenttypes = opticaldisc->availableContent();
++        if (contenttypes & Solid::OpticalDisc::Audio) {
++            contenttypelist << I18N_NOOP("Audio");
++        }
++        if (contenttypes & Solid::OpticalDisc::Audio) {
++            contenttypelist << I18N_NOOP("Data");
++        }
++        if (contenttypes & Solid::OpticalDisc::Audio) {
++            contenttypelist << I18N_NOOP("Video Cd");
++        }
++        if (contenttypes & Solid::OpticalDisc::Audio) {
++            contenttypelist << I18N_NOOP("Super Video Cd");
++        }
++        if (contenttypes & Solid::OpticalDisc::Audio) {
++            contenttypelist << I18N_NOOP("Video Dvd");
++        }
++        setData(name, I18N_NOOP("Available Content"), contenttypelist);
++
++        QStringList disctypes;
++        disctypes << I18N_NOOP("Unknown Disc Type") << I18N_NOOP("CD Rom") << I18N_NOOP("CD Recordable")
++                << I18N_NOOP("CD Rewritable") << I18N_NOOP("DVD Rom") << I18N_NOOP("DVD Ram")
++                << I18N_NOOP("DVD Recordable") << I18N_NOOP("DVD Rewritable") << I18N_NOOP("DVD Plus Recordable")
++                << I18N_NOOP("DVD Plus Rewritable") << I18N_NOOP("DVD Plus Recordable Duallayer")
++                << I18N_NOOP("DVD Plus Rewritable Duallayer") << I18N_NOOP("Blu Ray Rom") << I18N_NOOP("Blu Ray Recordable")
++                << I18N_NOOP("Blu Ray Rewritable") << I18N_NOOP("HD DVD Rom") <<  I18N_NOOP("HD DVD Recordable")
++                << I18N_NOOP("HD DVD Rewritable");
++        //+1 because the enum starts at -1
++        setData(name, I18N_NOOP("Disc Type"), disctypes.at((int)opticaldisc->discType() + 1));
++        setData(name, I18N_NOOP("Appendable"), opticaldisc->isAppendable());
++        setData(name, I18N_NOOP("Blank"), opticaldisc->isBlank());
++        setData(name, I18N_NOOP("Rewritable"), opticaldisc->isRewritable());
++        setData(name, I18N_NOOP("Capacity"), opticaldisc->capacity());
++    }
++    if (cameralist.contains(name)) {
++        Solid::Camera *camera = device.as<Solid::Camera>();
++        if (camera == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Camera");
++
++        setData(name, I18N_NOOP("Supported Protocols"), camera->supportedProtocols());
++        setData(name, I18N_NOOP("Supported Drivers"), camera->supportedDrivers());
++    }
++    if (portablemediaplayerlist.contains(name)) {
++        Solid::PortableMediaPlayer *mediaplayer = device.as<Solid::PortableMediaPlayer>();
++        if (mediaplayer == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Portable Media Player");
++
++        setData(name, I18N_NOOP("Supported Protocols"), mediaplayer->supportedProtocols());
++        setData(name, I18N_NOOP("Supported Drivers"), mediaplayer->supportedDrivers());
++    }
++    if (networkinterfacelist.contains(name)) {
++        Solid::NetworkInterface *networkinterface = device.as<Solid::NetworkInterface>();
++        if (networkinterface == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Network Interface");
++
++        setData(name, I18N_NOOP("Interface Name"), networkinterface->ifaceName());
++        setData(name, I18N_NOOP("Wireless"), networkinterface->isWireless());
++        setData(name, I18N_NOOP("Hardware Address"), networkinterface->hwAddress());
++        setData(name, I18N_NOOP("Mac Address"), networkinterface->macAddress());
++    }
++    if (acadapterlist.contains(name)) {
++        Solid::AcAdapter *ac = device.as<Solid::AcAdapter>();
++        if (ac == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("AD Adapter");
++
++        setData(name, I18N_NOOP("Plugged In"), ac->isPlugged());
++        signalmanager->mapDevice(ac, device.udi());
++    }
++    if (batterylist.contains(name)) {
++        Solid::Battery *battery = device.as<Solid::Battery>();
++        if (battery == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Battery");
++
++        QStringList batterytype;
++        batterytype << I18N_NOOP("Unknown Battery") << I18N_NOOP("PDA Battery") << I18N_NOOP("UPS Battery")
++                << I18N_NOOP("Primary Battery") << I18N_NOOP("Mouse Battery") << I18N_NOOP("Keyboard Battery")
++                << I18N_NOOP("Keyboard Mouse Battery") << I18N_NOOP("Camera Battery");
++
++        QStringList chargestate;
++        chargestate << I18N_NOOP("Fully Charged") << I18N_NOOP("Charging") << I18N_NOOP("Discharging");
++
++        setData(name, I18N_NOOP("Plugged In"), battery->isPlugged());
++        setData(name, I18N_NOOP("Type"), batterytype.at((int)battery->type()));
++        setData(name, I18N_NOOP("Charge Percent"), battery->chargePercent());
++        setData(name, I18N_NOOP("Rechargeable"), battery->isRechargeable());
++        setData(name, I18N_NOOP("Charge State"), chargestate.at((int)battery->chargeState()));
++
++        signalmanager->mapDevice(battery, device.udi());
++    }
++    if (buttonlist.contains(name)) {
++        Solid::Button *button = device.as<Solid::Button>();
++        if (button == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Button");
++
++        QStringList buttontype;
++        buttontype << I18N_NOOP("Lid Button") << I18N_NOOP("Power Button") << I18N_NOOP("Sleep Button")
++                << I18N_NOOP("Unknown Button Type");
++
++        setData(name, I18N_NOOP("Type"), buttontype.at((int)button->type()));
++        setData(name, I18N_NOOP("Has State"), button->hasState());
++        setData(name, I18N_NOOP("State Value"), button->stateValue());
++        setData(name, I18N_NOOP("Pressed"), false);  //this is an extra value that is tracked by the button signals
++
++        signalmanager->mapDevice(button, device.udi());
++    }
++    if (audiointerfacelist.contains(name)) {
++        Solid::AudioInterface *audiointerface = device.as<Solid::AudioInterface>();
++        if (audiointerface == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("Audio Interface");
++
++        QStringList audiodriver;
++        audiodriver << I18N_NOOP("ALSA") << I18N_NOOP("Open Sound System") << I18N_NOOP("Unknown Audio Driver");
++
++        setData(name, I18N_NOOP("Driver"), audiodriver.at((int)audiointerface->driver()));
++        setData(name, I18N_NOOP("Driver Handle"), audiointerface->driverHandle());
++        setData(name, I18N_NOOP("Name"), audiointerface->name());
++
++        //get AudioInterfaceTypes
++        QStringList audiointerfacetypes;
++        Solid::AudioInterface::AudioInterfaceTypes devicetypes = audiointerface->deviceType();
++        if (devicetypes & Solid::AudioInterface::UnknownAudioInterfaceType) {
++            audiointerfacetypes << I18N_NOOP("Unknown Audio Interface Type");
++        }
++        if (devicetypes & Solid::AudioInterface::AudioControl) {
++            audiointerfacetypes << I18N_NOOP("Audio Control");
++        }
++        if (devicetypes & Solid::AudioInterface::AudioInput) {
++            audiointerfacetypes << I18N_NOOP("Audio Input");
++        }
++        if (devicetypes & Solid::AudioInterface::AudioOutput) {
++            audiointerfacetypes << I18N_NOOP("Audio Output");
++        }
++        setData(name, I18N_NOOP("Audio Device Type"), audiointerfacetypes);
++
++        //get SoundCardTypes
++        QStringList soundcardtype;
++        soundcardtype << I18N_NOOP("Internal Soundcard") << I18N_NOOP("USB Soundcard") << I18N_NOOP("Firewire Soundcard")
++                << I18N_NOOP("Headset") << I18N_NOOP("Modem");
++        setData(name, I18N_NOOP("Soundcard Type"), soundcardtype.at((int)audiointerface->soundcardType()));
++    }
++    if (dvbinterfacelist.contains(name)) {
++        Solid::DvbInterface *dvbinterface = device.as<Solid::DvbInterface>();
++        if (dvbinterface == 0) {
++            return false;
++        }
++
++        devicetypes << I18N_NOOP("DVB Interface");
++
++        setData(name, I18N_NOOP("Device"), dvbinterface->device());
++        setData(name, I18N_NOOP("Device Adapter"), dvbinterface->deviceAdapter());
++
++        //get devicetypes
++        QStringList dvbdevicetypes;
++        dvbdevicetypes << I18N_NOOP("DVB Unknown") << I18N_NOOP("DVB Audio") << I18N_NOOP("DVB Ca")
++                << I18N_NOOP("DVB Demux") << I18N_NOOP("DVB DVR") << I18N_NOOP("DVB Frontend")
++                << I18N_NOOP("DVB Net") << I18N_NOOP("DVB OSD") << I18N_NOOP("DVB Sec") << I18N_NOOP("DVB Video");
++
++        setData(name, I18N_NOOP("DVB Device Type"), dvbdevicetypes.at((int)dvbinterface->deviceType()));
++        setData(name, I18N_NOOP("Device Index"), dvbinterface->deviceIndex());
++    }
++    setData(name, I18N_NOOP("Device Types"), devicetypes);
++    return true;
++}
++
++void SolidDeviceEngine::deviceAdded(const QString& udi)
++{
++    devicelist << udi;
++    QString name = I18N_NOOP("Devices");
++    setData(name, I18N_NOOP("Device List"), devicelist);
++
++    //add to device specific lists
++    Solid::Device device(udi);
++    if (device.is<Solid::Processor>()) {
++        processorlist << udi;
++        setData(name, I18N_NOOP("Proccessor List"), processorlist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::Block>()) {
++        blocklist << udi;
++        setData(name, I18N_NOOP("Block List"), blocklist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::StorageAccess>()) {
++        storageaccesslist << udi;
++        setData(name, I18N_NOOP("Storage Access List"), storageaccesslist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::StorageDrive>()) {
++        storagedrivelist << udi;
++        setData(name, I18N_NOOP("Storage Drive List"), storagedrivelist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::OpticalDrive>()) {
++        opticaldrivelist << udi;
++        setData(name, I18N_NOOP("Optical Drive List"), opticaldrivelist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::StorageVolume>()) {
++        storagevolumelist << udi;
++        setData(name, I18N_NOOP("Storage Volume List"), storagevolumelist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::OpticalDisc>()) {
++        opticaldisclist << udi;
++        setData(name, I18N_NOOP("Optical Disc List"), opticaldisclist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::Camera>()) {
++        cameralist << udi;
++        setData(name, I18N_NOOP("Camera List"), cameralist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::PortableMediaPlayer>()) {
++        portablemediaplayerlist << udi;
++        setData(name, I18N_NOOP("Portable Media Player List"), portablemediaplayerlist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::NetworkInterface>()) {
++        networkinterfacelist << udi;
++        setData(name, I18N_NOOP("Network Interface List"), networkinterfacelist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::AcAdapter>()) {
++        acadapterlist << udi;
++        setData(name, I18N_NOOP("AD Adapter List"), acadapterlist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::Battery>()) {
++        batterylist << udi;
++        setData(name, I18N_NOOP("Battery List"), batterylist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::Button>()) {
++        buttonlist << udi;
++        setData(name, I18N_NOOP("Button List"), buttonlist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::AudioInterface>()) {
++        audiointerfacelist << udi;
++        setData(name, I18N_NOOP("Audio Interface List"), audiointerfacelist);
++        devicemap[udi] = device;
++    }
++    if (device.is<Solid::DvbInterface>()) {
++        dvbinterfacelist << udi;
++        setData(name, I18N_NOOP("DVB Interface List"), dvbinterfacelist);
++        devicemap[udi] = device;
++    }
++
++    checkForUpdates();
++}
++
++qlonglong SolidDeviceEngine::freeDiskSpace(const QString &mountPoint)
++{
++    //determine the free space available on the device
++    const char *path=mountPoint.toAscii().constData();
++
++    struct statfs fs_obj;
++    if (statfs(path,&fs_obj) < 0){
++        return -1;
++    }
++    else{
++        return (qlonglong)fs_obj.f_bfree*(qlonglong)fs_obj.f_bsize;
++    }
++}
++
++bool SolidDeviceEngine::updateFreeSpace(const QString &udi)
++{
++    if (storageaccesslist.contains(udi)){
++        Solid::Device device = devicemap[udi];
++        if (!device.isValid()) {
++            return false;
++        }
++        
++        Solid::StorageAccess *storageaccess = device.as<Solid::StorageAccess>();
++        if (storageaccess == 0) return false;
++        setData(udi, I18N_NOOP("Free Space"), freeDiskSpace(storageaccess->filePath()));
++        return true;
++    }
++    return false;
++}
++
++bool SolidDeviceEngine::updateSource(const QString& source)
++{
++    if (storageaccesslist.contains(source)){
++        updateFreeSpace(source);
++        return true;
++    }
++    else{
++        return false;
++    }
++}
++
++void SolidDeviceEngine::deviceRemoved(const QString& udi)
++{
++    int pos = devicelist.indexOf(udi);
++    if (pos > -1) {
++        devicelist.removeAt(pos);
++        devicemap.remove(udi);
++        removeSource(udi);
++        setData(I18N_NOOP("Devices"), I18N_NOOP("Device List"), devicelist);
++    }
++    checkForUpdates();
++}
++
++void SolidDeviceEngine::deviceChanged(const QString& udi, const QString &property, const QVariant &value)
++{
++    setData(udi, property, value);
++    checkForUpdates();
++}
++
++#include "soliddeviceengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/devicesignalmapper.cpp
+@@ -0,0 +1,100 @@
++/*
++ *   Copyright (C) 2007 Christopher Blauvelt <cblauvelt at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "devicesignalmapper.h"
++
++DeviceSignalMapper::DeviceSignalMapper(QObject *parent) : QSignalMapper(parent)
++{
++}
++
++DeviceSignalMapper::~DeviceSignalMapper()
++{
++}
++
++void DeviceSignalMapper::setMapping(QObject* device, const QString &udi)
++{
++    signalmap[device] = udi;
++}
++
++AcAdapterSignalMapper::AcAdapterSignalMapper(QObject *parent) : DeviceSignalMapper(parent)
++{
++}
++
++AcAdapterSignalMapper::~AcAdapterSignalMapper()
++{
++}
++
++void AcAdapterSignalMapper::plugStateChanged(bool newState)
++{
++    emit(deviceChanged(signalmap[sender()], "Plugged In", newState));
++}
++
++
++ButtonSignalMapper::ButtonSignalMapper(QObject *parent) : DeviceSignalMapper(parent)
++{
++}
++
++ButtonSignalMapper::~ButtonSignalMapper()
++{
++}
++
++void ButtonSignalMapper::pressed(Solid::Button::ButtonType type)
++{
++    Q_UNUSED(type)
++    emit(deviceChanged(signalmap[sender()], "Pressed", true));
++}
++
++BatterySignalMapper::BatterySignalMapper(QObject *parent) : DeviceSignalMapper(parent)
++{
++}
++
++BatterySignalMapper::~BatterySignalMapper()
++{
++}
++
++void BatterySignalMapper::chargePercentChanged(int value)
++{
++    emit(deviceChanged(signalmap[sender()], "Charge Percent", value));
++}
++
++void BatterySignalMapper::chargeStateChanged(int newState)
++{
++    QStringList chargestate;
++    chargestate << "Fully Charged" << "Charging" << "Discharging";
++    emit(deviceChanged(signalmap[sender()], "Charge State", chargestate.at(newState)));
++}
++
++void BatterySignalMapper::plugStateChanged(bool newState)
++{
++    emit(deviceChanged(signalmap[sender()], "Plugged In", newState));
++}
++
++StorageAccessSignalMapper::StorageAccessSignalMapper(QObject *parent) : DeviceSignalMapper(parent)
++{
++}
++
++StorageAccessSignalMapper::~StorageAccessSignalMapper()
++{
++}
++
++void StorageAccessSignalMapper::accessibilityChanged(bool accessible)
++{
++    emit(deviceChanged(signalmap[sender()], "Accessible", accessible));
++}
++
++#include "devicesignalmapper.moc"
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/soliddeviceengine.h
+@@ -0,0 +1,81 @@
++/*
++ *   Copyright (C) 2007 Christopher Blauvelt <cblauvelt at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef SOLIDDEVICEENGINE_H
++#define SOLIDDEVICEENGINE_H
++
++#include <QObject>
++#include <QString>
++#include <QList>
++#include <QMap>
++
++#include "plasma/dataengine.h"
++#include "devicesignalmapmanager.h"
++#include "devicesignalmapper.h"
++
++/**
++ * This class evaluates the basic expressions given in the interface.
++ */
++class SolidDeviceEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++public:
++    SolidDeviceEngine( QObject* parent, const QVariantList& args);
++    ~SolidDeviceEngine();
++
++protected:
++    bool sourceRequested(const QString &name);
++    bool updateSource(const QString& source);
++
++private:
++    bool populateDeviceData(const QString &name);
++    qlonglong freeDiskSpace(const QString &mountPoint);
++    bool updateFreeSpace(const QString &udi);
++    
++    QStringList devicelist;
++    //setup lists for devicetypes
++    QStringList processorlist;
++    QStringList blocklist;
++    QStringList storageaccesslist;
++    QStringList storagedrivelist;
++    QStringList opticaldrivelist;
++    QStringList storagevolumelist;
++    QStringList opticaldisclist;
++    QStringList cameralist;
++    QStringList portablemediaplayerlist;
++    QStringList networkinterfacelist;
++    QStringList acadapterlist;
++    QStringList batterylist;
++    QStringList buttonlist;
++    QStringList audiointerfacelist;
++    QStringList dvbinterfacelist;
++    QStringList unknownlist;
++    
++    QMap<QString, Solid::Device> devicemap;
++    DeviceSignalMapManager *signalmanager;
++
++private Q_SLOTS:
++    void deviceAdded(const QString &udi);
++    void deviceRemoved(const QString &udi);
++    void deviceChanged(const QString& udi, const QString &property, const QVariant &value);
++};
++
++K_EXPORT_PLASMA_DATAENGINE(soliddevice, SolidDeviceEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/devicesignalmapmanager.cpp
+@@ -0,0 +1,130 @@
++/*
++ *   Copyright (C) 2007 Christopher Blauvelt <cblauvelt at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "devicesignalmapmanager.h"
++
++DeviceSignalMapManager::DeviceSignalMapManager(QObject *parent) : QObject(parent)
++{
++    user = parent;
++}
++
++DeviceSignalMapManager::~DeviceSignalMapManager()
++{
++}
++
++void DeviceSignalMapManager::mapDevice(Solid::AcAdapter *ac, const QString &udi)
++{
++    AcAdapterSignalMapper *map=0;
++    if(!signalmap.contains(Solid::DeviceInterface::AcAdapter)) {
++        signalmap[Solid::DeviceInterface::AcAdapter] = new AcAdapterSignalMapper();
++    }
++    map = (AcAdapterSignalMapper*)signalmap[Solid::DeviceInterface::AcAdapter];
++
++    connect(ac, SIGNAL(plugStateChanged(bool)), map, SLOT(plugStateChanged(bool)));
++    connect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    map->setMapping(ac, udi);
++}
++
++void DeviceSignalMapManager::mapDevice(Solid::Button *button, const QString &udi)
++{
++    ButtonSignalMapper *map=0;
++    if(!signalmap.contains(Solid::DeviceInterface::Button)) {
++        signalmap[Solid::DeviceInterface::Button] = new ButtonSignalMapper();
++    }
++    map = (ButtonSignalMapper*)signalmap[Solid::DeviceInterface::Button];
++
++    connect(button, SIGNAL(pressed(Solid::Button::ButtonType)), map, SLOT(pressed(Solid::Button::ButtonType)));
++    connect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    map->setMapping(button, udi);
++}
++
++void DeviceSignalMapManager::mapDevice(Solid::Battery *battery, const QString &udi)
++{
++    BatterySignalMapper *map=0;
++    if(!signalmap.contains(Solid::DeviceInterface::Battery)) {
++        signalmap[Solid::DeviceInterface::Battery] = new BatterySignalMapper();
++    }
++    map = (BatterySignalMapper*)signalmap[Solid::DeviceInterface::Battery];
++
++    connect(battery, SIGNAL(chargePercentChanged(int)), map, SLOT(chargePercentChanged(int)));
++    connect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    connect(battery, SIGNAL(chargeStateChanged(int)), map, SLOT(chargeStateChanged(int)));
++    connect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    connect(battery, SIGNAL(plugStateChanged(bool)), map, SLOT(plugStateChanged(bool)));
++    connect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    map->setMapping(battery, udi);
++}
++
++void DeviceSignalMapManager::mapDevice(Solid::StorageAccess *storageaccess, const QString &udi)
++{
++    StorageAccessSignalMapper *map=0;
++    if(!signalmap.contains(Solid::DeviceInterface::StorageAccess)) {
++        signalmap[Solid::DeviceInterface::StorageAccess] = new StorageAccessSignalMapper();
++    }
++    map = (StorageAccessSignalMapper*)signalmap[Solid::DeviceInterface::StorageAccess];
++
++    connect(storageaccess, SIGNAL(chargePercentChanged(int)), map, SLOT(chargePercentChanged(int)));
++    connect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    map->setMapping(storageaccess, udi);
++}
++
++void DeviceSignalMapManager::unmapDevice(Solid::AcAdapter *ac)
++{
++    if(!signalmap.contains(Solid::DeviceInterface::AcAdapter)) {
++        return;
++    }
++    AcAdapterSignalMapper *map = (AcAdapterSignalMapper*)signalmap[Solid::DeviceInterface::AcAdapter];
++    disconnect(ac, SIGNAL(plugStateChanged(bool)), map, SLOT(plugStateChanged(bool)));
++    disconnect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++}
++
++void DeviceSignalMapManager::unmapDevice(Solid::Button *button)
++{
++    if(!signalmap.contains(Solid::DeviceInterface::Button)) {
++        return;
++    }
++    ButtonSignalMapper *map = (ButtonSignalMapper*)signalmap[Solid::DeviceInterface::Button];
++    disconnect(button, SIGNAL(pressed(Solid::Button::ButtonType)), map, SLOT(pressed(Solid::Button::ButtonType)));
++    disconnect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++}
++
++void DeviceSignalMapManager::unmapDevice(Solid::Battery *battery)
++{
++    if(!signalmap.contains(Solid::DeviceInterface::Battery)) {
++        return;
++    }
++    BatterySignalMapper *map = (BatterySignalMapper*)signalmap[Solid::DeviceInterface::Battery];
++    disconnect(battery, SIGNAL(chargePercentChanged(int)), map, SLOT(chargePercentChanged(int)));
++    disconnect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    disconnect(battery, SIGNAL(chargeStateChanged(int)), map, SLOT(chargeStateChanged(int)));
++    disconnect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++    disconnect(battery, SIGNAL(plugStateChanged(bool)), map, SLOT(plugStateChanged(bool)));
++    disconnect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++}
++
++void DeviceSignalMapManager::unmapDevice(Solid::StorageAccess *storageaccess)
++{
++    if(!signalmap.contains(Solid::DeviceInterface::StorageAccess)) {
++        return;
++    }
++    StorageAccessSignalMapper *map = (StorageAccessSignalMapper*)signalmap[Solid::DeviceInterface::StorageAccess];
++    disconnect(storageaccess, SIGNAL(chargePercentChanged(int)), map, SLOT(chargePercentChanged(int)));
++    disconnect(map, SIGNAL(deviceChanged(const QString&, const QString &, QVariant)), user, SLOT(deviceChanged(const QString&, const QString &, QVariant)));
++}
++
++#include "devicesignalmapmanager.moc"
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/devicesignalmapper.h
+@@ -0,0 +1,113 @@
++/*
++ *   Copyright (C) 2007 Christopher Blauvelt <cblauvelt at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef DEVICE_SIGNAL_MAPPER_H
++#define DEVICE_SIGNAL_MAPPER_H
++
++#include <QObject>
++#include <QSignalMapper>
++#include <QMap>
++
++#include <KDebug>
++
++#include <solid/devicenotifier.h>
++#include <solid/device.h>
++#include <solid/processor.h>
++#include <solid/block.h>
++#include <solid/storageaccess.h>
++#include <solid/storagedrive.h>
++#include <solid/opticaldrive.h>
++#include <solid/storagevolume.h>
++#include <solid/opticaldisc.h>
++#include <solid/camera.h>
++#include <solid/portablemediaplayer.h>
++#include <solid/networkinterface.h>
++#include <solid/acadapter.h>
++#include <solid/battery.h>
++#include <solid/button.h>
++#include <solid/audiointerface.h>
++#include <solid/dvbinterface.h>
++
++class DeviceSignalMapper : public QSignalMapper
++{
++    Q_OBJECT
++
++    public:
++        DeviceSignalMapper(QObject *parent=0);
++        ~DeviceSignalMapper();
++        
++        void setMapping(QObject* device, const QString &udi);
++
++    Q_SIGNALS:
++        void deviceChanged(const QString& udi, const QString &property, QVariant value);
++        
++    protected:
++        QMap<QObject*, QString> signalmap;
++};
++
++class AcAdapterSignalMapper : public DeviceSignalMapper
++{
++    Q_OBJECT
++
++    public:
++        AcAdapterSignalMapper(QObject *parent=0);
++        ~AcAdapterSignalMapper();
++
++    public Q_SLOTS:
++        void plugStateChanged(bool newState);
++};
++
++class ButtonSignalMapper : public DeviceSignalMapper
++{
++    Q_OBJECT
++
++    public:
++        ButtonSignalMapper(QObject *parent=0);
++        ~ButtonSignalMapper();
++
++    public Q_SLOTS:
++        void pressed(Solid::Button::ButtonType type);
++};
++
++class BatterySignalMapper : public DeviceSignalMapper
++{
++    Q_OBJECT
++
++    public:
++        BatterySignalMapper(QObject *parent=0);
++        ~BatterySignalMapper();
++
++    public Q_SLOTS:
++        void chargePercentChanged(int value);
++        void chargeStateChanged(int newState);
++        void plugStateChanged(bool newState);
++};
++
++class StorageAccessSignalMapper : public DeviceSignalMapper
++{
++    Q_OBJECT
++
++    public:
++        StorageAccessSignalMapper(QObject *parent=0);
++        ~StorageAccessSignalMapper();
++
++    public Q_SLOTS:
++        void accessibilityChanged(bool accessible);
++};
++
++#endif 
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/devicesignalmapmanager.h
+@@ -0,0 +1,50 @@
++/*
++ *   Copyright (C) 2007 Christopher Blauvelt <cblauvelt at gmail.com>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef DEVICE_SIGNALMAP_MANAGER_H
++#define DEVICE_SIGNALMAP_MANAGER_H
++
++#include <KDebug>
++
++#include "devicesignalmapper.h"
++
++class DeviceSignalMapManager : public QObject
++{
++    Q_OBJECT
++
++    public:
++        DeviceSignalMapManager(QObject *parent=0);
++        ~DeviceSignalMapManager();
++
++        void mapDevice(Solid::AcAdapter *ac, const QString &udi);
++        void mapDevice(Solid::Button *button, const QString &udi);
++        void mapDevice(Solid::Battery *battery, const QString &udi);
++        void mapDevice(Solid::StorageAccess *storageaccess, const QString &udi);
++        
++        void unmapDevice(Solid::AcAdapter *ac);
++        void unmapDevice(Solid::Button *button);
++        void unmapDevice(Solid::Battery *battery);
++        void unmapDevice(Solid::StorageAccess *storageaccess);
++        
++    private:
++        QMap<QString, Solid::DeviceInterface*> devicemap;
++        QMap<Solid::DeviceInterface::Type, DeviceSignalMapper*> signalmap;
++        QObject *user;
++};
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/soliddevice/CMakeLists.txt
+@@ -0,0 +1,14 @@
++include_directories(${CMAKE_SOURCE_DIR}/workspace/libs)
++
++set(soliddevice_engine_SRCS
++    soliddeviceengine.cpp
++    devicesignalmapper.cpp
++    devicesignalmapmanager.cpp
++)
++
++kde4_add_plugin(plasma_engine_soliddevice ${soliddevice_engine_SRCS})
++target_link_libraries(plasma_engine_soliddevice ${KDE4_KDECORE_LIBS} ${KDE4_SOLID_LIBS} plasma)
++
++install(TARGETS plasma_engine_soliddevice DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-soliddevice.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- /dev/null
++++ b/plasma/dataengines/CMakeLists.txt
+@@ -0,0 +1,10 @@
++add_subdirectory(dict)
++add_subdirectory(hotplug)
++add_subdirectory(filebrowser)
++add_subdirectory(mouse)
++add_subdirectory(places)
++add_subdirectory(powermanagement)
++add_subdirectory(tasks)
++add_subdirectory(time)
++add_subdirectory(weather)
++add_subdirectory(soliddevice)
+--- /dev/null
++++ b/plasma/dataengines/time/plasma-engine-time.desktop
+@@ -0,0 +1,60 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Time Data Engine
++Name[ar]=محرك بيانات الوقت
++Name[be]=Рухавік дадзеных Time
++Name[de]=Zeitdaten-Treiber
++Name[el]=Μηχανή δεδομένων χρόνου
++Name[es]=Motor de datos horarios
++Name[et]=Aja andmete mootor
++Name[fa]=موتور دادۀ زمان
++Name[ga]=Inneall Sonraí Ama
++Name[he]=מנוע נתוני זמן
++Name[ja]=時間データエンジン
++Name[kk]=Уақыт дерек тетігі
++Name[km]=ម៉ាស៊ីន​ទិន្នន័យ​ពេលវេលា​
++Name[ko]=시간 데이터 엔진
++Name[nb]=Tidsdata-motor
++Name[nds]=Tiet-Hanteerkarn
++Name[ne]=समय डेटा इन्जिन
++Name[nl]=Tijd (gegevensengine)
++Name[nn]=Tidsdatamotor
++Name[pa]=ਸਮਾਂ ਡਾਟਾ ਇੰਜਣ
++Name[pt]=Motor de Dados Horários
++Name[pt_BR]=Mecanismo de Dados de Tempo
++Name[sv]=Datagränssnitt för tid
++Name[vi]=Cơ chế dữ liệu thời gian
++Name[x-test]=xxTime Data Enginexx
++Name[zh_CN]=时间数据引擎
++Name[zh_TW]=時間資料引擎
++Comment=Time data for Plasmoids
++Comment[bg]=Време за Plasmoids
++Comment[de]=Zeitdaten für Plasmoide
++Comment[el]=Δεδομένα χρόνου για πλασμοειδή
++Comment[es]=Datos horarios para los plasmoides
++Comment[et]=Ajaandmed plasmoididele
++Comment[fa]=داده زمان برای Plasmoids
++Comment[ga]=Sonraí ama le haghaidh Plasmoids
++Comment[he]=נתוני זמן עבור פלסמואידים
++Comment[ja]=Plasmoid のための時間データ
++Comment[kk]=Плазмоидтер үшін уақыт деректері
++Comment[km]=ទិន្នន័យ​ពេល​វេលា​សម្រាប់ Plasmoids
++Comment[ko]=Plasmoid를 위한 시간 데이터
++Comment[nb]=Tidsdata for Plasmoids
++Comment[nds]=Tietdaten för Plasmoiden
++Comment[ne]=प्लासमोइड्सका लागि समय डेटा
++Comment[nl]=Tijdgegevens voor Plasmoids
++Comment[nn]=Tidsdata for plasmoidar
++Comment[pa]=ਪਲਾਜਮੋਡੀਸ ਲਈ ਟਾਈਮ ਡਾਟਾ
++Comment[pt]=Dados de data/hora para os Plasmóides
++Comment[pt_BR]=Dados de tempo para os Plasmoids
++Comment[sv]=Tiddata för Plasmoider
++Comment[vi]=Dữ liệu thời gian cho Plasmoids
++Comment[x-test]=xxTime data for Plasmoidsxx
++Comment[zh_CN]=Plasmoids 的时间数据
++Comment[zh_TW]=電漿時鐘的時間資料
++ServiceTypes=Plasma/DataEngine
++Type=Service
++Icon=alarmclock
++X-KDE-Library=plasma_engine_time
++X-EngineName=time
+--- /dev/null
++++ b/plasma/dataengines/time/timeengine.cpp
+@@ -0,0 +1,86 @@
++/*
++ *   Copyright 2007 Aaron Seigo <aseigo at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License as
++ *   published by the Free Software Foundation; either version 2 or
++ *   (at your option) any later version.
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "timeengine.h"
++
++#include <QDate>
++#include <QTime>
++#include <QTimer>
++
++#include <KDebug>
++#include <KLocale>
++#include <KSystemTimeZones>
++#include <KDateTime>
++
++#include "plasma/datacontainer.h"
++
++TimeEngine::TimeEngine(QObject* parent, const QVariantList& args)
++    : Plasma::DataEngine(parent)
++{
++    Q_UNUSED(args)
++    setMinimumUpdateInterval(333);
++}
++
++TimeEngine::~TimeEngine()
++{
++}
++
++bool TimeEngine::sourceRequested(const QString &name)
++{
++    //kDebug() << "TimeEngine::sourceRequested " << name;
++    if (name == "Local") {
++        setData(I18N_NOOP("Local"), I18N_NOOP("Time"), QTime::currentTime());
++        setData(I18N_NOOP("Local"), I18N_NOOP("Date"), QDate::currentDate());
++
++        return true;
++    }
++
++    KTimeZone newTz  = KSystemTimeZones::zone(name);
++    if (!newTz.isValid()) {
++        return false;
++    }
++
++    KDateTime dt = KDateTime::currentDateTime(newTz);
++    setData(name, I18N_NOOP("Time"), dt.time());
++    setData(name, I18N_NOOP("Date"), dt.date());
++
++    return true;
++}
++
++bool TimeEngine::updateSource(const QString &tz)
++{
++    //kDebug() << "TimeEngine::updateTime()";
++
++    QDateTime dt = QDateTime::currentDateTime();
++    KTimeZone local = KSystemTimeZones::local();
++    static const QString localName = I18N_NOOP("Local");
++    if (tz == localName) {
++        setData(tz, I18N_NOOP("Time"), dt.time());
++        setData(tz, I18N_NOOP("Date"), dt.date());
++    } else {
++        KTimeZone newTz = KSystemTimeZones::zone(tz);
++        QDateTime localizeDt = local.convert(newTz, dt);
++        setData(tz, I18N_NOOP("Time"), localizeDt.time());
++        setData(tz, I18N_NOOP("Date"), localizeDt.date());
++    }
++
++    return true;
++}
++
++#include "timeengine.moc"
+--- /dev/null
++++ b/plasma/dataengines/time/timeengine.h
+@@ -0,0 +1,45 @@
++/*
++ *   Copyright 2007 Aaron Seigo <aseigo at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License as
++ *   published by the Free Software Foundation; either version 2 or
++ *   (at your option) any later version.
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef TIMEENGINE_H
++#define TIMEENGINE_H
++
++#include "plasma/dataengine.h"
++
++class QTimer;
++
++/**
++ * This class evaluates the basic expressions given in the interface.
++ */
++class TimeEngine : public Plasma::DataEngine
++{
++    Q_OBJECT
++
++    public:
++        TimeEngine(QObject* parent, const QVariantList& args);
++        ~TimeEngine();
++
++    protected:
++        bool sourceRequested(const QString &name);
++        bool updateSource(const QString& source);
++};
++
++K_EXPORT_PLASMA_DATAENGINE(time, TimeEngine)
++
++#endif
+--- /dev/null
++++ b/plasma/dataengines/time/CMakeLists.txt
+@@ -0,0 +1,10 @@
++set(time_engine_SRCS
++    timeengine.cpp
++)
++
++kde4_add_plugin(plasma_engine_time ${time_engine_SRCS})
++target_link_libraries(plasma_engine_time ${KDE4_KDECORE_LIBS} plasma)
++
++install(TARGETS plasma_engine_time DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-engine-time.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
++
+--- a/plasma/engineexplorer/engineexplorer.ui
++++ b/plasma/engineexplorer/engineexplorer.ui
+@@ -5,23 +5,11 @@
+    <rect>
+     <x>0</x>
+     <y>0</y>
+-    <width>400</width>
++    <width>513</width>
+     <height>300</height>
+    </rect>
+   </property>
+   <layout class="QVBoxLayout" >
+-   <property name="leftMargin" >
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin" >
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin" >
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin" >
+-    <number>0</number>
+-   </property>
+    <item>
+     <widget class="KTitleWidget" name="m_title" >
+      <property name="text" >
+@@ -40,7 +28,7 @@
+         <bool>false</bool>
+        </property>
+        <property name="clickMessage" >
+-        <string>Request a datasource</string>
++        <string>Source name</string>
+        </property>
+        <property name="showClearButton" stdset="0" >
+         <bool>true</bool>
+@@ -48,6 +36,31 @@
+       </widget>
+      </item>
+      <item>
++      <widget class="QSpinBox" name="m_updateInterval" >
++       <property name="enabled" >
++        <bool>false</bool>
++       </property>
++       <property name="suffix" >
++        <string>ms</string>
++       </property>
++       <property name="prefix" >
++        <string>update every </string>
++       </property>
++       <property name="minimum" >
++        <number>0</number>
++       </property>
++       <property name="maximum" >
++        <number>100000</number>
++       </property>
++       <property name="singleStep" >
++        <number>50</number>
++       </property>
++       <property name="value" >
++        <number>50</number>
++       </property>
++      </widget>
++     </item>
++     <item>
+       <widget class="QPushButton" name="m_sourceRequesterButton" >
+        <property name="enabled" >
+         <bool>false</bool>
+@@ -99,8 +112,24 @@
+      <y>92</y>
+     </hint>
+     <hint type="destinationlabel" >
+-     <x>362</x>
+-     <y>90</y>
++     <x>502</x>
++     <y>109</y>
++    </hint>
++   </hints>
++  </connection>
++  <connection>
++   <sender>m_updateInterval</sender>
++   <signal>editingFinished()</signal>
++   <receiver>m_sourceRequesterButton</receiver>
++   <slot>animateClick()</slot>
++   <hints>
++    <hint type="sourcelabel" >
++     <x>375</x>
++     <y>91</y>
++    </hint>
++    <hint type="destinationlabel" >
++     <x>447</x>
++     <y>94</y>
+     </hint>
+    </hints>
+   </connection>
+--- a/plasma/engineexplorer/engineexplorer.cpp
++++ b/plasma/engineexplorer/engineexplorer.cpp
+@@ -22,6 +22,8 @@
+ #include <QApplication>
+ #include <QStandardItemModel>
+ #include <QVBoxLayout>
++#include <QHBoxLayout>
++#include <QSpinBox>
+ 
+ #include <KAction>
+ #include <KIconLoader>
+@@ -35,8 +37,6 @@
+       m_engine(0),
+       m_sourceCount(0)
+ {
+-    setButtons(KDialog::Close);
+-    setDefaultButton(KDialog::NoDefault);
+     setWindowTitle(i18n("Plasma Engine Explorer"));
+     QWidget* mainWidget = new QWidget(this);
+     setMainWidget(mainWidget);
+@@ -82,7 +82,9 @@
+ {
+     m_engines->clear();
+     m_engines->addItem("");
+-    m_engines->addItems(m_engineManager->knownEngines());
++    QStringList engines = m_engineManager->knownEngines();
++    qSort(engines);
++    m_engines->addItems(engines);
+ }
+ 
+ void EngineExplorer::showEngine(const QString& name)
+@@ -124,6 +126,7 @@
+     }
+ 
+     m_sourceRequesterButton->setEnabled(true);
++    m_updateInterval->setEnabled(true);
+     m_sourceRequester->setEnabled(true);
+     m_sourceRequester->setFocus();
+     connect(m_engine, SIGNAL(newSource(QString)), this, SLOT(addSource(QString)));
+@@ -173,7 +176,7 @@
+         return;
+     }
+ 
+-    m_engine->connectSource(source, this);
++    m_engine->connectSource(source, this, (uint)m_updateInterval->value());
+ }
+ 
+ QString EngineExplorer::convertToString(const QVariant &value) const
+--- /dev/null
++++ b/plasma/applets/devicenotifier/Messages.sh
+@@ -0,0 +1,2 @@
++#! /usr/bin/env bash
++$XGETTEXT *.cpp -o $podir/plasma_applet_devicenotifier.pot
+--- /dev/null
++++ b/plasma/applets/devicenotifier/devicenotifier.cpp
+@@ -0,0 +1,208 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Alexis Ménard <darktears31 at gmail.com>           *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
++ ***************************************************************************/
++
++#include "devicenotifier.h"
++
++#include <QPainter>
++#include <QColor>
++#include <QApplication>
++
++#include <plasma/widgets/hboxlayout.h>
++#include <plasma/widgets/label.h>
++#include <plasma/widgets/widget.h>
++#include <plasma/widgets/icon.h>
++
++#include <KDialog>
++
++#include <QtDBus/QDBusInterface>
++#include <QtDBus/QDBusReply>
++
++using namespace Plasma;
++
++
++DeviceNotifier::DeviceNotifier(QObject *parent, const QVariantList &args)
++    : Plasma::Applet(parent, args),m_dialog(0)
++{
++    setDrawStandardBackground(true);
++    setHasConfigurationInterface(true);
++    m_layout = new Plasma::HBoxLayout(this);
++    m_layout->setMargin(0);
++    m_layout->setSpacing(0);
++    test =new QString("Welcome to Device Notifier");
++    m_label=new Plasma::Label(this);
++    m_label->setText(*test);
++    m_label->setPen(QPen(Qt::white));    
++
++    m_time=5;
++    m_height=150;
++
++    SolidEngine = dataEngine("hotplug");
++    m_udi="";
++    icon = false;
++    first=true;
++    
++    m_font = QApplication::font();
++    m_font.setWeight(QFont::Bold);
++
++
++    //connect the timer to MoveDown Animation
++    t=new QTimer(this);
++    connect(t,SIGNAL(timeout()),this,SLOT(moveDown()));
++
++    //connect to engine when a device is plug
++    connect(SolidEngine, SIGNAL(newSource(const QString&)),this, SLOT(SourceAdded(const QString&)));
++
++}
++
++DeviceNotifier::~DeviceNotifier()
++{
++}
++
++void DeviceNotifier::paintInterface(QPainter *p, const QStyleOptionGraphicsItem *option, const QRect &contentsRect)
++{
++    Q_UNUSED(option);
++    Q_UNUSED(p);
++    Q_UNUSED(contentsRect);
++    if(icon)
++    {
++	m_layout->addItem(m_icon);
++    }
++    m_layout->addItem(m_label);
++    kDebug()<<"DeviceNotifier:: geometry "<<geometry().width();
++    //hide();
++}
++
++void DeviceNotifier::hideNotifier(QGraphicsItem * item)
++{
++    icon=false; 
++    item->hide();
++}
++
++void DeviceNotifier::moveUp()
++{
++    t->start(m_time*1000);
++    disconnect(Phase::self(),SIGNAL(movementComplete(QGraphicsItem *)),this,SLOT(hideNotifier(QGraphicsItem *)));
++    show();
++    Phase::self()->moveItem(this, Phase::SlideIn,QPoint(geometry().x(),geometry().y()-m_height));
++}
++
++
++void DeviceNotifier::moveDown()
++{
++    t->stop();
++    Phase::self()->moveItem(this, Phase::SlideOut,QPoint(geometry().x(),geometry().y()+m_height));
++    connect(Phase::self(),SIGNAL(movementComplete(QGraphicsItem *)),this,SLOT(hideNotifier(QGraphicsItem *)));
++}
++
++
++void DeviceNotifier::updated(const QString &source, Plasma::DataEngine::Data data)
++{
++    if(data.size()>0)
++    {
++		kDebug()<<"DeviceNotifier:: "<<data[source].toString();
++		desktop_files=data["predicateFiles"].toStringList();
++		kDebug()<<data["icon"].toString();
++		QString icon_temp = data["icon"].toString();
++		
++		m_layout->removeItem(m_label);
++		delete m_label;
++
++		if(first)
++		{
++		  origin_size=geometry();
++		  first=false;
++		}
++		else
++		{
++		  m_layout->removeItem(m_icon);
++		  delete m_icon;
++		}
++		
++		delete m_layout;
++		m_layout = new Plasma::HBoxLayout(this);
++		m_layout->setMargin(0);
++		m_layout->setSpacing(0);
++    
++
++		k_icon = new KIcon(icon_temp);
++		m_icon=new Plasma::Icon(*k_icon,"",this);
++		
++		m_label=new Plasma::Label(this);
++		icon = true;
++		device_name=i18n("A new device has been detected : \n");
++		device_name+=data["text"].toString();
++		m_label->setPen(QPen(Qt::white));
++		m_label->setText(device_name);
++
++
++		float size_h=origin_size.height();
++		float size_w=origin_size.width();
++		size_h+=m_icon->iconSize().height();
++		size_w+=m_label->geometry().width();
++		QRectF * temp= new QRectF(origin_size.x(),origin_size.y(),size_w,size_h);
++		setGeometry(*temp);
++		update();
++		moveUp();
++     }
++}
++
++void DeviceNotifier::SourceAdded(const QString& source)
++{
++    kDebug()<<"DeviceNotifier:: source added"<<source;
++    m_udi = source;
++    SolidEngine->connectSource(source, this);
++}
++
++void DeviceNotifier::mousePressEvent(QGraphicsSceneMouseEvent *event)
++{
++    Q_UNUSED(event);
++    if(icon)
++    {
++	kDebug()<<"DeviceNotifier:: call Solid Ui Server with params :"<<m_udi<<","<<desktop_files;
++	QDBusInterface soliduiserver("org.kde.kded", "/modules/soliduiserver", "org.kde.kded.SolidUiServer");
++	QDBusReply<void> reply = soliduiserver.call("showActionsDialog", m_udi,desktop_files);
++    }
++}
++
++void DeviceNotifier::showConfigurationInterface()
++{
++     if (m_dialog == 0) 
++     {
++		kDebug()<<"DeviceNotifier:: Enter in configuration interface";
++     	m_dialog = new KDialog;
++        m_dialog->setCaption( i18n("Configure New Device Notifier") );
++
++        ui.setupUi(m_dialog->mainWidget());
++        m_dialog->setButtons( KDialog::Ok | KDialog::Cancel | KDialog::Apply );
++        connect( m_dialog, SIGNAL(applyClicked()), this, SLOT(configAccepted()) );
++        connect( m_dialog, SIGNAL(okClicked()), this, SLOT(configAccepted()) );
++		ui.spinTime->setValue(m_time);
++        ui.spinHeight->setValue(m_height);
++      }
++      m_dialog->show();
++}
++
++void DeviceNotifier::configAccepted()
++{
++    kDebug()<<"DeviceNotifier:: Config Accepted with params"<<ui.spinTime->value()<<","<<ui.spinHeight->value();
++	m_time=ui.spinTime->value();
++    m_height=ui.spinHeight->value();
++}
++
++#include "devicenotifier.moc"
+--- /dev/null
++++ b/plasma/applets/devicenotifier/deviceNotifierConfig.ui
+@@ -0,0 +1,114 @@
++<ui version="4.0" >
++ <class>solidNotifierConfig</class>
++ <widget class="QWidget" name="solidNotifierConfig" >
++  <property name="geometry" >
++   <rect>
++    <x>0</x>
++    <y>0</y>
++    <width>400</width>
++    <height>300</height>
++   </rect>
++  </property>
++  <layout class="QGridLayout" >
++   <item row="0" column="0" >
++    <layout class="QVBoxLayout" >
++     <property name="spacing" >
++      <number>6</number>
++     </property>
++     <property name="leftMargin" >
++      <number>0</number>
++     </property>
++     <property name="topMargin" >
++      <number>0</number>
++     </property>
++     <property name="rightMargin" >
++      <number>0</number>
++     </property>
++     <property name="bottomMargin" >
++      <number>0</number>
++     </property>
++     <item>
++      <layout class="QHBoxLayout" >
++       <property name="spacing" >
++        <number>6</number>
++       </property>
++       <property name="leftMargin" >
++        <number>0</number>
++       </property>
++       <property name="topMargin" >
++        <number>0</number>
++       </property>
++       <property name="rightMargin" >
++        <number>0</number>
++       </property>
++       <property name="bottomMargin" >
++        <number>0</number>
++       </property>
++       <item>
++        <widget class="QLabel" name="labelSize_2" >
++         <property name="text" >
++          <string>Time to stay on top position (s) :</string>
++         </property>
++        </widget>
++       </item>
++       <item>
++        <widget class="QSpinBox" name="spinTime" >
++         <property name="toolTip" >
++          <string>Change clock size</string>
++         </property>
++         <property name="whatsThis" >
++          <string>Set a new size for the clock between 0 and 500. The size is the square side that contains the clock.</string>
++         </property>
++         <property name="maximum" >
++          <number>500</number>
++         </property>
++        </widget>
++       </item>
++      </layout>
++     </item>
++     <item>
++      <layout class="QHBoxLayout" >
++       <property name="spacing" >
++        <number>6</number>
++       </property>
++       <property name="leftMargin" >
++        <number>0</number>
++       </property>
++       <property name="topMargin" >
++        <number>0</number>
++       </property>
++       <property name="rightMargin" >
++        <number>0</number>
++       </property>
++       <property name="bottomMargin" >
++        <number>0</number>
++       </property>
++       <item>
++        <widget class="QLabel" name="labelSize" >
++         <property name="text" >
++          <string>Height of movement (px) :</string>
++         </property>
++        </widget>
++       </item>
++       <item>
++        <widget class="QSpinBox" name="spinHeight" >
++         <property name="toolTip" >
++          <string>Change clock size</string>
++         </property>
++         <property name="whatsThis" >
++          <string>Set a new size for the clock between 0 and 500. The size is the square side that contains the clock.</string>
++         </property>
++         <property name="maximum" >
++          <number>500</number>
++         </property>
++        </widget>
++       </item>
++      </layout>
++     </item>
++    </layout>
++   </item>
++  </layout>
++ </widget>
++ <resources/>
++ <connections/>
++</ui>
+--- /dev/null
++++ b/plasma/applets/devicenotifier/test-predicate-openinwindow.desktop
+@@ -0,0 +1,4 @@
++[Desktop Entry]
++Encoding=UTF-8
++X-KDE-Solid-Predicate=[[ StorageVolume.ignored == false AND StorageVolume.usage == 'FileSystem' ] OR [ IS StorageAccess AND StorageDrive.driveType == 'Floppy' ]]
++Actions=OpenInWindow;
+--- /dev/null
++++ b/plasma/applets/devicenotifier/devicenotifier.h
+@@ -0,0 +1,92 @@
++/***************************************************************************
++ *   Copyright (C) 2007 by Alexis Ménard <darktears31 at gmail.com>           *
++ *                                                                         *
++ *   This program is free software; you can redistribute it and/or modify  *
++ *   it under the terms of the GNU General Public License as published by  *
++ *   the Free Software Foundation; either version 2 of the License, or     *
++ *   (at your option) any later version.                                   *
++ *                                                                         *
++ *   This program is distributed in the hope that it will be useful,       *
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
++ *   GNU General Public License for more details.                          *
++ *                                                                         *
++ *   You should have received a copy of the GNU General Public License     *
++ *   along with this program; if not, write to the                         *
++ *   Free Software Foundation, Inc.,                                       *
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
++ ***************************************************************************/
++
++#ifndef DEVICENOTIFIER_H
++#define DEVICENOTIFIER_H
++
++#include <plasma/applet.h>
++#include <plasma/dataengine.h>
++#include <plasma/phase.h>
++#include <KIcon>
++#include <QTimer>
++
++#include "ui_deviceNotifierConfig.h"
++
++namespace Plasma
++{
++    class Svg;
++    class Widget;
++    class Label;
++    class Icon;
++    class HBoxLayout;
++    class ProgressBar;
++} // namespace Plasma
++
++class KDialog;
++
++class DeviceNotifier : public Plasma::Applet
++{
++    Q_OBJECT
++
++
++    public:
++        DeviceNotifier(QObject *parent, const QVariantList &args);
++        ~DeviceNotifier();
++
++        void paintInterface(QPainter *painter, const QStyleOptionGraphicsItem *option, const QRect &contentsRect);
++        void mousePressEvent(QGraphicsSceneMouseEvent *event);
++		void moveUp();
++
++    public slots:
++        void SourceAdded(const QString &name);
++        void updated(const QString &source, Plasma::DataEngine::Data data);
++        void moveDown();
++        void hideNotifier(QGraphicsItem * item);
++		void showConfigurationInterface();
++		void configAccepted();
++
++    private:
++        Plasma::Label * m_label;
++		Plasma::Icon * m_icon;
++        QFont m_font;
++		QRectF origin_size;
++		
++        Plasma::HBoxLayout *m_layout;
++        bool icon;
++		bool first;
++
++        QTimer *t;
++        Plasma::DataEngine* SolidEngine;
++        QStringList desktop_files;
++        QString m_udi;
++        QString * test;
++        QString device_name;
++        KIcon * k_icon;
++		int m_pixelSize;
++		int m_height;
++		int m_time;
++		KDialog *m_dialog;
++        /// Designer Config file
++        Ui::solidNotifierConfig ui;
++
++};
++
++K_EXPORT_PLASMA_APPLET(devicenotifier, DeviceNotifier)
++
++#endif
+--- /dev/null
++++ b/plasma/applets/devicenotifier/plasma-applet-devicenotifier.desktop
+@@ -0,0 +1,32 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=New Device Notifier
++Name[et]=Uue seadme teadustaja
++Name[ja]=新しいデバイスの通知
++Name[pt]=Notificação de Dispositivos Novos
++Name[pt_BR]=Notificador de Novo Dispositivo
++Name[sv]=Underrättelse om ny enhet
++Name[zh_CN]=新设备通知
++Name[zh_TW]=新增裝置通知器
++Comment=New device notifier plasmoid
++Comment[et]=Uue seadme teadustamise plasmoid
++Comment[ja]=新しいデバイスを通知する Plasmoid
++Comment[pt]=Plasmóide de notificação de dispositivos novos
++Comment[pt_BR]=Plasmoid notificador de novo dispositivo
++Comment[sv]=Plasmoid för underrättelse om ny enhet
++Comment[zh_TW]=新增裝置通知器
++Icon=drive-removable-media-usb-pendrive
++Type=Service
++ServiceTypes=Plasma/Applet
++
++X-KDE-Library=plasma_applet_devicenotifier
++X-KDE-PluginInfo-Author=The Plasma Team
++X-KDE-PluginInfo-Email=panel-devel at kde.org
++X-KDE-PluginInfo-Name=notifier
++X-KDE-PluginInfo-Version=pre0.1
++X-KDE-PluginInfo-Website=http://plasma.kde.org/
++X-KDE-PluginInfo-Category=System Information
++X-KDE-PluginInfo-Depends=
++X-KDE-PluginInfo-License=GPL
++X-KDE-PluginInfo-EnabledByDefault=true
++
+--- /dev/null
++++ b/plasma/applets/devicenotifier/CMakeLists.txt
+@@ -0,0 +1,12 @@
++project(plasma-devicenotifier)
++
++set(devicenotifier_SRCS
++    devicenotifier.cpp)
++
++kde4_add_ui_files(devicenotifier_SRCS deviceNotifierConfig.ui )
++kde4_add_plugin(plasma_applet_devicenotifier ${devicenotifier_SRCS})
++target_link_libraries(plasma_applet_devicenotifier plasma ${KDE4_KIO_LIBS})
++
++install(TARGETS plasma_applet_devicenotifier DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES plasma-applet-devicenotifier.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++install(FILES test-predicate-openinwindow.desktop DESTINATION ${DATA_INSTALL_DIR}/solid/actions )
+--- a/plasma/applets/launcher/url.cpp
++++ b/plasma/applets/launcher/url.cpp
+@@ -30,49 +30,61 @@
+ #include <KSharedConfig>
+ #include <KUrl>
+ 
++#include <plasma/widgets/boxlayout.h>
+ #include <plasma/widgets/icon.h>
+ 
+ Url::Url(QObject *parent, const QVariantList &args)
+     : Plasma::Applet(parent, args),
++      m_icon(0),
++//      m_icon(new Plasma::Icon(this)),
+       m_dialog(0)
+ {
+-    setAcceptDrops(true);
+-
+-    m_icon = new Plasma::Icon(this);
+-    connect(m_icon, SIGNAL(clicked()), this, SLOT(openUrl()));
+-
+     KConfigGroup cg = config();
+-
+     int size = globalConfig().readEntry("IconSize", IconSize(KIconLoader::Desktop));
+     size = cg.readEntry("IconSize", size);
+ 
++    new Plasma::HBoxLayout(this);
++    m_icon = new Plasma::Icon(this),
++    connect(m_icon, SIGNAL(clicked()), this, SLOT(openUrl()));
+     m_icon->setIconSize(size, size);
+     if (args.count() > 2) {
+         setUrl(args.at(2).toString());
+     } else {
+         setUrl(cg.readEntry("Url"));
+     }
++    resize(m_icon->sizeHint());
++
++    setAcceptDrops(true);
+ }
+ 
+ Url::~Url()
+ {
+-    KConfigGroup cg = config();
+-    cg.writeEntry("IconSize", m_icon->iconSize().toSize());
+-    cg.writeEntry("Url", m_url);
+ }
+ 
+-QSizeF Url::contentSize() const
++void Url::saveState(KConfigGroup *cg)
+ {
+-//    kDebug() << "contentSize is " << m_icon->boundingRect().size();
+-    return m_icon->boundingRect().size();
++    cg->writeEntry("IconSize", m_icon->iconSize().toSize());
++    cg->writeEntry("Url", m_url);
+ }
+ 
++/*QSizeF Url::contentSizeHint() const
++{
++//    kDebug() << "contentSize is " << m_icon->boundingRect().size();
++    kDebug() << (m_icon ? m_icon->sizeHint() : QSizeF(48, 48)).toSize(); //m_icon->sizeHint();
++    return m_icon ? m_icon->sizeHint() : QSizeF(48, 48); //m_icon->sizeHint();
++}*/
++
+ void Url::setUrl(const KUrl& url)
+ {
+     m_url = url;
++
+     KMimeType::Ptr mime = KMimeType::findByUrl(url);
+     m_mimetype = mime->name();
+     m_icon->setIcon(KMimeType::iconNameForUrl(url));
++
++    if (m_icon->icon().isNull()) {
++        m_icon->setIcon("unknown");
++    }
+ }
+ 
+ void Url::openUrl()
+--- a/plasma/applets/launcher/plasma-applet-url.desktop
++++ b/plasma/applets/launcher/plasma-applet-url.desktop
+@@ -7,6 +7,7 @@
+ Name[de]=Knopf
+ Name[el]=Κουμπί
+ Name[es]=Botón
++Name[et]=Nupp
+ Name[fa]=بوتان
+ Name[ga]=Cnaipe
+ Name[he]=כפתור
+@@ -37,6 +38,7 @@
+ Comment[de]=Ein Start-Knopf
+ Comment[el]=Ένα κουμπί εκκίνησης
+ Comment[es]=Un botón lanzador
++Comment[et]=Käivitamisnupp
+ Comment[fa]=دکمۀ راه‌اندازی
+ Comment[ga]=Cnaipe tosaitheora
+ Comment[he]=כפתור הפעלה
+--- a/plasma/applets/launcher/url.h
++++ b/plasma/applets/launcher/url.h
+@@ -39,7 +39,7 @@
+         Url(QObject *parent, const QVariantList &args);
+         ~Url();
+ 
+-        QSizeF contentSize() const;
++//        QSizeF contentSizeHint() const;
+         void setUrl(const KUrl& url);
+ 
+     public slots:
+@@ -48,6 +48,7 @@
+ 
+     protected:
+         void dropEvent(QGraphicsSceneDragDropEvent *event);
++        void saveState(KConfigGroup *cg);
+         //void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ 
+     protected slots:
+--- a/plasma/applets/systemtray/systemtraywidget.cpp
++++ b/plasma/applets/systemtray/systemtraywidget.cpp
+@@ -106,6 +106,7 @@
+ 
+ void SystemTrayWidget::embedWindow(WId id)
+ {
++    kDebug() << "trying to add window with id " << id;
+     if (! m_containers.contains(id)) {
+         QX11EmbedContainer *container = new QX11EmbedContainer(this);
+         container->embedClient(id);
+@@ -114,7 +115,7 @@
+         container->show();
+         m_containers[id] = container;
+         connect(container, SIGNAL(clientClosed()), this, SLOT(windowClosed()) );
+-        kDebug() << "SystemTray: Window with id " << id << "added";
++        kDebug() << "SystemTray: Window with id " << id << "added" << container;
+     }
+ }
+ 
+@@ -125,16 +126,17 @@
+ 
+ void SystemTrayWidget::windowClosed()
+ {
++    kDebug() << "Window closed";
+     //by this point the window id is gone, so we have to iterate to find out who's lost theirs
+     ContainersList::iterator i = m_containers.begin();
+     while (i != m_containers.end()) {
+         QX11EmbedContainer *c=i.value();
+         if (c->clientWinId()==0) {
+-            m_containers.erase(i);
++            i=m_containers.erase(i);
+             kDebug() << "deleting container" << c;
+             delete c;
+-            //I assume that there will never be more than one without an id
+-            break;
++            //do NOT assume that there will never be more than one without an id
++            continue;
+         }
+         ++i;
+     }
+--- a/plasma/applets/systemtray/plasma-applet-systemtray.desktop
++++ b/plasma/applets/systemtray/plasma-applet-systemtray.desktop
+@@ -1,24 +1,63 @@
+ [Desktop Entry]
+ 
+-Name=System tray
++Name=System Tray
++Name[af]=Stelsel Laai
+ Name[be]=Сістэмны трэй
+ Name[bg]=Системен панел
++Name[br]=Barlenn ar reizhiad
++Name[ca]=Safata del sistema
++Name[cs]=Systémová část panelu
++Name[csb]=Systemòwi zabiérnik
++Name[cy]=Bar Tasgau
++Name[da]=Statusfelt
+ Name[de]=Systemabschnitt der Kontrollleiste
+ Name[el]=Πλαίσιο συστήματος
+-Name[ga]=Tráidire an chórais
++Name[eo]=Sistempleto
++Name[es]=Bandeja del sistema
++Name[et]=Süsteemne dokk
++Name[eu]=Sistemaren azpila
++Name[fa]=سینی سیستم
++Name[fi]=Ilmoitusalue
++Name[fr]=Boîte à miniatures
++Name[fy]=Systeemfak
++Name[ga]=Tráidire an Chórais
++Name[gl]=Bandexa do Sistema
++Name[he]=מגש מערכת
++Name[hr]=Sistemska traka
++Name[hu]=Rendszertálca
++Name[is]=Smáforritabakki
+ Name[it]=Vassoio di sistema
+ Name[ja]=システムトレイ
+-Name[kk]=Жүйелік сөре
+-Name[km]=ថាស​ប្រព័ន្ធ
++Name[ka]=სისტემური პანელი
+ Name[ko]=시스템 트레이
++Name[lt]=Sistemos dėklas
++Name[lv]=Sistēmas Tekne
++Name[mk]=Системска лента
++Name[ms]=Dulang Sistem
+ Name[nb]=Systemkurv
+-Name[nds]=Systeemafsnitt vun't Paneel
+-Name[nl]=Systeemvak
++Name[nds]=Paneel-Systeemafsnitt
++Name[ne]=प्रणाली ट्रे
+ Name[nn]=Systemtrau
+-Name[pt]=Bandeja do sistema
+-Name[pt_BR]=Bandeja do sistema
++Name[pa]=ਸਿਸਟਮ ਟਰੇ
++Name[pl]=Tacka systemowa
++Name[pt]=Bandeja do Sistema
++Name[pt_BR]=Área de Notificação
++Name[ro]=Tavă de sistem
++Name[ru]=Системный лоток
++Name[se]=Vuogádatgárcu
++Name[sl]=Sistemska vrstica
++Name[sr]=Системска касета
++Name[sr at latin]=Sistemska kaseta
+ Name[sv]=Systembricka
+-Name[x-test]=xxSystem trayxx
++Name[ta]=சாதன தட்டு
++Name[te]=వ్యవస్థ ట్రె
++Name[tg]=Сафҳаи идоракунии система
++Name[th]=ถาดระบบ
++Name[tr]=Sistem Çekmecesi
++Name[uk]=Системний лоток
++Name[vi]=Khay hệ thống
++Name[x-test]=xxSystem Trayxx
++Name[xh]=Itreyi Yendlela yokusebenza
+ Name[zh_CN]=系统托盘
+ Name[zh_TW]=系統匣
+ Type=Service
+@@ -31,7 +70,7 @@
+ X-KDE-PluginInfo-Version=pre0.1
+ X-KDE-PluginInfo-Website=http://plasma.kde.org
+ X-KDE-PluginInfo-Category=Windows and Tasks
+-X-KDE-PluginInfo-Depeneds=
++X-KDE-PluginInfo-Depends=
+ X-KDE-PluginInfo-License=GPL v2+
+ X-KDE-PluginInfo-EnabledByDefault=true
+ 
+--- a/plasma/applets/tasks/tasks.cpp
++++ b/plasma/applets/tasks/tasks.cpp
+@@ -23,6 +23,7 @@
+ 
+ // Standard
+ #include <math.h>
++#include <limits.h>
+ 
+ // Qt
+ #include <QApplication>
+@@ -33,12 +34,16 @@
+ #include <QTimeLine>
+ #include <QStyleOptionGraphicsItem>
+ #include <QtDebug>
++#include <QTextLayout>
++#include <QTextOption>
+ 
+ // KDE
++#include <KAuthorized>
+ #include <KColorScheme>
+ #include <KGlobalSettings>
+ #include <KIcon>
+ #include <KIconLoader>
++#include <taskmanager/taskrmbmenu.h>
+ 
+ // Plasma
+ #include <plasma/widgets/boxlayout.h>
+@@ -66,7 +71,6 @@
+         _rootTaskGroup->layout()->setAnimator(animator);
+ 
+     layout->addItem(_rootTaskGroup);
+-    setLayout(layout);
+ 
+     // testing
+         _rootTaskGroup->setBorderStyle(TaskGroupItem::NoBorder);
+@@ -312,26 +316,127 @@
+     }
+ }
+ 
+-QRectF AbstractTaskItem::iconRect() const
++QSize AbstractTaskItem::layoutText(QTextLayout &layout, const QString &text,
++                                   const QSize &constraints) const
+ {
+-    QSizeF iconSize = _icon.actualSize(boundingRect().size().toSize());
+-    //iconSize.scale(boundingRect().size(),Qt::KeepAspectRatio);
++    QFontMetrics metrics(layout.font());
++    int leading     = metrics.leading();
++    int height      = 0;
++    int maxWidth    = constraints.width();
++    int widthUsed   = 0;
++    int lineSpacing = metrics.lineSpacing();
++    QTextLine line;
++
++    layout.setText(text);
++
++    layout.beginLayout();
++    while ((line = layout.createLine()).isValid())
++    {
++        height += leading;
++
++        // Make the last line that will fit infinitely long.
++        // drawTextLayout() will handle this by fading the line out
++        // if it won't fit in the contraints.
++        if (height + 2 * lineSpacing > constraints.height())
++            maxWidth = INT_MAX;
+ 
+-    QRectF rect = QRectF(QPointF(0,0), iconSize);
+-    rect.moveTop((boundingRect().height() - rect.height()) / 2);
++        line.setLineWidth(maxWidth);
++        line.setPosition(QPoint(0, height));
+ 
+-    return rect;
++        height += int(line.height());
++        widthUsed = int(qMax(qreal(widthUsed), line.naturalTextWidth()));
++    }
++    layout.endLayout();
++
++    return QSize(widthUsed, height);
+ }
+ 
+-QRectF AbstractTaskItem::textRect() const
++void AbstractTaskItem::drawTextLayout(QPainter *painter, const QTextLayout &layout, const QRect &rect) const
+ {
+-    QRectF text = boundingRect();
+-    text.setLeft(iconRect().right() + IconTextSpacing);
++    QPixmap pixmap(rect.size());
++    pixmap.fill(Qt::transparent);
++
++    QPainter p(&pixmap);
++    p.setPen(painter->pen());
++
++    // Create the alpha gradient for the fade out effect
++    QLinearGradient alphaGradient(0, 0, 1, 0);
++    alphaGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
++    if (layout.textOption().textDirection() == Qt::LeftToRight)
++    {
++        alphaGradient.setColorAt(0, QColor(0, 0, 0, 255));
++        alphaGradient.setColorAt(1, QColor(0, 0, 0, 0));
++    } else
++    {
++        alphaGradient.setColorAt(0, QColor(0, 0, 0, 0));
++        alphaGradient.setColorAt(1, QColor(0, 0, 0, 255));
++    }
++
++    QFontMetrics fm(layout.font());
++    int textHeight = layout.lineCount() * fm.lineSpacing();
++    QPointF position = textHeight < rect.height() ?
++            QPointF(0, (rect.height() - textHeight) / 2) : QPointF(0, 0);
++    QList<QRect> fadeRects;
++    int fadeWidth = 30;
++
++    // Draw each line in the layout
++    for (int i = 0; i < layout.lineCount(); i++)
++    {
++        QTextLine line = layout.lineAt(i);
++        line.draw(&p, position);
++
++        // Add a fade out rect to the list if the line is too long
++        if (line.naturalTextWidth() > rect.width())
++        {
++            int x = int(qMin(line.naturalTextWidth(), (qreal)pixmap.width())) - fadeWidth;
++            int y = int(line.position().y() + position.y());
++            QRect r = QStyle::visualRect(layout.textOption().textDirection(), pixmap.rect(),
++                                         QRect(x, y, fadeWidth, int(line.height())));
++            fadeRects.append(r);
++        }
++    }
++
++    // Reduce the alpha in each fade out rect using the alpha gradient
++    if (!fadeRects.isEmpty())
++    {
++        p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
++        foreach (const QRect &rect, fadeRects)
++            p.fillRect(rect, alphaGradient);
++    }
+ 
+-    text.setTop(text.top() + 5);
+-    text.setBottom(text.bottom() - 5);
++    p.end();
+ 
+-    return text;
++    painter->drawPixmap(rect.topLeft(), pixmap);
++}
++
++QTextOption AbstractTaskItem::textOption() const
++{
++    Qt::LayoutDirection direction = QApplication::layoutDirection();
++    Qt::Alignment alignment = QStyle::visualAlignment(direction, Qt::AlignLeft | Qt::AlignVCenter);
++
++    QTextOption option;
++    option.setTextDirection(direction);
++    option.setAlignment(alignment);
++    option.setWrapMode(QTextOption::WordWrap);
++
++    return option;
++}
++
++QRectF AbstractTaskItem::iconRect() const
++{
++    QSize iconSize = _icon.actualSize(boundingRect().size().toSize());
++
++    return QStyle::alignedRect(QApplication::layoutDirection(), Qt::AlignLeft | Qt::AlignVCenter,
++                               iconSize, boundingRect().toRect());
++}
++
++QRectF AbstractTaskItem::textRect() const
++{
++    QSize size(boundingRect().size().toSize());
++    size.rwidth() -= int(iconRect().width()) + qMin(0, IconTextSpacing - 2);
++
++    return QStyle::alignedRect(QApplication::layoutDirection(), Qt::AlignRight | Qt::AlignVCenter,
++                                     size, boundingRect().toRect());
+ }
+ 
+ void AbstractTaskItem::drawTask(QPainter *painter,
+@@ -352,10 +457,15 @@
+     // FIXME HARDCODE testing
+     painter->setPen(QPen(QColor(200,200,200), 1.0));
+ 
+-    painter->setBrush(QBrush());
+-    painter->drawText(textRect(),
+-                      Qt::AlignLeft | Qt::AlignVCenter | Qt::TextWordWrap,
+-                      _text);
++    QRect rect = textRect().toRect();
++    rect.adjust(2, 2, -2, -2); // Create a text margin
++
++    QTextLayout layout;
++    layout.setFont(painter->font());
++    layout.setTextOption(textOption());
++
++    layoutText(layout, _text, rect.size());
++    drawTextLayout(painter, layout, rect);
+ }
+ 
+ void AbstractTaskItem::paint(QPainter *painter,
+@@ -400,7 +510,7 @@
+ {
+     setAcceptDrops(true);
+ 
+-   setLayout(new Plasma::BoxLayout(Plasma::BoxLayout::LeftToRight, this));
++   new Plasma::BoxLayout(Plasma::BoxLayout::LeftToRight, this);
+    layout()->setMargin(0);
+    layout()->setSpacing(5);
+ }
+@@ -690,5 +800,15 @@
+     return _task;
+ }
+ 
++void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
++{
++    if(!KAuthorized::authorizeKAction("kwin_rmb") )
++    {
++        return;
++    }
++    e->accept();
++    TaskRMBMenu menu( windowTask() );
++    menu.exec( e->screenPos() );
++}
+ #include "tasks.moc"
+ 
+--- a/plasma/applets/tasks/plasma-tasks-default.desktop
++++ b/plasma/applets/tasks/plasma-tasks-default.desktop
+@@ -2,8 +2,9 @@
+ Name=Task Manager
+ Name[be]=Кіраванне заданнямі
+ Name[bg]=Мениджър на задачи
+-Name[de]=Prozessverwaltung<
++Name[de]=Prozessverwaltung
+ Name[el]=Διαχειριστής εργασιών
++Name[et]=Tegumihaldur
+ Name[ga]=Bainisteoir na dTascanna
+ Name[ja]=タスクマネージャ
+ Name[kk]=Тапсырмалар менеджері
+--- a/plasma/applets/tasks/tasks.h
++++ b/plasma/applets/tasks/tasks.h
+@@ -31,6 +31,8 @@
+ 
+ class QGraphicsSceneDragDropEvent;
+ class QTimeLine;
++class QTextLayout;
++class QTextOption;
+ 
+ class AbstractTaskItem;
+ class AbstractGroupingStrategy;
+@@ -222,6 +224,24 @@
+                           const QStyleOptionGraphicsItem *option,
+                           QWidget *widget);
+ 
++    /** Returns a QTextOption object for the icon label QTtextLayout.*/
++    QTextOption textOption() const;
++
++    /**
++     * Lays the text out in the text layout using the constraints, and returns the actual
++     * size required. The returned size may be wider than the constraints if the text
++     * contains a non-breakable word that is wider than the maximum width.
++     * If more height is needed than what's available, the last line that will fit will be
++     * extended to hold the remainder of the text.
++     */
++    QSize layoutText(QTextLayout &layout, const QString &text, const QSize &constraints) const;
++
++    /**
++     * Draws the text layout (which must already have the text layed out) in the rect using
++     * the supplied painter. If the layout contains text lines that are longer than the rect
++     * is wide, they will be elided by fading the text out.
++     */
++    void drawTextLayout(QPainter *painter, const QTextLayout &layout, const QRect &rect) const;
+ 
+ private slots:
+     void animationUpdate();
+@@ -273,6 +293,9 @@
+     virtual void activate();
+     virtual void close();
+ 
++protected:
++    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
++
+ private slots:
+     void updateTask();
+ 
+--- a/plasma/applets/digital-clock/clock.h
++++ b/plasma/applets/digital-clock/clock.h
+@@ -64,7 +64,7 @@
+     private:
+         void animateUpdate();
+ 
+-        QSizeF m_defaultElementSize;
++        QSize m_defaultElementSize;
+ 
+         // temporary, sort out a correct way for applets to be notified
+         // when their content size changes and then rather than tracking
+--- a/plasma/applets/digital-clock/plasma-clock-digital.desktop
++++ b/plasma/applets/digital-clock/plasma-clock-digital.desktop
+@@ -1,8 +1,36 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Name=Digital Clock
++Name[et]=Digikell
++Name[ga]=Clog Digiteach
++Name[ja]=デジタル時計
++Name[km]=នាឡិកា​ឌីជីថល
++Name[ko]=디지털 시계
++Name[nb]=Digital klokke
++Name[nds]=Digitaal Klock
++Name[nl]=Digitale klok
++Name[pt]=Relógio Digital
++Name[pt_BR]=Relógio Digital
++Name[sv]=Digitalklocka
++Name[x-test]=xxDigital Clockxx
++Name[zh_CN]=数字钟
++Name[zh_TW]=數位時鐘
+ 
+ Comment=An SVG themable digital clock
++Comment[et]=SVG teemaga digikell
++Comment[ga]=Clog digiteach le téamaí SVG
++Comment[ja]=SVG テーマを使ったデジタル時計
++Comment[km]=នាឡិកាឌីជីថល​​ដែល​អាច​ប្ដូរ​ស្បែក​បាន SVG
++Comment[ko]=SVG 테마를 사용하는 디지털 시계
++Comment[nb]=En SVG-klokke med drakter
++Comment[nds]=En Digitaalklock mit SVG-Mustern
++Comment[nl]=Een klok met SVG-themamogelijkheden
++Comment[pt]=Um relógio digital com temas em SVG
++Comment[pt_BR]=Um relógio digital com temas em SVG
++Comment[sv]=En SVG-temabaserad digitalklocka
++Comment[x-test]=xxAn SVG themable digital clockxx
++Comment[zh_CN]=SVG 主题的数字钟
++Comment[zh_TW]=SVG 可調整外觀數位時鐘
+ 
+ Icon=chronometer
+ Type=Service
+--- a/plasma/applets/digital-clock/clock.cpp
++++ b/plasma/applets/digital-clock/clock.cpp
+@@ -78,7 +78,8 @@
+         formFactor() == Plasma::MediaCenter) {
+         m_sizeHint = QSize(200, 90);
+     } else {
+-        m_sizeHint = QSize(56, 22); // this is ((el_width+el_hor_space)*4 , el_height*2+el_ver_space)
++        kDebug() << "####################################### Small FormFactor";
++        m_sizeHint = QSize(100, 48);
+     }
+     update();
+ }
+@@ -190,13 +191,13 @@
+     
+     const qreal margin = 4;
+     
+-    const qreal elHorizontalSpacing = 2;
+-    const qreal elVerticalSpacing = 1;
+-    qreal elWidth = contentsRect.width() / 4.0 - elHorizontalSpacing - margin*2;
+-    qreal elHeight = contentsRect.height() / 2.0 - elVerticalSpacing - margin*2;
++    const int elHorizontalSpacing = 2;
++    const int elVerticalSpacing = 2;
++    int elWidth = qRound((contentsRect.width() - elHorizontalSpacing - margin*2) / 4.0);
++    int elHeight = qRound((contentsRect.height() - elVerticalSpacing - margin*2) / 2.0);
+ 
+     // enforce natural aspect ratio for elements
+-    QSizeF elSize = m_defaultElementSize;
++    QSize elSize = m_defaultElementSize;
+     elSize.scale(elWidth,elHeight,Qt::KeepAspectRatio);
+     elWidth = elSize.width();
+     elHeight = elSize.height(); 
+@@ -208,7 +209,7 @@
+ 
+     // update graphic sizes when the applet's size changes
+     if ( contentsRect.size() != m_contentSize ) {
+-        m_theme->resize((int)elWidth,(int)elHeight);
++        m_theme->resize(elWidth,elHeight);
+         m_contentSize = contentsRect.size();
+     }
+ 
+@@ -257,7 +258,7 @@
+             element = QString('e')+oldMinutes+QString("-p2");
+             m_theme->paint(p, QRectF(99, 41, elWidth, elHeight), element);
+ 
+-            if (m_animationStep < 3) {
++            if (m_animationStep < 3 && m_animationStep > 0) {
+                 element = QString('e')+oldMinutes+QString("-p1");
+                 m_theme->paint(p, QRectF(99, 40-(elHeight/m_animationStep), elWidth, elHeight/m_animationStep), element);
+             } else {
+@@ -274,7 +275,7 @@
+                 element = QString('e')+oldHours+QString("-p2");
+                 m_theme->paint(p, QRectF(59, 41, elWidth, elHeight), element);
+ 
+-                if (m_animationStep < 3) {
++                if (m_animationStep < 3 && m_animationStep > 0) {
+                     element = QString('e')+oldHours+QString("-p1");
+                     m_theme->paint(p, QRectF(59, 40-(elHeight/m_animationStep), elWidth, elHeight/m_animationStep), element);
+                 } else {
+@@ -291,7 +292,7 @@
+                     element = QString('e')+oldHours+QString("-p2");
+                     m_theme->paint(p, QRectF(39, 41, elWidth, elHeight), element);
+ 
+-                    if (m_animationStep < 3) {
++                    if (m_animationStep < 3 && m_animationStep > 0) {
+                         element = QString('e')+oldHours+QString("-p1");
+                         m_theme->paint(p, QRectF(39, 40-(elHeight/m_animationStep), elWidth, elHeight/m_animationStep), element);
+                     } else {
+@@ -306,21 +307,26 @@
+         }
+     }
+ 
+-    // FIXME: this depends on the backgroundcolor of the theme, we'd want a matching contrast
+-    p->setPen(QPen(Qt::white));
++    // Only show the date when there's enough room
++    // We might want this configurable at some point.
++    if (formFactor() == Plasma::Planar ||
++        formFactor() == Plasma::MediaCenter) {
++        // FIXME: this depends on the backgroundcolor of the theme, we'd want a matching contrast
++        p->setPen(QPen(Qt::white));
+ 
+-    QString dateString = day + ' ' + month + ' ' + year;
+-    if (m_timezone != "Local")
+-    {
+-        dateString += "\n" + m_timezone;
+-    }
+-    p->drawText( QRectF(margin,
+-                        bottomElementTop+elHeight,
+-                        contentsRect.right()-margin,
+-                        contentsRect.bottom()) ,
+-                 dateString,
+-                 QTextOption(Qt::AlignHCenter)
+-               );
++        QString dateString = day + ' ' + month + ' ' + year;
++        if (m_timezone != "Local")
++        {
++            dateString += "\n" + m_timezone;
++        }
++        p->drawText( QRectF(margin,
++                            bottomElementTop+elHeight,
++                            contentsRect.right()-margin,
++                            contentsRect.bottom()) ,
++                    dateString,
++                    QTextOption(Qt::AlignHCenter)
++                );
++    }
+ }
+ 
+ #include "clock.moc"
+--- a/plasma/applets/battery/plasma-battery-default.desktop
++++ b/plasma/applets/battery/plasma-battery-default.desktop
+@@ -2,8 +2,10 @@
+ Name=Battery Monitor
+ Name[be]=Назіранне за батарэяй
+ Name[el]=Επόπτης συστήματος
++Name[et]=Aku jälgija
+ Name[ja]=バッテリモニタ
+ Name[km]=កម្មវិធី​ត្រួត​​ពិនិត្យ​ថាមពល
++Name[ko]=배터리 표시기
+ Name[nb]=Batteriovervåker
+ Name[nds]=Batteriekieker
+ Name[nl]=Accumonitor
+@@ -16,8 +18,10 @@
+ Comment=A battery charge monitor
+ Comment[be]=Назіранне за зарадам батарэй
+ Comment[el]=Ένας επόπτης φόρτισης της μπαταρίας
++Comment[et]=Aku täidetuse jälgija
+ Comment[ja]=バッテリ残量モニタ
+ Comment[km]=កម្មវិធី​ត្រួត​ពិនិត្យ​ការ​បញ្ចូល​ថ្ម
++Comment[ko]=배터리 충전량 표시기
+ Comment[nb]=En overvåker for batterilading
+ Comment[nds]=En Kieker för de Batterieladen
+ Comment[nl]=Opladen van de accu volgen
+--- a/plasma/applets/battery/batteryConfig.ui
++++ b/plasma/applets/battery/batteryConfig.ui
+@@ -41,23 +41,17 @@
+      <item>
+       <widget class="QLabel" name="labelSize" >
+        <property name="text" >
+-        <string>Size of the battery</string>
++        <string>Size of the battery:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QSpinBox" name="spinSize" >
+        <property name="toolTip" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change clock size&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Change battery size</string>
+        </property>
+        <property name="whatsThis" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Set a new size for the clock between 0 and 500. The size is the square side that contains the clock.&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Set a new size for the battery between 0 and 500. The size is the square side that contains the battery.</string>
+        </property>
+        <property name="maximum" >
+         <number>500</number>
+--- a/plasma/applets/battery/CMakeLists.txt
++++ b/plasma/applets/battery/CMakeLists.txt
+@@ -1,5 +1,4 @@
+ project(plasma-battery)
+-include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${PLASMA_INCLUDE_DIR})
+ 
+ set(battery_SRCS
+     battery.cpp)
+--- a/plasma/applets/clock/clock.cpp
++++ b/plasma/applets/clock/clock.cpp
+@@ -62,7 +62,6 @@
+     m_theme->resize(m_pixelSize, m_pixelSize);
+ 
+     connectToEngine();
+-    setCachePaintMode(NoCacheMode);
+ }
+ 
+ void Clock::connectToEngine()
+@@ -122,7 +121,7 @@
+ {
+      if (m_dialog == 0) {
+         m_dialog = new KDialog;
+-        m_dialog->setCaption( i18n("Configure Clock") );
++        m_dialog->setCaption( i18nc("@title:window","Configure Clock") );
+ 
+         ui.setupUi(m_dialog->mainWidget());
+         m_dialog->setButtons( KDialog::Ok | KDialog::Cancel | KDialog::Apply );
+--- a/plasma/applets/clock/clockConfig.ui
++++ b/plasma/applets/clock/clockConfig.ui
+@@ -79,16 +79,10 @@
+      <item>
+       <widget class="QCheckBox" name="showSecondHandCheckBox" >
+        <property name="toolTip" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Display the second hand&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Display the second hand</string>
+        </property>
+        <property name="whatsThis" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check this if you want to display the second hand in order to see the seconds.&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Check this if you want to display the second hand in order to see the seconds.</string>
+        </property>
+        <property name="text" >
+         <string>Display seconds</string>
+@@ -98,16 +92,10 @@
+      <item>
+       <widget class="QCheckBox" name="showTimeStringCheckBox" >
+        <property name="toolTip" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Display the time as a string&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Display the time as a string</string>
+        </property>
+        <property name="whatsThis" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Check this if you want to display the time as a string within the clock.&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Check this if you want to display the time as a string within the clock.</string>
+        </property>
+        <property name="text" >
+         <string>Also display the time in text</string>
+@@ -134,23 +122,17 @@
+        <item>
+         <widget class="QLabel" name="labelSize" >
+          <property name="text" >
+-          <string>Size of the clock</string>
++          <string>Size of the clock:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="spinSize" >
+          <property name="toolTip" >
+-          <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change clock size&lt;/p>&lt;/body>&lt;/html></string>
++          <string>Change clock size</string>
+          </property>
+          <property name="whatsThis" >
+-          <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'DejaVu Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Set a new size for the clock between 0 and 500. The size is the square side that contains the clock.&lt;/p>&lt;/body>&lt;/html></string>
++          <string>Set a new size for the clock between 0 and 500. The size is the square side that contains the clock.</string>
+          </property>
+          <property name="maximum" >
+           <number>500</number>
+--- a/plasma/applets/clock/plasma-clock-analog.desktop
++++ b/plasma/applets/clock/plasma-clock-analog.desktop
+@@ -8,6 +8,7 @@
+ Name[de]=Analoge Uhr
+ Name[el]=Αναλογικό ρολόι
+ Name[es]=Reloj analógico
++Name[et]=Analoogkell
+ Name[fa]=ساعت قیاسی
+ Name[ga]=Clog Analógach
+ Name[he]=שעון אנלוגי
+@@ -35,12 +36,14 @@
+ Comment[de]=Eine Uhr mit SVG-fähigem Design
+ Comment[el]=Ένα ρολόι με θέματα SVG
+ Comment[es]=Un reloj con temas en formato SVG
++Comment[et]=SVG teemaga kell
+ Comment[fa]=ساعت چهره‌پذیر SVG
++Comment[ga]=Clog le téamaí SVG
+ Comment[he]=שעון SVG הניתן להתאמה על ידי ערכות נושא
+ Comment[it]=Un orologio con temi SVG
+ Comment[ja]=SVG テーマを使った時計
+ Comment[kk]=SVG нақышты сағат
+-Comment[km]=នាឡិកា​ដែល​អាចប្ដូរ​ស្បែក​បាន SVG
++Comment[km]=នាឡិកា​ដែល​អាច​ប្ដូរ​ស្បែក​បាន SVG
+ Comment[ko]=SVG 테마를 사용하는 시계
+ Comment[nb]=En SVG-klokke med drakter
+ Comment[nds]=En Klock mit SVG-Mustern
+--- /dev/null
++++ b/plasma/applets/kickoff/Messages.sh
+@@ -0,0 +1,2 @@
++#! /usr/bin/env bash
++$XGETTEXT *.cpp core/*.cpp ui/*.cpp -o $podir/kickoff.pot
+--- /dev/null
++++ b/plasma/applets/kickoff/applet/applet.cpp
+@@ -0,0 +1,110 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "applet/applet.h"
++
++// Qt
++#include <QGraphicsSceneMouseEvent>
++#include <QGraphicsView>
++#include <QtDebug>
++
++// KDE
++#include <KIcon>
++
++// Plasma
++#include <plasma/widgets/boxlayout.h>
++#include <plasma/widgets/icon.h>
++
++// Local
++#include "ui/launcher.h"
++
++LauncherApplet::LauncherApplet(QObject *parent, const QVariantList &args)
++    : Plasma::Applet(parent,args),
++      m_launcher(0)
++{
++//    setDrawStandardBackground(true);
++    m_icon = KIcon("start-here");
++    Plasma::HBoxLayout *layout = new Plasma::HBoxLayout(this);
++    layout->setMargin(0);
++    Plasma::Icon *icon = new Plasma::Icon(m_icon, QString(), this);
++    icon->setFlag(ItemIsMovable, false);
++    icon->installSceneEventFilter(this);
++}
++
++LauncherApplet::~LauncherApplet()
++{
++    delete m_launcher;
++}
++
++void LauncherApplet::paintInterface(QPainter *painter, const QStyleOptionGraphicsItem *option, const QRect& contentsRect)
++{
++    /*m_icon.paint(painter,contentsRect.left(),contentsRect.top(),contentsRect.width(),
++                         contentsRect.height());*/
++}
++
++QSizeF LauncherApplet::contentSizeHint() const
++{
++    return QSizeF(48,48);
++}
++
++Qt::Orientations LauncherApplet::expandingDirections() const
++{
++    return 0;
++}
++
++bool LauncherApplet::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
++{
++    kDebug() << event->type();
++    if (event->type() == QEvent::GraphicsSceneMousePress) {
++        QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent *>(event);
++        mousePressEvent(mouseEvent);
++    }
++
++    return false;
++}
++
++void LauncherApplet::mousePressEvent(QGraphicsSceneMouseEvent *event)
++{
++    qDebug() << "Launcher button clicked";
++    if (!m_launcher) {
++        m_launcher = new Kickoff::Launcher(0);
++        m_launcher->setWindowFlags(m_launcher->windowFlags()|Qt::WindowStaysOnTopHint|Qt::Popup);
++        m_launcher->setAutoHide(true);
++        m_launcher->adjustSize();
++    }
++
++    // try to position the launcher just above the applet with the left
++    // edge of the applet and the left edge of the launcher aligned
++    if (!m_launcher->isVisible()) {
++        QPointF scenePos = mapToScene(boundingRect().topLeft());
++        QWidget *viewWidget = event->widget() ? event->widget()->parentWidget() : 0;
++        QGraphicsView *view = qobject_cast<QGraphicsView*>(viewWidget);
++        if (view) {
++            QPoint viewPos = view->mapFromScene(scenePos);
++            QPoint globalPos = view->mapToGlobal(viewPos);
++            globalPos.ry() -= m_launcher->height(); 
++            m_launcher->move(globalPos);
++        }
++    }
++
++    m_launcher->setVisible(!m_launcher->isVisible());
++}
++
++#include "applet.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/applet/plasma-launcher-applet.desktop
+@@ -0,0 +1,36 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Application Launcher
++Name[et]=Rakenduste käivitaja
++Name[ga]=Tosaitheoir Feidhmchlár
++Name[ja]=アプリケーションランチャー
++Name[pt]=Lançador de Aplicações
++Name[pt_BR]=Lançador de Aplicativos
++Name[sv]=Starta program
++Name[x-test]=xxApplication Launcherxx
++Name[zh_CN]=应用程序启动器
++Name[zh_TW]=應用程式啟動器
++Comment=Launcher to start applications
++Comment[et]=Rakenduste käivitaja
++Comment[ga]=Tosaitheoir a thosaíonn feidhmchláir
++Comment[ja]=アプリケーションを起動するランチャー
++Comment[pt]=Lançador para iniciar aplicações
++Comment[pt_BR]=Lançador para iniciar aplicativos
++Comment[sv]=Startprogram för att köra program
++Comment[x-test]=xxLauncher to start applicationsxx
++Comment[zh_CN]=启动应用程序的启动器
++Comment[zh_TW]=應用程式啟動器
++Icon=
++Type=Service
++ServiceTypes=Plasma/Applet
++
++X-KDE-Library=plasma_applet_launcher
++X-KDE-PluginInfo-Author=Robert Knight
++X-KDE-PluginInfo-Email=robertknight at gmail.com
++X-KDE-PluginInfo-Name=launcher
++X-KDE-PluginInfo-Version=0.1
++X-KDE-PluginInfo-Website=http://plasma.kde.org/
++X-KDE-PluginInfo-Category=Windows and Tasks
++X-KDE-PluginInfo-Depends=
++X-KDE-PluginInfo-License=GPL
++X-KDE-PluginInfo-EnabledByDefault=true
+--- /dev/null
++++ b/plasma/applets/kickoff/applet/applet.h
+@@ -0,0 +1,67 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef APPLET_H
++#define APPLET_H
++
++// KDE
++#include <KIcon>
++
++// Plasma
++#include <plasma/applet.h>
++
++class QGraphicsSceneMouseEvent;
++
++namespace Kickoff
++{
++    class Launcher;
++}
++namespace Plasma
++{
++    class Icon;
++    class PushButton;
++}
++
++class LauncherApplet : public Plasma::Applet
++{
++Q_OBJECT
++
++public:
++        LauncherApplet(QObject *parent, const QVariantList &args);
++        virtual ~LauncherApplet();
++
++        virtual void paintInterface(QPainter *painter, 
++                                    const QStyleOptionGraphicsItem *option, 
++                                    const QRect &contentsRect);
++        QSizeF contentSizeHint() const;
++        Qt::Orientations expandingDirections() const;
++        virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
++
++protected:
++        bool sceneEventFilter(QGraphicsItem *object, QEvent *event);
++
++private:
++        Kickoff::Launcher *m_launcher;
++        Plasma::PushButton *m_button;
++        QIcon m_icon;
++};
++
++K_EXPORT_PLASMA_APPLET(launcher, LauncherApplet)
++
++#endif
+--- /dev/null
++++ b/plasma/applets/kickoff/main.cpp
+@@ -0,0 +1,48 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// KDE
++#include <KAboutData>
++#include <KApplication>
++#include <KCmdLineArgs>
++
++// Local
++#include "ui/launcher.h"
++
++#define KICKOFF_VERSION "1.9.3"
++
++int main(int argc,char** argv)
++{
++    KAboutData about("kickoff",0,ki18n("Kickoff"),KICKOFF_VERSION,
++                     ki18n("Application Launcher"),
++                     KAboutData::License_GPL_V2);
++    KCmdLineArgs::init(argc,argv,&about);
++
++    KApplication app;
++
++    Kickoff::Launcher *launcher = new Kickoff::Launcher(0);
++    launcher->setWindowTitle("Kickoff KDE 4 Test Application");
++    // ensure launcher gets deleted when the app closes so that favorites, 
++    // recent applications etc. are saved
++    launcher->setAttribute(Qt::WA_DeleteOnClose);
++    launcher->show();
++
++    return app.exec();
++}
++
+--- /dev/null
++++ b/plasma/applets/kickoff/STATUS-TODO
+@@ -0,0 +1,66 @@
++
++Current status of Kickoff/KDE 4:
++Bugs and missing features (indicated with a '-')
++are listed in priority order for each category.
++================================================
++
++Favorites View
++	+ Works
++    - Favorites are not remembered correctly between sessions
++      when Kickoff is run from a Plasma applet
++	- Missing drag and drop of items from other views into favorites
++	- Missing drag and drop re-arranging of items
++
++Applications View
++	+ Works.
++	+ When KDE 3 and KDE 4 versions of an application are available only 
++          the KDE 4 one is shown.
++	- Oxygen application category icons are not shown next to categories
++
++My Computer View
++	+ Works.
++	+ Uses Solid to query devices and respond to addition or removal of 
++	  devices
++    - Folders are currently opened in Konqueror.  They should open in
++      Dolphin
++
++Recently Used (History?) View
++	+ Works
++	- Missing a suitable icon for the tab
++
++Leave View
++	+ Log-off, Shutdown and Restart work
++	- Sleep, Hibernate do not work
++    - Log-off, Shutdown and Restart show an unnecessary confirmation
++      dialog which gives users the Log-off/Shutdown/Restart choice again
++	- Missing icons for the Sleep, Shutdown, Restart actions
++
++Search View
++    + Application search by name, generic name or keywords works
++	- Strigi search doesn't work due to a Strigi problem which Jos' is
++      presently fixing
++    * The other search handlers that query Bookmarks,
++	  Contacts etc. should probably be shared with KRunner.  This needs
++	  mailing list discussion.
++
++Presentation
++    - When used as a Plasma applet the Kickoff window does not
++      appear and disappear smoothly.  (Works okay when standalone
++      Kickoff application is run) [Also Performance?]
++	- Missing the custom QTabBar styling to draw the view names
++	  under their icons and draw a pretty gradient
++	- Missing the "username on computer" text
++	- Missing the branding logo
++	+ Experimented with multiple columns in the Favorites/My Computer/Recently Used/Leave
++	  views.
++
++Performance:
++    - Scrolling up and down in the application view is not as smooth
++      as it should be in some categories.  Perhaps an issue with icons
++      from certain sources?
++    - When opening a previously unopened application category there 
++      may be a slight delay and HDD activity causing the scrolling animation
++      to have few frames (the animation duration is not affected)
++    - Currently no delayed initialization is performed.  The data required
++    for all tabs is loaded on startup, except the application view where
++    only the root branch is loaded initially.
+--- /dev/null
++++ b/plasma/applets/kickoff/core/urlitemlauncher.cpp
+@@ -0,0 +1,107 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/urlitemlauncher.h"
++
++// Qt
++#include <QFileInfo>
++#include <QHash>
++#include <QModelIndex>
++#include <QUrl>
++#include <QtDebug>
++
++// KDE
++#include <KRun>
++
++// Local
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class HandlerInfo
++{
++public:
++    HandlerInfo() : type(UrlItemLauncher::ProtocolHandler) , handler(0) {}
++    UrlItemLauncher::HandlerType type;
++    UrlItemHandler *handler;
++};
++
++class GenericItemHandler : public UrlItemHandler
++{
++public:
++    virtual bool openUrl(const QUrl& url) const 
++    {
++        new KRun(url,0);
++        return true; 
++    } 
++};
++
++class UrlItemLauncher::Private
++{
++public:
++    static QHash<QString,HandlerInfo> globalHandlers;
++    static GenericItemHandler genericHandler;
++};
++
++QHash<QString,HandlerInfo> UrlItemLauncher::Private::globalHandlers;
++GenericItemHandler UrlItemLauncher::Private::genericHandler;
++
++UrlItemLauncher::UrlItemLauncher(QObject *parent)
++    : QObject(parent)
++    , d(new Private)
++{
++}
++UrlItemLauncher::~UrlItemLauncher()
++{
++    delete d;
++}
++bool UrlItemLauncher::openItem(const QModelIndex& index)
++{
++    QUrl url(index.data(UrlRole).value<QString>());
++    if (url.isEmpty()) {
++        qDebug() << "Item" << index.data(Qt::DisplayRole) << "has to URL to open.";
++        return false;
++    }
++
++    qDebug() << "Opening item with URL" << url;
++
++    HandlerInfo protocolHandler = Private::globalHandlers[url.scheme()];
++    if (protocolHandler.type == ProtocolHandler && protocolHandler.handler != 0) {
++        return protocolHandler.handler->openUrl(url);
++    }
++
++    QString extension = QFileInfo(url.path()).completeSuffix();
++    HandlerInfo extensionHandler = Private::globalHandlers[extension];
++    if (extensionHandler.type == ExtensionHandler && extensionHandler.handler != 0) {
++            return extensionHandler.handler->openUrl(url); 
++    }
++
++    return Private::genericHandler.openUrl(url);
++}
++void UrlItemLauncher::addGlobalHandler(HandlerType type,const QString& name,UrlItemHandler *handler)
++{
++    HandlerInfo info;
++    info.type = type;
++    info.handler = handler;
++    Private::globalHandlers.insert(name,info);
++}
++
++
++#include "urlitemlauncher.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/core/systemmodel.cpp
+@@ -0,0 +1,188 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/systemmodel.h"
++
++// Qt
++#include <QFile>
++#include <QHash>
++#include <QtDebug>
++
++// KDE
++#include <KDiskFreeSpace>
++#include <KLocalizedString>
++#include <KIcon>
++#include <KGlobal>
++#include <KUrl>
++#include <KServiceTypeTrader>
++#include <KStandardDirs>
++#include <solid/device.h>
++#include <solid/deviceinterface.h>
++#include <solid/devicenotifier.h>
++#include <solid/storageaccess.h>
++#include <solid/storagedrive.h>
++
++// Local
++#include "core/models.h"
++
++
++using namespace Kickoff;
++
++class SystemModel::Private
++{
++public:
++    Private(SystemModel *parent)
++        :q(parent)
++        ,removableStorageItem(0)
++        ,fixedStorageItem(0)
++    {
++        
++    }
++    QStandardItem *lookupDeviceByMountPoint(const QString& mountPoint)
++    {
++        QString mountUrl = KUrl(mountPoint).url();
++        foreach(QStandardItem *item,deviceItemById) {
++            if (item->data(UrlRole).value<QString>() == mountUrl) {
++                return item;
++            }
++        }
++        return 0;
++    }
++    void addDevice(const Solid::Device& device) 
++    {
++            const Solid::StorageAccess* access = device.as<Solid::StorageAccess>();
++            if (!access)
++                return;
++
++            QStandardItem *deviceItem = new QStandardItem;
++            deviceItem->setText(device.product());
++            deviceItem->setIcon(KIcon(device.icon()));
++
++            deviceItem->setData(access->filePath(),SubTitleRole);
++            deviceItem->setData(KUrl(access->filePath()).url(),UrlRole);
++
++            // start a request to find the available free disk space
++            // FIXME: On Unix this is not very efficient as KDiskFreeSpace starts a 'df' process
++            // for each drive
++            queryFreeSpace(access->filePath());
++
++            Solid::StorageDrive *drive = 0;
++            Solid::Device parentDevice = device;
++            while (parentDevice.isValid() && !drive) { 
++                drive = parentDevice.as<Solid::StorageDrive>();
++                parentDevice = parentDevice.parent();
++            }
++
++            if (drive && (drive->isHotpluggable() || drive->isRemovable())) { 
++                removableStorageItem->appendRow(deviceItem);
++            } else {
++                fixedStorageItem->appendRow(deviceItem);
++            }
++            deviceItemById.insert(device.udi(),deviceItem);
++    }
++    void loadStorageItems()
++    {
++        // get device list
++        QList<Solid::Device> deviceList = Solid::Device::listFromType(Solid::DeviceInterface::StorageAccess,QString());
++
++        // add items
++        removableStorageItem = new QStandardItem(i18n("Removable Storage"));
++        fixedStorageItem = new QStandardItem(i18n("Storage"));
++        
++        foreach(const Solid::Device& device,deviceList) {
++            addDevice(device);        
++        }
++        
++        q->appendRow(removableStorageItem);
++        q->appendRow(fixedStorageItem);
++    }
++
++    void loadPlaces()
++    {
++        QStandardItem *placesItem = new QStandardItem(i18n("Places"));
++
++        QStandardItem *homeItem = StandardItemFactory::createItemForUrl(getenv("HOME"));
++        placesItem->appendRow(homeItem);
++
++        QStandardItem *networkItem = StandardItemFactory::createItemForUrl("remote:/");
++        networkItem->setData(QVariant(),SubTitleRole);
++        placesItem->appendRow(networkItem); 
++
++        KService::Ptr settingsService = KService::serviceByStorageId("systemsettings");
++        if (settingsService) {
++            placesItem->appendRow(StandardItemFactory::createItemForService(settingsService));
++        }
++
++        q->appendRow(placesItem);
++    }
++    void queryFreeSpace(const QString& mountPoint)
++    {
++        KDiskFreeSpace *freeSpace = KDiskFreeSpace::findUsageInfo(mountPoint);
++        connect(freeSpace,SIGNAL(foundMountPoint(QString,quint64,quint64,quint64)),q,
++            SLOT(freeSpaceInfoAvailable(QString,quint64,quint64,quint64)));
++    }
++
++    SystemModel * const q;
++    QStandardItem *removableStorageItem;
++    QStandardItem *fixedStorageItem;
++    QHash<QString,QStandardItem*> deviceItemById;
++};
++
++SystemModel::SystemModel(QObject *parent)
++    : QStandardItemModel(parent)
++    , d(new Private(this))
++{
++    d->loadPlaces();
++    d->loadStorageItems();
++
++    connect(Solid::DeviceNotifier::instance(),SIGNAL(deviceAdded(QString)),this,SLOT(deviceAdded(QString)));
++    connect(Solid::DeviceNotifier::instance(),SIGNAL(deviceRemoved(QString)),this,SLOT(deviceRemoved(QString)));
++
++    }
++SystemModel::~SystemModel()
++{
++    delete d;
++}
++void SystemModel::deviceAdded(const QString& udi)
++{
++    qDebug() << "SystemModel adding device" << udi;
++    d->addDevice(Solid::Device(udi));
++}
++void SystemModel::deviceRemoved(const QString& udi)
++{
++    QStandardItem *deviceItem = d->deviceItemById[udi];
++    if(deviceItem) {
++        Q_ASSERT(deviceItem->parent());
++        deviceItem->parent()->removeRow(deviceItem->row());
++        d->deviceItemById.remove(udi);
++    }
++}
++
++void SystemModel::freeSpaceInfoAvailable(const QString& mountPoint,quint64,quint64 kbUsed,quint64 kbAvailable)
++{
++    QStandardItem *deviceItem = d->lookupDeviceByMountPoint(mountPoint);
++    if (deviceItem) {
++        deviceItem->setData(kbUsed,DiskUsedSpaceRole);
++        deviceItem->setData(kbAvailable,DiskFreeSpaceRole);
++    }
++}
++
++
++#include "systemmodel.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/core/urlitemlauncher.h
+@@ -0,0 +1,81 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef URLITEMLAUNCHER_H
++#define URLITEMLAUNCHER_H
++
++#include <QObject>
++
++class QModelIndex;
++class QUrl;
++
++namespace Kickoff
++{
++
++/** 
++ * UrlItemHandler is an abstract base class for handlers which can open particular
++ * types of URL.
++ *
++ * @see UrlItemLauncher
++ */
++class UrlItemHandler
++{
++public:
++    virtual ~UrlItemHandler() {}
++    virtual bool openUrl(const QUrl& url) const = 0;
++};
++
++/** 
++ * UrlItemLauncher provides facilities to open a item from a Kickoff model based on its UrlRole
++ * data.
++ *
++ * By default, a UrlItemLauncher opens all URLs using the KRun class.  Additional handlers can be created
++ * to handle URLs with particular protocols or extensions differently.  Handlers can be 
++ * registered using the static addGlobalHandler() method. 
++ */
++class UrlItemLauncher : public QObject
++{
++Q_OBJECT
++
++public:
++    UrlItemLauncher(QObject *parent = 0);
++    virtual ~UrlItemLauncher();
++
++    enum HandlerType
++    {
++        ProtocolHandler,
++        ExtensionHandler
++    };
++    static void addGlobalHandler(HandlerType type,
++                                 const QString& name,
++                                 UrlItemHandler *handler);
++ 
++public Q_SLOTS:
++    /** Open the specified @p index from a Kickoff model. */ 
++    bool openItem(const QModelIndex& index);
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // URLITEMLAUNCHER_H 
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/systemmodel.h
+@@ -0,0 +1,54 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef SYSTEMMODEL_H
++#define SYSTEMMODEL_H
++
++// Qt
++#include <QStandardItemModel>
++
++namespace Kickoff
++{
++
++/** 
++ * Model which provides a tree of items for important system setup tools (eg. System Settings) , 
++ * folders (eg. the user's home folder and the local network) and fixed and removable storage.
++ */
++class SystemModel : public QStandardItemModel
++{
++Q_OBJECT
++
++public:
++    /** Constructs a new SystemModel with the specified parent. */
++    SystemModel(QObject *parent = 0);
++    virtual ~SystemModel();
++
++private Q_SLOTS:
++    void deviceRemoved(const QString& udi);
++    void deviceAdded(const QString& udi);
++    void freeSpaceInfoAvailable(const QString& mountPoint,quint64 kbSize,quint64 kbUsed,quint64 kbAvailable);
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // SYSTEMMODEL_H
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/leavemodel.cpp
+@@ -0,0 +1,103 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/leavemodel.h"
++
++// KDE
++#include <KLocalizedString>
++#include <KIcon>
++#include <solid/powermanagement.h>
++
++// Local
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class LeaveModel::Private
++{
++};
++
++LeaveModel::LeaveModel(QObject *parent)
++    : QStandardItemModel(parent)
++    , d(0)
++{
++    // Session Options
++    QStandardItem *sessionOptions = new QStandardItem(i18n("Session"));
++
++        // Logout
++        QStandardItem *logoutOption = new QStandardItem(KIcon("system-log-out"),i18n("Logout"));
++        logoutOption->setData("leave:/logout",Kickoff::UrlRole);
++        logoutOption->setData(i18n("End session"),Kickoff::SubTitleRole);
++        sessionOptions->appendRow(logoutOption);
++
++        // Lock
++        QStandardItem *lockOption = new QStandardItem(KIcon("system-lock-screen"),i18n("Lock"));
++        lockOption->setData("leave:/lock",Kickoff::UrlRole);
++        lockOption->setData(i18n("Lock the screen"),Kickoff::SubTitleRole);
++        sessionOptions->appendRow(lockOption);
++
++        // Switch User
++        QStandardItem *switchUserOption = new QStandardItem(KIcon("system-switch-user"),i18n("Switch User"));
++        switchUserOption->setData("leave:/switch",Kickoff::UrlRole);
++        switchUserOption->setData(i18n("Start a parallel session as a different user."),Kickoff::SubTitleRole);
++        sessionOptions->appendRow(switchUserOption);
++
++    // System Options
++    QStandardItem *systemOptions = new QStandardItem(i18n("System"));
++
++        using namespace Solid::PowerManagement;
++        QSet<SleepState> sleepStates = supportedSleepStates();
++
++        // Sleep
++        if (sleepStates.contains(SuspendState)) {
++            QStandardItem *sleepOption = new QStandardItem(i18n("Sleep"));
++            sleepOption->setData("leave:/sleep",Kickoff::UrlRole);
++            systemOptions->appendRow(sleepOption);
++        }
++
++        // Hibernate
++        if (sleepStates.contains(HibernateState)) {
++            QStandardItem *hibernateOption = new QStandardItem(i18n("Hibernate"));
++            hibernateOption->setData("leave:/hibernate",Kickoff::UrlRole);
++            systemOptions->appendRow(hibernateOption);
++        }
++
++        // Shutdown
++        QStandardItem *shutDownOption = new QStandardItem(i18n("Shutdown"));
++        shutDownOption->setData("leave:/shutdown",Kickoff::UrlRole);
++        shutDownOption->setData(i18n("Turn off the computer"),Kickoff::SubTitleRole);
++        systemOptions->appendRow(shutDownOption);
++
++        // Restart
++        QStandardItem *restartOption = new QStandardItem(i18n("Restart"));
++        restartOption->setData("leave:/restart",Kickoff::UrlRole);
++        restartOption->setData(i18n("Restart the computer"),Kickoff::SubTitleRole);
++        systemOptions->appendRow(restartOption);
++
++    appendRow(sessionOptions);
++    appendRow(systemOptions);
++}
++LeaveModel::~LeaveModel()
++{
++    delete d;
++}
++
++#include "leavemodel.moc"
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/itemhandlers.cpp
+@@ -0,0 +1,85 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/itemhandlers.h"
++
++// Qt
++#include <QUrl>
++#include <QtDebug>
++
++// KDE
++#include <KService>
++#include <KToolInvocation>
++#include <solid/powermanagement.h>
++
++// KDE Base
++#include <kworkspace.h>
++
++// Local
++#include "core/recentapplications.h"
++
++using namespace Kickoff;
++
++bool ServiceItemHandler::openUrl(const QUrl& url) const
++{
++    int result = KToolInvocation::startServiceByDesktopPath(url.toString(),QStringList(),0,0,0,"",true);
++
++    if (result == 0) {
++        KService::Ptr service = KService::serviceByDesktopPath(url.toString());
++
++        if (!service.isNull()) {
++            RecentApplications::self()->add(service);
++        } else {
++            qWarning() << "Failed to find service for" << url;
++            return false;
++        }
++    }
++
++    return result == 0;
++}
++bool LeaveItemHandler::openUrl(const QUrl& url) const
++{
++    QString action = url.path().remove('/');
++
++    KWorkSpace::ShutdownConfirm confirm = KWorkSpace::ShutdownConfirmDefault;
++    KWorkSpace::ShutdownType type = KWorkSpace::ShutdownTypeNone;
++
++    if (action == "logout") {
++        type = KWorkSpace::ShutdownTypeNone;
++    } else if (action == "lock") {
++        qDebug() << "Locking screen"; 
++    } else if (action == "switch") {
++        qDebug() << "Switching user";
++    } else if (action == "restart") {
++        type = KWorkSpace::ShutdownTypeReboot;
++    } else if (action == "shutdown") {
++        type = KWorkSpace::ShutdownTypeHalt;
++    } else if (action == "sleep") {
++        Solid::PowerManagement::requestSleep(Solid::PowerManagement::SuspendState,0,0);
++        return true;
++    } else if (action == "hibernate") {
++        Solid::PowerManagement::requestSleep(Solid::PowerManagement::HibernateState,0,0);
++        return true;
++    } else {
++        return false;
++    }
++
++    return KWorkSpace::requestShutDown(confirm,type);
++}
+--- /dev/null
++++ b/plasma/applets/kickoff/core/leavemodel.h
+@@ -0,0 +1,43 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef LEAVEMODEL_H
++#define LEAVEMODEL_H
++
++// Qt
++#include <QStandardItemModel>
++
++namespace Kickoff
++{
++
++class LeaveModel : public QStandardItemModel 
++{
++Q_OBJECT
++
++public:
++    LeaveModel(QObject *parent);
++    ~LeaveModel();
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // LEAVEMODEL_H
+--- /dev/null
++++ b/plasma/applets/kickoff/core/models.cpp
+@@ -0,0 +1,149 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/models.h"
++
++// Qt
++#include <QFileInfo>
++#include <QStandardItem>
++
++// KDE
++#include <KDesktopFile>
++#include <KIcon>
++#include <KGlobal>
++#include <KMimeType>
++#include <KUrl>
++
++using namespace Kickoff;
++
++static KUrl homeUrl(getenv("HOME"));
++static KUrl remoteUrl("remote:/");
++
++QStandardItem *StandardItemFactory::createItemForUrl(const QString& urlString)
++{
++    KUrl url(urlString);
++    
++    QStandardItem *item = 0; 
++
++    if (url.isLocalFile() && QFileInfo(url.path()).suffix() == "desktop") {
++
++        // .desktop files may be services (type field == 'Application' or 'Service')
++        // or they may be other types such as links.
++        //
++        // first look in the KDE service database to see if this file is a service,
++        // otherwise represent it as a generic .desktop file
++        KService::Ptr service = KService::serviceByDesktopPath(url.path());
++        if (service) {
++            return createItemForService(service);
++        }
++
++        item = new QStandardItem;
++        KDesktopFile desktopFile(url.path());
++        item->setText(QFileInfo(urlString).baseName());
++        item->setIcon(KIcon(desktopFile.readIcon()));
++
++        KUrl desktopUrl(desktopFile.readUrl()); 
++        item->setData(desktopUrl.url(),Kickoff::UrlRole);
++
++        QString subTitle = desktopUrl.isLocalFile() ? desktopUrl.path() : desktopUrl.prettyUrl();
++
++        item->setData(subTitle,Kickoff::SubTitleRole);
++
++        setSpecialUrlProperties(desktopUrl,item);
++
++    } else {
++        item = new QStandardItem;
++        item->setText(QFileInfo(urlString).baseName());
++        item->setIcon(KIcon(KMimeType::iconNameForUrl(url)));
++        
++        item->setData(url.url(),Kickoff::UrlRole);
++        QString subTitle = url.isLocalFile() ? url.path() : url.prettyUrl();
++        item->setData(subTitle,Kickoff::SubTitleRole);
++
++        setSpecialUrlProperties(url,item);
++    }
++
++    return item;
++}
++void StandardItemFactory::setSpecialUrlProperties(const KUrl& url,QStandardItem *item)
++{        
++    // specially handled URLs
++    if (url == homeUrl) {
++        item->setText(i18n("Home Folder"));
++        item->setIcon(KIcon("user-home"));
++    } else if (url == remoteUrl) {
++        item->setText(i18n("Network Folders"));
++    }
++}
++QStandardItem *StandardItemFactory::createItemForService(KService::Ptr service)
++{
++    QStandardItem *appItem = new QStandardItem;
++
++    QString genericName = service->genericName();
++    QString appName = service->name();
++
++    appItem->setText(genericName.isEmpty() ? appName : genericName);
++    appItem->setIcon(KIcon(service->icon()));
++    appItem->setData(service->entryPath(),Kickoff::UrlRole);
++
++    if (!genericName.isEmpty()) {
++        appItem->setData(service->name(),Kickoff::SubTitleRole);
++    }
++
++    return appItem;
++}
++
++bool Kickoff::isLaterVersion(KService::Ptr first , KService::Ptr second)
++{
++    // a very crude heuristic using the .desktop path names
++    // which only understands kde3 vs kde4 
++    bool firstIsKde4 = first->entryPath().contains("kde4");
++    bool secondIsKde4 = second->entryPath().contains("kde4");
++
++    return firstIsKde4 && !secondIsKde4;
++}
++
++#if 0
++void Kickoff::swapModelIndexes(QModelIndex& first,QModelIndex& second)
++{
++    Q_ASSERT(first.isValid());
++    Q_ASSERT(second.isValid());
++
++    QAbstractItemModel *firstModel = const_cast<QAbstractItemModel*>(first.model());
++    QAbstractItemModel *secondModel = const_cast<QAbstractItemModel*>(second.model());
++
++    Q_ASSERT(firstModel && secondModel);
++
++    QMap<int,QVariant> firstIndexData = firstModel->itemData(first);
++    QMap<int,QVariant> secondIndexData = secondModel->itemData(second);
++
++    firstModel->setItemData(first,secondIndexData);
++    secondModel->setItemData(second,firstIndexData);
++}
++#endif
++
++K_GLOBAL_STATIC_WITH_ARGS(KComponentData,kickoffComponent,("kickoff",QByteArray(),KComponentData::SkipMainComponentRegistration))
++KComponentData Kickoff::componentData()
++{
++    return *kickoffComponent;
++}
++
++
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/favoritesmodel.cpp
+@@ -0,0 +1,139 @@
++
++//Own
++#include "core/favoritesmodel.h"
++
++// Qt
++#include <QHash>
++#include <QList>
++
++// KDE
++#include <KConfigGroup>
++#include <KService>
++#include <kdebug.h>
++
++// Local
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class FavoritesModel::Private
++{
++public:
++    Private(FavoritesModel *parent)
++        :q(parent)
++    {
++        headerItem = new QStandardItem(i18n("Favorites"));
++        q->appendRow(headerItem);
++    }
++
++    void addFavoriteItem(const QString& url)
++    {
++        QStandardItem *item = StandardItemFactory::createItemForUrl(url);
++        headerItem->appendRow(item);
++    }
++    void removeFavoriteItem(const QString& url)
++    {
++       QModelIndexList matches = q->match(q->index(0,0),UrlRole,
++                                          url,-1,
++                                          Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchWrap | Qt::MatchRecursive));
++
++       qDebug() << "Removing item matches" << matches;
++
++       foreach(const QModelIndex& index,matches) {
++         QStandardItem *item = q->itemFromIndex(index);
++         if (item->parent()) {
++            item->parent()->removeRow(item->row());
++         } else {
++            qDeleteAll(q->takeRow(item->row()));
++         }
++       }
++    }
++
++    FavoritesModel * const q;
++    QStandardItem *headerItem;
++
++    static void loadFavorites()
++    {
++       KConfigGroup favoritesGroup = componentData().config()->group("Favorites");
++       QList<QString> favoriteList = favoritesGroup.readEntry("FavoriteURLs",QList<QString>());
++       if (favoriteList.isEmpty()) {
++           favoriteList = defaultFavorites();
++       }
++
++       foreach(QString favorite,favoriteList) {
++           FavoritesModel::add(favorite);
++       }
++    }
++    static QList<QString> defaultFavorites()
++    {
++        QList<QString> applications;
++        applications << "konqbrowser" << "kmail" << "systemsettings";
++
++        QList<QString> desktopFiles;
++
++        foreach(const QString& application,applications) {
++            KService::Ptr service = KService::serviceByDesktopName(application);
++            if (service) {
++                desktopFiles << service->entryPath();
++            }
++        }
++
++        return desktopFiles;
++    }
++    static void saveFavorites()
++    {
++        KConfigGroup favoritesGroup = componentData().config()->group("Favorites");
++        favoritesGroup.writeEntry("FavoriteURLs",globalFavoriteList);
++    }
++    static QList<QString> globalFavoriteList;
++    static QSet<QString> globalFavoriteSet;
++    static QSet<FavoritesModel*> models;
++};
++
++QList<QString> FavoritesModel::Private::globalFavoriteList;
++QSet<QString> FavoritesModel::Private::globalFavoriteSet;
++QSet<FavoritesModel*> FavoritesModel::Private::models;
++
++FavoritesModel::FavoritesModel(QObject *parent)
++    : QStandardItemModel(parent)
++    , d(new Private(this))
++{
++    Private::models << this;
++    if (Private::models.count() == 1 && Private::globalFavoriteList.isEmpty()) {
++        Private::loadFavorites();
++    }
++}
++FavoritesModel::~FavoritesModel()
++{
++    Private::models.remove(this);
++
++    if (Private::models.isEmpty()) {
++        Private::saveFavorites();
++    }
++
++    delete d;
++}
++void FavoritesModel::add(const QString& url)
++{
++    Private::globalFavoriteList << url;
++    Private::globalFavoriteSet << url;
++
++    foreach(FavoritesModel* model,Private::models) {
++        model->d->addFavoriteItem(url);
++    }
++}
++void FavoritesModel::remove(const QString& url)
++{
++   Private::globalFavoriteList.removeAll(url);
++   Private::globalFavoriteSet.remove(url);
++
++   foreach(FavoritesModel* model,Private::models) {
++       model->d->removeFavoriteItem(url);
++   }
++}
++bool FavoritesModel::isFavorite(const QString& url)
++{
++    return Private::globalFavoriteSet.contains(url);
++}
++
++#include "favoritesmodel.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/core/itemhandlers.h
+@@ -0,0 +1,42 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef ITEMHANDLERS_H
++#define ITEMHANDLERS_H
++
++#include "core/urlitemlauncher.h"
++
++namespace Kickoff
++{
++
++class ServiceItemHandler : public UrlItemHandler
++{
++public:
++    virtual bool openUrl(const QUrl& url) const;
++};
++class LeaveItemHandler : public UrlItemHandler
++{
++public:
++    virtual bool openUrl(const QUrl& url) const;
++};
++
++}
++
++#endif // ITEMHANDLERS_H
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/applicationmodel.cpp
+@@ -0,0 +1,394 @@
++/*  
++    Copyright 2007 Pino Toscano <pino at kde.org>
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "applicationmodel.h"
++
++// Qt
++#include <QtCore/QtAlgorithms>
++#include <QtCore/QList>
++#include <QtGui/QLabel>
++#include <QtGui/QLayout>
++#include <QtGui/QCheckBox>
++
++// KDE
++#include <kauthorized.h>
++#include <khistorycombobox.h>
++#include <kdesktopfile.h>
++#include <klineedit.h>
++#include <klocale.h>
++#include <kiconloader.h>
++#include <krun.h>
++#include <kstandarddirs.h>
++#include <kstringhandler.h>
++#include <kmimetypetrader.h>
++#include <kurlcompletion.h>
++#include <kurlrequester.h>
++#include <kmimetype.h>
++#include <kservicegroup.h>
++#include <kdebug.h>
++
++#include <assert.h>
++#include <stdlib.h>
++#include <kbuildsycocaprogressdialog.h>
++#include <kconfiggroup.h>
++
++// Local
++#include "core/models.h"
++
++template <> inline
++void KConfigGroup::writeEntry( const char *pKey,
++                              const KGlobalSettings::Completion& aValue,
++                              KConfigBase::WriteConfigFlags flags)
++{
++  writeEntry(pKey, int(aValue), flags);
++}
++
++class AppNode
++{
++public:
++    AppNode()
++        : isDir(false), parent(0), fetched(false)
++    {
++    }
++    ~AppNode()
++    {
++        qDeleteAll(children);
++    }
++
++    QIcon icon;
++    QString genericName;
++    QString appName;
++    QString relPath;
++    QString desktopEntry;
++    bool isDir;
++
++    AppNode *parent;
++    bool fetched;
++
++    QList<AppNode*> children;
++};
++
++static bool AppNodeLessThan(AppNode *n1, AppNode *n2)
++{
++    if (n1->isDir) {
++        if (n2->isDir) {
++            return n1->appName.compare(n2->appName, Qt::CaseInsensitive) < 0;
++        } else {
++            return true;
++        }
++    } else {
++        if (n2->isDir) {
++            return false;
++        } else {
++            return n1->appName.compare(n2->appName, Qt::CaseInsensitive) < 0;
++        }
++    }
++    return true;
++}
++
++class ApplicationModelPrivate
++{
++public:
++    ApplicationModelPrivate(ApplicationModel *qq)
++        : q(qq), root(new AppNode()) 
++          , duplicatePolicy(ApplicationModel::ShowDuplicatesPolicy)
++    {
++    }
++    ~ApplicationModelPrivate()
++    {
++        delete root;
++    }
++
++    void fillNode(const QString &relPath, AppNode *node);
++    static QHash<QString,QString> iconNameMap(); 
++
++    ApplicationModel *q;
++    AppNode *root;
++    ApplicationModel::DuplicatePolicy duplicatePolicy;
++};
++
++void ApplicationModelPrivate::fillNode(const QString &_relPath, AppNode *node)
++{
++   KServiceGroup::Ptr root = KServiceGroup::group(_relPath);
++   if (!root || !root->isValid()) return;
++
++   KServiceGroup::List list = root->entries();
++
++   // application name <-> service map for detecting duplicate entries
++   QHash<QString,KService::Ptr> existingServices;
++   for( KServiceGroup::List::ConstIterator it = list.begin();
++       it != list.end(); ++it)
++   {
++      QString icon;
++      QString appName;
++      QString genericName;
++      QString relPath = _relPath;
++      QString desktopEntry;
++      bool isDir = false;
++      const KSycocaEntry::Ptr p = (*it);
++      if (p->isType(KST_KService))
++      {
++         const KService::Ptr service = KService::Ptr::staticCast(p);
++
++         if (service->noDisplay())
++            continue;
++
++         icon = service->icon();
++         appName = service->name();
++         genericName = service->genericName();
++         desktopEntry = service->entryPath();
++
++         // check for duplicates (eg. KDE 3 and KDE 4 versions of application
++         // both present)
++         if (duplicatePolicy == ApplicationModel::ShowLatestOnlyPolicy && 
++             existingServices.contains(appName)
++            ) {
++                if (Kickoff::isLaterVersion(existingServices[appName],service)) {
++                    continue;
++                } else {
++                    // find and remove the existing entry with the same name
++                    for (int i = 0 ; i < node->children.count() ; i++) { 
++                        if ( node->children[i]->appName == appName ) { 
++                            delete node->children.takeAt(i);
++                        }
++                    }
++                }
++         }
++         existingServices[appName] = service;
++      }
++      else if (p->isType(KST_KServiceGroup))
++      {
++         const KServiceGroup::Ptr serviceGroup = KServiceGroup::Ptr::staticCast(p);
++
++         if (serviceGroup->noDisplay() || serviceGroup->childCount() == 0)
++            continue;
++
++         icon = serviceGroup->icon();
++         if (iconNameMap().contains(icon)) {
++            icon = iconNameMap().value(icon);
++         }
++
++         genericName = serviceGroup->caption();
++         relPath = serviceGroup->relPath();
++         isDir = true;
++      }
++      else
++      {
++         kWarning(250) << "KServiceGroup: Unexpected object in list!";
++         continue;
++      }
++
++      AppNode *newnode = new AppNode();
++      newnode->icon = KIcon(icon);
++      newnode->appName = appName;
++      newnode->genericName = genericName;
++      newnode->relPath = relPath;
++      newnode->desktopEntry = desktopEntry;
++      newnode->isDir = isDir;
++      newnode->parent = node;
++      node->children.append(newnode);
++   }
++   qStableSort(node->children.begin(), node->children.end(), AppNodeLessThan);
++}
++
++
++
++ApplicationModel::ApplicationModel(QObject *parent)
++    : QAbstractItemModel(parent), d(new ApplicationModelPrivate(this))
++{
++    d->fillNode(QString(), d->root);
++}
++
++ApplicationModel::~ApplicationModel()
++{
++    delete d;
++}
++
++bool ApplicationModel::canFetchMore(const QModelIndex &parent) const
++{
++    if (!parent.isValid())
++        return false;
++
++    AppNode *node = static_cast<AppNode*>(parent.internalPointer());
++    return node->isDir && !node->fetched;
++}
++
++int ApplicationModel::columnCount(const QModelIndex &parent) const
++{
++    Q_UNUSED(parent)
++    return 1;
++}
++
++QVariant ApplicationModel::data(const QModelIndex &index, int role) const
++{
++    if (!index.isValid())
++        return QVariant();
++
++    AppNode *node = static_cast<AppNode*>(index.internalPointer());
++
++    switch (role) {
++    case Qt::DisplayRole:
++        if (!node->genericName.isEmpty()) {
++            return node->genericName;
++        } else {
++            return node->appName;
++        }
++        break;
++    case Kickoff::SubTitleRole:
++        if(!node->genericName.isEmpty()) {
++            return node->appName;
++        }
++        break;
++    case Kickoff::UrlRole:
++        return node->desktopEntry;
++    case Qt::DecorationRole:
++        return node->icon; 
++        break;
++    default:
++        ;
++    }
++    return QVariant();
++}
++
++void ApplicationModel::fetchMore(const QModelIndex &parent)
++{
++    if (!parent.isValid())
++        return;
++
++    AppNode *node = static_cast<AppNode*>(parent.internalPointer());
++    if (!node->isDir)
++        return;
++
++    emit layoutAboutToBeChanged();
++    d->fillNode(node->relPath, node);
++    node->fetched = true;
++    emit layoutChanged();
++}
++
++bool ApplicationModel::hasChildren(const QModelIndex &parent) const
++{
++    if (!parent.isValid())
++        return true;
++
++    AppNode *node = static_cast<AppNode*>(parent.internalPointer());
++    return node->isDir;
++}
++
++QVariant ApplicationModel::headerData(int section, Qt::Orientation orientation, int role) const
++{
++    if (orientation != Qt::Horizontal || section != 0)
++        return QVariant();
++
++    switch (role) {
++    case Qt::DisplayRole:
++        return i18n("Known Applications");
++        break;
++    default:
++        return QVariant();
++    }
++}
++
++QModelIndex ApplicationModel::index(int row, int column, const QModelIndex &parent) const
++{
++    if (row < 0 || column != 0)
++        return QModelIndex();
++
++    AppNode *node = d->root;
++    if (parent.isValid())
++        node = static_cast<AppNode*>(parent.internalPointer());
++
++    if (row >= node->children.count())
++        return QModelIndex();
++    else
++        return createIndex(row, 0, node->children.at(row));
++}
++
++QModelIndex ApplicationModel::parent(const QModelIndex &index) const
++{
++    if (!index.isValid())
++        return QModelIndex();
++
++    AppNode *node = static_cast<AppNode*>(index.internalPointer());
++    if (node->parent->parent) {
++        int id = node->parent->parent->children.indexOf(node->parent);
++
++        if (id >= 0 && id < node->parent->parent->children.count())
++           return createIndex(id, 0, node->parent);
++        else
++            return QModelIndex();
++    }
++    else
++        return QModelIndex();
++}
++
++int ApplicationModel::rowCount(const QModelIndex &parent) const
++{
++    if (!parent.isValid())
++        return d->root->children.count();
++
++    AppNode *node = static_cast<AppNode*>(parent.internalPointer());
++    return node->children.count();
++}
++
++void ApplicationModel::setDuplicatePolicy(DuplicatePolicy policy)
++{
++    delete d->root;
++    d->duplicatePolicy = policy;
++    d->root = new AppNode();
++    d->fillNode(QString(), d->root);
++    reset();
++}
++ApplicationModel::DuplicatePolicy ApplicationModel::duplicatePolicy() const 
++{
++    return d->duplicatePolicy;
++}
++
++/**
++ * FIXME This is a temporary workaround to map the icon names found
++ * in the desktop directory files (from /usr/share/desktop-directories)
++ * into the Oxygen icon names.  (Only applies if the Gnome menu files
++ * are also installed)
++ *
++ * This list was compiled from Kubuntu 7.04 with the gnome-menus
++ * package present.
++ *
++ * This needs to be discussed on kde-core-devel and fixed
++ */
++QHash<QString,QString> ApplicationModelPrivate::iconNameMap()
++{
++    static QHash<QString,QString> map;
++    if (map.isEmpty()) {
++        map.insert("gnome-util","applications-accessories");
++        // accessibility Oxygen icon was missing when this list was compiled
++        map.insert("accessibility-directory","applications-other");
++        map.insert("gnome-devel","applications-development"); 
++        map.insert("package_edutainment","applications-education");
++        map.insert("gnome-joystick","applications-games");
++        map.insert("gnome-graphics","applications-graphics");
++        map.insert("gnome-globe","applications-internet");
++        map.insert("gnome-multimedia","applications-multimedia");
++        map.insert("gnome-applications","applications-office");
++        map.insert("gnome-system","applications-system");
++    }
++    return map;
++}
++
++#include "applicationmodel.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/core/searchmodel.cpp
+@@ -0,0 +1,229 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/searchmodel.h"
++
++// Qt
++#include <QtDebug>
++
++// KDE
++#include <KMimeType>
++#include <KServiceTypeTrader>
++#include <strigi/qtdbus/strigiclient.h>
++#include <solid/networking.h>
++
++// Local
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class SearchModel::Private
++{
++public:
++    Private(SearchModel *parent) : q(parent) {}
++
++    void addItemForIface(SearchInterface *iface,QStandardItem *item)
++    {
++        int index = searchIfaces.indexOf(iface);
++        Q_ASSERT(index >= 0);
++        q->item(index)->appendRow(item);
++    }
++    void clear()
++    {
++        for (int i=0;i<q->rowCount();i++) {
++            q->item(i)->removeRows(0,q->item(i)->rowCount());
++        }
++    }
++
++    SearchModel * const q;
++    QList<SearchInterface*> searchIfaces;
++};
++
++SearchModel::SearchModel(QObject *parent)
++    : QStandardItemModel(parent)
++    , d(new Private(this))
++{
++    d->searchIfaces << new ApplicationSearch(this);
++    //d->searchIfaces << new IndexerSearch(this);
++    d->searchIfaces << new WebSearch(this);
++
++    foreach(SearchInterface *iface,d->searchIfaces) {
++        QStandardItem *ifaceItem = new QStandardItem(iface->name());
++        appendRow(ifaceItem);
++        connect(iface,SIGNAL(resultsAvailable(QStringList)),
++                this,SLOT(resultsAvailable(QStringList)));
++        connect(iface,SIGNAL(resultsAvailable(ResultList)),
++                this,SLOT(resultsAvailable(ResultList)));
++    }
++}
++SearchModel::~SearchModel()
++{
++    delete d;
++}
++void SearchModel::resultsAvailable(const QStringList& results)
++{
++    SearchInterface *iface = qobject_cast<SearchInterface*>(sender());
++    
++    Q_ASSERT(iface);
++
++    foreach(const QString& result,results) {
++        //qDebug() << "Search hit from" << iface->name() << result;
++        QStandardItem *resultItem = StandardItemFactory::createItemForUrl(result);
++        d->addItemForIface(iface,resultItem);
++    }
++}
++void SearchModel::resultsAvailable(const ResultList& results)
++{
++    SearchInterface *iface = qobject_cast<SearchInterface*>(sender());
++
++    Q_ASSERT(iface);
++
++    foreach(const SearchResult& result,results) {
++        QStandardItem *item = StandardItemFactory::createItemForUrl(result.url);
++        item->setData(result.title,Qt::DisplayRole);
++        item->setData(result.subTitle,SubTitleRole);
++        d->addItemForIface(iface,item);
++    }
++}
++void SearchModel::setQuery(const QString& query)
++{
++    d->clear();
++    
++    if (query.isEmpty())
++        return; 
++
++    
++
++    foreach(SearchInterface *iface,d->searchIfaces) {
++        iface->setQuery(query);
++    }
++}
++
++SearchInterface::SearchInterface(QObject *parent)
++    : QObject(parent)
++{
++}
++
++ApplicationSearch::ApplicationSearch(QObject *parent)
++    : SearchInterface(parent)
++{
++}
++
++QString ApplicationSearch::name() const
++{
++    return i18n("Applications");
++}
++
++void ApplicationSearch::setQuery(const QString& query)
++{
++    //QString mimeName = mimeNameForQuery(query);
++    QString traderQuery = QString("('%1' ~~ GenericName) or ('%1' ~~ Name) or ('%1' ~in Keywords)"
++                                  //" or ('%2' in MimeType)"
++                                 )
++                            .arg(query); //.arg(mimeName);
++    KServiceTypeTrader *trader = KServiceTypeTrader::self();
++    KService::List results = trader->query("Application",traderQuery);
++
++    // If we have KDE 3 and KDE 4 versions of a service, return only the 
++    // KDE 4 version
++    QHash<QString,int> desktopNames;
++    QSet<QString> execFields;
++    for (int i=0;i<results.count();i++) {
++        KService::Ptr service = results[i]; 
++        int existingPos = desktopNames.value(service->name(),-1);
++        KService::Ptr existing = existingPos < 0 ? KService::Ptr(0) : results[existingPos]; 
++       
++        if (!existing.isNull()) {
++            if (isLaterVersion(existing,service)) {
++                results[i] = 0; 
++            } else if (isLaterVersion(service,existing)) {
++                results[existingPos] = 0;
++            } else {
++                // do not show more than one entry which does the same thing when run
++                // (ie. ignore entries that have an identical 'Exec' field to an existing
++                // entry)
++                if (execFields.contains(service->exec())) {
++                    results[i] = 0;
++                }
++            }
++        } else {
++            desktopNames.insert(service->name(),i);
++            execFields.insert(service->exec());
++        }
++    }
++
++    QStringList pathResults;
++    foreach(KService::Ptr service,results) {
++        if (!service.isNull()) {
++            pathResults << service->entryPath();
++        }
++    }
++    emit resultsAvailable(pathResults);
++}
++
++QString ApplicationSearch::mimeNameForQuery(const QString& query) const
++{
++    KMimeType::Ptr type = KMimeType::findByPath('.'+query,0,true);
++    if (type) {
++        qDebug() << "Mime type name" << type->name();
++        return type->name();
++    }
++    return QString();
++}
++WebSearch::WebSearch(QObject *parent)
++    : SearchInterface(parent)
++{
++}
++QString WebSearch::name() const
++{
++    return i18n("Web Searches");
++}
++void WebSearch::setQuery(const QString& query)
++{
++    ResultList results;
++    SearchResult googleResult;
++    googleResult.url = QString("http://www.google.com/search?q=%1").arg(query);
++    googleResult.title = i18n("Search web for '%1'",query);
++    results << googleResult; 
++    emit resultsAvailable(results);
++}
++IndexerSearch::IndexerSearch(QObject *parent)
++    : SearchInterface(parent)
++{
++}
++QString IndexerSearch::name() const
++{
++    return i18n("Documents");
++}
++void IndexerSearch::setQuery(const QString& query)
++{
++    static StrigiClient searchClient;
++
++    QList<QString> urls;
++    QList<StrigiHit> hits = searchClient.getHits(query,10,0);
++    foreach(const StrigiHit& hit,hits) {
++        if (!hit.uri.isEmpty()) {
++            urls << hit.uri;
++        }
++    }
++    emit resultsAvailable(urls);
++}
++
++#include "searchmodel.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/core/recentlyusedmodel.cpp
+@@ -0,0 +1,187 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/recentlyusedmodel.h"
++
++// Qt
++#include <QFileInfo>
++
++// KDE
++#include <KDesktopFile>
++#include <KDirWatch>
++#include <KIcon>
++#include <KLocalizedString>
++#include <KRecentDocument>
++#include <KUrl>
++#include <KDebug>
++
++// Local
++#include "core/models.h"
++#include "core/recentapplications.h"
++
++using namespace Kickoff;
++
++class RecentlyUsedModel::Private
++{
++public:
++    Private(RecentlyUsedModel *parent)
++        : q(parent)
++        , recentDocumentItem(0)
++    {
++    }
++    void removeExistingItem(const QString& path) 
++    {
++        QStandardItem *existingItem = itemsByPath[path];
++        //qDebug() << "Removing existing item" << existingItem;
++        if (existingItem != 0) {
++            Q_ASSERT(existingItem->parent());
++            existingItem->parent()->removeRow(existingItem->row());
++        }
++    }
++    void addRecentApplication(KService::Ptr service,bool append) 
++    {
++        // remove existing item if any
++        removeExistingItem(service->entryPath());
++
++        QStandardItem *appItem = StandardItemFactory::createItemForService(service); 
++        itemsByPath.insert(service->entryPath(),appItem);
++
++        if (append) {
++            recentAppItem->appendRow(appItem);
++        } else {
++            recentAppItem->insertRow(0,appItem);
++        }
++    }
++    void addRecentDocument(const QString& desktopPath,bool append)
++    {
++        // remove existing item if any
++        KDesktopFile desktopFile(desktopPath);
++        KUrl documentUrl = desktopFile.readUrl();
++        
++        removeExistingItem(documentUrl.url());
++       
++        QStandardItem *documentItem = StandardItemFactory::createItemForUrl(desktopPath);   
++        itemsByPath.insert(desktopPath,documentItem);
++    
++        //qDebug() << "Document item" << documentItem << "text" << documentItem->text() << "url" << documentUrl.url();    
++        if (append) {
++            recentDocumentItem->appendRow(documentItem);
++        } else {
++            recentDocumentItem->insertRow(0,documentItem);
++        }
++    }
++    void loadRecentDocuments()
++    {
++        // create branch for documents and add existing items
++        recentDocumentItem = new QStandardItem(i18n("Documents"));
++        QStringList documents = KRecentDocument::recentDocuments();
++        foreach (const QString& document,documents) {
++            addRecentDocument(document,true);
++        }
++        q->appendRow(recentDocumentItem);
++    }
++    void loadRecentApplications()
++    {
++        recentAppItem = new QStandardItem(i18n("Applications"));
++        QList<KService::Ptr> services = RecentApplications::self()->recentApplications();
++        foreach (const KService::Ptr& service, services) {
++            addRecentApplication(service,true);
++        }
++        q->appendRow(recentAppItem);
++    }
++
++    RecentlyUsedModel * const q;
++    QStandardItem *recentDocumentItem;
++    QStandardItem *recentAppItem;
++
++    QHash<QString,QStandardItem*> itemsByPath;
++};
++
++RecentlyUsedModel::RecentlyUsedModel(QObject *parent)
++    : QStandardItemModel(parent)
++    , d(new Private(this))
++{
++    d->loadRecentApplications();
++    d->loadRecentDocuments();
++
++    // listen for changes to the list of recent documents
++    KDirWatch *recentDocWatch = new KDirWatch(this);
++    recentDocWatch->addDir(KRecentDocument::recentDocumentDirectory(),KDirWatch::WatchFiles);
++    connect(recentDocWatch,SIGNAL(created(QString)),this,SLOT(recentDocumentAdded(QString)));
++    connect(recentDocWatch,SIGNAL(deleted(QString)),this,SLOT(recentDocumentRemoved(QString)));
++
++    // listen for changes to the list of recent applications
++    connect(RecentApplications::self(),SIGNAL(applicationAdded(KService::Ptr,int)),
++            this,SLOT(recentApplicationAdded(KService::Ptr,int)));
++    connect(RecentApplications::self(),SIGNAL(applicationRemoved(KService::Ptr)),
++            this,SLOT(recentApplicationRemoved(KService::Ptr)));
++    connect(RecentApplications::self(),SIGNAL(cleared()),
++            this,SLOT(recentApplicationsCleared()));
++}
++RecentlyUsedModel::~RecentlyUsedModel()
++{
++    delete d;
++}
++void RecentlyUsedModel::recentDocumentAdded(const QString& path)
++{
++    qDebug() << "Recent document added" << path;
++    d->addRecentDocument(path,false);
++}
++void RecentlyUsedModel::recentDocumentRemoved(const QString& path)
++{
++    qDebug() << "Recent document removed" << path;
++    d->removeExistingItem(path);
++}
++void RecentlyUsedModel::recentApplicationAdded(KService::Ptr service,int)
++{
++    d->addRecentApplication(service,false);
++}
++void RecentlyUsedModel::recentApplicationRemoved(KService::Ptr service)
++{
++    d->removeExistingItem(service->entryPath());
++}
++void RecentlyUsedModel::recentApplicationsCleared()
++{
++    QSet<QStandardItem*> appItems;
++    const int rows = d->recentAppItem->rowCount();
++    for(int i=0;i<rows;i++) {
++        appItems << d->recentAppItem->child(i);
++    }
++    QMutableHashIterator<QString,QStandardItem*> iter(d->itemsByPath);
++    while (iter.hasNext()) {
++        iter.next();
++        if (appItems.contains(iter.value())) {
++            iter.remove();
++        }
++    }
++
++    d->recentAppItem->removeRows(0,d->recentAppItem->rowCount());
++}
++void RecentlyUsedModel::clearRecentApplications()
++{
++    RecentApplications::self()->clear();
++}
++void RecentlyUsedModel::clearRecentDocuments()
++{
++    KRecentDocument::clear();
++}
++
++#include "recentlyusedmodel.moc"
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/recentapplications.cpp
+@@ -0,0 +1,193 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "core/recentapplications.h"
++
++// Qt
++#include <QHash>
++#include <QLinkedList>
++#include <QtDebug>
++
++// KDE
++#include <KConfigGroup>
++#include <KGlobal>
++
++// Local
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class RecentApplications::Private
++{
++public:
++    class ServiceInfo;
++
++    Private()
++        : maxServices(DEFAULT_MAX_SERVICES)
++    {
++        KConfigGroup recentGroup = componentData().config()->group("RecentlyUsed");
++        QList<QString> recentApplications = recentGroup.readEntry("Applications",QList<QString>());
++        maxServices = recentGroup.readEntry("MaxApplications",maxServices);
++
++        // TESTING
++        //      the actual last date/time is not currently recorded, instead we just use
++        //      the current date/time and adjust it by one second after each item is added
++        //      to preserve the order of the applications in the list loaded from the KConfig
++        //      source
++        QDateTime dateTime = QDateTime::currentDateTime();
++        foreach(const QString& application,recentApplications) {
++            ServiceInfo info;
++            info.storageId = application;
++            info.startCount = 1;
++            info.lastStartedTime = dateTime;
++            addEntry(info.storageId,info);
++            dateTime = dateTime.addSecs(1);
++        }
++    };
++    ~Private()
++    {
++        KConfigGroup recentGroup = componentData().config()->group("RecentlyUsed");
++        
++        QList<ServiceInfo> services = serviceInfo.values();
++        qSort(services.begin(),services.end());
++
++        // TESTING
++        //      only the desktop file used is currently recorded, information such
++        //      as start count and date/time of last used is lost 
++        QList<QString> recentApplications;
++        foreach(const ServiceInfo& info,services) {
++            recentApplications << info.storageId;
++        }
++
++        recentGroup.writeEntry("Applications",recentApplications);
++
++        if (maxServices != DEFAULT_MAX_SERVICES) {
++            recentGroup.writeEntry("MaxApplications",maxServices);
++        }
++    }
++    void addEntry(const QString& id,ServiceInfo& info)
++    {
++        // if this service is already in the list then remove the existing
++        // queue entry (so that there are no duplicates in the queue)
++        if (serviceInfo.contains(id)) {
++            qDebug() << "Duplicate entry added.  Removing existing entry from queue.";
++            serviceQueue.erase(serviceInfo[id].queueIter);
++        } 
++
++        serviceQueue.append(id);
++        info.queueIter = --serviceQueue.end();
++        serviceInfo.insert(id,info);
++        
++        // if more than the maximum number of services have been added
++        // remove the least recently used service
++        if (serviceQueue.count() > maxServices) {
++           QString removeId = serviceQueue.takeFirst();
++           qDebug() << "More than max services added.  Removing" << removeId << "from queue."; 
++           serviceInfo.remove(removeId);
++           emit instance.applicationRemoved(KService::serviceByStorageId(removeId));
++        }
++    }
++
++    class ServiceInfo
++    {
++    public:
++        ServiceInfo() : startCount(0){}
++
++        QString storageId;
++        int startCount;
++        QDateTime lastStartedTime;
++        QLinkedList<QString>::iterator queueIter;
++
++        bool operator<(const ServiceInfo& rhs) const
++        {
++            return this->lastStartedTime < rhs.lastStartedTime;
++        }
++    };
++
++    static const int DEFAULT_MAX_SERVICES = 5;
++    int maxServices;
++    // queue to keep track of the order in which services have been used
++    // (most recently used at the back)
++    QLinkedList<QString> serviceQueue;
++    QHash<QString,ServiceInfo> serviceInfo;
++    RecentApplications instance;
++};
++K_GLOBAL_STATIC(RecentApplications::Private,privateSelf)
++
++RecentApplications *RecentApplications::self() 
++{
++    return &privateSelf->instance;
++}
++
++RecentApplications::RecentApplications()
++{
++}
++QList<KService::Ptr> RecentApplications::recentApplications() const
++{
++    QList<Private::ServiceInfo> services = privateSelf->serviceInfo.values();
++    qSort(services.begin(),services.end(),qGreater<Private::ServiceInfo>());
++
++    QList<KService::Ptr> servicePtrs;
++    foreach (const Private::ServiceInfo& info,services) {
++        KService::Ptr s = KService::serviceByStorageId(info.storageId);
++
++        if (s) {
++            servicePtrs << s;
++        }
++    }
++    return servicePtrs;
++}
++int RecentApplications::startCount(KService::Ptr service) const
++{
++    return privateSelf->serviceInfo[service->storageId()].startCount;
++}
++QDateTime RecentApplications::lastStartedTime(KService::Ptr service) const
++{
++    return privateSelf->serviceInfo[service->storageId()].lastStartedTime;
++}
++void RecentApplications::setMaximum(int maximum)
++{
++    Q_ASSERT(maximum > 0);
++    privateSelf->maxServices = maximum;
++}
++int RecentApplications::maximum() const
++{
++    return privateSelf->maxServices;
++}
++void RecentApplications::add(KService::Ptr service)
++{
++    Private::ServiceInfo info = privateSelf->serviceInfo.value(service->storageId());
++    info.storageId = service->storageId();
++    info.startCount++;
++    info.lastStartedTime = QDateTime::currentDateTime();
++
++    privateSelf->addEntry(info.storageId,info);
++
++    qDebug() << "Recent app added" << info.storageId << info.startCount;
++
++    emit applicationAdded(service,info.startCount);
++}
++void RecentApplications::clear()
++{
++    privateSelf->serviceInfo.clear();
++    emit cleared();
++}
++
++#include "recentapplications.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/core/models.h
+@@ -0,0 +1,98 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef MODELS_H
++#define MODELS_H
++
++// Qt
++#include <QtGlobal>
++
++// KDE
++#include <KService>
++
++class QStandardItem;
++class KUrl;
++class QModelIndex;
++
++namespace Kickoff
++{
++    /** 
++     * Additional data roles for data which the Kickoff models supply with their items
++     * for use when rendering the items and launching them.
++     */
++    enum DataRole
++    {
++        /** A sub title to be displayed below the text from the item's Qt::DisplayRole data */
++        SubTitleRole = Qt::UserRole+1,
++        /** The URL to be opened when executing the item. */
++        UrlRole = Qt::UserRole+2,
++        /** The Solid device identifier for items which represent devices. */
++        DeviceUdiRole = Qt::UserRole+3,
++        /** The amount of space (in Kilobytes) used for items which represent storage. */
++        DiskUsedSpaceRole = Qt::UserRole+4,
++        /** The amount of free space (in Kilobytes) for items which represent storage. */
++        DiskFreeSpaceRole = Qt::UserRole+5 
++    };
++
++    /** 
++     * Factory for creating QStandardItems with appropriate text, icons, URL
++     * and other Kickoff-specific information for a given URL or Service.
++     */
++    class StandardItemFactory
++    {
++    public:
++        static QStandardItem *createItemForUrl(const QString& url);
++        static QStandardItem *createItemForService(KService::Ptr service);
++    private:
++        static void setSpecialUrlProperties(const KUrl& url,QStandardItem *item);
++    };
++
++    /** 
++     * Abstract base class for delegates which provide information about a model
++     * item's state in a particular view.
++     */
++    class ItemStateProvider
++    {
++    public:
++        virtual ~ItemStateProvider() {}
++
++        /** 
++         * Returns true if a @p index should be drawn in the view or 
++         * false if it should be hidden.
++         */
++        virtual bool isVisible(const QModelIndex& index) const = 0; 
++    };
++
++    // returns true if 'first' represents a more recent version of 
++    // an application than 'second'
++    //
++    // eg. isLaterVersion(myapp_kde4,myapp_kde3) returns true
++    bool isLaterVersion(KService::Ptr first , KService::Ptr second);
++
++#if 0
++    /** Swaps the data for two indexes in a QAbstractItemModel */
++    void swapModelIndexes(QModelIndex& first,QModelIndex& second);
++#endif
++
++    // returns the Kickoff component data, this is mainly used
++    // to access the Kickoff shared config data
++    KComponentData componentData();
++}
++
++#endif //MODELS_H
+--- /dev/null
++++ b/plasma/applets/kickoff/core/favoritesmodel.h
+@@ -0,0 +1,58 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef FAVORITESMODEL_H
++#define FAVORITESMODEL_H
++
++// Qt
++#include <QStandardItemModel>
++
++namespace Kickoff
++{
++
++/** 
++ * A model which provides an ordered list of 'favorite' items chosen by the user.
++ * The items may represent documents, folders, applications, devices or anything else
++ * identified by a URL.
++ *
++ * The information persists between sessions.
++ */
++class FavoritesModel : public QStandardItemModel 
++{
++Q_OBJECT
++
++public:
++    FavoritesModel(QObject *parent); 
++    virtual ~FavoritesModel();
++
++    /** Add a new item for @p url to the user's favorites list. */
++    static void add(const QString& url);
++    /** Remove the item associated with @p url from the user's favorites list. */
++    static void remove(const QString& url);
++    /** Returns true if @p url is in the list of the user's favorite URLs. */
++    static bool isFavorite(const QString& url);
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // FAVORITESMODEL_H
+--- /dev/null
++++ b/plasma/applets/kickoff/core/applicationmodel.h
+@@ -0,0 +1,88 @@
++/* 
++    Copyright 2007 Pino Toscano <pino at kde.org>
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef APPLICATIONMODEL_H 
++#define APPLICATIONMODEL_H 
++
++#include <QtCore/QAbstractItemModel>
++
++class ApplicationModelPrivate;
++
++/**
++ * ApplicationModel provides a tree model containing all of the user's installed graphical programs.
++ * The applications are arranged into categories, based on the information in their .desktop files.
++ */
++class ApplicationModel : public QAbstractItemModel
++{
++    Q_OBJECT
++
++    public:
++        ApplicationModel(QObject *parent = 0);
++        virtual ~ApplicationModel();
++
++        /** 
++         * This enum describes the policy for 
++         * handling duplicate applications (that is,
++         * two applications with the same name in the same group)
++         */
++        enum DuplicatePolicy
++        {
++            /** Display duplicate entries. */
++            ShowDuplicatesPolicy,
++            /** 
++             * Show only the entry for the most recent
++             * version of the application.
++             *
++             * Currently only a crude heuristic to determine whether the
++             * application is from KDE 3 or KDE 4 is used to determine
++             * recent-ness.
++             *
++             * eg.  If MyGame/KDE 3 and MyGame/KDE 4 are found
++             * show only MyGame/KDE 4
++             */
++            ShowLatestOnlyPolicy
++        };
++        /** 
++         * Sets the policy for handling duplicate applications.
++         * See DuplicatePolicy
++         */
++        void setDuplicatePolicy(DuplicatePolicy policy);
++        /** See setDuplicatePolicy() */
++        DuplicatePolicy duplicatePolicy() const;
++
++        // reimplemented from QAbstractItemModel
++        virtual bool canFetchMore(const QModelIndex &parent) const;
++        virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
++        virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
++        virtual void fetchMore(const QModelIndex &parent);
++        virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
++        virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
++        virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
++        virtual QModelIndex parent(const QModelIndex &index) const;
++        virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
++
++    private:
++        friend class ApplicationModelPrivate;
++        ApplicationModelPrivate *const d;
++
++        Q_DISABLE_COPY(ApplicationModel)
++};
++
++#endif
+--- /dev/null
++++ b/plasma/applets/kickoff/core/searchmodel.h
+@@ -0,0 +1,111 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef SEARCHMODEL_H
++#define SEARCHMODEL_H 
++
++// Qt
++#include <QStandardItemModel>
++
++namespace Kickoff 
++{
++
++class SearchResult
++{
++public:
++    QString url;
++    QString title;
++    QString subTitle;
++};
++typedef QList<SearchResult> ResultList;
++
++class SearchModel : public QStandardItemModel
++{
++Q_OBJECT
++
++public:
++    SearchModel(QObject *parent);
++    virtual ~SearchModel();
++
++public Q_SLOTS:
++    void setQuery(const QString& query);
++
++private Q_SLOTS:
++    void resultsAvailable(const QStringList& results);
++    void resultsAvailable(const ResultList& results);
++
++private:
++    class Private;
++    Private * const d;
++};
++
++class SearchInterface : public QObject
++{
++Q_OBJECT
++
++public:
++    SearchInterface(QObject *parent);
++
++    virtual QString name() const = 0;
++    virtual void setQuery(const QString& query) = 0;
++
++        
++Q_SIGNALS:
++    void resultsAvailable(const QStringList& results);
++    void resultsAvailable(const ResultList& results);
++};
++
++class ApplicationSearch : public SearchInterface
++{
++Q_OBJECT
++
++public:
++    ApplicationSearch(QObject *parent);
++
++    virtual QString name() const;
++    virtual void setQuery(const QString& query);
++
++private:
++   QString mimeNameForQuery(const QString& query) const;
++};
++
++class WebSearch : public SearchInterface
++{
++Q_OBJECT
++
++public:
++    WebSearch(QObject *parent);
++    virtual QString name() const;
++    virtual void setQuery(const QString& query);
++};
++
++class IndexerSearch : public SearchInterface
++{
++Q_OBJECT
++
++public:
++    IndexerSearch(QObject *parent);
++    virtual QString name() const;
++    virtual void setQuery(const QString& query);
++};
++
++}
++
++#endif // SEARCHMODEL_H
++
+--- /dev/null
++++ b/plasma/applets/kickoff/core/recentlyusedmodel.h
+@@ -0,0 +1,63 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef RECENTLYUSEDMODEL_H
++#define RECENTLYUSEDMODEL_H
++
++// Qt
++#include <QStandardItemModel>
++
++// KDE
++#include <KService>
++
++namespace Kickoff
++{
++
++/** 
++ * Model for the Recently Used view which provides a tree of recently used 
++ * applications and documents.
++ */
++class RecentlyUsedModel : public QStandardItemModel
++{
++Q_OBJECT 
++
++public:
++    /** Construct a new RecentlyUsedModel with the specified parent. */
++    RecentlyUsedModel(QObject *parent = 0);
++    virtual ~RecentlyUsedModel();
++
++public Q_SLOTS:
++    void clearRecentApplications();
++    void clearRecentDocuments();
++
++private Q_SLOTS:
++    void recentDocumentAdded(const QString& path);
++    void recentDocumentRemoved(const QString& path);
++    void recentApplicationAdded(KService::Ptr,int startCount);
++    void recentApplicationRemoved(KService::Ptr);
++    void recentApplicationsCleared();
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // RECENTLYUSEDMODEL_H
+--- /dev/null
++++ b/plasma/applets/kickoff/core/recentapplications.h
+@@ -0,0 +1,88 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef RECENTAPPLICATIONS_H
++#define RECENTAPPLICATIONS_H 
++
++// Qt
++#include <QtCore/QObject>
++#include <QDateTime>
++
++// KDE
++#include <KService>
++
++namespace Kickoff
++{
++
++/** 
++ * Singleton class which can be used to keep track of recently started applications
++ * in the Kickoff launcher.
++ *
++ * RecentApplications information persists between sessions.
++ */
++class RecentApplications : public QObject
++{
++Q_OBJECT
++public:
++    class Private;
++    friend class Private;
++
++    static RecentApplications *self();
++
++    /** 
++     * List of service pointers for recently started applications in the order in which
++     * they were started, with the most recently used application first.
++     */
++    QList<KService::Ptr> recentApplications() const;
++    /** Returns the number of times an application represented by @p service has been started. */
++    int startCount(KService::Ptr service) const;
++    /** Returns the last time and date with the application represented by @p service was started. */
++    QDateTime lastStartedTime(KService::Ptr service) const;
++
++    /** Sets the maximum number of recently used applications to remember. */
++    void setMaximum(int max);
++    /** Returns the maximum number of recently used applications that are remembered. */
++    int maximum() const;
++
++public Q_SLOTS:
++    /** 
++     * Registers the startup of an application.  This should be called whenever a new application
++     * or service is started.
++     */
++    void add(KService::Ptr service);
++    /** Clear the list of recent applications. */
++    void clear();
++
++Q_SIGNALS:
++    /** Emitted after add() has been called. */
++    void applicationAdded(KService::Ptr service,int startCount);
++    /** Emitted after remove() has been called. */
++    void applicationRemoved(KService::Ptr service);
++    /** Emitted after clear() has been called. */
++    void cleared();
++
++private:
++    RecentApplications();
++};
++
++}
++
++#endif // RECENTAPPLICATIONS_H
++
++
+--- /dev/null
++++ b/plasma/applets/kickoff/DESIGN-GOALS
+@@ -0,0 +1,71 @@
++
++Project Proposal:  Kickoff KDE 4 Rewrite
++
++This is a re-implementation of the Kickoff menu for KDE 3 originally created
++by the OpenSuSE team.
++
++Overall goals:
++
++1. Implement the Kickoff user interface using Qt/KDE 4 technology
++
++2. Make it easy for distributions to modify the menu contents
++
++3. Make it easy for distributions to add their own branding
++
++Detailed goals:
++
++1.  Implement the Kickoff user interface using Qt/KDE 4 technology
++
++    -> Clean separation of core and user interface
++        -> eg. Make good use of Qt 4's model/view classes 
++    -> Use Strigi for search and analysis (or possibly just Xesam interface?)
++    -> Use Solid for getting data for removable device list
++    -> Attractive, original, but not overbearing graphical effects
++       using Qt 4's new painting and animation features.
++
++    To decide on:
++
++    -> Consult the Kickoff/KDE 3 developers and OpenSuSE users about 
++       any desired changes to the user interface.
++    -> Whether to use Plasma applets and widgets or Qt's widgets and
++       QAbstractItemView as the base for the view classes.
++    -> Provision of Plasma data engines for applets to use to query
++       applications, recent documents, favorites etc.
++    -> Should facilities be provided for distributions to replace
++       Strigi with their choice of search engine? 
++
++    Ideas to explore in future:
++
++    -> Use Sonnet for spell-checking the user's search query 
++    -> Use Phonon for previews of audio and video content
++       in the favorites and recently used sections
++    -> Light KWin integration for interesting effects for revealing,
++       hiding or rendering the Kickoff launcher on composited '3D'
++       desktops. 
++
++Goals 2 and 3 are derived from looking at the KDE 3 implementation 
++of Kickoff and also the way in which distributions customise KDE.
++Consulting distribution representatives is important to clarify 
++these particular goals.
++
++2.  Make it easy for distributions to modify the menu contents
++
++    -> Different distributions may have different tools for system
++       configuration ( eg. System Settings , YaST , Mandriva's tools )
++    -> The available options on the leave page and the way in which 
++       those tools work varies depending on the distribution
++
++3.  Make it easy for distributions to add their own branding
++
++    -> The launcher menu is a highly visible part of the desktop,
++       distributions are therefore likely to want to brand it with
++       their own logos, colors, icons etc.  
++       This does not mean infinite theme-ability, but rather a good
++       out-of-the-box look which distros can easily tweak so that 
++       it is obvious which distribution is being used from looking
++       at a screenshot, and also to allow distros to make some
++       obvious cosmetic changes between versions.
++
++       (See the Ubuntu art specs for example which state that each
++        new version is supposed to have a visual look which is 
++        distinct from the previous version)
+--- /dev/null
++++ b/plasma/applets/kickoff/CMakeLists.txt
+@@ -0,0 +1,50 @@
++# Kickoff Shared
++set( Kickoff_SRCS
++       core/applicationmodel.cpp
++       core/favoritesmodel.cpp
++       core/leavemodel.cpp
++       core/models.cpp
++       core/recentapplications.cpp
++       core/recentlyusedmodel.cpp
++       core/searchmodel.cpp
++       core/systemmodel.cpp
++       core/urlitemlauncher.cpp
++       core/itemhandlers.cpp
++       ui/itemdelegate.cpp
++       ui/contextmenufactory.cpp
++       ui/flipscrollview.cpp
++       ui/launcher.cpp
++       ui/searchbar.cpp
++       ui/tabbar.cpp
++       ui/urlitemview.cpp  )
++
++set ( Kickoff_LIBS
++        ${KDE4_KIO_LIBS}
++        ${KDE4_SOLID_LIBS}
++        kworkspace
++        strigiqtdbusclient )
++
++include_directories( ${STRIGI_INCLUDE_DIR} )
++
++# Standalone Test Application
++IF (CMAKE_BUILD_TYPE MATCHES debug)
++   set ( Application_SRCS
++         ${Kickoff_SRCS}
++         main.cpp )
++
++   kde4_add_executable(kickoff ${Application_SRCS})
++   target_link_libraries(kickoff ${Kickoff_LIBS})
++
++   install(TARGETS kickoff DESTINATION ${BIN_INSTALL_DIR})
++ENDIF (CMAKE_BUILD_TYPE MATCHES debug)
++
++# Plasma Applet
++set ( Applet_SRCS
++        ${Kickoff_SRCS}
++        applet/applet.cpp )
++
++kde4_add_plugin(plasma_applet_launcher ${Applet_SRCS})
++target_link_libraries(plasma_applet_launcher plasma ${Kickoff_LIBS}) 
++install(TARGETS plasma_applet_launcher DESTINATION ${PLUGIN_INSTALL_DIR})
++install(FILES applet/plasma-launcher-applet.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/itemdelegate.h
+@@ -0,0 +1,56 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef ITEMDELEGATE_H
++#define ITEMDELEGATE_H
++
++// Qt
++#include <QtGui/QAbstractItemDelegate>
++
++// Local
++#include "core/models.h"
++
++namespace Kickoff
++{
++
++/**
++ * Item delegate for rendering items in the Kickoff launcher's views.
++ *
++ * The delegate makes use of the various additional Kickoff item data roles
++ * to draw the item.  For example, if the DiskFreeSpaceRole and DiskUsedSpaceRole item
++ * data is valid then a bar chart showing the amount of free space available on the disk
++ * will be drawn.
++ */
++class ItemDelegate : public QAbstractItemDelegate , public ItemStateProvider
++{
++public:
++    virtual void paint(QPainter *painter,const QStyleOptionViewItem& option,const QModelIndex& index) const;
++    virtual QSize sizeHint(const QStyleOptionViewItem& option , const QModelIndex& index) const;
++
++    // reimplemented from ItemStateProvider
++    virtual bool isVisible(const QModelIndex& index) const;
++
++private:
++    static const int ICON_TEXT_MARGIN = 10;
++
++};
++
++}
++
++#endif // ITEMDELEGATE_H 
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/searchbar.h
+@@ -0,0 +1,56 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef SEARCHBAR_H
++#define SEARCHBAR_H
++
++// Qt
++#include <QWidget>
++
++namespace Kickoff
++{
++
++class SearchBar : public QWidget
++{
++Q_OBJECT
++
++public:
++    SearchBar(QWidget *parent);
++    virtual ~SearchBar();
++
++    bool eventFilter(QObject *watched, QEvent *event);
++
++Q_SIGNALS:
++    void queryChanged(const QString& newQuery);
++    
++    // internal
++    void startUpdateTimer();
++
++private Q_SLOTS:
++    void updateTimerExpired();
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // SEARCHBAR_H
++
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/tabbar.h
+@@ -0,0 +1,61 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef TABBAR_H
++#define TABBAR_H
++
++#include <QTabBar>
++#include <QTimer>
++#include <QTimeLine>
++#include <QVector>
++
++namespace Kickoff
++{
++
++class TabBar : public QTabBar
++{
++Q_OBJECT
++
++public:
++    TabBar(QWidget *parent);
++
++protected:
++    // reimplemented from QTabBar
++    virtual QSize tabSizeHint(int index) const;
++    virtual void paintEvent(QPaintEvent *event);
++    virtual void leaveEvent(QEvent *event);
++    virtual void mouseMoveEvent(QMouseEvent *event);
++
++protected slots:
++    void switchToHoveredTab();
++    void animationFinished();
++    void startAnimation();
++
++private:
++    static const int TAB_CONTENTS_MARGIN = 5;
++    int m_hoveredTabIndex;
++    QTimer m_tabSwitchTimer;
++    QTimeLine m_animator;
++    QVector<int> m_animStates;
++};
++
++}
++
++#endif // TABBAR_H
++
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/contextmenufactory.cpp
+@@ -0,0 +1,175 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "ui/contextmenufactory.h"
++
++// Qt
++#include <QAbstractItemView>
++#include <QMenu>
++#include <QtDebug>
++#include <QMap>
++
++// KDE
++#include <KIcon>
++#include <KLocalizedString>
++#include <kactioncollection.h>
++#include <kfileitem.h>
++#include <kparts/browserextension.h>
++#include <kbookmarkmanager.h>
++
++// Local
++#include "core/favoritesmodel.h"
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class ContextMenuFactory::Private
++{
++public:
++    QAction *advancedActionsMenu(const QString& url) const
++    {
++       KUrl kUrl(url);
++       KActionCollection actionCollection((QObject*)0);
++       KFileItemList items;
++       QString mimeType = KMimeType::findByUrl(kUrl,0,false,true)->name();
++       items << KFileItem(url,mimeType,KFileItem::Unknown);
++       KParts::BrowserExtension::PopupFlags browserFlags = KParts::BrowserExtension::DefaultPopupItems;
++       if (items.first().isLocalFile()) {
++           browserFlags |= KParts::BrowserExtension::ShowProperties;
++       }
++       KParts::BrowserExtension::ActionGroupMap actionGroupMap;
++       return 0;
++       // ### TODO: remove kdebase-apps dependency
++#if 0
++       KonqPopupMenu *menu = new KonqPopupMenu(items, kUrl,actionCollection,
++                                               0, 0, browserFlags,
++                                               0, KBookmarkManager::userBookmarksManager(), actionGroupMap);
++       
++       if (!menu->isEmpty()) {
++            QAction *action = menu->menuAction();
++            action->setText(i18n("Advanced"));
++            action->setIcon(KIcon("edit-add"));
++            return action;
++       } else {
++            delete menu;
++            return 0;
++       }
++#endif
++    }
++
++    QMap<QAbstractItemView*,QList<QAction*> > viewActions;
++};
++
++ContextMenuFactory::ContextMenuFactory(QObject *parent)
++ : QObject(parent)
++ , d(new Private)
++{
++}
++
++ContextMenuFactory::~ContextMenuFactory()
++{
++  delete d;
++}
++
++void ContextMenuFactory::showContextMenu(QAbstractItemView *view,const QPoint& pos)
++{
++    Q_ASSERT(view);
++
++    const QModelIndex index = view->indexAt(pos);
++    const QString url = index.data(UrlRole).value<QString>(); 
++
++    if (url.isEmpty()) {
++        return;
++    }
++
++    bool isFavorite = FavoritesModel::isFavorite(url);
++
++    QList<QAction*> actions;
++    
++    // add to / remove from favorites
++    QAction *favoriteAction = new QAction(this);
++    if (isFavorite) {
++        favoriteAction->setText(i18n("Remove from Favorites"));
++        favoriteAction->setIcon(KIcon("list-remove"));
++    } else {
++        favoriteAction->setText(i18n("Add to Favorites"));
++        favoriteAction->setIcon(KIcon("bookmark-new"));
++    }
++
++    actions << favoriteAction;
++
++    // add to desktop 
++    QAction *addToDesktopAction = new QAction(this);
++    addToDesktopAction->setText(i18n("Add to Desktop"));
++    addToDesktopAction->setEnabled(false);
++    actions << addToDesktopAction;
++
++    // add to main panel
++    QAction *addToPanelAction = new QAction(this);
++    addToPanelAction->setText(i18n("Add to Panel"));
++    addToPanelAction->setEnabled(false);
++    actions << addToPanelAction;
++
++    // advanced item actions
++    QAction *advancedSeparator = new QAction(this);
++    advancedSeparator->setSeparator(true);
++    actions << advancedSeparator;
++
++    QAction *advanced = d->advancedActionsMenu(url);
++    if (advanced) {
++        actions << advanced;
++    }    
++    
++    // add view specific actions
++    QAction *viewSeparator = new QAction(this);
++    viewSeparator->setSeparator(true);
++    actions << viewSeparator;
++    actions << viewActions(view); 
++
++    // display menu
++    QAction *result = QMenu::exec(actions,QCursor::pos());
++    
++    if (result == favoriteAction) {
++        if (isFavorite) {
++            FavoritesModel::remove(url);
++        } else {
++            FavoritesModel::add(url);
++        }
++    } 
++
++    delete favoriteAction;
++    delete addToDesktopAction;
++    delete addToPanelAction;
++    delete viewSeparator;
++}
++void ContextMenuFactory::setViewActions(QAbstractItemView *view,const QList<QAction*>& actions)
++{
++    if (actions.isEmpty()) {
++        d->viewActions.remove(view);
++    } else {
++        d->viewActions.insert(view,actions);
++    }
++}
++QList<QAction*> ContextMenuFactory::viewActions(QAbstractItemView *view) const
++{
++    return d->viewActions[view];
++}
++
++#include "contextmenufactory.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/launcher.cpp
+@@ -0,0 +1,393 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "ui/launcher.h"
++
++// Qt
++#include <QCoreApplication>
++#include <QKeyEvent>
++#include <QMouseEvent>
++#include <QPainter>
++#include <QStackedWidget>
++#include <QTabBar>
++#include <QVBoxLayout>
++
++// KDE
++#include <KLocalizedString>
++#include <KIcon>
++#include <solid/device.h>
++#include <solid/deviceinterface.h>
++
++// Local
++#include "core/favoritesmodel.h"
++#include "core/recentlyusedmodel.h"
++#include "core/applicationmodel.h"
++#include "core/leavemodel.h"
++#include "core/itemhandlers.h"
++#include "core/searchmodel.h"
++#include "core/systemmodel.h"
++
++#include "ui/itemdelegate.h"
++#include "ui/contextmenufactory.h"
++#include "ui/urlitemview.h"
++#include "ui/flipscrollview.h"
++#include "ui/searchbar.h"
++#include "ui/tabbar.h"
++
++using namespace Kickoff;
++
++class Launcher::Private
++{
++public:
++    Private(Launcher *launcher)
++        : q(launcher)
++        , urlLauncher(new UrlItemLauncher(launcher))
++        , searchBar(0)
++        , contentArea(0)
++        , contentSwitcher(0)
++        , searchView(0)
++        , favoritesView(0)
++        , contextMenuFactory(0)
++        , autoHide(false)
++    {
++    }
++    ~Private()
++    {
++    }
++
++    void setupEventHandler(QAbstractItemView *view)
++    {
++        view->viewport()->installEventFilter(q);
++        view->installEventFilter(q); 
++    }
++
++    void addView(const QString& name,const QIcon& icon,
++                 QAbstractItemModel *model = 0, QAbstractItemView *view = 0)
++    {
++        view->setFrameStyle(QFrame::NoFrame);
++        // prevent the view from stealing focus from the search bar
++        view->setFocusPolicy(Qt::NoFocus);
++        view->setContextMenuPolicy(Qt::CustomContextMenu);
++        view->setSelectionMode(QAbstractItemView::SingleSelection);
++        view->setDragEnabled(true);
++        view->setAcceptDrops(true);
++        view->setDropIndicatorShown(true);
++        view->setDragDropMode(QAbstractItemView::InternalMove);
++        view->setModel(model);
++        setupEventHandler(view);
++
++        connect(view,SIGNAL(customContextMenuRequested(QPoint)),q,SLOT(showViewContextMenu(QPoint)));
++
++        contentSwitcher->addTab(icon,name);
++        contentArea->addWidget(view);
++        
++    }
++
++    void initTabs()
++    {
++        // Favorites view
++        setupFavoritesView();
++
++        // All Programs view 
++        setupAllProgramsView();
++
++        // My Computer view
++        setupSystemView();
++       
++        // Recently Used view 
++        setupRecentView();
++
++        // Leave view
++        setupLeaveView();
++
++        // Search Bar
++        setupSearchView();
++    }
++    void setupLeaveView()
++    {
++        LeaveModel *model = new LeaveModel(q);
++        UrlItemView *view = new UrlItemView;
++        ItemDelegate *delegate = new ItemDelegate;
++        view->setItemDelegate(delegate);
++        view->setItemStateProvider(delegate);
++        addView(i18n("Leave"),KIcon("application-exit"),model,view);
++    }
++    void setupFavoritesView()
++    {
++        FavoritesModel *model = new FavoritesModel(q);
++        UrlItemView *view = new UrlItemView;
++        ItemDelegate *delegate = new ItemDelegate;
++        view->setItemDelegate(delegate);
++        view->setItemStateProvider(delegate);
++        addView(i18n("Favorites"),KIcon("bookmark"),model,view);
++
++        connect(model,SIGNAL(rowsInserted(QModelIndex,int,int)),q,SLOT(focusFavoritesView()));
++
++        favoritesView = view;
++    }
++    void setupAllProgramsView() 
++    {
++        ApplicationModel *applicationModel = new ApplicationModel(q);
++        applicationModel->setDuplicatePolicy(ApplicationModel::ShowLatestOnlyPolicy);
++
++        QAbstractItemView *applicationView = new FlipScrollView;
++        ItemDelegate *delegate = new ItemDelegate;
++        applicationView->setItemDelegate(delegate);
++
++        addView(i18n("Applications"),KIcon("applications-other"),
++                    applicationModel,applicationView);
++    }
++    void setupRecentView()
++    {
++        RecentlyUsedModel *model = new RecentlyUsedModel(q);
++        UrlItemView *view = new UrlItemView;
++        ItemDelegate *delegate = new ItemDelegate;
++        view->setItemDelegate(delegate);
++        view->setItemStateProvider(delegate);
++        addView(i18n("Recently Used"),KIcon("view-calendar-week"),model,view);
++
++        QAction *clearApplications = new QAction(KIcon("history-clear"),i18n("Clear Recent Applications"),q);
++        QAction *clearDocuments = new QAction(KIcon("history-clear"),i18n("Clear Recent Documents"),q);
++
++        connect(clearApplications,SIGNAL(triggered()),model,SLOT(clearRecentApplications()));
++        connect(clearDocuments,SIGNAL(triggered()),model,SLOT(clearRecentDocuments()));
++
++        contextMenuFactory->setViewActions(view,QList<QAction*>() << clearApplications << clearDocuments);
++    }
++    void setupSystemView()
++    {
++        SystemModel *model = new SystemModel(q);
++        UrlItemView *view = new UrlItemView;
++        ItemDelegate *delegate = new ItemDelegate;
++        view->setItemDelegate(delegate);
++        view->setItemStateProvider(delegate);
++        
++        addView(i18n("My Computer"),systemIcon(),model,view);
++    }
++    void setupSearchView()
++    {
++        SearchModel *model = new SearchModel(q);
++        UrlItemView *view = new UrlItemView;
++        ItemDelegate *delegate = new ItemDelegate;
++        view->setItemDelegate(delegate);
++        view->setItemStateProvider(delegate);
++        view->setModel(model);
++        view->setFrameStyle(QFrame::NoFrame);
++        // prevent view from stealing focus from the search bar
++        view->setFocusPolicy(Qt::NoFocus);
++        setupEventHandler(view);
++
++        connect(searchBar,SIGNAL(queryChanged(QString)),model,SLOT(setQuery(QString)));
++        connect(searchBar,SIGNAL(queryChanged(QString)),q,SLOT(focusSearchView(QString)));
++
++        view->setContextMenuPolicy(Qt::CustomContextMenu);
++        connect(view,SIGNAL(customContextMenuRequested(QPoint)),q,SLOT(showViewContextMenu(QPoint)));
++        
++        contentArea->addWidget(view);
++        searchView = view;
++    }
++    void registerUrlHandlers() 
++    {
++        typedef UrlItemLauncher UIL;
++        
++        UIL::addGlobalHandler(UIL::ExtensionHandler,"desktop",new ServiceItemHandler);
++        UIL::addGlobalHandler(UIL::ProtocolHandler,"leave",new LeaveItemHandler);
++    }
++    QIcon systemIcon()
++    {
++       QList<Solid::Device> batteryList = Solid::Device::listFromType(Solid::DeviceInterface::Battery,QString());
++       
++       if (batteryList.isEmpty()) {
++          return KIcon("computer");
++       } else {
++          return KIcon("computer-laptop");
++       } 
++    }
++
++    Launcher * const q;
++    UrlItemLauncher *urlLauncher;
++    QWidget *searchBar;
++    QStackedWidget *contentArea;
++    QTabBar *contentSwitcher;
++    QAbstractItemView *searchView;
++    QAbstractItemView *favoritesView;
++    ContextMenuFactory *contextMenuFactory;
++    bool autoHide;
++};
++
++Launcher::Launcher(QWidget *parent)
++    : QWidget(parent,Qt::Window)
++    , d(new Private(this))
++{
++    QVBoxLayout *layout = new QVBoxLayout;
++    layout->setSpacing(0);
++    layout->setMargin(0);
++
++    d->searchBar = new SearchBar(this);
++    d->searchBar->installEventFilter(this);
++    d->contentArea = new QStackedWidget(this);
++    d->contentSwitcher = new TabBar(this);
++    d->contentSwitcher->installEventFilter(this);
++    d->contentSwitcher->setIconSize(QSize(48,48));
++    d->contentSwitcher->setShape(QTabBar::RoundedSouth);
++    connect( d->contentSwitcher , SIGNAL(currentChanged(int)) , d->contentArea , 
++             SLOT(setCurrentIndex(int)) );
++    d->contextMenuFactory = new ContextMenuFactory(this);
++
++    d->initTabs();
++    d->registerUrlHandlers();
++
++    layout->addWidget(d->searchBar);
++    layout->addWidget(d->contentArea);
++    layout->addWidget(d->contentSwitcher);
++
++    setLayout(layout);
++}
++
++QSize Launcher::sizeHint() const
++{
++    // TODO This is essentially an arbitrarily chosen height which works
++    // reasonably well.  It would probably be better to choose the 
++    // height to allow X number of items to be visible in the Favorites
++    // view (which shows initially on startup)
++    QSize size = QWidget::sizeHint();
++    size.rheight() += 100;
++    return size;
++}
++void Launcher::setAutoHide(bool hide)
++{
++    d->autoHide = hide;
++}
++bool Launcher::autoHide() const
++{
++    return d->autoHide;
++}
++Launcher::~Launcher()
++{
++    delete d;
++}
++void Launcher::focusSearchView(const QString& query)
++{
++    if (!query.isEmpty()) {
++        d->contentArea->setCurrentWidget(d->searchView);
++    } else {
++        focusFavoritesView();
++    }
++}
++void Launcher::focusFavoritesView()
++{
++    d->contentSwitcher->setCurrentIndex(0);
++    d->contentArea->setCurrentWidget(d->favoritesView);
++}
++
++bool Launcher::eventFilter(QObject *object, QEvent *event) 
++{
++    // deliver unhandled key presses from the search bar 
++    // (mainly arrow keys, enter) to the active view
++    if ((object == d->contentSwitcher || object == d->searchBar) && event->type() == QEvent::KeyPress) {
++            // we want left/right to still nav the tabbar
++        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
++        if (keyEvent->modifiers() == Qt::NoModifier &&
++            (keyEvent->key() == Qt::Key_Left ||
++             keyEvent->key() == Qt::Key_Right)) {
++            if (object == d->contentSwitcher) {
++                return false;
++            } else {
++                QCoreApplication::sendEvent(d->contentSwitcher, event);
++                return true;
++            }
++        }
++
++        QAbstractItemView *activeView = qobject_cast<QAbstractItemView*>(d->contentArea->currentWidget());
++        if (activeView) {
++            QCoreApplication::sendEvent(activeView, event);
++            return true; 
++        }
++    }
++
++
++    // the mouse events we are interested in are delivered to the viewport,
++    // other events are delivered to the view itself.
++    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(object);
++    if(!view) {
++        view = qobject_cast<QAbstractItemView*>(object->parent());
++    }
++
++    if (view) {
++        QModelIndex openIndex;
++        if (event->type() == QEvent::MouseButtonRelease) {
++            QMouseEvent *mouseEvent = (QMouseEvent*)event;
++            const QModelIndex index = view->indexAt(mouseEvent->pos());
++            if (index.isValid() && 
++                index.model()->hasChildren(index) == false && 
++                mouseEvent->button() == Qt::LeftButton) {
++                openIndex = index;                
++            }
++        } else if (event->type() == QEvent::KeyPress) {
++            QKeyEvent *keyEvent = (QKeyEvent*)event;
++            const QModelIndex index = view->currentIndex();
++            if (index.isValid() && index.model()->hasChildren(index) == false &&
++                (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)) {
++                openIndex = index;                
++            }
++        }   
++        if (openIndex.isValid()) {
++            d->urlLauncher->openItem(openIndex);
++            if (d->autoHide) {
++                hide();
++            }
++            return true;
++        } 
++    }
++    return QWidget::eventFilter(object,event);
++}
++void Launcher::showViewContextMenu(const QPoint& pos)
++{
++    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(sender());
++    if (view) {
++        d->contextMenuFactory->showContextMenu(view,d->contentArea->mapFromParent(pos));
++    }
++}
++void Launcher::keyPressEvent(QKeyEvent *event)
++{
++    if (event->key() == Qt::Key_Escape) {
++        hide();
++    }
++#if 0
++    // allow tab switching by pressing the left or right arrow keys
++    if (event->key() == Qt::Key_Left && d->contentSwitcher->currentIndex() > 0) {
++        d->contentSwitcher->setCurrentIndex(d->contentSwitcher->currentIndex()-1);
++    } else if (event->key() == Qt::Key_Right && 
++        d->contentSwitcher->currentIndex() < d->contentSwitcher->count()-1) {
++        d->contentSwitcher->setCurrentIndex(d->contentSwitcher->currentIndex()+1);
++    }
++#endif
++}
++
++void Launcher::showEvent(QShowEvent *)
++{
++    // focus the search bar ready for typing 
++    d->searchBar->setFocus();
++}
++
++void Launcher::paintEvent(QPaintEvent*)
++{
++    // TODO - Draw a pretty background here
++}
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/urlitemview.h
+@@ -0,0 +1,74 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef URLITEMVIEW_H
++#define URLITEMVIEW_H
++
++// Qt
++#include <QAbstractItemView>
++
++namespace Kickoff
++{
++
++class ItemStateProvider;
++class UrlItemView : public QAbstractItemView
++{
++Q_OBJECT
++
++public:
++    UrlItemView(QWidget *parent = 0);
++    virtual ~UrlItemView();
++
++    void setItemStateProvider(ItemStateProvider *provider);
++    ItemStateProvider *itemStateProvider() const;
++
++    // reimplemented from QAbstractItemView 
++    virtual QModelIndex indexAt(const QPoint& point) const;
++    virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible); 
++    virtual QRect visualRect(const QModelIndex& index) const;
++    virtual void setModel(QAbstractItemModel *model);
++protected:
++    // reimplemented from QAbstractItemView 
++    virtual int horizontalOffset() const;
++    virtual bool isIndexHidden(const QModelIndex& index) const;
++    virtual QModelIndex moveCursor(CursorAction action,Qt::KeyboardModifiers modifiers);
++    virtual void setSelection(const QRect& rect,QItemSelectionModel::SelectionFlags flags);
++    virtual int verticalOffset() const;
++    virtual QRegion visualRegionForSelection(const QItemSelection& selection) const;
++    virtual void startDrag(Qt::DropActions supportedActions);
++
++    // reimplemented from QWidget
++    virtual void paintEvent(QPaintEvent *event);
++    virtual void resizeEvent(QResizeEvent *event);
++    virtual void mouseMoveEvent(QMouseEvent *event);
++    virtual void dropEvent(QDropEvent *event);
++
++private Q_SLOTS:
++    // lays out all items in the view and sets the current index to the first
++    // selectable item
++    void updateLayout();
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // URLITEMVIEW_H
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/flipscrollview.cpp
+@@ -0,0 +1,574 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Qt
++#include <QMouseEvent>
++#include <QPainter>
++#include <QScrollBar>
++#include <QTimeLine>
++#include <QtDebug>
++
++// Own
++#include "ui/flipscrollview.h"
++
++using namespace Kickoff;
++
++class FlipScrollView::Private
++{
++public:
++    Private(FlipScrollView *view)
++        : q(view) , itemHeight(32)
++          , backArrowHover(false)
++          , flipAnimTimeLine(new QTimeLine())
++          , animLeftToRight(true)
++          , previousVerticalOffset(0)
++    {
++    }
++    ~Private() 
++    {
++        delete flipAnimTimeLine;
++    }
++
++    QModelIndex currentRoot() const
++    {
++        if (currentRootIndex.isValid()) {
++            return currentRootIndex;
++        } else { 
++            return q->rootIndex(); 
++        }
++    }
++    QModelIndex previousRoot() const {
++        return previousRootIndex;
++    }
++    void setCurrentRoot(const QModelIndex& index)
++    {
++        previousRootIndex = currentRootIndex;
++        previousVerticalOffset = q->verticalOffset();
++        currentRootIndex = index;
++       
++        updateScrollBarRange();
++        q->verticalScrollBar()->setValue(0);
++
++        // when going back up the tree, highlight the item which opens
++        // the branch we have just left
++        if (previousRootIndex.parent() == index)
++            hoveredIndex = previousRootIndex;
++        else
++            hoveredIndex = QModelIndex();
++
++        // set whether the flip animation should go in a left to right
++        // or right to left direction. 
++        // note: this check used gives the wrong value for animLeftToRight
++        // if we go down more than one level of the tree at once 
++        animLeftToRight = currentRootIndex.parent() == previousRootIndex;
++
++        flipAnimTimeLine->start();
++    }
++    int treeDepth(const QModelIndex& headerIndex) const 
++    {
++        int depth = 0;
++        QModelIndex index = headerIndex; 
++        while (index.isValid()) {
++            index = index.parent();
++            depth++;
++        }   
++        return depth;
++    }
++    QRect headerRect(const QModelIndex& headerIndex = QModelIndex()) const 
++    {
++        QFontMetrics metrics(q->font());
++        int depth = treeDepth(headerIndex);
++
++        int top = -q->verticalScrollBar()->value();
++        return QRect(backArrowRect().right()+BACK_ARROW_SPACING,top,
++                     q->width()-backArrowRect().width()-1-BACK_ARROW_SPACING,
++                     depth*metrics.height()+
++                     ((depth > 0) ? HEADER_BOTTOM_MARGIN + HEADER_TOP_MARGIN : 1));
++                     
++    }
++    void drawHeader(QPainter *painter,const QRect& rect,const QModelIndex& headerIndex)
++    {
++        painter->save();
++         painter->setPen(QPen(q->palette().dark(),0));
++         painter->setFont(q->font());
++
++         QFontMetrics metrics(q->font());
++
++         int top = rect.bottom() - metrics.height() - HEADER_BOTTOM_MARGIN;
++         QModelIndex branchIndex = headerIndex;
++         bool first = true;
++         while (branchIndex.isValid()) {
++             QFont font = painter->font();
++             if (first) {
++                font.setBold(true); 
++                first = false;
++             } else {
++                font.setBold(false);
++             }
++             painter->setFont(font);
++
++             painter->drawText(QRect(rect.left(),top,rect.width(),metrics.height()),
++                               Qt::AlignLeft,
++                               branchIndex.data(Qt::DisplayRole).value<QString>());
++             branchIndex = branchIndex.parent();
++
++             top -= metrics.height();// + metrics.lineSpacing();
++         }
++
++/*         if (!first) {
++             painter->setPen(QPen(q->palette().mid(),2));
++             int dividerY = rect.bottom()-HEADER_BOTTOM_MARGIN/2;
++             painter->drawLine(rect.left(),dividerY,rect.right(),dividerY);
++         }*/
++        painter->restore();
++    }
++    void drawBackArrow(QPainter *painter,QStyle::State state)
++    {
++        painter->save();
++        if (state & QStyle::State_MouseOver &&
++            state & QStyle::State_Enabled) {
++            painter->setBrush(q->palette().highlight());
++        } else {
++            painter->setBrush(q->palette().mid());
++        }
++
++        QRect rect = backArrowRect();
++
++        // background
++        painter->setPen(Qt::NoPen);
++        painter->drawRect(rect);
++
++        painter->setPen(QPen(q->palette().dark(),0));
++        painter->drawLine (backArrowRect().topRight()+QPointF(0.5,0),
++                           backArrowRect().bottomRight()+QPointF(0.5,0));
++
++        // centre triangle
++        if (state & QStyle::State_Enabled) {
++            painter->setPen(Qt::NoPen);
++       
++            if (state & QStyle::State_MouseOver) {
++                painter->setBrush(q->palette().highlightedText());
++            } else {
++                painter->setBrush(q->palette().dark());
++            }
++            painter->translate(rect.center());
++            painter->drawPath(trianglePath());
++            painter->resetTransform();
++        }
++        painter->restore();
++    }
++    QPainterPath trianglePath(qreal width = 5,qreal height = 10) {
++        QPainterPath path(QPointF(-width/2,0.0));
++        path.lineTo(width,-height/2);
++        path.lineTo(width,height/2);
++        path.lineTo(-width/2,0.0);
++
++        return path;
++    }
++    QRect backArrowRect() const
++    {
++        return QRect(0,0,BACK_ARROW_WIDTH,q->height());
++    }
++    void updateScrollBarRange()
++    {
++        int childCount = q->model()->rowCount(currentRootIndex);
++        int pageSize = q->height();
++        int headerHeight = headerRect(currentRoot()).height();
++        q->verticalScrollBar()->setRange(0,(childCount*itemHeight)+
++                                            headerHeight-pageSize);
++        q->verticalScrollBar()->setPageStep(pageSize);
++        q->verticalScrollBar()->setSingleStep(itemHeight);
++    }
++
++    FlipScrollView * const q;
++    int itemHeight;
++    bool backArrowHover;
++    QPersistentModelIndex hoveredIndex;
++
++    QTimeLine *flipAnimTimeLine;
++    bool animLeftToRight;
++    int previousVerticalOffset;
++
++    static const int BACK_ARROW_WIDTH = 20;
++    static const int BACK_ARROW_SPACING = 5;
++    static const int FLIP_ANIM_DURATION = 300;
++    static const int HEADER_TOP_MARGIN = 10;
++    static const int HEADER_BOTTOM_MARGIN = 10;
++
++private:
++     QPersistentModelIndex currentRootIndex;
++     QPersistentModelIndex previousRootIndex;
++};
++
++FlipScrollView::FlipScrollView(QWidget *parent)
++    : QAbstractItemView(parent)
++    , d(new Private(this))
++{
++    connect(this,SIGNAL(clicked(QModelIndex)),this,SLOT(openItem(QModelIndex)));
++    connect(d->flipAnimTimeLine,SIGNAL(valueChanged(qreal)),this,
++            SLOT(updateFlipAnimation(qreal)));
++    d->flipAnimTimeLine->setDuration(Private::FLIP_ANIM_DURATION);
++    d->flipAnimTimeLine->setCurrentTime(Private::FLIP_ANIM_DURATION);
++    setIconSize(QSize(d->itemHeight,d->itemHeight));
++    setMouseTracking(true);
++    setAutoScroll(true);
++}
++FlipScrollView::~FlipScrollView()
++{
++    delete d;
++}
++QModelIndex FlipScrollView::indexAt(const QPoint& point) const
++{
++    int topOffset = d->headerRect(d->currentRoot()).height() - verticalOffset();
++    int items = model()->rowCount(d->currentRoot());   
++
++    int rowIndex = (point.y() - topOffset) / d->itemHeight;
++
++    QRect itemRect = rect();
++    itemRect.setLeft(d->backArrowRect().right()+Private::BACK_ARROW_SPACING);
++
++    if (rowIndex < items && itemRect.contains(point)) {
++       return model()->index(rowIndex,0,d->currentRoot());
++    } else {
++       return QModelIndex();
++    }
++}
++void FlipScrollView::scrollTo(const QModelIndex& index , ScrollHint hint)
++{
++    Q_ASSERT(index.isValid());
++
++    QRect itemRect = visualRect(index);
++    if (itemRect.isValid() && hint == EnsureVisible) {
++        if (itemRect.top() < 0) {
++            verticalScrollBar()->setValue(verticalScrollBar()->value() + 
++                                          itemRect.top());
++        } else if (itemRect.bottom() > height()) {
++            verticalScrollBar()->setValue(verticalScrollBar()->value() + 
++                                          (itemRect.bottom()-height()));
++        } 
++    }
++}
++bool FlipScrollView::isIndexHidden(const QModelIndex&) const
++{
++    return false;
++}
++QRect FlipScrollView::visualRect(const QModelIndex& index) const
++{
++    int topOffset = d->headerRect(index.parent()).height();
++    int leftOffset = d->backArrowRect().width() + Private::BACK_ARROW_SPACING;
++
++    if (index.parent() != d->currentRoot() && index.parent() != d->previousRoot())
++        return QRect();
++    
++    bool parentIsPreviousRoot = d->previousRoot().isValid() && index.parent() == d->previousRoot();
++    if (parentIsPreviousRoot && d->flipAnimTimeLine->state() == QTimeLine::NotRunning) {
++        return QRect();
++    }
++    
++    if (parentIsPreviousRoot) { 
++        topOffset -= d->previousVerticalOffset;
++    } else {
++        topOffset -= verticalOffset();
++    }
++
++    int scrollBarWidth = verticalScrollBar()->isVisible() ? 
++                                    verticalScrollBar()->width() : 0;
++    QRect itemRect(leftOffset,topOffset+index.row()*d->itemHeight,
++                   width()-leftOffset-scrollBarWidth,d->itemHeight);
++
++    const qreal timeValue = d->flipAnimTimeLine->currentValue();
++    if ( index.parent() == d->currentRoot() ) {
++       if (d->animLeftToRight) {
++        itemRect.translate((int)(itemRect.width()*(1-timeValue)),0);
++       } else {
++        itemRect.translate((int)(-itemRect.width()*(1-timeValue)),0);
++       }
++    } else {
++       if (d->animLeftToRight) {
++        itemRect.translate((int)(-timeValue*itemRect.width()),0);
++       } else {
++        itemRect.translate((int)(timeValue*itemRect.width()),0);
++       }
++    }
++    return itemRect;
++}
++int FlipScrollView::horizontalOffset() const
++{
++    return 0;
++}
++int FlipScrollView::verticalOffset() const
++{
++    return verticalScrollBar()->value();
++}
++QRegion FlipScrollView::visualRegionForSelection(const QItemSelection& selection) const
++{
++    QRegion region;
++    foreach(const QModelIndex& index , selection.indexes()) {
++        region |= visualRect(index);
++    }
++    return region;
++}
++QModelIndex FlipScrollView::moveCursor(CursorAction cursorAction,Qt::KeyboardModifiers)
++{
++    QModelIndex index = currentIndex();
++   // qDebug() << "Moving cursor with current index" << index.data(Qt::DisplayRole);
++    switch (cursorAction) {
++        case MoveUp:
++                if (currentIndex().row() > 0) {
++                    index = currentIndex().sibling(currentIndex().row()-1,
++                                                   currentIndex().column());     
++                }
++            break;
++        case MoveDown:
++                if (currentIndex().row() < 
++                        model()->rowCount(currentIndex().parent())-1 ) {
++                    index = currentIndex().sibling(currentIndex().row()+1,
++                                                   currentIndex().column());
++                } 
++            break;
++        case MoveLeft:
++                if (d->currentRoot().isValid()) {
++                    index = d->currentRoot();
++                    d->setCurrentRoot(d->currentRoot().parent());
++                    setCurrentIndex(index);
++                }
++            break;
++        case MoveRight:
++               if (model()->hasChildren(currentIndex())) {
++                    openItem(currentIndex());
++                    // return the new current index set by openItem()
++                    index = currentIndex();
++               }
++            break;
++        default:
++                // Do nothing
++            break;
++    }
++
++    // clear the hovered index
++    update(d->hoveredIndex);
++    d->hoveredIndex = index;
++
++     //qDebug() << "New index after move" << index.data(Qt::DisplayRole);
++
++    return index;
++}
++
++void FlipScrollView::setModel(QAbstractItemModel *model)
++{
++    QAbstractItemView::setModel(model);
++    if (model) {
++        setCurrentIndex(model->index(0,0));
++    }
++}
++
++void FlipScrollView::setSelection(const QRect& rect , QItemSelectionModel::SelectionFlags flags)
++{
++    QItemSelection selection;
++    selection.select(indexAt(rect.topLeft()),indexAt(rect.bottomRight()));
++    selectionModel()->select(selection,flags);
++}
++
++void FlipScrollView::openItem(const QModelIndex& index)
++{
++    if (model()->canFetchMore(index)) {
++        model()->fetchMore(index);
++    }
++
++    bool hasChildren = model()->hasChildren(index);
++
++    if (hasChildren) {
++        d->setCurrentRoot(index);
++        setCurrentIndex(model()->index(0,0,index));
++    } else {
++        //TODO Emit a signal to open/execute the item
++    }
++}
++
++void FlipScrollView::resizeEvent(QResizeEvent*)
++{
++    d->updateScrollBarRange();
++}
++
++void FlipScrollView::mouseReleaseEvent(QMouseEvent *event)
++{
++    if (d->backArrowRect().contains(event->pos()) && d->currentRoot().isValid()) {
++        // go up one level
++        d->setCurrentRoot(d->currentRoot().parent());
++        setDirtyRegion(rect());
++    } else {
++        QAbstractItemView::mouseReleaseEvent(event);
++    }
++}
++
++void FlipScrollView::mouseMoveEvent(QMouseEvent *event) 
++{
++    bool mouseOverBackArrow = d->backArrowRect().contains(event->pos());
++
++    if (mouseOverBackArrow != d->backArrowHover) {
++        d->backArrowHover = mouseOverBackArrow;
++        setDirtyRegion(d->backArrowRect());
++    } else {
++        const QModelIndex itemUnderMouse = indexAt(event->pos());
++        if (itemUnderMouse != d->hoveredIndex && itemUnderMouse.isValid()) {
++            update(itemUnderMouse);
++            update(d->hoveredIndex);
++
++            d->hoveredIndex = itemUnderMouse;
++            setCurrentIndex(d->hoveredIndex);
++        }
++
++        QAbstractItemView::mouseMoveEvent(event);
++    }
++}
++
++void FlipScrollView::keyPressEvent(QKeyEvent *event)
++{
++    if (event->key() == Qt::Key_Enter ||
++        event->key() == Qt::Key_Return) {
++        moveCursor(MoveRight, event->modifiers());
++        event->accept();
++        return;
++    }
++
++    if (event->key() == Qt::Key_Escape &&
++        d->currentRoot().isValid()) {
++        moveCursor(MoveLeft, event->modifiers());
++        event->accept();
++        return;
++    }
++
++    QAbstractItemView::keyPressEvent(event);
++}
++
++void FlipScrollView::paintEvent(QPaintEvent * event)
++{
++    QPainter painter(viewport());
++    painter.setRenderHint(QPainter::Antialiasing);
++
++    // draw items
++    QModelIndexList redrawIndexes;
++
++    int currentRootRows = model()->rowCount(d->currentRoot());
++    int previousRootRows = model()->rowCount(d->previousRoot());
++
++    for (int i=0;i<currentRootRows;i++) {
++        redrawIndexes << model()->index(i,0,d->currentRoot());
++    }
++    for (int i=0;i<previousRootRows && d->flipAnimTimeLine->currentValue() < 1.0;i++) {
++        redrawIndexes << model()->index(i,0,d->previousRoot());
++    }
++
++    foreach(const QModelIndex& index,redrawIndexes) {
++        QStyleOptionViewItem option = viewOptions();
++        option.rect = visualRect(index);
++
++        // only draw items intersecting the region of the widget
++        // being updated
++        if (event->rect().intersects(option.rect)) {
++        
++            if (selectionModel()->isSelected(index)) {
++                option.state |= QStyle::State_Selected;
++            }
++            if (index == d->hoveredIndex) {
++                option.state |= QStyle::State_MouseOver;
++            }
++            if (index == currentIndex()) {
++                option.state |= QStyle::State_HasFocus;
++            } 
++        
++            itemDelegate(index)->paint(&painter,option,index);
++
++            if (model()->hasChildren(index)) {
++                painter.save();
++                painter.setPen(Qt::NoPen);
++
++                // there is an assumption made here that the delegate will fill the background
++                // with the selected color or some similar color which contrasts well with the
++                // highlighted text color
++                if (option.state & (QStyle::State_Selected|QStyle::State_MouseOver)) {
++                    painter.setBrush(palette().highlight());
++                } else {
++                    painter.setBrush(palette().dark());
++                }
++
++                QRect triRect = option.rect;
++                triRect.setLeft(triRect.right()-20);
++                painter.translate(triRect.center());
++                painter.rotate(180);
++                painter.drawPath(d->trianglePath());
++                painter.resetTransform();
++                painter.restore();
++            }
++        }
++    }
++
++    const qreal timerValue = d->flipAnimTimeLine->currentValue();
++    
++    // draw header for current view
++    QRect headerRect = d->headerRect(d->currentRoot());
++    if (d->animLeftToRight) {
++        headerRect.translate((int)(headerRect.width()*(1-timerValue)),0);
++    } else {
++        headerRect.translate((int)(-headerRect.width()*(1-timerValue)),0);
++    }
++    if (event->rect().intersects(headerRect)) {
++        d->drawHeader(&painter,headerRect,d->currentRoot());
++    }
++    // draw header for previous view
++    QRect prevHeaderRect = d->headerRect(d->previousRoot());
++    if (d->animLeftToRight) {
++        prevHeaderRect.translate((int)(-prevHeaderRect.width()*timerValue),0);
++    } else {
++        prevHeaderRect.translate((int)(prevHeaderRect.width()*timerValue),0);
++    }
++    if (event->rect().intersects(prevHeaderRect) && timerValue < 1.0) {
++        d->drawHeader(&painter,prevHeaderRect,d->previousRoot());
++    }
++
++    // draw navigation
++    QStyle::State state = 0;
++    if (d->currentRoot().isValid()) {
++        state |= QStyle::State_Enabled;
++    }
++    if (d->backArrowHover) { 
++        state |= QStyle::State_MouseOver;
++    }
++    if (d->currentRoot().isValid() || d->previousRoot().isValid()) {
++        qreal opacity = 1.0;
++        if (!d->previousRoot().isValid()) {
++            opacity = timerValue;   
++        } else if (!d->currentRoot().isValid()) {
++            opacity = 1-timerValue;
++        }
++        painter.save();
++        painter.setOpacity(opacity);
++
++        d->drawBackArrow(&painter,state);
++        
++        painter.restore();
++    }
++}
++
++void FlipScrollView::updateFlipAnimation(qreal)
++{
++    setDirtyRegion(rect());
++}
++
++#include "flipscrollview.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/contextmenufactory.h
+@@ -0,0 +1,51 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++#ifndef CONTEXTMENUFACTORY_H
++#define CONTEXTMENUFACTORY_H
++
++// Qt
++#include <QAction>
++
++class QAbstractItemView;
++
++namespace Kickoff
++{
++
++class ContextMenuFactory : public QObject
++{
++Q_OBJECT 
++
++public:
++    ContextMenuFactory(QObject *parent = 0);
++    ~ContextMenuFactory();
++
++    void setViewActions(QAbstractItemView *view,const QList<QAction*>& actions);
++    QList<QAction*> viewActions(QAbstractItemView *view) const;
++
++public Q_SLOTS:
++    void showContextMenu(QAbstractItemView *view,const QPoint& pos); 
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // CONTEXTMENUFACTORY_H 
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/launcher.h
+@@ -0,0 +1,68 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef LAUNCHER_H
++#define LAUNCHER_H
++
++// Qt
++#include <QWidget>
++
++namespace Kickoff
++{
++
++/** 
++ * The main window class for the Kickoff launcher.  This class is responsible
++ * for creating the various tabs, views and models which make up the launcher's
++ * user interface.
++ */
++class Launcher : public QWidget
++{
++Q_OBJECT
++
++public:
++    /** Construct a new Launcher with the specified parent. */
++    Launcher(QWidget *parent = 0);
++    ~Launcher();
++
++    /** Specifies whether the launcher should hide itself when an item is activated. */
++    void setAutoHide(bool autoHide);
++    bool autoHide() const;
++
++    // reimplemented
++    virtual bool eventFilter(QObject *object, QEvent *event);
++    virtual QSize sizeHint() const;
++
++protected:
++    virtual void keyPressEvent(QKeyEvent *event);
++    virtual void showEvent(QShowEvent *event);
++    virtual void paintEvent(QPaintEvent *event);
++
++private Q_SLOTS:
++    void focusSearchView(const QString& query);
++    void focusFavoritesView();
++    void showViewContextMenu(const QPoint& pos);
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // LAUNCHER_H
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/flipscrollview.h
+@@ -0,0 +1,87 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++#ifndef FLIPSCROLLVIEW_H
++#define FLIPSCROLLVIEW_H
++
++// Qt
++#include <QAbstractItemView>
++
++namespace Kickoff
++{
++
++/**
++ * An "iPod-style" item view for single-column tree and list data models which 
++ * displays items in pages (one per tree branch).
++ *
++ * Clicking on an item which has children (eg. a folder in a directory model)
++ * scrolls the whole contents of the view to show the items children.  A large back
++ * arrow is displayed on the left of the display if the current item has a valid parent,
++ * when clicked on this scrolls the whole contents of the view to show the parent item's
++ * children.
++ * 
++ * The view assumes that the item delegate will fill the background with the current palette's
++ * highlight color when the user hovers over items with the mouse.  Item delegates should check
++ * for the QStyle::State_MouseOver or QStyle::State_Selected flags in the state 
++ * field of the QStyleOptionViewItem passed to the QAbstractItemDelegate::paint() method.
++ */
++class FlipScrollView : public QAbstractItemView
++{
++Q_OBJECT 
++
++public:
++    /** Construct a new FlipScrollView with the specified parent. */
++    FlipScrollView(QWidget *parent = 0);
++    virtual ~FlipScrollView();
++
++    // reimplemented from QAbstractItemView 
++    virtual QModelIndex indexAt(const QPoint& point) const;
++    virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible);
++    virtual QRect visualRect(const QModelIndex& index) const;
++
++    virtual void setModel(QAbstractItemModel *model);
++
++protected:
++    // reimplemented from QWidget
++    virtual void paintEvent(QPaintEvent *event);
++    virtual void mouseMoveEvent(QMouseEvent *event);
++    virtual void mouseReleaseEvent(QMouseEvent *event);
++    virtual void resizeEvent(QResizeEvent *event);
++    virtual void keyPressEvent(QKeyEvent *event);
++
++    // reimplemented from QAbstractItemView 
++    virtual bool isIndexHidden(const QModelIndex& index) const;
++    virtual int horizontalOffset() const;
++    virtual int verticalOffset() const;
++    virtual QRegion visualRegionForSelection(const QItemSelection& selection) const;
++    virtual QModelIndex moveCursor(CursorAction cursorAction,Qt::KeyboardModifiers modifiers);
++    virtual void setSelection(const QRect& rect , QItemSelectionModel::SelectionFlags flags);
++
++private Q_SLOTS:
++    void openItem(const QModelIndex& index);
++    void updateFlipAnimation(qreal value);
++
++private:
++    class Private;
++    Private * const d;
++};
++
++}
++
++#endif // FLIPSCROLLVIEW_H
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/itemdelegate.cpp
+@@ -0,0 +1,177 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "ui/itemdelegate.h"
++
++// Qt
++#include <QApplication>
++#include <QFontMetrics>
++#include <QIcon>
++#include <QModelIndex>
++#include <QPainter>
++#include <QStyleOptionViewItem>
++
++#include <QtDebug>
++
++// KDE
++#include <KColorUtils>
++#include <KGlobal>
++#include <KGlobalSettings>
++
++using namespace Kickoff;
++
++void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
++{
++    const bool hover = option.state & (QStyle::State_Selected|QStyle::State_MouseOver|QStyle::State_HasFocus);
++    QRect decorationRect = QStyle::alignedRect(option.direction,
++                                               option.decorationPosition == QStyleOptionViewItem::Left ? Qt::AlignLeft : Qt::AlignRight,
++                                               option.decorationSize,
++                                               option.rect);
++    QSize textSize(option.rect.width()-decorationRect.width()-ICON_TEXT_MARGIN,
++                   option.rect.height());
++
++    qreal freeSpace = -1;
++    qreal usedSpace = -1;
++    if (!index.data(DiskFreeSpaceRole).isNull()) {
++        freeSpace = index.data(DiskFreeSpaceRole).value<int>()/1024.0/1024.0;
++        usedSpace = index.data(DiskUsedSpaceRole).value<int>()/1024.0/1024.0;
++    }
++
++    Qt::Alignment textAlignment = option.decorationAlignment & Qt::AlignRight ? Qt::AlignLeft : Qt::AlignRight;
++
++    QRect textRect = QStyle::alignedRect(option.direction,
++                                         textAlignment,
++                                         textSize,
++                                         option.rect);
++    QString titleText = index.data(Qt::DisplayRole).value<QString>();
++    QString subTitleText = index.data(SubTitleRole).value<QString>();
++
++    QRect titleRect = textRect;
++
++    if (!subTitleText.isEmpty()) {
++        titleRect.setHeight(titleRect.height()/2);
++    }
++
++    QRect subTitleRect = titleRect;
++    subTitleRect.translate(0,subTitleRect.height());
++
++    // draw selected background when hovered 
++    if (hover) {
++        painter->fillRect(option.rect,option.palette.highlight()); 
++    }
++
++    // draw icon
++    QIcon decorationIcon = index.data(Qt::DecorationRole).value<QIcon>();
++    decorationIcon.paint(painter, decorationRect, option.decorationAlignment);
++
++    // draw title and sub-title 
++    QFont titleFont(option.font);
++    if (hover) {
++        painter->setPen(QPen(option.palette.highlightedText(),0));
++    } else {
++        painter->setPen(QPen(option.palette.text(),0));
++    }
++
++    painter->save();
++    painter->setFont(titleFont);
++    painter->drawText(titleRect,Qt::AlignLeft|Qt::AlignVCenter,titleText);
++
++    QFont subTitleFont = option.font;
++    subTitleFont.setPointSize(qMax(subTitleFont.pointSize()-2,
++                                   KGlobalSettings::smallestReadableFont().pointSize()));
++
++    if (!hover) {
++        painter->setPen(QPen(option.palette.mid(),0));
++    }
++
++    painter->setFont(subTitleFont);
++
++    painter->drawText(subTitleRect,Qt::AlignLeft|Qt::AlignVCenter,subTitleText);
++    painter->restore();
++
++    // draw free space information (for drive icons)
++    if (usedSpace >= 0) {
++        painter->save();
++
++        QFontMetrics titleMetrics(option.font);
++        QFontMetrics subTitleMetrics(subTitleFont);
++
++        QSize spaceSize = option.rect.size();
++        spaceSize.rwidth() /= 3;
++        spaceSize.rheight() -= 20;
++
++        // check if there is enough space to draw the bar
++        qreal actualTextWidth = qMax(titleMetrics.width(titleText),subTitleMetrics.width(subTitleText));
++        qreal textBarGap = (titleRect.width() - actualTextWidth) - (spaceSize.width() + ICON_TEXT_MARGIN);
++        if (textBarGap > 0) {
++
++            // if the item view is gradually resized smaller or larger, make the bar fade out/in 
++            // as enough space for it becomes available
++            if (textBarGap < 20.0) {
++                painter->setOpacity(textBarGap/20.0);
++            }
++
++            QRectF spaceRect = QStyle::alignedRect(option.direction,
++                                                   Qt::AlignVCenter|Qt::AlignRight,spaceSize,option.rect);
++
++            // add spacing between item text and free-space bar and tweak the position slightly
++            // to give a shart outline when drawn with anti-aliasing enabled
++            spaceRect.translate(-ICON_TEXT_MARGIN+0.5,0.5);
++
++            QBrush fillBrush = KColorUtils::mix(Qt::green,Qt::yellow,(usedSpace/(freeSpace+usedSpace))); 
++
++            qreal width = ( usedSpace / (freeSpace+usedSpace) ) * spaceRect.width();
++            painter->setPen(QPen(option.palette.mid(),0));
++            painter->fillRect(QRectF(spaceRect.left(),spaceRect.top(),width,spaceRect.height()),fillBrush); 
++            painter->setBrush(QBrush(Qt::NoBrush));
++            painter->drawRect(spaceRect);
++
++            // -- Removed the free space text because it added too much 'visual noise' to the item
++            //
++                // some precision is lost here, but it is acceptible given that the disk-free bar
++                // is only shown as a guide
++                // QString freeSpaceString = KGlobal::locale()->formatByteSize(freeSpace*1024*1024*1024);
++                // painter->drawText(spaceRect,Qt::AlignCenter,i18n("%1 free",freeSpaceString));
++        }
++
++        painter->restore();
++    }
++}
++
++QSize ItemDelegate::sizeHint(const QStyleOptionViewItem& option,const QModelIndex& index) const
++{
++    QSize size = option.decorationSize;
++    
++    QFontMetrics metrics(option.font);
++    size.rwidth() += ICON_TEXT_MARGIN;
++    size.rwidth() += qMax(metrics.width(index.data(Qt::DisplayRole).value<QString>()),
++                          metrics.width(index.data(SubTitleRole).value<QString>()));
++    size.rheight() = qMax(size.height(),2*metrics.height()+metrics.lineSpacing());
++
++    return size;
++}
++
++bool ItemDelegate::isVisible(const QModelIndex& index) const 
++{
++    Q_ASSERT(index.isValid());
++
++    return index.model()->hasChildren(index) || !index.data(UrlRole).isNull();
++}
++
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/searchbar.cpp
+@@ -0,0 +1,103 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "ui/searchbar.h"
++
++// Qt
++#include <QCoreApplication>
++#include <QHBoxLayout>
++#include <QKeyEvent>
++#include <QLabel>
++#include <QTimer>
++
++// KDE
++#include <KIcon>
++#include <KLineEdit>
++#include <KLocalizedString>
++
++using namespace Kickoff;
++
++class SearchBar::Private
++{
++public:
++    Private() : editWidget(0),timer(0) {}
++
++    KLineEdit *editWidget;
++    QTimer *timer;
++};
++
++SearchBar::SearchBar(QWidget *parent)
++ : QWidget(parent)
++ , d(new Private)
++{
++    // timer for buffered updates
++    d->timer = new QTimer(this);
++    d->timer->setInterval(300);
++    d->timer->setSingleShot(true);
++    connect(d->timer,SIGNAL(timeout()),this,SLOT(updateTimerExpired()));
++    connect(this,SIGNAL(startUpdateTimer()),d->timer,SLOT(start()));
++
++    // setup UI
++    QHBoxLayout *layout = new QHBoxLayout;
++    layout->setMargin(3);
++
++    QLabel *searchLabel = new QLabel(i18n("Search:"),this);
++
++    d->editWidget = new KLineEdit(this);
++    d->editWidget->installEventFilter(this);
++    d->editWidget->setClearButtonShown(true);
++    connect(d->editWidget,SIGNAL(textChanged(QString)),this,SIGNAL(startUpdateTimer()));
++
++    QLabel *searchIcon = new QLabel(this);
++    searchIcon->setPixmap(KIcon("file-find").pixmap(32,32));
++
++    layout->addWidget(searchLabel);
++    layout->addWidget(d->editWidget);
++    layout->addWidget(searchIcon);
++    setLayout(layout);
++
++    setFocusProxy(d->editWidget);
++}
++void SearchBar::updateTimerExpired()
++{
++    emit queryChanged(d->editWidget->text());
++}
++SearchBar::~SearchBar()
++{
++    delete d;
++}
++bool SearchBar::eventFilter(QObject *watched,QEvent *event)
++{
++    // left and right arrow key presses in the search edit when the
++    // edit is empty are propagated up to the parent widget
++    // this allows views in the Launcher to use left and right arrows for
++    // navigation whilst the search bar still has the focus
++    if (watched == d->editWidget && event->type() == QEvent::KeyPress) {
++        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
++        if ((keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Right) &&
++            d->editWidget->text().isEmpty()) {
++            QCoreApplication::sendEvent(this,event);
++            return true;
++        }
++    }
++    return false; 
++}
++
++#include "searchbar.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/tabbar.cpp
+@@ -0,0 +1,158 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "ui/tabbar.h"
++
++// Qt
++#include <QIcon>
++#include <QMouseEvent>
++#include <QPainter>
++#include <QtDebug>
++
++using namespace Kickoff;
++
++TabBar::TabBar(QWidget *parent)
++    : QTabBar(parent),
++      m_hoveredTabIndex(-1)
++{
++    //FIXME: should be replaced with a Phase custom animation
++    m_animator.setDuration(150);
++    m_animator.setCurveShape(QTimeLine::EaseInOutCurve);
++    m_animator.setFrameRange(0, 10);
++    connect(&m_animator, SIGNAL(frameChanged(int)), this, SLOT(update()));
++    connect(&m_animator, SIGNAL(finished()), this, SLOT(animationFinished()));
++    connect(this, SIGNAL(currentChanged(int)), this, SLOT(startAnimation()));
++
++    m_tabSwitchTimer.setSingleShot(true);
++    connect(&m_tabSwitchTimer, SIGNAL(timeout()), this, SLOT(switchToHoveredTab()));
++    setMouseTracking(true);
++}
++
++QSize TabBar::tabSizeHint(int index) const
++{
++    QSize hint;
++    const QFontMetrics metrics(font());
++    const QSize textSize = metrics.size(Qt::TextHideMnemonic,tabText(index));
++
++    hint.rwidth() = qMax(iconSize().width(),textSize.width());
++    hint.rheight() = iconSize().height() + textSize.height();
++
++    hint.rwidth() += 2*TAB_CONTENTS_MARGIN;
++    hint.rheight() += 2*TAB_CONTENTS_MARGIN;
++
++    return hint;
++}
++
++void TabBar::paintEvent(QPaintEvent *event)
++{
++    Q_UNUSED(event)
++    QPainter painter(this);
++    int numTabs = count();
++    int currentTab = currentIndex();
++
++    if (m_animStates.size() != numTabs) {
++        m_animStates.resize(numTabs);
++    }
++
++    QBrush bgBrush = palette().button();
++    QColor bgColor = bgBrush.color();
++
++    for (int i=0 ; i<count() ; i++) {
++        QRect rect = tabRect(i).adjusted(TAB_CONTENTS_MARGIN,TAB_CONTENTS_MARGIN,
++                                        -TAB_CONTENTS_MARGIN,-TAB_CONTENTS_MARGIN);
++
++        // draw background for selected tab
++        if (i == currentTab) {
++            m_animStates[i] = qMin(m_animator.endFrame(), ++m_animStates[i]);
++        } else if (m_animStates[i] > 0) {
++            m_animStates[i] = qMax(0, m_animStates[i] - 2);
++        }
++
++        if (m_animStates[i] > 0) {
++            bgColor.setAlpha((m_animStates[i] / qreal(m_animator.endFrame())) * 255.0);
++            bgBrush.setColor(bgColor);
++            painter.fillRect(tabRect(i), bgBrush);
++        }
++
++        // draw tab icon and text
++        QFontMetrics metrics(painter.font());
++        int textHeight = metrics.height();
++        QRect iconRect = rect;
++        int delta = m_animStates[i] / qreal(m_animator.endFrame()) * 4;
++        iconRect.setBottom(iconRect.bottom()-textHeight);
++        iconRect.adjust(0, -delta, 0, -delta);
++        tabIcon(i).paint(&painter,iconRect);
++
++        QRect textRect = rect;
++        textRect.setTop(textRect.bottom()-textHeight);
++        painter.drawText(textRect,Qt::AlignCenter|Qt::TextHideMnemonic,tabText(i));
++    }
++}
++
++void TabBar::leaveEvent(QEvent *event)
++{
++    Q_UNUSED(event)
++    m_hoveredTabIndex = -1;
++}
++
++void TabBar::mouseMoveEvent(QMouseEvent *event)
++{
++    m_hoveredTabIndex = tabAt(event->pos());
++    if (m_hoveredTabIndex > -1 && m_hoveredTabIndex != currentIndex()) {
++        m_tabSwitchTimer.stop();
++        m_tabSwitchTimer.start(50);
++    }
++}
++
++void TabBar::switchToHoveredTab()
++{
++    if (m_hoveredTabIndex < 0 || m_hoveredTabIndex == currentIndex()) {
++        return;
++    }
++
++    setCurrentIndex(m_hoveredTabIndex);
++}
++
++void TabBar::startAnimation()
++{
++    m_animator.start();
++}
++
++void TabBar::animationFinished()
++{
++    int currentTab = currentIndex();
++    update();
++
++    int numTabs = count();
++
++    if (m_animStates.size() != numTabs)
++       return;
++
++    for (int i = 0; i < numTabs; ++i) {
++        if (i == currentTab) {
++            m_animStates[i] = m_animator.endFrame();
++        } else {
++            m_animStates[i] = 0;
++        }
++    }
++    update();
++}
++
++#include "tabbar.moc"
+--- /dev/null
++++ b/plasma/applets/kickoff/ui/urlitemview.cpp
+@@ -0,0 +1,441 @@
++/*  
++    Copyright 2007 Robert Knight <robertknight at gmail.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Library General Public
++    License as published by the Free Software Foundation; either
++    version 2 of the License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    Library General Public License for more details.
++
++    You should have received a copy of the GNU Library General Public License
++    along with this library; see the file COPYING.LIB.  If not, write to
++    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++    Boston, MA 02110-1301, USA.
++*/
++
++// Own
++#include "ui/urlitemview.h"
++
++// Qt
++#include <QtCore/QHash>
++#include <QtCore/QPersistentModelIndex>
++
++#include <QtGui/QMouseEvent>
++#include <QtGui/QPainter>
++#include <QtGui/QPaintEvent>
++#include <QtGui/QScrollBar>
++
++#include <QtDebug>
++
++// Local
++#include "core/models.h"
++
++using namespace Kickoff;
++
++class UrlItemView::Private
++{
++public:
++    Private(UrlItemView *parent)
++        : q(parent)
++        , contentsHeight(0)
++        , itemStateProvider(0)
++    {
++    }
++
++    void doLayout()
++    {
++        // clear existing layout information
++        itemRects.clear();
++        visualOrder.clear();
++
++        if (!q->model())
++            return;
++    
++        int verticalOffset = TOP_OFFSET;
++        int horizontalOffset = 0;
++        int row = 0;
++        int visualColumn = 0;
++
++        QModelIndex branch = currentRootIndex;
++        
++        while (true) {
++            if (itemChildOffsets[branch]+row >= q->model()->rowCount(branch) ||
++                branch != currentRootIndex && row > MAX_CHILD_ROWS) {
++
++                if (branch.isValid()) {
++                    row = branch.row()+1;
++                    branch = branch.parent();
++                    continue;
++                } else {
++                    break;
++                }
++            }
++        
++            QModelIndex child = q->model()->index(row+itemChildOffsets[branch],0,branch);
++
++            if (q->model()->hasChildren(child)) {
++                QSize childSize = calculateHeaderSize(child);
++                itemRects.insert(child,QRect(QPoint(HEADER_LEFT_MARGIN,verticalOffset),childSize));
++
++                verticalOffset += childSize.height();
++                horizontalOffset = 0; 
++                branch = child;
++                row = 0;
++                visualColumn = 0;
++            } else {
++                QSize childSize = calculateItemSize(child);
++                itemRects.insert(child,QRect(QPoint(horizontalOffset,verticalOffset),
++                                             childSize));
++
++                if (childSize.isValid()) {
++                    visualOrder << child;
++                }
++
++                horizontalOffset += contentWidth() / MAX_COLUMNS;
++
++                visualColumn++;
++                row++;
++
++                bool wasLastRow = row+itemChildOffsets[branch] >= q->model()->rowCount(branch);
++                bool nextItemIsBranch = false;
++                if (!wasLastRow) { 
++                     QModelIndex nextIndex =q->model()->index(row+itemChildOffsets[branch],0,branch);
++                     nextItemIsBranch = q->model()->hasChildren(nextIndex);
++                }
++
++                if (visualColumn >= MAX_COLUMNS || wasLastRow || nextItemIsBranch) {
++                    verticalOffset += childSize.height();
++                    horizontalOffset = 0; 
++                    visualColumn = 0;
++                }
++            }
++        }
++        contentsHeight = verticalOffset;
++
++        updateScrollBarRange();
++    }
++    void drawHeader(QPainter *painter,
++                    const QModelIndex& index,
++                    const QStyleOptionViewItem& option)
++    {
++        painter->save();
++        QFont font = option.font;
++        font.setBold(true);
++        font.setPointSize(font.pointSize()+1);
++        painter->setFont(font);
++        painter->setPen(QPen(option.palette.dark(),0));
++        QString text = index.data(Qt::DisplayRole).value<QString>();
++        int dy = index.row() > 0 ? HEADER_HEIGHT / 4.0 : 0;
++        painter->drawText(option.rect.adjusted(0, dy, 0, 0),
++                          Qt::AlignVCenter|Qt::AlignLeft, text);
++        painter->restore();
++    }
++
++    void updateScrollBarRange()
++    {
++        int pageSize = q->height();
++        q->verticalScrollBar()->setRange(0,contentsHeight-pageSize);
++        q->verticalScrollBar()->setPageStep(pageSize);
++        q->verticalScrollBar()->setSingleStep(ITEM_HEIGHT);
++    }
++
++    int contentWidth() const
++    {
++        return q->width();
++    }
++    QSize calculateItemSize(const QModelIndex& index) const 
++    {
++        if (itemStateProvider && !itemStateProvider->isVisible(index)) {
++            return QSize();
++        } else {
++            return QSize(contentWidth()/MAX_COLUMNS,ITEM_HEIGHT);
++        }
++    }
++    QSize calculateHeaderSize(const QModelIndex& index) const
++    {
++        if (itemStateProvider && !itemStateProvider->isVisible(index)) {
++            return QSize();
++        } else if (index.row() == 0) {
++            return QSize(q->width()-HEADER_LEFT_MARGIN, FIRST_HEADER_HEIGHT);
++        } else {
++            return QSize(q->width()-HEADER_LEFT_MARGIN, HEADER_HEIGHT);
++        }
++    }
++
++    QPoint mapFromViewport(const QPoint& point) const
++    {
++        return point + QPoint(0,q->verticalOffset());
++    }
++    QPoint mapToViewport(const QPoint& point) const
++    {
++        return point - QPoint(0,q->verticalOffset());
++    }
++
++    UrlItemView * const q;
++    QPersistentModelIndex currentRootIndex;
++    QPersistentModelIndex hoveredIndex;
++
++    QHash<QModelIndex,int> itemChildOffsets;
++    QHash<QModelIndex,QRect> itemRects;
++    QList<QModelIndex> visualOrder;
++
++    int contentsHeight;
++    ItemStateProvider *itemStateProvider;
++
++    // margin is equivalent to FlipScrollView::Private::BACK_ARROW_WIDTH + 
++    // FlipScrollView::Private::BACK_ARROW_SPACING
++    static const int ITEM_LEFT_MARGIN = 25; 
++    static const int HEADER_LEFT_MARGIN = 5; 
++    static const int ITEM_HEIGHT = 32;
++    static const int HEADER_HEIGHT = 35;
++    static const int FIRST_HEADER_HEIGHT = 20;
++    static const int MAX_COLUMNS = 1;
++    static const int TOP_OFFSET = 5;
++    
++    // TODO Eventually it will be possible to restrict each branch to only showing
++    // a given number of children, with Next/Previous arrows to view more children
++    //
++    // eg.  
++    //
++    // Recent Documents  [1-10 of 100]            Next
++    // Recent Applications [10-20 of 30] Previous|Next
++    //
++    static const int MAX_CHILD_ROWS = 1000;
++};
++
++UrlItemView::UrlItemView(QWidget *parent)
++    : QAbstractItemView(parent)
++    , d(new Private(this))
++{
++    setIconSize(QSize(Private::ITEM_HEIGHT,Private::ITEM_HEIGHT));
++    setMouseTracking(true);
++}
++
++UrlItemView::~UrlItemView()
++{
++    delete d;
++}
++
++QModelIndex UrlItemView::indexAt(const QPoint& point) const
++{
++    // simple linear search through the item rects, this will
++    // be inefficient when the viewport is large
++    QHashIterator<QModelIndex,QRect> iter(d->itemRects);
++    while (iter.hasNext()) {
++        iter.next();
++        if (iter.value().contains(d->mapFromViewport(point))) {
++            return iter.key();
++        }
++    }
++    return QModelIndex();
++}
++void UrlItemView::setModel(QAbstractItemModel *model)
++{
++    QAbstractItemView::setModel(model);
++
++    if (model) {
++        connect(model,SIGNAL(rowsRemoved(QModelIndex,int,int)),this,SLOT(updateLayout()));
++        connect(model,SIGNAL(rowsInserted(QModelIndex,int,int)),this,SLOT(updateLayout()));
++        connect(model,SIGNAL(modelReset()),this,SLOT(updateLayout()));
++    }
++
++    d->currentRootIndex = QModelIndex();
++    d->itemChildOffsets.clear();
++    updateLayout();
++}
++void UrlItemView::updateLayout()
++{
++    d->doLayout();
++   
++    if (!d->visualOrder.contains(currentIndex())) {
++        // select the first valid index
++        setCurrentIndex(moveCursor(MoveDown,0)); 
++    }
++    
++
++    if (viewport()->isVisible()) {
++        viewport()->update();
++    }
++}
++void UrlItemView::scrollTo(const QModelIndex& index, ScrollHint hint)
++{
++    QRect itemRect = d->itemRects[index];
++    QRect viewedRect = QRect(d->mapFromViewport(QPoint(0,0)),
++                             size());
++    int topDifference = viewedRect.top()-itemRect.top();
++    int bottomDifference = viewedRect.bottom()-itemRect.bottom();
++    QScrollBar *scrollBar = verticalScrollBar();
++
++    if (!itemRect.isValid())
++        return;
++
++    switch (hint) {
++        case EnsureVisible:
++            {
++               if (!viewedRect.contains(itemRect)) {
++
++                   if (topDifference < 0) {
++                        // scroll view down
++                        scrollBar->setValue(scrollBar->value() - bottomDifference); 
++                   } else {
++                        // scroll view up
++                        scrollBar->setValue(scrollBar->value() - topDifference);
++                   }
++               } 
++            }
++            break;
++        case PositionAtTop:
++            {
++                //d->viewportOffset = itemRect.top();
++            }
++        default:
++            Q_ASSERT(false); // Not implemented
++    }
++}
++
++QRect UrlItemView::visualRect(const QModelIndex& index) const
++{
++    QRect itemRect = d->itemRects[index];
++    if (!itemRect.isValid())
++        return itemRect;
++
++    itemRect.moveTopLeft(d->mapToViewport(itemRect.topLeft()));
++    return itemRect;
++}
++
++int UrlItemView::horizontalOffset() const
++{
++    return 0;
++}
++
++bool UrlItemView::isIndexHidden(const QModelIndex&) const
++{
++    return false;
++}
++
++QModelIndex UrlItemView::moveCursor(CursorAction cursorAction,Qt::KeyboardModifiers )
++{
++    QModelIndex index = currentIndex();
++
++    int visualIndex = d->visualOrder.indexOf(index);
++
++    switch (cursorAction) {
++        case MoveUp:
++                visualIndex = qMax(0,visualIndex-1); 
++            break;
++        case MoveDown:
++                visualIndex = qMin(d->visualOrder.count()-1,visualIndex+1);
++            break;
++        case MoveLeft:
++        case MoveRight:
++                // do nothing
++            break;
++        default:
++
++            break;
++    }
++
++    // when changing the current item with the keyboard, clear the mouse-over item
++    d->hoveredIndex = QModelIndex();
++
++    return d->visualOrder.value(visualIndex,QModelIndex());
++}
++
++void UrlItemView::setSelection(const QRect& rect,QItemSelectionModel::SelectionFlags flags)
++{
++    QItemSelection selection;
++    selection.select(indexAt(rect.topLeft()),indexAt(rect.bottomRight()));
++    selectionModel()->select(selection,flags);
++}
++
++int UrlItemView::verticalOffset() const
++{
++    return verticalScrollBar()->value(); 
++}
++
++QRegion UrlItemView::visualRegionForSelection(const QItemSelection& selection) const{
++    QRegion region;
++    foreach(const QModelIndex& index,selection.indexes()) {
++        region |= visualRect(index);
++    }
++    return region;
++}
++void UrlItemView::paintEvent(QPaintEvent *event)
++{
++    if (!model())
++        return;
++
++    QPainter painter(viewport());
++
++    QHashIterator<QModelIndex,QRect> indexIter(d->itemRects);
++    while (indexIter.hasNext()) {
++        indexIter.next();
++        const QRect itemRect = visualRect(indexIter.key());
++        const QModelIndex index = indexIter.key();
++
++        if (event->region().contains(itemRect)) {
++
++            QStyleOptionViewItem option = viewOptions();
++            option.rect = itemRect;
++
++            if (selectionModel()->isSelected(index)) {
++                option.state |= QStyle::State_Selected;
++            }
++            if (index == d->hoveredIndex) {
++                option.state |= QStyle::State_MouseOver;
++            }
++            if (index == currentIndex()) {
++                option.state |= QStyle::State_HasFocus;
++            }
++
++            if (model()->hasChildren(index)) {
++                d->drawHeader(&painter,index,option);
++            } else {
++                if (option.rect.left() == 0) {
++                        option.rect.setLeft(option.rect.left() + Private::ITEM_LEFT_MARGIN);
++                        option.rect.setRight(option.rect.right() - Private::ITEM_LEFT_MARGIN);
++                }
++                itemDelegate(index)->paint(&painter,option,index);
++            }
++        }
++    }
++}
++void UrlItemView::resizeEvent(QResizeEvent *)
++{
++    updateLayout();
++}
++void UrlItemView::mouseMoveEvent(QMouseEvent *event)
++{
++    const QModelIndex itemUnderMouse = indexAt(event->pos());
++    if (itemUnderMouse != d->hoveredIndex && itemUnderMouse.isValid() &&
++        state() == NoState) {
++        update(itemUnderMouse);
++        update(d->hoveredIndex);
++
++        d->hoveredIndex = itemUnderMouse;
++        setCurrentIndex(d->hoveredIndex);
++    }
++    QAbstractItemView::mouseMoveEvent(event);
++}
++void UrlItemView::setItemStateProvider(ItemStateProvider *provider)
++{
++    d->itemStateProvider = provider;
++}
++void UrlItemView::startDrag(Qt::DropActions supportedActions) 
++{
++    qDebug() << "Starting UrlItemView drag with actions" << supportedActions;
++    QAbstractItemView::startDrag(supportedActions);
++}
++void UrlItemView::dropEvent(QDropEvent *event)
++{
++    qDebug() << "UrlItemView drop event";
++}
++ItemStateProvider *UrlItemView::itemStateProvider() const
++{
++    return d->itemStateProvider;
++}
++#include "urlitemview.moc"
+--- a/plasma/applets/CMakeLists.txt
++++ b/plasma/applets/CMakeLists.txt
+@@ -1,7 +1,9 @@
++add_subdirectory(battery)
+ add_subdirectory(clock)
+ add_subdirectory(digital-clock)
+-add_subdirectory(tasks)
+-add_subdirectory(systemtray)
+-add_subdirectory(battery)
++add_subdirectory(kickoff)
++add_subdirectory(launcher)
+ add_subdirectory(pager)
+-add_subdirectory(frame)
++add_subdirectory(systemtray)
++add_subdirectory(devicenotifier)
++add_subdirectory(tasks)
+--- a/plasma/applets/pager/pager.cpp
++++ b/plasma/applets/pager/pager.cpp
+@@ -75,16 +75,6 @@
+     return m_size;
+ }
+ 
+-QSizeF Pager::minimumSize() const
+-{
+-    return m_size;
+-}
+-
+-QSizeF Pager::maximumSize() const
+-{
+-    return m_size;
+-}
+-
+ void Pager::constraintsUpdated(Plasma::Constraints)
+ {
+     if (formFactor() == Plasma::Vertical ||
+@@ -94,11 +84,15 @@
+         setDrawStandardBackground(true);
+     }
+ 
+-     prepareGeometryChange();
+      recalculateGeometry();
+      recalculateWindowRects();
+ }
+ 
++Qt::Orientations Pager::expandingDirections() const
++{
++    return 0;
++}
++
+ void Pager::showConfigurationInterface()
+ {
+      if (m_dialog == 0) {
+@@ -122,6 +116,7 @@
+ 
+ void Pager::recalculateGeometry()
+ {
++    prepareGeometryChange();
+     m_scaleFactor = qreal(m_itemHeight) / QApplication::desktop()->height();
+     qreal itemWidth = QApplication::desktop()->width() * m_scaleFactor;
+     m_rects.clear();
+@@ -135,7 +130,8 @@
+     }
+     m_size = QSizeF(columns*itemWidth + 2*columns - 1,
+ 		     m_itemHeight*m_rows + 2*m_rows - 1);
+-    resize(sizeHint());
++
++    updateGeometry();
+ }
+ 
+ void Pager::recalculateWindowRects()
+--- a/plasma/applets/pager/pagerConfig.ui
++++ b/plasma/applets/pager/pagerConfig.ui
+@@ -28,23 +28,17 @@
+      <item row="0" column="0" >
+       <widget class="QLabel" name="labelSize" >
+        <property name="text" >
+-        <string>Height</string>
++        <string>Height:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QSpinBox" name="spinHeight" >
+        <property name="toolTip" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Serif';">Change the height of the desktop items&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Change the height of the desktop items</string>
+        </property>
+        <property name="whatsThis" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the height of the desktop items&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Change the height of the desktop items</string>
+        </property>
+        <property name="minimum" >
+         <number>20</number>
+@@ -70,23 +64,17 @@
+      <item row="1" column="0" >
+       <widget class="QLabel" name="labelRows" >
+        <property name="text" >
+-        <string>Number of rows</string>
++        <string>Number of rows:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QSpinBox" name="spinRows" >
+        <property name="toolTip" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Serif';">Change the number of rows&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Change the number of rows</string>
+        </property>
+        <property name="whatsThis" >
+-        <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+-p, li { white-space: pre-wrap; }
+-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Change the number of rows&lt;/p>&lt;/body>&lt;/html></string>
++        <string>Change the number of rows</string>
+        </property>
+        <property name="minimum" >
+         <number>1</number>
+--- a/plasma/applets/pager/plasma-pager-default.desktop
++++ b/plasma/applets/pager/plasma-pager-default.desktop
+@@ -1,8 +1,14 @@
+ [Desktop Entry]
+ Name=Pager
++Name[et]=Peiler
+ Name[ga]=Brabhsálaí Leathanach
++Name[ja]=ページャ
++Name[ko]=호출기
++Name[nb]=Sidebytter
+ Name[pt]=Paginador
+ Name[sv]=Skrivbordsvisning
++Name[x-test]=xxPagerxx
++Name[zh_CN]=分页器
+ Name[zh_TW]=呼叫器
+ Type=Service
+ ServiceTypes=Plasma/Applet
+--- a/plasma/applets/pager/pager.h
++++ b/plasma/applets/pager/pager.h
+@@ -41,9 +41,8 @@
+         void paintInterface(QPainter *painter, const QStyleOptionGraphicsItem *option,
+                             const QRect &contents);
+         QSizeF contentSizeHint() const;
+-	QSizeF minimumSize() const;
+-	QSizeF maximumSize() const;
+         void constraintsUpdated(Plasma::Constraints);
++	Qt::Orientations expandingDirections() const;
+ 
+     public slots:
+         void showConfigurationInterface();
+--- a/plasma/engines/Mainpage.dox
++++ /dev/null
+@@ -1,10 +0,0 @@
+-/**
+-* @mainpage Engines
+-*
+-* Plasma engines power widgets.
+-*
+-*/
+-
+-// DOXYGEN_SET_PROJECT_NAME = Engines
+-// DOXYGEN_SET_RECURSIVE = YES
+-// vim:ts=4:sw=4:expandtab:filetype=doxygen
+--- a/plasma/engines/CMakeLists.txt
++++ /dev/null
+@@ -1,7 +0,0 @@
+-add_subdirectory(time)
+-add_subdirectory(weather)
+-add_subdirectory(dict)
+-add_subdirectory(filebrowser)
+-add_subdirectory(powermanagement)
+-add_subdirectory(mouse)
+-add_subdirectory(tasks)
+--- a/plasma/desktoptheme/desktoptheme-default.desktop
++++ b/plasma/desktoptheme/desktoptheme-default.desktop
+@@ -3,7 +3,7 @@
+ Name=Oxygen
+ Name[csb]=Krziseń
+ Name[kk]=Оттегі
+-Name[km]=អុកស៊ីសែន
++Name[km]=អុកស៊ីហ្សែន
+ Name[ne]=अक्सिजन
+ Name[nn]=Oksygen
+ Name[pa]=ਆਕਸੀਜਨ
+@@ -15,6 +15,7 @@
+ Comment[de]=Oberflächen-Design im Oxygen-Stil
+ Comment[el]=Το θέμα δημιουργήθηκε στο στυλ Oxygen
+ Comment[es]=Tema realizado con el estilo Oxygen
++Comment[et]=Oxygeni stiilis teema
+ Comment[fa]=چهره در سبک اکسیژن انجام شد
+ Comment[ga]=Téama sa stíl Oxygen
+ Comment[he]=ערכת נושא שמשתמשת בסגנון Oxygen
+--- a/plasma/desktoptheme/widgets/wallpaper.svg
++++ /dev/null
+@@ -1,28042 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!-- Created with Inkscape (http://www.inkscape.org/) -->
+-<svg
+-   xmlns:dc="http://purl.org/dc/elements/1.1/"
+-   xmlns:cc="http://web.resource.org/cc/"
+-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+-   xmlns:svg="http://www.w3.org/2000/svg"
+-   xmlns="http://www.w3.org/2000/svg"
+-   xmlns:xlink="http://www.w3.org/1999/xlink"
+-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+-   id="svg2"
+-   sodipodi:version="0.32"
+-   inkscape:version="0.45"
+-   width="1280"
+-   height="1024"
+-   version="1.0"
+-   sodipodi:docname="wallpaper.svg"
+-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+-   sodipodi:docbase="/home/me/kde4/src/kdebase/workspace/plasma/desktoptheme/widgets"
+-   sodipodi:modified="true">
+-  <sodipodi:namedview
+-     inkscape:window-height="624"
+-     inkscape:window-width="640"
+-     inkscape:pageshadow="2"
+-     inkscape:pageopacity="0.0"
+-     guidetolerance="10.0"
+-     gridtolerance="10.0"
+-     objecttolerance="10.0"
+-     borderopacity="1.0"
+-     bordercolor="#666666"
+-     pagecolor="#ffffff"
+-     id="base"
+-     inkscape:zoom="0.54963335"
+-     inkscape:cx="608.88738"
+-     inkscape:cy="229.41142"
+-     inkscape:window-x="3"
+-     inkscape:window-y="543"
+-     inkscape:current-layer="svg2" />
+-  <metadata
+-     id="metadata7">
+-    <rdf:RDF>
+-      <cc:Work
+-         rdf:about="">
+-        <dc:format>image/svg+xml</dc:format>
+-        <dc:type
+-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+-      </cc:Work>
+-    </rdf:RDF>
+-  </metadata>
+-  <defs
+-     id="defs5" />
+-  <image
+-     y="0.11280373"
+-     x="-47.30426"
+-     height="1023.8873"
+-     xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAUAAA/+4ADkFkb2JlAGTAAAAAAf/b
+-AIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwM
+-DAwMDAwMDAwMDAEDAwMFBAUJBgYJDQsJCw0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwM
+-DAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgIiAwEAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAA
+-AAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIG
+-AnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6Oz
+-NhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dn
+-d4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQID
+-BQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LC
+-B3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaW
+-prbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq
+-+v/aAAwDAQACEQMRAD8A4Kw4gnsc9lju4RrlbbcqB/uOSERyZbDktahPQ798d62URFu2UdKgdRkj
+-uk+TZcFPh+g0yHXdjLm3UkAL9rvkr6sObcXHcsD4DCYjvbYnZeeS0bjWtd/HIgG0TullarQtgEN7
+-Y+5sVHEhq9jjMWaWRI3DmIZSpG9dvfCIjmyO7qbGtFpQinfInaSgVTe5NevamTAEQoJJXKKE/EBQ
+-En55Ayid6SYqf23A6V75ZvV9GEQGiCCSPGlcTImNLwjZurdW+VD4ZDcmuikkNlugG474QAE0Rzbq
+-SKDqOjDBI0kkU1yoGFaBuv0ZEj5seLdpVVu5Ap+OTM9vNIAJtb1IHbpXDRDIARVKbfPqMhdbMOEN
+-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
+-"
+-     width="1442.0684"
+-     id="image2362" />
+-</svg>
+--- a/plasma/desktoptheme/widgets/background.svg
++++ b/plasma/desktoptheme/widgets/background.svg
+@@ -30,8 +30,8 @@
+     </rdf:RDF>
+   </metadata>
+   <sodipodi:namedview
+-     inkscape:window-height="572"
+-     inkscape:window-width="748"
++     inkscape:window-height="582"
++     inkscape:window-width="806"
+      inkscape:pageshadow="2"
+      inkscape:pageopacity="0.0"
+      guidetolerance="10.0"
+@@ -50,7 +50,7 @@
+   <defs
+      id="defs5" />
+   <rect
+-     style="opacity:0.875;fill:#000000;stroke:none"
++     style="opacity:0.875;fill:#000000;stroke:#000000;stroke-opacity:1;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+      id="center"
+      width="42"
+      height="50"
+--- a/plasma/desktoptheme/CMakeLists.txt
++++ b/plasma/desktoptheme/CMakeLists.txt
+@@ -11,7 +11,6 @@
+     widgets/connection-established.svg
+     widgets/plot-background.svg
+     widgets/iconbutton.svg
+-    widgets/wallpaper.svg
+     widgets/panel-background.svg
+     widgets/analog_meter.svg
+     widgets/bar_meter_horizontal.svg
+--- /dev/null
++++ b/plasma/runners/search/plasma-runner-search.desktop
+@@ -0,0 +1,64 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Search Runner
++Name[be]=Запуск пошуку
++Name[bg]=Търсене
++Name[de]=Suche durchführen
++Name[el]=Εκτελεστής αναζήτησης
++Name[et]=Otsingu jäivitaja
++Name[fa]=اجراکتتدۀ جستجو
++Name[he]=חיפוש
++Name[ja]=検索 Runner
++Name[kk]=Іздеуді жегуші
++Name[km]=ស្វែងរក​​កម្មវិធី​រត់
++Name[ko]=검색 실행기
++Name[nb]=Søk i Runner
++Name[nds]=Söökdreger
++Name[ne]=रनर खोजी गर्नुहोस्
++Name[nl]=Zoekmachine
++Name[nn]=Søk i Runner
++Name[pa]=ਖੋਜ ਰਨਰ
++Name[pt]=Execução da Pesquisa
++Name[pt_BR]=Executor de Busca
++Name[sv]=Söktjänst
++Name[th]=ตัวเรียกการค้นหาทำงาน
++Name[vi]=Chạy Tìm kiếm
++Name[x-test]=xxSearch Runnerxx
++Name[zh_CN]=搜索运行器
++Name[zh_TW]=搜索執行者
++Comment=Search files
++Comment[ar]=ملفات البحث
++Comment[be]=Пошук файлаў
++Comment[bg]=Търсене на файлове
++Comment[csb]=Szëkba lopków
++Comment[de]=Dateien suchen
++Comment[el]=Αναζήτηση αρχείων
++Comment[et]=Failide otsimine
++Comment[fa]=پرونده‌های جستجو
++Comment[ga]=Cuardaigh comhaid
++Comment[he]=חיפוש קבצים
++Comment[ja]=ファイルを検索
++Comment[kk]=Файлдарды табу
++Comment[km]=ស្វែងរក​ឯកសារ​
++Comment[ko]=파일 찾기
++Comment[nb]=Søk i filer
++Comment[nds]=Dateien söken
++Comment[ne]=फाइल खोजी गर्नुहोस्
++Comment[nl]=Bestanden zoeken
++Comment[nn]=Søk i filer
++Comment[pa]=ਫਾਇਲਾਂ ਖੋਜ
++Comment[pt]=Procurar ficheiros
++Comment[pt_BR]=Procurar arquivos
++Comment[sl]=Išči datoteke
++Comment[sv]=Sök filer
++Comment[th]=ค้นหาแฟ้ม
++Comment[vi]=Tìm kiếm trong tập tin
++Comment[wa]=Cweri des fitchîs
++Comment[x-test]=xxSearch filesxx
++Comment[zh_CN]=搜索文件
++Comment[zh_TW]=搜索檔案
++ServiceTypes=Plasma/Runner
++Type=Service
++X-KDE-Library=krunner_searchrunner
++X-Krunner-ID=Search Runner
++X-Plasma-RunnerPhase=last
+--- /dev/null
++++ b/plasma/runners/search/searchrunner.cpp
+@@ -0,0 +1,113 @@
++/*
++ *   Copyright (C) 2006 Aaron Seigo <aseigo at kde.org>
++ *                 2007 Jos van den Oever <jos at vandenoever.info>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "searchrunner.h"
++
++#include <QAction>
++#include <KActionCollection>
++#include <KIcon>
++#include <KLocale>
++#include <KRun>
++
++SearchAction::SearchAction(const QString& f, const QString& iconname,
++        const QString& mt, const QString& name, QObject* parent)
++    : QAction(KIcon(iconname), name, parent), file(f), mimetype(mt)
++{
++}
++
++SearchRunner::SearchRunner( QObject* parent, const QVariantList &args )
++    : Plasma::AbstractRunner( parent )
++{
++    Q_UNUSED( args );
++    setObjectName( i18n( "Search" ) );
++}
++
++SearchRunner::~SearchRunner()
++{
++}
++
++QAction* SearchRunner::accepts( const QString& term )
++{
++    // return an action that opens a search GUI with this term
++    QAction* action = new QAction(i18n("search for %1", term), this);
++    connect(action, SIGNAL(triggered()), this, SLOT(launchSearch()));
++    return action;
++}
++
++bool SearchRunner::exec(QAction* action, const QString& command)
++{
++    Q_UNUSED(action)
++    Q_UNUSED(command)
++    return true;
++}
++
++QString formatUri(const QString& uri, const QString& term) {
++    Q_UNUSED( term );
++    QString highlighted;
++    QString path;
++    int l = uri.lastIndexOf("/");
++    if (l >= 0) {
++        highlighted = uri.mid(l+1);
++        path = uri.left(l);
++    } else {
++        highlighted = uri;
++    }
++    // it would be nice to be able to make the matching part of the string
++    // stand out
++    //highlighted.replace(term, "<b>"+term+"</b>");
++    highlighted = highlighted + " ("+path+')';
++    return highlighted;
++}
++
++void SearchRunner::fillMatches( KActionCollection* matches,
++                                const QString& term,
++                                int max, int offset )
++{
++
++    //TODO: in reality, we probably want to make this async and use matchesUpdated
++
++    QString query = "system.file_name:'" + term + "*'";
++    QList<StrigiHit> hits = strigiclient.getHits(query, max, offset);
++    foreach(const StrigiHit& hit, hits) {
++        QString iconname = hit.mimetype;
++        iconname.replace('/', '-');
++        QString formatted  = formatUri(hit.uri, term);
++        QAction* action = new SearchAction(hit.uri, iconname, hit.mimetype,
++            formatted, this);
++        connect(action, SIGNAL(triggered()), this, SLOT(openFile()));
++        matches->addAction(formatted, action);
++    }
++}
++void SearchRunner::launchSearch()
++{
++    // TODO this does not work yet and it be better to open a nicer search
++    // client e.g. kerry or strigi://
++    KRun::runCommand("strigiclient", NULL);
++}
++
++void SearchRunner::openFile()
++{
++    SearchAction* action = qobject_cast<SearchAction*>(sender());
++    qDebug() << "openFile " << action;
++    if (action) {
++        KRun::runUrl(action->file, action->mimetype, NULL);
++    }
++}
++
++#include "searchrunner.moc"
+--- /dev/null
++++ b/plasma/runners/search/searchrunner.h
+@@ -0,0 +1,71 @@
++/*
++ *   Copyright (C) 2006 Aaron Seigo <aseigo at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef SEARCHRUNNER_H
++#define SEARCHRUNNER_H
++
++#include <KGenericFactory>
++
++#include <plasma/abstractrunner.h>
++#include <strigi/qtdbus/strigiclient.h>
++#include <QtGui/QAction>
++
++/**
++ * This class runs the entered text through a search engine and returns the set
++ * of results returned as possible programs, files, actions, etc to launch.
++ */
++class SearchRunner : public Plasma::AbstractRunner
++{
++    Q_OBJECT
++
++    private:
++        StrigiClient strigiclient;
++        QString lastTerm;
++
++    public:
++        SearchRunner( QObject* parent, const QVariantList &args );
++        ~SearchRunner();
++
++        QAction* accepts( const QString& term );
++        bool exec(QAction* action, const QString& command);
++
++    protected:
++        virtual void fillMatches( KActionCollection* matches,
++                                  const QString& term,
++                                  int max, int offset );
++
++    protected slots:
++        // open the search gui
++        void launchSearch();
++        // open the file
++        void openFile();
++};
++
++class SearchAction : public QAction
++{
++    Q_OBJECT
++public:
++    const QString file;
++    const QString mimetype;
++    SearchAction(const QString& file, const QString& iconname,
++        const QString& mimetype, const QString& name, QObject* parent);
++};
++
++K_EXPORT_PLASMA_RUNNER(searchrunner, SearchRunner)
++
++#endif
+--- /dev/null
++++ b/plasma/runners/search/CMakeLists.txt
+@@ -0,0 +1,25 @@
++find_library(STRIGIQTDBUSCLIENT_LIBRARY NAMES strigiqtdbusclient
++  PATHS
++  /usr/lib
++  /usr/local/lib
++  ${LIB_INSTALL_DIR}
++  $ENV{STRIGI_HOME}/lib
++)
++
++macro_log_feature(STRIGIQTDBUSCLIENT_LIBRARY "strigi indexing" "Strigi built with indexing" "http://strigi.sourceforge.net/" FALSE "" "For the search functionality of the Run Command window")
++
++
++if (STRIGIQTDBUSCLIENT_LIBRARY)
++
++  set(krunner_searchrunner_SRCS searchrunner.cpp)
++  kde4_add_plugin(krunner_searchrunner ${krunner_searchrunner_SRCS})
++  include_directories(${STRIGI_INCLUDE_DIR})
++  target_link_libraries(krunner_searchrunner ${KDE4_KDECORE_LIBS} plasma ${STRIGIQTDBUSCLIENT_LIBRARY})
++
++  install(TARGETS krunner_searchrunner DESTINATION ${PLUGIN_INSTALL_DIR} )
++
++  ########### install files ###############
++
++  install(FILES plasma-runner-search.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++
++endif (STRIGIQTDBUSCLIENT_LIBRARY)
+--- /dev/null
++++ b/plasma/runners/calculator/plasma-runner-calculator.desktop
+@@ -0,0 +1,63 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Calculator Runner
++Name[ar]=منفذ الحاسبة
++Name[be]=Калькулятар
++Name[bg]=Калкулатор
++Name[csb]=Kalkùlator
++Name[de]=Rechner-Starter
++Name[el]=Εκτελεστής υπολογισμών
++Name[es]=Ejecución de la calculadora
++Name[et]=Kalkulaatori käivitaja
++Name[fa]=اجراکنندۀ ماشین حساب
++Name[he]=מחשבון
++Name[ja]=計算機 Runner
++Name[kk]=Калькуляторды жегуші
++Name[km]=កម្មវិធី​រត់​ម៉ាស៊ីន​​គិត​លេខ
++Name[ko]=계산기 실행기
++Name[nb]=Kalkulator-starter
++Name[nds]=Rekendreger
++Name[ne]=क्याल्कुलेटर रनर
++Name[nl]=Rekenmachine
++Name[nn]=Kalkulatorstartar
++Name[pa]=ਕੈਲਕੂਲੇਟਰ ਰਨਰ
++Name[pt]=Execução da Calculadora
++Name[pt_BR]=Executor de Calculadora
++Name[sv]=Kör miniräknare
++Name[th]=ตัวเรียกเครื่องคิดเลขทำงาน
++Name[vi]=Máy tính
++Name[x-test]=xxCalculator Runnerxx
++Name[zh_CN]=计算机运行器
++Name[zh_TW]=計算機執行者
++Comment=Calculate expressions
++Comment[ar]=تعابير الحاسبة
++Comment[bg]=Калкулатор
++Comment[cs]=Výpočet vzorců
++Comment[de]=Berechnungen durchführen
++Comment[el]=Υπολογισμός εκφράσεων
++Comment[es]=Calcular expresiones
++Comment[et]=Avaldiste arvutamine
++Comment[fa]=محاسبه عبارات
++Comment[he]=חישוב ביטויים
++Comment[it]=Calcola espressione
++Comment[ja]=数式を計算
++Comment[kk]=Өрнектерді есептеу
++Comment[km]=គណនា​កន្សោម​​
++Comment[ko]=수식 계산기
++Comment[nb]=Beregn uttrykk
++Comment[nds]=Utdrück utreken
++Comment[ne]=अभिव्यक्ति गणना गर्नुहोस्
++Comment[nl]=Expressies berekenen
++Comment[nn]=Rekn ut mattestykke
++Comment[pt]=Calcular expressões
++Comment[pt_BR]=Calcular expressões
++Comment[sv]=Beräkna uttryck
++Comment[th]=คำนวณนิพจน์
++Comment[vi]=Tính biểu thức
++Comment[x-test]=xxCalculate expressionsxx
++Comment[zh_CN]=计算表达式
++Comment[zh_TW]=計算機表示式
++ServiceTypes=Plasma/Runner
++Type=Service
++X-KDE-Library=krunner_calculatorrunner
++X-Krunner-ID=Calculator Runner
+--- /dev/null
++++ b/plasma/runners/calculator/calculatorrunner.cpp
+@@ -0,0 +1,80 @@
++/*
++ *   Copyright (C) 2007 Barış Metin <baris at pardus.org.tr>
++ *   Copyright (C) 2006 David Faure <faure at kde.org>
++ *   Copyright (C) 2007 Richard Moore <rich at kde.org>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include "calculatorrunner.h"
++
++#include <QAction>
++#include <QHBoxLayout>
++#include <QLabel>
++#include <QWidget>
++#include <QScriptEngine>
++
++#include <KIcon>
++
++CalculatorRunner::CalculatorRunner( QObject* parent, const QVariantList &args )
++    : Plasma::AbstractRunner( parent ),
++      m_options( 0 )
++{
++    Q_UNUSED(args)
++
++    setObjectName( i18n( "Calculator" ) );
++}
++
++CalculatorRunner::~CalculatorRunner()
++{
++    delete m_options;
++}
++
++QAction* CalculatorRunner::accepts( const QString& term )
++{
++    QString cmd = term.trimmed();
++    QAction *action = 0;
++
++    if ( !cmd.isEmpty() && 
++         ( cmd[0].isNumber() || ( cmd[0] == '(') ) &&
++         ( QRegExp("[a-zA-Z\\]\\[]").indexIn(cmd) == -1 ) ) {
++        QString result = calculate(cmd);
++
++        if ( !result.isEmpty() ) {
++            action = new QAction(KIcon("accessories-calculator"),
++                                 QString("%1 = %2").arg(term, result),
++                                 this);
++            action->setEnabled( false );
++        }
++    }
++
++    return action;
++}
++
++bool CalculatorRunner::exec(QAction* action, const QString& term)
++{
++    Q_UNUSED(action)
++    Q_UNUSED(term)
++    return true;
++}
++
++QString CalculatorRunner::calculate( const QString& term )
++{
++    QScriptEngine eng;
++    QScriptValue result = eng.evaluate( term );
++    return result.toString();
++}
++
++#include "calculatorrunner.moc"
+--- /dev/null
++++ b/plasma/runners/calculator/calculatorrunner.h
+@@ -0,0 +1,49 @@
++/*
++ *   Copyright (C) 2007 Barış Metin <baris at pardus.org.tr>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef CALCULATORRUNNER_H
++#define CALCULATORRUNNER_H
++
++#include <KGenericFactory>
++
++#include <plasma/abstractrunner.h>
++
++class QWidget;
++
++/**
++ * This class evaluates the basic expressions given in the interface.
++ */
++class CalculatorRunner : public Plasma::AbstractRunner
++{
++    Q_OBJECT
++
++    public:
++        CalculatorRunner( QObject* parent, const QVariantList &args );
++        ~CalculatorRunner();
++
++        QAction* accepts( const QString& term );
++        bool exec(QAction* action, const QString& term);
++
++    private:
++        QString calculate( const QString& term );
++        QWidget* m_options;
++};
++
++K_EXPORT_PLASMA_RUNNER(calculatorrunner, CalculatorRunner)
++
++#endif
+--- /dev/null
++++ b/plasma/runners/calculator/CMakeLists.txt
+@@ -0,0 +1,17 @@
++
++########### next target ###############
++
++set(krunner_calculatorrunner_SRCS
++    calculatorrunner.cpp
++)
++
++kde4_add_plugin(krunner_calculatorrunner ${krunner_calculatorrunner_SRCS})
++target_link_libraries(krunner_calculatorrunner ${KDE4_KDECORE_LIBS} ${QT_QTSCRIPT_LIBRARY} plasma)
++
++install(TARGETS krunner_calculatorrunner DESTINATION ${PLUGIN_INSTALL_DIR} )
++
++
++########### install files ###############
++
++install(FILES plasma-runner-calculator.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++
+--- /dev/null
++++ b/plasma/runners/webshortcuts/webshortcutrunner.cpp
+@@ -0,0 +1,140 @@
++/*
++ *   Copyright (C) 2007 Teemu Rytilahti <tpr at iki.fi>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#include <QAction>
++#include <QStringList>
++#include <QIcon>
++#include <QDBusInterface>
++#include <QDBusReply>
++
++#include <KRun>
++#include <KUrl>
++#include <KLocale>
++#include <KService>
++#include <KMimeType>
++#include <KIconLoader>
++#include <KStandardDirs>
++
++#include <kservicetypetrader.h>
++
++#include "webshortcutrunner.h"
++
++
++WebshortcutRunner::WebshortcutRunner(QObject *parent, const QVariantList& args)
++    : Plasma::AbstractRunner(parent)
++{
++    Q_UNUSED(args);
++    // set the name shown after the result in krunner window
++    setObjectName(i18n("Web shortcut"));
++    // query ktrader for all available searchproviders and preload the default icon
++    m_offers = KServiceTypeTrader::self()->query("SearchProvider");
++    m_icon = QIcon(KIconLoader::global()->loadIcon("konqueror", KIconLoader::Small));
++}
++
++WebshortcutRunner::~WebshortcutRunner()
++{
++}
++
++QAction *WebshortcutRunner::accepts(const QString& term) {
++    QString searchTerm = term.toLower();
++
++    KUrl url(term);
++    if (!url.protocol().isEmpty() && !url.host().isEmpty()) {
++        QAction *action = new QAction(QString("Open %1").arg(term), this);
++        action->setIcon(m_icon);
++        m_url = url;
++        return action;
++    }
++
++    foreach (KService::Ptr service, m_offers) {
++        // hmm, how about getting the keys for the localized sites?
++        foreach(QString key, service->property("Keys").toStringList()) {
++            // FIXME? should we look for the used separator from the konqi's settings?
++            key = key.toLower() + ":";
++            if (searchTerm.size() > key.size() &&
++                searchTerm.startsWith(key, Qt::CaseInsensitive)) {
++                m_url = getSearchQuery(service->property("Query").toString(),searchTerm);
++                QString actionText = QString("Search %1 for %2");
++                actionText = actionText.arg(service->name(),
++                                            searchTerm.right(searchTerm.length() - searchTerm.indexOf(':') - 1));
++
++                QAction *action = new QAction(actionText, this);
++
++                // let's try if we can get a proper icon from the favicon cache
++                QIcon icon = getFavicon(m_url);
++                if (icon.isNull()){
++                    action->setIcon(m_icon);
++                } else {
++                    action->setIcon(icon);
++                }
++
++                return action;
++            }
++        }
++    }
++
++    return 0;
++}
++
++KUrl WebshortcutRunner::getSearchQuery(const QString &query, const QString &term) {
++    // FIXME delimiter check like for above?
++    QStringList tempList = term.split(":");
++    if(tempList.count() > 0) {
++        QString searchWord(tempList[1]);
++        QString finalQuery(query);
++        // FIXME? currently only basic searches are supported
++        finalQuery.replace("\\{@}", searchWord);
++        KUrl url(finalQuery);
++        return url;
++    }
++
++    return KUrl();
++}
++
++QIcon WebshortcutRunner::getFavicon(const KUrl &url) {
++    // query the favicons module
++    QDBusInterface favicon("org.kde.kded", "/modules/favicons", "org.kde.FavIcon");
++    QDBusReply<QString> reply = favicon.call("iconForUrl", url.url());
++
++    if (!reply.isValid()) {
++        return QIcon();
++    }
++
++    // locate the favicon
++    QString iconFile = KGlobal::dirs()->findResource("cache",reply.value()+".png");
++    QIcon icon = QIcon(iconFile);
++
++    if (!icon.isNull()) {
++        return icon;
++    }
++
++    return QIcon();
++}
++
++bool WebshortcutRunner::exec(QAction* action, const QString& command) {
++    //TODO: this should probably use the action to store the url rather than
++    //      store it internally in m_url so as to support multiple actions
++    //      in the future
++    Q_UNUSED(action)
++    Q_UNUSED(command)
++//    kDebug() << "command: " << command;
++//    kDebug() << "url: " << m_url.url();
++    return(KRun::runUrl(m_url, "text/html", 0) != false);
++}
++
++#include "webshortcutrunner.moc"
+--- /dev/null
++++ b/plasma/runners/webshortcuts/plasma-runner-webshortcuts.desktop
+@@ -0,0 +1,31 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Webshortcut runner
++Name[et]=Veebi kiirkorralduste käivitaja
++Name[ja]=ウェブショートカットランナー
++Name[km]=កម្មវិធី​រត់​ផ្លូវកាត់​បណ្ដាញ
++Name[ko]=웹 바로 가기 실행기
++Name[nb]=Nettsnarvei-følger
++Name[nds]=Söökafkörtendreger
++Name[nl]=Webkoppelingen volgen
++Name[pt]=Execução de atalhos Web
++Name[pt_BR]=Execução de Atalhos da Web
++Name[sv]=Kör webbgenvägar
++Name[x-test]=xxWebshortcut runnerxx
++Name[zh_TW]=網頁捷徑執行者
++Comment=Webshortcut runner
++Comment[et]=Veebi kiirkorralduste käivitaja
++Comment[ja]=ウェブショートカットランナー
++Comment[km]=កម្មវិធី​រត់​ផ្លូវកាត់​បណ្ដាញ
++Comment[ko]=웹 바로 가기 실행기
++Comment[nds]=Söökafkörtendreger
++Comment[nl]=Webkoppelingen volgen
++Comment[pt]=Execução de atalhos Web
++Comment[pt_BR]=Execução de Atalhos da Web
++Comment[sv]=Kör webbgenvägar
++Comment[x-test]=xxWebshortcut runnerxx
++Comment[zh_TW]=網頁捷徑執行者
++ServiceTypes=Plasma/Runner
++Type=Service
++X-KDE-Library=krunner_webshortcuts
++X-Krunner-ID=Webshortcut runner
+--- /dev/null
++++ b/plasma/runners/webshortcuts/webshortcutrunner.h
+@@ -0,0 +1,51 @@
++/*
++ *   Copyright (C) 2007 Teemu Rytilahti <tpr at iki.fi>
++ *
++ *   This program is free software; you can redistribute it and/or modify
++ *   it under the terms of the GNU Library General Public License version 2 as
++ *   published by the Free Software Foundation
++ *
++ *   This program is distributed in the hope that it will be useful,
++ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *   GNU General Public License for more details
++ *
++ *   You should have received a copy of the GNU Library General Public
++ *   License along with this program; if not, write to the
++ *   Free Software Foundation, Inc.,
++ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
++ */
++
++#ifndef WEBSHORTCUTRUNNER_H
++#define WEBSHORTCUTRUNNER_H
++
++#include <plasma/abstractrunner.h>
++
++#include <KGenericFactory>
++
++class QAction;
++
++class WebshortcutRunner : public Plasma::AbstractRunner {
++    Q_OBJECT
++
++    public:
++        WebshortcutRunner( QObject *parent, const QVariantList& args );
++        ~WebshortcutRunner();
++
++    protected:
++        QAction* accepts( const QString& term );
++        bool exec(QAction* action, const QString& command);
++
++    private:
++        KUrl getSearchQuery(const QString &query, const QString &searchWord);
++        QIcon getFavicon(const KUrl& url);
++
++    private:
++        KService::List m_offers;
++        KUrl m_url;
++        QIcon m_icon;
++};
++
++K_EXPORT_PLASMA_RUNNER(webshortcuts, WebshortcutRunner)
++
++#endif
+--- /dev/null
++++ b/plasma/runners/webshortcuts/CMakeLists.txt
+@@ -0,0 +1,11 @@
++set(krunner_webshortcuts_SRCS
++    webshortcutrunner.cpp
++)
++
++kde4_add_plugin(krunner_webshortcuts ${krunner_webshortcuts_SRCS})
++target_link_libraries(krunner_webshortcuts ${KDE4_KIO_LIBS} plasma)
++
++install(TARGETS krunner_webshortcuts DESTINATION ${PLUGIN_INSTALL_DIR} )
++
++install(FILES plasma-runner-webshortcuts.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++
+--- /dev/null
++++ b/plasma/runners/CMakeLists.txt
+@@ -0,0 +1,3 @@
++add_subdirectory(calculator)
++add_subdirectory(search)
++add_subdirectory(webshortcuts)
+--- a/plasma/CMakeLists.txt
++++ b/plasma/CMakeLists.txt
+@@ -2,8 +2,9 @@
+ add_subdirectory(animators)
+ add_subdirectory(applets)
+ add_subdirectory(containments)
++add_subdirectory(dataengines)
+ add_subdirectory(desktoptheme)
+-add_subdirectory(engines)
+ add_subdirectory(engineexplorer)
+ add_subdirectory(plasma)
+-add_subdirectory(kickoff)
++add_subdirectory(runners)
++
+--- a/plasma/animators/default/plasma-animator-default.desktop
++++ b/plasma/animators/default/plasma-animator-default.desktop
+@@ -7,6 +7,7 @@
+ Name[de]=Plasma Animations-Treiber
+ Name[el]=Προκαθορισμένη κίνηση Plasma
+ Name[es]=Animador predeterminado de Plasma
++Name[et]=Vaikimisi Plasma animeerija
+ Name[fa]=پویانمای پیش‌فرض پلاسما
+ Name[he]=מנפיש ברירת המחדל של Plasma
+ Name[ja]=デフォルトの Plasma アニメータ
+--- a/plasma/animators/default/defaultAnimator.cpp
++++ b/plasma/animators/default/defaultAnimator.cpp
+@@ -34,9 +34,9 @@
+ {
+     switch (animation) {
+         case Plasma::Phase::Appear:
+-            return 12;
++            return 20;
+         case Plasma::Phase::Disappear:
+-            return 12;
++            return 20;
+ 
+         default:
+             return 0;
+@@ -47,9 +47,9 @@
+ {
+     switch (animation) {
+         case Plasma::Phase::ElementAppear:
+-            return 12;
++            return 20;
+         case Plasma::Phase::ElementDisappear:
+-            return 12;
++            return 20;
+ 
+         default:
+             return 0;
+--- a/plasma/plasma/controlbox.h
++++ /dev/null
+@@ -1,122 +0,0 @@
+-/*
+- *   Copyright 2007 by Matt Williams <matt at milliams.com>
+- *
+- *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU Library General Public License version 2 as
+- *   published by the Free Software Foundation
+- *
+- *   This program is distributed in the hope that it will be useful,
+- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- *   GNU General Public License for more details
+- *
+- *   You should have received a copy of the GNU Library General Public
+- *   License along with this program; if not, write to the
+- *   Free Software Foundation, Inc.,
+- *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+- */
+-
+-#ifndef CONTROL_BOX_H
+-#define CONTROL_BOX_H
+-
+-#include <QtGui/QWidget>
+-#include <QtGui/QStandardItemModel>
+-
+-#include <plasma/plasma.h>
+-
+-class QLabel;
+-class QPushButton;
+-class QTreeView;
+-class QModelIndex;
+-class QStandardItemModel;
+-class QTimeLine;
+-
+-class KComboBox;
+-
+-class DisplayLabel;
+-class ControlWidget;
+-class PlasmoidListItemModel;
+-
+-/**
+- * @short The Desktop configuration widget
+- * Just add one of these to the Corona and you've got an instant config box.
+- */
+-class ControlBox : public QWidget
+-{
+-    Q_OBJECT
+-
+-    public:
+-        ControlBox(QWidget* parent);
+-        ~ControlBox();
+-        bool eventFilter(QObject *watched, QEvent *event);
+-
+-    Q_SIGNALS:
+-        void zoomIn();
+-        void zoomOut();
+-        void addApplet(const QString&);
+-        void lockInterface(bool);
+-
+-    protected:
+-        //void mousePressEvent (QMouseEvent* event);
+-        void setupBox(); ///<Create contents of the config dialog
+-
+-    protected Q_SLOTS:
+-        void showBox(); ///<Show the config widget
+-        void hideBox(); ///<Hide the config widget
+-        void finishBoxHiding();
+-        void animateBox(int frame); ///<Process the frames to create an animation
+-
+-    private:
+-        ControlWidget* m_box; ///<The configuraion dialog widget
+-        DisplayLabel* m_displayLabel; ///<The 'show config' button
+-        QTimeLine* m_timeLine;
+-        QTimer* m_exitTimer;
+-
+-        bool m_boxIsShown;
+-};
+-
+-/**
+- * @short The widget that contains the actual settings
+- */
+-class ControlWidget : public QWidget
+-{
+-    Q_OBJECT
+-
+-    public:
+-        ControlWidget(QWidget* parent);
+-        ~ControlWidget();
+-        QPushButton* zoomInButton;
+-        QPushButton* zoomOutButton;
+-
+-    protected:
+-        void refreshPlasmoidList();
+-
+-        QLabel* m_label;
+-        QTreeView *m_appletList;
+-        PlasmoidListItemModel* m_appletListModel;
+-
+-    protected Q_SLOTS:
+-        void addApplet(const QModelIndex& plasmoidIndex);
+-
+-    Q_SIGNALS:
+-        void addApplet(const QString&);
+-        void lockInterface(bool);
+-};
+-
+-/**
+- * A custom Item Model so that the correct MIME type can be set and so the name
+- * of the plasmoid can be passed.
+- */
+-class PlasmoidListItemModel : public QStandardItemModel
+-{
+-    public:
+-        enum ItemDataRole {
+-            AppletNameRole = Qt::UserRole
+-        };
+-        PlasmoidListItemModel(QWidget* parent = 0);
+-
+-        QStringList mimeTypes() const;
+-        QMimeData* mimeData(const QModelIndexList &indexes) const;
+-};
+-
+-#endif // multiple inclusion guard
+--- a/plasma/plasma/controlbox.cpp
++++ /dev/null
+@@ -1,337 +0,0 @@
+-/*
+- *   Copyright 2007 by Matt Williams <matt at milliams.com>
+- *
+- *   This program is free software; you can redistribute it and/or modify
+- *   it under the terms of the GNU Library General Public License version 2 as
+- *   published by the Free Software Foundation
+- *
+- *   This program is distributed in the hope that it will be useful,
+- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- *   GNU General Public License for more details
+- *
+- *   You should have received a copy of the GNU Library General Public
+- *   License along with this program; if not, write to the
+- *   Free Software Foundation, Inc.,
+- *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+- */
+-
+-#include "controlbox.h"
+-
+-#include <QApplication>
+-#include <QCheckBox>
+-#include <QHeaderView>
+-#include <QLabel>
+-#include <QLineEdit>
+-#include <QMouseEvent>
+-#include <QPainter>
+-#include <QPushButton>
+-#include <QStandardItemModel>
+-#include <QStringList>
+-#include <QTimeLine>
+-#include <QTimer>
+-#include <QTreeView>
+-#include <QVBoxLayout>
+-
+-#include <KComboBox>
+-#include <KLocale>
+-#include <KDebug>
+-#include <KIcon>
+-#include <KLibrary>
+-//#include <KLibLoader>
+-
+-#include "plasma/applet.h"
+-#include "plasma/svg.h"
+-
+-//BEGIN - DisplayLabel
+-
+-class DisplayLabel : public QLabel
+-{
+-    public:
+-        DisplayLabel(const QString& text, QWidget *parent);
+-        //QSize minimumSizeHint();
+-
+-    protected:
+-        void paintEvent(QPaintEvent *event);
+-
+-    private:
+-        Plasma::Svg m_background;
+-};
+-
+-DisplayLabel::DisplayLabel(const QString& text, QWidget *parent)
+-    : QLabel(text, parent),
+-      m_background("widgets/toolbox-button")
+-{
+-    setAlignment(Qt::AlignCenter);
+-    resize(100, 100);
+-    m_background.resize(size());
+-}
+-
+-/*
+-QSize DisplayLabel::minimumSizeHint()
+-{
+-    QSize size = QLabel::minimumSizeHint();
+-    size.setHeight(size.height() * 2);
+-    size.setWidth(size.width() * 5 / 3);
+-    return size;
+-}
+-*/
+-
+-void DisplayLabel::paintEvent(QPaintEvent* event)
+-{
+-    Q_UNUSED(event)
+-
+-    QPainter p(this);
+-    m_background.paint(&p, rect());
+-    QLabel::paintEvent(event);
+-}
+-
+-//BEGIN- PlasmoidListItemModel
+-
+-PlasmoidListItemModel::PlasmoidListItemModel(QWidget* parent)
+-    : QStandardItemModel(parent)
+-{
+-}
+-
+-QStringList PlasmoidListItemModel::mimeTypes() const
+-{
+-    QStringList types;
+-    types << QLatin1String("text/x-plasmoidservicename");
+-    return types;
+-}
+-
+-QMimeData* PlasmoidListItemModel::mimeData(const QModelIndexList &indexes) const
+-{
+-    if (indexes.count() <= 0) {
+-        return 0;
+-    }
+-
+-    QModelIndex parent = indexes[0].parent();
+-    if (!parent.isValid()) {
+-        //tried to grab a category
+-        return 0;
+-    }
+-    QStandardItem* category = item(parent.row(), 0);
+-
+-    QStringList types = mimeTypes();
+-
+-    if (types.isEmpty()) {
+-        return 0;
+-    }
+-
+-    QMimeData *data = new QMimeData();
+-
+-    QString format = types.at(0);
+-
+-    QStandardItem* selectedItem = category->child(indexes[0].row(), 0);
+-    QByteArray appletName(selectedItem->data(AppletNameRole).toByteArray());
+-
+-    data->setData(format, appletName);
+-
+-    return data;
+-}
+-
+-//BEGIN - ControlWidget
+-
+-ControlWidget::ControlWidget(QWidget *parent)
+-    : QWidget(parent)
+-{
+-    QPushButton* hideBoxButton = new QPushButton(i18n("Hide Config Box"), this);
+-    zoomInButton = new QPushButton(i18n("Zoom In"), this);
+-    zoomOutButton = new QPushButton(i18n("Zoom Out"), this);
+-    connect(hideBoxButton, SIGNAL(pressed()), parent, SLOT(hideBox()));
+-
+-    m_appletList = new QTreeView(this);
+-    m_appletList->header()->hide();
+-    m_appletList->setDragEnabled(true);
+-    m_appletListModel = new PlasmoidListItemModel(this);
+-    m_appletList->setModel(m_appletListModel);
+-    m_appletList->setEditTriggers(QAbstractItemView::NoEditTriggers);
+-    connect(m_appletList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(addApplet(QModelIndex)));
+-
+-    m_label = new QLabel("Plasmoids:", this);
+-
+-    //TODO: this should be delayed until (if) the box is actually shown.
+-    refreshPlasmoidList();
+-
+-    QCheckBox* lockApplets = new QCheckBox(i18n("Lock Desktop"), this);
+-    connect(lockApplets, SIGNAL(toggled(bool)), this, SIGNAL(lockInterface(bool)));
+-
+-    //This is all to change of course
+-    QVBoxLayout* boxLayout = new QVBoxLayout(this);
+-    boxLayout->addWidget(hideBoxButton);
+-    boxLayout->addWidget(lockApplets);
+-    boxLayout->addWidget(zoomInButton);
+-    boxLayout->addWidget(zoomOutButton);
+-    boxLayout->addWidget(m_label);
+-    boxLayout->addWidget(m_appletList);
+-    //setLayout(boxLayout);
+-}
+-
+-ControlWidget::~ControlWidget() {}
+-
+-void ControlWidget::refreshPlasmoidList()
+-{
+-    m_appletListModel->clear();
+-    m_appletListModel->setColumnCount(1);
+-
+-    foreach (const QString &category, Plasma::Applet::knownCategories()) {
+-        KPluginInfo::List applets = Plasma::Applet::knownApplets(category);
+-
+-        if (applets.count() < 1) {
+-            continue;
+-        }
+-
+-        QStandardItem* parent = new QStandardItem(category);
+-        m_appletListModel->appendRow(parent);
+-        int rowCount = 0;
+-
+-        foreach (const KPluginInfo &info, applets) {
+-            QString category = Plasma::Applet::category(info);
+-//            QStandardItem *item = new PlasmoidItem(info);
+-            QStandardItem *item = new QStandardItem(info.name());
+-            item->setData(info.pluginName(), PlasmoidListItemModel::AppletNameRole);
+-            parent->setChild(rowCount, 0, item);
+-            ++rowCount;
+-        }
+-    }
+-
+-#ifndef NDEBUG
+-    //kDebug() << "Known categories: " << Plasma::Applet::knownCategories();
+-#endif
+-
+-    m_appletListModel->sort(0);
+-    m_appletList->expandAll();
+-}
+-
+-void ControlWidget::addApplet(const QModelIndex& plasmoidIndex)
+-{
+-    QStandardItem* item = m_appletListModel->itemFromIndex(plasmoidIndex);
+-    if (!item || !item->data(PlasmoidListItemModel::AppletNameRole).isValid()) {
+-        kDebug() << "ControlWidget::addApplet no item at " << plasmoidIndex;
+-        return;
+-    }
+-
+-    emit addApplet(item->data(PlasmoidListItemModel::AppletNameRole).toString());
+-}
+-
+-//BEGIN - ControlBox
+-
+-ControlBox::ControlBox(QWidget* parent)
+-    : QWidget(parent),
+-      m_box(0),
+-      m_boxIsShown(false)
+-{
+-    //The display box label/button
+-    m_displayLabel = new DisplayLabel(i18n("Desktop Toolbox"), this);
+-    m_displayLabel->show();
+-    m_displayLabel->installEventFilter(this);
+-    resize(m_displayLabel->size());
+-
+-    //The hide box timer
+-    m_exitTimer = new QTimer(this);
+-    m_exitTimer->setInterval(300);
+-    m_exitTimer->setSingleShot(true);
+-    connect(m_exitTimer, SIGNAL(timeout()), this, SLOT(hideBox()));
+-
+-    //Set up the animation timeline
+-    m_timeLine = new QTimeLine(300, this);
+-    m_timeLine->setFrameRange(0, 25); //25 step anumation
+-    m_timeLine->setCurveShape(QTimeLine::EaseInOutCurve);
+-    connect(m_timeLine, SIGNAL(frameChanged(int)), this, SLOT(animateBox(int)));
+-    connect(m_timeLine, SIGNAL(finished()), this, SLOT(finishBoxHiding()));
+-}
+-
+-ControlBox::~ControlBox()
+-{
+-}
+-
+-bool ControlBox::eventFilter(QObject *watched, QEvent *event)
+-{
+-    if (watched == m_displayLabel) {
+-        if (event->type() == QEvent::Enter) {
+-            showBox();
+-        }
+-    } else if (watched == m_box) {
+-        if (event->type() == QEvent::Leave) {
+-            QWidget* widget = qApp->activePopupWidget();
+-
+-            if (!widget) {
+-                m_exitTimer->start();
+-            }
+-        } else if (event->type() == QEvent::Enter) {
+-            m_exitTimer->stop(); //If not a leave event, stop the box from closing
+-        }
+-    }
+-
+-    return QWidget::eventFilter(watched, event);
+-}
+-
+-void ControlBox::showBox()
+-{
+-    if (m_boxIsShown) {
+-        return;
+-    }
+-
+-    // set up the actual widget here on first show
+-    if (!m_box) {
+-        m_box = new ControlWidget(this);
+-        m_box->installEventFilter(this);
+-        //m_box->hide();
+-        connect(m_box, SIGNAL(addApplet(const QString&)), this, SIGNAL(addApplet(const QString&)));
+-        connect(m_box, SIGNAL(lockInterface(bool)), this, SIGNAL(lockInterface(bool)));
+-        connect(m_box->zoomInButton, SIGNAL(clicked()), this, SIGNAL(zoomIn()));
+-        connect(m_box->zoomOutButton, SIGNAL(clicked()), this, SIGNAL(zoomOut()));
+-    }
+-
+-    m_boxIsShown = true;
+-    m_box->move(-m_box->size().width(),-m_box->size().height());
+-    resize(m_box->sizeHint()); //resize this widget so the full contents of m_box can be seen.
+-    m_box->show();
+-    m_timeLine->setDirection(QTimeLine::Forward);
+-    m_timeLine->start();
+-}
+-
+-void ControlBox::hideBox()
+-{
+-    if (!m_boxIsShown) {
+-        return;
+-    }
+-
+-    m_boxIsShown = false;
+-    m_timeLine->setDirection(QTimeLine::Backward);
+-    m_timeLine->start();
+-}
+-
+-void ControlBox::animateBox(int frame)
+-{
+-    //Display the config box
+-    qreal boxWidth = m_box->size().width();
+-    qreal boxHeight = m_box->size().height();
+-    qreal boxStep = ((qreal(frame)/25) - 1.0);
+-    m_box->move(static_cast<int>(boxWidth*boxStep),static_cast<int>(boxHeight*boxStep));
+-
+-    //And hide the label
+-    qreal labelWidth = m_displayLabel->size().width();
+-    qreal labelHeight = m_displayLabel->size().height();
+-    qreal labelStep = (-qreal(frame)/25);
+-    m_displayLabel->move(static_cast<int>(labelWidth*labelStep),static_cast<int>(labelHeight*labelStep));
+-}
+-
+-void ControlBox::finishBoxHiding()
+-{
+-    if (m_timeLine->direction() == QTimeLine::Backward) {
+-        resize(m_displayLabel->size()); //resize this widget so it's only the size of the label
+-        m_box->hide();
+-    }
+-}
+-
+-/*void ControlBox::mousePressEvent(QMouseEvent* event)
+-{
+-    QWidget::mousePressEvent(event);
+-    if (event->button() == Qt::LeftButton) {
+-        showBox();
+-    }
+-}*/
+-
+-#include "controlbox.moc"
+--- a/plasma/plasma/plasmaapp.cpp
++++ b/plasma/plasma/plasmaapp.cpp
+@@ -156,8 +156,9 @@
+                  << "| screen:" << containment->screen()
+                  << "| geometry:" << containment->geometry()
+                  << "| zValue:" << containment->zValue();
+-        if (containment->name() == "Panel") {
+-            Plasma::PanelView *panelView = new Plasma::PanelView(containment);
++        if (containment->type() == Plasma::Containment::PanelContainment) {
++            kDebug() << "we have a panel!";
++            PanelView *panelView = new PanelView(containment);
+             m_panels << panelView;
+             panelView->show();
+         }
+--- a/plasma/plasma/panelview.h
++++ b/plasma/plasma/panelview.h
+@@ -28,10 +28,10 @@
+ 
+ namespace Plasma
+ {
+-
+-class Containment;
+-class Corona;
+-class Svg;
++    class Containment;
++    class Corona;
++    class Svg;
++}
+ 
+ class PanelView : public QGraphicsView
+ {
+@@ -79,6 +79,5 @@
+     Plasma::Svg *m_background;
+ };
+ 
+-} // Namespace
+ #endif
+ 
+--- a/plasma/plasma/plasmaapp.h
++++ b/plasma/plasma/plasmaapp.h
+@@ -28,7 +28,6 @@
+ {
+     class Corona;
+     class Containment;
+-    class PanelView;
+ } // namespace Plasma
+ 
+ class RootWidget;
+@@ -59,7 +58,7 @@
+ 
+     RootWidget *m_root;
+     Plasma::Corona *m_corona;
+-    QList<Plasma::PanelView*> m_panels;
++    QList<PanelView*> m_panels;
+ };
+ 
+ #endif // multiple inclusion guard
+--- a/plasma/plasma/rootwidget.cpp
++++ b/plasma/plasma/rootwidget.cpp
+@@ -29,7 +29,6 @@
+ #include "plasma/plasma.h"
+ #include "plasma/svg.h"
+ 
+-#include "controlbox.h"
+ #include "desktopview.h"
+ #include "plasmaapp.h"
+ 
+@@ -46,14 +45,8 @@
+         m_desktop = new DesktopView(this, i);
+         m_desktop->setGeometry(desktop.screenGeometry(i));
+     }
+-    Plasma::Corona* corona = PlasmaApp::self()->corona();
+ 
+-    m_controlBox = new ControlBox(this);
+-
+-    connect(m_controlBox, SIGNAL(zoomIn()), m_desktop, SLOT(zoomIn()));
+-    connect(m_controlBox, SIGNAL(zoomOut()), m_desktop, SLOT(zoomOut()));
+-    connect(m_controlBox, SIGNAL(addApplet(const QString&)), corona, SLOT(addApplet(const QString&)));
+-    connect(m_controlBox, SIGNAL(lockInterface(bool)), corona, SLOT(setImmutable(bool)));
++    PlasmaApp::self()->corona();
+ }
+ 
+ void RootWidget::setAsDesktop(bool setAsDesktop)
+--- a/plasma/plasma/panelview.cpp
++++ b/plasma/plasma/panelview.cpp
+@@ -32,16 +32,11 @@
+ #include <plasma/plasma.h>
+ #include <plasma/svg.h>
+ 
+-namespace Plasma
+-{
+-
+-
+-
+ PanelView::PanelView(Plasma::Containment *panel, QWidget *parent)
+     : QGraphicsView(parent),
+       m_containment(panel)
+ {
+-    Q_ASSERT(qobject_cast<Corona*>(m_containment->scene()));
++    Q_ASSERT(qobject_cast<Plasma::Corona*>(m_containment->scene()));
+     setScene(m_containment->scene());
+     updatePanelGeometry();
+     kDebug() << "Panel geometry is" << m_containment->geometry();
+@@ -60,9 +55,7 @@
+     // KWin setup
+     KWindowSystem::setType(winId(), NET::Dock);
+     KWindowSystem::setState(winId(), NET::Sticky | NET::KeepAbove);
+-
+-    // Highly questionable behavior used in kicker..
+-    // KWindowSystem::setOnAllDesktops(winId(), true);	
++    KWindowSystem::setOnAllDesktops(winId(), true);
+ 
+     updateStruts();
+ }
+@@ -86,17 +79,19 @@
+ 
+ Plasma::Corona *PanelView::corona() const
+ {
+-    return qobject_cast<Corona*>(scene());
++    return qobject_cast<Plasma::Corona*>(scene());
+ }
+ 
+ void PanelView::updatePanelGeometry()
+ {
+     kDebug() << "New panel geometry is" << m_containment->geometry();
+-    QPoint pos = m_containment->scenePos().toPoint();
++    QPoint pos = m_containment->pos().toPoint();
+     QSize size = m_containment->size().toSize();
+     QRect geom(pos, size);
+-    kDebug() << "I think the panel is at " << geom;
+     setGeometry(geom);
++    pos = m_containment->scenePos().toPoint();
++    geom.moveTopLeft(pos);
++    kDebug() << "I think the panel is at " << geom;
+     setSceneRect(geom);
+ }
+ 
+@@ -159,5 +154,3 @@
+     updateStruts();
+ }
+ 
+-
+-} // Namespace
+--- a/plasma/plasma/CMakeLists.txt
++++ b/plasma/plasma/CMakeLists.txt
+@@ -1,7 +1,6 @@
+ include_directories(${KDEBASE_WORKSPACE_SOURCE_DIR}/libs)
+ 
+ set(plasma_SRCS
+-    controlbox.cpp
+     desktopview.cpp
+     main.cpp
+     plasmaapp.cpp
+--- a/plasma/plasma/rootwidget.h
++++ b/plasma/plasma/rootwidget.h
+@@ -23,7 +23,6 @@
+ #include <QWidget>
+ 
+ class DesktopView;
+-class ControlBox;
+ 
+ /**
+  * @short The base widget that contains the desktop
+@@ -60,7 +59,6 @@
+ 
+     private:
+         DesktopView* m_desktop;
+-        ControlBox* m_controlBox;
+ };
+ 
+ #endif

Modified: branches/kde4/packages/kdebase-workspace/debian/patches/series
===================================================================
--- branches/kde4/packages/kdebase-workspace/debian/patches/series	2007-10-25 13:52:27 UTC (rev 7648)
+++ branches/kde4/packages/kdebase-workspace/debian/patches/series	2007-10-25 14:00:39 UTC (rev 7649)
@@ -1,4 +1,4 @@
-01_kdebase-workspace_branch_r726786.diff
+01_kdebase-workspace_branch_r729279.diff
 06_kdehome_kde4.diff
 07_kdmrc_defaults.diff
 08_genkdmconf.diff




More information about the pkg-kde-commits mailing list