Add taskbar settings, fix audio IO
This commit is contained in:
parent
5080c648ec
commit
8b54996d9f
9 changed files with 616 additions and 595 deletions
|
|
@ -89,21 +89,25 @@ PanelWithOverlay {
|
|||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: 1
|
||||
Layout.maximumWidth: sinkList.width - 120 // Reserve space for the Set button
|
||||
Text {
|
||||
text: modelData.nickname || modelData.description || modelData.name
|
||||
font.bold: true
|
||||
font.pixelSize: 12
|
||||
color: (Pipewire.defaultAudioSink && Pipewire.defaultAudioSink.id === modelData.id) ? Theme.accentPrimary : Theme.textPrimary
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Text {
|
||||
text: modelData.description !== modelData.nickname ? modelData.description : ""
|
||||
font.pixelSize: 10
|
||||
color: Theme.textSecondary
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
Rectangle {
|
||||
visible: Pipewire.preferredDefaultAudioSink !== modelData
|
||||
width: 60; height: 20
|
||||
|
|
@ -173,21 +177,25 @@ PanelWithOverlay {
|
|||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: 1
|
||||
Layout.maximumWidth: sourceList.width - 120 // Reserve space for the Set button
|
||||
Text {
|
||||
text: modelData.nickname || modelData.description || modelData.name
|
||||
font.bold: true
|
||||
font.pixelSize: 12
|
||||
color: (Pipewire.defaultAudioSource && Pipewire.defaultAudioSource.id === modelData.id) ? Theme.accentPrimary : Theme.textPrimary
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Text {
|
||||
text: modelData.description !== modelData.nickname ? modelData.description : ""
|
||||
font.pixelSize: 10
|
||||
color: Theme.textSecondary
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
Item { Layout.fillWidth: true }
|
||||
Rectangle {
|
||||
visible: Pipewire.preferredDefaultAudioSource !== modelData
|
||||
width: 60; height: 20
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ Item {
|
|||
textColor: Theme.textPrimary
|
||||
StyledTooltip {
|
||||
id: volumeTooltip
|
||||
text: "Volume: " + volume + "%\nScroll up/down to change volume"
|
||||
text: "Volume: " + volume + "%\nScroll up/down to change volume.\nLeft click to open the input/output selection."
|
||||
tooltipVisible: !ioSelector.visible && volumeDisplay.containsMouse
|
||||
targetItem: pillIndicator
|
||||
delay: 200
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ Window {
|
|||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
radius: 6
|
||||
radius: 20
|
||||
color: Theme.backgroundTertiary || "#222"
|
||||
border.color: Theme.outline || "#444"
|
||||
border.width: 1
|
||||
|
|
|
|||
BIN
Programs/zigbrightness
Executable file
BIN
Programs/zigbrightness
Executable file
Binary file not shown.
BIN
Programs/zigstat
Executable file
BIN
Programs/zigstat
Executable file
Binary file not shown.
|
|
@ -48,6 +48,7 @@ Singleton {
|
|||
property bool showActiveWindowIcon: false
|
||||
property bool showSystemInfoInBar: false
|
||||
property bool showCorners: true
|
||||
property bool showTaskbar: true
|
||||
property bool showMediaInBar: false
|
||||
property bool useSWWW: false
|
||||
property bool randomWallpaper: false
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
# Ghostty theme template for wallust
|
||||
# Add to wallust config: ghostty = { src = "ghostty.conf", dst = "~/.config/ghostty/theme.conf" }
|
||||
# And add to ghostty config: theme = "theme.conf"
|
||||
|
||||
palette = 0={{ color0 }}
|
||||
palette = 1={{ color1 }}
|
||||
palette = 2={{ color2 }}
|
||||
palette = 3={{ color3 }}
|
||||
palette = 4={{ color4 }}
|
||||
palette = 5={{ color5 }}
|
||||
palette = 6={{ color6 }}
|
||||
palette = 7={{ color7 }}
|
||||
palette = 8={{ color8 }}
|
||||
palette = 9={{ color9 }}
|
||||
palette = 10={{ color10 }}
|
||||
palette = 11={{ color11 }}
|
||||
palette = 12={{ color12 }}
|
||||
palette = 13={{ color13 }}
|
||||
palette = 14={{ color14 }}
|
||||
palette = 15={{ color15 }}
|
||||
|
||||
background = {{ background }}
|
||||
foreground = {{ foreground }}
|
||||
|
||||
cursor-color = {{ cursor }}
|
||||
cursor-text = {{ foreground }}
|
||||
|
||||
selection-background = {{ color8 }}
|
||||
selection-foreground = {{ foreground }}
|
||||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue