[kdelibs] Resolves #868530 - cache information about solid device in 'Places'

Lukas Tinkl ltinkl at fedoraproject.org
Mon Oct 29 17:26:29 UTC 2012


commit 032b78558d03c9f15e204698bcc04e925cf713ce
Author: Lukáš Tinkl <lukas at kde.org>
Date:   Mon Oct 29 18:26:23 2012 +0100

    Resolves #868530 - cache information about solid device in 'Places'
    
      panel in  open/save dialog
    - update solid/udisks2 backend, switch to cmake-define

 kdelibs-udisks2-backend.patch |  332 +++++++++++++++++++----------------------
 kdelibs.spec                  |   12 ++-
 2 files changed, 166 insertions(+), 178 deletions(-)
---
diff --git a/kdelibs-udisks2-backend.patch b/kdelibs-udisks2-backend.patch
index 09c3eb5..fb87c38 100644
--- a/kdelibs-udisks2-backend.patch
+++ b/kdelibs-udisks2-backend.patch
@@ -1,5 +1,5 @@
 diff --git a/solid/solid/CMakeLists.txt b/solid/solid/CMakeLists.txt
-index 0aa7a43..0a74053 100644
+index 0aa7a43..5cd1484 100644
 --- a/solid/solid/CMakeLists.txt
 +++ b/solid/solid/CMakeLists.txt
 @@ -1,6 +1,7 @@
@@ -10,55 +10,12 @@ index 0aa7a43..0a74053 100644
  
  if(WIN32)
     include_directories( ${KDEWIN_INCLUDES} )
-@@ -39,7 +40,6 @@ configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-proce
- 
- file(MAKE_DIRECTORY
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
--   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
- )
-@@ -225,33 +225,6 @@ if(NOT WIN32 AND NOT APPLE)
-    endif( UDEV_FOUND )
- 
- 
--   message(STATUS "Building Solid HAL backend." )
--   set(solid_LIB_SRCS ${solid_LIB_SRCS}
--   backends/hal/halacadapter.cpp
--   backends/hal/halaudiointerface.cpp
--   backends/hal/halbattery.cpp
--   backends/hal/halblock.cpp
--   backends/hal/halbutton.cpp
--   backends/hal/halcamera.cpp
--   backends/hal/halcdrom.cpp
--   backends/hal/haldeviceinterface.cpp
--   backends/hal/haldvbinterface.cpp
--   backends/hal/halfstabhandling.cpp
--   backends/hal/halgenericinterface.cpp
--   backends/hal/haldevice.cpp
--   backends/hal/halmanager.cpp
--   backends/hal/halnetworkinterface.cpp
--   backends/hal/halserialinterface.cpp
--   backends/hal/halopticaldisc.cpp
--   backends/hal/halportablemediaplayer.cpp
--   backends/hal/halprocessor.cpp
--   backends/hal/halstorageaccess.cpp
--   backends/hal/halstorage.cpp
--   backends/hal/halvideo.cpp
--   backends/hal/halvolume.cpp
--   backends/hal/halsmartcardreader.cpp
--   )
--
-    message(STATUS "Building Solid UPower backend." )
-    set(solid_LIB_SRCS ${solid_LIB_SRCS}
-    backends/upower/upowermanager.cpp
-@@ -264,18 +237,19 @@ if(NOT WIN32 AND NOT APPLE)
+@@ -264,19 +265,38 @@ if(NOT WIN32 AND NOT APPLE)
  
     # FIXME: this should work on more Unix systems
     if (CMAKE_SYSTEM_NAME MATCHES Linux)
 -      message(STATUS "Building Solid UDisks backend." )
-+      message(STATUS "Building Solid UDisks2 backend." )
-       set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-      set(solid_LIB_SRCS ${solid_LIB_SRCS}
 -      backends/udisks/udisksmanager.cpp
 -      backends/udisks/udisksdevice.cpp
 -      backends/udisks/udisksblock.cpp
@@ -69,20 +26,42 @@ index 0aa7a43..0a74053 100644
 -      backends/udisks/udisksstoragedrive.cpp
 -      backends/udisks/udisksstorageaccess.cpp
 -      backends/udisks/udisksgenericinterface.cpp
-+      backends/udisks2/udisksmanager.cpp
-+      backends/udisks2/udisksdevice.cpp
-+      backends/udisks2/udisksblock.cpp
-+      backends/udisks2/udisksstoragevolume.cpp
-+      backends/udisks2/udisksdeviceinterface.cpp
-+      backends/udisks2/udisksopticaldisc.cpp
-+      backends/udisks2/udisksopticaldrive.cpp
-+      backends/udisks2/udisksstoragedrive.cpp
-+      backends/udisks2/udisksstorageaccess.cpp
-+      backends/udisks2/udisksgenericinterface.cpp
-+      backends/udisks2/dbus/manager.cpp
-       )
+-      )
++
++       if ( WITH_SOLID_UDISKS2 )
++           message(STATUS "Building Solid UDisks2 backend." )
++           add_definitions(-DWITH_SOLID_UDISKS2)
++           set(solid_LIB_SRCS ${solid_LIB_SRCS}
++           backends/udisks2/udisksmanager.cpp
++           backends/udisks2/udisksdevice.cpp
++           backends/udisks2/udisksblock.cpp
++           backends/udisks2/udisksstoragevolume.cpp
++           backends/udisks2/udisksdeviceinterface.cpp
++           backends/udisks2/udisksopticaldisc.cpp
++           backends/udisks2/udisksopticaldrive.cpp
++           backends/udisks2/udisksstoragedrive.cpp
++           backends/udisks2/udisksstorageaccess.cpp
++           backends/udisks2/udisksgenericinterface.cpp
++           backends/udisks2/dbus/manager.cpp
++           )
++       else ( WITH_SOLID_UDISKS2 )
++           message(STATUS "Building Solid UDisks backend." )
++           set(solid_LIB_SRCS ${solid_LIB_SRCS}
++           backends/udisks/udisksmanager.cpp
++           backends/udisks/udisksdevice.cpp
++           backends/udisks/udisksblock.cpp
++           backends/udisks/udisksstoragevolume.cpp
++           backends/udisks/udisksdeviceinterface.cpp
++           backends/udisks/udisksopticaldisc.cpp
++           backends/udisks/udisksopticaldrive.cpp
++           backends/udisks/udisksstoragedrive.cpp
++           backends/udisks/udisksstorageaccess.cpp
++           backends/udisks/udisksgenericinterface.cpp
++          )
++       endif ( WITH_SOLID_UDISKS2 )
     endif (CMAKE_SYSTEM_NAME MATCHES Linux)
  
+    message(STATUS "Building Solid fstab backend." )
 diff --git a/solid/solid/backends/udisks2/dbus/manager.cpp b/solid/solid/backends/udisks2/dbus/manager.cpp
 new file mode 100644
 index 0000000..7ea4aa8
@@ -209,10 +188,10 @@ index 0000000..8f25cb6
 +</node>
 diff --git a/solid/solid/backends/udisks2/udisks2.h b/solid/solid/backends/udisks2/udisks2.h
 new file mode 100644
-index 0000000..25a1dc0
+index 0000000..8dda86a
 --- /dev/null
 +++ b/solid/solid/backends/udisks2/udisks2.h
-@@ -0,0 +1,77 @@
+@@ -0,0 +1,78 @@
 +/*
 +    Copyright 2012 Lukáš Tinkl <ltinkl at redhat.com>
 +
@@ -268,6 +247,7 @@ index 0000000..25a1dc0
 +#define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
 +#define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
 +#define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
++#define UD2_DBUS_INTERFACE_LOOP          "org.freedesktop.UDisks2.Loop"
 +
 +/* errors */
 +#define UD2_ERROR_UNAUTHORIZED            "org.freedesktop.PolicyKit.Error.NotAuthorized"
@@ -292,10 +272,10 @@ index 0000000..25a1dc0
 +#endif // SOLID_BACKENDS_UDISKS2_H
 diff --git a/solid/solid/backends/udisks2/udisksblock.cpp b/solid/solid/backends/udisks2/udisksblock.cpp
 new file mode 100644
-index 0000000..474f3d6
+index 0000000..f3cd1e8
 --- /dev/null
 +++ b/solid/solid/backends/udisks2/udisksblock.cpp
-@@ -0,0 +1,84 @@
+@@ -0,0 +1,88 @@
 +/*
 +    Copyright 2012 Lukáš Tinkl <ltinkl at redhat.com>
 +
@@ -321,9 +301,9 @@ index 0000000..474f3d6
 +#include <QFile>
 +#include <QtDBus/QDBusConnection>
 +#include <QtDBus/QDBusPendingReply>
++#include <QtXml/QDomDocument>
 +
 +#include "udisksblock.h"
-+#include "dbus/manager.h"
 +
 +using namespace Solid::Backends::UDisks2;
 +
@@ -335,28 +315,32 @@ index 0000000..474f3d6
 +
 +    // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
 +    if (m_devNum == 0 || m_devFile.isEmpty()) {
-+        org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
-+        QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
++        const QString path = "/org/freedesktop/UDisks2/block_devices";
++        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path,
++                                                           DBUS_INTERFACE_INTROSPECT, "Introspect");
++        QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
 +        reply.waitForFinished();
-+        if (!reply.isError()) {  // enum devices
-+            Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
-+                const QString udi = path.path();
-+
-+                if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
-+                    continue;
 +
-+                Device device(udi);
-+                if (device.drivePath() == dev->udi()) {
-+                    m_devNum = device.prop("DeviceNumber").toULongLong();
-+                    m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
-+                    break;
++        if (reply.isValid()) {
++            QDomDocument dom;
++            dom.setContent(reply.value());
++            QDomNodeList nodeList = dom.documentElement().elementsByTagName("node");
++            for (int i = 0; i < nodeList.count(); i++) {
++                QDomElement nodeElem = nodeList.item(i).toElement();
++                if (!nodeElem.isNull() && nodeElem.hasAttribute("name")) {
++                    const QString udi = path + "/" + nodeElem.attribute("name");
++
++                    Device device(udi);
++                    if (device.drivePath() == dev->udi()) {
++                        m_devNum = device.prop("DeviceNumber").toULongLong();
++                        m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
++                        break;
++                    }
 +                }
 +            }
 +        }
-+        else  // show error
-+        {
++        else
 +            qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
-+        }
 +    }
 +
 +    //qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
@@ -444,10 +428,10 @@ index 0000000..19cb70a
 +#endif // UDISKS2BLOCK_H
 diff --git a/solid/solid/backends/udisks2/udisksdevice.cpp b/solid/solid/backends/udisks2/udisksdevice.cpp
 new file mode 100644
-index 0000000..22b0c45
+index 0000000..a3f780f
 --- /dev/null
 +++ b/solid/solid/backends/udisks2/udisksdevice.cpp
-@@ -0,0 +1,910 @@
+@@ -0,0 +1,927 @@
 +/*
 +    Copyright 2010 Michael Zanetti <mzanetti at kde.org>
 +    Copyright 2010-2012 Lukáš Tinkl <ltinkl at redhat.com>
@@ -651,11 +635,15 @@ index 0000000..22b0c45
 +
 +QString Device::description() const
 +{
-+    const QString hintName = prop("HintName").toString();
++    const QString hintName = property("HintName").toString(); // non-cached
 +    if (!hintName.isEmpty())
 +        return hintName;
 +
-+    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
++    if (isLoop())
++        return QObject::tr("Loop Device");
++    else if (isSwap())
++        return QObject::tr("Swap Space");
++    else if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
 +        return storageDescription();
 +    else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
 +        return volumeDescription();
@@ -668,7 +656,7 @@ index 0000000..22b0c45
 +    QString description;
 +    const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
 +    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
-+    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
 +
 +    if (drive_type == Solid::StorageDrive::CdromDrive)
 +    {
@@ -740,7 +728,7 @@ index 0000000..22b0c45
 +        return description;
 +    }
 +
-+    bool drive_is_removable = storageDrive.isRemovable();
++    const bool drive_is_removable = storageDrive.isRemovable();
 +
 +    if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
 +    {
@@ -973,19 +961,23 @@ index 0000000..22b0c45
 +
 +QString Device::icon() const
 +{
-+    QString iconName = prop( "HintIconName" ).toString();
++    QString iconName = property( "HintIconName" ).toString(); // non-cached
 +
 +    if ( !iconName.isEmpty() )
 +    {
 +        return iconName;
 +    }
++    else if (isLoop() || isSwap())
++    {
++        return "drive-harddisk";
++    }
 +    else if (isDrive()) {
 +        const bool isRemovable = prop("Removable").toBool();
 +        const QString conn = prop("ConnectionBus").toString();
 +
 +        if (isOpticalDrive())
 +            return "drive-optical";
-+        else if (isRemovable && !isOpticalDisc()) {
++        else if (isRemovable && !prop("Optical").toBool()) {
 +            if (conn == "usb")
 +                return "drive-removable-media-usb";
 +            else
@@ -993,14 +985,18 @@ index 0000000..22b0c45
 +        }
 +    }
 +    else if (isBlock()) {
-+        Device drive(drivePath());
++        const QString drv = drivePath();
++        if (drv.isEmpty() || drv == "/")
++            return "drive-harddisk";    // stuff like loop devices or swap which don't have the Drive prop set
++
++        Device drive(drv);
 +
 +        // handle media
 +        const QString media = drive.prop("Media").toString();
 +
 +        if ( !media.isEmpty() )
 +        {
-+            if ( isOpticalDisc() )    // optical stuff
++            if ( drive.prop("Optical").toBool() )    // optical stuff
 +            {
 +                bool isWritable = drive.prop("OpticalBlank").toBool();
 +
@@ -1107,8 +1103,7 @@ index 0000000..22b0c45
 +    if (reply.isValid()) {
 +        m_cache.insert(key, reply);
 +    } else {
-+        //qDebug() << "got invalid reply for cache:" << key;
-+        //m_cache.insert(key, QVariant());
++        qWarning() << "got invalid reply for cache:" << key;
 +    }
 +}
 +
@@ -1140,11 +1135,12 @@ index 0000000..22b0c45
 +
 +QVariantMap Device::allProperties() const
 +{
++    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
++
 +    Q_FOREACH (const QString & iface, m_interfaces) {
 +        if (iface.startsWith("org.freedesktop.DBus"))
 +            continue;
-+        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
-+        call << iface;
++        call.setArguments(QVariantList() << iface);
 +        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
 +        reply.waitForFinished();
 +
@@ -1354,16 +1350,21 @@ index 0000000..22b0c45
 +    return hasInterface(UD2_DBUS_INTERFACE_SWAP);
 +}
 +
++bool Device::isLoop() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_LOOP);
++}
++
 +QString Device::drivePath() const
 +{
 +    return prop("Drive").value<QDBusObjectPath>().path();
 +}
 diff --git a/solid/solid/backends/udisks2/udisksdevice.h b/solid/solid/backends/udisks2/udisksdevice.h
 new file mode 100644
-index 0000000..cf8e2f5
+index 0000000..7e27634
 --- /dev/null
 +++ b/solid/solid/backends/udisks2/udisksdevice.h
-@@ -0,0 +1,112 @@
+@@ -0,0 +1,113 @@
 +/*
 +    Copyright 2010 Michael Zanetti <mzanetti at kde.org>
 +    Copyright 2010-2012 Lukáš Tinkl <ltinkl at redhat.com>
@@ -1445,6 +1446,7 @@ index 0000000..cf8e2f5
 +    bool isEncryptedContainer() const;
 +    bool isEncryptedCleartext() const;
 +    bool isSwap() const;
++    bool isLoop() const;
 +
 +    QString drivePath() const;
 +
@@ -1793,10 +1795,10 @@ index 0000000..d225f32
 +#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
 diff --git a/solid/solid/backends/udisks2/udisksmanager.cpp b/solid/solid/backends/udisks2/udisksmanager.cpp
 new file mode 100644
-index 0000000..46d934e
+index 0000000..fab5208
 --- /dev/null
 +++ b/solid/solid/backends/udisks2/udisksmanager.cpp
-@@ -0,0 +1,228 @@
+@@ -0,0 +1,269 @@
 +/*
 +    Copyright 2012 Lukáš Tinkl <ltinkl at redhat.com>
 +
@@ -1822,6 +1824,7 @@ index 0000000..46d934e
 +#include <QtCore/QCoreApplication>
 +#include <QtCore/QDebug>
 +#include <QtDBus>
++#include <QtXml/QDomDocument>
 +
 +#include "../shared/rootdevice.h"
 +
@@ -1927,6 +1930,7 @@ index 0000000..46d934e
 +{
 +    m_deviceCache.clear();
 +
++#if 0
 +    QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
 +    reply.waitForFinished();
 +    if (!reply.isError()) {  // enum devices
@@ -1955,9 +1959,47 @@ index 0000000..46d934e
 +        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
 +    }
 +
++#endif
++
++    introspect("/org/freedesktop/UDisks2/block_devices", true /*checkOptical*/);
++    introspect("/org/freedesktop/UDisks2/drives");
++
 +    return m_deviceCache;
 +}
 +
++void Manager::introspect(const QString & path, bool checkOptical)
++{
++    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path,
++                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
++    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
++    reply.waitForFinished();
++
++    if (reply.isValid()) {
++        QDomDocument dom;
++        dom.setContent(reply.value());
++        QDomNodeList nodeList = dom.documentElement().elementsByTagName("node");
++        for (int i = 0; i < nodeList.count(); i++) {
++            QDomElement nodeElem = nodeList.item(i).toElement();
++            if (!nodeElem.isNull() && nodeElem.hasAttribute("name")) {
++                const QString udi = path + "/" + nodeElem.attribute("name");
++
++                if (checkOptical) {
++                    Device device(udi);
++                    if (device.mightBeOpticalDisc()) {
++                        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                                             SLOT(slotMediaChanged(QDBusMessage)));
++                        if (!device.isOpticalDisc())  // skip empty CD disc
++                            continue;
++                    }
++                }
++
++                m_deviceCache.append(udi);
++            }
++        }
++    }
++    else
++        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++}
 +
 +QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
 +{
@@ -2025,12 +2067,13 @@ index 0000000..46d934e
 +
 +    return m_deviceCache;
 +}
++
 diff --git a/solid/solid/backends/udisks2/udisksmanager.h b/solid/solid/backends/udisks2/udisksmanager.h
 new file mode 100644
-index 0000000..7cf0a72
+index 0000000..fb929ce
 --- /dev/null
 +++ b/solid/solid/backends/udisks2/udisksmanager.h
-@@ -0,0 +1,69 @@
+@@ -0,0 +1,70 @@
 +/*
 +    Copyright 2010 Michael Zanetti <mzanetti at kde.org>
 +    Copyright 2010-2012 Lukáš Tinkl <ltinkl at redhat.com>
@@ -2091,6 +2134,7 @@ index 0000000..7cf0a72
 +
 +private:
 +    const QStringList &deviceCache();
++    void introspect(const QString & path, bool checkOptical = false);
 +    QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
 +    org::freedesktop::DBus::ObjectManager m_manager;
 +    QStringList m_deviceCache;
@@ -3666,94 +3710,30 @@ index 0000000..2ca04d2
 +
 +#endif // UDISKS2STORAGEVOLUME_H
 diff --git a/solid/solid/managerbase.cpp b/solid/solid/managerbase.cpp
-index fb5a67c..d832f31 100644
+index fb5a67c..beaeac5 100644
 --- a/solid/solid/managerbase.cpp
 +++ b/solid/solid/managerbase.cpp
-@@ -21,7 +21,7 @@
- #include "managerbase_p.h"
- 
- #include <stdlib.h>
--#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
-+#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
- #include <config-solid.h>
- #endif
- 
-@@ -30,8 +30,7 @@
- #if defined (Q_OS_MAC)
+@@ -31,7 +31,11 @@
  #include "backends/iokit/iokitmanager.h"
  #elif defined (Q_OS_UNIX)
--#include "backends/hal/halmanager.h"
--#include "backends/udisks/udisksmanager.h"
+ #include "backends/hal/halmanager.h"
++#if defined (WITH_SOLID_UDISKS2)
 +#include "backends/udisks2/udisksmanager.h"
++#else
+ #include "backends/udisks/udisksmanager.h"
++#endif
  #include "backends/upower/upowermanager.h"
  
  #if defined (HUPNP_FOUND)
-@@ -44,7 +43,7 @@
- 
- #include "backends/fstab/fstabmanager.h"
- 
--#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-+#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
- #include "backends/wmi/wmimanager.h"
- #endif
- 
-@@ -68,25 +67,16 @@ void Solid::ManagerBasePrivate::loadBackends()
- #        if defined(Q_OS_MAC)
-             m_backends << new Solid::Backends::IOKit::IOKitManager(0);
- 
--#        elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-+#        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-             m_backends << new Solid::Backends::Wmi::WmiManager(0);
- 
--#        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
--            m_backends << new Solid::Backends::Hal::HalManager(0);
--
- #        elif defined(Q_OS_LINUX)
--            bool solidHalLegacyEnabled
--                = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
--            if (solidHalLegacyEnabled) {
--                m_backends << new Solid::Backends::Hal::HalManager(0);
--            } else {
+@@ -83,7 +87,11 @@ void Solid::ManagerBasePrivate::loadBackends()
  #               if defined(UDEV_FOUND)
                      m_backends << new Solid::Backends::UDev::UDevManager(0);
  #               endif
--                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
++#		if defined(WITH_SOLID_UDISKS2)
 +                m_backends << new Solid::Backends::UDisks2::Manager(0)
++#		else
+                 m_backends << new Solid::Backends::UDisks::UDisksManager(0)
++#		endif
                             << new Solid::Backends::UPower::UPowerManager(0)
                             << new Solid::Backends::Fstab::FstabManager(0);
--            }
- #        endif
- 
- #        if defined (HUPNP_FOUND)
-@@ -99,5 +89,3 @@ QList<QObject*> Solid::ManagerBasePrivate::managerBackends() const
- {
-     return m_backends;
- }
--
--
-diff --git a/solid/tests/CMakeLists.txt b/solid/tests/CMakeLists.txt
-index ef507d1..b9f3720 100644
---- a/solid/tests/CMakeLists.txt
-+++ b/solid/tests/CMakeLists.txt
-@@ -15,21 +15,6 @@ endif(WIN32)
- target_link_libraries(fakehardwaretest solid_static ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
- add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
- 
--
--########### halbasictest ###############
--
--if(NOT WIN32 AND NOT APPLE)
--set(halbasictest_SRCS halbasictest.cpp )
--
--kde4_add_executable(halbasictest ${halbasictest_SRCS})
--
--if(WIN32)
--  set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
--endif(WIN32)
--
--target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
--endif(NOT WIN32 AND NOT APPLE)
--
- ########### solidhwtest ###############
- 
- set(solidhwtest_SRCS 
+             }
diff --git a/kdelibs.spec b/kdelibs.spec
index 6e3e0f0..f5fd35b 100644
--- a/kdelibs.spec
+++ b/kdelibs.spec
@@ -25,7 +25,7 @@
 
 Summary: KDE Libraries
 Version: 4.9.2
-Release: 8%{?dist}
+Release: 9%{?dist}
 
 Name: kdelibs
 Epoch: 6
@@ -121,7 +121,7 @@ Patch42: 0003-Implement-automatic-scanning-of-source-code-for-requ.patch
 # make forcefully hal-free build
 Patch45: kdelibs-4.7.3-halectomy.patch
 
-# udisks2 Solid backend, halectomy
+# udisks2 Solid backend
 Patch47: kdelibs-udisks2-backend.patch
 
 ## upstreamable
@@ -350,6 +350,9 @@ mkdir -p %{_target_platform}
 pushd %{_target_platform}
 %{cmake_kde4} \
   -DKDE_DISTRIBUTION_TEXT="%{version}-%{release} Fedora" \
+  %if 0%{?rhel} > 6 || 0%{?fedora} > 17
+  -DWITH_SOLID_UDISKS2:BOOL=ON \
+  %endif
   ..
 popd
 
@@ -590,6 +593,11 @@ rm -rf %{buildroot}
 
 
 %changelog
+* Mon Oct 29 2012 Lukáš Tinkl <ltinkl at redhat.com> 6:4.9.2-9
+- Resolves #868530 - cache information about solid device in 'Places'
+  panel in  open/save dialog
+- update solid/udisks2 backend, switch to cmake-define
+
 * Thu Oct 25 2012 Dan Vrátil <dvratil at redhat.com> 6:4.9.2-8
 - Resolves #868530 - cache information about solid device in 'Places'
   panel in  open/save dialog


More information about the scm-commits mailing list