diff -ru kdebase-workspace-4.5.90_old//plasma/generic/applets/devicenotifier/devicenotifier.cpp kdebase-workspace-4.5.90_new//plasma/generic/applets/devicenotifier/devicenotifier.cpp --- kdebase-workspace-4.5.90_old//plasma/generic/applets/devicenotifier/devicenotifier.cpp 2010-12-22 10:55:28.000000000 +0100 +++ kdebase-workspace-4.5.90_new//plasma/generic/applets/devicenotifier/devicenotifier.cpp 2011-01-04 00:48:46.384550301 +0100 @@ -22,6 +22,8 @@ #include "devicenotifier.h" //Qt +#include +#include #include //KDE @@ -74,6 +76,19 @@ QString lastActionLabel; QStringList currentActions = m_dialog->deviceActions(udi); QStringList newActions = data["predicateFiles"].toStringList(); + QStringList autorunActions = data["autorunPredicateFiles"].toStringList(); + + foreach (const QString &action, currentActions) { + if (!autorunActions.contains(action)) { + autorunActions.remove(action); + } + } + if (!autorunActions.isEmpty()) { + kDebug() << "DeviceNotifier:: call Solid Ui Server with params :" << udi << "," << autorunActions; + QDBusInterface soliduiserver("org.kde.kded", "/modules/soliduiserver", "org.kde.SolidUiServer"); + QDBusReply reply = soliduiserver.call("showActionsDialog", udi, autorunActions); + return; + } foreach (const QString &desktop, newActions) { QString filePath = KStandardDirs::locate("data", "solid/actions/" + desktop); diff -ru kdebase-workspace-4.5.90_old//plasma/generic/dataengines/hotplug/hotplugengine.cpp kdebase-workspace-4.5.90_new//plasma/generic/dataengines/hotplug/hotplugengine.cpp --- kdebase-workspace-4.5.90_old//plasma/generic/dataengines/hotplug/hotplugengine.cpp 2010-11-11 15:40:56.000000000 +0100 +++ kdebase-workspace-4.5.90_new//plasma/generic/dataengines/hotplug/hotplugengine.cpp 2011-01-04 00:52:26.222727592 +0100 @@ -99,12 +99,15 @@ void HotplugEngine::findPredicates() { m_predicates.clear(); + m_autorun.clear(); foreach (const QString &path, KGlobal::dirs()->findAllResources("data", "solid/actions/")) { KDesktopFile cfg(path); const QString string_predicate = cfg.desktopGroup().readEntry("X-KDE-Solid-Predicate"); + const QString string_autorun = cfg.desktopGroup().readEntry("X-KDE-Solid-Autorun"); //kDebug() << path << string_predicate; m_predicates.insert(KUrl(path).fileName(), Solid::Predicate::fromString(string_predicate)); + m_autorun.insert(KUrl(path).fileName(), Solid::Predicate::fromString(string_autorun)); } if (m_predicates.isEmpty()) { @@ -125,10 +128,12 @@ QString udi(it.key()); QStringList predicates = predicatesForDevice(device); + QStringList autorunPredicates = autorunPredicatesForDevice(device); if (!predicates.isEmpty()) { if (sources().contains(udi)) { Plasma::DataEngine::Data data; data.insert("predicateFiles", predicates); + data.insert("autorunPredicateFiles", autorunPredicates); setData(udi, data); } else { @@ -158,6 +163,23 @@ return interestingDesktopFiles; } +QStringList HotplugEngine::autorunPredicatesForDevice(Solid::Device &device) +{ + QStringList autorunDesktopFiles; + //search in all desktop configuration file if the device inserted is a correct device + QHashIterator it(m_autorun); + //kDebug() << "=================" << udi; + while (it.hasNext()) { + it.next(); + if (it.value().matches(device)) { + //kDebug() << " hit" << it.key(); + autorunDesktopFiles << it.key(); + } + } + + return autorunDesktopFiles; +} + void HotplugEngine::onDeviceAdded(const QString &udi) { Solid::Device device(udi); @@ -201,6 +223,8 @@ } QStringList interestingDesktopFiles = predicatesForDevice(device); + + QStringList autorunDesktopFiles = autorunPredicatesForDevice(device); bool isEncryptedContainer = m_encryptedPredicate.matches(device); @@ -220,6 +244,7 @@ data.insert("icon", device.icon()); data.insert("emblems", device.emblems()); data.insert("predicateFiles", interestingDesktopFiles); + data.insert("autorunPredicateFiles", autorunDesktopFiles); data.insert("isEncryptedContainer", isEncryptedContainer); setData(device.udi(), data); diff -ru kdebase-workspace-4.5.90_old//plasma/generic/dataengines/hotplug/hotplugengine.h kdebase-workspace-4.5.90_new//plasma/generic/dataengines/hotplug/hotplugengine.h --- kdebase-workspace-4.5.90_old//plasma/generic/dataengines/hotplug/hotplugengine.h 2010-01-06 18:00:19.000000000 +0100 +++ kdebase-workspace-4.5.90_new//plasma/generic/dataengines/hotplug/hotplugengine.h 2011-01-03 23:47:04.044466496 +0100 @@ -49,6 +49,7 @@ void onDeviceAdded(Solid::Device &dev, bool added = true); void findPredicates(); QStringList predicatesForDevice(Solid::Device &device); + QStringList autorunPredicatesForDevice(Solid::Device &device); private Q_SLOTS: void processNextStartupDevice(); @@ -56,6 +57,7 @@ private: QHash m_predicates; + QHash m_autorun; QHash m_startList; QHash m_devices; Solid::Predicate m_encryptedPredicate;