Compare commits
No commits in common. "3c91610d5a377ef3be88bd8e470425807ba11115" and "a277ffae67efccc34237db7f42fc0f3c535a71fe" have entirely different histories.
3c91610d5a
...
a277ffae67
14 changed files with 164 additions and 89 deletions
|
@ -5,12 +5,7 @@
|
||||||
kdePackages.breeze-icons
|
kdePackages.breeze-icons
|
||||||
qt6.qtsvg # needed to load breeze icons
|
qt6.qtsvg # needed to load breeze icons
|
||||||
|
|
||||||
# for testing kde things
|
|
||||||
kdePackages.qqc2-desktop-style
|
kdePackages.qqc2-desktop-style
|
||||||
kdePackages.kirigami
|
|
||||||
kdePackages.kirigami.unwrapped
|
|
||||||
kdePackages.kirigami-addons
|
|
||||||
kdePackages.sonnet
|
|
||||||
];
|
];
|
||||||
|
|
||||||
qt = {
|
qt = {
|
||||||
|
@ -25,19 +20,17 @@
|
||||||
nixpkgs.overlays = [(final: prev: {
|
nixpkgs.overlays = [(final: prev: {
|
||||||
qt6Packages = prev.qt6Packages.overrideScope (qfinal: qprev: {
|
qt6Packages = prev.qt6Packages.overrideScope (qfinal: qprev: {
|
||||||
qt6ct = qprev.qt6ct.overrideAttrs (ctprev: {
|
qt6ct = qprev.qt6ct.overrideAttrs (ctprev: {
|
||||||
src = pkgs.fetchFromGitLab {
|
nativeBuildInputs = (builtins.filter (p: p != qfinal.qmake) ctprev.nativeBuildInputs) ++ [ final.cmake ];
|
||||||
domain = "www.opencode.net";
|
|
||||||
owner = "ilya-fedin";
|
|
||||||
repo = "qt6ct";
|
|
||||||
rev = "6fa66ca94f1f8fa5119ad6669d5e3547f4077c1c"; # 'kde' branch
|
|
||||||
sha256 = "z84z4XhAVqIJpF3m6H9FwFiDR7Nk+AY2tLpsibNEzPY=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = ctprev.buildInputs ++ (with final.kdePackages; [
|
buildInputs = ctprev.buildInputs ++ (with final.kdePackages; [
|
||||||
kconfig
|
kconfig
|
||||||
kcolorscheme
|
kcolorscheme
|
||||||
kiconthemes
|
kiconthemes
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeFeature "PLUGINDIR" "lib/qt-6/plugins")
|
||||||
|
];
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})];
|
})];
|
||||||
|
|
|
@ -20,10 +20,8 @@
|
||||||
dejavu_fonts
|
dejavu_fonts
|
||||||
nerdfonts
|
nerdfonts
|
||||||
noto-fonts
|
noto-fonts
|
||||||
noto-fonts-cjk-sans
|
noto-fonts-cjk
|
||||||
]) ++ (with pkgs; [
|
]) ++ (with pkgs; [
|
||||||
material-symbols
|
|
||||||
font-awesome
|
|
||||||
corefonts
|
corefonts
|
||||||
vistafonts
|
vistafonts
|
||||||
]);
|
]);
|
||||||
|
@ -128,7 +126,6 @@
|
||||||
speedcrunch
|
speedcrunch
|
||||||
libreoffice-qt6
|
libreoffice-qt6
|
||||||
ripgrep
|
ripgrep
|
||||||
fd
|
|
||||||
qbittorrent
|
qbittorrent
|
||||||
signal-desktop
|
signal-desktop
|
||||||
anki-bin
|
anki-bin
|
||||||
|
@ -136,7 +133,6 @@
|
||||||
wireshark
|
wireshark
|
||||||
mumble
|
mumble
|
||||||
freetube
|
freetube
|
||||||
jujutsu
|
|
||||||
|
|
||||||
distrobox
|
distrobox
|
||||||
xdg-utils
|
xdg-utils
|
||||||
|
@ -146,9 +142,6 @@
|
||||||
|
|
||||||
unrar # used by ark
|
unrar # used by ark
|
||||||
libnotify # test with it a lot
|
libnotify # test with it a lot
|
||||||
|
|
||||||
kdePackages.merkuro
|
|
||||||
kdePackages.akonadi
|
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
|
|
|
@ -194,10 +194,9 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
base = mkProfile {
|
base = {
|
||||||
id = 5;
|
id = 10;
|
||||||
name = "base";
|
name = "base";
|
||||||
settings = {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
schizo = mkProfile {
|
schizo = mkProfile {
|
||||||
|
|
|
@ -54,13 +54,13 @@ See the above repository for updates as well as full license text. */
|
||||||
direction: rtl;
|
direction: rtl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sidebar-box #sidebar {
|
#sidebar-box > #sidebar {
|
||||||
transition: min-width 115ms linear !important;
|
transition: min-width 115ms linear !important;
|
||||||
min-width: var(--uc-sidebar-width) !important;
|
min-width: var(--uc-sidebar-width) !important;
|
||||||
will-change: min-width;
|
will-change: min-width;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sidebar-box:hover #sidebar {
|
#sidebar-box:hover > #sidebar {
|
||||||
min-width: var(--uc-sidebar-hover-width) !important;
|
min-width: var(--uc-sidebar-hover-width) !important;
|
||||||
transition: min-width 100ms linear var(--uc-autohide-sidebar-delay), box-shadow 500ms linear !important;
|
transition: min-width 100ms linear var(--uc-autohide-sidebar-delay), box-shadow 500ms linear !important;
|
||||||
box-shadow: 0 0 4px rgba(10,10,10, .5);
|
box-shadow: 0 0 4px rgba(10,10,10, .5);
|
||||||
|
@ -90,11 +90,10 @@ See the above repository for updates as well as full license text. */
|
||||||
margin-inline: 0px !important;
|
margin-inline: 0px !important;
|
||||||
border-left-style: solid !important;
|
border-left-style: solid !important;
|
||||||
}
|
}
|
||||||
#sidebar-splitter {
|
#sidebar-splitter{
|
||||||
display: none;
|
width: 0px !important;
|
||||||
/*width: 0px !important;
|
|
||||||
background-color: #f00 !important;
|
background-color: #f00 !important;
|
||||||
border: none !important;*/
|
border: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_bookmarks_toolbar.css made available under Mozilla Public License v. 2.0
|
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_bookmarks_toolbar.css made available under Mozilla Public License v. 2.0
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11692.patch";
|
url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11692.patch";
|
||||||
sha256 = "S/Oy4dAxER2NkoJQYAdsz5rphn5SW2TH50F//5Xmf+Y=";
|
sha256 = "S/Oy4dAxER2NkoJQYAdsz5rphn5SW2TH50F//5Xmf+Y=";
|
||||||
})
|
})
|
||||||
|
(pkgs.fetchpatch {
|
||||||
|
url = "https://patch-diff.githubusercontent.com/raw/keepassxreboot/keepassxc/pull/11693.patch";
|
||||||
|
sha256 = "VveqhLfcw2WyYsD+3jTaqKp4d1EYX8pPL++hyGpsz1w=";
|
||||||
|
})
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
in {
|
in {
|
||||||
|
|
126
modules/user/modules/quickshell/shell/ReloadPopup.qml
Normal file
126
modules/user/modules/quickshell/shell/ReloadPopup.qml
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import Quickshell
|
||||||
|
|
||||||
|
Scope {
|
||||||
|
id: root
|
||||||
|
property bool failed;
|
||||||
|
property string errorString;
|
||||||
|
|
||||||
|
// Connect to the Quickshell global to listen for the reload signals.
|
||||||
|
Connections {
|
||||||
|
target: Quickshell
|
||||||
|
|
||||||
|
function onReloadCompleted() {
|
||||||
|
root.failed = false;
|
||||||
|
popupLoader.loading = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onReloadFailed(error: string) {
|
||||||
|
// Close any existing popup before making a new one.
|
||||||
|
popupLoader.active = false;
|
||||||
|
|
||||||
|
root.failed = true;
|
||||||
|
root.errorString = error;
|
||||||
|
popupLoader.loading = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Keep the popup in a loader because it isn't needed most of the timeand will take up
|
||||||
|
// memory that could be used for something else.
|
||||||
|
LazyLoader {
|
||||||
|
id: popupLoader
|
||||||
|
|
||||||
|
PanelWindow {
|
||||||
|
id: popup
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
top: true
|
||||||
|
left: true
|
||||||
|
}
|
||||||
|
|
||||||
|
margins {
|
||||||
|
top: 25
|
||||||
|
left: 25
|
||||||
|
}
|
||||||
|
|
||||||
|
width: rect.width
|
||||||
|
height: rect.height
|
||||||
|
|
||||||
|
// color blending is a bit odd as detailed in the type reference.
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: rect
|
||||||
|
color: failed ? "#40802020" : "#40009020"
|
||||||
|
|
||||||
|
implicitHeight: layout.implicitHeight + 50
|
||||||
|
implicitWidth: layout.implicitWidth + 30
|
||||||
|
|
||||||
|
// Fills the whole area of the rectangle, making any clicks go to it,
|
||||||
|
// which dismiss the popup.
|
||||||
|
MouseArea {
|
||||||
|
id: mouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: popupLoader.active = false
|
||||||
|
|
||||||
|
// makes the mouse area track mouse hovering, so the hide animation
|
||||||
|
// can be paused when hovering.
|
||||||
|
hoverEnabled: true
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: layout
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 20
|
||||||
|
horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: root.failed ? "Reload failed." : "Reloaded completed!"
|
||||||
|
color: "white"
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: root.errorString
|
||||||
|
color: "white"
|
||||||
|
// When visible is false, it also takes up no space.
|
||||||
|
visible: root.errorString != ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A progress bar on the bottom of the screen, showing how long until the
|
||||||
|
// popup is removed.
|
||||||
|
Rectangle {
|
||||||
|
id: bar
|
||||||
|
color: "#20ffffff"
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
height: 20
|
||||||
|
|
||||||
|
PropertyAnimation {
|
||||||
|
id: anim
|
||||||
|
target: bar
|
||||||
|
property: "width"
|
||||||
|
from: rect.width
|
||||||
|
to: 0
|
||||||
|
duration: failed ? 10000 : 800
|
||||||
|
onFinished: popupLoader.active = false
|
||||||
|
|
||||||
|
// Pause the animation when the mouse is hovering over the popup,
|
||||||
|
// so it stays onscreen while reading. This updates reactively
|
||||||
|
// when the mouse moves on and off the popup.
|
||||||
|
paused: mouseArea.containsMouse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We could set `running: true` inside the animation, but the width of the
|
||||||
|
// rectangle might not be calculated yet, due to the layout.
|
||||||
|
// In the `Component.onCompleted` event handler, all of the component's
|
||||||
|
// properties and children have been initialized.
|
||||||
|
Component.onCompleted: anim.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,10 +7,11 @@ import "systray" as SysTray
|
||||||
import "audio" as Audio
|
import "audio" as Audio
|
||||||
import "mpris" as Mpris
|
import "mpris" as Mpris
|
||||||
import "power" as Power
|
import "power" as Power
|
||||||
import "../notifications" as Notifs
|
import "root:notifications" as Notifs
|
||||||
|
|
||||||
BarContainment {
|
BarContainment {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property bool isSoleBar: Quickshell.screens.length == 1;
|
property bool isSoleBar: Quickshell.screens.length == 1;
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Hyprland
|
|
||||||
import Quickshell.Wayland
|
import Quickshell.Wayland
|
||||||
import ".."
|
import ".."
|
||||||
import "../lock" as Lock
|
import "../lock" as Lock
|
||||||
|
@ -16,58 +15,41 @@ PanelWindow {
|
||||||
bottom: true
|
bottom: true
|
||||||
}
|
}
|
||||||
|
|
||||||
property real baseWidth: 55
|
width: 70
|
||||||
property real leftMargin: root.compactState * 10
|
exclusiveZone: width - margins.left
|
||||||
width: baseWidth + 15
|
|
||||||
exclusiveZone: baseWidth + (isFullscreenWorkspace ? 0 : 15) - margins.left
|
|
||||||
|
|
||||||
mask: Region {
|
|
||||||
height: root.height
|
|
||||||
width: root.exclusiveZone
|
|
||||||
}
|
|
||||||
|
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
|
|
||||||
WlrLayershell.namespace: "shell:bar"
|
WlrLayershell.namespace: "shell:bar"
|
||||||
|
|
||||||
readonly property Tooltip tooltip: tooltip;
|
readonly property var tooltip: tooltip;
|
||||||
Tooltip {
|
Tooltip {
|
||||||
id: tooltip
|
id: tooltip
|
||||||
bar: root
|
bar: root
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly property real tooltipXOffset: root.baseWidth + root.leftMargin + 5;
|
readonly property real tooltipXOffset: root.width + 2;
|
||||||
|
|
||||||
function boundedY(targetY: real, height: real): real {
|
function boundedY(targetY: real, height: real): real {
|
||||||
return Math.max(barRect.anchors.topMargin + height, Math.min(barRect.height + barRect.anchors.topMargin - height, targetY))
|
return Math.max(barRect.anchors.topMargin + height, Math.min(barRect.height + barRect.anchors.topMargin - height, targetY))
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly property bool isFullscreenWorkspace: Hyprland.monitorFor(screen).activeWorkspace.hasFullscreen
|
|
||||||
property real compactState: isFullscreenWorkspace ? 0 : 1
|
|
||||||
Behavior on compactState {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 600
|
|
||||||
easing.type: Easing.BezierSpline
|
|
||||||
easing.bezierCurve: [0.0, 0.75, 0.15, 1.0, 1.0, 1.0]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: barRect
|
id: barRect
|
||||||
|
|
||||||
x: root.leftMargin - Lock.Controller.lockSlide * (barRect.width + root.leftMargin)
|
x: 10 - Lock.Controller.lockSlide * (barRect.width + 10)
|
||||||
width: parent.width - 15
|
width: parent.width - 15
|
||||||
|
|
||||||
anchors {
|
anchors {
|
||||||
top: parent.top
|
top: parent.top
|
||||||
bottom: parent.bottom
|
bottom: parent.bottom
|
||||||
margins: root.compactState * 10
|
margins: 10
|
||||||
}
|
}
|
||||||
|
|
||||||
color: ShellGlobals.colors.bar
|
color: ShellGlobals.colors.bar
|
||||||
radius: root.compactState * 5
|
radius: 5
|
||||||
border.color: ShellGlobals.colors.barOutline
|
border.color: ShellGlobals.colors.barOutline
|
||||||
border.width: root.compactState
|
border.width: 1
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: containment
|
id: containment
|
||||||
|
|
|
@ -61,7 +61,7 @@ FullwidthMouseArea {
|
||||||
property int wsIndex: root.wsBaseIndex + index;
|
property int wsIndex: root.wsBaseIndex + index;
|
||||||
property HyprlandWorkspace workspace: null;
|
property HyprlandWorkspace workspace: null;
|
||||||
property bool exists: workspace != null;
|
property bool exists: workspace != null;
|
||||||
property bool active: workspace?.active ?? false
|
property bool active: (root.monitor?.activeWorkspace ?? false) && root.monitor.activeWorkspace == workspace;
|
||||||
|
|
||||||
onActiveChanged: {
|
onActiveChanged: {
|
||||||
if (active) root.currentIndex = wsIndex;
|
if (active) root.currentIndex = wsIndex;
|
||||||
|
|
|
@ -16,6 +16,7 @@ BarWidgetInner {
|
||||||
}
|
}
|
||||||
|
|
||||||
id: column;
|
id: column;
|
||||||
|
implicitHeight: childrenRect.height;
|
||||||
spacing: 5;
|
spacing: 5;
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
|
|
|
@ -9,9 +9,6 @@ T.Slider {
|
||||||
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
||||||
implicitHandleHeight + topPadding + bottomPadding)
|
implicitHandleHeight + topPadding + bottomPadding)
|
||||||
|
|
||||||
property color barColor: "#80ceffff"
|
|
||||||
property color grooveColor: "#30ceffff"
|
|
||||||
|
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
x: control.leftPadding
|
x: control.leftPadding
|
||||||
y: control.topPadding + control.availableHeight / 2 - height / 2
|
y: control.topPadding + control.availableHeight / 2 - height / 2
|
||||||
|
@ -21,7 +18,7 @@ T.Slider {
|
||||||
height: implicitHeight
|
height: implicitHeight
|
||||||
|
|
||||||
radius: 5
|
radius: 5
|
||||||
color: control.grooveColor
|
color: "#30ceffff"
|
||||||
border.width: 0
|
border.width: 0
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
@ -32,7 +29,7 @@ T.Slider {
|
||||||
|
|
||||||
width: control.handle.x + (control.handle.width / 2) - parent.x
|
width: control.handle.x + (control.handle.width / 2) - parent.x
|
||||||
radius: parent.radius
|
radius: parent.radius
|
||||||
color: control.barColor
|
color: "#80ceffff"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,15 +29,8 @@ FullwidthMouseArea {
|
||||||
|
|
||||||
property alias widgetOpen: persist.widgetOpen;
|
property alias widgetOpen: persist.widgetOpen;
|
||||||
|
|
||||||
acceptedButtons: Qt.RightButton | Qt.ForwardButton | Qt.BackButton
|
acceptedButtons: Qt.RightButton
|
||||||
onPressed: event => {
|
onPressed: widgetOpen = !widgetOpen
|
||||||
if (event.button == Qt.RightButton) widgetOpen = !widgetOpen;
|
|
||||||
else if (event.button == Qt.ForwardButton) {
|
|
||||||
MprisController.next();
|
|
||||||
} else if (event.button == Qt.BackButton) {
|
|
||||||
MprisController.previous();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onWheel: event => {
|
onWheel: event => {
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
|
@ -671,20 +664,6 @@ FullwidthMouseArea {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorQuantizer {
|
|
||||||
id: quant
|
|
||||||
rescaleSize: 200
|
|
||||||
depth: 0
|
|
||||||
source: MprisController.activeTrack.artUrl
|
|
||||||
onColorsChanged: console.log(colors)
|
|
||||||
}
|
|
||||||
|
|
||||||
grooveColor: quant.colors.length === 0 ? "#30ceffff" : Qt.alpha(quant.colors[0], 0.2)
|
|
||||||
barColor: quant.colors.length === 0 ? "#80ceffff" : Qt.alpha(Qt.lighter(quant.colors[0]), 0.5)
|
|
||||||
|
|
||||||
Behavior on grooveColor { ColorAnimation { duration: 200 } }
|
|
||||||
Behavior on barColor { ColorAnimation { duration: 200 } }
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
enabled: player.canSeek
|
enabled: player.canSeek
|
||||||
from: 0
|
from: 0
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import "../bar"
|
import "root:bar"
|
||||||
|
|
||||||
BarWidgetInner {
|
BarWidgetInner {
|
||||||
id: root
|
id: root
|
||||||
|
@ -49,7 +49,7 @@ BarWidgetInner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
property TooltipItem tooltip: TooltipItem {
|
property var tooltip: TooltipItem {
|
||||||
tooltip: bar.tooltip
|
tooltip: bar.tooltip
|
||||||
owner: root
|
owner: root
|
||||||
show: button.containsMouse
|
show: button.containsMouse
|
||||||
|
@ -65,7 +65,7 @@ BarWidgetInner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
property TooltipItem rightclickMenu: TooltipItem {
|
property var rightclickMenu: TooltipItem {
|
||||||
tooltip: bar.tooltip
|
tooltip: bar.tooltip
|
||||||
owner: root
|
owner: root
|
||||||
isMenu: true
|
isMenu: true
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
//@ pragma ShellId shell
|
//@ pragma ShellId shell
|
||||||
|
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
import Quickshell.Wayland
|
import Quickshell.Wayland
|
||||||
|
@ -15,6 +14,8 @@ import "background"
|
||||||
ShellRoot {
|
ShellRoot {
|
||||||
Component.onCompleted: [Lock.Controller, Launcher.Controller.init()]
|
Component.onCompleted: [Lock.Controller, Launcher.Controller.init()]
|
||||||
|
|
||||||
|
ReloadPopup {}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
command: ["mkdir", "-p", ShellGlobals.rtpath]
|
command: ["mkdir", "-p", ShellGlobals.rtpath]
|
||||||
running: true
|
running: true
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue