Hello community,
here is the log from the commit of package applet-window-appmenu for
openSUSE:Factory checked in at 2019-11-25 11:25:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/applet-window-appmenu (Old)
and /work/SRC/openSUSE:Factory/.applet-window-appmenu.new.26869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "applet-window-appmenu"
Mon Nov 25 11:25:17 2019 rev:5 rq:750569 version:0.6.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/applet-window-appmenu/applet-window-appmenu.changes
2019-08-13 13:15:52.213497289 +0200
+++
/work/SRC/openSUSE:Factory/.applet-window-appmenu.new.26869/applet-window-appmenu.changes
2019-11-25 11:25:25.914093626 +0100
@@ -1,0 +2,12 @@
+Sun Nov 24 15:53:13 UTC 2019 - Cor Blom <[email protected]>
+
+- Update to version 0.6.0:
+ * new option to support color schemes for menus. For Latte a new
+ option to colorize the menus based on the current window color
+ scheme is already present.
+ * release menu item hovering when not needed any more
+ * new option to maximize/restore active window when used in
+ plasma panels [@ Taras Fomin]
+- Add cmake(KDecoration2) >= 5.12 to BuildRequires
+
+-------------------------------------------------------------------
Old:
----
applet-window-appmenu-0.5.1.tar.gz
New:
----
applet-window-appmenu-0.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ applet-window-appmenu.spec ++++++
--- /var/tmp/diff_new_pack.xU1wpw/_old 2019-11-25 11:25:26.358093546 +0100
+++ /var/tmp/diff_new_pack.xU1wpw/_new 2019-11-25 11:25:26.362093546 +0100
@@ -20,7 +20,7 @@
%define qt5_version 5.9
Name: applet-window-appmenu
-Version: 0.5.1
+Version: 0.6.0
Release: 0
Summary: Plasma 5 applet to show the window appmenu
License: GPL-2.0-or-later
@@ -40,6 +40,7 @@
BuildRequires: libSM-devel
BuildRequires: plasma-framework-devel >= %{kf5_version}
BuildRequires: plasma5-workspace-devel >= 5.12
+BuildRequires: cmake(KDecoration2) >= 5.12
BuildRequires: cmake(Qt5Core) >= %{qt5_version}
BuildRequires: cmake(Qt5DBus) >= %{qt5_version}
BuildRequires: cmake(Qt5Quick) >= %{qt5_version}
++++++ applet-window-appmenu-0.5.1.tar.gz -> applet-window-appmenu-0.6.0.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/CHANGELOG.md
new/applet-window-appmenu-0.6.0/CHANGELOG.md
--- old/applet-window-appmenu-0.5.1/CHANGELOG.md 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/CHANGELOG.md 2019-11-24
08:24:26.000000000 +0100
@@ -1,5 +1,11 @@
### CHANGELOG
+#### Version 0.6.0
+
+* new option to support color schemes for menus. For Latte a new option to
colorize the menus based on the current window color scheme is already present.
+* release menu item hovering when not needed any more
+* new option to maximize/restore active window when used in plasma panels
[@Taras Fomin]
+
#### Version 0.5.1
* fix buttons vertical positioning. Previously there were cases that the
buttons had 1px. difference with the surrounding applets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/CMakeLists.txt
new/applet-window-appmenu-0.6.0/CMakeLists.txt
--- old/applet-window-appmenu-0.5.1/CMakeLists.txt 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/CMakeLists.txt 2019-11-24
08:24:26.000000000 +0100
@@ -3,7 +3,7 @@
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
set(CMAKE_CXX_STANDARD 14)
-set(VERSION 0.5.1)
+set(VERSION 0.6.0)
set(AUTHOR "Michail Vourlakos")
set(EMAIL "[email protected]")
@@ -16,7 +16,8 @@
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Quick Widgets DBus)
-find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma WindowSystem)
+find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma WindowSystem
ConfigWidgets)
+find_package(KDecoration2 REQUIRED)
include(ECMQtDeclareLoggingCategory)
include(KDECMakeSettings)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/INSTALLATION.md
new/applet-window-appmenu-0.6.0/INSTALLATION.md
--- old/applet-window-appmenu-0.5.1/INSTALLATION.md 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/INSTALLATION.md 2019-11-24
08:24:26.000000000 +0100
@@ -9,7 +9,7 @@
### KDE Neon
```
-sudo apt install make cmake extra-cmake-modules qtdeclarative5-dev
libkf5plasma-dev libqt5x11extras5-dev g++ libsm-dev
+sudo apt install make cmake extra-cmake-modules qtdeclarative5-dev
libkf5plasma-dev libqt5x11extras5-dev g++ libsm-dev libkf5configwidgets-dev
libkdecorations2-dev
```
### openSUSE Leap 15 / Tumbleweed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/README.md
new/applet-window-appmenu-0.6.0/README.md
--- old/applet-window-appmenu-0.5.1/README.md 2019-08-03 07:36:23.000000000
+0200
+++ new/applet-window-appmenu-0.6.0/README.md 2019-11-24 08:24:26.000000000
+0100
@@ -25,7 +25,7 @@
**Qt elements**: Quick Widgets DBus
-**KF5 elements**: Plasma WindowSystem extra-cmake-modules
+**KF5 elements**: Plasma WindowSystem KDecoration2 extra-cmake-modules
**X11 libraries**: XCB RandR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/lib/CMakeLists.txt
new/applet-window-appmenu-0.6.0/lib/CMakeLists.txt
--- old/applet-window-appmenu-0.5.1/lib/CMakeLists.txt 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/lib/CMakeLists.txt 2019-11-24
08:24:26.000000000 +0100
@@ -1,5 +1,6 @@
set(appmenuapplet_SRCS
appmenuapplet.cpp
+ decorationpalette.cpp
)
add_library(plasma_applet_windowappmenu MODULE ${appmenuapplet_SRCS})
@@ -10,7 +11,10 @@
Qt5::Widgets
Qt5::Quick
Qt5::DBus
+ KF5::ConfigWidgets
KF5::Plasma
- KF5::WindowSystem)
+ KF5::WindowSystem
+ KDecoration2::KDecoration
+ KDecoration2::KDecoration2Private)
install(TARGETS plasma_applet_windowappmenu DESTINATION
${KDE_INSTALL_PLUGINDIR}/plasma/applets)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/lib/appmenuapplet.cpp
new/applet-window-appmenu-0.6.0/lib/appmenuapplet.cpp
--- old/applet-window-appmenu-0.5.1/lib/appmenuapplet.cpp 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/lib/appmenuapplet.cpp 2019-11-24
08:24:26.000000000 +0100
@@ -20,6 +20,7 @@
*/
#include "appmenuapplet.h"
+#include "decorationpalette.h"
#include "../plugin/appmenumodel.h"
#include <QAction>
@@ -52,8 +53,8 @@
//if we're the first, regster the service
if (s_refs == 1) {
QDBusConnection::sessionBus().interface()->registerService(viewService(),
- QDBusConnectionInterface::QueueService,
- QDBusConnectionInterface::DontAllowReplacement);
+
QDBusConnectionInterface::QueueService,
+
QDBusConnectionInterface::DontAllowReplacement);
}
/*it registers or unregisters the service when the destroyed value of the
applet change,
@@ -73,8 +74,8 @@
//if we're the first, regster the service
if (++s_refs == 1) {
QDBusConnection::sessionBus().interface()->registerService(viewService(),
- QDBusConnectionInterface::QueueService,
- QDBusConnectionInterface::DontAllowReplacement);
+
QDBusConnectionInterface::QueueService,
+
QDBusConnectionInterface::DontAllowReplacement);
}
}
});
@@ -127,6 +128,29 @@
}
}
+QString AppMenuApplet::menuColorScheme() const
+{
+ return m_menuColorScheme;
+}
+
+void AppMenuApplet::setMenuColorScheme(const QString &scheme)
+{
+ if (m_menuColorScheme == scheme) {
+ return;
+ }
+
+ m_menuColorScheme = scheme;
+
+ if (!m_menuColorScheme.isEmpty()) {
+ m_decorationPalette->deleteLater();
+ m_decorationPalette = new DecorationPalette(scheme);\
+ } else {
+ m_decorationPalette->deleteLater();
+ }
+
+ emit menuColorSchemeChanged();
+}
+
QQuickItem *AppMenuApplet::buttonGrid() const
{
return m_buttonGrid;
@@ -166,6 +190,10 @@
}
}
+ if (menu && m_decorationPalette) {
+ menu->setPalette(m_decorationPalette->palette());
+ }
+
return menu;
}
@@ -306,6 +334,12 @@
}
emit requestActivateIndex(buttonIndex);
+ } else if (event->type() == QEvent::Leave) {
+ if (!m_buttonGrid || !m_buttonGrid->window()) {
+ return false;
+ }
+
+ m_buttonGrid->setProperty("currentIndex", -1);
}
return false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/lib/appmenuapplet.h
new/applet-window-appmenu-0.6.0/lib/appmenuapplet.h
--- old/applet-window-appmenu-0.5.1/lib/appmenuapplet.h 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/lib/appmenuapplet.h 2019-11-24
08:24:26.000000000 +0100
@@ -28,6 +28,7 @@
class QQuickItem;
class QMenu;
class AppMenuModel;
+class DecorationPalette;
class AppMenuApplet : public Plasma::Applet
{
@@ -37,6 +38,8 @@
Q_PROPERTY(int currentIndex READ currentIndex NOTIFY currentIndexChanged)
+ Q_PROPERTY(QString menuColorScheme READ menuColorScheme WRITE
setMenuColorScheme NOTIFY menuColorSchemeChanged)
+
Q_PROPERTY(QQuickItem *buttonGrid READ buttonGrid WRITE setButtonGrid
NOTIFY buttonGridChanged)
Q_PROPERTY(QObject *model READ model WRITE setModel NOTIFY modelChanged)
@@ -64,11 +67,15 @@
int view() const;
void setView(int type);
+ QString menuColorScheme() const;
+ void setMenuColorScheme(const QString &scheme);
+
signals:
void modelChanged();
void viewChanged();
void currentIndexChanged();
void buttonGridChanged();
+ void menuColorSchemeChanged();
void requestActivateIndex(int index);
public slots:
@@ -82,6 +89,8 @@
void setCurrentIndex(int currentIndex);
void onMenuAboutToHide();
+ QString m_menuColorScheme;
+ QPointer<DecorationPalette> m_decorationPalette;
int m_currentIndex = -1;
int m_viewType = FullView;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/lib/decorationpalette.cpp
new/applet-window-appmenu-0.6.0/lib/decorationpalette.cpp
--- old/applet-window-appmenu-0.5.1/lib/decorationpalette.cpp 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/lib/decorationpalette.cpp 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,142 @@
+/********************************************************************
+ KWin - the KDE window manager
+ This file is part of the KDE project.
+
+Copyright 2014 Martin Gräßlin <[email protected]>
+Copyright 2014 Hugo Pereira Da Costa <[email protected]>
+Copyright 2015 Mika Allan Rauhala <[email protected]>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+
+#include "decorationpalette.h"
+
+#include <KConfigGroup>
+#include <KSharedConfig>
+#include <KColorScheme>
+
+#include <QDebug>
+#include <QPalette>
+#include <QFileInfo>
+#include <QStandardPaths>
+
+
+DecorationPalette::DecorationPalette(const QString &colorScheme)
+ : m_colorScheme(QFileInfo(colorScheme).isAbsolute()
+ ? colorScheme
+ :
QStandardPaths::locate(QStandardPaths::GenericConfigLocation, colorScheme))
+{
+ if (m_colorScheme.isEmpty() && colorScheme ==
QStringLiteral("kdeglobals")) {
+ // kdeglobals doesn't exist so create it. This is needed to monitor it
using QFileSystemWatcher.
+ auto config = KSharedConfig::openConfig(colorScheme,
KConfig::SimpleConfig);
+ KConfigGroup wmConfig(config, QStringLiteral("WM"));
+ wmConfig.writeEntry("FakeEntryToKeepThisGroup", true);
+ config->sync();
+
+ m_colorScheme =
QStandardPaths::locate(QStandardPaths::GenericConfigLocation, colorScheme);
+ }
+
+ m_watcher.addPath(m_colorScheme);
+ connect(&m_watcher, &QFileSystemWatcher::fileChanged, [this]() {
+ m_watcher.addPath(m_colorScheme);
+ update();
+ emit changed();
+ });
+
+ update();
+}
+
+bool DecorationPalette::isValid() const
+{
+ return m_activeTitleBarColor.isValid();
+}
+
+QColor DecorationPalette::color(KDecoration2::ColorGroup group,
KDecoration2::ColorRole role) const
+{
+ using KDecoration2::ColorRole;
+ using KDecoration2::ColorGroup;
+
+ switch (role) {
+ case ColorRole::Frame:
+ switch (group) {
+ case ColorGroup::Active:
+ return m_activeFrameColor;
+
+ case ColorGroup::Inactive:
+ return m_inactiveFrameColor;
+
+ default:
+ return QColor();
+ }
+
+ case ColorRole::TitleBar:
+ switch (group) {
+ case ColorGroup::Active:
+ return m_activeTitleBarColor;
+
+ case ColorGroup::Inactive:
+ return m_inactiveTitleBarColor;
+
+ default:
+ return QColor();
+ }
+
+ case ColorRole::Foreground:
+ switch (group) {
+ case ColorGroup::Active:
+ return m_activeForegroundColor;
+
+ case ColorGroup::Inactive:
+ return m_inactiveForegroundColor;
+
+ case ColorGroup::Warning:
+ return m_warningForegroundColor;
+
+ default:
+ return QColor();
+ }
+
+ default:
+ return QColor();
+ }
+}
+
+QPalette DecorationPalette::palette() const
+{
+ return m_palette;
+}
+
+void DecorationPalette::update()
+{
+ auto config = KSharedConfig::openConfig(m_colorScheme,
KConfig::SimpleConfig);
+ KConfigGroup wmConfig(config, QStringLiteral("WM"));
+
+ if (!wmConfig.exists() &&
!m_colorScheme.endsWith(QStringLiteral("/kdeglobals"))) {
+ qDebug() << "Invalid color scheme" << m_colorScheme << "lacks WM
group";
+ return;
+ }
+
+ m_palette = KColorScheme::createApplicationPalette(config);
+
+ m_activeFrameColor = wmConfig.readEntry("frame",
m_palette.color(QPalette::Active, QPalette::Background));
+ m_inactiveFrameColor = wmConfig.readEntry("inactiveFrame",
m_activeFrameColor);
+ m_activeTitleBarColor = wmConfig.readEntry("activeBackground",
m_palette.color(QPalette::Active, QPalette::Highlight));
+ m_inactiveTitleBarColor = wmConfig.readEntry("inactiveBackground",
m_inactiveFrameColor);
+ m_activeForegroundColor = wmConfig.readEntry("activeForeground",
m_palette.color(QPalette::Active, QPalette::HighlightedText));
+ m_inactiveForegroundColor = wmConfig.readEntry("inactiveForeground",
m_activeForegroundColor.darker());
+
+ KConfigGroup windowColorsConfig(config, QStringLiteral("Colors:Window"));
+ m_warningForegroundColor =
windowColorsConfig.readEntry("ForegroundNegative", QColor(237, 21, 2));
+
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/lib/decorationpalette.h
new/applet-window-appmenu-0.6.0/lib/decorationpalette.h
--- old/applet-window-appmenu-0.5.1/lib/decorationpalette.h 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/lib/decorationpalette.h 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,63 @@
+/********************************************************************
+ KWin - the KDE window manager
+ This file is part of the KDE project.
+
+Copyright 2014 Martin Gräßlin <[email protected]>
+Copyright 2014 Hugo Pereira Da Costa <[email protected]>
+Copyright 2015 Mika Allan Rauhala <[email protected]>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*********************************************************************/
+
+#ifndef KWIN_DECORATION_PALETTE_H
+#define KWIN_DECORATION_PALETTE_H
+
+#include <KDecoration2/DecorationSettings>
+#include <QFileSystemWatcher>
+#include <QPalette>
+
+
+class DecorationPalette : public QObject
+{
+ Q_OBJECT
+public:
+ DecorationPalette(const QString &colorScheme);
+
+ bool isValid() const;
+
+ QColor color(KDecoration2::ColorGroup group, KDecoration2::ColorRole role)
const;
+ QPalette palette() const;
+
+Q_SIGNALS:
+ void changed();
+private:
+ void update();
+
+ QString m_colorScheme;
+ QFileSystemWatcher m_watcher;
+
+ QPalette m_palette;
+
+ QColor m_activeTitleBarColor;
+ QColor m_inactiveTitleBarColor;
+
+ QColor m_activeFrameColor;
+ QColor m_inactiveFrameColor;
+
+ QColor m_activeForegroundColor;
+ QColor m_inactiveForegroundColor;
+ QColor m_warningForegroundColor;
+};
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/package/contents/config/main.xml
new/applet-window-appmenu-0.6.0/package/contents/config/main.xml
--- old/applet-window-appmenu-0.5.1/package/contents/config/main.xml
2019-08-03 07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/package/contents/config/main.xml
2019-11-24 08:24:26.000000000 +0100
@@ -38,6 +38,15 @@
<default>false</default>
<label>will become hidden in favour of appmenu when the mouse hovers the
applet</label>
</entry>
+ <entry name="supportsActiveWindowSchemes" type="Bool">
+ <default>false</default>
+ <label>current option will become available in such case</label>
+ </entry>
+ <entry name="selectedScheme" type="String">
+ <default>_default_</default>
+ <label>current scheme used</label>
+ </entry>
+
<entry name="containmentType" type="Enum">
<choices>
<choice name="Loading"/>
@@ -47,5 +56,10 @@
<label>it helps to enable/disable options that are specific to plasma or
Latte panels</label>
<default>0</default>
</entry>
+
+ <entry name="toggleMaximizedOnDoubleClick" type="Bool">
+ <default>false</default>
+ <label>If true, toggles active window maximized/restored on double
click</label>
+ </entry>
</group>
</kcfg>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/package/contents/ui/PaintedToolButton.qml
new/applet-window-appmenu-0.6.0/package/contents/ui/PaintedToolButton.qml
--- old/applet-window-appmenu-0.5.1/package/contents/ui/PaintedToolButton.qml
2019-08-03 07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/package/contents/ui/PaintedToolButton.qml
2019-11-24 08:24:26.000000000 +0100
@@ -36,7 +36,17 @@
//! HACK: in order to identify containsMouse correctly at all cases,
//! best way to reproduce the issue is in Unity mode that many buttons
//! thought that they containMouse even though they did not
- property bool containsMouse: inFullView ? buttonGrid.currentIndex ===
buttonIndex : buttonMouseArea.containsMouse
+ property bool containsMouse: {
+ if (inFullView) {
+ if (plasmoid.nativeInterface.currentIndex > -1) {
+ return plasmoid.nativeInterface.currentIndex === buttonIndex;
+ }
+
+ return buttonGrid.currentIndex === buttonIndex;
+ }
+
+ return buttonMouseArea.containsMouse;
+ }
readonly property bool menuOpened: plasmoid.nativeInterface.currentIndex
=== buttonIndex
readonly property int shadow: 3
readonly property int implicitWidth: {
@@ -67,6 +77,12 @@
signal scrolledUp(int step);
signal scrolledDown(int step);
+ onMenuOpenedChanged: {
+ if (menuOpened) {
+ buttonGrid.currentIndex = buttonIndex
+ }
+ }
+
Rectangle {
id: button
anchors.fill: parent
@@ -143,7 +159,7 @@
//! best way to reproduce the issue is in Unity mode that many buttons
//! thought that they containMouse even though they did not
onExited: {
- if (inFullView) {
+ if (inFullView && buttonGrid.currentIndex === buttonIndex) {
buttonGrid.currentIndex = -1;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/package/contents/ui/config/ColorsComboBox.qml
new/applet-window-appmenu-0.6.0/package/contents/ui/config/ColorsComboBox.qml
---
old/applet-window-appmenu-0.5.1/package/contents/ui/config/ColorsComboBox.qml
1970-01-01 01:00:00.000000000 +0100
+++
new/applet-window-appmenu-0.6.0/package/contents/ui/config/ColorsComboBox.qml
2019-11-24 08:24:26.000000000 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright 2018 Michail Vourlakos <[email protected]>
+*
+* This file is part of applet-window-buttons
+*
+* Latte-Dock is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License, or (at your option) any later version.
+*
+* Latte-Dock is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+import QtQuick 2.0
+import QtQuick.Controls 1.0
+import QtQuick.Controls 2.2 as Controls22
+import QtQuick.Layouts 1.0
+
+Controls22.ComboBox{
+ id: combobox
+
+ Connections{
+ target: popup
+ onClosed: root.forceActiveFocus();
+ }
+
+ delegate: MouseArea{
+ width: combobox.width
+ height: combobox.height
+ hoverEnabled: true
+
+ onClicked: {
+ combobox.currentIndex = index;
+ selectedScheme = model.file;
+ combobox.popup.close();
+ }
+
+ Rectangle{
+ id:delegateBackground
+ anchors.fill: parent
+ color: {
+ if (containsMouse) {
+ return palette.highlight;
+ }
+ if (combobox.currentIndex === index) {
+ return selectedColor;
+ }
+
+ return "transparent";
+ }
+
+ readonly property color selectedColor:
Qt.rgba(palette.highlight.r, palette.highlight.g, palette.highlight.b, 0.5);
+
+ RowLayout{
+ id: delegateRow
+ height: parent.height
+
+ Item{
+ Layout.leftMargin: 2
+ width: 1.25 * label.height
+ height: label.height
+
+ opacity: file==="_default_" || file==="_current_" ? 0 : 1
+
+ Rectangle{
+ width: height
+ height: 0.75 * label.height
+ color: backgroundColor
+ border.width: 1
+ border.color: containsMouse || (combobox.currentIndex
=== index) ? palette.highlightedText : palette.text
+
+ Rectangle{
+ anchors.horizontalCenter: parent.right
+ anchors.verticalCenter: parent.bottom
+ width: parent.width
+ height: parent.height
+ color: textColor
+ border.width: parent.border.width
+ border.color: parent.border.color
+ }
+ }
+ }
+
+ Label{
+ id: label
+ text:display
+ color: containsMouse ? palette.highlightedText :
palette.text
+ }
+ }
+ }
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/package/contents/ui/config/ConfigGeneral.qml
new/applet-window-appmenu-0.6.0/package/contents/ui/config/ConfigGeneral.qml
---
old/applet-window-appmenu-0.5.1/package/contents/ui/config/ConfigGeneral.qml
2019-08-03 07:36:23.000000000 +0200
+++
new/applet-window-appmenu-0.6.0/package/contents/ui/config/ConfigGeneral.qml
2019-11-24 08:24:26.000000000 +0100
@@ -25,6 +25,8 @@
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
+import org.kde.private.windowAppMenu 0.1 as AppMenuPrivate
+
Item {
id: configGeneral
@@ -33,15 +35,26 @@
property alias cfg_filterByActive: activeChk.checked
property alias cfg_filterChildrenWindows: childrenChk.checked
property alias cfg_filterByScreen: screenAwareChk.checked
+ property alias cfg_selectedScheme: configGeneral.selectedScheme
property alias cfg_spacing: spacingSlider.value
property alias cfg_showWindowTitleOnMouseExit: showWindowTitleChk.checked
+ property alias cfg_toggleMaximizedOnDoubleClick: toggleMaximizedChk.checked
property bool disableSetting: plasmoid.formFactor ===
PlasmaCore.Types.Vertical
+ // used as bridge to communicate properly between configuration and ui
+ property string selectedScheme
+
// used from the ui
readonly property real centerFactor: 0.3
readonly property int minimumWidth: 220
+ AppMenuPrivate.SchemesModel {
+ id: schemesModel
+
+ currentOptionIsShown:
plasmoid.configuration.supportsActiveWindowSchemes
+ }
+
ColumnLayout {
id:mainColumn
spacing: units.largeSpacing
@@ -83,6 +96,30 @@
GridLayout{
columns: 2
+
+ Controls.Label {
+ Layout.minimumWidth: Math.max(centerFactor * root.width,
minimumWidth)
+ text: i18n("Menu Colors:")
+ horizontalAlignment: Text.AlignRight
+ }
+
+ ColorsComboBox{
+ id:colorsCmbBox
+ Layout.minimumWidth: 250
+ Layout.preferredWidth: 0.3 * root.width
+ Layout.maximumWidth: 380
+
+ model: schemesModel
+ textRole: "display"
+
+ Component.onCompleted: {
+ currentIndex =
schemesModel.indexOf(plasmoid.configuration.selectedScheme);
+ }
+ }
+ }
+
+ GridLayout{
+ columns: 2
enabled: !compactViewRadioButton.checked
Controls.Label{
@@ -129,6 +166,18 @@
visible: plasmoid.configuration.containmentType === 2 /*Latte
Containment*/
enabled: plasmoid.configuration.windowTitleIsPresent
}
+
+ Controls.Label {
+ text: ""
+ visible: toggleMaximizedChk.visible
+ }
+
+ Controls.CheckBox {
+ id: toggleMaximizedChk
+ text: i18n("Maximize/restore active window on double click")
+ visible: plasmoid.configuration.containmentType !== 2
/*non-Latte Containment*/
+ enabled: fillWidthChk.checked
+ }
}
GridLayout{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/package/contents/ui/main.qml
new/applet-window-appmenu-0.6.0/package/contents/ui/main.qml
--- old/applet-window-appmenu-0.5.1/package/contents/ui/main.qml
2019-08-03 07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/package/contents/ui/main.qml
2019-11-24 08:24:26.000000000 +0100
@@ -25,6 +25,7 @@
import org.kde.kquickcontrolsaddons 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
+import org.kde.taskmanager 0.1 as TaskManager
import org.kde.private.windowAppMenu 0.1 as AppMenuPrivate
@@ -42,6 +43,8 @@
readonly property bool inFullView: !plasmoid.configuration.compactView &&
plasmoid.formFactor === PlasmaCore.Types.Horizontal
readonly property bool inCompactView: !inFullView
+ readonly property string currentScheme:
plasmoid.configuration.selectedScheme
+
Plasmoid.preferredRepresentation: plasmoid.fullRepresentation
Plasmoid.status: inFullView ? fullLayout.status : compactLayout.status
@@ -83,11 +86,17 @@
//BEGIN Latte Dock Communicator
property QtObject latteBridge: null
+
+ property bool latteSupportsActiveWindowSchemes:
plasmoid.configuration.supportsActiveWindowSchemes
onLatteBridgeChanged: {
if (latteBridge) {
latteBridge.actions.setProperty(plasmoid.id,
"latteSideColoringEnabled", false);
latteBridge.actions.setProperty(plasmoid.id,
"activeIndicatorEnabled", false);
latteBridge.actions.setProperty(plasmoid.id,
"windowsTrackingEnabled", true);
+
+ if (latteBridge.version >= latteBridge.actions.version(0,9,4)) {
+ plasmoid.configuration.supportsActiveWindowSchemes = true;
+ }
}
}
@@ -104,6 +113,7 @@
}
Component.onCompleted: {
+ plasmoid.configuration.supportsActiveWindowSchemes = false;
plasmoid.configuration.windowTitleIsPresent = false;
plasmoid.nativeInterface.buttonGrid = buttonGrid;
@@ -135,6 +145,29 @@
});
}
+ Binding {
+ target: plasmoid.nativeInterface
+ property: "menuColorScheme"
+ when: plasmoid.nativeInterface && appMenuModel
+
+ value: {
+ if (root.currentScheme === "_default_") {
+ return "";
+ }
+
+ if (root.currentScheme === "_current_") {
+ if (latteSupportsActiveWindowSchemes) {
+ /* colorScheme value was added after Latte v0.9.4*/
+ return
appMenuModel.selectedTracker.lastActiveWindow.colorScheme
+ } else {
+ return "";
+ }
+ }
+
+ return plasmoid.configuration.selectedScheme
+ }
+ }
+
PaintedToolButton {
id: compactLayout
anchors.fill: parent
@@ -300,6 +333,29 @@
leftIndicatorOpacity: gridFlickable.contentX /
gridFlickable.contentsExtraSpace;
rightIndicatorOpacity: (gridFlickable.contentsExtraSpace -
gridFlickable.contentX) / gridFlickable.contentsExtraSpace
}
+
+ //This Loader is to support maximize/restore active window for plasma
panels. Latte panels are not and should not be influenced by this implementation
+ Loader {
+ active: plasmoid.configuration.fillWidth &&
plasmoid.configuration.toggleMaximizedOnDoubleClick && containmentType !== 2
+ anchors.fill: parent
+ sourceComponent: Component {
+ MouseArea {
+ anchors.right: parent.right
+ width: parent.width - gridFlickable.contentWidth
+ height: parent.height
+
+ TaskManager.TasksModel {
+ id: tasksModel
+ filterByScreen: plasmoid.configuration.filterByScreen
+ screenGeometry: plasmoid.screenGeometry
+ }
+
+ onDoubleClicked: {
+
tasksModel.requestToggleMaximized(tasksModel.activeTask)
+ }
+ }
+ }
+ }
}
AppMenuPrivate.AppMenuModel {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/package/metadata.desktop
new/applet-window-appmenu-0.6.0/package/metadata.desktop
--- old/applet-window-appmenu-0.5.1/package/metadata.desktop 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/package/metadata.desktop 2019-11-24
08:24:26.000000000 +0100
@@ -7,7 +7,7 @@
[email protected]
X-KDE-PluginInfo-License=GPL-2.0+
X-KDE-PluginInfo-Name=org.kde.windowappmenu
-X-KDE-PluginInfo-Version=0.5.1
+X-KDE-PluginInfo-Version=0.6.0
X-KDE-PluginInfo-Website=https://github.com/psifidotos/applet-window-appmenu
X-KDE-ServiceTypes=Plasma/Applet
X-Plasma-API=declarativeappletscript
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/CMakeLists.txt
new/applet-window-appmenu-0.6.0/plugin/CMakeLists.txt
--- old/applet-window-appmenu-0.5.1/plugin/CMakeLists.txt 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/plugin/CMakeLists.txt 2019-11-24
08:24:26.000000000 +0100
@@ -1,6 +1,9 @@
set(appmenuapplet_SRCS
appmenumodel.cpp
appmenuplugin.cpp
+ commontools.cpp
+ schemecolors.cpp
+ schemesmodel.cpp
)
add_library(appmenuplugin SHARED ${appmenuapplet_SRCS})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/appmenuplugin.cpp
new/applet-window-appmenu-0.6.0/plugin/appmenuplugin.cpp
--- old/applet-window-appmenu-0.5.1/plugin/appmenuplugin.cpp 2019-08-03
07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/plugin/appmenuplugin.cpp 2019-11-24
08:24:26.000000000 +0100
@@ -21,6 +21,7 @@
#include "appmenuplugin.h"
#include "appmenumodel.h"
+#include "schemesmodel.h"
#include <QQmlEngine>
@@ -28,4 +29,5 @@
{
Q_ASSERT(uri == QLatin1String("org.kde.private.windowAppMenu"));
qmlRegisterType<AppMenuModel>(uri, 0, 1, "AppMenuModel");
+ qmlRegisterType<SchemesModel>(uri, 0, 1, "SchemesModel");
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/commontools.cpp
new/applet-window-appmenu-0.6.0/plugin/commontools.cpp
--- old/applet-window-appmenu-0.5.1/plugin/commontools.cpp 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/plugin/commontools.cpp 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2018 Michail Vourlakos <[email protected]>
+ *
+ * This file is part of Latte-Dock
+ *
+ * Latte-Dock is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Latte-Dock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "commontools.h"
+
+// Qt
+#include <QFileInfo>
+#include <QStandardPaths>
+
+namespace AppletDecoration {
+
+QString standardPath(QString subPath, bool localfirst)
+{
+ QStringList paths =
QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
+
+ if (localfirst) {
+ for (const auto &pt : paths) {
+ QString ptF = pt + "/" +subPath;
+ if (QFileInfo(ptF).exists()) {
+ return ptF;
+ }
+ }
+ } else {
+ for (int i=paths.count()-1; i>=0; i--) {
+ QString ptF = paths[i] + "/" +subPath;
+ if (QFileInfo(ptF).exists()) {
+ return ptF;
+ }
+ }
+ }
+
+ //! in any case that above fails
+ if (QFileInfo("/usr/share/"+subPath).exists()) {
+ return "/usr/share/"+subPath;
+ }
+
+ return "";
+}
+
+QStringList standardPaths(bool localfirst)
+{
+ QStringList paths =
QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
+
+ if (localfirst) {
+ return paths;
+ } else {
+ QStringList reversed;
+
+ for (int i=paths.count()-1; i>=0; i--) {
+ reversed << paths[i];
+ }
+
+ return reversed;
+ }
+}
+
+QStringList standardPathsFor(QString subPath, bool localfirst)
+{
+ QStringList paths = standardPaths(localfirst);
+
+ QString separator = subPath.startsWith("/") ? "" : "/";
+
+ for (int i=0; i<paths.count(); ++i) {
+ paths[i] = paths[i] + separator + subPath;
+ }
+
+ return paths;
+}
+
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/commontools.h
new/applet-window-appmenu-0.6.0/plugin/commontools.h
--- old/applet-window-appmenu-0.5.1/plugin/commontools.h 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/plugin/commontools.h 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2019 Michail Vourlakos <[email protected]>
+ *
+ * This file is part of the libappletdecoration library
+ *
+ * Latte-Dock is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Latte-Dock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <QString>
+#include <QStringList>
+
+namespace AppletDecoration {
+
+//! returns the standard path found that contains the subPath
+//! local paths have higher priority by default
+QString standardPath(QString subPath, bool localFirst = true);
+
+QStringList standardPaths(bool localfirst = true);
+QStringList standardPathsFor(QString subPath, bool localfirst = true);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/applet-window-appmenu-0.5.1/plugin/libdbusmenuqt/dbusmenuimporter.cpp
new/applet-window-appmenu-0.6.0/plugin/libdbusmenuqt/dbusmenuimporter.cpp
--- old/applet-window-appmenu-0.5.1/plugin/libdbusmenuqt/dbusmenuimporter.cpp
2019-08-03 07:36:23.000000000 +0200
+++ new/applet-window-appmenu-0.6.0/plugin/libdbusmenuqt/dbusmenuimporter.cpp
2019-11-24 08:24:26.000000000 +0100
@@ -550,6 +550,17 @@
QMenu *menu = qobject_cast<QMenu *>(sender());
Q_ASSERT(menu);
+ //! update colors to sub-menus based on the parent menu colors
+ if (menu && menu->parent()) {
+ QMenu *parent_menu = qobject_cast<QMenu *>(menu->parent()->parent());
+ if (parent_menu) {
+ QMenu *sub_menu = qobject_cast<QMenu *>(menu->parent());
+ if (sub_menu) {
+ menu->setPalette(sub_menu->palette());
+ }
+ }
+ }
+
updateMenu(menu);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/schemecolors.cpp
new/applet-window-appmenu-0.6.0/plugin/schemecolors.cpp
--- old/applet-window-appmenu-0.5.1/plugin/schemecolors.cpp 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/plugin/schemecolors.cpp 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2018 Michail Vourlakos <[email protected]>
+ *
+ * This file is part of the libappletdecoration library
+ *
+ * Latte-Dock is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Latte-Dock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "schemecolors.h"
+
+#include "commontools.h"
+
+#include <QDebug>
+#include <QDir>
+#include <QFileInfo>
+
+#include <KConfigGroup>
+#include <KDirWatch>
+#include <KSharedConfig>
+
+
+SchemeColors::SchemeColors(QObject *parent, QString scheme, bool plasmaTheme) :
+ QObject(parent),
+ m_basedOnPlasmaTheme(plasmaTheme)
+{
+ QString pSchemeFile = possibleSchemeFile(scheme);
+
+ if (QFileInfo(pSchemeFile).exists()) {
+ setSchemeFile(pSchemeFile);
+ m_schemeName = schemeName(pSchemeFile);
+
+ //! track scheme file for changes
+ KDirWatch::self()->addFile(m_schemeFile);
+
+ connect(KDirWatch::self(), &KDirWatch::dirty, this, [ & ](const
QString & path) {
+ if (path == m_schemeFile) {
+ updateScheme();
+ }
+ });
+ }
+
+ updateScheme();
+}
+
+SchemeColors::~SchemeColors()
+{
+}
+
+QColor SchemeColors::backgroundColor() const
+{
+ return m_activeBackgroundColor;
+}
+
+QColor SchemeColors::textColor() const
+{
+ return m_activeTextColor;
+}
+
+QColor SchemeColors::inactiveBackgroundColor() const
+{
+ return m_inactiveBackgroundColor;
+}
+
+QColor SchemeColors::inactiveTextColor() const
+{
+ return m_inactiveTextColor;
+}
+
+QColor SchemeColors::highlightColor() const
+{
+ return m_highlightColor;
+}
+
+QColor SchemeColors::highlightedTextColor() const
+{
+ return m_highlightedTextColor;
+}
+
+QColor SchemeColors::positiveText() const
+{
+ return m_positiveColor;
+}
+
+QColor SchemeColors::neutralText() const
+{
+ return m_neutralText;
+}
+
+QColor SchemeColors::negativeText() const
+{
+ return m_negativeText;
+}
+
+QColor SchemeColors::buttonTextColor() const
+{
+ return m_buttonTextColor;
+}
+
+QColor SchemeColors::buttonBackgroundColor() const
+{
+ return m_buttonBackgroundColor;
+}
+
+QColor SchemeColors::buttonHoverColor() const
+{
+ return m_buttonHoverColor;
+}
+
+QColor SchemeColors::buttonFocusColor() const
+{
+ return m_buttonFocusColor;
+}
+
+QString SchemeColors::schemeName() const
+{
+ return m_schemeName;
+}
+
+QString SchemeColors::SchemeColors::schemeFile() const
+{
+ return m_schemeFile;
+}
+
+void SchemeColors::setSchemeFile(QString file)
+{
+ if (m_schemeFile == file) {
+ return;
+ }
+
+ m_schemeFile = file;
+ emit schemeFileChanged();
+}
+
+QString SchemeColors::possibleSchemeFile(QString scheme)
+{
+ if (scheme.startsWith("/") && scheme.endsWith("colors") &&
QFileInfo(scheme).exists()) {
+ return scheme;
+ }
+
+ QString tempScheme = scheme;
+
+ if (scheme == "kdeglobals") {
+ QString settingsFile = QDir::homePath() + "/.config/kdeglobals";
+
+ if (QFileInfo(settingsFile).exists()) {
+ KSharedConfigPtr filePtr = KSharedConfig::openConfig(settingsFile);
+ KConfigGroup generalGroup = KConfigGroup(filePtr, "General");
+ tempScheme = generalGroup.readEntry("ColorScheme", "");
+ }
+ }
+
+ //! remove all whitespaces and "-" from scheme in order to access
correctly its file
+ QString schemeNameSimplified = tempScheme.simplified().remove("
").remove("-");
+
+ return AppletDecoration::standardPath("color-schemes/" +
schemeNameSimplified + ".colors");
+}
+
+QString SchemeColors::schemeName(QString originalFile)
+{
+ if (!(originalFile.startsWith("/") && originalFile.endsWith("colors") &&
QFileInfo(originalFile).exists())) {
+ return "";
+ }
+
+ QString fileNameNoExt = originalFile;
+
+ int lastSlash = originalFile.lastIndexOf("/");
+
+ if (lastSlash >= 0) {
+ fileNameNoExt.remove(0, lastSlash + 1);
+ }
+
+ if (fileNameNoExt.endsWith(".colors")) {
+ fileNameNoExt.remove(".colors");
+ }
+
+ KSharedConfigPtr filePtr = KSharedConfig::openConfig(originalFile);
+ KConfigGroup generalGroup = KConfigGroup(filePtr, "General");
+
+ return generalGroup.readEntry("Name", fileNameNoExt);
+}
+
+void SchemeColors::updateScheme()
+{
+ if (m_schemeFile.isEmpty() || !QFileInfo(m_schemeFile).exists()) {
+ return;
+ }
+
+ KSharedConfigPtr filePtr = KSharedConfig::openConfig(m_schemeFile);
+ KConfigGroup wmGroup = KConfigGroup(filePtr, "WM");
+ KConfigGroup selGroup = KConfigGroup(filePtr, "Colors:Selection");
+ KConfigGroup viewGroup = KConfigGroup(filePtr, "Colors:View");
+ KConfigGroup windowGroup = KConfigGroup(filePtr, "Colors:Window");
+ KConfigGroup buttonGroup = KConfigGroup(filePtr, "Colors:Button");
+
+ m_activeBackgroundColor = windowGroup.readEntry("BackgroundNormal",
QColor());
+ m_activeTextColor = windowGroup.readEntry("ForegroundNormal", QColor());
+ m_inactiveBackgroundColor = windowGroup.readEntry("BackgroundAlternate",
QColor());
+ m_inactiveTextColor = windowGroup.readEntry("ForegroundInactive",
QColor());
+
+ m_highlightColor = selGroup.readEntry("BackgroundNormal", QColor());
+ m_highlightedTextColor = selGroup.readEntry("ForegroundNormal", QColor());
+
+ m_positiveColor = selGroup.readEntry("ForegroundPositive", QColor());
+ m_neutralText = selGroup.readEntry("ForegroundNeutral", QColor());;
+ m_negativeText = selGroup.readEntry("ForegroundNegative", QColor());
+
+ m_buttonTextColor = buttonGroup.readEntry("ForegroundNormal", QColor());
+ m_buttonBackgroundColor = buttonGroup.readEntry("BackgroundNormal",
QColor());
+ m_buttonHoverColor = buttonGroup.readEntry("DecorationHover", QColor());
+ m_buttonFocusColor = buttonGroup.readEntry("DecorationFocus", QColor());
+
+ emit colorsChanged();
+}
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/schemecolors.h
new/applet-window-appmenu-0.6.0/plugin/schemecolors.h
--- old/applet-window-appmenu-0.5.1/plugin/schemecolors.h 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/plugin/schemecolors.h 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2018 Michail Vourlakos <[email protected]>
+ *
+ * This file is part of the libappletdecoration library
+ *
+ * Latte-Dock is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Latte-Dock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef SCHEMECOLORS_H
+#define SCHEMECOLORS_H
+
+#include <QObject>
+#include <QColor>
+
+class SchemeColors: public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString schemeFile READ schemeFile NOTIFY schemeFileChanged)
+
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY
colorsChanged)
+ Q_PROPERTY(QColor textColor READ textColor NOTIFY colorsChanged)
+ Q_PROPERTY(QColor inactiveBackgroundColor READ inactiveBackgroundColor
NOTIFY colorsChanged)
+ Q_PROPERTY(QColor inactiveTextColor READ inactiveTextColor NOTIFY
colorsChanged)
+
+ Q_PROPERTY(QColor highlightColor READ highlightColor NOTIFY colorsChanged)
+ Q_PROPERTY(QColor highlightedTextColor READ highlightedTextColor NOTIFY
colorsChanged)
+ Q_PROPERTY(QColor positiveText READ positiveText NOTIFY colorsChanged)
+ Q_PROPERTY(QColor neutralText READ neutralText NOTIFY colorsChanged)
+ Q_PROPERTY(QColor negativeText READ negativeText NOTIFY colorsChanged)
+
+ Q_PROPERTY(QColor buttonTextColor READ buttonTextColor NOTIFY
colorsChanged)
+ Q_PROPERTY(QColor buttonBackgroundColor READ buttonBackgroundColor NOTIFY
colorsChanged)
+ Q_PROPERTY(QColor buttonHoverColor READ buttonHoverColor NOTIFY
colorsChanged)
+ Q_PROPERTY(QColor buttonFocusColor READ buttonFocusColor NOTIFY
colorsChanged)
+
+public:
+ SchemeColors(QObject *parent, QString scheme, bool plasmaTheme = false);
+ ~SchemeColors() override;
+
+ QString schemeName() const;
+
+ QString schemeFile() const;
+ void setSchemeFile(QString file);
+
+ QColor backgroundColor() const;
+ QColor textColor() const;
+ QColor inactiveBackgroundColor() const;
+ QColor inactiveTextColor() const;
+ QColor highlightColor() const;
+ QColor highlightedTextColor() const;
+ QColor positiveText() const;
+ QColor neutralText() const;
+ QColor negativeText() const;
+
+ QColor buttonTextColor() const;
+ QColor buttonBackgroundColor() const;
+ QColor buttonHoverColor() const;
+ QColor buttonFocusColor() const;
+
+ static QString possibleSchemeFile(QString scheme);
+ static QString schemeName(QString originalFile);
+
+signals:
+ void colorsChanged();
+ void schemeFileChanged();
+
+private slots:
+ void updateScheme();
+
+private:
+ bool m_basedOnPlasmaTheme{false};
+
+ QString m_schemeName;
+ QString m_schemeFile;
+
+ QColor m_activeBackgroundColor;
+ QColor m_activeTextColor;
+
+ QColor m_inactiveBackgroundColor;
+ QColor m_inactiveTextColor;
+
+ QColor m_highlightColor;
+ QColor m_highlightedTextColor;
+ QColor m_positiveColor;
+ QColor m_neutralText;
+ QColor m_negativeText;
+
+ QColor m_buttonTextColor;
+ QColor m_buttonBackgroundColor;
+ QColor m_buttonHoverColor;
+ QColor m_buttonFocusColor;
+};
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/schemesmodel.cpp
new/applet-window-appmenu-0.6.0/plugin/schemesmodel.cpp
--- old/applet-window-appmenu-0.5.1/plugin/schemesmodel.cpp 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/plugin/schemesmodel.cpp 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2018 Michail Vourlakos <[email protected]>
+ *
+ * This file is part of the libappletdecoration library
+ *
+ * Latte-Dock is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Latte-Dock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "schemesmodel.h"
+
+#include "commontools.h"
+#include "schemecolors.h"
+
+#include <QDebug>
+#include <QDir>
+
+SchemesModel::SchemesModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+ initSchemes();
+}
+
+SchemesModel::~SchemesModel()
+{
+ qDeleteAll(m_schemes);
+}
+
+bool SchemesModel::currentOptionIsShown() const
+{
+ return m_currentOptionIsShown;
+}
+
+void SchemesModel::setCurrentOptionIsShown(bool isShown)
+{
+ if (m_currentOptionIsShown == isShown) {
+ return;
+ }
+
+ m_currentOptionIsShown = isShown;
+ emit currentOptionIsShownChanged();
+}
+
+QVariant SchemesModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid() || index.column() != 0 || index.row() < 0 ||
index.row() >= m_schemes.count()) {
+ return QVariant();
+ }
+
+ const SchemeColors *d = m_schemes[index.row()];
+
+ switch (role) {
+ case Qt::DisplayRole:
+ if (index.row() == 0) {
+ return "Default";
+ }
+
+ if (index.row() == 1 && m_currentOptionIsShown) {
+ return "Current Window";
+ }
+
+ return d->schemeName();
+
+ case Qt::UserRole + 4:
+ if (index.row() == 0) {
+ return "_default_";
+ }
+
+ if (index.row() == 1 && m_currentOptionIsShown) {
+ return "_current_";
+ }
+
+ return d->schemeFile();
+
+ case Qt::UserRole + 5:
+ return d->backgroundColor();
+
+ case Qt::UserRole + 6:
+ return d->textColor();
+ }
+
+ return QVariant();
+}
+
+int SchemesModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid()) {
+ return 0;
+ }
+
+ return m_schemes.count();
+}
+
+QHash< int, QByteArray > SchemesModel::roleNames() const
+{
+ QHash<int, QByteArray> roles({
+ {Qt::DisplayRole, QByteArrayLiteral("display")},
+ {Qt::UserRole + 4, QByteArrayLiteral("file")},
+ {Qt::UserRole + 5, QByteArrayLiteral("backgroundColor")},
+ {Qt::UserRole + 6, QByteArrayLiteral("textColor")}
+ });
+ return roles;
+}
+
+QColor SchemesModel::backgroundOf(const int &index) const
+{
+ if (index>=0 && index<m_schemes.count()) {
+ return m_schemes[index]->backgroundColor();
+ }
+
+ return QColor("transparent");
+}
+
+void SchemesModel::initSchemes()
+{
+ qDeleteAll(m_schemes);
+ m_schemes.clear();
+
+ QString currentSchemePath = SchemeColors::possibleSchemeFile("kdeglobals");
+ insertSchemeInList(currentSchemePath);
+
+ QStringList standardPaths =
AppletDecoration::standardPathsFor("color-schemes");
+
+ QStringList registeredSchemes;
+
+ for(auto path : standardPaths) {
+ QDir directory(path);
+ QStringList tempSchemes = directory.entryList(QStringList() <<
"*.colors" << "*.COLORS", QDir::Files);
+
+ foreach (QString filename, tempSchemes) {
+ if (!registeredSchemes.contains(filename)) {
+ QString fullPath = path + "/" + filename;
+ insertSchemeInList(fullPath);
+ registeredSchemes << filename;
+ }
+ }
+ }
+}
+
+void SchemesModel::insertSchemeInList(QString file)
+{
+ SchemeColors *tempScheme = new SchemeColors(this, file);
+
+ int atPos{0};
+
+ for (int i = 0; i < m_schemes.count(); i++) {
+ SchemeColors *s = m_schemes[i];
+
+ int result = QString::compare(tempScheme->schemeName(),
s->schemeName(), Qt::CaseInsensitive);
+
+ if (result < 0) {
+ atPos = i;
+ break;
+ } else {
+ atPos = i + 1;
+ }
+
+ }
+
+ m_schemes.insert(atPos, tempScheme);
+}
+
+int SchemesModel::indexOf(QString file)
+{
+ if (file.isEmpty() || file == "_default_") {
+ return 0;
+ }
+
+ if (file == "_current_") {
+ return 1;
+ }
+
+ for (int i = 0; i < m_schemes.count(); i++) {
+ SchemeColors *s = m_schemes[i];
+
+ if (s->schemeFile() == file) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/applet-window-appmenu-0.5.1/plugin/schemesmodel.h
new/applet-window-appmenu-0.6.0/plugin/schemesmodel.h
--- old/applet-window-appmenu-0.5.1/plugin/schemesmodel.h 1970-01-01
01:00:00.000000000 +0100
+++ new/applet-window-appmenu-0.6.0/plugin/schemesmodel.h 2019-11-24
08:24:26.000000000 +0100
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2018 Michail Vourlakos <[email protected]>
+ *
+ * This file is part of the libappletdecoration library
+ *
+ * Latte-Dock is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * Latte-Dock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef SCHEMESMODEL_H
+#define SCHEMESMODEL_H
+
+#include <QAbstractListModel>
+
+class SchemeColors;
+
+class SchemesModel : public QAbstractListModel
+{
+ Q_OBJECT
+ Q_PROPERTY(bool currentOptionIsShown READ currentOptionIsShown WRITE
setCurrentOptionIsShown NOTIFY currentOptionIsShownChanged)
+
+public:
+ explicit SchemesModel(QObject *parent = nullptr);
+ virtual ~SchemesModel();
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QHash< int, QByteArray > roleNames() const override;
+
+ bool currentOptionIsShown() const;
+ void setCurrentOptionIsShown(bool isShown);
+
+ Q_INVOKABLE int indexOf(QString file);
+ Q_INVOKABLE QColor backgroundOf(const int &index) const;
+
+signals:
+ void currentOptionIsShownChanged();
+
+private slots:
+ void initSchemes();
+
+private:
+ void insertSchemeInList(QString file);
+
+private:
+ bool m_currentOptionIsShown{false};
+
+ QList<SchemeColors *> m_schemes;
+};
+
+#endif