Create Alt+tab window, refactor sortedDesktopApplications so they are inside a ListModel instead of a Map()
This commit is contained in:
122
Widgets/WindowSwitcher.qml
Normal file
122
Widgets/WindowSwitcher.qml
Normal file
@@ -0,0 +1,122 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Widgets
|
||||
import qs.Services
|
||||
import qs.Common.Styled
|
||||
import qs.Common
|
||||
import Quickshell.Wayland
|
||||
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
anchors {
|
||||
left: true
|
||||
bottom: true
|
||||
right: true
|
||||
top: true
|
||||
}
|
||||
|
||||
implicitWidth: screen.width
|
||||
// implicitWidth: 400
|
||||
implicitHeight: screen.height
|
||||
color: "transparent"
|
||||
visible: true
|
||||
signal clear
|
||||
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: root.clear()
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: notifWindow
|
||||
|
||||
anchors.centerIn:parent
|
||||
implicitHeight: 300
|
||||
implicitWidth: listview.contentWidth
|
||||
|
||||
color: "transparent"
|
||||
|
||||
ListView {
|
||||
id: listview
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
clip: true
|
||||
spacing: 5
|
||||
orientation: ListView.Horizontal
|
||||
|
||||
focus:true
|
||||
highlight: Rectangle { color: "black"; radius: 5 }
|
||||
highlightFollowsCurrentItem: true
|
||||
keyNavigationEnabled: false
|
||||
|
||||
Keys.onPressed: (event) => {
|
||||
switch (event.key) {
|
||||
case Qt.Key_L: // move down
|
||||
case Qt.Key_D:
|
||||
if (currentIndex < count - 1)
|
||||
currentIndex++
|
||||
event.accepted = true
|
||||
break
|
||||
case Qt.Key_H: // move up
|
||||
case Qt.Key_A:
|
||||
if (currentIndex > 0)
|
||||
currentIndex--
|
||||
event.accepted = true
|
||||
break
|
||||
case Qt.Key_Return:
|
||||
currentItem.activate()
|
||||
event.accepted = true
|
||||
break
|
||||
case Qt.Key_Escape:
|
||||
root.clear()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
model: HyprlandService.sortedDesktopApplicationsModel
|
||||
|
||||
delegate: Rectangle {
|
||||
required property var modelData
|
||||
|
||||
implicitHeight: 300
|
||||
implicitWidth: 300
|
||||
|
||||
color: "transparent"
|
||||
|
||||
function activate() {
|
||||
modelData.topLevel.wayland.activate()
|
||||
root.clear()
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: activate()
|
||||
}
|
||||
|
||||
ScreencopyView {
|
||||
anchors.fill: parent
|
||||
live: true
|
||||
captureSource: modelData.topLevel.wayland
|
||||
}
|
||||
|
||||
IconImage {
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
property int workspaceId: modelData.topLevel.workspace.id
|
||||
property var desktopEntry: modelData.desktopEntry
|
||||
|
||||
width: 30
|
||||
height: 30
|
||||
source: (modelData && desktopEntry.icon) ? Quickshell.iconPath(desktopEntry.icon, 1) : "aaa"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user