Compare commits

..

3 Commits

Author SHA1 Message Date
63e360d427 very broken keybinds lol 2026-06-30 15:55:32 +01:00
7a324e6119 fixed forceHide logic so that the bluetooth menu works 2026-06-30 12:03:18 +01:00
8abc848325 weird bluetooth hover thing 2026-06-29 18:57:03 +01:00
9 changed files with 185 additions and 15 deletions

34
Bar.qml
View File

@@ -1,8 +1,9 @@
import QtQuick
import QtQuick.Effects
import QtQuick.Layouts
import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Wayland
import "./Services/"
import "Bar"
import "Color.js" as Colors
@@ -19,6 +20,15 @@ Scope {
required property var modelData
property HyprlandMonitor monitor: Hyprland.monitorFor(modelData)
function refocus() {
if (WlrLayershell == null)
return;
WlrLayershell.keyboardFocus = WlrKeyboardFocus.None;
Qt.callLater(() => {
WlrLayershell.keyboardFocus = WlrKeyboardFocus.Exclusive;
});
}
color: "transparent"
exclusionMode: ExclusionMode.Normal
exclusiveZone: barExclusionZone
@@ -39,6 +49,26 @@ Scope {
}
}
Component.onCompleted: {
if (this.WlrLayershell != null) {
this.WlrLayershell.keyboardFocus = WlrKeyboardFocus.OnDemand;
}
}
Connections {
function onRaiseCancelled() {
win.WlrLayershell.keyboardFocus = WlrKeyboardFocus.OnDemand;
}
function onRaiseRequested() {
// win.WlrLayershell.keyboardFocus = WlrKeyboardFocus.Exclusive;
win.refocus();
}
target: FocusManager
}
anchors {
left: true
right: true

View File

@@ -3,6 +3,7 @@ import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Services.Mpris
import Quickshell.Services.Notifications
import "../Color.js" as Colors
@@ -119,6 +120,23 @@ Container {
root.previousState = "notified";
}
}
},
State {
name: "logout"
PropertyChanges {
root.boxHeight: 90
root.boxRadius: 30
root.boxWidth: 330
root.visibleTopMargin: 20
}
StateChangeScript {
script: {
root.stack.replace(logout);
root.previousState = "logout";
}
}
}
]
@@ -127,6 +145,8 @@ Container {
if (root.state == "notified") {
root.state = "notified";
notificationViewTimer.stop();
} else if (root.state == "logout") {
root.state = "logout";
} else if (MprisManager.getPlaying() == true) {
root.state = "mprisToast";
} else {
@@ -134,6 +154,7 @@ Container {
}
} else {
root.state = "";
FocusManager.exitRaise();
}
}
onLatestNotificationChanged: {
@@ -148,6 +169,32 @@ Container {
root.state == "hovered" ? root.state = "expanded" : undefined;
}
Connections {
function onactivated() {
console.log("some", root.state);
}
target: root.stack
}
Connections {
function onLogoutTriggered() {
if (Hyprland.focusedMonitor == root.exclusiveMonitor) {
root.state = "logout";
}
}
target: IpcManager
}
Connections {
function onRaiseCancelled() {
root.state = "";
}
target: FocusManager
}
Connections {
function onTrackChanged() {
if (Hyprland.focusedMonitor == root.monitor) {
@@ -182,7 +229,6 @@ Container {
onTriggered: {
if (!root.hover.hovered) {
console.log("some");
root.state = "";
}
}
@@ -261,4 +307,10 @@ Container {
}
}
}
Component {
id: logout
Logout {}
}
}

18
Bar/Center/Logout.qml Normal file
View File

@@ -0,0 +1,18 @@
import QtQuick
import "../../Components/"
import "../../Services/"
Item {
CenteredText {
text: "some"
}
Shortcut {
sequence: "Escape"
onActivated: {
console.log("shortcut triggered");
FocusManager.exitRaise();
}
}
}

View File

@@ -10,13 +10,16 @@ import "Bluetooth"
Container {
id: root
property bool shown: false
animOffset: 200
boxColor: Colors.peach
boxHeight: 25
boxWidth: 30
defaultItem: icon
exclusiveToScreen: true
forceHidden: BluetoothManager.getConnected()
forceHidden: !(root.shown || BluetoothManager.getConnected())
hoverableWhenHidden: true
state: ""
states: [
@@ -46,20 +49,43 @@ Container {
StateChangeScript {
script: {
root.stack.replace(expanded);
root.shown = true;
}
}
}
]
hover.onHoveredChanged: hover.hovered == false ? state = "" : undefined
hover.onHoveredChanged: {
if (hover.hovered == false) {
root.state = "";
hoverIntervalTimer.start();
} else {
root.shown = true;
hoverIntervalTimer.start();
}
}
tap.onTapped: state = "expanded"
Timer {
id: hoverIntervalTimer
interval: 500
repeat: false
running: false
onTriggered: {
if (root.hover.hovered == false) {
root.shown = false;
}
}
}
Component {
id: icon
Item {
CenteredText {
text: "󰂱"
text: BluetoothManager.getConnected() == true ? "󰂱" : "󰂲"
}
}
}

View File

@@ -15,21 +15,26 @@ Item {
property double boxRadius: 9
property double boxWidth: 100
readonly property double calculatedTopMargin: {
if (root.exclusiveToScreen) {
if (Hyprland.focusedMonitor != root.exclusiveMonitor || forceHidden == true) {
return -4 - root.boxHeight - 5;
} else {
return visibleTopMargin;
}
} else {
if (!root.exclusiveToScreen) {
return visibleTopMargin;
}
if (Hyprland.focusedMonitor == root.exclusiveMonitor) {
if (!root.forceHidden) {
return visibleTopMargin;
} else if (root.hoverableWhenHidden) {
return 7 - root.boxHeight - 5;
}
}
return -4 - root.boxHeight - 5;
}
property Component defaultItem
required property HyprlandMonitor exclusiveMonitor
property bool exclusiveToScreen: false
property bool forceHidden: false
property alias hover: hoverHandler
property bool hoverableWhenHidden: false
property alias rect: container
property alias stack: containerContent
property alias tap: tapHandler

View File

@@ -14,10 +14,10 @@ Singleton {
for (let device in deviceList) {
let currentDevice = deviceList[device];
if (currentDevice.connected == true) {
return false;
return true;
}
}
return true;
return false;
}
function getDevicesList() {

19
Services/FocusManager.qml Normal file
View File

@@ -0,0 +1,19 @@
pragma Singleton
import QtQuick
import Quickshell
Singleton {
id: root
signal raiseCancelled
signal raiseRequested
function exitRaise() {
console.log("exiting raise");
root.raiseCancelled();
}
function requestRaise() {
root.raiseRequested();
}
}

18
Services/IpcManager.qml Normal file
View File

@@ -0,0 +1,18 @@
pragma Singleton
import QtQuick
import Quickshell
import Quickshell.Io
Singleton {
id: root
signal logoutTriggered()
IpcHandler {
function logout() {
root.logoutTriggered();
}
target: "main"
}
}

View File

@@ -4,3 +4,5 @@ singleton NotificationManager 1.0 NotificationManager.qml
singleton WorkspaceManager 1.0 WorkspaceManager.qml
singleton BluetoothManager 1.0 BluetoothManager.qml
singleton MprisManager 1.0 MprisManager.qml
singleton IpcManager 1.0 IpcManager.qml
singleton FocusManager 1.0 FocusManager.qml