mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 00:47:22 +00:00
Use Window color roles for app drawer and overlay scrims, and update\ndock keyboard navigation focus paths. Extend folio and convergence\nregression checks to lock in the new theme and navigation behavior.
132 lines
4.6 KiB
QML
132 lines
4.6 KiB
QML
// SPDX-FileCopyrightText: 2021-2023 Devin Lin <devin@kde.org>
|
|
// SPDX-License-Identifier: LGPL-2.0-or-later
|
|
|
|
import QtQuick
|
|
import QtQuick.Controls as QQC2
|
|
import QtQuick.Layouts
|
|
|
|
import org.kde.kirigami as Kirigami
|
|
|
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
import org.kde.plasma.private.mobileshell as MobileShell
|
|
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
|
|
import './delegate'
|
|
|
|
Item {
|
|
id: root
|
|
property Folio.HomeScreen folio
|
|
|
|
// The AppDrawer owns a Window colorset so mobile and convergence use the
|
|
// same Shift theme roles.
|
|
|
|
function addSearchText(text: string) {
|
|
searchField.text += text;
|
|
}
|
|
|
|
function clearSearchText(): void {
|
|
searchField.text = '';
|
|
}
|
|
|
|
// Request to not focus on the search bar
|
|
signal releaseFocusRequested()
|
|
|
|
onFocusChanged: {
|
|
if (focus) {
|
|
searchField.focus = true;
|
|
}
|
|
}
|
|
|
|
// Keyboard navigation
|
|
Keys.onPressed: (event) => {
|
|
if (event.key === Qt.Key_Escape || event.key === Qt.Key_Back) {
|
|
root.releaseFocusRequested();
|
|
event.accepted = true;
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
anchors.topMargin: Kirigami.Units.largeSpacing
|
|
anchors.leftMargin: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
|
|
anchors.rightMargin: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
|
|
anchors.fill: parent
|
|
|
|
QQC2.TextField {
|
|
id: searchField
|
|
onTextChanged: folio.ApplicationListSearchModel.setFilterFixedString(text)
|
|
Layout.maximumWidth: Kirigami.Units.gridUnit * 30
|
|
Layout.alignment: Qt.AlignHCenter
|
|
leftPadding: Kirigami.Units.iconSizes.small + Kirigami.Units.largeSpacing * 2
|
|
rightPadding: clearSearchArea.visible ? clearSearchArea.width + Kirigami.Units.largeSpacing : Kirigami.Units.largeSpacing
|
|
|
|
background: Rectangle {
|
|
radius: Kirigami.Units.cornerRadius
|
|
color: Qt.rgba(Kirigami.Theme.textColor.r, Kirigami.Theme.textColor.g,
|
|
Kirigami.Theme.textColor.b,
|
|
(searchField.hovered || searchField.focus) ? 0.2 : 0.1)
|
|
|
|
Behavior on color { MobileShell.MotionColorAnimation { type: MobileShell.Motion.EffectsFast } }
|
|
}
|
|
|
|
topPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
|
|
bottomPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
|
|
Layout.fillWidth: true
|
|
|
|
horizontalAlignment: QQC2.TextField.AlignHCenter
|
|
placeholderText: i18nc("@info:placeholder", "Search applications…")
|
|
placeholderTextColor: Kirigami.Theme.disabledTextColor
|
|
color: Kirigami.Theme.textColor
|
|
|
|
font.weight: Font.Bold
|
|
|
|
Kirigami.Icon {
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Kirigami.Units.largeSpacing
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: Kirigami.Units.iconSizes.small
|
|
height: width
|
|
source: "search"
|
|
isMask: true
|
|
color: Kirigami.Theme.textColor
|
|
opacity: 0.65
|
|
}
|
|
|
|
MouseArea {
|
|
id: clearSearchArea
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Kirigami.Units.smallSpacing
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: Kirigami.Units.iconSizes.smallMedium
|
|
height: width
|
|
visible: searchField.text.length > 0
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
|
|
onClicked: searchField.clear()
|
|
|
|
Kirigami.Icon {
|
|
anchors.centerIn: parent
|
|
width: Kirigami.Units.iconSizes.small
|
|
height: width
|
|
source: "window-close-symbolic"
|
|
isMask: true
|
|
color: Kirigami.Theme.textColor
|
|
opacity: clearSearchArea.containsMouse ? 0.9 : 0.65
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: folio.HomeScreenState
|
|
function onViewStateChanged(): void {
|
|
if (folio.HomeScreenState.viewState !== Folio.HomeScreenState.AppDrawerView) {
|
|
// Reset search field if the app drawer is not shown
|
|
if (searchField.text !== '') {
|
|
searchField.text = '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|