reformat code

This commit is contained in:
Moody Liu committed 2024-03-07 22:34:09 +00:00
1 parent 9c75774ca9
commit f521b232ca
46 files changed
+1395 -1578

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
---
BasedOnStyle: Microsoft
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AlignConsecutiveMacros: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: false
BreakInheritanceList: BeforeComma
BreakStringLiterals: false
ColumnLimit: 170
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
Cpp11BracedListStyle: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
IncludeBlocks: Regroup
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 4
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
SpaceAfterTemplateKeyword: false
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpacesInParentheses: false
Standard: c++17
StatementMacros: [Q_UNUSED LOG DEBUG]
# ForEachMacros: [list_foreach]
TabWidth: 4
UseTab: Never
+21 -29
View File
@@ -24,55 +24,47 @@
#include "environment.h"
#include "padding.h"
#include "previewbridge.h"
#include "previewclient.h"
#include "previewbutton.h"
#include "previewclient.h"
#include "previewsettings.h"
#include "previewshareddecoration.h"
#include "schemesmodel.h"
#include "themeextended.h"
#include "types.h"
#include "windowsystem.h"
#include "types.h"
#include <QtQml>
#include <QQmlEngine>
#include <KDecoration2/Decoration>
namespace Decoration {
namespace Applet {
#include <QQmlEngine>
#include <QtQml>
void AppletDecorationPlugin::registerTypes(const char *uri)
{
Q_ASSERT(uri == QLatin1String("org.kde.appletdecoration"));
qmlRegisterUncreatableType<Decoration::Applet::Types>(uri, 0, 1, "Types", "Applet decoration types");
qmlRegisterUncreatableType<Types>(uri, 0, 1, "Types", "Applet decoration types");
qmlRegisterType<Decoration::Applet::AuroraeTheme>(uri, 0, 1, "AuroraeTheme");
qmlRegisterType<Decoration::Applet::BridgeItem>(uri, 0, 1, "Bridge");
qmlRegisterType<Decoration::Applet::Settings>(uri, 0, 1, "Settings");
qmlRegisterType<Decoration::Applet::PreviewButtonItem>(uri, 0, 1, "Button");
qmlRegisterType<Decoration::Applet::DecorationsModel>(uri, 0, 1, "DecorationsModel");
qmlRegisterType<Decoration::Applet::SchemesModel>(uri, 0, 1, "ColorsModel");
qmlRegisterType<Decoration::Applet::SharedDecoration>(uri, 0, 1, "SharedDecoration");
qmlRegisterType<Decoration::Applet::ExtendedTheme>(uri, 0, 1, "PlasmaThemeExtended");
qmlRegisterType<Decoration::Applet::WindowSystem>(uri, 0, 1, "WindowSystem");
qmlRegisterType<AuroraeTheme>(uri, 0, 1, "AuroraeTheme");
qmlRegisterType<BridgeItem>(uri, 0, 1, "Bridge");
qmlRegisterType<Settings>(uri, 0, 1, "Settings");
qmlRegisterType<PreviewButtonItem>(uri, 0, 1, "Button");
qmlRegisterType<DecorationsModel>(uri, 0, 1, "DecorationsModel");
qmlRegisterType<SchemesModel>(uri, 0, 1, "ColorsModel");
qmlRegisterType<SharedDecoration>(uri, 0, 1, "SharedDecoration");
qmlRegisterType<ExtendedTheme>(uri, 0, 1, "PlasmaThemeExtended");
qmlRegisterType<WindowSystem>(uri, 0, 1, "WindowSystem");
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
qmlRegisterAnonymousType<Decoration::Applet::Padding>("", 1);
qmlRegisterAnonymousType<Decoration::Applet::PreviewClient>("", 1);
qmlRegisterAnonymousType<Decoration::Applet::PreviewBridge>("", 1);
qmlRegisterAnonymousType<Padding>("", 1);
qmlRegisterAnonymousType<PreviewClient>("", 1);
qmlRegisterAnonymousType<PreviewBridge>("", 1);
qmlRegisterAnonymousType<KDecoration2::Decoration>("", 1);
#else
qmlRegisterType<Decoration::Applet::Padding>();
qmlRegisterType<Decoration::Applet::PreviewClient>();
qmlRegisterType<Decoration::Applet::PreviewBridge>();
qmlRegisterType<Padding>();
qmlRegisterType<PreviewClient>();
qmlRegisterType<PreviewBridge>();
qmlRegisterType<KDecoration2::Decoration>();
#endif
qmlRegisterSingletonType<Decoration::Applet::Environment>(uri, 0, 1, "Environment", &Decoration::Applet::Environment::instance);
}
}
qmlRegisterSingletonType<Environment>(uri, 0, 1, "Environment", &Environment::instance);
}
@@ -22,8 +22,6 @@
#include <QQmlExtensionPlugin>
namespace Decoration {
namespace Applet {
class AppletDecorationPlugin : public QQmlExtensionPlugin
{
Q_OBJECT
@@ -33,8 +31,4 @@ public:
void registerTypes(const char *uri) override;
};
}
}
#endif
+40 -30
View File
@@ -21,27 +21,20 @@
#include "commontools.h"
#include <KConfigGroup>
#include <KDirWatch>
#include <KSharedConfig>
#include <KSvg/Svg>
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <QRgb>
#include <KConfigGroup>
#include <KDirWatch>
#include <KSharedConfig>
#include <KSvg/Svg>
namespace Decoration {
namespace Applet {
static const QString s_auroraeSvgTheme = QStringLiteral("__aurorae__svg__");
static const QString s_auroraerc = QStringLiteral("auroraerc");
static int i_buttonSizeStep = 4;
AuroraeTheme::AuroraeTheme(QObject *parent) :
QObject(parent)
AuroraeTheme::AuroraeTheme(QObject *parent) : QObject(parent)
{
const auto auroraerc = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + s_auroraerc;
@@ -92,7 +85,8 @@ QString AuroraeTheme::theme() const
void AuroraeTheme::setTheme(QString theme)
{
if (m_theme == theme || theme.isEmpty()) {
if (m_theme == theme || theme.isEmpty())
{
return;
}
@@ -139,7 +133,8 @@ QString AuroraeTheme::monochromePrefix() const
void AuroraeTheme::auroraeRCChanged(const QString &filename)
{
if (!filename.endsWith(s_auroraerc)) {
if (!filename.endsWith(s_auroraerc))
{
return;
}
@@ -152,13 +147,20 @@ void AuroraeTheme::updateAurorae(const QString &themeName)
const QString name = themeName.section(separator, -1, -1);
QString path = AppletDecoration::standardPath("aurorae/themes/" + name);
if (QFileInfo(path + "/close.svg").exists()) {
if (QFileInfo(path + "/close.svg").exists())
{
m_themeType = "svg";
} else if (QFileInfo(path + "/close.svgz").exists()) {
}
else if (QFileInfo(path + "/close.svgz").exists())
{
m_themeType = "svgz";
} else if (QFileInfo(path + "/close.png").exists()) {
}
else if (QFileInfo(path + "/close.png").exists())
{
m_themeType = "png";
} else {
}
else
{
m_themeType = "svg";
}
@@ -172,18 +174,22 @@ void AuroraeTheme::loadSettings()
{
const QString rc(m_themePath + "/" + m_themeName + "rc");
if (!QFileInfo(rc).exists()) {
if (!QFileInfo(rc).exists())
{
return;
}
const auto auroraerc = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + s_auroraerc;
if (QFileInfo(auroraerc).exists()) {
if (QFileInfo(auroraerc).exists())
{
KSharedConfigPtr auroraePtr = KSharedConfig::openConfig(auroraerc);
const KConfigGroup themeGroup = KConfigGroup(auroraePtr, m_themeName);
m_buttonSize = static_cast<Types::ButtonSize>(themeGroup.readEntry("ButtonSize", (int) Types::NormalButton));
} else {
}
else
{
m_buttonSize = Types::NormalButton;
}
@@ -199,10 +205,13 @@ void AuroraeTheme::loadSettings()
QString monoprefix = generalGroup.readEntry("MonochromeIconsPrefix", "");
if (!monoprefix.isEmpty()) {
if (!monoprefix.isEmpty())
{
m_hasMonochromeIcons = true;
m_monochromePrefix = (monoprefix == "*" ? "" : monoprefix);
} else {
}
else
{
m_hasMonochromeIcons = false;
m_monochromePrefix = "";
}
@@ -216,7 +225,8 @@ void AuroraeTheme::parseThemeImages()
{
QString origBackgroundFilePath = m_themePath + "/decoration." + m_themeType;
if (!QFileInfo(origBackgroundFilePath).exists()) {
if (!QFileInfo(origBackgroundFilePath).exists())
{
qDebug() << "Aurorare decoration file was not found for theme: " << m_themeName;
return;
}
@@ -228,13 +238,16 @@ void AuroraeTheme::parseThemeImages()
int maxOpacity = -1;
for (int y=49; y>=0; --y) {
for (int x=0; x<50; ++x) {
for (int y = 49; y >= 0; --y)
{
for (int x = 0; x < 50; ++x)
{
QRgb pix = img.pixel(x, y);
int opacity = qAlpha(pix);
//! the equality returns better results for more aurorae themes
if (maxOpacity<=opacity) {
if (maxOpacity <= opacity)
{
maxOpacity = opacity;
m_titleBackgroundColor = QColor(qRed(pix), qGreen(pix), qBlue(pix));
}
@@ -243,6 +256,3 @@ void AuroraeTheme::parseThemeImages()
svg->deleteLater();
}
}
}
+4 -8
View File
@@ -20,13 +20,10 @@
#ifndef AURORAETHEME_H
#define AURORAETHEME_H
#include <QColor>
#include <QObject>
#include "types.h"
namespace Decoration {
namespace Applet {
#include <QColor>
#include <QObject>
class AuroraeTheme : public QObject
{
@@ -52,7 +49,8 @@ class AuroraeTheme: public QObject
public:
explicit AuroraeTheme(QObject *parent = nullptr);
~AuroraeTheme() override;;
~AuroraeTheme() override;
;
QString theme() const;
void setTheme(QString theme);
@@ -108,6 +106,4 @@ private:
QColor m_titleBackgroundColor;
};
}
}
#endif
+38 -52
View File
@@ -24,15 +24,9 @@
#include "buttonsmodel.h"
#include <KLocalizedString>
#include <QFontDatabase>
namespace Decoration {
namespace Applet {
ButtonsModel::ButtonsModel(const QVector< KDecoration2::DecorationButtonType > &buttons, QObject *parent)
: QAbstractListModel(parent)
, m_buttons(buttons)
ButtonsModel::ButtonsModel(const QVector<KDecoration2::DecorationButtonType> &buttons, QObject *parent) : QAbstractListModel(parent), m_buttons(buttons)
{
}
@@ -47,8 +41,9 @@ ButtonsModel::ButtonsModel(QObject *parent)
KDecoration2::DecorationButtonType::ContextHelp,
KDecoration2::DecorationButtonType::Shade,
KDecoration2::DecorationButtonType::KeepBelow,
KDecoration2::DecorationButtonType::KeepAbove
}), parent)
KDecoration2::DecorationButtonType::KeepAbove,
}),
parent)
{
}
@@ -56,7 +51,8 @@ ButtonsModel::~ButtonsModel() = default;
int ButtonsModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
if (parent.isValid())
{
return 0;
}
@@ -65,57 +61,44 @@ int ButtonsModel::rowCount(const QModelIndex &parent) const
static QString buttonToName(KDecoration2::DecorationButtonType type)
{
switch (type) {
case KDecoration2::DecorationButtonType::Menu:
return i18n("Menu");
switch (type)
{
case KDecoration2::DecorationButtonType::Menu: return i18n("Menu");
case KDecoration2::DecorationButtonType::ApplicationMenu:
return i18n("Application menu");
case KDecoration2::DecorationButtonType::ApplicationMenu: return i18n("Application menu");
case KDecoration2::DecorationButtonType::OnAllDesktops:
return i18n("On all desktops");
case KDecoration2::DecorationButtonType::OnAllDesktops: return i18n("On all desktops");
case KDecoration2::DecorationButtonType::Minimize:
return i18n("Minimize");
case KDecoration2::DecorationButtonType::Minimize: return i18n("Minimize");
case KDecoration2::DecorationButtonType::Maximize:
return i18n("Maximize");
case KDecoration2::DecorationButtonType::Maximize: return i18n("Maximize");
case KDecoration2::DecorationButtonType::Close:
return i18n("Close");
case KDecoration2::DecorationButtonType::Close: return i18n("Close");
case KDecoration2::DecorationButtonType::ContextHelp:
return i18n("Context help");
case KDecoration2::DecorationButtonType::ContextHelp: return i18n("Context help");
case KDecoration2::DecorationButtonType::Shade:
return i18n("Shade");
case KDecoration2::DecorationButtonType::Shade: return i18n("Shade");
case KDecoration2::DecorationButtonType::KeepBelow:
return i18n("Keep below");
case KDecoration2::DecorationButtonType::KeepBelow: return i18n("Keep below");
case KDecoration2::DecorationButtonType::KeepAbove:
return i18n("Keep above");
case KDecoration2::DecorationButtonType::KeepAbove: return i18n("Keep above");
default:
return QString();
default: return QString();
}
}
QVariant ButtonsModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() ||
index.row() < 0 ||
index.row() >= m_buttons.count() ||
index.column() != 0) {
if (!index.isValid() || index.row() < 0 || index.row() >= m_buttons.count() || index.column() != 0)
{
return QVariant();
}
switch (role) {
case Qt::DisplayRole:
return buttonToName(m_buttons.at(index.row()));
switch (role)
{
case Qt::DisplayRole: return buttonToName(m_buttons.at(index.row()));
case Qt::UserRole:
return QVariant::fromValue(int(m_buttons.at(index.row())));
case Qt::UserRole: return QVariant::fromValue(int(m_buttons.at(index.row())));
}
return QVariant();
@@ -131,7 +114,8 @@ QHash< int, QByteArray > ButtonsModel::roleNames() const
void ButtonsModel::remove(int row)
{
if (row < 0 || row >= m_buttons.count()) {
if (row < 0 || row >= m_buttons.count())
{
return;
}
@@ -142,7 +126,8 @@ void ButtonsModel::remove(int row)
void ButtonsModel::down(int index)
{
if (m_buttons.count() < 2 || index == m_buttons.count() - 1) {
if (m_buttons.count() < 2 || index == m_buttons.count() - 1)
{
return;
}
@@ -153,7 +138,8 @@ void ButtonsModel::down(int index)
void ButtonsModel::up(int index)
{
if (m_buttons.count() < 2 || index == 0) {
if (m_buttons.count() < 2 || index == 0)
{
return;
}
@@ -178,24 +164,24 @@ void ButtonsModel::add(int index, int type)
void ButtonsModel::move(int sourceIndex, int targetIndex)
{
if (sourceIndex == qMax(0, targetIndex)) {
if (sourceIndex == qMax(0, targetIndex))
{
return;
}
/* When moving an item down, the destination index needs to be incremented
by one, as explained in the documentation:
http://doc.qt.nokia.com/qabstractitemmodel.html#beginMoveRows */
if (targetIndex > sourceIndex) {
if (targetIndex > sourceIndex)
{
// Row will be moved down
beginMoveRows(QModelIndex(), sourceIndex, sourceIndex, QModelIndex(), targetIndex + 1);
} else {
}
else
{
beginMoveRows(QModelIndex(), sourceIndex, sourceIndex, QModelIndex(), qMax(0, targetIndex));
}
m_buttons.move(sourceIndex, qMax(0, targetIndex));
endMoveRows();
}
}
}
+2 -8
View File
@@ -27,9 +27,6 @@
#include <KDecoration2/DecorationButton>
#include <QAbstractListModel>
namespace Decoration {
namespace Applet {
class PreviewBridge;
class ButtonsModel : public QAbstractListModel
@@ -43,7 +40,8 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QHash<int, QByteArray> roleNames() const override;
QVector< KDecoration2::DecorationButtonType > buttons() const {
QVector<KDecoration2::DecorationButtonType> buttons() const
{
return m_buttons;
}
@@ -59,8 +57,4 @@ private:
QVector<KDecoration2::DecorationButtonType> m_buttons;
};
}
}
#endif
+24 -16
View File
@@ -20,34 +20,39 @@
#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) {
if (localfirst)
{
for (const auto &pt : paths)
{
QString ptF = pt + "/" + subPath;
if (QFileInfo(ptF).exists()) {
if (QFileInfo(ptF).exists())
{
return ptF;
}
}
} else {
for (int i=paths.count()-1; i>=0; i--) {
}
else
{
for (int i = paths.count() - 1; i >= 0; i--)
{
QString ptF = paths[i] + "/" + subPath;
if (QFileInfo(ptF).exists()) {
if (QFileInfo(ptF).exists())
{
return ptF;
}
}
}
//! in any case that above fails
if (QFileInfo("/usr/share/"+subPath).exists()) {
if (QFileInfo("/usr/share/" + subPath).exists())
{
return "/usr/share/" + subPath;
}
@@ -58,12 +63,16 @@ QStringList standardPaths(bool localfirst)
{
QStringList paths = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
if (localfirst) {
if (localfirst)
{
return paths;
} else {
}
else
{
QStringList reversed;
for (int i=paths.count()-1; i>=0; i--) {
for (int i = paths.count() - 1; i >= 0; i--)
{
reversed << paths[i];
}
@@ -77,11 +86,10 @@ QStringList standardPathsFor(QString subPath, bool localfirst)
QString separator = subPath.startsWith("/") ? "" : "/";
for (int i=0; i<paths.count(); ++i) {
for (int i = 0; i < paths.count(); ++i)
{
paths[i] = paths[i] + separator + subPath;
}
return paths;
}
}
-3
View File
@@ -21,12 +21,9 @@
#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);
}
+30 -43
View File
@@ -22,24 +22,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "decorationpalette.h"
#include <KColorScheme>
#include <KConfigGroup>
#include <KSharedConfig>
#include <KColorScheme>
#include <QDebug>
#include <QPalette>
#include <QFileInfo>
#include <QPalette>
#include <QStandardPaths>
namespace Decoration {
namespace Applet {
DecorationPalette::DecorationPalette(const QString &colorScheme)
: m_colorScheme(QFileInfo(colorScheme).isAbsolute()
? colorScheme
: QStandardPaths::locate(QStandardPaths::GenericConfigLocation, colorScheme))
: m_colorScheme(QFileInfo(colorScheme).isAbsolute() ? colorScheme : QStandardPaths::locate(QStandardPaths::GenericConfigLocation, colorScheme))
{
if (m_colorScheme.isEmpty() && colorScheme == QStringLiteral("kdeglobals"))
{
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"));
@@ -50,7 +45,9 @@ DecorationPalette::DecorationPalette(const QString &colorScheme)
}
m_watcher.addPath(m_colorScheme);
connect(&m_watcher, &QFileSystemWatcher::fileChanged, [this]() {
connect(&m_watcher, &QFileSystemWatcher::fileChanged,
[this]()
{
m_watcher.addPath(m_colorScheme);
update();
emit changed();
@@ -66,51 +63,44 @@ bool DecorationPalette::isValid() const
QColor DecorationPalette::color(KDecoration2::ColorGroup group, KDecoration2::ColorRole role) const
{
using KDecoration2::ColorRole;
using KDecoration2::ColorGroup;
using KDecoration2::ColorRole;
switch (role) {
switch (role)
{
case ColorRole::Frame:
switch (group) {
case ColorGroup::Active:
return m_activeFrameColor;
switch (group)
{
case ColorGroup::Active: return m_activeFrameColor;
case ColorGroup::Inactive:
return m_inactiveFrameColor;
case ColorGroup::Inactive: return m_inactiveFrameColor;
default:
return QColor();
default: return QColor();
}
case ColorRole::TitleBar:
switch (group) {
case ColorGroup::Active:
return m_activeTitleBarColor;
switch (group)
{
case ColorGroup::Active: return m_activeTitleBarColor;
case ColorGroup::Inactive:
return m_inactiveTitleBarColor;
case ColorGroup::Inactive: return m_inactiveTitleBarColor;
default:
return QColor();
default: return QColor();
}
case ColorRole::Foreground:
switch (group) {
case ColorGroup::Active:
return m_activeForegroundColor;
switch (group)
{
case ColorGroup::Active: return m_activeForegroundColor;
case ColorGroup::Inactive:
return m_inactiveForegroundColor;
case ColorGroup::Inactive: return m_inactiveForegroundColor;
case ColorGroup::Warning:
return m_warningForegroundColor;
case ColorGroup::Warning: return m_warningForegroundColor;
default:
return QColor();
default: return QColor();
}
default:
return QColor();
default: return QColor();
}
}
@@ -124,7 +114,8 @@ void DecorationPalette::update()
auto config = KSharedConfig::openConfig(m_colorScheme, KConfig::SimpleConfig);
KConfigGroup wmConfig(config, QStringLiteral("WM"));
if (!wmConfig.exists() && !m_colorScheme.endsWith(QStringLiteral("/kdeglobals"))) {
if (!wmConfig.exists() && !m_colorScheme.endsWith(QStringLiteral("/kdeglobals")))
{
qDebug() << "Invalid color scheme" << m_colorScheme << "lacks WM group";
return;
}
@@ -145,8 +136,4 @@ void DecorationPalette::update()
KConfigGroup windowColorsConfig(config, QStringLiteral("Colors:Window"));
m_warningForegroundColor = windowColorsConfig.readEntry("ForegroundNegative", QColor(237, 21, 2));
}
}
}
+1 -6
View File
@@ -27,9 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QFileSystemWatcher>
#include <QPalette>
namespace Decoration {
namespace Applet {
class DecorationPalette : public QObject
{
Q_OBJECT
@@ -43,6 +40,7 @@ public:
Q_SIGNALS:
void changed();
private:
void update();
@@ -62,7 +60,4 @@ private:
QColor m_warningForegroundColor;
};
}
}
#endif
+55 -68
View File
@@ -22,26 +22,19 @@
*/
#include "decorationsmodel.h"
// KDecoration2
#include <KConfigGroup>
#include <KDecoration2/Decoration>
#include <KDecoration2/DecorationSettings>
#include <KDecoration2/DecorationThemeProvider>
// KDE
#include <KDirWatch>
#include <KSharedConfig>
#include <Plasma/PluginLoader>
#include <KPluginFactory>
#include <KSharedConfig>
#include <KConfigGroup>
// Qt
#include <Plasma/PluginLoader>
#include <QDebug>
#include <QDir>
#include <iostream>
namespace Decoration {
namespace Applet {
static const QString s_defaultPlugin = QStringLiteral("org.kde.breeze");
static const QString s_defaultTheme;
static const QString s_auroraePlugin = QStringLiteral("org.kde.kwin.aurorae");
@@ -50,14 +43,12 @@ static const QString s_auroraeSvgTheme = QStringLiteral("__aurorae__svg__");
static const QString s_kwinrc = QStringLiteral("kwinrc");
static const QString s_pluginName = QStringLiteral("org.kde.kdecoration2");
DecorationsModel::DecorationsModel(QObject *parent)
: QAbstractListModel(parent)
DecorationsModel::DecorationsModel(QObject *parent) : QAbstractListModel(parent)
{
init();
loadCurrents();
const auto kwinRc = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) +
QLatin1Char('/') + s_kwinrc;
const auto kwinRc = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + s_kwinrc;
KDirWatch::self()->addFile(kwinRc);
@@ -79,7 +70,8 @@ QString DecorationsModel::currentPlugin() const
void DecorationsModel::setCurrentPlugin(QString plugin)
{
if (m_currentPlugin == plugin) {
if (m_currentPlugin == plugin)
{
return;
}
@@ -94,7 +86,8 @@ QString DecorationsModel::currentTheme() const
void DecorationsModel::setCurrentTheme(QString theme)
{
if (m_currentTheme == theme) {
if (m_currentTheme == theme)
{
return;
}
@@ -104,7 +97,8 @@ void DecorationsModel::setCurrentTheme(QString theme)
int DecorationsModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
if (parent.isValid())
{
return 0;
}
@@ -113,27 +107,24 @@ int DecorationsModel::rowCount(const QModelIndex &parent) const
QVariant DecorationsModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.column() != 0 || index.row() < 0 || index.row() >= int(m_plugins.size())) {
if (!index.isValid() || index.column() != 0 || index.row() < 0 || index.row() >= int(m_plugins.size()))
{
return QVariant();
}
const Data &d = m_plugins.at(index.row());
switch (role) {
case Qt::DisplayRole:
return d.visibleName;
switch (role)
{
case Qt::DisplayRole: return d.visibleName;
case Qt::UserRole +4:
return d.pluginName;
case Qt::UserRole + 4: return d.pluginName;
case Qt::UserRole +5:
return d.themeName;
case Qt::UserRole + 5: return d.themeName;
case Qt::UserRole +6:
return d.isAuroraeTheme;
case Qt::UserRole + 6: return d.isAuroraeTheme;
case Qt::UserRole +7:
return d.configuration;
case Qt::UserRole + 7: return d.configuration;
}
return QVariant();
@@ -141,13 +132,11 @@ QVariant DecorationsModel::data(const QModelIndex &index, int role) const
QHash<int, QByteArray> DecorationsModel::roleNames() const
{
QHash<int, QByteArray> roles({
{Qt::DisplayRole, QByteArrayLiteral("display")},
QHash<int, QByteArray> roles({ { Qt::DisplayRole, QByteArrayLiteral("display") },
{ Qt::UserRole + 4, QByteArrayLiteral("plugin") },
{ Qt::UserRole + 5, QByteArrayLiteral("theme") },
{ Qt::UserRole + 6, QByteArrayLiteral("isAuroraeTheme") },
{Qt::UserRole + 7, QByteArrayLiteral("configureable")}
});
{ Qt::UserRole + 7, QByteArrayLiteral("configureable") } });
return roles;
}
@@ -155,7 +144,8 @@ static bool isThemeEngine(const QVariantMap &decoSettingsMap)
{
auto it = decoSettingsMap.find(QStringLiteral("themes"));
if (it == decoSettingsMap.end()) {
if (it == decoSettingsMap.end())
{
return false;
}
@@ -166,7 +156,8 @@ static bool isConfigureable(const QVariantMap &decoSettingsMap)
{
auto it = decoSettingsMap.find(QStringLiteral("kcmodule"));
if (it == decoSettingsMap.end()) {
if (it == decoSettingsMap.end())
{
return false;
}
@@ -177,7 +168,8 @@ static QString themeListKeyword(const QVariantMap &decoSettingsMap)
{
auto it = decoSettingsMap.find(QStringLiteral("themeListKeyword"));
if (it == decoSettingsMap.end()) {
if (it == decoSettingsMap.end())
{
return QString();
}
@@ -188,7 +180,8 @@ static QString findKNewStuff(const QVariantMap &decoSettingsMap)
{
auto it = decoSettingsMap.find(QStringLiteral("KNewStuff"));
if (it == decoSettingsMap.end()) {
if (it == decoSettingsMap.end())
{
return QString();
}
@@ -200,18 +193,22 @@ void DecorationsModel::init()
beginResetModel();
m_plugins.clear();
const auto plugins = KPluginMetaData::findPlugins(s_pluginName);
for (const auto &info : plugins) {
for (const auto &info : plugins)
{
const auto decoSettingsMap = info.rawData().value("org.kde.kdecoration2").toObject().toVariantMap();
bool config = false;
const QString &kns = findKNewStuff(decoSettingsMap);
if (!kns.isEmpty() && !m_knsProvides.contains(kns)) {
if (!kns.isEmpty() && !m_knsProvides.contains(kns))
{
m_knsProvides.insert(kns, info.name().isEmpty() ? info.pluginId() : info.name());
}
if (isThemeEngine(decoSettingsMap)) {
if (isThemeEngine(decoSettingsMap))
{
const QString keyword = themeListKeyword(decoSettingsMap);
if (keyword.isNull()) {
if (keyword.isNull())
{
// We cannot list the themes
continue;
}
@@ -257,8 +254,8 @@ void DecorationsModel::loadCurrents()
bool exists{ false };
bool isAur{ isAurorae(plugin, theme) };
if ((!isAur && pluginExists(plugin))
|| (isAur && decorationExists(plugin, theme))) {
if ((!isAur && pluginExists(plugin)) || (isAur && decorationExists(plugin, theme)))
{
exists = true;
}
@@ -268,7 +265,8 @@ void DecorationsModel::loadCurrents()
void DecorationsModel::kwinChanged(const QString &filename)
{
if (!filename.endsWith(s_kwinrc)) {
if (!filename.endsWith(s_kwinrc))
{
return;
}
@@ -277,12 +275,10 @@ void DecorationsModel::kwinChanged(const QString &filename)
bool DecorationsModel::isAurorae(const QString &plugin, const QString &theme)
{
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(),
[plugin, theme](const Data & d) {
return d.pluginName == plugin && d.themeName == theme;
});
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(), [plugin, theme](const Data &d) { return d.pluginName == plugin && d.themeName == theme; });
if (it == m_plugins.cend()) {
if (it == m_plugins.cend())
{
return false;
}
@@ -291,12 +287,10 @@ bool DecorationsModel::isAurorae(const QString &plugin, const QString &theme)
bool DecorationsModel::decorationExists(const QString &plugin, const QString &theme)
{
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(),
[plugin, theme](const Data & d) {
return d.pluginName == plugin && d.themeName == theme;
});
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(), [plugin, theme](const Data &d) { return d.pluginName == plugin && d.themeName == theme; });
if (it == m_plugins.cend()) {
if (it == m_plugins.cend())
{
return false;
}
@@ -305,12 +299,10 @@ bool DecorationsModel::decorationExists(const QString &plugin, const QString &th
bool DecorationsModel::pluginExists(const QString &plugin)
{
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(),
[plugin](const Data & d) {
return d.pluginName == plugin;
});
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(), [plugin](const Data &d) { return d.pluginName == plugin; });
if (it == m_plugins.cend()) {
if (it == m_plugins.cend())
{
return false;
}
@@ -319,19 +311,14 @@ bool DecorationsModel::pluginExists(const QString &plugin)
QModelIndex DecorationsModel::findDecoration(const QString &pluginName, const QString &themeName) const
{
auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(),
[pluginName, themeName](const Data & d) {
return d.pluginName == pluginName && d.themeName == themeName;
}
);
auto it =
std::find_if(m_plugins.cbegin(), m_plugins.cend(), [pluginName, themeName](const Data &d) { return d.pluginName == pluginName && d.themeName == themeName; });
if (it == m_plugins.cend()) {
if (it == m_plugins.cend())
{
return QModelIndex();
}
const auto distance = std::distance(m_plugins.cbegin(), it);
return createIndex(distance, 0);
}
}
}
+2 -8
View File
@@ -26,9 +26,6 @@
#include <QAbstractListModel>
namespace Decoration {
namespace Applet {
class DecorationsModel : public QAbstractListModel
{
Q_OBJECT
@@ -46,7 +43,8 @@ public:
QModelIndex findDecoration(const QString &pluginName, const QString &themeName = QString()) const;
QMap<QString, QString> knsProviders() const {
QMap<QString, QString> knsProviders() const
{
return m_knsProvides;
}
@@ -72,7 +70,6 @@ private slots:
void setCurrentTheme(QString theme);
private:
bool pluginExists(const QString &plugin);
private:
@@ -92,7 +89,4 @@ private:
QMap<QString, QString> m_knsProvides;
};
}
}
#endif
+11 -18
View File
@@ -19,18 +19,11 @@
#include "environment.h"
// Qt
#include <QDebug>
#include <QProcess>
// Plasma
#include <plasma_version.h>
namespace Decoration {
namespace Applet {
Environment::Environment(QObject *parent)
: QObject(parent)
Environment::Environment(QObject *parent) : QObject(parent)
{
}
@@ -46,7 +39,8 @@ uint Environment::frameworksVersion() const
uint Environment::plasmaDesktopVersion()
{
if (m_plasmaDesktopVersion == -1) {
if (m_plasmaDesktopVersion == -1)
{
m_plasmaDesktopVersion = identifyPlasmaDesktopVersion();
}
@@ -68,23 +62,25 @@ uint Environment::identifyPlasmaDesktopVersion()
QStringList stringSplit = output.split(" ");
if (stringSplit.count() >= 2) {
if (stringSplit.count() >= 2)
{
qDebug() << " /////////////////////////";
QString cleanVersionString = stringSplit[1].remove("\n");
QStringList plasmaDesktopVersionParts = cleanVersionString.split(".");
if (plasmaDesktopVersionParts.count() == 3) {
if (plasmaDesktopVersionParts.count() == 3)
{
uint maj = plasmaDesktopVersionParts[0].toUInt();
uint min = plasmaDesktopVersionParts[1].toUInt();
uint rel = plasmaDesktopVersionParts[2].toUInt();
if (maj > 0) {
if (maj > 0)
{
uint desktopVersion = makeVersion(maj, min, rel);
QString message("Plasma Desktop version: " + QString::number(maj) + "."
+ QString::number(min) + "." + QString::number(rel)
+ " (" + QString::number(desktopVersion) + ")");
QString message("Plasma Desktop version: " + QString::number(maj) + "." + QString::number(min) + "." + QString::number(rel) + " (" +
QString::number(desktopVersion) + ")");
qDebug() << message;
qDebug() << " /////////////////////////";
@@ -97,6 +93,3 @@ uint Environment::identifyPlasmaDesktopVersion()
return 0;
}
}
} //end of namespace
+1 -8
View File
@@ -20,13 +20,9 @@
#ifndef ENVIRONMENT_H
#define ENVIRONMENT_H
// Qt
#include <QJSEngine>
#include <QObject>
#include <QQmlEngine>
#include <QJSEngine>
namespace Decoration {
namespace Applet {
class Environment final : public QObject
{
@@ -70,7 +66,4 @@ private:
int m_plasmaDesktopVersion{ -1 };
};
}
}
#endif // ENVIRONMENT_H
+9 -12
View File
@@ -22,11 +22,7 @@
#include "padding.h"
namespace Decoration {
namespace Applet {
Padding::Padding(QObject *parent) :
QObject(parent)
Padding::Padding(QObject *parent) : QObject(parent)
{
}
@@ -41,7 +37,8 @@ int Padding::top() const
void Padding::setTop(int top)
{
if (m_top == top) {
if (m_top == top)
{
return;
}
@@ -56,7 +53,8 @@ int Padding::left() const
void Padding::setLeft(int left)
{
if (m_left == left) {
if (m_left == left)
{
return;
}
@@ -71,7 +69,8 @@ int Padding::bottom()const
void Padding::setBottom(int bottom)
{
if (m_bottom == bottom) {
if (m_bottom == bottom)
{
return;
}
@@ -86,13 +85,11 @@ int Padding::right() const
void Padding::setRight(int right)
{
if (m_right == right) {
if (m_right == right)
{
return;
}
m_right = right;
emit rightChanged();
}
}
}
-6
View File
@@ -25,9 +25,6 @@
#include <QObject>
namespace Decoration {
namespace Applet {
class Padding : public QObject
{
Q_OBJECT
@@ -66,7 +63,4 @@ private:
int m_right{ 0 };
};
}
}
#endif
+30 -34
View File
@@ -27,17 +27,15 @@
#include "previewclient.h"
#include "previewsettings.h"
#include <KCModule>
#include <KDecoration2/DecoratedClient>
#include <KDecoration2/Decoration>
#include <KCModule>
#include <KDirWatch>
#include <KPluginMetaData>
#include <KPluginFactory>
#include <QDebug>
#include <KPluginMetaData>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDebug>
#include <QDialog>
#include <QDialogButtonBox>
#include <QPushButton>
@@ -46,22 +44,14 @@
#include <kpluginfactory.h>
#include <kpluginmetadata.h>
namespace Decoration {
namespace Applet {
static const QString s_pluginName = QStringLiteral("org.kde.kdecoration2");
static const QString s_breezerc = QStringLiteral("breezerc");
PreviewBridge::PreviewBridge(QObject *parent)
: KDecoration2::DecorationBridge(parent)
, m_lastCreatedClient(nullptr)
, m_lastCreatedSettings(nullptr)
, m_valid(false)
PreviewBridge::PreviewBridge(QObject *parent) : KDecoration2::DecorationBridge(parent), m_lastCreatedClient(nullptr), m_lastCreatedSettings(nullptr), m_valid(false)
{
connect(this, &PreviewBridge::pluginChanged, this, &PreviewBridge::createFactory);
const auto breezeRc = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) +
QLatin1Char('/') + s_breezerc;
const auto breezeRc = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + s_breezerc;
KDirWatch::self()->addFile(breezeRc);
@@ -97,7 +87,8 @@ void PreviewBridge::unregisterButton(PreviewButtonItem *button)
void PreviewBridge::setPlugin(const QString &plugin)
{
if (m_plugin == plugin) {
if (m_plugin == plugin)
{
return;
}
@@ -113,7 +104,8 @@ QString PreviewBridge::theme() const
void PreviewBridge::setTheme(const QString &theme)
{
if (m_theme == theme) {
if (m_theme == theme)
{
return;
}
@@ -130,7 +122,8 @@ void PreviewBridge::createFactory()
{
m_factory.clear();
if (m_plugin.isNull()) {
if (m_plugin.isNull())
{
setValid(false);
qDebug() << "Plugin not set";
return;
@@ -153,7 +146,8 @@ bool PreviewBridge::isValid() const
void PreviewBridge::setValid(bool valid)
{
if (m_valid == valid) {
if (m_valid == valid)
{
return;
}
@@ -163,13 +157,15 @@ void PreviewBridge::setValid(bool valid)
KDecoration2::Decoration *PreviewBridge::createDecoration(QObject *parent)
{
if (!m_valid) {
if (!m_valid)
{
return nullptr;
}
QVariantMap args({ { QStringLiteral("bridge"), QVariant::fromValue(this) } });
if (!m_theme.isNull()) {
if (!m_theme.isNull())
{
args.insert(QStringLiteral("theme"), m_theme);
}
@@ -178,17 +174,20 @@ KDecoration2::Decoration *PreviewBridge::createDecoration(QObject *parent)
KDecoration2::DecorationButton *PreviewBridge::createButton(KDecoration2::Decoration *decoration, KDecoration2::DecorationButtonType type, QObject *parent)
{
if (!m_valid) {
if (!m_valid)
{
return nullptr;
}
auto button = m_factory->create<KDecoration2::DecorationButton>(parent, QVariantList({ QVariant::fromValue(type), QVariant::fromValue(decoration) }));
if (!button) {
if (!button)
{
// //! support decorations that have not been updated yet to KWin 5.23 decoration plugin approach
// button = m_factory->create<KDecoration2::DecorationButton>(QStringLiteral("button"), parent, QVariantList({QVariant::fromValue(type), QVariant::fromValue(decoration)}));
// if (button) {
// qWarning() << "Loading a KDecoration2::DecorationButton using the button keyword is deprecated in KWin 5.23, register the plugin without a keyword instead" << m_plugin;
// button = m_factory->create<KDecoration2::DecorationButton>(QStringLiteral("button"), parent, QVariantList({QVariant::fromValue(type),
// QVariant::fromValue(decoration)})); if (button) {
// qWarning() << "Loading a KDecoration2::DecorationButton using the button keyword is deprecated in KWin 5.23, register the plugin without a keyword
// instead" << m_plugin;
// }
qWarning() << "removed button" << (int) type << "from" << m_plugin;
@@ -199,7 +198,8 @@ KDecoration2::DecorationButton *PreviewBridge::createButton(KDecoration2::Decora
void PreviewBridge::settingsFileChanged(const QString &filename)
{
if (!filename.endsWith(s_breezerc)) {
if (!filename.endsWith(s_breezerc))
{
return;
}
@@ -208,14 +208,13 @@ void PreviewBridge::settingsFileChanged(const QString &filename)
void PreviewBridge::reconfigure()
{
if (m_lastCreatedSettings) {
if (m_lastCreatedSettings)
{
emit m_lastCreatedSettings->decorationSettings()->reconfigured();
}
}
BridgeItem::BridgeItem(QObject *parent)
: QObject(parent)
, m_bridge(new PreviewBridge())
BridgeItem::BridgeItem(QObject *parent) : QObject(parent), m_bridge(new PreviewBridge())
{
connect(m_bridge, &PreviewBridge::themeChanged, this, &BridgeItem::themeChanged);
connect(m_bridge, &PreviewBridge::pluginChanged, this, &BridgeItem::pluginChanged);
@@ -226,6 +225,3 @@ BridgeItem::~BridgeItem()
{
m_bridge->deleteLater();
}
}
}
+19 -19
View File
@@ -24,17 +24,13 @@
#ifndef KDECORATIONS_PREVIEW_BRIDGE_H
#define KDECORATIONS_PREVIEW_BRIDGE_H
#include <KDecoration2/Private/DecorationBridge>
#include <KDecoration2/DecorationButton>
#include <KDecoration2/Private/DecorationBridge>
#include <QList>
#include <QPointer>
class KPluginFactory;
namespace Decoration {
namespace Applet {
class PreviewButtonItem;
class PreviewClient;
class PreviewSettings;
@@ -52,10 +48,12 @@ public:
std::unique_ptr<KDecoration2::DecoratedClientPrivate> createClient(KDecoration2::DecoratedClient *client, KDecoration2::Decoration *decoration) override;
std::unique_ptr<KDecoration2::DecorationSettingsPrivate> settings(KDecoration2::DecorationSettings *parent) override;
PreviewClient *lastCreatedClient() {
PreviewClient *lastCreatedClient()
{
return m_lastCreatedClient;
}
PreviewSettings *lastCreatedSettings() {
PreviewSettings *lastCreatedSettings()
{
return m_lastCreatedSettings;
}
@@ -100,29 +98,35 @@ class BridgeItem : public QObject
Q_PROPERTY(QString plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
Q_PROPERTY(Decoration::Applet::PreviewBridge *bridge READ bridge CONSTANT)
Q_PROPERTY(PreviewBridge *bridge READ bridge CONSTANT)
public:
explicit BridgeItem(QObject *parent = nullptr);
virtual ~BridgeItem();
void setPlugin(const QString &plugin) {
void setPlugin(const QString &plugin)
{
m_bridge->setPlugin(plugin);
}
QString plugin() const {
QString plugin() const
{
return m_bridge->plugin();
}
void setTheme(const QString &theme) {
void setTheme(const QString &theme)
{
m_bridge->setTheme(theme);
}
QString theme() const {
QString theme() const
{
return m_bridge->theme();
}
bool isValid() const {
bool isValid() const
{
return m_bridge->isValid();
}
PreviewBridge *bridge() const {
PreviewBridge *bridge() const
{
return m_bridge;
}
@@ -133,12 +137,8 @@ Q_SIGNALS:
private:
PreviewBridge *m_bridge;
};
}
}
Q_DECLARE_METATYPE(Decoration::Applet::PreviewBridge *)
Q_DECLARE_METATYPE(PreviewBridge *)
#endif
+110 -85
View File
@@ -29,20 +29,13 @@
#include "previewsettings.h"
#include "previewshareddecoration.h"
#include <KDecoration2/Decoration>
#include <KDecoration2/DecoratedClient>
#include <KDecoration2/Decoration>
#include <QDebug>
#include <QEvent>
#include <QPainter>
namespace Decoration {
namespace Applet {
PreviewButtonItem::PreviewButtonItem(QQuickItem *parent)
: QQuickPaintedItem(parent),
m_scheme("kdeglobals"),
m_padding(new Padding(this))
PreviewButtonItem::PreviewButtonItem(QQuickItem *parent) : QQuickPaintedItem(parent), m_scheme("kdeglobals"), m_padding(new Padding(this))
{
setAcceptHoverEvents(true);
setFiltersChildMouseEvents(true);
@@ -71,11 +64,13 @@ PreviewButtonItem::PreviewButtonItem(QQuickItem *parent)
PreviewButtonItem::~PreviewButtonItem()
{
if (m_bridge) {
if (m_bridge)
{
m_bridge->unregisterButton(this);
}
if (m_button) {
if (m_button)
{
m_button->deleteLater();
}
}
@@ -87,13 +82,15 @@ bool PreviewButtonItem::isActive() const
void PreviewButtonItem::setIsActive(bool active)
{
if (m_isActive == active) {
if (m_isActive == active)
{
return;
}
m_isActive = active;
if (m_client) {
if (m_client)
{
m_client->setActive(m_isActive);
}
@@ -107,18 +104,23 @@ bool PreviewButtonItem::isMaximized() const
void PreviewButtonItem::setIsMaximized(bool maximized)
{
if (m_isMaximized == maximized) {
if (m_isMaximized == maximized)
{
return;
}
m_isMaximized = maximized;
if (m_client && m_button && m_type == KDecoration2::DecorationButtonType::Maximize) {
if (m_client && m_button && m_type == KDecoration2::DecorationButtonType::Maximize)
{
if (m_isMaximized) {
if (m_isMaximized)
{
m_client->setMaximizedVertically(true);
m_client->setMaximizedHorizontally(true);
} else {
}
else
{
m_client->setMaximizedVertically(false);
m_client->setMaximizedHorizontally(false);
}
@@ -134,16 +136,21 @@ bool PreviewButtonItem::isOnAllDesktops() const
void PreviewButtonItem::setIsOnAllDesktops(bool onalldesktops)
{
if (m_isOnAllDesktops == onalldesktops) {
if (m_isOnAllDesktops == onalldesktops)
{
return;
}
m_isOnAllDesktops = onalldesktops;
if (m_client && m_button && m_type == KDecoration2::DecorationButtonType::OnAllDesktops) {
if (m_isOnAllDesktops) {
if (m_client && m_button && m_type == KDecoration2::DecorationButtonType::OnAllDesktops)
{
if (m_isOnAllDesktops)
{
m_client->setDesktop(-1);
} else {
}
else
{
m_client->setDesktop(1);
}
}
@@ -158,16 +165,21 @@ bool PreviewButtonItem::isKeepAbove() const
void PreviewButtonItem::setIsKeepAbove(bool keepabove)
{
if (m_isKeepAbove == keepabove){
if (m_isKeepAbove == keepabove)
{
return;
}
m_isKeepAbove = keepabove;
if (m_client && m_button && m_type == KDecoration2::DecorationButtonType::KeepAbove) {
if (m_isKeepAbove){
if (m_client && m_button && m_type == KDecoration2::DecorationButtonType::KeepAbove)
{
if (m_isKeepAbove)
{
m_client->setKeepAbove(true);
} else {
}
else
{
m_client->setKeepAbove(false);
}
}
@@ -192,7 +204,8 @@ void PreviewButtonItem::setType(int type)
void PreviewButtonItem::setType(KDecoration2::DecorationButtonType type)
{
if (m_type == type) {
if (m_type == type)
{
return;
}
@@ -207,13 +220,15 @@ QString PreviewButtonItem::scheme() const
void PreviewButtonItem::setScheme(QString scheme)
{
if (m_scheme == scheme) {
if (m_scheme == scheme)
{
return;
}
m_scheme = scheme.isEmpty() ? "kdeglobals" : scheme;
if (m_client) {
if (m_client)
{
m_client->setColorScheme(m_scheme);
qDebug() << "buttons scheme update to:" << m_scheme;
}
@@ -228,17 +243,20 @@ PreviewBridge *PreviewButtonItem::bridge() const
void PreviewButtonItem::setBridge(PreviewBridge *bridge)
{
if (m_bridge == bridge) {
if (m_bridge == bridge)
{
return;
}
if (m_bridge) {
if (m_bridge)
{
m_bridge->unregisterButton(this);
}
m_bridge = bridge;
if (m_bridge) {
if (m_bridge)
{
m_bridge->registerButton(this);
}
@@ -257,7 +275,8 @@ int PreviewButtonItem::localX() const
void PreviewButtonItem::setLocalX(int x)
{
if (m_localX == x) {
if (m_localX == x)
{
return;
}
@@ -273,7 +292,8 @@ int PreviewButtonItem::localY() const
void PreviewButtonItem::setLocalY(int y)
{
if (m_localY == y) {
if (m_localY == y)
{
return;
}
@@ -284,7 +304,8 @@ void PreviewButtonItem::setLocalY(int y)
KDecoration2::Decoration *PreviewButtonItem::decoration() const
{
if (!m_sharedDecoration) {
if (!m_sharedDecoration)
{
return nullptr;
}
@@ -298,13 +319,14 @@ SharedDecoration *PreviewButtonItem::sharedDecoration() const
void PreviewButtonItem::setSharedDecoration(SharedDecoration *sharedDecoration)
{
if (m_sharedDecoration == sharedDecoration) {
if (m_sharedDecoration == sharedDecoration)
{
return;
}
m_sharedDecoration = sharedDecoration;
connect(m_sharedDecoration, &Decoration::Applet::SharedDecoration::decorationChanged, this, &Decoration::Applet::PreviewButtonItem::createButton);
connect(m_sharedDecoration, &SharedDecoration::decorationChanged, this, &PreviewButtonItem::createButton);
emit sharedDecorationChanged();
}
@@ -317,13 +339,15 @@ void PreviewButtonItem::componentComplete()
void PreviewButtonItem::createButton()
{
if (m_type == KDecoration2::DecorationButtonType::Custom || !m_sharedDecoration || !m_sharedDecoration->decoration() || !m_bridge) {
if (m_type == KDecoration2::DecorationButtonType::Custom || !m_sharedDecoration || !m_sharedDecoration->decoration() || !m_bridge)
{
return;
}
m_client = m_bridge->lastCreatedClient();
if (!m_client) {
if (!m_client)
{
return;
}
@@ -333,31 +357,40 @@ void PreviewButtonItem::createButton()
m_client->setActive(m_isActive);
m_client->setColorScheme(m_scheme);
if (m_isOnAllDesktops) {
if (m_isOnAllDesktops)
{
m_client->setDesktop(-1);
} else {
}
else
{
m_client->setDesktop(1);
}
if (m_isMaximized) {
if (m_isMaximized)
{
m_client->setMaximizedVertically(true);
m_client->setMaximizedHorizontally(true);
} else {
}
else
{
m_client->setMaximizedVertically(false);
m_client->setMaximizedHorizontally(false);
}
if (m_button) {
if (m_button)
{
m_button->deleteLater();
}
m_button = m_bridge->createButton(m_sharedDecoration->decoration(), m_type, this);
if (!m_button) {
if (!m_button)
{
return;
}
if (!m_lastAppliedDecoration.isNull()) {
if (!m_lastAppliedDecoration.isNull())
{
disconnect(m_lastAppliedDecoration.data(), &KDecoration2::Decoration::damaged, this, &PreviewButtonItem::onDecorationDamaged);
}
@@ -385,7 +418,8 @@ void PreviewButtonItem::syncInternalGeometry()
m_fullGeometry = QRect(0, 0, width(), height());
m_visualGeometry = QRect(m_localX + m_padding->left(), m_localY + m_padding->top(), iWidth, iHeight);
if (!m_button) {
if (!m_button)
{
return;
}
@@ -394,23 +428,28 @@ void PreviewButtonItem::syncInternalGeometry()
void PreviewButtonItem::onButtonDamaged()
{
if (m_sharedDecoration && m_sharedDecoration->decoration()) {
if (m_sharedDecoration && m_sharedDecoration->decoration())
{
emit m_sharedDecoration->decoration()->damaged(m_visualGeometry);
} else {
}
else
{
update();
}
}
void PreviewButtonItem::onDecorationDamaged(const QRegion &region)
{
if (region.intersects(m_visualGeometry)) {
if (region.intersects(m_visualGeometry))
{
update();
}
}
void PreviewButtonItem::paint(QPainter *painter)
{
if (!m_button) {
if (!m_button)
{
return;
}
@@ -421,7 +460,8 @@ void PreviewButtonItem::paint(QPainter *painter)
void PreviewButtonItem::mouseDoubleClickEvent(QMouseEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
@@ -430,24 +470,22 @@ void PreviewButtonItem::mouseDoubleClickEvent(QMouseEvent *event)
void PreviewButtonItem::mousePressEvent(QMouseEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
//! this a workaround in order to send proper coordinates
//! that confirm the button visual coordinates
QMouseEvent e(event->type(),
m_visualGeometry.center(),
event->button(),
event->buttons(),
event->modifiers());
QMouseEvent e(event->type(), m_visualGeometry.center(), event->button(), event->buttons(), event->modifiers());
QCoreApplication::instance()->sendEvent(m_button, &e);
}
void PreviewButtonItem::mouseReleaseEvent(QMouseEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
@@ -455,47 +493,40 @@ void PreviewButtonItem::mouseReleaseEvent(QMouseEvent *event)
//! this a workaround in order to send proper coordinates
//! that confirm the button visual coordinates
QMouseEvent e(event->type(),
inItem ? m_visualGeometry.center() : QPoint(-5, -5),
event->button(),
event->buttons(),
event->modifiers());
QMouseEvent e(event->type(), inItem ? m_visualGeometry.center() : QPoint(-5, -5), event->button(), event->buttons(), event->modifiers());
QCoreApplication::instance()->sendEvent(m_button, event);
if (inItem) {
if (inItem)
{
emit clicked();
}
}
void PreviewButtonItem::mouseMoveEvent(QMouseEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
//! this a workaround in order to send proper coordinates
//! that confirm the button visual coordinates
QMouseEvent e(event->type(),
m_visualGeometry.center(),
event->button(),
event->buttons(),
event->modifiers());
QMouseEvent e(event->type(), m_visualGeometry.center(), event->button(), event->buttons(), event->modifiers());
QCoreApplication::instance()->sendEvent(m_button, &e);
}
void PreviewButtonItem::hoverEnterEvent(QHoverEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
//! this a workaround in order to send proper coordinates
//! that confirm the button visual coordinates
QHoverEvent e(event->type(),
m_visualGeometry.center(),
QPoint(m_visualGeometry.x() + event->position().x(), m_visualGeometry.y() + event->position().y()),
QHoverEvent e(event->type(), m_visualGeometry.center(), QPoint(m_visualGeometry.x() + event->position().x(), m_visualGeometry.y() + event->position().y()),
event->modifiers());
QCoreApplication::instance()->sendEvent(m_button, &e);
@@ -503,23 +534,22 @@ void PreviewButtonItem::hoverEnterEvent(QHoverEvent *event)
void PreviewButtonItem::hoverLeaveEvent(QHoverEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
//! this a workaround in order to send proper coordinates
//! that confirm the button visual coordinates
QHoverEvent e(event->type(),
QPoint(-5, -5),
m_visualGeometry.center(),
event->modifiers());
QHoverEvent e(event->type(), QPoint(-5, -5), m_visualGeometry.center(), event->modifiers());
QCoreApplication::instance()->sendEvent(m_button, &e);
}
void PreviewButtonItem::hoverMoveEvent(QHoverEvent *event)
{
if (!m_button) {
if (!m_button)
{
return;
}
@@ -536,12 +566,7 @@ void PreviewButtonItem::hoverMoveEvent(QHoverEvent *event)
QCoreApplication::instance()->sendEvent(m_button, &e);
}
void PreviewButtonItem::focusOutEvent(QFocusEvent *event)
{
QCoreApplication::instance()->sendEvent(m_button, event);
}
} // namespace Applet
} // namespace Decoration
+10 -20
View File
@@ -25,17 +25,11 @@
#define KDECORATIONS_PREVIEW_BUTTON_ITEM_H
#include "previewshareddecoration.h"
#include <QMargins>
#include <QQuickPaintedItem>
#include <QPointer>
#include <KDecoration2/DecorationButton>
namespace KDecoration2 {
class Decoration;
}
namespace Decoration {
namespace Applet {
#include <QMargins>
#include <QPointer>
#include <QQuickPaintedItem>
class Padding;
class PreviewBridge;
@@ -44,8 +38,8 @@ class PreviewClient;
class PreviewButtonItem : public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(Decoration::Applet::PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(Decoration::Applet::SharedDecoration *sharedDecoration READ sharedDecoration WRITE setSharedDecoration NOTIFY sharedDecorationChanged)
Q_PROPERTY(PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(SharedDecoration *sharedDecoration READ sharedDecoration WRITE setSharedDecoration NOTIFY sharedDecorationChanged)
Q_PROPERTY(bool isActive READ isActive WRITE setIsActive NOTIFY isActiveChanged);
Q_PROPERTY(bool isMaximized READ isMaximized WRITE setIsMaximized NOTIFY isMaximizedChanged)
@@ -58,7 +52,7 @@ class PreviewButtonItem : public QQuickPaintedItem
Q_PROPERTY(int type READ typeAsInt WRITE setType NOTIFY typeChanged)
Q_PROPERTY(QString scheme READ scheme WRITE setScheme NOTIFY schemeChanged)
Q_PROPERTY(Decoration::Applet::Padding *padding READ padding NOTIFY paddingChanged)
Q_PROPERTY(Padding *padding READ padding NOTIFY paddingChanged)
public:
explicit PreviewButtonItem(QQuickItem *parent = nullptr);
@@ -138,10 +132,9 @@ private Q_SLOTS:
void onDecorationDamaged(const QRegion &region);
private:
QPointer<Decoration::Applet::PreviewBridge> m_bridge;
QPointer<Decoration::Applet::PreviewClient> m_client;
QPointer<Decoration::Applet::SharedDecoration> m_sharedDecoration;
QPointer<PreviewBridge> m_bridge;
QPointer<PreviewClient> m_client;
QPointer<SharedDecoration> m_sharedDecoration;
QPointer<KDecoration2::Decoration> m_lastAppliedDecoration;
KDecoration2::DecorationButton *m_button = nullptr;
@@ -163,7 +156,4 @@ private:
Padding *m_padding;
};
} // namespace Applet
} // namespace Decoration
#endif
+51 -75
View File
@@ -22,44 +22,22 @@
*/
#include "previewclient.h"
#include <KDecoration2/Decoration>
#include <KDecoration2/DecoratedClient>
#include <QDebug>
#include <KDecoration2/DecoratedClient>
#include <KDecoration2/Decoration>
#include <QCoreApplication>
#include <QDebug>
#include <QEvent>
#include <QModelIndex>
namespace Decoration {
namespace Applet {
PreviewClient::PreviewClient(KDecoration2::DecoratedClient *c, KDecoration2::Decoration *decoration)
: QObject(decoration)
, ApplicationMenuEnabledDecoratedClientPrivate(c, decoration)
, m_icon(QIcon::fromTheme(QStringLiteral("start-here-kde")))
, m_iconName(m_icon.name())
: QObject(decoration), ApplicationMenuEnabledDecoratedClientPrivate(c, decoration), m_icon(QIcon::fromTheme(QStringLiteral("start-here-kde"))),
m_iconName(m_icon.name())
// , m_palette(new KWin::Decoration::DecorationPalette(QStringLiteral("kdeglobals")))
, m_active(true)
, m_closeable(true)
, m_keepBelow(false)
, m_keepAbove(false)
, m_maximizable(true)
, m_maximizedHorizontally(false)
, m_maximizedVertically(false)
, m_minimizable(true)
, m_modal(false)
, m_movable(true)
, m_resizable(true)
, m_shadeable(true)
, m_shaded(false)
, m_providesContextHelp(false)
, m_desktop(1)
, m_width(0)
, m_height(0)
, m_bordersTopEdge(false)
, m_bordersLeftEdge(false)
, m_bordersRightEdge(false)
, m_bordersBottomEdge(false)
,
m_active(true), m_closeable(true), m_keepBelow(false), m_keepAbove(false), m_maximizable(true), m_maximizedHorizontally(false), m_maximizedVertically(false),
m_minimizable(true), m_modal(false), m_movable(true), m_resizable(true), m_shadeable(true), m_shaded(false), m_providesContextHelp(false), m_desktop(1), m_width(0),
m_height(0), m_bordersTopEdge(false), m_bordersLeftEdge(false), m_bordersRightEdge(false), m_bordersBottomEdge(false)
{
connect(this, &PreviewClient::captionChanged, c, &KDecoration2::DecoratedClient::captionChanged);
connect(this, &PreviewClient::activeChanged, c, &KDecoration2::DecoratedClient::activeChanged);
@@ -84,33 +62,19 @@ PreviewClient::PreviewClient(KDecoration2::DecoratedClient *c, KDecoration2::Dec
connect(this, &PreviewClient::iconChanged, c, &KDecoration2::DecoratedClient::iconChanged);
connect(this, &PreviewClient::paletteChanged, c, &KDecoration2::DecoratedClient::paletteChanged);
// connect(this, &PreviewClient::, c, &DecoratedClient::);
connect(this, &PreviewClient::maximizedVerticallyChanged, this,
[this]() {
emit maximizedChanged(isMaximized());
}
);
connect(this, &PreviewClient::maximizedHorizontallyChanged, this,
[this]() {
emit maximizedChanged(isMaximized());
}
);
connect(this, &PreviewClient::maximizedVerticallyChanged, this, [this]() { emit maximizedChanged(isMaximized()); });
connect(this, &PreviewClient::maximizedHorizontallyChanged, this, [this]() { emit maximizedChanged(isMaximized()); });
connect(this, &PreviewClient::iconNameChanged, this,
[this]() {
[this]()
{
m_icon = QIcon::fromTheme(m_iconName);
emit iconChanged(m_icon);
}
);
connect(this, &PreviewClient::desktopChanged, this,
[this](int) {
emit onAllDesktopsChanged(isOnAllDesktops());
}
);
});
connect(this, &PreviewClient::desktopChanged, this, [this](int) { emit onAllDesktopsChanged(isOnAllDesktops()); });
/* connect(m_palette, &KWin::Decoration::DecorationPalette::changed, [this]() {
emit paletteChanged(m_palette->palette());
});*/
auto emitEdgesChanged = [this, c]() {
c->adjacentScreenEdgesChanged(adjacentScreenEdges());
};
auto emitEdgesChanged = [this, c]() { c->adjacentScreenEdgesChanged(adjacentScreenEdges()); };
connect(this, &PreviewClient::bordersTopEdgeChanged, this, emitEdgesChanged);
connect(this, &PreviewClient::bordersLeftEdgeChanged, this, emitEdgesChanged);
connect(this, &PreviewClient::bordersRightEdgeChanged, this, emitEdgesChanged);
@@ -156,11 +120,13 @@ int PreviewClient::desktop() const
void PreviewClient::setDesktop(int desktop)
{
if (desktop == 0) {
if (desktop == 0)
{
desktop = 1;
}
if (m_desktop == desktop) {
if (m_desktop == desktop)
{
return;
}
@@ -280,17 +246,19 @@ QColor PreviewClient::color(KDecoration2::ColorGroup group, KDecoration2::ColorR
void PreviewClient::setColorScheme(QString scheme)
{
if (m_colorScheme == scheme && !m_colorScheme.isEmpty()) {
if (m_colorScheme == scheme && !m_colorScheme.isEmpty())
{
return;
}
m_colorScheme = scheme;
if (m_palette) {
if (m_palette)
{
m_palette->deleteLater();
}
m_palette = new Decoration::Applet::DecorationPalette(scheme);
m_palette = new DecorationPalette(scheme);
emit paletteChanged(m_palette->palette());
}
@@ -299,19 +267,23 @@ Qt::Edges PreviewClient::adjacentScreenEdges() const
{
Qt::Edges edges;
if (m_bordersBottomEdge) {
if (m_bordersBottomEdge)
{
edges |= Qt::BottomEdge;
}
if (m_bordersLeftEdge) {
if (m_bordersLeftEdge)
{
edges |= Qt::LeftEdge;
}
if (m_bordersRightEdge) {
if (m_bordersRightEdge)
{
edges |= Qt::RightEdge;
}
if (m_bordersTopEdge) {
if (m_bordersTopEdge)
{
edges |= Qt::TopEdge;
}
@@ -350,7 +322,8 @@ bool PreviewClient::bordersTopEdge() const
void PreviewClient::setBordersBottomEdge(bool enabled)
{
if (m_bordersBottomEdge == enabled) {
if (m_bordersBottomEdge == enabled)
{
return;
}
@@ -360,7 +333,8 @@ void PreviewClient::setBordersBottomEdge(bool enabled)
void PreviewClient::setBordersLeftEdge(bool enabled)
{
if (m_bordersLeftEdge == enabled) {
if (m_bordersLeftEdge == enabled)
{
return;
}
@@ -370,7 +344,8 @@ void PreviewClient::setBordersLeftEdge(bool enabled)
void PreviewClient::setBordersRightEdge(bool enabled)
{
if (m_bordersRightEdge == enabled) {
if (m_bordersRightEdge == enabled)
{
return;
}
@@ -380,7 +355,8 @@ void PreviewClient::setBordersRightEdge(bool enabled)
void PreviewClient::setBordersTopEdge(bool enabled)
{
if (m_bordersTopEdge == enabled) {
if (m_bordersTopEdge == enabled)
{
return;
}
@@ -388,7 +364,6 @@ void PreviewClient::setBordersTopEdge(bool enabled)
emit bordersTopEdgeChanged(enabled);
}
#if KDECORATION2_VERSION_MAJOR > 5 || KDECORATION2_VERSION_MINOR >= 13
void PreviewClient::requestShowToolTip(const QString &text)
{
@@ -409,7 +384,6 @@ QSize PreviewClient::size() const
}
#endif
#if KDECORATION2_VERSION_MAJOR <= 5 && KDECORATION2_VERSION_MINOR <= 20
void PreviewClient::requestShowWindowMenu()
{
@@ -422,7 +396,6 @@ void PreviewClient::requestShowWindowMenu(const QRect &rect)
}
#endif
void PreviewClient::requestClose()
{
emit closeRequested();
@@ -435,13 +408,18 @@ void PreviewClient::requestContextHelp()
void PreviewClient::requestToggleMaximization(Qt::MouseButtons buttons)
{
if (buttons.testFlag(Qt::LeftButton)) {
if (buttons.testFlag(Qt::LeftButton))
{
const bool set = !isMaximized();
setMaximizedHorizontally(set);
setMaximizedVertically(set);
} else if (buttons.testFlag(Qt::RightButton)) {
}
else if (buttons.testFlag(Qt::RightButton))
{
setMaximizedHorizontally(!isMaximizedHorizontally());
} else if (buttons.testFlag(Qt::MiddleButton)) {
}
else if (buttons.testFlag(Qt::MiddleButton))
{
setMaximizedVertically(!isMaximizedVertically());
}
}
@@ -485,7 +463,8 @@ void PreviewClient::requestToggleShade()
#define SETTER(type, name, variable) \
void PreviewClient::name(type variable) \
{ \
if (m_##variable == variable) { \
if (m_##variable == variable) \
{ \
return; \
} \
m_##variable = variable; \
@@ -516,6 +495,3 @@ SETTER2(setProvidesContextHelp, providesContextHelp)
#undef SETTER2
#undef SETTER
} // namespace Applet
} // namespace Decoration
+5 -10
View File
@@ -26,19 +26,17 @@
#include "decorationpalette.h"
#include <config-decoration.h>
#include <KDecoration2/Private/DecoratedClientPrivate>
#include <QObject>
#include <QPalette>
#include <config-decoration.h>
#include <kdecoration2/decoration.h>
class QAbstractItemModel;
namespace Decoration {
namespace Applet {
class PreviewClient : public QObject, public KDecoration2::ApplicationMenuEnabledDecoratedClientPrivate
class PreviewClient
: public QObject
, public KDecoration2::ApplicationMenuEnabledDecoratedClientPrivate
{
Q_OBJECT
Q_PROPERTY(KDecoration2::Decoration *decoration READ decoration CONSTANT)
@@ -205,7 +203,7 @@ private:
QIcon m_icon;
QString m_iconName;
QString m_colorScheme;
Decoration::Applet::DecorationPalette *m_palette{nullptr};
DecorationPalette *m_palette{ nullptr };
bool m_active;
bool m_closeable;
bool m_keepBelow;
@@ -229,7 +227,4 @@ private:
bool m_bordersBottomEdge;
};
} // namespace Applet
} // namespace Decoration
#endif
+53 -65
View File
@@ -22,19 +22,15 @@
*/
#include "previewsettings.h"
#include "previewbridge.h"
#include "buttonsmodel.h"
#include "previewbridge.h"
#include <KLocalizedString>
#include <QFontDatabase>
#include <memory>
namespace Decoration {
namespace Applet {
BorderSizesModel::BorderSizesModel(QObject *parent)
: QAbstractListModel(parent)
BorderSizesModel::BorderSizesModel(QObject *parent) : QAbstractListModel(parent)
{
}
@@ -42,11 +38,13 @@ BorderSizesModel::~BorderSizesModel() = default;
QVariant BorderSizesModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() < 0 || index.row() >= m_borders.count() || index.column() != 0) {
if (!index.isValid() || index.row() < 0 || index.row() >= m_borders.count() || index.column() != 0)
{
return QVariant();
}
if (role != Qt::DisplayRole && role != Qt::UserRole) {
if (role != Qt::DisplayRole && role != Qt::UserRole)
{
return QVariant();
}
@@ -55,7 +53,8 @@ QVariant BorderSizesModel::data(const QModelIndex &index, int role) const
int BorderSizesModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
if (parent.isValid())
{
return 0;
}
@@ -70,50 +69,31 @@ QHash< int, QByteArray > BorderSizesModel::roleNames() const
}
PreviewSettings::PreviewSettings(KDecoration2::DecorationSettings *parent)
: QObject()
, KDecoration2::DecorationSettingsPrivate(parent)
, m_alphaChannelSupported(true)
, m_onAllDesktopsAvailable(true)
, m_closeOnDoubleClick(false)
, m_leftButtons(new ButtonsModel(QVector<KDecoration2::DecorationButtonType>({
KDecoration2::DecorationButtonType::Minimize,
KDecoration2::DecorationButtonType::Close,
KDecoration2::DecorationButtonType::Menu,
KDecoration2::DecorationButtonType::ApplicationMenu,
KDecoration2::DecorationButtonType::OnAllDesktops
}), this))
, m_rightButtons(new ButtonsModel(QVector<KDecoration2::DecorationButtonType>({
KDecoration2::DecorationButtonType::ContextHelp,
KDecoration2::DecorationButtonType::Minimize,
KDecoration2::DecorationButtonType::Maximize,
KDecoration2::DecorationButtonType::Close
}), this))
, m_availableButtons(new ButtonsModel(QVector<KDecoration2::DecorationButtonType>({
KDecoration2::DecorationButtonType::Menu,
KDecoration2::DecorationButtonType::ApplicationMenu,
KDecoration2::DecorationButtonType::OnAllDesktops,
KDecoration2::DecorationButtonType::Minimize,
KDecoration2::DecorationButtonType::Maximize,
KDecoration2::DecorationButtonType::Close,
KDecoration2::DecorationButtonType::ContextHelp,
KDecoration2::DecorationButtonType::Shade,
KDecoration2::DecorationButtonType::KeepBelow,
KDecoration2::DecorationButtonType::KeepAbove
}), this))
, m_borderSizes(new BorderSizesModel(this))
, m_borderSize(int(KDecoration2::BorderSize::Normal))
, m_font(QFontDatabase::systemFont(QFontDatabase::TitleFont))
: QObject(), KDecoration2::DecorationSettingsPrivate(parent), m_alphaChannelSupported(true), m_onAllDesktopsAvailable(true), m_closeOnDoubleClick(false),
m_leftButtons(
new ButtonsModel(QVector<KDecoration2::DecorationButtonType>({ KDecoration2::DecorationButtonType::Minimize, KDecoration2::DecorationButtonType::Close,
KDecoration2::DecorationButtonType::Menu, KDecoration2::DecorationButtonType::ApplicationMenu,
KDecoration2::DecorationButtonType::OnAllDesktops }),
this)),
m_rightButtons(
new ButtonsModel(QVector<KDecoration2::DecorationButtonType>({ KDecoration2::DecorationButtonType::ContextHelp, KDecoration2::DecorationButtonType::Minimize,
KDecoration2::DecorationButtonType::Maximize, KDecoration2::DecorationButtonType::Close }),
this)),
m_availableButtons(
new ButtonsModel(QVector<KDecoration2::DecorationButtonType>({ KDecoration2::DecorationButtonType::Menu, KDecoration2::DecorationButtonType::ApplicationMenu,
KDecoration2::DecorationButtonType::OnAllDesktops, KDecoration2::DecorationButtonType::Minimize,
KDecoration2::DecorationButtonType::Maximize, KDecoration2::DecorationButtonType::Close,
KDecoration2::DecorationButtonType::ContextHelp, KDecoration2::DecorationButtonType::Shade,
KDecoration2::DecorationButtonType::KeepBelow, KDecoration2::DecorationButtonType::KeepAbove }),
this)),
m_borderSizes(new BorderSizesModel(this)), m_borderSize(int(KDecoration2::BorderSize::Normal)), m_font(QFontDatabase::systemFont(QFontDatabase::TitleFont))
{
connect(this, &PreviewSettings::alphaChannelSupportedChanged, parent, &KDecoration2::DecorationSettings::alphaChannelSupportedChanged);
connect(this, &PreviewSettings::onAllDesktopsAvailableChanged, parent, &KDecoration2::DecorationSettings::onAllDesktopsAvailableChanged);
connect(this, &PreviewSettings::closeOnDoubleClickOnMenuChanged, parent, &KDecoration2::DecorationSettings::closeOnDoubleClickOnMenuChanged);
connect(this, &PreviewSettings::fontChanged, parent, &KDecoration2::DecorationSettings::fontChanged);
auto updateLeft = [this, parent]() {
parent->decorationButtonsLeftChanged(decorationButtonsLeft());
};
auto updateRight = [this, parent]() {
parent->decorationButtonsRightChanged(decorationButtonsRight());
};
auto updateLeft = [this, parent]() { parent->decorationButtonsLeftChanged(decorationButtonsLeft()); };
auto updateRight = [this, parent]() { parent->decorationButtonsRightChanged(decorationButtonsRight()); };
connect(m_leftButtons, &QAbstractItemModel::rowsRemoved, this, updateLeft);
connect(m_leftButtons, &QAbstractItemModel::rowsMoved, this, updateLeft);
connect(m_leftButtons, &QAbstractItemModel::rowsInserted, this, updateLeft);
@@ -151,7 +131,8 @@ bool PreviewSettings::isOnAllDesktopsAvailable() const
void PreviewSettings::setAlphaChannelSupported(bool supported)
{
if (m_alphaChannelSupported == supported) {
if (m_alphaChannelSupported == supported)
{
return;
}
@@ -161,7 +142,8 @@ void PreviewSettings::setAlphaChannelSupported(bool supported)
void PreviewSettings::setOnAllDesktopsAvailable(bool available)
{
if (m_onAllDesktopsAvailable == available) {
if (m_onAllDesktopsAvailable == available)
{
return;
}
@@ -171,7 +153,8 @@ void PreviewSettings::setOnAllDesktopsAvailable(bool available)
void PreviewSettings::setCloseOnDoubleClickOnMenu(bool enabled)
{
if (m_closeOnDoubleClick == enabled) {
if (m_closeOnDoubleClick == enabled)
{
return;
}
@@ -193,7 +176,8 @@ void PreviewSettings::addButtonToLeft(int row)
{
QModelIndex index = m_availableButtons->index(row);
if (!index.isValid()) {
if (!index.isValid())
{
return;
}
@@ -204,7 +188,8 @@ void PreviewSettings::addButtonToRight(int row)
{
QModelIndex index = m_availableButtons->index(row);
if (!index.isValid()) {
if (!index.isValid())
{
return;
}
@@ -213,7 +198,8 @@ void PreviewSettings::addButtonToRight(int row)
void PreviewSettings::setBorderSizesIndex(int index)
{
if (m_borderSize == index) {
if (m_borderSize == index)
{
return;
}
@@ -229,7 +215,8 @@ KDecoration2::BorderSize PreviewSettings::borderSize() const
void PreviewSettings::setFont(const QFont &font)
{
if (m_font == font) {
if (m_font == font)
{
return;
}
@@ -237,8 +224,7 @@ void PreviewSettings::setFont(const QFont &font)
emit fontChanged(m_font);
}
Settings::Settings(QObject *parent)
: QObject(parent)
Settings::Settings(QObject *parent) : QObject(parent)
{
connect(this, &Settings::bridgeChanged, this, &Settings::createSettings);
}
@@ -247,7 +233,8 @@ Settings::~Settings() = default;
void Settings::setBridge(PreviewBridge *bridge)
{
if (m_bridge == bridge) {
if (m_bridge == bridge)
{
return;
}
@@ -262,9 +249,12 @@ PreviewBridge *Settings::bridge() const
void Settings::createSettings()
{
if (m_bridge.isNull()) {
if (m_bridge.isNull())
{
m_settings.reset();
} else {
}
else
{
m_settings = std::make_shared<KDecoration2::DecorationSettings>(m_bridge.data());
m_previewSettings = m_bridge->lastCreatedSettings();
m_previewSettings->setBorderSizesIndex(m_borderSize);
@@ -286,13 +276,11 @@ KDecoration2::DecorationSettings *Settings::settingsPointer() const
void Settings::setBorderSizesIndex(int index)
{
if (m_borderSize == index) {
if (m_borderSize == index)
{
return;
}
m_borderSize = index;
emit borderSizesIndexChanged(m_borderSize);
}
}
}
+21 -30
View File
@@ -24,19 +24,12 @@
#ifndef KDECOARTIONS_PREVIEW_SETTINGS_H
#define KDECOARTIONS_PREVIEW_SETTINGS_H
#include <KDecoration2/Private/DecorationSettingsPrivate>
#include <KDecoration2/DecorationSettings>
#include <QObject>
#include <KDecoration2/Private/DecorationSettingsPrivate>
#include <QAbstractListModel>
#include <QObject>
#include <QPointer>
namespace KDecoration2 {
class DecorationSettings;
}
namespace Decoration {
namespace Applet {
class ButtonsModel;
class PreviewBridge;
@@ -49,21 +42,17 @@ public:
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;
private:
QList<KDecoration2::BorderSize> m_borders = QList<KDecoration2::BorderSize>({
KDecoration2::BorderSize::None,
KDecoration2::BorderSize::NoSides,
KDecoration2::BorderSize::Tiny,
KDecoration2::BorderSize::Normal,
KDecoration2::BorderSize::Large,
KDecoration2::BorderSize::VeryLarge,
KDecoration2::BorderSize::Huge,
KDecoration2::BorderSize::VeryHuge,
KDecoration2::BorderSize::Oversized
});
QList<KDecoration2::BorderSize> m_borders =
QList<KDecoration2::BorderSize>({ KDecoration2::BorderSize::None, KDecoration2::BorderSize::NoSides, KDecoration2::BorderSize::Tiny,
KDecoration2::BorderSize::Normal, KDecoration2::BorderSize::Large, KDecoration2::BorderSize::VeryLarge,
KDecoration2::BorderSize::Huge, KDecoration2::BorderSize::VeryHuge, KDecoration2::BorderSize::Oversized });
};
class PreviewSettings : public QObject, public KDecoration2::DecorationSettingsPrivate
class PreviewSettings
: public QObject
, public KDecoration2::DecorationSettingsPrivate
{
Q_OBJECT
Q_PROPERTY(bool onAllDesktopsAvailable READ isOnAllDesktopsAvailable WRITE setOnAllDesktopsAvailable NOTIFY onAllDesktopsAvailableChanged)
@@ -80,7 +69,8 @@ public:
virtual ~PreviewSettings();
bool isAlphaChannelSupported() const override;
bool isOnAllDesktopsAvailable() const override;
bool isCloseOnDoubleClickOnMenu() const override {
bool isCloseOnDoubleClickOnMenu() const override
{
return m_closeOnDoubleClick;
}
KDecoration2::BorderSize borderSize() const override;
@@ -92,7 +82,8 @@ public:
QAbstractItemModel *leftButtonsModel() const;
QAbstractItemModel *rightButtonsModel() const;
QAbstractItemModel *availableButtonsModel() const;
QAbstractItemModel *borderSizesModel() const {
QAbstractItemModel *borderSizesModel() const
{
return m_borderSizes;
}
@@ -102,12 +93,14 @@ public:
Q_INVOKABLE void addButtonToLeft(int row);
Q_INVOKABLE void addButtonToRight(int row);
int borderSizesIndex() const {
int borderSizesIndex() const
{
return m_borderSize;
}
void setBorderSizesIndex(int index);
QFont font() const override{
QFont font() const override
{
return m_font;
}
void setFont(const QFont &font);
@@ -134,7 +127,7 @@ private:
class Settings : public QObject
{
Q_OBJECT
Q_PROPERTY(Decoration::Applet::PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(KDecoration2::DecorationSettings *settings READ settingsPointer NOTIFY settingsChanged)
Q_PROPERTY(int borderSizesIndex READ borderSizesIndex WRITE setBorderSizesIndex NOTIFY borderSizesIndexChanged)
public:
@@ -146,7 +139,8 @@ public:
std::shared_ptr<KDecoration2::DecorationSettings> settings() const;
KDecoration2::DecorationSettings *settingsPointer() const;
int borderSizesIndex() const {
int borderSizesIndex() const
{
return m_borderSize;
}
void setBorderSizesIndex(int index);
@@ -164,7 +158,4 @@ private:
int m_borderSize = 3;
};
}
}
#endif
+23 -21
View File
@@ -28,14 +28,10 @@
#include <KDecoration2/Decoration>
namespace Decoration {
namespace Applet {
SharedDecoration::SharedDecoration(QObject *parent) :
QObject(parent)
SharedDecoration::SharedDecoration(QObject *parent) : QObject(parent)
{
connect(this, &Decoration::Applet::SharedDecoration::bridgeChanged, this, &Decoration::Applet::SharedDecoration::createDecoration);
connect(this, &Decoration::Applet::SharedDecoration::settingsChanged, this, &Decoration::Applet::SharedDecoration::applySettings);
connect(this, &SharedDecoration::bridgeChanged, this, &SharedDecoration::createDecoration);
connect(this, &SharedDecoration::settingsChanged, this, &SharedDecoration::applySettings);
}
SharedDecoration::~SharedDecoration()
@@ -49,17 +45,19 @@ PreviewBridge *SharedDecoration::bridge() const
void SharedDecoration::setBridge(PreviewBridge *bridge)
{
if (m_bridge == bridge) {
if (m_bridge == bridge)
{
return;
}
if (m_bridge) {
connect(m_bridge, &Decoration::Applet::PreviewBridge::validChanged, this, &Decoration::Applet::SharedDecoration::createDecoration);
if (m_bridge)
{
connect(m_bridge, &PreviewBridge::validChanged, this, &SharedDecoration::createDecoration);
}
m_bridge = bridge;
connect(m_bridge, &Decoration::Applet::PreviewBridge::validChanged, this, &Decoration::Applet::SharedDecoration::createDecoration);
connect(m_bridge, &PreviewBridge::validChanged, this, &SharedDecoration::createDecoration);
emit bridgeChanged();
}
@@ -76,7 +74,8 @@ Settings *SharedDecoration::settings() const
void SharedDecoration::setSettings(Settings *settings)
{
if (m_settings == settings) {
if (m_settings == settings)
{
return;
}
@@ -89,7 +88,8 @@ void SharedDecoration::setSettings(Settings *settings)
void SharedDecoration::applySettings()
{
if (!m_decoration || !m_settings) {
if (!m_decoration || !m_settings)
{
return;
}
@@ -99,21 +99,25 @@ void SharedDecoration::applySettings()
void SharedDecoration::createDecoration()
{
if (!m_bridge || !m_settings) {
if (!m_bridge || !m_settings)
{
return;
}
bool newDecoration = (m_bridge->plugin() != m_lastPlugin || m_bridge->theme() != m_lastTheme);
if (m_decoration && newDecoration) {
if (m_decoration && newDecoration)
{
m_decoration->deleteLater();
}
if (newDecoration) {
if (newDecoration)
{
m_decoration = m_bridge->createDecoration(this);
}
if (m_decoration) {
if (m_decoration)
{
m_decoration->setSettings(m_settings->settings());
m_decoration->init();
m_decoration->setObjectName("applet-window-buttons");
@@ -127,10 +131,8 @@ void SharedDecoration::createDecoration()
void SharedDecoration::initDecoration()
{
if (m_decoration) {
if (m_decoration)
{
m_decoration->init();
}
}
}
}
+5 -16
View File
@@ -23,18 +23,10 @@
#ifndef PREVIEWSHAREDDECORATION_H
#define PREVIEWSHAREDDECORATION_H
#include <QObject>
#include "previewbridge.h"
#include "previewsettings.h"
namespace KDecoration2 {
class Decoration;
}
namespace Decoration {
namespace Applet {
#include <QObject>
class PreviewBridge;
class PreviewButton;
@@ -43,8 +35,8 @@ class Settings;
class SharedDecoration : public QObject
{
Q_OBJECT
Q_PROPERTY(Decoration::Applet::PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(Decoration::Applet::Settings *settings READ settings WRITE setSettings NOTIFY settingsChanged)
Q_PROPERTY(PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(Settings *settings READ settings WRITE setSettings NOTIFY settingsChanged)
public:
explicit SharedDecoration(QObject *parent = nullptr);
@@ -72,15 +64,12 @@ private Q_SLOTS:
void applySettings();
private:
QPointer<Decoration::Applet::PreviewBridge> m_bridge;
QPointer<PreviewBridge> m_bridge;
QPointer<KDecoration2::Decoration> m_decoration;
QPointer<Decoration::Applet::Settings> m_settings;
QPointer<Settings> m_settings;
QString m_lastPlugin;
QString m_lastTheme;
};
}
}
#endif
+30 -26
View File
@@ -20,29 +20,24 @@
#include "schemecolors.h"
#include <config-decoration.h>
#include "commontools.h"
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <KConfigGroup>
#include <KDirWatch>
#include <KSharedConfig>
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <config-decoration.h>
using namespace Qt::StringLiterals;
namespace Decoration {
namespace Applet {
SchemeColors::SchemeColors(QObject *parent, QString scheme, bool plasmaTheme) :
QObject(parent),
m_basedOnPlasmaTheme(plasmaTheme)
SchemeColors::SchemeColors(QObject *parent, QString scheme, bool plasmaTheme) : QObject(parent), m_basedOnPlasmaTheme(plasmaTheme)
{
QString pSchemeFile = possibleSchemeFile(scheme);
if (QFileInfo(pSchemeFile).exists()) {
if (QFileInfo(pSchemeFile).exists())
{
setSchemeFile(pSchemeFile);
m_schemeName = schemeName(pSchemeFile);
@@ -142,7 +137,8 @@ QString SchemeColors::SchemeColors::schemeFile() const
void SchemeColors::setSchemeFile(QString file)
{
if (m_schemeFile == file) {
if (m_schemeFile == file)
{
return;
}
@@ -152,16 +148,19 @@ void SchemeColors::setSchemeFile(QString file)
QString SchemeColors::possibleSchemeFile(QString scheme)
{
if (scheme.startsWith("/") && scheme.endsWith("colors") && QFileInfo(scheme).exists()) {
if (scheme.startsWith("/") && scheme.endsWith("colors") && QFileInfo(scheme).exists())
{
return scheme;
}
QString tempScheme = scheme;
if (scheme == "kdeglobals") {
if (scheme == "kdeglobals")
{
QString settingsFile = QDir::homePath() + "/.config/kdeglobals";
if (QFileInfo(settingsFile).exists()) {
if (QFileInfo(settingsFile).exists())
{
KSharedConfigPtr filePtr = KSharedConfig::openConfig(settingsFile);
KConfigGroup generalGroup = KConfigGroup(filePtr, u"General"_qs);
#if KDECORATION2_VERSION_MAJOR > 5 || KDECORATION2_VERSION_MINOR >= 21
@@ -180,7 +179,8 @@ QString SchemeColors::possibleSchemeFile(QString scheme)
QString SchemeColors::schemeName(QString originalFile)
{
if (!(originalFile.startsWith("/") && originalFile.endsWith("colors") && QFileInfo(originalFile).exists())) {
if (!(originalFile.startsWith("/") && originalFile.endsWith("colors") && QFileInfo(originalFile).exists()))
{
return "";
}
@@ -188,11 +188,13 @@ QString SchemeColors::schemeName(QString originalFile)
int lastSlash = originalFile.lastIndexOf("/");
if (lastSlash >= 0) {
if (lastSlash >= 0)
{
fileNameNoExt.remove(0, lastSlash + 1);
}
if (fileNameNoExt.endsWith(".colors")) {
if (fileNameNoExt.endsWith(".colors"))
{
fileNameNoExt.remove(".colors");
}
@@ -204,7 +206,8 @@ QString SchemeColors::schemeName(QString originalFile)
void SchemeColors::updateScheme()
{
if (m_schemeFile.isEmpty() || !QFileInfo(m_schemeFile).exists()) {
if (m_schemeFile.isEmpty() || !QFileInfo(m_schemeFile).exists())
{
return;
}
@@ -215,12 +218,15 @@ void SchemeColors::updateScheme()
// KConfigGroup windowGroup = KConfigGroup(filePtr, "Colors:Window");
KConfigGroup buttonGroup = KConfigGroup(filePtr, u"Colors:Button"_qs);
if (!m_basedOnPlasmaTheme) {
if (!m_basedOnPlasmaTheme)
{
m_activeBackgroundColor = wmGroup.readEntry("activeBackground", QColor());
m_activeTextColor = wmGroup.readEntry("activeForeground", QColor());
m_inactiveBackgroundColor = wmGroup.readEntry("inactiveBackground", QColor());
m_inactiveTextColor = wmGroup.readEntry("inactiveForeground", QColor());
} else {
}
else
{
m_activeBackgroundColor = viewGroup.readEntry("BackgroundNormal", QColor());
m_activeTextColor = viewGroup.readEntry("ForegroundNormal", QColor());
m_inactiveBackgroundColor = viewGroup.readEntry("BackgroundAlternate", QColor());
@@ -231,7 +237,8 @@ void SchemeColors::updateScheme()
m_highlightedTextColor = selGroup.readEntry("ForegroundNormal", QColor());
m_positiveColor = selGroup.readEntry("ForegroundPositive", QColor());
m_neutralText = selGroup.readEntry("ForegroundNeutral", QColor());;
m_neutralText = selGroup.readEntry("ForegroundNeutral", QColor());
;
m_negativeText = selGroup.readEntry("ForegroundNegative", QColor());
m_buttonTextColor = buttonGroup.readEntry("ForegroundNormal", QColor());
@@ -241,6 +248,3 @@ void SchemeColors::updateScheme()
emit colorsChanged();
}
}
}
+1 -7
View File
@@ -21,11 +21,8 @@
#ifndef SCHEMECOLORS_H
#define SCHEMECOLORS_H
#include <QObject>
#include <QColor>
namespace Decoration {
namespace Applet {
#include <QObject>
class SchemeColors : public QObject
{
@@ -106,7 +103,4 @@ private:
QColor m_buttonFocusColor;
};
}
}
#endif
+49 -37
View File
@@ -26,11 +26,7 @@
#include <QDebug>
#include <QDir>
namespace Decoration {
namespace Applet {
SchemesModel::SchemesModel(QObject *parent)
: QAbstractListModel(parent)
SchemesModel::SchemesModel(QObject *parent) : QAbstractListModel(parent)
{
initSchemes();
}
@@ -42,36 +38,42 @@ SchemesModel::~SchemesModel()
QVariant SchemesModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.column() != 0 || index.row() < 0 || index.row() >= m_schemes.count()) {
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) {
switch (role)
{
case Qt::DisplayRole:
if (index.row() == 0) {
if (index.row() == 0)
{
return "Current";
} else if (index.row() == 1) {
}
else if (index.row() == 1)
{
return "Plasma Theme";
}
return d->schemeName();
case Qt::UserRole + 4:
if (index.row() == 0) {
if (index.row() == 0)
{
return "kdeglobals";
} else if (index.row() == 1) {
}
else if (index.row() == 1)
{
return "_plasmatheme_";
}
return d->schemeFile();
case Qt::UserRole + 5:
return d->backgroundColor();
case Qt::UserRole + 5: return d->backgroundColor();
case Qt::UserRole + 6:
return d->textColor();
case Qt::UserRole + 6: return d->textColor();
}
return QVariant();
@@ -79,7 +81,8 @@ QVariant SchemesModel::data(const QModelIndex &index, int role) const
int SchemesModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
if (parent.isValid())
{
return 0;
}
@@ -88,23 +91,23 @@ int SchemesModel::rowCount(const QModelIndex &parent) const
QHash<int, QByteArray> SchemesModel::roleNames() const
{
QHash<int, QByteArray> roles({
{Qt::DisplayRole, QByteArrayLiteral("display")},
QHash<int, QByteArray> roles({ { Qt::DisplayRole, QByteArrayLiteral("display") },
{ Qt::UserRole + 4, QByteArrayLiteral("file") },
{ Qt::UserRole + 5, QByteArrayLiteral("backgroundColor") },
{Qt::UserRole + 6, QByteArrayLiteral("textColor")}
});
{ Qt::UserRole + 6, QByteArrayLiteral("textColor") } });
return roles;
}
QColor SchemesModel::backgroundOf(const int &index) const
{
if (index == 0) {
if (index == 0)
{
auto ind = indexOf(m_defaultSchemeFile);
return ind >= 0 ? m_schemes[ind]->backgroundColor() : QColor("transparent");
}
if (index>0 && index<m_schemes.count()) {
if (index > 0 && index < m_schemes.count())
{
return m_schemes[index]->backgroundColor();
}
@@ -131,12 +134,17 @@ void SchemesModel::initSchemes()
QStringList registeredSchemes;
for(auto path : standardPaths) {
for (auto path : standardPaths)
{
QDir directory(path);
QStringList tempSchemes = directory.entryList(QStringList() << "*.colors" << "*.COLORS", QDir::Files);
QStringList tempSchemes = directory.entryList(QStringList() << "*.colors"
<< "*.COLORS",
QDir::Files);
foreach (QString filename, tempSchemes) {
if (!registeredSchemes.contains(filename)) {
foreach (QString filename, tempSchemes)
{
if (!registeredSchemes.contains(filename))
{
QString fullPath = path + "/" + filename;
insertSchemeInList(fullPath);
registeredSchemes << filename;
@@ -151,18 +159,21 @@ void SchemesModel::insertSchemeInList(QString file)
int atPos{ 0 };
for (int i = 0; i < m_schemes.count(); i++) {
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) {
if (result < 0)
{
atPos = i;
break;
} else {
}
else
{
atPos = i + 1;
}
}
m_schemes.insert(atPos, tempScheme);
@@ -170,24 +181,25 @@ void SchemesModel::insertSchemeInList(QString file)
int SchemesModel::indexOf(QString file) const
{
if (file.isEmpty() || file == "kdeglobals") {
if (file.isEmpty() || file == "kdeglobals")
{
return 0;
}
if (file == "_plasmatheme_") {
if (file == "_plasmatheme_")
{
return 1;
}
for (int i = 0; i < m_schemes.count(); i++) {
for (int i = 0; i < m_schemes.count(); i++)
{
SchemeColors *s = m_schemes[i];
if (s->schemeFile() == file) {
if (s->schemeFile() == file)
{
return i;
}
}
return -1;
}
}
}
+1 -7
View File
@@ -23,9 +23,6 @@
#include <QAbstractListModel>
namespace Decoration {
namespace Applet {
class SchemeColors;
class SchemesModel : public QAbstractListModel
@@ -52,10 +49,7 @@ private:
private:
QString m_defaultSchemeFile;
QList<Decoration::Applet::SchemeColors *> m_schemes;
QList<SchemeColors *> m_schemes;
};
}
}
#endif
+34 -28
View File
@@ -20,26 +20,18 @@
#include "themeextended.h"
// local
#include "commontools.h"
#include "schemecolors.h"
// Qt
#include <KConfigGroup>
#include <KDirWatch>
#include <KSharedConfig>
#include <QDebug>
#include <QDir>
// KDE
#include <KDirWatch>
#include <KConfigGroup>
#include <KSharedConfig>
#define DEFAULTCOLORSCHEME "default.colors"
namespace Decoration {
namespace Applet {
ExtendedTheme::ExtendedTheme(QObject *parent) :
QObject(parent)
ExtendedTheme::ExtendedTheme(QObject *parent) : QObject(parent)
{
load();
@@ -64,7 +56,8 @@ QObject *ExtendedTheme::colors() const
void ExtendedTheme::setOriginalSchemeFile(const QString &file)
{
if (m_originalSchemePath == file) {
if (m_originalSchemePath == file)
{
return;
}
@@ -84,7 +77,8 @@ void ExtendedTheme::setOriginalSchemeFile(const QString &file)
void ExtendedTheme::updateDefaultScheme()
{
QString defaultFilePath = m_extendedThemeDir.path() + "/" + DEFAULTCOLORSCHEME;
if (QFileInfo(defaultFilePath).exists()) {
if (QFileInfo(defaultFilePath).exists())
{
QFile(defaultFilePath).remove();
}
@@ -93,7 +87,8 @@ void ExtendedTheme::updateDefaultScheme()
updateDefaultSchemeValues();
if (m_colorsScheme) {
if (m_colorsScheme)
{
disconnect(m_colorsScheme, &SchemeColors::colorsChanged, this, &ExtendedTheme::themeChanged);
m_colorsScheme->deleteLater();
}
@@ -112,7 +107,8 @@ void ExtendedTheme::updateDefaultSchemeValues()
KSharedConfigPtr originalPtr = KSharedConfig::openConfig(m_originalSchemePath);
KSharedConfigPtr defaultPtr = KSharedConfig::openConfig(m_colorsSchemePath);
if (originalPtr && defaultPtr) {
if (originalPtr && defaultPtr)
{
KConfigGroup normalWindowGroup(originalPtr, u"Colors:Window"_qs);
KConfigGroup defaultWMGroup(defaultPtr, u"WM"_qs);
@@ -127,9 +123,12 @@ void ExtendedTheme::loadThemePaths()
{
m_themePath = AppletDecoration::standardPath("plasma/desktoptheme/" + m_theme.themeName());
if (QDir(m_themePath+"/widgets").exists()) {
if (QDir(m_themePath + "/widgets").exists())
{
m_themeWidgetsPath = m_themePath + "/widgets";
} else {
}
else
{
m_themeWidgetsPath = AppletDecoration::standardPath("plasma/desktoptheme/default/widgets");
}
@@ -138,30 +137,40 @@ void ExtendedTheme::loadThemePaths()
qDebug() << "Window Buttons : theme widgets path ::: " << m_themeWidgetsPath;
//! clear kde connections
for (auto &c : m_kdeConnections) {
for (auto &c : m_kdeConnections)
{
disconnect(c);
}
//! assign color schemes
QString themeColorScheme = m_themePath + "/colors";
if (QFileInfo(themeColorScheme).exists()) {
if (QFileInfo(themeColorScheme).exists())
{
setOriginalSchemeFile(themeColorScheme);
} else {
}
else
{
//! when plasma theme uses the kde colors
//! we track when kde color scheme is changing
QString kdeSettingsFile = QDir::homePath() + "/.config/kdeglobals";
KDirWatch::self()->addFile(kdeSettingsFile);
m_kdeConnections[0] = connect(KDirWatch::self(), &KDirWatch::dirty, this, [ &, kdeSettingsFile](const QString & path) {
if (path == kdeSettingsFile) {
m_kdeConnections[0] = connect(KDirWatch::self(), &KDirWatch::dirty, this,
[&, kdeSettingsFile](const QString &path)
{
if (path == kdeSettingsFile)
{
this->setOriginalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals"));
}
});
m_kdeConnections[1] = connect(KDirWatch::self(), &KDirWatch::created, this, [ &, kdeSettingsFile](const QString & path) {
if (path == kdeSettingsFile) {
m_kdeConnections[1] = connect(KDirWatch::self(), &KDirWatch::created, this,
[&, kdeSettingsFile](const QString &path)
{
if (path == kdeSettingsFile)
{
this->setOriginalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals"));
}
});
@@ -169,6 +178,3 @@ void ExtendedTheme::loadThemePaths()
setOriginalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals"));
}
}
}
}
+6 -22
View File
@@ -21,29 +21,15 @@
#ifndef PLASMAEXTENDEDTHEME_H
#define PLASMAEXTENDEDTHEME_H
// C++
#include <array>
#include "schemecolors.h"
// Qt
#include <QObject>
#include <QTemporaryDir>
// KDE
#include <KConfigGroup>
#include <KSharedConfig>
// Plasma
#include <KSvg/FrameSvg>
#include <Plasma/Theme>
namespace Decoration {
namespace Applet {
class SchemeColors;
}
}
namespace Decoration {
namespace Applet {
#include <QObject>
#include <QTemporaryDir>
#include <array>
class ExtendedTheme : public QObject
{
@@ -52,7 +38,8 @@ class ExtendedTheme: public QObject
public:
ExtendedTheme(QObject *parent = nullptr);
~ExtendedTheme() override;;
~ExtendedTheme() override;
;
QObject *colors() const;
@@ -84,7 +71,4 @@ private:
SchemeColors *m_colorsScheme{ nullptr };
};
}
}
#endif
+1 -8
View File
@@ -20,12 +20,9 @@
#ifndef TYPES_H
#define TYPES_H
#include <QObject>
#include <QMetaEnum>
#include <QMetaType>
namespace Decoration {
namespace Applet {
#include <QObject>
class Types
{
@@ -96,10 +93,6 @@ public:
Latte
};
Q_ENUM(ContainmentType)
};
}
}
#endif
+5 -11
View File
@@ -23,12 +23,7 @@
#include <QProcess>
#include <QtDBus/QtDBus>
namespace Decoration {
namespace Applet {
WindowSystem::WindowSystem(QObject *parent)
: QObject(parent)
WindowSystem::WindowSystem(QObject *parent) : QObject(parent)
{
}
@@ -48,7 +43,8 @@ bool WindowSystem::kwin_disabledMaximizedBorders() const
void WindowSystem::setDisabledMaximizedBorders(bool disable)
{
if (kwin_disabledMaximizedBorders() == disable) {
if (kwin_disabledMaximizedBorders() == disable)
{
return;
}
@@ -61,10 +57,8 @@ void WindowSystem::setDisabledMaximizedBorders(bool disable)
QDBusInterface iface("org.kde.KWin", "/KWin", "", QDBusConnection::sessionBus());
if (iface.isValid()) {
if (iface.isValid())
{
iface.call("reconfigure");
}
}
}
}
-7
View File
@@ -23,9 +23,6 @@
#include <QObject>
namespace Decoration {
namespace Applet {
class WindowSystem : public QObject
{
Q_OBJECT
@@ -40,8 +37,4 @@ private:
bool kwin_disabledMaximizedBorders() const;
};
}
}
#endif
+1 -1
View File
@@ -18,7 +18,6 @@
*/
import QtQuick 2.0
import org.kde.plasma.configuration 2.0
ConfigModel {
@@ -27,4 +26,5 @@ ConfigModel {
icon: "preferences-desktop-display-color"
source: "config/ConfigGeneral.qml"
}
}
+1 -2
View File
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
<kcfgfile name="" />
<group name="General">
+5 -9
View File
@@ -21,27 +21,23 @@ import QtQuick
Item {
id: latteWindowsTracker
property bool filterByScreen: true
property bool filterByScreen: true
readonly property bool existsWindowActive: selectedTracker.lastActiveWindow.isValid && !lastActiveTaskItem.isMinimized && lastActiveTaskItem.isActive
readonly property bool existsWindowShown: selectedTracker.lastActiveWindow.isValid && !lastActiveTaskItem.isMinimized
readonly property QtObject selectedTracker: filterByScreen ? latteBridge.windowsTracker.currentScreen : latteBridge.windowsTracker.allScreens
readonly property Item lastActiveTaskItem: Item {
readonly property Item
lastActiveTaskItem: Item {
readonly property string title: selectedTracker.lastActiveWindow.display
readonly property bool isMinimized: selectedTracker.lastActiveWindow.isMinimized
readonly property bool isMaximized: selectedTracker.lastActiveWindow.isMaximized
readonly property bool isActive: selectedTracker.lastActiveWindow.isActive
readonly property bool isOnAllDesktops: selectedTracker.lastActiveWindow.isOnAllDesktops
readonly property bool isKeepAbove: selectedTracker.lastActiveWindow.isKeepAbove
readonly property bool isClosable: selectedTracker.lastActiveWindow.hasOwnProperty("isClosable") ? selectedTracker.lastActiveWindow.isClosable : true
readonly property bool isMinimizable: selectedTracker.lastActiveWindow.hasOwnProperty("isMinimizable") ? selectedTracker.lastActiveWindow.isMinimizable : true
readonly property bool isMaximizable: selectedTracker.lastActiveWindow.hasOwnProperty("isMaximizable") ? selectedTracker.lastActiveWindow.isMaximizable : true
readonly property bool isVirtualDesktopsChangeable: selectedTracker.lastActiveWindow.hasOwnProperty("isVirtualDesktopsChangeable") ?
selectedTracker.lastActiveWindow.isVirtualDesktopsChangeable : true
readonly property bool isVirtualDesktopsChangeable: selectedTracker.lastActiveWindow.hasOwnProperty("isVirtualDesktopsChangeable") ? selectedTracker.lastActiveWindow.isVirtualDesktopsChangeable : true
readonly property int winId: selectedTracker.lastActiveWindow.hasOwnProperty("winId") ? selectedTracker.lastActiveWindow.winId : -1
}
@@ -64,5 +60,5 @@ Item {
function toggleKeepAbove() {
selectedTracker.lastActiveWindow.requestToggleKeepAbove();
}
}
}
+46 -44
View File
@@ -17,22 +17,50 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.7
import QtQml.Models 2.2
import org.kde.plasma.plasmoid 2.0
import QtQuick 2.7
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.plasmoid 2.0
import org.kde.taskmanager 0.1 as TaskManager
Item {
id: plasmaTasksItem
property bool filterByScreen: true
property bool filterByScreen: true
readonly property bool existsWindowActive: lastActiveTaskItem && tasksRepeater.count > 0 && (root.perScreenActive || lastActiveTaskItem.isActive)
readonly property bool existsWindowShown: lastActiveTaskItem && tasksRepeater.count > 0 && !lastActiveTaskItem.isMinimized
property Item lastActiveTaskItem: null
function toggleMaximized() {
if (lastActiveTaskItem)
lastActiveTaskItem.toggleMaximized();
}
function toggleMinimized() {
if (lastActiveTaskItem)
lastActiveTaskItem.toggleMinimized();
}
function toggleClose() {
if (lastActiveTaskItem)
lastActiveTaskItem.toggleClose();
}
function togglePinToAllDesktops() {
if (lastActiveTaskItem)
lastActiveTaskItem.togglePinToAllDesktops();
}
function toggleKeepAbove() {
if (lastActiveTaskItem)
lastActiveTaskItem.toggleKeepAbove();
}
// To get current activity name
TaskManager.ActivityInfo {
id: activityInfo
@@ -45,12 +73,12 @@ Item {
TaskManager.TasksModel {
id: tasksModel
sortMode: TaskManager.TasksModel.SortVirtualDesktop
groupMode: TaskManager.TasksModel.GroupDisabled
screenGeometry: root.screenGeometry
activity: activityInfo.currentActivity
virtualDesktop: virtualDesktopInfo.currentDesktop
filterByScreen: plasmaTasksItem.filterByScreen
filterByVirtualDesktop: true
filterByActivity: true
@@ -58,34 +86,24 @@ Item {
Repeater {
id: tasksRepeater
model: DelegateModel {
model: tasksModel
delegate: Item {
id: task
readonly property string title: display
readonly property bool isMinimized: IsMinimized === true ? true : false
readonly property bool isMaximized: IsMaximized === true ? true : false
readonly property bool isActive: IsActive === true ? true : false
readonly property bool isOnAllDesktops: IsOnAllVirtualDesktops === true ? true : false
readonly property bool isKeepAbove: IsKeepAbove === true ? true : false
readonly property bool isClosable: IsClosable === true ? true : false
readonly property bool isMinimizable: IsMinimizable === true ? true : false
readonly property bool isMaximizable: IsMaximizable === true ? true : false
readonly property bool isVirtualDesktopsChangeable: IsVirtualDesktopsChangeable === true ? true : false
onIsActiveChanged: {
if (isActive) {
plasmaTasksItem.lastActiveTaskItem = task;
}
}
Component.onDestruction: {
if (plasmaTasksItem.lastActiveTaskItem === task) {
plasmaTasksItem.lastActiveTaskItem = null;
}
}
function modelIndex() {
return tasksModel.makeModelIndex(index);
}
@@ -109,37 +127,21 @@ Item {
function toggleKeepAbove() {
tasksModel.requestToggleKeepAbove(modelIndex());
}
onIsActiveChanged: {
if (isActive)
plasmaTasksItem.lastActiveTaskItem = task;
}
Component.onDestruction: {
if (plasmaTasksItem.lastActiveTaskItem === task)
plasmaTasksItem.lastActiveTaskItem = null;
}
}
function toggleMaximized() {
if (lastActiveTaskItem) {
lastActiveTaskItem.toggleMaximized();
}
}
function toggleMinimized() {
if (lastActiveTaskItem) {
lastActiveTaskItem.toggleMinimized();
}
}
function toggleClose() {
if (lastActiveTaskItem) {
lastActiveTaskItem.toggleClose();
}
}
function togglePinToAllDesktops() {
if (lastActiveTaskItem) {
lastActiveTaskItem.togglePinToAllDesktops();
}
}
function toggleKeepAbove(){
if (lastActiveTaskItem) {
lastActiveTaskItem.toggleKeepAbove();
}
}
}
+16 -9
View File
@@ -25,17 +25,17 @@ ComboBox {
id: combobox
Connections {
target: popup
function onClosed() {
root.forceActiveFocus();
}
target: popup
}
delegate: MouseArea {
width: combobox.width
height: combobox.height
hoverEnabled: true
onClicked: {
combobox.currentIndex = index;
selectedScheme = model.file;
@@ -44,29 +44,29 @@ ComboBox {
Rectangle {
id: delegateBackground
readonly property color selectedColor: Qt.rgba(palette.highlight.r, palette.highlight.g, palette.highlight.b, 0.5)
anchors.fill: parent
color: {
if (containsMouse) {
if (containsMouse)
return palette.highlight;
}
if (combobox.currentIndex === index) {
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 == "kdeglobals") || (file == "_plasmatheme_")) ? 0 : 1
Rectangle {
@@ -85,15 +85,22 @@ ComboBox {
border.width: parent.border.width
border.color: parent.border.color
}
}
}
Label {
id: label
text: display
color: containsMouse ? palette.highlightedText : palette.text
}
}
}
}
}
+74 -50
View File
@@ -20,16 +20,15 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.components as PlasmaComponents
import org.kde.kitemmodels
import org.kde.kirigami as Kirigami
import org.kde.appletdecoration as AppletDecoration
import org.kde.kirigami as Kirigami
import org.kde.kitemmodels
import org.kde.plasma.components as PlasmaComponents
import org.kde.plasma.core as PlasmaCore
Item {
///END Decoration Items
id: root
property alias cfg_useCurrentDecoration: root.useCurrent
@@ -48,7 +47,6 @@ Item {
property alias cfg_lengthFirstMargin: lengthFirstSpn.value
property alias cfg_lengthLastMargin: lengthLastSpn.value
property alias cfg_lengthMarginsLock: lockItem.locked
property var cfg_buttonSizePercentageDefault
property var cfg_buttonsDefault
property var cfg_containmentType
@@ -70,7 +68,6 @@ Item {
property var cfg_useDecorationMetricsDefault
property var cfg_visibilityDefault
property var title
// used as bridge to communicate properly between configuration and ui
property bool useCurrent
property int hiddenState
@@ -79,41 +76,41 @@ Item {
property string selectedScheme
property string selectedTheme
property string currentButtons
// used from the ui
readonly property bool selectedDecorationExists: decorations.decorationExists(root.selectedPlugin, root.selectedTheme)
readonly property real centerFactor: 0.3
readonly property int minimumWidth: 220
property string currentPlugin: root.useCurrent || !selectedDecorationExists ? decorations.currentPlugin : root.selectedPlugin
property string currentTheme: root.useCurrent || !selectedDecorationExists ? decorations.currentTheme : root.selectedTheme
///START Decoration Items
AppletDecoration.Bridge {
id: bridgeItem
plugin: currentPlugin
theme: currentTheme
}
AppletDecoration.Settings {
id: settingsItem
bridge: bridgeItem.bridge
borderSizesIndex: 0
}
AppletDecoration.SharedDecoration {
id: sharedDecorationItem
bridge: bridgeItem.bridge
settings: settingsItem
}
AppletDecoration.AuroraeTheme {
id: auroraeThemeEngine
theme: isEnabled ? currentTheme : ""
readonly property bool isEnabled: decorations.isAurorae(root.currentPlugin, root.currentTheme)
theme: isEnabled ? currentTheme : ""
}
AppletDecoration.DecorationsModel {
@@ -137,15 +134,15 @@ Item {
// sort decorations based on display name
KSortFilterProxyModel {
id: sortedDecorations
sourceModel: decorations
sortRoleName: 'display'
sortOrder: Qt.AscendingOrder
}
///END Decoration Items
ColumnLayout {
id: mainColumn
spacing: Kirigami.Units.largeSpacing
Layout.fillWidth: true
@@ -158,10 +155,12 @@ Item {
DecorationsComboBox {
id: decorationCmb
Layout.minimumWidth: 180
Layout.preferredWidth: 0.2 * root.width
Layout.maximumWidth: 300
}
}
RowLayout {
@@ -175,17 +174,17 @@ Item {
ColorsComboBox {
id: colorsCmbBox
Layout.minimumWidth: 250
Layout.preferredWidth: 0.3 * root.width
Layout.maximumWidth: 380
model: colorsModel
textRole: "display"
Component.onCompleted: {
currentIndex = colorsModel.indexOf(plasmoid.configuration.selectedScheme);
}
}
}
GridLayout {
@@ -199,21 +198,20 @@ Item {
OrderableListView {
id: activeButtons
readonly property color schemesBackgroundColor: plasmaThemeExtended.isActive ? plasmaThemeExtended.colors.backgroundColor : colorsModel.backgroundOf(colorsCmbBox.currentIndex)
itemWidth: 38
itemHeight: 38
buttonsStr: root.currentButtons
orientation: ListView.Horizontal
color: !auroraeThemeEngine.isEnabled ? schemesBackgroundColor : auroraeThemeEngine.titleBackgroundColor
buttonSize: buttonSizeSpn.value
buttonsFirstMargin: lengthFirstSpn.value
buttonsLastMargin: lengthLastSpn.value
buttonsSpacing: spacingSpn.value
readonly property color schemesBackgroundColor: plasmaThemeExtended.isActive ?
plasmaThemeExtended.colors.backgroundColor :
colorsModel.backgroundOf(colorsCmbBox.currentIndex)
}
}
GridLayout {
@@ -238,53 +236,60 @@ Item {
RadioButton {
id: alwaysVisibleBtn
text: i18n("Always visible")
checked: root.visibility === AppletDecoration.Types.AlwaysVisible
onCheckedChanged: {
if (checked) {
if (checked)
root.visibility = AppletDecoration.Types.AlwaysVisible;
}
}
}
RadioButton {
id: activeWindowBtn
text: i18n("Active window is present")
checked: root.visibility === AppletDecoration.Types.ActiveWindow
onCheckedChanged: {
if (checked) {
if (checked)
root.visibility = AppletDecoration.Types.ActiveWindow;
}
}
}
RadioButton {
id: activeMaximizedBtn
text: plasmoid.configuration.containmentType === AppletDecoration.Types.Latte ?
i18n("Last active window is maximized") : i18n("Active window is maximized")
text: plasmoid.configuration.containmentType === AppletDecoration.Types.Latte ? i18n("Last active window is maximized") : i18n("Active window is maximized")
checked: root.visibility === AppletDecoration.Types.ActiveMaximizedWindow
onCheckedChanged: {
if (checked) {
if (checked)
root.visibility = AppletDecoration.Types.ActiveMaximizedWindow;
}
}
}
RadioButton {
id: shownWindowBtn
text: i18n("At least one window is shown")
checked: root.visibility === AppletDecoration.Types.ShownWindowExists
onCheckedChanged: {
if (checked) {
if (checked)
root.visibility = AppletDecoration.Types.ShownWindowExists;
}
}
}
}
}
GridLayout {
columns: 2
rows: 2
flow: GridLayout.TopToBottom
enabled: root.visibility !== AppletDecoration.Types.AlwaysVisible
Label {
@@ -304,25 +309,30 @@ Item {
RadioButton {
id: slideOutBtn
text: i18n("Slide out animation")
checked: root.hiddenState === AppletDecoration.Types.SlideOut
onCheckedChanged: {
if (checked) {
if (checked)
root.hiddenState = AppletDecoration.Types.SlideOut;
}
}
}
RadioButton {
id: emptySpaceBtn
text: i18n("Preserve as empty space")
checked: root.hiddenState === AppletDecoration.Types.EmptySpace
onCheckedChanged: {
if (checked) {
if (checked)
root.hiddenState = AppletDecoration.Types.EmptySpace;
}
}
}
}
}
GridLayout {
@@ -334,8 +344,10 @@ Item {
CheckBox {
id: byScreenChk
text: i18n("Show only for windows in current screen")
}
}
GridLayout {
@@ -347,8 +359,10 @@ Item {
CheckBox {
id: stickyChk
text: i18n("Enabled")
}
}
GridLayout {
@@ -360,15 +374,16 @@ Item {
Layout.minimumWidth: Math.max(centerFactor * root.width, minimumWidth)
Layout.alignment: Qt.AlignTop | Qt.AlignRight
Layout.rowSpan: 2
text: i18n("Appearance:")
horizontalAlignment: Text.AlignRight
}
CheckBox {
id: inactiveChk
text: i18n("Draw buttons inactive state when needed")
}
}
ColumnLayout {
@@ -376,6 +391,7 @@ Item {
GridLayout {
id: visualSettingsGroup1
columns: 2
Label {
@@ -387,6 +403,7 @@ Item {
CheckBox {
id: decorationMetricsChk
text: i18n("Use from decoration if any are found")
visible: auroraeThemeEngine.isEnabled
}
@@ -400,6 +417,7 @@ Item {
SpinBox {
id: buttonSizeSpn
from: 40
to: 100
// suffix: " %"
@@ -415,49 +433,50 @@ Item {
SpinBox {
id: spacingSpn
from: 0
to: 24
// suffix: " " + i18nc("pixels","px.")
enabled: !(auroraeThemeEngine.isEnabled && decorationMetricsChk.checked)
}
}
GridLayout {
id: visualSettingsGroup2
property int lockerHeight: firstLengthLbl.height + rowSpacing / 2
columns: 3
rows: 2
flow: GridLayout.TopToBottom
columnSpacing: visualSettingsGroup1.columnSpacing
rowSpacing: visualSettingsGroup1.rowSpacing
property int lockerHeight: firstLengthLbl.height + rowSpacing/2
Label {
id: firstLengthLbl
Layout.minimumWidth: Math.max(centerFactor * root.width, minimumWidth)
text: plasmoid.configuration.formFactor===PlasmaCore.Types.Horizontal ?
i18n("Left margin:") : i18n("Top margin:")
text: plasmoid.configuration.formFactor === PlasmaCore.Types.Horizontal ? i18n("Left margin:") : i18n("Top margin:")
horizontalAlignment: Text.AlignRight
}
Label {
Layout.minimumWidth: Math.max(centerFactor * root.width, minimumWidth)
text: plasmoid.configuration.formFactor===PlasmaCore.Types.Horizontal ?
i18n("Right margin:") : i18n("Bottom margin:")
text: plasmoid.configuration.formFactor === PlasmaCore.Types.Horizontal ? i18n("Right margin:") : i18n("Bottom margin:")
horizontalAlignment: Text.AlignRight
enabled: !lockItem.locked
}
SpinBox {
id: lengthFirstSpn
from: 0
to: 24
// suffix: " " + i18nc("pixels","px.")
id: lengthFirstSpn
property int lastValue: -1
from: 0
to: 24
onValueChanged: {
if (lockItem.locked) {
var step = value - lastValue > 0 ? 1 : -1;
@@ -465,7 +484,6 @@ Item {
lengthLastSpn.value = lengthLastSpn.value + step;
}
}
Component.onCompleted: {
lastValue = plasmoid.configuration.lengthFirstMargin;
}
@@ -473,6 +491,7 @@ Item {
SpinBox {
id: lengthLastSpn
from: 0
to: 24
// suffix: " " + i18nc("pixels","px.")
@@ -481,6 +500,7 @@ Item {
LockItem {
id: lockItem
Layout.minimumWidth: 40
Layout.maximumWidth: 40
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
@@ -489,7 +509,11 @@ Item {
Layout.topMargin: firstLengthLbl.height / 2
Layout.rowSpan: 2
}
}
}
}
}
@@ -24,34 +24,36 @@ import org.kde.kirigami as Kirigami
ComboBox {
id: combobox
model: sortedDecorations
textRole: "display"
valueRole: "plugin"
Connections{
target: popup
function onClosed() {
root.forceActiveFocus();
}
}
onActivated: {
var index = combobox.currentIndex;
if (index === -1) {
if (index === -1)
return ;
}
console.log(currentTheme, combobox.currentText, combobox.currentValue)
console.log(currentTheme, combobox.currentText, combobox.currentValue);
root.useCurrent = false;
root.selectedPlugin = combobox.currentValue;
root.selectedTheme = combobox.currentText;
}
Component.onCompleted: {
combobox.currentIndex = combobox.find(root.currentTheme);
}
Connections {
function onClosed() {
root.forceActiveFocus();
}
target: popup
}
delegate: MouseArea {
height: combobox.height
width: combobox.width
hoverEnabled: true
onClicked: {
combobox.currentIndex = index;
root.useCurrent = false;
@@ -62,32 +64,32 @@ ComboBox {
Rectangle {
id: delegateBackground
readonly property color selectedColor: Qt.rgba(palette.highlight.r, palette.highlight.g, palette.highlight.b, 0.5)
anchors.fill: parent
color: {
if (containsMouse) {
if (containsMouse)
return palette.highlight;
}
if (combobox.currentIndex === index) {
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);
Label {
id: label
anchors.left: parent.left
anchors.leftMargin: Kirigami.Units.smallSpacing
anchors.verticalCenter: parent.verticalCenter
text: display + " (" + plugin + ")"
color: containsMouse ? palette.highlightedText : palette.text
}
}
}
Component.onCompleted: {
combobox.currentIndex = combobox.find(root.currentTheme);
}
}
+5 -5
View File
@@ -20,14 +20,12 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import org.kde.kirigami as Kirigami
Item {
id: main
property bool locked: true
readonly property int verticalSubHeight: height - (button.height / 2)
SystemPalette {
@@ -36,16 +34,17 @@ Item{
ColumnLayout {
id: column
spacing: 0
opacity: locked ? 1 : 0.5
Rectangle {
id: subRectTop
Layout.minimumWidth: button.width / 2 + Layout.minimumHeight / 2
Layout.minimumHeight: 3
Layout.maximumWidth: Layout.minimumWidth
Layout.maximumHeight: Layout.minimumHeight
color: palette.text
}
@@ -60,6 +59,7 @@ Item{
Kirigami.Icon {
id: button
width: 24
height: 24
source: locked ? "lock" : "unlock"
@@ -79,14 +79,14 @@ Item{
Layout.minimumHeight: subRectTop.Layout.minimumHeight
Layout.maximumWidth: Layout.minimumWidth
Layout.maximumHeight: Layout.minimumHeight
color: palette.text
}
}
MouseArea {
anchors.fill: column
onClicked: locked = !locked;
onClicked: locked = !locked
}
}
+204 -222
View File
@@ -1,3 +1,4 @@
import "../../code/tools.js" as ModelTools
/*
* Copyright 2018 Michail Vourlakos <mvourlakos@gmail.com>
*
@@ -17,120 +18,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Layouts
import org.kde.appletdecoration 0.1 as AppletDecoration
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.appletdecoration 0.1 as AppletDecoration
import "../../code/tools.js" as ModelTools
Rectangle {
id: listContent
radius: 4
anchors.margins: margin
signal coordinatesChanged();
property int orientation
property double itemWidth
property double itemHeight
property int buttonSize: 100
property int buttonsFirstMargin: 0
property int buttonsLastMargin: 0
property int buttonsSpacing: 0
Layout.minimumWidth: width
Layout.preferredWidth: Layout.minimumWidth
Layout.maximumWidth: Layout.maximumWidth
Layout.minimumHeight: height
Layout.preferredHeight: Layout.minimumHeight
Layout.maximumHeight: Layout.maximumHeight
property string buttonsStr
width: listView.childrenRect.width + 2 * margin//(itemWidth+listView.spacing) * (orientation == ListView.Vertical ? 1 : controlButtonsModel.count) + 2 * margin
height: listView.childrenRect.height + 2 * margin //(itemHeight+listView.spacing) * (orientation == ListView.Horizontal ? 1 : controlButtonsModel.count)
signal modelOrderChanged()
property var tasksPreparedArray: []
readonly property int margin: 0
readonly property double iconHeight: itemHeight*(buttonSize/100) - margin * 2
readonly property string appliedScheme: {
if (selectedScheme === "_plasmatheme_") {
return plasmaThemeExtended.colors.schemeFile;
} else if (selectedScheme === "kdeglobals") {
return colorsModel.defaultSchemeFile();
}
return selectedScheme;
}
Component.onCompleted: {
initButtons();
coordinatesChanged();
}
function initButtons() {
if (!buttonsRecreator.running){
buttonsRecreator.start();
}
}
function initializeControlButtonsModel() {
sharedDecorationItem.createDecoration();
var buttonsList = buttonsStr.split('|');
ModelTools.initializeControlButtonsModel(buttonsList,tasksPreparedArray, controlButtonsModel, false);
listView.splitterIndex = ModelTools.indexOfSplitter(controlButtonsModel);
coordinatesTimer.start();
}
function buttonsListStr() {
var str = "";
for (var i=0; i<controlButtonsModel.count; ++i) {
str = str + String(controlButtonsModel.get(i).buttonType);
if (i!==controlButtonsModel.count-1) {
str = str+"|";
}
}
return str;
}
function triggerUpdateFromPlasma() {
if (plasmaThemeExtended.isActive) {
listContent.initButtons();
}
}
Connections{
target: root
function onCurrentPluginChanged() {
listContent.initButtons();
}
}
Connections {
target: plasmaThemeExtended
function onThemeChanged() {
triggerUpdateFromPlasma();
}
}
ListModel {
id: controlButtonsModel
}
/*Rectangle{
anchors.fill: parent
color: "transparent"
@@ -138,46 +31,144 @@ Rectangle {
border.width: 1
}*/
id: listContent
property int orientation
property double itemWidth
property double itemHeight
property int buttonSize: 100
property int buttonsFirstMargin: 0
property int buttonsLastMargin: 0
property int buttonsSpacing: 0
property string buttonsStr
property var tasksPreparedArray: []
readonly property int margin: 0
readonly property double iconHeight: itemHeight * (buttonSize / 100) - margin * 2
readonly property string appliedScheme: {
if (selectedScheme === "_plasmatheme_")
return plasmaThemeExtended.colors.schemeFile;
else if (selectedScheme === "kdeglobals")
return colorsModel.defaultSchemeFile();
return selectedScheme;
}
signal coordinatesChanged()
signal modelOrderChanged()
function initButtons() {
if (!buttonsRecreator.running)
buttonsRecreator.start();
}
function initializeControlButtonsModel() {
sharedDecorationItem.createDecoration();
var buttonsList = buttonsStr.split('|');
ModelTools.initializeControlButtonsModel(buttonsList, tasksPreparedArray, controlButtonsModel, false);
listView.splitterIndex = ModelTools.indexOfSplitter(controlButtonsModel);
coordinatesTimer.start();
}
function buttonsListStr() {
var str = "";
for (var i = 0; i < controlButtonsModel.count; ++i) {
str = str + String(controlButtonsModel.get(i).buttonType);
if (i !== controlButtonsModel.count - 1)
str = str + "|";
}
return str;
}
function triggerUpdateFromPlasma() {
if (plasmaThemeExtended.isActive)
listContent.initButtons();
}
radius: 4
anchors.margins: margin
Layout.minimumWidth: width
Layout.preferredWidth: Layout.minimumWidth
Layout.maximumWidth: Layout.maximumWidth
Layout.minimumHeight: height
Layout.preferredHeight: Layout.minimumHeight
Layout.maximumHeight: Layout.maximumHeight
width: listView.childrenRect.width + 2 * margin //(itemWidth+listView.spacing) * (orientation == ListView.Vertical ? 1 : controlButtonsModel.count) + 2 * margin
height: listView.childrenRect.height + 2 * margin //(itemHeight+listView.spacing) * (orientation == ListView.Horizontal ? 1 : controlButtonsModel.count)
Component.onCompleted: {
initButtons();
coordinatesChanged();
}
Connections {
function onCurrentPluginChanged() {
listContent.initButtons();
}
target: root
}
Connections {
function onThemeChanged() {
triggerUpdateFromPlasma();
}
target: plasmaThemeExtended
}
ListModel {
id: controlButtonsModel
}
SystemPalette {
id: palette
}
ListView {
id: listView
property int splitterIndex: -1
width: childrenRect.width
height: itemHeight
model: controlButtonsModel
orientation: listContent.orientation
delegate: auroraeThemeEngine.isEnabled ? auroraeButtonComponent : pluginButtonComponent
currentIndex: loc.initIndex
property int splitterIndex: -1
onWidthChanged: coordinatesTimer.start()
moveDisplaced: Transition {
NumberAnimation { properties: "x"; duration: 150; easing.type: Easing.Linear }
NumberAnimation {
properties: "x"
duration: 150
easing.type: Easing.Linear
}
}
move: Transition {
NumberAnimation { properties: "x"; duration: 75; easing.type: Easing.Linear }
NumberAnimation {
properties: "x"
duration: 75
easing.type: Easing.Linear
}
}
onWidthChanged: coordinatesTimer.start();
}
MouseArea {
id: loc
anchors.fill: parent
pressAndHoldInterval: 200
cursorShape: Qt.DragMoveCursor
property int initButton: -1 // Original button in model
property int initIndex: -1 // Original position in model
property int index: listView.indexAt(mouseX, mouseY) // Item underneath cursor
readonly property bool buttonIsDragged: initButton !== -1 || initIndex !== -1
anchors.fill: parent
pressAndHoldInterval: 200
cursorShape: Qt.DragMoveCursor
onPressAndHold: {
initIndex = listView.indexAt(mouseX, mouseY);
initButton = controlButtonsModel.get(initIndex).buttonType;
@@ -186,7 +177,6 @@ Rectangle {
initIndex = -1;
initButton = -1;
}
onPositionChanged: {
if (containsPress && initIndex !== -1 && index !== -1 && index !== initIndex) {
controlButtonsModel.move(initIndex, index, 1);
@@ -200,59 +190,41 @@ Rectangle {
///START Components
Component {
id: pluginButtonComponent
Rectangle {
id: decorationButton
readonly property bool isVisibleButton: index >= 0 && index < listView.splitterIndex
readonly property bool isFirstVisibleButton: index === 0 && listView.splitterIndex > 0
readonly property bool isLastVisibleButton: index >= 0 && index === listView.splitterIndex - 1
readonly property bool isButtonSplitter: index >= 0 && index === listView.splitterIndex
y: (itemHeight - iconHeight) / 2
width: isButtonSplitter && !loc.buttonIsDragged ? Math.min(listContent.iconHeight/2, 6 + buttonsLastMargin) :
listContent.iconHeight + leftMargin + rightMargin
height: listContent.iconHeight + 2 * listContent.margin
color: {
if (listView.currentIndex === index) {
if (index !== listView.splitterIndex) {
return palette.highlight;
} else {
return "#25ff0000";
}
}
return "transparent";
}
property int leftMargin: 0
property int rightMargin: 0
Behavior on leftMargin {
NumberAnimation {
duration: 50
easing.type: Easing.Linear
}
}
Behavior on rightMargin {
NumberAnimation {
duration: 50
easing.type: Easing.Linear
y: (itemHeight - iconHeight) / 2
width: isButtonSplitter && !loc.buttonIsDragged ? Math.min(listContent.iconHeight / 2, 6 + buttonsLastMargin) : listContent.iconHeight + leftMargin + rightMargin
height: listContent.iconHeight + 2 * listContent.margin
color: {
if (listView.currentIndex === index) {
if (index !== listView.splitterIndex)
return palette.highlight;
else
return "#25ff0000";
}
return "transparent";
}
Binding {
target: decorationButton
property: "leftMargin"
value: {
if (loc.buttonIsDragged) {
if (loc.buttonIsDragged)
return buttonsSpacing / 2;
}
if (isFirstVisibleButton) {
if (isFirstVisibleButton)
return buttonsFirstMargin;
} else if (isVisibleButton) {
else if (isVisibleButton)
return buttonsSpacing;
}
return listContent.margin;
}
}
@@ -261,38 +233,18 @@ Rectangle {
target: decorationButton
property: "rightMargin"
value: {
if (loc.buttonIsDragged) {
if (loc.buttonIsDragged)
return buttonsSpacing / 2;
}
if (isLastVisibleButton) {
if (isLastVisibleButton)
return buttonsLastMargin;
}
return listContent.margin;
}
}
AppletDecoration.Button {
id: cButton
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: parent.leftMargin
opacity: listView.splitterIndex !==-1 && listView.splitterIndex<index ? 0.4 : 1
width: isButtonSplitter ? parent.width : listContent.iconHeight
height: isButtonSplitter ? parent.height : listContent.iconHeight
bridge: bridgeItem.bridge
sharedDecoration: sharedDecorationItem
type: buttonType
isOnAllDesktops: false
isMaximized: false
scheme: appliedScheme
visible: buttonType !== AppletDecoration.Types.Custom
function updateCoordinates() {
var translated = cButton.mapToItem(listView, 0, 0);
@@ -300,12 +252,28 @@ Rectangle {
cButton.localY = translated.y;
}
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: parent.leftMargin
opacity: listView.splitterIndex !== -1 && listView.splitterIndex < index ? 0.4 : 1
width: isButtonSplitter ? parent.width : listContent.iconHeight
height: isButtonSplitter ? parent.height : listContent.iconHeight
bridge: bridgeItem.bridge
sharedDecoration: sharedDecorationItem
type: buttonType
isOnAllDesktops: false
isMaximized: false
scheme: appliedScheme
visible: buttonType !== AppletDecoration.Types.Custom
Connections {
target: listContent
function onCoordinatesChanged() {
cButton.updateCoordinates();
}
target: listContent
}
}
Rectangle {
@@ -318,41 +286,13 @@ Rectangle {
visible: buttonType === AppletDecoration.Types.Custom
opacity: 0.75
}
}
}
Component {
id: auroraeButtonComponent
Rectangle{
id: auroraeButton
readonly property bool isVisibleButton: index >= 0 && index < listView.splitterIndex
readonly property bool isFirstVisibleButton: index === 0 && listView.splitterIndex > 0
readonly property bool isLastVisibleButton: index>=0 && index===listView.splitterIndex-1
readonly property bool isButtonSplitter: index>=0 && index===listView.splitterIndex
y: (itemHeight - iconHeight) / 2
width: isButtonSplitter && !loc.buttonIsDragged ? Math.min(listContent.iconHeight/2, 6 + buttonsLastMargin) :
auroraeThemeEngine.buttonRatio * listContent.iconHeight + leftMargin + rightMargin
height: listContent.iconHeight + 2 * listContent.margin
color: {
if (listView.currentIndex === index) {
if (index !== listView.splitterIndex) {
return palette.highlight;
} else {
return "#25ff0000";
}
}
return "transparent";
}
property int leftMargin: 0
property int rightMargin: 0
Behavior on leftMargin {
NumberAnimation {
duration: 50
easing.type: Easing.Linear
}
}
Behavior on rightMargin {
@@ -360,22 +300,50 @@ Rectangle {
duration: 50
easing.type: Easing.Linear
}
}
}
}
Component {
id: auroraeButtonComponent
Rectangle {
id: auroraeButton
readonly property bool isVisibleButton: index >= 0 && index < listView.splitterIndex
readonly property bool isFirstVisibleButton: index === 0 && listView.splitterIndex > 0
readonly property bool isLastVisibleButton: index >= 0 && index === listView.splitterIndex - 1
readonly property bool isButtonSplitter: index >= 0 && index === listView.splitterIndex
property int leftMargin: 0
property int rightMargin: 0
y: (itemHeight - iconHeight) / 2
width: isButtonSplitter && !loc.buttonIsDragged ? Math.min(listContent.iconHeight / 2, 6 + buttonsLastMargin) : auroraeThemeEngine.buttonRatio * listContent.iconHeight + leftMargin + rightMargin
height: listContent.iconHeight + 2 * listContent.margin
color: {
if (listView.currentIndex === index) {
if (index !== listView.splitterIndex)
return palette.highlight;
else
return "#25ff0000";
}
return "transparent";
}
Binding {
target: auroraeButton
property: "leftMargin"
value: {
if (loc.buttonIsDragged) {
if (loc.buttonIsDragged)
return buttonsSpacing / 2;
}
if (isFirstVisibleButton) {
if (isFirstVisibleButton)
return buttonsFirstMargin;
} else if (isVisibleButton) {
else if (isVisibleButton)
return buttonsSpacing;
}
return listContent.margin;
}
}
@@ -384,13 +352,11 @@ Rectangle {
target: auroraeButton
property: "rightMargin"
value: {
if (loc.buttonIsDragged) {
if (loc.buttonIsDragged)
return buttonsSpacing / 2;
}
if (isLastVisibleButton) {
if (isLastVisibleButton)
return buttonsLastMargin;
}
return listContent.margin;
}
@@ -400,17 +366,13 @@ Rectangle {
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: parent.leftMargin
opacity: listView.splitterIndex !== -1 && listView.splitterIndex < index ? 0.4 : 1
width: auroraeThemeEngine.buttonRatio * height
height: listContent.iconHeight
isOnAllDesktops: false
isMaximized: false
buttonType: model.buttonType
auroraeTheme: auroraeThemeEngine
visible: buttonType !== AppletDecoration.Types.Custom
}
@@ -424,7 +386,25 @@ Rectangle {
visible: buttonType === AppletDecoration.Types.Custom
opacity: 0.75
}
Behavior on leftMargin {
NumberAnimation {
duration: 50
easing.type: Easing.Linear
}
}
Behavior on rightMargin {
NumberAnimation {
duration: 50
easing.type: Easing.Linear
}
}
}
}
///END Components
@@ -432,6 +412,7 @@ Rectangle {
//! of buttons with no reason.
Timer {
id: buttonsRecreator
interval: 200
onTriggered: {
initializeControlButtonsModel();
@@ -442,10 +423,11 @@ Rectangle {
//! of the buttons moving
Timer {
id: coordinatesTimer
interval: 350
onTriggered: {
listContent.coordinatesChanged();
}
}
}
}
+279 -366
View File
@@ -17,203 +17,128 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import "../code/tools.js" as ModelTools
import QtQuick
import QtQuick.Layouts
import org.kde.plasma.plasmoid
import org.kde.plasma.core as PlasmaCore
import org.kde.appletdecoration as AppletDecoration
import "../code/tools.js" as ModelTools
import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.plasmoid
PlasmoidItem {
// END visual properties
// START window properties
// END Window properties
// END decoration properties
// current Latte v0.9 API
//END Latte based properties
//!
///START Visual Items
//add new supported buttons if they dont exist in the configuration
id: root
clip: true
Layout.fillHeight: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? true : false
Layout.fillWidth: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? false : true
Layout.minimumWidth: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? animatedMinimumWidth : -1
Layout.minimumHeight: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? -1 : animatedMinimumHeight
Layout.preferredHeight: Layout.minimumHeight
Layout.preferredWidth: Layout.minimumWidth
Layout.maximumHeight: Layout.minimumHeight
Layout.maximumWidth: Layout.minimumWidth
preferredRepresentation: fullRepresentation
Plasmoid.onFormFactorChanged: plasmoid.configuration.formFactor = plasmoid.formFactor;
property int animatedMinimumWidth: minimumWidth
property int animatedMinimumHeight: minimumHeight
property int screen: plasmoid.containment.screen
readonly property bool inEditMode: latteInEditMode || plasmoid.userConfiguring
readonly property bool mustHide: {
if (visibility === AppletDecoration.Types.AlwaysVisible || inEditMode) {
if (visibility === AppletDecoration.Types.AlwaysVisible || inEditMode)
return false;
}
if (visibility === AppletDecoration.Types.ActiveWindow && !existsWindowActive) {
if (visibility === AppletDecoration.Types.ActiveWindow && !existsWindowActive)
return true;
}
if (visibility === AppletDecoration.Types.ActiveMaximizedWindow
&& (!isLastActiveWindowMaximized || (inPlasmaPanel && !existsWindowActive))) {
if (visibility === AppletDecoration.Types.ActiveMaximizedWindow && (!isLastActiveWindowMaximized || (inPlasmaPanel && !existsWindowActive)))
return true;
}
if (visibility === AppletDecoration.Types.ShownWindowExists && !existsWindowShown) {
if (visibility === AppletDecoration.Types.ShownWindowExists && !existsWindowShown)
return true;
}
return false;
}
readonly property bool selectedDecorationExists: decorations.decorationExists(plasmoid.configuration.selectedPlugin, plasmoid.configuration.selectedTheme)
readonly property bool slideAnimationEnabled: ( (visibility !== AppletDecoration.Types.AlwaysVisible)
&& (plasmoid.configuration.hiddenState === AppletDecoration.Types.SlideOut) )
readonly property bool slideAnimationEnabled: ((visibility !== AppletDecoration.Types.AlwaysVisible) && (plasmoid.configuration.hiddenState === AppletDecoration.Types.SlideOut))
readonly property bool isEmptySpaceEnabled: plasmoid.configuration.hiddenState === AppletDecoration.Types.EmptySpace
readonly property int containmentType: plasmoid.configuration.containmentType
readonly property int visibility: plasmoid.configuration.visibility
readonly property bool perScreenActive: plasmoid.configuration.perScreenActive
readonly property int minimumWidth: {
if (plasmoid.formFactor === PlasmaCore.Types.Horizontal) {
if (mustHide && !isEmptySpaceEnabled && slideAnimationEnabled && !plasmoid.userConfiguring && !latteInEditMode){
if (mustHide && !isEmptySpaceEnabled && slideAnimationEnabled && !plasmoid.userConfiguring && !latteInEditMode)
return 0;
}
}
}
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ? buttonsArea.width : -1;
}
readonly property int minimumHeight: {
if (plasmoid.formFactor === PlasmaCore.Types.Vertical) {
if (mustHide && !isEmptySpaceEnabled && slideAnimationEnabled && !plasmoid.userConfiguring && !latteInEditMode){
if (mustHide && !isEmptySpaceEnabled && slideAnimationEnabled && !plasmoid.userConfiguring && !latteInEditMode)
return 0;
}
}
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ? -1 : buttonsArea.height
}
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ? -1 : buttonsArea.height;
}
readonly property string buttonsStr: plasmoid.configuration.buttons
Plasmoid.status: {
if (mustHide && !isEmptySpaceEnabled) {
if ((plasmoid.formFactor === PlasmaCore.Types.Horizontal && animatedMinimumWidth === 0)
|| (plasmoid.formFactor === PlasmaCore.Types.Vertical && animatedMinimumHeight === 0)) {
return PlasmaCore.Types.HiddenStatus;
}
}
return PlasmaCore.Types.ActiveStatus;
}
// START visual properties
property bool inactiveStateEnabled: inEditMode ? false : plasmoid.configuration.inactiveStateEnabled
property int thickPadding: {
if (auroraeThemeEngine.isEnabled && plasmoid.configuration.useDecorationMetrics) {
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
((root.height - auroraeThemeEngine.buttonHeight) / 2) - 1 :
((root.width - auroraeThemeEngine.buttonHeight) / 2) - 1;
}
if (auroraeThemeEngine.isEnabled && plasmoid.configuration.useDecorationMetrics)
return plasmoid.formFactor === PlasmaCore.Types.Horizontal ? ((root.height - auroraeThemeEngine.buttonHeight) / 2) - 1 : ((root.width - auroraeThemeEngine.buttonHeight) / 2) - 1;
//! Latte padding
if (inLatte) {
if (plasmoid.formFactor === PlasmaCore.Types.Horizontal) {
if (plasmoid.formFactor === PlasmaCore.Types.Horizontal)
return (root.height - (latteBridge.iconSize * (plasmoid.configuration.buttonSizePercentage / 100))) / 2;
} else {
else
return (root.width - (latteBridge.iconSize * (plasmoid.configuration.buttonSizePercentage / 100))) / 2;
}
}
//! Plasma panels code
if (plasmoid.formFactor === PlasmaCore.Types.Horizontal) {
if (plasmoid.formFactor === PlasmaCore.Types.Horizontal)
return (root.height - (root.height * (plasmoid.configuration.buttonSizePercentage / 100))) / 2;
} else {
else
return (root.width - (root.width * (plasmoid.configuration.buttonSizePercentage / 100))) / 2;
}
}
property int lengthFirstMargin: plasmoid.configuration.lengthFirstMargin
property int lengthLastMargin: plasmoid.configuration.lengthLastMargin
property int lengthFirstPadding: Math.min(lengthFirstMargin, lengthMidPadding)
property int lengthMidPadding: spacing / 2
property int lengthLastPadding: Math.min(lengthLastMargin, lengthMidPadding)
property int spacing: {
if (auroraeThemeEngine.isEnabled && plasmoid.configuration.useDecorationMetrics) {
if (auroraeThemeEngine.isEnabled && plasmoid.configuration.useDecorationMetrics)
return auroraeThemeEngine.buttonSpacing;
}
return plasmoid.configuration.spacing;
}
// END visual properties
// START window properties
//! make sure that on startup it will always be shown
readonly property bool existsWindowActive: (windowInfoLoader.item && windowInfoLoader.item.existsWindowActive)
|| containmentIdentifierTimer.running
readonly property bool existsWindowShown: (windowInfoLoader.item && windowInfoLoader.item.existsWindowShown)
|| containmentIdentifierTimer.running
readonly property bool existsWindowActive: (windowInfoLoader.item && windowInfoLoader.item.existsWindowActive) || containmentIdentifierTimer.running
readonly property bool existsWindowShown: (windowInfoLoader.item && windowInfoLoader.item.existsWindowShown) || containmentIdentifierTimer.running
readonly property bool isLastActiveWindowPinned: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isOnAllDesktops
readonly property bool isLastActiveWindowMaximized: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isMaximized
readonly property bool isLastActiveWindowKeepAbove: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isKeepAbove
readonly property bool isLastActiveWindowClosable: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isClosable
readonly property bool isLastActiveWindowMaximizable: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isMaximizable
readonly property bool isLastActiveWindowMinimizable: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isMinimizable
readonly property bool isLastActiveWindowVirtualDesktopsChangeable: lastActiveTaskItem && existsWindowShown && lastActiveTaskItem.isVirtualDesktopsChangeable
property bool hasDesktopsButton: false
property bool hasMaximizedButton: false
property bool hasKeepAboveButton: false
readonly property bool inPlasmaPanel: latteBridge === null
readonly property bool inLatte: latteBridge !== null
readonly property Item lastActiveTaskItem: windowInfoLoader.item.lastActiveTaskItem
// END Window properties
// START decoration properties
property string currentPlugin: plasmoid.configuration.useCurrentDecoration || !selectedDecorationExists ?
decorations.currentPlugin : plasmoid.configuration.selectedPlugin
property string currentTheme: plasmoid.configuration.useCurrentDecoration || !selectedDecorationExists ?
decorations.currentTheme : plasmoid.configuration.selectedTheme
property string currentPlugin: plasmoid.configuration.useCurrentDecoration || !selectedDecorationExists ? decorations.currentPlugin : plasmoid.configuration.selectedPlugin
property string currentTheme: plasmoid.configuration.useCurrentDecoration || !selectedDecorationExists ? decorations.currentTheme : plasmoid.configuration.selectedTheme
property string currentScheme: {
if (plasmaThemeExtended.isActive) {
if (plasmaThemeExtended.isActive)
return plasmaThemeExtended.colors.schemeFile;
}
if (enforceLattePalette && plasmoid.configuration.selectedScheme === "kdeglobals") {
if (enforceLattePalette && plasmoid.configuration.selectedScheme === "kdeglobals")
return latteBridge.palette.scheme;
}
return plasmoid.configuration.selectedScheme === "kdeglobals" ?
colorsModel.defaultSchemeFile() :
plasmoid.configuration.selectedScheme
return plasmoid.configuration.selectedScheme === "kdeglobals" ? colorsModel.defaultSchemeFile() : plasmoid.configuration.selectedScheme;
}
// END decoration properties
//BEGIN Latte Dock Communicator
property QtObject latteBridge: null // current Latte v0.9 API
onLatteBridgeChanged: {
if (latteBridge) {
plasmoid.configuration.containmentType = AppletDecoration.Types.Latte;
latteBridge.actions.setProperty(plasmoid.id, "latteSideColoringEnabled", false);
latteBridge.actions.setProperty(plasmoid.id, "windowsTrackingEnabled", true);
}
}
property QtObject latteBridge: null
//END Latte Dock Communicator
//BEGIN Latte based properties
//! This applet is a special case and thus the latteBridge.applyPalette is not used.
@@ -221,50 +146,96 @@ PlasmoidItem {
//! even when Latte informs the applets that need to use the default plasma theme.
readonly property bool enforceLattePalette: latteBridge && latteBridge.palette
readonly property bool latteInEditMode: latteBridge && latteBridge.inEditMode
property var tasksPreparedArray: []
//END Latte based properties
///functions
function initButtons() {
if (!buttonsRecreator.running)
buttonsRecreator.start();
//START Behaviors
Behavior on animatedMinimumWidth {
enabled: slideAnimationEnabled && plasmoid.formFactor===PlasmaCore.Types.Horizontal
NumberAnimation {
duration: 250
easing.type: Easing.InCubic
}
}
Behavior on animatedMinimumHeight {
enabled: slideAnimationEnabled && plasmoid.formFactor===PlasmaCore.Types.Vertical
NumberAnimation {
duration: 250
easing.type: Easing.InCubic
}
}
//END Behaviors
onButtonsStrChanged: initButtons();
Connections {
target: bridgeItem
onPluginChanged: initButtons();
function initializeControlButtonsModel() {
console.log("recreating buttons");
sharedDecorationItem.createDecoration();
var buttonsList = buttonsStr.split('|');
ModelTools.initializeControlButtonsModel(buttonsList, tasksPreparedArray, controlButtonsModel, true);
}
Connections {
target: buttonsRepeater
onCountChanged: discoverButtons();
function discoverButtons() {
var hasMax = false;
var hasPin = false;
var hasKeepAbove = false;
for (var i = 0; i < tasksPreparedArray.length; ++i) {
if (tasksPreparedArray[i].buttonType === AppletDecoration.Types.Maximize)
hasMax = true;
else if (tasksPreparedArray[i].buttonType === AppletDecoration.Types.OnAllDesktops)
hasPin = true;
else if (tasksPreparedArray[i].buttonType === AppletDecoration.Types.KeepAbove)
hasKeepAbove = true;
}
hasMaximizedButton = hasMax;
hasDesktopsButton = hasPin;
hasKeepAboveButton = hasKeepAbove;
}
function performActiveWindowAction(windowOperation) {
if (windowOperation === AppletDecoration.Types.ActionClose)
windowInfoLoader.item.toggleClose();
else if (windowOperation === AppletDecoration.Types.ToggleMaximize)
windowInfoLoader.item.toggleMaximized();
else if (windowOperation === AppletDecoration.Types.ToggleMinimize)
windowInfoLoader.item.toggleMinimized();
else if (windowOperation === AppletDecoration.Types.TogglePinToAllDesktops)
windowInfoLoader.item.togglePinToAllDesktops();
else if (windowOperation === AppletDecoration.Types.ToggleKeepAbove)
windowInfoLoader.item.toggleKeepAbove();
}
clip: true
Layout.fillHeight: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? true : false
Layout.fillWidth: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? false : true
Layout.minimumWidth: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? animatedMinimumWidth : -1
Layout.minimumHeight: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? -1 : animatedMinimumHeight
Layout.preferredHeight: Layout.minimumHeight
Layout.preferredWidth: Layout.minimumWidth
Layout.maximumHeight: Layout.minimumHeight
Layout.maximumWidth: Layout.minimumWidth
preferredRepresentation: fullRepresentation
Plasmoid.onFormFactorChanged: plasmoid.configuration.formFactor = plasmoid.formFactor
Plasmoid.status: {
if (mustHide && !isEmptySpaceEnabled) {
if ((plasmoid.formFactor === PlasmaCore.Types.Horizontal && animatedMinimumWidth === 0) || (plasmoid.formFactor === PlasmaCore.Types.Vertical && animatedMinimumHeight === 0))
return PlasmaCore.Types.HiddenStatus;
}
return PlasmaCore.Types.ActiveStatus;
}
onLatteBridgeChanged: {
if (latteBridge) {
plasmoid.configuration.containmentType = AppletDecoration.Types.Latte;
latteBridge.actions.setProperty(plasmoid.id, "latteSideColoringEnabled", false);
latteBridge.actions.setProperty(plasmoid.id, "windowsTrackingEnabled", true);
}
}
onButtonsStrChanged: initButtons()
Component.onCompleted: {
if (plasmoid.configuration.buttons.indexOf("9") === -1) {
//add new supported buttons if they dont exist in the configuration
if (plasmoid.configuration.buttons.indexOf("9") === -1)
plasmoid.configuration.buttons = plasmoid.configuration.buttons.concat("|9");
}
initButtons();
containmentIdentifierTimer.start();
}
property var tasksPreparedArray: []
Connections {
target: bridgeItem
onPluginChanged: initButtons()
}
Connections {
target: buttonsRepeater
onCountChanged: discoverButtons()
}
ListModel {
id: controlButtonsModel
@@ -273,43 +244,47 @@ PlasmoidItem {
//!
Loader {
id: windowInfoLoader
sourceComponent: latteBridge
&& latteBridge.windowsTracker
&& latteBridge.windowsTracker.currentScreen.lastActiveWindow
&& latteBridge.windowsTracker.allScreens.lastActiveWindow ? latteTrackerComponent : plasmaTasksModel
sourceComponent: latteBridge && latteBridge.windowsTracker && latteBridge.windowsTracker.currentScreen.lastActiveWindow && latteBridge.windowsTracker.allScreens.lastActiveWindow ? latteTrackerComponent : plasmaTasksModel
Component {
id: latteTrackerComponent
LatteWindowsTracker {
filterByScreen: plasmoid.configuration.filterByScreen
}
}
Component {
id: plasmaTasksModel
PlasmaTasksModel {
filterByScreen: plasmoid.configuration.filterByScreen
}
}
}
//!
}
}
///Decoration Items
AppletDecoration.Bridge {
id: bridgeItem
plugin: currentPlugin
theme: currentTheme
}
AppletDecoration.Settings {
id: settingsItem
bridge: bridgeItem.bridge
borderSizesIndex: 0 // Normal
}
AppletDecoration.SharedDecoration {
id: sharedDecorationItem
bridge: bridgeItem.bridge
settings: settingsItem
}
@@ -330,86 +305,18 @@ PlasmoidItem {
AppletDecoration.AuroraeTheme {
id: auroraeThemeEngine
theme: isEnabled ? currentTheme : ""
readonly property bool isEnabled: decorations.isAurorae(currentPlugin, currentTheme);
readonly property bool isEnabled: decorations.isAurorae(currentPlugin, currentTheme)
theme: isEnabled ? currentTheme : ""
}
AppletDecoration.WindowSystem {
id: windowSystem
}
///functions
function initButtons() {
if (!buttonsRecreator.running){
buttonsRecreator.start();
}
}
function initializeControlButtonsModel() {
console.log("recreating buttons");
sharedDecorationItem.createDecoration();
var buttonsList = buttonsStr.split('|');
ModelTools.initializeControlButtonsModel(buttonsList, tasksPreparedArray, controlButtonsModel, true);
}
function discoverButtons() {
var hasMax = false;
var hasPin = false;
var hasKeepAbove = false;
for (var i=0; i<tasksPreparedArray.length; ++i) {
if (tasksPreparedArray[i].buttonType === AppletDecoration.Types.Maximize) {
hasMax = true;
} else if (tasksPreparedArray[i].buttonType === AppletDecoration.Types.OnAllDesktops) {
hasPin = true;
} else if (tasksPreparedArray[i].buttonType === AppletDecoration.Types.KeepAbove) {
hasKeepAbove = true;
}
}
hasMaximizedButton = hasMax;
hasDesktopsButton = hasPin;
hasKeepAboveButton = hasKeepAbove;
}
function performActiveWindowAction(windowOperation) {
if (windowOperation === AppletDecoration.Types.ActionClose) {
windowInfoLoader.item.toggleClose();
} else if (windowOperation === AppletDecoration.Types.ToggleMaximize) {
windowInfoLoader.item.toggleMaximized();
} else if (windowOperation === AppletDecoration.Types.ToggleMinimize) {
windowInfoLoader.item.toggleMinimized();
} else if (windowOperation === AppletDecoration.Types.TogglePinToAllDesktops) {
windowInfoLoader.item.togglePinToAllDesktops();
} else if (windowOperation === AppletDecoration.Types.ToggleKeepAbove){
windowInfoLoader.item.toggleKeepAbove();
}
}
///START Visual Items
Grid {
id: buttonsArea
rowSpacing: 0
columnSpacing: 0
rows: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? 1 : 0
columns: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? 0 : 1
readonly property int buttonThickness: plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
root.height - 2 * thickPadding :
root.width - 2 * thickPadding
opacity: mustHide
&& !inEditMode
&& (!root.slideAnimationEnabled /*when buttons are not sliding out*/
|| (root.slideAnimationEnabled && plasmoid.status === PlasmaCore.Types.HiddenStatus/*wait for slide-out animation*/)) ? 0 : 1
visible: opacity === 0 ? false : true
//when buttons are not sliding out
/* Behavior on opacity {
enabled: isEmptySpaceEnabled
NumberAnimation {
@@ -418,98 +325,30 @@ PlasmoidItem {
}
}*/
id: buttonsArea
readonly property int buttonThickness: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? root.height - 2 * thickPadding : root.width - 2 * thickPadding
rowSpacing: 0
columnSpacing: 0
rows: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? 1 : 0
columns: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? 0 : 1
opacity: mustHide && !inEditMode && (!root.slideAnimationEnabled || (root.slideAnimationEnabled && plasmoid.status === PlasmaCore.Types.HiddenStatus)) ? 0 : 1 //wait for slide-out animation
visible: opacity === 0 ? false : true
Repeater {
id: buttonsRepeater
model: controlButtonsModel
delegate: auroraeThemeEngine.isEnabled ? auroraeButton : pluginButton
}
}
Component {
id: pluginButton
AppletDecoration.Button {
id: cButton
width: plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
buttonsArea.buttonThickness + padding.left + padding.right :
buttonsArea.buttonThickness + 2 * thickPadding
height: plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
buttonsArea.buttonThickness + 2 * thickPadding :
buttonsArea.buttonThickness + padding.top + padding.bottom
bridge: bridgeItem.bridge
sharedDecoration: sharedDecorationItem
scheme: root.currentScheme
type: buttonType
isActive: {
//! FIXME-TEST PERIOD: Disabled because it shows an error from c++ theme when its value is changed
//! and breaks in some cases the buttons coloring through the schemeFile
if (root.inactiveStateEnabled && !root.existsWindowActive){
return false;
}
return true;
}
isOnAllDesktops: root.isLastActiveWindowPinned
isMaximized: root.isLastActiveWindowMaximized
isKeepAbove: root.isLastActiveWindowKeepAbove
localX: x
localY: y
opacity: isVisible ? 1 : 0
visible: (isVisible && !root.isEmptySpaceEnabled) || root.isEmptySpaceEnabled
readonly property bool isVisible: {
if (visibility === AppletDecoration.Types.AlwaysVisible || inEditMode) {
return true;
}
if (type === AppletDecoration.Types.Close) {
return root.isLastActiveWindowClosable;
} else if (type === AppletDecoration.Types.Maximize) {
return root.isLastActiveWindowMaximizable;
} else if (type === AppletDecoration.Types.Minimize) {
return root.isLastActiveWindowMinimizable;
} else if (type === AppletDecoration.Types.OnAllDesktops) {
return root.isLastActiveWindowVirtualDesktopsChangeable;
}
return true;
}
readonly property int firstPadding: {
if (index === 0) {
//! first button
return lengthFirstMargin;
} else {
return lengthMidPadding;
}
}
readonly property int lastPadding: {
if (index>=0 && index === buttonsRepeater.count - 1) {
//! last button
return lengthLastMargin;
} else {
return lengthMidPadding;
}
}
padding{
left: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? firstPadding : thickPadding
right: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? lastPadding : thickPadding
top: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : firstPadding
bottom: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : lastPadding
}
onClicked: {
root.performActiveWindowAction(windowOperation);
}
/*Rectangle{
anchors.fill: parent
color: "transparent"
@@ -527,87 +366,78 @@ PlasmoidItem {
border.width: 1
border.color: "blue"
}*/
}
}
Component {
id: auroraeButton
AppletDecoration.AuroraeButton {
id: aButton
width: plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
auroraeTheme.buttonRatio*buttonsArea.buttonThickness + leftPadding + rightPadding :
buttonsArea.buttonThickness + 2 * thickPadding
height: plasmoid.formFactor === PlasmaCore.Types.Horizontal ?
buttonsArea.buttonThickness + 2 * thickPadding :
buttonsArea.buttonThickness + topPadding + bottomPadding
readonly property int firstPadding: {
if (index === 0) {
//! first button
return lengthFirstMargin;
} else {
return lengthMidPadding;
}
}
readonly property int lastPadding: {
if (index>=0 && index === buttonsRepeater.count - 1) {
//! last button
return lengthLastMargin;
} else {
id: cButton
readonly property bool isVisible: {
if (visibility === AppletDecoration.Types.AlwaysVisible || inEditMode)
return true;
if (type === AppletDecoration.Types.Close)
return root.isLastActiveWindowClosable;
else if (type === AppletDecoration.Types.Maximize)
return root.isLastActiveWindowMaximizable;
else if (type === AppletDecoration.Types.Minimize)
return root.isLastActiveWindowMinimizable;
else if (type === AppletDecoration.Types.OnAllDesktops)
return root.isLastActiveWindowVirtualDesktopsChangeable;
return true;
}
readonly property int firstPadding: {
if (index === 0)
return lengthFirstMargin;
else
return lengthMidPadding;
}
readonly property int lastPadding: {
if (index >= 0 && index === buttonsRepeater.count - 1)
return lengthLastMargin;
else
return lengthMidPadding;
}
leftPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? firstPadding : thickPadding
rightPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? lastPadding : thickPadding
topPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : firstPadding
bottomPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : lastPadding
width: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? buttonsArea.buttonThickness + padding.left + padding.right : buttonsArea.buttonThickness + 2 * thickPadding
height: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? buttonsArea.buttonThickness + 2 * thickPadding : buttonsArea.buttonThickness + padding.top + padding.bottom
bridge: bridgeItem.bridge
sharedDecoration: sharedDecorationItem
scheme: root.currentScheme
type: buttonType
isActive: {
//! FIXME-TEST PERIOD: Disabled because it shows an error from c++ theme when its value is changed
//! and breaks in some cases the buttons coloring through the schemeFile
if (root.inactiveStateEnabled && !root.existsWindowActive){
if (root.inactiveStateEnabled && !root.existsWindowActive)
return false;
}
return true;
}
isOnAllDesktops: root.isLastActiveWindowPinned
isMaximized: root.isLastActiveWindowMaximized
isKeepAbove: root.isLastActiveWindowKeepAbove
buttonType: model.buttonType
auroraeTheme: auroraeThemeEngine
monochromeIconsEnabled: latteBridge && latteBridge.applyPalette && auroraeThemeEngine.hasMonochromeIcons
monochromeIconsColor: latteBridge ? latteBridge.palette.textColor : "transparent"
localX: x
localY: y
opacity: isVisible ? 1 : 0
visible: (isVisible && !root.isEmptySpaceEnabled) || root.isEmptySpaceEnabled
readonly property bool isVisible: {
if (visibility === AppletDecoration.Types.AlwaysVisible || inEditMode) {
return true;
}
if (buttonType === AppletDecoration.Types.Close) {
return root.isLastActiveWindowClosable;
} else if (buttonType === AppletDecoration.Types.Maximize) {
return root.isLastActiveWindowMaximizable;
} else if (buttonType === AppletDecoration.Types.Minimize) {
return root.isLastActiveWindowMinimizable;
} else if (buttonType === AppletDecoration.Types.OnAllDesktops) {
return root.isLastActiveWindowVirtualDesktopsChangeable;
}
return true;
}
onClicked: {
root.performActiveWindowAction(windowOperation);
}
padding {
left: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? firstPadding : thickPadding
right: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? lastPadding : thickPadding
top: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : firstPadding
bottom: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : lastPadding
}
}
}
Component {
id: auroraeButton
AppletDecoration.AuroraeButton {
/* Rectangle{
anchors.fill: parent
color: "transparent"
@@ -625,7 +455,66 @@ PlasmoidItem {
border.width: 1
border.color: "blue"
} */
//! first button
//! last button
id: aButton
readonly property int firstPadding: {
if (index === 0)
return lengthFirstMargin;
else
return lengthMidPadding;
}
readonly property int lastPadding: {
if (index >= 0 && index === buttonsRepeater.count - 1)
return lengthLastMargin;
else
return lengthMidPadding;
}
readonly property bool isVisible: {
if (visibility === AppletDecoration.Types.AlwaysVisible || inEditMode)
return true;
if (buttonType === AppletDecoration.Types.Close)
return root.isLastActiveWindowClosable;
else if (buttonType === AppletDecoration.Types.Maximize)
return root.isLastActiveWindowMaximizable;
else if (buttonType === AppletDecoration.Types.Minimize)
return root.isLastActiveWindowMinimizable;
else if (buttonType === AppletDecoration.Types.OnAllDesktops)
return root.isLastActiveWindowVirtualDesktopsChangeable;
return true;
}
width: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? auroraeTheme.buttonRatio * buttonsArea.buttonThickness + leftPadding + rightPadding : buttonsArea.buttonThickness + 2 * thickPadding
height: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? buttonsArea.buttonThickness + 2 * thickPadding : buttonsArea.buttonThickness + topPadding + bottomPadding
leftPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? firstPadding : thickPadding
rightPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? lastPadding : thickPadding
topPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : firstPadding
bottomPadding: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? thickPadding : lastPadding
isActive: {
//! FIXME-TEST PERIOD: Disabled because it shows an error from c++ theme when its value is changed
//! and breaks in some cases the buttons coloring through the schemeFile
if (root.inactiveStateEnabled && !root.existsWindowActive)
return false;
return true;
}
isOnAllDesktops: root.isLastActiveWindowPinned
isMaximized: root.isLastActiveWindowMaximized
isKeepAbove: root.isLastActiveWindowKeepAbove
buttonType: model.buttonType
auroraeTheme: auroraeThemeEngine
monochromeIconsEnabled: latteBridge && latteBridge.applyPalette && auroraeThemeEngine.hasMonochromeIcons
monochromeIconsColor: latteBridge ? latteBridge.palette.textColor : "transparent"
opacity: isVisible ? 1 : 0
visible: (isVisible && !root.isEmptySpaceEnabled) || root.isEmptySpaceEnabled
onClicked: {
root.performActiveWindowAction(windowOperation);
}
}
}
///END Visual Items
@@ -633,8 +522,9 @@ PlasmoidItem {
//! of buttons with no reason.
Timer {
id: buttonsRecreator
interval: 200
onTriggered: initializeControlButtonsModel();
onTriggered: initializeControlButtonsModel()
}
//! this timer is used in order to identify in which containment the applet is in
@@ -643,13 +533,36 @@ PlasmoidItem {
//! as Plasma and Latte
Timer {
id: containmentIdentifierTimer
interval: 5000
onTriggered: {
if (latteBridge) {
if (latteBridge)
plasmoid.configuration.containmentType = AppletDecoration.Types.Latte;
} else {
else
plasmoid.configuration.containmentType = AppletDecoration.Types.Plasma;
}
}
//START Behaviors
Behavior on animatedMinimumWidth {
enabled: slideAnimationEnabled && plasmoid.formFactor === PlasmaCore.Types.Horizontal
NumberAnimation {
duration: 250
easing.type: Easing.InCubic
}
}
Behavior on animatedMinimumHeight {
enabled: slideAnimationEnabled && plasmoid.formFactor === PlasmaCore.Types.Vertical
NumberAnimation {
duration: 250
easing.type: Easing.InCubic
}
}
//END Behaviors
}