working notifications and fuck i gotta commit more often bwaaa
This commit is contained in:
parent
c5198abcf9
commit
1b51d1a9b3
@ -5,25 +5,25 @@ import Quickshell
|
|||||||
Singleton {
|
Singleton {
|
||||||
id: customColors
|
id: customColors
|
||||||
// Core Backgrounds
|
// Core Backgrounds
|
||||||
readonly property color background: "#0E0D15"
|
readonly property color background: "#1A1B26"
|
||||||
readonly property color foreground: "#EFEEFB"
|
readonly property color foreground: "#C0CAF5"
|
||||||
readonly property color cursor: "#AE9CB4"
|
readonly property color cursor: "#C0CAF5"
|
||||||
|
|
||||||
// The 16 Colors of the Apocalypse
|
// The 16 Colors of the Apocalypse
|
||||||
readonly property color color0: "#383841"
|
readonly property color color0: "#414868"
|
||||||
readonly property color color1: "#27659D"
|
readonly property color color1: "#F7768E"
|
||||||
readonly property color color2: "#8E348E"
|
readonly property color color2: "#9ECE6A"
|
||||||
readonly property color color3: "#4638D8"
|
readonly property color color3: "#E0AF68"
|
||||||
readonly property color color4: "#3BA63E"
|
readonly property color color4: "#7AA2F7"
|
||||||
readonly property color color5: "#DB405A"
|
readonly property color color5: "#BB9AF7"
|
||||||
readonly property color color6: "#6C5CF4"
|
readonly property color color6: "#7DCFFF"
|
||||||
readonly property color color7: "#E0DEF1"
|
readonly property color color7: "#A9B1D6"
|
||||||
readonly property color color8: "#9C9BA9"
|
readonly property color color8: "#414868"
|
||||||
readonly property color color9: "#27659D"
|
readonly property color color9: "#F7768E"
|
||||||
readonly property color color10: "#8E348E"
|
readonly property color color10: "#9ECE6A"
|
||||||
readonly property color color11: "#4638D8"
|
readonly property color color11: "#E0AF68"
|
||||||
readonly property color color12: "#3BA63E"
|
readonly property color color12: "#7AA2F7"
|
||||||
readonly property color color13: "#DB405A"
|
readonly property color color13: "#BB9AF7"
|
||||||
readonly property color color14: "#6C5CF4"
|
readonly property color color14: "#7DCFFF"
|
||||||
readonly property color color15: "#E0DEF1"
|
readonly property color color15: "#C0CAF5"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Services.SystemTray
|
import Quickshell.Services.SystemTray
|
||||||
|
|||||||
129
modules/notifications/NotiPopup.qml
Normal file
129
modules/notifications/NotiPopup.qml
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Wayland
|
||||||
|
import qs.modules.bar
|
||||||
|
import "."
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
WlrLayershell {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
// 1. Position: Top Right Corner, covering the full height
|
||||||
|
// We make it a fixed width (e.g., 400px) so it doesn't block the whole screen
|
||||||
|
anchors {
|
||||||
|
top: true
|
||||||
|
right: true
|
||||||
|
}
|
||||||
|
margins {
|
||||||
|
top: 30
|
||||||
|
}
|
||||||
|
|
||||||
|
width: 400
|
||||||
|
height: notifList.contentHeight + 10
|
||||||
|
|
||||||
|
// 2. Layer: Put it ABOVE normal windows
|
||||||
|
layer: WlrLayer.Overlay
|
||||||
|
exclusionMode: ExclusionMode.Ignore
|
||||||
|
|
||||||
|
// 3. CRITICAL: Make the window itself invisible!
|
||||||
|
// We only want to see the notifications, not the container.
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
// 4. Input: Let clicks pass through empty areas
|
||||||
|
// (This is default behavior if the background is transparent in some compositors,
|
||||||
|
// but usually you need to be careful with handling mouse events here)
|
||||||
|
|
||||||
|
// THE SPAWNER
|
||||||
|
ListView {
|
||||||
|
id: notifList
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 10
|
||||||
|
// Use 'spacing' to put gaps between notifications
|
||||||
|
spacing: 10
|
||||||
|
|
||||||
|
// Align to the bottom (like Windows) or Top (like GNOME)?
|
||||||
|
// verticalLayoutDirection: ListView.BottomToTop
|
||||||
|
|
||||||
|
// 🔗 CONNECT TO THE SERVER
|
||||||
|
// Assuming your NotificationServer is a singleton or globally accessible
|
||||||
|
// ... other imports
|
||||||
|
|
||||||
|
// Inside your ListView...
|
||||||
|
delegate: Item {
|
||||||
|
width: ListView.view.width
|
||||||
|
height: 60 // Fixed height is usually better for icon layouts
|
||||||
|
|
||||||
|
required property var modelData
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
color: Colors.background
|
||||||
|
radius: 10
|
||||||
|
border.color: Colors.color5
|
||||||
|
|
||||||
|
// 2. Use RowLayout to put Image | Text side-by-side
|
||||||
|
RowLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 10
|
||||||
|
spacing: 15
|
||||||
|
|
||||||
|
// 🖼️ THE IMAGE ON THE LEFT
|
||||||
|
Image {
|
||||||
|
// Use the image if available, otherwise hide this space?
|
||||||
|
// Or you could use an icon fallback.
|
||||||
|
source: modelData.image
|
||||||
|
|
||||||
|
// Hide if no image exists so text takes full width
|
||||||
|
visible: modelData.image !== ""
|
||||||
|
|
||||||
|
// Fixed size for consistency
|
||||||
|
Layout.preferredWidth: 48
|
||||||
|
Layout.preferredHeight: 48
|
||||||
|
|
||||||
|
// Crop it nicely so it doesn't stretch
|
||||||
|
fillMode: Image.PreserveAspectCrop
|
||||||
|
|
||||||
|
// Optional: Cache it for performance
|
||||||
|
asynchronous: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📝 THE TEXT ON THE RIGHT
|
||||||
|
ColumnLayout {
|
||||||
|
// Take up all remaining width
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter // Center vertically
|
||||||
|
spacing: 2
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: modelData.summary
|
||||||
|
color: Colors.foreground
|
||||||
|
font.bold: true
|
||||||
|
elide: Text.ElideRight
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: modelData.body
|
||||||
|
color: Colors.foreground
|
||||||
|
|
||||||
|
// Limit to 2 lines
|
||||||
|
maximumLineCount: 2
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
elide: Text.ElideRight
|
||||||
|
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// (Your MouseArea for closing can still go here covering the whole thing)
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.LeftButton
|
||||||
|
onClicked: modelData.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
model: NotifServer.trackedNotifications
|
||||||
|
}
|
||||||
|
}
|
||||||
15
modules/notifications/NotifServer.qml
Normal file
15
modules/notifications/NotifServer.qml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
pragma ComponentBehavior: Bound
|
||||||
|
pragma Singleton
|
||||||
|
import Quickshell.Services.Notifications
|
||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
|
||||||
|
NotificationServer {
|
||||||
|
bodyMarkupSupported: true
|
||||||
|
persistenceSupported: true
|
||||||
|
imageSupported: true
|
||||||
|
onNotification: notification => {
|
||||||
|
notification.tracked = true;
|
||||||
|
console.log("got notification!!! arf woof");
|
||||||
|
}
|
||||||
|
}
|
||||||
2
modules/notifications/qmldir
Normal file
2
modules/notifications/qmldir
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
singleton NotifServer 1.0 NotifServer.qml
|
||||||
|
NotiPopup 1.0 NotiPopup.qml
|
||||||
@ -92,7 +92,7 @@ FloatingWindow {
|
|||||||
let cleanPath = fileUrl.toString().replace("file://", "");
|
let cleanPath = fileUrl.toString().replace("file://", "");
|
||||||
// Update the Singleton!
|
// Update the Singleton!
|
||||||
WallpaperStore.currentWall = fileUrl.toString();
|
WallpaperStore.currentWall = fileUrl.toString();
|
||||||
generateScheme.startDetached();
|
//generateScheme.startDetached();
|
||||||
console.log(generateScheme.stdout);
|
console.log(generateScheme.stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
11
shell.qml
11
shell.qml
@ -1,7 +1,9 @@
|
|||||||
//@ pragma UseQApplication
|
//@ pragma UseQApplication
|
||||||
import "./modules/bar/"
|
//pragma ComponentBehavior: Bound
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import "./modules/wallpaper/"
|
import qs.modules.bar
|
||||||
|
import qs.modules.wallpaper
|
||||||
|
import qs.modules.notifications
|
||||||
|
|
||||||
Scope {
|
Scope {
|
||||||
WallSwitcher {}
|
WallSwitcher {}
|
||||||
@ -9,14 +11,15 @@ Scope {
|
|||||||
id: wallVariants
|
id: wallVariants
|
||||||
model: Quickshell.screens
|
model: Quickshell.screens
|
||||||
delegate: Wallpaper {
|
delegate: Wallpaper {
|
||||||
screen: modelData
|
screen: wallVariants.modelData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Variants {
|
Variants {
|
||||||
id: barVariants
|
id: barVariants
|
||||||
model: Quickshell.screens
|
model: Quickshell.screens
|
||||||
delegate: Bar {
|
delegate: Bar {
|
||||||
screen: modelData
|
screen: barVariants.modelData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NotiPopup {}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user