f31522130f
Build system (5 gaps hardened): - COOKBOOK_OFFLINE defaults to true (fork-mode) - normalize_patch handles diff -ruN format - New 'repo validate-patches' command (25/25 relibc patches) - 14 patched Qt/Wayland/display recipes added to protected list - relibc archive regenerated with current patch chain Boot fixes (fixable): - Full ISO EFI partition: 16 MiB → 1 MiB (matches mini, BIOS hardcoded 2 MiB offset) - D-Bus system bus: absolute /usr/bin/dbus-daemon path (was skipped) - redbear-sessiond: absolute /usr/bin/redbear-sessiond path (was skipped) - daemon framework: silenced spurious INIT_NOTIFY warnings for oneshot_async services (P0-daemon-silence-init-notify.patch) - udev-shim: demoted INIT_NOTIFY warning to INFO (expected for oneshot_async) - relibc: comprehensive named semaphores (sem_open/close/unlink) replacing upstream todo!() stubs - greeterd: Wayland socket timeout 15s → 30s (compositor DRM wait) - greeter-ui: built and linked (header guard unification, sem_compat stubs removed) - mc: un-ignored in both configs, fixed glib/libiconv/pcre2 transitive deps - greeter config: removed stale keymapd dependency from display/greeter services - prefix toolchain: relibc headers synced, _RELIBC_STDLIB_H guard unified Unfixable (diagnosed, upstream): - i2c-hidd: abort on no-I2C-hardware (QEMU) — process::exit → relibc abort - kded6/greeter-ui: page fault 0x8 — Qt library null deref - Thread panics fd != -1 — Rust std library on Redox - DHCP timeout / eth0 MAC — QEMU user-mode networking - hwrngd/thermald — no hardware RNG/thermal in VM - live preload allocation — BIOS memory fragmentation, continues on demand
175 lines
6.1 KiB
QML
175 lines
6.1 KiB
QML
// Copyright (C) 2021 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
|
|
Rectangle {
|
|
id: box
|
|
width: 320
|
|
height: 480
|
|
|
|
Rectangle {
|
|
id: redSquare
|
|
width: 120
|
|
height: 120
|
|
anchors {
|
|
top: parent.top
|
|
left: parent.left
|
|
margins: 10
|
|
}
|
|
color: "red"
|
|
opacity: redSquareMouseArea.containsPress ? 0.6 : 1.0
|
|
|
|
Text {
|
|
text: qsTr("Click")
|
|
font.pixelSize: 16
|
|
anchors.centerIn: parent
|
|
}
|
|
|
|
MouseArea {
|
|
id: redSquareMouseArea
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
property string buttonID
|
|
|
|
acceptedButtons: Qt.AllButtons
|
|
// Value 'All.Buttons' is eqivalent to:
|
|
// 'Qt::LeftButton | Qt::RightButton | Qt::MiddleButton .... | Qt::ExtraButton24'
|
|
|
|
onEntered: info.text = qsTr('Entered')
|
|
onExited: info.text = qsTr('Exited (pressed=') + pressed + ')'
|
|
|
|
onPressed: (mouse) => {
|
|
if (mouse.button == Qt.LeftButton)
|
|
buttonID = qsTr('LeftButton')
|
|
else if (mouse.button == Qt.RightButton)
|
|
buttonID = qsTr('RightButton')
|
|
else if (mouse.button == Qt.MiddleButton)
|
|
buttonID = qsTr('MiddleButton')
|
|
else if (mouse.button == Qt.BackButton)
|
|
buttonID = qsTr('BackButton')
|
|
else if (mouse.button == Qt.ForwardButton)
|
|
buttonID = qsTr('ForwardButton')
|
|
else if (mouse.button == Qt.TaskButton)
|
|
buttonID = qsTr('TaskButton')
|
|
else if (mouse.button == Qt.ExtraButton4)
|
|
buttonID = qsTr('ExtraButton4')
|
|
else if (mouse.button == Qt.ExtraButton5)
|
|
buttonID = qsTr('ExtraButton5')
|
|
else if (mouse.button == Qt.ExtraButton6)
|
|
buttonID = qsTr('ExtraButton6')
|
|
else if (mouse.button == Qt.ExtraButton7)
|
|
buttonID = qsTr('ExtraButton7')
|
|
else if (mouse.button == Qt.ExtraButton8)
|
|
buttonID = qsTr('ExtraButton8')
|
|
else if (mouse.button == Qt.ExtraButton9)
|
|
buttonID = qsTr('ExtraButton9')
|
|
else if (mouse.button == Qt.ExtraButton10)
|
|
buttonID = qsTr('ExtraButton10')
|
|
else if (mouse.button == Qt.ExtraButton11)
|
|
buttonID = qsTr('ExtraButton11')
|
|
else if (mouse.button == Qt.ExtraButton12)
|
|
buttonID = qsTr('ExtraButton12')
|
|
else if (mouse.button == Qt.ExtraButton13)
|
|
buttonID = qsTr('ExtraButton13')
|
|
else if (mouse.button == Qt.ExtraButton14)
|
|
buttonID = qsTr('ExtraButton14')
|
|
else if (mouse.button == Qt.ExtraButton15)
|
|
buttonID = qsTr('ExtraButton15')
|
|
else if (mouse.button == Qt.ExtraButton16)
|
|
buttonID = qsTr('ExtraButton16')
|
|
else if (mouse.button == Qt.ExtraButton17)
|
|
buttonID = qsTr('ExtraButton17')
|
|
else if (mouse.button == Qt.ExtraButton18)
|
|
buttonID = qsTr('ExtraButton18')
|
|
else if (mouse.button == Qt.ExtraButton19)
|
|
buttonID = qsTr('ExtraButton19')
|
|
else if (mouse.button == Qt.ExtraButton20)
|
|
buttonID = qsTr('ExtraButton20')
|
|
else if (mouse.button == Qt.ExtraButton21)
|
|
buttonID = qsTr('ExtraButton21')
|
|
else if (mouse.button == Qt.ExtraButton22)
|
|
buttonID = qsTr('ExtraButton22')
|
|
else if (mouse.button == Qt.ExtraButton23)
|
|
buttonID = qsTr('ExtraButton23')
|
|
else if (mouse.button == Qt.ExtraButton24)
|
|
buttonID = qsTr('ExtraButton24')
|
|
|
|
info.text = qsTr('Pressed (') + buttonID + qsTr(' shift=')
|
|
+ (mouse.modifiers & Qt.ShiftModifier ? qsTr('true') : qsTr('false')) + ')'
|
|
const posInBox = redSquare.mapToItem(box, mouse.x, mouse.y)
|
|
posInfo.text = + mouse.x + ',' + mouse.y + qsTr(' in square')
|
|
+ ' (' + posInBox.x + ',' + posInBox.y + qsTr(' in window)')
|
|
}
|
|
|
|
onReleased: (mouse) => {
|
|
btn.text = qsTr('Released (isClick=') + mouse.isClick + qsTr(' wasHeld=') + mouse.wasHeld + ')'
|
|
posInfo.text = ''
|
|
}
|
|
|
|
//! [clicks]
|
|
onPressAndHold: btn.text = qsTr('Press and hold')
|
|
onClicked: (mouse) => { btn.text = qsTr('Clicked (wasHeld=') + mouse.wasHeld + ')' }
|
|
onDoubleClicked: btn.text = qsTr('Double clicked')
|
|
//! [clicks]
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: blueSquare
|
|
width: 120
|
|
height: 120
|
|
x: box.width - width - 10
|
|
y: 10 // making this item draggable, so don't use anchors
|
|
color: "blue"
|
|
|
|
Text {
|
|
text: qsTr("Drag")
|
|
font.pixelSize: 16
|
|
color: "white"
|
|
anchors.centerIn: parent
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
//! [drag]
|
|
drag.target: blueSquare
|
|
drag.axis: Drag.XAndYAxis
|
|
drag.minimumX: 0
|
|
drag.maximumX: box.width - parent.width
|
|
drag.minimumY: 0
|
|
drag.maximumY: box.height - parent.width
|
|
//! [drag]
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: info
|
|
anchors{
|
|
bottom: btn.top
|
|
horizontalCenter: parent.horizontalCenter
|
|
margins: 20
|
|
}
|
|
|
|
onTextChanged: console.log(text)
|
|
}
|
|
|
|
Text {
|
|
id: btn
|
|
anchors {
|
|
bottom: posInfo.top
|
|
horizontalCenter: parent.horizontalCenter
|
|
margins: 20
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: posInfo
|
|
anchors {
|
|
bottom: parent.bottom
|
|
horizontalCenter: parent.horizontalCenter
|
|
margins: 20
|
|
}
|
|
}
|
|
}
|