Review Request 115442: Change NET* classes and KWindoInfo/KWindowSystem to use declared flag types

Martin Gräßlin mgraesslin at kde.org
Tue Feb 4 06:51:51 UTC 2014



> On Feb. 3, 2014, 9:36 a.m., Martin Gräßlin wrote:
> > src/netwm.h, lines 1426-1430
> > <https://git.reviewboard.kde.org/r/115442/diff/1/?file=241482#file241482line1426>
> >
> >     This method should also get adjusted but as it's virtual it will be a true API break.
> >     
> >     What's the best way? Deprecate this method and add a new one instead?
> 
> Aurélien Gâteau wrote:
>     The problem with deprecating virtual methods is you can do it that way:
>     
>     #1
>     
>         virtual void changeState(NET::States states, NET::WindowTypeMask mask);
>         KDE_DEPRECATED virtual void changeState(unsigned long states, unsigned long mask);
>     
>     But then your user has two possible methods to override, which one should he do?
>     
>     Or you can do it that way:
>     
>     #2
>     
>         virtual void changeState(NET::States states, NET::WindowTypeMask mask);
>         KDE_DEPRECATED void changeState(unsigned long states, unsigned long mask)
>         {
>             changeState(NET::States(states), NET::WindowTypeMask(mask));
>         }
>     
>     (+) Only one method can be overridden
>     (-) Existing code which used to override the deprecated version no longer works.
>     
>     Or you can do it that way:
>     
>     #3
>     
>         void changeState(NET::States states, NET::WindowTypeMask mask)
>         {
>             changeState(long(states), long(mask));
>         }
>         KDE_DEPRECATED virtual void changeState(unsigned long states, unsigned long mask);
>     
>     (+) Only one method can be overridden
>     (+) Existing code which used to override the deprecated version still works.
>     (-) The method to override is the deprecated one, so it's not really deprecated :/
>     
>     With that in mind, I would go for the future-clean version: change the method signature and break the ABI. Since this method is not meant to be called by outside code, it's not going to make any difference with #2.

OK, I'm going for breaking the ABI. It's not that big deal as I think only KWin implements it and we already broke the ABI of NETWinInfo quite a bit and KWin has override flags added to all methods.


- Martin


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/115442/#review48791
-----------------------------------------------------------


On Feb. 3, 2014, 9:34 a.m., Martin Gräßlin wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/115442/
> -----------------------------------------------------------
> 
> (Updated Feb. 3, 2014, 9:34 a.m.)
> 
> 
> Review request for KDE Frameworks.
> 
> 
> Repository: kwindowsystem
> 
> 
> Description
> -------
> 
> Introduce QFlags for NET::Action
> 
> API of NETWinInfo adjusted.
> 
> Introduce QFlags for NET::State
> 
> API in NET* classes and KWindowInfo and KWindowSystem adjusted.
> 
> Introduce QFlags for NET::WindowTypeMasks
> 
> API in NET* classes and KWindowInfo is adjusted to make use
> of the new Type instead of using long values.
> 
> Introduce QFlags for NET::Property and NET::Property2
> 
> API of KWindowInfo is adjusted to take NET::Properties and
> NET::Properties2 as arguments instead of usigned long int.
> 
> The ctors of the NET* classes are adjusted which just take
> NET::Properties. The other ctors take the properties array
> which needs further adjustements first.
> 
> In addition a WMAllProperties and WM2AllProperties enum value
> is declared to simplify matching all properties.
> 
> 
> Diffs
> -----
> 
>   src/kwindowinfo_p_x11.h a74ea32aa51407d0a168dd807c29787ce856f2af 
>   src/kwindowinfo_p.h 1ad6cf89e6e9dd8b070d0167410a1a758594f734 
>   src/kwindowinfo.cpp 790c4458075ff0ddc22102111e2d96f8c636f0ee 
>   src/kwindowinfo.h 36cbbcfede41e00f9c0aaa5ee38bc3708065ffd4 
>   autotests/netwininfotestwm.cpp 585994fa0cafe63ea88beabe32bf4c73b095b3f1 
>   autotests/netwininfotestclient.cpp 77b3ab163dcb2bf8a9d0aaf8dd0c7410865ceeca 
>   autotests/kwindowinfox11test.cpp 18cfe39288c280ee9a6afb7b8565215365b114d1 
>   src/netwm_p.h 41792b330f7405034f4d51fb31a4de5dd674b6d0 
>   src/netwm_def.h 8b1ccb8bd731aefb9559c8f2b450337b0312ed4d 
>   src/netwm.cpp 84eb137492e0afaaac80e8d26561fd8f8aff9c27 
>   src/netwm.h 393a29de3153a8b291b9fb249bd3eaeb1ba4e7d5 
>   src/kwindowsystem_x11.cpp 01c78c1debf95d5a176e2153139da19abf383c41 
>   src/kwindowsystem.h 3de0fea179dd468a78a265808fc64704027ec30d 
>   src/kwindowinfo_x11.cpp eda31f2d94e23b1dd411a40fd65e96f65c389ac0 
> 
> Diff: https://git.reviewboard.kde.org/r/115442/diff/
> 
> 
> Testing
> -------
> 
> Unit tests still succeed.
> 
> Test compiled KWin, it needs adjustments but only where int values are used (e.g. passing 0).
> 
> 
> Thanks,
> 
> Martin Gräßlin
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20140204/feea2e07/attachment.html>


More information about the Kde-frameworks-devel mailing list