aboutsummarylogtreecommitdiffstats
path: root/kwin-aurorae-optional-titlebar.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kwin-aurorae-optional-titlebar.patch')
-rw-r--r--kwin-aurorae-optional-titlebar.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/kwin-aurorae-optional-titlebar.patch b/kwin-aurorae-optional-titlebar.patch
new file mode 100644
index 000000000000..a8b6c2127027
--- /dev/null
+++ b/kwin-aurorae-optional-titlebar.patch
@@ -0,0 +1,100 @@
+diff --git a/plugins/kdecorations/aurorae/src/lib/auroraetheme.cpp b/plugins/kdecorations/aurorae/src/lib/auroraetheme.cpp
+index ba8554fe5..889b4120a 100644
+--- a/plugins/kdecorations/aurorae/src/lib/auroraetheme.cpp
++++ b/plugins/kdecorations/aurorae/src/lib/auroraetheme.cpp
+@@ -24,9 +24,14 @@
+ #include <QDebug>
+ #include <QHash>
+ #include <QStandardPaths>
++#include <QDir>
++#include <QFile>
+ // KDE
+ #include <KConfig>
+ #include <KConfigGroup>
++#include <KDecoration2/Decoration>
++#include <KDecoration2/DecoratedClient>
++#include <KWindowInfo>
+
+ Q_LOGGING_CATEGORY(AURORAE, "aurorae", QtCriticalMsg)
+
+@@ -87,6 +92,24 @@ AuroraeTheme::AuroraeTheme(QObject* parent)
+ {
+ connect(this, SIGNAL(themeChanged()), SIGNAL(borderSizesChanged()));
+ connect(this, SIGNAL(buttonSizesChanged()), SIGNAL(borderSizesChanged()));
++
++ // HACK: Hide title bar for windows whose classes are specified in ~/.aurorae_notitle
++ QFile hideTitleConf(QDir::homePath() + "/.aurorae_notitle");
++ if (hideTitleConf.open(QFile::ReadOnly | QFile::Text)) {
++ QString classes = "\n" + QTextStream(&hideTitleConf).readAll() + "\n";
++ KDecoration2::Decoration* decoration = (KDecoration2::Decoration*) parent;
++ auto client = decoration->client().data();
++ KWindowInfo info(client->windowId(), nullptr, NET::WM2WindowClass);
++ QString window_className(QString::fromUtf8(info.windowClassName()));
++ QString window_classClass(QString::fromUtf8(info.windowClassClass()));
++
++ if ((!window_className.isEmpty()
++ && classes.contains("\n" + window_className + "\n"))
++ || (!window_classClass.isEmpty()
++ && classes.contains("\n" + window_classClass + "\n"))) {
++ this->hideTitleBar = true;
++ }
++ }
+ }
+
+ AuroraeTheme::~AuroraeTheme()
+@@ -185,7 +208,7 @@ void AuroraeTheme::borders(int& left, int& top, int& right, int& bottom, bool ma
+ d->themeConfig.buttonHeight()*buttonSizeFactor() +
+ d->themeConfig.buttonMarginTop());
+ if (maximized) {
+- const qreal title = titleHeight + d->themeConfig.titleEdgeTopMaximized() + d->themeConfig.titleEdgeBottomMaximized();
++ const qreal title = hideTitleBar ? 0 : (titleHeight + d->themeConfig.titleEdgeTopMaximized() + d->themeConfig.titleEdgeBottomMaximized());
+ switch ((DecorationPosition)d->themeConfig.decorationPosition()) {
+ case DecorationTop:
+ left = right = bottom = 0;
+@@ -240,29 +263,29 @@ void AuroraeTheme::borders(int& left, int& top, int& right, int& bottom, bool ma
+ default:
+ left = right = bottom = top = 0;
+ }
+- const qreal title = titleHeight + d->themeConfig.titleEdgeTop() + d->themeConfig.titleEdgeBottom();
++ const qreal title = hideTitleBar ? 0 : (titleHeight + d->themeConfig.titleEdgeTop() + d->themeConfig.titleEdgeBottom());
+ switch ((DecorationPosition)d->themeConfig.decorationPosition()) {
+ case DecorationTop:
+ left += d->themeConfig.borderLeft();
+ right += d->themeConfig.borderRight();
+ bottom += d->themeConfig.borderBottom();
+- top = title;
++ top = title == 0 ? d->themeConfig.borderBottom() : title;
+ break;
+ case DecorationBottom:
+ left += d->themeConfig.borderLeft();
+ right += d->themeConfig.borderRight();
+- bottom = title;
++ bottom = title == 0 ? d->themeConfig.borderTop() : title;
+ top += d->themeConfig.borderTop();
+ break;
+ case DecorationLeft:
+- left = title;
++ left = title == 0 ? d->themeConfig.borderRight() : title;
+ right += d->themeConfig.borderRight();
+ bottom += d->themeConfig.borderBottom();
+ top += d->themeConfig.borderTop();
+ break;
+ case DecorationRight:
+ left += d->themeConfig.borderLeft();
+- right = title;
++ right = title == 0 ? d->themeConfig.borderLeft() : title;
+ bottom += d->themeConfig.borderBottom();
+ top += d->themeConfig.borderTop();
+ break;
+diff --git a/plugins/kdecorations/aurorae/src/lib/auroraetheme.h b/plugins/kdecorations/aurorae/src/lib/auroraetheme.h
+index f3f7b9943..cb46754e1 100644
+--- a/plugins/kdecorations/aurorae/src/lib/auroraetheme.h
++++ b/plugins/kdecorations/aurorae/src/lib/auroraetheme.h
+@@ -222,6 +222,7 @@ private:
+ void padding(int &left, int &top, int &right, int &bottom) const;
+
+ AuroraeThemePrivate* const d;
++ bool hideTitleBar = false;
+ };
+
+ } // namespace