Settings rework...
This commit is contained in:
parent
74b233798d
commit
fb68300746
63 changed files with 7139 additions and 1026 deletions
|
|
@ -5,7 +5,7 @@ import qs.Settings
|
|||
import QtQuick.Layouts
|
||||
import qs.Components
|
||||
|
||||
// The popup window
|
||||
|
||||
PanelWithOverlay {
|
||||
id: notificationHistoryWin
|
||||
property string historyFilePath: Settings.settingsDir + "notification_history.json"
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ Item {
|
|||
width: 22; height: 22
|
||||
property bool isSilence: false
|
||||
|
||||
// Process for executing CLI commands
|
||||
|
||||
Process {
|
||||
id: rightClickProcess
|
||||
command: ["qs","ipc", "call", "globalIPC", "toggleNotificationPopup"]
|
||||
}
|
||||
|
||||
// Bell icon/button
|
||||
|
||||
Item {
|
||||
id: bell
|
||||
width: 22; height: 22
|
||||
|
|
@ -34,7 +34,7 @@ Item {
|
|||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
onClicked: function(mouse): void {
|
||||
onClicked: function(mouse) {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
root.isSilence = !root.isSilence;
|
||||
rightClickProcess.running = true;
|
||||
|
|
@ -55,8 +55,9 @@ Item {
|
|||
StyledTooltip {
|
||||
id: notificationTooltip
|
||||
text: "Notification History"
|
||||
positionAbove: false
|
||||
tooltipVisible: false
|
||||
targetItem: bell
|
||||
delay: 200
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ PanelWindow {
|
|||
|
||||
anchors.top: true
|
||||
anchors.right: true
|
||||
margins.top: -20 // keep as you want
|
||||
margins.top: -20
|
||||
margins.right: 6
|
||||
|
||||
property var notifications: []
|
||||
|
|
@ -52,7 +52,7 @@ PanelWindow {
|
|||
anchors.right: parent.right
|
||||
spacing: window.spacing
|
||||
width: parent.width
|
||||
clip: false // prevent clipping during animation
|
||||
clip: false // Prevent clipping during animation
|
||||
|
||||
Repeater {
|
||||
model: notifications
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import Quickshell
|
||||
import Quickshell.Widgets
|
||||
import qs.Settings
|
||||
|
||||
PanelWindow {
|
||||
|
|
@ -9,7 +10,7 @@ PanelWindow {
|
|||
implicitHeight: notificationColumn.implicitHeight
|
||||
color: "transparent"
|
||||
visible: notificationsVisible && notificationModel.count > 0
|
||||
screen: Quickshell.primaryScreen !== undefined ? Quickshell.primaryScreen : null
|
||||
screen: (typeof modelData !== 'undefined' ? modelData : Quickshell.primaryScreen)
|
||||
focusable: false
|
||||
|
||||
property bool barVisible: true
|
||||
|
|
@ -114,38 +115,37 @@ PanelWindow {
|
|||
id: iconBackground
|
||||
width: 36
|
||||
height: 36
|
||||
radius: width / 2 // Circular
|
||||
radius: width / 2
|
||||
color: Theme.accentPrimary
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
border.color: Qt.darker(Theme.accentPrimary, 1.2)
|
||||
border.width: 1.5
|
||||
|
||||
// Get all possible icon sources from notification
|
||||
// Priority order for notification icons: image > appIcon > icon
|
||||
property var iconSources: [rawNotification?.image || "", rawNotification?.appIcon || "", rawNotification?.icon || ""]
|
||||
|
||||
// Try to load notification icon
|
||||
Image {
|
||||
// Load notification icon with fallback handling
|
||||
IconImage {
|
||||
id: iconImage
|
||||
anchors.fill: parent
|
||||
anchors.margins: 4
|
||||
fillMode: Image.PreserveAspectFit
|
||||
smooth: true
|
||||
cache: false
|
||||
asynchronous: true
|
||||
sourceSize.width: 36
|
||||
sourceSize.height: 36
|
||||
backer.fillMode: Image.PreserveAspectFit
|
||||
source: {
|
||||
// Try each icon source in priority order
|
||||
for (var i = 0; i < iconBackground.iconSources.length; i++) {
|
||||
var icon = iconBackground.iconSources[i];
|
||||
if (!icon)
|
||||
continue;
|
||||
|
||||
// Handle special path format from some notifications
|
||||
if (icon.includes("?path=")) {
|
||||
const [name, path] = icon.split("?path=");
|
||||
const fileName = name.substring(name.lastIndexOf("/") + 1);
|
||||
return `file://${path}/${fileName}`;
|
||||
}
|
||||
|
||||
// Handle absolute file paths
|
||||
if (icon.startsWith('/')) {
|
||||
return "file://" + icon;
|
||||
}
|
||||
|
|
@ -157,7 +157,7 @@ PanelWindow {
|
|||
visible: status === Image.Ready && source.toString() !== ""
|
||||
}
|
||||
|
||||
// Fallback to first letter of app name
|
||||
// Fallback: show first letter of app name when no icon available
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
visible: !iconImage.visible
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue