diff options
Diffstat (limited to 'dbus')
-rw-r--r-- | dbus/property.cc | 16 | ||||
-rw-r--r-- | dbus/property.h | 8 |
2 files changed, 24 insertions, 0 deletions
diff --git a/dbus/property.cc b/dbus/property.cc index dde0611..b7a0c8b 100644 --- a/dbus/property.cc +++ b/dbus/property.cc @@ -174,6 +174,22 @@ void PropertySet::Set(PropertyBase* property, SetCallback callback) { callback)); } +bool PropertySet::SetAndBlock(PropertyBase* property) { + MethodCall method_call(kPropertiesInterface, kPropertiesSet); + MessageWriter writer(&method_call); + writer.AppendString(interface()); + writer.AppendString(property->name()); + property->AppendSetValueToWriter(&writer); + + DCHECK(object_proxy_); + scoped_ptr<dbus::Response> response( + object_proxy_->CallMethodAndBlock(&method_call, + ObjectProxy::TIMEOUT_USE_DEFAULT)); + if (response.get()) + return true; + return false; +} + void PropertySet::OnSet(PropertyBase* property, SetCallback callback, Response* response) { diff --git a/dbus/property.h b/dbus/property.h index b308c82..940ef715d 100644 --- a/dbus/property.h +++ b/dbus/property.h @@ -276,6 +276,8 @@ class CHROME_DBUS_EXPORT PropertySet { // depending on the remote object. This method may be overridden by // sub-classes if interfaces use different method calls. virtual void Set(PropertyBase* property, SetCallback callback); + // The sychronous version of Set(). + virtual bool SetAndBlock(PropertyBase* property); virtual void OnSet(PropertyBase* property, SetCallback callback, Response* response); @@ -389,6 +391,12 @@ class CHROME_DBUS_EXPORT Property : public PropertyBase { property_set()->Set(this, callback); } + // The sychronous version of Set(). + virtual bool SetAndBlock(const T& value) { + set_value_ = value; + return property_set()->SetAndBlock(this); + } + // Method used by PropertySet to retrieve the value from a MessageReader, // no knowledge of the contained type is required, this method returns // true if its expected type was found, false if not. |