Commit Graph

83 Commits

Author SHA1 Message Date
David Henningsson
ce8e4880ce mixer-control: Fix selecting Bluetooth input when on A2DP profile
When on A2DP profile and a Bluetooth input is selected, we first need to
switch the profile to HFP/HSP, then select the default source to be that
profile. In some cases the latter step was forgotten, because
the variable "profile_swapping_device_id" was reset before it was
supposed to be used.

https://bugzilla.gnome.org/show_bug.cgi?id=736943
2017-04-06 15:06:28 +02:00
Bastien Nocera
d52194fce1 mixer-control: Fix extra reference being leaked
In both cases objects are inserted in hash table by adding an
extra ref, but the existing reference was never removed. Don't
add a reference instead, so we don't end up with a spare one.

Based on patch by Alberts Muktupāvels <alberts.muktupavels@gmail.com>

https://bugzilla.gnome.org/show_bug.cgi?id=765694
2017-04-06 14:34:51 +02:00
Bastien Nocera
25bf3ed75f gvc-mixer-control: Really fix double-free when setting headset
In a28e23d900, we said:
The callbacks will be called repeatedly, once with data, and later
on with eol == 0. Make sure to only free it when we get the eol call
instead of once we've applied the settings.

Whereas the docs say:
When requesting all of these [instances] at once, the callback will be
called multiple times, once for each object. When the list has been
exhausted, the callback will be called without an information structure
and the eol parameter set to a positive value.

If an error occurs, the callback will be invoked without an information
structure and eol set to a negative value.

So, in all, we need to free our callback data when eol is positive, or
negative. So, when it's not 0.

Seems we got lucky in the original commit because the test machine only
had a single soundcard.
2016-04-17 22:27:47 +02:00
Bastien Nocera
8fc9c62a69 tests: Add audio device selection question
So that the test utility mimicks the code in gnome-settings-daemon.
2016-04-17 22:27:26 +02:00
Bastien Nocera
2a117d6024 tests: Add a Makefile for tests
And add a test for the audio device selection feature, added in
GNOME 3.20.
2016-04-17 20:49:55 +02:00
Bastien Nocera
0a500795bd gvc-mixer-control: Fix memory leak on error path
When setting the headset port, make sure to also free the work data
if eol is negative, eg. if the call failed.
2016-02-22 14:06:08 +01:00
Bastien Nocera
a28e23d900 gvc-mixer-control: Fix double-free when setting headset
The callbacks will be called repeatedly, once with data, and later
on with eol == 0. Make sure to only free it when we get the eol call
instead of once we've applied the settings.

Example valgrind output:
==31715== Invalid read of size 8
==31715==    at 0x24529E09: port_status_data_free (gvc-mixer-control.c:2079)
==31715==    by 0x1DB81344: ??? (in /usr/lib64/libpulse.so.0.18.2)
==31715==    by 0x1DDF3FE0: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF436A: pa_pdispatch_run (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DB7507D: ??? (in /usr/lib64/libpulse.so.0.18.2)
==31715==    by 0x1DDF6B5E: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF91BA: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF9568: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF9DF9: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1D96202A: ??? (in /usr/lib64/libpulse-mainloop-glib.so.0.0.5)
==31715==    by 0x7AA7CF9: g_main_dispatch (gmain.c:3154)
==31715==    by 0x7AA7CF9: g_main_context_dispatch (gmain.c:3769)
==31715==    by 0x7AA8057: g_main_context_iterate.isra.29 (gmain.c:3840)
==31715==  Address 0x2bd83480 is 0 bytes inside a block of size 16 free'd
==31715==    at 0x4C2ED6A: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==31715==    by 0x7AAD2AD: g_free (gmem.c:189)
==31715==    by 0x1DB81562: ??? (in /usr/lib64/libpulse.so.0.18.2)
==31715==    by 0x1DDF3FE0: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF436A: pa_pdispatch_run (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DB7507D: ??? (in /usr/lib64/libpulse.so.0.18.2)
==31715==    by 0x1DDF6B5E: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF91BA: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF9568: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1DDF9DF9: ??? (in /usr/lib64/pulseaudio/libpulsecommon-7.1.so)
==31715==    by 0x1D96202A: ??? (in /usr/lib64/libpulse-mainloop-glib.so.0.0.5)
==31715==    by 0x7AA7CF9: g_main_dispatch (gmain.c:3154)
==31715==    by 0x7AA7CF9: g_main_context_dispatch (gmain.c:3769)
==31715==  Block was alloc'd at
==31715==    at 0x4C2F9C7: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==31715==    by 0x7AAD1F0: g_malloc0 (gmem.c:124)
==31715==    by 0x2452A39D: gvc_mixer_control_set_port_status_for_headset (gvc-mixer-control.c:2173)
==31715==    by 0x2451BE81: audio_selection_done (gsd-media-keys-manager.c:2489)
==31715==    by 0x7550ED3: emit_signal_instance_in_idle_cb (gdbusconnection.c:3701)
==31715==    by 0x7AA7CF9: g_main_dispatch (gmain.c:3154)
==31715==    by 0x7AA7CF9: g_main_context_dispatch (gmain.c:3769)
==31715==    by 0x7AA8057: g_main_context_iterate.isra.29 (gmain.c:3840)
==31715==    by 0x7AA8371: g_main_loop_run (gmain.c:4034)
==31715==    by 0x5CEA204: gtk_main (gtkmain.c:1246)
==31715==    by 0x403804: main (main.c:434)
2016-02-22 14:06:03 +01:00
Rui Matos
3af25601db gvc-mixer-control: Fix uninitialized variable usage 2016-02-11 18:41:05 +01:00
Bastien Nocera
f3f6812eb9 gvc: Add "what did you plug in" support API
Add "audio-device-selection-needed" which will be emitted when a
headphones, headset or microphone is plugged into a jack socket that
cannot detect which type it was.

Once the user of libgnome-volume-control has asked the user which type
of device this was, they can call gvc_mixer_control_set_headset_port()
to switch the ports for that configuration.

Note that gvc_mixer_control_set_headset_port() supports passing the
card ID, but the detection code only supports a single such device. When
we find hardware that can support > 1 such device, we can test and
implement support without breaking the API.

Based on the original code by David Henningsson <david.henningsson@canonical.com>
for the unity-settings-daemon

https://bugzilla.gnome.org/show_bug.cgi?id=755062
2016-01-17 18:34:07 -02:00
Carlos Silva
d4eda71c49 gvc-mixer-source-output: Update volume and mute status
This commit implements notifying about volume and mute status changes
for source outputs (applications that monitor the microphone, in short).

https://bugzilla.gnome.org/show_bug.cgi?id=760387
2016-01-12 01:31:56 +01:00
Alexander Hofbauer
7e5504db3d Emit a signal for stream-changed
https://bugzilla.gnome.org/show_bug.cgi?id=744140
2015-10-05 15:36:43 +02:00
Alberts Muktupāvels
0a79019088 gvc-mixer-control: fix build warnings
- Fix warning about comparison between signed and unsigned integer
  expressions
- Change variable name 'output' to 'device' to fix warning:
  declaration of 'output' shadows a parameter
- Fix warning about missing default case in switch
2015-09-15 15:45:53 +03:00
Alberts Muktupāvels
84819a350d gvc-mixer-stream: make card-index unsigned int
Card in pa_source_info that is used as card-index is uint32_t so it
is never less then 0. Also index in GvcMixerCard is already unsigned
int that is used to compare with card-index. This fixes build
warning - comparison between signed and unsigned integer expressions.

https://bugzilla.gnome.org/show_bug.cgi?id=752244
2015-09-15 15:35:26 +03:00
Alberts Muktupāvels
b7bce32944 gvc-mixer-ui-device: make stream-id unsigned int
GvcMixerStream id is unsigned int and starts with 1, so we can use
0 as invalid id. This fixes build error/warning - comparison
between signed and unsigned integer expressions.
2015-09-09 14:14:15 +03:00
Alberts Muktupāvels
26ea473077 gvc-mixer-ui-device: fix build warnings 2015-09-09 14:13:03 +03:00
Alberts Muktupāvels
7e2d239a91 remove unneeded *_class_init and *_init declarations 2015-09-09 14:13:00 +03:00
David Henningsson
fac3a900e5 gvc-mixer-control: Fix bluetooth duplicates
Entries are only hidden when available == PA_PORT_AVAILABLE_NO, so if an
entry toggles between PA_PORT_AVAILABLE_YES and
PA_PORT_AVAILABLE_UNKNOWN (Bluetooth headset switching between HSP/HFP
and A2DP for example), this should not result in new entries being created.

https://bugzilla.gnome.org/show_bug.cgi?id=697545
2015-04-01 14:10:14 +02:00
Jasper St. Pierre
e14dbe8aa6 gvc-mixer-ui-device: Fix memory leak 2013-09-04 12:58:28 -04:00
Giovanni Campagna
11e46cd40d <name> should match repository's name. 2013-08-21 00:40:05 +02:00
Cosimo Cecchi
6826d0a5fe build: fix building with -std=c99
The "uint" type is not defined for standard C, and building with
-std=c99 enable stricter conformance and results in compilation failing.
Use "guint" instead.
2013-07-09 14:09:05 -07:00
David Henningsson
ed0ec42401 ui-device: Don't add off profiles
Right now, makes sure "Off" profiles are not added, because when selected,
the item will disappear and there's no way to get it back (because it
disappeared). In the long term, handling the "off" profile correctly
would be better.

https://bugzilla.gnome.org/show_bug.cgi?id=693654
2013-03-26 18:13:10 +01:00
Emanuele Aina
3d6aac673b build: Ignore object files (*.o) 2013-03-11 13:46:27 +01:00
Giovanni Campagna
74c08620b4 Add a GIcon accessor for GvcMixerUIDevices
This will allow to have different icons for internal audio cards
(which are flagged generically as "audio-card"), depending on which
port is in use (ie. headphones or speakers).
This requires the new icon information, which is only exported by
PulseAudio 3.0. If it's not available, we fallback to card icons
like before.

https://bugzilla.gnome.org/show_bug.cgi?id=689931
2013-02-18 14:39:54 +01:00
Florian Müllner
03894efbcd build: Include .typelib in CLEANFILES 2012-12-18 16:26:28 +01:00
Colin Walters
40cdff2479 build: use correct -I$(srcdir)
This Makefile.am is designed for recursive Automake, so we should use
-I$(srcdir), not -I$(srcdir)/gvc.
2012-12-08 13:35:36 -05:00
Giovanni Campagna
c1f42d50e3 GvcMixerStream: expose form factor from PulseAudio
https://bugzilla.gnome.org/show_bug.cgi?id=675902
2012-12-08 15:45:28 +01:00
Giovanni Campagna
740bab1714 Gvc: make GvcMixerStreamPort a boxed type
It's a prerequisite for accessing it from JS

https://bugzilla.gnome.org/show_bug.cgi?id=675902
2012-12-08 15:45:28 +01:00
Bastien Nocera
eab2bf3eea Fix warnings during build
No need to include the $(srcdir)/gvc directory, it's us.
2012-11-27 12:42:03 +01:00
Giovanni Campagna
f3df56c399 Remove Gtk dependency
It is undesirable in gnome-settings-daemon
2012-10-22 22:03:35 +02:00
Giovanni Campagna
96e9f84a2b Add DOAP file
Otherwise GNOME git rejects pushes.
Added myself as maintainer because I created the repository.
2012-10-22 22:03:35 +02:00
Giovanni Campagna
a1448acc5b Fix introspection support
Fix includes, comments and parameter names so that introspection builds
without warnings.
2012-10-19 20:00:47 +02:00
Giovanni Campagna
698b3a5f60 Add .gitignore
Hand-edited because gnome-shell does not use git.mk
2012-10-19 20:00:31 +02:00
Giovanni Campagna
9b6e6719d4 Initial import
Code from gnome-control-center, build system integration from gnome-shell
2012-10-19 20:00:25 +02:00