remove hoverpanel title, move actions into applets, add qmllint baseline regen script
This commit is contained in:
parent
c24e18d5da
commit
adb6c21135
26 changed files with 192 additions and 202 deletions
62
flake.nix
62
flake.nix
|
|
@ -87,6 +87,31 @@
|
||||||
--add-flags "-p ${nova-shell}/share/nova-shell/shell.qml"
|
--add-flags "-p ${nova-shell}/share/nova-shell/shell.qml"
|
||||||
'';
|
'';
|
||||||
docs = pkgs.callPackage ./nix/docs.nix { inherit self; };
|
docs = pkgs.callPackage ./nix/docs.nix { inherit self; };
|
||||||
|
|
||||||
|
# Raw qmllint warnings for baseline regeneration (never fails)
|
||||||
|
qmllint-warnings =
|
||||||
|
rawPkgs.runCommand "nova-shell-qmllint-warnings"
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [ rawPkgs.qt6.qtdeclarative ];
|
||||||
|
src = self;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
cd $src
|
||||||
|
export QML_IMPORT_PATH="${rawPkgs.qt6.qtdeclarative}/lib/qt-6/qml:${
|
||||||
|
quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||||
|
}/lib/qt-6/qml"
|
||||||
|
qmllint -E \
|
||||||
|
-I shell/modules -I shell/services -I shell/applets -I shell/dock -I shell/lock \
|
||||||
|
shell/shell.qml shell/modules/*.qml shell/services/*.qml \
|
||||||
|
shell/applets/*.qml shell/dock/*.qml shell/lock/*.qml \
|
||||||
|
> $TMPDIR/raw.txt 2>&1 || true
|
||||||
|
|
||||||
|
mkdir -p $out
|
||||||
|
grep -E "^Warning:" $TMPDIR/raw.txt \
|
||||||
|
| sed 's/^Warning: //' \
|
||||||
|
| sed 's/\([^:]*\):[0-9]*:[0-9]*: /\1: /' \
|
||||||
|
| sort -u > $out/current.txt
|
||||||
|
'';
|
||||||
default = nova-shell;
|
default = nova-shell;
|
||||||
|
|
||||||
# nova-shell on unpatched Qt for A/B crash testing
|
# nova-shell on unpatched Qt for A/B crash testing
|
||||||
|
|
@ -134,47 +159,32 @@
|
||||||
nova-stats = self.packages.${pkgs.stdenv.hostPlatform.system}.nova-stats;
|
nova-stats = self.packages.${pkgs.stdenv.hostPlatform.system}.nova-stats;
|
||||||
docs = self.packages.${pkgs.stdenv.hostPlatform.system}.docs;
|
docs = self.packages.${pkgs.stdenv.hostPlatform.system}.docs;
|
||||||
qmllint =
|
qmllint =
|
||||||
|
let
|
||||||
|
warnings = self.packages.${pkgs.stdenv.hostPlatform.system}.qmllint-warnings;
|
||||||
|
in
|
||||||
rawPkgs.runCommand "nova-shell-qmllint"
|
rawPkgs.runCommand "nova-shell-qmllint"
|
||||||
{
|
{
|
||||||
nativeBuildInputs = [ rawPkgs.qt6.qtdeclarative ];
|
|
||||||
src = self;
|
src = self;
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
cd $src
|
# Compare current warnings against baseline
|
||||||
export QML_IMPORT_PATH="${rawPkgs.qt6.qtdeclarative}/lib/qt-6/qml:${
|
|
||||||
quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default
|
|
||||||
}/lib/qt-6/qml"
|
|
||||||
qmllint -E \
|
|
||||||
-I shell/modules -I shell/services -I shell/applets -I shell/dock -I shell/lock \
|
|
||||||
shell/shell.qml shell/modules/*.qml shell/services/*.qml \
|
|
||||||
shell/applets/*.qml shell/dock/*.qml shell/lock/*.qml \
|
|
||||||
> $TMPDIR/raw.txt 2>&1 || true
|
|
||||||
|
|
||||||
# Extract unique warning messages (file:message, without line numbers)
|
|
||||||
grep -E "^Warning:" $TMPDIR/raw.txt \
|
|
||||||
| sed 's/^Warning: //' \
|
|
||||||
| sed 's/\([^:]*\):[0-9]*:[0-9]*: /\1: /' \
|
|
||||||
| sort -u > $TMPDIR/current.txt
|
|
||||||
|
|
||||||
# Compare against baseline
|
|
||||||
touch $TMPDIR/new-warnings.txt $TMPDIR/stale-warnings.txt
|
touch $TMPDIR/new-warnings.txt $TMPDIR/stale-warnings.txt
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if ! grep -qFx "$line" test/qmllint-baseline.txt 2>/dev/null; then
|
if ! grep -qFx "$line" $src/test/qmllint-baseline.txt 2>/dev/null; then
|
||||||
echo "$line" >> $TMPDIR/new-warnings.txt
|
echo "$line" >> $TMPDIR/new-warnings.txt
|
||||||
fi
|
fi
|
||||||
done < $TMPDIR/current.txt
|
done < ${warnings}/current.txt
|
||||||
|
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if ! grep -qFx "$line" $TMPDIR/current.txt; then
|
[ -z "$line" ] && continue
|
||||||
|
if ! grep -qFx "$line" ${warnings}/current.txt; then
|
||||||
echo "$line" >> $TMPDIR/stale-warnings.txt
|
echo "$line" >> $TMPDIR/stale-warnings.txt
|
||||||
fi
|
fi
|
||||||
done < test/qmllint-baseline.txt
|
done < $src/test/qmllint-baseline.txt
|
||||||
|
|
||||||
# Output dir with individual files for inspection
|
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cp $TMPDIR/raw.txt $out/raw.txt
|
cp ${warnings}/current.txt $out/current.txt
|
||||||
cp $TMPDIR/current.txt $out/current.txt
|
cp $src/test/qmllint-baseline.txt $out/baseline.txt
|
||||||
cp test/qmllint-baseline.txt $out/baseline.txt
|
|
||||||
cp $TMPDIR/new-warnings.txt $out/new-warnings.txt
|
cp $TMPDIR/new-warnings.txt $out/new-warnings.txt
|
||||||
cp $TMPDIR/stale-warnings.txt $out/stale-warnings.txt
|
cp $TMPDIR/stale-warnings.txt $out/stale-warnings.txt
|
||||||
|
|
||||||
|
|
|
||||||
31
shell/applets/AppletActionBar.qml
Normal file
31
shell/applets/AppletActionBar.qml
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
import QtQuick
|
||||||
|
import "../services" as S
|
||||||
|
|
||||||
|
// Action bar for applet-level controls (power toggles, DND, clear-all, etc.)
|
||||||
|
// Place at the top of an applet Column. Children are right-aligned action buttons.
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
default property alias actions: _row.children
|
||||||
|
required property color accentColor
|
||||||
|
|
||||||
|
width: parent?.width ?? 0
|
||||||
|
height: 24
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: _row
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 4
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
spacing: 8
|
||||||
|
layoutDirection: Qt.RightToLeft
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
height: 1
|
||||||
|
color: S.Theme.base03
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,37 @@ Column {
|
||||||
onActiveChanged: if (active)
|
onActiveChanged: if (active)
|
||||||
S.BluetoothService.refresh()
|
S.BluetoothService.refresh()
|
||||||
|
|
||||||
|
AppletActionBar {
|
||||||
|
accentColor: root.accentColor
|
||||||
|
|
||||||
|
Item {
|
||||||
|
width: 20
|
||||||
|
height: 20
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: "\uF011"
|
||||||
|
color: S.BluetoothService.enabled ? root.accentColor : S.Theme.base04
|
||||||
|
font.pixelSize: S.Theme.fontSize
|
||||||
|
font.family: S.Theme.iconFontFamily
|
||||||
|
|
||||||
|
Behavior on color {
|
||||||
|
ColorAnimation {
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
}
|
||||||
|
|
||||||
|
TapHandler {
|
||||||
|
onTapped: S.BluetoothService.setPower(!S.BluetoothService.enabled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: S.BluetoothService.devices
|
model: S.BluetoothService.devices
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,37 @@ Column {
|
||||||
onActiveChanged: if (active)
|
onActiveChanged: if (active)
|
||||||
S.NetworkService.refresh()
|
S.NetworkService.refresh()
|
||||||
|
|
||||||
|
AppletActionBar {
|
||||||
|
accentColor: root.accentColor
|
||||||
|
|
||||||
|
Item {
|
||||||
|
width: 20
|
||||||
|
height: 20
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: "\uF011"
|
||||||
|
color: S.NetworkService.wifiEnabled ? root.accentColor : S.Theme.base04
|
||||||
|
font.pixelSize: S.Theme.fontSize
|
||||||
|
font.family: S.Theme.iconFontFamily
|
||||||
|
|
||||||
|
Behavior on color {
|
||||||
|
ColorAnimation {
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
}
|
||||||
|
|
||||||
|
TapHandler {
|
||||||
|
onTapped: S.NetworkService.setWifi(!S.NetworkService.wifiEnabled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: S.NetworkService.networks
|
model: S.NetworkService.networks
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,42 @@ Column {
|
||||||
_cascadeDismiss();
|
_cascadeDismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AppletActionBar {
|
||||||
|
accentColor: root.accentColor
|
||||||
|
|
||||||
|
// Clear all
|
||||||
|
Text {
|
||||||
|
text: "\uF1F8"
|
||||||
|
color: _clearHover.hovered ? S.Theme.base08 : S.Theme.base04
|
||||||
|
font.pixelSize: S.Theme.fontSize
|
||||||
|
font.family: S.Theme.iconFontFamily
|
||||||
|
visible: S.NotifService.count > 0
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
id: _clearHover
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
}
|
||||||
|
TapHandler {
|
||||||
|
onTapped: root.cascadeDismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DND toggle
|
||||||
|
Text {
|
||||||
|
text: S.NotifService.dnd ? "\uDB82\uDE93" : "\uDB80\uDC9C"
|
||||||
|
color: S.NotifService.dnd ? S.Theme.base09 : S.Theme.base04
|
||||||
|
font.pixelSize: S.Theme.fontSize
|
||||||
|
font.family: S.Theme.iconFontFamily
|
||||||
|
|
||||||
|
HoverHandler {
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
}
|
||||||
|
TapHandler {
|
||||||
|
onTapped: S.NotifService.toggleDnd()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ── Cascade dismiss logic ───────────────────────────────────────────
|
// ── Cascade dismiss logic ───────────────────────────────────────────
|
||||||
property var _pendingDismissIds: []
|
property var _pendingDismissIds: []
|
||||||
property var _collapsedGroups: ({})
|
property var _collapsedGroups: ({})
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
module applets
|
module applets
|
||||||
# keep-sorted start
|
# keep-sorted start
|
||||||
|
AppletActionBar 1.0 AppletActionBar.qml
|
||||||
BacklightApplet 1.0 BacklightApplet.qml
|
BacklightApplet 1.0 BacklightApplet.qml
|
||||||
BatteryApplet 1.0 BatteryApplet.qml
|
BatteryApplet 1.0 BatteryApplet.qml
|
||||||
ClockApplet 1.0 ClockApplet.qml
|
ClockApplet 1.0 ClockApplet.qml
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
active: S.Modules.backlight.enable && S.BacklightService.available
|
active: S.Modules.backlight.enable && S.BacklightService.available
|
||||||
tooltip: "Brightness: " + percent + "%"
|
tooltip: "Brightness: " + percent + "%"
|
||||||
panelNamespace: "nova-backlight"
|
panelNamespace: "nova-backlight"
|
||||||
panelTitle: "Brightness"
|
|
||||||
panelContentWidth: 200
|
panelContentWidth: 200
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.BacklightApplet {
|
C.BacklightApplet {
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,8 @@ Row {
|
||||||
|
|
||||||
// Panel configuration - set by modules that have applets
|
// Panel configuration - set by modules that have applets
|
||||||
property Component panelComponent: null
|
property Component panelComponent: null
|
||||||
property string panelTitle: ""
|
|
||||||
property string panelNamespace: "nova-panel"
|
property string panelNamespace: "nova-panel"
|
||||||
property real panelContentWidth: 220
|
property real panelContentWidth: 220
|
||||||
property Component titleActionsComponent: null
|
|
||||||
|
|
||||||
signal tapped
|
signal tapped
|
||||||
|
|
||||||
|
|
@ -108,9 +106,7 @@ Row {
|
||||||
anchorItem: root
|
anchorItem: root
|
||||||
accentColor: root.accentColor
|
accentColor: root.accentColor
|
||||||
panelNamespace: root.panelNamespace
|
panelNamespace: root.panelNamespace
|
||||||
panelTitle: root.panelTitle
|
|
||||||
contentWidth: root.panelContentWidth
|
contentWidth: root.panelContentWidth
|
||||||
titleActionsComponent: root.titleActionsComponent
|
|
||||||
onDismissed: root.dismissPanel()
|
onDismissed: root.dismissPanel()
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
active: S.Modules.battery.enable && S.BatteryService.available
|
active: S.Modules.battery.enable && S.BatteryService.available
|
||||||
tooltip: "Battery: " + Math.round(S.BatteryService.percent) + "%" + (S.BatteryService.charging ? " (charging)" : "")
|
tooltip: "Battery: " + Math.round(S.BatteryService.percent) + "%" + (S.BatteryService.charging ? " (charging)" : "")
|
||||||
panelNamespace: "nova-battery"
|
panelNamespace: "nova-battery"
|
||||||
panelTitle: "Battery"
|
|
||||||
panelContentWidth: 240
|
panelContentWidth: 240
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.BatteryApplet {
|
C.BatteryApplet {
|
||||||
|
|
|
||||||
|
|
@ -16,36 +16,7 @@ M.BarModule {
|
||||||
return "Bluetooth: on";
|
return "Bluetooth: on";
|
||||||
}
|
}
|
||||||
panelNamespace: "nova-bluetooth"
|
panelNamespace: "nova-bluetooth"
|
||||||
panelTitle: "Bluetooth"
|
|
||||||
panelContentWidth: 250
|
panelContentWidth: 250
|
||||||
titleActionsComponent: Component {
|
|
||||||
Item {
|
|
||||||
width: 20
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "\uF011"
|
|
||||||
color: S.BluetoothService.enabled ? root.accentColor : S.Theme.base04
|
|
||||||
font.pixelSize: S.Theme.fontSize
|
|
||||||
font.family: S.Theme.iconFontFamily
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HoverHandler {
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
}
|
|
||||||
|
|
||||||
TapHandler {
|
|
||||||
onTapped: S.BluetoothService.setPower(!S.BluetoothService.enabled)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.BluetoothApplet {
|
C.BluetoothApplet {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
spacing: S.Theme.moduleSpacing
|
spacing: S.Theme.moduleSpacing
|
||||||
tooltip: Qt.formatDateTime(clock.date, "dddd, dd. MMMM yyyy")
|
tooltip: Qt.formatDateTime(clock.date, "dddd, dd. MMMM yyyy")
|
||||||
panelNamespace: "nova-clock"
|
panelNamespace: "nova-clock"
|
||||||
panelTitle: Qt.formatTime(clock.date, "HH:mm:ss")
|
|
||||||
panelContentWidth: 220
|
panelContentWidth: 220
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.ClockApplet {
|
C.ClockApplet {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
||||||
tooltip: "CPU: " + S.SystemStats.cpuUsage + "% @ " + S.SystemStats.cpuFreqGhz.toFixed(2) + " GHz"
|
tooltip: "CPU: " + S.SystemStats.cpuUsage + "% @ " + S.SystemStats.cpuFreqGhz.toFixed(2) + " GHz"
|
||||||
panelNamespace: "nova-cpu"
|
panelNamespace: "nova-cpu"
|
||||||
panelTitle: "CPU"
|
|
||||||
panelContentWidth: 260
|
panelContentWidth: 260
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.CpuApplet {
|
C.CpuApplet {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
||||||
tooltip: "Disk: " + _rootPct + "% used"
|
tooltip: "Disk: " + _rootPct + "% used"
|
||||||
panelNamespace: "nova-disk"
|
panelNamespace: "nova-disk"
|
||||||
panelTitle: "Disk"
|
|
||||||
panelContentWidth: 260
|
panelContentWidth: 260
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.DiskApplet {
|
C.DiskApplet {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
active: S.Modules.gpu.enable && S.SystemStats.gpuAvailable
|
active: S.Modules.gpu.enable && S.SystemStats.gpuAvailable
|
||||||
tooltip: "GPU: " + S.SystemStats.gpuUsage + "%"
|
tooltip: "GPU: " + S.SystemStats.gpuUsage + "%"
|
||||||
panelNamespace: "nova-gpu"
|
panelNamespace: "nova-gpu"
|
||||||
panelTitle: "GPU"
|
|
||||||
panelContentWidth: 240
|
panelContentWidth: 240
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.GpuApplet {
|
C.GpuApplet {
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,9 @@ PanelWindow {
|
||||||
|
|
||||||
property bool showPanel: false
|
property bool showPanel: false
|
||||||
property Item anchorItem: null
|
property Item anchorItem: null
|
||||||
property real anchorX: -1
|
|
||||||
signal dismissed
|
signal dismissed
|
||||||
|
|
||||||
required property color accentColor
|
required property color accentColor
|
||||||
property string panelTitle: ""
|
|
||||||
property Component titleActionsComponent: null
|
|
||||||
property string panelNamespace: "nova-panel"
|
property string panelNamespace: "nova-panel"
|
||||||
property real contentWidth: 220
|
property real contentWidth: 220
|
||||||
|
|
||||||
|
|
@ -50,8 +47,6 @@ PanelWindow {
|
||||||
if (root.anchorItem) {
|
if (root.anchorItem) {
|
||||||
const pt = root.anchorItem.mapToGlobal(root.anchorItem.width / 2, 0);
|
const pt = root.anchorItem.mapToGlobal(root.anchorItem.width / 2, 0);
|
||||||
cx = pt.x - (scr?.x ?? 0);
|
cx = pt.x - (scr?.x ?? 0);
|
||||||
} else if (root.anchorX >= 0) {
|
|
||||||
cx = root.anchorX;
|
|
||||||
} else {
|
} else {
|
||||||
cx = sw / 2;
|
cx = sw / 2;
|
||||||
}
|
}
|
||||||
|
|
@ -206,42 +201,6 @@ PanelWindow {
|
||||||
id: _panelColumn
|
id: _panelColumn
|
||||||
width: root.contentWidth
|
width: root.contentWidth
|
||||||
|
|
||||||
// Header row: title + action buttons
|
|
||||||
Item {
|
|
||||||
id: _headerItem
|
|
||||||
visible: root.panelTitle !== "" || root.titleActionsComponent !== null
|
|
||||||
width: parent.width
|
|
||||||
height: 24
|
|
||||||
|
|
||||||
Text {
|
|
||||||
visible: root.panelTitle !== ""
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: 12
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
text: root.panelTitle
|
|
||||||
color: root.accentColor
|
|
||||||
font.pixelSize: S.Theme.fontSize - 1
|
|
||||||
font.bold: true
|
|
||||||
font.family: S.Theme.fontFamily
|
|
||||||
}
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
id: _titleActionsLoader
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: 4
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
sourceComponent: root.titleActionsComponent
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
height: 1
|
|
||||||
color: S.Theme.base03
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
id: _flickable
|
id: _flickable
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
@ -250,7 +209,7 @@ PanelWindow {
|
||||||
clip: contentHeight > height
|
clip: contentHeight > height
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
|
|
||||||
readonly property real _maxContentHeight: (root.screen?.height ?? 1080) * 0.6 - (_headerItem.visible ? _headerItem.height : 0)
|
readonly property real _maxContentHeight: (root.screen?.height ?? 1080) * 0.6
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: panelContent
|
id: panelContent
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
||||||
tooltip: "Memory: " + usedGb.toFixed(1) + " / " + totalGb.toFixed(1) + " GB"
|
tooltip: "Memory: " + usedGb.toFixed(1) + " / " + totalGb.toFixed(1) + " GB"
|
||||||
panelNamespace: "nova-memory"
|
panelNamespace: "nova-memory"
|
||||||
panelTitle: "Memory"
|
|
||||||
panelContentWidth: 240
|
panelContentWidth: 240
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.MemoryApplet {
|
C.MemoryApplet {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ M.BarModule {
|
||||||
active: S.Modules.mpris.enable && S.MprisService.player !== null
|
active: S.Modules.mpris.enable && S.MprisService.player !== null
|
||||||
tooltip: S.MprisService.player ? (S.MprisService.player.trackTitle || S.MprisService.player.identity || "Media") + (S.MprisService.playing ? " (playing)" : " (paused)") : "Media"
|
tooltip: S.MprisService.player ? (S.MprisService.player.trackTitle || S.MprisService.player.identity || "Media") + (S.MprisService.playing ? " (playing)" : " (paused)") : "Media"
|
||||||
panelNamespace: "nova-mpris"
|
panelNamespace: "nova-mpris"
|
||||||
panelTitle: "Now Playing"
|
|
||||||
panelContentWidth: 280
|
panelContentWidth: 280
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.MprisApplet {
|
C.MprisApplet {
|
||||||
|
|
|
||||||
|
|
@ -18,36 +18,7 @@ M.BarModule {
|
||||||
return "Network: disconnected";
|
return "Network: disconnected";
|
||||||
}
|
}
|
||||||
panelNamespace: "nova-network"
|
panelNamespace: "nova-network"
|
||||||
panelTitle: "Wi-Fi"
|
|
||||||
panelContentWidth: 250
|
panelContentWidth: 250
|
||||||
titleActionsComponent: Component {
|
|
||||||
Item {
|
|
||||||
width: 20
|
|
||||||
height: 20
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "\uF011"
|
|
||||||
color: S.NetworkService.wifiEnabled ? root.accentColor : S.Theme.base04
|
|
||||||
font.pixelSize: S.Theme.fontSize
|
|
||||||
font.family: S.Theme.iconFontFamily
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HoverHandler {
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
}
|
|
||||||
|
|
||||||
TapHandler {
|
|
||||||
onTapped: S.NetworkService.setWifi(!S.NetworkService.wifiEnabled)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.NetworkApplet {
|
C.NetworkApplet {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
|
||||||
|
|
@ -11,60 +11,15 @@ M.BarModule {
|
||||||
spacing: S.Theme.moduleSpacing
|
spacing: S.Theme.moduleSpacing
|
||||||
tooltip: S.NotifService.count > 0 ? "Notifications: " + S.NotifService.count + (S.NotifService.dnd ? " (DND)" : "") : (S.NotifService.dnd ? "Do not disturb" : "No notifications")
|
tooltip: S.NotifService.count > 0 ? "Notifications: " + S.NotifService.count + (S.NotifService.dnd ? " (DND)" : "") : (S.NotifService.dnd ? "Do not disturb" : "No notifications")
|
||||||
panelNamespace: "nova-notifications"
|
panelNamespace: "nova-notifications"
|
||||||
panelTitle: "Notifications"
|
|
||||||
panelContentWidth: 350
|
panelContentWidth: 350
|
||||||
titleActionsComponent: Component {
|
|
||||||
Row {
|
|
||||||
spacing: 8
|
|
||||||
|
|
||||||
// DND toggle
|
|
||||||
Text {
|
|
||||||
text: S.NotifService.dnd ? "\uDB82\uDE93" : "\uDB80\uDC9C"
|
|
||||||
color: S.NotifService.dnd ? S.Theme.base09 : S.Theme.base04
|
|
||||||
font.pixelSize: S.Theme.fontSize
|
|
||||||
font.family: S.Theme.iconFontFamily
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
HoverHandler {
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
}
|
|
||||||
TapHandler {
|
|
||||||
onTapped: S.NotifService.toggleDnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear all
|
|
||||||
Text {
|
|
||||||
text: "\uF1F8"
|
|
||||||
color: _clearHover.hovered ? S.Theme.base08 : S.Theme.base04
|
|
||||||
font.pixelSize: S.Theme.fontSize
|
|
||||||
font.family: S.Theme.iconFontFamily
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
visible: S.NotifService.count > 0
|
|
||||||
|
|
||||||
HoverHandler {
|
|
||||||
id: _clearHover
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
}
|
|
||||||
TapHandler {
|
|
||||||
onTapped: if (root._notifApplet)
|
|
||||||
root._notifApplet.cascadeDismiss()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.NotifApplet {
|
C.NotifApplet {
|
||||||
width: parent.width
|
width: parent.width
|
||||||
contentWidth: root.panelContentWidth
|
contentWidth: root.panelContentWidth
|
||||||
accentColor: root.accentColor
|
accentColor: root.accentColor
|
||||||
Component.onCompleted: root._notifApplet = this
|
|
||||||
Component.onDestruction: root._notifApplet = null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
property var _notifApplet: null
|
|
||||||
|
|
||||||
readonly property bool hasUrgent: S.NotifService.list.some(n => n.urgency === NotificationUrgency.Critical && n.state !== "dismissed")
|
readonly property bool hasUrgent: S.NotifService.list.some(n => n.urgency === NotificationUrgency.Critical && n.state !== "dismissed")
|
||||||
|
|
||||||
M.BarIcon {
|
M.BarIcon {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
active: S.Modules.power.enable
|
active: S.Modules.power.enable
|
||||||
tooltip: "Power menu"
|
tooltip: "Power menu"
|
||||||
panelNamespace: "nova-power"
|
panelNamespace: "nova-power"
|
||||||
panelTitle: "Power"
|
|
||||||
panelContentWidth: 180
|
panelContentWidth: 180
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.PowerApplet {
|
C.PowerApplet {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
spacing: Math.max(1, S.Theme.moduleSpacing - 2)
|
||||||
tooltip: "Temperature: " + _temp + "\u00B0C"
|
tooltip: "Temperature: " + _temp + "\u00B0C"
|
||||||
panelNamespace: "nova-temperature"
|
panelNamespace: "nova-temperature"
|
||||||
panelTitle: "Temperature"
|
|
||||||
panelContentWidth: 220
|
panelContentWidth: 220
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.TemperatureApplet {
|
C.TemperatureApplet {
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ M.BarModule {
|
||||||
accentColor: root.accentColor
|
accentColor: root.accentColor
|
||||||
handle: iconItem.modelData.menu
|
handle: iconItem.modelData.menu
|
||||||
screen: QsWindow.window?.screen ?? null
|
screen: QsWindow.window?.screen ?? null
|
||||||
anchorX: iconItem.mapToGlobal(iconItem.width / 2, 0).x - (QsWindow.window?.screen?.x ?? 0)
|
anchorItem: iconItem
|
||||||
onDismissed: {
|
onDismissed: {
|
||||||
menuLoader.active = false;
|
menuLoader.active = false;
|
||||||
root._activeMenu = null;
|
root._activeMenu = null;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ M.BarModule {
|
||||||
spacing: S.Theme.moduleSpacing
|
spacing: S.Theme.moduleSpacing
|
||||||
tooltip: "Volume: " + Math.round(volume * 100) + "%" + (muted ? " (muted)" : "")
|
tooltip: "Volume: " + Math.round(volume * 100) + "%" + (muted ? " (muted)" : "")
|
||||||
panelNamespace: "nova-volume"
|
panelNamespace: "nova-volume"
|
||||||
panelTitle: "Sound"
|
|
||||||
panelContentWidth: 220
|
panelContentWidth: 220
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.VolumeApplet {
|
C.VolumeApplet {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ M.BarModule {
|
||||||
active: S.Modules.weather.enable && S.WeatherService.available
|
active: S.Modules.weather.enable && S.WeatherService.available
|
||||||
tooltip: "Weather"
|
tooltip: "Weather"
|
||||||
panelNamespace: "nova-weather"
|
panelNamespace: "nova-weather"
|
||||||
panelTitle: "Weather"
|
|
||||||
panelContentWidth: 280
|
panelContentWidth: 280
|
||||||
panelComponent: Component {
|
panelComponent: Component {
|
||||||
C.WeatherApplet {
|
C.WeatherApplet {
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ shell/applets/BluetoothApplet.qml: Unqualified access [unqualified]
|
||||||
shell/applets/ClockApplet.qml: Unqualified access [unqualified]
|
shell/applets/ClockApplet.qml: Unqualified access [unqualified]
|
||||||
shell/applets/CpuApplet.qml: Member "_barColor" not found on type "QQuickItem" [missing-property]
|
shell/applets/CpuApplet.qml: Member "_barColor" not found on type "QQuickItem" [missing-property]
|
||||||
shell/applets/CpuApplet.qml: Member "_f" not found on type "QQuickItem" [missing-property]
|
shell/applets/CpuApplet.qml: Member "_f" not found on type "QQuickItem" [missing-property]
|
||||||
shell/applets/CpuApplet.qml: Member "index" not found on type "QQuickItem" [missing-property]
|
|
||||||
shell/applets/CpuApplet.qml: Member "_throttled" not found on type "QQuickItem" [missing-property]
|
shell/applets/CpuApplet.qml: Member "_throttled" not found on type "QQuickItem" [missing-property]
|
||||||
|
shell/applets/CpuApplet.qml: Member "index" not found on type "QQuickItem" [missing-property]
|
||||||
shell/applets/CpuApplet.qml: Unqualified access [unqualified]
|
shell/applets/CpuApplet.qml: Unqualified access [unqualified]
|
||||||
shell/applets/DiskApplet.qml: Unqualified access [unqualified]
|
shell/applets/DiskApplet.qml: Unqualified access [unqualified]
|
||||||
shell/applets/MemoryApplet.qml: Unqualified access [unqualified]
|
shell/applets/MemoryApplet.qml: Unqualified access [unqualified]
|
||||||
|
|
@ -18,15 +18,19 @@ shell/applets/PowerApplet.qml: Unqualified access [unqualified]
|
||||||
shell/applets/TemperatureApplet.qml: Unqualified access [unqualified]
|
shell/applets/TemperatureApplet.qml: Unqualified access [unqualified]
|
||||||
shell/applets/VolumeApplet.qml: Unqualified access [unqualified]
|
shell/applets/VolumeApplet.qml: Unqualified access [unqualified]
|
||||||
shell/dock/AppletDock.qml: Could not find property "top". [missing-property]
|
shell/dock/AppletDock.qml: Could not find property "top". [missing-property]
|
||||||
shell/dock/AppletDock.qml: Type margins is used but it is not resolved [unresolved-type]
|
|
||||||
shell/dock/AppletDock.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/dock/AppletDock.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
|
shell/dock/AppletDock.qml: Type margins is used but it is not resolved [unresolved-type]
|
||||||
shell/dock/AppletDock.qml: unknown grouped property scope margins. [unqualified]
|
shell/dock/AppletDock.qml: unknown grouped property scope margins. [unqualified]
|
||||||
shell/dock/DockEdgeTrigger.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/dock/DockEdgeTrigger.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
shell/lock/LockAuth.qml: Unqualified access [unqualified]
|
|
||||||
shell/lock/Lock.qml: Unqualified access [unqualified]
|
shell/lock/Lock.qml: Unqualified access [unqualified]
|
||||||
|
shell/lock/LockAuth.qml: Unqualified access [unqualified]
|
||||||
shell/lock/LockSurface.qml: Unqualified access [unqualified]
|
shell/lock/LockSurface.qml: Unqualified access [unqualified]
|
||||||
shell/modules/BackgroundOverlay.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/BackgroundOverlay.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
shell/modules/BacklightModule.qml: Unqualified access [unqualified]
|
shell/modules/BacklightModule.qml: Unqualified access [unqualified]
|
||||||
|
shell/modules/Bar.qml: Could not find property "right". [missing-property]
|
||||||
|
shell/modules/Bar.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
|
shell/modules/Bar.qml: Type margins is used but it is not resolved [unresolved-type]
|
||||||
|
shell/modules/Bar.qml: unknown grouped property scope margins. [unqualified]
|
||||||
shell/modules/BarGroup.qml: Member "screen" not found on type "QObject" [missing-property]
|
shell/modules/BarGroup.qml: Member "screen" not found on type "QObject" [missing-property]
|
||||||
shell/modules/BarGroup.qml: Unqualified access [unqualified]
|
shell/modules/BarGroup.qml: Unqualified access [unqualified]
|
||||||
shell/modules/BarIcon.qml: Member "accentColor" not found on type "QQuickItem" [missing-property]
|
shell/modules/BarIcon.qml: Member "accentColor" not found on type "QQuickItem" [missing-property]
|
||||||
|
|
@ -35,10 +39,6 @@ shell/modules/BarModule.qml: Member "accentColor" not found on type "QQuickItem"
|
||||||
shell/modules/BarModule.qml: Member "keepOpen" not found on type "QObject" [missing-property]
|
shell/modules/BarModule.qml: Member "keepOpen" not found on type "QObject" [missing-property]
|
||||||
shell/modules/BarModule.qml: Member "screen" not found on type "QObject" [missing-property]
|
shell/modules/BarModule.qml: Member "screen" not found on type "QObject" [missing-property]
|
||||||
shell/modules/BarModule.qml: Unqualified access [unqualified]
|
shell/modules/BarModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/Bar.qml: Could not find property "right". [missing-property]
|
|
||||||
shell/modules/Bar.qml: Type margins is used but it is not resolved [unresolved-type]
|
|
||||||
shell/modules/Bar.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
|
||||||
shell/modules/Bar.qml: unknown grouped property scope margins. [unqualified]
|
|
||||||
shell/modules/BatteryModule.qml: Unqualified access [unqualified]
|
shell/modules/BatteryModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/BluetoothModule.qml: Unqualified access [unqualified]
|
shell/modules/BluetoothModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/ClockModule.qml: Unqualified access [unqualified]
|
shell/modules/ClockModule.qml: Unqualified access [unqualified]
|
||||||
|
|
@ -46,34 +46,34 @@ shell/modules/CpuModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/DiskModule.qml: Unqualified access [unqualified]
|
shell/modules/DiskModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/GpuModule.qml: Unqualified access [unqualified]
|
shell/modules/GpuModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/HoverPanel.qml: Could not find property "top". [missing-property]
|
shell/modules/HoverPanel.qml: Could not find property "top". [missing-property]
|
||||||
shell/modules/HoverPanel.qml: Type margins is used but it is not resolved [unresolved-type]
|
|
||||||
shell/modules/HoverPanel.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/HoverPanel.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
|
shell/modules/HoverPanel.qml: Type margins is used but it is not resolved [unresolved-type]
|
||||||
shell/modules/HoverPanel.qml: unknown grouped property scope margins. [unqualified]
|
shell/modules/HoverPanel.qml: unknown grouped property scope margins. [unqualified]
|
||||||
shell/modules/MemoryModule.qml: Unqualified access [unqualified]
|
shell/modules/MemoryModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/MprisModule.qml: Unqualified access [unqualified]
|
shell/modules/MprisModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/NetworkModule.qml: Unqualified access [unqualified]
|
shell/modules/NetworkModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/NotifCard.qml: Unqualified access [unqualified]
|
shell/modules/NotifCard.qml: Unqualified access [unqualified]
|
||||||
shell/modules/NotificationsModule.qml: Unqualified access [unqualified]
|
|
||||||
shell/modules/NotifPopup.qml: Could not find property "right". [missing-property]
|
shell/modules/NotifPopup.qml: Could not find property "right". [missing-property]
|
||||||
shell/modules/NotifPopup.qml: Could not find property "top". [missing-property]
|
shell/modules/NotifPopup.qml: Could not find property "top". [missing-property]
|
||||||
shell/modules/NotifPopup.qml: Type margins is used but it is not resolved [unresolved-type]
|
|
||||||
shell/modules/NotifPopup.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/NotifPopup.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
shell/modules/NotifPopup.qml: unknown grouped property scope margins. [unqualified]
|
shell/modules/NotifPopup.qml: Type margins is used but it is not resolved [unresolved-type]
|
||||||
shell/modules/NotifPopup.qml: Unqualified access [unqualified]
|
shell/modules/NotifPopup.qml: Unqualified access [unqualified]
|
||||||
|
shell/modules/NotifPopup.qml: unknown grouped property scope margins. [unqualified]
|
||||||
|
shell/modules/NotificationsModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/OverviewBackdrop.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/OverviewBackdrop.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
shell/modules/PowerModule.qml: Unqualified access [unqualified]
|
shell/modules/PowerModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/ScreenCapture.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/ScreenCapture.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
shell/modules/ScreenCorners.qml: Could not find property "right". [missing-property]
|
shell/modules/ScreenCorners.qml: Could not find property "right". [missing-property]
|
||||||
shell/modules/ScreenCorners.qml: Type margins is used but it is not resolved [unresolved-type]
|
|
||||||
shell/modules/ScreenCorners.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/ScreenCorners.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
shell/modules/ScreenCorners.qml: unknown grouped property scope margins. [unqualified]
|
shell/modules/ScreenCorners.qml: Type margins is used but it is not resolved [unresolved-type]
|
||||||
shell/modules/ScreenCorners.qml: Unqualified access [unqualified]
|
shell/modules/ScreenCorners.qml: Unqualified access [unqualified]
|
||||||
|
shell/modules/ScreenCorners.qml: unknown grouped property scope margins. [unqualified]
|
||||||
shell/modules/TemperatureModule.qml: Unqualified access [unqualified]
|
shell/modules/TemperatureModule.qml: Unqualified access [unqualified]
|
||||||
shell/modules/ThemedIcon.qml: Unqualified access [unqualified]
|
shell/modules/ThemedIcon.qml: Unqualified access [unqualified]
|
||||||
shell/modules/Tooltip.qml: Could not find property "left". [missing-property]
|
shell/modules/Tooltip.qml: Could not find property "left". [missing-property]
|
||||||
shell/modules/Tooltip.qml: Could not find property "top". [missing-property]
|
shell/modules/Tooltip.qml: Could not find property "top". [missing-property]
|
||||||
shell/modules/Tooltip.qml: Type margins is used but it is not resolved [unresolved-type]
|
|
||||||
shell/modules/Tooltip.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
shell/modules/Tooltip.qml: Type PanelWindow is not creatable. [uncreatable-type]
|
||||||
|
shell/modules/Tooltip.qml: Type margins is used but it is not resolved [unresolved-type]
|
||||||
shell/modules/Tooltip.qml: unknown grouped property scope margins. [unqualified]
|
shell/modules/Tooltip.qml: unknown grouped property scope margins. [unqualified]
|
||||||
shell/modules/TrayMenu.qml: Unqualified access [unqualified]
|
shell/modules/TrayMenu.qml: Unqualified access [unqualified]
|
||||||
shell/modules/TrayModule.qml: Member "screen" not found on type "QObject" [missing-property]
|
shell/modules/TrayModule.qml: Member "screen" not found on type "QObject" [missing-property]
|
||||||
|
|
|
||||||
10
test/regen-qmllint-baseline.sh
Executable file
10
test/regen-qmllint-baseline.sh
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Regenerate qmllint baseline from current warnings.
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(git rev-parse --show-toplevel)"
|
||||||
|
git add -A
|
||||||
|
nix build .#qmllint-warnings -o /tmp/nova-qmllint-warnings
|
||||||
|
cp /tmp/nova-qmllint-warnings/current.txt test/qmllint-baseline.txt
|
||||||
|
rm /tmp/nova-qmllint-warnings
|
||||||
|
git add test/qmllint-baseline.txt
|
||||||
|
echo "Baseline regenerated ($(wc -l < test/qmllint-baseline.txt) entries)."
|
||||||
Loading…
Add table
Add a link
Reference in a new issue