diff --git a/Modules/Bar/WiFi.qml b/Modules/Bar/WiFi.qml index cd8a620..9e2011b 100644 --- a/Modules/Bar/WiFi.qml +++ b/Modules/Bar/WiFi.qml @@ -13,6 +13,7 @@ NIconButton { readonly property bool wifiEnabled: Settings.data.network.wifiEnabled sizeMultiplier: 0.8 showBorder: false + visible: wifiEnabled icon: { let connected = false let signalStrength = 0 @@ -23,7 +24,7 @@ NIconButton { break } } - return connected ? NetworkService.signalIcon(signalStrength) : "wifi_off" + return connected ? NetworkService.signalIcon(signalStrength) : "wifi" } tooltipText: "WiFi Networks" onClicked: { diff --git a/Modules/Bar/WiFiMenu.qml b/Modules/Bar/WiFiMenu.qml index 73cc8fa..87b9aa0 100644 --- a/Modules/Bar/WiFiMenu.qml +++ b/Modules/Bar/WiFiMenu.qml @@ -87,7 +87,7 @@ NLoader { border.color: Colors.mOutlineVariant border.width: Math.max(1, Style.borderThin * scaling) width: 340 * scaling - height: 320 * scaling + height: 500 * scaling anchors.top: parent.top anchors.right: parent.right anchors.topMargin: Style.marginTiny * scaling @@ -145,19 +145,7 @@ NLoader { Layout.fillWidth: true } - NToggle { - baseSize: Style.baseWidgetSize * 0.75 - checked: Settings.data.network.wifiEnabled - onToggled: checked => { - Settings.data.network.wifiEnabled = checked - NetworkService.setWifiEnabled(checked) - // If enabling WiFi while menu is open, refresh after a delay - if (checked) { - wifiEnableRefreshTimer.start() - } - } - } NIconButton { icon: "refresh" @@ -245,7 +233,7 @@ NLoader { clip: true delegate: Item { - width: parent.width + width: parent ? parent.width : 0 height: modelData.ssid === passwordPromptSsid && showPasswordPrompt ? 108 * scaling : Style.baseWidgetSize * 1.5 * scaling diff --git a/Modules/Dock/Dock.qml b/Modules/Dock/Dock.qml index 794f43b..f359dba 100644 --- a/Modules/Dock/Dock.qml +++ b/Modules/Dock/Dock.qml @@ -91,7 +91,7 @@ NLoader { MouseArea { id: screenEdgeMouseArea x: 0 - y: modelData.geometry.height - (fullHeight + 10 * scaling) + y: modelData && modelData.geometry ? modelData.geometry.height - (fullHeight + 10 * scaling) : 0 width: screen.width height: fullHeight + 10 * scaling hoverEnabled: true diff --git a/Modules/Notification/NotificationHistoryPanel.qml b/Modules/Notification/NotificationHistoryPanel.qml index f508b82..8587e9e 100644 --- a/Modules/Notification/NotificationHistoryPanel.qml +++ b/Modules/Notification/NotificationHistoryPanel.qml @@ -149,6 +149,40 @@ NLoader { NDivider {} + // Empty state when no notifications + Item { + Layout.fillWidth: true + Layout.fillHeight: true + visible: NotificationService.historyModel.count === 0 + + ColumnLayout { + anchors.centerIn: parent + spacing: Style.marginMedium * scaling + + NText { + text: "notifications_off" + font.family: "Material Symbols Outlined" + font.pointSize: Style.fontSizeXXL * scaling + color: Colors.mOnSurfaceVariant + Layout.alignment: Qt.AlignHCenter + } + + NText { + text: "No notifications" + font.pointSize: Style.fontSizeLarge * scaling + color: Colors.mOnSurfaceVariant + Layout.alignment: Qt.AlignHCenter + } + + NText { + text: "Notifications will appear here when you receive them" + font.pointSize: Style.fontSizeNormal * scaling + color: Colors.mOnSurfaceVariant + Layout.alignment: Qt.AlignHCenter + } + } + } + ListView { id: notificationList Layout.fillWidth: true @@ -157,6 +191,7 @@ NLoader { spacing: Style.marginMedium * scaling clip: true boundsBehavior: Flickable.StopAtBounds + visible: NotificationService.historyModel.count > 0 delegate: Rectangle { width: notificationList ? (notificationList.width - 20) : 380 * scaling diff --git a/Modules/SettingsPanel/Tabs/NetworkTab.qml b/Modules/SettingsPanel/Tabs/NetworkTab.qml index f9f2ebd..a3cd797 100644 --- a/Modules/SettingsPanel/Tabs/NetworkTab.qml +++ b/Modules/SettingsPanel/Tabs/NetworkTab.qml @@ -48,6 +48,7 @@ ColumnLayout { checked: Settings.data.network.wifiEnabled onToggled: checked => { Settings.data.network.wifiEnabled = checked + NetworkService.setWifiEnabled(checked) } } diff --git a/Services/NetworkService.qml b/Services/NetworkService.qml index 07e5847..0799f3b 100644 --- a/Services/NetworkService.qml +++ b/Services/NetworkService.qml @@ -52,10 +52,12 @@ Singleton { isLoading = true enableWifiProcess.running = true } else { - // Store the currently connected network before disabling + // Disconnect from current network and store it for reconnection for (const ssid in networks) { if (networks[ssid].connected) { lastConnectedNetwork = ssid + // Disconnect from the current network before disabling WiFi + disconnectNetwork(ssid) break } } @@ -246,6 +248,11 @@ Singleton { command: ["nmcli", "connection", "down", connectionName] onRunningChanged: { if (!running) { + // Clear connection status when disconnecting + root.connectingSsid = "" + root.connectStatus = "" + root.connectStatusSsid = "" + root.connectError = "" root.refreshNetworks() } } @@ -450,9 +457,9 @@ Singleton { onStreamFinished: { root.connectingSsid = "" root.connectStatus = "success" - root.connectStatusSsid = root.pendingConnect ? root.pendingConnect.ssid : profileName + root.connectStatusSsid = root.pendingConnect ? root.pendingConnect.ssid : upConnectionProcess.profileName root.connectError = "" - root.lastConnectedNetwork = profileName + root.lastConnectedNetwork = upConnectionProcess.profileName root.pendingConnect = null root.refreshNetworks() } @@ -461,7 +468,7 @@ Singleton { onStreamFinished: { root.connectingSsid = "" root.connectStatus = "error" - root.connectStatusSsid = root.pendingConnect ? root.pendingConnect.ssid : profileName + root.connectStatusSsid = root.pendingConnect ? root.pendingConnect.ssid : upConnectionProcess.profileName root.connectError = text root.pendingConnect = null }