From 6db28ce9134db40a0808a3c67df5f9dd223303b5 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 12 Jan 2011 17:55:05 -0600 Subject: stage one of the refactor on the server side complete --- src/dbus-menu-manager.c | 204 ++++++++++++++++-------------------------------- 1 file changed, 66 insertions(+), 138 deletions(-) (limited to 'src/dbus-menu-manager.c') diff --git a/src/dbus-menu-manager.c b/src/dbus-menu-manager.c index 8c255e3..7de5844 100644 --- a/src/dbus-menu-manager.c +++ b/src/dbus-menu-manager.c @@ -22,6 +22,7 @@ with this program. If not, see . * Makes this a proper GObject **/ + #include #include @@ -44,24 +45,15 @@ static SliderMenuItem *volume_slider_menuitem = NULL; static MuteMenuItem *mute_menuitem = NULL; static SoundServiceDbus *dbus_interface = NULL; -// PULSEAUDIO -static gboolean b_sink_available = 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, +static void build_sound_menu(DbusmenuMenuitem *root, gboolean mute_update, gboolean availability, gdouble volume); -static void refresh_menu(); - - -/*-------------------------------------------------------------------------*/ -// Public Methods -/*-------------------------------------------------------------------------*/ +static void show_sound_settings_dialog (DbusmenuMenuitem *mi, + gpointer user_data); /** setup: @@ -81,104 +73,96 @@ DbusmenuMenuitem* dbus_menu_manager_setup() return root_menuitem; } -void dbus_menu_manager_update_volume(gdouble volume) +/** +build_sound_menu's default items (without the any player items): +**/ +static void build_sound_menu (DbusmenuMenuitem *root, + gboolean mute_update, + gboolean availability, + gdouble volume) { - GVariant* new_volume = g_variant_new_double(volume); - dbusmenu_menuitem_property_set_variant(DBUSMENU_MENUITEM(volume_slider_menuitem), - DBUSMENU_VOLUME_MENUITEM_LEVEL, - new_volume); + // Mute button + mute_menuitem = mute_menu_item_new ( mute_update, availability); + dbusmenu_menuitem_child_append (root, DBUSMENU_MENUITEM(mute_menuitem)); + + // Slider + volume_slider_menuitem = slider_menu_item_new ( availability, volume ); + dbusmenu_menuitem_child_append (root, DBUSMENU_MENUITEM ( volume_slider_menuitem )); + + // 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...")); + + //_("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_pa_state: **/ void dbus_menu_manager_update_pa_state (gboolean pa_state, - gboolean sink_available, + gboolean pulse_available, gboolean sink_muted, gdouble percent) { - b_sink_available = sink_available; - 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... + g_debug("update pa state with state %i, availability of %i, mute value of %i and a volume percent is %f", pa_state, pulse_available, sink_muted, percent); + if (b_startup == TRUE) { - rebuild_sound_menu(root_menuitem, dbus_interface); + build_sound_menu(root_menuitem, sink_muted, pulse_available, percent); b_startup = FALSE; - } else { - refresh_menu(); + return; } + + mute_menu_item_update ( mute_menuitem, + sink_muted ); + slider_menu_item_update ( volume_slider_menuitem, + percent ); + + mute_menu_item_enable ( mute_menuitem, pulse_available); + slider_menu_item_enable ( volume_slider_menuitem, + pulse_available ); + // Emit the signals after the menus are setup/torn down // preserve ordering ! - sound_service_dbus_update_sink_availability(dbus_interface, sink_available); + /*sound_service_dbus_update_sink_availability(dbus_interface, sink_available); dbus_menu_manager_update_volume(percent); sound_service_dbus_update_sink_mute(dbus_interface, sink_muted); - dbus_menu_manager_update_mute_ui(b_all_muted); + dbus_menu_manager_update_mute_ui(b_all_muted);*/ } /** update_mute_ui: 'public' method allowing the pa manager to update the mute menu item. + These are wrappers until we figure out this refactor **/ -void dbus_menu_manager_update_mute_ui(gboolean incoming_mute_value) -{ - - dbusmenu_menuitem_property_set(DBUSMENUITEM(mute_all_menuitem), - DBUSMENU_MENUITEM_PROP_LABEL, - b_all_muted == FALSE ? _("Mute") : _("Unmute")); +void dbus_menu_manager_update_mute(gboolean incoming_mute_value) +{ + mute_menu_item_update (mute_menuitem, incoming_mute_value); } - -/*-------------------------------------------------------------------------*/ -// Private Methods -/*-------------------------------------------------------------------------*/ -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); - } -} - - -/** -idle_routine: -Something for glip mainloop to do when idle -**/ -static gboolean idle_routine (gpointer data) +void dbus_menu_manager_update_volume(gdouble volume) { - return FALSE; + slider_menu_item_update (volume_slider_menuitem, volume); } - /** show_sound_settings_dialog: Bring up the gnome volume preferences dialog **/ -static void show_sound_settings_dialog (DbusmenuMenuitem *mi, gpointer user_data) +static void show_sound_settings_dialog (DbusmenuMenuitem *mi, + gpointer user_data) { GError * error = NULL; if (!g_spawn_command_line_async("gnome-volume-control --page=applications", &error) && @@ -190,68 +174,12 @@ static void show_sound_settings_dialog (DbusmenuMenuitem *mi, gpointer user_data } /** -build_sound_menu's default items (without the any player items): -**/ -static void build_sound_menu (DbusmenuMenuitem *root, - gboolean mute_update, - gboolean availability, - gdouble volume); - -{ - // Mute button - mute_all_menuitem = mute_menu_item_new ( mute_update, availability); - dbusmenu_menuitem_child_append(root, mute_all_menuitem); - - // Slider - volume_slider_menuitem = slider_menu_item_new(available, volume); - 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 && !b_all_muted); - 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...")); - - //_("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); -} - -/** -set_global_mute_from_ui: -Callback for the dbusmenuitem button +TODO: what are you doing with this +idle_routine: +Something for glip mainloop to do when idle **/ -static void set_global_mute_from_ui() -{ - b_all_muted = !b_all_muted; - toggle_global_mute(b_all_muted); - dbusmenu_menuitem_property_set((DBUSMENU_MENUITEM)mute_all_menuitem, - DBUSMENU_MENUITEM_PROP_LABEL, - b_all_muted == FALSE ? _("Mute") : _("Unmute")); -} - - -/* - TODO: use these temporary wrappers around pulsemanager for the short term - Until I get to the point where I can refactor it entirely. -*/ - -void dbmm_pa_wrapper_toggle_mute(gboolean update) +static gboolean idle_routine (gpointer data) { - toggle_global_mute (update); + return FALSE; } - -- cgit v1.2.3