last 7 months of qs changes

This commit is contained in:
outfoxxed 2025-01-06 00:13:19 -08:00
parent 2c64563ade
commit 4b90113a54
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
103 changed files with 3467 additions and 1415 deletions

View file

@ -12,14 +12,20 @@ ClickableIcon {
implicitHeight: width;
acceptedButtons: Qt.LeftButton | Qt.RightButton;
showPressed: mixerOpen
fillWindowWidth: true
showPressed: mixerOpen || (pressedButtons & ~Qt.RightButton)
onPressed: event => {
event.accepted = true;
if (event.button === Qt.RightButton) {
mixerOpen = !mixerOpen;
}
}
onClicked: event => {
event.accepted = true;
if (event.button === Qt.LeftButton) {
event.accepted = true;
node.audio.muted = !node.audio.muted;
} else if (event.button === Qt.RightButton) {
mixerOpen = !mixerOpen;
}
}
@ -71,7 +77,16 @@ ClickableIcon {
sourceComponent: Mixer {
width: 550
trackedNode: node
nodeList: Pipewire.nodes.values.filter(n => n.audio && !n.isStream && n.isSink == node.isSink)
nodeImage: root.image
onSelected: n => {
if (node.isSink) {
Pipewire.preferredDefaultAudioSink = n;
} else {
Pipewire.preferredDefaultAudioSource = n;
}
}
}
}
}

View file

@ -1,12 +1,18 @@
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Services.Pipewire
import ".."
import "../.."
ColumnLayout {
id: root
required property PwNode trackedNode;
required property string nodeImage;
required property list<PwNode> nodeList;
signal selected(node: PwNode);
PwNodeLinkTracker {
id: linkTracker
@ -15,10 +21,13 @@ ColumnLayout {
PwObjectTracker { objects: [ trackedNode, ...linkTracker.linkGroups ] }
MixerEntry {
MixerEntry/*WithSelect*/ {
id: nodeEntry
node: trackedNode
//nodeList: root.nodeList
image: nodeImage
Component.onCompleted: this.selected.connect(root.selected);
}
Rectangle {
@ -49,7 +58,7 @@ ColumnLayout {
// special cases :(
if (icon == "firefox") icon = "firefox-devedition";
return `image://icon/${icon}`
return Quickshell.iconPath(icon)
}
}
}

View file

@ -1,51 +1,11 @@
import QtQuick
import QtQuick.Layouts
import Quickshell.Services.Pipewire
import ".."
RowLayout {
MixerEntryBase {
id: root
required property PwNode node;
required property string image;
property int state: PwLinkState.Unlinked;
PwObjectTracker { objects: [ node ] }
ClickableIcon {
image: root.image
asynchronous: true
implicitHeight: 40
implicitWidth: height
}
ColumnLayout {
RowLayout {
Item {
implicitHeight: title.implicitHeight
Layout.fillWidth: true
Text {
id: title
color: "white"
anchors.fill: parent
elide: Text.ElideRight
text: {
const name = node.properties["application.name"] ?? (node.description == "" ? node.name : node.description);
const mediaName = node.properties["media.name"];
return mediaName != undefined ? `${name} - ${mediaName}` : name;
}
}
}
}
VolumeSlider {
//Layout.fillHeight: true
Layout.fillWidth: true
implicitWidth: 200
value: node.audio.volume
onValueChanged: node.audio.volume = value
}
headerComponent: Text {
color: "white"
elide: Text.ElideRight
text: root.getNodeName(root.node)
}
}

View file

@ -0,0 +1,50 @@
import QtQuick
import QtQuick.Layouts
import Quickshell.Services.Pipewire
import ".."
RowLayout {
id: root
required property PwNode node;
required property string image;
required property Item headerComponent;
property int state: PwLinkState.Unlinked;
function getNodeName(node: PwNode): string {
const name = node.properties["application.name"] ?? (node.description == "" ? node.name : node.description);
const mediaName = node.properties["media.name"];
return mediaName != undefined ? `${name} - ${mediaName}` : name + node.id;
}
PwObjectTracker { objects: [ node ] }
ClickableIcon {
image: root.image
asynchronous: true
implicitHeight: 40
implicitWidth: height
}
ColumnLayout {
Item {
id: container
Layout.fillWidth: true
implicitWidth: headerComponent.implicitWidth
implicitHeight: headerComponent.implicitHeight
children: [ headerComponent ]
Binding { root.headerComponent.anchors.fill: container }
}
VolumeSlider {
Layout.fillWidth: true
value: node.audio.volume
onValueChanged: node.audio.volume = value
}
}
}

View file

@ -0,0 +1,16 @@
import QtQuick
import QtQuick.Controls
import Quickshell.Services.Pipewire
MixerEntryBase {
id: root
required property list<PwNode> nodeList;
signal selected(node: PwNode);
headerComponent: ComboBox {
model: nodeList.map(node => root.getNodeName(node));
currentIndex: nodeList.findIndex(node => node == root.node)
onActivated: index => root.selected(nodeList[index])
}
}

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#e8eaed"><path d="M806-56 677.67-184.33q-27 18.66-58 32.16-31 13.5-64.34 21.17v-68.67q20-6.33 38.84-13.66 18.83-7.34 35.5-19l-154.34-155V-160l-200-200h-160v-240H262L51.33-810.67 98.67-858l754.66 754L806-56Zm-26.67-232-48-48q19-33 28.17-69.62 9.17-36.61 9.17-75.38 0-100.22-58.34-179.11Q652-739 555.33-762.33V-831q124 28 202 125.5t78 224.5q0 51.67-14.16 100.67-14.17 49-41.84 92.33Zm-134-134-90-90v-130q47 22 73.5 66t26.5 96q0 15-2.5 29.5t-7.5 28.5Zm-170-170-104-104 104-104v208Zm-66.66 270v-131.33l-80-80H182v106.66h122L408.67-322Zm-40-171.33Z"/></svg>

Before

Width:  |  Height:  |  Size: 650 B

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#e8eaed"><path d="M560-131v-68.67q94.67-27.33 154-105 59.33-77.66 59.33-176.33 0-98.67-59-176.67-59-78-154.33-104.66V-831q124 28 202 125.5T840-481q0 127-78 224.5T560-131ZM120-360v-240h160l200-200v640L280-360H120Zm426.67 45.33v-332Q599-628 629.5-582T660-480q0 55-30.83 100.83-30.84 45.84-82.5 64.5ZM413.33-634l-104 100.67H186.67v106.66h122.66l104 101.34V-634Zm-96 154Z"/></svg>

Before

Width:  |  Height:  |  Size: 474 B