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
|
import Quickshell.Io
|
||||||
|
|
||||||
JsonObject {
|
JsonObject {
|
||||||
|
property bool persistent: true
|
||||||
|
property bool showOnHover: true
|
||||||
|
property int dragThreshold: 20
|
||||||
|
|
||||||
property JsonObject sizes: JsonObject {
|
property JsonObject sizes: JsonObject {
|
||||||
property int innerHeight: 30
|
property int innerHeight: 30
|
||||||
property int windowPreviewSize: 400
|
property int windowPreviewSize: 400
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import "root:/widgets"
|
import "root:/widgets"
|
||||||
import "root:/services"
|
import "root:/services"
|
||||||
import "root:/config"
|
import "root:/config"
|
||||||
import "root:/modules/bar/popouts" as BarPopouts
|
import "popouts" as BarPopouts
|
||||||
import "components"
|
import "components"
|
||||||
import "components/workspaces"
|
import "components/workspaces"
|
||||||
import Quickshell
|
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 {
|
PersistentProperties {
|
||||||
id: visibilities
|
id: visibilities
|
||||||
|
|
||||||
|
property bool bar
|
||||||
property bool osd
|
property bool osd
|
||||||
property bool session
|
property bool session
|
||||||
property bool launcher
|
property bool launcher
|
||||||
|
|
@ -132,9 +133,12 @@ Variants {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Bar {
|
BarWrapper {
|
||||||
id: bar
|
id: bar
|
||||||
|
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
|
||||||
screen: scope.modelData
|
screen: scope.modelData
|
||||||
visibilities: visibilities
|
visibilities: visibilities
|
||||||
popouts: panels.popouts
|
popouts: panels.popouts
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ Scope {
|
||||||
|
|
||||||
ExclusionZone {
|
ExclusionZone {
|
||||||
anchors.left: true
|
anchors.left: true
|
||||||
exclusiveZone: root.bar.implicitWidth
|
exclusiveZone: root.bar.exclusiveZone
|
||||||
}
|
}
|
||||||
|
|
||||||
ExclusionZone {
|
ExclusionZone {
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,9 @@ MouseArea {
|
||||||
visibilities.utilities = false;
|
visibilities.utilities = false;
|
||||||
}
|
}
|
||||||
popouts.hasCurrent = false;
|
popouts.hasCurrent = false;
|
||||||
|
|
||||||
|
if (bar.isHovered && Config.bar.showOnHover)
|
||||||
|
visibilities.bar = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,6 +70,23 @@ MouseArea {
|
||||||
const x = event.x;
|
const x = event.x;
|
||||||
const y = event.y;
|
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
|
// Show osd on hover
|
||||||
const showOsd = inRightPanel(panels.osd, x, y);
|
const showOsd = inRightPanel(panels.osd, x, y);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue