commit: fd4352b6ea457d99eabaa63598cb60f8975ee6eb Author: Igor V. Kovalenko <igor.v.kovalenko <AT> gmail <DOT> com> AuthorDate: Thu Mar 27 19:18:05 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Fri Mar 28 15:07:00 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fd4352b6
media-sound/qpaeq: Version bump to 17.0, port to PyQt6 Bug: https://bugs.gentoo.org/948110 Bug: https://bugs.gentoo.org/952555 Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko <AT> gmail.com> Closes: https://github.com/gentoo/gentoo/pull/41328 Signed-off-by: Sam James <sam <AT> gentoo.org> media-sound/qpaeq/Manifest | 1 + .../qpaeq/files/pulseaudio-17.0-pr844.patch | 105 +++++++++++++++++++++ media-sound/qpaeq/qpaeq-17.0.ebuild | 48 ++++++++++ 3 files changed, 154 insertions(+) diff --git a/media-sound/qpaeq/Manifest b/media-sound/qpaeq/Manifest index 955eec847d0e..8ac038d21ea3 100644 --- a/media-sound/qpaeq/Manifest +++ b/media-sound/qpaeq/Manifest @@ -1 +1,2 @@ DIST pulseaudio-16.1.tar.xz 1545596 BLAKE2B 535706abcea2cae39834b23c8bdc37f71b0e633de2d8e43ea4425da97a850b57c2f980c318681cbc86cf1e746200609dad41f8b96ecf4568f86d94aa6831c9a1 SHA512 33b0b4292f05e0882f3ec822cf5720414bb34c523d80fe287b9740d6be219787c562e8024c9b0d9e2ee010771ca72c7ae4f27df1bbef9c9cb6bb6a23cbcc412f +DIST pulseaudio-17.0.tar.xz 1566556 BLAKE2B 781ece3d507916aa681d3b0132689730a621b4d92e45f86570e4d2fdebc4c0025ebe7f7a05046545f9b26caca513e8975f12498fa314524bc67eacaea72842fa SHA512 be0aec46204d9c9188a796fbe41b4cf6f0f5e6b16fa08ce359b8f0f51253f0ade364b89448bbf5faa2af7e59deb6c72194734c3233944250dcfd4f31968a5e97 diff --git a/media-sound/qpaeq/files/pulseaudio-17.0-pr844.patch b/media-sound/qpaeq/files/pulseaudio-17.0-pr844.patch new file mode 100644 index 000000000000..852be09598e9 --- /dev/null +++ b/media-sound/qpaeq/files/pulseaudio-17.0-pr844.patch @@ -0,0 +1,105 @@ +https://bugs.gentoo.org/948110 +https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/844 + +From 5fc34d11f408e86edea57c9b69e5344da8e150ec Mon Sep 17 00:00:00 2001 +From: "Igor V. Kovalenko" <[email protected]> +Date: Thu, 27 Mar 2025 21:27:23 +0300 +Subject: [PATCH] qpaeq: port to PyQt6 + +--- + src/utils/qpaeq | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +diff --git a/src/utils/qpaeq b/src/utils/qpaeq +index 7e01d873f4..53b0f461a5 100755 +--- a/src/utils/qpaeq ++++ b/src/utils/qpaeq +@@ -18,8 +18,8 @@ + + import os,math,sys + try: +- from PyQt5 import QtWidgets,QtCore +- import dbus.mainloop.pyqt5 ++ from PyQt6 import QtWidgets,QtCore ++ import dbus.mainloop.pyqt6 + import dbus + except ImportError as e: + sys.stderr.write('There was an error importing needed libraries\n' +@@ -86,7 +86,7 @@ class QPaeq(QtWidgets.QWidget): + self.main_layout=QtWidgets.QVBoxLayout() + self.setLayout(self.main_layout) + toprow_layout=QtWidgets.QHBoxLayout() +- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) ++ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + #sizePolicy.setHeightForWidth(self.profile_box.sizePolicy().hasHeightForWidth()) +@@ -95,7 +95,7 @@ class QPaeq(QtWidgets.QWidget): + self.sink_box = QtWidgets.QComboBox() + self.sink_box.setSizePolicy(sizePolicy) + self.sink_box.setDuplicatesEnabled(False) +- self.sink_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically) ++ self.sink_box.setInsertPolicy(QtWidgets.QComboBox.InsertPolicy.InsertAlphabetically) + #self.sink_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents) + toprow_layout.addWidget(self.sink_box) + +@@ -107,21 +107,21 @@ class QPaeq(QtWidgets.QWidget): + toprow_layout.addWidget(QtWidgets.QLabel('Preset')) + self.profile_box = QtWidgets.QComboBox() + self.profile_box.setSizePolicy(sizePolicy) +- self.profile_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically) ++ self.profile_box.setInsertPolicy(QtWidgets.QComboBox.InsertPolicy.InsertAlphabetically) + #self.profile_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents) + toprow_layout.addWidget(self.profile_box) + +- large_icon_size=self.style().pixelMetric(QtWidgets.QStyle.PM_LargeIconSize) ++ large_icon_size=self.style().pixelMetric(QtWidgets.QStyle.PixelMetric.PM_LargeIconSize) + large_icon_size=QtCore.QSize(large_icon_size,large_icon_size) + save_profile=QtWidgets.QToolButton() +- save_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DriveFDIcon)) ++ save_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.StandardPixmap.SP_DriveFDIcon)) + save_profile.setIconSize(large_icon_size) +- save_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) ++ save_profile.setToolButtonStyle(QtCore.Qt.ToolButtonStyle.ToolButtonIconOnly) + save_profile.clicked.connect(self.save_profile) + remove_profile=QtWidgets.QToolButton() +- remove_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_TrashIcon)) ++ remove_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.StandardPixmap.SP_TrashIcon)) + remove_profile.setIconSize(large_icon_size) +- remove_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) ++ remove_profile.setToolButtonStyle(QtCore.Qt.ToolButtonStyle.ToolButtonIconOnly) + remove_profile.clicked.connect(self.remove_profile) + toprow_layout.addWidget(save_profile) + toprow_layout.addWidget(remove_profile) +@@ -370,11 +370,11 @@ class SliderArraySub(QtWidgets.QWidget): + qt=QtCore.Qt + #self.layout().setHorizontalSpacing(1) + def add_slider(slider,label, c): +- self.layout().addWidget(slider,0,c,qt.AlignHCenter) +- self.layout().addWidget(label,1,c,qt.AlignHCenter) ++ self.layout().addWidget(slider,0,c,qt.AlignmentFlag.AlignHCenter) ++ self.layout().addWidget(label,1,c,qt.AlignmentFlag.AlignHCenter) + self.layout().setColumnMinimumWidth(c,max(label.sizeHint().width(),slider.sizeHint().width())) + def create_slider(slider_label): +- slider=QtWidgets.QSlider(QtCore.Qt.Vertical,self) ++ slider=QtWidgets.QSlider(QtCore.Qt.Orientation.Vertical,self) + label=SliderLabel(slider_label,filter_state,self) + slider.setRange(-1000,2000) + slider.setSingleStep(1) +@@ -564,11 +564,11 @@ def subdivide(xs, t_points): + return left+right + + def main(): +- dbus.mainloop.pyqt5.DBusQtMainLoop(set_as_default=True) ++ dbus.mainloop.pyqt6.DBusQtMainLoop(set_as_default=True) + app=QtWidgets.QApplication(sys.argv) + qpaeq_main=QPaeq() + qpaeq_main.show() +- sys.exit(app.exec_()) ++ sys.exit(app.exec()) + + if __name__=='__main__': + main() +-- +GitLab + diff --git a/media-sound/qpaeq/qpaeq-17.0.ebuild b/media-sound/qpaeq/qpaeq-17.0.ebuild new file mode 100644 index 000000000000..5bfcea52ae61 --- /dev/null +++ b/media-sound/qpaeq/qpaeq-17.0.ebuild @@ -0,0 +1,48 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +MY_PV="${PV/_pre*}" +MY_P="pulseaudio-${MY_PV}" + +PYTHON_COMPAT=( python3_{10..13} ) +inherit python-single-r1 + +DESCRIPTION="Equalizer interface for equalizer sinks of PulseAudio (networked sound server)" +HOMEPAGE="https://www.freedesktop.org/wiki/Software/PulseAudio/" +SRC_URI="https://freedesktop.org/software/pulseaudio/releases/${MY_P}.tar.xz" +S="${WORKDIR}/${MY_P}" + +LICENSE="LGPL-2.1" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86 ~amd64-linux ~x86-linux" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +RDEPEND=" + ${PYTHON_DEPS} + $(python_gen_cond_dep ' + dev-python/pyqt6[gui,widgets,${PYTHON_USEDEP}] + dev-python/dbus-python[${PYTHON_USEDEP}] + ') + media-sound/pulseaudio-daemon[dbus,fftw] +" +PATCHES=( + "${FILESDIR}/pulseaudio-17.0-pr844.patch" +) + +src_configure() { + :; # do nothing +} + +src_install() { + python_doscript src/utils/qpaeq +} + +pkg_postinst() { + elog "You will need to load some extra modules to make qpaeq work." + elog "You can do that by adding the following two lines in" + elog "/etc/pulse/default.pa and restarting pulseaudio:" + elog "load-module module-equalizer-sink" + elog "load-module module-dbus-protocol" +}
