libcanberra is an old abandoned project whose last release
was well over a decade ago, despite getting some few fixes
on its master branch since then, which are unreleased.
My problem with libcanberra is that it can't be built on
pure wayland systems (no X11 headers) which are becoming
more common nowadays.
It is the only thing keeping pavucontrol tied to X11, all
other dependencies (eg gtk+) build fine on pure wayland.
Since canberra is not a core part of the project, let's
make it optional so pavucontrol can build & work on
pure wayland systems.
Ideally in the future libcanberra can be replaced with
something else, however I don't have the bandwidth to
take this on for now, so I'm just making it optional.
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
These are taken from README.html.in, without the information about new
dependencies (IMHO not useful to end-users) or “Some bug fixes.” (IMHO
not specific enough to be useful).
This file is taken from the Flathub package, as of
https://github.com/flathub/org.pulseaudio.pavucontrol/pull/31 where I
have adjusted the name & summary to conform to Flathub's rules. In
particular:
- The name must be no more than 20 characters, so I have used “Volume
Control” to match the window title and GenericName
- The summary must be no more than 35 characters.
I noticed while preparing this patch that the Comment in the .desktop
file (which the appstream specification says is “roughly equivalent” to
the <summary>) is just “Adjust the volume level”. IMO “Adjust the volume
level” contains no more information than the name “Volume Control”.
Fixes https://gitlab.freedesktop.org/pulseaudio/pavucontrol/-/issues/127
The "Set as fallback" title is a frequent source of confusion, many
people look at it and do not realize that its actual functional is
"setting as default". Presumably, when this title first appeared it
was presumed that apps should chose a device themselves, and then if
they don't there's a "fallback". But in reality most apps do not chose
any device explicitly, and it's expected behavior to make use of this
"fallback" device. So it is more correct to call a "default" device.
The only missing feature for parity with autotools is generating a text
README using lynx. I think this might be okay to skip as it seems
unnecessary as a dependency.
Most of sink input peak indicator streams are still connected alive at the time
their widgets are destroyed. Disconnect and unreference each one to stop memory
leak.
When sink input peak indicator stream is recreated, previous stream is only
disconnected but not unreferenced. Unreference it to stop memory leak.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pavucontrol/-/merge_requests/62>
Server API versions < 35 do not support PA_COMMAND_SEND_OBJECT_MESSAGE
one of these is current Pipewire pulseaudio server.
Do not quit on error sending message to object, this is already handled as if
send message API is not available.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pavucontrol/-/merge_requests/57>
The end result is the same, so this isn't strictly needed - originally
this patch fixed a segfault, but that segfault got fixed in a different
way before merging this patch.
Fixes this compilation issue:
pavuapplication.cc: In function ‘int main(int, char**)’:
pavuapplication.cc:146:32: error: use of deleted function ‘PavuApplication::PavuApplication(PavuApplication&&)’
auto app = PavuApplication();
^
In file included from pavuapplication.cc:29:0:
pavuapplication.h:27:7: note: ‘PavuApplication::PavuApplication(PavuApplication&&)’ is implicitly deleted because the default definition would be ill-formed:
class PavuApplication : public Gtk::Application {
^
In file included from /usr/include/gtkmm-3.0/gtkmm/window.h:32:0,
from /usr/include/gtkmm-3.0/gtkmm/dialog.h:30,
from /usr/include/gtkmm-3.0/gtkmm/aboutdialog.h:33,
from /usr/include/gtkmm-3.0/gtkmm.h:99,
from pavucontrol.h:29,
from pavuapplication.h:24,
from pavuapplication.cc:29:
/usr/include/gtkmm-3.0/gtkmm/application.h:211:3: error: ‘Gtk::Application::Application(const Gtk::Application&)’ is private
Application(const Application&);
^
In file included from pavuapplication.cc:29:0:
pavuapplication.h:27:7: error: within this context
class PavuApplication : public Gtk::Application {
^
In file included from /usr/include/glibmm-2.4/glibmm/wrap.h:26:0,
from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:26,
from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:23,
from /usr/include/glibmm-2.4/glibmm.h:91,
from /usr/include/gtkmm-3.0/gtkmm.h:87,
from pavucontrol.h:29,
from pavuapplication.h:24,
from pavuapplication.cc:29:
/usr/include/glibmm-2.4/glibmm/objectbase.h:238:3: error: ‘Glib::ObjectBase::ObjectBase(const Glib::ObjectBase&)’ is private
ObjectBase(const ObjectBase&);
^
In file included from pavuapplication.cc:29:0:
pavuapplication.h:27:7: error: within this context
class PavuApplication : public Gtk::Application {
^
In traditional packages, including 'pavucontrol' here is redundant with
Exec. However, only the first field of Exec is used as a search key,
and in the Flatpak the first field is 'flatpak'. I often search for
'pavucontrol' and fail to find the app as a result.
All the others are terms that seem relevant to finding this app. Most of
them are borrowed from gnome-control-center's sound panel's .desktop
file.
The old logic disabled the expander always when a sink didn't have any
ports. That's bad if the sink has no ports but supports configuring
formats. That hasn't caused problems so far, but I have a patch for
module-null-sink that will enable format configuration support, and the
null sink has no ports, so it's affected by this issue.
This patch also changes things so that the expander is completely hidden
when it's disabled instead just setting it non-sensitive. I think that's
better (at least it saves some space).
The updating flag is used to determine whether a change in some UI
control state is due to a user action or an update from the server. The
flag was set to false too early when processing sink and source updates
from the server. This caused at least unnecessary "set port" commands,
because each update refreshes the port list, which generates change
events in the port list combo box, causing the portChanged callbacks to
be called.
The unnecessary "set port" commands could even confuse the automatic
port selection policies in the server. If the current port wasn't
originally explicitly chosen by the user, then the "set port" command
from pavucontrol will make the server think that the user explicitly
chose that port.
If load_icon() fails, we treat the icon name as a file path and try to
load an image from the path. In case that works, we need to ensure that
the has correct size. Previously that wasn't done, which led to too
large icons.
scale_simple() doesn't do anything if the image is already the correct
size, so we can call it unconditionally.
The exception handling was a bit weird in that the exception types
didn't match the documentation of IconTheme::load_icon() and
Image::set(). I updated the exception types (Image::set() doesn't need
exception handling any more, because now it's called with a Pixbuf
rather than a file name).
Fixes: https://gitlab.freedesktop.org/pulseaudio/pavucontrol/issues/60
pavucontrol.glade previously set the channel label width to 15
characters, with the goal of making all channel labels have the same
width. However, with some translations and font settings the configured
width wasn't enough, so sometimes a label was wider than others, and
that made the volume slider widths different too. If the volume sliders
have different widths, it's very hard to visually compare the volumes of
the channels.
This patch removes the fixed width in pavucontrol.glade and solves the
problem by finding the widest label and using that label's width with
all labels.
Fixes: https://gitlab.freedesktop.org/pulseaudio/pavucontrol/issues/51
DeviceWidget and StreamWidget had some duplicate code to initialize
ChannelWidgets. This patch moves some of the duplicated initialization
code into ChannelWidgets to reduce repetition and to improve
encapsulation.
The channel labels ("Front Left" etc.) that are adjacent to volume
sliders used to be left-aligned, which meant that there was some empty
space (depending on the text width) between the label text and the
volume slider. Right-aligning the labels looks nicer.
The volume strings (e.g. ‘86% (-3.81dB)’) shown to the right of each
volume slider is now translatable/localisable. (The similar string
‘100% (0dB)’, centred *below* each slider, was already translatable.)
Also, the English strings now include a space between the decibel value
and the unit, e.g. ‘-3.81 dB’ instead of ‘-3.81dB’.
Fixes: https://gitlab.freedesktop.org/pulseaudio/pavucontrol/issues/52
When opening pavucontrol.glade with Glade 3.22.1, this message was
shown:
pavucontrol.glade targets Gtk+ 2.16
But this version of Glade is for GTK+ 3 only.
Make sure you can run this project with Glade 3.8 with no deprecated
widgets first.
I think it's best to just drop the gtk2 support.
When opening pavucontrol.glade in Glade 3.22.1 and saving the file
without doing any manual changes, these changes are made to the file.
The changes seem harmless, so let's apply them to avoid unnecessary
clutter appearing when doing more important changes in the future.
When opening pavucontrol.glade with Glade and saving it without any
manual changes, Glade does these object rename to get rid of duplicate
IDs. None of these are referenced by the code, so the renames are
harmless.