On Sat, Dec 12, 2009 at 3:58 PM, Cédric <k...@xfou.com> wrote: > > Hi richard, > > Do you think this is corrected now and if it is in which release will it be > available ? No, i'm afraid the code generated by the new smoke bindings generator is the same as the old one:
void x_12(Smoke::Stack x) { // virtual Plasma::Service* serviceForSource(const QString&) Plasma::Service* xret = this->Plasma::DataEngine::serviceForSource(*(const QString*)x[1].s_class); x[0].s_class = (void*)xret; } It is difficult to allow virtual methods to be overriden in a bindings language, at the same time as allowing dynamic despatch for virtual methods on unknown classes. I'll cc this mail to kde-bindi...@kde.org and maybe we can discuss it there. -- Richard >> >> On Tue, Aug 18, 2009 at 2:59 PM, Richard Dale <richard.j.d...@gmail.com> >> wrote: >>> >>> On Tue, Aug 18, 2009 at 1:45 PM, Cédric<k...@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 >>> _______________________________________________ >>> Plasma-devel mailing list >>> Plasma-devel@kde.org >>> https://mail.kde.org/mailman/listinfo/plasma-devel >> > > > _______________________________________________ > Plasma-devel mailing list > Plasma-devel@kde.org > https://mail.kde.org/mailman/listinfo/plasma-devel > > _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel