aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2011-02-03 17:00:30 +0000
committerConor Curran <conor.curran@canonical.com>2011-02-03 17:00:30 +0000
commit7070e44eced4d173c0e175948b3da4ca9f9497b9 (patch)
tree28f75e49603533ecb3175ecec290bb6c1627cb6d
parent513679bbf8169e69a6d78aa924c4f5b034c818b2 (diff)
downloadayatana-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.c67
-rw-r--r--src/active-sink.h13
-rw-r--r--src/pulseaudio-mgr.c63
-rw-r--r--src/pulseaudio-mgr.h6
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 @@
+
+
+
+
+
+