Hello community,

here is the log from the commit of package libkdecoration2 for openSUSE:Factory 
checked in at 2017-01-31 12:21:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libkdecoration2 (Old)
 and      /work/SRC/openSUSE:Factory/.libkdecoration2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libkdecoration2"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libkdecoration2/libkdecoration2.changes  
2017-01-04 17:25:26.443776283 +0100
+++ /work/SRC/openSUSE:Factory/.libkdecoration2.new/libkdecoration2.changes     
2017-02-03 17:47:45.135362452 +0100
@@ -1,0 +2,21 @@
+Thu Jan 26 19:58:35 CET 2017 - [email protected]
+
+- Update to 5.9.0
+  * New feature release
+  * For more details please see:
+  * https://www.kde.org/announcements/plasma-5.9.0.php
+- Changes since 5.8.95:
+  * None
+
+-------------------------------------------------------------------
+Thu Jan 12 20:39:58 UTC 2017 - [email protected]
+
+- Update to 5.8.95 (Plasma 5.9 Beta)
+  * New feature release
+  * For more details please see:
+    https://www.kde.org/announcements/plasma-5.8.95.php
+- Changes:
+  * [KDecoration] Restore application menu button.
+  * Add .arcconfig.
+
+-------------------------------------------------------------------

Old:
----
  kdecoration-5.8.5.tar.xz

New:
----
  kdecoration-5.9.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libkdecoration2.spec ++++++
--- /var/tmp/diff_new_pack.nVmV7d/_old  2017-02-03 17:47:46.075229957 +0100
+++ /var/tmp/diff_new_pack.nVmV7d/_new  2017-02-03 17:47:46.079229392 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libkdecoration2
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %define lname           libkdecorations2-5
 %define lname_private   libkdecorations2private5
 Name:           libkdecoration2
-Version:        5.8.5
+Version:        5.9.0
 Release:        0
 BuildRequires:  cmake >= 2.8.12
 BuildRequires:  extra-cmake-modules >= 0.0.11
@@ -31,7 +31,7 @@
 License:        GPL-2.0+
 Group:          System/GUI/KDE
 Url:            http://www.kde.org
-Source:         
http://download.kde.org/stable/plasma/%{version}/kdecoration-%{version}.tar.xz
+Source:         kdecoration-%{version}.tar.xz
 Source1:        baselibs.conf
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 

++++++ kdecoration-5.8.5.tar.xz -> kdecoration-5.9.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/.arcconfig 
new/kdecoration-5.9.0/.arcconfig
--- old/kdecoration-5.8.5/.arcconfig    1970-01-01 01:00:00.000000000 +0100
+++ new/kdecoration-5.9.0/.arcconfig    2017-01-26 13:09:41.000000000 +0100
@@ -0,0 +1,4 @@
+{
+  "phabricator.uri" : "https://phabricator.kde.org/";
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/CMakeLists.txt 
new/kdecoration-5.9.0/CMakeLists.txt
--- old/kdecoration-5.8.5/CMakeLists.txt        2016-12-27 12:20:29.000000000 
+0100
+++ new/kdecoration-5.9.0/CMakeLists.txt        2017-01-26 13:09:41.000000000 
+0100
@@ -1,5 +1,5 @@
 project(decoration-api)
-set(PROJECT_VERSION "5.8.5")
+set(PROJECT_VERSION "5.9.0")
 
 cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/autotests/decorationbuttontest.cpp 
new/kdecoration-5.9.0/autotests/decorationbuttontest.cpp
--- old/kdecoration-5.8.5/autotests/decorationbuttontest.cpp    2016-12-27 
12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/autotests/decorationbuttontest.cpp    2017-01-26 
13:09:41.000000000 +0100
@@ -59,6 +59,7 @@
     void testMenu();
     void testMenuDoubleClick();
     void testMenuPressAndHold();
+    void testApplicationMenu();
 };
 
 void DecorationButtonTest::testButton()
@@ -1286,5 +1287,60 @@
     QCOMPARE(closeRequestedSpy.count(), 0);
 }
 
+void DecorationButtonTest::testApplicationMenu()
+{
+    MockBridge bridge;
+    auto decoSettings = 
QSharedPointer<KDecoration2::DecorationSettings>::create(&bridge);
+    MockDecoration mockDecoration(&bridge);
+    mockDecoration.setSettings(decoSettings);
+    MockClient *client = bridge.lastCreatedClient();
+    MockButton button(KDecoration2::DecorationButtonType::ApplicationMenu, 
&mockDecoration);
+    button.setGeometry(QRect(0, 0, 10, 10));
+
+    QCOMPARE(button.isEnabled(), true);
+    QCOMPARE(button.isCheckable(), true);
+    QCOMPARE(button.isChecked(), false);
+    QCOMPARE(button.isVisible(), true);
+    QCOMPARE(button.acceptedButtons(), Qt::LeftButton);
+
+    // clicking the button should trigger a request for application menu
+    QSignalSpy clickedSpy(&button, SIGNAL(clicked(Qt::MouseButton)));
+    QVERIFY(clickedSpy.isValid());
+    QSignalSpy pressedSpy(&button, SIGNAL(pressed()));
+    QVERIFY(pressedSpy.isValid());
+    QSignalSpy releasedSpy(&button, SIGNAL(released()));
+    QVERIFY(releasedSpy.isValid());
+    QSignalSpy pressedChangedSpy(&button, SIGNAL(pressedChanged(bool)));
+    QVERIFY(pressedChangedSpy.isValid());
+    QSignalSpy applicationMenuRequestedSpy(client, 
SIGNAL(applicationMenuRequested()));
+    QVERIFY(applicationMenuRequestedSpy.isValid());
+
+    QMouseEvent pressEvent(QEvent::MouseButtonPress, QPointF(5, 5), 
Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+    pressEvent.setAccepted(false);
+    button.event(&pressEvent);
+    QCOMPARE(pressEvent.isAccepted(), true);
+    QCOMPARE(button.isPressed(), true);
+    QCOMPARE(clickedSpy.count(), 0);
+    QCOMPARE(pressedSpy.count(), 1);
+    QCOMPARE(releasedSpy.count(), 0);
+    QCOMPARE(applicationMenuRequestedSpy.count(), 0);
+    QCOMPARE(pressedChangedSpy.count(), 1);
+    QCOMPARE(pressedChangedSpy.first().first().toBool(), true);
+
+    QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPointF(5, 5), 
Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+    releaseEvent.setAccepted(false);
+    button.event(&releaseEvent);
+    QCOMPARE(releaseEvent.isAccepted(), true);
+    QCOMPARE(button.isPressed(), false);
+    QCOMPARE(clickedSpy.count(), 1);
+    QCOMPARE(clickedSpy.first().first().value<Qt::MouseButton>(), 
Qt::LeftButton);
+    QCOMPARE(pressedSpy.count(), 1);
+    QCOMPARE(releasedSpy.count(), 1);
+    QVERIFY(applicationMenuRequestedSpy.wait());
+    QCOMPARE(applicationMenuRequestedSpy.count(), 1);
+    QCOMPARE(pressedChangedSpy.count(), 2);
+    QCOMPARE(pressedChangedSpy.last().first().toBool(), false);
+}
+
 QTEST_MAIN(DecorationButtonTest)
 #include "decorationbuttontest.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/autotests/mockclient.cpp 
new/kdecoration-5.9.0/autotests/mockclient.cpp
--- old/kdecoration-5.8.5/autotests/mockclient.cpp      2016-12-27 
12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/autotests/mockclient.cpp      2017-01-26 
13:09:41.000000000 +0100
@@ -24,7 +24,7 @@
 
 MockClient::MockClient(KDecoration2::DecoratedClient *client, 
KDecoration2::Decoration *decoration)
     : QObject()
-    , DecoratedClientPrivate(client, decoration)
+    , ApplicationMenuEnabledDecoratedClientPrivate(client, decoration)
 {
 }
 
@@ -138,6 +138,16 @@
     return QPalette();
 }
 
+bool MockClient::hasApplicationMenu() const
+{
+    return true;
+}
+
+bool MockClient::isApplicationMenuActive() const
+{
+    return false;
+}
+
 bool MockClient::providesContextHelp() const
 {
     return m_contextHelp;
@@ -191,6 +201,13 @@
     emit menuRequested();
 }
 
+void MockClient::requestShowApplicationMenu(const QRect &rect, int actionId)
+{
+    Q_UNUSED(rect);
+    Q_UNUSED(actionId);
+    emit applicationMenuRequested(); // FIXME TODO pass geometry
+}
+
 void MockClient::requestToggleKeepAbove()
 {
     m_keepAbove = !m_keepAbove;
@@ -266,3 +283,8 @@
     m_height = h;
     emit client()->heightChanged(h);
 }
+
+void MockClient::showApplicationMenu(int actionId)
+{
+    Q_UNUSED(actionId)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/autotests/mockclient.h 
new/kdecoration-5.9.0/autotests/mockclient.h
--- old/kdecoration-5.8.5/autotests/mockclient.h        2016-12-27 
12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/autotests/mockclient.h        2017-01-26 
13:09:41.000000000 +0100
@@ -24,7 +24,7 @@
 
 #include <QObject>
 
-class MockClient : public QObject, public KDecoration2::DecoratedClientPrivate
+class MockClient : public QObject, public 
KDecoration2::ApplicationMenuEnabledDecoratedClientPrivate
 {
     Q_OBJECT
 public:
@@ -52,12 +52,15 @@
     bool isShadeable() const override;
     bool isShaded() const override;
     QPalette palette() const override;
+    bool hasApplicationMenu() const override;
+    bool isApplicationMenuActive() const override;
     bool providesContextHelp() const override;
     void requestClose() override;
     void requestContextHelp() override;
     void requestToggleMaximization(Qt::MouseButtons buttons) override;
     void requestMinimize() override;
     void requestShowWindowMenu() override;
+    void requestShowApplicationMenu(const QRect &rect, int actionId) override;
     void requestToggleKeepAbove() override;
     void requestToggleKeepBelow() override;
     void requestToggleOnAllDesktops() override;
@@ -65,6 +68,8 @@
     int width() const override;
     WId windowId() const override;
 
+    void showApplicationMenu(int actionId) override;
+
     void setCloseable(bool set);
     void setMinimizable(bool set);
     void setProvidesContextHelp(bool set);
@@ -79,6 +84,7 @@
     void minimizeRequested();
     void quickHelpRequested();
     void menuRequested();
+    void applicationMenuRequested();
 
 private:
     bool m_closeable = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/src/decoratedclient.cpp 
new/kdecoration-5.9.0/src/decoratedclient.cpp
--- old/kdecoration-5.8.5/src/decoratedclient.cpp       2016-12-27 
12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/src/decoratedclient.cpp       2017-01-26 
13:09:41.000000000 +0100
@@ -69,6 +69,22 @@
 
 #undef DELEGATE
 
+bool DecoratedClient::hasApplicationMenu() const
+{
+    if (const auto *appMenuEnabledPrivate = 
dynamic_cast<ApplicationMenuEnabledDecoratedClientPrivate *>(d.get())) {
+        return appMenuEnabledPrivate->hasApplicationMenu();
+    }
+    return false;
+}
+
+bool DecoratedClient::isApplicationMenuActive() const
+{
+    if (const auto *appMenuEnabledPrivate = 
dynamic_cast<ApplicationMenuEnabledDecoratedClientPrivate *>(d.get())) {
+        return appMenuEnabledPrivate->isApplicationMenuActive();
+    }
+    return false;
+}
+
 QPointer< Decoration > DecoratedClient::decoration() const
 {
     return QPointer<Decoration>(d->decoration());
@@ -84,4 +100,11 @@
     return d->color(group, role);
 }
 
+void DecoratedClient::showApplicationMenu(int actionId)
+{
+    if (auto *appMenuEnabledPrivate = 
dynamic_cast<ApplicationMenuEnabledDecoratedClientPrivate *>(d.get())) {
+        appMenuEnabledPrivate->showApplicationMenu(actionId);
+    }
+}
+
 } // namespace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/src/decoratedclient.h 
new/kdecoration-5.9.0/src/decoratedclient.h
--- old/kdecoration-5.8.5/src/decoratedclient.h 2016-12-27 12:20:29.000000000 
+0100
+++ new/kdecoration-5.9.0/src/decoratedclient.h 2017-01-26 13:09:41.000000000 
+0100
@@ -167,6 +167,17 @@
      * will include all Edges. The Decoration can use this information to hide 
borders.
      **/
     Q_PROPERTY(Qt::Edges adjacentScreenEdges READ adjacentScreenEdges NOTIFY 
adjacentScreenEdgesChanged)
+    /**
+     * Whether the DecoratedClient has an application menu
+     * @since 5.9
+     */
+    Q_PROPERTY(bool hasApplicationMenu READ hasApplicationMenu NOTIFY 
hasApplicationMenuChanged)
+    /**
+     * Whether the application menu for this DecoratedClient is currently 
shown to the user
+     * The Decoration can use this information to highlight the respective 
button.
+     * @since 5.9
+     */
+    Q_PROPERTY(bool applicationMenuActive READ isApplicationMenuActive NOTIFY 
applicationMenuActiveChanged)
 
     // TODO: properties for windowId and decorationId?
 
@@ -221,6 +232,24 @@
      **/
     QColor color(ColorGroup group, ColorRole role) const;
 
+    /**
+     * Whether the DecoratedClient has an application menu
+     * @since 5.9
+     */
+    bool hasApplicationMenu() const;
+    /**
+     * Whether the application menu for this DecoratedClient is currently 
shown to the user
+     * The Decoration can use this information to highlight the respective 
button.
+     * @since 5.9
+     */
+    bool isApplicationMenuActive() const;
+
+    /**
+     * Request the application menu to be shown to the user
+     * @param actionId The DBus menu ID of the action that should be 
highlighted, 0 for none.
+     */
+    void showApplicationMenu(int actionId);
+
 Q_SIGNALS:
     void activeChanged(bool);
     void captionChanged(QString);
@@ -247,6 +276,9 @@
     void paletteChanged(const QPalette &palette);
     void adjacentScreenEdgesChanged(Qt::Edges edges);
 
+    void hasApplicationMenuChanged(bool);
+    void applicationMenuActiveChanged(bool);
+
 private:
     friend class Decoration;
     DecoratedClient(Decoration *parent, DecorationBridge *bridge);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/src/decoration.cpp 
new/kdecoration-5.9.0/src/decoration.cpp
--- old/kdecoration-5.8.5/src/decoration.cpp    2016-12-27 12:20:29.000000000 
+0100
+++ new/kdecoration-5.9.0/src/decoration.cpp    2017-01-26 13:09:41.000000000 
+0100
@@ -185,6 +185,24 @@
     d->client->d->requestToggleMaximization(buttons);
 }
 
+void Decoration::showApplicationMenu(int actionId)
+{
+    auto it = std::find_if(d->buttons.constBegin(), d->buttons.constEnd(), 
[](DecorationButton *button) {
+        return button->type() == DecorationButtonType::ApplicationMenu;
+    });
+
+    if (it != d->buttons.constEnd()) {
+        requestShowApplicationMenu((*it)->geometry().toRect(), actionId);
+    }
+}
+
+void Decoration::requestShowApplicationMenu(const QRect &rect, int actionId)
+{
+    if (auto *appMenuEnabledPrivate = 
dynamic_cast<ApplicationMenuEnabledDecoratedClientPrivate 
*>(d->client->d.get())) {
+        appMenuEnabledPrivate->requestShowApplicationMenu(rect, actionId);
+    }
+}
+
 #define DELEGATE(name, variableName, type, emitValue) \
 void Decoration::name(type a) \
 { \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/src/decoration.h 
new/kdecoration-5.9.0/src/decoration.h
--- old/kdecoration-5.8.5/src/decoration.h      2016-12-27 12:20:29.000000000 
+0100
+++ new/kdecoration-5.9.0/src/decoration.h      2017-01-26 13:09:41.000000000 
+0100
@@ -177,6 +177,9 @@
     void requestToggleKeepBelow();
     void requestShowWindowMenu();
 
+    void showApplicationMenu(int actionId);
+    void requestShowApplicationMenu(const QRect &rect, int actionId);
+
     void update(const QRect &rect);
     void update();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdecoration-5.8.5/src/decorationbutton.cpp 
new/kdecoration-5.9.0/src/decorationbutton.cpp
--- old/kdecoration-5.8.5/src/decorationbutton.cpp      2016-12-27 
12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/src/decorationbutton.cpp      2017-01-26 
13:09:41.000000000 +0100
@@ -77,6 +77,16 @@
         setPressAndHold(settings->isCloseOnDoubleClickOnMenu());
         setAcceptedButtons(Qt::LeftButton | Qt::RightButton);
         break;
+    case DecorationButtonType::ApplicationMenu:
+        setVisible(c->hasApplicationMenu());
+        setCheckable(true); // will be "checked" whilst the menu is opened
+        // FIXME TODO connect directly and figure out the button 
geometry/offset stuff
+        QObject::connect(q, &DecorationButton::clicked, decoration.data(), 
[this] {
+            decoration->requestShowApplicationMenu(q->geometry().toRect(), 0 
/* actionId */);
+        }, Qt::QueuedConnection); //&Decoration::requestShowApplicationMenu, 
Qt::QueuedConnection);
+        QObject::connect(c, &DecoratedClient::hasApplicationMenuChanged, q, 
&DecorationButton::setVisible);
+        QObject::connect(c, &DecoratedClient::applicationMenuActiveChanged, q, 
&DecorationButton::setChecked);
+        break;
     case DecorationButtonType::OnAllDesktops:
         setVisible(settings->isOnAllDesktopsAvailable());
         setCheckable(true);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdecoration-5.8.5/src/private/decoratedclientprivate.cpp 
new/kdecoration-5.9.0/src/private/decoratedclientprivate.cpp
--- old/kdecoration-5.8.5/src/private/decoratedclientprivate.cpp        
2016-12-27 12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/src/private/decoratedclientprivate.cpp        
2017-01-26 13:09:41.000000000 +0100
@@ -68,4 +68,12 @@
     return QColor();
 }
 
+ApplicationMenuEnabledDecoratedClientPrivate::ApplicationMenuEnabledDecoratedClientPrivate(DecoratedClient
 *client, Decoration *decoration)
+    : DecoratedClientPrivate(client, decoration)
+{
+
+}
+
+ApplicationMenuEnabledDecoratedClientPrivate::~ApplicationMenuEnabledDecoratedClientPrivate()
 = default;
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdecoration-5.8.5/src/private/decoratedclientprivate.h 
new/kdecoration-5.9.0/src/private/decoratedclientprivate.h
--- old/kdecoration-5.8.5/src/private/decoratedclientprivate.h  2016-12-27 
12:20:29.000000000 +0100
+++ new/kdecoration-5.9.0/src/private/decoratedclientprivate.h  2017-01-26 
13:09:41.000000000 +0100
@@ -100,6 +100,21 @@
     const QScopedPointer<Private> d;
 };
 
+class KDECORATIONS_PRIVATE_EXPORT ApplicationMenuEnabledDecoratedClientPrivate 
: public DecoratedClientPrivate
+{
+public:
+    ~ApplicationMenuEnabledDecoratedClientPrivate() override;
+
+    virtual bool hasApplicationMenu() const = 0;
+    virtual bool isApplicationMenuActive() const = 0;
+
+    virtual void showApplicationMenu(int actionId) = 0;
+    virtual void requestShowApplicationMenu(const QRect &rect, int actionId) = 
0;
+
+protected:
+    explicit ApplicationMenuEnabledDecoratedClientPrivate(DecoratedClient 
*client, Decoration *decoration);
+};
+
 } // namespace
 
 #endif


Reply via email to