mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-06-07 19:59:14 -04:00
feat(keybinds): new mango overview workspace pill & keybind updates
This commit is contained in:
@@ -11,6 +11,7 @@ hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notifications toggle"))
|
||||
hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call notepad toggle"))
|
||||
hl.bind("SUPER + Y", hl.dsp.exec_cmd("dms ipc call dankdash wallpaper"))
|
||||
hl.bind("SUPER + TAB", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
||||
hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview"))
|
||||
hl.bind("SUPER + X", hl.dsp.exec_cmd("dms ipc call powermenu toggle"))
|
||||
|
||||
-- === Cheat sheet
|
||||
|
||||
@@ -84,6 +84,9 @@ bind=SUPER,f,togglefullscreen,
|
||||
bind=SUPER,a,togglemaximizescreen,
|
||||
# Toggle Floating
|
||||
bind=SUPER+SHIFT,space,togglefloating,
|
||||
# Toggle Overview
|
||||
bind=SUPER,o,toggleoverview
|
||||
bind=ALT,Tab,toggleoverview
|
||||
# Exit Compositor
|
||||
bind=SUPER+SHIFT,e,quit,
|
||||
|
||||
@@ -174,3 +177,6 @@ bind=SUPER+SHIFT,9,tag,9
|
||||
# 3-finger horizontal swipe: switch between occupied workspaces
|
||||
gesturebind=none,left,3,viewtoleft_have_client
|
||||
gesturebind=none,right,3,viewtoright_have_client
|
||||
# 4-finger vertical swipe: toggle the overview
|
||||
gesturebind=none,up,4,toggleoverview
|
||||
gesturebind=none,down,4,toggleoverview
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
binds {
|
||||
// === System & Overview ===
|
||||
Mod+D repeat=false { toggle-overview; }
|
||||
Mod+O repeat=false { toggle-overview; }
|
||||
Mod+Tab repeat=false { toggle-overview; }
|
||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||
|
||||
|
||||
@@ -945,6 +945,53 @@ Item {
|
||||
spacing: Theme.spacingS
|
||||
flow: isVertical ? Flow.TopToBottom : Flow.LeftToRight
|
||||
|
||||
// mango reports active_tags=0 while the overview is open; surface it as a pill
|
||||
Item {
|
||||
id: overviewPill
|
||||
visible: CompositorService.isMango && MangoService.inOverview
|
||||
width: root.isVertical ? root.widgetHeight : overviewBg.width
|
||||
height: root.isVertical ? overviewBg.height : root.widgetHeight
|
||||
|
||||
readonly property real labelSize: Theme.barTextSize(root.barThickness, root.barConfig?.fontScale, root.barConfig?.maximizeWidgetText)
|
||||
|
||||
Rectangle {
|
||||
id: overviewBg
|
||||
anchors.centerIn: parent
|
||||
width: root.isVertical ? Math.max(root.widgetHeight * 0.7, overviewContent.implicitWidth + Theme.spacingS) : (overviewContent.implicitWidth + Theme.spacingS * 2)
|
||||
height: Math.max(root.widgetHeight * 0.5, overviewContent.implicitHeight + Theme.spacingXS)
|
||||
radius: Theme.cornerRadius
|
||||
color: Theme.withAlpha(Theme.primary, 0.18)
|
||||
|
||||
Row {
|
||||
id: overviewContent
|
||||
anchors.centerIn: parent
|
||||
spacing: Theme.spacingXS
|
||||
|
||||
DankIcon {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
name: "grid_view"
|
||||
size: overviewPill.labelSize + 2
|
||||
color: Theme.primary
|
||||
}
|
||||
|
||||
StyledText {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
visible: !root.isVertical
|
||||
text: I18n.tr("OVERVIEW")
|
||||
color: Theme.primary
|
||||
font.pixelSize: overviewPill.labelSize
|
||||
font.weight: Font.DemiBold
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: Quickshell.execDetached(["mmsg", "dispatch", "toggleoverview"])
|
||||
}
|
||||
}
|
||||
|
||||
Repeater {
|
||||
id: workspaceRepeater
|
||||
model: ScriptModel {
|
||||
|
||||
@@ -33,6 +33,7 @@ Singleton {
|
||||
// tags: [{ tag, state, clients, focused, urgent, layout }] }
|
||||
property var outputs: ({})
|
||||
property string activeOutput: ""
|
||||
readonly property bool inOverview: isOutputInOverview(activeOutput)
|
||||
property int tagCount: 9
|
||||
property var displayScales: ({})
|
||||
property string currentKeyboardLayout: ""
|
||||
@@ -173,6 +174,15 @@ Singleton {
|
||||
return output.tags.filter(tag => tag.state === 1).map(tag => tag.tag);
|
||||
}
|
||||
|
||||
// mango reports active_tags=[0] (no real tag selected) while the overview is open.
|
||||
function isOutputInOverview(outputName) {
|
||||
const output = getOutputState(outputName);
|
||||
if (!output)
|
||||
return false;
|
||||
const at = output.activeTags || [];
|
||||
return at.length === 0 || at.every(t => t === 0);
|
||||
}
|
||||
|
||||
function getTagsWithClients(outputName) {
|
||||
const output = getOutputState(outputName);
|
||||
if (!output || !output.tags)
|
||||
|
||||
Reference in New Issue
Block a user