Organize #12
+1
-1
@@ -30,5 +30,5 @@ if("shell" IN_LIST ENABLE_MODULES)
|
||||
foreach(dir assets scripts Components Config Modules Daemons Drawers Effects Helpers Paths)
|
||||
install(DIRECTORY ${dir} DESTINATION "${INSTALL_QSCONFDIR}")
|
||||
endforeach()
|
||||
install(FILES shell.qml Bar.qml Wallpaper.qml DESTINATION "${INSTALL_QSCONFDIR}")
|
||||
install(FILES shell.qml DESTINATION "${INSTALL_QSCONFDIR}")
|
||||
endif()
|
||||
|
||||
@@ -0,0 +1,323 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import QtQuick
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
Component.onCompleted: {
|
||||
// Trigger ethernet device detection after initialization
|
||||
Qt.callLater(() => {
|
||||
getEthernetDevices();
|
||||
});
|
||||
// Load saved connections on startup
|
||||
Nmcli.loadSavedConnections(() => {
|
||||
root.savedConnections = Nmcli.savedConnections;
|
||||
root.savedConnectionSsids = Nmcli.savedConnectionSsids;
|
||||
});
|
||||
// Get initial WiFi status
|
||||
Nmcli.getWifiStatus(enabled => {
|
||||
root.wifiEnabled = enabled;
|
||||
});
|
||||
// Sync networks from Nmcli on startup
|
||||
Qt.callLater(() => {
|
||||
syncNetworksFromNmcli();
|
||||
}, 100);
|
||||
}
|
||||
|
||||
readonly property list<AccessPoint> networks: []
|
||||
readonly property AccessPoint active: networks.find(n => n.active) ?? null
|
||||
property bool wifiEnabled: true
|
||||
readonly property bool scanning: Nmcli.scanning
|
||||
|
||||
property list<var> ethernetDevices: []
|
||||
readonly property var activeEthernet: ethernetDevices.find(d => d.connected) ?? null
|
||||
property int ethernetDeviceCount: 0
|
||||
property bool ethernetProcessRunning: false
|
||||
property var ethernetDeviceDetails: null
|
||||
property var wirelessDeviceDetails: null
|
||||
|
||||
function enableWifi(enabled: bool): void {
|
||||
Nmcli.enableWifi(enabled, result => {
|
||||
if (result.success) {
|
||||
root.getWifiStatus();
|
||||
Nmcli.getNetworks(() => {
|
||||
syncNetworksFromNmcli();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function toggleWifi(): void {
|
||||
Nmcli.toggleWifi(result => {
|
||||
if (result.success) {
|
||||
root.getWifiStatus();
|
||||
Nmcli.getNetworks(() => {
|
||||
syncNetworksFromNmcli();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function rescanWifi(): void {
|
||||
Nmcli.rescanWifi();
|
||||
}
|
||||
|
||||
property var pendingConnection: null
|
||||
signal connectionFailed(string ssid)
|
||||
|
||||
function connectToNetwork(ssid: string, password: string, bssid: string, callback: var): void {
|
||||
// Set up pending connection tracking if callback provided
|
||||
if (callback) {
|
||||
const hasBssid = bssid !== undefined && bssid !== null && bssid.length > 0;
|
||||
root.pendingConnection = {
|
||||
ssid: ssid,
|
||||
bssid: hasBssid ? bssid : "",
|
||||
callback: callback
|
||||
};
|
||||
}
|
||||
|
||||
Nmcli.connectToNetwork(ssid, password, bssid, result => {
|
||||
if (result && result.success) {
|
||||
// Connection successful
|
||||
if (callback)
|
||||
callback(result);
|
||||
root.pendingConnection = null;
|
||||
} else if (result && result.needsPassword) {
|
||||
// Password needed - callback will handle showing dialog
|
||||
if (callback)
|
||||
callback(result);
|
||||
} else {
|
||||
// Connection failed
|
||||
if (result && result.error) {
|
||||
root.connectionFailed(ssid);
|
||||
}
|
||||
if (callback)
|
||||
callback(result);
|
||||
root.pendingConnection = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function connectToNetworkWithPasswordCheck(ssid: string, isSecure: bool, callback: var, bssid: string): void {
|
||||
// Set up pending connection tracking
|
||||
const hasBssid = bssid !== undefined && bssid !== null && bssid.length > 0;
|
||||
root.pendingConnection = {
|
||||
ssid: ssid,
|
||||
bssid: hasBssid ? bssid : "",
|
||||
callback: callback
|
||||
};
|
||||
|
||||
Nmcli.connectToNetworkWithPasswordCheck(ssid, isSecure, result => {
|
||||
if (result && result.success) {
|
||||
// Connection successful
|
||||
if (callback)
|
||||
callback(result);
|
||||
root.pendingConnection = null;
|
||||
} else if (result && result.needsPassword) {
|
||||
// Password needed - callback will handle showing dialog
|
||||
if (callback)
|
||||
callback(result);
|
||||
} else {
|
||||
// Connection failed
|
||||
if (result && result.error) {
|
||||
root.connectionFailed(ssid);
|
||||
}
|
||||
if (callback)
|
||||
callback(result);
|
||||
root.pendingConnection = null;
|
||||
}
|
||||
}, bssid);
|
||||
}
|
||||
|
||||
function disconnectFromNetwork(): void {
|
||||
// Try to disconnect - use connection name if available, otherwise use device
|
||||
Nmcli.disconnectFromNetwork();
|
||||
// Refresh network list after disconnection
|
||||
Qt.callLater(() => {
|
||||
Nmcli.getNetworks(() => {
|
||||
syncNetworksFromNmcli();
|
||||
});
|
||||
}, 500);
|
||||
}
|
||||
|
||||
function forgetNetwork(ssid: string): void {
|
||||
// Delete the connection profile for this network
|
||||
// This will remove the saved password and connection settings
|
||||
Nmcli.forgetNetwork(ssid, result => {
|
||||
if (result.success) {
|
||||
// Refresh network list after deletion
|
||||
Qt.callLater(() => {
|
||||
Nmcli.getNetworks(() => {
|
||||
syncNetworksFromNmcli();
|
||||
});
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
property list<string> savedConnections: []
|
||||
property list<string> savedConnectionSsids: []
|
||||
|
||||
// Sync saved connections from Nmcli when they're updated
|
||||
Connections {
|
||||
target: Nmcli
|
||||
function onSavedConnectionsChanged() {
|
||||
root.savedConnections = Nmcli.savedConnections;
|
||||
}
|
||||
function onSavedConnectionSsidsChanged() {
|
||||
root.savedConnectionSsids = Nmcli.savedConnectionSsids;
|
||||
}
|
||||
}
|
||||
|
||||
function syncNetworksFromNmcli(): void {
|
||||
const rNetworks = root.networks;
|
||||
const nNetworks = Nmcli.networks;
|
||||
|
||||
// Build a map of existing networks by key
|
||||
const existingMap = new Map();
|
||||
for (const rn of rNetworks) {
|
||||
const key = `${rn.frequency}:${rn.ssid}:${rn.bssid}`;
|
||||
existingMap.set(key, rn);
|
||||
}
|
||||
|
||||
// Build a map of new networks by key
|
||||
const newMap = new Map();
|
||||
for (const nn of nNetworks) {
|
||||
const key = `${nn.frequency}:${nn.ssid}:${nn.bssid}`;
|
||||
newMap.set(key, nn);
|
||||
}
|
||||
|
||||
// Remove networks that no longer exist
|
||||
for (const [key, network] of existingMap) {
|
||||
if (!newMap.has(key)) {
|
||||
const index = rNetworks.indexOf(network);
|
||||
if (index >= 0) {
|
||||
rNetworks.splice(index, 1);
|
||||
network.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add or update networks from Nmcli
|
||||
for (const [key, nNetwork] of newMap) {
|
||||
const existing = existingMap.get(key);
|
||||
if (existing) {
|
||||
// Update existing network's lastIpcObject
|
||||
existing.lastIpcObject = nNetwork.lastIpcObject;
|
||||
} else {
|
||||
// Create new AccessPoint from Nmcli's data
|
||||
rNetworks.push(apComp.createObject(root, {
|
||||
lastIpcObject: nNetwork.lastIpcObject
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
component AccessPoint: QtObject {
|
||||
required property var lastIpcObject
|
||||
readonly property string ssid: lastIpcObject.ssid
|
||||
readonly property string bssid: lastIpcObject.bssid
|
||||
readonly property int strength: lastIpcObject.strength
|
||||
readonly property int frequency: lastIpcObject.frequency
|
||||
readonly property bool active: lastIpcObject.active
|
||||
readonly property string security: lastIpcObject.security
|
||||
readonly property bool isSecure: security.length > 0
|
||||
}
|
||||
|
||||
Component {
|
||||
id: apComp
|
||||
AccessPoint {}
|
||||
}
|
||||
|
||||
function hasSavedProfile(ssid: string): bool {
|
||||
// Use Nmcli's hasSavedProfile which has the same logic
|
||||
return Nmcli.hasSavedProfile(ssid);
|
||||
}
|
||||
|
||||
function getWifiStatus(): void {
|
||||
Nmcli.getWifiStatus(enabled => {
|
||||
root.wifiEnabled = enabled;
|
||||
});
|
||||
}
|
||||
|
||||
function getEthernetDevices(): void {
|
||||
root.ethernetProcessRunning = true;
|
||||
Nmcli.getEthernetInterfaces(interfaces => {
|
||||
root.ethernetDevices = Nmcli.ethernetDevices;
|
||||
root.ethernetDeviceCount = Nmcli.ethernetDevices.length;
|
||||
root.ethernetProcessRunning = false;
|
||||
});
|
||||
}
|
||||
|
||||
function connectEthernet(connectionName: string, interfaceName: string): void {
|
||||
Nmcli.connectEthernet(connectionName, interfaceName, result => {
|
||||
if (result.success) {
|
||||
getEthernetDevices();
|
||||
// Refresh device details after connection
|
||||
Qt.callLater(() => {
|
||||
const activeDevice = root.ethernetDevices.find(function (d) {
|
||||
return d.connected;
|
||||
});
|
||||
if (activeDevice && activeDevice.interface) {
|
||||
updateEthernetDeviceDetails(activeDevice.interface);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function disconnectEthernet(connectionName: string): void {
|
||||
Nmcli.disconnectEthernet(connectionName, result => {
|
||||
if (result.success) {
|
||||
getEthernetDevices();
|
||||
// Clear device details after disconnection
|
||||
Qt.callLater(() => {
|
||||
root.ethernetDeviceDetails = null;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateEthernetDeviceDetails(interfaceName: string): void {
|
||||
Nmcli.getEthernetDeviceDetails(interfaceName, details => {
|
||||
root.ethernetDeviceDetails = details;
|
||||
});
|
||||
}
|
||||
|
||||
function updateWirelessDeviceDetails(): void {
|
||||
// Find the wireless interface by looking for wifi devices
|
||||
// Pass empty string to let Nmcli find the active interface automatically
|
||||
Nmcli.getWirelessDeviceDetails("", details => {
|
||||
root.wirelessDeviceDetails = details;
|
||||
});
|
||||
}
|
||||
|
||||
function cidrToSubnetMask(cidr: string): string {
|
||||
// Convert CIDR notation (e.g., "24") to subnet mask (e.g., "255.255.255.0")
|
||||
const cidrNum = parseInt(cidr);
|
||||
if (isNaN(cidrNum) || cidrNum < 0 || cidrNum > 32) {
|
||||
return "";
|
||||
}
|
||||
|
||||
const mask = (0xffffffff << (32 - cidrNum)) >>> 0;
|
||||
const octets = [(mask >>> 24) & 0xff, (mask >>> 16) & 0xff, (mask >>> 8) & 0xff, mask & 0xff];
|
||||
|
||||
return octets.join(".");
|
||||
}
|
||||
|
||||
Process {
|
||||
running: true
|
||||
command: ["nmcli", "m"]
|
||||
stdout: SplitParser {
|
||||
onRead: {
|
||||
Nmcli.getNetworks(() => {
|
||||
syncNetworksFromNmcli();
|
||||
});
|
||||
getEthernetDevices();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1352
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,6 +1,6 @@
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
import qs.Components
|
||||
import qs.Modules as Modules
|
||||
import qs.Modules.Notifications as Notifications
|
||||
import qs.Modules.Notifications.Sidebar as Sidebar
|
||||
@@ -33,7 +33,7 @@ Item {
|
||||
// anchors.margins: 8
|
||||
anchors.topMargin: Config.barConfig.autoHide && !visibilities.bar ? 0 : bar.implicitHeight
|
||||
Behavior on anchors.topMargin {
|
||||
Modules.Anim {}
|
||||
Anim {}
|
||||
}
|
||||
|
||||
Osd.Wrapper {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
pragma Singleton
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Services.Notifications
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
+1
-1
@@ -5,7 +5,7 @@ import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import QtQuick
|
||||
import QtQuick.Effects
|
||||
import qs.Modules
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Helpers
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
|
||||
ShapePath {
|
||||
|
||||
+1
-2
@@ -4,10 +4,9 @@ import Quickshell
|
||||
import Quickshell.Services.SystemTray
|
||||
import QtQuick
|
||||
import qs.Config
|
||||
import qs.Components
|
||||
import qs.Modules.Calendar
|
||||
import qs.Modules.WSOverview
|
||||
import qs.Modules.Polkit
|
||||
import qs.Modules.Dashboard
|
||||
import qs.Modules.Network
|
||||
import qs.Modules.UPower
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
|
||||
@@ -62,6 +60,6 @@ ShapePath {
|
||||
}
|
||||
|
||||
Behavior on fillColor {
|
||||
Modules.CAnim {}
|
||||
CAnim {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import Quickshell.Widgets
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import qs.Config
|
||||
import qs.Modules
|
||||
import qs.Components
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
@@ -2,7 +2,6 @@ import QtQuick
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
Row {
|
||||
id: root
|
||||
@@ -91,7 +90,7 @@ Row {
|
||||
}
|
||||
|
||||
Behavior on value {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: Appearance.anim.durations.large
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import ZShell
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -46,7 +43,7 @@ Item {
|
||||
from: ""
|
||||
to: "visible"
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
@@ -57,7 +54,7 @@ Item {
|
||||
from: "visible"
|
||||
to: ""
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
|
||||
@@ -5,9 +5,7 @@ import QtQuick
|
||||
import qs.Modules.Launcher.Services
|
||||
import qs.Modules.Launcher.Items
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
CustomListView {
|
||||
id: root
|
||||
@@ -41,7 +39,7 @@ CustomListView {
|
||||
implicitHeight: root.currentItem?.implicitHeight ?? 0
|
||||
|
||||
Behavior on y {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: Appearance.anim.durations.small
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveEffects
|
||||
}
|
||||
@@ -92,7 +90,7 @@ CustomListView {
|
||||
transitions: Transition {
|
||||
SequentialAnimation {
|
||||
ParallelAnimation {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "opacity"
|
||||
from: 1
|
||||
@@ -100,7 +98,7 @@ CustomListView {
|
||||
duration: Appearance.anim.durations.small
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveEffects
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "scale"
|
||||
from: 1
|
||||
@@ -114,7 +112,7 @@ CustomListView {
|
||||
properties: "values,delegate"
|
||||
}
|
||||
ParallelAnimation {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "opacity"
|
||||
from: 0
|
||||
@@ -122,7 +120,7 @@ CustomListView {
|
||||
duration: Appearance.anim.durations.small
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveEffects
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "scale"
|
||||
from: 0.9
|
||||
@@ -146,7 +144,7 @@ CustomListView {
|
||||
add: Transition {
|
||||
enabled: !root.state
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
properties: "opacity,scale"
|
||||
from: 0
|
||||
to: 1
|
||||
@@ -156,7 +154,7 @@ CustomListView {
|
||||
remove: Transition {
|
||||
enabled: !root.state
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
properties: "opacity,scale"
|
||||
from: 1
|
||||
to: 0
|
||||
@@ -164,31 +162,31 @@ CustomListView {
|
||||
}
|
||||
|
||||
move: Transition {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
property: "y"
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
properties: "opacity,scale"
|
||||
to: 1
|
||||
}
|
||||
}
|
||||
|
||||
addDisplaced: Transition {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
property: "y"
|
||||
duration: Appearance.anim.durations.small
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
properties: "opacity,scale"
|
||||
to: 1
|
||||
}
|
||||
}
|
||||
|
||||
displaced: Transition {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
property: "y"
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
properties: "opacity,scale"
|
||||
to: 1
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
ShapePath {
|
||||
id: root
|
||||
@@ -56,6 +54,6 @@ ShapePath {
|
||||
}
|
||||
|
||||
Behavior on fillColor {
|
||||
Modules.CAnim {}
|
||||
CAnim {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import qs.Modules.Launcher.Services
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -176,13 +175,13 @@ Item {
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: Appearance.anim.durations.small
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: Appearance.anim.durations.small
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import Quickshell
|
||||
import QtQuick
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -43,7 +42,7 @@ Item {
|
||||
SequentialAnimation {
|
||||
id: showAnim
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
to: root.contentHeight
|
||||
@@ -61,7 +60,7 @@ Item {
|
||||
ScriptAction {
|
||||
script: root.implicitHeight = root.implicitHeight
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
to: 0
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Effects
|
||||
import qs.Config
|
||||
import qs.Helpers
|
||||
import qs.Effects
|
||||
import qs.Components
|
||||
import qs.Modules as Modules
|
||||
|
||||
WlSessionLockSurface {
|
||||
id: root
|
||||
@@ -34,32 +29,32 @@ WlSessionLockSurface {
|
||||
id: unlockAnim
|
||||
|
||||
ParallelAnimation {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockContent
|
||||
properties: "implicitWidth,implicitHeight"
|
||||
to: lockContent.size
|
||||
duration: Appearance.anim.durations.expressiveDefaultSpatial
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockBg
|
||||
property: "radius"
|
||||
to: lockContent.radius
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: content
|
||||
property: "scale"
|
||||
to: 0
|
||||
duration: Appearance.anim.durations.expressiveDefaultSpatial
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: content
|
||||
property: "opacity"
|
||||
to: 0
|
||||
duration: Appearance.anim.durations.small
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockIcon
|
||||
property: "opacity"
|
||||
to: 1
|
||||
@@ -69,7 +64,7 @@ WlSessionLockSurface {
|
||||
PauseAnimation {
|
||||
duration: Appearance.anim.durations.small
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockContent
|
||||
property: "opacity"
|
||||
to: 0
|
||||
@@ -90,7 +85,7 @@ WlSessionLockSurface {
|
||||
|
||||
SequentialAnimation {
|
||||
ParallelAnimation {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockContent
|
||||
property: "scale"
|
||||
to: 1
|
||||
@@ -99,36 +94,36 @@ WlSessionLockSurface {
|
||||
}
|
||||
}
|
||||
ParallelAnimation {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockIcon
|
||||
property: "opacity"
|
||||
to: 0
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: content
|
||||
property: "opacity"
|
||||
to: 1
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: content
|
||||
property: "scale"
|
||||
to: 1
|
||||
duration: Appearance.anim.durations.expressiveDefaultSpatial
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockBg
|
||||
property: "radius"
|
||||
to: Appearance.rounding.large * 1.5
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockContent
|
||||
property: "implicitWidth"
|
||||
to: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult * Config.lock.sizes.ratio
|
||||
duration: Appearance.anim.durations.expressiveDefaultSpatial
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
|
||||
}
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: lockContent
|
||||
property: "implicitHeight"
|
||||
to: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
|
||||
@@ -49,6 +48,6 @@ ShapePath {
|
||||
}
|
||||
|
||||
Behavior on fillColor {
|
||||
Modules.CAnim {}
|
||||
CAnim {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
|
||||
@@ -49,6 +48,6 @@ ShapePath {
|
||||
}
|
||||
|
||||
Behavior on fillColor {
|
||||
Modules.CAnim {}
|
||||
CAnim {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
|
||||
@@ -50,6 +49,6 @@ ShapePath {
|
||||
}
|
||||
|
||||
Behavior on fillColor {
|
||||
Modules.CAnim {}
|
||||
CAnim {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import Quickshell.Bluetooth
|
||||
import Quickshell.Networking as QSNetwork
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules
|
||||
import qs.Daemons
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
CustomRect {
|
||||
id: root
|
||||
@@ -28,12 +30,50 @@ CustomRect {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
spacing: 7
|
||||
|
||||
Toggle {
|
||||
visible: QSNetwork.Networking.devices.values.length > 0
|
||||
icon: Network.wifiEnabled ? "wifi" : "wifi_off"
|
||||
checked: Network.wifiEnabled
|
||||
onClicked: Network.toggleWifi()
|
||||
}
|
||||
|
||||
Toggle {
|
||||
id: toggle
|
||||
icon: "notifications_off"
|
||||
checked: NotifServer.dnd
|
||||
icon: NotifServer.dnd ? "notifications_off" : "notifications"
|
||||
checked: !NotifServer.dnd
|
||||
onClicked: NotifServer.dnd = !NotifServer.dnd
|
||||
}
|
||||
|
||||
Toggle {
|
||||
icon: Audio.sourceMuted ? "mic_off" : "mic"
|
||||
checked: !Audio.sourceMuted
|
||||
onClicked: {
|
||||
const audio = Audio.source?.audio;
|
||||
if ( audio )
|
||||
audio.muted = !audio.muted;
|
||||
}
|
||||
}
|
||||
|
||||
Toggle {
|
||||
icon: Audio.muted ? "volume_off" : "volume_up"
|
||||
checked: !Audio.muted
|
||||
onClicked: {
|
||||
const audio = Audio.sink?.audio;
|
||||
if ( audio )
|
||||
audio.muted = !audio.muted;
|
||||
}
|
||||
}
|
||||
|
||||
Toggle {
|
||||
visible: Bluetooth.defaultAdapter?.enabled ?? false
|
||||
icon: Bluetooth.defaultAdapter?.enabled ? "bluetooth" : "bluetooth_disabled"
|
||||
checked: Bluetooth.defaultAdapter?.enabled ?? false
|
||||
onClicked: {
|
||||
const adapter = Bluetooth.defaultAdapter
|
||||
if ( adapter )
|
||||
adapter.enabled = !adapter.enabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import qs.Helpers
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
@@ -99,25 +98,25 @@ CustomRect {
|
||||
}
|
||||
|
||||
Behavior on anchors.bottomMargin {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on scale {
|
||||
Modules.Anim {}
|
||||
Anim {}
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on implicitHeight {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ pragma ComponentBehavior: Bound
|
||||
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
|
||||
@@ -47,7 +46,7 @@ Item {
|
||||
from: ""
|
||||
to: "visible"
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
@@ -58,7 +57,7 @@ Item {
|
||||
from: "visible"
|
||||
to: ""
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
|
||||
@@ -2,7 +2,6 @@ pragma ComponentBehavior: Bound
|
||||
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import QtQuick
|
||||
|
||||
Item {
|
||||
@@ -29,7 +28,7 @@ Item {
|
||||
from: ""
|
||||
to: "visible"
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitWidth"
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
@@ -40,7 +39,7 @@ Item {
|
||||
from: "visible"
|
||||
to: ""
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitWidth"
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import QtQuick
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -23,7 +22,7 @@ Item {
|
||||
}
|
||||
|
||||
transitions: Transition {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitHeight"
|
||||
duration: MaterialEasing.expressiveEffectsTime
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
|
||||
ShapePath {
|
||||
id: root
|
||||
@@ -56,6 +54,6 @@ ShapePath {
|
||||
}
|
||||
|
||||
Behavior on fillColor {
|
||||
Modules.CAnim {}
|
||||
CAnim {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Daemons
|
||||
import qs.Modules as Modules
|
||||
|
||||
Item {
|
||||
id: root
|
||||
@@ -125,13 +124,13 @@ Item {
|
||||
visible: active
|
||||
|
||||
Behavior on Layout.preferredHeight {
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
easing.bezierCurve: Appearance.anim.curves.emphasized
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
Modules.Anim {}
|
||||
Anim {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import QtQuick
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
import qs.Modules as Modules
|
||||
import qs.Daemons
|
||||
|
||||
Item {
|
||||
@@ -54,7 +53,7 @@ Item {
|
||||
from: ""
|
||||
to: "visible"
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitWidth"
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
@@ -64,7 +63,7 @@ Item {
|
||||
from: "visible"
|
||||
to: ""
|
||||
|
||||
Modules.Anim {
|
||||
Anim {
|
||||
target: root
|
||||
property: "implicitWidth"
|
||||
easing.bezierCurve: MaterialEasing.expressiveEffects
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import qs.Modules
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Shapes
|
||||
import Quickshell
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
|
||||
Item {
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Effects
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Services.SystemTray
|
||||
import Quickshell.Io
|
||||
import Quickshell.Widgets
|
||||
import qs.Modules
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.DBusMenu
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Qt5Compat.GraphicalEffects
|
||||
@@ -9,7 +8,6 @@ import Quickshell.Hyprland
|
||||
import QtQml
|
||||
import qs.Effects
|
||||
import qs.Config
|
||||
import qs.Modules
|
||||
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import Quickshell
|
||||
import Quickshell.Services.UPower
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Helpers as Helpers
|
||||
import qs.Modules
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import qs.Components
|
||||
import qs.Modules
|
||||
import qs.Config
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import qs.Components
|
||||
import qs.Helpers
|
||||
import qs.Config
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import Quickshell.Wayland
|
||||
import qs.Helpers
|
||||
import qs.Modules
|
||||
import qs.Config
|
||||
|
||||
Loader {
|
||||
+1
-1
@@ -2,8 +2,8 @@ import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import Quickshell.Hyprland
|
||||
import QtQuick
|
||||
import qs.Components
|
||||
import qs.Config
|
||||
import qs.Helpers
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
Reference in New Issue
Block a user