// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- /* Copyright (C) 2010 The giomm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include #include #include namespace Gio { namespace DBus { //Help the generate code: typedef Proxy::MapChangedProperties MapChangedProperties; Proxy::Proxy(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-connection", Glib::unwrap(connection), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init_async(slot, cancellable); } Proxy::Proxy(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-connection", Glib::unwrap(connection), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init_async(slot); } Proxy::Proxy(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-connection", Glib::unwrap(connection), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init(cancellable); } Proxy::Proxy(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-connection", Glib::unwrap(connection), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init(); } Proxy::Proxy(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-bus-type", static_cast(bus_type), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init_async(slot, cancellable); } Proxy::Proxy(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-bus-type", static_cast(bus_type), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init_async(slot); } Proxy::Proxy(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-bus-type", static_cast(bus_type), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init(cancellable); } Proxy::Proxy(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& info, ProxyFlags flags) : _CONSTRUCT("g-bus-type", static_cast(bus_type), "g-flags", static_cast(flags), "g-interface-info", Glib::unwrap(info), "g-name", (name.empty() ? 0 : name.c_str()), "g-object-path", (object_path.empty() ? 0 : object_path.c_str()), "g-interface-name", (interface_name.empty() ? 0 : interface_name.c_str())) { init(); } void Proxy::create(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) { Proxy(connection, name, object_path, interface_name, slot, cancellable, info, flags); } void Proxy::create(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& info, ProxyFlags flags) { Proxy(connection, name, object_path, interface_name, slot, info, flags); } Glib::RefPtr Proxy::create_sync(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) { return Glib::RefPtr(new Proxy(connection, name, object_path, interface_name, cancellable, info, flags)); } Glib::RefPtr Proxy::create_sync(const Glib::RefPtr& connection, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& info, ProxyFlags flags) { return Glib::RefPtr(new Proxy(connection, name, object_path, interface_name, info, flags)); } void Proxy::create_for_bus(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) { Proxy(bus_type, name, object_path, interface_name, slot, cancellable, info, flags); } void Proxy::create_for_bus(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const SlotAsyncReady& slot, const Glib::RefPtr& info, ProxyFlags flags) { Proxy(bus_type, name, object_path, interface_name, slot, info, flags); } Glib::RefPtr Proxy::create_for_bus_sync(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& cancellable, const Glib::RefPtr& info, ProxyFlags flags) { return Glib::RefPtr(new Proxy(bus_type, name, object_path, interface_name, cancellable, info, flags)); } Glib::RefPtr Proxy::create_for_bus_sync(BusType bus_type, const Glib::ustring& name, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::RefPtr& info, ProxyFlags flags) { return Glib::RefPtr(new Proxy(bus_type, name, object_path, interface_name, info, flags)); } void Proxy::get_cached_property(Glib::VariantBase& property, const Glib::ustring& property_name) const { GVariant* const g_variant = g_dbus_proxy_get_cached_property(const_cast(gobj()), property_name.c_str()); property.init(g_variant, false /* no extra reference needed */); } void Proxy::call(const Glib::ustring& method_name, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable, const Glib::VariantContainerBase& parameters, int timeout_msec, CallFlags flags ) { // Create a copy of the slot. // A pointer to it will be passed through the callback's data parameter // and deleted in the callback. auto slot_copy = new SlotAsyncReady(slot); g_dbus_proxy_call(gobj(), method_name.c_str(), const_cast(parameters.gobj()), static_cast(flags), timeout_msec, Glib::unwrap(cancellable), &SignalProxy_async_callback, slot_copy); } void Proxy::call(const Glib::ustring& method_name, const SlotAsyncReady& slot, const Glib::VariantContainerBase& parameters, int timeout_msec, CallFlags flags ) { // Create a copy of the slot. // A pointer to it will be passed through the callback's data parameter // and deleted in the callback. auto slot_copy = new SlotAsyncReady(slot); g_dbus_proxy_call(gobj(), method_name.c_str(), const_cast(parameters.gobj()), static_cast(flags), timeout_msec, 0, &SignalProxy_async_callback, slot_copy); } Glib::VariantContainerBase Proxy::call_sync( const Glib::ustring& method_name, const Glib::RefPtr& cancellable, const Glib::VariantContainerBase& parameters, int timeout_msec, CallFlags flags ) { GError* g_error = nullptr; GVariant* const gvariant = g_dbus_proxy_call_sync(gobj(), method_name.c_str(), const_cast(parameters.gobj()), static_cast(flags), timeout_msec, Glib::unwrap(cancellable), &g_error); if(g_error) ::Glib::Error::throw_exception(g_error); return Glib::VariantContainerBase(gvariant, false); //Dont' take an extra reference. } Glib::VariantContainerBase Proxy::call_sync( const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters, int timeout_msec, CallFlags flags ) { GError* g_error = nullptr; GVariant* const gvariant = g_dbus_proxy_call_sync(gobj(), method_name.c_str(), const_cast(parameters.gobj()), static_cast(flags), timeout_msec, 0, &g_error); if(g_error) ::Glib::Error::throw_exception(g_error); return Glib::VariantContainerBase(gvariant, false); //Dont' take an extra reference. } #ifdef G_OS_UNIX // With a UnixFDList. void Proxy::call( const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters, const SlotAsyncReady& slot, const Glib::RefPtr& cancellable, const Glib::RefPtr& fd_list, int timeout_msec, CallFlags flags) { // Create a copy of the slot. // A pointer to it will be passed through the callback's data parameter // and deleted in the callback. auto slot_copy = new SlotAsyncReady(slot); g_dbus_proxy_call_with_unix_fd_list(gobj(), method_name.c_str(), const_cast(parameters.gobj()), static_cast(flags), timeout_msec, Glib::unwrap(fd_list), Glib::unwrap(cancellable), &SignalProxy_async_callback, slot_copy); } // Non-cancellable version (with a UnixFDList). void Proxy::call( const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters, const SlotAsyncReady& slot, const Glib::RefPtr& fd_list, int timeout_msec, CallFlags flags) { // Create a copy of the slot. // A pointer to it will be passed through the callback's data parameter // and deleted in the callback. auto slot_copy = new SlotAsyncReady(slot); g_dbus_proxy_call_with_unix_fd_list(gobj(), method_name.c_str(), const_cast(parameters.gobj()), static_cast(flags), timeout_msec, Glib::unwrap(fd_list), 0, &SignalProxy_async_callback, slot_copy); } #endif // G_OS_UNIX } //namespace DBus } // namespace Gio