Review Request 115225: Add runtime platform support to KWindowInfo
Alexander Richardson
arichardson.kde at googlemail.com
Thu Jan 23 14:47:02 UTC 2014
-----------------------------------------------------------
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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20140123/7c38bd25/attachment.html>
More information about the Kde-frameworks-devel
mailing list