205 lines
5.4 KiB
QML
205 lines
5.4 KiB
QML
/*
|
|
SPDX-FileCopyrightText: 2018 Roman Gilg <subdiff@gmail.com>
|
|
|
|
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
|
*/
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
|
|
ColumnLayout {
|
|
/* for margins */
|
|
ColumnLayout {
|
|
id: root
|
|
focus: true
|
|
|
|
Layout.margins: 20
|
|
|
|
function lock() {
|
|
org_kde_kwin_tests_pointerconstraints_backend.lockRequest(lockPersChck.checked, root.activRect());
|
|
}
|
|
function confine() {
|
|
org_kde_kwin_tests_pointerconstraints_backend.confineRequest(confPersChck.checked, root.activRect());
|
|
}
|
|
function unlock() {
|
|
org_kde_kwin_tests_pointerconstraints_backend.unlockRequest();
|
|
}
|
|
function unconfine() {
|
|
org_kde_kwin_tests_pointerconstraints_backend.unconfineRequest();
|
|
}
|
|
function hideAndConfine() {
|
|
org_kde_kwin_tests_pointerconstraints_backend.hideAndConfineRequest();
|
|
}
|
|
function undoHideAndConfine() {
|
|
org_kde_kwin_tests_pointerconstraints_backend.undoHideRequest();
|
|
}
|
|
|
|
property bool waylandNative: org_kde_kwin_tests_pointerconstraints_backend.mode === 0
|
|
|
|
Keys.onPressed: {
|
|
if (event.key === Qt.Key_L) {
|
|
root.lock();
|
|
event.accepted = true;
|
|
} else if (event.key === Qt.Key_C) {
|
|
root.confine();
|
|
event.accepted = true;
|
|
} else if (event.key === Qt.Key_K) {
|
|
root.unlock();
|
|
event.accepted = true;
|
|
} else if (event.key === Qt.Key_X) {
|
|
root.unconfine();
|
|
event.accepted = true;
|
|
} else if (event.key === Qt.Key_H) {
|
|
root.hideAndConfine();
|
|
event.accepted = true;
|
|
} else if (event.key === Qt.Key_G) {
|
|
root.undoHideAndConfine();
|
|
event.accepted = true;
|
|
}
|
|
}
|
|
|
|
function activRect() {
|
|
if (fullWindowChck.checked) {
|
|
return Qt.rect(0, 0, -1, -1);
|
|
}
|
|
return activArea.rect();
|
|
}
|
|
|
|
Connections {
|
|
target: org_kde_kwin_tests_pointerconstraints_backend
|
|
function onForceSurfaceCommit() {
|
|
forceCommitRect.visible = true
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: forceCommitRect
|
|
width: 10
|
|
height: 10
|
|
color: "red"
|
|
visible: false
|
|
|
|
Timer {
|
|
interval: 500
|
|
running: forceCommitRect.visible
|
|
repeat: false
|
|
onTriggered: forceCommitRect.visible = false;
|
|
}
|
|
}
|
|
|
|
GridLayout {
|
|
columns: 2
|
|
rowSpacing: 10
|
|
columnSpacing: 10
|
|
|
|
Button {
|
|
id: lockButton
|
|
text: "Lock pointer"
|
|
onClicked: root.lock()
|
|
}
|
|
CheckBox {
|
|
id: lockPersChck
|
|
text: "Persistent lock"
|
|
checked: root.waylandNative
|
|
enabled: root.waylandNative
|
|
}
|
|
Button {
|
|
id: confButton
|
|
text: "Confine pointer"
|
|
onClicked: root.confine()
|
|
}
|
|
CheckBox {
|
|
id: confPersChck
|
|
text: "Persistent confine"
|
|
checked: root.waylandNative
|
|
enabled: root.waylandNative
|
|
}
|
|
Button {
|
|
id: hideConfButton
|
|
text: "Hide and confine pointer"
|
|
onClicked: root.hideAndConfine()
|
|
visible: !root.waylandNative
|
|
}
|
|
CheckBox {
|
|
id: confBeforeHideChck
|
|
text: "Confine first, then hide"
|
|
checked: false
|
|
visible: !root.waylandNative
|
|
}
|
|
}
|
|
|
|
CheckBox {
|
|
id: lockHintChck
|
|
text: "Send position hint on lock"
|
|
checked: root.waylandNative
|
|
enabled: root.waylandNative
|
|
onCheckedChanged: org_kde_kwin_tests_pointerconstraints_backend.lockHint = checked;
|
|
}
|
|
CheckBox {
|
|
id: restrAreaChck
|
|
text: "Restrict input area (not yet implemented)"
|
|
enabled: false
|
|
}
|
|
CheckBox {
|
|
id: fullWindowChck
|
|
text: "Full window area activates"
|
|
checked: !root.waylandNative
|
|
enabled: root.waylandNative
|
|
}
|
|
CheckBox {
|
|
id: errorsChck
|
|
text: "Allow critical errors"
|
|
checked: false
|
|
enabled: root.waylandNative
|
|
onCheckedChanged: org_kde_kwin_tests_pointerconstraints_backend.errorsAllowed = checked;
|
|
}
|
|
|
|
Item {
|
|
width: childrenRect.width
|
|
height: childrenRect.height
|
|
|
|
Rectangle {
|
|
id: activArea
|
|
|
|
width: 400
|
|
height: 200
|
|
|
|
enabled: root.waylandNative && !fullWindowChck.checked
|
|
|
|
function rect() {
|
|
const scenePosition = mapToItem(null, x, y);
|
|
return Qt.rect(scenePosition.x, scenePosition.y, width, height);
|
|
}
|
|
|
|
border.color: enabled ? "black" : "lightgrey"
|
|
border.width: 2
|
|
|
|
Label {
|
|
anchors.top: parent.top
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: "Activation area"
|
|
}
|
|
}
|
|
Button {
|
|
id: unconfButton
|
|
anchors.horizontalCenter: activArea.horizontalCenter
|
|
anchors.verticalCenter: activArea.verticalCenter
|
|
|
|
text: "Unconfine pointer"
|
|
onClicked: root.unconfine()
|
|
}
|
|
}
|
|
|
|
Label {
|
|
text: "Lock: L / Unlock: K"
|
|
}
|
|
Label {
|
|
text: "Confine: C / Unconfine: X"
|
|
}
|
|
Label {
|
|
text: "Hide cursor and confine pointer: H / undo hide: G"
|
|
visible: !root.waylandNative
|
|
}
|
|
}
|
|
|
|
}
|