diff options
author | Conor Curran <conor.curran@canonical.com> | 2011-02-03 17:00:30 +0000 |
---|---|---|
committer | Conor Curran <conor.curran@canonical.com> | 2011-02-03 17:00:30 +0000 |
commit | 7070e44eced4d173c0e175948b3da4ca9f9497b9 (patch) | |
tree | 28f75e49603533ecb3175ecec290bb6c1627cb6d | |
parent | 513679bbf8169e69a6d78aa924c4f5b034c818b2 (diff) | |
download | ayatana-indicator-sound-7070e44eced4d173c0e175948b3da4ca9f9497b9.tar.gz ayatana-indicator-sound-7070e44eced4d173c0e175948b3da4ca9f9497b9.tar.bz2 ayatana-indicator-sound-7070e44eced4d173c0e175948b3da4ca9f9497b9.zip |
starting to make sense
-rw-r--r-- | src/active-sink.c | 67 | ||||
-rw-r--r-- | src/active-sink.h | 13 | ||||
-rw-r--r-- | src/pulseaudio-mgr.c | 63 | ||||
-rw-r--r-- | src/pulseaudio-mgr.h | 6 |
4 files changed, 146 insertions, 3 deletions
diff --git a/src/active-sink.c b/src/active-sink.c index e69de29..ee211ef 100644 --- a/src/active-sink.c +++ b/src/active-sink.c @@ -0,0 +1,67 @@ +/* +Copyright 2011 Canonical Ltd. + +Authors: + Conor Curran <conor.curran@canonical.com> + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, 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, see <http://www.gnu.org/licenses/>. +*/ + +#include <pulse/error.h> +#include <pulse/gccmacro.h> +#include "active-sink.h" + +typedef struct _ActiveSinkPrivate ActiveSinkPrivate; + +struct _ActiveSinkPrivate +{ +}; + +#define ACTIVE_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ACTIVE_SINK_TYPE, ActiveSinkPrivate)) + +/* Prototypes */ +static void active_sink_class_init (ActiveSinkClass *klass); +static void active_sink_init (ActiveSink *self); +static void active_sink_dispose (GObject *object); +static void active_sink_finalize (GObject *object); + +G_DEFINE_TYPE (ActiveSink, active_sink, G_TYPE_OBJECT); + +static void +active_sink_class_init (ActiveSinkClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + g_type_class_add_private (klass, sizeof (ActiveSinkPrivate)); + + gobject_class->dispose = active_sink_dispose; + gobject_class->finalize = active_sink_finalize; +} + +static void +active_sink_init(ActiveSink *self) +{ +} + +static void +active_sink_dispose (GObject *object) +{ + G_OBJECT_CLASS (active_sink_parent_class)->dispose (object); +} + +static void +active_sink_finalize (GObject *object) +{ + G_OBJECT_CLASS (active_sink_parent_class)->finalize (object); +} diff --git a/src/active-sink.h b/src/active-sink.h index 240f43e..12083b8 100644 --- a/src/active-sink.h +++ b/src/active-sink.h @@ -24,7 +24,7 @@ #include <glib-object.h> #include <libdbusmenu-glib/menuitem.h> #include "common-defs.h" - +#include <pulse/pulseaudio.h> G_BEGIN_DECLS @@ -38,7 +38,6 @@ G_BEGIN_DECLS typedef struct _ActiveSink ActiveSink; typedef struct _ActiveSinkClass ActiveSinkClass; - struct _ActiveSink { GObject parent; }; @@ -47,6 +46,16 @@ struct _ActiveSinkClass { GObjectClass parent_class; }; +typedef struct { + gchar* name; + gint index; + pa_cvolume volume; + pa_channel_map channel_map; + gboolean mute; + pa_volume_t base_volume; +} sink_details; + + GType active_sink_get_type (void) G_GNUC_CONST; G_END_DECLS diff --git a/src/pulseaudio-mgr.c b/src/pulseaudio-mgr.c index 7b8c06a..216c025 100644 --- a/src/pulseaudio-mgr.c +++ b/src/pulseaudio-mgr.c @@ -97,6 +97,17 @@ reconnect_to_pulse (gpointer user_data) } static void +populate_active_sink (const pa_sink_info *info, ActiveSink* sink) +{ + +} + +/**********************************************************************************************************************/ +// Pulse-Audio asychronous call-backs +/**********************************************************************************************************************/ + + +static void pm_subscribed_events_callback (pa_context *c, enum pa_subscription_event_type t, uint32_t index, @@ -192,7 +203,7 @@ pm_server_info_callback (pa_context *c, { pa_operation *operation; if (info == NULL) { - g_warning("No server - get the hell out of here"); + g_warning("No PA server - get the hell out of here"); //TODO update active sink with state info return; } @@ -214,3 +225,53 @@ pm_server_info_callback (pa_context *c, pa_operation_unref(operation); } +static void +pm_sink_info_callback (pa_context *c, + const pa_sink_info *sink, + int eol, + void *userdata) +{ + if (eol > 0) { + return; + } + else { + /* g_debug("About to add an item to our hash");*/ + sink_info *value; + value = g_new0(sink_info, 1); + value->index = sink->index; + value->name = g_strdup(sink->name); + value->mute = !!sink->mute; + value->volume = construct_mono_volume(&sink->volume); + value->base_volume = sink->base_volume; + value->channel_map = sink->channel_map; + g_hash_table_insert(sink_hash, GINT_TO_POINTER(sink->index), value); + /* g_debug("After adding an item to our hash");*/ + } +} + +static void +pm_default_sink_info_callback (pa_context *c, + const pa_sink_info *info, + int eol, + void *userdata) +{ + if (eol > 0) { + return; + } else { + DEFAULT_SINK_INDEX = info->index; + /* g_debug("Just set the default sink index to %i", DEFAULT_SINK_INDEX); */ + GList *keys = g_hash_table_get_keys(sink_hash); + gint position = g_list_index(keys, GINT_TO_POINTER(info->index)); + // Only update sink-list if the index is not in our already fetched list. + if (position < 0) { + pa_operation_unref(pa_context_get_sink_info_list(c, pulse_sink_info_callback, NULL)); + } else { + sound_service_dbus_update_pa_state(dbus_service, + determine_sink_availability(), + default_sink_is_muted(), + get_default_sink_volume()); + } + } +} + + diff --git a/src/pulseaudio-mgr.h b/src/pulseaudio-mgr.h index e69de29..6fb66a5 100644 --- a/src/pulseaudio-mgr.h +++ b/src/pulseaudio-mgr.h @@ -0,0 +1,6 @@ + + + + + + |