Git Product home page Git Product logo

pavucontrol-qt's Introduction

pavucontrol-qt

Overview

pavucontrol-qt is the Qt port of the volume control pavucontrol for the sound server PulseAudio.

As such it can be used to adjust all controls provided by PulseAudio and ALSA as well as some additional settings.

The software belongs to the LXQt project but its usage isn't limited to this desktop environment.

Installation

Compiling source code

Runtime dependencies are qtbase and PulseAudio client library libpulse.
Additional build dependencies are CMake and liblxqt as well as optionally Git to pull latest VCS checkouts.

Code configuration is handled by CMake. CMake variable CMAKE_INSTALL_PREFIX has to be set to /usr on most operating systems.

To build run make, to install make install which accepts variable DESTDIR as usual.

Binary packages

Official binary packages are available in Arch Linux, Debian, Fedora and openSUSE (Leap and Tumbleweed) and most other distributions.

Usage

In LXQt sessions the binary is placed in sub-menu "Sound & Video" of the panel's main menu.

The usage itself should be self-explanatory.

Translations

Translations can be done in LXQt-Weblate.

Translation status

pavucontrol-qt's People

Contributors

agaida avatar ayhanyalcinsoy avatar eltonfabricio10 avatar flameeyes avatar ford-prefect avatar heliocastro avatar ito32bit avatar kmilos avatar luis-pereira avatar lxqtbot avatar mbouzada avatar oliverburkardt avatar p-bo avatar paiiou avatar palinek avatar pcman avatar piotrdrag avatar pjotr123 avatar poettering avatar rbuj avatar scootergrisen avatar shlyakpavel avatar smarquespt avatar sp22x avatar stefonarch avatar tanuk avatar tsimonq2 avatar tsujan avatar welaq avatar zoli111 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pavucontrol-qt's Issues

Add trayicon functionality

I would like to have this thing run on startup and be available from system tray icon so that it's easily accessible.

edit: PR: #93

Latency offset field is limited

Expected Behavior

If you connect bluetooth headphones and try to change the latency offset, you have no limits. Just like in original pavucontrol

Current Behavior

The number box accepts values from 0 to 99

Possible Solution

Remove the box max and min value or increase them

Steps to Reproduce (for bugs)
  1. Connect bluetooth headphones
  2. Open pavucontrol-qt
  3. Go to Output devices > the headphones > Show additional settings > Latency offset
  4. Try to set value that is higher than 100 or less than 0
Context

I needed a to set a negative offset after some changes in Pipewire.

System Information
  • Distribution & Version: EndeavourOS
  • Kernel: 6.2.12
  • Qt Version: 5.15.9
  • libqtxdg Version: -
  • lxqt-build-tools Version: -
  • Package version: 1.3.0

User-specific GUI settings written in same file as used by pavucontrol

To save user-specific GUI settings pavucontrol-qt is using file ~/.config/pavucontrol.ini that's used by pavucontrol as well.
I think this isn't good and pavucontrol-qt should use a file on its own, maybe just ~/config/pavucontrol-qt.ini.

Seen running 8e61ef5 on Arch Linux.

EDIT: point out it's the GUI settings which are in question here.

Can't build on Fedora 24

When running cmake I've got this error:

CMake Error at CMakeLists.txt:19 (find_package):
  By not providing "FindXdgUserDirs.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "XdgUserDirs", but CMake did not find one.

  Could not find a package configuration file provided by "XdgUserDirs" with
  any of the following names:

    XdgUserDirsConfig.cmake
    xdguserdirs-config.cmake

  Add the installation prefix of "XdgUserDirs" to CMAKE_PREFIX_PATH or set
  "XdgUserDirs_DIR" to a directory containing one of the above files.  If
  "XdgUserDirs" provides a separate development package or SDK, be sure it
  has been installed.


-- Configuring incomplete, errors occurred!

Got any tips where I can find this cmake script?
I've tried to search it with command dnf whatprovides '*/XdgUserDirsConfig.cmake' with no luck.

Re-add existing GTK features

There are existing features commented in the code, that needs to be implemented (I believe):

  • Terminate stream
  • Move input/output stream
  • Rename devices

... I've already readded some of them.

This is just to track the needed changes -> @PCMan, please, add if I missed something.

The off checkbox is a confusing UI to what happens in the background

I think the UI in the GTK version where "off" is just an entry in the drop down is a much better reflection of what is actually happening.

With the current QT UI the user could get the impression that off is a flag and the profile is something different. This lead to a lot of debugging "why is it losing the configured profile setting when switching off a device". Following the GTK version here might be a good idea.

Pavucontrol-qt opens in a floating window in i3

Hi,

Expected Behavior

The window should, open in the current container layout : split, stacking or tabbed.

Current Behavior

At the moment, Pavucontrol-qt always opens in floating mode, which breaks i3 working method.

Possible Solution

X

Steps to Reproduce (for bugs)
  1. Open Pavucontrol on an i3wm session
  2. Then open Pavucontrol-qt
  3. See that Pavucontrol-qt’s windows is in floating mode even if it was in another mode the last time it was closed, and that Gtk version open "normally".
Context

Pavucontrol-Qt appears over my already-opened windows and distracts me.
It does not happen with the original Pavucontrol package (pavucontrol 5.0).
As pavucontrol-qt’s readme.md says "The software belongs to the LXQt project but its usage isn't limited to this desktop environment.", I permit myself to file this bug.

System Information
  • Distribution & Version: Arch Linux x86_64
  • Kernel: 5.15.12-arch1-1
  • Qt Version: Qt 5.15.2
  • i3 version 4.20.1
  • libqtxdg Version: 3.8.0-1
  • lxqt-build-tools Version: 0.10.0-1
  • Package version: 1.0.0-2

th or th_TH for translation files

pavucontrol-qt seem to be the only repo where language code "th" is used in:
pavucontrol-qt_th.ts

and inside the file:
language="th"

The others use "th_TH".

Personally i prefer using the shortest "th" over "th_TH" when there is only one translation beginning with "th" but the people translating that language can decide whats best.

Expose unmanaged controls of soundcards in a clear way

Well, (not so) recent firefox developments finally forced me to overcome old psychological traumas and install pulseaduio.

It would be great if pavucontrol displayed controls of soundcards under 'advanced' areas: managed ones greyed out (for info) and unmanaged accessible to tweak.

Or if /usr/share/pulseaudio/alsa-mixer/paths/ stuff is overrideable at user level, a way to 'unmanage' certain controls in this GUI would be even greater.

What specific pulseaudio commands are used at Recording tab to set the device being captured?

Expected Behavior
Current Behavior
Possible Solution
Steps to Reproduce (for bugs)
Context

Chromium implementation of navigator.mediaDevices.getUserMedia({audio: true}) does not provide a means to select "Monitor of " ("What-U-Hear").

pavucontrol, pavucontrol-qt can be used to dynamically set the stream being captured at Recording tab, proof-of-concept https://github.com/guest271314/captureSystemAudio, using web platform API's Native File System and Native Messaging, respectively.

For the use case the remainder of the GUI is not necessary, however for some cases a minimal GUI could be useful.

To achieve the above opened this issue to ask two questions

  1. What are the specific minimal dependencies and commands needed in C++ to have the equivalent effect of user changing the device being captured at Recording tab GUI?
  2. Is it possible to embed a minimal GUI including only Recording tab in HTML, for example, using an <embed> element as https://github.com/Kagami/mpv.js does?
System Information
  • Distribution & Version:
  • Kernel:
  • Qt Version:
  • libqtxdg Version:
  • lxqt-build-tools Version:
  • Package version:

Workflow Optimization: Configuration On/Off, global device switching

Current Behavior

If you have a number of applications using various audio devices for output and input, and you wish to "move" all of them to a specific device (like if you're playing audio through your home theatre audio and wish to take a conference call on a headset), I've found myself going to the configuration tab to set the profiles of all other devices to "Off". This involves going into the dropdown, and in some cases, scrolling through a large number of options.

Possible Solution

I would suggest removing "Off" from the entries in the Configuration tab's "Profile" dropdown, opting for a checkbox enabling/disabling the dropdown control instead. I've found I switch profiles very infrequently, ususally only to disable them.

Additionally, for any Configuration with an Active (not "Off") Profile, two or three buttons:

  1. Move All Playback Applications to this profile (X)
  2. Move All Recording Applications to this profile (Y)
  3. Move All Playback/Recording Applications to this profile (Z)

Depending of course, on whether the profile is a valid source/sink.

And given the ability to move applications between sources/sinks on the Configuration tab this way, it may be of utility to have a small area dedicated to each device showing which applications currently belong to its active profile, like:


Built-in Audio
Profile : (X)(Y)(Z) | Analog Stereo Duplex / |
On Playback: Chrome, SMPlayer, DOOM
On Recording:


USB Device
Profile : (x)(Y)(z) | Analog Stereo Input / |
On Recording: Slack


USB Device
Profile : (X)(y)(z) | Analog Stereo Ouput / |
On Playback: Clementine


Context

First of all, I love this port. Its really nice and clean. Thanks to the developers, as this is one of my most frequently used applications. I do find some current workflows a little less than optimal in some cases, which is why I'm reaching out.

On occasion, (particularly on HDMI output devices like my NVIDIA cards) where there are lots of "Profile" entries, sometimes when I open the dropdown it will spontaneously close as I start to scroll. This is likely a window management/focus issue of some kind rather than an issue with this package, as I believe the gtk version of pavucontrol has the same issue. (KWin and Compiz)

Further, when I switch profiles it tends to be more of off-to-on-to-off rather than from one useful profile to another. Both a quick button to move all applications to a given device and a way to quickly disable a device would be useful. If I take a conference call for example, I want to ensure a new tab in my browser doesn't start playing a commercial on my home theatre speakers by mistake, not just move everything over.

System Information
  • Distribution & Version: Arch Linux
  • Kernel: 4.18.9-arch1-1-ARCH
  • Qt Version: 5.11.2-1
  • libqtxdg Version: 3.2.04
  • lxqt-build-tools Version: 0.5.0-1
  • Package version: 0.4.0-1

Default Tab

Expected Behavior

Remember or set a default tab/page to have the program open too when launched.

Current Behavior

It remembers the previous open tab when closes & reopened, but it doesn't remember on restart of xorg.

Possible Solution

Be able to set a default tab to have the program open too.

Steps to Reproduce (for bugs)
Context

It'd be nice to not have to change to a certain tab every time I first launch program on a restart.

System Information
  • Distribution & Version:
  • Kernel:
  • Qt Version:
  • libqtxdg Version:
  • lxqt-build-tools Version:
  • Package version:

Typos only?

w->setConnectingMessage(QObject::tr("Connection to PulseAudio failed. Automatic retry in 5s.<br><br>"

I stumbled opon those while updating translations, it is new but probably nobody has updated translations for a long time, it has 3 typos and I'm not sure if this text is really ok. The command mentioned, and "root window" sounds strange to me but pulseaudio is not my thing.

UI questions

This is not a bug report; pavucontrol-qt is compiling and working fine.

I've got 2 questions to the UI:

  • Is a fullscreen window mode possible?
  • May the bar from the screenshot be made thinner?

peter

crash when toggling `PCM` in sinkwidget's Advanced options

pavucontrol-gtk has the PCM option checked and greyed out, whilst this app unchecked and togglable. Turning it on does nothing, turning it off crashes the app.

full backtrace:

#0  0x00007ffff5fad2e7 in raise () from /lib64/libc.so.6                                                                                                                             
No symbol table info available.                                                                                                                                                      
#1  0x00007ffff5fae76a in abort () from /lib64/libc.so.6                                                                                                                             
No symbol table info available.                                                                                                                                                      
#2  0x00007ffff7361bd0 in pa_ext_device_restore_save_formats (c=<optimized out>, type=type@entry=PA_DEVICE_TYPE_SINK,                                                                
    idx=idx@entry=0, n_formats=n_formats@entry=0 '\000', formats=formats@entry=0xb3e150, cb=cb@entry=0x0, userdata=0x0)                                                              
    at /tmp/portage/media-sound/pulseaudio-9.0/work/pulseaudio-9.0/src/pulse/ext-device-restore.c:309                                                                                
        tag = 32767                                                                                                                                                                  
        o = <optimized out>                                                                                                                                                          
        t = <optimized out>                                                                                                                                                          
        __func__ = "pa_ext_device_restore_save_formats"                                                                                                                              
        __PRETTY_FUNCTION__ = "pa_ext_device_restore_save_formats"                                                                                                                   
#3  0x000000000041f4ba in SinkWidget::onEncodingsChange (this=0x98d2f0)                                                                                                              
    at /tmp/portage/media-sound/pavucontrol-qt-9999/work/pavucontrol-qt-9999/src/sinkwidget.cc:186                                                                                   
        o = <optimized out>                                                                                                                                                          
        n_formats = 0 '\000'                                                                                                                                                         
        formats = 0xb3e150                                                                                                                                                           
#4  0x000000000041f6d7 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (SinkWidget::*)()>::call(voi                                                d (SinkWidget::*)(), SinkWidget*, void**) (arg=<optimized out>, o=<optimized out>, f=<optimized out>)                                                                                
    at /usr/include/qt5/QtCore/qobjectdefs_impl.h:501                                                                                
No locals.                                                                                                                           
#5  QtPrivate::FunctionPointer<void (SinkWidget::*)()>::call<QtPrivate::List<>, void>(void (SinkWidget::*)(), SinkWidget*, void**) ( 
    arg=<optimized out>, o=<optimized out>, f=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:520                     
No locals.                                                                                                                           
#6  QtPrivate::QSlotObject<void (SinkWidget::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>)                    
    at /usr/include/qt5/QtCore/qobject_impl.h:143                                                                                    
No locals.                                                                                                                           
#7  0x00007ffff695e0de in QtPrivate::QSlotObjectBase::call (a=0x7fffffffcf30, r=0x98d2f0, this=<optimized out>)                      
    at ../../include/QtCore/../../src/corelib/kernel/qobject_impl.h:124                                                              
No locals.                                                                                                                           
#8  QMetaObject::activate (sender=sender@entry=0x99e450, signalOffset=<optimized out>,                                               
    local_signal_index=local_signal_index@entry=4, argv=argv@entry=0x7fffffffcf30) at kernel/qobject.cpp:3715                        
        obj = {d = 0x9aac60}                                                                                                         
        receiverInSameThread = <optimized out>                                                                                       
        sw = {receiver = 0x98d2f0, previousSender = 0x0, currentSender = {sender = 0x99e450, signal = 11, ref = 1}, switched = true} 
        callFunction = 0x9aac60                                                                                                      
        receiver = 0x98d2f0                                                                                                          
        method_relative = <optimized out>
        c = 0x9aac90
        last = 0x9aac90
        locker = {val = 140737332587080}
        connectionLists = {connectionLists = 0x9a5b60}
        list = <optimized out>
        signal_index = 11
        empty_argv = {0x0}
        currentThreadId = 0x7ffff7fad840
#9  0x00007ffff695e657 in QMetaObject::activate (sender=sender@entry=0x99e450, 
    m=m@entry=0x7ffff7db3c60 <QAbstractButton::staticMetaObject>, local_signal_index=local_signal_index@entry=4, 
    argv=argv@entry=0x7fffffffcf30) at kernel/qobject.cpp:3595
No locals.
#10 0x00007ffff79d5d32 in QAbstractButton::toggled (this=this@entry=0x99e450, _t1=_t1@entry=false)
    at .moc/moc_qabstractbutton.cpp:314
        _a = {0x0, 0x7fffffffcf2c}
#11 0x00007ffff79d60e5 in QAbstractButtonPrivate::emitToggled (this=this@entry=0x99e490, checked=checked@entry=false)
    at widgets/qabstractbutton.cpp:446
No locals.
#12 0x00007ffff79d7d3c in QAbstractButton::setChecked (this=this@entry=0x99e450, checked=<optimized out>)
    at widgets/qabstractbutton.cpp:639
        s = {disabled = 0, selected = 0, focusable = 0, focused = 0, pressed = 1, checkable = 0, checked = 1, checkStateMixed = 0, 
          readOnly = 0, hotTracked = 0, defaultButton = 1, expanded = 0, collapsed = 0, busy = 1, expandable = 1, marqueed = 1, 
          animated = 1, invisible = 0, offscreen = 0, sizeable = 1, movable = 1, selfVoicing = 0, selectable = 0, linked = 1, 
          traversed = 0, multiSelectable = 0, extSelectable = 0, passwordEdit = 0, hasPopup = 0, modal = 0, active = 0, 
          invalid = 0, editable = 0, multiLine = 0, selectableText = 0, supportsAutoCompletion = 0, searchEdit = 0}
        event = {<QAccessibleEvent> = {_vptr.QAccessibleEvent = 0x99e450, m_type = 4294954960, m_object = 0x640be0, {
              m_child = -11840, m_uniqueId = 4294955456}}, m_changedStates = {disabled = 0, selected = 0, focusable = 0, 
            focused = 0, pressed = 1, checkable = 0, checked = 1, checkStateMixed = 0, readOnly = 0, hotTracked = 0, 
            defaultButton = 1, expanded = 0, collapsed = 0, busy = 1, expandable = 1, marqueed = 1, animated = 1, invisible = 0, 
            offscreen = 0, sizeable = 1, movable = 1, selfVoicing = 0, selectable = 0, linked = 1, traversed = 0, 
            multiSelectable = 0, extSelectable = 0, passwordEdit = 0, hasPopup = 0, modal = 0, active = 0, invalid = 0, 
            editable = 0, multiLine = 0, selectableText = 0, supportsAutoCompletion = 0, searchEdit = 0}}
#13 0x00007ffff79d8347 in QAbstractButton::nextCheckState (this=this@entry=0x99e450) at widgets/qabstractbutton.cpp:899
        this = 0x99e450
#14 0x00007ffff79eab66 in QCheckBox::nextCheckState (this=0x99e450) at widgets/qcheckbox.cpp:367
No locals.
#15 0x00007ffff79d78c0 in QAbstractButtonPrivate::click (this=this@entry=0x99e490) at widgets/qabstractbutton.cpp:386
        changeState = <optimized out>
#16 0x00007ffff79d79cc in QAbstractButton::mouseReleaseEvent (this=0x99e450, e=0x7fffffffd420) at widgets/qabstractbutton.cpp:1002
No locals.
#17 0x00007ffff793dcd8 in QWidget::event (this=0x99e450, event=0x7fffffffd420) at kernel/qwidget.cpp:9114
No locals.
#18 0x00007ffff78fb7dc in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x99e450, e=0x7fffffffd420)
    at kernel/qapplication.cpp:3804
        consumed = <optimized out>
        this = <optimized out>
        e = 0x7fffffffd420
        receiver = 0x99e450
#19 0x00007ffff79011ce in QApplication::notify (this=<optimized out>, receiver=0x99e450, e=0x7fffffffd420)
    at kernel/qapplication.cpp:3277
        me = {<QInputEvent> = {<QEvent> = {_vptr.QEvent = 0x7ffff7032018 <vtable for QMouseEvent+16>, static staticMetaObject = {
                d = {superdata = 0x0, stringdata = 0x7ffff6aed200 <qt_meta_stringdata_QEvent>, 
                  data = 0x7ffff6aecc60 <qt_meta_data_QEvent>, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}, 
              d = 0x0, t = 3, posted = 0, spont = 1, m_accept = 1, reserved = 8191}, modState = {i = 0}, ts = 41928309}, l = {
            xp = 13, yp = 8}, w = {xp = 59, yp = 267}, s = {xp = 626, yp = 478}, b = Qt::LeftButton, mouseState = {i = 0}, 
          caps = 0, velocity = {xp = 0, yp = 0}}
        w = 0x99e450
        mouse = 0x7fffffffd420
        eventAccepted = <optimized out>
        relpos = {xp = 13, yp = 8}
        pw = {wp = {d = 0x9a59a0, value = 0x99e450}}
        res = false
#20 0x00007ffff693811a in QCoreApplication::notifyInternal2 (receiver=receiver@entry=0x99e450, event=event@entry=0x7fffffffd420)
    at kernel/qcoreapplication.cpp:1015
        selfRequired = true
        result = false
        cbdata = {0x99e450, 0x7fffffffd420, 0x7fffffffd28f}
        d = <optimized out>
        threadData = 0x645f00
        loopLevelCounter = {threadData = 0x645f00}
#21 0x00007ffff78fff35 in QCoreApplication::sendEvent (event=<optimized out>, receiver=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:225
No locals.
#22 QApplicationPrivate::sendMouseEvent (receiver=receiver@entry=0x99e450, event=event@entry=0x7fffffffd420, 
    alienWidget=alienWidget@entry=0x99e450, nativeWidget=0x6bf970, buttonDown=buttonDown@entry=0x7ffff7ddaa90 <qt_button_down>, 
    lastMouseReceiver=..., spontaneous=true) at kernel/qapplication.cpp:2775
        receiverGuard = {wp = {d = 0x9a59a0, value = 0x99e450}}
        nativeGuard = {wp = {d = 0x7abfa0, value = 0x6bf970}}
        alienGuard = {wp = {d = 0x9a59a0, value = 0x99e450}}
        activePopupWidget = {wp = {d = 0x0, value = 0x0}}
        widgetUnderMouse = <optimized out>
        wasLeaveAfterRelease = true
        result = <optimized out>
#23 0x00007ffff79579c0 in QWidgetWindow::handleMouseEvent (this=this@entry=0x7acd10, event=event@entry=0x7fffffffd820)
    at kernel/qwidgetwindow.cpp:603
        translated = {<QInputEvent> = {<QEvent> = {_vptr.QEvent = 0x7ffff7032018 <vtable for QMouseEvent+16>, 
              static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff6aed200 <qt_meta_stringdata_QEvent>, 
                  data = 0x7ffff6aecc60 <qt_meta_data_QEvent>, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}, 
              d = 0x0, t = 3, posted = 0, spont = 1, m_accept = 1, reserved = 12}, modState = {i = 0}, ts = 41928309}, l = {
            xp = 13, yp = 8}, w = {xp = 59, yp = 267}, s = {xp = 626, yp = 478}, b = Qt::LeftButton, mouseState = {i = 0}, 
          caps = 0, velocity = {xp = 0, yp = 0}}
        contextMenuTrigger = QEvent::MouseButtonPress
        widget = 0x99e450
        mapped = {xp = 13, yp = 8}
        receiver = 0x99e450
#24 0x00007ffff795a1fb in QWidgetWindow::event (this=0x7acd10, event=0x7fffffffd820) at kernel/qwidgetwindow.cpp:233
No locals.
#25 0x00007ffff78fb7dc in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x7acd10, e=0x7fffffffd820)
    at kernel/qapplication.cpp:3804
        consumed = <optimized out>
        this = <optimized out>
        e = 0x7fffffffd820
        receiver = 0x7acd10
#26 0x00007ffff7900956 in QApplication::notify (this=0x7fffffffdc90, receiver=0x7acd10, e=0x7fffffffd820)
    at kernel/qapplication.cpp:3561
        w = 0x7acd10
        extra = <optimized out>
        isProxyWidget = <optimized out>
        res = false
#27 0x00007ffff693811a in QCoreApplication::notifyInternal2 (receiver=receiver@entry=0x7acd10, event=event@entry=0x7fffffffd820)
    at kernel/qcoreapplication.cpp:1015
        selfRequired = true
        result = false
        cbdata = {0x7acd10, 0x7fffffffd820, 0x7fffffffd6df}
        d = <optimized out>
        threadData = 0x645f00
        loopLevelCounter = {threadData = 0x645f00}
#28 0x00007ffff6c6ae23 in QCoreApplication::sendSpontaneousEvent (event=0x7fffffffd820, receiver=0x7acd10)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:228
No locals.
#29 QGuiApplicationPrivate::processMouseEvent (e=0xb5f140) at kernel/qguiapplication.cpp:1877
        type = QEvent::MouseButtonRelease
        stateChange = <optimized out>
        window = 0x7acd10
        localPoint = {xp = 59, yp = 267}
        globalPoint = {xp = 626, yp = 478}
        button = Qt::LeftButton
        doubleClick = false
        frameStrut = false
        ev = {<QInputEvent> = {<QEvent> = {_vptr.QEvent = 0x7ffff7032018 <vtable for QMouseEvent+16>, static staticMetaObject = {
                d = {superdata = 0x0, stringdata = 0x7ffff6aed200 <qt_meta_stringdata_QEvent>, 
                  data = 0x7ffff6aecc60 <qt_meta_data_QEvent>, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}, 
              d = 0x0, t = 3, posted = 0, spont = 1, m_accept = 1, reserved = 7856}, modState = {i = 0}, ts = 41928309}, l = {
            xp = 59, yp = 267}, w = {xp = 59, yp = 267}, s = {xp = 626, yp = 478}, b = Qt::LeftButton, mouseState = {i = 0}, 
          caps = 0, velocity = {xp = 0, yp = 0}}
#30 0x00007ffff6c6c825 in QGuiApplicationPrivate::processWindowSystemEvent (e=e@entry=0xb5f140) at kernel/qguiapplication.cpp:1661
No locals.
#31 0x00007ffff6c4eaeb in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at kernel/qwindowsysteminterface.cpp:648
        event = 0xb5f140
        nevents = 1
#32 0x00007fffebf99c00 in userEventSourceDispatch (source=<optimized out>) at eventdispatchers/qeventdispatcher_glib.cpp:70
        userEventSource = <optimized out>
        dispatcher = <optimized out>
#33 0x00007ffff708f0c5 in g_main_dispatch () at /tmp/portage/dev-libs/glib-2.48.1-r1/work/glib-2.48.1/glib/gmain.c:3154
No locals.
#34 g_main_context_dispatch () at /tmp/portage/dev-libs/glib-2.48.1-r1/work/glib-2.48.1/glib/gmain.c:3769
No locals.
#35 0x00007ffff708f281 in g_main_context_iterate () at /tmp/portage/dev-libs/glib-2.48.1-r1/work/glib-2.48.1/glib/gmain.c:3840
No locals.
#36 0x00007ffff708f324 in g_main_context_iteration () at /tmp/portage/dev-libs/glib-2.48.1-r1/work/glib-2.48.1/glib/gmain.c:3901
No locals.
#37 0x00007ffff69838bf in QEventDispatcherGlib::processEvents (this=0x691f10, flags=...) at kernel/qeventdispatcher_glib.cpp:417
        d = 0x694ca0
        canWait = true
        savedFlags = {i = 0}
        result = <optimized out>
#38 0x00007ffff693709a in QEventLoop::exec (this=this@entry=0x7fffffffdba0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
        d = 0x6f1a40
        locker = {val = 6578160}
        ref = {d = 0x6f1a40, locker = @0x7fffffffdb30, exceptionCaught = true}
#39 0x00007ffff693e68d in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1285
        threadData = 0x645f00
        eventLoop = {<QObject> = {_vptr.QObject = 0x7ffff6b6a438 <vtable for QEventLoop+16>, static staticMetaObject = {d = {
                superdata = 0x0, stringdata = 0x7ffff6a8e2e0 <qt_meta_stringdata_QObject>, 
                data = 0x7ffff6a8e1c0 <qt_meta_data_QObject>, 
                static_metacall = 0x7ffff69655d0 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
                relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x6f1a40}, static staticQtMetaObject = {d = {
                superdata = 0x0, stringdata = 0x7ffff6ad5de0 <qt_meta_stringdata_Qt>, data = 0x7ffff6ad3360 <qt_meta_data_Qt>, 
                static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {
              superdata = 0x7ffff6b6c400 <QObject::staticMetaObject>, stringdata = 0x7ffff6aec860 <qt_meta_stringdata_QEventLoop>, 
              data = 0x7ffff6aec800 <qt_meta_data_QEventLoop>, 
              static_metacall = 0x7ffff69caa90 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
              relatedMetaObjects = 0x0, extradata = 0x0}}}
        returnCode = <optimized out>
#40 0x00007ffff6c6283c in QGuiApplication::exec () at kernel/qguiapplication.cpp:1607
No locals.
#41 0x00007ffff78f8a35 in QApplication::exec () at kernel/qapplication.cpp:2979
No locals.
#42 0x000000000040f3e9 in main (argc=1, argv=<optimized out>)
    at /tmp/portage/media-sound/pavucontrol-qt-9999/work/pavucontrol-qt-9999/src/pavucontrol.cc:693
        app = {<QGuiApplication> = {<QCoreApplication> = {<QObject> = {_vptr.QObject = 0x7ffff7daf828 <vtable for QApplication+16>, 
                static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x7ffff6a8e2e0 <qt_meta_stringdata_QObject>, 
                    data = 0x7ffff6a8e1c0 <qt_meta_data_QObject>, 
                    static_metacall = 0x7ffff69655d0 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
                    relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x645d90}, static staticQtMetaObject = {d = {
                    superdata = 0x0, stringdata = 0x7ffff6ad5de0 <qt_meta_stringdata_Qt>, data = 0x7ffff6ad3360 <qt_meta_data_Qt>, 
                    static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {
                  superdata = 0x7ffff6b6c400 <QObject::staticMetaObject>, 
                  stringdata = 0x7ffff6aeca20 <qt_meta_stringdata_QCoreApplication>, 
                  data = 0x7ffff6aec900 <qt_meta_data_QCoreApplication>, 
                  static_metacall = 0x7ffff69cac10 <QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, static self = 0x7fffffffdc90}, static staticMetaObject = {d = {
                superdata = 0x7ffff6b6a580 <QCoreApplication::staticMetaObject>, 
                stringdata = 0x7ffff6f820e0 <qt_meta_stringdata_QGuiApplication>, 
                data = 0x7ffff6f81ea0 <qt_meta_data_QGuiApplication>, 
                static_metacall = 0x7ffff6c6ca10 <QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
                relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {
              superdata = 0x7ffff7031940 <QGuiApplication::staticMetaObject>, 
              stringdata = 0x7ffff7c61860 <qt_meta_stringdata_QApplication>, data = 0x7ffff7c616e0 <qt_meta_data_QApplication>, 
              static_metacall = 0x7ffff78fe3e0 <QApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
              relatedMetaObjects = 0x0, extradata = 0x0}}}
        locale = {static null = {<No data fields>}, d = 0x6acaa0}
        qtTranslator = {<QObject> = {_vptr.QObject = 0x7ffff6b6a838 <vtable for QTranslator+16>, static staticMetaObject = {d = {
                superdata = 0x0, stringdata = 0x7ffff6a8e2e0 <qt_meta_stringdata_QObject>, 
                data = 0x7ffff6a8e1c0 <qt_meta_data_QObject>, 
                static_metacall = 0x7ffff69655d0 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
                relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x6b24d0}, static staticQtMetaObject = {d = {
                superdata = 0x0, stringdata = 0x7ffff6ad5de0 <qt_meta_stringdata_Qt>, data = 0x7ffff6ad3360 <qt_meta_data_Qt>, 
                static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {
              superdata = 0x7ffff6b6c400 <QObject::staticMetaObject>, stringdata = 0x7ffff6aef100 <qt_meta_stringdata_QTranslator>, 
              data = 0x7ffff6aef0c0 <qt_meta_data_QTranslator>, 
              static_metacall = 0x7ffff69cb4d0 <QTranslator::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
              relatedMetaObjects = 0x0, extradata = 0x0}}}
        appTranslator = {<QObject> = {_vptr.QObject = 0x7ffff6b6a838 <vtable for QTranslator+16>, static staticMetaObject = {d = {
                superdata = 0x0, stringdata = 0x7ffff6a8e2e0 <qt_meta_stringdata_QObject>, 
                data = 0x7ffff6a8e1c0 <qt_meta_data_QObject>, 
                static_metacall = 0x7ffff69655d0 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
                relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x6b8c60}, static staticQtMetaObject = {d = {
                superdata = 0x0, stringdata = 0x7ffff6ad5de0 <qt_meta_stringdata_Qt>, data = 0x7ffff6ad3360 <qt_meta_data_Qt>, 
                static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d = {
              superdata = 0x7ffff6b6c400 <QObject::staticMetaObject>, stringdata = 0x7ffff6aef100 <qt_meta_stringdata_QTranslator>, 
              data = 0x7ffff6aef0c0 <qt_meta_data_QTranslator>, 
              static_metacall = 0x7ffff69cb4d0 <QTranslator::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
              relatedMetaObjects = 0x0, extradata = 0x0}}}
        parser = {d = 0x691110}
        tabOption = {d = {d = 0x6abb30}}
        retryOption = {d = {d = 0x6b1d50}}
        maximizeOption = {d = {d = 0x6ad010}}
        mainWindow = 0x6bf970
        m = 0x7a2040
        __PRETTY_FUNCTION__ = "int main(int, char**)"

Timeout message upon adjusting control of output device

Launching fc7847e from a terminal emulator there's a bunch of timeout messages

[peter@arch-64-lxqt-git ~]$ TIMEOUT!
TIMEOUT!
TIMEOUT!
TIMEOUT!
TIMEOUT!
TIMEOUT!
TIMEOUT!
[...]

each time the controls of the current output device are adjusted.

Issue seems to be hardware and architecture independent as the findings are the same with a Realtek HDA codec on x86_64 and some AC97 virtual codec in x86_64 or i686 QEMU guests. Similarly, it doesn't matter whether or not the two channels of stereo sound are locked.
Finding can not be made with pavucontrol (GTK) on the same systems.

Couldn't see any real malfunction due to this but thought it may be worth dropping this report nevertheless.

Option to disable adjustments past 100%

I've damaged a pair of headphones before when accidentally adjusting the volume past 0dB, fortunately I wasn't wearing them. Surely I'm not the first person to do this so an option like this in the configuration section would be great.

Typo

<source>Connection to PulseAudio failed. Automatic retry in 5s.&lt;br&gt;&lt;br&gt;In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Propertiesor default-server in client.conf is misconfigured.&lt;br&gt;This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window.&lt;br&gt;If this is the case, then PulseAudio should autospawn again, or if this is not configured you shouldrun start-pulseaudio-x11 manually.</source>

Typo in Propertiesor !
Should not be Properties or ?

Underscores in translation files.

It seems that ts files converted from po, and contains unneeded underscore symbols (I guess, its needed for hotkeys).

You can see it by launching
LC_ALL=pt pavucontrol-qt
or
LC_ALL=ru pavucontrol-qt

or else

Clicking volume meter shouldn't change volume by increments

Expected Behavior

If the volume is at 40% and I click on the meter where it would be 80%, the volume should change to 80% rather than to 45%.

Current Behavior

Volume moves at increments of 5% for every click.

Context

If I want to change the volume it's inconvenient to have to click, e.g. 6-15 times just to get it to the volume desired because of the 5% increments.
It's also inconvenient to locate the small volume slider itself, manage to click on it and drag it to the desired volume.
This is all made harder because the volume meter widget is so narrow that clicking needs to be very precise, and multiple clicks are required.

image

pavucontrol has the expected behaviour and is much easier to change volume on (no less because the slider widget is taller).

image

System Information --->
  • Distribution & Version: ArchLinux
  • Package version: 1.2.0.1.g808b54b-1

Can't hear anything every 4 minutes

I just installed Debian 10 lxqt and the computer is doing very well. Except for the fact of a problem with the audio. In practice very often (too much), while I am correctly reproducing an audio, suddenly, I don't hear anything anymore. The only way to solve this is to open the pulseaudio mixer, set the output on the headphones, and then reset it to the PC speakers. The problem is that it happens every 3/4 minutes, far too often.

Compiler warnings

Compiling fc7847e on Arch Linux there are some compiler warnings

[...]
    Ignored 63 untranslated source text(s)
Scanning dependencies of target pavucontrol-qt
[ 74%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/pavucontrol.cc.o
[ 76%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/mainwindow.cc.o
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/mainwindow.cc: In constructor 'MainWindow::MainWindow()':
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/mainwindow.cc:100:13: warning: unused variable 'width' [-Wunused-variable]
         int width  = g_key_file_get_integer(config, "window", "width", nullptr);
             ^~~~~
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/mainwindow.cc:101:13: warning: unused variable 'height' [-Wunused-variable]
         int height = g_key_file_get_integer(config, "window", "height", nullptr);
             ^~~~~~
[ 78%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/cardwidget.cc.o
[ 80%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/channelwidget.cc.o
[ 82%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/devicewidget.cc.o
[ 84%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/minimalstreamwidget.cc.o
In file included from /usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/devicewidget.cc:28:0:
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/devicewidget.h: In constructor 'DeviceWidget::DeviceWidget(MainWindow*, QByteArray)':
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/devicewidget.h:88:16: warning: 'DeviceWidget::mDeviceType' will be initialized after [-Wreorder]
     QByteArray mDeviceType;
                ^~~~~~~~~~~
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/devicewidget.h:49:10: warning:   'bool DeviceWidget::offsetButtonEnabled' [-Wreorder]
     bool offsetButtonEnabled;
          ^~~~~~~~~~~~~~~~~~~
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/devicewidget.cc:33:1: warning:   when initialized here [-Wreorder]
 DeviceWidget::DeviceWidget(MainWindow* parent, QByteArray deviceType) :
 ^~~~~~~~~~~~
[ 86%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/rolewidget.cc.o
[ 88%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/sinkinputwidget.cc.o
[ 90%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/sinkwidget.cc.o
[ 92%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/sourceoutputwidget.cc.o
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/sinkwidget.cc: In member function 'virtual void SinkWidget::executeVolumeUpdate()':
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/sinkwidget.cc:80:10: warning: unused variable 'dev' [-Wunused-variable]
     char dev[64];
          ^~~
/usr/local/peter/Tests/pavucontrol-qt/Projekt/pavucontrol-qt/src/sinkwidget.cc:81:9: warning: unused variable 'playing' [-Wunused-variable]
     int playing = 0;
         ^~~~~~~
[ 94%] Building CXX object src/CMakeFiles/pavucontrol-qt.dir/sourcewidget.cc.o
[...]

Couldn't see any malfunction due to them. Yet I assume they're worth having another look at.

Enable wordwrap on error message when connection fails

When it failts to connect to PA it shows a long message about it which makes the window very big.

Expected Behavior

The error message is word-wrapped and the window has regular size.

Current Behavior

Error message makes the window very big

Possible Solution

Enable wordwrap

Steps to Reproduce (for bugs)
  1. Disable PA (somehow)
  2. Start this program
  3. Observe
Context

I have 2 screens so I can find the other end of the window, but for smaller screens the window becomes too big

System Information
  • Distribution & Version: Artix (rolling, about week or so old)
  • Kernel: 5.8.10-artix1-1
  • Qt Version: 5.15.1
  • libqtxdg Version:
  • lxqt-build-tools Version:
  • Package version:
Bonus

It would be nice to be able to copy the error message for easier debugging.

Preview

Screenshot_2020-10-06_20-26-09

Desktop entry file has to be adjusted

Keys Name, GenericName and Comment in desktop entry file pcmanfm-qt.desktop are stating the same values as in the corresponding file of the GTK version which will cause confusing results in menus and hence needs to be changed.

Posting an issue and not a PR as unsure how to do this best.
Of course the fact pavucontrol-qt is some kind of Qt counterpart of the GTK version has to be reflected.
That aside I do not think the upstream values make too much sense. E. g. given GenericName (rightly) states Volume Control this Comment=Adjust the volume level really comes as no suprise.

Maybe

Name=pavucontrol-Qt
GenericName=Volume Control
Comment=Volume control of PulseAudio sound server (Qt version)

or something like that?

No volume meter with some Qt styles.

Choosing Windows Qt style, or others (Skulpture) , there is not real time volume indicator on top of the volume slider.

I thought it was an problem of Skulpture theme, so I've opened an issue here

Quoting the dev answer of the developer:

The pavucontrol-qt application hardcodes the height of the QProgressBar widget, see line 41 in https://github.com/lxqt/pavucontrol-qt/blob/master/src/minimalstreamwidget.cc

If it doesn't want to use QStyle::sizeFromContents(), then it could at least query the frame width using QStyle::pixelMetric(PM_DefaultFrameWidth).

System Information
  • Distribution & Version: Opensuse Tumbleweed
  • Kernel: Linux 4.18.5-1
  • Qt Version: Qt 5.11.1
  • libqtxdg Version: 3.1.0
    #* Package version: 0.4.0

Icons not visible

Expected Behavior

I should see icons in the top right corner of audio devices, for "Muta audio", "Lock channels together", "Set as fallback actions"

Current Behavior

I don't see any icons:

image

Possible Solution
Steps to Reproduce (for bugs)
  1. Open pavucontrol-qt
Context

I have to change the default sink from laptop microphone to bluetooth headset microphone

System Information
  • Distribution & Version: Arch Linux
  • Kernel: 6.7.2
  • Qt Version:
  • Package version:
➜ pavucontrol-qt --version
pavucontrol-qt 1.4.0
Qt        5.15.11
  • libqtxdg Version: It was not even installed as the Arch package doesn't depend on it. Manually installing it from official repo. Version libqtxdg-3.12.0-2. Bug still persists.
  • lxqt-build-tools Version: Not installed (only needed if you compile from source?)

hangs with Establishing connection to Pulseaudio

Expected Behavior
Current Behavior
Possible Solution
Steps to Reproduce (for bugs)
  1. run XFCE and Pulseaudio in system-wide mode
Context
System Information
  • Distribution & Version: Gentoo
  • Kernel:
  • Qt Version: 5.12.3
  • libqtxdg Version:
  • lxqt-build-tools Version:
  • Package version:

What do the three little square buttons in Output Devices tab do? (I am confused by the UI)

Expected Behavior

I'd like to be able to easily switch output from laptop headphones to external monitor, and back.

Current Behavior

I have to randomly click the three buttons a bunch of times until the sound comes on.

Possible Solution

Could you please explain how this works?

Context

I am having trouble switching between my built-in audio headphones jack and the speakers in my external monitor. I am confused by the UI.

The readme says the usage should be self-explanatory, but I don't get it. Help?

System Information

pavucontrol-qt 0.16.0
Qt 5.15.2

screenshot

Windows support

It would be great if pavucontrol-qt supported Windows because the Windows pulseaudio port doesn't include a GUI.

How much effort would it be add Windows support?

Would patches be accepted for this if the lxqt team has no interest in adding Windows support to pavucontrol-qt?

Muting of Monitor Source with Pipewire

Expected Behavior

If I mute a (monitor) source, the GUI should reflect the real mute status of the source. If muting is not possible it should ether be disabled in the GUI or should not change the mute state.

Current Behavior

When using pipewire-pulse as a pulseaudio replacement, if I mute a monitor source it will appear as muted (volume slider is grayed out). But the level indicator still shows sound and after restarting pavucontrol, the monitor source is unmuted again, since muting monitor sources seems not to be allowed with pipewire-pulse.

Possible Solution

One possibility would to disable the option to mute monitor sources. But since the original pulseaudio allows it, the running sound server may need to be detected and taken into account.

Another solution would be fixing the GUI, so it will not show the monitor source as muted even if it isn't.

Steps to Reproduce (for bugs)
  1. Use pipewire-pulse as sound server
  2. Open pavucontrol.qt
  3. Go to »Input Devices« and select »Show: Monitors«
  4. Click on the »Mute audio« button
  5. The monitor source seems to be muted
  6. Restart pavucontrol-qt and see, that the monitor source is not muted
Context

I found this by trying to debug my own pulseaudio control programm and tried to use pavucontrol-qt as a debugging tool: https://gitlab.com/quanten/pulseaudio-switchboard-operator/-/commit/e21348f84d71b6a45dcf4ffcf0638fbf51995f70

System Information
  • Distribution & Version: ArchLinux
  • Kernel: 5.11.4-arch1-1
  • Qt Version: 5.15.1
  • libqtxdg Version: 3.6.0-2
  • lxqt-build-tools Version: -
  • Package version: 0.16.0

Emit sound when changing volume

Enhancement request:

Can pavucontrol-qt emit sounds when changing the volume just like pavucontrol?

This is the best way to check volume levels

I could not compile to check if this is working, but i also did not found any commit related.

Not showing functional icons

Expected Behavior

Showing functional icons.

Current Behavior

image
Not showing mute icons.

Steps to Reproduce (for bugs)
  1. pacman -S pavucontrol-qt
  2. run pavucontrol-qt
System Information
  • Distribution & Version: Arch Linux
  • Kernel: 5.0.2-arch1-1-ARCH
  • Qt Version: 5.12.2-1
  • libqtxdg Version: none
  • lxqt-build-tools Version: none
  • Package version: 0.14.1

Minimize Dependencies

I'd like to compile this without the lxqt stuff installed. This patch worked for me:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a8a1109..3d5bb9f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,12 +14,7 @@ include(GNUInstallDirs)

 find_package(Qt5Widgets REQUIRED QUIET)
 find_package(Qt5LinguistTools REQUIRED QUIET)
-
-find_package(lxqt REQUIRED QUIET)
-find_package(XdgUserDirs REQUIRED QUIET)
-
-include(LXQtCompilerSettings NO_POLICY_SCOPE)
-include(LXQtTranslate)
+find_package(Qt5DBus REQUIRED QUIET)

 find_package(PkgConfig REQUIRED QUIET)
 pkg_check_modules(
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 99b3205..84b1c19 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -44,30 +44,6 @@ set(pavucontrol-qt_UI
     streamwidget.ui
 )

-# Translations
-lxqt_translate_ts(pavucontrol-qt_QM_FILES
-    UPDATE_TRANSLATIONS
-        ${UPDATE_TRANSLATIONS}
-    SOURCES
-        ${pavucontrol-qt_HDRS}
-        ${pavucontrol-qt_SRCS}
-        ${pavucontrol-qt_UI}
-    INSTALL_DIR
-        "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/translations"
-    PULL_TRANSLATIONS
-        ${PULL_TRANSLATIONS}
-    CLEAN_TRANSLATIONS
-        ${CLEAN_TRANSLATIONS}
-    TRANSLATIONS_REPO
-        ${TRANSLATIONS_REPO}
-    TRANSLATIONS_REFSPEC
-        ${TRANSLATIONS_REFSPEC}
-)
-lxqt_translate_desktop(DESKTOP_FILES
-    SOURCES
-    pavucontrol-qt.desktop.in
-)
-
 add_executable(pavucontrol-qt
     ${pavucontrol-qt_SRCS}
     ${pavucontrol-qt_QM_FILES}
@@ -98,3 +74,5 @@ install(FILES
     DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
     COMPONENT Runtime
 )
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")

[Feature Request] That you can mute your microphone for specific applications

Expected Behavior

I want to be able to mute your mic on a per application basis.
So that you can for example mute your mic for online school but still use it for Discord.
I also want to be able to adjust the volume per app.

Current Behavior

That I have to mute my mic entirely for all applications and that I can't talk with friends while having online class.
I know there are cli ways to do that,but that is annoying to do.

Possible Solution

That every application has it's own microphone control.

wrongSpinBoxMaxRange

Qt version supports setting latency offset only to 100ms. It must be like gtk version any int value #wrongSpinBoxMaxRange
PS: my headphones need ~250 ms to work correctly

Intermittent segmentation fault when connected to bluetooth audio devices

Expected Behavior

pavucontrol-qt should remain open when connecting to or disconnecting from bluetooth audio devices.

Current Behavior

On occasion connecting to a bluetooth device will cause the application to crash with a segmentation fault.

Steps to Reproduce (for bugs)
  1. Open pavucontrol-qt or have pavucontrol-qt open.
  2. Using some bluez shell or UI, connect an audio device.
  3. pavucontrol-qt will forcibly quit with a segfault.
  4. Upon reopen of pavucontrol-qt, it will forcibly quit with a segfault after connecting to pulseaudio.
Context

I can still use bluetooth audio devices by disabling all other sinks prior to connecting. Sometimes, pavucontrol-qt doesn't segfault and I can manage the devices. Its about 50/50. Will need guidance as to how to gather useful debugging information, console output is currently:

> pavucontrol-qt

Segmentation fault (core dumped)
System Information
  • Distribution & Version: Arch Linux
  • Kernel: 5.6.11-arch1-1
  • Qt Version: 5.15.0-1
  • libqtxdg Version: 3.5.0-2
  • lxqt-build-tools Version: 0.7.0-1
  • Package version: 0.15.0-1

Eliding is needed sometimes

Eliding is better than showing a horizontal scrollbar suddenly, when the text is too long.

Expected Behavior

Elide the text when needed.

Current Behavior

A scrollbar is suddenly shown, which seems neither practical nor professional:

eliding

System Information

Latest git version(s)

Check translation codes projectwide

Its seem language code beginning with "sr" are using these formats for translations filename and value for language="" inside the files:
sr.ts
[email protected]
sr_BA.ts
sr_RS.ts

Only one using "sr":
pavucontrol-qt_sr.ts is using:

Maybe someone translating to that language can decide if pavucontrol-qt_sr.ts should be changed to pavucontrol-qt_sr_RS.ts and language="sr" to language="sr_RS".

Should sr@latin be changed to sr_RS@latin?

I'm just guessing.

[Feature request] Bluetooth profile selector

Expected Behavior

When I connect a Bluetooth device, I expect a Codec selector shown next to the Profile selector that can select Bluetooth codecs (e.g., "LDAC (Mobile Quality)").

Current Behavior

The "Codec" selector is missing for Bluetooth devices.

image
(Left: pavucontrol-qt; Right: pavucontrol)

Possible Solution

I'm not familiar with how these projects are developed but porting the functionality implemented with https://gitlab.freedesktop.org/pulseaudio/pavucontrol/-/merge_requests/54 could be an option, I think.

Steps to Reproduce (for bugs)
  1. Load module module-bluetooth-discover
  2. Pair a Bluetooth headphone
  3. Run pavucontrol-qt
  4. Open the Configuration tab
Context

Selecting Codec with pavucontrol-qt will make people switch codecs easier.
My headphone (Sony WH-1000XM2) apparently does not work well with some codecs (e.g., "LDAC (High Quality)" which was the default codec chosen for the device). It took some time for me to troubleshoot the issue. It would be great if pavucontrol-qt had the Codec selector, which would help people to find the workaround easier.

System Information
  • Distribution & Version: Gentoo Linux
  • Kernel: 5.15.41-gentoo-x86_64
  • Qt Version: 5.15.5
  • libqtxdg Version:
  • lxqt-build-tools Version: 0.11.0
  • Package version: 1.0.0

Blocking action causes Sway/Wayland UI timeout

Expected Behavior

That the app should remain running.

Current Behavior

After a time, switching back to the Sway workspace that the app is on causes the app to close.

This is references in these issues;

Possible Solution

Threading.

Steps to Reproduce (for bugs)
  1. Use Sway Wayland compositor
  2. Run pavucontrol-qt
  3. Use another app on another workspace for a time
  4. Switch back to workspace with app
Context

I have to restart the app each time I want to readjust things.

System Information

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.