> On Jan. 23, 2014, 3:47 p.m., Alexander Richardson wrote: > > 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.
return static_cast<Impl*>(this)->stateImpl(); This obviously has to be static_cast<const Impl*>(this) - Alexander ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/115225/#review48124 ----------------------------------------------------------- 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