Shortcuts you invent, rules you write, gestures you own - all still just data
Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
// One per-application window rule.
|
||||
//
|
||||
// Three lines rather than SettingRow's two, and that third line is the point:
|
||||
// the rule was chosen as behaviors -- float, center, workspace 4 -- and it is
|
||||
// written to the compositor as a rule. Showing only the friendly sentence makes
|
||||
// the card a black box; showing only the rule makes it a config file with a
|
||||
// nicer font. Both, with the compositor line in mono underneath, is how
|
||||
// somebody learns what the ticks actually did.
|
||||
//
|
||||
// The rule text and the sentence both come from WindowRules, which is the one
|
||||
// place that knows what hypr/rules.lua emits.
|
||||
|
||||
import QtQuick
|
||||
import qs.config
|
||||
import qs.services
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
required property var rule
|
||||
property bool divider: true
|
||||
|
||||
signal editRequested
|
||||
signal removeRequested
|
||||
|
||||
readonly property string windowClass: String(root.rule?.class ?? "")
|
||||
readonly property int openNow: WindowRules.matchesOpen(root.windowClass)
|
||||
|
||||
width: parent ? parent.width : 620
|
||||
implicitHeight: Math.max(64, copy.implicitHeight + 22)
|
||||
|
||||
Column {
|
||||
id: copy
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: trailing.left
|
||||
anchors.rightMargin: 16
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 3
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
text: String(root.rule?.label ?? root.windowClass)
|
||||
color: Theme.fg
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSize
|
||||
font.weight: Font.Medium
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
text: WindowRules.summaryFor(root.rule)
|
||||
+ (root.openNow === 0
|
||||
? ""
|
||||
: (root.openNow === 1
|
||||
? " · 1 window open now"
|
||||
: " · " + root.openNow + " windows open now"))
|
||||
color: Theme.fgDim
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
text: WindowRules.ruleLineFor(root.rule)
|
||||
color: Theme.fgMuted
|
||||
font.family: Theme.fontMono
|
||||
font.pixelSize: Math.max(9, Theme.fontSizeSmall - 1)
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: trailing
|
||||
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: removeConfirm.armed ? 250 : 170
|
||||
height: 32
|
||||
|
||||
Row {
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 8
|
||||
|
||||
SettingsButton {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: "Edit"
|
||||
enabled: !WindowRules.reloading
|
||||
onClicked: root.editRequested()
|
||||
}
|
||||
|
||||
ConfirmAction {
|
||||
id: removeConfirm
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
actionId: "window-rule-remove:" + root.windowClass
|
||||
armText: "Remove…"
|
||||
confirmText: "Remove it"
|
||||
enabled: !WindowRules.reloading
|
||||
onConfirmed: root.removeRequested()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.left: copy.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
height: 1
|
||||
visible: root.divider
|
||||
color: Theme.alpha(Theme.fg, 0.065)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user