On Wednesday 29 of September 2004 19:07, Waldo Bastian wrote: > Let me combine a few of the suggestions in a somewhat complete solution: > > For compatibility we could generate demarshalling for both the DCOP and > DBUS calling formats (and mark new interface so that we can only generate > DBUS interfaces for those). Then we can have the same interfaces available > in the DCOP and DBUS universe. > > E.g. KScreensaverIface::lock() in kdesktop could get a > org.kde.kdesktop.KScreensaverIface.lock interface using DBUS calling > convention and > org.kde.dcop.kdesktop.KScreensaverIface.lock interface using DCOP calling > convention. That is the DCOP datastream encapsulated in CUSTOM, let's call > that "DCOP over DBUS" > > To reduce the overhead of the generated code we could even identify cases > (at compile time) where (the incoming) calls to the > org.kde.dcop.kdesktop.KScreensaverIface.lock interface can be automatically > converted to calls to its org.kde.kdesktop.KScreensaverIface.lock > counterpart. (Must be careful with return types though) > > KDE 4 applications would then be reachable with "DCOP over DBUS" and "DBUS" > and exisiting code that makes (hand coded) DCOP calls in KDE would use > "DCOP over DBUS" while dcopidl in KDE4 would generate "DBUS" calls. For KDE > 3 compatibility we could extend the dcopserver to change DCOP calls to DBUS > clients into "DCOP over DBUS" calls. The dcopserver would then be an > optional server in order to obtain KDE3 compatibility. Am I getting it right that you'd want to add the backwards compatibility support to the DBUS code in KDE4? Wouldn't it be better to keep KDE4 nice and clean and make it DBUS-only? The ugliness of backwards compatibility could be kept separately in dcopserver. The mapping could be solved by dcopserver registering in the DBUS space as all the DCOP clients (with names adjusted for DBUS). Requests from DBUS would be re-marshalled for DCOP by dcopserver and sent to the right DCOP client. Requests from DCOP clients would be sent normally to other DCOP clients, and would be re-marshalled for DBUS and sent there. Indeed, that'd be a bit slower, but I don't think we should prefer old code to new code. Moreover, even your solution would need at least part of this to be done in dcopserver, so why not do it there completely? -- Lubos Lunak KDE developer --------------------------------------------------------------------- SuSE CR, s.r.o. e-mail: l.lunak@suse.cz , l.lunak@kde.org Drahobejlova 27 tel: +420 2 9654 2373 190 00 Praha 9 fax: +420 2 9654 2374 Czech Republic http://www.suse.cz/