feat: non persistent bar option
This commit is contained in:
parent
938b2f1f71
commit
6222f969d4
6 changed files with 109 additions and 3 deletions
|
|
@ -1,6 +1,10 @@
|
|||
import Quickshell.Io
|
||||
|
||||
JsonObject {
|
||||
property bool persistent: true
|
||||
property bool showOnHover: true
|
||||
property int dragThreshold: 20
|
||||
|
||||
property JsonObject sizes: JsonObject {
|
||||
property int innerHeight: 30
|
||||
property int windowPreviewSize: 400
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import "root:/widgets"
|
||||
import "root:/services"
|
||||
import "root:/config"
|
||||
import "root:/modules/bar/popouts" as BarPopouts
|
||||
import "popouts" as BarPopouts
|
||||
import "components"
|
||||
import "components/workspaces"
|
||||
import Quickshell
|
||||
|
|
|
|||
78
modules/bar/BarWrapper.qml
Normal file
78
modules/bar/BarWrapper.qml
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
pragma ComponentBehavior: Bound
|
||||
|
||||
import "root:/services"
|
||||
import "root:/config"
|
||||
import "popouts" as BarPopouts
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
required property ShellScreen screen
|
||||
required property PersistentProperties visibilities
|
||||
required property BarPopouts.Wrapper popouts
|
||||
|
||||
readonly property int exclusiveZone: Config.bar.persistent || (visibilities.bar && !isHovered) ? content.implicitWidth : Config.border.thickness
|
||||
property bool isHovered
|
||||
|
||||
function checkPopout(y: real): void {
|
||||
content.item?.checkPopout(y);
|
||||
}
|
||||
|
||||
visible: width > Config.border.thickness
|
||||
implicitWidth: Config.border.thickness
|
||||
implicitHeight: content.implicitHeight
|
||||
|
||||
states: State {
|
||||
name: "visible"
|
||||
when: Config.bar.persistent || root.visibilities.bar
|
||||
|
||||
PropertyChanges {
|
||||
root.implicitWidth: content.implicitWidth
|
||||
}
|
||||
}
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
from: ""
|
||||
to: "visible"
|
||||
|
||||
NumberAnimation {
|
||||
target: root
|
||||
property: "implicitWidth"
|
||||
duration: Appearance.anim.durations.expressiveDefaultSpatial
|
||||
easing.type: Easing.BezierSpline
|
||||
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
|
||||
}
|
||||
},
|
||||
Transition {
|
||||
from: "visible"
|
||||
to: ""
|
||||
|
||||
NumberAnimation {
|
||||
target: root
|
||||
property: "implicitWidth"
|
||||
duration: Appearance.anim.durations.normal
|
||||
easing.type: Easing.BezierSpline
|
||||
easing.bezierCurve: Appearance.anim.curves.emphasized
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Loader {
|
||||
id: content
|
||||
|
||||
Component.onCompleted: active = Qt.binding(() => root.visibilities.bar || root.visible)
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
|
||||
sourceComponent: Bar {
|
||||
screen: root.screen
|
||||
visibilities: root.visibilities
|
||||
popouts: root.popouts
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -107,6 +107,7 @@ Variants {
|
|||
PersistentProperties {
|
||||
id: visibilities
|
||||
|
||||
property bool bar
|
||||
property bool osd
|
||||
property bool session
|
||||
property bool launcher
|
||||
|
|
@ -132,9 +133,12 @@ Variants {
|
|||
}
|
||||
}
|
||||
|
||||
Bar {
|
||||
BarWrapper {
|
||||
id: bar
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
screen: scope.modelData
|
||||
visibilities: visibilities
|
||||
popouts: panels.popouts
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ Scope {
|
|||
|
||||
ExclusionZone {
|
||||
anchors.left: true
|
||||
exclusiveZone: root.bar.implicitWidth
|
||||
exclusiveZone: root.bar.exclusiveZone
|
||||
}
|
||||
|
||||
ExclusionZone {
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ MouseArea {
|
|||
visibilities.utilities = false;
|
||||
}
|
||||
popouts.hasCurrent = false;
|
||||
|
||||
if (bar.isHovered && Config.bar.showOnHover)
|
||||
visibilities.bar = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -67,6 +70,23 @@ MouseArea {
|
|||
const x = event.x;
|
||||
const y = event.y;
|
||||
|
||||
// Show bar in non-exclusive mode on hover
|
||||
if (!visibilities.bar && Config.bar.showOnHover && x < bar.implicitWidth) {
|
||||
visibilities.bar = true;
|
||||
bar.isHovered = true;
|
||||
}
|
||||
|
||||
// Show/hide bar on drag
|
||||
if (pressed && dragStart.x < bar.implicitWidth) {
|
||||
const dragX = x - dragStart.x;
|
||||
if (dragX > Config.bar.dragThreshold) {
|
||||
visibilities.bar = true;
|
||||
bar.isHovered = false;
|
||||
} else if (!bar.isHovered && dragX < -Config.bar.dragThreshold) {
|
||||
visibilities.bar = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Show osd on hover
|
||||
const showOsd = inRightPanel(panels.osd, x, y);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue