[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/solid/solid/backends/hal
From: Kevin Ottens <ervin () kde ! org>
Date: 2009-11-24 20:51:24
Message-ID: 1259095884.987622.18975.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1053814 by ervin:
If calling the command line tool eject failed, trigger an Eject request
through HAL.
M +9 -2 halfstabhandling.cpp
M +3 -0 halfstabhandling.h
M +35 -2 halstorageaccess.cpp
M +3 -1 halstorageaccess.h
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halfstabhandling.cpp #1053813:1053814
@@ -162,7 +162,7 @@
}
QProcess *Solid::Backends::Hal::FstabHandling::callSystemCommand(const QString \
&commandName,
- const QString \
&device, + const \
QStringList &args,
QObject *obj, const \
char *slot) {
QStringList env = QProcess::systemEnvironment();
@@ -174,7 +174,7 @@
obj, slot);
process->setEnvironment(env);
- process->start(commandName, QStringList() << device);
+ process->start(commandName, args);
if (process->waitForStarted()) {
return process;
@@ -184,3 +184,10 @@
}
}
+QProcess *Solid::Backends::Hal::FstabHandling::callSystemCommand(const QString \
&commandName, + const \
QString &device, + \
QObject *obj, const char *slot) +{
+ return callSystemCommand(commandName, QStringList() << device, obj, slot);
+}
+
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halfstabhandling.h #1053813:1053814
@@ -37,6 +37,9 @@
static bool isInFstab(const QString &device);
static QStringList possibleMountPoints(const QString &device);
static QProcess *callSystemCommand(const QString &commandName,
+ const QStringList &args,
+ QObject *obj, const char *slot);
+ static QProcess *callSystemCommand(const QString &commandName,
const QString &device,
QObject *obj, const char *slot);
};
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halstorageaccess.cpp #1053813:1053814
@@ -40,7 +40,7 @@
using namespace Solid::Backends::Hal;
StorageAccess::StorageAccess(HalDevice *device)
- : DeviceInterface(device), m_setupInProgress(false), \
m_teardownInProgress(false), + : DeviceInterface(device), \
m_setupInProgress(false), m_teardownInProgress(false), m_ejectInProgress(false), \
m_passphraseRequested(false) {
connect(device, SIGNAL(propertyChanged(const QMap<QString,int> &)),
@@ -163,8 +163,13 @@
args << devnode;
#endif
- QProcess::startDetached(program, args);
+ m_ejectInProgress = true;
+ m_process = FstabHandling::callSystemCommand("eject", args,
+ this, \
SLOT(slotProcessFinished(int, QProcess::ExitStatus))); }
+ } else if (m_ejectInProgress) {
+ m_ejectInProgress = false;
+ emit ejectDone(Solid::NoError, QVariant(), m_device->udi());
}
}
@@ -181,6 +186,11 @@
emit teardownDone(Solid::UnauthorizedOperation,
QString(error.name()+": "+error.message()),
m_device->udi());
+ } else if (m_ejectInProgress) {
+ m_ejectInProgress = false;
+ emit ejectDone(Solid::UnauthorizedOperation,
+ QString(error.name()+": "+error.message()),
+ m_device->udi());
}
}
@@ -206,6 +216,13 @@
m_process->readAllStandardError(),
m_device->udi());
}
+ } else if (m_ejectInProgress) {
+ if (exitCode==0) {
+ m_ejectInProgress = false;
+ emit ejectDone(Solid::NoError, QVariant(), m_device->udi());
+ } else {
+ callHalVolumeEject();
+ }
}
delete m_process;
@@ -352,6 +369,22 @@
SLOT(slotDBusError(const QDBusError &)));
}
+bool StorageAccess::callHalVolumeEject()
+{
+ QString udi = m_device->udi();
+ QString interface = "org.freedesktop.Hal.Device.Volume";
+
+ QDBusConnection c = QDBusConnection::systemBus();
+ QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.Hal", udi,
+ interface, "Eject");
+
+ msg << QStringList();
+
+ return c.callWithCallback(msg, this,
+ SLOT(slotDBusReply(const QDBusMessage &)),
+ SLOT(slotDBusError(const QDBusError &)));
+}
+
bool Solid::Backends::Hal::StorageAccess::callSystemMount()
{
const QString device = m_device->property("block.device").toString();
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halstorageaccess.h #1053813:1053814
@@ -51,6 +51,7 @@
void accessibilityChanged(bool accessible, const QString &udi);
void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
void teardownDone(Solid::ErrorType error, QVariant errorData, const QString \
&udi); + void ejectDone(Solid::ErrorType error, QVariant errorData, const QString \
&udi);
private Q_SLOTS:
void slotPropertyChanged(const QMap<QString,int> &changes);
@@ -58,13 +59,13 @@
void slotDBusError(const QDBusError &error);
void slotProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
-
public Q_SLOTS:
Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString &passphrase);
private:
bool callHalVolumeMount();
bool callHalVolumeUnmount();
+ bool callHalVolumeEject();
bool callSystemMount();
bool callSystemUnmount();
@@ -76,6 +77,7 @@
private:
bool m_setupInProgress;
bool m_teardownInProgress;
+ bool m_ejectInProgress;
bool m_passphraseRequested;
QString m_lastReturnObject;
QProcess *m_process;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic