mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2026-05-31 01:36:50 +00:00
Merge branch 'main' into feat/wezterm
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user