Index: data/apps_gnome_settings_daemon_keybindings.schemas.in =================================================================== --- data/apps_gnome_settings_daemon_keybindings.schemas.in.orig 2010-01-13 02:51:57.000000000 +1100 +++ data/apps_gnome_settings_daemon_keybindings.schemas.in 2010-01-13 16:44:53.000000000 +1100 @@ -14,6 +14,17 @@ + /schemas/apps/gnome_settings_daemon/toggle_mute + /apps/gnome_settings_daemon/toggle_mute + bool + TRUE + + Toggle Mute + Toggle the sound mixer's mute status when then mute button is pressed. + + + + /schemas/apps/gnome_settings_daemon/keybindings/volume_mute /apps/gnome_settings_daemon/keybindings/volume_mute string Index: plugins/media-keys/gsd-media-keys-manager.c =================================================================== --- plugins/media-keys/gsd-media-keys-manager.c.orig 2010-01-13 02:51:57.000000000 +1100 +++ plugins/media-keys/gsd-media-keys-manager.c 2010-01-13 16:44:53.000000000 +1100 @@ -636,8 +636,10 @@ do_sound_action (GsdMediaKeysManager *ma int type) { gboolean muted; + gboolean toggle_mute; guint vol, norm_vol_step; int vol_step; + GError *error; if (manager->priv->stream == NULL) return; @@ -658,7 +660,23 @@ do_sound_action (GsdMediaKeysManager *ma switch (type) { case MUTE_KEY: muted = !muted; - gvc_mixer_stream_change_is_muted (manager->priv->stream, muted); + + error = NULL; + toggle_mute = gconf_client_get_bool (manager->priv->conf_client, + GCONF_MISC_DIR "/toggle_mute", + &error); + + if (error) { + toggle_mute = TRUE; + g_error_free (error); + } + + if (toggle_mute) + gvc_mixer_stream_change_is_muted (manager->priv->stream, + muted); + else + gvc_mixer_stream_change_is_muted (manager->priv->stream, + TRUE); break; case VOLUME_DOWN_KEY: if (!muted && (vol <= norm_vol_step)) {