bool DBusLauncherImpl::launch(const QString& fileName, const QString& mimeType, QWidget* window) { QFileInfo fileInfo(fileName); if (!fileInfo.exists() || !fileInfo.isReadable()) return false; if (mimeType.isEmpty()) return launch(fileName, window); QDBusError error; QValueList<QVariant> params; params.append(fileInfo.absFilePath()); params.append(mimeType); QDBusMessage reply = m_proxy->sendWithReply("LaunchFile", params, &error); if (error.isValid()) { qWarning("Error while launching through D-Bus:\nerror '%s'\nmessage '%s'", error.name().local8Bit().data(), error.message().local8Bit().data()); return false; } if (reply.count() != 1 || reply[0].type() != QVariant::Bool) { qWarning("Unexpected launcher reply"); return false; } return reply[0].toBool(); }
bool DBusLauncherImpl::launch(const QUrl& url, const QString& mimeType, QWidget* window) { if (!url.isValid()) return false; if (url.isLocalFile()) return launch(url.path(), mimeType, window); if (mimeType.isEmpty()) return launch(url, window); QDBusError error; QValueList<QVariant> params; params.append(url.toString()); params.append(mimeType); QDBusMessage reply = m_proxy->sendWithReply("LaunchURL", params, &error); if (error.isValid()) { qWarning("Error while launching through D-Bus:\nerror '%s'\nmessage '%s'", error.name().local8Bit().data(), error.message().local8Bit().data()); return false; } if (reply.count() != 1 || reply[0].type() != QVariant::Bool) { qWarning("Unexpected launcher reply"); return false; } return reply[0].toBool(); }
void DeviceHandler::slotAsyncReply( int callId, const QDBusMessage& reply ) { QString method = m_calls[callId]; if (reply.type() == QDBusMessage::ReplyMessage) { odebug << "********* " << m_devProxy->interface() << " " << method << " success" << oendl; if( m_pool ) { if( reply.count() > 0 ) m_pool->handlerSuccess( this, method, reply[0].toString() ); else m_pool->handlerSuccess( this, method, QString::null ); } } else if (reply.type() == QDBusMessage::ErrorMessage) { odebug << "********* " << m_devProxy->interface() << " " << method << " fail: " << reply.error().name() << ": " << reply.error().message() << oendl; if( m_pool ) m_pool->handlerError( this, method, reply.error().name(), reply.error().message() ); } m_calls.remove(callId); }
void KSMServer::shutdown(KApplication::ShutdownConfirm confirm, KApplication::ShutdownType sdtype, KApplication::ShutdownMode sdmode) { pendingShutdown.stop(); if(dialogActive) return; if(state >= Shutdown) // already performing shutdown return; if(state != Idle) // performing startup { // perform shutdown as soon as startup is finished, in order to avoid saving partial session if(!pendingShutdown.isActive()) { pendingShutdown.start(1000); pendingShutdown_confirm = confirm; pendingShutdown_sdtype = sdtype; pendingShutdown_sdmode = sdmode; } return; } KConfig *config = KGlobal::config(); config->reparseConfiguration(); // config may have changed in the KControl module config->setGroup("General"); bool logoutConfirmed = (confirm == KApplication::ShutdownConfirmYes) ? false : (confirm == KApplication::ShutdownConfirmNo) ? true : !config->readBoolEntry("confirmLogout", true); bool mayShutdown = (config->readBoolEntry("offerShutdown", true) && DM().canShutdown()); bool maySuspend = config->readBoolEntry("offerSuspend", true); bool mayHibernate = config->readBoolEntry("offerHibernate", true); bool lockBeforeSuspendHibernate = config->readBoolEntry("lockBeforeSuspendHibernate", true); // FIXME At this moment we can't query for SuspendAllowed/HibernateAllowed because // we haven't support for ConsoleKit yet // query upower for suspend/hibernate capability QDBusConnection dbusConnection; if(maySuspend || mayHibernate) { dbusConnection = QDBusConnection::addConnection(QDBusConnection::SystemBus); if(dbusConnection.isConnected()) { // can suspend? if(maySuspend) { #ifdef WITH_LOGIND QDBusMessage dbusMessage = QDBusMessage::methodCall(DBUS_UPOWER_SERVICE, DBUS_UPOWER_PATH, DBUS_UPOWER_INTERFACE, "CanSuspend"); #else QDBusMessage dbusMessage = QDBusMessage::methodCall(DBUS_UPOWER_SERVICE, DBUS_UPOWER_PATH, DBUS_PROPERTIES_INTERFACE, "Get"); dbusMessage << QDBusData::fromString(DBUS_UPOWER_INTERFACE) << QDBusData::fromString("CanSuspend"); #endif QDBusMessage dbusReply = dbusConnection.sendWithReply(dbusMessage); if(dbusReply.type() == QDBusMessage::ReplyMessage && dbusReply.count() == 1) #ifdef WITH_LOGIND maySuspend = ("yes" == dbusReply[0].toString()); #else maySuspend = dbusReply[0].toVariant().value.toBool(); #endif else { maySuspend = false; kdDebug() << "[dbus/upower] CanSuspend: " << dbusConnection.lastError().message() << "\n"; } } // can hibernate? if(mayHibernate) { #ifdef WITH_LOGIND QDBusMessage dbusMessage = QDBusMessage::methodCall(DBUS_UPOWER_SERVICE, DBUS_UPOWER_PATH, DBUS_UPOWER_INTERFACE, "CanHibernate"); #else QDBusMessage dbusMessage = QDBusMessage::methodCall(DBUS_UPOWER_SERVICE, DBUS_UPOWER_PATH, DBUS_PROPERTIES_INTERFACE, "Get"); dbusMessage << QDBusData::fromString(DBUS_UPOWER_INTERFACE) << QDBusData::fromString("CanHibernate"); #endif QDBusMessage dbusReply = dbusConnection.sendWithReply(dbusMessage); if(dbusReply.type() == QDBusMessage::ReplyMessage && dbusReply.count() == 1) #ifdef WITH_LOGIND mayHibernate = ("yes" == dbusReply[0].toString()); #else mayHibernate = dbusReply[0].toVariant().value.toBool(); #endif else { mayHibernate = false; kdDebug() << "[dbus/upower] CanHibernate: " << dbusConnection.lastError().message() << "\n"; } }
// QT3 DBus message handler: bool LapsusDaemon::handleMethodCall(const QDBusMessage& message) { if (message.interface() != LAPSUS_INTERFACE) return false; if (message.type() != QDBusMessage::MethodCallMessage) return false; if (message.member() == "listFeatures" || message.member() == "listSwitches" || message.member() == "listDisplayTypes" || message.member() == "getMaxBacklight" || message.member() == "getBacklight") { if (message.count() != 0) { return returnDBusError("org.freedesktop.DBus.Error" ".InvalidSignature", "Expected no arguments", message); } QDBusMessage reply = QDBusMessage::methodReply(message); if (message.member() == "listFeatures") { reply << QDBusData::fromList(listFeatures()); } else if (message.member() == "listSwitches") { reply << QDBusData::fromList(listSwitches()); } else if (message.member() == "listDisplayTypes") { reply << QDBusData::fromList(listDisplayTypes()); } else if (message.member() == "getMaxBacklight") { reply << QDBusData::fromUInt32(getMaxBacklight()); } else if (message.member() == "getBacklight") { reply << QDBusData::fromUInt32(getBacklight()); } else { // Should not happen... // TODO - some kind of error? to syslog? using dbus? reply << QDBusData::fromUInt32(0); } myConnection->send(reply); return true; } else if (message.member() == "getSwitch" || message.member() == "getDisplay") { if (message.count() != 1 || message[0].type() != QDBusData::String) { return returnDBusError("org.freedesktop.DBus.Error" ".InvalidSignature", "Expected one string argument", message); } QDBusMessage reply = QDBusMessage::methodReply(message); if (message.member() == "getSwitch") { reply << QDBusData::fromBool( getSwitch(message[0].toString())); } else if (message.member() == "getDisplay") { reply << QDBusData::fromBool( getDisplay(message[0].toString())); } else { // Should not happen... // TODO - some kind of error? to syslog? using dbus? reply << QDBusData::fromBool(false); } myConnection->send(reply); return true; } else if (message.member() == "setSwitch" || message.member() == "setDisplay") { if (message.count() != 2 || message[0].type() != QDBusData::String || message[1].type() != QDBusData::Bool) { return returnDBusError("org.freedesktop.DBus.Error" ".InvalidSignature", "Expected two arguments: string and bool", message); } QDBusMessage reply = QDBusMessage::methodReply(message); if (message.member() == "setSwitch") { reply << QDBusData::fromBool( setSwitch(message[0].toString(), message[1].toBool())); } else if (message.member() == "setDisplay") { reply << QDBusData::fromBool( setDisplay(message[0].toString(), message[1].toBool())); } else { // Should not happen... // TODO - some kind of error? to syslog? using dbus? reply << QDBusData::fromBool(false); } myConnection->send(reply); return true; } else if (message.member() == "setBacklight") { if (message.count() != 1 || message[0].type() != QDBusData::UInt32) { return returnDBusError("org.freedesktop.DBus.Error" ".InvalidSignature", "Expected one uint32 argument", message); } QDBusMessage reply = QDBusMessage::methodReply(message); if (message.member() == "setBacklight") { reply << QDBusData::fromBool( setBacklight(message[0].toUInt32())); } else { // Should not happen... // TODO - some kind of error? to syslog? using dbus? reply << QDBusData::fromBool(false); } myConnection->send(reply); return true; } // TODO - cpufreq return false; }
bool LauncherService::handleMethodCall(const QDBusMessage& message) { if (message.interface() != interface) return false; bool ret; QDBusError error; if (message.member() == "LaunchFile") { switch (message.count()) { case 1: if (message[0].type() == QVariant::String) ret = launch(message[0].toString(), error); else return false; break; case 2: if (message[0].type() == QVariant::String && message[1].type() == QVariant::String) { ret = launch(message[0].toString(), message[1].toString(), error); } else return false; break; default: return false; } } else if (message.member() == "LaunchURL") { switch (message.count()) { case 1: if (message[0].type() == QVariant::String) ret = launch(QUrl(message[0].toString()), error); else return false; break; case 2: if (message[0].type() == QVariant::String && message[1].type() == QVariant::String) { ret = launch(QUrl(message[0].toString()), message[1].toString(), error); } else return false; break; default: return false; } } else return false; sendReply(message, ret, error); return true; }