Ruby applet dataEngine service operation call

Richard Dale richard.j.dale at gmail.com
Tue Aug 18 15:59:16 CEST 2009


On Tue, Aug 18, 2009 at 1:45 PM, Cédric<kde at xfou.com> wrote:
> Thanks Richard,
>
> That seems to be the problem.
> What I was telling in my earlier mail is that the javascript binding seems
> to have a similar problem with plasmoid.dataEngine("engine
> name").serviceForSource("source name") and maybe they solved it by
> implementing the service function: plasmoid.service("engine name", "source
> name") (and method Plasma::Applet#service is not implemented in ruby ) .
>
I found the problem. It is a bug in how the smoke library works with
overriden virtual methods in classes that are don't have bindings
generated for them. In this case the 'TasksEngine' class isn't part of
the bindings, and when the serviceForSource() method is called on the
DataEngine, the code to invoke it looks like this:

    void x_10(Smoke::Stack x) {
        // serviceForSource(const QString&)
        Plasma::Service* xret =
this->Plasma::DataEngine::serviceForSource(*(const QString
*)x[1].s_voidp);
        x[0].s_class = (void*)xret;
    }

When it should probably look like this, and invoke the method in the
TasksEngine class:

    void x_10(Smoke::Stack x) {
        // serviceForSource(const QString&)
        Plasma::Service* xret = this->serviceForSource(*(const QString
*)x[1].s_voidp);
        x[0].s_class = (void*)xret;
    }

Arno Rehn has just written a new smoke library bindings generator, and
I think we need to discuss this issue and see if we can fix it in that
tool.

-- Richard


More information about the Plasma-devel mailing list