Add taskbar settings, fix audio IO
This commit is contained in:
parent
5080c648ec
commit
8b54996d9f
9 changed files with 616 additions and 595 deletions
|
|
@ -11,11 +11,15 @@ Item {
|
|||
width: runningAppsRow.width
|
||||
height: Settings.settings.taskbarIconSize
|
||||
|
||||
// Attach custom tooltip
|
||||
StyledTooltip {
|
||||
id: styledTooltip
|
||||
}
|
||||
|
||||
function getAppIcon(toplevel: Toplevel): string {
|
||||
if (!toplevel)
|
||||
return "";
|
||||
|
||||
// Try different icon resolution strategies
|
||||
let icon = Quickshell.iconPath(toplevel.appId?.toLowerCase(), true);
|
||||
if (!icon) {
|
||||
icon = Quickshell.iconPath(toplevel.appId, true);
|
||||
|
|
@ -42,7 +46,6 @@ Item {
|
|||
model: ToplevelManager ? ToplevelManager.toplevels : null
|
||||
|
||||
delegate: Rectangle {
|
||||
|
||||
id: appButton
|
||||
width: Settings.settings.taskbarIconSize
|
||||
height: Settings.settings.taskbarIconSize
|
||||
|
|
@ -51,124 +54,76 @@ Item {
|
|||
border.color: isActive ? Qt.darker(Theme.accentPrimary, 1.2) : "transparent"
|
||||
border.width: 1
|
||||
|
||||
|
||||
|
||||
property bool isActive: ToplevelManager.activeToplevel && ToplevelManager.activeToplevel === modelData
|
||||
property bool hovered: mouseArea.containsMouse
|
||||
property string appId: modelData ? modelData.appId : ""
|
||||
property string appTitle: modelData ? modelData.title : ""
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: 150
|
||||
}
|
||||
ColorAnimation { duration: 150 }
|
||||
}
|
||||
|
||||
Behavior on border.color {
|
||||
ColorAnimation {
|
||||
duration: 150
|
||||
}
|
||||
ColorAnimation { duration: 150 }
|
||||
}
|
||||
|
||||
// App icon
|
||||
IconImage {
|
||||
id: appIcon
|
||||
width: Math.max(12, Settings.settings.taskbarIconSize * 0.625) // 62.5% of button size (20/32 = 0.625)
|
||||
width: Math.max(12, Settings.settings.taskbarIconSize * 0.625)
|
||||
height: Math.max(12, Settings.settings.taskbarIconSize * 0.625)
|
||||
anchors.centerIn: parent
|
||||
source: getAppIcon(modelData)
|
||||
smooth: true
|
||||
|
||||
// Fallback to first letter if no icon
|
||||
visible: source.toString() !== ""
|
||||
}
|
||||
|
||||
// Fallback text if no icon available
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
visible: !appIcon.visible
|
||||
text: appButton.appId ? appButton.appId.charAt(0).toUpperCase() : "?"
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Math.max(10, Settings.settings.taskbarIconSize * 0.4375) // 43.75% of button size (14/32 = 0.4375)
|
||||
font.pixelSize: Math.max(10, Settings.settings.taskbarIconSize * 0.4375)
|
||||
font.bold: true
|
||||
color: appButton.isActive ? Theme.onAccent : Theme.textPrimary
|
||||
}
|
||||
|
||||
// Tooltip
|
||||
ToolTip {
|
||||
id: tooltip
|
||||
visible: mouseArea.containsMouse && !mouseArea.pressed
|
||||
delay: 800
|
||||
text: appTitle || appId
|
||||
|
||||
background: Rectangle {
|
||||
color: Theme.backgroundPrimary
|
||||
border.color: Theme.outline
|
||||
border.width: 1
|
||||
radius: 8
|
||||
}
|
||||
|
||||
contentItem: Text {
|
||||
text: tooltip.text
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSizeCaption
|
||||
color: Theme.textPrimary
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
onEntered: {
|
||||
styledTooltip.text = appTitle || appId;
|
||||
styledTooltip.targetItem = appButton;
|
||||
styledTooltip.tooltipVisible = true;
|
||||
}
|
||||
|
||||
onExited: {
|
||||
styledTooltip.tooltipVisible = false;
|
||||
}
|
||||
|
||||
onClicked: function(mouse) {
|
||||
console.log("[Taskbar] Clicked on", appButton.appId, "- Active:", appButton.isActive);
|
||||
|
||||
if (mouse.button === Qt.MiddleButton) {
|
||||
console.log("[Taskbar] Middle-clicked on", appButton.appId);
|
||||
|
||||
// Example: Close the window with middle click
|
||||
if (modelData && modelData.close) {
|
||||
modelData.close();
|
||||
} else {
|
||||
console.log("[Taskbar] No close method available for:", modelData);
|
||||
}
|
||||
}
|
||||
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
// Left click: Focus/activate the window
|
||||
if (modelData && modelData.activate) {
|
||||
modelData.activate();
|
||||
} else {
|
||||
console.log("[Taskbar] No activate method available for:", modelData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Right-click for additional actions
|
||||
onPressed: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
console.log("[Taskbar] Right-clicked on", appButton.appId);
|
||||
|
||||
// Example actions you can add:
|
||||
// 1. Close window
|
||||
// if (modelData && modelData.close) {
|
||||
// modelData.close();
|
||||
// }
|
||||
|
||||
// 2. Minimize window
|
||||
// if (modelData && modelData.minimize) {
|
||||
// modelData.minimize();
|
||||
// }
|
||||
|
||||
// 3. Show context menu (needs Menu component)
|
||||
// contextMenu.popup();
|
||||
// context menu logic (optional)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Active indicator dot
|
||||
Rectangle {
|
||||
visible: isActive
|
||||
width: 4
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue