diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e8bfed..f9f8867 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,7 @@ set(SRCS src/volumemanager.cpp src/utils.cpp src/xwindowinterface.cpp + src/toplevelmenu.cpp src/appearance.cpp src/fakewindow.cpp diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..efc6097 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +cutefish-dock (0.1) UNRELEASED; urgency=low + + * Initial release (CutefishOS) + + -- CutefishOS Thu, 16 Oct 2014 17:22:15 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..ac6085d --- /dev/null +++ b/debian/control @@ -0,0 +1,23 @@ +Source: cutefish-dock +Section: devel +Priority: optional +Maintainer: CutefishOS +Build-Depends: cmake, + debhelper (>= 9), + extra-cmake-modules, + libkf5windowsystem-dev, + qtbase5-dev, + qtdeclarative5-dev, + qtquickcontrols2-5-dev, + qttools5-dev, + qttools5-dev-tools +Standards-Version: 4.5.0 +Homepage: https://github.com/cutefishos/terminal + +Package: cutefish-dock +Architecture: any +Depends: qml-module-qtquick-controls2, + qml-module-qtquick2, + ${misc:Depends}, + ${shlibs:Depends} +Description: CutefishOS Dock diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..716fe64 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,3 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: calamares +Source: diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..ab2f7c3 --- /dev/null +++ b/debian/rules @@ -0,0 +1,9 @@ +#!/usr/bin/make -f + +export QT_SELECT=5 + +%: + dh $@ + +override_dh_auto_configure: + dh_auto_configure -- -DEMBED_TRANSLATIONS=ON -DBUILD_TESTING=ON diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/qml/AppItem.qml b/qml/AppItem.qml index 7a6be50..a86bddd 100644 --- a/qml/AppItem.qml +++ b/qml/AppItem.qml @@ -1,6 +1,6 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import Qt.labs.platform 1.0 +// import Qt.labs.platform 1.0 import Cutefish.Dock 1.0 DockItem { @@ -37,7 +37,7 @@ DockItem { updateGeometry() } - Menu { + TopLevelMenu { id: contextMenu MenuItem { diff --git a/qml/CardItem.qml b/qml/CardItem.qml index aeeecb1..a9987df 100644 --- a/qml/CardItem.qml +++ b/qml/CardItem.qml @@ -19,7 +19,7 @@ Item { property var pressedColor: Meui.Theme.darkMode ? Qt.lighter(Meui.Theme.secondBackgroundColor, 1.8) : Qt.darker(Meui.Theme.secondBackgroundColor, 1.5) - property var highlightHoverColor: Meui.Theme.darkMode ? Qt.lighter(Meui.Theme.highlightColor, 1.2) + property var highlightHoverColor: Meui.Theme.darkMode ? Qt.lighter(Meui.Theme.highlightColor, 1.1) : Qt.darker(Meui.Theme.highlightColor, 1.1) property var highlightPressedColor: Meui.Theme.darkMode ? Qt.lighter(Meui.Theme.highlightColor, 1.1) : Qt.darker(Meui.Theme.highlightColor, 1.2) @@ -69,8 +69,8 @@ Item { ColumnLayout { anchors.fill: parent - anchors.leftMargin: Meui.Units.smallSpacing - anchors.rightMargin: Meui.Units.smallSpacing + anchors.leftMargin: root.smallSpacing + anchors.rightMargin: root.smallSpacing Image { id: _image @@ -79,7 +79,7 @@ Item { sourceSize: Qt.size(width, height) asynchronous: true Layout.alignment: Qt.AlignCenter - Layout.topMargin: Meui.Units.largeSpacing + Layout.topMargin: root.largeSpacing // ColorOverlay { // anchors.fill: _image @@ -110,7 +110,7 @@ Item { Layout.preferredHeight: control.height * 0.1 Layout.alignment: Qt.AlignHCenter // Layout.fillWidth: true - Layout.bottomMargin: Meui.Units.largeSpacing + Layout.bottomMargin: root.largeSpacing } Item { diff --git a/qml/ControlCenterItem.qml b/qml/ControlCenterItem.qml index 706ac31..3a03e82 100644 --- a/qml/ControlCenterItem.qml +++ b/qml/ControlCenterItem.qml @@ -9,8 +9,8 @@ import MeuiKit 1.0 as Meui StandardItem { id: controlItem - Layout.preferredWidth: isHorizontal ? controlLayout.implicitWidth + Meui.Units.largeSpacing * 2 : mainLayout.width * 0.7 - Layout.preferredHeight: isHorizontal ? mainLayout.height * 0.7 : controlLayout.implicitHeight + Meui.Units.largeSpacing * 2 + Layout.preferredWidth: isHorizontal ? controlLayout.implicitWidth + root.largeSpacing * 2 : mainLayout.width * 0.7 + Layout.preferredHeight: isHorizontal ? mainLayout.height * 0.7 : controlLayout.implicitHeight + root.largeSpacing * 2 Layout.rightMargin: isHorizontal ? root.windowRadius / 2 : 0 Layout.bottomMargin: isHorizontal ? 0 : root.windowRadius / 2 Layout.alignment: Qt.AlignCenter @@ -30,12 +30,12 @@ StandardItem { GridLayout { id: controlLayout anchors.fill: parent - anchors.leftMargin: isHorizontal ? Meui.Units.smallSpacing : 0 - anchors.rightMargin: isHorizontal ? Meui.Units.smallSpacing : 0 - anchors.topMargin: isHorizontal ? Meui.Units.smallSpacing : 0 - anchors.bottomMargin: isHorizontal ? Meui.Units.smallSpacing : 0 - columnSpacing: isHorizontal ? Meui.Units.largeSpacing + Meui.Units.smallSpacing : 0 - rowSpacing: isHorizontal ? 0 : Meui.Units.largeSpacing + Meui.Units.smallSpacing + anchors.leftMargin: isHorizontal ? root.smallSpacing : 0 + anchors.rightMargin: isHorizontal ? root.smallSpacing : 0 + anchors.topMargin: isHorizontal ? root.smallSpacing : 0 + anchors.bottomMargin: isHorizontal ? root.smallSpacing : 0 + columnSpacing: isHorizontal ? root.largeSpacing + root.smallSpacing : 0 + rowSpacing: isHorizontal ? 0 : root.largeSpacing + root.smallSpacing flow: isHorizontal ? Grid.LeftToRight : Grid.TopToBottom Image { diff --git a/qml/ControlDialog.qml b/qml/ControlDialog.qml index a7309e2..c7be1dd 100644 --- a/qml/ControlDialog.qml +++ b/qml/ControlDialog.qml @@ -87,7 +87,7 @@ ControlCenterDialog { id: _mainLayout anchors.fill: parent anchors.leftMargin: Meui.Units.largeSpacing * 2 - anchors.topMargin: Meui.Units.largeSpacing * 2 + anchors.topMargin: Meui.Units.largeSpacing * 1.5 anchors.rightMargin: Meui.Units.largeSpacing * 2 anchors.bottomMargin: Meui.Units.largeSpacing spacing: Meui.Units.largeSpacing @@ -328,7 +328,10 @@ ControlCenterDialog { width: batteryLayout.implicitWidth + Meui.Units.largeSpacing height: batteryLayout.implicitHeight + Meui.Units.largeSpacing - onClicked: process.startDetached("cutefish-settings", ["-m", "battery"]) + onClicked: { + control.visible = false + process.startDetached("cutefish-settings", ["-m", "battery"]) + } RowLayout { id: batteryLayout diff --git a/qml/MprisController.qml b/qml/MprisController.qml index 6e11787..aacd667 100644 --- a/qml/MprisController.qml +++ b/qml/MprisController.qml @@ -33,9 +33,9 @@ Item { RowLayout { id: _mainLayout anchors.fill: parent - anchors.margins: Meui.Units.largeSpacing - anchors.rightMargin: Meui.Units.largeSpacing * 2 - spacing: Meui.Units.largeSpacing + anchors.margins: root.largeSpacing + anchors.rightMargin: root.largeSpacing * 2 + spacing: root.largeSpacing Image { id: artImage diff --git a/qml/TopLevelMenu.qml b/qml/TopLevelMenu.qml new file mode 100644 index 0000000..777faad --- /dev/null +++ b/qml/TopLevelMenu.qml @@ -0,0 +1,32 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Window 2.12 +import QtQuick.Layouts 1.12 + +Window { + id: control + visible: false + + width: _mainLayout.implicitWidth + height: _mainLayout.implicitHeight + + flags: Qt.Popup + + onActiveChanged: { + if (!active) + control.close() + } + + default property alias content: _mainLayout.data + + function open() { + control.visible = true + control.x = 500 + control.y = 500 + } + + ColumnLayout { + id: _mainLayout + anchors.fill: parent + } +} diff --git a/qml/main.qml b/qml/main.qml index fd939a4..49ed8dc 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -19,6 +19,9 @@ Item { property var trayItemSize: 16 property var iconSize: 0 + property real smallSpacing: 4 * Meui.Theme.devicePixelRatio + property real largeSpacing: smallSpacing * 2 + DropArea { anchors.fill: parent enabled: true @@ -100,7 +103,7 @@ Item { radius: windowRadius - 1 color: "transparent" border.width: 1 - border.color: Qt.rgba(255, 255, 255, 0.2) + border.color: Qt.rgba(255, 255, 255, 0.3) antialiasing: true smooth: true } @@ -165,8 +168,8 @@ Item { ListView { id: trayView - property var itemWidth: isHorizontal ? root.trayItemSize + Meui.Units.largeSpacing * 2 : mainLayout.width * 0.7 - property var itemHeight: isHorizontal ? mainLayout.height * 0.7 : root.trayItemSize + Meui.Units.largeSpacing * 2 + property var itemWidth: isHorizontal ? root.trayItemSize + root.largeSpacing * 2 : mainLayout.width * 0.7 + property var itemHeight: isHorizontal ? mainLayout.height * 0.7 : root.trayItemSize + root.largeSpacing * 2 Layout.preferredWidth: isHorizontal ? itemWidth * count + count * trayView.spacing : mainLayout.width * 0.7 Layout.preferredHeight: isHorizontal ? mainLayout.height * 0.7 : itemHeight * count + count * trayView.spacing @@ -176,7 +179,7 @@ Item { layoutDirection: Qt.RightToLeft interactive: false model: SystemTrayModel { id: trayModel } - spacing: Meui.Units.smallSpacing / 2 + spacing: root.smallSpacing / 2 clip: true onCountChanged: delayCalcIconSize() @@ -185,6 +188,16 @@ Item { height: trayView.itemHeight width: trayView.itemWidth + property bool darkMode: Meui.Theme.darkMode + + onDarkModeChanged: updateTimer.restart() + + Timer { + id: updateTimer + interval: 10 + onTriggered: iconItem.updateIcon() + } + IconItem { id: iconItem anchors.centerIn: parent @@ -200,7 +213,7 @@ Item { } Item { - width: Meui.Units.smallSpacing + width: root.smallSpacing } ControlCenterItem { diff --git a/resources.qrc b/resources.qrc index 754c47a..a68d34f 100644 --- a/resources.qrc +++ b/resources.qrc @@ -102,5 +102,6 @@ svg/light/dark-mode.svg svg/dark/dark-mode.svg svg/dark/bluetooth-symbolic.svg + qml/TopLevelMenu.qml diff --git a/src/applicationmodel.cpp b/src/applicationmodel.cpp index 18c776e..737c11f 100644 --- a/src/applicationmodel.cpp +++ b/src/applicationmodel.cpp @@ -52,6 +52,7 @@ QHash ApplicationModel::roleNames() const roles[ActiveRole] = "isActive"; roles[WindowCountRole] = "windowCount"; roles[IsPinnedRole] = "isPinned"; + roles[DesktopFileRole] = "desktopFile"; return roles; } @@ -75,6 +76,8 @@ QVariant ApplicationModel::data(const QModelIndex &index, int role) const return item->wids.count(); case IsPinnedRole: return item->isPinned; + case DesktopFileRole: + return item->desktopPath; default: return QVariant(); } diff --git a/src/applicationmodel.h b/src/applicationmodel.h index df97f76..fe77bed 100644 --- a/src/applicationmodel.h +++ b/src/applicationmodel.h @@ -36,7 +36,8 @@ public: VisibleNameRole, ActiveRole, WindowCountRole, - IsPinnedRole + IsPinnedRole, + DesktopFileRole }; explicit ApplicationModel(QObject *parent = nullptr); diff --git a/src/iconitem.cpp b/src/iconitem.cpp index b86b263..40b3751 100644 --- a/src/iconitem.cpp +++ b/src/iconitem.cpp @@ -316,6 +316,11 @@ int IconItem::paintedHeight() const return boundingRect().size().toSize().height(); } +void IconItem::updateIcon() +{ + updatePolish(); +} + void IconItem::updatePolish() { QQuickItem::updatePolish(); diff --git a/src/iconitem.h b/src/iconitem.h index f8454f8..bc69a4b 100644 --- a/src/iconitem.h +++ b/src/iconitem.h @@ -49,6 +49,8 @@ public: int paintedWidth() const; int paintedHeight() const; + Q_INVOKABLE void updateIcon(); + void updatePolish() override; QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *updatePaintNodeData) override; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9a7b459..a864da0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -62,6 +62,10 @@ MainWindow::MainWindow(QQuickView *parent) connect(qApp->primaryScreen(), &QScreen::virtualGeometryChanged, this, &MainWindow::resizeWindow); connect(qApp->primaryScreen(), &QScreen::geometryChanged, this, &MainWindow::resizeWindow); + connect(qApp->primaryScreen(), &QScreen::orientationChanged, this, [=] (Qt::ScreenOrientation orientation) { + Q_UNUSED(orientation) + + }); connect(m_settings, &DockSettings::directionChanged, this, &MainWindow::onPositionChanged); connect(m_settings, &DockSettings::iconSizeChanged, this, &MainWindow::onIconSizeChanged); diff --git a/src/toplevelmenu.cpp b/src/toplevelmenu.cpp new file mode 100644 index 0000000..8486119 --- /dev/null +++ b/src/toplevelmenu.cpp @@ -0,0 +1,7 @@ +#include "toplevelmenu.h" + +TopLevelMenu::TopLevelMenu(QQuickView *parent) + : QQuickView(parent) +{ + setFlags(Qt::Popup); +} diff --git a/src/toplevelmenu.h b/src/toplevelmenu.h new file mode 100644 index 0000000..c7e5fa4 --- /dev/null +++ b/src/toplevelmenu.h @@ -0,0 +1,17 @@ +#ifndef TOPLEVELMENU_H +#define TOPLEVELMENU_H + +#include + +class TopLevelMenu : public QQuickView +{ + Q_OBJECT + +public: + explicit TopLevelMenu(QQuickView *parent = nullptr); + +signals: + +}; + +#endif // TOPLEVELMENU_H