gdbus-codegen-glibmm
gdbus-codegen-glibmm copied to clipboard
Complex signal arguments are passed by value and needlessly copied in both stub and proxy
Perhaps not that bad for a string, but e.g. have a signal that results in something like this in:
*_proxy.h:
sigc::signal<void, Glib::DBusObjectPathString, std::map<Glib::ustring,Glib::VariantBase>> Foo_signal;
*_proxy.cpp:Proxy::handle_signal():
if (parameters.get_n_children() != 2) return;
Glib::Variant<Glib::DBusObjectPathString> base_arg1;
parameters.get_child(base_arg1, 0);
Glib::DBusObjectPathString p_arg1;
p_arg1 = base_arg1.get();
if (parameters.get_n_children() != 2) return;
Glib::Variant<std::map<Glib::ustring,Glib::VariantBase>> base_arg2;
parameters.get_child(base_arg2, 1);
std::map<Glib::ustring,Glib::VariantBase> p_arg2;
p_arg2 = base_properties.get();
Foo_signal.emit((p_arg1), (p_arg2));
*_stub.cpp:
void Foo_emitter(Glib::DBusObjectPathString, std::map<Glib::ustring,Glib::VariantBase>);
sigc::signal<void, Glib::DBusObjectPathString, std::map<Glib::ustring,Glib::VariantBase>> Foo_signal;
void Stub::Foo_emitter(Glib::DBusObjectPathString arg1, std::map<Glib::ustring,Glib::VariantBase> arg2)
{
std::vector<Glib::VariantBase> paramsList;
paramsList.push_back(Glib::Variant<Glib::DBusObjectPathString>::create((arg1)));;
paramsList.push_back(Glib::Variant<std::map<Glib::ustring,Glib::VariantBase>>::create((arg2)));;
...
}
Should perhaps add const & or && and std::move for non simple types where applicable.