aboutsummaryrefslogtreecommitdiff
path: root/src/sound-service.c
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2010-03-04 15:52:59 +0000
committerConor Curran <conor.curran@canonical.com>2010-03-04 15:52:59 +0000
commit17dd0fee623ff8552b5635fdc570e0aee8635fd6 (patch)
tree30f7be78f9b82383383aa8f54e84ab3a5c29b8d3 /src/sound-service.c
parentcb864e17102163154fa313d5f9344e9c6c2cbe16 (diff)
parente2a152628f20271f5373702ad88fda483e0403ca (diff)
downloadayatana-indicator-sound-17dd0fee623ff8552b5635fdc570e0aee8635fd6.tar.gz
ayatana-indicator-sound-17dd0fee623ff8552b5635fdc570e0aee8635fd6.tar.bz2
ayatana-indicator-sound-17dd0fee623ff8552b5635fdc570e0aee8635fd6.zip
merge with the test branch - service side refactored and tests introduced
Diffstat (limited to 'src/sound-service.c')
-rw-r--r--src/sound-service.c175
1 files changed, 11 insertions, 164 deletions
diff --git a/src/sound-service.c b/src/sound-service.c
index 91b5af3..403b2b0 100644
--- a/src/sound-service.c
+++ b/src/sound-service.c
@@ -19,117 +19,24 @@ 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 "sound-service.h"
-#include "sound-service-dbus.h"
+#include "dbus-menu-manager.h"
#include "pulse-manager.h"
-#include "slider-menu-item.h"
-#include "common-defs.h"
-
-// GTK + DBUS
static GMainLoop *mainloop = NULL;
-static DbusmenuMenuitem *root_menuitem = NULL;
-static DbusmenuMenuitem *mute_all_menuitem = NULL;
-static SliderMenuItem *volume_slider_menuitem = NULL;
-static SoundServiceDbus *dbus_interface = NULL;
-
-// PULSEAUDIO
-static gboolean b_sink_available = FALSE;
-static gboolean b_all_muted = FALSE;
-static gboolean b_pulse_ready = FALSE;
-static gboolean b_startup = TRUE;
-static gdouble volume_percent = 0.0;
-
-static void set_global_mute_from_ui();
-static gboolean idle_routine (gpointer data);
-static void rebuild_sound_menu(DbusmenuMenuitem *root, SoundServiceDbus *service);
-static void refresh_menu();
+
/**********************************************************************************************************************/
-// Init functions (GTK and DBUS)
+// Init and exit functions
/**********************************************************************************************************************/
-/**
-Pass to the g_idle_add method - returning False will ensure that this method is never called again as it is removed as an event source.
-**/
-static gboolean idle_routine (gpointer data)
-{
- return FALSE;
-}
-
-static void show_sound_settings_dialog (DbusmenuMenuitem *mi, gpointer user_data)
-{
- GError * error = NULL;
- if (!g_spawn_command_line_async("gnome-volume-control", &error))
- {
- g_warning("Unable to show dialog: %s", error->message);
- g_error_free(error);
- }
-}
/**
-rebuild_sound_menu:
-Build the DBus menu items, mute/unmute, slider, separator and sound preferences 'link'
+service_shutdown:
+When the service interface starts to shutdown, we
+should follow it.
**/
-static void rebuild_sound_menu(DbusmenuMenuitem *root, SoundServiceDbus *service)
-{
- // Mute button
- mute_all_menuitem = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set(mute_all_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, _(b_all_muted == FALSE ? "Mute All" : "Unmute"));
- g_signal_connect(G_OBJECT(mute_all_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(set_global_mute_from_ui), NULL);
- dbusmenu_menuitem_property_set_bool(mute_all_menuitem, DBUSMENU_MENUITEM_PROP_ENABLED, b_sink_available);
-
- // Slider
- volume_slider_menuitem = slider_menu_item_new(b_sink_available, volume_percent);
- dbusmenu_menuitem_child_append(root, mute_all_menuitem);
- dbusmenu_menuitem_child_append(root, DBUSMENU_MENUITEM(volume_slider_menuitem));
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(volume_slider_menuitem),
- DBUSMENU_MENUITEM_PROP_ENABLED,
- b_sink_available);
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(volume_slider_menuitem),
- DBUSMENU_MENUITEM_PROP_VISIBLE,
- b_sink_available);
- // Separator
- DbusmenuMenuitem *separator = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR);
- dbusmenu_menuitem_child_append(root, separator);
-
- // Sound preferences dialog
- DbusmenuMenuitem *settings_mi = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set(settings_mi, DBUSMENU_MENUITEM_PROP_LABEL,
- _("Sound Preferences..."));
- dbusmenu_menuitem_child_append(root, settings_mi);
- g_signal_connect(G_OBJECT(settings_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
- G_CALLBACK(show_sound_settings_dialog), NULL);
-}
-/**
-update_mute_ui:
-'public' method allowing the server to update the mute UI
-**/
-void update_mute_ui(gboolean incoming_mute_value)
-{
- b_all_muted = incoming_mute_value;
- dbusmenu_menuitem_property_set(mute_all_menuitem,
- DBUSMENU_MENUITEM_PROP_LABEL,
- _(b_all_muted == FALSE ? "Mute All" : "Unmute"));
-}
-/**
-set_global_mute_from_ui:
-Callback for the dbusmenuitem button
-**/
-static void set_global_mute_from_ui()
-{
- b_all_muted = !b_all_muted;
- toggle_global_mute(b_all_muted);
- dbusmenu_menuitem_property_set(mute_all_menuitem,
- DBUSMENU_MENUITEM_PROP_LABEL,
- _(b_all_muted == FALSE ? "Mute All" : "Unmute"));
-}
-
-
-/* When the service interface starts to shutdown, we
- should follow it. -
-*/
void
service_shutdown (IndicatorService *service, gpointer user_data)
{
@@ -143,61 +50,10 @@ service_shutdown (IndicatorService *service, gpointer user_data)
return;
}
-void update_pa_state(gboolean pa_state, gboolean sink_available, gboolean sink_muted, gdouble percent)
-{
- b_sink_available = sink_available;
- b_all_muted = sink_muted;
- b_pulse_ready = pa_state;
- volume_percent = percent;
- g_debug("update pa state with state %i, availability of %i, mute value of %i and a volume percent is %f", pa_state, sink_available, sink_muted, volume_percent);
- // Only rebuild the menu on start up...
- if(b_startup == TRUE){
- rebuild_sound_menu(root_menuitem, dbus_interface);
- b_startup = FALSE;
- }
- else{
- refresh_menu();
- }
- // Emit the signals after the menus are setup/torn down
- sound_service_dbus_update_sink_volume(dbus_interface, percent);
- sound_service_dbus_update_sink_mute(dbus_interface, sink_muted);
-
-}
-
-static void refresh_menu()
-{
- g_debug("in the refresh menu method");
- if(b_sink_available == FALSE || b_pulse_ready == FALSE)
- {
-
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(volume_slider_menuitem),
- DBUSMENU_MENUITEM_PROP_ENABLED,
- FALSE);
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(volume_slider_menuitem),
- DBUSMENU_MENUITEM_PROP_VISIBLE,
- FALSE);
- dbusmenu_menuitem_property_set_bool(mute_all_menuitem,
- DBUSMENU_MENUITEM_PROP_ENABLED,
- FALSE);
-
- }
- else if(b_sink_available == TRUE && b_pulse_ready == TRUE){
-
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(volume_slider_menuitem),
- DBUSMENU_MENUITEM_PROP_ENABLED,
- TRUE);
- dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(volume_slider_menuitem),
- DBUSMENU_MENUITEM_PROP_VISIBLE,
- TRUE);
- dbusmenu_menuitem_property_set_bool(mute_all_menuitem,
- DBUSMENU_MENUITEM_PROP_ENABLED,
- TRUE);
- }
-}
-
-/* Main, is well, main. It brings everything up and throws
- us into the mainloop of no return. Some refactoring needed.*/
+/**
+main:
+**/
int
main (int argc, char ** argv)
{
@@ -213,16 +69,7 @@ main (int argc, char ** argv)
INDICATOR_SERVICE_SIGNAL_SHUTDOWN,
G_CALLBACK(service_shutdown), NULL);
- root_menuitem = dbusmenu_menuitem_new();
- g_debug("Root ID: %d", dbusmenu_menuitem_get_id(root_menuitem));
-
- g_idle_add(idle_routine, root_menuitem);
-
- dbus_interface = g_object_new(SOUND_SERVICE_DBUS_TYPE, NULL);
-
- DbusmenuServer *server = dbusmenu_server_new(INDICATOR_SOUND_DBUS_OBJECT);
- dbusmenu_server_set_root(server, root_menuitem);
- establish_pulse_activities(dbus_interface);
+ dbus_menu_manager_setup();
// Run the loop
mainloop = g_main_loop_new(NULL, FALSE);