Compare commits
1
Commits
6bb193c78c
..
v0.3.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0fc1a123fa |
@@ -15,4 +15,3 @@ dist/
|
|||||||
**/target/
|
**/target/
|
||||||
**/test-plugins/
|
**/test-plugins/
|
||||||
**/Charts/
|
**/Charts/
|
||||||
**/network-dev/
|
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ set(INSTALL_QMLDIR "usr/lib/qt6/qml" CACHE STRING "QML install dir")
|
|||||||
set(INSTALL_QSCONFDIR "etc/xdg/quickshell/zshell" CACHE STRING "Quickshell config install dir")
|
set(INSTALL_QSCONFDIR "etc/xdg/quickshell/zshell" CACHE STRING "Quickshell config install dir")
|
||||||
set(INSTALL_GREETERCONFDIR "etc/xdg/quickshell/zshell-greeter" CACHE STRING "Quickshell greeter install dir")
|
set(INSTALL_GREETERCONFDIR "etc/xdg/quickshell/zshell-greeter" CACHE STRING "Quickshell greeter install dir")
|
||||||
|
|
||||||
|
set(CMAKE_INSTALL_MESSAGE NEVER)
|
||||||
|
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
-Wall -Wextra -Wpedantic -Wshadow -Wconversion
|
-Wall -Wextra -Wpedantic -Wshadow -Wconversion
|
||||||
-Wold-style-cast -Wnull-dereference -Wdouble-promotion
|
-Wold-style-cast -Wnull-dereference -Wdouble-promotion
|
||||||
|
|||||||
@@ -40,6 +40,10 @@ JsonObject {
|
|||||||
id: "tray",
|
id: "tray",
|
||||||
enabled: true
|
enabled: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "network",
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "clock",
|
id: "clock",
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
|
|
||||||
import Quickshell
|
|
||||||
import Quickshell.Networking
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
Singleton {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
property bool active: false
|
|
||||||
readonly property list<Network> connectedNetworks: networks.filter(n => n.connected)
|
|
||||||
readonly property list<NetworkDevice> devices: Networking.devices.values
|
|
||||||
readonly property list<Network> knownNetworks: networks.filter(n => n.known && !n.known.ConnectionState.Connected)
|
|
||||||
readonly property list<Network> networks: {
|
|
||||||
const list = [];
|
|
||||||
for (const d of wifiDevices) {
|
|
||||||
for (const n of d.networks.values) {
|
|
||||||
if (!list.includes(n))
|
|
||||||
list.push(n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
property bool scanning: false
|
|
||||||
readonly property list<Network> unknownNetworks: networks.filter(n => !n.known)
|
|
||||||
readonly property list<WifiDevice> wifiDevices: devices.filter(d => wifiDevice(d))
|
|
||||||
readonly property bool wifiEnabled: Networking.wifiEnabled
|
|
||||||
|
|
||||||
function isSecure(security): bool {
|
|
||||||
return (security === WifiSecurityType.WpaPsk || security === WifiSecurityType.Wpa2Psk || security === WifiSecurityType.Sae);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setScan(value: bool): void {
|
|
||||||
for (const d of wifiDevices) {
|
|
||||||
d.scannerEnabled = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setWifi(value: bool): void {
|
|
||||||
Networking.wifiEnabled = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function wifiDevice(dev): bool {
|
|
||||||
return dev.type === DeviceType.Wifi;
|
|
||||||
}
|
|
||||||
|
|
||||||
onActiveChanged: {
|
|
||||||
for (const d of wifiDevices)
|
|
||||||
d.scannerEnabled = active;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@ import QtQuick.Layouts
|
|||||||
import qs.Modules
|
import qs.Modules
|
||||||
import qs.Config
|
import qs.Config
|
||||||
import qs.Modules.SysTray
|
import qs.Modules.SysTray
|
||||||
|
import qs.Modules.Network
|
||||||
import qs.Modules.Updates
|
import qs.Modules.Updates
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
@@ -168,6 +169,15 @@ RowLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelegateChoice {
|
||||||
|
roleValue: "network"
|
||||||
|
|
||||||
|
delegate: WrappedLoader {
|
||||||
|
sourceComponent: NetworkWidget {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "media"
|
roleValue: "media"
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import qs.Config
|
|||||||
import qs.Helpers
|
import qs.Helpers
|
||||||
import qs.Modules.SysTray
|
import qs.Modules.SysTray
|
||||||
import qs.Modules.SysTray.Widgets
|
import qs.Modules.SysTray.Widgets
|
||||||
|
import qs.Modules.Network
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import QtQuick
|
|||||||
import qs.Config
|
import qs.Config
|
||||||
import qs.Components
|
import qs.Components
|
||||||
import qs.Modules.WSOverview
|
import qs.Modules.WSOverview
|
||||||
|
import qs.Modules.Network
|
||||||
import qs.Modules.SysTray.Popouts
|
import qs.Modules.SysTray.Popouts
|
||||||
import qs.Modules.Updates
|
import qs.Modules.Updates
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
pragma ComponentBehavior: Bound
|
||||||
|
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Networking
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import qs.Components
|
||||||
|
import qs.Config
|
||||||
|
import qs.Modules
|
||||||
|
import qs.Helpers as Helpers
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
required property var wrapper
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: layout
|
||||||
|
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: Helpers.Network.devices
|
||||||
|
|
||||||
|
CustomRadioButton {
|
||||||
|
id: network
|
||||||
|
|
||||||
|
required property NetworkDevice modelData
|
||||||
|
|
||||||
|
checked: Helpers.Network.activeDevice?.name === modelData.name
|
||||||
|
text: modelData.description
|
||||||
|
visible: modelData.name !== "lo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import Quickshell
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import qs.Components
|
||||||
|
import qs.Modules
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.top: parent.top
|
||||||
|
implicitWidth: layout.implicitWidth
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: layout
|
||||||
|
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.top: parent.top
|
||||||
|
|
||||||
|
MaterialIcon {
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
text: "android_wifi_4_bar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,14 +39,13 @@ PageBase {
|
|||||||
onToggled: Config.bar.tray.showMicrophone = checked
|
onToggled: Config.bar.tray.showMicrophone = checked
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleRow {
|
|
||||||
checked: Config.bar.tray.showNetwork
|
|
||||||
text: qsTr("Network")
|
|
||||||
|
|
||||||
onToggled: Config.bar.tray.showNetwork = checked
|
|
||||||
}
|
|
||||||
|
|
||||||
//////// FOR LATER:
|
//////// FOR LATER:
|
||||||
|
// ToggleRow {
|
||||||
|
// checked: Config.bar.tray.showNetwork
|
||||||
|
// text: qsTr("Network")
|
||||||
|
//
|
||||||
|
// onToggled: Config.bar.tray.showNetwork = checked
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// ToggleRow {
|
// ToggleRow {
|
||||||
// checked: Config.bar.tray.showWifi
|
// checked: Config.bar.tray.showWifi
|
||||||
@@ -95,15 +94,5 @@ PageBase {
|
|||||||
|
|
||||||
onToggled: Config.bar.popouts.upower = checked
|
onToggled: Config.bar.popouts.upower = checked
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleRow {
|
|
||||||
checked: Config.bar.popouts.network
|
|
||||||
last: true
|
|
||||||
settingAnchor: "bar-status-network-popout"
|
|
||||||
subtext: qsTr("Show a details popout when hovering the network icon")
|
|
||||||
text: qsTr("Network popout on hover")
|
|
||||||
|
|
||||||
onToggled: Config.bar.popouts.network = checked
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,223 +0,0 @@
|
|||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import Quickshell
|
|
||||||
import qs.Components
|
|
||||||
import qs.Config
|
|
||||||
import qs.Helpers
|
|
||||||
|
|
||||||
CustomClippingRect {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
required property var wrapper
|
|
||||||
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
color: DynamicColors.tPalette.m3surfaceContainer
|
|
||||||
implicitHeight: networkPopContent.height + networks.implicitHeight + networkPopContent.anchors.margins + networks.anchors.margins * 2
|
|
||||||
implicitWidth: 500 + 8 * 2
|
|
||||||
radius: (20 - Appearance.padding.small) * Appearance.rounding.scale
|
|
||||||
|
|
||||||
Component.onCompleted: Network.active = true
|
|
||||||
Component.onDestruction: Network.active = false
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
id: networkPopContent
|
|
||||||
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.margins: Appearance.padding.large
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: parent.top
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.preferredHeight: visible ? implicitHeight : 0
|
|
||||||
Layout.rightMargin: Appearance.padding.extraSmall
|
|
||||||
font.pointSize: Appearance.font.size.large
|
|
||||||
text: qsTr("Wifi")
|
|
||||||
}
|
|
||||||
|
|
||||||
Toggle {
|
|
||||||
Layout.preferredHeight: visible ? implicitHeight : 0
|
|
||||||
checked: Network.wifiEnabled
|
|
||||||
label: qsTr("WiFi enabled")
|
|
||||||
|
|
||||||
toggle.onToggled: Network.setWifi(checked)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
id: networks
|
|
||||||
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.margins: Appearance.padding.normal
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: networkPopContent.bottom
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.leftMargin: Appearance.padding.normal
|
|
||||||
text: qsTr("Connected")
|
|
||||||
visible: Network.connectedNetworks.length > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
visible: Network.connectedNetworks.length > 0
|
|
||||||
|
|
||||||
model: ScriptModel {
|
|
||||||
values: [...Network.connectedNetworks].sort((a, b) => {
|
|
||||||
return b.signalStrength - a.signalStrength;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
NetworkItem {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Spacer {
|
|
||||||
visible: Network.connectedNetworks.length > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.leftMargin: Appearance.padding.normal
|
|
||||||
text: qsTr("Known networks")
|
|
||||||
visible: Network.knownNetworks.length > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
visible: Network.knownNetworks.length > 0
|
|
||||||
|
|
||||||
model: ScriptModel {
|
|
||||||
values: [...Network.knownNetworks].sort((a, b) => {
|
|
||||||
return b.signalStrength - a.signalStrength;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
NetworkItem {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Spacer {
|
|
||||||
visible: Network.knownNetworks.length > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.leftMargin: Appearance.padding.normal
|
|
||||||
text: qsTr("Networks")
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.leftMargin: Appearance.padding.normal
|
|
||||||
Layout.preferredHeight: visible ? implicitHeight : 0
|
|
||||||
color: DynamicColors.palette.m3onSurfaceVariant
|
|
||||||
font.pointSize: Appearance.font.size.extraSmall
|
|
||||||
text: qsTr("%1 networks available").arg(Network.networks.length) // qmllint disable missing-property
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
id: networkRepeater
|
|
||||||
|
|
||||||
model: ScriptModel {
|
|
||||||
values: [...Network.unknownNetworks].sort((a, b) => {
|
|
||||||
return b.signalStrength - a.signalStrength;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
NetworkItem {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
component NetworkItem: CustomRect {
|
|
||||||
id: knownNetworkItem
|
|
||||||
|
|
||||||
required property var modelData
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.preferredHeight: visible ? knownNetworkRow.implicitHeight + Appearance.padding.smaller * 2 : 0
|
|
||||||
Layout.rightMargin: Appearance.padding.extraSmall
|
|
||||||
radius: Appearance.rounding.small
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: knownNetworkRow
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.leftMargin: Appearance.padding.larger
|
|
||||||
anchors.rightMargin: Appearance.padding.normal
|
|
||||||
opacity: 0
|
|
||||||
scale: 0.7
|
|
||||||
spacing: Appearance.spacing.small
|
|
||||||
|
|
||||||
Behavior on opacity {
|
|
||||||
Anim {
|
|
||||||
type: Anim.DefaultEffects
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Behavior on scale {
|
|
||||||
Anim {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
opacity = 1;
|
|
||||||
scale = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
MaterialIcon {
|
|
||||||
color: knownNetworkItem.modelData.active ? DynamicColors.palette.m3primary : DynamicColors.palette.m3onSurfaceVariant
|
|
||||||
text: Icons.getNetworkIcon(knownNetworkItem.modelData.signalStrength * 100, Network.isSecure(knownNetworkItem.modelData.security))
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.leftMargin: Appearance.spacing.extraSmall
|
|
||||||
Layout.rightMargin: Appearance.spacing.extraSmall
|
|
||||||
color: knownNetworkItem.modelData.active ? DynamicColors.palette.m3primary : DynamicColors.palette.m3onSurface
|
|
||||||
elide: Text.ElideRight
|
|
||||||
text: knownNetworkItem.modelData.name
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomRect {
|
|
||||||
color: Qt.alpha(DynamicColors.palette.m3primary, knownNetworkItem.modelData.active ? 1 : 0)
|
|
||||||
implicitHeight: knownWirelessConnectIcon.implicitHeight + Appearance.padding.extraSmall
|
|
||||||
implicitWidth: implicitHeight
|
|
||||||
radius: Appearance.rounding.full
|
|
||||||
|
|
||||||
// CircularIndicator {
|
|
||||||
// anchors.fill: parent
|
|
||||||
// running: knownNetworkItem.loading
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StateLayer {
|
|
||||||
color: knownNetworkItem.modelData.active ? DynamicColors.palette.m3onPrimary : DynamicColors.palette.m3onSurface
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
NetworkPassword.requestOpen();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
component Spacer: Item {
|
|
||||||
id: spacer
|
|
||||||
|
|
||||||
Layout.preferredHeight: networkRepeater.count > 0 ? Appearance.spacing.extraSmall : 0
|
|
||||||
}
|
|
||||||
component Toggle: RowLayout {
|
|
||||||
property alias checked: toggle.checked
|
|
||||||
required property string label
|
|
||||||
property alias toggle: toggle
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.rightMargin: Appearance.padding.extraSmall
|
|
||||||
spacing: Appearance.spacing.small
|
|
||||||
|
|
||||||
CustomText {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
text: parent.label
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomSwitch {
|
|
||||||
id: toggle
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -52,11 +52,6 @@ RowLayout {
|
|||||||
id: "audio",
|
id: "audio",
|
||||||
item: child
|
item: child
|
||||||
};
|
};
|
||||||
if (child.objectName === "networkWidget" && Config.bar.popouts.network)
|
|
||||||
return {
|
|
||||||
id: "network",
|
|
||||||
item: child
|
|
||||||
};
|
|
||||||
if (child.objectName === "upowerWidget" && Config.bar.popouts.upower)
|
if (child.objectName === "upowerWidget" && Config.bar.popouts.upower)
|
||||||
return {
|
return {
|
||||||
id: "upower",
|
id: "upower",
|
||||||
@@ -151,10 +146,6 @@ RowLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkWidget {
|
|
||||||
objectName: "networkWidget"
|
|
||||||
}
|
|
||||||
|
|
||||||
UPowerWidget {
|
UPowerWidget {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
objectName: "upowerWidget"
|
objectName: "upowerWidget"
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import Quickshell.Io
|
|
||||||
import Quickshell.Services.Pipewire
|
|
||||||
import qs.Daemons
|
|
||||||
import qs.Modules
|
|
||||||
import qs.Config
|
|
||||||
import qs.Components
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
// property color barColor: DynamicColors.palette.m3primary
|
|
||||||
property color textColor: DynamicColors.palette.m3onSurface
|
|
||||||
|
|
||||||
MaterialIcon {
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
animate: true
|
|
||||||
color: root.textColor // Network.connected ? root.textColor : DynamicColors.palette.m3error
|
|
||||||
fill: 1
|
|
||||||
font.pointSize: Appearance.font.size.larger
|
|
||||||
text: "android_wifi_4_bar"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user