Warning, /plasma/plasma-simplemenu/package/contents/ui/MenuRepresentation.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2014 Weng Xuetian <wengxt@gmail.com> 0003 SPDX-FileCopyrightText: 2013-2017 Eike Hein <hein@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 import QtQuick 2.4 0009 import QtQuick.Layouts 1.1 0010 import QtQuick.Controls 2.12 as QQC2 0011 import org.kde.plasma.plasmoid 2.0 0012 import org.kde.plasma.core 2.0 as PlasmaCore 0013 import org.kde.plasma.components 2.0 as PlasmaComponents 0014 import org.kde.plasma.components 3.0 as PlasmaComponents3 0015 import org.kde.plasma.extras 2.0 as PlasmaExtras 0016 0017 import org.kde.plasma.private.kicker 0.1 as Kicker 0018 0019 PlasmaCore.Dialog { 0020 id: root 0021 0022 objectName: "popupWindow" 0023 flags: Qt.WindowStaysOnTopHint 0024 location: PlasmaCore.Types.Floating 0025 hideOnWindowDeactivate: true 0026 0027 property int iconSize: units.iconSizes.huge 0028 property int cellSize: iconSize + theme.mSize(theme.defaultFont).height 0029 + (2 * units.smallSpacing) 0030 + (2 * Math.max(highlightItemSvg.margins.top + highlightItemSvg.margins.bottom, 0031 highlightItemSvg.margins.left + highlightItemSvg.margins.right)) 0032 property bool searching: (searchField.text != "") 0033 0034 onVisibleChanged: { 0035 if (!visible) { 0036 reset(); 0037 } else { 0038 var pos = popupPosition(width, height); 0039 x = pos.x; 0040 y = pos.y; 0041 requestActivate(); 0042 } 0043 } 0044 0045 onHeightChanged: { 0046 var pos = popupPosition(width, height); 0047 x = pos.x; 0048 y = pos.y; 0049 } 0050 0051 onWidthChanged: { 0052 var pos = popupPosition(width, height); 0053 x = pos.x; 0054 y = pos.y; 0055 } 0056 0057 onSearchingChanged: { 0058 if (searching) { 0059 pageList.model = runnerModel; 0060 paginationBar.model = runnerModel; 0061 } else { 0062 reset(); 0063 } 0064 } 0065 0066 function reset() { 0067 if (!searching) { 0068 if (filterListScrollArea.visible) { 0069 filterList.currentIndex = 0; 0070 } else { 0071 pageList.model = rootModel.modelForRow(0); 0072 paginationBar.model = rootModel.modelForRow(0); 0073 } 0074 } 0075 0076 searchField.text = ""; 0077 0078 pageListScrollArea.focus = true; 0079 pageList.currentIndex = 0; 0080 pageList.currentItem.itemGrid.currentIndex = -1; 0081 } 0082 0083 function popupPosition(width, height) { 0084 var screenAvail = plasmoid.availableScreenRect; 0085 var screenGeom = plasmoid.screenGeometry; 0086 //QtBug - QTBUG-64115 0087 var screen = Qt.rect(screenAvail.x + screenGeom.x, 0088 screenAvail.y + screenGeom.y, 0089 screenAvail.width, 0090 screenAvail.height); 0091 0092 var offset = units.gridUnit; 0093 0094 // Fall back to bottom-left of screen area when the applet is on the desktop or floating. 0095 var x = offset; 0096 var y = screen.height - height - offset; 0097 0098 if (plasmoid.location == PlasmaCore.Types.BottomEdge) { 0099 var horizMidPoint = screen.x + (screen.width / 2); 0100 var appletTopLeft = parent.mapToGlobal(0, 0); 0101 x = (appletTopLeft.x < horizMidPoint) ? screen.x + offset : (screen.x + screen.width) - width - offset; 0102 y = screen.height - height - offset - panelSvg.margins.top; 0103 } else if (plasmoid.location == PlasmaCore.Types.TopEdge) { 0104 var horizMidPoint = screen.x + (screen.width / 2); 0105 var appletBottomLeft = parent.mapToGlobal(0, parent.height); 0106 x = (appletBottomLeft.x < horizMidPoint) ? screen.x + offset : (screen.x + screen.width) - width - offset; 0107 y = parent.height + panelSvg.margins.bottom + offset; 0108 } else if (plasmoid.location == PlasmaCore.Types.LeftEdge) { 0109 var vertMidPoint = screen.y + (screen.height / 2); 0110 var appletTopLeft = parent.mapToGlobal(0, 0); 0111 x = parent.width + panelSvg.margins.right + offset; 0112 y = (appletTopLeft.y < vertMidPoint) ? screen.y + offset : (screen.y + screen.height) - height - offset; 0113 } else if (plasmoid.location == PlasmaCore.Types.RightEdge) { 0114 var vertMidPoint = screen.y + (screen.height / 2); 0115 var appletTopLeft = parent.mapToGlobal(0, 0); 0116 x = appletTopLeft.x - panelSvg.margins.left - offset - width; 0117 y = (appletTopLeft.y < vertMidPoint) ? screen.y + offset : (screen.y + screen.height) - height - offset; 0118 } 0119 0120 return Qt.point(x, y); 0121 } 0122 0123 0124 FocusScope { 0125 Layout.minimumWidth: (cellSize * 6) + Math.max(systemFavoritesGrid.width, filterListScrollArea.width) + units.smallSpacing 0126 Layout.maximumWidth: (cellSize * 6) + Math.max(systemFavoritesGrid.width, filterListScrollArea.width) + units.smallSpacing 0127 Layout.minimumHeight: (cellSize * 4) + searchField.height + paginationBar.height + (2 * units.smallSpacing) 0128 Layout.maximumHeight: (cellSize * 4) + searchField.height + paginationBar.height + (2 * units.smallSpacing) 0129 0130 focus: true 0131 0132 PlasmaExtras.Heading { 0133 id: dummyHeading 0134 0135 visible: false 0136 0137 width: 0 0138 0139 level: 5 0140 } 0141 0142 TextMetrics { 0143 id: headingMetrics 0144 0145 font: dummyHeading.font 0146 } 0147 0148 ActionMenu { 0149 id: actionMenu 0150 0151 onActionClicked: visualParent.actionTriggered(actionId, actionArgument) 0152 0153 onClosed: { 0154 if (pageList.currentItem) { 0155 pageList.currentItem.itemGrid.currentIndex = -1; 0156 } 0157 } 0158 } 0159 0160 ColumnLayout { 0161 anchors.fill: parent 0162 0163 PlasmaExtras.PlasmoidHeading { 0164 leftPadding: 0 0165 rightPadding: 0 0166 0167 contentItem: RowLayout { 0168 PlasmaComponents3.TextField { 0169 id: searchField 0170 0171 Layout.fillWidth: true 0172 0173 placeholderText: i18n("Search...") 0174 0175 onTextChanged: { 0176 runnerModel.query = text; 0177 } 0178 0179 Keys.onPressed: { 0180 if (event.key == Qt.Key_Down) { 0181 event.accepted = true; 0182 pageList.currentItem.itemGrid.tryActivate(0, 0); 0183 } else if (event.key == Qt.Key_Right) { 0184 if (cursorPosition == length) { 0185 event.accepted = true; 0186 0187 if (pageList.currentItem.itemGrid.currentIndex == -1) { 0188 pageList.currentItem.itemGrid.tryActivate(0, 0); 0189 } else { 0190 pageList.currentItem.itemGrid.tryActivate(0, 1); 0191 } 0192 } 0193 } else if (event.key == Qt.Key_Return || event.key == Qt.Key_Enter) { 0194 if (text != "" && pageList.currentItem.itemGrid.count > 0) { 0195 event.accepted = true; 0196 pageList.currentItem.itemGrid.tryActivate(0, 0); 0197 pageList.currentItem.itemGrid.model.trigger(0, "", null); 0198 root.visible = false; 0199 } 0200 } else if (event.key == Qt.Key_Tab) { 0201 event.accepted = true; 0202 systemFavoritesGrid.tryActivate(0, 0); 0203 } else if (event.key == Qt.Key_Backtab) { 0204 event.accepted = true; 0205 0206 if (!searching) { 0207 filterList.forceActiveFocus(); 0208 } else { 0209 systemFavoritesGrid.tryActivate(0, 0); 0210 } 0211 } 0212 } 0213 0214 function backspace() { 0215 if (!root.visible) { 0216 return; 0217 } 0218 0219 focus = true; 0220 text = text.slice(0, -1); 0221 } 0222 0223 function appendText(newText) { 0224 if (!root.visible) { 0225 return; 0226 } 0227 0228 focus = true; 0229 text = text + newText; 0230 } 0231 } 0232 0233 QQC2.ToolSeparator { 0234 Layout.fillHeight: true 0235 } 0236 0237 Item { 0238 implicitWidth: plasmoid.configuration.showFilterList ? filterListScrollArea.Layout.preferredWidth : systemFavoritesGrid.cellWidth * 4 0239 implicitHeight: systemFavoritesGrid.cellHeight 0240 0241 ItemGridView { 0242 id: systemFavoritesGrid 0243 0244 anchors.horizontalCenter: parent.horizontalCenter 0245 0246 cellWidth: searchField.height 0247 cellHeight: searchField.height 0248 height: cellHeight 0249 width: cellWidth * count 0250 0251 iconSize: height - units.smallSpacing 0252 0253 horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff 0254 verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff 0255 0256 dragEnabled: true 0257 showLabels: false 0258 0259 model: systemFavorites 0260 0261 onCurrentIndexChanged: { 0262 focus = true; 0263 } 0264 0265 onKeyNavLeft: { 0266 currentIndex = -1; 0267 searchField.focus = true; 0268 } 0269 0270 onKeyNavDown: { 0271 pageListScrollArea.focus = true; 0272 0273 if (pageList.currentItem) { 0274 pageList.currentItem.itemGrid.tryActivate(0, 0); 0275 } 0276 } 0277 0278 Keys.onPressed: { 0279 if (event.key == Qt.Key_Tab) { 0280 event.accepted = true; 0281 0282 currentIndex = -1; 0283 0284 if (!searching) { 0285 filterList.forceActiveFocus(); 0286 } else { 0287 searchField.focus = true; 0288 } 0289 } else if (event.key == Qt.Key_Backtab) { 0290 event.accepted = true; 0291 currentIndex = -1; 0292 searchField.focus = true; 0293 } 0294 } 0295 } 0296 } 0297 } 0298 } 0299 0300 RowLayout { 0301 Layout.fillWidth: true 0302 Layout.fillHeight: true 0303 0304 ColumnLayout { 0305 Layout.fillWidth: true 0306 Layout.fillHeight: true 0307 0308 PlasmaExtras.ScrollArea { 0309 id: pageListScrollArea 0310 0311 Layout.fillWidth: true 0312 Layout.fillHeight: true 0313 0314 focus: true 0315 frameVisible: false 0316 0317 horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff 0318 verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff 0319 0320 ListView { 0321 id: pageList 0322 0323 anchors.fill: parent 0324 0325 orientation: Qt.Horizontal 0326 snapMode: ListView.SnapOneItem 0327 0328 currentIndex: 0 0329 0330 model: rootModel.modelForRow(0) 0331 0332 onCurrentIndexChanged: { 0333 positionViewAtIndex(currentIndex, ListView.Contain); 0334 } 0335 0336 onCurrentItemChanged: { 0337 if (!currentItem) { 0338 return; 0339 } 0340 0341 currentItem.itemGrid.focus = true; 0342 } 0343 0344 onModelChanged: { 0345 currentIndex = 0; 0346 } 0347 0348 onFlickingChanged: { 0349 if (!flicking) { 0350 var pos = mapToItem(contentItem, root.width / 2, root.height / 2); 0351 var itemIndex = indexAt(pos.x, pos.y); 0352 currentIndex = itemIndex; 0353 } 0354 } 0355 0356 function cycle() { 0357 enabled = false; 0358 enabled = true; 0359 } 0360 0361 function activateNextPrev(next) { 0362 if (next) { 0363 var newIndex = pageList.currentIndex + 1; 0364 0365 if (newIndex == pageList.count) { 0366 newIndex = 0; 0367 } 0368 0369 pageList.currentIndex = newIndex; 0370 } else { 0371 var newIndex = pageList.currentIndex - 1; 0372 0373 if (newIndex < 0) { 0374 newIndex = (pageList.count - 1); 0375 } 0376 0377 pageList.currentIndex = newIndex; 0378 } 0379 } 0380 0381 delegate: Item { 0382 width: cellSize * 6 0383 height: cellSize * 4 0384 0385 property Item itemGrid: gridView 0386 0387 ItemGridView { 0388 id: gridView 0389 0390 anchors.horizontalCenter: parent.horizontalCenter 0391 width: cellSize * 6 0392 height: cellSize * 4 0393 0394 cellWidth: cellSize 0395 cellHeight: cellSize 0396 0397 horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff 0398 verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff 0399 0400 dragEnabled: (index == 0) 0401 0402 model: searching ? runnerModel.modelForRow(index) : rootModel.modelForRow(filterListScrollArea.visible ? filterList.currentIndex : 0).modelForRow(index) 0403 0404 onCurrentIndexChanged: { 0405 if (currentIndex != -1 && !searching) { 0406 pageListScrollArea.focus = true; 0407 focus = true; 0408 } 0409 } 0410 0411 onCountChanged: { 0412 if (searching && index == 0) { 0413 currentIndex = 0; 0414 } 0415 } 0416 0417 onKeyNavUp: { 0418 currentIndex = -1; 0419 searchField.focus = true; 0420 } 0421 0422 onKeyNavRight: { 0423 var newIndex = pageList.currentIndex + 1; 0424 var cRow = currentRow(); 0425 0426 if (newIndex == pageList.count) { 0427 newIndex = 0; 0428 } 0429 0430 pageList.currentIndex = newIndex; 0431 pageList.currentItem.itemGrid.tryActivate(cRow, 0); 0432 } 0433 0434 onKeyNavLeft: { 0435 var newIndex = pageList.currentIndex - 1; 0436 var cRow = currentRow(); 0437 0438 if (newIndex < 0) { 0439 newIndex = (pageList.count - 1); 0440 } 0441 0442 pageList.currentIndex = newIndex; 0443 pageList.currentItem.itemGrid.tryActivate(cRow, 5); 0444 } 0445 } 0446 0447 Kicker.WheelInterceptor { 0448 anchors.fill: parent 0449 z: 1 0450 0451 property int wheelDelta: 0 0452 0453 function scrollByWheel(wheelDelta, eventDelta) { 0454 // magic number 120 for common "one click" 0455 // See: http://qt-project.org/doc/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop 0456 wheelDelta += eventDelta; 0457 0458 var increment = 0; 0459 0460 while (wheelDelta >= 120) { 0461 wheelDelta -= 120; 0462 increment++; 0463 } 0464 0465 while (wheelDelta <= -120) { 0466 wheelDelta += 120; 0467 increment--; 0468 } 0469 0470 while (increment != 0) { 0471 pageList.activateNextPrev(increment < 0); 0472 increment += (increment < 0) ? 1 : -1; 0473 } 0474 0475 return wheelDelta; 0476 } 0477 0478 onWheelMoved: { 0479 wheelDelta = scrollByWheel(wheelDelta, delta.y); 0480 } 0481 } 0482 } 0483 } 0484 } 0485 0486 ListView { 0487 id: paginationBar 0488 0489 Layout.alignment: Qt.AlignHCenter 0490 0491 width: model.count * units.iconSizes.small 0492 height: units.iconSizes.small 0493 0494 orientation: Qt.Horizontal 0495 0496 model: rootModel.modelForRow(0) 0497 0498 delegate: Item { 0499 width: units.iconSizes.small 0500 height: width 0501 0502 Rectangle { 0503 id: pageDelegate 0504 0505 anchors { 0506 horizontalCenter: parent.horizontalCenter 0507 verticalCenter: parent.verticalCenter 0508 } 0509 0510 width: parent.width / 2 0511 height: width 0512 0513 property bool isCurrent: (pageList.currentIndex == index) 0514 0515 radius: width / 2 0516 0517 color: theme.textColor 0518 opacity: 0.5 0519 0520 Behavior on width { SmoothedAnimation { duration: units.longDuration; velocity: 0.01 } } 0521 Behavior on opacity { SmoothedAnimation { duration: units.longDuration; velocity: 0.01 } } 0522 0523 states: [ 0524 State { 0525 when: pageDelegate.isCurrent 0526 PropertyChanges { target: pageDelegate; width: parent.width - (units.smallSpacing * 2) } 0527 PropertyChanges { target: pageDelegate; opacity: 0.8 } 0528 } 0529 ] 0530 } 0531 0532 MouseArea { 0533 anchors.fill: parent 0534 onClicked: pageList.currentIndex = index; 0535 0536 property int wheelDelta: 0 0537 0538 function scrollByWheel(wheelDelta, eventDelta) { 0539 // magic number 120 for common "one click" 0540 // See: http://qt-project.org/doc/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop 0541 wheelDelta += eventDelta; 0542 0543 var increment = 0; 0544 0545 while (wheelDelta >= 120) { 0546 wheelDelta -= 120; 0547 increment++; 0548 } 0549 0550 while (wheelDelta <= -120) { 0551 wheelDelta += 120; 0552 increment--; 0553 } 0554 0555 while (increment != 0) { 0556 pageList.activateNextPrev(increment < 0); 0557 increment += (increment < 0) ? 1 : -1; 0558 } 0559 0560 return wheelDelta; 0561 } 0562 0563 onWheel: { 0564 wheelDelta = scrollByWheel(wheelDelta, wheel.angleDelta.y); 0565 } 0566 } 0567 } 0568 } 0569 } 0570 0571 QQC2.ToolSeparator { 0572 Layout.fillHeight: true 0573 } 0574 0575 PlasmaExtras.ScrollArea { 0576 id: filterListScrollArea 0577 0578 property int desiredWidth: 0 0579 0580 Layout.fillHeight: true 0581 Layout.preferredWidth: plasmoid.configuration.showFilterList ? desiredWidth : 0 0582 0583 enabled: !searching 0584 visible: plasmoid.configuration.showFilterList 0585 0586 property alias currentIndex: filterList.currentIndex 0587 0588 opacity: root.visible ? (searching ? 0.30 : 1.0) : 0.3 0589 0590 Behavior on opacity { SmoothedAnimation { duration: units.longDuration; velocity: 0.01 } } 0591 0592 verticalScrollBarPolicy: (opacity == 1.0) ? Qt.ScrollBarAsNeeded : Qt.ScrollBarAlwaysOff 0593 0594 onEnabledChanged: { 0595 if (!enabled) { 0596 filterList.currentIndex = -1; 0597 } 0598 } 0599 0600 ListView { 0601 id: filterList 0602 0603 focus: true 0604 0605 property bool allApps: false 0606 property int eligibleWidth: width 0607 property int hItemMargins: highlightItemSvg.margins.left + highlightItemSvg.margins.right 0608 model: filterListScrollArea.visible ? rootModel : null 0609 0610 boundsBehavior: Flickable.StopAtBounds 0611 snapMode: ListView.SnapToItem 0612 spacing: 0 0613 keyNavigationWraps: true 0614 0615 delegate: MouseArea { 0616 id: item 0617 0618 property int textWidth: label.contentWidth 0619 property int mouseCol 0620 0621 width: parent.width 0622 height: label.paintedHeight + highlightItemSvg.margins.top + highlightItemSvg.margins.bottom 0623 0624 Accessible.role: Accessible.MenuItem 0625 Accessible.name: model.display 0626 0627 acceptedButtons: Qt.LeftButton 0628 0629 hoverEnabled: true 0630 0631 onContainsMouseChanged: { 0632 if (!containsMouse) { 0633 updateCurrentItemTimer.stop(); 0634 } 0635 } 0636 0637 onPressed: { 0638 if (!plasmoid.configuration.switchCategoriesOnHover) { 0639 ListView.view.currentIndex = index; 0640 } 0641 } 0642 0643 onPositionChanged: { // Lazy menu implementation. 0644 if (!plasmoid.configuration.switchCategoriesOnHover) { 0645 return; 0646 } 0647 0648 mouseCol = mouse.x; 0649 0650 if (index == ListView.view.currentIndex) { 0651 updateCurrentItem(); 0652 } else if ((index == ListView.view.currentIndex - 1) && mouse.y < (item.height - 6) 0653 || (index == ListView.view.currentIndex + 1) && mouse.y > 5) { 0654 0655 if (mouse.x > ListView.view.eligibleWidth - 5) { 0656 updateCurrentItem(); 0657 } 0658 } else if (mouse.x > ListView.view.eligibleWidth) { 0659 updateCurrentItem(); 0660 } 0661 0662 updateCurrentItemTimer.start(); 0663 } 0664 0665 function updateCurrentItem() { 0666 ListView.view.currentIndex = index; 0667 ListView.view.eligibleWidth = Math.min(width, mouseCol); 0668 } 0669 0670 Timer { 0671 id: updateCurrentItemTimer 0672 0673 interval: 50 0674 repeat: false 0675 0676 onTriggered: parent.updateCurrentItem() 0677 } 0678 0679 PlasmaExtras.Heading { 0680 id: label 0681 0682 anchors { 0683 fill: parent 0684 leftMargin: highlightItemSvg.margins.left 0685 rightMargin: highlightItemSvg.margins.right 0686 } 0687 0688 elide: Text.ElideRight 0689 wrapMode: Text.NoWrap 0690 opacity: 1.0 0691 0692 level: 5 0693 0694 text: model.display 0695 } 0696 } 0697 0698 highlight: PlasmaComponents.Highlight { 0699 anchors { 0700 top: filterList.currentItem ? filterList.currentItem.top : undefined 0701 left: filterList.currentItem ? filterList.currentItem.left : undefined 0702 bottom: filterList.currentItem ? filterList.currentItem.bottom : undefined 0703 } 0704 0705 opacity: filterListScrollArea.focus ? 1.0 : 0.7 0706 0707 width: (highlightItemSvg.margins.left 0708 + filterList.currentItem.textWidth 0709 + highlightItemSvg.margins.right 0710 + units.smallSpacing) 0711 0712 visible: filterList.currentItem 0713 } 0714 0715 highlightFollowsCurrentItem: false 0716 highlightMoveDuration: 0 0717 highlightResizeDuration: 0 0718 0719 onCurrentIndexChanged: applyFilter() 0720 0721 onCountChanged: { 0722 var width = 0; 0723 0724 for (var i = 0; i < rootModel.count; ++i) { 0725 headingMetrics.text = rootModel.labelForRow(i); 0726 0727 if (headingMetrics.width > width) { 0728 width = headingMetrics.width; 0729 } 0730 } 0731 0732 filterListScrollArea.desiredWidth = width + hItemMargins + units.gridUnit; 0733 } 0734 0735 function applyFilter() { 0736 if (filterListScrollArea.visible && !searching && currentIndex >= 0) { 0737 pageList.model = rootModel.modelForRow(currentIndex); 0738 paginationBar.model = pageList.model; 0739 } 0740 } 0741 0742 Keys.onPressed: { 0743 if (event.key == Qt.Key_left) { 0744 event.accepted = true; 0745 0746 var currentRow = Math.max(0, Math.ceil(currentItem.y / cellSize) - 1); 0747 0748 if (pageList.currentItem) { 0749 pageList.currentItem.itemGrid.tryActivate(currentRow, 5); 0750 } 0751 } else if (event.key == Qt.Key_Tab) { 0752 event.accepted = true; 0753 searchField.focus = true; 0754 } else if (event.key == Qt.Key_Backtab) { 0755 event.accepted = true; 0756 systemFavoritesGrid.tryActivate(0, 0); 0757 } 0758 } 0759 } 0760 } 0761 } 0762 } 0763 0764 Keys.onPressed: { 0765 if (event.key == Qt.Key_Escape) { 0766 event.accepted = true; 0767 0768 if (searching) { 0769 reset(); 0770 } else { 0771 root.visible = false; 0772 } 0773 0774 return; 0775 } 0776 0777 if (searchField.focus) { 0778 return; 0779 } 0780 0781 if (event.key == Qt.Key_Backspace) { 0782 event.accepted = true; 0783 searchField.backspace(); 0784 } else if (event.key == Qt.Key_Tab || event.key == Qt.Key_Backtab) { 0785 if (pageListScrollArea.focus == true && pageList.currentItem.itemGrid.currentIndex == -1) { 0786 event.accepted = true; 0787 pageList.currentItem.itemGrid.tryActivate(0, 0); 0788 } 0789 } else if (event.text != "") { 0790 event.accepted = true; 0791 searchField.appendText(event.text); 0792 } 0793 } 0794 0795 } 0796 0797 Component.onCompleted: { 0798 kicker.reset.connect(reset); 0799 dragHelper.dropped.connect(pageList.cycle); 0800 } 0801 }