Skip to content

Commit 2d4f356

Browse files
committed
libcvc: refresh from upstream libgnome-volume-control.
ref: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31
1 parent 26cf760 commit 2d4f356

9 files changed

Lines changed: 672 additions & 946 deletions

libcvc/gvc-channel-map.c

Lines changed: 3 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -89,38 +89,6 @@ gvc_channel_map_get_volume (GvcChannelMap *map)
8989
return map->priv->extern_volume;
9090
}
9191

92-
gfloat
93-
gvc_channel_map_get_balance (GvcChannelMap *map)
94-
{
95-
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0);
96-
97-
if (!pa_channel_map_valid (&map->priv->pa_map))
98-
return 0;
99-
100-
if (gvc_channel_map_can_balance (map))
101-
return (gfloat) pa_cvolume_get_balance (&map->priv->pa_volume, &map->priv->pa_map);
102-
else
103-
return 0;
104-
}
105-
106-
void
107-
gvc_channel_map_set_balance (GvcChannelMap *map,
108-
gfloat value)
109-
{
110-
pa_cvolume cv;
111-
112-
g_return_if_fail (GVC_IS_CHANNEL_MAP (map));
113-
114-
if (!gvc_channel_map_can_balance (map))
115-
return;
116-
117-
cv = *gvc_channel_map_get_cvolume (map);
118-
pa_cvolume_set_balance (&cv, &map->priv->pa_map, value);
119-
120-
if (!pa_cvolume_equal (&cv, &map->priv->pa_volume))
121-
gvc_channel_map_volume_changed (map, &cv, TRUE);
122-
}
123-
12492
gboolean
12593
gvc_channel_map_can_balance (const GvcChannelMap *map)
12694
{
@@ -129,38 +97,6 @@ gvc_channel_map_can_balance (const GvcChannelMap *map)
12997
return map->priv->can_balance;
13098
}
13199

132-
gfloat
133-
gvc_channel_map_get_fade (GvcChannelMap *map)
134-
{
135-
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0);
136-
137-
if (!pa_channel_map_valid (&map->priv->pa_map))
138-
return 0;
139-
140-
if (gvc_channel_map_can_fade (map))
141-
return (gfloat) pa_cvolume_get_fade (&map->priv->pa_volume, &map->priv->pa_map);
142-
else
143-
return 0;
144-
}
145-
146-
void
147-
gvc_channel_map_set_fade (GvcChannelMap *map,
148-
gfloat value)
149-
{
150-
pa_cvolume cv;
151-
152-
g_return_if_fail (GVC_IS_CHANNEL_MAP (map));
153-
154-
if (!gvc_channel_map_can_fade (map))
155-
return;
156-
157-
cv = *gvc_channel_map_get_cvolume(map);
158-
pa_cvolume_set_fade (&cv, &map->priv->pa_map, value);
159-
160-
if (!pa_cvolume_equal (&cv, &map->priv->pa_volume))
161-
gvc_channel_map_volume_changed(map, &cv, TRUE);
162-
}
163-
164100
gboolean
165101
gvc_channel_map_can_fade (const GvcChannelMap *map)
166102
{
@@ -169,51 +105,6 @@ gvc_channel_map_can_fade (const GvcChannelMap *map)
169105
return map->priv->can_fade;
170106
}
171107

172-
gfloat
173-
gvc_channel_map_get_lfe (GvcChannelMap *map)
174-
{
175-
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0);
176-
177-
if (!pa_channel_map_valid (&map->priv->pa_map))
178-
return 0;
179-
180-
if (gvc_channel_map_has_lfe (map))
181-
// there is a function for this in pa 7.1, but it is not used here for backward
182-
// compatibility
183-
return (gfloat) pa_cvolume_get_position (&map->priv->pa_volume, &map->priv->pa_map, PA_CHANNEL_POSITION_LFE);
184-
else
185-
return 0;
186-
}
187-
188-
void
189-
gvc_channel_map_set_lfe (GvcChannelMap *map,
190-
gfloat value)
191-
{
192-
pa_cvolume cv;
193-
194-
g_return_if_fail (GVC_IS_CHANNEL_MAP (map));
195-
196-
if (!gvc_channel_map_has_lfe (map))
197-
return;
198-
199-
cv = *gvc_channel_map_get_cvolume (map);
200-
201-
// there is a function for this in pa 7.1, but it is not used here for backward
202-
// compatibility
203-
pa_cvolume_set_position (&cv, &map->priv->pa_map, PA_CHANNEL_POSITION_LFE, value);
204-
205-
if (!pa_cvolume_equal (&cv, &map->priv->pa_volume))
206-
gvc_channel_map_volume_changed (map, &cv, TRUE);
207-
}
208-
209-
gboolean
210-
gvc_channel_map_can_lfe (const GvcChannelMap *map)
211-
{
212-
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
213-
214-
return gvc_channel_map_has_lfe(map);
215-
}
216-
217108
const char *
218109
gvc_channel_map_get_mapping (const GvcChannelMap *map)
219110
{
@@ -226,9 +117,9 @@ gvc_channel_map_get_mapping (const GvcChannelMap *map)
226117
}
227118

228119
/**
229-
* gvc_channel_map_has_position:
120+
* gvc_channel_map_has_position: (skip)
230121
* @map:
231-
* @position: (type int)
122+
* @position:
232123
*
233124
* Returns:
234125
*/
@@ -275,8 +166,7 @@ gvc_channel_map_class_init (GvcChannelMapClass *klass)
275166
G_TYPE_FROM_CLASS (klass),
276167
G_SIGNAL_RUN_LAST,
277168
G_STRUCT_OFFSET (GvcChannelMapClass, volume_changed),
278-
NULL, NULL,
279-
g_cclosure_marshal_VOID__BOOLEAN,
169+
NULL, NULL, NULL,
280170
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
281171
}
282172

libcvc/gvc-channel-map.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,8 @@ GType gvc_channel_map_get_type (void);
6060
GvcChannelMap * gvc_channel_map_new (void);
6161
guint gvc_channel_map_get_num_channels (const GvcChannelMap *map);
6262
const gdouble * gvc_channel_map_get_volume (GvcChannelMap *map);
63-
gfloat gvc_channel_map_get_balance (GvcChannelMap *map);
6463
gboolean gvc_channel_map_can_balance (const GvcChannelMap *map);
65-
void gvc_channel_map_set_balance (GvcChannelMap *map,
66-
gfloat value);
67-
gfloat gvc_channel_map_get_fade (GvcChannelMap *map);
68-
void gvc_channel_map_set_fade (GvcChannelMap *map,
69-
gfloat value);
7064
gboolean gvc_channel_map_can_fade (const GvcChannelMap *map);
71-
gfloat gvc_channel_map_get_lfe (GvcChannelMap *map);
72-
void gvc_channel_map_set_lfe (GvcChannelMap *map,
73-
gfloat value);
74-
gboolean gvc_channel_map_can_lfe (const GvcChannelMap *map);
7565
gboolean gvc_channel_map_has_position (const GvcChannelMap *map,
7666
pa_channel_position_t position);
7767
#define gvc_channel_map_has_lfe(x) gvc_channel_map_has_position (x, PA_CHANNEL_POSITION_LFE)

libcvc/gvc-mixer-card-private.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ GvcMixerCard * gvc_mixer_card_new (pa_context *context,
3030
guint index);
3131
pa_context * gvc_mixer_card_get_pa_context (GvcMixerCard *card);
3232

33+
void gvc_mixer_card_add_port (GvcMixerCard *card,
34+
GvcMixerCardPort *port);
35+
36+
void gvc_mixer_card_remove_port (GvcMixerCard *card,
37+
GvcMixerCardPort *port);
38+
3339
G_END_DECLS
3440

3541
#endif /* __GVC_MIXER_CARD_PRIVATE_H */

libcvc/gvc-mixer-card.c

Lines changed: 69 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ enum
6161
PROP_ICON_NAME,
6262
PROP_PROFILE,
6363
PROP_HUMAN_PROFILE,
64+
N_PROPS
6465
};
66+
static GParamSpec *obj_props[N_PROPS] = { NULL, };
6567

6668
static void gvc_mixer_card_finalize (GObject *object);
6769

@@ -117,7 +119,7 @@ gvc_mixer_card_set_name (GvcMixerCard *card,
117119

118120
g_free (card->priv->name);
119121
card->priv->name = g_strdup (name);
120-
g_object_notify (G_OBJECT (card), "name");
122+
g_object_notify_by_pspec (G_OBJECT (card), obj_props[PROP_NAME]);
121123

122124
return TRUE;
123125
}
@@ -137,7 +139,7 @@ gvc_mixer_card_set_icon_name (GvcMixerCard *card,
137139

138140
g_free (card->priv->icon_name);
139141
card->priv->icon_name = g_strdup (icon_name);
140-
g_object_notify (G_OBJECT (card), "icon-name");
142+
g_object_notify_by_pspec (G_OBJECT (card), obj_props[PROP_ICON_NAME]);
141143

142144
return TRUE;
143145
}
@@ -177,6 +179,9 @@ gvc_mixer_card_set_profile (GvcMixerCard *card,
177179
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
178180
g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
179181

182+
if (g_strcmp0 (card->priv->profile, profile) == 0)
183+
return TRUE;
184+
180185
g_free (card->priv->profile);
181186
card->priv->profile = g_strdup (profile);
182187

@@ -191,7 +196,7 @@ gvc_mixer_card_set_profile (GvcMixerCard *card,
191196
}
192197
}
193198

194-
g_object_notify (G_OBJECT (card), "profile");
199+
g_object_notify_by_pspec (G_OBJECT (card), obj_props[PROP_PROFILE]);
195200

196201
return TRUE;
197202
}
@@ -310,6 +315,15 @@ gvc_mixer_card_profile_compare (GvcMixerCardProfile *a,
310315
return -1;
311316
}
312317

318+
static void
319+
free_profile (GvcMixerCardProfile *p)
320+
{
321+
g_free (p->profile);
322+
g_free (p->human_profile);
323+
g_free (p->status);
324+
g_free (p);
325+
}
326+
313327
/**
314328
* gvc_mixer_card_set_profiles:
315329
* @profiles: (transfer full) (element-type GvcMixerCardProfile):
@@ -319,8 +333,8 @@ gvc_mixer_card_set_profiles (GvcMixerCard *card,
319333
GList *profiles)
320334
{
321335
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
322-
g_return_val_if_fail (card->priv->profiles == NULL, FALSE);
323336

337+
g_list_free_full (card->priv->profiles, (GDestroyNotify) free_profile);
324338
card->priv->profiles = g_list_sort (profiles, (GCompareFunc) gvc_mixer_card_profile_compare);
325339

326340
return TRUE;
@@ -371,6 +385,21 @@ gvc_mixer_card_set_ports (GvcMixerCard *card,
371385
return TRUE;
372386
}
373387

388+
void
389+
gvc_mixer_card_add_port (GvcMixerCard *card,
390+
GvcMixerCardPort *port)
391+
{
392+
card->priv->ports = g_list_prepend (card->priv->ports, port);
393+
}
394+
395+
void
396+
gvc_mixer_card_remove_port (GvcMixerCard *card,
397+
GvcMixerCardPort *port)
398+
{
399+
card->priv->ports = g_list_remove (card->priv->ports, port);
400+
free_port (port);
401+
}
402+
374403
static void
375404
gvc_mixer_card_set_property (GObject *object,
376405
guint prop_id,
@@ -468,54 +497,42 @@ gvc_mixer_card_class_init (GvcMixerCardClass *klass)
468497
gobject_class->set_property = gvc_mixer_card_set_property;
469498
gobject_class->get_property = gvc_mixer_card_get_property;
470499

471-
g_object_class_install_property (gobject_class,
472-
PROP_INDEX,
473-
g_param_spec_ulong ("index",
474-
"Index",
475-
"The index for this card",
476-
0, G_MAXULONG, 0,
477-
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
478-
g_object_class_install_property (gobject_class,
479-
PROP_ID,
480-
g_param_spec_ulong ("id",
481-
"id",
482-
"The id for this card",
483-
0, G_MAXULONG, 0,
484-
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
485-
g_object_class_install_property (gobject_class,
486-
PROP_PA_CONTEXT,
487-
g_param_spec_pointer ("pa-context",
488-
"PulseAudio context",
489-
"The PulseAudio context for this card",
490-
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
491-
g_object_class_install_property (gobject_class,
492-
PROP_NAME,
493-
g_param_spec_string ("name",
494-
"Name",
495-
"Name to display for this card",
496-
NULL,
497-
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
498-
g_object_class_install_property (gobject_class,
499-
PROP_ICON_NAME,
500-
g_param_spec_string ("icon-name",
501-
"Icon Name",
502-
"Name of icon to display for this card",
503-
NULL,
504-
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
505-
g_object_class_install_property (gobject_class,
506-
PROP_PROFILE,
507-
g_param_spec_string ("profile",
508-
"Profile",
509-
"Name of current profile for this card",
510-
NULL,
511-
G_PARAM_READWRITE));
512-
g_object_class_install_property (gobject_class,
513-
PROP_HUMAN_PROFILE,
514-
g_param_spec_string ("human-profile",
515-
"Profile (Human readable)",
516-
"Name of current profile for this card in human readable form",
517-
NULL,
518-
G_PARAM_READABLE));
500+
obj_props[PROP_INDEX] = g_param_spec_ulong ("index",
501+
"Index",
502+
"The index for this card",
503+
0, G_MAXULONG, 0,
504+
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
505+
obj_props[PROP_ID] = g_param_spec_ulong ("id",
506+
"id",
507+
"The id for this card",
508+
0, G_MAXULONG, 0,
509+
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
510+
obj_props[PROP_PA_CONTEXT] = g_param_spec_pointer ("pa-context",
511+
"PulseAudio context",
512+
"The PulseAudio context for this card",
513+
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
514+
obj_props[PROP_NAME] = g_param_spec_string ("name",
515+
"Name",
516+
"Name to display for this card",
517+
NULL,
518+
G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
519+
obj_props[PROP_ICON_NAME] = g_param_spec_string ("icon-name",
520+
"Icon Name",
521+
"Name of icon to display for this card",
522+
NULL,
523+
G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
524+
obj_props[PROP_PROFILE] = g_param_spec_string ("profile",
525+
"Profile",
526+
"Name of current profile for this card",
527+
NULL,
528+
G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
529+
obj_props[PROP_HUMAN_PROFILE] = g_param_spec_string ("human-profile",
530+
"Profile (Human readable)",
531+
"Name of current profile for this card in human readable form",
532+
NULL,
533+
G_PARAM_READABLE|G_PARAM_STATIC_STRINGS);
534+
535+
g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
519536
}
520537

521538
static void
@@ -537,15 +554,6 @@ gvc_mixer_card_new (pa_context *context,
537554
return GVC_MIXER_CARD (object);
538555
}
539556

540-
static void
541-
free_profile (GvcMixerCardProfile *p)
542-
{
543-
g_free (p->profile);
544-
g_free (p->human_profile);
545-
g_free (p->status);
546-
g_free (p);
547-
}
548-
549557
static void
550558
gvc_mixer_card_finalize (GObject *object)
551559
{

0 commit comments

Comments
 (0)