Merge branch 'main' into feat/wezterm

This commit is contained in:
Lemmy
2025-11-03 15:34:41 -05:00
committed by GitHub
83 changed files with 5697 additions and 2061 deletions
@@ -14,71 +14,121 @@ ColumnLayout {
property var widgetMetadata: null
// Local state
property string valueIndicatorStyle: widgetData.indicatorStyle !== undefined ? widgetData.indicatorStyle : widgetMetadata.indicatorStyle
property bool valueShowCapsLock: widgetData.showCapsLock !== undefined ? widgetData.showCapsLock : widgetMetadata.showCapsLock
property bool valueShowNumLock: widgetData.showNumLock !== undefined ? widgetData.showNumLock : widgetMetadata.showNumLock
property bool valueShowScrollLock: widgetData.showScrollLock !== undefined ? widgetData.showScrollLock : widgetMetadata.showScrollLock
property string capsIcon: widgetData.capsLockIcon !== undefined ? widgetData.capsLockIcon : widgetMetadata.capsLockIcon
property string numIcon: widgetData.numLockIcon !== undefined ? widgetData.numLockIcon : widgetMetadata.numLockIcon
property string scrollIcon: widgetData.scrollLockIcon !== undefined ? widgetData.scrollLockIcon : widgetMetadata.scrollLockIcon
function saveSettings() {
var settings = Object.assign({}, widgetData || {})
settings.indicatorStyle = valueIndicatorStyle
settings.showCapsLock = valueShowCapsLock
settings.showNumLock = valueShowNumLock
settings.showScrollLock = valueShowScrollLock
settings.capsLockIcon = capsIcon
settings.numLockIcon = numIcon
settings.scrollLockIcon = scrollIcon
return settings
}
NComboBox {
Layout.fillWidth: true
label: I18n.tr("bar.widget-settings.lock-keys.indicator-style.label")
description: I18n.tr("bar.widget-settings.lock-keys.indicator-style.description")
model: [{
"key": "large",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.large")
}, {
"key": "small",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.small")
}, {
"key": "square",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.square")
}, {
"key": "square-round",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.square-round")
}, {
"key": "circle",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.circle")
}, {
"key": "circle-dash",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.circle-dash")
}, {
"key": "circle-dot",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.circle-dot")
}, {
"key": "hex",
"name": I18n.tr("bar.widget-settings.lock-keys.indicator-style.hex")
}]
currentKey: valueIndicatorStyle
onSelected: key => valueIndicatorStyle = key
RowLayout {
spacing: Style.marginM
NToggle {
label: I18n.tr("bar.widget-settings.lock-keys.show-caps-lock.label")
description: I18n.tr("bar.widget-settings.lock-keys.show-caps-lock.description")
checked: valueShowCapsLock
onToggled: checked => valueShowCapsLock = checked
}
NIcon {
Layout.alignment: Qt.AlignVCenter
icon: capsIcon
pointSize: Style.fontSizeXL
visible: capsIcon !== ""
}
NButton {
text: I18n.tr("bar.widget-settings.lock-keys.browsedd")
onClicked: capsPicker.open()
enabled: valueShowCapsLock
}
}
NToggle {
label: I18n.tr("bar.widget-settings.lock-keys.show-caps-lock.label")
description: I18n.tr("bar.widget-settings.lock-keys.show-caps-lock.description")
checked: valueShowCapsLock
onToggled: checked => valueShowCapsLock = checked
NIconPicker {
id: capsPicker
initialIcon: capsIcon
query: "letter-c"
onIconSelected: function (iconName) {
capsIcon = iconName
}
}
NToggle {
label: I18n.tr("bar.widget-settings.lock-keys.show-num-lock.label")
description: I18n.tr("bar.widget-settings.lock-keys.show-num-lock.description")
checked: valueShowNumLock
onToggled: checked => valueShowNumLock = checked
RowLayout {
spacing: Style.marginM
NToggle {
label: I18n.tr("bar.widget-settings.lock-keys.show-num-lock.label")
description: I18n.tr("bar.widget-settings.lock-keys.show-num-lock.description")
checked: valueShowNumLock
onToggled: checked => valueShowNumLock = checked
}
NIcon {
Layout.alignment: Qt.AlignVCenter
icon: numIcon
pointSize: Style.fontSizeXL
visible: numIcon !== ""
}
NButton {
text: I18n.tr("bar.widget-settings.lock-keys.browse")
onClicked: numPicker.open()
enabled: valueShowNumLock
}
}
NToggle {
label: I18n.tr("bar.widget-settings.lock-keys.show-scroll-lock.label")
description: I18n.tr("bar.widget-settings.lock-keys.show-scroll-lock.description")
checked: valueShowScrollLock
onToggled: checked => valueShowScrollLock = checked
NIconPicker {
id: numPicker
initialIcon: numIcon
query: "letter-n"
onIconSelected: function (iconName) {
numIcon = iconName
}
}
RowLayout {
spacing: Style.marginM
NToggle {
label: I18n.tr("bar.widget-settings.lock-keys.show-scroll-lock.label")
description: I18n.tr("bar.widget-settings.lock-keys.show-scroll-lock.description")
checked: valueShowScrollLock
onToggled: checked => valueShowScrollLock = checked
}
NIcon {
Layout.alignment: Qt.AlignVCenter
icon: scrollIcon
pointSize: Style.fontSizeXL
visible: scrollIcon !== ""
}
NButton {
text: I18n.tr("bar.widget-settings.lock-keys.browse")
onClicked: scrollPicker.open()
enabled: valueShowScrollLock
}
}
NIconPicker {
id: scrollPicker
initialIcon: scrollIcon
query: "letter-s"
onIconSelected: function (iconName) {
scrollIcon = iconName
}
}
}
+33 -59
View File
@@ -16,9 +16,6 @@ NPanel {
panelAnchorHorizontalCenter: true
panelAnchorVerticalCenter: true
panelKeyboardFocus: true
draggable: !PanelService.hasOpenedPopup
// Tabs enumeration, order is NOT relevant
enum Tab {
@@ -287,6 +284,39 @@ NPanel {
}
}
// Override keyboard handlers from NPanel
function onTabPressed() {
selectNextTab()
}
function onShiftTabPressed() {
selectPreviousTab()
}
function onUpPressed() {
scrollUp()
}
function onDownPressed() {
scrollDown()
}
function onPageUpPressed() {
scrollPageUp()
}
function onPageDownPressed() {
scrollPageDown()
}
function onCtrlJPressed() {
scrollDown()
}
function onCtrlKPressed() {
scrollUp()
}
panelContent: Rectangle {
color: Color.transparent
@@ -296,62 +326,6 @@ NPanel {
anchors.margins: Style.marginL
spacing: 0
// Keyboard shortcuts container
Item {
Layout.preferredWidth: 0
Layout.preferredHeight: 0
// Scrolling via keyboard
Shortcut {
sequence: "Down"
onActivated: root.scrollDown()
enabled: root.opened
}
Shortcut {
sequence: "Up"
onActivated: root.scrollUp()
enabled: root.opened
}
Shortcut {
sequence: "Ctrl+J"
onActivated: root.scrollDown()
enabled: root.opened
}
Shortcut {
sequence: "Ctrl+K"
onActivated: root.scrollUp()
enabled: root.opened
}
Shortcut {
sequence: "PgDown"
onActivated: root.scrollPageDown()
enabled: root.opened
}
Shortcut {
sequence: "PgUp"
onActivated: root.scrollPageUp()
enabled: root.opened
}
// Changing tab via keyboard
Shortcut {
sequence: "Tab"
onActivated: root.selectNextTab()
enabled: root.opened
}
Shortcut {
sequence: "Shift+Tab"
onActivated: root.selectPreviousTab()
enabled: root.opened
}
}
// Main content area
RowLayout {
Layout.fillWidth: true
+21 -3
View File
@@ -25,7 +25,7 @@ ColumnLayout {
// Handler for drag start - disables panel background clicks
function handleDragStart() {
var panel = PanelService.getPanel("settingsPanel")
var panel = PanelService.getPanel("settingsPanel", screen)
if (panel && panel.disableBackgroundClick) {
panel.disableBackgroundClick()
}
@@ -33,7 +33,7 @@ ColumnLayout {
// Handler for drag end - re-enables panel background clicks
function handleDragEnd() {
var panel = PanelService.getPanel("settingsPanel")
var panel = PanelService.getPanel("settingsPanel", screen)
if (panel && panel.enableBackgroundClick) {
panel.enableBackgroundClick()
}
@@ -99,7 +99,25 @@ ColumnLayout {
label: I18n.tr("settings.bar.appearance.floating.label")
description: I18n.tr("settings.bar.appearance.floating.description")
checked: Settings.data.bar.floating
onToggled: checked => Settings.data.bar.floating = checked
onToggled: checked => {
Settings.data.bar.floating = checked
if (checked) {
// Disable outer corners when floating is enabled
Settings.data.bar.outerCorners = false
} else {
// Enable outer corners when floating is disabled
Settings.data.bar.outerCorners = true
}
}
}
NToggle {
Layout.fillWidth: true
label: I18n.tr("settings.bar.appearance.outer-corners.label")
description: I18n.tr("settings.bar.appearance.outer-corners.description")
checked: Settings.data.bar.outerCorners
visible: !Settings.data.bar.floating
onToggled: checked => Settings.data.bar.outerCorners = checked
}
// Floating bar options - only show when floating is enabled
+2 -2
View File
@@ -40,7 +40,7 @@ ColumnLayout {
// Handler for drag start - disables panel background clicks
function handleDragStart() {
var panel = PanelService.getPanel("settingsPanel")
var panel = PanelService.getPanel("settingsPanel", screen)
if (panel && panel.disableBackgroundClick) {
panel.disableBackgroundClick()
}
@@ -48,7 +48,7 @@ ColumnLayout {
// Handler for drag end - re-enables panel background clicks
function handleDragEnd() {
var panel = PanelService.getPanel("settingsPanel")
var panel = PanelService.getPanel("settingsPanel", screen)
if (panel && panel.enableBackgroundClick) {
panel.enableBackgroundClick()
}
+32 -3
View File
@@ -113,12 +113,17 @@ ColumnLayout {
to: 1
value: brightnessMonitor ? brightnessMonitor.brightness : 0.5
stepSize: 0.01
enabled: brightnessMonitor ? brightnessMonitor.brightnessControlAvailable : false
onMoved: value => {
if (brightnessMonitor.method === "internal") {
if (brightnessMonitor && brightnessMonitor.brightnessControlAvailable) {
brightnessMonitor.setBrightness(value)
}
}
onPressedChanged: (pressed, value) => brightnessMonitor.setBrightness(value)
onPressedChanged: (pressed, value) => {
if (brightnessMonitor && brightnessMonitor.brightnessControlAvailable) {
brightnessMonitor.setBrightness(value)
}
}
Layout.fillWidth: true
}
@@ -127,17 +132,29 @@ ColumnLayout {
Layout.preferredWidth: 55
horizontalAlignment: Text.AlignRight
Layout.alignment: Qt.AlignVCenter
opacity: brightnessMonitor && !brightnessMonitor.brightnessControlAvailable ? 0.5 : 1.0
}
Item {
Layout.preferredWidth: 30
Layout.fillHeight: true
NIcon {
icon: brightnessMonitor.method == "internal" ? "device-laptop" : "device-desktop"
icon: brightnessMonitor && brightnessMonitor.method == "internal" ? "device-laptop" : "device-desktop"
anchors.centerIn: parent
opacity: brightnessMonitor && !brightnessMonitor.brightnessControlAvailable ? 0.5 : 1.0
}
}
}
// Show message when brightness control is not available
NText {
visible: brightnessMonitor && !brightnessMonitor.brightnessControlAvailable
text: !Settings.data.brightness.enableDdcSupport ? I18n.tr("settings.display.monitors.brightness-unavailable.ddc-disabled") : I18n.tr("settings.display.monitors.brightness-unavailable.generic")
pointSize: Style.fontSizeS
color: Color.mOnSurfaceVariant
Layout.fillWidth: true
wrapMode: Text.WordWrap
}
}
}
}
@@ -163,6 +180,18 @@ ColumnLayout {
checked: Settings.data.brightness.enforceMinimum
onToggled: checked => Settings.data.brightness.enforceMinimum = checked
}
NToggle {
Layout.fillWidth: true
label: I18n.tr("settings.display.monitors.external-brightness.label")
description: I18n.tr("settings.display.monitors.external-brightness.description")
checked: Settings.data.brightness.enableDdcSupport
onToggled: checked => {
Settings.data.brightness.enableDdcSupport = checked
// DDC detection will run on next monitor change when enabled
// Monitors will stop using DDC immediately when disabled
}
}
}
NDivider {
+14 -2
View File
@@ -235,8 +235,20 @@ ColumnLayout {
visible: !DistroService.isNixOS
text: I18n.tr("settings.general.launch-setup-wizard")
onClicked: {
setupWizardLoader.active = false
setupWizardLoader.active = true
var targetScreen = PanelService.openedPanel ? PanelService.openedPanel.screen : (Quickshell.screens.length > 0 ? Quickshell.screens[0] : null)
if (!targetScreen) {
return
}
var setupPanel = PanelService.getPanel("setupWizardPanel", targetScreen)
if (setupPanel) {
setupPanel.open()
} else {
Qt.callLater(() => {
var sp = PanelService.getPanel("setupWizardPanel", targetScreen)
if (sp)
sp.open()
})
}
}
}
}
+6 -4
View File
@@ -15,13 +15,18 @@ ColumnLayout {
}
NComboBox {
id: launcherPosition
label: I18n.tr("settings.launcher.settings.position.label")
description: I18n.tr("settings.launcher.settings.position.description")
Layout.fillWidth: true
model: [{
"key": "follow_bar",
"name": I18n.tr("options.launcher.position.follow_bar")
}, {
"key": "center",
"name": I18n.tr("options.launcher.position.center")
}, {
"key": "top_center",
"name": I18n.tr("options.launcher.position.top_center")
}, {
"key": "top_left",
"name": I18n.tr("options.launcher.position.top_left")
@@ -37,9 +42,6 @@ ColumnLayout {
}, {
"key": "bottom_center",
"name": I18n.tr("options.launcher.position.bottom_center")
}, {
"key": "top_center",
"name": I18n.tr("options.launcher.position.top_center")
}]
currentKey: Settings.data.appLauncher.position
onSelected: function (key) {
@@ -26,6 +26,13 @@ ColumnLayout {
onToggled: checked => Settings.data.ui.tooltipsEnabled = checked
}
NToggle {
label: I18n.tr("settings.user-interface.dim-desktop.label")
description: I18n.tr("settings.user-interface.dim-desktop.description")
checked: Settings.data.general.dimDesktop
onToggled: checked => Settings.data.general.dimDesktop = checked
}
NToggle {
label: I18n.tr("settings.user-interface.panels-attached-to-bar.label")
description: I18n.tr("settings.user-interface.panels-attached-to-bar.description")
@@ -33,6 +40,13 @@ ColumnLayout {
onToggled: checked => Settings.data.ui.panelsAttachedToBar = checked
}
NToggle {
label: I18n.tr("settings.user-interface.shadows.label")
description: I18n.tr("settings.user-interface.shadows.description")
checked: Settings.data.general.enableShadows
onToggled: checked => Settings.data.general.enableShadows = checked
}
NToggle {
label: I18n.tr("settings.user-interface.panels-overlay.label")
description: I18n.tr("settings.user-interface.panels-overlay.description")
+35
View File
@@ -103,6 +103,41 @@ ColumnLayout {
}
}
}
NComboBox {
label: I18n.tr("settings.wallpaper.settings.selector-position.label")
description: I18n.tr("settings.wallpaper.settings.selector-position.description")
Layout.fillWidth: true
model: [{
"key": "follow_bar",
"name": I18n.tr("options.launcher.position.follow_bar")
}, {
"key": "center",
"name": I18n.tr("options.launcher.position.center")
}, {
"key": "top_center",
"name": I18n.tr("options.launcher.position.top_center")
}, {
"key": "top_left",
"name": I18n.tr("options.launcher.position.top_left")
}, {
"key": "top_right",
"name": I18n.tr("options.launcher.position.top_right")
}, {
"key": "bottom_left",
"name": I18n.tr("options.launcher.position.bottom_left")
}, {
"key": "bottom_right",
"name": I18n.tr("options.launcher.position.bottom_right")
}, {
"key": "bottom_center",
"name": I18n.tr("options.launcher.position.bottom_center")
}]
currentKey: Settings.data.wallpaper.panelPosition
onSelected: function (key) {
Settings.data.wallpaper.panelPosition = key
}
}
}
NDivider {