Add Embind'ing of UNO Any getter for interfaces
Change-Id: Ia56439e0e99c193c7cc56676677df2c671278e24 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164554 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
This commit is contained in:
@@ -975,7 +975,9 @@ SAL_IMPLEMENT_MAIN()
|
||||
}
|
||||
dumpAttributes(cppOut, mgr, ifc, ifcEnt, {});
|
||||
dumpMethods(cppOut, mgr, ifc, ifcEnt, {});
|
||||
cppOut << " ;\n";
|
||||
cppOut << " ;\n"
|
||||
" ::unoembindhelpers::registerUnoType<::com::sun::star::uno::Reference<"
|
||||
<< cppName(ifc) << ">>();\n";
|
||||
dumpRegisterFunctionEpilog(cppOut, n);
|
||||
for (auto const& attr : ifcEnt->getDirectAttributes())
|
||||
{
|
||||
|
@@ -334,7 +334,15 @@ EMSCRIPTEN_BINDINGS(PrimaryBindings)
|
||||
_emval_take_value(getTypeId(self.getValueType()), argv));
|
||||
}
|
||||
case css::uno::TypeClass_INTERFACE:
|
||||
return emscripten::val::undefined(); //TODO
|
||||
{
|
||||
auto const ifc = *static_cast<css::uno::XInterface* const*>(self.getValue());
|
||||
auto const copy = std::malloc(sizeof(css::uno::XInterface*));
|
||||
*static_cast<css::uno::XInterface**>(copy) = ifc;
|
||||
ifc->acquire();
|
||||
emscripten::internal::WireTypePack argv(std::move(copy));
|
||||
return emscripten::val::take_ownership(
|
||||
_emval_take_value(getTypeId(self.getValueType()), argv));
|
||||
}
|
||||
default:
|
||||
O3TL_UNREACHABLE;
|
||||
};
|
||||
|
@@ -76,6 +76,8 @@ interface XTest {
|
||||
boolean isAnyStruct([in] any value);
|
||||
any getAnyException();
|
||||
boolean isAnyException([in] any value);
|
||||
any getAnyInterface();
|
||||
boolean isAnyInterface([in] any value);
|
||||
sequence<boolean> getSequenceBoolean();
|
||||
boolean isSequenceBoolean([in] sequence<boolean> value);
|
||||
sequence<byte> getSequenceByte();
|
||||
|
@@ -10,6 +10,7 @@
|
||||
#include <sal/config.h>
|
||||
|
||||
#include <com/sun/star/uno/Any.hxx>
|
||||
#include <com/sun/star/uno/Reference.hxx>
|
||||
#include <com/sun/star/uno/Sequence.hxx>
|
||||
#include <com/sun/star/uno/Type.hxx>
|
||||
#include <cppu/unotype.hxx>
|
||||
@@ -283,6 +284,19 @@ class Test : public cppu::WeakImplHelper<org::libreoffice::embindtest::XTest>
|
||||
&& e.m3 == u"hä";
|
||||
}
|
||||
|
||||
css::uno::Any SAL_CALL getAnyInterface() override
|
||||
{
|
||||
return css::uno::Any(css::uno::Reference<org::libreoffice::embindtest::XTest>(this));
|
||||
}
|
||||
|
||||
sal_Bool SAL_CALL isAnyInterface(css::uno::Any const& value) override
|
||||
{
|
||||
return value.getValueType() == cppu::UnoType<org::libreoffice::embindtest::XTest>::get()
|
||||
&& *o3tl::forceAccess<css::uno::Reference<org::libreoffice::embindtest::XTest>>(
|
||||
value)
|
||||
== static_cast<OWeakObject*>(this);
|
||||
}
|
||||
|
||||
css::uno::Sequence<sal_Bool> SAL_CALL getSequenceBoolean() override
|
||||
{
|
||||
return { true, true, false };
|
||||
|
@@ -302,6 +302,16 @@ Module.addOnPostRun(function() {
|
||||
//TODO: console.assert(test.isAnyException(a));
|
||||
//TODO: a.delete();
|
||||
}
|
||||
{
|
||||
let v = test.getAnyInterface();
|
||||
console.log(v);
|
||||
console.assert(v.get().$equals(test.$query()));
|
||||
console.assert(test.isAnyInterface(v));
|
||||
v.delete();
|
||||
//TODO: let a = new Module.Any(test, css.uno.TypeClass.INTERFACE);
|
||||
//TODO: console.assert(test.isAnyInterface(a));
|
||||
//TODO: a.delete();
|
||||
}
|
||||
{
|
||||
let v = test.getSequenceBoolean();
|
||||
console.log(v);
|
||||
|
Reference in New Issue
Block a user