summaryrefslogtreecommitdiff
path: root/plugins/media-keys
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/media-keys')
-rw-r--r--plugins/media-keys/Makefile.am1
-rw-r--r--plugins/media-keys/cut-n-paste/Makefile.am61
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-channel-map.c245
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-channel-map.h85
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c405
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h56
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-card.c498
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-card.h91
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-control.c2150
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-control.h102
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c239
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-event-role.h61
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c188
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.h61
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-sink.c220
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-sink.h61
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c128
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-source-output.h61
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-source.c220
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-source.h61
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-stream.c912
-rw-r--r--plugins/media-keys/cut-n-paste/gvc-mixer-stream.h131
22 files changed, 0 insertions, 6037 deletions
diff --git a/plugins/media-keys/Makefile.am b/plugins/media-keys/Makefile.am
index 8268b08..89fa0d0 100644
--- a/plugins/media-keys/Makefile.am
+++ b/plugins/media-keys/Makefile.am
@@ -120,7 +120,6 @@ test_media_window_SOURCES = \
test_media_window_CPPFLAGS = \
-I$(top_srcdir)/mate-settings-daemon \
-I$(top_srcdir)/plugins/common \
- -I$(top_srcdir)/plugins/media-keys/cut-n-paste \
-DDATADIR=\""$(datadir)"\" \
-DPIXMAPDIR=\""$(pkgdatadir)"\" \
-DGTKBUILDERDIR=\""$(pkgdatadir)"\" \
diff --git a/plugins/media-keys/cut-n-paste/Makefile.am b/plugins/media-keys/cut-n-paste/Makefile.am
deleted file mode 100644
index f5707da..0000000
--- a/plugins/media-keys/cut-n-paste/Makefile.am
+++ /dev/null
@@ -1,61 +0,0 @@
-NULL =
-
-noinst_LTLIBRARIES = libgvc.la
-
-AM_CPPFLAGS = \
- $(WARN_CFLAGS) \
- $(NULL)
-
-libgvc_la_LIBADD = \
- $(NULL)
-
-libgvc_la_SOURCES = \
- $(NULL)
-
-if HAVE_PULSE
-AM_CPPFLAGS += \
- $(VOLUME_CONTROL_CFLAGS) \
- $(PULSE_CFLAGS)
-
-libgvc_la_LIBADD += \
- $(VOLUME_CONTROL_LIBS) \
- $(PULSE_LIBS)
-
-libgvc_la_SOURCES += \
- gvc-mixer-stream.h \
- gvc-mixer-stream.c \
- gvc-channel-map.h \
- gvc-channel-map.c \
- gvc-mixer-card.c \
- gvc-mixer-card.h \
- gvc-mixer-sink.h \
- gvc-mixer-sink.c \
- gvc-mixer-source.h \
- gvc-mixer-source.c \
- gvc-mixer-sink-input.h \
- gvc-mixer-sink-input.c \
- gvc-mixer-source-output.h \
- gvc-mixer-source-output.c \
- gvc-mixer-event-role.h \
- gvc-mixer-event-role.c \
- gvc-mixer-control.h \
- gvc-mixer-control.c
-endif
-
-if HAVE_GSTREAMER
-AM_CPPFLAGS += \
- $(SETTINGS_PLUGIN_CFLAGS) \
- $(AM_CFLAGS) \
- $(GST_CFLAGS)
-
-libgvc_la_LIBADD += \
- $(GST_LIBS)
-
-libgvc_la_SOURCES += \
- gvc-gstreamer-acme-vol.c \
- gvc-gstreamer-acme-vol.h
-endif
-
-MAINTAINERCLEANFILES = \
- *~ \
- Makefile.in
diff --git a/plugins/media-keys/cut-n-paste/gvc-channel-map.c b/plugins/media-keys/cut-n-paste/gvc-channel-map.c
deleted file mode 100644
index e35e793..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-channel-map.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-channel-map.h"
-
-#define GVC_CHANNEL_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapPrivate))
-
-struct GvcChannelMapPrivate
-{
- pa_channel_map pa_map;
- gboolean pa_volume_is_set;
- pa_cvolume pa_volume;
- gdouble extern_volume[NUM_TYPES]; /* volume, balance, fade, lfe */
- gboolean can_balance;
- gboolean can_fade;
-};
-
-enum {
- VOLUME_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0, };
-
-static void gvc_channel_map_class_init (GvcChannelMapClass *klass);
-static void gvc_channel_map_init (GvcChannelMap *channel_map);
-static void gvc_channel_map_finalize (GObject *object);
-
-G_DEFINE_TYPE (GvcChannelMap, gvc_channel_map, G_TYPE_OBJECT)
-
-guint
-gvc_channel_map_get_num_channels (const GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0);
-
- if (!pa_channel_map_valid(&map->priv->pa_map))
- return 0;
-
- return map->priv->pa_map.channels;
-}
-
-const gdouble *
-gvc_channel_map_get_volume (GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
-
- if (!pa_channel_map_valid(&map->priv->pa_map))
- return NULL;
-
- map->priv->extern_volume[VOLUME] = (gdouble) pa_cvolume_max (&map->priv->pa_volume);
- if (gvc_channel_map_can_balance (map))
- map->priv->extern_volume[BALANCE] = (gdouble) pa_cvolume_get_balance (&map->priv->pa_volume, &map->priv->pa_map);
- else
- map->priv->extern_volume[BALANCE] = 0;
- if (gvc_channel_map_can_fade (map))
- map->priv->extern_volume[FADE] = (gdouble) pa_cvolume_get_fade (&map->priv->pa_volume, &map->priv->pa_map);
- else
- map->priv->extern_volume[FADE] = 0;
- if (gvc_channel_map_has_lfe (map))
- map->priv->extern_volume[LFE] = (gdouble) pa_cvolume_get_position (&map->priv->pa_volume, &map->priv->pa_map, PA_CHANNEL_POSITION_LFE);
- else
- map->priv->extern_volume[LFE] = 0;
-
- return map->priv->extern_volume;
-}
-
-gboolean
-gvc_channel_map_can_balance (const GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
-
- return map->priv->can_balance;
-}
-
-gboolean
-gvc_channel_map_can_fade (const GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
-
- return map->priv->can_fade;
-}
-
-const char *
-gvc_channel_map_get_mapping (const GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
-
- if (!pa_channel_map_valid(&map->priv->pa_map))
- return NULL;
-
- return pa_channel_map_to_pretty_name (&map->priv->pa_map);
-}
-
-gboolean
-gvc_channel_map_has_position (const GvcChannelMap *map,
- pa_channel_position_t position)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
-
- return pa_channel_map_has_position (&(map->priv->pa_map), position);
-}
-
-const pa_channel_map *
-gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
-
- if (!pa_channel_map_valid(&map->priv->pa_map))
- return NULL;
-
- return &map->priv->pa_map;
-}
-
-const pa_cvolume *
-gvc_channel_map_get_cvolume (const GvcChannelMap *map)
-{
- g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
-
- if (!pa_channel_map_valid(&map->priv->pa_map))
- return NULL;
-
- return &map->priv->pa_volume;
-}
-
-static void
-gvc_channel_map_class_init (GvcChannelMapClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = gvc_channel_map_finalize;
-
- signals [VOLUME_CHANGED] =
- g_signal_new ("volume-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcChannelMapClass, volume_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
-
- g_type_class_add_private (klass, sizeof (GvcChannelMapPrivate));
-}
-
-void
-gvc_channel_map_volume_changed (GvcChannelMap *map,
- const pa_cvolume *cv,
- gboolean set)
-{
- g_return_if_fail (GVC_IS_CHANNEL_MAP (map));
- g_return_if_fail (cv != NULL);
- g_return_if_fail (pa_cvolume_compatible_with_channel_map(cv, &map->priv->pa_map));
-
- if (pa_cvolume_equal(cv, &map->priv->pa_volume))
- return;
-
- map->priv->pa_volume = *cv;
-
- if (map->priv->pa_volume_is_set == FALSE) {
- map->priv->pa_volume_is_set = TRUE;
- return;
- }
- g_signal_emit (map, signals[VOLUME_CHANGED], 0, set);
-}
-
-static void
-gvc_channel_map_init (GvcChannelMap *map)
-{
- map->priv = GVC_CHANNEL_MAP_GET_PRIVATE (map);
- map->priv->pa_volume_is_set = FALSE;
-}
-
-static void
-gvc_channel_map_finalize (GObject *object)
-{
- GvcChannelMap *channel_map;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_CHANNEL_MAP (object));
-
- channel_map = GVC_CHANNEL_MAP (object);
-
- g_return_if_fail (channel_map->priv != NULL);
-
- G_OBJECT_CLASS (gvc_channel_map_parent_class)->finalize (object);
-}
-
-GvcChannelMap *
-gvc_channel_map_new (void)
-{
- GObject *map;
- map = g_object_new (GVC_TYPE_CHANNEL_MAP, NULL);
- return GVC_CHANNEL_MAP (map);
-}
-
-static void
-set_from_pa_map (GvcChannelMap *map,
- const pa_channel_map *pa_map)
-{
- g_assert (pa_channel_map_valid(pa_map));
-
- map->priv->can_balance = pa_channel_map_can_balance (pa_map);
- map->priv->can_fade = pa_channel_map_can_fade (pa_map);
-
- map->priv->pa_map = *pa_map;
- pa_cvolume_set(&map->priv->pa_volume, pa_map->channels, PA_VOLUME_NORM);
-}
-
-GvcChannelMap *
-gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *pa_map)
-{
- GObject *map;
- map = g_object_new (GVC_TYPE_CHANNEL_MAP, NULL);
-
- set_from_pa_map (GVC_CHANNEL_MAP (map), pa_map);
-
- return GVC_CHANNEL_MAP (map);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-channel-map.h b/plugins/media-keys/cut-n-paste/gvc-channel-map.h
deleted file mode 100644
index 1d1ba4e..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-channel-map.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_CHANNEL_MAP_H
-#define __GVC_CHANNEL_MAP_H
-
-#include <glib-object.h>
-#include <pulse/pulseaudio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_CHANNEL_MAP (gvc_channel_map_get_type ())
-#define GVC_CHANNEL_MAP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMap))
-#define GVC_CHANNEL_MAP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_CHANNEL_MAP, GvcChannelMapClass))
-#define GVC_IS_CHANNEL_MAP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_CHANNEL_MAP))
-#define GVC_IS_CHANNEL_MAP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_CHANNEL_MAP))
-#define GVC_CHANNEL_MAP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapClass))
-
-typedef struct GvcChannelMapPrivate GvcChannelMapPrivate;
-
-typedef struct
-{
- GObject parent;
- GvcChannelMapPrivate *priv;
-} GvcChannelMap;
-
-typedef struct
-{
- GObjectClass parent_class;
- void (*volume_changed) (GvcChannelMap *channel_map, gboolean set);
-} GvcChannelMapClass;
-
-enum {
- VOLUME,
- BALANCE,
- FADE,
- LFE,
-};
-
-#define NUM_TYPES LFE + 1
-
-GType gvc_channel_map_get_type (void);
-
-GvcChannelMap * gvc_channel_map_new (void);
-GvcChannelMap * gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *map);
-guint gvc_channel_map_get_num_channels (const GvcChannelMap *map);
-const gdouble * gvc_channel_map_get_volume (GvcChannelMap *map);
-gboolean gvc_channel_map_can_balance (const GvcChannelMap *map);
-gboolean gvc_channel_map_can_fade (const GvcChannelMap *map);
-gboolean gvc_channel_map_has_position (const GvcChannelMap *map,
- pa_channel_position_t position);
-#define gvc_channel_map_has_lfe(x) gvc_channel_map_has_position (x, PA_CHANNEL_POSITION_LFE)
-
-void gvc_channel_map_volume_changed (GvcChannelMap *map,
- const pa_cvolume *cv,
- gboolean set);
-const char * gvc_channel_map_get_mapping (const GvcChannelMap *map);
-
-/* private */
-const pa_cvolume * gvc_channel_map_get_cvolume (const GvcChannelMap *map);
-const pa_channel_map * gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_CHANNEL_MAP_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c
deleted file mode 100644
index 0534ade..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* acme-volume.c
-
- Copyright (C) 2002, 2003 Bastien Nocera
- Copyright (C) 2004 Novell, Inc.
- Copyright (C) 2009 PERIER Romain <[email protected]>
- Copyright (C) 2011 Stefano Karapetsas <[email protected]>
-
- The Mate Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Mate Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Mate Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- Author: Bastien Nocera <[email protected]>
- Jon Trowbridge <[email protected]>
-*/
-
-#include "config.h"
-#include "gvc-gstreamer-acme-vol.h"
-
-#include <gst/gst.h>
-#include <gst/audio/mixerutils.h>
-#include <gst/interfaces/mixer.h>
-#include <gst/interfaces/propertyprobe.h>
-
-#include <gio/gio.h>
-
-#include <string.h>
-
-#define TIMEOUT 4
-
-#define MATE_SOUND_SCHEMA "org.mate.sound"
-#define DEFAULT_MIXER_DEVICE_KEY "default-mixer-device"
-#define DEFAULT_MIXER_TRACKS_KEY "default-mixer-tracks"
-
-#define ACME_VOLUME_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ACME_TYPE_VOLUME, AcmeVolumePrivate))
-
-struct AcmeVolumePrivate {
- GstMixer *mixer;
- GList *mixer_tracks;
- guint timer_id;
- gdouble volume;
- gboolean mute;
- GSettings *settings;
-};
-
-G_DEFINE_TYPE (AcmeVolume, acme_volume, G_TYPE_OBJECT)
-
-static gboolean acme_volume_open (AcmeVolume *acme);
-static void acme_volume_close (AcmeVolume *acme);
-static gboolean acme_volume_close_real (AcmeVolume *self);
-
-static gpointer acme_volume_object = NULL;
-
-static void
-acme_volume_finalize (GObject *object)
-{
- AcmeVolume *self;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ACME_IS_VOLUME (object));
-
- self = ACME_VOLUME (object);
-
- if (self->_priv->timer_id != 0)
- g_source_remove (self->_priv->timer_id);
- acme_volume_close_real (self);
-
- if (self->_priv->settings != NULL) {
- g_object_unref (self->_priv->settings);
- self->_priv->settings = NULL;
- }
-
- G_OBJECT_CLASS (acme_volume_parent_class)->finalize (object);
-}
-
-void
-acme_volume_set_mute (AcmeVolume *self, gboolean val)
-{
- GList *t;
-
- g_return_if_fail(ACME_IS_VOLUME(self));
- g_return_if_fail(acme_volume_open(self));
-
- for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
- GstMixerTrack *track = GST_MIXER_TRACK (t->data);
- gst_mixer_set_mute (self->_priv->mixer, track, val);
- }
- self->_priv->mute = val;
- acme_volume_close (self);
-}
-
-static void
-update_state (AcmeVolume * self)
-{
- gint *volumes, n;
- gdouble vol = 0;
- GstMixerTrack *track = GST_MIXER_TRACK (self->_priv->mixer_tracks->data);
-
- /* update mixer by getting volume */
- volumes = g_new0 (gint, track->num_channels);
- gst_mixer_get_volume (self->_priv->mixer, track, volumes);
- for (n = 0; n < track->num_channels; n++)
- vol += volumes[n];
- g_free (volumes);
- vol /= track->num_channels;
- vol = 100 * vol / (track->max_volume - track->min_volume);
-
- /* update mute flag, and volume if not muted */
- if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MUTE))
- self->_priv->mute = TRUE;
- self->_priv->volume = vol;
-}
-
-gboolean
-acme_volume_get_mute (AcmeVolume *self)
-{
- g_return_val_if_fail(acme_volume_open(self), FALSE);
-
- update_state (self);
- acme_volume_close (self);
-
- return self->_priv->mute;
-}
-
-gint
-acme_volume_get_volume (AcmeVolume *self)
-{
-
- g_return_val_if_fail(acme_volume_open(self), 0);
-
- update_state (self);
-
- acme_volume_close (self);
-
- return (gint) (self->_priv->volume + 0.5);
-}
-
-void
-acme_volume_set_volume (AcmeVolume *self, gint val)
-{
- GList *t;
-
- g_return_if_fail(acme_volume_open(self));
-
- val = CLAMP (val, 0, 100);
-
- for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
- GstMixerTrack *track = GST_MIXER_TRACK (t->data);
- gint *volumes, n;
- gdouble scale = (track->max_volume - track->min_volume) / 100.0;
- gint vol = (gint) (val * scale + track->min_volume + 0.5);
-
- volumes = g_new (gint, track->num_channels);
- for (n = 0; n < track->num_channels; n++)
- volumes[n] = vol;
- gst_mixer_set_volume (self->_priv->mixer, track, volumes);
- g_free (volumes);
- }
-
- /* update state */
- self->_priv->volume = val;
-
- acme_volume_close (self);
-}
-
-void
-acme_volume_mute_toggle (AcmeVolume *self)
-{
- gboolean muted;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (ACME_IS_VOLUME(self));
-
- muted = acme_volume_get_mute(self);
- acme_volume_set_mute(self, !muted);
-}
-
-gint
-acme_volume_get_threshold (AcmeVolume *self)
-{
- GList *t;
- gint steps = 101;
-
- g_return_val_if_fail(acme_volume_open(self), 1);
-
- for (t = self->_priv->mixer_tracks; t != NULL; t = t->next) {
- GstMixerTrack *track = GST_MIXER_TRACK (t->data);
- gint track_steps = track->max_volume - track->min_volume;
- if (track_steps > 0 && track_steps < steps)
- steps = track_steps;
- }
-
- acme_volume_close (self);
-
- return 100 / steps + 1;
-}
-
-static gboolean
-acme_volume_close_real (AcmeVolume *self)
-{
- if (self->_priv->mixer != NULL)
- {
- gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
- gst_object_unref (GST_OBJECT (self->_priv->mixer));
- g_list_foreach (self->_priv->mixer_tracks, (GFunc) g_object_unref, NULL);
- g_list_free (self->_priv->mixer_tracks);
- self->_priv->mixer = NULL;
- self->_priv->mixer_tracks = NULL;
- }
-
- self->_priv->timer_id = 0;
- return FALSE;
-}
-
-/*
- * _acme_set_mixer
- * @mixer A pointer to mixer element
- * @data A pointer to user data (AcmeVolume instance to be modified)
- * @return A gboolean indicating success if Master track was found, failed otherwises.
- */
-static gboolean
-_acme_set_mixer(GstMixer *mixer, gpointer user_data)
-{
- const GList *tracks;
-
- for (tracks = gst_mixer_list_tracks (mixer); tracks != NULL; tracks = tracks->next) {
- GstMixerTrack *track = GST_MIXER_TRACK (tracks->data);
-
- if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) {
- AcmeVolume *self;
-
- self = ACME_VOLUME (user_data);
-
- self->_priv->mixer = mixer;
- self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
- return TRUE;
- }
-
- continue;
- }
-
- return FALSE;
-}
-
-/* This is a modified version of code from gnome-media's gst-mixer */
-static gboolean
-acme_volume_open (AcmeVolume *self)
-{
- gchar *mixer_device, **factory_and_device = NULL;
- GList *mixer_list;
-
- if (self->_priv->timer_id != 0) {
- g_source_remove (self->_priv->timer_id);
- self->_priv->timer_id = 0;
- return TRUE;
- }
-
- mixer_device = g_settings_get_string (self->_priv->settings, DEFAULT_MIXER_DEVICE_KEY);
- if (mixer_device != NULL)
- factory_and_device = g_strsplit (mixer_device, ":", 2);
-
- if (factory_and_device != NULL && factory_and_device[0] != NULL) {
- GstElement *element;
-
- element = gst_element_factory_make (factory_and_device[0], NULL);
-
- if (element != NULL) {
- if (factory_and_device[1] != NULL &&
- g_object_class_find_property (G_OBJECT_GET_CLASS (element), "device"))
- g_object_set (G_OBJECT (element), "device", factory_and_device[1], NULL);
- gst_element_set_state (element, GST_STATE_READY);
-
- if (GST_IS_MIXER (element))
- self->_priv->mixer = GST_MIXER (element);
- else {
- gst_element_set_state (element, GST_STATE_NULL);
- gst_object_unref (element);
- }
- }
- }
-
- g_free (mixer_device);
- g_strfreev (factory_and_device);
-
- if (self->_priv->mixer != NULL) {
- const GList *m;
- GSList *tracks, *t;
-
- /* Try to use tracks saved in GSettings
- Note: errors need to be treated , for example if the user set a non type list for this key
- or if the elements type_list are not "matched" */
- gchar **settings_list;
- settings_list = g_settings_get_strv (self->_priv->settings, DEFAULT_MIXER_TRACKS_KEY);
- if (settings_list != NULL) {
- gint i;
- for (i = 0; i < G_N_ELEMENTS (settings_list); i++) {
- if (settings_list[i] != NULL)
- tracks = g_slist_append (tracks, g_strdup (settings_list[i]));
- }
- g_strfreev (settings_list);
- }
-
- /* We use these tracks ONLY if they are supported on the system with the following mixer */
- for (m = gst_mixer_list_tracks (self->_priv->mixer); m != NULL; m = m->next) {
- GstMixerTrack *track = GST_MIXER_TRACK (m->data);
-
- for (t = tracks; t != NULL; t = t->next)
- if (!strcmp (t->data, track->label))
- self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
-
- }
-
- g_slist_foreach (tracks, (GFunc)g_free, NULL);
- g_slist_free (tracks);
-
- /* If no track stored in GSettings is avaiable try to use Master track */
- if (self->_priv->mixer_tracks == NULL) {
- for (m = gst_mixer_list_tracks (self->_priv->mixer); m != NULL; m = m->next) {
- GstMixerTrack *track = GST_MIXER_TRACK (m->data);
-
- if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) {
- self->_priv->mixer_tracks = g_list_append (self->_priv->mixer_tracks, g_object_ref (track));
- break;
- }
- }
- }
-
- if (self->_priv->mixer_tracks != NULL)
- return TRUE;
- else {
- gst_element_set_state (GST_ELEMENT (self->_priv->mixer), GST_STATE_NULL);
- gst_object_unref (self->_priv->mixer);
- }
- }
-
- /* Go through all elements of a certain class and check whether
- * they implement a mixer. If so, walk through the tracks and look
- * for first one named "volume".
- *
- * We should probably do something intelligent if we don't find an
- * appropriate mixer/track. But now we do something stupid...
- * everything just becomes a no-op.
- */
- mixer_list = gst_audio_default_registry_mixer_filter (_acme_set_mixer,
- TRUE,
- self);
-
- if (mixer_list == NULL)
- return FALSE;
-
- /* do not unref the mixer as we keep the ref for self->priv->mixer */
- g_list_free (mixer_list);
-
- return TRUE;
-}
-
-static void
-acme_volume_close (AcmeVolume *self)
-{
- self->_priv->timer_id = g_timeout_add_seconds (TIMEOUT,
- (GSourceFunc) acme_volume_close_real, self);
-}
-
-static void
-acme_volume_init (AcmeVolume *self)
-{
- self->_priv = ACME_VOLUME_GET_PRIVATE (self);
- self->_priv->settings = g_settings_new (MATE_SOUND_SCHEMA);
-}
-
-static void
-acme_volume_class_init (AcmeVolumeClass *klass)
-{
- G_OBJECT_CLASS (klass)->finalize = acme_volume_finalize;
-
- gst_init (NULL, NULL);
-
- g_type_class_add_private (klass, sizeof (AcmeVolumePrivate));
-}
-
-/* acme_volume_new
- * @return A singleton instance of type AcmeVolume
- */
-AcmeVolume *
-acme_volume_new (void)
-{
- if (acme_volume_object == NULL) {
- acme_volume_object = g_object_new (ACME_TYPE_VOLUME, NULL);
- return ACME_VOLUME(acme_volume_object);
- }
- g_object_ref(acme_volume_object);
- return ACME_VOLUME(acme_volume_object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h b/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h
deleted file mode 100644
index 7b11d64..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-gstreamer-acme-vol.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* acme-volume.h
-
- Copyright (C) 2002, 2003 Bastien Nocera
- Copyright (C) 2004 Novell, Inc.
- Copyright (C) 2009 PERIER Romain <[email protected]>
- Copyright (C) 2011 Stefano Karapetsas <[email protected]>
-
- The Mate Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Mate Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Mate Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- Author: Bastien Nocera <[email protected]>
- Jon Trowbridge <[email protected]>
- */
-
-#include <glib-object.h>
-
-#define ACME_TYPE_VOLUME (acme_volume_get_type ())
-#define ACME_VOLUME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ACME_TYPE_VOLUME, AcmeVolume))
-#define ACME_VOLUME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ACME_TYPE_VOLUME, AcmeVolumeClass))
-#define ACME_IS_VOLUME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ACME_TYPE_VOLUME))
-#define ACME_VOLUME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ACME_TYPE_VOLUME, AcmeVolumeClass))
-
-typedef struct AcmeVolume AcmeVolume;
-typedef struct AcmeVolumeClass AcmeVolumeClass;
-typedef struct AcmeVolumePrivate AcmeVolumePrivate;
-
-struct AcmeVolume {
- GObject parent;
- AcmeVolumePrivate *_priv;
-};
-
-struct AcmeVolumeClass {
- GObjectClass parent;
-};
-
-GType acme_volume_get_type (void);
-AcmeVolume *acme_volume_new (void);
-void acme_volume_set_mute (AcmeVolume *self, gboolean val);
-void acme_volume_mute_toggle (AcmeVolume *self);
-gboolean acme_volume_get_mute (AcmeVolume *self);
-void acme_volume_set_volume (AcmeVolume *self, gint val);
-gint acme_volume_get_volume (AcmeVolume *self);
-gint acme_volume_get_threshold (AcmeVolume *self);
-
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-card.c b/plugins/media-keys/cut-n-paste/gvc-mixer-card.c
deleted file mode 100644
index 91bdf19..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-card.c
+++ /dev/null
@@ -1,498 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- * Copyright (C) 2009 Bastien Nocera
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-mixer-card.h"
-
-#define GVC_MIXER_CARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_CARD, GvcMixerCardPrivate))
-
-static guint32 card_serial = 1;
-
-struct GvcMixerCardPrivate
-{
- pa_context *pa_context;
- guint id;
- guint index;
- char *name;
- char *icon_name;
- char *profile;
- char *target_profile;
- char *human_profile;
- GList *profiles;
- pa_operation *profile_op;
-};
-
-enum
-{
- PROP_0,
- PROP_ID,
- PROP_PA_CONTEXT,
- PROP_INDEX,
- PROP_NAME,
- PROP_ICON_NAME,
- PROP_PROFILE,
- PROP_HUMAN_PROFILE,
-};
-
-static void gvc_mixer_card_class_init (GvcMixerCardClass *klass);
-static void gvc_mixer_card_init (GvcMixerCard *mixer_card);
-static void gvc_mixer_card_finalize (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerCard, gvc_mixer_card, G_TYPE_OBJECT)
-
-static guint32
-get_next_card_serial (void)
-{
- guint32 serial;
-
- serial = card_serial++;
-
- if ((gint32)card_serial < 0) {
- card_serial = 1;
- }
-
- return serial;
-}
-
-pa_context *
-gvc_mixer_card_get_pa_context (GvcMixerCard *card)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
- return card->priv->pa_context;
-}
-
-guint
-gvc_mixer_card_get_index (GvcMixerCard *card)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
- return card->priv->index;
-}
-
-guint
-gvc_mixer_card_get_id (GvcMixerCard *card)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
- return card->priv->id;
-}
-
-const char *
-gvc_mixer_card_get_name (GvcMixerCard *card)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
- return card->priv->name;
-}
-
-gboolean
-gvc_mixer_card_set_name (GvcMixerCard *card,
- const char *name)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
-
- g_free (card->priv->name);
- card->priv->name = g_strdup (name);
- g_object_notify (G_OBJECT (card), "name");
-
- return TRUE;
-}
-
-const char *
-gvc_mixer_card_get_icon_name (GvcMixerCard *card)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
- return card->priv->icon_name;
-}
-
-gboolean
-gvc_mixer_card_set_icon_name (GvcMixerCard *card,
- const char *icon_name)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
-
- g_free (card->priv->icon_name);
- card->priv->icon_name = g_strdup (icon_name);
- g_object_notify (G_OBJECT (card), "icon-name");
-
- return TRUE;
-}
-
-GvcMixerCardProfile *
-gvc_mixer_card_get_profile (GvcMixerCard *card)
-{
- GList *l;
-
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
- g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
-
- for (l = card->priv->profiles; l != NULL; l = l->next) {
- GvcMixerCardProfile *p = l->data;
- if (g_str_equal (card->priv->profile, p->profile)) {
- return p;
- }
- }
-
- g_assert_not_reached ();
-
- return NULL;
-}
-
-gboolean
-gvc_mixer_card_set_profile (GvcMixerCard *card,
- const char *profile)
-{
- GList *l;
-
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
- g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
-
- g_free (card->priv->profile);
- card->priv->profile = g_strdup (profile);
-
- g_free (card->priv->human_profile);
- card->priv->human_profile = NULL;
-
- for (l = card->priv->profiles; l != NULL; l = l->next) {
- GvcMixerCardProfile *p = l->data;
- if (g_str_equal (card->priv->profile, p->profile)) {
- card->priv->human_profile = g_strdup (p->human_profile);
- break;
- }
- }
-
- g_object_notify (G_OBJECT (card), "profile");
-
- return TRUE;
-}
-
-static void
-_pa_context_set_card_profile_by_index_cb (pa_context *context,
- int success,
- void *userdata)
-{
- GvcMixerCard *card = GVC_MIXER_CARD (userdata);
-
- g_assert (card->priv->target_profile);
-
- if (success > 0) {
- gvc_mixer_card_set_profile (card, card->priv->target_profile);
- } else {
- g_debug ("Failed to switch profile on '%s' from '%s' to '%s'",
- card->priv->name,
- card->priv->profile,
- card->priv->target_profile);
- }
- g_free (card->priv->target_profile);
- card->priv->target_profile = NULL;
-
- pa_operation_unref (card->priv->profile_op);
- card->priv->profile_op = NULL;
-}
-
-gboolean
-gvc_mixer_card_change_profile (GvcMixerCard *card,
- const char *profile)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
- g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
-
- /* Same profile, or already requested? */
- if (g_strcmp0 (card->priv->profile, profile) == 0)
- return TRUE;
- if (g_strcmp0 (profile, card->priv->target_profile) == 0)
- return TRUE;
- if (card->priv->profile_op != NULL) {
- pa_operation_cancel (card->priv->profile_op);
- pa_operation_unref (card->priv->profile_op);
- card->priv->profile_op = NULL;
- }
-
- if (card->priv->profile != NULL) {
- g_free (card->priv->target_profile);
- card->priv->target_profile = g_strdup (profile);
-
- card->priv->profile_op = pa_context_set_card_profile_by_index (card->priv->pa_context,
- card->priv->index,
- card->priv->target_profile,
- _pa_context_set_card_profile_by_index_cb,
- card);
-
- if (card->priv->profile_op == NULL) {
- g_warning ("pa_context_set_card_profile_by_index() failed");
- return FALSE;
- }
- } else {
- g_assert (card->priv->human_profile == NULL);
- card->priv->profile = g_strdup (profile);
- }
-
- return TRUE;
-}
-
-const GList *
-gvc_mixer_card_get_profiles (GvcMixerCard *card)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
- return card->priv->profiles;
-}
-
-static int
-sort_profiles (GvcMixerCardProfile *a,
- GvcMixerCardProfile *b)
-{
- if (a->priority == b->priority)
- return 0;
- if (a->priority > b->priority)
- return 1;
- return -1;
-}
-
-gboolean
-gvc_mixer_card_set_profiles (GvcMixerCard *card,
- GList *profiles)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
- g_return_val_if_fail (card->priv->profiles == NULL, FALSE);
-
- card->priv->profiles = g_list_sort (profiles, (GCompareFunc) sort_profiles);
-
- return TRUE;
-}
-
-static void
-gvc_mixer_card_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerCard *self = GVC_MIXER_CARD (object);
-
- switch (prop_id) {
- case PROP_PA_CONTEXT:
- self->priv->pa_context = g_value_get_pointer (value);
- break;
- case PROP_INDEX:
- self->priv->index = g_value_get_ulong (value);
- break;
- case PROP_ID:
- self->priv->id = g_value_get_ulong (value);
- break;
- case PROP_NAME:
- gvc_mixer_card_set_name (self, g_value_get_string (value));
- break;
- case PROP_ICON_NAME:
- gvc_mixer_card_set_icon_name (self, g_value_get_string (value));
- break;
- case PROP_PROFILE:
- gvc_mixer_card_set_profile (self, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gvc_mixer_card_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerCard *self = GVC_MIXER_CARD (object);
-
- switch (prop_id) {
- case PROP_PA_CONTEXT:
- g_value_set_pointer (value, self->priv->pa_context);
- break;
- case PROP_INDEX:
- g_value_set_ulong (value, self->priv->index);
- break;
- case PROP_ID:
- g_value_set_ulong (value, self->priv->id);
- break;
- case PROP_NAME:
- g_value_set_string (value, self->priv->name);
- break;
- case PROP_ICON_NAME:
- g_value_set_string (value, self->priv->icon_name);
- break;
- case PROP_PROFILE:
- g_value_set_string (value, self->priv->profile);
- break;
- case PROP_HUMAN_PROFILE:
- g_value_set_string (value, self->priv->human_profile);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GObject *
-gvc_mixer_card_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerCard *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_card_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_CARD (object);
-
- self->priv->id = get_next_card_serial ();
-
- return object;
-}
-
-static void
-gvc_mixer_card_class_init (GvcMixerCardClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->constructor = gvc_mixer_card_constructor;
- gobject_class->finalize = gvc_mixer_card_finalize;
-
- gobject_class->set_property = gvc_mixer_card_set_property;
- gobject_class->get_property = gvc_mixer_card_get_property;
-
- g_object_class_install_property (gobject_class,
- PROP_INDEX,
- g_param_spec_ulong ("index",
- "Index",
- "The index for this card",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_ID,
- g_param_spec_ulong ("id",
- "id",
- "The id for this card",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_PA_CONTEXT,
- g_param_spec_pointer ("pa-context",
- "PulseAudio context",
- "The PulseAudio context for this card",
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name to display for this card",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_ICON_NAME,
- g_param_spec_string ("icon-name",
- "Icon Name",
- "Name of icon to display for this card",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_PROFILE,
- g_param_spec_string ("profile",
- "Profile",
- "Name of current profile for this card",
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_HUMAN_PROFILE,
- g_param_spec_string ("human-profile",
- "Profile (Human readable)",
- "Name of current profile for this card in human readable form",
- NULL,
- G_PARAM_READABLE));
-
- g_type_class_add_private (klass, sizeof (GvcMixerCardPrivate));
-}
-
-static void
-gvc_mixer_card_init (GvcMixerCard *card)
-{
- card->priv = GVC_MIXER_CARD_GET_PRIVATE (card);
-}
-
-GvcMixerCard *
-gvc_mixer_card_new (pa_context *context,
- guint index)
-{
- GObject *object;
-
- object = g_object_new (GVC_TYPE_MIXER_CARD,
- "index", index,
- "pa-context", context,
- NULL);
- return GVC_MIXER_CARD (object);
-}
-
-static void
-free_profile (GvcMixerCardProfile *p)
-{
- g_free (p->profile);
- g_free (p->human_profile);
- g_free (p->status);
- g_free (p);
-}
-
-static void
-gvc_mixer_card_finalize (GObject *object)
-{
- GvcMixerCard *mixer_card;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_CARD (object));
-
- mixer_card = GVC_MIXER_CARD (object);
-
- g_return_if_fail (mixer_card->priv != NULL);
-
- g_free (mixer_card->priv->name);
- mixer_card->priv->name = NULL;
-
- g_free (mixer_card->priv->icon_name);
- mixer_card->priv->icon_name = NULL;
-
- g_free (mixer_card->priv->target_profile);
- mixer_card->priv->target_profile = NULL;
-
- g_free (mixer_card->priv->profile);
- mixer_card->priv->profile = NULL;
-
- g_free (mixer_card->priv->human_profile);
- mixer_card->priv->human_profile = NULL;
-
- g_list_foreach (mixer_card->priv->profiles, (GFunc) free_profile, NULL);
- g_list_free (mixer_card->priv->profiles);
- mixer_card->priv->profiles = NULL;
-
- G_OBJECT_CLASS (gvc_mixer_card_parent_class)->finalize (object);
-}
-
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-card.h b/plugins/media-keys/cut-n-paste/gvc-mixer-card.h
deleted file mode 100644
index 54a85e2..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-card.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008-2009 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_CARD_H
-#define __GVC_MIXER_CARD_H
-
-#include <glib-object.h>
-#include <pulse/pulseaudio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_CARD (gvc_mixer_card_get_type ())
-#define GVC_MIXER_CARD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CARD, GvcMixerCard))
-#define GVC_MIXER_CARD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CARD, GvcMixerCardClass))
-#define GVC_IS_MIXER_CARD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_CARD))
-#define GVC_IS_MIXER_CARD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_CARD))
-#define GVC_MIXER_CARD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_CARD, GvcMixerCardClass))
-
-typedef struct GvcMixerCardPrivate GvcMixerCardPrivate;
-
-typedef struct
-{
- GObject parent;
- GvcMixerCardPrivate *priv;
-} GvcMixerCard;
-
-typedef struct
-{
- GObjectClass parent_class;
-
- /* vtable */
-} GvcMixerCardClass;
-
-typedef struct
-{
- char *profile;
- char *human_profile;
- char *status;
- guint priority;
- guint n_sinks, n_sources;
-} GvcMixerCardProfile;
-
-GType gvc_mixer_card_get_type (void);
-GvcMixerCard * gvc_mixer_card_new (pa_context *context,
- guint index);
-
-guint gvc_mixer_card_get_id (GvcMixerCard *card);
-guint gvc_mixer_card_get_index (GvcMixerCard *card);
-const char * gvc_mixer_card_get_name (GvcMixerCard *card);
-const char * gvc_mixer_card_get_icon_name (GvcMixerCard *card);
-GvcMixerCardProfile * gvc_mixer_card_get_profile (GvcMixerCard *card);
-const GList * gvc_mixer_card_get_profiles (GvcMixerCard *card);
-
-pa_context * gvc_mixer_card_get_pa_context (GvcMixerCard *card);
-gboolean gvc_mixer_card_change_profile (GvcMixerCard *card,
- const char *profile);
-
-/* private */
-gboolean gvc_mixer_card_set_name (GvcMixerCard *card,
- const char *name);
-gboolean gvc_mixer_card_set_icon_name (GvcMixerCard *card,
- const char *name);
-gboolean gvc_mixer_card_set_profile (GvcMixerCard *card,
- const char *profile);
-gboolean gvc_mixer_card_set_profiles (GvcMixerCard *card,
- GList *profiles);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_CARD_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c b/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
deleted file mode 100644
index 7f4532c..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c
+++ /dev/null
@@ -1,2150 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2006-2008 Lennart Poettering
- * Copyright (C) 2008 Sjoerd Simons <[email protected]>
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-#include <pulse/glib-mainloop.h>
-#include <pulse/ext-stream-restore.h>
-
-#include "gvc-mixer-control.h"
-#include "gvc-mixer-sink.h"
-#include "gvc-mixer-source.h"
-#include "gvc-mixer-sink-input.h"
-#include "gvc-mixer-source-output.h"
-#include "gvc-mixer-event-role.h"
-#include "gvc-mixer-card.h"
-
-#define GVC_MIXER_CONTROL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControlPrivate))
-
-#define RECONNECT_DELAY 5
-
-enum {
- PROP_0,
- PROP_NAME
-};
-
-struct GvcMixerControlPrivate
-{
- pa_glib_mainloop *pa_mainloop;
- pa_mainloop_api *pa_api;
- pa_context *pa_context;
- int n_outstanding;
- guint reconnect_id;
- char *name;
-
- gboolean default_sink_is_set;
- guint default_sink_id;
- char *default_sink_name;
- gboolean default_source_is_set;
- guint default_source_id;
- char *default_source_name;
-
- gboolean event_sink_input_is_set;
- guint event_sink_input_id;
-
- GHashTable *all_streams;
- GHashTable *sinks; /* fixed outputs */
- GHashTable *sources; /* fixed inputs */
- GHashTable *sink_inputs; /* routable output streams */
- GHashTable *source_outputs; /* routable input streams */
- GHashTable *clients;
- GHashTable *cards;
-
- GvcMixerStream *new_default_stream; /* new default stream, used in gvc_mixer_control_set_default_sink () */
-};
-
-enum {
- CONNECTING,
- READY,
- STREAM_ADDED,
- STREAM_REMOVED,
- CARD_ADDED,
- CARD_REMOVED,
- DEFAULT_SINK_CHANGED,
- DEFAULT_SOURCE_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0, };
-
-static void gvc_mixer_control_class_init (GvcMixerControlClass *klass);
-static void gvc_mixer_control_init (GvcMixerControl *mixer_control);
-static void gvc_mixer_control_finalize (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerControl, gvc_mixer_control, G_TYPE_OBJECT)
-
-pa_context *
-gvc_mixer_control_get_pa_context (GvcMixerControl *control)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
- return control->priv->pa_context;
-}
-
-GvcMixerStream *
-gvc_mixer_control_get_event_sink_input (GvcMixerControl *control)
-{
- GvcMixerStream *stream;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- stream = g_hash_table_lookup (control->priv->all_streams,
- GUINT_TO_POINTER (control->priv->event_sink_input_id));
-
- return stream;
-}
-
-static void
-gvc_mixer_control_stream_restore_cb (pa_context *c,
- const pa_ext_stream_restore_info *info,
- int eol,
- void *userdata)
-{
- pa_operation *o;
- GvcMixerControl *control = (GvcMixerControl *) userdata;
- pa_ext_stream_restore_info new_info;
-
- if (eol || control->priv->new_default_stream == NULL)
- return;
-
- new_info.name = info->name;
- new_info.channel_map = info->channel_map;
- new_info.volume = info->volume;
- new_info.mute = info->mute;
-
- new_info.device = gvc_mixer_stream_get_name (control->priv->new_default_stream);
-
- o = pa_ext_stream_restore_write (control->priv->pa_context,
- PA_UPDATE_REPLACE,
- &new_info, 1,
- TRUE, NULL, NULL);
-
- if (o == NULL) {
- g_warning ("pa_ext_stream_restore_write() failed: %s",
- pa_strerror (pa_context_errno (control->priv->pa_context)));
- return;
- }
-
- g_debug ("Changed default device for %s to %s", info->name, info->device);
-
- pa_operation_unref (o);
-}
-
-gboolean
-gvc_mixer_control_set_default_sink (GvcMixerControl *control,
- GvcMixerStream *stream)
-{
- pa_operation *o;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- o = pa_context_set_default_sink (control->priv->pa_context,
- gvc_mixer_stream_get_name (stream),
- NULL,
- NULL);
- if (o == NULL) {
- g_warning ("pa_context_set_default_sink() failed: %s",
- pa_strerror (pa_context_errno (control->priv->pa_context)));
- return FALSE;
- }
-
- pa_operation_unref (o);
-
- control->priv->new_default_stream = stream;
- g_object_add_weak_pointer (G_OBJECT (stream), (gpointer *) &control->priv->new_default_stream);
-
- o = pa_ext_stream_restore_read (control->priv->pa_context,
- gvc_mixer_control_stream_restore_cb,
- control);
-
- if (o == NULL) {
- g_warning ("pa_ext_stream_restore_read() failed: %s",
- pa_strerror (pa_context_errno (control->priv->pa_context)));
- return FALSE;
- }
-
- pa_operation_unref (o);
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_control_set_default_source (GvcMixerControl *control,
- GvcMixerStream *stream)
-{
- pa_operation *o;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- o = pa_context_set_default_source (control->priv->pa_context,
- gvc_mixer_stream_get_name (stream),
- NULL,
- NULL);
- if (o == NULL) {
- g_warning ("pa_context_set_default_source() failed");
- return FALSE;
- }
-
- pa_operation_unref (o);
-
- return TRUE;
-}
-
-GvcMixerStream *
-gvc_mixer_control_get_default_sink (GvcMixerControl *control)
-{
- GvcMixerStream *stream;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- if (control->priv->default_sink_is_set) {
- stream = g_hash_table_lookup (control->priv->all_streams,
- GUINT_TO_POINTER (control->priv->default_sink_id));
- } else {
- stream = NULL;
- }
-
- return stream;
-}
-
-GvcMixerStream *
-gvc_mixer_control_get_default_source (GvcMixerControl *control)
-{
- GvcMixerStream *stream;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- if (control->priv->default_source_is_set) {
- stream = g_hash_table_lookup (control->priv->all_streams,
- GUINT_TO_POINTER (control->priv->default_source_id));
- } else {
- stream = NULL;
- }
-
- return stream;
-}
-
-static gpointer
-gvc_mixer_control_lookup_id (GHashTable *hash_table,
- guint id)
-{
- return g_hash_table_lookup (hash_table,
- GUINT_TO_POINTER (id));
-}
-
-GvcMixerStream *
-gvc_mixer_control_lookup_stream_id (GvcMixerControl *control,
- guint id)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- return gvc_mixer_control_lookup_id (control->priv->all_streams, id);
-}
-
-GvcMixerCard *
-gvc_mixer_control_lookup_card_id (GvcMixerControl *control,
- guint id)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- return gvc_mixer_control_lookup_id (control->priv->cards, id);
-}
-
-static void
-listify_hash_values_hfunc (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- GSList **list = user_data;
-
- *list = g_slist_prepend (*list, value);
-}
-
-static int
-gvc_name_collate (const char *namea,
- const char *nameb)
-{
- if (nameb == NULL && namea == NULL)
- return 0;
- if (nameb == NULL)
- return 1;
- if (namea == NULL)
- return -1;
-
- return g_utf8_collate (namea, nameb);
-}
-
-static int
-gvc_card_collate (GvcMixerCard *a,
- GvcMixerCard *b)
-{
- const char *namea;
- const char *nameb;
-
- g_return_val_if_fail (a == NULL || GVC_IS_MIXER_CARD (a), 0);
- g_return_val_if_fail (b == NULL || GVC_IS_MIXER_CARD (b), 0);
-
- namea = gvc_mixer_card_get_name (a);
- nameb = gvc_mixer_card_get_name (b);
-
- return gvc_name_collate (namea, nameb);
-}
-
-GSList *
-gvc_mixer_control_get_cards (GvcMixerControl *control)
-{
- GSList *retval;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- retval = NULL;
- g_hash_table_foreach (control->priv->cards,
- listify_hash_values_hfunc,
- &retval);
- return g_slist_sort (retval, (GCompareFunc) gvc_card_collate);
-}
-
-static int
-gvc_stream_collate (GvcMixerStream *a,
- GvcMixerStream *b)
-{
- const char *namea;
- const char *nameb;
-
- g_return_val_if_fail (a == NULL || GVC_IS_MIXER_STREAM (a), 0);
- g_return_val_if_fail (b == NULL || GVC_IS_MIXER_STREAM (b), 0);
-
- namea = gvc_mixer_stream_get_name (a);
- nameb = gvc_mixer_stream_get_name (b);
-
- return gvc_name_collate (namea, nameb);
-}
-
-GSList *
-gvc_mixer_control_get_streams (GvcMixerControl *control)
-{
- GSList *retval;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- retval = NULL;
- g_hash_table_foreach (control->priv->all_streams,
- listify_hash_values_hfunc,
- &retval);
- return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
-}
-
-GSList *
-gvc_mixer_control_get_sinks (GvcMixerControl *control)
-{
- GSList *retval;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- retval = NULL;
- g_hash_table_foreach (control->priv->sinks,
- listify_hash_values_hfunc,
- &retval);
- return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
-}
-
-GSList *
-gvc_mixer_control_get_sources (GvcMixerControl *control)
-{
- GSList *retval;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- retval = NULL;
- g_hash_table_foreach (control->priv->sources,
- listify_hash_values_hfunc,
- &retval);
- return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
-}
-
-GSList *
-gvc_mixer_control_get_sink_inputs (GvcMixerControl *control)
-{
- GSList *retval;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- retval = NULL;
- g_hash_table_foreach (control->priv->sink_inputs,
- listify_hash_values_hfunc,
- &retval);
- return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
-}
-
-GSList *
-gvc_mixer_control_get_source_outputs (GvcMixerControl *control)
-{
- GSList *retval;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
-
- retval = NULL;
- g_hash_table_foreach (control->priv->source_outputs,
- listify_hash_values_hfunc,
- &retval);
- return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
-}
-
-static void
-dec_outstanding (GvcMixerControl *control)
-{
- if (control->priv->n_outstanding <= 0) {
- return;
- }
-
- if (--control->priv->n_outstanding <= 0) {
- g_signal_emit (G_OBJECT (control), signals[READY], 0);
- }
-}
-
-gboolean
-gvc_mixer_control_is_ready (GvcMixerControl *control)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
-
- return (control->priv->n_outstanding == 0);
-}
-
-
-static void
-_set_default_source (GvcMixerControl *control,
- GvcMixerStream *stream)
-{
- guint new_id;
-
- if (stream == NULL) {
- control->priv->default_source_id = 0;
- control->priv->default_source_is_set = FALSE;
- g_signal_emit (control,
- signals[DEFAULT_SOURCE_CHANGED],
- 0,
- PA_INVALID_INDEX);
- return;
- }
-
- new_id = gvc_mixer_stream_get_id (stream);
-
- if (control->priv->default_source_id != new_id) {
- control->priv->default_source_id = new_id;
- control->priv->default_source_is_set = TRUE;
- g_signal_emit (control,
- signals[DEFAULT_SOURCE_CHANGED],
- 0,
- new_id);
- }
-}
-
-static void
-_set_default_sink (GvcMixerControl *control,
- GvcMixerStream *stream)
-{
- guint new_id;
-
- if (stream == NULL) {
- /* Don't tell front-ends about an unset default
- * sink if it's already unset */
- if (control->priv->default_sink_is_set == FALSE)
- return;
- control->priv->default_sink_id = 0;
- control->priv->default_sink_is_set = FALSE;
- g_signal_emit (control,
- signals[DEFAULT_SINK_CHANGED],
- 0,
- PA_INVALID_INDEX);
- return;
- }
-
- new_id = gvc_mixer_stream_get_id (stream);
-
- if (control->priv->default_sink_id != new_id) {
- control->priv->default_sink_id = new_id;
- control->priv->default_sink_is_set = TRUE;
- g_signal_emit (control,
- signals[DEFAULT_SINK_CHANGED],
- 0,
- new_id);
- }
-}
-
-static gboolean
-_stream_has_name (gpointer key,
- GvcMixerStream *stream,
- const char *name)
-{
- const char *t_name;
-
- t_name = gvc_mixer_stream_get_name (stream);
-
- if (t_name != NULL
- && name != NULL
- && strcmp (t_name, name) == 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static GvcMixerStream *
-find_stream_for_name (GvcMixerControl *control,
- const char *name)
-{
- GvcMixerStream *stream;
-
- stream = g_hash_table_find (control->priv->all_streams,
- (GHRFunc)_stream_has_name,
- (char *)name);
- return stream;
-}
-
-static void
-update_default_source_from_name (GvcMixerControl *control,
- const char *name)
-{
- gboolean changed;
-
- if ((control->priv->default_source_name == NULL
- && name != NULL)
- || (control->priv->default_source_name != NULL
- && name == NULL)
- || strcmp (control->priv->default_source_name, name) != 0) {
- changed = TRUE;
- }
-
- if (changed) {
- GvcMixerStream *stream;
-
- g_free (control->priv->default_source_name);
- control->priv->default_source_name = g_strdup (name);
-
- stream = find_stream_for_name (control, name);
- _set_default_source (control, stream);
- }
-}
-
-static void
-update_default_sink_from_name (GvcMixerControl *control,
- const char *name)
-{
- gboolean changed;
-
- if ((control->priv->default_sink_name == NULL
- && name != NULL)
- || (control->priv->default_sink_name != NULL
- && name == NULL)
- || strcmp (control->priv->default_sink_name, name) != 0) {
- changed = TRUE;
- }
-
- if (changed) {
- GvcMixerStream *stream;
- g_free (control->priv->default_sink_name);
- control->priv->default_sink_name = g_strdup (name);
-
- stream = find_stream_for_name (control, name);
- _set_default_sink (control, stream);
- }
-}
-
-static void
-update_server (GvcMixerControl *control,
- const pa_server_info *info)
-{
- if (info->default_source_name != NULL) {
- update_default_source_from_name (control, info->default_source_name);
- }
- if (info->default_sink_name != NULL) {
- update_default_sink_from_name (control, info->default_sink_name);
- }
-}
-
-static void
-remove_stream (GvcMixerControl *control,
- GvcMixerStream *stream)
-{
- guint id;
-
- g_object_ref (stream);
-
- id = gvc_mixer_stream_get_id (stream);
-
- if (id == control->priv->default_sink_id) {
- _set_default_sink (control, NULL);
- } else if (id == control->priv->default_source_id) {
- _set_default_source (control, NULL);
- }
-
- g_hash_table_remove (control->priv->all_streams,
- GUINT_TO_POINTER (id));
- g_signal_emit (G_OBJECT (control),
- signals[STREAM_REMOVED],
- 0,
- gvc_mixer_stream_get_id (stream));
- g_object_unref (stream);
-}
-
-static void
-add_stream (GvcMixerControl *control,
- GvcMixerStream *stream)
-{
- g_hash_table_insert (control->priv->all_streams,
- GUINT_TO_POINTER (gvc_mixer_stream_get_id (stream)),
- stream);
- g_signal_emit (G_OBJECT (control),
- signals[STREAM_ADDED],
- 0,
- gvc_mixer_stream_get_id (stream));
-}
-
-static void
-update_sink (GvcMixerControl *control,
- const pa_sink_info *info)
-{
- GvcMixerStream *stream;
- gboolean is_new;
- pa_volume_t max_volume;
- GvcChannelMap *map;
- char map_buff[PA_CHANNEL_MAP_SNPRINT_MAX];
-
- pa_channel_map_snprint (map_buff, PA_CHANNEL_MAP_SNPRINT_MAX, &info->channel_map);
-#if 1
- g_debug ("Updating sink: index=%u name='%s' description='%s' map='%s'",
- info->index,
- info->name,
- info->description,
- map_buff);
-#endif
-
- map = NULL;
- is_new = FALSE;
- stream = g_hash_table_lookup (control->priv->sinks,
- GUINT_TO_POINTER (info->index));
- if (stream == NULL) {
-#if PA_MICRO > 15
- GList *list = NULL;
- guint i;
-#endif /* PA_MICRO > 15 */
-
- map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
- stream = gvc_mixer_sink_new (control->priv->pa_context,
- info->index,
- map);
-#if PA_MICRO > 15
- for (i = 0; i < info->n_ports; i++) {
- GvcMixerStreamPort *port;
-
- port = g_new0 (GvcMixerStreamPort, 1);
- port->port = g_strdup (info->ports[i]->name);
- port->human_port = g_strdup (info->ports[i]->description);
- port->priority = info->ports[i]->priority;
- list = g_list_prepend (list, port);
- }
- gvc_mixer_stream_set_ports (stream, list);
-#endif /* PA_MICRO > 15 */
- g_object_unref (map);
- is_new = TRUE;
- } else if (gvc_mixer_stream_is_running (stream)) {
- /* Ignore events if volume changes are outstanding */
- g_debug ("Ignoring event, volume changes are outstanding");
- return;
- }
-
- max_volume = pa_cvolume_max (&info->volume);
- gvc_mixer_stream_set_name (stream, info->name);
- gvc_mixer_stream_set_card_index (stream, info->card);
- gvc_mixer_stream_set_description (stream, info->description);
- gvc_mixer_stream_set_icon_name (stream, "audio-card");
- gvc_mixer_stream_set_volume (stream, (guint)max_volume);
- gvc_mixer_stream_set_is_muted (stream, info->mute);
- gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME));
- gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume);
-#if PA_MICRO > 15
- if (info->active_port != NULL)
- gvc_mixer_stream_set_port (stream, info->active_port->name);
-#endif /* PA_MICRO > 15 */
-
- if (is_new) {
- g_hash_table_insert (control->priv->sinks,
- GUINT_TO_POINTER (info->index),
- g_object_ref (stream));
- add_stream (control, stream);
- }
-
- if (control->priv->default_sink_name != NULL
- && info->name != NULL
- && strcmp (control->priv->default_sink_name, info->name) == 0) {
- _set_default_sink (control, stream);
- }
-
- if (map == NULL)
- map = (GvcChannelMap *) gvc_mixer_stream_get_channel_map (stream);
- gvc_channel_map_volume_changed (map, &info->volume, FALSE);
-}
-
-static void
-update_source (GvcMixerControl *control,
- const pa_source_info *info)
-{
- GvcMixerStream *stream;
- gboolean is_new;
- pa_volume_t max_volume;
-
-#if 1
- g_debug ("Updating source: index=%u name='%s' description='%s'",
- info->index,
- info->name,
- info->description);
-#endif
-
- /* completely ignore monitors, they're not real sources */
- if (info->monitor_of_sink != PA_INVALID_INDEX) {
- return;
- }
-
- is_new = FALSE;
-
- stream = g_hash_table_lookup (control->priv->sources,
- GUINT_TO_POINTER (info->index));
- if (stream == NULL) {
-#if PA_MICRO > 15
- GList *list = NULL;
- guint i;
-#endif /* PA_MICRO > 15 */
- GvcChannelMap *map;
-
- map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
- stream = gvc_mixer_source_new (control->priv->pa_context,
- info->index,
- map);
-#if PA_MICRO > 15
- for (i = 0; i < info->n_ports; i++) {
- GvcMixerStreamPort *port;
-
- port = g_new0 (GvcMixerStreamPort, 1);
- port->port = g_strdup (info->ports[i]->name);
- port->human_port = g_strdup (info->ports[i]->description);
- port->priority = info->ports[i]->priority;
- list = g_list_prepend (list, port);
- }
- gvc_mixer_stream_set_ports (stream, list);
-#endif /* PA_MICRO > 15 */
-
- g_object_unref (map);
- is_new = TRUE;
- } else if (gvc_mixer_stream_is_running (stream)) {
- /* Ignore events if volume changes are outstanding */
- g_debug ("Ignoring event, volume changes are outstanding");
- return;
- }
-
- max_volume = pa_cvolume_max (&info->volume);
-
- gvc_mixer_stream_set_name (stream, info->name);
- gvc_mixer_stream_set_card_index (stream, info->card);
- gvc_mixer_stream_set_description (stream, info->description);
- gvc_mixer_stream_set_icon_name (stream, "audio-input-microphone");
- gvc_mixer_stream_set_volume (stream, (guint)max_volume);
- gvc_mixer_stream_set_is_muted (stream, info->mute);
- gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SOURCE_DECIBEL_VOLUME));
- gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume);
-#if PA_MICRO > 15
- if (info->active_port != NULL)
- gvc_mixer_stream_set_port (stream, info->active_port->name);
-#endif /* PA_MICRO > 15 */
-
- if (is_new) {
- g_hash_table_insert (control->priv->sources,
- GUINT_TO_POINTER (info->index),
- g_object_ref (stream));
- add_stream (control, stream);
- }
-
- if (control->priv->default_source_name != NULL
- && info->name != NULL
- && strcmp (control->priv->default_source_name, info->name) == 0) {
- _set_default_source (control, stream);
- }
-}
-
-static void
-set_icon_name_from_proplist (GvcMixerStream *stream,
- pa_proplist *l,
- const char *default_icon_name)
-{
- const char *t;
-
- if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ICON_NAME))) {
- goto finish;
- }
-
- if ((t = pa_proplist_gets (l, PA_PROP_WINDOW_ICON_NAME))) {
- goto finish;
- }
-
- if ((t = pa_proplist_gets (l, PA_PROP_APPLICATION_ICON_NAME))) {
- goto finish;
- }
-
- if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ROLE))) {
-
- if (strcmp (t, "video") == 0 ||
- strcmp (t, "phone") == 0) {
- goto finish;
- }
-
- if (strcmp (t, "music") == 0) {
- t = "audio";
- goto finish;
- }
-
- if (strcmp (t, "game") == 0) {
- t = "applications-games";
- goto finish;
- }
-
- if (strcmp (t, "event") == 0) {
- t = "dialog-information";
- goto finish;
- }
- }
-
- t = default_icon_name;
-
- finish:
- gvc_mixer_stream_set_icon_name (stream, t);
-}
-
-static void
-set_is_event_stream_from_proplist (GvcMixerStream *stream,
- pa_proplist *l)
-{
- const char *t;
- gboolean is_event_stream;
-
- is_event_stream = FALSE;
-
- if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ROLE))) {
- if (g_str_equal (t, "event"))
- is_event_stream = TRUE;
- }
-
- gvc_mixer_stream_set_is_event_stream (stream, is_event_stream);
-}
-
-static void
-set_application_id_from_proplist (GvcMixerStream *stream,
- pa_proplist *l)
-{
- const char *t;
-
- if ((t = pa_proplist_gets (l, PA_PROP_APPLICATION_ID))) {
- gvc_mixer_stream_set_application_id (stream, t);
- }
-}
-
-static void
-update_sink_input (GvcMixerControl *control,
- const pa_sink_input_info *info)
-{
- GvcMixerStream *stream;
- gboolean is_new;
- pa_volume_t max_volume;
- const char *name;
-
-#if 0
- g_debug ("Updating sink input: index=%u name='%s' client=%u sink=%u",
- info->index,
- info->name,
- info->client,
- info->sink);
-#endif
-
- is_new = FALSE;
-
- stream = g_hash_table_lookup (control->priv->sink_inputs,
- GUINT_TO_POINTER (info->index));
- if (stream == NULL) {
- GvcChannelMap *map;
- map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
- stream = gvc_mixer_sink_input_new (control->priv->pa_context,
- info->index,
- map);
- g_object_unref (map);
- is_new = TRUE;
- } else if (gvc_mixer_stream_is_running (stream)) {
- /* Ignore events if volume changes are outstanding */
- g_debug ("Ignoring event, volume changes are outstanding");
- return;
- }
-
- max_volume = pa_cvolume_max (&info->volume);
-
- name = (const char *)g_hash_table_lookup (control->priv->clients,
- GUINT_TO_POINTER (info->client));
- gvc_mixer_stream_set_name (stream, name);
- gvc_mixer_stream_set_description (stream, info->name);
-
- set_application_id_from_proplist (stream, info->proplist);
- set_is_event_stream_from_proplist (stream, info->proplist);
- set_icon_name_from_proplist (stream, info->proplist, "applications-multimedia");
- gvc_mixer_stream_set_volume (stream, (guint)max_volume);
- gvc_mixer_stream_set_is_muted (stream, info->mute);
- gvc_mixer_stream_set_is_virtual (stream, info->client == PA_INVALID_INDEX);
-
- if (is_new) {
- g_hash_table_insert (control->priv->sink_inputs,
- GUINT_TO_POINTER (info->index),
- g_object_ref (stream));
- add_stream (control, stream);
- }
-}
-
-static void
-update_source_output (GvcMixerControl *control,
- const pa_source_output_info *info)
-{
- GvcMixerStream *stream;
- gboolean is_new;
- const char *name;
-
-#if 1
- g_debug ("Updating source output: index=%u name='%s' client=%u source=%u",
- info->index,
- info->name,
- info->client,
- info->source);
-#endif
-
- is_new = FALSE;
- stream = g_hash_table_lookup (control->priv->source_outputs,
- GUINT_TO_POINTER (info->index));
- if (stream == NULL) {
- GvcChannelMap *map;
- map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
- stream = gvc_mixer_source_output_new (control->priv->pa_context,
- info->index,
- map);
- g_object_unref (map);
- is_new = TRUE;
- }
-
- name = (const char *)g_hash_table_lookup (control->priv->clients,
- GUINT_TO_POINTER (info->client));
-
- gvc_mixer_stream_set_name (stream, name);
- gvc_mixer_stream_set_description (stream, info->name);
- set_application_id_from_proplist (stream, info->proplist);
- set_is_event_stream_from_proplist (stream, info->proplist);
- set_icon_name_from_proplist (stream, info->proplist, "audio-input-microphone");
-
- if (is_new) {
- g_hash_table_insert (control->priv->source_outputs,
- GUINT_TO_POINTER (info->index),
- g_object_ref (stream));
- add_stream (control, stream);
- }
-}
-
-static void
-update_client (GvcMixerControl *control,
- const pa_client_info *info)
-{
-#if 1
- g_debug ("Updating client: index=%u name='%s'",
- info->index,
- info->name);
-#endif
- g_hash_table_insert (control->priv->clients,
- GUINT_TO_POINTER (info->index),
- g_strdup (info->name));
-}
-
-static char *
-card_num_streams_to_status (guint sinks,
- guint sources)
-{
- char *sinks_str;
- char *sources_str;
- char *ret;
-
- if (sinks == 0 && sources == 0) {
- /* translators:
- * The device has been disabled */
- return g_strdup (_("Disabled"));
- }
- if (sinks == 0) {
- sinks_str = NULL;
- } else {
- /* translators:
- * The number of sound outputs on a particular device */
- sinks_str = g_strdup_printf (ngettext ("%u Output",
- "%u Outputs",
- sinks),
- sinks);
- }
- if (sources == 0) {
- sources_str = NULL;
- } else {
- /* translators:
- * The number of sound inputs on a particular device */
- sources_str = g_strdup_printf (ngettext ("%u Input",
- "%u Inputs",
- sources),
- sources);
- }
- if (sources_str == NULL)
- return sinks_str;
- if (sinks_str == NULL)
- return sources_str;
- ret = g_strdup_printf ("%s / %s", sinks_str, sources_str);
- g_free (sinks_str);
- g_free (sources_str);
- return ret;
-}
-
-static void
-update_card (GvcMixerControl *control,
- const pa_card_info *info)
-{
- GvcMixerCard *card;
- gboolean is_new;
-#if 1
- guint i;
- const char *key;
- void *state;
-
- g_debug ("Udpating card %s (index: %u driver: %s):",
- info->name, info->index, info->driver);
-
- for (i = 0; i < info->n_profiles; i++) {
- struct pa_card_profile_info pi = info->profiles[i];
- gboolean is_default;
-
- is_default = (g_strcmp0 (pi.name, info->active_profile->name) == 0);
- g_debug ("\tProfile '%s': %d sources %d sinks%s",
- pi.name, pi.n_sources, pi.n_sinks,
- is_default ? " (Current)" : "");
- }
- state = NULL;
- key = pa_proplist_iterate (info->proplist, &state);
- while (key != NULL) {
- g_debug ("\tProperty: '%s' = '%s'",
- key, pa_proplist_gets (info->proplist, key));
- key = pa_proplist_iterate (info->proplist, &state);
- }
-#endif
- card = g_hash_table_lookup (control->priv->cards,
- GUINT_TO_POINTER (info->index));
- if (card == NULL) {
- GList *list = NULL;
-
- for (i = 0; i < info->n_profiles; i++) {
- struct pa_card_profile_info pi = info->profiles[i];
- GvcMixerCardProfile *profile;
-
- profile = g_new0 (GvcMixerCardProfile, 1);
- profile->profile = g_strdup (pi.name);
- profile->human_profile = g_strdup (pi.description);
- profile->status = card_num_streams_to_status (pi.n_sinks, pi.n_sources);
- profile->n_sinks = pi.n_sinks;
- profile->n_sources = pi.n_sources;
- profile->priority = pi.priority;
- list = g_list_prepend (list, profile);
- }
- card = gvc_mixer_card_new (control->priv->pa_context,
- info->index);
- gvc_mixer_card_set_profiles (card, list);
- is_new = TRUE;
- }
-
- gvc_mixer_card_set_name (card, pa_proplist_gets (info->proplist, "device.description"));
- gvc_mixer_card_set_icon_name (card, pa_proplist_gets (info->proplist, "device.icon_name"));
- gvc_mixer_card_set_profile (card, info->active_profile->name);
-
- if (is_new) {
- g_hash_table_insert (control->priv->cards,
- GUINT_TO_POINTER (info->index),
- g_object_ref (card));
- }
- g_signal_emit (G_OBJECT (control),
- signals[CARD_ADDED],
- 0,
- info->index);
-}
-
-static void
-_pa_context_get_sink_info_cb (pa_context *context,
- const pa_sink_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- if (pa_context_errno (context) == PA_ERR_NOENTITY) {
- return;
- }
-
- g_warning ("Sink callback failure");
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- return;
- }
-
- update_sink (control, i);
-}
-
-static void
-_pa_context_get_source_info_cb (pa_context *context,
- const pa_source_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- if (pa_context_errno (context) == PA_ERR_NOENTITY) {
- return;
- }
-
- g_warning ("Source callback failure");
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- return;
- }
-
- update_source (control, i);
-}
-
-static void
-_pa_context_get_sink_input_info_cb (pa_context *context,
- const pa_sink_input_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- if (pa_context_errno (context) == PA_ERR_NOENTITY) {
- return;
- }
-
- g_warning ("Sink input callback failure");
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- return;
- }
-
- update_sink_input (control, i);
-}
-
-static void
-_pa_context_get_source_output_info_cb (pa_context *context,
- const pa_source_output_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- if (pa_context_errno (context) == PA_ERR_NOENTITY) {
- return;
- }
-
- g_warning ("Source output callback failure");
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- return;
- }
-
- update_source_output (control, i);
-}
-
-static void
-_pa_context_get_client_info_cb (pa_context *context,
- const pa_client_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- if (pa_context_errno (context) == PA_ERR_NOENTITY) {
- return;
- }
-
- g_warning ("Client callback failure");
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- return;
- }
-
- update_client (control, i);
-}
-
-static void
-_pa_context_get_card_info_by_index_cb (pa_context *context,
- const pa_card_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- if (pa_context_errno (context) == PA_ERR_NOENTITY)
- return;
-
- g_warning ("Card callback failure");
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- return;
- }
-
- update_card (control, i);
-}
-
-static void
-_pa_context_get_server_info_cb (pa_context *context,
- const pa_server_info *i,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (i == NULL) {
- g_warning ("Server info callback failure");
- return;
- }
-
- update_server (control, i);
- dec_outstanding (control);
-}
-
-static void
-remove_event_role_stream (GvcMixerControl *control)
-{
- g_debug ("Removing event role");
-}
-
-static void
-update_event_role_stream (GvcMixerControl *control,
- const pa_ext_stream_restore_info *info)
-{
- GvcMixerStream *stream;
- gboolean is_new;
- pa_volume_t max_volume;
-
- if (strcmp (info->name, "sink-input-by-media-role:event") != 0) {
- return;
- }
-
-#if 0
- g_debug ("Updating event role: name='%s' device='%s'",
- info->name,
- info->device);
-#endif
-
- is_new = FALSE;
-
- if (!control->priv->event_sink_input_is_set) {
- pa_channel_map pa_map;
- GvcChannelMap *map;
-
- pa_map.channels = 1;
- pa_map.map[0] = PA_CHANNEL_POSITION_MONO;
- map = gvc_channel_map_new_from_pa_channel_map (&pa_map);
-
- stream = gvc_mixer_event_role_new (control->priv->pa_context,
- info->device,
- map);
- control->priv->event_sink_input_id = gvc_mixer_stream_get_id (stream);
- control->priv->event_sink_input_is_set = TRUE;
-
- is_new = TRUE;
- } else {
- stream = g_hash_table_lookup (control->priv->all_streams,
- GUINT_TO_POINTER (control->priv->event_sink_input_id));
- }
-
- max_volume = pa_cvolume_max (&info->volume);
-
- gvc_mixer_stream_set_name (stream, _("System Sounds"));
- gvc_mixer_stream_set_icon_name (stream, "multimedia-volume-control");
- gvc_mixer_stream_set_volume (stream, (guint)max_volume);
- gvc_mixer_stream_set_is_muted (stream, info->mute);
-
- if (is_new) {
- add_stream (control, stream);
- }
-}
-
-static void
-_pa_ext_stream_restore_read_cb (pa_context *context,
- const pa_ext_stream_restore_info *i,
- int eol,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- if (eol < 0) {
- g_debug ("Failed to initialized stream_restore extension: %s",
- pa_strerror (pa_context_errno (context)));
- remove_event_role_stream (control);
- return;
- }
-
- if (eol > 0) {
- dec_outstanding (control);
- /* If we don't have an event stream to restore, then
- * set one up with a default 100% volume */
- if (!control->priv->event_sink_input_is_set) {
- pa_ext_stream_restore_info info;
-
- memset (&info, 0, sizeof(info));
- info.name = "sink-input-by-media-role:event";
- info.volume.channels = 1;
- info.volume.values[0] = PA_VOLUME_NORM;
- update_event_role_stream (control, &info);
- }
- return;
- }
-
- update_event_role_stream (control, i);
-}
-
-static void
-_pa_ext_stream_restore_subscribe_cb (pa_context *context,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
- pa_operation *o;
-
- o = pa_ext_stream_restore_read (context,
- _pa_ext_stream_restore_read_cb,
- control);
- if (o == NULL) {
- g_warning ("pa_ext_stream_restore_read() failed");
- return;
- }
-
- pa_operation_unref (o);
-}
-
-static void
-req_update_server_info (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- o = pa_context_get_server_info (control->priv->pa_context,
- _pa_context_get_server_info_cb,
- control);
- if (o == NULL) {
- g_warning ("pa_context_get_server_info() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-req_update_client_info (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- if (index < 0) {
- o = pa_context_get_client_info_list (control->priv->pa_context,
- _pa_context_get_client_info_cb,
- control);
- } else {
- o = pa_context_get_client_info (control->priv->pa_context,
- index,
- _pa_context_get_client_info_cb,
- control);
- }
-
- if (o == NULL) {
- g_warning ("pa_context_client_info_list() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-req_update_card (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- if (index < 0) {
- o = pa_context_get_card_info_list (control->priv->pa_context,
- _pa_context_get_card_info_by_index_cb,
- control);
- } else {
- o = pa_context_get_card_info_by_index (control->priv->pa_context,
- index,
- _pa_context_get_card_info_by_index_cb,
- control);
- }
-
- if (o == NULL) {
- g_warning ("pa_context_get_card_info_by_index() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-req_update_sink_info (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- if (index < 0) {
- o = pa_context_get_sink_info_list (control->priv->pa_context,
- _pa_context_get_sink_info_cb,
- control);
- } else {
- o = pa_context_get_sink_info_by_index (control->priv->pa_context,
- index,
- _pa_context_get_sink_info_cb,
- control);
- }
-
- if (o == NULL) {
- g_warning ("pa_context_get_sink_info_list() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-req_update_source_info (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- if (index < 0) {
- o = pa_context_get_source_info_list (control->priv->pa_context,
- _pa_context_get_source_info_cb,
- control);
- } else {
- o = pa_context_get_source_info_by_index(control->priv->pa_context,
- index,
- _pa_context_get_source_info_cb,
- control);
- }
-
- if (o == NULL) {
- g_warning ("pa_context_get_source_info_list() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-req_update_sink_input_info (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- if (index < 0) {
- o = pa_context_get_sink_input_info_list (control->priv->pa_context,
- _pa_context_get_sink_input_info_cb,
- control);
- } else {
- o = pa_context_get_sink_input_info (control->priv->pa_context,
- index,
- _pa_context_get_sink_input_info_cb,
- control);
- }
-
- if (o == NULL) {
- g_warning ("pa_context_get_sink_input_info_list() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-req_update_source_output_info (GvcMixerControl *control,
- int index)
-{
- pa_operation *o;
-
- if (index < 0) {
- o = pa_context_get_source_output_info_list (control->priv->pa_context,
- _pa_context_get_source_output_info_cb,
- control);
- } else {
- o = pa_context_get_source_output_info (control->priv->pa_context,
- index,
- _pa_context_get_source_output_info_cb,
- control);
- }
-
- if (o == NULL) {
- g_warning ("pa_context_get_source_output_info_list() failed");
- return;
- }
- pa_operation_unref (o);
-}
-
-static void
-remove_client (GvcMixerControl *control,
- guint index)
-{
- g_hash_table_remove (control->priv->clients,
- GUINT_TO_POINTER (index));
-}
-
-static void
-remove_card (GvcMixerControl *control,
- guint index)
-{
- g_hash_table_remove (control->priv->cards,
- GUINT_TO_POINTER (index));
-
- g_signal_emit (G_OBJECT (control),
- signals[CARD_REMOVED],
- 0,
- index);
-}
-
-static void
-remove_sink (GvcMixerControl *control,
- guint index)
-{
- GvcMixerStream *stream;
-
-#if 0
- g_debug ("Removing sink: index=%u", index);
-#endif
-
- stream = g_hash_table_lookup (control->priv->sinks,
- GUINT_TO_POINTER (index));
- if (stream == NULL) {
- return;
- }
- g_hash_table_remove (control->priv->sinks,
- GUINT_TO_POINTER (index));
-
- remove_stream (control, stream);
-}
-
-static void
-remove_source (GvcMixerControl *control,
- guint index)
-{
- GvcMixerStream *stream;
-
-#if 0
- g_debug ("Removing source: index=%u", index);
-#endif
-
- stream = g_hash_table_lookup (control->priv->sources,
- GUINT_TO_POINTER (index));
- if (stream == NULL) {
- return;
- }
- g_hash_table_remove (control->priv->sources,
- GUINT_TO_POINTER (index));
-
- remove_stream (control, stream);
-}
-
-static void
-remove_sink_input (GvcMixerControl *control,
- guint index)
-{
- GvcMixerStream *stream;
-
-#if 0
- g_debug ("Removing sink input: index=%u", index);
-#endif
- stream = g_hash_table_lookup (control->priv->sink_inputs,
- GUINT_TO_POINTER (index));
- if (stream == NULL) {
- return;
- }
- g_hash_table_remove (control->priv->sink_inputs,
- GUINT_TO_POINTER (index));
-
- remove_stream (control, stream);
-}
-
-static void
-remove_source_output (GvcMixerControl *control,
- guint index)
-{
- GvcMixerStream *stream;
-
-#if 0
- g_debug ("Removing source output: index=%u", index);
-#endif
-
- stream = g_hash_table_lookup (control->priv->source_outputs,
- GUINT_TO_POINTER (index));
- if (stream == NULL) {
- return;
- }
- g_hash_table_remove (control->priv->source_outputs,
- GUINT_TO_POINTER (index));
-
- remove_stream (control, stream);
-}
-
-static void
-_pa_context_subscribe_cb (pa_context *context,
- pa_subscription_event_type_t t,
- uint32_t index,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) {
- case PA_SUBSCRIPTION_EVENT_SINK:
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- remove_sink (control, index);
- } else {
- req_update_sink_info (control, index);
- }
- break;
-
- case PA_SUBSCRIPTION_EVENT_SOURCE:
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- remove_source (control, index);
- } else {
- req_update_source_info (control, index);
- }
- break;
-
- case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- remove_sink_input (control, index);
- } else {
- req_update_sink_input_info (control, index);
- }
- break;
-
- case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- remove_source_output (control, index);
- } else {
- req_update_source_output_info (control, index);
- }
- break;
-
- case PA_SUBSCRIPTION_EVENT_CLIENT:
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- remove_client (control, index);
- } else {
- req_update_client_info (control, index);
- }
- break;
-
- case PA_SUBSCRIPTION_EVENT_SERVER:
- req_update_server_info (control, index);
- break;
-
- case PA_SUBSCRIPTION_EVENT_CARD:
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- remove_card (control, index);
- } else {
- req_update_card (control, index);
- }
- break;
- }
-}
-
-static void
-gvc_mixer_control_ready (GvcMixerControl *control)
-{
- pa_operation *o;
-
- pa_context_set_subscribe_callback (control->priv->pa_context,
- _pa_context_subscribe_cb,
- control);
- o = pa_context_subscribe (control->priv->pa_context,
- (pa_subscription_mask_t)
- (PA_SUBSCRIPTION_MASK_SINK|
- PA_SUBSCRIPTION_MASK_SOURCE|
- PA_SUBSCRIPTION_MASK_SINK_INPUT|
- PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT|
- PA_SUBSCRIPTION_MASK_CLIENT|
- PA_SUBSCRIPTION_MASK_SERVER|
- PA_SUBSCRIPTION_MASK_CARD),
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_subscribe() failed");
- return;
- }
- pa_operation_unref (o);
-
- req_update_server_info (control, -1);
- req_update_client_info (control, -1);
- req_update_sink_info (control, -1);
- req_update_source_info (control, -1);
- req_update_sink_input_info (control, -1);
- req_update_source_output_info (control, -1);
- req_update_card (control, -1);
-
- control->priv->n_outstanding = 6;
-
- /* This call is not always supported */
- o = pa_ext_stream_restore_read (control->priv->pa_context,
- _pa_ext_stream_restore_read_cb,
- control);
- if (o != NULL) {
- pa_operation_unref (o);
- control->priv->n_outstanding++;
-
- pa_ext_stream_restore_set_subscribe_cb (control->priv->pa_context,
- _pa_ext_stream_restore_subscribe_cb,
- control);
-
- o = pa_ext_stream_restore_subscribe (control->priv->pa_context,
- 1,
- NULL,
- NULL);
- if (o != NULL) {
- pa_operation_unref (o);
- }
-
- } else {
- g_debug ("Failed to initialized stream_restore extension: %s",
- pa_strerror (pa_context_errno (control->priv->pa_context)));
- }
-}
-
-static void
-gvc_mixer_new_pa_context (GvcMixerControl *self)
-{
- pa_proplist *proplist;
-
- g_return_if_fail (self);
- g_return_if_fail (!self->priv->pa_context);
-
- proplist = pa_proplist_new ();
- pa_proplist_sets (proplist,
- PA_PROP_APPLICATION_NAME,
- self->priv->name);
- pa_proplist_sets (proplist,
- PA_PROP_APPLICATION_ID,
- "org.mate.VolumeControl");
- pa_proplist_sets (proplist,
- PA_PROP_APPLICATION_ICON_NAME,
- "multimedia-volume-control");
- pa_proplist_sets (proplist,
- PA_PROP_APPLICATION_VERSION,
- PACKAGE_VERSION);
-
- self->priv->pa_context = pa_context_new_with_proplist (self->priv->pa_api, NULL, proplist);
-
- pa_proplist_free (proplist);
- g_assert (self->priv->pa_context);
-}
-
-static void
-remove_all_streams (GvcMixerControl *control, GHashTable *hash_table)
-{
- GHashTableIter iter;
- gpointer key, value;
-
- g_hash_table_iter_init (&iter, hash_table);
- while (g_hash_table_iter_next (&iter, &key, &value)) {
- remove_stream (control, value);
- g_hash_table_iter_remove (&iter);
- }
-}
-
-static gboolean
-idle_reconnect (gpointer data)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (data);
- GHashTableIter iter;
- gpointer key, value;
-
- g_return_val_if_fail (control, FALSE);
-
- if (control->priv->pa_context) {
- pa_context_unref (control->priv->pa_context);
- control->priv->pa_context = NULL;
- gvc_mixer_new_pa_context (control);
- }
-
- remove_all_streams (control, control->priv->sinks);
- remove_all_streams (control, control->priv->sources);
- remove_all_streams (control, control->priv->sink_inputs);
- remove_all_streams (control, control->priv->source_outputs);
-
- g_hash_table_iter_init (&iter, control->priv->clients);
- while (g_hash_table_iter_next (&iter, &key, &value))
- g_hash_table_iter_remove (&iter);
-
- gvc_mixer_control_open (control); /* cannot fail */
-
- control->priv->reconnect_id = 0;
- return FALSE;
-}
-
-static void
-_pa_context_state_cb (pa_context *context,
- void *userdata)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
-
- switch (pa_context_get_state (context)) {
- case PA_CONTEXT_UNCONNECTED:
- case PA_CONTEXT_CONNECTING:
- case PA_CONTEXT_AUTHORIZING:
- case PA_CONTEXT_SETTING_NAME:
- break;
-
- case PA_CONTEXT_READY:
- gvc_mixer_control_ready (control);
- break;
-
- case PA_CONTEXT_FAILED:
- g_warning ("Connection failed, reconnecting...");
- if (control->priv->reconnect_id == 0)
- control->priv->reconnect_id = g_timeout_add_seconds (RECONNECT_DELAY, idle_reconnect, control);
- break;
-
- case PA_CONTEXT_TERMINATED:
- default:
- /* FIXME: */
- break;
- }
-}
-
-gboolean
-gvc_mixer_control_open (GvcMixerControl *control)
-{
- int res;
-
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
- g_return_val_if_fail (control->priv->pa_context != NULL, FALSE);
- g_return_val_if_fail (pa_context_get_state (control->priv->pa_context) == PA_CONTEXT_UNCONNECTED, FALSE);
-
- pa_context_set_state_callback (control->priv->pa_context,
- _pa_context_state_cb,
- control);
-
- g_signal_emit (G_OBJECT (control), signals[CONNECTING], 0);
- res = pa_context_connect (control->priv->pa_context, NULL, (pa_context_flags_t) PA_CONTEXT_NOFAIL, NULL);
- if (res < 0) {
- g_warning ("Failed to connect context: %s",
- pa_strerror (pa_context_errno (control->priv->pa_context)));
- }
-
- return res;
-}
-
-gboolean
-gvc_mixer_control_close (GvcMixerControl *control)
-{
- g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
- g_return_val_if_fail (control->priv->pa_context != NULL, FALSE);
-
- pa_context_disconnect (control->priv->pa_context);
- return TRUE;
-}
-
-static void
-gvc_mixer_control_dispose (GObject *object)
-{
- GvcMixerControl *control = GVC_MIXER_CONTROL (object);
-
- if (control->priv->pa_context != NULL) {
- pa_context_unref (control->priv->pa_context);
- control->priv->pa_context = NULL;
- }
-
- if (control->priv->default_source_name != NULL) {
- g_free (control->priv->default_source_name);
- control->priv->default_source_name = NULL;
- }
- if (control->priv->default_sink_name != NULL) {
- g_free (control->priv->default_sink_name);
- control->priv->default_sink_name = NULL;
- }
-
- if (control->priv->pa_mainloop != NULL) {
- pa_glib_mainloop_free (control->priv->pa_mainloop);
- control->priv->pa_mainloop = NULL;
- }
-
- if (control->priv->all_streams != NULL) {
- g_hash_table_destroy (control->priv->all_streams);
- control->priv->all_streams = NULL;
- }
-
- if (control->priv->sinks != NULL) {
- g_hash_table_destroy (control->priv->sinks);
- control->priv->sinks = NULL;
- }
- if (control->priv->sources != NULL) {
- g_hash_table_destroy (control->priv->sources);
- control->priv->sources = NULL;
- }
- if (control->priv->sink_inputs != NULL) {
- g_hash_table_destroy (control->priv->sink_inputs);
- control->priv->sink_inputs = NULL;
- }
- if (control->priv->source_outputs != NULL) {
- g_hash_table_destroy (control->priv->source_outputs);
- control->priv->source_outputs = NULL;
- }
- if (control->priv->clients != NULL) {
- g_hash_table_destroy (control->priv->clients);
- control->priv->clients = NULL;
- }
- if (control->priv->cards != NULL) {
- g_hash_table_destroy (control->priv->cards);
- control->priv->cards = NULL;
- }
-
- G_OBJECT_CLASS (gvc_mixer_control_parent_class)->dispose (object);
-}
-
-static void
-gvc_mixer_control_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerControl *self = GVC_MIXER_CONTROL (object);
-
- switch (prop_id) {
- case PROP_NAME:
- g_free (self->priv->name);
- self->priv->name = g_value_dup_string (value);
- g_object_notify (G_OBJECT (self), "name");
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gvc_mixer_control_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerControl *self = GVC_MIXER_CONTROL (object);
-
- switch (prop_id) {
- case PROP_NAME:
- g_value_set_string (value, self->priv->name);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-
-static GObject *
-gvc_mixer_control_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerControl *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_control_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_CONTROL (object);
-
- gvc_mixer_new_pa_context (self);
-
- return object;
-}
-
-static void
-gvc_mixer_control_class_init (GvcMixerControlClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructor = gvc_mixer_control_constructor;
- object_class->dispose = gvc_mixer_control_dispose;
- object_class->finalize = gvc_mixer_control_finalize;
- object_class->set_property = gvc_mixer_control_set_property;
- object_class->get_property = gvc_mixer_control_get_property;
-
- g_object_class_install_property (object_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name to display for this mixer control",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
-
- signals [CONNECTING] =
- g_signal_new ("connecting",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, connecting),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals [READY] =
- g_signal_new ("ready",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, ready),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals [STREAM_ADDED] =
- g_signal_new ("stream-added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, stream_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
- signals [STREAM_REMOVED] =
- g_signal_new ("stream-removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, stream_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
- signals [CARD_ADDED] =
- g_signal_new ("card-added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, card_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
- signals [CARD_REMOVED] =
- g_signal_new ("card-removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, card_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
- signals [DEFAULT_SINK_CHANGED] =
- g_signal_new ("default-sink-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, default_sink_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
- signals [DEFAULT_SOURCE_CHANGED] =
- g_signal_new ("default-source-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GvcMixerControlClass, default_source_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-
- g_type_class_add_private (klass, sizeof (GvcMixerControlPrivate));
-}
-
-static void
-gvc_mixer_control_init (GvcMixerControl *control)
-{
- control->priv = GVC_MIXER_CONTROL_GET_PRIVATE (control);
-
- control->priv->pa_mainloop = pa_glib_mainloop_new (g_main_context_default ());
- g_assert (control->priv->pa_mainloop);
-
- control->priv->pa_api = pa_glib_mainloop_get_api (control->priv->pa_mainloop);
- g_assert (control->priv->pa_api);
-
- control->priv->all_streams = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
- control->priv->sinks = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
- control->priv->sources = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
- control->priv->sink_inputs = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
- control->priv->source_outputs = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
- control->priv->cards = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
-
- control->priv->clients = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_free);
-}
-
-static void
-gvc_mixer_control_finalize (GObject *object)
-{
- GvcMixerControl *mixer_control;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_CONTROL (object));
-
- mixer_control = GVC_MIXER_CONTROL (object);
- g_free (mixer_control->priv->name);
- mixer_control->priv->name = NULL;
-
- g_return_if_fail (mixer_control->priv != NULL);
- G_OBJECT_CLASS (gvc_mixer_control_parent_class)->finalize (object);
-}
-
-GvcMixerControl *
-gvc_mixer_control_new (const char *name)
-{
- GObject *control;
- control = g_object_new (GVC_TYPE_MIXER_CONTROL,
- "name", name,
- NULL);
- return GVC_MIXER_CONTROL (control);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-control.h b/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
deleted file mode 100644
index af19145..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_CONTROL_H
-#define __GVC_MIXER_CONTROL_H
-
-#include <glib-object.h>
-#include <pulse/pulseaudio.h>
-#include "gvc-mixer-stream.h"
-#include "gvc-mixer-card.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_CONTROL (gvc_mixer_control_get_type ())
-#define GVC_MIXER_CONTROL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControl))
-#define GVC_MIXER_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
-#define GVC_IS_MIXER_CONTROL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_CONTROL))
-#define GVC_IS_MIXER_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_CONTROL))
-#define GVC_MIXER_CONTROL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
-
-typedef struct GvcMixerControlPrivate GvcMixerControlPrivate;
-
-typedef struct
-{
- GObject parent;
- GvcMixerControlPrivate *priv;
-} GvcMixerControl;
-
-typedef struct
-{
- GObjectClass parent_class;
-
- void (*connecting) (GvcMixerControl *control);
- void (*ready) (GvcMixerControl *control);
- void (*stream_added) (GvcMixerControl *control,
- guint id);
- void (*stream_removed) (GvcMixerControl *control,
- guint id);
- void (*card_added) (GvcMixerControl *control,
- guint id);
- void (*card_removed) (GvcMixerControl *control,
- guint id);
- void (*default_sink_changed) (GvcMixerControl *control,
- guint id);
- void (*default_source_changed) (GvcMixerControl *control,
- guint id);
-} GvcMixerControlClass;
-
-GType gvc_mixer_control_get_type (void);
-
-GvcMixerControl * gvc_mixer_control_new (const char *name);
-
-gboolean gvc_mixer_control_open (GvcMixerControl *control);
-gboolean gvc_mixer_control_close (GvcMixerControl *control);
-gboolean gvc_mixer_control_is_ready (GvcMixerControl *control);
-
-pa_context * gvc_mixer_control_get_pa_context (GvcMixerControl *control);
-GSList * gvc_mixer_control_get_cards (GvcMixerControl *control);
-GSList * gvc_mixer_control_get_streams (GvcMixerControl *control);
-GSList * gvc_mixer_control_get_sinks (GvcMixerControl *control);
-GSList * gvc_mixer_control_get_sources (GvcMixerControl *control);
-GSList * gvc_mixer_control_get_sink_inputs (GvcMixerControl *control);
-GSList * gvc_mixer_control_get_source_outputs (GvcMixerControl *control);
-
-GvcMixerStream * gvc_mixer_control_lookup_stream_id (GvcMixerControl *control,
- guint id);
-GvcMixerCard * gvc_mixer_control_lookup_card_id (GvcMixerControl *control,
- guint id);
-
-GvcMixerStream * gvc_mixer_control_get_default_sink (GvcMixerControl *control);
-GvcMixerStream * gvc_mixer_control_get_default_source (GvcMixerControl *control);
-GvcMixerStream * gvc_mixer_control_get_event_sink_input (GvcMixerControl *control);
-
-gboolean gvc_mixer_control_set_default_sink (GvcMixerControl *control,
- GvcMixerStream *stream);
-gboolean gvc_mixer_control_set_default_source (GvcMixerControl *control,
- GvcMixerStream *stream);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_CONTROL_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c b/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c
deleted file mode 100644
index 594f951..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-#include <pulse/ext-stream-restore.h>
-
-#include "gvc-mixer-event-role.h"
-
-#define GVC_MIXER_EVENT_ROLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRolePrivate))
-
-struct GvcMixerEventRolePrivate
-{
- char *device;
-};
-
-enum
-{
- PROP_0,
- PROP_DEVICE
-};
-
-static void gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass);
-static void gvc_mixer_event_role_init (GvcMixerEventRole *mixer_event_role);
-static void gvc_mixer_event_role_finalize (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerEventRole, gvc_mixer_event_role, GVC_TYPE_MIXER_STREAM)
-
-static gboolean
-update_settings (GvcMixerEventRole *role,
- gboolean is_muted,
- gpointer *op)
-{
- pa_operation *o;
- guint index;
- const GvcChannelMap *map;
- pa_context *context;
- pa_ext_stream_restore_info info;
-
- index = gvc_mixer_stream_get_index (GVC_MIXER_STREAM (role));
-
- map = gvc_mixer_stream_get_channel_map (GVC_MIXER_STREAM(role));
-
- info.volume = *gvc_channel_map_get_cvolume(map);
- info.name = "sink-input-by-media-role:event";
- info.channel_map = *gvc_channel_map_get_pa_channel_map(map);
- info.device = role->priv->device;
- info.mute = is_muted;
-
- context = gvc_mixer_stream_get_pa_context (GVC_MIXER_STREAM (role));
-
- o = pa_ext_stream_restore_write (context,
- PA_UPDATE_REPLACE,
- &info,
- 1,
- TRUE,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_ext_stream_restore_write() failed");
- return FALSE;
- }
-
- if (op != NULL)
- *op = o;
-
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_event_role_push_volume (GvcMixerStream *stream, gpointer *op)
-{
- return update_settings (GVC_MIXER_EVENT_ROLE (stream),
- gvc_mixer_stream_get_is_muted (stream), op);
-}
-
-static gboolean
-gvc_mixer_event_role_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- return update_settings (GVC_MIXER_EVENT_ROLE (stream),
- is_muted, NULL);
-}
-
-static gboolean
-gvc_mixer_event_role_set_device (GvcMixerEventRole *role,
- const char *device)
-{
- g_return_val_if_fail (GVC_IS_MIXER_EVENT_ROLE (role), FALSE);
-
- g_free (role->priv->device);
- role->priv->device = g_strdup (device);
- g_object_notify (G_OBJECT (role), "device");
-
- return TRUE;
-}
-
-static void
-gvc_mixer_event_role_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
-
- switch (prop_id) {
- case PROP_DEVICE:
- gvc_mixer_event_role_set_device (self, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gvc_mixer_event_role_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
-
- switch (prop_id) {
- case PROP_DEVICE:
- g_value_set_string (value, self->priv->device);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GObject *
-gvc_mixer_event_role_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerEventRole *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_EVENT_ROLE (object);
-
- return object;
-}
-
-static void
-gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
-
- object_class->constructor = gvc_mixer_event_role_constructor;
- object_class->finalize = gvc_mixer_event_role_finalize;
- object_class->set_property = gvc_mixer_event_role_set_property;
- object_class->get_property = gvc_mixer_event_role_get_property;
-
- stream_class->push_volume = gvc_mixer_event_role_push_volume;
- stream_class->change_is_muted = gvc_mixer_event_role_change_is_muted;
-
- g_object_class_install_property (object_class,
- PROP_DEVICE,
- g_param_spec_string ("device",
- "Device",
- "Device",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
-
- g_type_class_add_private (klass, sizeof (GvcMixerEventRolePrivate));
-}
-
-static void
-gvc_mixer_event_role_init (GvcMixerEventRole *event_role)
-{
- event_role->priv = GVC_MIXER_EVENT_ROLE_GET_PRIVATE (event_role);
-
-}
-
-static void
-gvc_mixer_event_role_finalize (GObject *object)
-{
- GvcMixerEventRole *mixer_event_role;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_EVENT_ROLE (object));
-
- mixer_event_role = GVC_MIXER_EVENT_ROLE (object);
-
- g_return_if_fail (mixer_event_role->priv != NULL);
-
- g_free (mixer_event_role->priv->device);
-
- G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->finalize (object);
-}
-
-GvcMixerStream *
-gvc_mixer_event_role_new (pa_context *context,
- const char *device,
- GvcChannelMap *channel_map)
-{
- GObject *object;
-
- object = g_object_new (GVC_TYPE_MIXER_EVENT_ROLE,
- "pa-context", context,
- "index", 0,
- "device", device,
- "channel-map", channel_map,
- NULL);
-
- return GVC_MIXER_STREAM (object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.h b/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.h
deleted file mode 100644
index de62bcd..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_EVENT_ROLE_H
-#define __GVC_MIXER_EVENT_ROLE_H
-
-#include <glib-object.h>
-#include "gvc-mixer-stream.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_EVENT_ROLE (gvc_mixer_event_role_get_type ())
-#define GVC_MIXER_EVENT_ROLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRole))
-#define GVC_MIXER_EVENT_ROLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRoleClass))
-#define GVC_IS_MIXER_EVENT_ROLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_EVENT_ROLE))
-#define GVC_IS_MIXER_EVENT_ROLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_EVENT_ROLE))
-#define GVC_MIXER_EVENT_ROLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRoleClass))
-
-typedef struct GvcMixerEventRolePrivate GvcMixerEventRolePrivate;
-
-typedef struct
-{
- GvcMixerStream parent;
- GvcMixerEventRolePrivate *priv;
-} GvcMixerEventRole;
-
-typedef struct
-{
- GvcMixerStreamClass parent_class;
-} GvcMixerEventRoleClass;
-
-GType gvc_mixer_event_role_get_type (void);
-
-GvcMixerStream * gvc_mixer_event_role_new (pa_context *context,
- const char *device,
- GvcChannelMap *channel_map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_EVENT_ROLE_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c b/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c
deleted file mode 100644
index 1f4a06b..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-mixer-sink-input.h"
-
-#define GVC_MIXER_SINK_INPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputPrivate))
-
-struct GvcMixerSinkInputPrivate
-{
- gpointer dummy;
-};
-
-static void gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass);
-static void gvc_mixer_sink_input_init (GvcMixerSinkInput *mixer_sink_input);
-static void gvc_mixer_sink_input_finalize (GObject *object);
-static void gvc_mixer_sink_input_dispose (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM)
-
-static gboolean
-gvc_mixer_sink_input_push_volume (GvcMixerStream *stream, gpointer *op)
-{
- pa_operation *o;
- guint index;
- const GvcChannelMap *map;
- pa_context *context;
- const pa_cvolume *cv;
- guint num_channels;
-
- index = gvc_mixer_stream_get_index (stream);
-
- map = gvc_mixer_stream_get_channel_map (stream);
- num_channels = gvc_channel_map_get_num_channels (map);
-
- cv = gvc_channel_map_get_cvolume(map);
-
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_sink_input_volume (context,
- index,
- cv,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_sink_input_volume() failed");
- return FALSE;
- }
-
- *op = o;
-
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_sink_input_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- pa_operation *o;
- guint index;
- pa_context *context;
-
- index = gvc_mixer_stream_get_index (stream);
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_sink_input_mute (context,
- index,
- is_muted,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_sink_input_mute_by_index() failed");
- return FALSE;
- }
-
- pa_operation_unref(o);
-
- return TRUE;
-}
-
-static GObject *
-gvc_mixer_sink_input_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerSinkInput *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_SINK_INPUT (object);
-
- return object;
-}
-
-static void
-gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
-
- object_class->constructor = gvc_mixer_sink_input_constructor;
- object_class->dispose = gvc_mixer_sink_input_dispose;
- object_class->finalize = gvc_mixer_sink_input_finalize;
-
- stream_class->push_volume = gvc_mixer_sink_input_push_volume;
- stream_class->change_is_muted = gvc_mixer_sink_input_change_is_muted;
-
- g_type_class_add_private (klass, sizeof (GvcMixerSinkInputPrivate));
-}
-
-static void
-gvc_mixer_sink_input_init (GvcMixerSinkInput *sink_input)
-{
- sink_input->priv = GVC_MIXER_SINK_INPUT_GET_PRIVATE (sink_input);
-}
-
-static void
-gvc_mixer_sink_input_dispose (GObject *object)
-{
- GvcMixerSinkInput *mixer_sink_input;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
-
- mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
-
- G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->dispose (object);
-}
-
-static void
-gvc_mixer_sink_input_finalize (GObject *object)
-{
- GvcMixerSinkInput *mixer_sink_input;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
-
- mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
-
- g_return_if_fail (mixer_sink_input->priv != NULL);
- G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->finalize (object);
-}
-
-GvcMixerStream *
-gvc_mixer_sink_input_new (pa_context *context,
- guint index,
- GvcChannelMap *channel_map)
-{
- GObject *object;
-
- object = g_object_new (GVC_TYPE_MIXER_SINK_INPUT,
- "pa-context", context,
- "index", index,
- "channel-map", channel_map,
- NULL);
-
- return GVC_MIXER_STREAM (object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.h b/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.h
deleted file mode 100644
index fa0567b..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_SINK_INPUT_H
-#define __GVC_MIXER_SINK_INPUT_H
-
-#include <glib-object.h>
-#include "gvc-mixer-stream.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_SINK_INPUT (gvc_mixer_sink_input_get_type ())
-#define GVC_MIXER_SINK_INPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInput))
-#define GVC_MIXER_SINK_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputClass))
-#define GVC_IS_MIXER_SINK_INPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SINK_INPUT))
-#define GVC_IS_MIXER_SINK_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SINK_INPUT))
-#define GVC_MIXER_SINK_INPUT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputClass))
-
-typedef struct GvcMixerSinkInputPrivate GvcMixerSinkInputPrivate;
-
-typedef struct
-{
- GvcMixerStream parent;
- GvcMixerSinkInputPrivate *priv;
-} GvcMixerSinkInput;
-
-typedef struct
-{
- GvcMixerStreamClass parent_class;
-} GvcMixerSinkInputClass;
-
-GType gvc_mixer_sink_input_get_type (void);
-
-GvcMixerStream * gvc_mixer_sink_input_new (pa_context *context,
- guint index,
- GvcChannelMap *map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_SINK_INPUT_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c b/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c
deleted file mode 100644
index 3ab7924..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-mixer-sink.h"
-
-#define GVC_MIXER_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SINK, GvcMixerSinkPrivate))
-
-struct GvcMixerSinkPrivate
-{
- gpointer dummy;
-};
-
-static void gvc_mixer_sink_class_init (GvcMixerSinkClass *klass);
-static void gvc_mixer_sink_init (GvcMixerSink *mixer_sink);
-static void gvc_mixer_sink_finalize (GObject *object);
-static void gvc_mixer_sink_dispose (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM)
-
-static gboolean
-gvc_mixer_sink_push_volume (GvcMixerStream *stream, gpointer *op)
-{
- pa_operation *o;
- guint index;
- const GvcChannelMap *map;
- pa_context *context;
- const pa_cvolume *cv;
-
- index = gvc_mixer_stream_get_index (stream);
-
- map = gvc_mixer_stream_get_channel_map (stream);
-
- /* set the volume */
- cv = gvc_channel_map_get_cvolume(map);
-
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_sink_volume_by_index (context,
- index,
- cv,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_sink_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
- return FALSE;
- }
-
- *op = o;
-
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_sink_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- pa_operation *o;
- guint index;
- pa_context *context;
-
- index = gvc_mixer_stream_get_index (stream);
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_sink_mute_by_index (context,
- index,
- is_muted,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_sink_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
- return FALSE;
- }
-
- pa_operation_unref(o);
-
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_sink_change_port (GvcMixerStream *stream,
- const char *port)
-{
-#if PA_MICRO > 15
- pa_operation *o;
- guint index;
- pa_context *context;
-
- index = gvc_mixer_stream_get_index (stream);
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_sink_port_by_index (context,
- index,
- port,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_sink_port_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
- return FALSE;
- }
-
- pa_operation_unref(o);
-
- return TRUE;
-#else
- return FALSE;
-#endif /* PA_MICRO > 15 */
-}
-
-static GObject *
-gvc_mixer_sink_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerSink *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_SINK (object);
-
- return object;
-}
-
-static void
-gvc_mixer_sink_class_init (GvcMixerSinkClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
-
- object_class->constructor = gvc_mixer_sink_constructor;
- object_class->dispose = gvc_mixer_sink_dispose;
- object_class->finalize = gvc_mixer_sink_finalize;
-
- stream_class->push_volume = gvc_mixer_sink_push_volume;
- stream_class->change_port = gvc_mixer_sink_change_port;
- stream_class->change_is_muted = gvc_mixer_sink_change_is_muted;
-
- g_type_class_add_private (klass, sizeof (GvcMixerSinkPrivate));
-}
-
-static void
-gvc_mixer_sink_init (GvcMixerSink *sink)
-{
- sink->priv = GVC_MIXER_SINK_GET_PRIVATE (sink);
-}
-
-static void
-gvc_mixer_sink_dispose (GObject *object)
-{
- GvcMixerSink *mixer_sink;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SINK (object));
-
- mixer_sink = GVC_MIXER_SINK (object);
-
- G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->dispose (object);
-}
-
-static void
-gvc_mixer_sink_finalize (GObject *object)
-{
- GvcMixerSink *mixer_sink;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SINK (object));
-
- mixer_sink = GVC_MIXER_SINK (object);
-
- g_return_if_fail (mixer_sink->priv != NULL);
- G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->finalize (object);
-}
-
-GvcMixerStream *
-gvc_mixer_sink_new (pa_context *context,
- guint index,
- GvcChannelMap *channel_map)
-
-{
- GObject *object;
-
- object = g_object_new (GVC_TYPE_MIXER_SINK,
- "pa-context", context,
- "index", index,
- "channel-map", channel_map,
- NULL);
-
- return GVC_MIXER_STREAM (object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.h b/plugins/media-keys/cut-n-paste/gvc-mixer-sink.h
deleted file mode 100644
index 13f8969..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_SINK_H
-#define __GVC_MIXER_SINK_H
-
-#include <glib-object.h>
-#include "gvc-mixer-stream.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_SINK (gvc_mixer_sink_get_type ())
-#define GVC_MIXER_SINK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SINK, GvcMixerSink))
-#define GVC_MIXER_SINK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SINK, GvcMixerSinkClass))
-#define GVC_IS_MIXER_SINK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SINK))
-#define GVC_IS_MIXER_SINK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SINK))
-#define GVC_MIXER_SINK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SINK, GvcMixerSinkClass))
-
-typedef struct GvcMixerSinkPrivate GvcMixerSinkPrivate;
-
-typedef struct
-{
- GvcMixerStream parent;
- GvcMixerSinkPrivate *priv;
-} GvcMixerSink;
-
-typedef struct
-{
- GvcMixerStreamClass parent_class;
-} GvcMixerSinkClass;
-
-GType gvc_mixer_sink_get_type (void);
-
-GvcMixerStream * gvc_mixer_sink_new (pa_context *context,
- guint index,
- GvcChannelMap *map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_SINK_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c b/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c
deleted file mode 100644
index 7b63221..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-mixer-source-output.h"
-
-#define GVC_MIXER_SOURCE_OUTPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputPrivate))
-
-struct GvcMixerSourceOutputPrivate
-{
- gpointer dummy;
-};
-
-static void gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass);
-static void gvc_mixer_source_output_init (GvcMixerSourceOutput *mixer_source_output);
-static void gvc_mixer_source_output_finalize (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerSourceOutput, gvc_mixer_source_output, GVC_TYPE_MIXER_STREAM)
-
-static gboolean
-gvc_mixer_source_output_push_volume (GvcMixerStream *stream, gpointer *op)
-{
- /* FIXME: */
- *op = NULL;
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_source_output_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- /* FIXME: */
- return TRUE;
-}
-
-static GObject *
-gvc_mixer_source_output_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerSourceOutput *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_SOURCE_OUTPUT (object);
-
- return object;
-}
-
-static void
-gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
-
- object_class->constructor = gvc_mixer_source_output_constructor;
- object_class->finalize = gvc_mixer_source_output_finalize;
-
- stream_class->push_volume = gvc_mixer_source_output_push_volume;
- stream_class->change_is_muted = gvc_mixer_source_output_change_is_muted;
-
- g_type_class_add_private (klass, sizeof (GvcMixerSourceOutputPrivate));
-}
-
-static void
-gvc_mixer_source_output_init (GvcMixerSourceOutput *source_output)
-{
- source_output->priv = GVC_MIXER_SOURCE_OUTPUT_GET_PRIVATE (source_output);
-
-}
-
-static void
-gvc_mixer_source_output_finalize (GObject *object)
-{
- GvcMixerSourceOutput *mixer_source_output;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SOURCE_OUTPUT (object));
-
- mixer_source_output = GVC_MIXER_SOURCE_OUTPUT (object);
-
- g_return_if_fail (mixer_source_output->priv != NULL);
- G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->finalize (object);
-}
-
-GvcMixerStream *
-gvc_mixer_source_output_new (pa_context *context,
- guint index,
- GvcChannelMap *channel_map)
-{
- GObject *object;
-
- object = g_object_new (GVC_TYPE_MIXER_SOURCE_OUTPUT,
- "pa-context", context,
- "index", index,
- "channel-map", channel_map,
- NULL);
-
- return GVC_MIXER_STREAM (object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.h b/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.h
deleted file mode 100644
index ad5dc25..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_SOURCE_OUTPUT_H
-#define __GVC_MIXER_SOURCE_OUTPUT_H
-
-#include <glib-object.h>
-#include "gvc-mixer-stream.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_SOURCE_OUTPUT (gvc_mixer_source_output_get_type ())
-#define GVC_MIXER_SOURCE_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutput))
-#define GVC_MIXER_SOURCE_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputClass))
-#define GVC_IS_MIXER_SOURCE_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT))
-#define GVC_IS_MIXER_SOURCE_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SOURCE_OUTPUT))
-#define GVC_MIXER_SOURCE_OUTPUT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputClass))
-
-typedef struct GvcMixerSourceOutputPrivate GvcMixerSourceOutputPrivate;
-
-typedef struct
-{
- GvcMixerStream parent;
- GvcMixerSourceOutputPrivate *priv;
-} GvcMixerSourceOutput;
-
-typedef struct
-{
- GvcMixerStreamClass parent_class;
-} GvcMixerSourceOutputClass;
-
-GType gvc_mixer_source_output_get_type (void);
-
-GvcMixerStream * gvc_mixer_source_output_new (pa_context *context,
- guint index,
- GvcChannelMap *map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_SOURCE_OUTPUT_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source.c b/plugins/media-keys/cut-n-paste/gvc-mixer-source.c
deleted file mode 100644
index bc51f08..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-source.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-mixer-source.h"
-
-#define GVC_MIXER_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSourcePrivate))
-
-struct GvcMixerSourcePrivate
-{
- gpointer dummy;
-};
-
-static void gvc_mixer_source_class_init (GvcMixerSourceClass *klass);
-static void gvc_mixer_source_init (GvcMixerSource *mixer_source);
-static void gvc_mixer_source_finalize (GObject *object);
-static void gvc_mixer_source_dispose (GObject *object);
-
-G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM)
-
-static gboolean
-gvc_mixer_source_push_volume (GvcMixerStream *stream, gpointer *op)
-{
- pa_operation *o;
- guint index;
- const GvcChannelMap *map;
- pa_context *context;
- const pa_cvolume *cv;
-
- index = gvc_mixer_stream_get_index (stream);
-
- map = gvc_mixer_stream_get_channel_map (stream);
-
- /* set the volume */
- cv = gvc_channel_map_get_cvolume (map);
-
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_source_volume_by_index (context,
- index,
- cv,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_source_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
- return FALSE;
- }
-
- *op = o;
-
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_source_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- pa_operation *o;
- guint index;
- pa_context *context;
-
- index = gvc_mixer_stream_get_index (stream);
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_source_mute_by_index (context,
- index,
- is_muted,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_source_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
- return FALSE;
- }
-
- pa_operation_unref(o);
-
- return TRUE;
-}
-
-static gboolean
-gvc_mixer_source_change_port (GvcMixerStream *stream,
- const char *port)
-{
-#if PA_MICRO > 15
- pa_operation *o;
- guint index;
- pa_context *context;
-
- index = gvc_mixer_stream_get_index (stream);
- context = gvc_mixer_stream_get_pa_context (stream);
-
- o = pa_context_set_source_port_by_index (context,
- index,
- port,
- NULL,
- NULL);
-
- if (o == NULL) {
- g_warning ("pa_context_set_source_port_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
- return FALSE;
- }
-
- pa_operation_unref(o);
-
- return TRUE;
-#else
- return FALSE;
-#endif /* PA_MICRO > 15 */
-}
-
-static GObject *
-gvc_mixer_source_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerSource *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_source_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_SOURCE (object);
-
- return object;
-}
-
-static void
-gvc_mixer_source_class_init (GvcMixerSourceClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
-
- object_class->constructor = gvc_mixer_source_constructor;
- object_class->dispose = gvc_mixer_source_dispose;
- object_class->finalize = gvc_mixer_source_finalize;
-
- stream_class->push_volume = gvc_mixer_source_push_volume;
- stream_class->change_is_muted = gvc_mixer_source_change_is_muted;
- stream_class->change_port = gvc_mixer_source_change_port;
-
- g_type_class_add_private (klass, sizeof (GvcMixerSourcePrivate));
-}
-
-static void
-gvc_mixer_source_init (GvcMixerSource *source)
-{
- source->priv = GVC_MIXER_SOURCE_GET_PRIVATE (source);
-}
-
-static void
-gvc_mixer_source_dispose (GObject *object)
-{
- GvcMixerSource *mixer_source;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
-
- mixer_source = GVC_MIXER_SOURCE (object);
-
- G_OBJECT_CLASS (gvc_mixer_source_parent_class)->dispose (object);
-}
-
-static void
-gvc_mixer_source_finalize (GObject *object)
-{
- GvcMixerSource *mixer_source;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
-
- mixer_source = GVC_MIXER_SOURCE (object);
-
- g_return_if_fail (mixer_source->priv != NULL);
- G_OBJECT_CLASS (gvc_mixer_source_parent_class)->finalize (object);
-}
-
-GvcMixerStream *
-gvc_mixer_source_new (pa_context *context,
- guint index,
- GvcChannelMap *channel_map)
-
-{
- GObject *object;
-
- object = g_object_new (GVC_TYPE_MIXER_SOURCE,
- "pa-context", context,
- "index", index,
- "channel-map", channel_map,
- NULL);
-
- return GVC_MIXER_STREAM (object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source.h b/plugins/media-keys/cut-n-paste/gvc-mixer-source.h
deleted file mode 100644
index acb61ab..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-source.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_SOURCE_H
-#define __GVC_MIXER_SOURCE_H
-
-#include <glib-object.h>
-#include "gvc-mixer-stream.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_SOURCE (gvc_mixer_source_get_type ())
-#define GVC_MIXER_SOURCE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSource))
-#define GVC_MIXER_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SOURCE, GvcMixerSourceClass))
-#define GVC_IS_MIXER_SOURCE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SOURCE))
-#define GVC_IS_MIXER_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SOURCE))
-#define GVC_MIXER_SOURCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSourceClass))
-
-typedef struct GvcMixerSourcePrivate GvcMixerSourcePrivate;
-
-typedef struct
-{
- GvcMixerStream parent;
- GvcMixerSourcePrivate *priv;
-} GvcMixerSource;
-
-typedef struct
-{
- GvcMixerStreamClass parent_class;
-} GvcMixerSourceClass;
-
-GType gvc_mixer_source_get_type (void);
-
-GvcMixerStream * gvc_mixer_source_new (pa_context *context,
- guint index,
- GvcChannelMap *map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_SOURCE_H */
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
deleted file mode 100644
index 7b1e0ec..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c
+++ /dev/null
@@ -1,912 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 William Jon McCann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-
-#include <pulse/pulseaudio.h>
-
-#include "gvc-mixer-stream.h"
-
-#define GVC_MIXER_STREAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStreamPrivate))
-
-static guint32 stream_serial = 1;
-
-struct GvcMixerStreamPrivate
-{
- pa_context *pa_context;
- guint id;
- guint index;
- gint card_index;
- GvcChannelMap *channel_map;
- char *name;
- char *description;
- char *application_id;
- char *icon_name;
- gboolean is_muted;
- gboolean can_decibel;
- gboolean is_event_stream;
- gboolean is_virtual;
- pa_volume_t base_volume;
- pa_operation *change_volume_op;
- char *port;
- char *human_port;
- GList *ports;
-};
-
-enum
-{
- PROP_0,
- PROP_ID,
- PROP_PA_CONTEXT,
- PROP_CHANNEL_MAP,
- PROP_INDEX,
- PROP_NAME,
- PROP_DESCRIPTION,
- PROP_APPLICATION_ID,
- PROP_ICON_NAME,
- PROP_VOLUME,
- PROP_DECIBEL,
- PROP_IS_MUTED,
- PROP_CAN_DECIBEL,
- PROP_IS_EVENT_STREAM,
- PROP_IS_VIRTUAL,
- PROP_CARD_INDEX,
- PROP_PORT,
-};
-
-static void gvc_mixer_stream_class_init (GvcMixerStreamClass *klass);
-static void gvc_mixer_stream_init (GvcMixerStream *mixer_stream);
-static void gvc_mixer_stream_finalize (GObject *object);
-
-G_DEFINE_ABSTRACT_TYPE (GvcMixerStream, gvc_mixer_stream, G_TYPE_OBJECT)
-
-static guint32
-get_next_stream_serial (void)
-{
- guint32 serial;
-
- serial = stream_serial++;
-
- if ((gint32)stream_serial < 0) {
- stream_serial = 1;
- }
-
- return serial;
-}
-
-pa_context *
-gvc_mixer_stream_get_pa_context (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
- return stream->priv->pa_context;
-}
-
-guint
-gvc_mixer_stream_get_index (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
- return stream->priv->index;
-}
-
-guint
-gvc_mixer_stream_get_id (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
- return stream->priv->id;
-}
-
-const GvcChannelMap *
-gvc_mixer_stream_get_channel_map (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
- return stream->priv->channel_map;
-}
-
-pa_volume_t
-gvc_mixer_stream_get_volume (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
-
- return (pa_volume_t) gvc_channel_map_get_volume(stream->priv->channel_map)[VOLUME];
-}
-
-gdouble
-gvc_mixer_stream_get_decibel (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
-
- return pa_sw_volume_to_dB(
- (pa_volume_t) gvc_channel_map_get_volume(stream->priv->channel_map)[VOLUME]);
-}
-
-gboolean
-gvc_mixer_stream_set_volume (GvcMixerStream *stream,
- pa_volume_t volume)
-{
- pa_cvolume cv;
-
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- cv = *gvc_channel_map_get_cvolume(stream->priv->channel_map);
- pa_cvolume_scale(&cv, volume);
-
- if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
- gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
- g_object_notify (G_OBJECT (stream), "volume");
- return TRUE;
- }
-
- return FALSE;
-}
-
-gboolean
-gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
- gdouble db)
-{
- pa_cvolume cv;
-
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- cv = *gvc_channel_map_get_cvolume(stream->priv->channel_map);
- pa_cvolume_scale(&cv, pa_sw_volume_from_dB(db));
-
- if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
- gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
- g_object_notify (G_OBJECT (stream), "volume");
- }
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_stream_get_is_muted (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- return stream->priv->is_muted;
-}
-
-gboolean
-gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- return stream->priv->can_decibel;
-}
-
-gboolean
-gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- if (is_muted != stream->priv->is_muted) {
- stream->priv->is_muted = is_muted;
- g_object_notify (G_OBJECT (stream), "is-muted");
- }
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
- gboolean can_decibel)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- if (can_decibel != stream->priv->can_decibel) {
- stream->priv->can_decibel = can_decibel;
- g_object_notify (G_OBJECT (stream), "can-decibel");
- }
-
- return TRUE;
-}
-
-const char *
-gvc_mixer_stream_get_name (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
- return stream->priv->name;
-}
-
-const char *
-gvc_mixer_stream_get_description (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
- return stream->priv->description;
-}
-
-gboolean
-gvc_mixer_stream_set_name (GvcMixerStream *stream,
- const char *name)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- g_free (stream->priv->name);
- stream->priv->name = g_strdup (name);
- g_object_notify (G_OBJECT (stream), "name");
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_stream_set_description (GvcMixerStream *stream,
- const char *description)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- g_free (stream->priv->description);
- stream->priv->description = g_strdup (description);
- g_object_notify (G_OBJECT (stream), "description");
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_stream_is_event_stream (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- return stream->priv->is_event_stream;
-}
-
-gboolean
-gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
- gboolean is_event_stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- stream->priv->is_event_stream = is_event_stream;
- g_object_notify (G_OBJECT (stream), "is-event-stream");
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_stream_is_virtual (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- return stream->priv->is_virtual;
-}
-
-gboolean
-gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
- gboolean is_virtual)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- stream->priv->is_virtual = is_virtual;
- g_object_notify (G_OBJECT (stream), "is-virtual");
-
- return TRUE;
-}
-
-const char *
-gvc_mixer_stream_get_application_id (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
- return stream->priv->application_id;
-}
-
-gboolean
-gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
- const char *application_id)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- g_free (stream->priv->application_id);
- stream->priv->application_id = g_strdup (application_id);
- g_object_notify (G_OBJECT (stream), "application-id");
-
- return TRUE;
-}
-
-static void
-on_channel_map_volume_changed (GvcChannelMap *channel_map,
- gboolean set,
- GvcMixerStream *stream)
-{
- if (set == TRUE)
- gvc_mixer_stream_push_volume (stream);
-
- g_object_notify (G_OBJECT (stream), "volume");
-}
-
-static gboolean
-gvc_mixer_stream_set_channel_map (GvcMixerStream *stream,
- GvcChannelMap *channel_map)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- if (channel_map != NULL) {
- g_object_ref (channel_map);
- }
-
- if (stream->priv->channel_map != NULL) {
- g_signal_handlers_disconnect_by_func (stream->priv->channel_map,
- on_channel_map_volume_changed,
- stream);
- g_object_unref (stream->priv->channel_map);
- }
-
- stream->priv->channel_map = channel_map;
-
- if (stream->priv->channel_map != NULL) {
- g_signal_connect (stream->priv->channel_map,
- "volume-changed",
- G_CALLBACK (on_channel_map_volume_changed),
- stream);
-
- g_object_notify (G_OBJECT (stream), "channel-map");
- }
-
- return TRUE;
-}
-
-const char *
-gvc_mixer_stream_get_icon_name (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
- return stream->priv->icon_name;
-}
-
-gboolean
-gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
- const char *icon_name)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- g_free (stream->priv->icon_name);
- stream->priv->icon_name = g_strdup (icon_name);
- g_object_notify (G_OBJECT (stream), "icon-name");
-
- return TRUE;
-}
-
-pa_volume_t
-gvc_mixer_stream_get_base_volume (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
-
- return stream->priv->base_volume;
-}
-
-gboolean
-gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
- pa_volume_t base_volume)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- stream->priv->base_volume = base_volume;
-
- return TRUE;
-}
-
-const GvcMixerStreamPort *
-gvc_mixer_stream_get_port (GvcMixerStream *stream)
-{
- GList *l;
-
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
- g_return_val_if_fail (stream->priv->ports != NULL, NULL);
-
- for (l = stream->priv->ports; l != NULL; l = l->next) {
- GvcMixerStreamPort *p = l->data;
- if (g_strcmp0 (stream->priv->port, p->port) == 0) {
- return p;
- }
- }
-
- g_assert_not_reached ();
-
- return NULL;
-}
-
-gboolean
-gvc_mixer_stream_set_port (GvcMixerStream *stream,
- const char *port)
-{
- GList *l;
-
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- g_return_val_if_fail (stream->priv->ports != NULL, FALSE);
-
- g_free (stream->priv->port);
- stream->priv->port = g_strdup (port);
-
- g_free (stream->priv->human_port);
- stream->priv->human_port = NULL;
-
- for (l = stream->priv->ports; l != NULL; l = l->next) {
- GvcMixerStreamPort *p = l->data;
- if (g_str_equal (stream->priv->port, p->port)) {
- stream->priv->human_port = g_strdup (p->human_port);
- break;
- }
- }
-
- g_object_notify (G_OBJECT (stream), "port");
-
- return TRUE;
-}
-
-gboolean
-gvc_mixer_stream_change_port (GvcMixerStream *stream,
- const char *port)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- return GVC_MIXER_STREAM_GET_CLASS (stream)->change_port (stream, port);
-}
-
-const GList *
-gvc_mixer_stream_get_ports (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- return stream->priv->ports;
-}
-
-static int
-sort_ports (GvcMixerStreamPort *a,
- GvcMixerStreamPort *b)
-{
- if (a->priority == b->priority)
- return 0;
- if (a->priority > b->priority)
- return 1;
- return -1;
-}
-
-gboolean
-gvc_mixer_stream_set_ports (GvcMixerStream *stream,
- GList *ports)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- g_return_val_if_fail (stream->priv->ports == NULL, FALSE);
-
- stream->priv->ports = g_list_sort (ports, (GCompareFunc) sort_ports);
-
- return TRUE;
-}
-
-gint
-gvc_mixer_stream_get_card_index (GvcMixerStream *stream)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), PA_INVALID_INDEX);
- return stream->priv->card_index;
-}
-
-gboolean
-gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
- gint card_index)
-{
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- stream->priv->card_index = card_index;
- g_object_notify (G_OBJECT (stream), "card-index");
-
- return TRUE;
-}
-
-static void
-gvc_mixer_stream_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerStream *self = GVC_MIXER_STREAM (object);
-
- switch (prop_id) {
- case PROP_PA_CONTEXT:
- self->priv->pa_context = g_value_get_pointer (value);
- break;
- case PROP_INDEX:
- self->priv->index = g_value_get_ulong (value);
- break;
- case PROP_ID:
- self->priv->id = g_value_get_ulong (value);
- break;
- case PROP_CHANNEL_MAP:
- gvc_mixer_stream_set_channel_map (self, g_value_get_object (value));
- break;
- case PROP_NAME:
- gvc_mixer_stream_set_name (self, g_value_get_string (value));
- break;
- case PROP_DESCRIPTION:
- gvc_mixer_stream_set_description (self, g_value_get_string (value));
- break;
- case PROP_APPLICATION_ID:
- gvc_mixer_stream_set_application_id (self, g_value_get_string (value));
- break;
- case PROP_ICON_NAME:
- gvc_mixer_stream_set_icon_name (self, g_value_get_string (value));
- break;
- case PROP_VOLUME:
- gvc_mixer_stream_set_volume (self, g_value_get_ulong (value));
- break;
- case PROP_DECIBEL:
- gvc_mixer_stream_set_decibel (self, g_value_get_double (value));
- break;
- case PROP_IS_MUTED:
- gvc_mixer_stream_set_is_muted (self, g_value_get_boolean (value));
- break;
- case PROP_IS_EVENT_STREAM:
- gvc_mixer_stream_set_is_event_stream (self, g_value_get_boolean (value));
- break;
- case PROP_IS_VIRTUAL:
- gvc_mixer_stream_set_is_virtual (self, g_value_get_boolean (value));
- break;
- case PROP_CAN_DECIBEL:
- gvc_mixer_stream_set_can_decibel (self, g_value_get_boolean (value));
- break;
- case PROP_PORT:
- gvc_mixer_stream_set_port (self, g_value_get_string (value));
- break;
- case PROP_CARD_INDEX:
- self->priv->card_index = g_value_get_long (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gvc_mixer_stream_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GvcMixerStream *self = GVC_MIXER_STREAM (object);
-
- switch (prop_id) {
- case PROP_PA_CONTEXT:
- g_value_set_pointer (value, self->priv->pa_context);
- break;
- case PROP_INDEX:
- g_value_set_ulong (value, self->priv->index);
- break;
- case PROP_ID:
- g_value_set_ulong (value, self->priv->id);
- break;
- case PROP_CHANNEL_MAP:
- g_value_set_object (value, self->priv->channel_map);
- break;
- case PROP_NAME:
- g_value_set_string (value, self->priv->name);
- break;
- case PROP_DESCRIPTION:
- g_value_set_string (value, self->priv->description);
- break;
- case PROP_APPLICATION_ID:
- g_value_set_string (value, self->priv->application_id);
- break;
- case PROP_ICON_NAME:
- g_value_set_string (value, self->priv->icon_name);
- break;
- case PROP_VOLUME:
- g_value_set_ulong (value,
- pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map)));
- break;
- case PROP_DECIBEL:
- g_value_set_double (value,
- pa_sw_volume_to_dB(pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map))));
- break;
- case PROP_IS_MUTED:
- g_value_set_boolean (value, self->priv->is_muted);
- break;
- case PROP_IS_EVENT_STREAM:
- g_value_set_boolean (value, self->priv->is_event_stream);
- break;
- case PROP_IS_VIRTUAL:
- g_value_set_boolean (value, self->priv->is_virtual);
- break;
- case PROP_CAN_DECIBEL:
- g_value_set_boolean (value, self->priv->can_decibel);
- break;
- case PROP_PORT:
- g_value_set_string (value, self->priv->port);
- break;
- case PROP_CARD_INDEX:
- g_value_set_long (value, self->priv->card_index);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GObject *
-gvc_mixer_stream_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- GObject *object;
- GvcMixerStream *self;
-
- object = G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->constructor (type, n_construct_properties, construct_params);
-
- self = GVC_MIXER_STREAM (object);
-
- self->priv->id = get_next_stream_serial ();
-
- return object;
-}
-
-static gboolean
-gvc_mixer_stream_real_change_port (GvcMixerStream *stream,
- const char *port)
-{
- return FALSE;
-}
-
-static gboolean
-gvc_mixer_stream_real_push_volume (GvcMixerStream *stream, gpointer *op)
-{
- return FALSE;
-}
-
-static gboolean
-gvc_mixer_stream_real_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- return FALSE;
-}
-
-gboolean
-gvc_mixer_stream_push_volume (GvcMixerStream *stream)
-{
- pa_operation *op;
- gboolean ret;
-
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
-
- if (stream->priv->is_event_stream != FALSE)
- return TRUE;
-
- g_debug ("Pushing new volume to stream '%s' (%s)",
- stream->priv->description, stream->priv->name);
-
- ret = GVC_MIXER_STREAM_GET_CLASS (stream)->push_volume (stream, (gpointer *) &op);
- if (ret) {
- if (stream->priv->change_volume_op != NULL)
- pa_operation_unref (stream->priv->change_volume_op);
- stream->priv->change_volume_op = op;
- }
- return ret;
-}
-
-gboolean
-gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted)
-{
- gboolean ret;
- g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
- ret = GVC_MIXER_STREAM_GET_CLASS (stream)->change_is_muted (stream, is_muted);
- return ret;
-}
-
-gboolean
-gvc_mixer_stream_is_running (GvcMixerStream *stream)
-{
- if (stream->priv->change_volume_op == NULL)
- return FALSE;
-
- if ((pa_operation_get_state(stream->priv->change_volume_op) == PA_OPERATION_RUNNING))
- return TRUE;
-
- pa_operation_unref(stream->priv->change_volume_op);
- stream->priv->change_volume_op = NULL;
-
- return FALSE;
-}
-
-static void
-gvc_mixer_stream_class_init (GvcMixerStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->constructor = gvc_mixer_stream_constructor;
- gobject_class->finalize = gvc_mixer_stream_finalize;
- gobject_class->set_property = gvc_mixer_stream_set_property;
- gobject_class->get_property = gvc_mixer_stream_get_property;
-
- klass->push_volume = gvc_mixer_stream_real_push_volume;
- klass->change_port = gvc_mixer_stream_real_change_port;
- klass->change_is_muted = gvc_mixer_stream_real_change_is_muted;
-
- g_object_class_install_property (gobject_class,
- PROP_INDEX,
- g_param_spec_ulong ("index",
- "Index",
- "The index for this stream",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_ID,
- g_param_spec_ulong ("id",
- "id",
- "The id for this stream",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_CHANNEL_MAP,
- g_param_spec_object ("channel-map",
- "channel map",
- "The channel map for this stream",
- GVC_TYPE_CHANNEL_MAP,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_PA_CONTEXT,
- g_param_spec_pointer ("pa-context",
- "PulseAudio context",
- "The PulseAudio context for this stream",
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_VOLUME,
- g_param_spec_ulong ("volume",
- "Volume",
- "The volume for this stream",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_DECIBEL,
- g_param_spec_double ("decibel",
- "Decibel",
- "The decibel level for this stream",
- -G_MAXDOUBLE, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
-
- g_object_class_install_property (gobject_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name to display for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_DESCRIPTION,
- g_param_spec_string ("description",
- "Description",
- "Description to display for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_APPLICATION_ID,
- g_param_spec_string ("application-id",
- "Application identifier",
- "Application identifier for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_ICON_NAME,
- g_param_spec_string ("icon-name",
- "Icon Name",
- "Name of icon to display for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_IS_MUTED,
- g_param_spec_boolean ("is-muted",
- "is muted",
- "Whether stream is muted",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_CAN_DECIBEL,
- g_param_spec_boolean ("can-decibel",
- "can decibel",
- "Whether stream volume can be converted to decibel units",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_IS_EVENT_STREAM,
- g_param_spec_boolean ("is-event-stream",
- "is event stream",
- "Whether stream's role is to play an event",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_IS_VIRTUAL,
- g_param_spec_boolean ("is-virtual",
- "is virtual stream",
- "Whether the stream is virtual",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_PORT,
- g_param_spec_string ("port",
- "Port",
- "The name of the current port for this stream",
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_CARD_INDEX,
- g_param_spec_long ("card-index",
- "Card index",
- "The index of the card for this stream",
- PA_INVALID_INDEX, G_MAXLONG, PA_INVALID_INDEX,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_type_class_add_private (klass, sizeof (GvcMixerStreamPrivate));
-}
-
-static void
-gvc_mixer_stream_init (GvcMixerStream *stream)
-{
- stream->priv = GVC_MIXER_STREAM_GET_PRIVATE (stream);
-}
-
-static void
-free_port (GvcMixerStreamPort *p)
-{
- g_free (p->port);
- g_free (p->human_port);
- g_free (p);
-}
-
-static void
-gvc_mixer_stream_finalize (GObject *object)
-{
- GvcMixerStream *mixer_stream;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GVC_IS_MIXER_STREAM (object));
-
- mixer_stream = GVC_MIXER_STREAM (object);
-
- g_return_if_fail (mixer_stream->priv != NULL);
-
- g_object_unref (mixer_stream->priv->channel_map);
- mixer_stream->priv->channel_map = NULL;
-
- g_free (mixer_stream->priv->name);
- mixer_stream->priv->name = NULL;
-
- g_free (mixer_stream->priv->description);
- mixer_stream->priv->description = NULL;
-
- g_free (mixer_stream->priv->application_id);
- mixer_stream->priv->application_id = NULL;
-
- g_free (mixer_stream->priv->icon_name);
- mixer_stream->priv->icon_name = NULL;
-
- g_free (mixer_stream->priv->port);
- mixer_stream->priv->port = NULL;
-
- g_free (mixer_stream->priv->human_port);
- mixer_stream->priv->human_port = NULL;
-
- g_list_foreach (mixer_stream->priv->ports, (GFunc) free_port, NULL);
- g_list_free (mixer_stream->priv->ports);
- mixer_stream->priv->ports = NULL;
-
- if (mixer_stream->priv->change_volume_op) {
- pa_operation_unref(mixer_stream->priv->change_volume_op);
- mixer_stream->priv->change_volume_op = NULL;
- }
-
- G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->finalize (object);
-}
diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h
deleted file mode 100644
index e818505..0000000
--- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GVC_MIXER_STREAM_H
-#define __GVC_MIXER_STREAM_H
-
-#include <glib-object.h>
-#include <pulse/pulseaudio.h>
-
-#include "gvc-channel-map.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define GVC_TYPE_MIXER_STREAM (gvc_mixer_stream_get_type ())
-#define GVC_MIXER_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStream))
-#define GVC_MIXER_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_STREAM, GvcMixerStreamClass))
-#define GVC_IS_MIXER_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_STREAM))
-#define GVC_IS_MIXER_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_STREAM))
-#define GVC_MIXER_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStreamClass))
-
-typedef struct GvcMixerStreamPrivate GvcMixerStreamPrivate;
-
-typedef struct
-{
- GObject parent;
- GvcMixerStreamPrivate *priv;
-} GvcMixerStream;
-
-typedef struct
-{
- GObjectClass parent_class;
-
- /* vtable */
- gboolean (*push_volume) (GvcMixerStream *stream,
- gpointer *operation);
- gboolean (*change_is_muted) (GvcMixerStream *stream,
- gboolean is_muted);
- gboolean (*change_port) (GvcMixerStream *stream,
- const char *port);
-} GvcMixerStreamClass;
-
-typedef struct
-{
- char *port;
- char *human_port;
- guint priority;
-} GvcMixerStreamPort;
-
-GType gvc_mixer_stream_get_type (void);
-
-pa_context * gvc_mixer_stream_get_pa_context (GvcMixerStream *stream);
-guint gvc_mixer_stream_get_index (GvcMixerStream *stream);
-guint gvc_mixer_stream_get_id (GvcMixerStream *stream);
-const GvcChannelMap *gvc_mixer_stream_get_channel_map(GvcMixerStream *stream);
-const GvcMixerStreamPort *gvc_mixer_stream_get_port (GvcMixerStream *stream);
-const GList * gvc_mixer_stream_get_ports (GvcMixerStream *stream);
-gboolean gvc_mixer_stream_change_port (GvcMixerStream *stream,
- const char *port);
-
-pa_volume_t gvc_mixer_stream_get_volume (GvcMixerStream *stream);
-gdouble gvc_mixer_stream_get_decibel (GvcMixerStream *stream);
-gboolean gvc_mixer_stream_push_volume (GvcMixerStream *stream);
-pa_volume_t gvc_mixer_stream_get_base_volume (GvcMixerStream *stream);
-
-gboolean gvc_mixer_stream_get_is_muted (GvcMixerStream *stream);
-gboolean gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream);
-gboolean gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
- gboolean is_muted);
-gboolean gvc_mixer_stream_is_running (GvcMixerStream *stream);
-const char * gvc_mixer_stream_get_name (GvcMixerStream *stream);
-const char * gvc_mixer_stream_get_icon_name (GvcMixerStream *stream);
-const char * gvc_mixer_stream_get_description (GvcMixerStream *stream);
-const char * gvc_mixer_stream_get_application_id (GvcMixerStream *stream);
-gboolean gvc_mixer_stream_is_event_stream (GvcMixerStream *stream);
-gboolean gvc_mixer_stream_is_virtual (GvcMixerStream *stream);
-gint gvc_mixer_stream_get_card_index (GvcMixerStream *stream);
-
-/* private */
-gboolean gvc_mixer_stream_set_volume (GvcMixerStream *stream,
- pa_volume_t volume);
-gboolean gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
- gdouble db);
-gboolean gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
- gboolean is_muted);
-gboolean gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
- gboolean can_decibel);
-gboolean gvc_mixer_stream_set_name (GvcMixerStream *stream,
- const char *name);
-gboolean gvc_mixer_stream_set_description (GvcMixerStream *stream,
- const char *description);
-gboolean gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
- const char *name);
-gboolean gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
- gboolean is_event_stream);
-gboolean gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
- gboolean is_event_stream);
-gboolean gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
- const char *application_id);
-gboolean gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
- pa_volume_t base_volume);
-gboolean gvc_mixer_stream_set_port (GvcMixerStream *stream,
- const char *port);
-gboolean gvc_mixer_stream_set_ports (GvcMixerStream *stream,
- GList *ports);
-gboolean gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
- gint card_index);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GVC_MIXER_STREAM_H */