| Index: chromeos/dbus/dbus.h
|
| diff --git a/chromeos/dbus/dbus.h b/chromeos/dbus/dbus.h
|
| index 9ac1a1f5088f353259e4fa5e1c1a95521de6d91d..2bc44b9d0ce6a0bd3173954fa8f81188e433d56f 100644
|
| --- a/chromeos/dbus/dbus.h
|
| +++ b/chromeos/dbus/dbus.h
|
| @@ -247,6 +247,32 @@ class MonitorConnection<void (A1, A2)> {
|
|
|
| };
|
|
|
| +template <typename A1, typename A2, typename A3>
|
| +class MonitorConnection<void (A1, A2, A3)> {
|
| + public:
|
| + MonitorConnection(const Proxy& proxy, const char* name,
|
| + void (*monitor)(void*, A1, A2, A3), void* object)
|
| + : proxy_(proxy), name_(name), monitor_(monitor), object_(object) {
|
| + }
|
| +
|
| + static void Run(::DBusGProxy*, A1 x, A2 y, A3 z, MonitorConnection* self) {
|
| + self->monitor_(self->object_, x, y, z);
|
| + }
|
| + const Proxy& proxy() const {
|
| + return proxy_;
|
| + }
|
| + const std::string& name() const {
|
| + return name_;
|
| + }
|
| +
|
| + private:
|
| + Proxy proxy_;
|
| + std::string name_;
|
| + void (*monitor_)(void*, A1, A2, A3);
|
| + void* object_;
|
| +
|
| +};
|
| +
|
| template <typename A1>
|
| MonitorConnection<void (A1)>* Monitor(const Proxy& proxy, const char* name,
|
| void (*monitor)(void*, A1),
|
| @@ -281,6 +307,26 @@ MonitorConnection<void (A1, A2)>* Monitor(const Proxy& proxy, const char* name,
|
| return result;
|
| }
|
|
|
| +template <typename A1, typename A2, typename A3>
|
| +MonitorConnection<void (A1, A2, A3)>* Monitor(const Proxy& proxy,
|
| + const char* name,
|
| + void (*monitor)(void*, A1, A2, A3),
|
| + void* object) {
|
| + typedef MonitorConnection<void (A1, A2, A3)> ConnectionType;
|
| +
|
| + ConnectionType* result = new ConnectionType(proxy, name, monitor, object);
|
| +
|
| + ::dbus_g_proxy_add_signal(proxy.gproxy(), name,
|
| + glib::type_to_gtypeid<A1>(),
|
| + glib::type_to_gtypeid<A2>(),
|
| + glib::type_to_gtypeid<A3>(),
|
| + G_TYPE_INVALID);
|
| + ::dbus_g_proxy_connect_signal(proxy.gproxy(), name,
|
| + G_CALLBACK(&ConnectionType::Run),
|
| + result, NULL);
|
| + return result;
|
| +}
|
| +
|
| template <typename F>
|
| void Disconnect(MonitorConnection<F>* connection) {
|
| typedef MonitorConnection<F> ConnectionType;
|
|
|