Search code examples
qtarchlinuxkde-plasmaxfcemanjaro

How can I compile this window decoration for KDE?


I am trying to compile a window decoration for my Manjaro boot (An Arch distro) and I am getting this error:

/home/ldoney/material-decoration-bt/src/CloseButton.cc: In constructor ‘Material::CloseButton::CloseButton(Material::Decoration*, QObject*)’:
/home/ldoney/material-decoration-bt/src/CloseButton.cc:34:55: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
   34 |     auto *decoratedClient = decoration->client().data();
      |                                                       ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
                 from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
                 from /home/ldoney/material-decoration-bt/src/CloseButton.h:21,
                 from /home/ldoney/material-decoration-bt/src/CloseButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/CloseButton.cc: In member function ‘QColor Material::CloseButton::backgroundColor() const’:
/home/ldoney/material-decoration-bt/src/CloseButton.cc:87:53: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
   87 |         auto *decoratedClient = deco->client().data();
      |                                                     ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
                 from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
                 from /home/ldoney/material-decoration-bt/src/CloseButton.h:21,
                 from /home/ldoney/material-decoration-bt/src/CloseButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/CloseButton.cc:95:53: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
   95 |         auto *decoratedClient = deco->client().data();
      |                                                     ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
                 from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
                 from /home/ldoney/material-decoration-bt/src/CloseButton.h:21,
                 from /home/ldoney/material-decoration-bt/src/CloseButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/MinimizeButton.cc: In constructor ‘Material::MinimizeButton::MinimizeButton(Material::Decoration*, QObject*)’:
/home/ldoney/material-decoration-bt/src/MinimizeButton.cc:37:55: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
   37 |     auto *decoratedClient = decoration->client().data();
      |                                                       ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
                 from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
                 from /home/ldoney/material-decoration-bt/src/MinimizeButton.h:21,
                 from /home/ldoney/material-decoration-bt/src/MinimizeButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/MaximizeButton.cc: In constructor ‘Material::MaximizeButton::MaximizeButton(Material::Decoration*, QObject*)’:
/home/ldoney/material-decoration-bt/src/MaximizeButton.cc:37:55: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
   37 |     auto *decoratedClient = decoration->client().data();
      |                                                       ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
                 from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
                 from /home/ldoney/material-decoration-bt/src/MaximizeButton.h:21,
                 from /home/ldoney/material-decoration-bt/src/MaximizeButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘virtual void Material::Decoration::paint(QPainter*, const QRect&)’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:109:43: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  109 |     auto *decoratedClient = client().data();
      |                                           ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘virtual void Material::Decoration::init()’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:122:43: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  122 |     auto *decoratedClient = client().data();
      |                                           ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::updateTitleBar()’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:202:43: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  202 |     auto *decoratedClient = client().data();
      |                                           ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::paintFrameBackground(QPainter*, const QRect&) const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:297:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  297 |     const auto *decoratedClient = client().data();
      |                                                 ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘QColor Material::Decoration::titleBarBackgroundColor() const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:317:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  317 |     const auto *decoratedClient = client().data();
      |                                                 ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘QColor Material::Decoration::titleBarForegroundColor() const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:331:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  331 |     const auto *decoratedClient = client().data();
      |                                                 ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::paintTitleBarBackground(QPainter*, const QRect&) const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:342:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  342 |     const auto *decoratedClient = client().data();
      |                                                 ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::paintCaption(QPainter*, const QRect&) const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:355:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
  355 |     const auto *decoratedClient = client().data();
      |                                                 ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
                 from /usr/include/qt/QtCore/qpointer.h:43,
                 from /usr/include/qt/QtCore/QPointer:1,
                 from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
                 from /usr/include/KDecoration2/KDecoration2/Decoration:1,
                 from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
                 from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
  565 |     T *data() const noexcept { return internalData(); }
      |        ^~~~
cc1plus: all warnings being treated as errors
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:109: src/CMakeFiles/materialdecoration.dir/CloseButton.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:148: src/CMakeFiles/materialdecoration.dir/MinimizeButton.cc.o] Error 1
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:135: src/CMakeFiles/materialdecoration.dir/MaximizeButton.cc.o] Error 1
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:122: src/CMakeFiles/materialdecoration.dir/Decoration.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:175: src/CMakeFiles/materialdecoration.dir/all] Error 2
make: *** [Makefile:161: all] Error 2

I believe the issue has something to do with the version of qt I have, and I have these packages installed: cmake extra-cmake-modules kdecoration qt5-declarative qt5-x11extras

This is the window decoration's github

Am I missing a package? Is there a package which is out of date or is the window decoration itself out of date? And as per usual, let me know if I'm missing any critical information you need to help me. Thanks!


Solution

  • The client method returns a QWeakPointer that had a data() method to access the pointer but is now deprecated, the solution is to change:

    foo->client().data()
    

    to

    foo->client().toStrongRef().data()
    

    I have created a fork of the project applying that change so you can use it:

    git clone https://github.com/eyllanesc/material-decoration-bt.git
    cd material-decoration-bt; bash setup.sh
    

    Or apply the following patch to the original repository:

    From 00b3b491c754152ff96b9656fff998bacd7ec670 Mon Sep 17 00:00:00 2001
    From: eyllanesc <[email protected]>
    Date: Wed, 3 Jun 2020 11:28:44 -0500
    Subject: [PATCH] fix deprecated
    
    ---
     src/CloseButton.cc    |  6 +++---
     src/Decoration.cc     | 16 ++++++++--------
     src/MaximizeButton.cc |  2 +-
     src/MinimizeButton.cc |  2 +-
     4 files changed, 13 insertions(+), 13 deletions(-)
    
    diff --git a/src/CloseButton.cc b/src/CloseButton.cc
    index f61d7f5..99148ed 100644
    --- a/src/CloseButton.cc
    +++ b/src/CloseButton.cc
    @@ -31,7 +31,7 @@ namespace Material
     CloseButton::CloseButton(Decoration *decoration, QObject *parent)
         : DecorationButton(KDecoration2::DecorationButtonType::Close, decoration, parent)
     {
    -    auto *decoratedClient = decoration->client().data();
    +    auto *decoratedClient = decoration->client().toStrongRef().data();
         connect(decoratedClient, &KDecoration2::DecoratedClient::closeableChanged,
                 this, &CloseButton::setVisible);
    
    @@ -84,7 +84,7 @@ QColor CloseButton::backgroundColor() const
         }
    
         if (isPressed()) {
    -        auto *decoratedClient = deco->client().data();
    +        auto *decoratedClient = deco->client().toStrongRef().data();
             return decoratedClient->color(
                 KDecoration2::ColorGroup::Warning,
                 KDecoration2::ColorRole::Foreground
    @@ -92,7 +92,7 @@ QColor CloseButton::backgroundColor() const
         }
    
         if (isHovered()) {
    -        auto *decoratedClient = deco->client().data();
    +        auto *decoratedClient = deco->client().toStrongRef().data();
             return decoratedClient->color(
                 KDecoration2::ColorGroup::Warning,
                 KDecoration2::ColorRole::Foreground
    diff --git a/src/Decoration.cc b/src/Decoration.cc
    index f388216..997f69f 100644
    --- a/src/Decoration.cc
    +++ b/src/Decoration.cc
    @@ -106,7 +106,7 @@ Decoration::~Decoration()
    
     void Decoration::paint(QPainter *painter, const QRect &repaintRegion)
     {
    -    auto *decoratedClient = client().data();
    +    auto *decoratedClient = client().toStrongRef().data();
    
         if (!decoratedClient->isShaded()) {
             paintFrameBackground(painter, repaintRegion);
    @@ -119,7 +119,7 @@ void Decoration::paint(QPainter *painter, const QRect &repaintRegion)
    
     void Decoration::init()
     {
    -    auto *decoratedClient = client().data();
    +    auto *decoratedClient = client().toStrongRef().data();
    
         connect(decoratedClient, &KDecoration2::DecoratedClient::widthChanged,
                 this, &Decoration::updateTitleBar);
    @@ -199,7 +199,7 @@ void Decoration::updateResizeBorders()
    
     void Decoration::updateTitleBar()
     {
    -    auto *decoratedClient = client().data();
    +    auto *decoratedClient = client().toStrongRef().data();
         setTitleBar(QRect(0, 0, decoratedClient->width(), titleBarHeight()));
     }
    
    @@ -294,7 +294,7 @@ void Decoration::paintFrameBackground(QPainter *painter, const QRect &repaintReg
     {
         Q_UNUSED(repaintRegion)
    
    -    const auto *decoratedClient = client().data();
    +    const auto *decoratedClient = client().toStrongRef().data();
    
         painter->save();
    
    @@ -314,7 +314,7 @@ void Decoration::paintFrameBackground(QPainter *painter, const QRect &repaintReg
    
     QColor Decoration::titleBarBackgroundColor() const
     {
    -    const auto *decoratedClient = client().data();
    +    const auto *decoratedClient = client().toStrongRef().data();
         const auto group = decoratedClient->isActive()
             ? KDecoration2::ColorGroup::Active
             : KDecoration2::ColorGroup::Inactive;
    @@ -328,7 +328,7 @@ QColor Decoration::titleBarBackgroundColor() const
    
     QColor Decoration::titleBarForegroundColor() const
     {
    -    const auto *decoratedClient = client().data();
    +    const auto *decoratedClient = client().toStrongRef().data();
         const auto group = decoratedClient->isActive()
             ? KDecoration2::ColorGroup::Active
             : KDecoration2::ColorGroup::Inactive;
    @@ -339,7 +339,7 @@ void Decoration::paintTitleBarBackground(QPainter *painter, const QRect &repaint
     {
         Q_UNUSED(repaintRegion)
    
    -    const auto *decoratedClient = client().data();
    +    const auto *decoratedClient = client().toStrongRef().data();
    
         painter->save();
         painter->setPen(Qt::NoPen);
    @@ -352,7 +352,7 @@ void Decoration::paintCaption(QPainter *painter, const QRect &repaintRegion) con
     {
         Q_UNUSED(repaintRegion)
    
    -    const auto *decoratedClient = client().data();
    +    const auto *decoratedClient = client().toStrongRef().data();
    
         const int textWidth = settings()->fontMetrics().boundingRect(decoratedClient->caption()).width();
         const QRect textRect((size().width() - textWidth) / 2, 0, textWidth, titleBarHeight());
    diff --git a/src/MaximizeButton.cc b/src/MaximizeButton.cc
    index ea608ce..495071c 100644
    --- a/src/MaximizeButton.cc
    +++ b/src/MaximizeButton.cc
    @@ -34,7 +34,7 @@ namespace Material
     MaximizeButton::MaximizeButton(Decoration *decoration, QObject *parent)
         : DecorationButton(KDecoration2::DecorationButtonType::Maximize, decoration, parent)
     {
    -    auto *decoratedClient = decoration->client().data();
    +    auto *decoratedClient = decoration->client().toStrongRef().data();
         connect(decoratedClient, &KDecoration2::DecoratedClient::maximizeableChanged,
                 this, &MaximizeButton::setVisible);
    
    diff --git a/src/MinimizeButton.cc b/src/MinimizeButton.cc
    index 03c1dd4..3760669 100644
    --- a/src/MinimizeButton.cc
    +++ b/src/MinimizeButton.cc
    @@ -34,7 +34,7 @@ namespace Material
     MinimizeButton::MinimizeButton(Decoration *decoration, QObject *parent)
         : DecorationButton(KDecoration2::DecorationButtonType::Minimize, decoration, parent)
     {
    -    auto *decoratedClient = decoration->client().data();
    +    auto *decoratedClient = decoration->client().toStrongRef().data();
         connect(decoratedClient, &KDecoration2::DecoratedClient::minimizeableChanged,
                 this, &MinimizeButton::setVisible);
    
    -- 
    2.27.0