From fdb67c341fcb9ea0ae29a7889227ded6ac66a362 Mon Sep 17 00:00:00 2001 From: Wolf Bergenheim Date: Wed, 17 Feb 2010 15:23:29 +0200 Subject: Implemented modes => we now get deny messages --- libresourceqt/include/qt4/policy/resource-set.h | 15 +++++++++++---- libresourceqt/src/resource-engine.cpp | 25 +++++++++++++++---------- libresourceqt/src/resource-engine.h | 4 +--- libresourceqt/src/resource-set.cpp | 20 ++++++++++++++++++-- 4 files changed, 45 insertions(+), 19 deletions(-) (limited to 'libresourceqt') diff --git a/libresourceqt/include/qt4/policy/resource-set.h b/libresourceqt/include/qt4/policy/resource-set.h index 1f38c11..8f0c7a6 100644 --- a/libresourceqt/include/qt4/policy/resource-set.h +++ b/libresourceqt/include/qt4/policy/resource-set.h @@ -163,16 +163,23 @@ public: * re-gain our resources without having to re-request them. However if * the AutoRelease is set we release the resources and need to re-acquire * them, when the pre-emting application releases it s resources. + * * This feature is by default disabled. - * Remember to call update() when changing this. + * + * This flag should be set once only before the first acquire is called, + * and cannot be unset. */ - void setAutoRelease(); + bool setAutoRelease(); + bool willAutoRelease(); /** * Sets that the resourcesGranted() signal is emited even if we already * have the requested resources granted. By default this feature is off. - * This flag should be set once only before finalize is called, and cannot be unset. + * + * This flag should be set once only before the first acquire is called, + * and cannot be unset. */ - void setAlwaysReply(); + bool setAlwaysReply(); + bool alwaysGetReply(); signals: /** diff --git a/libresourceqt/src/resource-engine.cpp b/libresourceqt/src/resource-engine.cpp index 2704235..5c02b44 100644 --- a/libresourceqt/src/resource-engine.cpp +++ b/libresourceqt/src/resource-engine.cpp @@ -15,8 +15,15 @@ static void handleAdviceMessage(resmsg_t *msg, resset_t *rs, void *data); ResourceEngine::ResourceEngine(ResourceSet *resourceSet) : QObject(resourceSet), connected(false), resourceSet(resourceSet), dbusEngine(NULL), libresourceConnection(NULL), libresourceSet(NULL), - requestId(0), messageMap(), mode(0) + requestId(0), messageMap(), connectionMode(0) { + if (resourceSet->alwaysGetReply()) { + connectionMode += RESMSG_MODE_ALWAYS_REPLY; + } + if (resourceSet->willAutoRelease()) { + connectionMode += RESOURCE_AUTO_RELEASE; + } + qDebug("connectionMode = %04x", connectionMode); } ResourceEngine::~ResourceEngine() @@ -160,12 +167,12 @@ bool ResourceEngine::connectToManager() resourceMessage.record.rset.all = allResources; resourceMessage.record.rset.opt = optionalResources; resourceMessage.record.rset.share = 0; - resourceMessage.record.rset.mask = 0; + resourceMessage.record.rset.mask = connectionMode; QByteArray ba = resourceSet->applicationClass().toLatin1(); resourceMessage.record.klass = ba.data(); - resourceMessage.record.mode = mode; + resourceMessage.record.mode = connectionMode; qDebug("ResourceEngine is now connecting..."); libresourceSet = resconn_connect(libresourceConnection, &resourceMessage, @@ -365,7 +372,7 @@ bool ResourceEngine::updateResources() message.record.rset.all = allResources; message.record.rset.opt = optionalResources; message.record.rset.share = 0; - message.record.rset.mask = 0; + message.record.rset.mask = connectionMode; QByteArray ba = resourceSet->applicationClass().toLatin1(); message.record.klass = ba.data(); @@ -393,10 +400,13 @@ bool ResourceEngine::registerAudioStreamTag(const QString &) bool ResourceEngine::registerAudioGroup(const QString &audioGroup) { + if((audioGroup == "") || (audioGroup == QString())) + return false; + resmsg_t message; memset(&message, 0, sizeof(resmsg_t)); - QByteArray ba = resourceSet->applicationClass().toLatin1(); + QByteArray ba = audioGroup.toLatin1(); message.audio.group = ba.data(); message.audio.type = RESMSG_AUDIO; @@ -441,8 +451,3 @@ void ResourceEngine::handleConnectionIsUp() emit connectedToManager(); } -void ResourceEngine::setMode(quint32 newMode) -{ - mode = newMode; -} - diff --git a/libresourceqt/src/resource-engine.h b/libresourceqt/src/resource-engine.h index c966144..b1fec70 100644 --- a/libresourceqt/src/resource-engine.h +++ b/libresourceqt/src/resource-engine.h @@ -48,8 +48,6 @@ public: void handleStatusMessage(quint32 requestNo); void handleError(quint32 requestNo, qint32 code, const char *message); - void setMode(quint32 newMode); - signals: void resourcesBecameAvailable(quint32 bitmaskOfAvailableResources); void resourcesGranted(quint32 bitmaskOfGrantedResources); @@ -69,7 +67,7 @@ private: resset_t *libresourceSet; quint32 requestId; QMap messageMap; - quint32 mode; + quint32 connectionMode; }; } diff --git a/libresourceqt/src/resource-set.cpp b/libresourceqt/src/resource-set.cpp index 3652939..bbb8d6e 100644 --- a/libresourceqt/src/resource-set.cpp +++ b/libresourceqt/src/resource-set.cpp @@ -174,14 +174,30 @@ QString ResourceSet::applicationClass() return this->resourceClass; } -void ResourceSet::setAutoRelease() +bool ResourceSet::setAutoRelease() { + if(initialized) + return false; autoRelease = true; + return true; +} + +bool ResourceSet::willAutoRelease() +{ + return autoRelease; } -void ResourceSet::setAlwaysReply() +bool ResourceSet::setAlwaysReply() { + if(initialized) + return false; alwaysReply = true; + return true; +} + +bool ResourceSet::alwaysGetReply() +{ + return alwaysReply; } void ResourceSet::connectedHandler() -- cgit v1.2.3