make shadows work on wayland

Authored by mart on Jun 5 2017, 9:18 AM.

Description

make shadows work on wayland

Summary:
since from Qt 5.8 QtWayland destroys its surfaces every time
a window gets hidden and recreates them again when is shown
(that's how the protocol is defined) install the shadows
every time the window is shown, using a map to keep track of surfaces, in order to delete them on window hide and avoid leaks

Test Plan: popup menus have correct shadows on wayland now

Reviewers: Plasma, hpereiradacosta

Subscribers: anthonyfieroni, davidedmundson, plasma-devel

Tags: Plasma

Differential Revision: https://phabricator.kde.org/D5910

Details

Auditors
kfunk
Committed
martJun 5 2017, 9:20 AM
Differential Revision
D5910: make shadows work on wayland
Parents
R31:610b6f13c31e: Q_DECL_OVERRIDE -> override Rationale is that breeze decoration depends on…
Branches
Unknown
Tags
Unknown
kfunk raised a concern with this commit.Jun 6 2017, 7:17 AM
kfunk added a subscriber: kfunk.

Breaks compilation for me:
http://kfunk.ddns.net:8080/job/kdevelop-appimage-centos/138/console

Issue:

In file included from /root/src/breeze/kstyle/breezeshadowhelper.cpp:20:0:
/root/src/breeze/kstyle/breezeshadowhelper.h:162:24: error: ‘KWayland’ was not declared in this scope
         QMap<QWidget*, KWayland::Client::Surface *> _widgetSurfaces;
                        ^
/root/src/breeze/kstyle/breezeshadowhelper.h:162:51: error: template argument 2 is invalid
         QMap<QWidget*, KWayland::Client::Surface *> _widgetSurfaces;
                                                   ^
/root/src/breeze/kstyle/breezeshadowhelper.cpp: In member function ‘virtual bool Breeze::ShadowHelper::eventFilter(QObject*, QEvent*)’:
/root/src/breeze/kstyle/breezeshadowhelper.cpp:179:45: error: request for member ‘constFind’ in ‘((Breeze::ShadowHelper*)this)->Breeze::ShadowHelper::_widgetSurfaces’, which is of non-class type ‘int’
                 auto iter = _widgetSurfaces.constFind( widget );
                                             ^
/root/src/breeze/kstyle/breezeshadowhelper.cpp:180:45: error: request for member ‘constEnd’ in ‘((Breeze::ShadowHelper*)this)->Breeze::ShadowHelper::_widgetSurfaces’, which is of non-class type ‘int’
                 if( iter == _widgetSurfaces.constEnd() )
                                             ^
/root/src/breeze/kstyle/breezeshadowhelper.cpp:188:45: error: request for member ‘find’ in ‘((Breeze::ShadowHelper*)this)->Breeze::ShadowHelper::_widgetSurfaces’, which is of non-class type ‘int’
                 auto iter = _widgetSurfaces.find( widget );
                                             ^
/root/src/breeze/kstyle/breezeshadowhelper.cpp:189:45: error: request for member ‘end’ in ‘((Breeze::ShadowHelper*)this)->Breeze::ShadowHelper::_widgetSurfaces’, which is of non-class type ‘int’
                 if( iter != _widgetSurfaces.end() )
                                             ^
/root/src/breeze/kstyle/breezeshadowhelper.cpp:192:37: error: request for member ‘erase’ in ‘((Breeze::ShadowHelper*)this)->Breeze::ShadowHelper::_widgetSurfaces’, which is of non-class type ‘int’
                     _widgetSurfaces.erase( iter );
                                     ^
[7/9] Building CXX object kstyle/CMakeFiles/breeze.dir/breeze_automoc.cpp.o
FAILED: kstyle/CMakeFiles/breeze.dir/breeze_automoc.cpp.o
This commit now has outstanding concerns.Jun 6 2017, 7:17 AM
All concerns with this commit have now been addressed.Jun 7 2017, 10:16 AM