You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
6.2 KiB
219 lines
6.2 KiB
/******************************************************************** |
|
Copyright 2018 Roman Gilg <subdiff@gmail.com> |
|
|
|
This library is free software; you can redistribute it and/or |
|
modify it under the terms of the GNU Lesser General Public |
|
License as published by the Free Software Foundation; either |
|
version 2.1 of the License, or (at your option) version 3, or any |
|
later version accepted by the membership of KDE e.V. (or its |
|
successor approved by the membership of KDE e.V.), which shall |
|
act as a proxy defined in Section 6 of version 3 of the license. |
|
|
|
This library is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
Lesser General Public License for more details. |
|
|
|
You should have received a copy of the GNU Lesser General Public |
|
License along with this library. If not, see <http://www.gnu.org/licenses/>. |
|
*********************************************************************/ |
|
import QtQuick 2.10 |
|
import QtQuick.Controls 2.0 |
|
import QtQuick.Layouts 1.1 |
|
|
|
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 |
|
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() { |
|
var globalPt = mapToGlobal(x, y); |
|
return Qt.rect(globalPt.x, globalPt.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 |
|
} |
|
} |
|
|
|
}
|
|
|