----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/115225/#review48124 -----------------------------------------------------------
Wouldn't this be easier using methods with the subclass as a template parameter instead of the enum. I.e: class KWindowSystemPrivate { //.... template <class Impl> inline unsigned long state() const { // use a different name to prevent infinite recursion in case this is called with KWindowSystemPrivate as a template parameter return static_cast<Impl*>(this)->stateImpl(); } //.... }; class KWindowSystemPrivateDummy : public KWindowSystemPrivate { //.... inline unsigned long stateImpl() const { return 0; } //... }; class KWindowSystemPrivateX11 : public KWindowSystemPrivate { //.... inline unsigned long stateImpl() const { return m_info->state(); } //... } Then there is no more need for #define X11 static_cast<const KWindowInfoPrivateX11*>(this) anymore. DELEGATE would look like this then: #define DELEGATE(name, args) \ switch (d->platform()) { \ case KWindowInfoPrivate::XcbPlatform: \ return d->name<KWindowInfoPrivateX11>( args ); \ default: \ return d->name<KWindowInfoPrivateDummy>( args ); \ } This should also work, however I am just typing it from my head without having it compiled. - Alexander Richardson On Jan. 23, 2014, 9:09 a.m., Martin Gräßlin wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/115225/ > ----------------------------------------------------------- > > (Updated Jan. 23, 2014, 9:09 a.m.) > > > Review request for KDE Frameworks and kdewin. > > > Repository: kwindowsystem > > > Description > ------- > > Add runtime platform support to KWindowInfo > > Main idea of this change is to only pick the X11 implementation in case > that the application is running on the X11 platform. So far it was a > compile time switch which meant that if compiled with X11 support but > not running on the X11 platform it would have caused runtime errors. > > To make this possible a KWindowInfoPrivate class with a dummy > implementation is provided. This is used as d-ptr for KWindowInfo. > Thus there is one generic implementation and the implementation of > KWindowInfo is no longer ifdefed for the supported platforms. > > The platform specific code can inherit from KWindowInfoPrivate and > overwrite the dummy method implementation. KWindowInfoPrivate provides > a factory method where the platform specific implementation can be > hooked into. There we can have both compile time and runtime checking. > If there is no platfom specific implementation available the dummy > implementation is used. > > NOTE: THIS CHANGE BREAKS THE WINDOWS AND MAC BACKEND! > > Windows and Mac is excluded from build. At the moment they get the > dummy implementation. Unfortunately I don't have the possibility to > compile the changes and thus don't dare to touch the code. Fixes from > the teams are highly appreciated. > > > Diffs > ----- > > src/CMakeLists.txt e32a1150a2c190f23ad456ca8218b012c5d71507 > src/kwindowinfo.h 171f441ff329a5356ccf560341272199e20c837a > src/kwindowinfo.cpp PRE-CREATION > src/kwindowinfo_p.h PRE-CREATION > src/kwindowinfo_p_x11.h PRE-CREATION > src/kwindowinfo_x11.cpp 865d8bed085e987f97f479ea8aa0e6de8567586f > > Diff: https://git.reviewboard.kde.org/r/115225/diff/ > > > Testing > ------- > > Unit test from https://git.reviewboard.kde.org/r/115190/ is still working. > Now you can guess why I wrote that test ;-) > > > Thanks, > > Martin Gräßlin > >
_______________________________________________ Kde-frameworks-devel mailing list Kde-frameworks-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-frameworks-devel