Replaced all NWidgets callback by proper signals

This commit is contained in:
quadbyte 2025-08-12 13:22:15 -04:00
parent 1a7a0dbb16
commit a7d4e0ec1d
27 changed files with 93 additions and 88 deletions

View file

@ -6,9 +6,10 @@ Rectangle {
id: root
readonly property real scaling: Scaling.scale(screen)
property var onEntered: function () {}
property var onExited: function () {}
property var onClicked: function () {}
signal entered
signal exited
signal clicked
width: textItem.paintedWidth
height: textItem.paintedHeight
@ -26,8 +27,8 @@ Rectangle {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: root.onEntered()
onExited: root.onExited()
onClicked: root.onClicked()
onEntered: root.entered()
onExited: root.exited()
onClicked: root.clicked()
}
}

View file

@ -13,7 +13,8 @@ ComboBox {
property list<string> optionsKeys: []
property list<string> optionsLabels: []
property string currentKey: ''
property var onSelected: function (string) {}
signal selected(string key)
Layout.fillWidth: true
Layout.preferredHeight: height
@ -21,7 +22,7 @@ ComboBox {
model: optionsKeys
currentIndex: model.indexOf(currentKey)
onActivated: {
root.onSelected(model[currentIndex])
root.selected(model[currentIndex])
}
// Rounded background

View file

@ -15,12 +15,13 @@ Rectangle {
property bool showBorder: true
property bool enabled: true
property bool hovering: false
property var onEntered: function () {}
property var onExited: function () {}
property var onClicked: function () {}
property real fontPointSize: Style.fontSizeMedium
property string fontFamily: "Material Symbols Outlined"
signal entered
signal exited
signal clicked
implicitWidth: size
implicitHeight: size
@ -62,20 +63,20 @@ Rectangle {
if (tooltipText) {
tooltip.show()
}
root.onEntered()
root.entered()
}
onExited: {
hovering = false
if (tooltipText) {
tooltip.hide()
}
root.onExited()
root.exited()
}
onClicked: {
if (tooltipText) {
tooltip.hide()
}
root.onClicked()
root.clicked()
}
}
}

View file

@ -4,26 +4,27 @@ import Quickshell.Wayland
import qs.Services
PanelWindow {
id: outerPanel
id: root
readonly property real scaling: Scaling.scale(screen)
property bool showOverlay: Settings.data.general.dimDesktop
property int topMargin: Style.barHeight * scaling
property color overlayColor: showOverlay ? Colors.overlay : "transparent"
signal dismissed
function hide() {
//visible = false
dismissed()
root.dismissed()
}
function show() {
// Ensure only one panel is visible at a time using Settings as ephemeral store
try {
if (Settings.openPanel && Settings.openPanel !== outerPanel && Settings.openPanel.hide) {
if (Settings.openPanel && Settings.openPanel !== root && Settings.openPanel.hide) {
Settings.openPanel.hide()
}
Settings.openPanel = outerPanel
Settings.openPanel = root
} catch (e) {
// ignore
@ -45,7 +46,7 @@ PanelWindow {
MouseArea {
anchors.fill: parent
onClicked: outerPanel.hide()
onClicked: root.hide()
}
Behavior on color {
@ -57,16 +58,16 @@ PanelWindow {
Component.onDestruction: {
try {
if (visible && Settings.openPanel === outerPanel)
if (visible && Settings.openPanel === root)
Settings.openPanel = null
} catch (e) {
}
}
onVisibleChanged: function () {
onVisibleChanged: {
try {
if (!visible && Settings.openPanel === outerPanel)
if (!visible && Settings.openPanel === root)
Settings.openPanel = null
} catch (e) {

View file

@ -18,10 +18,12 @@ Item {
property real sizeMultiplier: 0.8
property bool autoHide: false
property var onEntered: function () {}
property var onExited: function () {}
property var onClicked: function () {}
property var onWheel: function (delta) {}
signal shown
signal hidden
signal entered
signal exited
signal clicked
signal wheel(int delta)
// Internal state
property bool showPill: false
@ -34,10 +36,6 @@ Item {
readonly property int pillOverlap: iconSize * 0.5
readonly property int maxPillWidth: Math.max(1, textItem.implicitWidth + pillPaddingHorizontal * 2 + pillOverlap)
// TBC, do we use those ?
signal shown
signal hidden
width: iconSize + (showPill ? maxPillWidth - pillOverlap : 0)
height: pillHeight
@ -127,7 +125,7 @@ Item {
}
onStopped: {
delayedHideAnim.start()
shown()
root.shown()
}
}
@ -166,7 +164,7 @@ Item {
onStopped: {
showPill = false
shouldAnimateHide = false
hidden()
root.hidden()
}
}
@ -194,18 +192,18 @@ Item {
onEntered: {
showDelayed()
tooltip.show()
root.onEntered()
root.entered()
}
onExited: {
hide()
tooltip.hide()
root.onExited()
root.exited()
}
onClicked: {
root.onClicked()
root.clicked()
}
onWheel: wheel => {
root.onWheel(wheel.angleDelta.y)
root.wheel(wheel.angleDelta.y)
}
}

View file

@ -35,14 +35,6 @@ Slider {
height: parent.height
color: Colors.accentPrimary
radius: parent.radius
// Feels more responsive without animation
// Behavior on width {
// NumberAnimation {
// duration: 50
// easing.type: Easing.OutQuad
// }
// }
}
// Circular cutout
@ -84,6 +76,7 @@ Slider {
color: root.pressed ? Colors.surfaceVariant : Colors.surface
border.color: Colors.accentPrimary
border.width: Math.max(1, Style.borderThick * scaling)
// Press feedback halo (using accent color, low opacity)
Rectangle {
anchors.centerIn: parent

View file

@ -13,7 +13,8 @@ Item {
property alias placeholderText: input.placeholderText
property bool readOnly: false
property bool enabled: true
property var onEditingFinished: function () {}
signal editingFinished
// Sizing
implicitHeight: Style.baseWidgetSize * 1.25 * scaling
@ -55,7 +56,7 @@ Item {
placeholderTextColor: Colors.textSecondary
background: null
font.pointSize: Style.fontSizeSmall * scaling
onEditingFinished: root.onEditingFinished()
onEditingFinished: root.editingFinished()
// Text changes are observable via the aliased 'text' property (root.text) and its 'textChanged' signal.
// No additional callback is invoked here to avoid conflicts with QML's onTextChanged handler semantics.
}

View file

@ -12,7 +12,8 @@ RowLayout {
property bool value: false
property bool hovering: false
property int baseSize: Style.baseWidgetSize
property var onToggled: function (value) {}
signal toggled(bool balue)
Layout.fillWidth: true
@ -72,7 +73,7 @@ RowLayout {
onExited: hovering = false
onClicked: {
value = !value
root.onToggled(value)
root.toggled(value)
}
}
}