Merge branch 'Ly-sec:main' into main

This commit is contained in:
Jose Chasey Pratama 2025-07-30 14:09:23 +07:00 committed by GitHub
commit cb9cb0f4e5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 167 additions and 87 deletions

View file

@ -51,9 +51,10 @@ Singleton {
// Initialize Hyprland integration
function initHyprland() {
try {
// Fixes the odd workspace issue.
Hyprland.refreshWorkspaces();
hlWorkspaces = Hyprland.workspaces.values;
updateHyprlandWorkspaces();
// hlWorkspaces = Hyprland.workspaces.values;
// updateHyprlandWorkspaces();
return true;
} catch (e) {
console.error("Error initializing Hyprland:", e);

View file

@ -6,28 +6,38 @@ import qs.Settings
ShellRoot {
property string wallpaperSource: WallpaperManager.currentWallpaper !== "" && !Settings.settings.useSWWW ? WallpaperManager.currentWallpaper : ""
PanelWindow {
visible: wallpaperSource !== ""
anchors {
bottom: true
top: true
right: true
left: true
}
margins {
top: 0
}
color: "transparent"
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusionMode: ExclusionMode.Ignore
WlrLayershell.namespace: "quickshell-wallpaper"
Image {
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
source: wallpaperSource
Variants {
model: Quickshell.screens
PanelWindow {
required property ShellScreen modelData
visible: wallpaperSource !== ""
cache: true
smooth: true
anchors {
bottom: true
top: true
right: true
left: true
}
margins {
top: 0
}
color: "transparent"
screen: modelData
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusionMode: ExclusionMode.Ignore
WlrLayershell.namespace: "quickshell-wallpaper"
Image {
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
source: wallpaperSource
visible: wallpaperSource !== ""
cache: true
smooth: true
}
}
}
}

View file

@ -141,9 +141,16 @@ WlSessionLock {
FastBlur {
anchors.fill: parent
source: lockBgImage
radius: 48 // Adjust blur strength as needed
radius: 22 // Adjust blur strength as needed
transparentBorder: true
}
Rectangle {
anchors.fill: parent
color: Qt.rgba(
Theme.backgroundPrimary.r,
Theme.backgroundPrimary.g,
Theme.backgroundPrimary.b, 0.6)
}
// Main content container (moved up, Rectangle removed)
ColumnLayout {
anchors.centerIn: parent

View file

@ -7,33 +7,48 @@ import qs.Settings
ShellRoot {
property string wallpaperSource: WallpaperManager.currentWallpaper !== "" && !Settings.settings.useSWWW ? WallpaperManager.currentWallpaper : ""
PanelWindow {
visible: wallpaperSource !== ""
anchors {
top: true
bottom: true
right: true
left: true
}
color: "transparent"
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusionMode: ExclusionMode.Ignore
WlrLayershell.namespace: "quickshell-overview"
Image {
id: bgImage
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
source: wallpaperSource
cache: true
smooth: true
visible: wallpaperSource !== "" // Show the original for FastBlur input
}
FastBlur {
anchors.fill: parent
Variants {
model: Quickshell.screens
PanelWindow {
required property ShellScreen modelData
visible: wallpaperSource !== ""
source: bgImage
radius: 24 // Adjust blur strength as needed
transparentBorder: true
anchors {
top: true
bottom: true
right: true
left: true
}
color: "transparent"
screen: modelData
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusionMode: ExclusionMode.Ignore
WlrLayershell.namespace: "quickshell-overview"
Image {
id: bgImage
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
source: wallpaperSource
cache: true
smooth: true
visible: wallpaperSource !== "" // Show the original for FastBlur input
}
FastBlur {
anchors.fill: parent
visible: wallpaperSource !== ""
source: bgImage
radius: 18 // Adjust blur strength as needed
transparentBorder: true
}
Rectangle {
anchors.fill: parent
color: Qt.rgba(
Theme.backgroundPrimary.r,
Theme.backgroundPrimary.g,
Theme.backgroundPrimary.b, 0.6)
}
}
}
}

View file

@ -214,6 +214,45 @@ Rectangle {
}
}
// Suspend button
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 36
radius: 6
color: suspendButtonArea.containsMouse ? Theme.accentPrimary : "transparent"
RowLayout {
anchors.fill: parent
anchors.margins: 12
spacing: 8
Text {
text: "bedtime"
font.family: "Material Symbols Outlined"
font.pixelSize: 16
color: suspendButtonArea.containsMouse ? Theme.onAccent : Theme.textPrimary
}
Text {
text: "Suspend"
font.pixelSize: 14
color: suspendButtonArea.containsMouse ? Theme.onAccent : Theme.textPrimary
Layout.fillWidth: true
}
}
MouseArea {
id: suspendButtonArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
suspend();
systemMenu.visible = false;
}
}
}
// Reboot button
Rectangle {
Layout.fillWidth: true
@ -366,7 +405,15 @@ Rectangle {
command: ["niri", "msg", "action", "quit", "--skip-confirmation"]
running: false
}
Process {
id: suspendProcess
command: ["systemctl", "suspend"]
running: false
}
function suspend() {
suspendProcess.running = true;
}
function shutdown() {
shutdownProcess.running = true;
}

View file

@ -90,14 +90,12 @@ Item {
property string connectSecurity: ""
property var pendingConnect: null
property string detectedInterface: ""
property var connectionsToDelete: []
function profileNameForSsid(ssid) {
return "quickshell-" + ssid.replace(/[^a-zA-Z0-9]/g, "_");
}
function disconnectAndDeleteNetwork(ssid) {
function disconnectNetwork(ssid) {
var profileName = wifiLogic.profileNameForSsid(ssid);
console.log('WifiPanel: disconnectAndDeleteNetwork called for SSID', ssid, 'profile', profileName);
disconnectProfileProcess.connectionName = profileName;
disconnectProfileProcess.running = true;
}
@ -129,6 +127,9 @@ Item {
wifiLogic.pendingConnect = null;
}
}
function isSecured(security) {
return security && security.trim() !== "" && security.trim() !== "--";
}
}
// Disconnect, delete profile, refresh
@ -137,18 +138,6 @@ Item {
property string connectionName: ""
running: false
command: ["nmcli", "connection", "down", "id", connectionName]
onRunningChanged: {
if (!running) {
deleteProfileProcess.connectionName = connectionName;
deleteProfileProcess.running = true;
}
}
}
Process {
id: deleteProfileProcess
property string connectionName: ""
running: false
command: ["nmcli", "connection", "delete", "id", connectionName]
onRunningChanged: {
if (!running) {
wifiLogic.refreshNetworks();
@ -159,24 +148,43 @@ Item {
Process {
id: listConnectionsProcess
running: false
command: ["nmcli", "-t", "-f", "NAME,SSID", "connection", "show"]
command: ["nmcli", "-t", "-f", "NAME", "connection", "show"]
stdout: StdioCollector {
onStreamFinished: {
var params = wifiLogic.pendingConnect;
var lines = text.split("\n");
var toDelete = [];
var expectedProfile = wifiLogic.profileNameForSsid(params.ssid);
var foundProfile = null;
for (var i = 0; i < lines.length; ++i) {
var parts = lines[i].split(":");
if (parts.length === 2 && parts[1] === params.ssid) {
toDelete.push(parts[0]);
if (lines[i] === expectedProfile) {
foundProfile = lines[i];
break;
}
}
wifiLogic.connectionsToDelete = toDelete;
if (toDelete.length > 0) {
deleteProfileProcess.connectionName = toDelete[0];
deleteProfileProcess.running = true;
if (foundProfile) {
// Profile exists, just bring it up (no password prompt)
upConnectionProcess.profileName = foundProfile;
upConnectionProcess.running = true;
} else {
wifiLogic.doConnect();
// No profile: check if secured
if (wifiLogic.isSecured(params.security)) {
if (params.password && params.password.length > 0) {
// Password provided, proceed to connect
wifiLogic.doConnect();
} else {
// No password yet, prompt for it
wifiLogic.passwordPromptSsid = params.ssid;
wifiLogic.passwordInput = "";
wifiLogic.showPasswordPrompt = true;
wifiLogic.connectStatus = "";
wifiLogic.connectStatusSsid = "";
wifiLogic.connectError = "";
wifiLogic.connectSecurity = params.security;
}
} else {
// Open, connect directly
wifiLogic.doConnect();
}
}
}
}
@ -565,17 +573,9 @@ Item {
hoverEnabled: true
onClicked: {
if (modelData.connected) {
wifiLogic.disconnectAndDeleteNetwork(modelData.ssid);
} else if (modelData.security && modelData.security !== "--") {
wifiLogic.passwordPromptSsid = modelData.ssid;
wifiLogic.passwordInput = "";
wifiLogic.showPasswordPrompt = true;
wifiLogic.connectStatus = "";
wifiLogic.connectStatusSsid = "";
wifiLogic.connectError = "";
wifiLogic.connectSecurity = modelData.security;
wifiLogic.disconnectNetwork(modelData.ssid);
} else {
wifiLogic.connectNetwork(modelData.ssid, modelData.security)
wifiLogic.connectNetwork(modelData.ssid, modelData.security);
}
}
}