summaryrefslogtreecommitdiff
path: root/mate-volume-control
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2011-12-11 13:11:15 +0100
committerStefano Karapetsas <[email protected]>2011-12-11 13:11:15 +0100
commit4ee2559eaaf2a94ac26c265517e9604a72729360 (patch)
treef24e3e3294c2b75819755289e592bf2e28e668c4 /mate-volume-control
downloadmate-media-4ee2559eaaf2a94ac26c265517e9604a72729360.tar.bz2
mate-media-4ee2559eaaf2a94ac26c265517e9604a72729360.tar.xz
moved from Mate-Extra
Diffstat (limited to 'mate-volume-control')
-rw-r--r--mate-volume-control/AUTHORS2
-rw-r--r--mate-volume-control/ChangeLog.pre-2-261245
-rw-r--r--mate-volume-control/Makefile.am16
-rw-r--r--mate-volume-control/Makefile.in647
-rw-r--r--mate-volume-control/data/Makefile.am29
-rw-r--r--mate-volume-control/data/Makefile.in731
-rw-r--r--mate-volume-control/data/icons/16x16/Makefile.am4
-rw-r--r--mate-volume-control/data/icons/16x16/Makefile.in633
-rw-r--r--mate-volume-control/data/icons/16x16/status/Makefile.am21
-rw-r--r--mate-volume-control/data/icons/16x16/status/Makefile.in494
-rw-r--r--mate-volume-control/data/icons/16x16/status/audio-input-microphone-high.pngbin0 -> 853 bytes
-rw-r--r--mate-volume-control/data/icons/16x16/status/audio-input-microphone-low.pngbin0 -> 548 bytes
-rw-r--r--mate-volume-control/data/icons/16x16/status/audio-input-microphone-medium.pngbin0 -> 687 bytes
-rw-r--r--mate-volume-control/data/icons/16x16/status/audio-input-microphone-muted.pngbin0 -> 520 bytes
-rw-r--r--mate-volume-control/data/icons/22x22/Makefile.am4
-rw-r--r--mate-volume-control/data/icons/22x22/Makefile.in633
-rw-r--r--mate-volume-control/data/icons/22x22/status/Makefile.am21
-rw-r--r--mate-volume-control/data/icons/22x22/status/Makefile.in494
-rw-r--r--mate-volume-control/data/icons/22x22/status/audio-input-microphone-high.pngbin0 -> 1188 bytes
-rw-r--r--mate-volume-control/data/icons/22x22/status/audio-input-microphone-low.pngbin0 -> 827 bytes
-rw-r--r--mate-volume-control/data/icons/22x22/status/audio-input-microphone-medium.pngbin0 -> 968 bytes
-rw-r--r--mate-volume-control/data/icons/22x22/status/audio-input-microphone-muted.pngbin0 -> 817 bytes
-rw-r--r--mate-volume-control/data/icons/24x24/Makefile.am4
-rw-r--r--mate-volume-control/data/icons/24x24/Makefile.in633
-rw-r--r--mate-volume-control/data/icons/24x24/status/Makefile.am21
-rw-r--r--mate-volume-control/data/icons/24x24/status/Makefile.in494
-rw-r--r--mate-volume-control/data/icons/24x24/status/audio-input-microphone-high.pngbin0 -> 1214 bytes
-rw-r--r--mate-volume-control/data/icons/24x24/status/audio-input-microphone-low.pngbin0 -> 849 bytes
-rw-r--r--mate-volume-control/data/icons/24x24/status/audio-input-microphone-medium.pngbin0 -> 1001 bytes
-rw-r--r--mate-volume-control/data/icons/24x24/status/audio-input-microphone-muted.pngbin0 -> 851 bytes
-rw-r--r--mate-volume-control/data/icons/32x32/Makefile.am4
-rw-r--r--mate-volume-control/data/icons/32x32/Makefile.in633
-rw-r--r--mate-volume-control/data/icons/32x32/status/Makefile.am21
-rw-r--r--mate-volume-control/data/icons/32x32/status/Makefile.in494
-rw-r--r--mate-volume-control/data/icons/32x32/status/audio-input-microphone-high.pngbin0 -> 2182 bytes
-rw-r--r--mate-volume-control/data/icons/32x32/status/audio-input-microphone-low.pngbin0 -> 1818 bytes
-rw-r--r--mate-volume-control/data/icons/32x32/status/audio-input-microphone-medium.pngbin0 -> 1981 bytes
-rw-r--r--mate-volume-control/data/icons/32x32/status/audio-input-microphone-muted.pngbin0 -> 2005 bytes
-rw-r--r--mate-volume-control/data/icons/Makefile.am25
-rw-r--r--mate-volume-control/data/icons/Makefile.in656
-rw-r--r--mate-volume-control/data/icons/scalable/Makefile.am4
-rw-r--r--mate-volume-control/data/icons/scalable/Makefile.in633
-rw-r--r--mate-volume-control/data/icons/scalable/devices/Makefile.am35
-rw-r--r--mate-volume-control/data/icons/scalable/devices/Makefile.in508
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back-testing.svg539
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back.svg506
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-center-testing.svg537
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-center.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back-testing.svg537
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side-testing.svg537
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-left-testing.svg537
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-left.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back-testing.svg537
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side-testing.svg537
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-right-testing.svg913
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-speaker-right.svg504
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-subwoofer-testing.svg240
-rw-r--r--mate-volume-control/data/icons/scalable/devices/audio-subwoofer.svg325
-rw-r--r--mate-volume-control/data/icons/scalable/status/Makefile.am21
-rw-r--r--mate-volume-control/data/icons/scalable/status/Makefile.in494
-rw-r--r--mate-volume-control/data/icons/scalable/status/audio-input-microphone-high.svg1076
-rw-r--r--mate-volume-control/data/icons/scalable/status/audio-input-microphone-low.svg1045
-rw-r--r--mate-volume-control/data/icons/scalable/status/audio-input-microphone-medium.svg1066
-rw-r--r--mate-volume-control/data/icons/scalable/status/audio-input-microphone-muted.svg1040
-rw-r--r--mate-volume-control/data/mate-volume-control-applet.desktop.in16
-rw-r--r--mate-volume-control/data/mate-volume-control.desktop.in.in14
-rw-r--r--mate-volume-control/src/Makefile.am94
-rw-r--r--mate-volume-control/src/Makefile.in757
-rw-r--r--mate-volume-control/src/applet-main.c102
-rw-r--r--mate-volume-control/src/dialog-main.c211
-rw-r--r--mate-volume-control/src/gvc-applet.c310
-rw-r--r--mate-volume-control/src/gvc-applet.h55
-rw-r--r--mate-volume-control/src/gvc-balance-bar.c548
-rw-r--r--mate-volume-control/src/gvc-balance-bar.h69
-rw-r--r--mate-volume-control/src/gvc-channel-bar.c930
-rw-r--r--mate-volume-control/src/gvc-channel-bar.h86
-rw-r--r--mate-volume-control/src/gvc-channel-map.c245
-rw-r--r--mate-volume-control/src/gvc-channel-map.h81
-rw-r--r--mate-volume-control/src/gvc-combo-box.c394
-rw-r--r--mate-volume-control/src/gvc-combo-box.h67
-rw-r--r--mate-volume-control/src/gvc-level-bar.c753
-rw-r--r--mate-volume-control/src/gvc-level-bar.h75
-rw-r--r--mate-volume-control/src/gvc-log.c62
-rw-r--r--mate-volume-control/src/gvc-log.h35
-rw-r--r--mate-volume-control/src/gvc-mixer-card.c498
-rw-r--r--mate-volume-control/src/gvc-mixer-card.h87
-rw-r--r--mate-volume-control/src/gvc-mixer-control.c2150
-rw-r--r--mate-volume-control/src/gvc-mixer-control.h98
-rw-r--r--mate-volume-control/src/gvc-mixer-dialog.c2134
-rw-r--r--mate-volume-control/src/gvc-mixer-dialog.h56
-rw-r--r--mate-volume-control/src/gvc-mixer-event-role.c239
-rw-r--r--mate-volume-control/src/gvc-mixer-event-role.h57
-rw-r--r--mate-volume-control/src/gvc-mixer-sink-input.c188
-rw-r--r--mate-volume-control/src/gvc-mixer-sink-input.h57
-rw-r--r--mate-volume-control/src/gvc-mixer-sink.c220
-rw-r--r--mate-volume-control/src/gvc-mixer-sink.h57
-rw-r--r--mate-volume-control/src/gvc-mixer-source-output.c128
-rw-r--r--mate-volume-control/src/gvc-mixer-source-output.h57
-rw-r--r--mate-volume-control/src/gvc-mixer-source.c220
-rw-r--r--mate-volume-control/src/gvc-mixer-source.h57
-rw-r--r--mate-volume-control/src/gvc-mixer-stream.c912
-rw-r--r--mate-volume-control/src/gvc-mixer-stream.h127
-rw-r--r--mate-volume-control/src/gvc-speaker-test.c499
-rw-r--r--mate-volume-control/src/gvc-speaker-test.h57
-rw-r--r--mate-volume-control/src/gvc-stream-status-icon.c825
-rw-r--r--mate-volume-control/src/gvc-stream-status-icon.h63
110 files changed, 36844 insertions, 0 deletions
diff --git a/mate-volume-control/AUTHORS b/mate-volume-control/AUTHORS
new file mode 100644
index 0000000..3f6dd9e
--- /dev/null
+++ b/mate-volume-control/AUTHORS
@@ -0,0 +1,2 @@
+William Jon McCann <[email protected]>
+Bastien Nocera <[email protected]>
diff --git a/mate-volume-control/ChangeLog.pre-2-26 b/mate-volume-control/ChangeLog.pre-2-26
new file mode 100644
index 0000000..8b38808
--- /dev/null
+++ b/mate-volume-control/ChangeLog.pre-2-26
@@ -0,0 +1,1245 @@
+2009-03-16 Marc-André Lureau <[email protected]>
+
+ * src/Makefile.am (*_SOURCES): Fix make dist. Include gvc-log.h.
+
+2009-03-12 Bastien Nocera <[email protected]>
+
+ * src/gvc-stream-status-icon.c (on_stream_decibel_notify),
+ (gvc_stream_status_icon_set_mixer_stream): Also update the
+ tooltip when decibels change, fixes the dB value pretty much
+ always being wrong (the code notifies of the changed dB after the
+ changed volume) (Closes: #575093)
+
+2009-03-12 Bastien Nocera <[email protected]>
+
+ * src/gvc-balance-bar.c (_scale_box_new),
+ (gvc_balance_bar_set_balance_type), (gvc_balance_bar_set_property),
+ (gvc_balance_bar_class_init), (on_adjustment_value_changed),
+ (gvc_balance_bar_init), (gvc_balance_bar_new): Fix use of the
+ zero_adjustment GtkAdjustment in slider callbacks, export
+ gvc_channel_bar_scroll
+ * src/gvc-balance-bar.h: Export gvc_channel_bar_scroll
+
+ * src/gvc-stream-status-icon.c (on_status_icon_scroll_event):
+ Use gvc_channel_bar_scroll instead of our own code
+
+ (Closes: #564313)
+
+2009-03-06 Matthias Clasen <[email protected]>
+
+ * src/applet-main.c:
+ * src/dialog-main.c: Wire up --debug
+
+ * src/gvc-log.[hc]: Add some trivial logging infrastructure
+
+ * src/Makefile.am: Add gvc-log.c
+
+2009-03-04 Bastien Nocera <[email protected]>
+
+ * src/Makefile.am: Link to libsoundtheme.la, not using
+ -l against a static lib
+
+==================== 2.25.92 ====================
+
+2009-02-23 Matthias Clasen <[email protected]>
+
+ Bug 572665 – update sensitivity of input feedback checkbox
+
+ * src/gvc-sound-theme-chooser.c (update_theme): Make the window
+ and button sounds button insensitive too.
+
+2009-02-18 Bastien Nocera <[email protected]>
+
+ * src/gvc-balance-bar.c (_scale_box_new),
+ (on_scale_button_press_event), (on_scale_button_release_event),
+ (on_scale_scroll_event): Make the balance bar instant-apply
+ (Closes: #566423)
+
+2009-02-18 Bastien Nocera <[email protected]>
+
+ * src/gvc-stream-status-icon.c (popup_dock): Fix warning
+
+2009-02-18 Bastien Nocera <[email protected]>
+
+ * src/gvc-stream-status-icon.c (popup_dock),
+ (gvc_stream_status_icon_constructor): Patch from Yanko Kaneti
+ <[email protected]> to fix the dock showing up off-screen
+ when the applet is at the bottom of the screen and is popped
+ up for the first time (Closes: #564312)
+
+2009-02-17 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-control.c (update_source): Don't filter out
+ non-hardware sources, only ignore sink monitors
+
+2009-02-17 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-control.c (update_sink): Don't filter out
+ sinks with PA_SINK_HARDWARE, otherwise things like network sinks
+ (Airport Express?) won't show up in the volume capplet
+
+2009-02-17 Bastien Nocera <[email protected]>
+
+ * src/gvc-channel-bar.c (on_scale_scroll_event),
+ (gvc_channel_bar_set_is_amplified), (gvc_channel_bar_set_property),
+ (gvc_channel_bar_get_property), (gvc_channel_bar_class_init),
+ (gvc_channel_bar_init):
+ * src/gvc-channel-bar.h: Add "is-amplified" property. In this mode,
+ the volume can be set above 100% (150% tops actually) for inputs
+ that support giving us the dB information
+ * src/gvc-mixer-dialog.c (on_mixer_control_default_source_changed),
+ (add_stream): Disconnect the value-changed signal, and
+ reconnect it when we're done setting is_amplified for source streams
+ that support giving dB info
+ (Closes: #567536)
+
+2009-02-17 Bastien Nocera <[email protected]>
+
+ * src/gvc-channel-map.c (gvc_channel_map_can_balance),
+ (set_from_pa_map):
+ * src/gvc-channel-map.h: Add API to detect whether a channel
+ map supports balancing
+ * src/gvc-mixer-dialog.c (update_output_settings): De-sensitivise
+ the balance bar if the output doesn't support balacing
+
+2009-02-17 Bastien Nocera <[email protected]>
+
+ * src/gvc-balance-bar.c (on_adjustment_value_changed):
+ Remove fixed FIXME
+
+2009-02-17 Bastien Nocera <[email protected]>
+
+ * src/applet-main.c: Remove unused macro
+
+2009-02-12 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-control.c (gvc_stream_collate): Fix run-time
+ warning when there's no name for a stream, such as some events
+ from libcanberra
+
+2009-02-12 Bastien Nocera <[email protected]>
+
+ * src/dialog-main.c (on_control_ready), (warning_dialog_answered),
+ (dialog_popup_timeout), (main): When PulseAudio isn't running,
+ or takes a long time to connect to, popup a dialogue telling
+ the user what we're waiting for, and the ability to cancel
+ (Closes: #566835)
+
+2009-02-11 Bastien Nocera <[email protected]>
+
+ * src/applet-main.c (main): Use libunique instead of D-Bus
+ and refuse to run if an applet is already running
+ * src/dialog-main.c (message_received_cb), (on_control_ready),
+ (main): present the application when it's already running
+ (Closes: #542727)
+
+2009-02-11 Bastien Nocera <[email protected]>
+
+ * src/gvc-channel-bar.c (on_scale_button_release_event):
+ * src/gvc-sound-theme-chooser.c (play_preview_for_path):
+ * src/gvc-sound-theme-editor.c (play_sound_preview),
+ (play_sound_at_path): Don't call ca_gtk_context_get () when
+ we're not going to use the returned context, set the
+ application id for all the calls to ca_gtk_play_*()
+
+2009-02-10 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ Correct the label to mention that there are no recording apps as well
+ (Closes: #568900)
+
+2009-02-10 Bastien Nocera <[email protected]>
+
+ * data/Makefile.am: Install the applet's desktop file in the
+ xdg autostart directory (Closes: #570114)
+
+2009-02-10 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-control.c (update_source_output):
+ * src/gvc-mixer-dialog.c (add_stream): Show recording applications
+ in addition to playback applications, use the microphone icon
+ for those applications (Closes: #568900)
+
+2009-02-10 Bastien Nocera <[email protected]>
+
+ * src/gvc-applet.c (maybe_show_status_icons):
+ * src/gvc-mixer-control.c (set_application_id_from_proplist),
+ (update_sink_input), (update_source_output):
+ * src/gvc-mixer-dialog.c (create_monitor_stream_for_source):
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_get_application_id),
+ (gvc_mixer_stream_set_application_id),
+ (gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
+ (gvc_mixer_stream_class_init), (gvc_mixer_stream_finalize):
+ * src/gvc-mixer-stream.h: Set the org.mate.VolumeControl application
+ ID for the input peak monitor, and ignore it when checking whether
+ an application is using the input. Also ignore Pavucontrol.
+ Stops the microphone showing up in the applet when the capplet is
+ running (Closes: #565146)
+
+2009-02-10 Bastien Nocera <[email protected]>
+
+ * src/gvc-applet.c (maybe_show_status_icons): Revert accidentally
+ committing the rejected patch for bug #565146
+
+2009-01-26 Bastien Nocera <[email protected]>
+
+ * src/gvc-balance-bar.c (gvc_balance_bar_init): Make sure the balance
+ bar stays Left to Right, so that the Left balance is really on the
+ left
+
+2009-01-26 Bastien Nocera <[email protected]>
+
+ * src/gvc-balance-bar.c (_scale_box_new), (gvc_balance_bar_init):
+ Patch from Luca Ferretti <[email protected]>, to use the new GTK+
+ scale marks for the balance widget (Closes: #565144)
+
+2009-01-26 Bastien Nocera <[email protected]>
+
+ * src/dialog-main.c (on_dialog_response), (on_dialog_close):
+ Use gtk_main_quit () instead of exit (), so that all the
+ objects are unref'ed cleanly
+
+2009-01-26 Bastien Nocera <[email protected]>
+
+ * src/dialog-main.c (on_dialog_response), (on_dialog_close),
+ (on_control_ready): Exit when Esc is pressed
+
+2009-01-26 Bastien Nocera <[email protected]>
+
+ * src/gvc-level-bar.c (gvc_level_bar_finalize):
+ Remove any lingering timeouts when finalizing the object
+
+2009-01-26 Bastien Nocera <[email protected]>
+
+ * src/Makefile.am: Fix automake warning
+
+ * src/gvc-applet.c (maybe_show_status_icons):
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ * src/gvc-stream-status-icon.c (on_status_icon_scroll_event),
+ (update_icon), (gvc_stream_status_icon_init): Remove ifdef's
+ from the volume control code, as GTK+ 2.15.1 is now required
+ (Closes: #564318)
+
+2009-01-24 Luca Ferretti <[email protected]>
+
+ * data/mate-volume-control.desktop.in.in:
+ Icon name is mate-volume-control, not mate-sound-properties.
+
+2009-01-23 Bastien Nocera <[email protected]>
+
+ * data/icons/16x16/apps/Makefile.am:
+ * data/icons/22x22/apps/Makefile.am:
+ * data/icons/24x24/apps/Makefile.am:
+ * data/icons/32x32/apps/Makefile.am:
+ * data/icons/48x48/apps/Makefile.am:
+ * data/icons/scalable/apps/Makefile.am:
+ Install the application icon in the global
+ icon theme, not in our private directory
+ (Closes: #568635)
+
+ * data/icons/Makefile.am: Don't run gtk-update-icon-cache
+ for a private icons directory
+
+2009-01-20 Bastien Nocera <[email protected]>
+
+ * data/Makefile.am:
+ * data/icons/48x48/apps/Makefile.am:
+ * data/icons/Makefile.am:
+ * src/Makefile.am: Fix distcheck
+
+2009-01-20 Bastien Nocera <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new),
+ (on_scale_button_press_event), (on_scale_button_release_event),
+ (on_scale_scroll_event), (gvc_channel_bar_init): Move the
+ setup of the press and release button events to _scale_box_new(),
+ otherwise it's not handled with horizontal scales.
+ When scrolling with the mouse wheel, swap the up/down directions
+ to work as expected (Closes: #567034)
+
+2009-01-20 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-control.c (set_is_event_stream_from_proplist),
+ (update_sink_input):
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_is_event_stream),
+ (gvc_mixer_stream_set_is_event_stream),
+ (gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
+ (gvc_mixer_stream_class_init):
+ * src/gvc-mixer-stream.h: Add the "is-event-stream" property,
+ to check whether the role of a stream is to play an event
+
+ * src/gvc-mixer-dialog.c (add_stream): Don't show event streams
+ in the applications tab (Closes: #565145)
+
+2009-01-20 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ Add Close button, and change the spacing around it to
+ match existing capplets (Closes: #564314)
+
+2009-01-20 Bastien Nocera <[email protected]>
+
+ * data/mate-volume-control-applet.desktop.in: Start
+ mate-volume-control after the panel, not at the same time,
+ spotted by Chris Coulson (Closes: #568320)
+
+2009-01-16 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ Don't show no apps message if there are apps.
+ Fixes #567250
+
+2009-01-16 William Jon McCann <[email protected]>
+
+ * src/gvc-stream-status-icon.c
+ (gvc_stream_status_icon_constructor):
+ Reduce border around volume slider dock
+
+2009-01-16 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new),
+ (on_scale_button_press_event), (on_scale_button_release_event),
+ (on_zero_adjustment_value_changed), (gvc_channel_bar_init):
+ Make volume sliders instantaneous.
+
+ Patch from: Bastien Nocera <[email protected]>
+ Fixes #564313
+
+2009-01-16 William Jon McCann <[email protected]>
+
+ * src/gvc-stream-status-icon.c (on_menu_mute_toggled),
+ (on_status_icon_popup_menu):
+ Add a mute toggle item to the context menu.
+
+ Patch from: Paolo Borelli <[email protected]>
+ Fixes #567510
+
+2009-01-16 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (maybe_show_status_icons):
+ Don't leak a list of sources.
+
+ Patch from: Paolo Borelli <[email protected]>
+ Fixes #567514
+
+2009-01-10 William Jon McCann <[email protected]>
+
+ * src/gvc-balance-bar.c (_scale_box_new):
+ Don't paint the scale trough.
+ Patch from: Matthias Clasen <[email protected]>
+ Fixes part of #565144
+
+2008-12-21 William Jon McCann <[email protected]>
+
+ * src/gvc-stream-status-icon.c (popup_dock):
+ addresses a bunch of positioning problems
+ Patch from: Matthias Clasen <[email protected]>
+ Fixes #564312
+
+2008-12-21 William Jon McCann <[email protected]>
+
+ * src/gvc-sound-theme-chooser.c (on_treeview_selection_changed):
+ Check for null selection.
+
+2008-12-21 William Jon McCann <[email protected]>
+
+ * data/sounds/Makefile.am:
+ * data/sounds/mate-sounds-default.xml.in.in:
+ Add drip, glass, and sonar sounds.
+
+2008-12-21 William Jon McCann <[email protected]>
+
+ * data/Makefile.am:
+ * data/sounds/Makefile.am:
+ * data/sounds/mate-sounds-default.xml.in.in:
+ * src/Makefile.am:
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ * src/gvc-sound-theme-chooser.c (set_combox_for_theme_name),
+ (xml_get_and_trim_names), (populate_model_from_node),
+ (populate_model_from_file), (populate_model_from_dir),
+ (save_alert_sounds), (update_alert_model), (update_alert),
+ (on_alert_toggled), (play_preview_for_path),
+ (create_alert_treeview), (get_file_type),
+ (update_alerts_from_theme_name), (update_theme),
+ (gvc_sound_theme_chooser_init):
+ * src/sound-theme-file-utils.c (custom_theme_dir_is_empty),
+ (delete_old_files), (delete_disabled_files), (add_disabled_file),
+ (add_custom_file), (create_custom_theme):
+ * src/sound-theme-file-utils.h:
+ Add sound set. Properly set the active alert sound in the
+ model.
+
+2008-12-21 William Jon McCann <[email protected]>
+
+ * src/gvc-sound-theme-chooser.c (on_combobox_changed),
+ (set_input_feedback_enabled), (update_theme), (on_alert_toggled),
+ (play_preview_for_path), (on_treeview_row_activated),
+ (on_treeview_selection_changed), (create_alert_treeview),
+ (gvc_sound_theme_chooser_constructor),
+ (gvc_sound_theme_chooser_init):
+ * src/gvc-sound-theme-editor.c (theme_changed_custom_reinit),
+ (on_theme_changed), (load_index_theme_name), (sound_theme_in_dir),
+ (add_theme_to_store), (set_theme_name), (audible_bell_foreach),
+ (set_audible_bell_enabled), (input_feedback_foreach),
+ (set_input_feedback_enabled), (get_file_type),
+ (theme_changed_custom_init), (update_theme),
+ (setup_theme_selector), (play_sound_preview), (get_sound_filename),
+ (count_customised_sounds), (save_sounds), (save_custom_theme),
+ (dump_theme), (on_setting_column_edited), (fill_custom_model),
+ (on_combobox_editing_started), (play_sound_at_path),
+ (setting_set_func), (activatable_cell_renderer_pixbuf_activate),
+ (activatable_cell_renderer_pixbuf_init),
+ (activatable_cell_renderer_pixbuf_class_init),
+ (setup_theme_custom_selector),
+ (gvc_sound_theme_editor_constructor),
+ (gvc_sound_theme_editor_class_init), (on_click_feedback_toggled),
+ (on_key_changed), (on_treeview_row_activated),
+ (constrain_list_size), (setup_list_size_constraint),
+ (gvc_sound_theme_editor_init), (gvc_sound_theme_editor_finalize),
+ (gvc_sound_theme_editor_new):
+ * src/gvc-sound-theme-editor.h:
+ Simplify the theme selection. Move the ability to
+ customize the sound theme into a separate widget. We
+ should add a Customize button to access it.
+ This new approach will mirror the way we handle
+ wallpapers. Next thing to do is to add a set
+ of standard alert sounds that one can choose from.
+ And have the widget customize the selected theme to
+ use them.
+
+2008-12-21 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ Move the sound effects tab back to the first one.
+
+2008-12-19 Bastien Nocera <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ Move the sound effects tab to be the last one
+
+2008-12-19 Bastien Nocera <[email protected]>
+
+ * src/gvc-sound-theme-chooser.c (setup_theme_custom_selector):
+ Change the ellipsising to be at the start
+
+2008-12-19 Bastien Nocera <[email protected]>
+
+ * data/mate-volume-control.desktop.in.in:
+ Add a .desktop file to launch g-v-c from the
+ control-center (and preferences menu)
+
+ * data/Makefile.am: changes for the above
+
+ * data/icons/16x16/Makefile.am:
+ * data/icons/16x16/apps/*:
+ * data/icons/22x22/Makefile.am:
+ * data/icons/22x22/apps/*:
+ * data/icons/24x24/Makefile.am:
+ * data/icons/24x24/apps/*:
+ * data/icons/32x32/Makefile.am:
+ * data/icons/32x32/apps/*:
+ * data/icons/48x48/*:
+ * data/icons/scalable/Makefile.am:
+ * data/icons/scalable/apps/*:
+ Add icons for the .desktop file
+
+2008-12-18 Bastien Nocera <[email protected]>
+
+ * src/gvc-sound-theme-chooser.c (setup_theme_custom_selector):
+ Set the first column's text to be ellipsised, and expanded,
+ fixes the window resizing on startup, but still some unsightly
+ resizing in the treeview itself
+
+2008-12-17 Bastien Nocera <[email protected]>
+
+ * AUTHORS: Add myself, having written much of src/*theme*.[ch]
+
+2008-12-16 William Jon McCann <[email protected]>
+
+ * src/gvc-level-bar.c (gvc_level_bar_size_allocate):
+ Recalculate layout for allocation.
+
+2008-12-16 William Jon McCann <[email protected]>
+
+ * src/gvc-level-bar.c (layout_changed), (reset_max_peak),
+ (bar_calc_layout), (update_peak_value), (update_rms_value),
+ (gvc_level_bar_expose):
+ Separate the layout calculation from the draw.
+ Only queue a redraw if the layout actually changes.
+ Reduces cpu usage considerably.
+
+2008-12-14 William Jon McCann <[email protected]>
+
+ * src/gvc-level-bar.c (gvc_level_bar_expose):
+ Compress expose event queue.
+
+2008-12-14 William Jon McCann <[email protected]>
+
+ * src/gvc-balance-bar.c (_scale_box_new):
+ Add left and right labels.
+
+2008-12-14 William Jon McCann <[email protected]>
+
+ * src/gvc-level-bar.c (gvc_level_bar_expose):
+ Round corners a bit more.
+
+2008-12-14 William Jon McCann <[email protected]>
+
+ * src/gvc-level-bar.c (reset_max_peak), (update_peak_value),
+ (gvc_level_bar_expose):
+ Add peak of level indicator.
+
+2008-12-14 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-level-bar.c (fraction_from_adjustment),
+ (update_peak_value), (update_rms_value),
+ (gvc_level_bar_get_orientation), (gvc_level_bar_set_orientation),
+ (on_peak_adjustment_value_changed),
+ (on_rms_adjustment_value_changed),
+ (gvc_level_bar_set_peak_adjustment),
+ (gvc_level_bar_set_rms_adjustment),
+ (gvc_level_bar_get_peak_adjustment),
+ (gvc_level_bar_get_rms_adjustment), (gvc_level_bar_set_scale),
+ (gvc_level_bar_set_property), (gvc_level_bar_get_property),
+ (gvc_level_bar_constructor), (gvc_level_bar_size_request),
+ (gvc_level_bar_size_allocate), (curved_rectangle),
+ (gvc_level_bar_expose), (gvc_level_bar_class_init),
+ (gvc_level_bar_init), (gvc_level_bar_finalize),
+ (gvc_level_bar_new):
+ * src/gvc-level-bar.h:
+ * src/gvc-mixer-dialog.c (update_input_peak),
+ (gvc_mixer_dialog_constructor):
+ * src/rb-segmented-bar.c:
+ * src/rb-segmented-bar.h:
+ Remove rb-segmented-bar and add a new GvcLevelBar.
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-balance-bar.c (_scale_box_new),
+ (gvc_balance_bar_set_size_group),
+ (gvc_balance_bar_set_channel_map), (gvc_balance_bar_set_property),
+ (gvc_balance_bar_get_property), (gvc_balance_bar_constructor),
+ (gvc_balance_bar_class_init), (on_left), (on_right),
+ (on_adjustment_value_changed), (gvc_balance_bar_init),
+ (gvc_balance_bar_finalize), (gvc_balance_bar_new):
+ * src/gvc-balance-bar.h:
+ * src/gvc-channel-map.c (gvc_channel_map_class_init),
+ (gvc_channel_map_gains_changed), (set_from_pa_map):
+ * src/gvc-channel-map.h:
+ * src/gvc-mixer-control.c (gvc_mixer_control_set_default_sink),
+ (gvc_mixer_control_set_default_source),
+ (update_default_source_from_name), (update_default_sink_from_name),
+ (update_sink), (update_source), (update_sink_input),
+ (update_event_role_stream):
+ * src/gvc-mixer-dialog.c (update_output_settings),
+ (on_mixer_control_default_sink_changed), (add_stream),
+ (on_output_radio_toggled), (gvc_mixer_dialog_constructor):
+ * src/gvc-mixer-sink-input.c (gvc_mixer_sink_input_change_volume):
+ * src/gvc-mixer-sink.c (gvc_mixer_sink_change_volume):
+ * src/gvc-mixer-source.c (gvc_mixer_source_change_volume):
+ * src/gvc-mixer-stream.c (on_channel_map_gains_changed),
+ (gvc_mixer_stream_set_channel_map):
+ Add output balance control.
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * AUTHORS: updated email address
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-channel-map.c (gvc_channel_map_get_num_channels),
+ (gvc_channel_map_get_gains), (gvc_channel_map_get_positions),
+ (gvc_channel_map_class_init), (gvc_channel_map_init),
+ (gvc_channel_map_finalize), (gvc_channel_map_new),
+ (set_from_pa_map), (gvc_channel_map_new_from_pa_channel_map):
+ * src/gvc-channel-map.h:
+ * src/gvc-mixer-control.c (update_sink), (update_source),
+ (update_sink_input), (update_source_output):
+ * src/gvc-mixer-event-role.c (update_settings),
+ (gvc_mixer_event_role_new):
+ * src/gvc-mixer-sink-input.c (gvc_mixer_sink_input_change_volume),
+ (gvc_mixer_sink_input_new):
+ * src/gvc-mixer-sink-input.h:
+ * src/gvc-mixer-sink.c (gvc_mixer_sink_change_volume),
+ (gvc_mixer_sink_new):
+ * src/gvc-mixer-sink.h:
+ * src/gvc-mixer-source-output.c (gvc_mixer_source_output_new):
+ * src/gvc-mixer-source-output.h:
+ * src/gvc-mixer-source.c (gvc_mixer_source_change_volume),
+ (gvc_mixer_source_new):
+ * src/gvc-mixer-source.h:
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_get_channel_map),
+ (gvc_mixer_stream_set_channel_map),
+ (gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
+ (gvc_mixer_stream_class_init):
+ * src/gvc-mixer-stream.h:
+ Add a ChannelMap class that we can use to manipulate channel
+ volume levels.
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new), (update_layout),
+ (gvc_channel_bar_set_size_group),
+ (gvc_channel_bar_set_orientation), (gvc_channel_bar_constructor),
+ (gvc_channel_bar_init):
+ * src/gvc-channel-bar.h:
+ * src/gvc-mixer-dialog.c (create_bar), (add_stream),
+ (gvc_mixer_dialog_constructor):
+ Don't put the end box in the size group for app channel bars.
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (add_stream), (remove_stream),
+ (gvc_mixer_dialog_constructor):
+ Show explanation when no apps are playing.
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-channel-bar.c (_scale_box_new):
+ * src/gvc-mixer-control.c (gvc_mixer_control_get_pa_context),
+ (update_default_source_from_name):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-dialog.c (update_input_peak), (update_input_meter),
+ (on_monitor_suspended_callback), (on_monitor_read_callback),
+ (create_monitor_stream_for_source),
+ (on_mixer_control_default_source_changed), (add_stream),
+ (gvc_mixer_dialog_constructor):
+ * src/rb-segmented-bar.c (rb_segment_new), (rb_segment_free),
+ (rb_segmented_bar_init), (rb_segmented_bar_class_init),
+ (rb_segmented_bar_finalize), (rb_segmented_bar_get_property),
+ (rb_segmented_bar_set_property),
+ (rb_segmented_bar_default_value_formatter),
+ (rb_segmented_bar_size_request), (create_adapt_layout),
+ (compute_layout_size), (rb_segmented_bar_size_allocate),
+ (rb_segmented_bar_add_segment),
+ (rb_segmented_bar_add_segment_default_color),
+ (rb_segmented_bar_update_segment), (draw_rounded_rectangle),
+ (rb_segmented_bar_render_segments), (modula), (hsb_from_color),
+ (color_from_hsb), (color_shade), (make_segment_gradient),
+ (rb_segmented_bar_render_strokes), (rb_segmented_bar_render),
+ (rb_segmented_bar_render_labels), (rb_segmented_bar_expose),
+ (rb_segmented_bar_new), (rb_segmented_bar_set_value_formatter):
+ * src/rb-segmented-bar.h:
+ Add input level monitor.
+
+2008-12-13 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new),
+ (gvc_channel_bar_set_orientation):
+ Use the same size group for the start and end of
+ the channel bar.
+
+2008-12-12 Bastien Nocera <[email protected]>
+
+ * src/gvc-sound-theme-chooser.c (get_sound_filename):
+ Set a parent for the file chooser
+
+2008-12-12 Bastien Nocera <[email protected]>
+
+ * src/gvc-stream-status-icon.c (update_icon): Fix
+ last commit, we need to use commas, not dots to separate
+ major, minor and micro versions
+
+2007-12-12 Matthias Clasen <[email protected]>
+
+ Bug 564176 – dependency on API from gtk+ trunk
+
+ * mate-volume-control/src/gvc-stream-status-icon.c: Don't use
+ GTK+ 2.16 API unconditionally. Reported by Frederic Peters
+
+2008-12-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (update_sink), (update_source):
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_get_decibel),
+ (gvc_mixer_stream_set_decibel), (gvc_mixer_stream_get_can_decibel),
+ (gvc_mixer_stream_set_can_decibel),
+ (gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
+ (gvc_mixer_stream_class_init):
+ * src/gvc-mixer-stream.h:
+ * src/gvc-stream-status-icon.c (update_icon):
+ Add decibel level support.
+
+2008-12-11 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-applet.c (maybe_show_status_icons), (gvc_applet_start),
+ (on_control_stream_removed), (on_control_stream_added),
+ (gvc_applet_constructor):
+ * src/gvc-mixer-control.c (gvc_mixer_control_get_source_outputs),
+ (update_source), (update_sink_input), (update_source_output),
+ (update_event_role_stream):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-source-output.c
+ (gvc_mixer_source_output_change_volume),
+ (gvc_mixer_source_output_change_is_muted),
+ (gvc_mixer_source_output_constructor),
+ (gvc_mixer_source_output_class_init),
+ (gvc_mixer_source_output_init), (gvc_mixer_source_output_finalize),
+ (gvc_mixer_source_output_new):
+ * src/gvc-mixer-source-output.h:
+ * src/gvc-stream-status-icon.c (update_icon),
+ (on_status_icon_visible_notify), (gvc_stream_status_icon_init):
+ Show/hide input level status icon based on presence of
+ a "source output" stream.
+
+2008-12-11 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (gvc_channel_bar_set_low_icon_name),
+ (gvc_channel_bar_set_high_icon_name),
+ (gvc_channel_bar_set_property), (gvc_channel_bar_get_property),
+ (gvc_channel_bar_class_init), (gvc_channel_bar_init),
+ (gvc_channel_bar_finalize):
+ * src/gvc-channel-bar.h:
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor),
+ (gvc_mixer_dialog_set_page):
+ Use the new input icons in the dialog.
+
+2008-12-11 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/applet-main.c (main):
+ * src/dialog-main.c (main):
+ Append the icon search path to the icon theme.
+
+2008-12-11 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c:
+ Use new icons.
+
+2008-12-11 William Jon McCann <[email protected]>
+
+ * data/Makefile.am:
+ * data/icons/*:
+ Add some input level icons from Mike Langlie. Just
+ an initial draft.
+
+2008-12-11 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-applet.c (gvc_applet_start), (gvc_applet_dispose),
+ (update_default_source), (update_default_sink), (on_control_ready),
+ (on_control_default_sink_changed),
+ (on_control_default_source_changed), (gvc_applet_constructor),
+ (gvc_applet_class_init), (gvc_applet_init), (gvc_applet_finalize):
+ * src/gvc-stream-status-icon.c (on_adjustment_value_changed),
+ (popup_dock), (on_status_icon_activate),
+ (on_menu_activate_open_volume_control),
+ (on_status_icon_popup_menu), (on_status_icon_scroll_event),
+ (gvc_icon_release_grab), (on_dock_button_press), (popdown_dock),
+ (gvc_icon_grab_notify), (on_dock_grab_notify),
+ (on_dock_grab_broken_event), (on_dock_key_release),
+ (maybe_show_status_icon), (update_icon),
+ (gvc_stream_status_icon_set_icon_names), (on_stream_volume_notify),
+ (on_stream_is_muted_notify),
+ (gvc_stream_status_icon_set_display_name),
+ (gvc_stream_status_icon_set_mixer_stream),
+ (gvc_stream_status_icon_set_property),
+ (gvc_stream_status_icon_get_property), (on_bar_is_muted_notify),
+ (gvc_stream_status_icon_constructor),
+ (gvc_stream_status_icon_dispose),
+ (gvc_stream_status_icon_class_init), (gvc_stream_status_icon_init),
+ (gvc_stream_status_icon_finalize), (gvc_stream_status_icon_new):
+ * src/gvc-stream-status-icon.h:
+ Create a stream-status-icon class. Create a status icon
+ for input stream. Todo: only show input status icon
+ when an application is recording, use microphone images.
+
+2008-12-05 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (gvc_channel_bar_init):
+ Make label left aligned.
+
+2008-12-05 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (update_sink), (update_sink_input),
+ (update_client), (remove_client), (gvc_mixer_control_init):
+ Use application/client name instead of stream name.
+
+2008-12-05 Marc-André Lureau <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_set_page):
+ Added --page argument for compatibility reasons (used by g-s-r,
+ for instance). Closes: #563289
+
+2008-11-19 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (update_sink_input),
+ (update_event_role_stream):
+ Add debug for event stuff.
+
+2008-11-19 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (on_stream_volume_notify),
+ (on_stream_is_muted_notify):
+ Fix crash when can't find a bar for stream.
+
+2008-11-19 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (update_default_input),
+ (update_default_output), (on_mixer_control_default_sink_changed),
+ (on_mixer_control_default_source_changed), (add_stream),
+ (on_input_radio_toggled), (on_output_radio_toggled),
+ (create_stream_treeview), (gvc_mixer_dialog_constructor):
+ Use radio buttons instead of selection to change default in/out.
+
+2008-11-19 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new), (gvc_channel_bar_new):
+ * src/gvc-mixer-control.c (_set_default_source),
+ (_set_default_sink):
+ Make range update policy discontinuous.
+
+2008-11-19 William Jon McCann <[email protected]>
+
+ * src/gvc-sound-theme-chooser.c (constrain_list_size),
+ (setup_list_size_constraint), (gvc_sound_theme_chooser_init):
+ Make the initial size of the scrolled window more reasonable.
+
+2008-11-18 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (create_stream_treeview):
+ * src/gvc-sound-theme-chooser.c (play_sound_at_path),
+ (activatable_cell_renderer_pixbuf_activate),
+ (setup_theme_custom_selector), (on_treeview_row_activated),
+ (gvc_sound_theme_chooser_init):
+ Hide treeview headers. Make double click on tree rows
+ play sound preview.
+
+2008-11-18 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (maybe_show_status_icon), (update_icon),
+ (update_default_sink), (on_control_ready),
+ (on_control_default_sink_changed), (gvc_applet_init):
+ * src/gvc-mixer-control.c (remove_stream):
+ Hide the status icon when there is no output device.
+
+2008-11-18 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (gvc_mixer_control_set_default_sink),
+ (gvc_mixer_control_set_default_source), (_set_default_source),
+ (_set_default_sink), (_stream_has_name), (find_stream_for_name),
+ (update_default_source_from_name), (update_default_sink_from_name),
+ (update_server), (update_sink), (update_source),
+ (update_sink_input), (gvc_mixer_control_class_init):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-dialog.c (on_mixer_control_default_sink_changed),
+ (on_mixer_control_default_source_changed),
+ (gvc_mixer_dialog_set_mixer_control), (bar_set_stream),
+ (add_stream), (find_stream_by_id), (remove_stream),
+ (on_control_stream_removed), (create_stream_treeview),
+ (on_input_treeview_selection_changed),
+ (on_output_treeview_selection_changed),
+ (gvc_mixer_dialog_constructor):
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_set_property),
+ (gvc_mixer_stream_get_property), (gvc_mixer_stream_class_init):
+ * src/gvc-mixer-stream.h:
+ Add support for changing the default sink and source.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-mixer-control.c (update_event_role_stream):
+ * src/gvc-mixer-dialog.c (create_bar), (add_stream):
+ * src/gvc-mixer-event-role.c (update_settings),
+ (gvc_mixer_event_role_change_volume),
+ (gvc_mixer_event_role_change_is_muted),
+ (gvc_mixer_event_role_set_device),
+ (gvc_mixer_event_role_set_property),
+ (gvc_mixer_event_role_get_property),
+ (gvc_mixer_event_role_constructor),
+ (gvc_mixer_event_role_class_init), (gvc_mixer_event_role_init),
+ (gvc_mixer_event_role_finalize), (gvc_mixer_event_role_new):
+ * src/gvc-mixer-event-role.h:
+ Add event role stream. Make setting event volume work.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor),
+ (gvc_mixer_dialog_init):
+ * src/gvc-sound-theme-chooser.c (theme_changed_custom_reinit),
+ (on_combobox_changed), (audible_bell_foreach),
+ (set_audible_bell_enabled), (input_feedback_foreach),
+ (set_input_feedback_enabled), (get_file_type),
+ (theme_changed_custom_init), (update_theme),
+ (setup_theme_selector), (count_customised_sounds), (save_sounds),
+ (on_setting_column_edited), (fill_custom_model),
+ (on_combobox_editing_started), (setting_set_func),
+ (setup_theme_custom_selector),
+ (gvc_sound_theme_chooser_constructor), (on_click_feedback_toggled),
+ (on_key_changed), (gvc_sound_theme_chooser_init),
+ (gvc_sound_theme_chooser_new):
+ Simplify the theme chooser a bit. Remove the visual bell stuff
+ since that should go into the to-be-written Universal Access
+ control panel.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (on_key_changed):
+ Don't assume all changed keys are booleans.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (create_bar), (add_stream),
+ (gvc_mixer_dialog_constructor), (gvc_mixer_dialog_init):
+ Use a separate size group for application streams.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ Switch order of input and output tabs.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new):
+ Add labels to size group instead of scale because
+ using expand/fill widgets in a size group doesn't really
+ work. And in practice the label is the only variable
+ length widget.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_dispose):
+ Only disconnect signals once.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ * src/gvc-sound-theme-chooser.c (gvc_sound_theme_chooser_init):
+ Move alert and input sliders to the top.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ * src/gvc-sound-theme-chooser.c (setup_theme_selector),
+ (gvc_sound_theme_chooser_init):
+ Drop the frame and label from the effects chooser.
+ Move the enable effects toggle up to the top.
+
+2008-11-12 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor):
+ At mpt's suggestion, move the output slider to the top.
+
+2008-11-11 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (update_sink_input),
+ (update_source_output), (update_event_role_stream),
+ (remove_client), (remove_sink), (remove_source),
+ (remove_sink_input), (remove_source_output):
+ * src/gvc-mixer-dialog.c (on_bar_is_muted_notify), (create_bar),
+ (bar_set_stream), (add_stream), (on_control_stream_added),
+ (on_control_stream_removed):
+ Set the associated stream on the bar so mute works.
+ Hush some debugging.
+
+2008-11-11 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (update_sink), (update_source):
+ * src/gvc-mixer-dialog.c (add_stream):
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_get_description),
+ (gvc_mixer_stream_set_description),
+ (gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
+ (gvc_mixer_stream_class_init), (gvc_mixer_stream_finalize):
+ * src/gvc-mixer-stream.h:
+ Add descriptions and use them instead of names when
+ displaying sinks and sources.
+
+2008-11-11 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (add_stream):
+ Don't show sinks/source in apps page.
+
+2008-11-11 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (add_stream), (find_stream_by_id),
+ (on_control_stream_removed), (create_stream_treeview):
+ Try to remove streams from models.
+
+2008-11-11 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (add_stream):
+ Also add default streams to tree models.
+
+2008-11-11 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (gvc_mixer_control_get_streams):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-dialog.c (create_bar), (bar_set_stream),
+ (add_stream), (create_stream_treeview),
+ (gvc_mixer_dialog_constructor):
+ Add beginnings of output and input selection.
+
+2008-11-10 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (add_stream),
+ (gvc_mixer_dialog_constructor):
+ Don't crash if we don't get a default sink/source.
+
+2008-11-06 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-control.c (remove_stream), (update_sink_input),
+ (update_event_role_stream):
+ * src/gvc-mixer-dialog.c (on_control_stream_added),
+ (on_control_stream_removed):
+ Fix adding and remove streams.
+
+2008-11-06 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (_gtk_label_make_bold),
+ (gvc_mixer_dialog_constructor):
+ * src/gvc-sound-theme-chooser.c (gvc_sound_theme_chooser_init):
+ Tweak layout and add some placeholder treeviews.
+
+2008-11-06 William Jon McCann <[email protected]>
+
+ * src/gvc-channel-bar.c (_scale_box_new),
+ (gvc_channel_bar_set_size_group):
+ * src/gvc-channel-bar.h:
+ * src/gvc-mixer-dialog.c (add_stream), (gvc_mixer_dialog_init):
+ Put all the scales in a size group. Doesn't seem
+ to work though.
+
+2008-11-06 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (on_enable_effects_toggled),
+ (on_click_feedback_toggled), (on_audible_bell_toggled),
+ (gvc_mixer_dialog_constructor), (on_key_changed),
+ (gvc_mixer_dialog_init):
+ Hook up the check buttons.
+
+2008-11-06 William Jon McCann <[email protected]>
+
+ * src/gvc-mixer-dialog.c (add_stream),
+ (gvc_mixer_dialog_constructor):
+ * src/gvc-sound-theme-chooser.c (setup_theme_selector),
+ (gvc_sound_theme_chooser_init):
+ Fix up some layout. Hide the theme selector if there is
+ only one.
+
+2008-11-06 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-applet.c (on_menu_activate_open_volume_control),
+ (on_status_icon_popup_menu):
+ * src/gvc-mixer-dialog.c (on_stream_is_muted_notify), (add_stream),
+ (gvc_mixer_dialog_constructor), (gvc_mixer_dialog_new):
+ * src/gvc-sound-theme-chooser.c (theme_changed_custom_reinit),
+ (on_combobox_changed), (load_index_theme_name),
+ (sound_theme_in_dir), (add_theme_to_store),
+ (set_combox_for_theme_name), (on_theme_changed),
+ (setup_theme_selector), (visual_bell_mateconf_to_setting),
+ (visual_bell_setting_to_mateconf), (play_sound_preview),
+ (get_sound_filename), (count_customised_sounds), (save_sounds),
+ (save_custom_theme), (dump_theme), (on_setting_column_edited),
+ (fill_visual_bell_model), (fill_custom_model),
+ (on_combobox_editing_started), (play_sound_at_path),
+ (on_treeview_button_press_event), (setting_set_func),
+ (activatable_cell_renderer_pixbuf_activate),
+ (activatable_cell_renderer_pixbuf_init),
+ (activatable_cell_renderer_pixbuf_class_init),
+ (input_feedback_foreach), (set_input_feedback_enabled),
+ (on_input_feedback_changed), (audible_bell_foreach),
+ (set_audible_bell_enabled), (on_audible_bell_changed),
+ (get_file_type), (theme_changed_custom_init),
+ (setup_theme_custom_selector),
+ (gvc_sound_theme_chooser_constructor),
+ (gvc_sound_theme_chooser_class_init), (_gtk_label_make_bold),
+ (gvc_sound_theme_chooser_init), (gvc_sound_theme_chooser_finalize),
+ (gvc_sound_theme_chooser_new):
+ * src/gvc-sound-theme-chooser.h:
+ * src/sound-theme-file-utils.c (custom_theme_update_time),
+ (custom_theme_dir_path), (directory_delete_recursive),
+ (capplet_file_delete_recursive), (delete_custom_theme_dir),
+ (delete_one_file), (delete_old_files), (delete_disabled_files),
+ (create_one_file), (add_disabled_file), (add_custom_file):
+ * src/sound-theme-file-utils.h:
+ Redesign a bit in order to incorporate the sound properties.
+
+2008-11-05 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (popup_dock), (on_bar_is_muted_notify),
+ (gvc_applet_init):
+ * src/gvc-channel-bar.c (on_zero_adjustment_value_changed),
+ (update_mute_button), (gvc_channel_bar_init):
+ Fix initial mute setting for applet. When mute button
+ is not displayed use the "zero" position to indicate
+ muted state.
+
+2008-11-05 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (gvc_applet_init):
+ * src/gvc-channel-bar.c (_scale_box_new),
+ (gvc_channel_bar_set_orientation), (update_mute_button),
+ (gvc_channel_bar_set_show_mute), (gvc_channel_bar_get_show_mute),
+ (gvc_channel_bar_set_property), (gvc_channel_bar_get_property),
+ (gvc_channel_bar_constructor), (gvc_channel_bar_class_init),
+ (gvc_channel_bar_init):
+ * src/gvc-channel-bar.h:
+ * src/gvc-mixer-dialog.c (add_stream):
+ Hide mute in vertical mode. Add icons to hint at scale direction
+ in horizontal mode. Fix orientation changing.
+
+2008-11-05 William Jon McCann <[email protected]>
+
+ * src/Makefile.am:
+ * src/gvc-mixer-control.c (gvc_mixer_control_get_default_source),
+ (gvc_mixer_control_get_sources), (remove_stream), (add_stream),
+ (update_sink), (update_source), (update_sink_input),
+ (update_event_role_stream), (remove_sink), (remove_source),
+ (remove_sink_input), (remove_source_output):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-dialog.c (add_stream),
+ (gvc_mixer_dialog_constructor):
+ * src/gvc-mixer-source.c (gvc_mixer_source_change_volume),
+ (gvc_mixer_source_change_is_muted), (gvc_mixer_source_constructor),
+ (gvc_mixer_source_class_init), (gvc_mixer_source_init),
+ (gvc_mixer_source_finalize), (gvc_mixer_source_new):
+ * src/gvc-mixer-source.h:
+ Add support for input streams. Only show default input and
+ output stream.
+
+2008-11-05 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (gvc_applet_dispose), (on_control_ready):
+ * src/gvc-channel-bar.c (gvc_channel_bar_finalize):
+ * src/gvc-mixer-control.c (gvc_mixer_control_get_event_sink_input),
+ (gvc_mixer_control_get_default_sink),
+ (gvc_mixer_control_lookup_stream_id), (update_sink),
+ (update_sink_input), (update_event_role_stream),
+ (gvc_mixer_control_dispose), (gvc_mixer_control_init):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-dialog.c (on_control_stream_added),
+ (on_control_stream_removed), (gvc_mixer_dialog_constructor),
+ (gvc_mixer_dialog_dispose), (gvc_mixer_dialog_class_init):
+ * src/gvc-mixer-stream.c (gvc_mixer_stream_finalize):
+ Fix leaks. Use ids instead of indexes when possible.
+ Add method to lookup stream by id.
+
+2008-11-04 Marc-André Lureau <[email protected]>
+
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_constructor): Compile
+ with gtk+ <= 2.14.
+
+2008-11-03 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (on_menu_activate_sounds),
+ (on_status_icon_popup_menu):
+ Add sound properties to menu.
+
+2008-11-03 William Jon McCann <[email protected]>
+
+ * src/gvc-applet.c (gvc_applet_init):
+ status-icon scroll events only available in gtk+ 2.15.0
+
+2008-11-03 William Jon McCann <[email protected]>
+
+ * Makefile.am (SUBDIRS):
+ Add data dir.
+
+2008-11-03 William Jon McCann <[email protected]>
+
+ * data/Makefile.am:
+ * data/mate-volume-control-applet.desktop.in:
+ Install an autostart file for the volume applet
+
+2008-11-03 William Jon McCann <[email protected]>
+
+ * AUTHORS:
+ * Makefile.am:
+ * src/Makefile.am:
+ * src/applet-main.c (on_bus_name_lost), (acquire_name_on_proxy),
+ (acquire_name), (main):
+ * src/dialog-main.c (on_bus_name_lost), (acquire_name_on_proxy),
+ (acquire_name), (on_dialog_response), (on_control_ready), (main):
+ * src/gvc-applet.c (maybe_show_status_icon), (gvc_applet_start),
+ (gvc_applet_dispose), (gvc_applet_constructor),
+ (gvc_applet_class_init), (on_adjustment_value_changed),
+ (popup_dock), (on_status_icon_activate),
+ (on_menu_activate_open_volume_control),
+ (on_status_icon_popup_menu), (on_status_icon_scroll_event),
+ (gvc_applet_release_grab), (on_dock_button_press), (popdown_dock),
+ (gvc_applet_grab_notify), (on_dock_grab_notify),
+ (on_dock_grab_broken_event), (on_dock_key_release), (update_icon),
+ (on_stream_volume_notify), (on_stream_is_muted_notify),
+ (on_control_ready), (on_bar_is_muted_notify), (gvc_applet_init),
+ (gvc_applet_finalize), (gvc_applet_new):
+ * src/gvc-applet.h:
+ * src/gvc-channel-bar.c (_scale_box_new), (update_image),
+ (update_label), (gvc_channel_bar_set_name),
+ (gvc_channel_bar_set_icon_name), (gvc_channel_bar_set_orientation),
+ (gvc_channel_bar_set_adjustment), (gvc_channel_bar_get_adjustment),
+ (update_mute_button), (gvc_channel_bar_set_is_muted),
+ (gvc_channel_bar_get_is_muted), (gvc_channel_bar_set_property),
+ (gvc_channel_bar_get_property), (gvc_channel_bar_constructor),
+ (gvc_channel_bar_class_init), (on_mute_button_toggled),
+ (gvc_channel_bar_init), (gvc_channel_bar_finalize),
+ (gvc_channel_bar_new):
+ * src/gvc-channel-bar.h:
+ * src/gvc-mixer-control.c (gvc_mixer_control_get_event_sink_input),
+ (gvc_mixer_control_get_default_sink), (listify_hash_values_hfunc),
+ (gvc_stream_collate), (gvc_mixer_control_get_sinks),
+ (gvc_mixer_control_get_sink_inputs), (dec_outstanding),
+ (gvc_mixer_control_is_ready), (update_server), (update_sink),
+ (update_source), (set_icon_name_from_proplist),
+ (update_sink_input), (update_source_output), (update_client),
+ (_pa_context_get_sink_info_cb), (_pa_context_get_source_info_cb),
+ (_pa_context_get_sink_input_info_cb),
+ (_pa_context_get_source_output_info_cb),
+ (_pa_context_get_client_info_cb), (_pa_context_get_server_info_cb),
+ (remove_event_role_stream), (update_event_role_stream),
+ (_pa_ext_stream_restore_read_cb),
+ (_pa_ext_stream_restore_subscribe_cb), (req_update_server_info),
+ (req_update_client_info), (req_update_sink_info),
+ (req_update_source_info), (req_update_sink_input_info),
+ (req_update_source_output_info), (remove_client), (remove_sink),
+ (remove_source), (remove_sink_input), (remove_source_output),
+ (_pa_context_subscribe_cb), (gvc_mixer_control_ready),
+ (_pa_context_state_cb), (gvc_mixer_control_open),
+ (gvc_mixer_control_close), (gvc_mixer_control_dispose),
+ (gvc_mixer_control_constructor), (gvc_mixer_control_class_init),
+ (gvc_mixer_control_init), (gvc_mixer_control_finalize),
+ (gvc_mixer_control_new):
+ * src/gvc-mixer-control.h:
+ * src/gvc-mixer-dialog.c (gvc_mixer_dialog_set_mixer_control),
+ (gvc_mixer_dialog_get_mixer_control),
+ (gvc_mixer_dialog_set_property), (gvc_mixer_dialog_get_property),
+ (on_adjustment_value_changed), (on_bar_is_muted_notify),
+ (lookup_bar_for_stream), (on_stream_volume_notify),
+ (on_stream_is_muted_notify), (save_bar_for_stream), (add_stream),
+ (gvc_mixer_dialog_constructor), (gvc_mixer_dialog_class_init),
+ (gvc_mixer_dialog_init), (gvc_mixer_dialog_finalize),
+ (gvc_mixer_dialog_new):
+ * src/gvc-mixer-dialog.h:
+ * src/gvc-mixer-sink-input.c (gvc_mixer_sink_input_change_volume),
+ (gvc_mixer_sink_input_change_is_muted),
+ (gvc_mixer_sink_input_constructor),
+ (gvc_mixer_sink_input_class_init), (gvc_mixer_sink_input_init),
+ (gvc_mixer_sink_input_finalize), (gvc_mixer_sink_input_new):
+ * src/gvc-mixer-sink-input.h:
+ * src/gvc-mixer-sink.c (gvc_mixer_sink_change_volume),
+ (gvc_mixer_sink_change_is_muted), (gvc_mixer_sink_constructor),
+ (gvc_mixer_sink_class_init), (gvc_mixer_sink_init),
+ (gvc_mixer_sink_finalize), (gvc_mixer_sink_new):
+ * src/gvc-mixer-sink.h:
+ * src/gvc-mixer-stream.c (get_next_stream_serial),
+ (gvc_mixer_stream_get_pa_context), (gvc_mixer_stream_get_index),
+ (gvc_mixer_stream_get_id), (gvc_mixer_stream_get_num_channels),
+ (gvc_mixer_stream_get_volume), (gvc_mixer_stream_set_volume),
+ (gvc_mixer_stream_get_is_muted), (gvc_mixer_stream_get_is_default),
+ (gvc_mixer_stream_set_is_muted), (gvc_mixer_stream_set_is_default),
+ (gvc_mixer_stream_get_name), (gvc_mixer_stream_set_name),
+ (gvc_mixer_stream_get_icon_name), (gvc_mixer_stream_set_icon_name),
+ (gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
+ (gvc_mixer_stream_constructor),
+ (gvc_mixer_stream_real_change_volume),
+ (gvc_mixer_stream_real_change_is_muted),
+ (gvc_mixer_stream_change_volume),
+ (gvc_mixer_stream_change_is_muted), (gvc_mixer_stream_class_init),
+ (gvc_mixer_stream_init), (gvc_mixer_stream_finalize):
+ * src/gvc-mixer-stream.h:
+ Initial commit.
+
diff --git a/mate-volume-control/Makefile.am b/mate-volume-control/Makefile.am
new file mode 100644
index 0000000..0c3fa4c
--- /dev/null
+++ b/mate-volume-control/Makefile.am
@@ -0,0 +1,16 @@
+NULL =
+
+SUBDIRS = \
+ data \
+ src \
+ $(NULL)
+
+EXTRA_DIST = \
+ ChangeLog.pre-2-26 \
+ $(NULL)
+
+MAINTAINERCLEANFILES = \
+ *~ \
+ $(NULL)
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/Makefile.in b/mate-volume-control/Makefile.in
new file mode 100644
index 0000000..94c92f7
--- /dev/null
+++ b/mate-volume-control/Makefile.in
@@ -0,0 +1,647 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in AUTHORS
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+SUBDIRS = \
+ data \
+ src \
+ $(NULL)
+
+EXTRA_DIST = \
+ ChangeLog.pre-2-26 \
+ $(NULL)
+
+MAINTAINERCLEANFILES = \
+ *~ \
+ $(NULL)
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/Makefile.am b/mate-volume-control/data/Makefile.am
new file mode 100644
index 0000000..c580a45
--- /dev/null
+++ b/mate-volume-control/data/Makefile.am
@@ -0,0 +1,29 @@
+NULL =
+
+SUBDIRS = \
+ icons \
+ $(NULL)
+
+@INTLTOOL_DESKTOP_RULE@
+autostartdir = $(sysconfdir)/xdg/autostart
+autostart_in_files = mate-volume-control-applet.desktop.in
+autostart_DATA = $(autostart_in_files:.desktop.in=.desktop)
+
+appsdir = $(datadir)/applications
+apps_in_files = mate-volume-control.desktop.in
+apps_DATA = $(apps_in_files:.desktop.in=.desktop)
+
+EXTRA_DIST = \
+ $(autostart_in_files) \
+ mate-volume-control.desktop.in.in \
+ $(NULL)
+
+CLEANFILES = \
+ mate-volume-control.desktop \
+ $(NULL)
+
+DISTCLEANFILES = \
+ mate-volume-control-applet.desktop \
+ $(NULL)
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/Makefile.in b/mate-volume-control/data/Makefile.in
new file mode 100644
index 0000000..fab6a5b
--- /dev/null
+++ b/mate-volume-control/data/Makefile.in
@@ -0,0 +1,731 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/mate-volume-control.desktop.in.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = mate-volume-control.desktop.in
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(appsdir)" "$(DESTDIR)$(autostartdir)"
+DATA = $(apps_DATA) $(autostart_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+SUBDIRS = \
+ icons \
+ $(NULL)
+
+autostartdir = $(sysconfdir)/xdg/autostart
+autostart_in_files = mate-volume-control-applet.desktop.in
+autostart_DATA = $(autostart_in_files:.desktop.in=.desktop)
+appsdir = $(datadir)/applications
+apps_in_files = mate-volume-control.desktop.in
+apps_DATA = $(apps_in_files:.desktop.in=.desktop)
+EXTRA_DIST = \
+ $(autostart_in_files) \
+ mate-volume-control.desktop.in.in \
+ $(NULL)
+
+CLEANFILES = \
+ mate-volume-control.desktop \
+ $(NULL)
+
+DISTCLEANFILES = \
+ mate-volume-control-applet.desktop \
+ $(NULL)
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+mate-volume-control.desktop.in: $(top_builddir)/config.status $(srcdir)/mate-volume-control.desktop.in.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appsDATA: $(apps_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appsdir)" || $(MKDIR_P) "$(DESTDIR)$(appsdir)"
+ @list='$(apps_DATA)'; test -n "$(appsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appsdir)" || exit $$?; \
+ done
+
+uninstall-appsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(apps_DATA)'; test -n "$(appsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appsdir)" && rm -f $$files
+install-autostartDATA: $(autostart_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(autostartdir)" || $(MKDIR_P) "$(DESTDIR)$(autostartdir)"
+ @list='$(autostart_DATA)'; test -n "$(autostartdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(autostartdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(autostartdir)" || exit $$?; \
+ done
+
+uninstall-autostartDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(autostart_DATA)'; test -n "$(autostartdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(autostartdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(autostartdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(appsdir)" "$(DESTDIR)$(autostartdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-appsDATA install-autostartDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-appsDATA uninstall-autostartDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-appsDATA \
+ install-autostartDATA install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-appsDATA uninstall-autostartDATA
+
+
+@INTLTOOL_DESKTOP_RULE@
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/16x16/Makefile.am b/mate-volume-control/data/icons/16x16/Makefile.am
new file mode 100644
index 0000000..05a9700
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = status
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/16x16/Makefile.in b/mate-volume-control/data/icons/16x16/Makefile.in
new file mode 100644
index 0000000..926ec3d
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/Makefile.in
@@ -0,0 +1,633 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/16x16
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = status
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/16x16/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/16x16/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/16x16/status/Makefile.am b/mate-volume-control/data/icons/16x16/status/Makefile.am
new file mode 100644
index 0000000..041fb3b
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/status/Makefile.am
@@ -0,0 +1,21 @@
+NULL =
+
+themedir = $(pkgdatadir)/icons/mate
+size = 16x16
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/16x16/status/Makefile.in b/mate-volume-control/data/icons/16x16/status/Makefile.in
new file mode 100644
index 0000000..23e6e15
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/status/Makefile.in
@@ -0,0 +1,494 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/16x16/status
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+themedir = $(pkgdatadir)/icons/mate
+size = 16x16
+context = status
+iconsdir = $(themedir)/$(size)/$(context)
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/16x16/status/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/16x16/status/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconsDATA: $(icons_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+ done
+
+uninstall-iconsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(iconsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconsDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconsDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/16x16/status/audio-input-microphone-high.png b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-high.png
new file mode 100644
index 0000000..160d2b8
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-high.png
Binary files differ
diff --git a/mate-volume-control/data/icons/16x16/status/audio-input-microphone-low.png b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-low.png
new file mode 100644
index 0000000..b08ab64
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-low.png
Binary files differ
diff --git a/mate-volume-control/data/icons/16x16/status/audio-input-microphone-medium.png b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-medium.png
new file mode 100644
index 0000000..48a4c05
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-medium.png
Binary files differ
diff --git a/mate-volume-control/data/icons/16x16/status/audio-input-microphone-muted.png b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-muted.png
new file mode 100644
index 0000000..7aed52c
--- /dev/null
+++ b/mate-volume-control/data/icons/16x16/status/audio-input-microphone-muted.png
Binary files differ
diff --git a/mate-volume-control/data/icons/22x22/Makefile.am b/mate-volume-control/data/icons/22x22/Makefile.am
new file mode 100644
index 0000000..05a9700
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = status
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/22x22/Makefile.in b/mate-volume-control/data/icons/22x22/Makefile.in
new file mode 100644
index 0000000..8fb3d42
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/Makefile.in
@@ -0,0 +1,633 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/22x22
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = status
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/22x22/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/22x22/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/22x22/status/Makefile.am b/mate-volume-control/data/icons/22x22/status/Makefile.am
new file mode 100644
index 0000000..53b0a3a
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/status/Makefile.am
@@ -0,0 +1,21 @@
+NULL =
+
+themedir = $(pkgdatadir)/icons/mate
+size = 22x22
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/22x22/status/Makefile.in b/mate-volume-control/data/icons/22x22/status/Makefile.in
new file mode 100644
index 0000000..0941710
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/status/Makefile.in
@@ -0,0 +1,494 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/22x22/status
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+themedir = $(pkgdatadir)/icons/mate
+size = 22x22
+context = status
+iconsdir = $(themedir)/$(size)/$(context)
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/22x22/status/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/22x22/status/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconsDATA: $(icons_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+ done
+
+uninstall-iconsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(iconsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconsDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconsDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/22x22/status/audio-input-microphone-high.png b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-high.png
new file mode 100644
index 0000000..ca3770f
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-high.png
Binary files differ
diff --git a/mate-volume-control/data/icons/22x22/status/audio-input-microphone-low.png b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-low.png
new file mode 100644
index 0000000..75d0612
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-low.png
Binary files differ
diff --git a/mate-volume-control/data/icons/22x22/status/audio-input-microphone-medium.png b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-medium.png
new file mode 100644
index 0000000..c1efeb5
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-medium.png
Binary files differ
diff --git a/mate-volume-control/data/icons/22x22/status/audio-input-microphone-muted.png b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-muted.png
new file mode 100644
index 0000000..9f3dd3c
--- /dev/null
+++ b/mate-volume-control/data/icons/22x22/status/audio-input-microphone-muted.png
Binary files differ
diff --git a/mate-volume-control/data/icons/24x24/Makefile.am b/mate-volume-control/data/icons/24x24/Makefile.am
new file mode 100644
index 0000000..05a9700
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = status
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/24x24/Makefile.in b/mate-volume-control/data/icons/24x24/Makefile.in
new file mode 100644
index 0000000..ac035a1
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/Makefile.in
@@ -0,0 +1,633 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/24x24
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = status
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/24x24/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/24x24/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/24x24/status/Makefile.am b/mate-volume-control/data/icons/24x24/status/Makefile.am
new file mode 100644
index 0000000..9ea93cd
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/status/Makefile.am
@@ -0,0 +1,21 @@
+NULL =
+
+themedir = $(pkgdatadir)/icons/mate
+size = 24x24
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/24x24/status/Makefile.in b/mate-volume-control/data/icons/24x24/status/Makefile.in
new file mode 100644
index 0000000..8f7bde6
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/status/Makefile.in
@@ -0,0 +1,494 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/24x24/status
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+themedir = $(pkgdatadir)/icons/mate
+size = 24x24
+context = status
+iconsdir = $(themedir)/$(size)/$(context)
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/24x24/status/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/24x24/status/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconsDATA: $(icons_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+ done
+
+uninstall-iconsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(iconsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconsDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconsDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/24x24/status/audio-input-microphone-high.png b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-high.png
new file mode 100644
index 0000000..fe10ab2
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-high.png
Binary files differ
diff --git a/mate-volume-control/data/icons/24x24/status/audio-input-microphone-low.png b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-low.png
new file mode 100644
index 0000000..ee180d8
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-low.png
Binary files differ
diff --git a/mate-volume-control/data/icons/24x24/status/audio-input-microphone-medium.png b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-medium.png
new file mode 100644
index 0000000..eb6aa28
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-medium.png
Binary files differ
diff --git a/mate-volume-control/data/icons/24x24/status/audio-input-microphone-muted.png b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-muted.png
new file mode 100644
index 0000000..b969738
--- /dev/null
+++ b/mate-volume-control/data/icons/24x24/status/audio-input-microphone-muted.png
Binary files differ
diff --git a/mate-volume-control/data/icons/32x32/Makefile.am b/mate-volume-control/data/icons/32x32/Makefile.am
new file mode 100644
index 0000000..05a9700
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = status
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/32x32/Makefile.in b/mate-volume-control/data/icons/32x32/Makefile.in
new file mode 100644
index 0000000..2ec1736
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/Makefile.in
@@ -0,0 +1,633 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/32x32
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = status
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/32x32/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/32x32/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/32x32/status/Makefile.am b/mate-volume-control/data/icons/32x32/status/Makefile.am
new file mode 100644
index 0000000..68afbb7
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/status/Makefile.am
@@ -0,0 +1,21 @@
+NULL =
+
+themedir = $(pkgdatadir)/icons/mate
+size = 32x32
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/32x32/status/Makefile.in b/mate-volume-control/data/icons/32x32/status/Makefile.in
new file mode 100644
index 0000000..6bb9ef3
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/status/Makefile.in
@@ -0,0 +1,494 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/32x32/status
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+themedir = $(pkgdatadir)/icons/mate
+size = 32x32
+context = status
+iconsdir = $(themedir)/$(size)/$(context)
+icons_DATA = \
+ audio-input-microphone-high.png \
+ audio-input-microphone-low.png \
+ audio-input-microphone-medium.png \
+ audio-input-microphone-muted.png \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/32x32/status/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/32x32/status/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconsDATA: $(icons_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+ done
+
+uninstall-iconsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(iconsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconsDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconsDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/32x32/status/audio-input-microphone-high.png b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-high.png
new file mode 100644
index 0000000..8bd9d5b
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-high.png
Binary files differ
diff --git a/mate-volume-control/data/icons/32x32/status/audio-input-microphone-low.png b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-low.png
new file mode 100644
index 0000000..8a09c9f
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-low.png
Binary files differ
diff --git a/mate-volume-control/data/icons/32x32/status/audio-input-microphone-medium.png b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-medium.png
new file mode 100644
index 0000000..a45c79c
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-medium.png
Binary files differ
diff --git a/mate-volume-control/data/icons/32x32/status/audio-input-microphone-muted.png b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-muted.png
new file mode 100644
index 0000000..8161f1f
--- /dev/null
+++ b/mate-volume-control/data/icons/32x32/status/audio-input-microphone-muted.png
Binary files differ
diff --git a/mate-volume-control/data/icons/Makefile.am b/mate-volume-control/data/icons/Makefile.am
new file mode 100644
index 0000000..67d9cea
--- /dev/null
+++ b/mate-volume-control/data/icons/Makefile.am
@@ -0,0 +1,25 @@
+NULL =
+
+SUBDIRS = \
+ scalable \
+ 16x16 \
+ 22x22 \
+ 24x24 \
+ 32x32 \
+ $(NULL)
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/mate
+
+install-data-hook: update-icon-cache
+uninstall-hook: update-icon-cache
+update-icon-cache:
+ @-if test -z "$(DESTDIR)"; then \
+ echo "Updating Gtk icon cache."; \
+ $(gtk_update_icon_cache); \
+ else \
+ echo "*** Icon cache not updated. After (un)install, run this:"; \
+ echo "*** $(gtk_update_icon_cache)"; \
+ fi
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/Makefile.in b/mate-volume-control/data/icons/Makefile.in
new file mode 100644
index 0000000..e5084ce
--- /dev/null
+++ b/mate-volume-control/data/icons/Makefile.in
@@ -0,0 +1,656 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+SUBDIRS = \
+ scalable \
+ 16x16 \
+ 22x22 \
+ 24x24 \
+ 32x32 \
+ $(NULL)
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/mate
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-data-am install-strip tags-recursive \
+ uninstall-am
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-data-hook install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am uninstall-hook
+
+
+install-data-hook: update-icon-cache
+uninstall-hook: update-icon-cache
+update-icon-cache:
+ @-if test -z "$(DESTDIR)"; then \
+ echo "Updating Gtk icon cache."; \
+ $(gtk_update_icon_cache); \
+ else \
+ echo "*** Icon cache not updated. After (un)install, run this:"; \
+ echo "*** $(gtk_update_icon_cache)"; \
+ fi
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/scalable/Makefile.am b/mate-volume-control/data/icons/scalable/Makefile.am
new file mode 100644
index 0000000..2cf31cf
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = status devices
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/scalable/Makefile.in b/mate-volume-control/data/icons/scalable/Makefile.in
new file mode 100644
index 0000000..d3fb19d
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/Makefile.in
@@ -0,0 +1,633 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/scalable
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = status devices
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/scalable/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/scalable/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/scalable/devices/Makefile.am b/mate-volume-control/data/icons/scalable/devices/Makefile.am
new file mode 100644
index 0000000..e22cb77
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/Makefile.am
@@ -0,0 +1,35 @@
+NULL =
+
+themedir = $(pkgdatadir)/icons/mate
+size = 48x48
+context = devices
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ audio-speaker-center.svg \
+ audio-speaker-center-testing.svg \
+ audio-speaker-left-back.svg \
+ audio-speaker-left-back-testing.svg \
+ audio-speaker-left.svg \
+ audio-speaker-left-side.svg \
+ audio-speaker-left-side-testing.svg \
+ audio-speaker-left-testing.svg \
+ audio-speaker-right-back.svg \
+ audio-speaker-right-back-testing.svg \
+ audio-speaker-right.svg \
+ audio-speaker-right-side.svg \
+ audio-speaker-right-side-testing.svg \
+ audio-speaker-right-testing.svg \
+ audio-speaker-center-back-testing.svg \
+ audio-speaker-center-back.svg \
+ audio-subwoofer.svg \
+ audio-subwoofer-testing.svg \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/scalable/devices/Makefile.in b/mate-volume-control/data/icons/scalable/devices/Makefile.in
new file mode 100644
index 0000000..e5aa46b
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/Makefile.in
@@ -0,0 +1,508 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/scalable/devices
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+themedir = $(pkgdatadir)/icons/mate
+size = 48x48
+context = devices
+iconsdir = $(themedir)/$(size)/$(context)
+icons_DATA = \
+ audio-speaker-center.svg \
+ audio-speaker-center-testing.svg \
+ audio-speaker-left-back.svg \
+ audio-speaker-left-back-testing.svg \
+ audio-speaker-left.svg \
+ audio-speaker-left-side.svg \
+ audio-speaker-left-side-testing.svg \
+ audio-speaker-left-testing.svg \
+ audio-speaker-right-back.svg \
+ audio-speaker-right-back-testing.svg \
+ audio-speaker-right.svg \
+ audio-speaker-right-side.svg \
+ audio-speaker-right-side-testing.svg \
+ audio-speaker-right-testing.svg \
+ audio-speaker-center-back-testing.svg \
+ audio-speaker-center-back.svg \
+ audio-subwoofer.svg \
+ audio-subwoofer-testing.svg \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/scalable/devices/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/scalable/devices/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconsDATA: $(icons_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+ done
+
+uninstall-iconsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(iconsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconsDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconsDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back-testing.svg
new file mode 100644
index 0000000..93afe0b
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back-testing.svg
@@ -0,0 +1,539 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.47 r22583"
+ version="1.0"
+ sodipodi:docname="audio-speaker-center-back-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-side-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="977"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>center</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-center-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(1,0,0,-1,-50.334601,47.958369)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="m 64.325669,10.506413 c 6.07143,-3.4821397 13.14286,-3.3928497 19.39286,0 l 2,4.39286 -23.39286,0 2,-4.39286 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="m 95.897099,27.934983 c 0,0 -4.54743,-8.68677 -9.8613,-12.93926 -0.21063,-0.16856 -0.42247,-0.33016 -0.63527,-0.48397 -0.50204,-0.36286 -1.00946,-0.68239 -1.51919,-0.94787 -0.56896,-0.29634 -1.14078,-0.52533 -1.71117,-0.67205 -3.88321,-1.01934 -11.71652,-1.06249 -15.58966,-0.04613 -0.83989,0.21914 -1.6816,0.61173 -2.51203,1.13191 -0.62524,0.39166 -1.24409,0.85564 -1.85095,1.37236 -1.87112,1.5932 -3.628309,3.68784 -5.107769,5.71001 -2.59659,3.54911 -4.33766,6.875 -4.33766,6.875"
+ style="fill:none;stroke:none"
+ id="path8494" />
+ <path
+ style="fill:none;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 62.827469,15.979023 2.18704,-4.766 c 5.261057,-2.7432797 11.220313,-3.3671697 17.939063,-0.0056 l 1.96851,4.2035"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 95.001579,28.523883 c 0,0 -6.30803,-12.92857 -13.07068,-14.66816 -3.88321,-1.01933 -11.18527,-1.06248 -15.05841,-0.04613 -6.84412,1.78572 -11.839659,12.46429 -11.839659,12.46429"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="m 43.214285,32.24107 c 0,2.736768 -9.374038,4.955357 -20.9375,4.955357 -11.563462,0 -20.9375001,-2.218589 -20.9375001,-4.955357 0,-2.736768 9.3740381,-4.955357 20.9375001,-4.955357 11.563462,0 20.9375,2.218589 20.9375,4.955357 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="m 95.16001,29.859216 c 0.1894,4.408221 -8.80985,9.066057 -20.909493,9.066057 -12.099643,0 -21.130461,-4.594701 -20.90949,-9.066057 -0.189403,-4.566056 8.809847,-9.034489 20.90949,-9.034489 12.099643,0 20.941063,4.37373 20.909493,9.034489 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 82.142459,27.943913 c -0.67407,2.18776 -3.2897,3.38538 -7.80786,3.38538 -4.51815,0 -7.3487,-1.37717 -7.80786,-3.38538 -0.07073,-1.70502 3.28971,-3.37359 7.80786,-3.37359 4.51816,0 7.81965,1.63321 7.80786,3.37359 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 67.476989,27.764793 c 0.9704,3.07926 3.66898,5.29604 6.84343,5.29605 3.19412,0 5.90648,-2.24438 6.86128,-5.35345 -0.90064,-1.50063 -4.28117,-2.23685 -6.89061,-2.19358 -3.30434,-0.08574 -5.85648,0.85968 -6.8141,2.25098 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 62.722179,14.847493 c -0.12704,0.1026 -0.3786,0.39515 -0.50465,0.50248 -1.87112,1.5932 -3.628309,3.68784 -5.107769,5.71001 -2.59659,3.54911 -4.33766,6.875 -4.33766,6.875 m 43.124999,0 c 0,0 -4.54743,-8.68677 -9.8613,-12.93926 -0.21063,-0.16856 -0.42247,-0.33016 -0.63527,-0.48397 -0.10052,-0.07265 -0.648157,-0.29253 -0.749077,-0.36162"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 81.930899,13.855723 c -3.88321,-1.01933 -11.18527,-1.06248 -15.05841,-0.04613"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back.svg
new file mode 100644
index 0000000..7d278f8
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-back.svg
@@ -0,0 +1,506 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.47 r22583"
+ version="1.0"
+ sodipodi:docname="audio-speaker-center-back.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-53.025818"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="977"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>center</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-center</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(1,0,0,-1,-0.04163061,47.958369)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="m 14.032699,10.506413 c 6.07143,-3.4821397 13.14286,-3.3928497 19.39286,0 l 2,4.39286 -23.39286,0 2,-4.39286 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="m 45.604129,27.934983 c 0,0 -4.54743,-8.68677 -9.8613,-12.93926 -0.21063,-0.16856 -0.42247,-0.33016 -0.63527,-0.48397 -0.50204,-0.36286 -1.00946,-0.68239 -1.51919,-0.94787 -0.56896,-0.29634 -1.14078,-0.52533 -1.71117,-0.67205 -3.88321,-1.01934 -11.71652,-1.06249 -15.58966,-0.04613 -0.83989,0.21914 -1.6816,0.61173 -2.51203,1.13191 -0.62524,0.39166 -1.24409,0.85564 -1.85095,1.37236 -1.87112,1.5932 -3.6283094,3.68784 -5.1077694,5.71001 -2.59659,3.54911 -4.33766,6.875 -4.33766,6.875"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path5367" />
+ <path
+ style="fill:none;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 12.534499,15.979023 2.18704,-4.766 c 5.261057,-2.7432797 11.220313,-3.3671697 17.939063,-0.0056 l 1.96851,4.2035"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 44.708609,28.523883 c 0,0 -6.30803,-12.92857 -13.07068,-14.66816 -3.88321,-1.01933 -11.18527,-1.06248 -15.05841,-0.04613 -6.8441198,1.78572 -11.8396594,12.46429 -11.8396594,12.46429"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="m 43.214285,32.24107 c 0,2.736768 -9.374038,4.955357 -20.9375,4.955357 -11.563462,0 -20.9375001,-2.218589 -20.9375001,-4.955357 0,-2.736768 9.3740381,-4.955357 20.9375001,-4.955357 11.563462,0 20.9375,2.218589 20.9375,4.955357 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 44.951119,29.943913 c 0.18941,4.40822 -8.80985,9.06606 -20.90949,9.06606 -12.09964,0 -21.1304594,-4.5947 -20.9094894,-9.06606 -0.1894,-4.56606 8.8098494,-9.03449 20.9094894,-9.03449 12.09964,0 20.94106,4.37373 20.90949,9.03449 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 31.849489,27.943913 c -0.67407,2.18776 -3.2897,3.38538 -7.80786,3.38538 -4.51815,0 -7.3487,-1.37717 -7.80786,-3.38538 -0.07073,-1.70502 3.28971,-3.37359 7.80786,-3.37359 4.51816,0 7.81965,1.63321 7.80786,3.37359 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 17.184019,27.764793 c 0.9704,3.07926 3.66898,5.29604 6.84343,5.29605 3.19412,0 5.90648,-2.24438 6.86128,-5.35345 -0.90064,-1.50063 -4.28117,-2.23685 -6.89061,-2.19358 -3.30434,-0.08574 -5.85648,0.85968 -6.8141,2.25098 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 12.429209,14.847493 c -0.12704,0.1026 -0.3786,0.39515 -0.50465,0.50248 -1.87112,1.5932 -3.6283094,3.68784 -5.1077694,5.71001 -2.59659,3.54911 -4.33766,6.875 -4.33766,6.875 m 43.1249994,0 c 0,0 -4.54743,-8.68677 -9.8613,-12.93926 -0.21063,-0.16856 -0.42247,-0.33016 -0.63527,-0.48397 -0.10052,-0.07265 -0.648157,-0.29253 -0.749077,-0.36162"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 31.637929,13.855723 c -3.88321,-1.01933 -11.18527,-1.06248 -15.05841,-0.04613"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-testing.svg
new file mode 100644
index 0000000..09f40bc
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center-testing.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-center-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-side-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>center</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-center-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="translate(-50.334601,4.1631076e-2)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-center.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center.svg
new file mode 100644
index 0000000..886b4b8
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-center.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-center.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-53.025818"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="25"
+ inkscape:window-y="21"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>center</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-center</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="translate(-4.1630606e-2,4.1631076e-2)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back-testing.svg
new file mode 100644
index 0000000..e1618fc
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back-testing.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-left-back-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>left-back</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-left-b-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(-0.7071068,-0.7071068,0.7071068,-0.7071068,57.052876,95.851156)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back.svg
new file mode 100644
index 0000000..d7a6f43
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-back.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-left-back.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-53.376308"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1601"
+ inkscape:window-height="942"
+ inkscape:window-x="5"
+ inkscape:window-y="1"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>left-back</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-left-back</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(-0.7071068,-0.7071068,0.7071068,-0.7071068,21.490375,60.288654)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side-testing.svg
new file mode 100644
index 0000000..ad0f430
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side-testing.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-left-side-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-right-side-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>left-side</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-left-side-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(0,-1,1,0,4.1631076e-2,98.334601)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side.svg
new file mode 100644
index 0000000..4851454
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-side.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-left-side.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-side.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-15.988037"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1601"
+ inkscape:window-height="942"
+ inkscape:window-x="5"
+ inkscape:window-y="1"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>left-side</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-left-side</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(0,-1,1,0,4.1631076e-2,48.041631)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-testing.svg
new file mode 100644
index 0000000..7b9316f
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left-testing.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-left-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-back-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>left</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-left-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(-0.7071068,0.7071068,0.7071068,0.7071068,57.052876,-47.851155)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-left.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left.svg
new file mode 100644
index 0000000..1ee3869
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-left.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-left.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-right.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-53.376308"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1601"
+ inkscape:window-height="942"
+ inkscape:window-x="5"
+ inkscape:window-y="1"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>left</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-left</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(-0.7071068,0.7071068,0.7071068,0.7071068,21.490375,-12.288654)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back-testing.svg
new file mode 100644
index 0000000..0f633a9
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back-testing.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-right-back-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-back-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>right-back</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-right-back-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(0.7071068,-0.7071068,-0.7071068,-0.7071068,-9.0528759,95.851156)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back.svg
new file mode 100644
index 0000000..ba1dead
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-back.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-right-back.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-left-back.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-53.376308"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1601"
+ inkscape:window-height="942"
+ inkscape:window-x="5"
+ inkscape:window-y="1"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>right-back</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-right-back</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(0.7071068,-0.7071068,-0.7071068,-0.7071068,26.509625,60.288654)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side-testing.svg
new file mode 100644
index 0000000..577dd86
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side-testing.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-right-side-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-right-back-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>right-side</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-right-side-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(0,-1,-1,0,47.958369,98.334601)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side.svg
new file mode 100644
index 0000000..be6a746
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-side.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-right-side.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-right-back.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-15.988037"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1601"
+ inkscape:window-height="942"
+ inkscape:window-x="5"
+ inkscape:window-y="1"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>right-side</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-right-side</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(0,-1,-1,0,47.958369,48.041631)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-testing.svg
new file mode 100644
index 0000000..3a4e903
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right-testing.svg
@@ -0,0 +1,913 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-right-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker-right-testing.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="radialGradient5941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(11.322482,0,0,3.7410569,-790.12434,122.56351)"
+ cx="14.790665"
+ cy="29.860626"
+ fx="14.790665"
+ fy="29.860626"
+ r="1.1399525" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="radialGradient5939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(10.171038,0,0,5.2502725,-797.43964,77.21735)"
+ cx="17.797972"
+ cy="29.948833"
+ fx="17.797972"
+ fy="29.948833"
+ r="1.945146" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6377">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1"
+ offset="0"
+ id="stop6379" />
+ <stop
+ style="stop-color:#204a87;stop-opacity:1"
+ offset="1"
+ id="stop6381" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="radialGradient5937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(15.4058,0,0,6.5714191,-930.81786,37.58535)"
+ cx="20.818829"
+ cy="29.948536"
+ fx="20.818829"
+ fy="29.948536"
+ r="2.5451017" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5254"
+ id="linearGradient5935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0714931,0,0,1.2212999,-677.47231,206.91558)"
+ x1="21.875"
+ y1="9.6335878"
+ x2="20.5"
+ y2="41.744865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10055"
+ id="linearGradient5933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0714931,0,0,1.2212999,-677.47231,206.91558)"
+ x1="20.087172"
+ y1="6.6629219"
+ x2="20.91938"
+ y2="38.337017" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5254"
+ id="linearGradient5931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6831088,0,0,1.0329054,-652.67404,212.26374)"
+ x1="4.5961943"
+ y1="14.456622"
+ x2="4.5961943"
+ y2="30.313524" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10055"
+ id="linearGradient5929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7679166,0,0,1.687933,-652.72155,185.35433)"
+ x1="2.6850162"
+ y1="24.367676"
+ x2="2.9248238"
+ y2="35.053852" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient21582">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop21584" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop21586" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21582"
+ id="linearGradient5927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0102994,0,0,1.2565202,-654.12827,206.16954)"
+ x1="21.875"
+ y1="26.625"
+ x2="18.187626"
+ y2="26" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient21598">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop21600" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop21602" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21598"
+ id="linearGradient5925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7830101,0,0,0.9810567,-652.01527,212.32101)"
+ x1="12.25"
+ y1="19.75"
+ x2="10.875"
+ y2="33.125" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10055"
+ id="radialGradient5923"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.433087,-0.596698,0.798238,1.917124,-20.96864,-16.43019)"
+ cx="7.001297"
+ cy="22.470087"
+ fx="7.001297"
+ fy="22.470087"
+ r="6.4940691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10872"
+ id="linearGradient5921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0102994,0,0,1.0172401,-654.21562,212.46274)"
+ x1="3.8890872"
+ y1="18.937069"
+ x2="3.8890872"
+ y2="25.947107" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5254"
+ id="linearGradient5919"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99664,0,0,1.1932745,-655.42965,207.54612)"
+ x1="11.875"
+ y1="20.375"
+ x2="13.125"
+ y2="34.13559" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6371"
+ id="linearGradient5917"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99664,0,0,1.1932745,-655.42965,207.54612)"
+ x1="14.241117"
+ y1="26.996773"
+ x2="15.125"
+ y2="20.976084" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21608"
+ id="linearGradient5915"
+ gradientUnits="userSpaceOnUse"
+ x1="23.272787"
+ y1="18.525478"
+ x2="23.272787"
+ y2="22.811184" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15341"
+ id="radialGradient5913"
+ gradientUnits="userSpaceOnUse"
+ cx="22.624176"
+ cy="20.880224"
+ fx="22.624176"
+ fy="20.880224"
+ r="3.3177083" />
+ <linearGradient
+ id="linearGradient3529">
+ <stop
+ id="stop3531"
+ offset="0"
+ style="stop-color:#fefefe;stop-opacity:1;" />
+ <stop
+ id="stop3533"
+ offset="1"
+ style="stop-color:#e8e7e6;stop-opacity:1;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3529"
+ id="radialGradient5911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2876712,0,13.845354)"
+ cx="7.9549513"
+ cy="19.436747"
+ fx="7.9549513"
+ fy="19.436747"
+ r="6.4523492" />
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3345"
+ id="radialGradient5554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.725459,40.419065)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient8512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3529"
+ id="radialGradient5708"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2876712,0,13.845354)"
+ cx="7.9549513"
+ cy="19.436747"
+ fx="7.9549513"
+ fy="19.436747"
+ r="6.4523492" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15341"
+ id="radialGradient5710"
+ gradientUnits="userSpaceOnUse"
+ cx="22.624176"
+ cy="20.880224"
+ fx="22.624176"
+ fy="20.880224"
+ r="3.3177083" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21608"
+ id="linearGradient5712"
+ gradientUnits="userSpaceOnUse"
+ x1="23.272787"
+ y1="18.525478"
+ x2="23.272787"
+ y2="22.811184" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10055"
+ id="radialGradient5720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.433087,-0.596698,0.798238,1.917124,-20.96864,-16.43019)"
+ cx="7.001297"
+ cy="22.470087"
+ fx="7.001297"
+ fy="22.470087"
+ r="6.4940691" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="radialGradient5744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-8.0062038,8.0062038,-2.6453267,-2.6453267,292.61535,-42.156174)"
+ cx="14.790665"
+ cy="29.860626"
+ fx="14.790665"
+ fy="29.860626"
+ r="1.1399525" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="radialGradient5747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-7.1920099,7.1920099,-3.7125033,-3.7125033,329.85262,-15.264295)"
+ cx="17.797972"
+ cy="29.948833"
+ fx="17.797972"
+ fy="29.948833"
+ r="1.945146" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6377"
+ id="radialGradient5750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-10.893546,10.893546,-4.646695,-4.646695,452.18932,-81.552883)"
+ cx="20.818829"
+ cy="29.948536"
+ fx="20.818829"
+ fy="29.948536"
+ r="2.5451017" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10055"
+ id="linearGradient5753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0714931,0,0,1.2212999,31.77769,-26.9466)"
+ x1="20.087172"
+ y1="6.6629219"
+ x2="20.91938"
+ y2="38.337017" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5254"
+ id="linearGradient5755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.0714931,0,0,1.2212999,31.77769,-26.9466)"
+ x1="21.875"
+ y1="9.6335878"
+ x2="20.5"
+ y2="41.744865" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10055"
+ id="linearGradient5758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7679166,0,0,1.687933,56.52845,-48.50785)"
+ x1="2.6850162"
+ y1="24.367676"
+ x2="2.9248238"
+ y2="35.053852" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5254"
+ id="linearGradient5760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6831088,0,0,1.0329054,56.57596,-21.59844)"
+ x1="4.5961943"
+ y1="14.456622"
+ x2="4.5961943"
+ y2="30.313524" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21582"
+ id="linearGradient5763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0102994,0,0,1.2565202,55.12173,-27.69264)"
+ x1="21.875"
+ y1="26.625"
+ x2="18.187626"
+ y2="26" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21598"
+ id="linearGradient5766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7830101,0,0,0.9810567,57.23473,-21.54117)"
+ x1="12.25"
+ y1="19.75"
+ x2="10.875"
+ y2="33.125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10872"
+ id="linearGradient5770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0102994,0,0,1.0172401,55.03438,-21.39944)"
+ x1="3.8890872"
+ y1="18.937069"
+ x2="3.8890872"
+ y2="25.947107" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6371"
+ id="linearGradient5773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99664,0,0,1.1932745,53.82035,-26.31606)"
+ x1="14.241117"
+ y1="26.996773"
+ x2="15.125"
+ y2="20.976084" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5254"
+ id="linearGradient5775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99664,0,0,1.1932745,53.82035,-26.31606)"
+ x1="11.875"
+ y1="20.375"
+ x2="13.125"
+ y2="34.13559" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,97.72545,40.294064)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="126.80533"
+ inkscape:cy="41.532441"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="-12"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-14.142136,73.185552"
+ id="guide3490" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-21,-23.25"
+ id="guide5857" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="-49.5,-22.625"
+ id="guide5859" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>right</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-right-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g8490"
+ transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,-9.0528759,-47.851156)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8492"
+ d="M 64.325669,10.506413 C 70.397099,7.0242733 77.468529,7.1135633 83.718529,10.506413 L 85.718529,14.899273 L 62.325669,14.899273 L 64.325669,10.506413 z"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 84.898489,14.148893 84.391069,13.829363 83.881339,13.563883 C 83.312379,13.267543 82.740559,13.038553 82.170169,12.891833 C 78.286959,11.872493 70.453649,11.829343 66.580509,12.845703 C 65.740619,13.064843 64.898909,13.457433 64.068479,13.977613 C 63.443239,14.369273 62.824389,14.833253 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8494" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.827469,15.979023 L 65.014509,11.213023 C 70.275566,8.4697433 76.234822,7.8458533 82.953572,11.207463 L 84.922082,15.410963"
+ id="path8496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 95.001579,28.523883 C 95.001579,28.523883 88.693549,15.595313 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593 C 60.028369,15.595313 55.03283,26.273883 55.03283,26.273883"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path8498" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,51.01285,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path8500"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8502"
+ d="M 95.16001,29.859216 C 95.34941,34.267437 86.35016,38.925273 74.250517,38.925273 C 62.150874,38.925273 53.120056,34.330572 53.341027,29.859216 C 53.151624,25.29316 62.150874,20.824727 74.250517,20.824727 C 86.35016,20.824727 95.19158,25.198457 95.16001,29.859216 z"
+ style="fill:url(#radialGradient8512);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 82.142459,27.943913 C 81.468389,30.131673 78.852759,31.329293 74.334599,31.329293 C 69.816449,31.329293 66.985899,29.952123 66.526739,27.943913 C 66.456009,26.238893 69.816449,24.570323 74.334599,24.570323 C 78.852759,24.570323 82.154249,26.203533 82.142459,27.943913 z"
+ id="path8504"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67.476989,27.764793 C 68.447389,30.844053 71.145969,33.060833 74.320419,33.060843 C 77.514539,33.060843 80.226899,30.816463 81.181699,27.707393 C 80.281059,26.206763 76.900529,25.470543 74.291089,25.513813 C 70.986749,25.428073 68.434609,26.373493 67.476989,27.764793 z"
+ id="path8506"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path8508"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 62.722179,14.847493 C 62.595139,14.950093 62.343579,15.242643 62.217529,15.349973 C 60.346409,16.943173 58.58922,19.037813 57.10976,21.059983 C 54.51317,24.609093 52.7721,27.934983 52.7721,27.934983 M 95.897099,27.934983 C 95.897099,27.934983 91.349669,19.248213 86.035799,14.995723 C 85.825169,14.827163 85.613329,14.665563 85.400529,14.511753 C 85.300009,14.439103 84.752372,14.219223 84.651452,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path8510"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#bfd8f3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 81.930899,13.855723 C 78.047689,12.836393 70.745629,12.793243 66.872489,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-speaker-right.svg b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right.svg
new file mode 100644
index 0000000..bde2e35
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-speaker-right.svg
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-speaker-right.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-speaker.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4325">
+ <stop
+ id="stop4327"
+ offset="0"
+ style="stop-color:#2e3436;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient21608">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop21610" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="1"
+ id="stop21612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15341">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop15343" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop15345" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6371">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="0"
+ id="stop6373" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop6375" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10872">
+ <stop
+ id="stop10874"
+ offset="0"
+ style="stop-color:#888a85;stop-opacity:1" />
+ <stop
+ style="stop-color:#9e9e92;stop-opacity:1;"
+ offset="0.25301206"
+ id="stop10876" />
+ <stop
+ id="stop10878"
+ offset="1"
+ style="stop-color:#555753;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5254">
+ <stop
+ id="stop5256"
+ offset="0"
+ style="stop-color:#707469;stop-opacity:1;" />
+ <stop
+ id="stop5258"
+ offset="1"
+ style="stop-color:#2e3335;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10055">
+ <stop
+ style="stop-color:#bebebe;stop-opacity:1;"
+ offset="0"
+ id="stop10057" />
+ <stop
+ id="stop10061"
+ offset="0.375"
+ style="stop-color:#e8e8e8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1;"
+ offset="1"
+ id="stop10059" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4841">
+ <stop
+ id="stop4843"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:0.94117647;"
+ offset="0"
+ id="stop4845" />
+ <stop
+ id="stop4847"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop4849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop4811" />
+ <stop
+ id="stop4813"
+ offset="0"
+ style="stop-color:#ad7fa8;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop4815" />
+ <stop
+ id="stop4817"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3239" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3501"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2366258,0,24.617945)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient3232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.474934,42.420392)"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0469084,0,0,0.4796469,270.37856,38.427671)"
+ cx="22.276291"
+ cy="32.248856"
+ fx="22.276291"
+ fy="32.248856"
+ r="20.319138" />
+ <inkscape:perspective
+ id="perspective3474"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-52.447261,-106.14795)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,42.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient5062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4325"
+ id="radialGradient5064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,98.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,142.72007,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient3906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,92.720075,-107.89847)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient7260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,47.516569,40.378763)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="-90.590866"
+ inkscape:cy="20.556657"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1601"
+ inkscape:window-height="942"
+ inkscape:window-x="5"
+ inkscape:window-y="1"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>speaker</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>right</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-speaker-right</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g7248"
+ transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,26.509625,-12.288654)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path5365"
+ d="M 14.032699,10.506413 C 20.104129,7.0242733 27.175559,7.1135633 33.425559,10.506413 L 35.425559,14.899273 L 12.032699,14.899273 L 14.032699,10.506413 z"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="csssccsssc"
+ d="M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 34.605519,14.148893 34.098099,13.829363 33.588369,13.563883 C 33.019409,13.267543 32.447589,13.038553 31.877199,12.891833 C 27.993989,11.872493 20.160679,11.829343 16.287539,12.845703 C 15.447649,13.064843 14.605939,13.457433 13.775509,13.977613 C 13.150269,14.369273 12.531419,14.833253 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983"
+ style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5367" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#888a83;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.534499,15.979023 L 14.721539,11.213023 C 19.982596,8.4697433 25.941852,7.8458533 32.660602,11.207463 L 34.629112,15.410963"
+ id="path5369"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 44.708609,28.523883 C 44.708609,28.523883 38.400579,15.595313 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593 C 9.7353992,15.595313 4.7398596,26.273883 4.7398596,26.273883"
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5371" />
+ <path
+ transform="matrix(1.0469083,0,0,2.027027,0.7198796,-35.409607)"
+ d="M 43.214285,32.24107 A 20.9375,4.9553571 0 1 1 1.3392849,32.24107 A 20.9375,4.9553571 0 1 1 43.214285,32.24107 z"
+ sodipodi:ry="4.9553571"
+ sodipodi:rx="20.9375"
+ sodipodi:cy="32.24107"
+ sodipodi:cx="22.276785"
+ id="path5373"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.68646109;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#radialGradient7260);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 44.951119,29.943913 C 45.140529,34.352133 36.141269,39.009973 24.041629,39.009973 C 11.941989,39.009973 2.9111696,34.415273 3.1321396,29.943913 C 2.9427396,25.377853 11.941989,20.909423 24.041629,20.909423 C 36.141269,20.909423 44.982689,25.283153 44.951119,29.943913 z"
+ id="path5375"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 31.849489,27.943913 C 31.175419,30.131673 28.559789,31.329293 24.041629,31.329293 C 19.523479,31.329293 16.692929,29.952123 16.233769,27.943913 C 16.163039,26.238893 19.523479,24.570323 24.041629,24.570323 C 28.559789,24.570323 31.861279,26.203533 31.849489,27.943913 z"
+ id="path5377"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.96596354;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 17.184019,27.764793 C 18.154419,30.844053 20.852999,33.060833 24.027449,33.060843 C 27.221569,33.060843 29.933929,30.816463 30.888729,27.707393 C 29.988089,26.206763 26.607559,25.470543 23.998119,25.513813 C 20.693779,25.428073 18.141639,26.373493 17.184019,27.764793 z"
+ id="path5379"
+ sodipodi:nodetypes="csccc"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_Test.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998" />
+ <path
+ id="path5381"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 12.429209,14.847493 C 12.302169,14.950093 12.050609,15.242643 11.924559,15.349973 C 10.053439,16.943173 8.2962496,19.037813 6.8167896,21.059983 C 4.2201996,24.609093 2.4791296,27.934983 2.4791296,27.934983 M 45.604129,27.934983 C 45.604129,27.934983 41.056699,19.248213 35.742829,14.995723 C 35.532199,14.827163 35.320359,14.665563 35.107559,14.511753 C 35.007039,14.439103 34.459402,14.219223 34.358482,14.150133"
+ sodipodi:nodetypes="cssccsss" />
+ <path
+ id="path5383"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 31.637929,13.855723 C 27.754719,12.836393 20.452659,12.793243 16.579519,13.809593"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-subwoofer-testing.svg b/mate-volume-control/data/icons/scalable/devices/audio-subwoofer-testing.svg
new file mode 100644
index 0000000..6ae74ba
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-subwoofer-testing.svg
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-subwoofer-testing.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/audio-subwoofer-testing.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient6718">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop6720" />
+ <stop
+ id="stop6724"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ id="stop3505"
+ offset="0"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6984"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8284271"
+ inkscape:cx="-48.821714"
+ inkscape:cy="66.867859"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>subwoofer</rdf:li>
+ <rdf:li>output</rdf:li>
+ <rdf:li>testing</rdf:li>
+ <rdf:li>highlighted</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-subwoofer-testing</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g6973"
+ transform="translate(-51.375,9.0155254e-8)">
+ <path
+ style="fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 94.217316,39.045143 C 93.839661,41.471941 92.789441,43.219015 91.55403,43.219015 C 90.310955,43.219015 89.255378,41.450202 88.883794,38.999908 C 89.234301,37.817247 90.549918,37.23702 91.565441,37.271125 C 92.851403,37.203551 93.844629,37.948644 94.217316,39.045143 z"
+ id="path6730"
+ sodipodi:nodetypes="csccc" />
+ <path
+ sodipodi:nodetypes="csccc"
+ id="path6732"
+ d="M 62.393985,39.045143 C 62.016329,41.471941 60.96611,43.219015 59.730698,43.219015 C 58.487624,43.219015 57.432046,41.450202 57.060462,38.999908 C 57.410969,37.817247 58.726586,37.23702 59.742109,37.271125 C 61.028072,37.203551 62.021297,37.948644 62.393985,39.045143 z"
+ style="fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1.28661346;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 62.953967,6.9788731 C 73.409478,4.1293728 77.293929,4.3517447 87.917557,6.9788731 L 95.317117,13.152471 L 55.554408,13.152471 L 62.953967,6.9788731 z"
+ id="path6734"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 55.289577,13.137135 C 67.861736,9.7856746 82.504598,9.8716096 95.446529,13.137135 L 95.389975,39.76734 C 82.177445,42.114593 68.287824,42.159732 55.346132,39.902758 L 55.289577,13.137135 z"
+ id="path6736"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient6984);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:2.05839419;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path6738"
+ sodipodi:cx="84.365685"
+ sodipodi:cy="64.927307"
+ sodipodi:rx="21.396112"
+ sodipodi:ry="21.396112"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ transform="matrix(0,0.4858156,-0.4858156,0,100.43255,-14.78506)" />
+ <path
+ transform="matrix(0,0.2827849,-0.2827849,0,105.0933,2.3437637)"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ sodipodi:ry="21.396112"
+ sodipodi:rx="21.396112"
+ sodipodi:cy="64.927307"
+ sodipodi:cx="84.365685"
+ id="path6740"
+ style="fill:#bfd8f3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.53625679;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:5.06734753;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path6742"
+ sodipodi:cx="84.365685"
+ sodipodi:cy="64.927307"
+ sodipodi:rx="21.396112"
+ sodipodi:ry="21.396112"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ transform="matrix(0,0.1973419,-0.1973419,0,99.523923,9.5522206)" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path6744"
+ d="M 56.321159,13.950789 C 67.82398,10.961669 81.161179,10.935259 94.415609,13.950789 L 94.359059,38.893489 C 81.01047,40.978079 68.381909,41.160879 56.377709,39.028909 L 56.321159,13.950789 z"
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bfd8f3;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ transform="matrix(0,0.1973419,-0.1973419,0,81.702733,9.5522212)"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ sodipodi:ry="21.396112"
+ sodipodi:rx="21.396112"
+ sodipodi:cy="64.927307"
+ sodipodi:cx="84.365685"
+ id="path6746"
+ style="fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:5.06734753;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/devices/audio-subwoofer.svg b/mate-volume-control/data/icons/scalable/devices/audio-subwoofer.svg
new file mode 100644
index 0000000..dbed916
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/devices/audio-subwoofer.svg
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2643"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="audio-subwoofer.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/eve/Documents/MATE/SpeakerIcon_subwoofer.png"
+ inkscape:export-xdpi="67.489998"
+ inkscape:export-ydpi="67.489998">
+ <defs
+ id="defs2645">
+ <linearGradient
+ id="linearGradient6718">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop6720" />
+ <stop
+ id="stop6724"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3345">
+ <stop
+ id="stop3347"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3351" />
+ <stop
+ id="stop3355"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4391" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient5385"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0538312,-6.3027391e-8,1.2877417e-8,-0.7232676,-9.0519739,70.961132)"
+ spreadMethod="pad"
+ cx="22.276297"
+ cy="21.099283"
+ fx="22.276297"
+ fy="21.099283"
+ r="20.319138" />
+ <linearGradient
+ id="linearGradient3503">
+ <stop
+ id="stop3505"
+ offset="0"
+ style="stop-color:#eeeeec;stop-opacity:1;" />
+ <stop
+ id="stop3507"
+ offset="1"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2651" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6516"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6612"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3503"
+ id="radialGradient6705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7451713,-0.7451712,0.5114274,0.5114274,10.506623,78.557248)"
+ spreadMethod="reflect"
+ cx="22.276291"
+ cy="21.520338"
+ fx="22.276291"
+ fy="21.520338"
+ r="20.319138" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6718"
+ id="radialGradient6716"
+ gradientUnits="userSpaceOnUse"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578"
+ gradientTransform="matrix(0.8545182,0,0,0.753115,12.273671,16.029579)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="radialGradient6781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7191227,0,0,0.7191227,23.696408,18.236608)"
+ cx="84.365685"
+ cy="64.927307"
+ fx="84.365685"
+ fy="64.927307"
+ r="22.334578" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="-397.88007"
+ inkscape:cy="205.69941"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1028"
+ inkscape:window-x="20"
+ inkscape:window-y="20"
+ showguides="false"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2653"
+ visible="true"
+ enabled="true"
+ color="#ff00ff"
+ opacity="0.1254902"
+ empcolor="#0000f2"
+ empopacity="0.25098039" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="23.969062,28.50558"
+ id="guide3488" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="17.401268,34.125445"
+ id="guide3490" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2648">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>audio</rdf:li>
+ <rdf:li>device</rdf:li>
+ <rdf:li>subwoofer</rdf:li>
+ <rdf:li>output</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:title>audio-subwoofer</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evangeline McGlynn</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g6770">
+ <path
+ sodipodi:nodetypes="csccc"
+ id="path3286"
+ d="M 42.842316,39.045143 C 42.464661,41.471941 41.414441,43.219015 40.17903,43.219015 C 38.935955,43.219015 37.880378,41.450202 37.508794,38.999908 C 37.859301,37.817247 39.174918,37.23702 40.190441,37.271125 C 41.476403,37.203551 42.469629,37.948644 42.842316,39.045143 z"
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 11.018985,39.045143 C 10.641329,41.471941 9.5911095,43.219015 8.3556983,43.219015 C 7.1126243,43.219015 6.0570463,41.450202 5.6854623,38.999908 C 6.0359693,37.817247 7.3515863,37.23702 8.3671093,37.271125 C 9.6530715,37.203551 10.646297,37.948644 11.018985,39.045143 z"
+ id="path3288"
+ sodipodi:nodetypes="csccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path3264"
+ d="M 11.578967,6.9788731 C 22.034478,4.1293728 25.918929,4.3517447 36.542557,6.9788731 L 43.942117,13.152471 L 4.1794077,13.152471 L 11.578967,6.9788731 z"
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1.28661346;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path3266"
+ d="M 3.9145768,13.137135 C 16.486736,9.7856746 31.129598,9.8716096 44.071529,13.137135 L 44.014975,39.76734 C 30.802445,42.114593 16.912824,42.159732 3.9711319,39.902758 L 3.9145768,13.137135 z"
+ style="fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ transform="matrix(0,0.4858156,-0.4858156,0,49.057554,-14.78506)"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ sodipodi:ry="21.396112"
+ sodipodi:rx="21.396112"
+ sodipodi:cy="64.927307"
+ sodipodi:cx="84.365685"
+ id="path3238"
+ style="fill:url(#radialGradient6781);fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:2.05839419;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.53625679;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3260"
+ sodipodi:cx="84.365685"
+ sodipodi:cy="64.927307"
+ sodipodi:rx="21.396112"
+ sodipodi:ry="21.396112"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ transform="matrix(0,0.2827849,-0.2827849,0,53.7183,2.3437637)" />
+ <path
+ transform="matrix(0,0.1973419,-0.1973419,0,48.148923,9.5522206)"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ sodipodi:ry="21.396112"
+ sodipodi:rx="21.396112"
+ sodipodi:cy="64.927307"
+ sodipodi:cx="84.365685"
+ id="path6518"
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:5.06734753;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 4.9461591,13.950789 C 16.44898,10.961669 29.786179,10.935259 43.040609,13.950789 L 42.984059,38.893489 C 29.63547,40.978079 17.006909,41.160879 5.0027091,39.028909 L 4.9461591,13.950789 z"
+ id="path6561"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#555753;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:5.06734753;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path6581"
+ sodipodi:cx="84.365685"
+ sodipodi:cy="64.927307"
+ sodipodi:rx="21.396112"
+ sodipodi:ry="21.396112"
+ d="M 105.7618,64.927307 A 21.396112,21.396112 0 1 1 62.969572,64.927307 A 21.396112,21.396112 0 1 1 105.7618,64.927307 z"
+ transform="matrix(0,0.1973419,-0.1973419,0,30.327733,9.5522212)" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/status/Makefile.am b/mate-volume-control/data/icons/scalable/status/Makefile.am
new file mode 100644
index 0000000..c42c14e
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/status/Makefile.am
@@ -0,0 +1,21 @@
+NULL =
+
+themedir = $(pkgdatadir)/icons/mate
+size = scalable
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ audio-input-microphone-high.svg \
+ audio-input-microphone-low.svg \
+ audio-input-microphone-medium.svg \
+ audio-input-microphone-muted.svg \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/data/icons/scalable/status/Makefile.in b/mate-volume-control/data/icons/scalable/status/Makefile.in
new file mode 100644
index 0000000..85f4d6a
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/status/Makefile.in
@@ -0,0 +1,494 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mate-volume-control/data/icons/scalable/status
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(iconsdir)"
+DATA = $(icons_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+themedir = $(pkgdatadir)/icons/mate
+size = scalable
+context = status
+iconsdir = $(themedir)/$(size)/$(context)
+icons_DATA = \
+ audio-input-microphone-high.svg \
+ audio-input-microphone-low.svg \
+ audio-input-microphone-medium.svg \
+ audio-input-microphone-muted.svg \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(NULL)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/data/icons/scalable/status/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/data/icons/scalable/status/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconsDATA: $(icons_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)"
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iconsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(iconsdir)" || exit $$?; \
+ done
+
+uninstall-iconsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icons_DATA)'; test -n "$(iconsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(iconsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(iconsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(iconsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconsDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconsDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/data/icons/scalable/status/audio-input-microphone-high.svg b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-high.svg
new file mode 100644
index 0000000..fa30895
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-high.svg
@@ -0,0 +1,1076 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2790"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="audio-input-mic-high.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs2792">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.6828427,-122.46854,-61.286186)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6964"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6976"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient6958">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop6960" />
+ <stop
+ id="stop6966"
+ offset="0.60000002"
+ style="stop-color:#729fcf;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop6962" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6984"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-69.461,-45.746674)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3579">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3581" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3583" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3585"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)" />
+ <linearGradient
+ id="linearGradient3228">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3230" />
+ <stop
+ id="stop3573"
+ offset="0.06770357"
+ style="stop-color:black;stop-opacity:0.42857143;" />
+ <stop
+ id="stop3569"
+ offset="0.29894069"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:0.49803922;"
+ offset="0.77437174"
+ id="stop3571" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="1"
+ id="stop3232" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3567"
+ gradientUnits="userSpaceOnUse"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399"
+ gradientTransform="translate(0,3)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2920">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2922" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2924" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient2926"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2877">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2879" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient2894"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3815">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3817" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3819" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient2892"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2867">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2869" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2871" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient2890"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ id="linearGradient3734">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="0"
+ id="stop3736" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop3738" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3740"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient4481">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4483" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop4485" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient4487"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2904">
+ <stop
+ id="stop2906"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0.21551724"
+ id="stop2910" />
+ <stop
+ id="stop2912"
+ offset="0.70243758"
+ style="stop-color:#c3c4c2;stop-opacity:1;" />
+ <stop
+ id="stop2908"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient2902"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2949"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2943">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop2945" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="1"
+ id="stop2947" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2953"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientTransform="translate(14,0)" />
+ <linearGradient
+ id="linearGradient2981">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop2983" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop2985" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient2987"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3805"
+ gradientUnits="userSpaceOnUse"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientTransform="translate(20,-1)" />
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3801"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient3726">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop3728" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="1"
+ id="stop3730" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3732"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3703">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3705" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3707" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3709"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3779">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3781" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3783" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3785"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2965">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2967" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:0;"
+ offset="1"
+ id="stop2969" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient2971"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3711"
+ inkscape:collect="always">
+ <stop
+ id="stop3713"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ id="stop3715"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3691"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4465">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="0"
+ id="stop4467" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:0"
+ offset="1"
+ id="stop4469" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4465"
+ id="linearGradient4460"
+ gradientUnits="userSpaceOnUse"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942"
+ gradientTransform="translate(-0.25,12.5)" />
+ <linearGradient
+ id="linearGradient4475"
+ inkscape:collect="always">
+ <stop
+ id="stop4477"
+ offset="0"
+ style="stop-color:black;stop-opacity:1" />
+ <stop
+ id="stop4479"
+ offset="1"
+ style="stop-color:black;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4475"
+ id="linearGradient4473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.25,13.5)"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient4505"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4499">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop4501" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop4503" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2798" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.6828427,-122.46854,-61.286186)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-53.287444,-45.746674)"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient3032"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3036"
+ gradientUnits="userSpaceOnUse"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3038"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3040"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3042"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(20,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient3044"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient3046"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(14,0)"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient3048"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient3050"
+ gradientUnits="userSpaceOnUse"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient3052"
+ gradientUnits="userSpaceOnUse"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3054"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient3056"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient3058"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient3060"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient3062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,3)"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3066"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.270833"
+ inkscape:cx="23.999999"
+ inkscape:cy="23.999999"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="780"
+ inkscape:window-height="776"
+ inkscape:window-x="161"
+ inkscape:window-y="146" />
+ <metadata
+ id="metadata2795">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g2915"
+ transform="translate(7.6010187,0.1428571)">
+ <path
+ transform="matrix(0.727673,0,0,1.235135,7.166344,-12.0556)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2917"
+ style="opacity:0.1;fill:url(#radialGradient3026);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.233813,0,0,1.235135,-4.890235,-6.055598)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2919"
+ style="opacity:0.7;fill:url(#radialGradient3028);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2925"
+ style="opacity:1;fill:url(#radialGradient3030);fill-opacity:1;stroke:#555753;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.43667,0,0,0.429141,14.09824,21.41158)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2927"
+ style="opacity:1;fill:url(#radialGradient3032);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccssccc"
+ id="path2929"
+ d="M 27.35249,32.125 C 25.613836,32.860383 24.806671,34.177948 23.67433,35.292277 C 23.188021,35.599877 23.07463,36.001723 23.15468,36.568962 C 23.23473,37.136205 23.644126,37.624296 24.196826,37.787146 C 24.749524,37.949994 25.196373,37.917185 25.574713,37.485007 C 26.676195,35.285524 28.744563,33.983863 31,32.85591 C 29.870496,32.536987 28.651039,32.264053 27.35249,32.125 z"
+ style="opacity:0.7;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 23.8125,31.5 C 20.473005,31.5 17.440949,32.183256 15.34375,33.25 C 13.246551,34.316744 12.21875,35.666366 12.21875,36.90625 C 12.21875,38.146134 13.246551,39.495756 15.34375,40.5625 C 17.440949,41.629244 20.473005,42.312501 23.8125,42.3125 C 27.151995,42.3125 30.184051,41.629244 32.28125,40.5625 C 34.378449,39.495756 35.40625,38.146134 35.40625,36.90625 C 35.40625,35.666366 34.378449,34.316744 32.28125,33.25 C 30.184051,32.183256 27.151995,31.5 23.8125,31.5 z"
+ id="path2931"
+ style="opacity:0.4;fill:none;fill-opacity:1;stroke:url(#linearGradient3036);stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ inkscape:original="M 23.8125 30.5 C 16.859872 30.5 11.21875 33.368948 11.21875 36.90625 C 11.21875 40.443552 16.859872 43.312502 23.8125 43.3125 C 30.765128 43.3125 36.406249 40.443552 36.40625 36.90625 C 36.40625 33.368948 30.765128 30.5 23.8125 30.5 z "
+ inkscape:radius="-0.99470079"
+ sodipodi:type="inkscape:offset" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2933"
+ d="M 24.5,27.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3038);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2935"
+ d="M 34.500008,18.999997 C 34.5,23.285708 30.040008,26.499998 24.500006,26.499998 C 18.960004,26.499998 14.5,23.285708 14.500003,18.999997"
+ style="fill:none;fill-opacity:1;stroke:#888a85;stroke-width:3.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="12.5"
+ height="2.9999995"
+ width="4"
+ id="rect2937"
+ style="opacity:1;fill:url(#linearGradient3040);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="32.5"
+ height="2.9999995"
+ width="4"
+ id="rect2939"
+ style="opacity:1;fill:url(#linearGradient3042);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2941"
+ d="M 34.500008,18.999991 C 34.500008,23.285701 30.040008,26.499992 24.500006,26.499992 C 18.960004,26.499992 14.5,23.285701 14.500003,18.999991"
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient3044);stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="30"
+ height="6"
+ width="3.0000005"
+ id="rect2943"
+ style="opacity:1;fill:url(#linearGradient3046);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,12.25,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2945"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="16"
+ height="6"
+ width="3.0000005"
+ id="rect2947"
+ style="opacity:1;fill:url(#linearGradient3048);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="7.0108709"
+ rx="7.0000019"
+ y="1.5000002"
+ x="17.499996"
+ height="24.000008"
+ width="14.000004"
+ id="rect2949"
+ style="opacity:1;fill:url(#linearGradient3050);fill-opacity:1;stroke:url(#linearGradient3052);stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2951"
+ d="M 24.5,26.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3054);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,-7.75,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2953"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <g
+ id="g2955"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:url(#linearGradient3056);fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect2957"
+ width="4"
+ height="15.374996"
+ x="20"
+ y="6"
+ rx="2"
+ ry="2.1991496" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.54470092"
+ inkscape:original="M 24.5 2.5 C 20.621999 2.5 17.5 5.615977 17.5 9.5 L 17.5 19.5 C 17.5 23.384022 20.621999 26.5 24.5 26.5 C 28.378001 26.5 31.5 23.384022 31.5 19.5 L 31.5 9.5 C 31.5 5.6159775 28.378001 2.5 24.5 2.5 z "
+ style="opacity:0.2;fill:url(#linearGradient3058);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="path2959"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,19.5 C 18.03125,23.092133 20.913778,25.96875 24.5,25.96875 C 28.086222,25.96875 30.96875,23.092133 30.96875,19.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#linearGradient3060);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2961"
+ sodipodi:cx="23.65625"
+ sodipodi:cy="7.6875"
+ sodipodi:rx="3.34375"
+ sodipodi:ry="3.0625"
+ d="M 27,7.6875 A 3.34375,3.0625 0 1 1 20.3125,7.6875 A 3.34375,3.0625 0 1 1 27,7.6875 z"
+ transform="matrix(1,0,0,1.081633,-0.375,-1.252551)" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path2963"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,14.5 L 30.96875,14.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ style="opacity:0.9;fill:url(#radialGradient3062);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:nodetypes="csssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssc"
+ id="path2965"
+ d="M 22.5,3 C 22.224,3 22,3.224 22,3.5 C 22,3.776 22.224,4 22.5,4 C 22.776,4 23,3.776 23,3.5 C 23,3.224 22.776,3 22.5,3 z M 24.5,3 C 24.224,3 24,3.224 24,3.5 C 24,3.776 24.224,4 24.5,4 C 24.776,4 25,3.776 25,3.5 C 25,3.224 24.776,3 24.5,3 z M 26.5,3 C 26.224,3 26,3.224 26,3.5 C 26,3.776 26.224,4 26.5,4 C 26.776,4 27,3.776 27,3.5 C 27,3.224 26.776,3 26.5,3 z M 21.5,4 C 21.224,4 21,4.224 21,4.5 C 21,4.776 21.224,5 21.5,5 C 21.776,5 22,4.776 22,4.5 C 22,4.224 21.776,4 21.5,4 z M 23.5,4 C 23.224,4 22.999999,4.2240007 23,4.5 C 23,4.7759993 23.223999,5 23.5,5 C 23.776,5 24,4.7759993 24,4.5 C 24,4.2240007 23.776,4 23.5,4 z M 25.5,4 C 25.224,4 24.999999,4.2240007 25,4.5 C 25,4.7759993 25.223999,5 25.5,5 C 25.776,5 26,4.7759993 26,4.5 C 26,4.2240007 25.776,4 25.5,4 z M 27.5,4 C 27.224,4 27,4.224 27,4.5 C 27,4.776 27.224,5 27.5,5 C 27.776,5 28,4.776 28,4.5 C 28,4.224 27.776,4 27.5,4 z M 20.5,5 C 20.224,5 19.999999,5.2240008 20,5.5 C 20,5.7759993 20.223999,6 20.5,6 C 20.776,6 21,5.7759994 21,5.5 C 21,5.2240007 20.776,5 20.5,5 z M 22.5,5 C 22.224,5 21.999999,5.2240008 22,5.5 C 22,5.7759993 22.223999,6 22.5,6 C 22.776,6 23,5.7759994 23,5.5 C 23,5.2240007 22.776,5 22.5,5 z M 24.5,5 C 24.224,5 23.999999,5.2240008 24,5.5 C 24,5.7759993 24.223999,6 24.5,6 C 24.776,6 25,5.7759994 25,5.5 C 25,5.2240007 24.776,5 24.5,5 z M 26.5,5 C 26.224,5 25.999999,5.2240008 26,5.5 C 26,5.7759993 26.223999,6 26.5,6 C 26.776,6 27,5.7759994 27,5.5 C 27,5.2240007 26.776,5 26.5,5 z M 28.5,5 C 28.224,5 28,5.224 28,5.5 C 28,5.776 28.224,6 28.5,6 C 28.776,6 29,5.776 29,5.5 C 29,5.224 28.776,5 28.5,5 z M 19.5,6 C 19.224,6 18.999999,6.2240008 19,6.5 C 19,6.7759993 19.223999,7 19.5,7 C 19.776,7 20,6.7759994 20,6.5 C 20,6.2240007 19.776,6 19.5,6 z M 21.5,6 C 21.224,6 20.999999,6.2240008 21,6.5 C 21,6.7759993 21.223999,7 21.5,7 C 21.776,7 22,6.7759994 22,6.5 C 22,6.2240007 21.776,6 21.5,6 z M 23.5,6 C 23.224,6 22.999999,6.2240008 23,6.5 C 23,6.7759993 23.223999,7 23.5,7 C 23.776,7 24,6.7759994 24,6.5 C 24,6.2240007 23.776,6 23.5,6 z M 25.5,6 C 25.224,6 24.999999,6.2240008 25,6.5 C 25,6.7759993 25.223999,7 25.5,7 C 25.776,7 26,6.7759994 26,6.5 C 26,6.2240007 25.776,6 25.5,6 z M 27.5,6 C 27.224,6 26.999999,6.2240008 27,6.5 C 27,6.7759993 27.223999,7 27.5,7 C 27.776,7 28,6.7759994 28,6.5 C 28,6.2240007 27.776,6 27.5,6 z M 29.5,6 C 29.224,6 29,6.224 29,6.5 C 29,6.776 29.224,7 29.5,7 C 29.776,7 30,6.776 30,6.5 C 30,6.224 29.776,6 29.5,6 z M 20.5,7 C 20.224,7 19.999999,7.2240008 20,7.5 C 20,7.7759993 20.223999,8.0000002 20.5,8 C 20.776,8 21,7.7759994 21,7.5 C 21,7.2240007 20.776,7 20.5,7 z M 22.5,7 C 22.224,7 21.999999,7.2240008 22,7.5 C 22,7.7759993 22.223999,8.0000002 22.5,8 C 22.776,8 23,7.7759994 23,7.5 C 23,7.2240007 22.776,7 22.5,7 z M 24.5,7 C 24.224,7 23.999999,7.2240008 24,7.5 C 24,7.7759993 24.223999,8.0000002 24.5,8 C 24.776,8 25,7.7759994 25,7.5 C 25,7.2240007 24.776,7 24.5,7 z M 26.5,7 C 26.224,7 25.999999,7.2240008 26,7.5 C 26,7.7759993 26.223999,8.0000002 26.5,8 C 26.776,8 27,7.7759994 27,7.5 C 27,7.2240007 26.776,7 26.5,7 z M 28.5,7 C 28.224,7 27.999999,7.2240008 28,7.5 C 28,7.7759993 28.223999,8.0000002 28.5,8 C 28.776,8 29,7.7759994 29,7.5 C 29,7.2240007 28.776,7 28.5,7 z M 30.5,7 C 30.224,7 30,7.224 30,7.5 C 30,7.776 30.224,8 30.5,8 C 30.776,8 31,7.776 31,7.5 C 31,7.224 30.776,7 30.5,7 z M 19.5,8 C 19.224,8 18.999999,8.2240008 19,8.5 C 19,8.7759993 19.223999,9 19.5,9 C 19.776,9 20,8.7759994 20,8.5 C 20,8.2240007 19.776,8 19.5,8 z M 21.5,8 C 21.224,8 20.999999,8.2240008 21,8.5 C 21,8.7759993 21.223999,9 21.5,9 C 21.776,9 22,8.7759994 22,8.5 C 22,8.2240007 21.776,8 21.5,8 z M 23.5,8 C 23.224,8 22.999999,8.2240008 23,8.5 C 23,8.7759993 23.223999,9 23.5,9 C 23.776,9 24,8.7759994 24,8.5 C 24,8.2240007 23.776,8 23.5,8 z M 25.5,8 C 25.224,8 24.999999,8.2240008 25,8.5 C 25,8.7759993 25.223999,9 25.5,9 C 25.776,9 26,8.7759994 26,8.5 C 26,8.2240007 25.776,8 25.5,8 z M 27.5,8 C 27.224,8 26.999999,8.2240008 27,8.5 C 27,8.7759993 27.223999,9 27.5,9 C 27.776,9 28,8.7759994 28,8.5 C 28,8.2240007 27.776,8 27.5,8 z M 29.5,8 C 29.224,8 28.999999,8.2240008 29,8.5 C 29,8.7759993 29.223999,9 29.5,9 C 29.776,9 30,8.7759994 30,8.5 C 30,8.2240007 29.776,8 29.5,8 z M 18.5,9 C 18.224,9 17.999999,9.224001 18,9.5 C 18,9.775999 18.223999,10 18.5,10 C 18.776,10 19,9.775999 19,9.5 C 19,9.224001 18.776,9 18.5,9 z M 20.5,9 C 20.224,9 19.999999,9.224001 20,9.5 C 20,9.775999 20.223999,10 20.5,10 C 20.776,10 21,9.775999 21,9.5 C 21,9.224001 20.776,9 20.5,9 z M 22.5,9 C 22.224,9 21.999999,9.224001 22,9.5 C 22,9.775999 22.223999,10 22.5,10 C 22.776,10 23,9.775999 23,9.5 C 23,9.224001 22.776,9 22.5,9 z M 24.5,9 C 24.224,9 23.999999,9.224001 24,9.5 C 24,9.775999 24.223999,10 24.5,10 C 24.776,10 25,9.775999 25,9.5 C 25,9.224001 24.776,9 24.5,9 z M 26.5,9 C 26.224,9 25.999999,9.224001 26,9.5 C 26,9.775999 26.223999,10 26.5,10 C 26.776,10 27,9.775999 27,9.5 C 27,9.224001 26.776,9 26.5,9 z M 28.5,9 C 28.224,9 27.999999,9.224001 28,9.5 C 28,9.775999 28.223999,10 28.5,10 C 28.776,10 29,9.775999 29,9.5 C 29,9.224001 28.776,9 28.5,9 z M 30.5,9 C 30.224,9 30,9.224 30,9.5 C 30,9.776 30.224,10 30.5,10 C 30.776,10 31,9.776 31,9.5 C 31,9.224 30.776,9 30.5,9 z M 19.5,10 C 19.224,10 18.999999,10.224001 19,10.5 C 19,10.775999 19.223999,11 19.5,11 C 19.776,11 20,10.775999 20,10.5 C 20,10.224001 19.776,10 19.5,10 z M 21.5,10 C 21.224,10 20.999999,10.224001 21,10.5 C 21,10.775999 21.223999,11 21.5,11 C 21.776,11 22,10.775999 22,10.5 C 22,10.224001 21.776,10 21.5,10 z M 23.5,10 C 23.224,10 22.999999,10.224001 23,10.5 C 23,10.775999 23.223999,11 23.5,11 C 23.776,11 24,10.775999 24,10.5 C 24,10.224001 23.776,10 23.5,10 z M 25.5,10 C 25.224,10 24.999999,10.224001 25,10.5 C 25,10.775999 25.223999,11 25.5,11 C 25.776,11 26,10.775999 26,10.5 C 26,10.224001 25.776,10 25.5,10 z M 27.5,10 C 27.224,10 26.999999,10.224001 27,10.5 C 27,10.775999 27.223999,11 27.5,11 C 27.776,11 28,10.775999 28,10.5 C 28,10.224001 27.776,10 27.5,10 z M 29.5,10 C 29.224,10 28.999999,10.224001 29,10.5 C 29,10.775999 29.223999,11 29.5,11 C 29.776,11 30,10.775999 30,10.5 C 30,10.224001 29.776,10 29.5,10 z M 18.5,11 C 18.224,11 17.999999,11.224 18,11.5 C 18,11.775999 18.223999,12 18.5,12 C 18.776,12 19,11.775999 19,11.5 C 19,11.224001 18.776,11 18.5,11 z M 20.5,11 C 20.224,11 19.999999,11.224 20,11.5 C 20,11.775999 20.223999,12 20.5,12 C 20.776,12 21,11.775999 21,11.5 C 21,11.224001 20.776,11 20.5,11 z M 22.5,11 C 22.224,11 21.999999,11.224 22,11.5 C 22,11.775999 22.223999,12 22.5,12 C 22.776,12 23,11.775999 23,11.5 C 23,11.224001 22.776,11 22.5,11 z M 24.5,11 C 24.224,11 23.999999,11.224 24,11.5 C 24,11.775999 24.223999,12 24.5,12 C 24.776,12 25,11.775999 25,11.5 C 25,11.224001 24.776,11 24.5,11 z M 26.5,11 C 26.224,11 25.999999,11.224 26,11.5 C 26,11.775999 26.223999,12 26.5,12 C 26.776,12 27,11.775999 27,11.5 C 27,11.224001 26.776,11 26.5,11 z M 28.5,11 C 28.224,11 27.999999,11.224 28,11.5 C 28,11.775999 28.223999,12 28.5,12 C 28.776,12 29,11.775999 29,11.5 C 29,11.224001 28.776,11 28.5,11 z M 30.5,11 C 30.224,11 30,11.224 30,11.5 C 30,11.776 30.224,12 30.5,12 C 30.776,12 31,11.776 31,11.5 C 31,11.224 30.776,11 30.5,11 z M 19.5,12 C 19.224,12 18.999999,12.224 19,12.5 C 19,12.775999 19.223999,13 19.5,13 C 19.776,13 20,12.775999 20,12.5 C 20,12.224001 19.776,12 19.5,12 z M 21.5,12 C 21.224,12 20.999999,12.224 21,12.5 C 21,12.775999 21.223999,13 21.5,13 C 21.776,13 22,12.775999 22,12.5 C 22,12.224001 21.776,12 21.5,12 z M 23.5,12 C 23.224,12 22.999999,12.224 23,12.5 C 23,12.775999 23.223999,13 23.5,13 C 23.776,13 24,12.775999 24,12.5 C 24,12.224001 23.776,12 23.5,12 z M 25.5,12 C 25.224,12 24.999999,12.224 25,12.5 C 25,12.775999 25.223999,13 25.5,13 C 25.776,13 26,12.775999 26,12.5 C 26,12.224001 25.776,12 25.5,12 z M 27.5,12 C 27.224,12 26.999999,12.224 27,12.5 C 27,12.775999 27.223999,13 27.5,13 C 27.776,13 28,12.775999 28,12.5 C 28,12.224001 27.776,12 27.5,12 z M 29.5,12 C 29.224,12 28.999999,12.224 29,12.5 C 29,12.775999 29.223999,13 29.5,13 C 29.776,13 30,12.775999 30,12.5 C 30,12.224001 29.776,12 29.5,12 z M 18.5,13 C 18.224,13 17.999999,13.224 18,13.5 C 18,13.775999 18.223999,14 18.5,14 C 18.776,14 19,13.775999 19,13.5 C 19,13.224001 18.776,13 18.5,13 z M 20.5,13 C 20.224,13 19.999999,13.224 20,13.5 C 20,13.775999 20.223999,14 20.5,14 C 20.776,14 21,13.775999 21,13.5 C 21,13.224001 20.776,13 20.5,13 z M 22.5,13 C 22.224,13 21.999999,13.224 22,13.5 C 22,13.775999 22.223999,14 22.5,14 C 22.776,14 23,13.775999 23,13.5 C 23,13.224001 22.776,13 22.5,13 z M 24.5,13 C 24.224,13 23.999999,13.224 24,13.5 C 24,13.775999 24.223999,14 24.5,14 C 24.776,14 25,13.775999 25,13.5 C 25,13.224001 24.776,13 24.5,13 z M 26.5,13 C 26.224,13 25.999999,13.224 26,13.5 C 26,13.775999 26.223999,14 26.5,14 C 26.776,14 27,13.775999 27,13.5 C 27,13.224001 26.776,13 26.5,13 z M 28.5,13 C 28.224,13 27.999999,13.224 28,13.5 C 28,13.775999 28.223999,14 28.5,14 C 28.776,14 29,13.775999 29,13.5 C 29,13.224001 28.776,13 28.5,13 z M 30.5,13 C 30.224,13 30,13.224 30,13.5 C 30,13.776 30.224,14 30.5,14 C 30.776,14 31,13.776 31,13.5 C 31,13.224 30.776,13 30.5,13 z M 19.5,14 C 19.224,14 18.999999,14.224 19,14.5 C 19,14.775999 19.223999,15 19.5,15 C 19.776,15 20,14.775999 20,14.5 C 20,14.224001 19.776,14 19.5,14 z M 21.5,14 C 21.224,14 20.999999,14.224 21,14.5 C 21,14.775999 21.223999,15 21.5,15 C 21.776,15 22,14.775999 22,14.5 C 22,14.224001 21.776,14 21.5,14 z M 23.5,14 C 23.224,14 22.999999,14.224 23,14.5 C 23,14.775999 23.223999,15 23.5,15 C 23.776,15 24,14.775999 24,14.5 C 24,14.224001 23.776,14 23.5,14 z M 25.5,14 C 25.224,14 24.999999,14.224 25,14.5 C 25,14.775999 25.223999,15 25.5,15 C 25.776,15 26,14.775999 26,14.5 C 26,14.224001 25.776,14 25.5,14 z M 27.5,14 C 27.224,14 26.999999,14.224 27,14.5 C 27,14.775999 27.223999,15 27.5,15 C 27.776,15 28,14.775999 28,14.5 C 28,14.224001 27.776,14 27.5,14 z M 29.5,14 C 29.224,14 28.999999,14.224 29,14.5 C 29,14.775999 29.223999,15 29.5,15 C 29.776,15 30,14.775999 30,14.5 C 30,14.224001 29.776,14 29.5,14 z M 18.5,15 C 18.224,15 17.999999,15.224 18,15.5 C 18,15.775999 18.223999,16 18.5,16 C 18.776,16 19,15.775999 19,15.5 C 19,15.224001 18.776,15 18.5,15 z M 20.5,15 C 20.224,15 19.999999,15.224 20,15.5 C 20,15.775999 20.223999,16 20.5,16 C 20.776,16 21,15.775999 21,15.5 C 21,15.224001 20.776,15 20.5,15 z M 22.5,15 C 22.224,15 21.999999,15.224 22,15.5 C 22,15.775999 22.223999,16 22.5,16 C 22.776,16 23,15.775999 23,15.5 C 23,15.224001 22.776,15 22.5,15 z M 24.5,15 C 24.224,15 23.999999,15.224 24,15.5 C 24,15.775999 24.223999,16 24.5,16 C 24.776,16 25,15.775999 25,15.5 C 25,15.224001 24.776,15 24.5,15 z M 26.5,15 C 26.224,15 25.999999,15.224 26,15.5 C 26,15.775999 26.223999,16 26.5,16 C 26.776,16 27,15.775999 27,15.5 C 27,15.224001 26.776,15 26.5,15 z M 28.5,15 C 28.224,15 27.999999,15.224 28,15.5 C 28,15.775999 28.223999,16 28.5,16 C 28.776,16 29,15.775999 29,15.5 C 29,15.224001 28.776,15 28.5,15 z M 30.5,15 C 30.224,15 30,15.224 30,15.5 C 30,15.776 30.224,16 30.5,16 C 30.776,16 31,15.776 31,15.5 C 31,15.224 30.776,15 30.5,15 z M 19.5,16 C 19.224,16 18.999999,16.224001 19,16.5 C 19,16.775999 19.223999,17 19.5,17 C 19.776,17 20,16.776 20,16.5 C 20,16.224001 19.776,16 19.5,16 z M 21.5,16 C 21.224,16 20.999999,16.224001 21,16.5 C 21,16.775999 21.223999,17 21.5,17 C 21.776,17 22,16.776 22,16.5 C 22,16.224001 21.776,16 21.5,16 z M 23.5,16 C 23.224,16 22.999999,16.224001 23,16.5 C 23,16.775999 23.223999,17 23.5,17 C 23.776,17 24,16.776 24,16.5 C 24,16.224001 23.776,16 23.5,16 z M 25.5,16 C 25.224,16 24.999999,16.224001 25,16.5 C 25,16.775999 25.223999,17 25.5,17 C 25.776,17 26,16.776 26,16.5 C 26,16.224001 25.776,16 25.5,16 z M 27.5,16 C 27.224,16 26.999999,16.224001 27,16.5 C 27,16.775999 27.223999,17 27.5,17 C 27.776,17 28,16.776 28,16.5 C 28,16.224001 27.776,16 27.5,16 z M 29.5,16 C 29.224,16 28.999999,16.224 29,16.5 C 29,16.775999 29.223999,17 29.5,17 C 29.776,17 30,16.775999 30,16.5 C 30,16.224001 29.776,16 29.5,16 z M 18.5,17 C 18.224,17 17.999999,17.224001 18,17.5 C 18,17.775999 18.223999,18 18.5,18 C 18.776,18 19,17.776 19,17.5 C 19,17.224001 18.776,17 18.5,17 z M 20.5,17 C 20.224,17 19.999999,17.224001 20,17.5 C 20,17.775999 20.223999,18 20.5,18 C 20.776,18 21,17.776 21,17.5 C 21,17.224001 20.776,17 20.5,17 z M 22.5,17 C 22.224,17 21.999999,17.224001 22,17.5 C 22,17.775999 22.223999,18 22.5,18 C 22.776,18 23,17.776 23,17.5 C 23,17.224001 22.776,17 22.5,17 z M 24.5,17 C 24.224,17 23.999999,17.224001 24,17.5 C 24,17.775999 24.223999,18 24.5,18 C 24.776,18 25,17.776 25,17.5 C 25,17.224001 24.776,17 24.5,17 z M 26.5,17 C 26.224,17 25.999999,17.224001 26,17.5 C 26,17.775999 26.223999,18 26.5,18 C 26.776,18 27,17.776 27,17.5 C 27,17.224001 26.776,17 26.5,17 z M 28.5,17 C 28.224,17 27.999999,17.224001 28,17.5 C 28,17.775999 28.223999,18 28.5,18 C 28.776,18 29,17.776 29,17.5 C 29,17.224001 28.776,17 28.5,17 z M 30.5,17 C 30.224,17 30,17.224 30,17.5 C 30,17.776 30.224,18 30.5,18 C 30.776,18 31,17.776 31,17.5 C 31,17.224 30.776,17 30.5,17 z M 19.5,18 C 19.224,18 18.999999,18.224001 19,18.5 C 19,18.775999 19.223999,19 19.5,19 C 19.776,19 20,18.776 20,18.5 C 20,18.224001 19.776,18 19.5,18 z M 21.5,18 C 21.224,18 20.999999,18.224001 21,18.5 C 21,18.775999 21.223999,19 21.5,19 C 21.776,19 22,18.776 22,18.5 C 22,18.224001 21.776,18 21.5,18 z M 23.5,18 C 23.224,18 22.999999,18.224001 23,18.5 C 23,18.775999 23.223999,19 23.5,19 C 23.776,19 24,18.776 24,18.5 C 24,18.224001 23.776,18 23.5,18 z M 25.5,18 C 25.224,18 24.999999,18.224001 25,18.5 C 25,18.775999 25.223999,19 25.5,19 C 25.776,19 26,18.776 26,18.5 C 26,18.224001 25.776,18 25.5,18 z M 27.5,18 C 27.224,18 26.999999,18.224001 27,18.5 C 27,18.775999 27.223999,19 27.5,19 C 27.776,19 28,18.776 28,18.5 C 28,18.224001 27.776,18 27.5,18 z M 29.5,18 C 29.224,18 28.999999,18.224001 29,18.5 C 29,18.775999 29.223999,19 29.5,19 C 29.776,19 30,18.776 30,18.5 C 30,18.224001 29.776,18 29.5,18 z M 18.5,19 C 18.224,19 17.999999,19.224001 18,19.5 C 18,19.775999 18.223999,19.999999 18.5,20 C 18.776,20 19,19.776 19,19.5 C 19,19.224001 18.776,19 18.5,19 z M 20.5,19 C 20.224,19 19.999999,19.224001 20,19.5 C 20,19.775999 20.223999,19.999999 20.5,20 C 20.776,20 21,19.776 21,19.5 C 21,19.224001 20.776,19 20.5,19 z M 22.5,19 C 22.224,19 21.999999,19.224001 22,19.5 C 22,19.775999 22.223999,19.999999 22.5,20 C 22.776,20 23,19.776 23,19.5 C 23,19.224001 22.776,19 22.5,19 z M 24.5,19 C 24.224,19 23.999999,19.224001 24,19.5 C 24,19.775999 24.223999,19.999999 24.5,20 C 24.776,20 25,19.776 25,19.5 C 25,19.224001 24.776,19 24.5,19 z M 26.5,19 C 26.224,19 25.999999,19.224001 26,19.5 C 26,19.775999 26.223999,19.999999 26.5,20 C 26.776,20 27,19.776 27,19.5 C 27,19.224001 26.776,19 26.5,19 z M 28.5,19 C 28.224,19 27.999999,19.224001 28,19.5 C 28,19.775999 28.223999,19.999999 28.5,20 C 28.776,20 29,19.776 29,19.5 C 29,19.224001 28.776,19 28.5,19 z M 30.5,19 C 30.224,19 30,19.224 30,19.5 C 30,19.776 30.224,20 30.5,20 C 30.776,20 31,19.776 31,19.5 C 31,19.224 30.776,19 30.5,19 z M 19.5,20 C 19.224,20 18.999999,20.224001 19,20.5 C 19,20.775999 19.223999,20.999999 19.5,21 C 19.776,21 20,20.776 20,20.5 C 20,20.224001 19.776,20 19.5,20 z M 21.5,20 C 21.224,20 20.999999,20.224001 21,20.5 C 21,20.775999 21.223999,20.999999 21.5,21 C 21.776,21 22,20.776 22,20.5 C 22,20.224001 21.776,20 21.5,20 z M 23.5,20 C 23.224,20 22.999999,20.224001 23,20.5 C 23,20.775999 23.223999,20.999999 23.5,21 C 23.776,21 24,20.776 24,20.5 C 24,20.224001 23.776,20 23.5,20 z M 25.5,20 C 25.224,20 24.999999,20.224001 25,20.5 C 25,20.775999 25.223999,20.999999 25.5,21 C 25.776,21 26,20.776 26,20.5 C 26,20.224001 25.776,20 25.5,20 z M 27.5,20 C 27.224,20 26.999999,20.224001 27,20.5 C 27,20.775999 27.223999,20.999999 27.5,21 C 27.776,21 28,20.776 28,20.5 C 28,20.224001 27.776,20 27.5,20 z M 29.5,20 C 29.224,20 28.999999,20.224001 29,20.5 C 29,20.775999 29.223999,20.999999 29.5,21 C 29.776,21 30,20.776 30,20.5 C 30,20.224001 29.776,20 29.5,20 z M 20.5,21 C 20.224,21 19.999999,21.224001 20,21.5 C 20,21.775999 20.223999,21.999999 20.5,22 C 20.776,22 21,21.776 21,21.5 C 21,21.224001 20.776,21 20.5,21 z M 22.5,21 C 22.224,21 21.999999,21.224001 22,21.5 C 22,21.775999 22.223999,21.999999 22.5,22 C 22.776,22 23,21.776 23,21.5 C 23,21.224001 22.776,21 22.5,21 z M 24.5,21 C 24.224,21 23.999999,21.224001 24,21.5 C 24,21.775999 24.223999,21.999999 24.5,22 C 24.776,22 25,21.776 25,21.5 C 25,21.224001 24.776,21 24.5,21 z M 26.5,21 C 26.224,21 25.999999,21.224001 26,21.5 C 26,21.775999 26.223999,21.999999 26.5,22 C 26.776,22 27,21.776 27,21.5 C 27,21.224001 26.776,21 26.5,21 z M 28.5,21 C 28.224,21 27.999999,21.224001 28,21.5 C 28,21.775999 28.223999,21.999999 28.5,22 C 28.776,22 29,21.776 29,21.5 C 29,21.224001 28.776,21 28.5,21 z M 21.5,22 C 21.224,22 20.999999,22.224001 21,22.5 C 21,22.775999 21.223999,22.999999 21.5,23 C 21.776,23 22,22.776 22,22.5 C 22,22.224001 21.776,22 21.5,22 z M 23.5,22 C 23.224,22 22.999999,22.224001 23,22.5 C 23,22.775999 23.223999,22.999999 23.5,23 C 23.776,23 24,22.776 24,22.5 C 24,22.224001 23.776,22 23.5,22 z M 25.5,22 C 25.224,22 24.999999,22.224001 25,22.5 C 25,22.775999 25.223999,22.999999 25.5,23 C 25.776,23 26,22.776 26,22.5 C 26,22.224001 25.776,22 25.5,22 z M 27.5,22 C 27.224,22 26.999999,22.224001 27,22.5 C 27,22.775999 27.223999,22.999999 27.5,23 C 27.776,23 28,22.776 28,22.5 C 28,22.224001 27.776,22 27.5,22 z M 22.5,23 C 22.224,23 21.999999,23.224001 22,23.5 C 22,23.775999 22.223999,23.999999 22.5,24 C 22.776,24 23,23.776 23,23.5 C 23,23.224001 22.776,23 22.5,23 z M 24.5,23 C 24.224,23 23.999999,23.224001 24,23.5 C 24,23.775999 24.223999,23.999999 24.5,24 C 24.776,24 25,23.776 25,23.5 C 25,23.224001 24.776,23 24.5,23 z M 26.5,23 C 26.224,23 25.999999,23.224001 26,23.5 C 26,23.775999 26.223999,23.999999 26.5,24 C 26.776,24 27,23.776 27,23.5 C 27,23.224001 26.776,23 26.5,23 z M 23.5,24 C 23.224,24 22.999999,24.224001 23,24.5 C 23,24.775999 23.223999,24.999999 23.5,25 C 23.776,25 24,24.776 24,24.5 C 24,24.224001 23.776,24 23.5,24 z M 25.5,24 C 25.224,24 24.999999,24.224001 25,24.5 C 25,24.775999 25.223999,24.999999 25.5,25 C 25.776,25 26,24.776 26,24.5 C 26,24.224001 25.776,24 25.5,24 z"
+ style="opacity:0.5;fill:url(#linearGradient3064);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="6.0500031"
+ rx="6.0000024"
+ y="2.5000026"
+ x="18.500008"
+ height="22.000008"
+ width="12.000005"
+ id="rect2967"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient3066);stroke-width:1.0000006;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ style="stroke:url(#radialGradient3373);display:inline"
+ id="g26136"
+ transform="matrix(0.4579202,0,0,0.9423324,-20.358831,-4.6737794)">
+ <path
+ sodipodi:nodetypes="csc"
+ id="path25249"
+ d="M 69.03125,40.1875 C 74.190803,36.02097 77.499999,29.643289 77.5,22.5 C 77.5,15.734684 74.540259,9.6637676 69.84375,5.5"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3371);stroke-width:1.17171037;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ style="stroke:#729fcf;display:inline"
+ id="g27916"
+ transform="matrix(0.3975228,0,0,0.9423324,-18.689059,-4.6737794)">
+ <path
+ sodipodi:nodetypes="csc"
+ id="path21632"
+ d="M 67.5625,34.78125 C 71.176369,31.899733 73.499999,27.47788 73.5,22.5 C 73.5,17.793936 71.43603,13.569699 68.15625,10.6875"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3375);stroke-width:1.25757563;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ style="stroke:#729fcf;display:inline"
+ id="g28807"
+ transform="matrix(0.272091,0,0,0.9423324,-15.475768,-4.3498543)">
+ <path
+ sodipodi:nodetypes="csc"
+ id="path27920"
+ d="M 74.954806,30.15625 C 77.22438,28.375887 78.673556,25.606103 78.673556,22.5 C 78.673556,19.560794 77.36198,16.939552 75.298556,15.15625"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3377);stroke-width:1.52005064;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/status/audio-input-microphone-low.svg b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-low.svg
new file mode 100644
index 0000000..2aec722
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-low.svg
@@ -0,0 +1,1045 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2790"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="audio-input-mic-low.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs2792">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.6828427,-122.46854,-61.286186)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6964"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6976"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient6958">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop6960" />
+ <stop
+ id="stop6966"
+ offset="0.60000002"
+ style="stop-color:#729fcf;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop6962" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6984"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-69.461,-45.746674)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3579">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3581" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3583" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3585"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)" />
+ <linearGradient
+ id="linearGradient3228">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3230" />
+ <stop
+ id="stop3573"
+ offset="0.06770357"
+ style="stop-color:black;stop-opacity:0.42857143;" />
+ <stop
+ id="stop3569"
+ offset="0.29894069"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:0.49803922;"
+ offset="0.77437174"
+ id="stop3571" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="1"
+ id="stop3232" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3567"
+ gradientUnits="userSpaceOnUse"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399"
+ gradientTransform="translate(0,3)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2920">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2922" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2924" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient2926"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2877">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2879" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient2894"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3815">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3817" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3819" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient2892"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2867">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2869" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2871" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient2890"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ id="linearGradient3734">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="0"
+ id="stop3736" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop3738" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3740"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient4481">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4483" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop4485" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient4487"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2904">
+ <stop
+ id="stop2906"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0.21551724"
+ id="stop2910" />
+ <stop
+ id="stop2912"
+ offset="0.70243758"
+ style="stop-color:#c3c4c2;stop-opacity:1;" />
+ <stop
+ id="stop2908"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient2902"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2949"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2943">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop2945" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="1"
+ id="stop2947" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2953"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientTransform="translate(14,0)" />
+ <linearGradient
+ id="linearGradient2981">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop2983" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop2985" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient2987"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3805"
+ gradientUnits="userSpaceOnUse"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientTransform="translate(20,-1)" />
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3801"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient3726">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop3728" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="1"
+ id="stop3730" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3732"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3703">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3705" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3707" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3709"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3779">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3781" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3783" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3785"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2965">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2967" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:0;"
+ offset="1"
+ id="stop2969" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient2971"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3711"
+ inkscape:collect="always">
+ <stop
+ id="stop3713"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ id="stop3715"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3691"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4465">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="0"
+ id="stop4467" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:0"
+ offset="1"
+ id="stop4469" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4465"
+ id="linearGradient4460"
+ gradientUnits="userSpaceOnUse"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942"
+ gradientTransform="translate(-0.25,12.5)" />
+ <linearGradient
+ id="linearGradient4475"
+ inkscape:collect="always">
+ <stop
+ id="stop4477"
+ offset="0"
+ style="stop-color:black;stop-opacity:1" />
+ <stop
+ id="stop4479"
+ offset="1"
+ style="stop-color:black;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4475"
+ id="linearGradient4473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.25,13.5)"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient4505"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4499">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop4501" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop4503" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2798" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-53.287444,-45.746674)"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient3032"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3036"
+ gradientUnits="userSpaceOnUse"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3038"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3040"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3042"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(20,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient3044"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient3046"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(14,0)"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient3048"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient3050"
+ gradientUnits="userSpaceOnUse"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient3052"
+ gradientUnits="userSpaceOnUse"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3054"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient3056"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient3058"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient3060"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient3062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,3)"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3066"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.270833"
+ inkscape:cx="23.999998"
+ inkscape:cy="23.999998"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="780"
+ inkscape:window-height="776"
+ inkscape:window-x="161"
+ inkscape:window-y="146" />
+ <metadata
+ id="metadata2795">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g2915"
+ transform="translate(7.6010187,0.1428571)">
+ <path
+ transform="matrix(0.727673,0,0,1.235135,7.166344,-12.0556)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2917"
+ style="opacity:0.1;fill:url(#radialGradient3026);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.233813,0,0,1.235135,-4.890235,-6.055598)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2919"
+ style="opacity:0.7;fill:url(#radialGradient3028);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2925"
+ style="opacity:1;fill:url(#radialGradient3030);fill-opacity:1;stroke:#555753;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.43667,0,0,0.429141,14.09824,21.41158)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2927"
+ style="opacity:1;fill:url(#radialGradient3032);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccssccc"
+ id="path2929"
+ d="M 27.35249,32.125 C 25.613836,32.860383 24.806671,34.177948 23.67433,35.292277 C 23.188021,35.599877 23.07463,36.001723 23.15468,36.568962 C 23.23473,37.136205 23.644126,37.624296 24.196826,37.787146 C 24.749524,37.949994 25.196373,37.917185 25.574713,37.485007 C 26.676195,35.285524 28.744563,33.983863 31,32.85591 C 29.870496,32.536987 28.651039,32.264053 27.35249,32.125 z"
+ style="opacity:0.7;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 23.8125,31.5 C 20.473005,31.5 17.440949,32.183256 15.34375,33.25 C 13.246551,34.316744 12.21875,35.666366 12.21875,36.90625 C 12.21875,38.146134 13.246551,39.495756 15.34375,40.5625 C 17.440949,41.629244 20.473005,42.312501 23.8125,42.3125 C 27.151995,42.3125 30.184051,41.629244 32.28125,40.5625 C 34.378449,39.495756 35.40625,38.146134 35.40625,36.90625 C 35.40625,35.666366 34.378449,34.316744 32.28125,33.25 C 30.184051,32.183256 27.151995,31.5 23.8125,31.5 z"
+ id="path2931"
+ style="opacity:0.4;fill:none;fill-opacity:1;stroke:url(#linearGradient3036);stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ inkscape:original="M 23.8125 30.5 C 16.859872 30.5 11.21875 33.368948 11.21875 36.90625 C 11.21875 40.443552 16.859872 43.312502 23.8125 43.3125 C 30.765128 43.3125 36.406249 40.443552 36.40625 36.90625 C 36.40625 33.368948 30.765128 30.5 23.8125 30.5 z "
+ inkscape:radius="-0.99470079"
+ sodipodi:type="inkscape:offset" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2933"
+ d="M 24.5,27.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3038);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2935"
+ d="M 34.500008,18.999997 C 34.5,23.285708 30.040008,26.499998 24.500006,26.499998 C 18.960004,26.499998 14.5,23.285708 14.500003,18.999997"
+ style="fill:none;fill-opacity:1;stroke:#888a85;stroke-width:3.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="12.5"
+ height="2.9999995"
+ width="4"
+ id="rect2937"
+ style="opacity:1;fill:url(#linearGradient3040);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="32.5"
+ height="2.9999995"
+ width="4"
+ id="rect2939"
+ style="opacity:1;fill:url(#linearGradient3042);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2941"
+ d="M 34.500008,18.999991 C 34.500008,23.285701 30.040008,26.499992 24.500006,26.499992 C 18.960004,26.499992 14.5,23.285701 14.500003,18.999991"
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient3044);stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="30"
+ height="6"
+ width="3.0000005"
+ id="rect2943"
+ style="opacity:1;fill:url(#linearGradient3046);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,12.25,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2945"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="16"
+ height="6"
+ width="3.0000005"
+ id="rect2947"
+ style="opacity:1;fill:url(#linearGradient3048);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="7.0108709"
+ rx="7.0000019"
+ y="1.5000002"
+ x="17.499996"
+ height="24.000008"
+ width="14.000004"
+ id="rect2949"
+ style="opacity:1;fill:url(#linearGradient3050);fill-opacity:1;stroke:url(#linearGradient3052);stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2951"
+ d="M 24.5,26.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3054);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,-7.75,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2953"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <g
+ id="g2955"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:url(#linearGradient3056);fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect2957"
+ width="4"
+ height="15.374996"
+ x="20"
+ y="6"
+ rx="2"
+ ry="2.1991496" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.54470092"
+ inkscape:original="M 24.5 2.5 C 20.621999 2.5 17.5 5.615977 17.5 9.5 L 17.5 19.5 C 17.5 23.384022 20.621999 26.5 24.5 26.5 C 28.378001 26.5 31.5 23.384022 31.5 19.5 L 31.5 9.5 C 31.5 5.6159775 28.378001 2.5 24.5 2.5 z "
+ style="opacity:0.2;fill:url(#linearGradient3058);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="path2959"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,19.5 C 18.03125,23.092133 20.913778,25.96875 24.5,25.96875 C 28.086222,25.96875 30.96875,23.092133 30.96875,19.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#linearGradient3060);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2961"
+ sodipodi:cx="23.65625"
+ sodipodi:cy="7.6875"
+ sodipodi:rx="3.34375"
+ sodipodi:ry="3.0625"
+ d="M 27,7.6875 A 3.34375,3.0625 0 1 1 20.3125,7.6875 A 3.34375,3.0625 0 1 1 27,7.6875 z"
+ transform="matrix(1,0,0,1.081633,-0.375,-1.252551)" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path2963"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,14.5 L 30.96875,14.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ style="opacity:0.9;fill:url(#radialGradient3062);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:nodetypes="csssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssc"
+ id="path2965"
+ d="M 22.5,3 C 22.224,3 22,3.224 22,3.5 C 22,3.776 22.224,4 22.5,4 C 22.776,4 23,3.776 23,3.5 C 23,3.224 22.776,3 22.5,3 z M 24.5,3 C 24.224,3 24,3.224 24,3.5 C 24,3.776 24.224,4 24.5,4 C 24.776,4 25,3.776 25,3.5 C 25,3.224 24.776,3 24.5,3 z M 26.5,3 C 26.224,3 26,3.224 26,3.5 C 26,3.776 26.224,4 26.5,4 C 26.776,4 27,3.776 27,3.5 C 27,3.224 26.776,3 26.5,3 z M 21.5,4 C 21.224,4 21,4.224 21,4.5 C 21,4.776 21.224,5 21.5,5 C 21.776,5 22,4.776 22,4.5 C 22,4.224 21.776,4 21.5,4 z M 23.5,4 C 23.224,4 22.999999,4.2240007 23,4.5 C 23,4.7759993 23.223999,5 23.5,5 C 23.776,5 24,4.7759993 24,4.5 C 24,4.2240007 23.776,4 23.5,4 z M 25.5,4 C 25.224,4 24.999999,4.2240007 25,4.5 C 25,4.7759993 25.223999,5 25.5,5 C 25.776,5 26,4.7759993 26,4.5 C 26,4.2240007 25.776,4 25.5,4 z M 27.5,4 C 27.224,4 27,4.224 27,4.5 C 27,4.776 27.224,5 27.5,5 C 27.776,5 28,4.776 28,4.5 C 28,4.224 27.776,4 27.5,4 z M 20.5,5 C 20.224,5 19.999999,5.2240008 20,5.5 C 20,5.7759993 20.223999,6 20.5,6 C 20.776,6 21,5.7759994 21,5.5 C 21,5.2240007 20.776,5 20.5,5 z M 22.5,5 C 22.224,5 21.999999,5.2240008 22,5.5 C 22,5.7759993 22.223999,6 22.5,6 C 22.776,6 23,5.7759994 23,5.5 C 23,5.2240007 22.776,5 22.5,5 z M 24.5,5 C 24.224,5 23.999999,5.2240008 24,5.5 C 24,5.7759993 24.223999,6 24.5,6 C 24.776,6 25,5.7759994 25,5.5 C 25,5.2240007 24.776,5 24.5,5 z M 26.5,5 C 26.224,5 25.999999,5.2240008 26,5.5 C 26,5.7759993 26.223999,6 26.5,6 C 26.776,6 27,5.7759994 27,5.5 C 27,5.2240007 26.776,5 26.5,5 z M 28.5,5 C 28.224,5 28,5.224 28,5.5 C 28,5.776 28.224,6 28.5,6 C 28.776,6 29,5.776 29,5.5 C 29,5.224 28.776,5 28.5,5 z M 19.5,6 C 19.224,6 18.999999,6.2240008 19,6.5 C 19,6.7759993 19.223999,7 19.5,7 C 19.776,7 20,6.7759994 20,6.5 C 20,6.2240007 19.776,6 19.5,6 z M 21.5,6 C 21.224,6 20.999999,6.2240008 21,6.5 C 21,6.7759993 21.223999,7 21.5,7 C 21.776,7 22,6.7759994 22,6.5 C 22,6.2240007 21.776,6 21.5,6 z M 23.5,6 C 23.224,6 22.999999,6.2240008 23,6.5 C 23,6.7759993 23.223999,7 23.5,7 C 23.776,7 24,6.7759994 24,6.5 C 24,6.2240007 23.776,6 23.5,6 z M 25.5,6 C 25.224,6 24.999999,6.2240008 25,6.5 C 25,6.7759993 25.223999,7 25.5,7 C 25.776,7 26,6.7759994 26,6.5 C 26,6.2240007 25.776,6 25.5,6 z M 27.5,6 C 27.224,6 26.999999,6.2240008 27,6.5 C 27,6.7759993 27.223999,7 27.5,7 C 27.776,7 28,6.7759994 28,6.5 C 28,6.2240007 27.776,6 27.5,6 z M 29.5,6 C 29.224,6 29,6.224 29,6.5 C 29,6.776 29.224,7 29.5,7 C 29.776,7 30,6.776 30,6.5 C 30,6.224 29.776,6 29.5,6 z M 20.5,7 C 20.224,7 19.999999,7.2240008 20,7.5 C 20,7.7759993 20.223999,8.0000002 20.5,8 C 20.776,8 21,7.7759994 21,7.5 C 21,7.2240007 20.776,7 20.5,7 z M 22.5,7 C 22.224,7 21.999999,7.2240008 22,7.5 C 22,7.7759993 22.223999,8.0000002 22.5,8 C 22.776,8 23,7.7759994 23,7.5 C 23,7.2240007 22.776,7 22.5,7 z M 24.5,7 C 24.224,7 23.999999,7.2240008 24,7.5 C 24,7.7759993 24.223999,8.0000002 24.5,8 C 24.776,8 25,7.7759994 25,7.5 C 25,7.2240007 24.776,7 24.5,7 z M 26.5,7 C 26.224,7 25.999999,7.2240008 26,7.5 C 26,7.7759993 26.223999,8.0000002 26.5,8 C 26.776,8 27,7.7759994 27,7.5 C 27,7.2240007 26.776,7 26.5,7 z M 28.5,7 C 28.224,7 27.999999,7.2240008 28,7.5 C 28,7.7759993 28.223999,8.0000002 28.5,8 C 28.776,8 29,7.7759994 29,7.5 C 29,7.2240007 28.776,7 28.5,7 z M 30.5,7 C 30.224,7 30,7.224 30,7.5 C 30,7.776 30.224,8 30.5,8 C 30.776,8 31,7.776 31,7.5 C 31,7.224 30.776,7 30.5,7 z M 19.5,8 C 19.224,8 18.999999,8.2240008 19,8.5 C 19,8.7759993 19.223999,9 19.5,9 C 19.776,9 20,8.7759994 20,8.5 C 20,8.2240007 19.776,8 19.5,8 z M 21.5,8 C 21.224,8 20.999999,8.2240008 21,8.5 C 21,8.7759993 21.223999,9 21.5,9 C 21.776,9 22,8.7759994 22,8.5 C 22,8.2240007 21.776,8 21.5,8 z M 23.5,8 C 23.224,8 22.999999,8.2240008 23,8.5 C 23,8.7759993 23.223999,9 23.5,9 C 23.776,9 24,8.7759994 24,8.5 C 24,8.2240007 23.776,8 23.5,8 z M 25.5,8 C 25.224,8 24.999999,8.2240008 25,8.5 C 25,8.7759993 25.223999,9 25.5,9 C 25.776,9 26,8.7759994 26,8.5 C 26,8.2240007 25.776,8 25.5,8 z M 27.5,8 C 27.224,8 26.999999,8.2240008 27,8.5 C 27,8.7759993 27.223999,9 27.5,9 C 27.776,9 28,8.7759994 28,8.5 C 28,8.2240007 27.776,8 27.5,8 z M 29.5,8 C 29.224,8 28.999999,8.2240008 29,8.5 C 29,8.7759993 29.223999,9 29.5,9 C 29.776,9 30,8.7759994 30,8.5 C 30,8.2240007 29.776,8 29.5,8 z M 18.5,9 C 18.224,9 17.999999,9.224001 18,9.5 C 18,9.775999 18.223999,10 18.5,10 C 18.776,10 19,9.775999 19,9.5 C 19,9.224001 18.776,9 18.5,9 z M 20.5,9 C 20.224,9 19.999999,9.224001 20,9.5 C 20,9.775999 20.223999,10 20.5,10 C 20.776,10 21,9.775999 21,9.5 C 21,9.224001 20.776,9 20.5,9 z M 22.5,9 C 22.224,9 21.999999,9.224001 22,9.5 C 22,9.775999 22.223999,10 22.5,10 C 22.776,10 23,9.775999 23,9.5 C 23,9.224001 22.776,9 22.5,9 z M 24.5,9 C 24.224,9 23.999999,9.224001 24,9.5 C 24,9.775999 24.223999,10 24.5,10 C 24.776,10 25,9.775999 25,9.5 C 25,9.224001 24.776,9 24.5,9 z M 26.5,9 C 26.224,9 25.999999,9.224001 26,9.5 C 26,9.775999 26.223999,10 26.5,10 C 26.776,10 27,9.775999 27,9.5 C 27,9.224001 26.776,9 26.5,9 z M 28.5,9 C 28.224,9 27.999999,9.224001 28,9.5 C 28,9.775999 28.223999,10 28.5,10 C 28.776,10 29,9.775999 29,9.5 C 29,9.224001 28.776,9 28.5,9 z M 30.5,9 C 30.224,9 30,9.224 30,9.5 C 30,9.776 30.224,10 30.5,10 C 30.776,10 31,9.776 31,9.5 C 31,9.224 30.776,9 30.5,9 z M 19.5,10 C 19.224,10 18.999999,10.224001 19,10.5 C 19,10.775999 19.223999,11 19.5,11 C 19.776,11 20,10.775999 20,10.5 C 20,10.224001 19.776,10 19.5,10 z M 21.5,10 C 21.224,10 20.999999,10.224001 21,10.5 C 21,10.775999 21.223999,11 21.5,11 C 21.776,11 22,10.775999 22,10.5 C 22,10.224001 21.776,10 21.5,10 z M 23.5,10 C 23.224,10 22.999999,10.224001 23,10.5 C 23,10.775999 23.223999,11 23.5,11 C 23.776,11 24,10.775999 24,10.5 C 24,10.224001 23.776,10 23.5,10 z M 25.5,10 C 25.224,10 24.999999,10.224001 25,10.5 C 25,10.775999 25.223999,11 25.5,11 C 25.776,11 26,10.775999 26,10.5 C 26,10.224001 25.776,10 25.5,10 z M 27.5,10 C 27.224,10 26.999999,10.224001 27,10.5 C 27,10.775999 27.223999,11 27.5,11 C 27.776,11 28,10.775999 28,10.5 C 28,10.224001 27.776,10 27.5,10 z M 29.5,10 C 29.224,10 28.999999,10.224001 29,10.5 C 29,10.775999 29.223999,11 29.5,11 C 29.776,11 30,10.775999 30,10.5 C 30,10.224001 29.776,10 29.5,10 z M 18.5,11 C 18.224,11 17.999999,11.224 18,11.5 C 18,11.775999 18.223999,12 18.5,12 C 18.776,12 19,11.775999 19,11.5 C 19,11.224001 18.776,11 18.5,11 z M 20.5,11 C 20.224,11 19.999999,11.224 20,11.5 C 20,11.775999 20.223999,12 20.5,12 C 20.776,12 21,11.775999 21,11.5 C 21,11.224001 20.776,11 20.5,11 z M 22.5,11 C 22.224,11 21.999999,11.224 22,11.5 C 22,11.775999 22.223999,12 22.5,12 C 22.776,12 23,11.775999 23,11.5 C 23,11.224001 22.776,11 22.5,11 z M 24.5,11 C 24.224,11 23.999999,11.224 24,11.5 C 24,11.775999 24.223999,12 24.5,12 C 24.776,12 25,11.775999 25,11.5 C 25,11.224001 24.776,11 24.5,11 z M 26.5,11 C 26.224,11 25.999999,11.224 26,11.5 C 26,11.775999 26.223999,12 26.5,12 C 26.776,12 27,11.775999 27,11.5 C 27,11.224001 26.776,11 26.5,11 z M 28.5,11 C 28.224,11 27.999999,11.224 28,11.5 C 28,11.775999 28.223999,12 28.5,12 C 28.776,12 29,11.775999 29,11.5 C 29,11.224001 28.776,11 28.5,11 z M 30.5,11 C 30.224,11 30,11.224 30,11.5 C 30,11.776 30.224,12 30.5,12 C 30.776,12 31,11.776 31,11.5 C 31,11.224 30.776,11 30.5,11 z M 19.5,12 C 19.224,12 18.999999,12.224 19,12.5 C 19,12.775999 19.223999,13 19.5,13 C 19.776,13 20,12.775999 20,12.5 C 20,12.224001 19.776,12 19.5,12 z M 21.5,12 C 21.224,12 20.999999,12.224 21,12.5 C 21,12.775999 21.223999,13 21.5,13 C 21.776,13 22,12.775999 22,12.5 C 22,12.224001 21.776,12 21.5,12 z M 23.5,12 C 23.224,12 22.999999,12.224 23,12.5 C 23,12.775999 23.223999,13 23.5,13 C 23.776,13 24,12.775999 24,12.5 C 24,12.224001 23.776,12 23.5,12 z M 25.5,12 C 25.224,12 24.999999,12.224 25,12.5 C 25,12.775999 25.223999,13 25.5,13 C 25.776,13 26,12.775999 26,12.5 C 26,12.224001 25.776,12 25.5,12 z M 27.5,12 C 27.224,12 26.999999,12.224 27,12.5 C 27,12.775999 27.223999,13 27.5,13 C 27.776,13 28,12.775999 28,12.5 C 28,12.224001 27.776,12 27.5,12 z M 29.5,12 C 29.224,12 28.999999,12.224 29,12.5 C 29,12.775999 29.223999,13 29.5,13 C 29.776,13 30,12.775999 30,12.5 C 30,12.224001 29.776,12 29.5,12 z M 18.5,13 C 18.224,13 17.999999,13.224 18,13.5 C 18,13.775999 18.223999,14 18.5,14 C 18.776,14 19,13.775999 19,13.5 C 19,13.224001 18.776,13 18.5,13 z M 20.5,13 C 20.224,13 19.999999,13.224 20,13.5 C 20,13.775999 20.223999,14 20.5,14 C 20.776,14 21,13.775999 21,13.5 C 21,13.224001 20.776,13 20.5,13 z M 22.5,13 C 22.224,13 21.999999,13.224 22,13.5 C 22,13.775999 22.223999,14 22.5,14 C 22.776,14 23,13.775999 23,13.5 C 23,13.224001 22.776,13 22.5,13 z M 24.5,13 C 24.224,13 23.999999,13.224 24,13.5 C 24,13.775999 24.223999,14 24.5,14 C 24.776,14 25,13.775999 25,13.5 C 25,13.224001 24.776,13 24.5,13 z M 26.5,13 C 26.224,13 25.999999,13.224 26,13.5 C 26,13.775999 26.223999,14 26.5,14 C 26.776,14 27,13.775999 27,13.5 C 27,13.224001 26.776,13 26.5,13 z M 28.5,13 C 28.224,13 27.999999,13.224 28,13.5 C 28,13.775999 28.223999,14 28.5,14 C 28.776,14 29,13.775999 29,13.5 C 29,13.224001 28.776,13 28.5,13 z M 30.5,13 C 30.224,13 30,13.224 30,13.5 C 30,13.776 30.224,14 30.5,14 C 30.776,14 31,13.776 31,13.5 C 31,13.224 30.776,13 30.5,13 z M 19.5,14 C 19.224,14 18.999999,14.224 19,14.5 C 19,14.775999 19.223999,15 19.5,15 C 19.776,15 20,14.775999 20,14.5 C 20,14.224001 19.776,14 19.5,14 z M 21.5,14 C 21.224,14 20.999999,14.224 21,14.5 C 21,14.775999 21.223999,15 21.5,15 C 21.776,15 22,14.775999 22,14.5 C 22,14.224001 21.776,14 21.5,14 z M 23.5,14 C 23.224,14 22.999999,14.224 23,14.5 C 23,14.775999 23.223999,15 23.5,15 C 23.776,15 24,14.775999 24,14.5 C 24,14.224001 23.776,14 23.5,14 z M 25.5,14 C 25.224,14 24.999999,14.224 25,14.5 C 25,14.775999 25.223999,15 25.5,15 C 25.776,15 26,14.775999 26,14.5 C 26,14.224001 25.776,14 25.5,14 z M 27.5,14 C 27.224,14 26.999999,14.224 27,14.5 C 27,14.775999 27.223999,15 27.5,15 C 27.776,15 28,14.775999 28,14.5 C 28,14.224001 27.776,14 27.5,14 z M 29.5,14 C 29.224,14 28.999999,14.224 29,14.5 C 29,14.775999 29.223999,15 29.5,15 C 29.776,15 30,14.775999 30,14.5 C 30,14.224001 29.776,14 29.5,14 z M 18.5,15 C 18.224,15 17.999999,15.224 18,15.5 C 18,15.775999 18.223999,16 18.5,16 C 18.776,16 19,15.775999 19,15.5 C 19,15.224001 18.776,15 18.5,15 z M 20.5,15 C 20.224,15 19.999999,15.224 20,15.5 C 20,15.775999 20.223999,16 20.5,16 C 20.776,16 21,15.775999 21,15.5 C 21,15.224001 20.776,15 20.5,15 z M 22.5,15 C 22.224,15 21.999999,15.224 22,15.5 C 22,15.775999 22.223999,16 22.5,16 C 22.776,16 23,15.775999 23,15.5 C 23,15.224001 22.776,15 22.5,15 z M 24.5,15 C 24.224,15 23.999999,15.224 24,15.5 C 24,15.775999 24.223999,16 24.5,16 C 24.776,16 25,15.775999 25,15.5 C 25,15.224001 24.776,15 24.5,15 z M 26.5,15 C 26.224,15 25.999999,15.224 26,15.5 C 26,15.775999 26.223999,16 26.5,16 C 26.776,16 27,15.775999 27,15.5 C 27,15.224001 26.776,15 26.5,15 z M 28.5,15 C 28.224,15 27.999999,15.224 28,15.5 C 28,15.775999 28.223999,16 28.5,16 C 28.776,16 29,15.775999 29,15.5 C 29,15.224001 28.776,15 28.5,15 z M 30.5,15 C 30.224,15 30,15.224 30,15.5 C 30,15.776 30.224,16 30.5,16 C 30.776,16 31,15.776 31,15.5 C 31,15.224 30.776,15 30.5,15 z M 19.5,16 C 19.224,16 18.999999,16.224001 19,16.5 C 19,16.775999 19.223999,17 19.5,17 C 19.776,17 20,16.776 20,16.5 C 20,16.224001 19.776,16 19.5,16 z M 21.5,16 C 21.224,16 20.999999,16.224001 21,16.5 C 21,16.775999 21.223999,17 21.5,17 C 21.776,17 22,16.776 22,16.5 C 22,16.224001 21.776,16 21.5,16 z M 23.5,16 C 23.224,16 22.999999,16.224001 23,16.5 C 23,16.775999 23.223999,17 23.5,17 C 23.776,17 24,16.776 24,16.5 C 24,16.224001 23.776,16 23.5,16 z M 25.5,16 C 25.224,16 24.999999,16.224001 25,16.5 C 25,16.775999 25.223999,17 25.5,17 C 25.776,17 26,16.776 26,16.5 C 26,16.224001 25.776,16 25.5,16 z M 27.5,16 C 27.224,16 26.999999,16.224001 27,16.5 C 27,16.775999 27.223999,17 27.5,17 C 27.776,17 28,16.776 28,16.5 C 28,16.224001 27.776,16 27.5,16 z M 29.5,16 C 29.224,16 28.999999,16.224 29,16.5 C 29,16.775999 29.223999,17 29.5,17 C 29.776,17 30,16.775999 30,16.5 C 30,16.224001 29.776,16 29.5,16 z M 18.5,17 C 18.224,17 17.999999,17.224001 18,17.5 C 18,17.775999 18.223999,18 18.5,18 C 18.776,18 19,17.776 19,17.5 C 19,17.224001 18.776,17 18.5,17 z M 20.5,17 C 20.224,17 19.999999,17.224001 20,17.5 C 20,17.775999 20.223999,18 20.5,18 C 20.776,18 21,17.776 21,17.5 C 21,17.224001 20.776,17 20.5,17 z M 22.5,17 C 22.224,17 21.999999,17.224001 22,17.5 C 22,17.775999 22.223999,18 22.5,18 C 22.776,18 23,17.776 23,17.5 C 23,17.224001 22.776,17 22.5,17 z M 24.5,17 C 24.224,17 23.999999,17.224001 24,17.5 C 24,17.775999 24.223999,18 24.5,18 C 24.776,18 25,17.776 25,17.5 C 25,17.224001 24.776,17 24.5,17 z M 26.5,17 C 26.224,17 25.999999,17.224001 26,17.5 C 26,17.775999 26.223999,18 26.5,18 C 26.776,18 27,17.776 27,17.5 C 27,17.224001 26.776,17 26.5,17 z M 28.5,17 C 28.224,17 27.999999,17.224001 28,17.5 C 28,17.775999 28.223999,18 28.5,18 C 28.776,18 29,17.776 29,17.5 C 29,17.224001 28.776,17 28.5,17 z M 30.5,17 C 30.224,17 30,17.224 30,17.5 C 30,17.776 30.224,18 30.5,18 C 30.776,18 31,17.776 31,17.5 C 31,17.224 30.776,17 30.5,17 z M 19.5,18 C 19.224,18 18.999999,18.224001 19,18.5 C 19,18.775999 19.223999,19 19.5,19 C 19.776,19 20,18.776 20,18.5 C 20,18.224001 19.776,18 19.5,18 z M 21.5,18 C 21.224,18 20.999999,18.224001 21,18.5 C 21,18.775999 21.223999,19 21.5,19 C 21.776,19 22,18.776 22,18.5 C 22,18.224001 21.776,18 21.5,18 z M 23.5,18 C 23.224,18 22.999999,18.224001 23,18.5 C 23,18.775999 23.223999,19 23.5,19 C 23.776,19 24,18.776 24,18.5 C 24,18.224001 23.776,18 23.5,18 z M 25.5,18 C 25.224,18 24.999999,18.224001 25,18.5 C 25,18.775999 25.223999,19 25.5,19 C 25.776,19 26,18.776 26,18.5 C 26,18.224001 25.776,18 25.5,18 z M 27.5,18 C 27.224,18 26.999999,18.224001 27,18.5 C 27,18.775999 27.223999,19 27.5,19 C 27.776,19 28,18.776 28,18.5 C 28,18.224001 27.776,18 27.5,18 z M 29.5,18 C 29.224,18 28.999999,18.224001 29,18.5 C 29,18.775999 29.223999,19 29.5,19 C 29.776,19 30,18.776 30,18.5 C 30,18.224001 29.776,18 29.5,18 z M 18.5,19 C 18.224,19 17.999999,19.224001 18,19.5 C 18,19.775999 18.223999,19.999999 18.5,20 C 18.776,20 19,19.776 19,19.5 C 19,19.224001 18.776,19 18.5,19 z M 20.5,19 C 20.224,19 19.999999,19.224001 20,19.5 C 20,19.775999 20.223999,19.999999 20.5,20 C 20.776,20 21,19.776 21,19.5 C 21,19.224001 20.776,19 20.5,19 z M 22.5,19 C 22.224,19 21.999999,19.224001 22,19.5 C 22,19.775999 22.223999,19.999999 22.5,20 C 22.776,20 23,19.776 23,19.5 C 23,19.224001 22.776,19 22.5,19 z M 24.5,19 C 24.224,19 23.999999,19.224001 24,19.5 C 24,19.775999 24.223999,19.999999 24.5,20 C 24.776,20 25,19.776 25,19.5 C 25,19.224001 24.776,19 24.5,19 z M 26.5,19 C 26.224,19 25.999999,19.224001 26,19.5 C 26,19.775999 26.223999,19.999999 26.5,20 C 26.776,20 27,19.776 27,19.5 C 27,19.224001 26.776,19 26.5,19 z M 28.5,19 C 28.224,19 27.999999,19.224001 28,19.5 C 28,19.775999 28.223999,19.999999 28.5,20 C 28.776,20 29,19.776 29,19.5 C 29,19.224001 28.776,19 28.5,19 z M 30.5,19 C 30.224,19 30,19.224 30,19.5 C 30,19.776 30.224,20 30.5,20 C 30.776,20 31,19.776 31,19.5 C 31,19.224 30.776,19 30.5,19 z M 19.5,20 C 19.224,20 18.999999,20.224001 19,20.5 C 19,20.775999 19.223999,20.999999 19.5,21 C 19.776,21 20,20.776 20,20.5 C 20,20.224001 19.776,20 19.5,20 z M 21.5,20 C 21.224,20 20.999999,20.224001 21,20.5 C 21,20.775999 21.223999,20.999999 21.5,21 C 21.776,21 22,20.776 22,20.5 C 22,20.224001 21.776,20 21.5,20 z M 23.5,20 C 23.224,20 22.999999,20.224001 23,20.5 C 23,20.775999 23.223999,20.999999 23.5,21 C 23.776,21 24,20.776 24,20.5 C 24,20.224001 23.776,20 23.5,20 z M 25.5,20 C 25.224,20 24.999999,20.224001 25,20.5 C 25,20.775999 25.223999,20.999999 25.5,21 C 25.776,21 26,20.776 26,20.5 C 26,20.224001 25.776,20 25.5,20 z M 27.5,20 C 27.224,20 26.999999,20.224001 27,20.5 C 27,20.775999 27.223999,20.999999 27.5,21 C 27.776,21 28,20.776 28,20.5 C 28,20.224001 27.776,20 27.5,20 z M 29.5,20 C 29.224,20 28.999999,20.224001 29,20.5 C 29,20.775999 29.223999,20.999999 29.5,21 C 29.776,21 30,20.776 30,20.5 C 30,20.224001 29.776,20 29.5,20 z M 20.5,21 C 20.224,21 19.999999,21.224001 20,21.5 C 20,21.775999 20.223999,21.999999 20.5,22 C 20.776,22 21,21.776 21,21.5 C 21,21.224001 20.776,21 20.5,21 z M 22.5,21 C 22.224,21 21.999999,21.224001 22,21.5 C 22,21.775999 22.223999,21.999999 22.5,22 C 22.776,22 23,21.776 23,21.5 C 23,21.224001 22.776,21 22.5,21 z M 24.5,21 C 24.224,21 23.999999,21.224001 24,21.5 C 24,21.775999 24.223999,21.999999 24.5,22 C 24.776,22 25,21.776 25,21.5 C 25,21.224001 24.776,21 24.5,21 z M 26.5,21 C 26.224,21 25.999999,21.224001 26,21.5 C 26,21.775999 26.223999,21.999999 26.5,22 C 26.776,22 27,21.776 27,21.5 C 27,21.224001 26.776,21 26.5,21 z M 28.5,21 C 28.224,21 27.999999,21.224001 28,21.5 C 28,21.775999 28.223999,21.999999 28.5,22 C 28.776,22 29,21.776 29,21.5 C 29,21.224001 28.776,21 28.5,21 z M 21.5,22 C 21.224,22 20.999999,22.224001 21,22.5 C 21,22.775999 21.223999,22.999999 21.5,23 C 21.776,23 22,22.776 22,22.5 C 22,22.224001 21.776,22 21.5,22 z M 23.5,22 C 23.224,22 22.999999,22.224001 23,22.5 C 23,22.775999 23.223999,22.999999 23.5,23 C 23.776,23 24,22.776 24,22.5 C 24,22.224001 23.776,22 23.5,22 z M 25.5,22 C 25.224,22 24.999999,22.224001 25,22.5 C 25,22.775999 25.223999,22.999999 25.5,23 C 25.776,23 26,22.776 26,22.5 C 26,22.224001 25.776,22 25.5,22 z M 27.5,22 C 27.224,22 26.999999,22.224001 27,22.5 C 27,22.775999 27.223999,22.999999 27.5,23 C 27.776,23 28,22.776 28,22.5 C 28,22.224001 27.776,22 27.5,22 z M 22.5,23 C 22.224,23 21.999999,23.224001 22,23.5 C 22,23.775999 22.223999,23.999999 22.5,24 C 22.776,24 23,23.776 23,23.5 C 23,23.224001 22.776,23 22.5,23 z M 24.5,23 C 24.224,23 23.999999,23.224001 24,23.5 C 24,23.775999 24.223999,23.999999 24.5,24 C 24.776,24 25,23.776 25,23.5 C 25,23.224001 24.776,23 24.5,23 z M 26.5,23 C 26.224,23 25.999999,23.224001 26,23.5 C 26,23.775999 26.223999,23.999999 26.5,24 C 26.776,24 27,23.776 27,23.5 C 27,23.224001 26.776,23 26.5,23 z M 23.5,24 C 23.224,24 22.999999,24.224001 23,24.5 C 23,24.775999 23.223999,24.999999 23.5,25 C 23.776,25 24,24.776 24,24.5 C 24,24.224001 23.776,24 23.5,24 z M 25.5,24 C 25.224,24 24.999999,24.224001 25,24.5 C 25,24.775999 25.223999,24.999999 25.5,25 C 25.776,25 26,24.776 26,24.5 C 26,24.224001 25.776,24 25.5,24 z"
+ style="opacity:0.5;fill:url(#linearGradient3064);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="6.0500031"
+ rx="6.0000024"
+ y="2.5000026"
+ x="18.500008"
+ height="22.000008"
+ width="12.000005"
+ id="rect2967"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient3066);stroke-width:1.0000006;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ style="stroke:#729fcf;display:inline"
+ id="g28807"
+ transform="matrix(0.272091,0,0,0.9423324,-15.475768,-4.3498543)">
+ <path
+ sodipodi:nodetypes="csc"
+ id="path27920"
+ d="M 74.954806,30.15625 C 77.22438,28.375887 78.673556,25.606103 78.673556,22.5 C 78.673556,19.560794 77.36198,16.939552 75.298556,15.15625"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3377);stroke-width:1.52005064;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/status/audio-input-microphone-medium.svg b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-medium.svg
new file mode 100644
index 0000000..ba8b5a4
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-medium.svg
@@ -0,0 +1,1066 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2790"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="audio-input-mic-medium.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs2792">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.6828427,-122.46854,-61.286186)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6964"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6976"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient6958">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop6960" />
+ <stop
+ id="stop6966"
+ offset="0.60000002"
+ style="stop-color:#729fcf;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop6962" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6984"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-69.461,-45.746674)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3579">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3581" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3583" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3585"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)" />
+ <linearGradient
+ id="linearGradient3228">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3230" />
+ <stop
+ id="stop3573"
+ offset="0.06770357"
+ style="stop-color:black;stop-opacity:0.42857143;" />
+ <stop
+ id="stop3569"
+ offset="0.29894069"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:0.49803922;"
+ offset="0.77437174"
+ id="stop3571" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="1"
+ id="stop3232" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3567"
+ gradientUnits="userSpaceOnUse"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399"
+ gradientTransform="translate(0,3)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2920">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2922" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2924" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient2926"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2877">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2879" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient2894"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3815">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3817" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3819" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient2892"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2867">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2869" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2871" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient2890"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ id="linearGradient3734">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="0"
+ id="stop3736" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop3738" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3740"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient4481">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4483" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop4485" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient4487"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2904">
+ <stop
+ id="stop2906"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0.21551724"
+ id="stop2910" />
+ <stop
+ id="stop2912"
+ offset="0.70243758"
+ style="stop-color:#c3c4c2;stop-opacity:1;" />
+ <stop
+ id="stop2908"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient2902"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2949"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2943">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop2945" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="1"
+ id="stop2947" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2953"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientTransform="translate(14,0)" />
+ <linearGradient
+ id="linearGradient2981">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop2983" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop2985" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient2987"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3805"
+ gradientUnits="userSpaceOnUse"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientTransform="translate(20,-1)" />
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3801"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient3726">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop3728" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="1"
+ id="stop3730" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3732"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3703">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3705" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3707" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3709"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3779">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3781" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3783" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3785"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2965">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2967" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:0;"
+ offset="1"
+ id="stop2969" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient2971"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3711"
+ inkscape:collect="always">
+ <stop
+ id="stop3713"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ id="stop3715"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3691"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4465">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="0"
+ id="stop4467" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:0"
+ offset="1"
+ id="stop4469" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4465"
+ id="linearGradient4460"
+ gradientUnits="userSpaceOnUse"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942"
+ gradientTransform="translate(-0.25,12.5)" />
+ <linearGradient
+ id="linearGradient4475"
+ inkscape:collect="always">
+ <stop
+ id="stop4477"
+ offset="0"
+ style="stop-color:black;stop-opacity:1" />
+ <stop
+ id="stop4479"
+ offset="1"
+ style="stop-color:black;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4475"
+ id="linearGradient4473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.25,13.5)"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient4505"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4499">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop4501" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop4503" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2798" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.6828427,-122.46854,-61.286186)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-53.287444,-45.746674)"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient3032"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3036"
+ gradientUnits="userSpaceOnUse"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3038"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3040"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3042"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(20,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient3044"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient3046"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(14,0)"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient3048"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient3050"
+ gradientUnits="userSpaceOnUse"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient3052"
+ gradientUnits="userSpaceOnUse"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3054"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient3056"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient3058"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient3060"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient3062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,3)"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3066"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.270833"
+ inkscape:cx="23.999998"
+ inkscape:cy="23.999998"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="780"
+ inkscape:window-height="776"
+ inkscape:window-x="161"
+ inkscape:window-y="146" />
+ <metadata
+ id="metadata2795">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g2915"
+ transform="translate(7.6010187,0.1428571)">
+ <path
+ transform="matrix(0.727673,0,0,1.235135,7.166344,-12.0556)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2917"
+ style="opacity:0.1;fill:url(#radialGradient3026);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.233813,0,0,1.235135,-4.890235,-6.055598)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2919"
+ style="opacity:0.7;fill:url(#radialGradient3028);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2925"
+ style="opacity:1;fill:url(#radialGradient3030);fill-opacity:1;stroke:#555753;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.43667,0,0,0.429141,14.09824,21.41158)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2927"
+ style="opacity:1;fill:url(#radialGradient3032);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccssccc"
+ id="path2929"
+ d="M 27.35249,32.125 C 25.613836,32.860383 24.806671,34.177948 23.67433,35.292277 C 23.188021,35.599877 23.07463,36.001723 23.15468,36.568962 C 23.23473,37.136205 23.644126,37.624296 24.196826,37.787146 C 24.749524,37.949994 25.196373,37.917185 25.574713,37.485007 C 26.676195,35.285524 28.744563,33.983863 31,32.85591 C 29.870496,32.536987 28.651039,32.264053 27.35249,32.125 z"
+ style="opacity:0.7;fill:url(#linearGradient3034);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 23.8125,31.5 C 20.473005,31.5 17.440949,32.183256 15.34375,33.25 C 13.246551,34.316744 12.21875,35.666366 12.21875,36.90625 C 12.21875,38.146134 13.246551,39.495756 15.34375,40.5625 C 17.440949,41.629244 20.473005,42.312501 23.8125,42.3125 C 27.151995,42.3125 30.184051,41.629244 32.28125,40.5625 C 34.378449,39.495756 35.40625,38.146134 35.40625,36.90625 C 35.40625,35.666366 34.378449,34.316744 32.28125,33.25 C 30.184051,32.183256 27.151995,31.5 23.8125,31.5 z"
+ id="path2931"
+ style="opacity:0.4;fill:none;fill-opacity:1;stroke:url(#linearGradient3036);stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ inkscape:original="M 23.8125 30.5 C 16.859872 30.5 11.21875 33.368948 11.21875 36.90625 C 11.21875 40.443552 16.859872 43.312502 23.8125 43.3125 C 30.765128 43.3125 36.406249 40.443552 36.40625 36.90625 C 36.40625 33.368948 30.765128 30.5 23.8125 30.5 z "
+ inkscape:radius="-0.99470079"
+ sodipodi:type="inkscape:offset" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2933"
+ d="M 24.5,27.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3038);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2935"
+ d="M 34.500008,18.999997 C 34.5,23.285708 30.040008,26.499998 24.500006,26.499998 C 18.960004,26.499998 14.5,23.285708 14.500003,18.999997"
+ style="fill:none;fill-opacity:1;stroke:#888a85;stroke-width:3.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="12.5"
+ height="2.9999995"
+ width="4"
+ id="rect2937"
+ style="opacity:1;fill:url(#linearGradient3040);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="32.5"
+ height="2.9999995"
+ width="4"
+ id="rect2939"
+ style="opacity:1;fill:url(#linearGradient3042);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2941"
+ d="M 34.500008,18.999991 C 34.500008,23.285701 30.040008,26.499992 24.500006,26.499992 C 18.960004,26.499992 14.5,23.285701 14.500003,18.999991"
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient3044);stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="30"
+ height="6"
+ width="3.0000005"
+ id="rect2943"
+ style="opacity:1;fill:url(#linearGradient3046);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,12.25,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2945"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="16"
+ height="6"
+ width="3.0000005"
+ id="rect2947"
+ style="opacity:1;fill:url(#linearGradient3048);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="7.0108709"
+ rx="7.0000019"
+ y="1.5000002"
+ x="17.499996"
+ height="24.000008"
+ width="14.000004"
+ id="rect2949"
+ style="opacity:1;fill:url(#linearGradient3050);fill-opacity:1;stroke:url(#linearGradient3052);stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2951"
+ d="M 24.5,26.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3054);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,-7.75,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2953"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <g
+ id="g2955"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:url(#linearGradient3056);fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect2957"
+ width="4"
+ height="15.374996"
+ x="20"
+ y="6"
+ rx="2"
+ ry="2.1991496" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.54470092"
+ inkscape:original="M 24.5 2.5 C 20.621999 2.5 17.5 5.615977 17.5 9.5 L 17.5 19.5 C 17.5 23.384022 20.621999 26.5 24.5 26.5 C 28.378001 26.5 31.5 23.384022 31.5 19.5 L 31.5 9.5 C 31.5 5.6159775 28.378001 2.5 24.5 2.5 z "
+ style="opacity:0.2;fill:url(#linearGradient3058);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="path2959"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,19.5 C 18.03125,23.092133 20.913778,25.96875 24.5,25.96875 C 28.086222,25.96875 30.96875,23.092133 30.96875,19.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#linearGradient3060);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2961"
+ sodipodi:cx="23.65625"
+ sodipodi:cy="7.6875"
+ sodipodi:rx="3.34375"
+ sodipodi:ry="3.0625"
+ d="M 27,7.6875 A 3.34375,3.0625 0 1 1 20.3125,7.6875 A 3.34375,3.0625 0 1 1 27,7.6875 z"
+ transform="matrix(1,0,0,1.081633,-0.375,-1.252551)" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path2963"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,14.5 L 30.96875,14.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ style="opacity:0.9;fill:url(#radialGradient3062);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:nodetypes="csssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssc"
+ id="path2965"
+ d="M 22.5,3 C 22.224,3 22,3.224 22,3.5 C 22,3.776 22.224,4 22.5,4 C 22.776,4 23,3.776 23,3.5 C 23,3.224 22.776,3 22.5,3 z M 24.5,3 C 24.224,3 24,3.224 24,3.5 C 24,3.776 24.224,4 24.5,4 C 24.776,4 25,3.776 25,3.5 C 25,3.224 24.776,3 24.5,3 z M 26.5,3 C 26.224,3 26,3.224 26,3.5 C 26,3.776 26.224,4 26.5,4 C 26.776,4 27,3.776 27,3.5 C 27,3.224 26.776,3 26.5,3 z M 21.5,4 C 21.224,4 21,4.224 21,4.5 C 21,4.776 21.224,5 21.5,5 C 21.776,5 22,4.776 22,4.5 C 22,4.224 21.776,4 21.5,4 z M 23.5,4 C 23.224,4 22.999999,4.2240007 23,4.5 C 23,4.7759993 23.223999,5 23.5,5 C 23.776,5 24,4.7759993 24,4.5 C 24,4.2240007 23.776,4 23.5,4 z M 25.5,4 C 25.224,4 24.999999,4.2240007 25,4.5 C 25,4.7759993 25.223999,5 25.5,5 C 25.776,5 26,4.7759993 26,4.5 C 26,4.2240007 25.776,4 25.5,4 z M 27.5,4 C 27.224,4 27,4.224 27,4.5 C 27,4.776 27.224,5 27.5,5 C 27.776,5 28,4.776 28,4.5 C 28,4.224 27.776,4 27.5,4 z M 20.5,5 C 20.224,5 19.999999,5.2240008 20,5.5 C 20,5.7759993 20.223999,6 20.5,6 C 20.776,6 21,5.7759994 21,5.5 C 21,5.2240007 20.776,5 20.5,5 z M 22.5,5 C 22.224,5 21.999999,5.2240008 22,5.5 C 22,5.7759993 22.223999,6 22.5,6 C 22.776,6 23,5.7759994 23,5.5 C 23,5.2240007 22.776,5 22.5,5 z M 24.5,5 C 24.224,5 23.999999,5.2240008 24,5.5 C 24,5.7759993 24.223999,6 24.5,6 C 24.776,6 25,5.7759994 25,5.5 C 25,5.2240007 24.776,5 24.5,5 z M 26.5,5 C 26.224,5 25.999999,5.2240008 26,5.5 C 26,5.7759993 26.223999,6 26.5,6 C 26.776,6 27,5.7759994 27,5.5 C 27,5.2240007 26.776,5 26.5,5 z M 28.5,5 C 28.224,5 28,5.224 28,5.5 C 28,5.776 28.224,6 28.5,6 C 28.776,6 29,5.776 29,5.5 C 29,5.224 28.776,5 28.5,5 z M 19.5,6 C 19.224,6 18.999999,6.2240008 19,6.5 C 19,6.7759993 19.223999,7 19.5,7 C 19.776,7 20,6.7759994 20,6.5 C 20,6.2240007 19.776,6 19.5,6 z M 21.5,6 C 21.224,6 20.999999,6.2240008 21,6.5 C 21,6.7759993 21.223999,7 21.5,7 C 21.776,7 22,6.7759994 22,6.5 C 22,6.2240007 21.776,6 21.5,6 z M 23.5,6 C 23.224,6 22.999999,6.2240008 23,6.5 C 23,6.7759993 23.223999,7 23.5,7 C 23.776,7 24,6.7759994 24,6.5 C 24,6.2240007 23.776,6 23.5,6 z M 25.5,6 C 25.224,6 24.999999,6.2240008 25,6.5 C 25,6.7759993 25.223999,7 25.5,7 C 25.776,7 26,6.7759994 26,6.5 C 26,6.2240007 25.776,6 25.5,6 z M 27.5,6 C 27.224,6 26.999999,6.2240008 27,6.5 C 27,6.7759993 27.223999,7 27.5,7 C 27.776,7 28,6.7759994 28,6.5 C 28,6.2240007 27.776,6 27.5,6 z M 29.5,6 C 29.224,6 29,6.224 29,6.5 C 29,6.776 29.224,7 29.5,7 C 29.776,7 30,6.776 30,6.5 C 30,6.224 29.776,6 29.5,6 z M 20.5,7 C 20.224,7 19.999999,7.2240008 20,7.5 C 20,7.7759993 20.223999,8.0000002 20.5,8 C 20.776,8 21,7.7759994 21,7.5 C 21,7.2240007 20.776,7 20.5,7 z M 22.5,7 C 22.224,7 21.999999,7.2240008 22,7.5 C 22,7.7759993 22.223999,8.0000002 22.5,8 C 22.776,8 23,7.7759994 23,7.5 C 23,7.2240007 22.776,7 22.5,7 z M 24.5,7 C 24.224,7 23.999999,7.2240008 24,7.5 C 24,7.7759993 24.223999,8.0000002 24.5,8 C 24.776,8 25,7.7759994 25,7.5 C 25,7.2240007 24.776,7 24.5,7 z M 26.5,7 C 26.224,7 25.999999,7.2240008 26,7.5 C 26,7.7759993 26.223999,8.0000002 26.5,8 C 26.776,8 27,7.7759994 27,7.5 C 27,7.2240007 26.776,7 26.5,7 z M 28.5,7 C 28.224,7 27.999999,7.2240008 28,7.5 C 28,7.7759993 28.223999,8.0000002 28.5,8 C 28.776,8 29,7.7759994 29,7.5 C 29,7.2240007 28.776,7 28.5,7 z M 30.5,7 C 30.224,7 30,7.224 30,7.5 C 30,7.776 30.224,8 30.5,8 C 30.776,8 31,7.776 31,7.5 C 31,7.224 30.776,7 30.5,7 z M 19.5,8 C 19.224,8 18.999999,8.2240008 19,8.5 C 19,8.7759993 19.223999,9 19.5,9 C 19.776,9 20,8.7759994 20,8.5 C 20,8.2240007 19.776,8 19.5,8 z M 21.5,8 C 21.224,8 20.999999,8.2240008 21,8.5 C 21,8.7759993 21.223999,9 21.5,9 C 21.776,9 22,8.7759994 22,8.5 C 22,8.2240007 21.776,8 21.5,8 z M 23.5,8 C 23.224,8 22.999999,8.2240008 23,8.5 C 23,8.7759993 23.223999,9 23.5,9 C 23.776,9 24,8.7759994 24,8.5 C 24,8.2240007 23.776,8 23.5,8 z M 25.5,8 C 25.224,8 24.999999,8.2240008 25,8.5 C 25,8.7759993 25.223999,9 25.5,9 C 25.776,9 26,8.7759994 26,8.5 C 26,8.2240007 25.776,8 25.5,8 z M 27.5,8 C 27.224,8 26.999999,8.2240008 27,8.5 C 27,8.7759993 27.223999,9 27.5,9 C 27.776,9 28,8.7759994 28,8.5 C 28,8.2240007 27.776,8 27.5,8 z M 29.5,8 C 29.224,8 28.999999,8.2240008 29,8.5 C 29,8.7759993 29.223999,9 29.5,9 C 29.776,9 30,8.7759994 30,8.5 C 30,8.2240007 29.776,8 29.5,8 z M 18.5,9 C 18.224,9 17.999999,9.224001 18,9.5 C 18,9.775999 18.223999,10 18.5,10 C 18.776,10 19,9.775999 19,9.5 C 19,9.224001 18.776,9 18.5,9 z M 20.5,9 C 20.224,9 19.999999,9.224001 20,9.5 C 20,9.775999 20.223999,10 20.5,10 C 20.776,10 21,9.775999 21,9.5 C 21,9.224001 20.776,9 20.5,9 z M 22.5,9 C 22.224,9 21.999999,9.224001 22,9.5 C 22,9.775999 22.223999,10 22.5,10 C 22.776,10 23,9.775999 23,9.5 C 23,9.224001 22.776,9 22.5,9 z M 24.5,9 C 24.224,9 23.999999,9.224001 24,9.5 C 24,9.775999 24.223999,10 24.5,10 C 24.776,10 25,9.775999 25,9.5 C 25,9.224001 24.776,9 24.5,9 z M 26.5,9 C 26.224,9 25.999999,9.224001 26,9.5 C 26,9.775999 26.223999,10 26.5,10 C 26.776,10 27,9.775999 27,9.5 C 27,9.224001 26.776,9 26.5,9 z M 28.5,9 C 28.224,9 27.999999,9.224001 28,9.5 C 28,9.775999 28.223999,10 28.5,10 C 28.776,10 29,9.775999 29,9.5 C 29,9.224001 28.776,9 28.5,9 z M 30.5,9 C 30.224,9 30,9.224 30,9.5 C 30,9.776 30.224,10 30.5,10 C 30.776,10 31,9.776 31,9.5 C 31,9.224 30.776,9 30.5,9 z M 19.5,10 C 19.224,10 18.999999,10.224001 19,10.5 C 19,10.775999 19.223999,11 19.5,11 C 19.776,11 20,10.775999 20,10.5 C 20,10.224001 19.776,10 19.5,10 z M 21.5,10 C 21.224,10 20.999999,10.224001 21,10.5 C 21,10.775999 21.223999,11 21.5,11 C 21.776,11 22,10.775999 22,10.5 C 22,10.224001 21.776,10 21.5,10 z M 23.5,10 C 23.224,10 22.999999,10.224001 23,10.5 C 23,10.775999 23.223999,11 23.5,11 C 23.776,11 24,10.775999 24,10.5 C 24,10.224001 23.776,10 23.5,10 z M 25.5,10 C 25.224,10 24.999999,10.224001 25,10.5 C 25,10.775999 25.223999,11 25.5,11 C 25.776,11 26,10.775999 26,10.5 C 26,10.224001 25.776,10 25.5,10 z M 27.5,10 C 27.224,10 26.999999,10.224001 27,10.5 C 27,10.775999 27.223999,11 27.5,11 C 27.776,11 28,10.775999 28,10.5 C 28,10.224001 27.776,10 27.5,10 z M 29.5,10 C 29.224,10 28.999999,10.224001 29,10.5 C 29,10.775999 29.223999,11 29.5,11 C 29.776,11 30,10.775999 30,10.5 C 30,10.224001 29.776,10 29.5,10 z M 18.5,11 C 18.224,11 17.999999,11.224 18,11.5 C 18,11.775999 18.223999,12 18.5,12 C 18.776,12 19,11.775999 19,11.5 C 19,11.224001 18.776,11 18.5,11 z M 20.5,11 C 20.224,11 19.999999,11.224 20,11.5 C 20,11.775999 20.223999,12 20.5,12 C 20.776,12 21,11.775999 21,11.5 C 21,11.224001 20.776,11 20.5,11 z M 22.5,11 C 22.224,11 21.999999,11.224 22,11.5 C 22,11.775999 22.223999,12 22.5,12 C 22.776,12 23,11.775999 23,11.5 C 23,11.224001 22.776,11 22.5,11 z M 24.5,11 C 24.224,11 23.999999,11.224 24,11.5 C 24,11.775999 24.223999,12 24.5,12 C 24.776,12 25,11.775999 25,11.5 C 25,11.224001 24.776,11 24.5,11 z M 26.5,11 C 26.224,11 25.999999,11.224 26,11.5 C 26,11.775999 26.223999,12 26.5,12 C 26.776,12 27,11.775999 27,11.5 C 27,11.224001 26.776,11 26.5,11 z M 28.5,11 C 28.224,11 27.999999,11.224 28,11.5 C 28,11.775999 28.223999,12 28.5,12 C 28.776,12 29,11.775999 29,11.5 C 29,11.224001 28.776,11 28.5,11 z M 30.5,11 C 30.224,11 30,11.224 30,11.5 C 30,11.776 30.224,12 30.5,12 C 30.776,12 31,11.776 31,11.5 C 31,11.224 30.776,11 30.5,11 z M 19.5,12 C 19.224,12 18.999999,12.224 19,12.5 C 19,12.775999 19.223999,13 19.5,13 C 19.776,13 20,12.775999 20,12.5 C 20,12.224001 19.776,12 19.5,12 z M 21.5,12 C 21.224,12 20.999999,12.224 21,12.5 C 21,12.775999 21.223999,13 21.5,13 C 21.776,13 22,12.775999 22,12.5 C 22,12.224001 21.776,12 21.5,12 z M 23.5,12 C 23.224,12 22.999999,12.224 23,12.5 C 23,12.775999 23.223999,13 23.5,13 C 23.776,13 24,12.775999 24,12.5 C 24,12.224001 23.776,12 23.5,12 z M 25.5,12 C 25.224,12 24.999999,12.224 25,12.5 C 25,12.775999 25.223999,13 25.5,13 C 25.776,13 26,12.775999 26,12.5 C 26,12.224001 25.776,12 25.5,12 z M 27.5,12 C 27.224,12 26.999999,12.224 27,12.5 C 27,12.775999 27.223999,13 27.5,13 C 27.776,13 28,12.775999 28,12.5 C 28,12.224001 27.776,12 27.5,12 z M 29.5,12 C 29.224,12 28.999999,12.224 29,12.5 C 29,12.775999 29.223999,13 29.5,13 C 29.776,13 30,12.775999 30,12.5 C 30,12.224001 29.776,12 29.5,12 z M 18.5,13 C 18.224,13 17.999999,13.224 18,13.5 C 18,13.775999 18.223999,14 18.5,14 C 18.776,14 19,13.775999 19,13.5 C 19,13.224001 18.776,13 18.5,13 z M 20.5,13 C 20.224,13 19.999999,13.224 20,13.5 C 20,13.775999 20.223999,14 20.5,14 C 20.776,14 21,13.775999 21,13.5 C 21,13.224001 20.776,13 20.5,13 z M 22.5,13 C 22.224,13 21.999999,13.224 22,13.5 C 22,13.775999 22.223999,14 22.5,14 C 22.776,14 23,13.775999 23,13.5 C 23,13.224001 22.776,13 22.5,13 z M 24.5,13 C 24.224,13 23.999999,13.224 24,13.5 C 24,13.775999 24.223999,14 24.5,14 C 24.776,14 25,13.775999 25,13.5 C 25,13.224001 24.776,13 24.5,13 z M 26.5,13 C 26.224,13 25.999999,13.224 26,13.5 C 26,13.775999 26.223999,14 26.5,14 C 26.776,14 27,13.775999 27,13.5 C 27,13.224001 26.776,13 26.5,13 z M 28.5,13 C 28.224,13 27.999999,13.224 28,13.5 C 28,13.775999 28.223999,14 28.5,14 C 28.776,14 29,13.775999 29,13.5 C 29,13.224001 28.776,13 28.5,13 z M 30.5,13 C 30.224,13 30,13.224 30,13.5 C 30,13.776 30.224,14 30.5,14 C 30.776,14 31,13.776 31,13.5 C 31,13.224 30.776,13 30.5,13 z M 19.5,14 C 19.224,14 18.999999,14.224 19,14.5 C 19,14.775999 19.223999,15 19.5,15 C 19.776,15 20,14.775999 20,14.5 C 20,14.224001 19.776,14 19.5,14 z M 21.5,14 C 21.224,14 20.999999,14.224 21,14.5 C 21,14.775999 21.223999,15 21.5,15 C 21.776,15 22,14.775999 22,14.5 C 22,14.224001 21.776,14 21.5,14 z M 23.5,14 C 23.224,14 22.999999,14.224 23,14.5 C 23,14.775999 23.223999,15 23.5,15 C 23.776,15 24,14.775999 24,14.5 C 24,14.224001 23.776,14 23.5,14 z M 25.5,14 C 25.224,14 24.999999,14.224 25,14.5 C 25,14.775999 25.223999,15 25.5,15 C 25.776,15 26,14.775999 26,14.5 C 26,14.224001 25.776,14 25.5,14 z M 27.5,14 C 27.224,14 26.999999,14.224 27,14.5 C 27,14.775999 27.223999,15 27.5,15 C 27.776,15 28,14.775999 28,14.5 C 28,14.224001 27.776,14 27.5,14 z M 29.5,14 C 29.224,14 28.999999,14.224 29,14.5 C 29,14.775999 29.223999,15 29.5,15 C 29.776,15 30,14.775999 30,14.5 C 30,14.224001 29.776,14 29.5,14 z M 18.5,15 C 18.224,15 17.999999,15.224 18,15.5 C 18,15.775999 18.223999,16 18.5,16 C 18.776,16 19,15.775999 19,15.5 C 19,15.224001 18.776,15 18.5,15 z M 20.5,15 C 20.224,15 19.999999,15.224 20,15.5 C 20,15.775999 20.223999,16 20.5,16 C 20.776,16 21,15.775999 21,15.5 C 21,15.224001 20.776,15 20.5,15 z M 22.5,15 C 22.224,15 21.999999,15.224 22,15.5 C 22,15.775999 22.223999,16 22.5,16 C 22.776,16 23,15.775999 23,15.5 C 23,15.224001 22.776,15 22.5,15 z M 24.5,15 C 24.224,15 23.999999,15.224 24,15.5 C 24,15.775999 24.223999,16 24.5,16 C 24.776,16 25,15.775999 25,15.5 C 25,15.224001 24.776,15 24.5,15 z M 26.5,15 C 26.224,15 25.999999,15.224 26,15.5 C 26,15.775999 26.223999,16 26.5,16 C 26.776,16 27,15.775999 27,15.5 C 27,15.224001 26.776,15 26.5,15 z M 28.5,15 C 28.224,15 27.999999,15.224 28,15.5 C 28,15.775999 28.223999,16 28.5,16 C 28.776,16 29,15.775999 29,15.5 C 29,15.224001 28.776,15 28.5,15 z M 30.5,15 C 30.224,15 30,15.224 30,15.5 C 30,15.776 30.224,16 30.5,16 C 30.776,16 31,15.776 31,15.5 C 31,15.224 30.776,15 30.5,15 z M 19.5,16 C 19.224,16 18.999999,16.224001 19,16.5 C 19,16.775999 19.223999,17 19.5,17 C 19.776,17 20,16.776 20,16.5 C 20,16.224001 19.776,16 19.5,16 z M 21.5,16 C 21.224,16 20.999999,16.224001 21,16.5 C 21,16.775999 21.223999,17 21.5,17 C 21.776,17 22,16.776 22,16.5 C 22,16.224001 21.776,16 21.5,16 z M 23.5,16 C 23.224,16 22.999999,16.224001 23,16.5 C 23,16.775999 23.223999,17 23.5,17 C 23.776,17 24,16.776 24,16.5 C 24,16.224001 23.776,16 23.5,16 z M 25.5,16 C 25.224,16 24.999999,16.224001 25,16.5 C 25,16.775999 25.223999,17 25.5,17 C 25.776,17 26,16.776 26,16.5 C 26,16.224001 25.776,16 25.5,16 z M 27.5,16 C 27.224,16 26.999999,16.224001 27,16.5 C 27,16.775999 27.223999,17 27.5,17 C 27.776,17 28,16.776 28,16.5 C 28,16.224001 27.776,16 27.5,16 z M 29.5,16 C 29.224,16 28.999999,16.224 29,16.5 C 29,16.775999 29.223999,17 29.5,17 C 29.776,17 30,16.775999 30,16.5 C 30,16.224001 29.776,16 29.5,16 z M 18.5,17 C 18.224,17 17.999999,17.224001 18,17.5 C 18,17.775999 18.223999,18 18.5,18 C 18.776,18 19,17.776 19,17.5 C 19,17.224001 18.776,17 18.5,17 z M 20.5,17 C 20.224,17 19.999999,17.224001 20,17.5 C 20,17.775999 20.223999,18 20.5,18 C 20.776,18 21,17.776 21,17.5 C 21,17.224001 20.776,17 20.5,17 z M 22.5,17 C 22.224,17 21.999999,17.224001 22,17.5 C 22,17.775999 22.223999,18 22.5,18 C 22.776,18 23,17.776 23,17.5 C 23,17.224001 22.776,17 22.5,17 z M 24.5,17 C 24.224,17 23.999999,17.224001 24,17.5 C 24,17.775999 24.223999,18 24.5,18 C 24.776,18 25,17.776 25,17.5 C 25,17.224001 24.776,17 24.5,17 z M 26.5,17 C 26.224,17 25.999999,17.224001 26,17.5 C 26,17.775999 26.223999,18 26.5,18 C 26.776,18 27,17.776 27,17.5 C 27,17.224001 26.776,17 26.5,17 z M 28.5,17 C 28.224,17 27.999999,17.224001 28,17.5 C 28,17.775999 28.223999,18 28.5,18 C 28.776,18 29,17.776 29,17.5 C 29,17.224001 28.776,17 28.5,17 z M 30.5,17 C 30.224,17 30,17.224 30,17.5 C 30,17.776 30.224,18 30.5,18 C 30.776,18 31,17.776 31,17.5 C 31,17.224 30.776,17 30.5,17 z M 19.5,18 C 19.224,18 18.999999,18.224001 19,18.5 C 19,18.775999 19.223999,19 19.5,19 C 19.776,19 20,18.776 20,18.5 C 20,18.224001 19.776,18 19.5,18 z M 21.5,18 C 21.224,18 20.999999,18.224001 21,18.5 C 21,18.775999 21.223999,19 21.5,19 C 21.776,19 22,18.776 22,18.5 C 22,18.224001 21.776,18 21.5,18 z M 23.5,18 C 23.224,18 22.999999,18.224001 23,18.5 C 23,18.775999 23.223999,19 23.5,19 C 23.776,19 24,18.776 24,18.5 C 24,18.224001 23.776,18 23.5,18 z M 25.5,18 C 25.224,18 24.999999,18.224001 25,18.5 C 25,18.775999 25.223999,19 25.5,19 C 25.776,19 26,18.776 26,18.5 C 26,18.224001 25.776,18 25.5,18 z M 27.5,18 C 27.224,18 26.999999,18.224001 27,18.5 C 27,18.775999 27.223999,19 27.5,19 C 27.776,19 28,18.776 28,18.5 C 28,18.224001 27.776,18 27.5,18 z M 29.5,18 C 29.224,18 28.999999,18.224001 29,18.5 C 29,18.775999 29.223999,19 29.5,19 C 29.776,19 30,18.776 30,18.5 C 30,18.224001 29.776,18 29.5,18 z M 18.5,19 C 18.224,19 17.999999,19.224001 18,19.5 C 18,19.775999 18.223999,19.999999 18.5,20 C 18.776,20 19,19.776 19,19.5 C 19,19.224001 18.776,19 18.5,19 z M 20.5,19 C 20.224,19 19.999999,19.224001 20,19.5 C 20,19.775999 20.223999,19.999999 20.5,20 C 20.776,20 21,19.776 21,19.5 C 21,19.224001 20.776,19 20.5,19 z M 22.5,19 C 22.224,19 21.999999,19.224001 22,19.5 C 22,19.775999 22.223999,19.999999 22.5,20 C 22.776,20 23,19.776 23,19.5 C 23,19.224001 22.776,19 22.5,19 z M 24.5,19 C 24.224,19 23.999999,19.224001 24,19.5 C 24,19.775999 24.223999,19.999999 24.5,20 C 24.776,20 25,19.776 25,19.5 C 25,19.224001 24.776,19 24.5,19 z M 26.5,19 C 26.224,19 25.999999,19.224001 26,19.5 C 26,19.775999 26.223999,19.999999 26.5,20 C 26.776,20 27,19.776 27,19.5 C 27,19.224001 26.776,19 26.5,19 z M 28.5,19 C 28.224,19 27.999999,19.224001 28,19.5 C 28,19.775999 28.223999,19.999999 28.5,20 C 28.776,20 29,19.776 29,19.5 C 29,19.224001 28.776,19 28.5,19 z M 30.5,19 C 30.224,19 30,19.224 30,19.5 C 30,19.776 30.224,20 30.5,20 C 30.776,20 31,19.776 31,19.5 C 31,19.224 30.776,19 30.5,19 z M 19.5,20 C 19.224,20 18.999999,20.224001 19,20.5 C 19,20.775999 19.223999,20.999999 19.5,21 C 19.776,21 20,20.776 20,20.5 C 20,20.224001 19.776,20 19.5,20 z M 21.5,20 C 21.224,20 20.999999,20.224001 21,20.5 C 21,20.775999 21.223999,20.999999 21.5,21 C 21.776,21 22,20.776 22,20.5 C 22,20.224001 21.776,20 21.5,20 z M 23.5,20 C 23.224,20 22.999999,20.224001 23,20.5 C 23,20.775999 23.223999,20.999999 23.5,21 C 23.776,21 24,20.776 24,20.5 C 24,20.224001 23.776,20 23.5,20 z M 25.5,20 C 25.224,20 24.999999,20.224001 25,20.5 C 25,20.775999 25.223999,20.999999 25.5,21 C 25.776,21 26,20.776 26,20.5 C 26,20.224001 25.776,20 25.5,20 z M 27.5,20 C 27.224,20 26.999999,20.224001 27,20.5 C 27,20.775999 27.223999,20.999999 27.5,21 C 27.776,21 28,20.776 28,20.5 C 28,20.224001 27.776,20 27.5,20 z M 29.5,20 C 29.224,20 28.999999,20.224001 29,20.5 C 29,20.775999 29.223999,20.999999 29.5,21 C 29.776,21 30,20.776 30,20.5 C 30,20.224001 29.776,20 29.5,20 z M 20.5,21 C 20.224,21 19.999999,21.224001 20,21.5 C 20,21.775999 20.223999,21.999999 20.5,22 C 20.776,22 21,21.776 21,21.5 C 21,21.224001 20.776,21 20.5,21 z M 22.5,21 C 22.224,21 21.999999,21.224001 22,21.5 C 22,21.775999 22.223999,21.999999 22.5,22 C 22.776,22 23,21.776 23,21.5 C 23,21.224001 22.776,21 22.5,21 z M 24.5,21 C 24.224,21 23.999999,21.224001 24,21.5 C 24,21.775999 24.223999,21.999999 24.5,22 C 24.776,22 25,21.776 25,21.5 C 25,21.224001 24.776,21 24.5,21 z M 26.5,21 C 26.224,21 25.999999,21.224001 26,21.5 C 26,21.775999 26.223999,21.999999 26.5,22 C 26.776,22 27,21.776 27,21.5 C 27,21.224001 26.776,21 26.5,21 z M 28.5,21 C 28.224,21 27.999999,21.224001 28,21.5 C 28,21.775999 28.223999,21.999999 28.5,22 C 28.776,22 29,21.776 29,21.5 C 29,21.224001 28.776,21 28.5,21 z M 21.5,22 C 21.224,22 20.999999,22.224001 21,22.5 C 21,22.775999 21.223999,22.999999 21.5,23 C 21.776,23 22,22.776 22,22.5 C 22,22.224001 21.776,22 21.5,22 z M 23.5,22 C 23.224,22 22.999999,22.224001 23,22.5 C 23,22.775999 23.223999,22.999999 23.5,23 C 23.776,23 24,22.776 24,22.5 C 24,22.224001 23.776,22 23.5,22 z M 25.5,22 C 25.224,22 24.999999,22.224001 25,22.5 C 25,22.775999 25.223999,22.999999 25.5,23 C 25.776,23 26,22.776 26,22.5 C 26,22.224001 25.776,22 25.5,22 z M 27.5,22 C 27.224,22 26.999999,22.224001 27,22.5 C 27,22.775999 27.223999,22.999999 27.5,23 C 27.776,23 28,22.776 28,22.5 C 28,22.224001 27.776,22 27.5,22 z M 22.5,23 C 22.224,23 21.999999,23.224001 22,23.5 C 22,23.775999 22.223999,23.999999 22.5,24 C 22.776,24 23,23.776 23,23.5 C 23,23.224001 22.776,23 22.5,23 z M 24.5,23 C 24.224,23 23.999999,23.224001 24,23.5 C 24,23.775999 24.223999,23.999999 24.5,24 C 24.776,24 25,23.776 25,23.5 C 25,23.224001 24.776,23 24.5,23 z M 26.5,23 C 26.224,23 25.999999,23.224001 26,23.5 C 26,23.775999 26.223999,23.999999 26.5,24 C 26.776,24 27,23.776 27,23.5 C 27,23.224001 26.776,23 26.5,23 z M 23.5,24 C 23.224,24 22.999999,24.224001 23,24.5 C 23,24.775999 23.223999,24.999999 23.5,25 C 23.776,25 24,24.776 24,24.5 C 24,24.224001 23.776,24 23.5,24 z M 25.5,24 C 25.224,24 24.999999,24.224001 25,24.5 C 25,24.775999 25.223999,24.999999 25.5,25 C 25.776,25 26,24.776 26,24.5 C 26,24.224001 25.776,24 25.5,24 z"
+ style="opacity:0.5;fill:url(#linearGradient3064);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="6.0500031"
+ rx="6.0000024"
+ y="2.5000026"
+ x="18.500008"
+ height="22.000008"
+ width="12.000005"
+ id="rect2967"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient3066);stroke-width:1.0000006;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ style="stroke:#729fcf;display:inline"
+ id="g27916"
+ transform="matrix(0.3975228,0,0,0.9423324,-18.689059,-4.6737794)">
+ <path
+ sodipodi:nodetypes="csc"
+ id="path21632"
+ d="M 67.5625,34.78125 C 71.176369,31.899733 73.499999,27.47788 73.5,22.5 C 73.5,17.793936 71.43603,13.569699 68.15625,10.6875"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3375);stroke-width:1.25757563;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ style="stroke:#729fcf;display:inline"
+ id="g28807"
+ transform="matrix(0.272091,0,0,0.9423324,-15.475768,-4.3498543)">
+ <path
+ sodipodi:nodetypes="csc"
+ id="path27920"
+ d="M 74.954806,30.15625 C 77.22438,28.375887 78.673556,25.606103 78.673556,22.5 C 78.673556,19.560794 77.36198,16.939552 75.298556,15.15625"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3377);stroke-width:1.52005064;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/icons/scalable/status/audio-input-microphone-muted.svg b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-muted.svg
new file mode 100644
index 0000000..962b4de
--- /dev/null
+++ b/mate-volume-control/data/icons/scalable/status/audio-input-microphone-muted.svg
@@ -0,0 +1,1040 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2790"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="audio-input-mic-muted.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs2792">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient6964"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient6958">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop6960" />
+ <stop
+ id="stop6966"
+ offset="0.60000002"
+ style="stop-color:#729fcf;stop-opacity:1;" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop6962" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3579">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3581" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3583" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient3585"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)" />
+ <linearGradient
+ id="linearGradient3228">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3230" />
+ <stop
+ id="stop3573"
+ offset="0.06770357"
+ style="stop-color:black;stop-opacity:0.42857143;" />
+ <stop
+ id="stop3569"
+ offset="0.29894069"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:0.49803922;"
+ offset="0.77437174"
+ id="stop3571" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="1"
+ id="stop3232" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient3567"
+ gradientUnits="userSpaceOnUse"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399"
+ gradientTransform="translate(0,3)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2920">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2922" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2924" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient2926"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2877">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2879" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient2894"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3815">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3817" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3819" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient2892"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2867">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2869" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2871" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient2890"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ id="linearGradient3734">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="0"
+ id="stop3736" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop3738" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient3740"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient4481">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop4483" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop4485" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient4487"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2904">
+ <stop
+ id="stop2906"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0.21551724"
+ id="stop2910" />
+ <stop
+ id="stop2912"
+ offset="0.70243758"
+ style="stop-color:#c3c4c2;stop-opacity:1;" />
+ <stop
+ id="stop2908"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient2902"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2949"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2943">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop2945" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="1"
+ id="stop2947" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2953"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033"
+ gradientTransform="translate(14,0)" />
+ <linearGradient
+ id="linearGradient2981">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop2983" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop2985" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient2987"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3805"
+ gradientUnits="userSpaceOnUse"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientTransform="translate(20,-1)" />
+ <linearGradient
+ id="linearGradient3795">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop3797" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="1"
+ id="stop3799" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient3801"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ id="linearGradient3726">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop3728" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:1"
+ offset="1"
+ id="stop3730" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient3732"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3703">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3705" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3707" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient3709"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3779">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3781" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3783" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient3785"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2965">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2967" />
+ <stop
+ style="stop-color:#888a85;stop-opacity:0;"
+ offset="1"
+ id="stop2969" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient2971"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3711"
+ inkscape:collect="always">
+ <stop
+ id="stop3713"
+ offset="0"
+ style="stop-color:#babdb6;stop-opacity:1" />
+ <stop
+ id="stop3715"
+ offset="1"
+ style="stop-color:#888a85;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient3691"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4465">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1"
+ offset="0"
+ id="stop4467" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:0"
+ offset="1"
+ id="stop4469" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4465"
+ id="linearGradient4460"
+ gradientUnits="userSpaceOnUse"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942"
+ gradientTransform="translate(-0.25,12.5)" />
+ <linearGradient
+ id="linearGradient4475"
+ inkscape:collect="always">
+ <stop
+ id="stop4477"
+ offset="0"
+ style="stop-color:black;stop-opacity:1" />
+ <stop
+ id="stop4479"
+ offset="1"
+ style="stop-color:black;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4475"
+ id="linearGradient4473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.25,13.5)"
+ x1="32.864544"
+ y1="13.794194"
+ x2="32.864544"
+ y2="5.5441942" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient4505"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4499">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop4501" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop4503" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient3012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2798" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6999424,0,0,3.5713875,-122.46854,-58.740132)"
+ cx="72.495682"
+ cy="22.84375"
+ fx="72.495682"
+ fy="22.84375"
+ r="4.8202302" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8087117,0,0,3.5234273,-57.039447,-57.368542)"
+ cx="70.53125"
+ cy="22.734375"
+ fx="70.53125"
+ fy="22.734375"
+ r="3.5975378" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6958"
+ id="radialGradient3377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.1454532,0,0,3.0191635,-69.461,-45.746674)"
+ cx="60.640625"
+ cy="22.65625"
+ fx="60.640625"
+ fy="22.65625"
+ r="2.6194003" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient2535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4499"
+ id="radialGradient2537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3711"
+ id="radialGradient2539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.106546,0,0,0.58328,-1.909343,15.04719)"
+ cx="18.753521"
+ cy="40.578671"
+ fx="18.753521"
+ fy="40.578671"
+ r="13.08399" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2965"
+ id="radialGradient2541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.508772,0,18.12988)"
+ cx="23.82066"
+ cy="36.907261"
+ fx="23.82066"
+ fy="36.907261"
+ r="12.59534" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3779"
+ id="linearGradient2543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.980843,0,0,0.974547,0.59387,-0.156861)"
+ x1="23.997437"
+ y1="37.835339"
+ x2="29.74268"
+ y2="32.355263" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3703"
+ id="linearGradient2545"
+ gradientUnits="userSpaceOnUse"
+ x1="23.8125"
+ y1="41.836731"
+ x2="27.272261"
+ y2="28.590008" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3726"
+ id="linearGradient2547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="25.606806"
+ y1="36.722809"
+ x2="23.640165"
+ y2="30.421146" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient2549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3795"
+ id="linearGradient2551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(20,-1)"
+ x1="13.567612"
+ y1="18.432873"
+ x2="13.567612"
+ y2="19.231655" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2981"
+ id="linearGradient2553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.940947,0,1.564893)"
+ x1="23.374121"
+ y1="19.452076"
+ x2="21.649811"
+ y2="25.229111" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(14,0)"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2943"
+ id="linearGradient2557"
+ gradientUnits="userSpaceOnUse"
+ x1="16.65625"
+ y1="16.14632"
+ x2="16.65625"
+ y2="20.381033" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2904"
+ id="linearGradient2559"
+ gradientUnits="userSpaceOnUse"
+ x1="18.737373"
+ y1="13.351768"
+ x2="30.230837"
+ y2="13.351768" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4481"
+ id="linearGradient2561"
+ gradientUnits="userSpaceOnUse"
+ x1="17.625"
+ y1="20.814491"
+ x2="17.625"
+ y2="5.125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3734"
+ id="linearGradient2563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)"
+ x1="24.6875"
+ y1="36.75"
+ x2="24.6875"
+ y2="28.617105" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2867"
+ id="linearGradient2565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.809211,0,2.763158)"
+ x1="19.583334"
+ y1="10.76408"
+ x2="23.176371"
+ y2="10.76408" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3815"
+ id="linearGradient2567"
+ gradientUnits="userSpaceOnUse"
+ x1="23.246162"
+ y1="24.761473"
+ x2="23.246162"
+ y2="15.94703" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2877"
+ id="linearGradient2569"
+ gradientUnits="userSpaceOnUse"
+ x1="21.961548"
+ y1="6.3608937"
+ x2="24.508121"
+ y2="10.75" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2920"
+ id="radialGradient2571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.580773,0,0,0.961547,-12.77702,-2.531609)"
+ cx="22.553526"
+ cy="10.432782"
+ fx="22.553526"
+ fy="10.432782"
+ r="6.46875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3228"
+ id="linearGradient2573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,3)"
+ x1="17.999674"
+ y1="10.081399"
+ x2="30"
+ y2="10.081399" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3579"
+ id="linearGradient2575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.09091,0,0,1.100001,-1.681827,0.84999)"
+ x1="20.483149"
+ y1="3.4711361"
+ x2="28.357954"
+ y2="25.991137" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.270833"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="780"
+ inkscape:window-height="776"
+ inkscape:window-x="949"
+ inkscape:window-y="190" />
+ <metadata
+ id="metadata2795">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g2915"
+ transform="translate(7.6012894,0.1428571)">
+ <path
+ transform="matrix(0.727673,0,0,1.235135,7.166344,-12.0556)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2917"
+ style="opacity:0.1;fill:url(#radialGradient2535);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.233813,0,0,1.235135,-4.890235,-6.055598)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2919"
+ style="opacity:0.7;fill:url(#radialGradient2537);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2925"
+ style="opacity:1;fill:url(#radialGradient2539);fill-opacity:1;stroke:#555753;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.43667,0,0,0.429141,14.09824,21.41158)"
+ d="M 36.415999,36.907261 A 12.59534,6.4081554 0 1 1 11.22532,36.907261 A 12.59534,6.4081554 0 1 1 36.415999,36.907261 z"
+ sodipodi:ry="6.4081554"
+ sodipodi:rx="12.59534"
+ sodipodi:cy="36.907261"
+ sodipodi:cx="23.82066"
+ id="path2927"
+ style="opacity:1;fill:url(#radialGradient2541);fill-opacity:1;stroke:none;stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="ccssccc"
+ id="path2929"
+ d="M 27.35249,32.125 C 25.613836,32.860383 24.806671,34.177948 23.67433,35.292277 C 23.188021,35.599877 23.07463,36.001723 23.15468,36.568962 C 23.23473,37.136205 23.644126,37.624296 24.196826,37.787146 C 24.749524,37.949994 25.196373,37.917185 25.574713,37.485007 C 26.676195,35.285524 28.744563,33.983863 31,32.85591 C 29.870496,32.536987 28.651039,32.264053 27.35249,32.125 z"
+ style="opacity:0.7;fill:url(#linearGradient2543);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.032128,0,0,1.014402,-8.596444e-2,1.56074)"
+ d="M 23.8125,31.5 C 20.473005,31.5 17.440949,32.183256 15.34375,33.25 C 13.246551,34.316744 12.21875,35.666366 12.21875,36.90625 C 12.21875,38.146134 13.246551,39.495756 15.34375,40.5625 C 17.440949,41.629244 20.473005,42.312501 23.8125,42.3125 C 27.151995,42.3125 30.184051,41.629244 32.28125,40.5625 C 34.378449,39.495756 35.40625,38.146134 35.40625,36.90625 C 35.40625,35.666366 34.378449,34.316744 32.28125,33.25 C 30.184051,32.183256 27.151995,31.5 23.8125,31.5 z"
+ id="path2931"
+ style="opacity:0.4;fill:none;fill-opacity:1;stroke:url(#linearGradient2545);stroke-width:0.97730058;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ inkscape:original="M 23.8125 30.5 C 16.859872 30.5 11.21875 33.368948 11.21875 36.90625 C 11.21875 40.443552 16.859872 43.312502 23.8125 43.3125 C 30.765128 43.3125 36.406249 40.443552 36.40625 36.90625 C 36.40625 33.368948 30.765128 30.5 23.8125 30.5 z "
+ inkscape:radius="-0.99470079"
+ sodipodi:type="inkscape:offset" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2933"
+ d="M 24.5,27.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2547);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2935"
+ d="M 34.500008,18.999997 C 34.5,23.285708 30.040008,26.499998 24.500006,26.499998 C 18.960004,26.499998 14.5,23.285708 14.500003,18.999997"
+ style="fill:none;fill-opacity:1;stroke:#888a85;stroke-width:3.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="12.5"
+ height="2.9999995"
+ width="4"
+ id="rect2937"
+ style="opacity:1;fill:url(#linearGradient2549);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ y="16.499998"
+ x="32.5"
+ height="2.9999995"
+ width="4"
+ id="rect2939"
+ style="opacity:1;fill:url(#linearGradient2551);fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="csc"
+ id="path2941"
+ d="M 34.500008,18.999991 C 34.500008,23.285701 30.040008,26.499992 24.500006,26.499992 C 18.960004,26.499992 14.5,23.285701 14.500003,18.999991"
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient2553);stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="30"
+ height="6"
+ width="3.0000005"
+ id="rect2943"
+ style="opacity:1;fill:url(#linearGradient2555);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,12.25,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2945"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <rect
+ ry="0.9722718"
+ rx="0.9722718"
+ y="15"
+ x="16"
+ height="6"
+ width="3.0000005"
+ id="rect2947"
+ style="opacity:1;fill:url(#linearGradient2557);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="7.0108709"
+ rx="7.0000019"
+ y="1.5000002"
+ x="17.499996"
+ height="24.000008"
+ width="14.000004"
+ id="rect2949"
+ style="opacity:1;fill:url(#linearGradient2559);fill-opacity:1;stroke:url(#linearGradient2561);stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path2951"
+ d="M 24.5,26.5 L 24.5,36.5"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2563);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ <path
+ transform="matrix(1.5,0,0,1.5,-7.75,-11.25)"
+ d="M 14.5,19 A 0.5,0.5 0 1 1 13.5,19 A 0.5,0.5 0 1 1 14.5,19 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="19"
+ sodipodi:cx="14"
+ id="path2953"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <g
+ id="g2955"
+ style="display:inline">
+ <rect
+ style="opacity:1;fill:url(#linearGradient2565);fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect2957"
+ width="4"
+ height="15.374996"
+ x="20"
+ y="6"
+ rx="2"
+ ry="2.1991496" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.54470092"
+ inkscape:original="M 24.5 2.5 C 20.621999 2.5 17.5 5.615977 17.5 9.5 L 17.5 19.5 C 17.5 23.384022 20.621999 26.5 24.5 26.5 C 28.378001 26.5 31.5 23.384022 31.5 19.5 L 31.5 9.5 C 31.5 5.6159775 28.378001 2.5 24.5 2.5 z "
+ style="opacity:0.2;fill:url(#linearGradient2567);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="path2959"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,19.5 C 18.03125,23.092133 20.913778,25.96875 24.5,25.96875 C 28.086222,25.96875 30.96875,23.092133 30.96875,19.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#linearGradient2569);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2961"
+ sodipodi:cx="23.65625"
+ sodipodi:cy="7.6875"
+ sodipodi:rx="3.34375"
+ sodipodi:ry="3.0625"
+ d="M 27,7.6875 A 3.34375,3.0625 0 1 1 20.3125,7.6875 A 3.34375,3.0625 0 1 1 27,7.6875 z"
+ transform="matrix(1,0,0,1.081633,-0.375,-1.252551)" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path2963"
+ d="M 24.5,3.03125 C 20.913777,3.03125 18.03125,5.9078661 18.03125,9.5 L 18.03125,14.5 L 30.96875,14.5 L 30.96875,9.5 C 30.96875,5.9078666 28.086223,3.03125 24.5,3.03125 z"
+ style="opacity:0.9;fill:url(#radialGradient2571);fill-opacity:1;stroke:none;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ transform="translate(0,-1)" />
+ <path
+ sodipodi:nodetypes="csssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssccsssc"
+ id="path2965"
+ d="M 22.5,3 C 22.224,3 22,3.224 22,3.5 C 22,3.776 22.224,4 22.5,4 C 22.776,4 23,3.776 23,3.5 C 23,3.224 22.776,3 22.5,3 z M 24.5,3 C 24.224,3 24,3.224 24,3.5 C 24,3.776 24.224,4 24.5,4 C 24.776,4 25,3.776 25,3.5 C 25,3.224 24.776,3 24.5,3 z M 26.5,3 C 26.224,3 26,3.224 26,3.5 C 26,3.776 26.224,4 26.5,4 C 26.776,4 27,3.776 27,3.5 C 27,3.224 26.776,3 26.5,3 z M 21.5,4 C 21.224,4 21,4.224 21,4.5 C 21,4.776 21.224,5 21.5,5 C 21.776,5 22,4.776 22,4.5 C 22,4.224 21.776,4 21.5,4 z M 23.5,4 C 23.224,4 22.999999,4.2240007 23,4.5 C 23,4.7759993 23.223999,5 23.5,5 C 23.776,5 24,4.7759993 24,4.5 C 24,4.2240007 23.776,4 23.5,4 z M 25.5,4 C 25.224,4 24.999999,4.2240007 25,4.5 C 25,4.7759993 25.223999,5 25.5,5 C 25.776,5 26,4.7759993 26,4.5 C 26,4.2240007 25.776,4 25.5,4 z M 27.5,4 C 27.224,4 27,4.224 27,4.5 C 27,4.776 27.224,5 27.5,5 C 27.776,5 28,4.776 28,4.5 C 28,4.224 27.776,4 27.5,4 z M 20.5,5 C 20.224,5 19.999999,5.2240008 20,5.5 C 20,5.7759993 20.223999,6 20.5,6 C 20.776,6 21,5.7759994 21,5.5 C 21,5.2240007 20.776,5 20.5,5 z M 22.5,5 C 22.224,5 21.999999,5.2240008 22,5.5 C 22,5.7759993 22.223999,6 22.5,6 C 22.776,6 23,5.7759994 23,5.5 C 23,5.2240007 22.776,5 22.5,5 z M 24.5,5 C 24.224,5 23.999999,5.2240008 24,5.5 C 24,5.7759993 24.223999,6 24.5,6 C 24.776,6 25,5.7759994 25,5.5 C 25,5.2240007 24.776,5 24.5,5 z M 26.5,5 C 26.224,5 25.999999,5.2240008 26,5.5 C 26,5.7759993 26.223999,6 26.5,6 C 26.776,6 27,5.7759994 27,5.5 C 27,5.2240007 26.776,5 26.5,5 z M 28.5,5 C 28.224,5 28,5.224 28,5.5 C 28,5.776 28.224,6 28.5,6 C 28.776,6 29,5.776 29,5.5 C 29,5.224 28.776,5 28.5,5 z M 19.5,6 C 19.224,6 18.999999,6.2240008 19,6.5 C 19,6.7759993 19.223999,7 19.5,7 C 19.776,7 20,6.7759994 20,6.5 C 20,6.2240007 19.776,6 19.5,6 z M 21.5,6 C 21.224,6 20.999999,6.2240008 21,6.5 C 21,6.7759993 21.223999,7 21.5,7 C 21.776,7 22,6.7759994 22,6.5 C 22,6.2240007 21.776,6 21.5,6 z M 23.5,6 C 23.224,6 22.999999,6.2240008 23,6.5 C 23,6.7759993 23.223999,7 23.5,7 C 23.776,7 24,6.7759994 24,6.5 C 24,6.2240007 23.776,6 23.5,6 z M 25.5,6 C 25.224,6 24.999999,6.2240008 25,6.5 C 25,6.7759993 25.223999,7 25.5,7 C 25.776,7 26,6.7759994 26,6.5 C 26,6.2240007 25.776,6 25.5,6 z M 27.5,6 C 27.224,6 26.999999,6.2240008 27,6.5 C 27,6.7759993 27.223999,7 27.5,7 C 27.776,7 28,6.7759994 28,6.5 C 28,6.2240007 27.776,6 27.5,6 z M 29.5,6 C 29.224,6 29,6.224 29,6.5 C 29,6.776 29.224,7 29.5,7 C 29.776,7 30,6.776 30,6.5 C 30,6.224 29.776,6 29.5,6 z M 20.5,7 C 20.224,7 19.999999,7.2240008 20,7.5 C 20,7.7759993 20.223999,8.0000002 20.5,8 C 20.776,8 21,7.7759994 21,7.5 C 21,7.2240007 20.776,7 20.5,7 z M 22.5,7 C 22.224,7 21.999999,7.2240008 22,7.5 C 22,7.7759993 22.223999,8.0000002 22.5,8 C 22.776,8 23,7.7759994 23,7.5 C 23,7.2240007 22.776,7 22.5,7 z M 24.5,7 C 24.224,7 23.999999,7.2240008 24,7.5 C 24,7.7759993 24.223999,8.0000002 24.5,8 C 24.776,8 25,7.7759994 25,7.5 C 25,7.2240007 24.776,7 24.5,7 z M 26.5,7 C 26.224,7 25.999999,7.2240008 26,7.5 C 26,7.7759993 26.223999,8.0000002 26.5,8 C 26.776,8 27,7.7759994 27,7.5 C 27,7.2240007 26.776,7 26.5,7 z M 28.5,7 C 28.224,7 27.999999,7.2240008 28,7.5 C 28,7.7759993 28.223999,8.0000002 28.5,8 C 28.776,8 29,7.7759994 29,7.5 C 29,7.2240007 28.776,7 28.5,7 z M 30.5,7 C 30.224,7 30,7.224 30,7.5 C 30,7.776 30.224,8 30.5,8 C 30.776,8 31,7.776 31,7.5 C 31,7.224 30.776,7 30.5,7 z M 19.5,8 C 19.224,8 18.999999,8.2240008 19,8.5 C 19,8.7759993 19.223999,9 19.5,9 C 19.776,9 20,8.7759994 20,8.5 C 20,8.2240007 19.776,8 19.5,8 z M 21.5,8 C 21.224,8 20.999999,8.2240008 21,8.5 C 21,8.7759993 21.223999,9 21.5,9 C 21.776,9 22,8.7759994 22,8.5 C 22,8.2240007 21.776,8 21.5,8 z M 23.5,8 C 23.224,8 22.999999,8.2240008 23,8.5 C 23,8.7759993 23.223999,9 23.5,9 C 23.776,9 24,8.7759994 24,8.5 C 24,8.2240007 23.776,8 23.5,8 z M 25.5,8 C 25.224,8 24.999999,8.2240008 25,8.5 C 25,8.7759993 25.223999,9 25.5,9 C 25.776,9 26,8.7759994 26,8.5 C 26,8.2240007 25.776,8 25.5,8 z M 27.5,8 C 27.224,8 26.999999,8.2240008 27,8.5 C 27,8.7759993 27.223999,9 27.5,9 C 27.776,9 28,8.7759994 28,8.5 C 28,8.2240007 27.776,8 27.5,8 z M 29.5,8 C 29.224,8 28.999999,8.2240008 29,8.5 C 29,8.7759993 29.223999,9 29.5,9 C 29.776,9 30,8.7759994 30,8.5 C 30,8.2240007 29.776,8 29.5,8 z M 18.5,9 C 18.224,9 17.999999,9.224001 18,9.5 C 18,9.775999 18.223999,10 18.5,10 C 18.776,10 19,9.775999 19,9.5 C 19,9.224001 18.776,9 18.5,9 z M 20.5,9 C 20.224,9 19.999999,9.224001 20,9.5 C 20,9.775999 20.223999,10 20.5,10 C 20.776,10 21,9.775999 21,9.5 C 21,9.224001 20.776,9 20.5,9 z M 22.5,9 C 22.224,9 21.999999,9.224001 22,9.5 C 22,9.775999 22.223999,10 22.5,10 C 22.776,10 23,9.775999 23,9.5 C 23,9.224001 22.776,9 22.5,9 z M 24.5,9 C 24.224,9 23.999999,9.224001 24,9.5 C 24,9.775999 24.223999,10 24.5,10 C 24.776,10 25,9.775999 25,9.5 C 25,9.224001 24.776,9 24.5,9 z M 26.5,9 C 26.224,9 25.999999,9.224001 26,9.5 C 26,9.775999 26.223999,10 26.5,10 C 26.776,10 27,9.775999 27,9.5 C 27,9.224001 26.776,9 26.5,9 z M 28.5,9 C 28.224,9 27.999999,9.224001 28,9.5 C 28,9.775999 28.223999,10 28.5,10 C 28.776,10 29,9.775999 29,9.5 C 29,9.224001 28.776,9 28.5,9 z M 30.5,9 C 30.224,9 30,9.224 30,9.5 C 30,9.776 30.224,10 30.5,10 C 30.776,10 31,9.776 31,9.5 C 31,9.224 30.776,9 30.5,9 z M 19.5,10 C 19.224,10 18.999999,10.224001 19,10.5 C 19,10.775999 19.223999,11 19.5,11 C 19.776,11 20,10.775999 20,10.5 C 20,10.224001 19.776,10 19.5,10 z M 21.5,10 C 21.224,10 20.999999,10.224001 21,10.5 C 21,10.775999 21.223999,11 21.5,11 C 21.776,11 22,10.775999 22,10.5 C 22,10.224001 21.776,10 21.5,10 z M 23.5,10 C 23.224,10 22.999999,10.224001 23,10.5 C 23,10.775999 23.223999,11 23.5,11 C 23.776,11 24,10.775999 24,10.5 C 24,10.224001 23.776,10 23.5,10 z M 25.5,10 C 25.224,10 24.999999,10.224001 25,10.5 C 25,10.775999 25.223999,11 25.5,11 C 25.776,11 26,10.775999 26,10.5 C 26,10.224001 25.776,10 25.5,10 z M 27.5,10 C 27.224,10 26.999999,10.224001 27,10.5 C 27,10.775999 27.223999,11 27.5,11 C 27.776,11 28,10.775999 28,10.5 C 28,10.224001 27.776,10 27.5,10 z M 29.5,10 C 29.224,10 28.999999,10.224001 29,10.5 C 29,10.775999 29.223999,11 29.5,11 C 29.776,11 30,10.775999 30,10.5 C 30,10.224001 29.776,10 29.5,10 z M 18.5,11 C 18.224,11 17.999999,11.224 18,11.5 C 18,11.775999 18.223999,12 18.5,12 C 18.776,12 19,11.775999 19,11.5 C 19,11.224001 18.776,11 18.5,11 z M 20.5,11 C 20.224,11 19.999999,11.224 20,11.5 C 20,11.775999 20.223999,12 20.5,12 C 20.776,12 21,11.775999 21,11.5 C 21,11.224001 20.776,11 20.5,11 z M 22.5,11 C 22.224,11 21.999999,11.224 22,11.5 C 22,11.775999 22.223999,12 22.5,12 C 22.776,12 23,11.775999 23,11.5 C 23,11.224001 22.776,11 22.5,11 z M 24.5,11 C 24.224,11 23.999999,11.224 24,11.5 C 24,11.775999 24.223999,12 24.5,12 C 24.776,12 25,11.775999 25,11.5 C 25,11.224001 24.776,11 24.5,11 z M 26.5,11 C 26.224,11 25.999999,11.224 26,11.5 C 26,11.775999 26.223999,12 26.5,12 C 26.776,12 27,11.775999 27,11.5 C 27,11.224001 26.776,11 26.5,11 z M 28.5,11 C 28.224,11 27.999999,11.224 28,11.5 C 28,11.775999 28.223999,12 28.5,12 C 28.776,12 29,11.775999 29,11.5 C 29,11.224001 28.776,11 28.5,11 z M 30.5,11 C 30.224,11 30,11.224 30,11.5 C 30,11.776 30.224,12 30.5,12 C 30.776,12 31,11.776 31,11.5 C 31,11.224 30.776,11 30.5,11 z M 19.5,12 C 19.224,12 18.999999,12.224 19,12.5 C 19,12.775999 19.223999,13 19.5,13 C 19.776,13 20,12.775999 20,12.5 C 20,12.224001 19.776,12 19.5,12 z M 21.5,12 C 21.224,12 20.999999,12.224 21,12.5 C 21,12.775999 21.223999,13 21.5,13 C 21.776,13 22,12.775999 22,12.5 C 22,12.224001 21.776,12 21.5,12 z M 23.5,12 C 23.224,12 22.999999,12.224 23,12.5 C 23,12.775999 23.223999,13 23.5,13 C 23.776,13 24,12.775999 24,12.5 C 24,12.224001 23.776,12 23.5,12 z M 25.5,12 C 25.224,12 24.999999,12.224 25,12.5 C 25,12.775999 25.223999,13 25.5,13 C 25.776,13 26,12.775999 26,12.5 C 26,12.224001 25.776,12 25.5,12 z M 27.5,12 C 27.224,12 26.999999,12.224 27,12.5 C 27,12.775999 27.223999,13 27.5,13 C 27.776,13 28,12.775999 28,12.5 C 28,12.224001 27.776,12 27.5,12 z M 29.5,12 C 29.224,12 28.999999,12.224 29,12.5 C 29,12.775999 29.223999,13 29.5,13 C 29.776,13 30,12.775999 30,12.5 C 30,12.224001 29.776,12 29.5,12 z M 18.5,13 C 18.224,13 17.999999,13.224 18,13.5 C 18,13.775999 18.223999,14 18.5,14 C 18.776,14 19,13.775999 19,13.5 C 19,13.224001 18.776,13 18.5,13 z M 20.5,13 C 20.224,13 19.999999,13.224 20,13.5 C 20,13.775999 20.223999,14 20.5,14 C 20.776,14 21,13.775999 21,13.5 C 21,13.224001 20.776,13 20.5,13 z M 22.5,13 C 22.224,13 21.999999,13.224 22,13.5 C 22,13.775999 22.223999,14 22.5,14 C 22.776,14 23,13.775999 23,13.5 C 23,13.224001 22.776,13 22.5,13 z M 24.5,13 C 24.224,13 23.999999,13.224 24,13.5 C 24,13.775999 24.223999,14 24.5,14 C 24.776,14 25,13.775999 25,13.5 C 25,13.224001 24.776,13 24.5,13 z M 26.5,13 C 26.224,13 25.999999,13.224 26,13.5 C 26,13.775999 26.223999,14 26.5,14 C 26.776,14 27,13.775999 27,13.5 C 27,13.224001 26.776,13 26.5,13 z M 28.5,13 C 28.224,13 27.999999,13.224 28,13.5 C 28,13.775999 28.223999,14 28.5,14 C 28.776,14 29,13.775999 29,13.5 C 29,13.224001 28.776,13 28.5,13 z M 30.5,13 C 30.224,13 30,13.224 30,13.5 C 30,13.776 30.224,14 30.5,14 C 30.776,14 31,13.776 31,13.5 C 31,13.224 30.776,13 30.5,13 z M 19.5,14 C 19.224,14 18.999999,14.224 19,14.5 C 19,14.775999 19.223999,15 19.5,15 C 19.776,15 20,14.775999 20,14.5 C 20,14.224001 19.776,14 19.5,14 z M 21.5,14 C 21.224,14 20.999999,14.224 21,14.5 C 21,14.775999 21.223999,15 21.5,15 C 21.776,15 22,14.775999 22,14.5 C 22,14.224001 21.776,14 21.5,14 z M 23.5,14 C 23.224,14 22.999999,14.224 23,14.5 C 23,14.775999 23.223999,15 23.5,15 C 23.776,15 24,14.775999 24,14.5 C 24,14.224001 23.776,14 23.5,14 z M 25.5,14 C 25.224,14 24.999999,14.224 25,14.5 C 25,14.775999 25.223999,15 25.5,15 C 25.776,15 26,14.775999 26,14.5 C 26,14.224001 25.776,14 25.5,14 z M 27.5,14 C 27.224,14 26.999999,14.224 27,14.5 C 27,14.775999 27.223999,15 27.5,15 C 27.776,15 28,14.775999 28,14.5 C 28,14.224001 27.776,14 27.5,14 z M 29.5,14 C 29.224,14 28.999999,14.224 29,14.5 C 29,14.775999 29.223999,15 29.5,15 C 29.776,15 30,14.775999 30,14.5 C 30,14.224001 29.776,14 29.5,14 z M 18.5,15 C 18.224,15 17.999999,15.224 18,15.5 C 18,15.775999 18.223999,16 18.5,16 C 18.776,16 19,15.775999 19,15.5 C 19,15.224001 18.776,15 18.5,15 z M 20.5,15 C 20.224,15 19.999999,15.224 20,15.5 C 20,15.775999 20.223999,16 20.5,16 C 20.776,16 21,15.775999 21,15.5 C 21,15.224001 20.776,15 20.5,15 z M 22.5,15 C 22.224,15 21.999999,15.224 22,15.5 C 22,15.775999 22.223999,16 22.5,16 C 22.776,16 23,15.775999 23,15.5 C 23,15.224001 22.776,15 22.5,15 z M 24.5,15 C 24.224,15 23.999999,15.224 24,15.5 C 24,15.775999 24.223999,16 24.5,16 C 24.776,16 25,15.775999 25,15.5 C 25,15.224001 24.776,15 24.5,15 z M 26.5,15 C 26.224,15 25.999999,15.224 26,15.5 C 26,15.775999 26.223999,16 26.5,16 C 26.776,16 27,15.775999 27,15.5 C 27,15.224001 26.776,15 26.5,15 z M 28.5,15 C 28.224,15 27.999999,15.224 28,15.5 C 28,15.775999 28.223999,16 28.5,16 C 28.776,16 29,15.775999 29,15.5 C 29,15.224001 28.776,15 28.5,15 z M 30.5,15 C 30.224,15 30,15.224 30,15.5 C 30,15.776 30.224,16 30.5,16 C 30.776,16 31,15.776 31,15.5 C 31,15.224 30.776,15 30.5,15 z M 19.5,16 C 19.224,16 18.999999,16.224001 19,16.5 C 19,16.775999 19.223999,17 19.5,17 C 19.776,17 20,16.776 20,16.5 C 20,16.224001 19.776,16 19.5,16 z M 21.5,16 C 21.224,16 20.999999,16.224001 21,16.5 C 21,16.775999 21.223999,17 21.5,17 C 21.776,17 22,16.776 22,16.5 C 22,16.224001 21.776,16 21.5,16 z M 23.5,16 C 23.224,16 22.999999,16.224001 23,16.5 C 23,16.775999 23.223999,17 23.5,17 C 23.776,17 24,16.776 24,16.5 C 24,16.224001 23.776,16 23.5,16 z M 25.5,16 C 25.224,16 24.999999,16.224001 25,16.5 C 25,16.775999 25.223999,17 25.5,17 C 25.776,17 26,16.776 26,16.5 C 26,16.224001 25.776,16 25.5,16 z M 27.5,16 C 27.224,16 26.999999,16.224001 27,16.5 C 27,16.775999 27.223999,17 27.5,17 C 27.776,17 28,16.776 28,16.5 C 28,16.224001 27.776,16 27.5,16 z M 29.5,16 C 29.224,16 28.999999,16.224 29,16.5 C 29,16.775999 29.223999,17 29.5,17 C 29.776,17 30,16.775999 30,16.5 C 30,16.224001 29.776,16 29.5,16 z M 18.5,17 C 18.224,17 17.999999,17.224001 18,17.5 C 18,17.775999 18.223999,18 18.5,18 C 18.776,18 19,17.776 19,17.5 C 19,17.224001 18.776,17 18.5,17 z M 20.5,17 C 20.224,17 19.999999,17.224001 20,17.5 C 20,17.775999 20.223999,18 20.5,18 C 20.776,18 21,17.776 21,17.5 C 21,17.224001 20.776,17 20.5,17 z M 22.5,17 C 22.224,17 21.999999,17.224001 22,17.5 C 22,17.775999 22.223999,18 22.5,18 C 22.776,18 23,17.776 23,17.5 C 23,17.224001 22.776,17 22.5,17 z M 24.5,17 C 24.224,17 23.999999,17.224001 24,17.5 C 24,17.775999 24.223999,18 24.5,18 C 24.776,18 25,17.776 25,17.5 C 25,17.224001 24.776,17 24.5,17 z M 26.5,17 C 26.224,17 25.999999,17.224001 26,17.5 C 26,17.775999 26.223999,18 26.5,18 C 26.776,18 27,17.776 27,17.5 C 27,17.224001 26.776,17 26.5,17 z M 28.5,17 C 28.224,17 27.999999,17.224001 28,17.5 C 28,17.775999 28.223999,18 28.5,18 C 28.776,18 29,17.776 29,17.5 C 29,17.224001 28.776,17 28.5,17 z M 30.5,17 C 30.224,17 30,17.224 30,17.5 C 30,17.776 30.224,18 30.5,18 C 30.776,18 31,17.776 31,17.5 C 31,17.224 30.776,17 30.5,17 z M 19.5,18 C 19.224,18 18.999999,18.224001 19,18.5 C 19,18.775999 19.223999,19 19.5,19 C 19.776,19 20,18.776 20,18.5 C 20,18.224001 19.776,18 19.5,18 z M 21.5,18 C 21.224,18 20.999999,18.224001 21,18.5 C 21,18.775999 21.223999,19 21.5,19 C 21.776,19 22,18.776 22,18.5 C 22,18.224001 21.776,18 21.5,18 z M 23.5,18 C 23.224,18 22.999999,18.224001 23,18.5 C 23,18.775999 23.223999,19 23.5,19 C 23.776,19 24,18.776 24,18.5 C 24,18.224001 23.776,18 23.5,18 z M 25.5,18 C 25.224,18 24.999999,18.224001 25,18.5 C 25,18.775999 25.223999,19 25.5,19 C 25.776,19 26,18.776 26,18.5 C 26,18.224001 25.776,18 25.5,18 z M 27.5,18 C 27.224,18 26.999999,18.224001 27,18.5 C 27,18.775999 27.223999,19 27.5,19 C 27.776,19 28,18.776 28,18.5 C 28,18.224001 27.776,18 27.5,18 z M 29.5,18 C 29.224,18 28.999999,18.224001 29,18.5 C 29,18.775999 29.223999,19 29.5,19 C 29.776,19 30,18.776 30,18.5 C 30,18.224001 29.776,18 29.5,18 z M 18.5,19 C 18.224,19 17.999999,19.224001 18,19.5 C 18,19.775999 18.223999,19.999999 18.5,20 C 18.776,20 19,19.776 19,19.5 C 19,19.224001 18.776,19 18.5,19 z M 20.5,19 C 20.224,19 19.999999,19.224001 20,19.5 C 20,19.775999 20.223999,19.999999 20.5,20 C 20.776,20 21,19.776 21,19.5 C 21,19.224001 20.776,19 20.5,19 z M 22.5,19 C 22.224,19 21.999999,19.224001 22,19.5 C 22,19.775999 22.223999,19.999999 22.5,20 C 22.776,20 23,19.776 23,19.5 C 23,19.224001 22.776,19 22.5,19 z M 24.5,19 C 24.224,19 23.999999,19.224001 24,19.5 C 24,19.775999 24.223999,19.999999 24.5,20 C 24.776,20 25,19.776 25,19.5 C 25,19.224001 24.776,19 24.5,19 z M 26.5,19 C 26.224,19 25.999999,19.224001 26,19.5 C 26,19.775999 26.223999,19.999999 26.5,20 C 26.776,20 27,19.776 27,19.5 C 27,19.224001 26.776,19 26.5,19 z M 28.5,19 C 28.224,19 27.999999,19.224001 28,19.5 C 28,19.775999 28.223999,19.999999 28.5,20 C 28.776,20 29,19.776 29,19.5 C 29,19.224001 28.776,19 28.5,19 z M 30.5,19 C 30.224,19 30,19.224 30,19.5 C 30,19.776 30.224,20 30.5,20 C 30.776,20 31,19.776 31,19.5 C 31,19.224 30.776,19 30.5,19 z M 19.5,20 C 19.224,20 18.999999,20.224001 19,20.5 C 19,20.775999 19.223999,20.999999 19.5,21 C 19.776,21 20,20.776 20,20.5 C 20,20.224001 19.776,20 19.5,20 z M 21.5,20 C 21.224,20 20.999999,20.224001 21,20.5 C 21,20.775999 21.223999,20.999999 21.5,21 C 21.776,21 22,20.776 22,20.5 C 22,20.224001 21.776,20 21.5,20 z M 23.5,20 C 23.224,20 22.999999,20.224001 23,20.5 C 23,20.775999 23.223999,20.999999 23.5,21 C 23.776,21 24,20.776 24,20.5 C 24,20.224001 23.776,20 23.5,20 z M 25.5,20 C 25.224,20 24.999999,20.224001 25,20.5 C 25,20.775999 25.223999,20.999999 25.5,21 C 25.776,21 26,20.776 26,20.5 C 26,20.224001 25.776,20 25.5,20 z M 27.5,20 C 27.224,20 26.999999,20.224001 27,20.5 C 27,20.775999 27.223999,20.999999 27.5,21 C 27.776,21 28,20.776 28,20.5 C 28,20.224001 27.776,20 27.5,20 z M 29.5,20 C 29.224,20 28.999999,20.224001 29,20.5 C 29,20.775999 29.223999,20.999999 29.5,21 C 29.776,21 30,20.776 30,20.5 C 30,20.224001 29.776,20 29.5,20 z M 20.5,21 C 20.224,21 19.999999,21.224001 20,21.5 C 20,21.775999 20.223999,21.999999 20.5,22 C 20.776,22 21,21.776 21,21.5 C 21,21.224001 20.776,21 20.5,21 z M 22.5,21 C 22.224,21 21.999999,21.224001 22,21.5 C 22,21.775999 22.223999,21.999999 22.5,22 C 22.776,22 23,21.776 23,21.5 C 23,21.224001 22.776,21 22.5,21 z M 24.5,21 C 24.224,21 23.999999,21.224001 24,21.5 C 24,21.775999 24.223999,21.999999 24.5,22 C 24.776,22 25,21.776 25,21.5 C 25,21.224001 24.776,21 24.5,21 z M 26.5,21 C 26.224,21 25.999999,21.224001 26,21.5 C 26,21.775999 26.223999,21.999999 26.5,22 C 26.776,22 27,21.776 27,21.5 C 27,21.224001 26.776,21 26.5,21 z M 28.5,21 C 28.224,21 27.999999,21.224001 28,21.5 C 28,21.775999 28.223999,21.999999 28.5,22 C 28.776,22 29,21.776 29,21.5 C 29,21.224001 28.776,21 28.5,21 z M 21.5,22 C 21.224,22 20.999999,22.224001 21,22.5 C 21,22.775999 21.223999,22.999999 21.5,23 C 21.776,23 22,22.776 22,22.5 C 22,22.224001 21.776,22 21.5,22 z M 23.5,22 C 23.224,22 22.999999,22.224001 23,22.5 C 23,22.775999 23.223999,22.999999 23.5,23 C 23.776,23 24,22.776 24,22.5 C 24,22.224001 23.776,22 23.5,22 z M 25.5,22 C 25.224,22 24.999999,22.224001 25,22.5 C 25,22.775999 25.223999,22.999999 25.5,23 C 25.776,23 26,22.776 26,22.5 C 26,22.224001 25.776,22 25.5,22 z M 27.5,22 C 27.224,22 26.999999,22.224001 27,22.5 C 27,22.775999 27.223999,22.999999 27.5,23 C 27.776,23 28,22.776 28,22.5 C 28,22.224001 27.776,22 27.5,22 z M 22.5,23 C 22.224,23 21.999999,23.224001 22,23.5 C 22,23.775999 22.223999,23.999999 22.5,24 C 22.776,24 23,23.776 23,23.5 C 23,23.224001 22.776,23 22.5,23 z M 24.5,23 C 24.224,23 23.999999,23.224001 24,23.5 C 24,23.775999 24.223999,23.999999 24.5,24 C 24.776,24 25,23.776 25,23.5 C 25,23.224001 24.776,23 24.5,23 z M 26.5,23 C 26.224,23 25.999999,23.224001 26,23.5 C 26,23.775999 26.223999,23.999999 26.5,24 C 26.776,24 27,23.776 27,23.5 C 27,23.224001 26.776,23 26.5,23 z M 23.5,24 C 23.224,24 22.999999,24.224001 23,24.5 C 23,24.775999 23.223999,24.999999 23.5,25 C 23.776,25 24,24.776 24,24.5 C 24,24.224001 23.776,24 23.5,24 z M 25.5,24 C 25.224,24 24.999999,24.224001 25,24.5 C 25,24.775999 25.223999,24.999999 25.5,25 C 25.776,25 26,24.776 26,24.5 C 26,24.224001 25.776,24 25.5,24 z"
+ style="opacity:0.5;fill:url(#linearGradient2573);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ ry="6.0500031"
+ rx="6.0000024"
+ y="2.5000026"
+ x="18.500008"
+ height="22.000008"
+ width="12.000005"
+ id="rect2967"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient2575);stroke-width:1.0000006;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ </g>
+ <g
+ id="layer4"
+ inkscape:label="Muted"
+ style="display:inline"
+ transform="matrix(1.0828519,0,0,1.0830642,-27.371634,-7.2945649)">
+ <g
+ id="g4694"
+ transform="translate(-2,0)">
+ <rect
+ ry="1.4868355"
+ rx="1.4868355"
+ y="16.498245"
+ x="31.498245"
+ height="12.00351"
+ width="12.00351"
+ id="rect2021"
+ style="opacity:1;fill:#ef2929;fill-opacity:1;stroke:#a40000;stroke-width:0.92015547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ <rect
+ ry="0.49373779"
+ rx="0.49383482"
+ y="17.420549"
+ x="32.420815"
+ height="10.156369"
+ width="10.158366"
+ id="rect3795"
+ style="opacity:0.3;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.92339665;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;display:inline" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path4682"
+ d="M 35,20 L 40,25"
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.38509536;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path4684"
+ d="M 40,20 L 35,25"
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.38509536;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/mate-volume-control/data/mate-volume-control-applet.desktop.in b/mate-volume-control/data/mate-volume-control-applet.desktop.in
new file mode 100644
index 0000000..80d11b6
--- /dev/null
+++ b/mate-volume-control/data/mate-volume-control-applet.desktop.in
@@ -0,0 +1,16 @@
+[Desktop Entry]
+_Name=Volume Control
+_Comment=Show desktop volume control
+Icon=multimedia-volume-control
+Exec=mate-volume-control-applet
+Terminal=false
+Type=Application
+Categories=
+NoDisplay=true
+OnlyShowIn=MATE;XFCE;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-media
+X-MATE-Bugzilla-Component=mate-volume-control
+# See http://bugzilla.mate.org/show_bug.cgi?id=568320
+#X-MATE-Autostart-Phase=Panel
+X-MATE-Autostart-Notify=true
diff --git a/mate-volume-control/data/mate-volume-control.desktop.in.in b/mate-volume-control/data/mate-volume-control.desktop.in.in
new file mode 100644
index 0000000..7005d13
--- /dev/null
+++ b/mate-volume-control/data/mate-volume-control.desktop.in.in
@@ -0,0 +1,14 @@
+[Desktop Entry]
+_Name=Sound
+_Comment=Change sound volume and sound events
+Exec=mate-volume-control
+Icon=multimedia-volume-control
+Terminal=false
+Type=Application
+StartupNotify=true
+Categories=MATE;GTK;Settings;HardwareSettings;
+OnlyShowIn=MATE;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-media
+X-MATE-Bugzilla-Component=mate-volume-control
+X-MATE-Bugzilla-Version=@VERSION@
diff --git a/mate-volume-control/src/Makefile.am b/mate-volume-control/src/Makefile.am
new file mode 100644
index 0000000..d750ce7
--- /dev/null
+++ b/mate-volume-control/src/Makefile.am
@@ -0,0 +1,94 @@
+NULL =
+
+bin_PROGRAMS = \
+ mate-volume-control-applet \
+ mate-volume-control \
+ $(NULL)
+
+AM_CPPFLAGS = \
+ $(WARN_CFLAGS) \
+ -I$(top_srcdir)/sound-theme \
+ $(VOLUME_CONTROL_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(PULSEAUDIO_CFLAGS) \
+ -DLOCALE_DIR=\""$(datadir)/locale"\" \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
+ -DGLADEDIR=\""$(pkgdatadir)"\" \
+ -DICON_DATA_DIR="\"$(pkgdatadir)/icons\"" \
+ $(NULL)
+
+noinst_LTLIBRARIES = libmatevolumecontrol.la
+libmatevolumecontrol_la_SOURCES = \
+ gvc-mixer-card.h \
+ gvc-mixer-card.c \
+ gvc-mixer-stream.h \
+ gvc-mixer-stream.c \
+ gvc-channel-map.h \
+ gvc-channel-map.c \
+ gvc-mixer-sink.h \
+ gvc-mixer-sink.c \
+ gvc-mixer-source.h \
+ gvc-mixer-source.c \
+ gvc-mixer-sink-input.h \
+ gvc-mixer-sink-input.c \
+ gvc-mixer-source-output.h \
+ gvc-mixer-source-output.c \
+ gvc-mixer-event-role.h \
+ gvc-mixer-event-role.c \
+ gvc-mixer-control.h \
+ gvc-mixer-control.c \
+ gvc-channel-bar.h \
+ gvc-channel-bar.c \
+ gvc-log.h \
+ gvc-log.c \
+ $(NULL)
+
+mate_volume_control_applet_LDADD = \
+ -lm \
+ libmatevolumecontrol.la \
+ $(VOLUME_CONTROL_LIBS) \
+ $(PULSEAUDIO_LIBS) \
+ $(NULL)
+
+mate_volume_control_applet_SOURCES = \
+ gvc-stream-status-icon.h \
+ gvc-stream-status-icon.c \
+ gvc-applet.h \
+ gvc-applet.c \
+ applet-main.c \
+ $(NULL)
+
+mate_volume_control_LDADD = \
+ -lm \
+ libmatevolumecontrol.la \
+ $(top_builddir)/sound-theme/libsoundtheme.la \
+ $(VOLUME_CONTROL_LIBS) \
+ $(PULSEAUDIO_LIBS) \
+ $(NULL)
+
+mate_volume_control_SOURCES = \
+ gvc-balance-bar.h \
+ gvc-balance-bar.c \
+ gvc-mixer-dialog.h \
+ gvc-mixer-dialog.c \
+ gvc-level-bar.h \
+ gvc-level-bar.c \
+ gvc-combo-box.h \
+ gvc-combo-box.c \
+ gvc-speaker-test.h \
+ gvc-speaker-test.c \
+ dialog-main.c \
+ $(NULL)
+
+BUILT_SOURCES = \
+ $(NULL)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(NULL)
+
+MAINTAINERCLEANFILES = \
+ *~ \
+ Makefile.in
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-volume-control/src/Makefile.in b/mate-volume-control/src/Makefile.in
new file mode 100644
index 0000000..f45544e
--- /dev/null
+++ b/mate-volume-control/src/Makefile.in
@@ -0,0 +1,757 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = mate-volume-control-applet$(EXEEXT) \
+ mate-volume-control$(EXEEXT) $(am__EXEEXT_1)
+subdir = mate-volume-control/src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
+ $(top_srcdir)/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/m4/as-version.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmatevolumecontrol_la_LIBADD =
+am__objects_1 =
+am_libmatevolumecontrol_la_OBJECTS = gvc-mixer-card.lo \
+ gvc-mixer-stream.lo gvc-channel-map.lo gvc-mixer-sink.lo \
+ gvc-mixer-source.lo gvc-mixer-sink-input.lo \
+ gvc-mixer-source-output.lo gvc-mixer-event-role.lo \
+ gvc-mixer-control.lo gvc-channel-bar.lo gvc-log.lo \
+ $(am__objects_1)
+libmatevolumecontrol_la_OBJECTS = \
+ $(am_libmatevolumecontrol_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__EXEEXT_1 =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_mate_volume_control_OBJECTS = gvc-balance-bar.$(OBJEXT) \
+ gvc-mixer-dialog.$(OBJEXT) gvc-level-bar.$(OBJEXT) \
+ gvc-combo-box.$(OBJEXT) gvc-speaker-test.$(OBJEXT) \
+ dialog-main.$(OBJEXT) $(am__objects_1)
+mate_volume_control_OBJECTS = $(am_mate_volume_control_OBJECTS)
+am__DEPENDENCIES_1 =
+mate_volume_control_DEPENDENCIES = libmatevolumecontrol.la \
+ $(top_builddir)/sound-theme/libsoundtheme.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_mate_volume_control_applet_OBJECTS = \
+ gvc-stream-status-icon.$(OBJEXT) gvc-applet.$(OBJEXT) \
+ applet-main.$(OBJEXT) $(am__objects_1)
+mate_volume_control_applet_OBJECTS = \
+ $(am_mate_volume_control_applet_OBJECTS)
+mate_volume_control_applet_DEPENDENCIES = libmatevolumecontrol.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libmatevolumecontrol_la_SOURCES) \
+ $(mate_volume_control_SOURCES) \
+ $(mate_volume_control_applet_SOURCES)
+DIST_SOURCES = $(libmatevolumecontrol_la_SOURCES) \
+ $(mate_volume_control_SOURCES) \
+ $(mate_volume_control_applet_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLADEUI_CATALOG_DIR = @GLADEUI_CATALOG_DIR@
+GLADEUI_CFLAGS = @GLADEUI_CFLAGS@
+GLADEUI_LIBS = @GLADEUI_LIBS@
+GLADEUI_MODULE_DIR = @GLADEUI_MODULE_DIR@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GSR_CFLAGS = @GSR_CFLAGS@
+GSR_LIBS = @GSR_LIBS@
+GSTMIXER_CFLAGS = @GSTMIXER_CFLAGS@
+GSTMIXER_LIBS = @GSTMIXER_LIBS@
+GSTPROPS_CFLAGS = @GSTPROPS_CFLAGS@
+GSTPROPS_LIBS = @GSTPROPS_LIBS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+HAVE_PULSEAUDIO = @HAVE_PULSEAUDIO@
+HAVE_SOUND_THEME = @HAVE_SOUND_THEME@
+HELP_DIR = @HELP_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECC_DESKTOP_DIR = @MATECC_DESKTOP_DIR@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PROGRAMS_GSTPROPS = @PROGRAMS_GSTPROPS@
+PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@
+PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOUNDTHEME_CFLAGS = @SOUNDTHEME_CFLAGS@
+SOUNDTHEME_LIBS = @SOUNDTHEME_LIBS@
+SOUND_THEME_CFLAGS = @SOUND_THEME_CFLAGS@
+SOUND_THEME_LIBS = @SOUND_THEME_LIBS@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+VOLUME_CONTROL_CFLAGS = @VOLUME_CONTROL_CFLAGS@
+VOLUME_CONTROL_LIBS = @VOLUME_CONTROL_LIBS@
+WARN_CFLAGS = @WARN_CFLAGS@
+WARN_CXXFLAGS = @WARN_CXXFLAGS@
+XGETTEXT = @XGETTEXT@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+AM_CPPFLAGS = \
+ $(WARN_CFLAGS) \
+ -I$(top_srcdir)/sound-theme \
+ $(VOLUME_CONTROL_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(PULSEAUDIO_CFLAGS) \
+ -DLOCALE_DIR=\""$(datadir)/locale"\" \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
+ -DGLADEDIR=\""$(pkgdatadir)"\" \
+ -DICON_DATA_DIR="\"$(pkgdatadir)/icons\"" \
+ $(NULL)
+
+noinst_LTLIBRARIES = libmatevolumecontrol.la
+libmatevolumecontrol_la_SOURCES = \
+ gvc-mixer-card.h \
+ gvc-mixer-card.c \
+ gvc-mixer-stream.h \
+ gvc-mixer-stream.c \
+ gvc-channel-map.h \
+ gvc-channel-map.c \
+ gvc-mixer-sink.h \
+ gvc-mixer-sink.c \
+ gvc-mixer-source.h \
+ gvc-mixer-source.c \
+ gvc-mixer-sink-input.h \
+ gvc-mixer-sink-input.c \
+ gvc-mixer-source-output.h \
+ gvc-mixer-source-output.c \
+ gvc-mixer-event-role.h \
+ gvc-mixer-event-role.c \
+ gvc-mixer-control.h \
+ gvc-mixer-control.c \
+ gvc-channel-bar.h \
+ gvc-channel-bar.c \
+ gvc-log.h \
+ gvc-log.c \
+ $(NULL)
+
+mate_volume_control_applet_LDADD = \
+ -lm \
+ libmatevolumecontrol.la \
+ $(VOLUME_CONTROL_LIBS) \
+ $(PULSEAUDIO_LIBS) \
+ $(NULL)
+
+mate_volume_control_applet_SOURCES = \
+ gvc-stream-status-icon.h \
+ gvc-stream-status-icon.c \
+ gvc-applet.h \
+ gvc-applet.c \
+ applet-main.c \
+ $(NULL)
+
+mate_volume_control_LDADD = \
+ -lm \
+ libmatevolumecontrol.la \
+ $(top_builddir)/sound-theme/libsoundtheme.la \
+ $(VOLUME_CONTROL_LIBS) \
+ $(PULSEAUDIO_LIBS) \
+ $(NULL)
+
+mate_volume_control_SOURCES = \
+ gvc-balance-bar.h \
+ gvc-balance-bar.c \
+ gvc-mixer-dialog.h \
+ gvc-mixer-dialog.c \
+ gvc-level-bar.h \
+ gvc-level-bar.c \
+ gvc-combo-box.h \
+ gvc-combo-box.c \
+ gvc-speaker-test.h \
+ gvc-speaker-test.c \
+ dialog-main.c \
+ $(NULL)
+
+BUILT_SOURCES = \
+ $(NULL)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(NULL)
+
+MAINTAINERCLEANFILES = \
+ *~ \
+ Makefile.in
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mate-volume-control/src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign mate-volume-control/src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libmatevolumecontrol.la: $(libmatevolumecontrol_la_OBJECTS) $(libmatevolumecontrol_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmatevolumecontrol_la_OBJECTS) $(libmatevolumecontrol_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+mate-volume-control$(EXEEXT): $(mate_volume_control_OBJECTS) $(mate_volume_control_DEPENDENCIES)
+ @rm -f mate-volume-control$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mate_volume_control_OBJECTS) $(mate_volume_control_LDADD) $(LIBS)
+mate-volume-control-applet$(EXEEXT): $(mate_volume_control_applet_OBJECTS) $(mate_volume_control_applet_DEPENDENCIES)
+ @rm -f mate-volume-control-applet$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mate_volume_control_applet_OBJECTS) $(mate_volume_control_applet_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/applet-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-applet.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-balance-bar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-channel-bar.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-channel-map.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-combo-box.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-level-bar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-log.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-card.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-control.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-dialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-event-role.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-sink-input.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-sink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-source-output.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-source.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-mixer-stream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-speaker-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gvc-stream-status-icon.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-volume-control/src/applet-main.c b/mate-volume-control/src/applet-main.c
new file mode 100644
index 0000000..94d0960
--- /dev/null
+++ b/mate-volume-control/src/applet-main.c
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <libintl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <glib/gi18n.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <unique/uniqueapp.h>
+
+#include "gvc-applet.h"
+#include "gvc-log.h"
+
+#define GVCA_DBUS_NAME "org.mate.VolumeControlApplet"
+
+static gboolean show_version = FALSE;
+static gboolean debug = FALSE;
+
+int
+main (int argc, char **argv)
+{
+ GError *error;
+ GvcApplet *applet;
+ UniqueApp *app = NULL;
+ static GOptionEntry entries[] = {
+ { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
+ { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL },
+ { NULL, 0, 0, 0, NULL, NULL, NULL }
+ };
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ gvc_log_init ();
+
+ error = NULL;
+ gtk_init_with_args (&argc, &argv,
+ (char *) _(" — MATE Volume Control Applet"),
+ entries, GETTEXT_PACKAGE,
+ &error);
+
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ exit (1);
+ }
+
+ if (show_version) {
+ g_print ("%s %s\n", argv [0], VERSION);
+ exit (1);
+ }
+
+ gvc_log_set_debug (debug);
+
+ if (debug == FALSE) {
+ app = unique_app_new (GVCA_DBUS_NAME, NULL);
+ if (unique_app_is_running (app)) {
+ g_warning ("Applet is already running, exiting");
+ return 0;
+ }
+ }
+
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+ ICON_DATA_DIR);
+
+ applet = gvc_applet_new ();
+ gvc_applet_start (applet);
+
+ gtk_main ();
+
+ if (applet != NULL) {
+ g_object_unref (applet);
+ }
+ if (app != NULL) {
+ g_object_unref (app);
+ }
+
+ return 0;
+}
diff --git a/mate-volume-control/src/dialog-main.c b/mate-volume-control/src/dialog-main.c
new file mode 100644
index 0000000..21cdd0f
--- /dev/null
+++ b/mate-volume-control/src/dialog-main.c
@@ -0,0 +1,211 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <libintl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <glib/gi18n.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <unique/uniqueapp.h>
+
+#include "gvc-mixer-dialog.h"
+#include "gvc-log.h"
+
+#define GVCA_DBUS_NAME "org.mate.VolumeControl"
+#define DIALOG_POPUP_TIMEOUT 3
+
+static gboolean show_version = FALSE;
+static gboolean debug = FALSE;
+static gchar* page = NULL;
+
+static guint popup_id = 0;
+static GtkWidget *dialog = NULL;
+static GtkWidget *warning_dialog = NULL;
+
+static void
+on_dialog_response (GtkDialog *dialog,
+ guint response_id,
+ gpointer data)
+{
+ gtk_main_quit ();
+}
+
+static void
+on_dialog_close (GtkDialog *dialog,
+ gpointer data)
+{
+ gtk_main_quit ();
+}
+
+static UniqueResponse
+message_received_cb (UniqueApp *app,
+ int command,
+ UniqueMessageData *message_data,
+ guint time_,
+ gpointer user_data)
+{
+ gtk_window_present (GTK_WINDOW (user_data));
+
+ return UNIQUE_RESPONSE_OK;
+}
+
+static void
+on_control_ready (GvcMixerControl *control,
+ UniqueApp *app)
+{
+ if (popup_id != 0) {
+ g_source_remove (popup_id);
+ popup_id = 0;
+ }
+ if (warning_dialog != NULL) {
+ gtk_widget_destroy (warning_dialog);
+ warning_dialog = NULL;
+ }
+
+ if (dialog)
+ return;
+
+ dialog = GTK_WIDGET (gvc_mixer_dialog_new (control));
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (on_dialog_response),
+ NULL);
+ g_signal_connect (dialog,
+ "close",
+ G_CALLBACK (on_dialog_close),
+ NULL);
+
+ gvc_mixer_dialog_set_page(GVC_MIXER_DIALOG (dialog), page);
+
+ g_signal_connect (app, "message-received",
+ G_CALLBACK (message_received_cb), dialog);
+
+ gtk_widget_show (dialog);
+}
+
+static void
+warning_dialog_answered (GtkDialog *d,
+ gpointer data)
+{
+ gtk_widget_destroy (warning_dialog);
+ gtk_main_quit ();
+}
+
+static gboolean
+dialog_popup_timeout (gpointer data)
+{
+ warning_dialog = gtk_message_dialog_new (GTK_WINDOW(dialog),
+ 0,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CANCEL,
+ _("Waiting for sound system to respond"));
+ g_signal_connect (warning_dialog, "response",
+ G_CALLBACK (warning_dialog_answered), NULL);
+ g_signal_connect (warning_dialog, "close",
+ G_CALLBACK (warning_dialog_answered), NULL);
+
+ gtk_widget_show (warning_dialog);
+
+ return FALSE;
+}
+
+static void
+on_control_connecting (GvcMixerControl *control,
+ UniqueApp *app)
+{
+ if (popup_id != 0)
+ return;
+
+ popup_id = g_timeout_add_seconds (DIALOG_POPUP_TIMEOUT,
+ dialog_popup_timeout,
+ NULL);
+}
+
+int
+main (int argc, char **argv)
+{
+ GError *error;
+ GvcMixerControl *control;
+ UniqueApp *app;
+ static GOptionEntry entries[] = {
+ { "page", 'p', 0, G_OPTION_ARG_STRING, &page, N_("Startup page"), "effects|hardware|input|output|applications" },
+ { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
+ { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL },
+ { NULL, 0, 0, 0, NULL, NULL, NULL }
+ };
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ gvc_log_init ();
+
+ error = NULL;
+ gtk_init_with_args (&argc, &argv,
+ (char *) _(" — MATE Volume Control"),
+ entries, GETTEXT_PACKAGE,
+ &error);
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ exit (1);
+ }
+
+ if (show_version) {
+ g_print ("%s %s\n", argv [0], VERSION);
+ exit (1);
+ }
+
+ gvc_log_set_debug (debug);
+
+ app = unique_app_new (GVCA_DBUS_NAME, NULL);
+ if (unique_app_is_running (app)) {
+ unique_app_send_message (app, UNIQUE_ACTIVATE, NULL);
+ exit (0);
+ }
+
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+ ICON_DATA_DIR);
+ gtk_window_set_default_icon_name ("multimedia-volume-control");
+
+ control = gvc_mixer_control_new ("MATE Volume Control Dialog");
+ g_signal_connect (control,
+ "connecting",
+ G_CALLBACK (on_control_connecting),
+ app);
+ g_signal_connect (control,
+ "ready",
+ G_CALLBACK (on_control_ready),
+ app);
+ gvc_mixer_control_open (control);
+
+ gtk_main ();
+
+ if (control != NULL) {
+ g_object_unref (control);
+ }
+
+ return 0;
+}
diff --git a/mate-volume-control/src/gvc-applet.c b/mate-volume-control/src/gvc-applet.c
new file mode 100644
index 0000000..7562fbe
--- /dev/null
+++ b/mate-volume-control/src/gvc-applet.c
@@ -0,0 +1,310 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "gvc-applet.h"
+#include "gvc-mixer-control.h"
+#include "gvc-stream-status-icon.h"
+
+#define GVC_APPLET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_APPLET, GvcAppletPrivate))
+
+#define SCALE_SIZE 128
+
+static const char *output_icon_names[] = {
+ "audio-volume-muted",
+ "audio-volume-low",
+ "audio-volume-medium",
+ "audio-volume-high",
+ NULL
+};
+
+static const char *input_icon_names[] = {
+ "audio-input-microphone-muted",
+ "audio-input-microphone-low",
+ "audio-input-microphone-medium",
+ "audio-input-microphone-high",
+ NULL
+};
+
+struct GvcAppletPrivate
+{
+ GvcStreamStatusIcon *input_status_icon;
+ GvcStreamStatusIcon *output_status_icon;
+ GvcMixerControl *control;
+};
+
+static void gvc_applet_class_init (GvcAppletClass *klass);
+static void gvc_applet_init (GvcApplet *applet);
+static void gvc_applet_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcApplet, gvc_applet, G_TYPE_OBJECT)
+
+static void
+maybe_show_status_icons (GvcApplet *applet)
+{
+ gboolean show;
+ GvcMixerStream *stream;
+ GSList *source_outputs, *l;
+
+ show = TRUE;
+ stream = gvc_mixer_control_get_default_sink (applet->priv->control);
+ if (stream == NULL) {
+ show = FALSE;
+ }
+ gtk_status_icon_set_visible (GTK_STATUS_ICON (applet->priv->output_status_icon), show);
+
+
+ show = FALSE;
+ stream = gvc_mixer_control_get_default_source (applet->priv->control);
+ source_outputs = gvc_mixer_control_get_source_outputs (applet->priv->control);
+ if (stream != NULL && source_outputs != NULL) {
+ /* Check that we're not trying to add the peak detector
+ * as an application doing recording */
+ for (l = source_outputs ; l ; l = l->next) {
+ GvcMixerStream *s = l->data;
+ const char *id;
+
+ id = gvc_mixer_stream_get_application_id (s);
+ if (id == NULL) {
+ show = TRUE;
+ break;
+ }
+
+ if (!g_str_equal (id, "org.mate.VolumeControl") &&
+ !g_str_equal (id, "org.PulseAudio.pavucontrol")) {
+ show = TRUE;
+ break;
+ }
+ }
+ }
+ gtk_status_icon_set_visible (GTK_STATUS_ICON (applet->priv->input_status_icon), show);
+
+ g_slist_free (source_outputs);
+}
+
+void
+gvc_applet_start (GvcApplet *applet)
+{
+ g_return_if_fail (GVC_IS_APPLET (applet));
+
+ maybe_show_status_icons (applet);
+}
+
+static void
+gvc_applet_dispose (GObject *object)
+{
+ GvcApplet *applet = GVC_APPLET (object);
+
+ if (applet->priv->control != NULL) {
+ g_object_unref (applet->priv->control);
+ applet->priv->control = NULL;
+ }
+
+ G_OBJECT_CLASS (gvc_applet_parent_class)->dispose (object);
+}
+
+static void
+update_default_source (GvcApplet *applet)
+{
+ GvcMixerStream *stream;
+
+ stream = gvc_mixer_control_get_default_source (applet->priv->control);
+ if (stream != NULL) {
+ gvc_stream_status_icon_set_mixer_stream (applet->priv->input_status_icon,
+ stream);
+ maybe_show_status_icons(applet);
+ } else {
+ g_debug ("Unable to get default source, or no source available");
+ }
+}
+
+static void
+update_default_sink (GvcApplet *applet)
+{
+ GvcMixerStream *stream;
+
+ stream = gvc_mixer_control_get_default_sink (applet->priv->control);
+ if (stream != NULL) {
+ gvc_stream_status_icon_set_mixer_stream (applet->priv->output_status_icon,
+ stream);
+ maybe_show_status_icons(applet);
+ } else {
+ g_warning ("Unable to get default sink");
+ }
+}
+
+static void
+on_control_ready (GvcMixerControl *control,
+ GvcApplet *applet)
+{
+ update_default_sink (applet);
+ update_default_source (applet);
+}
+
+static void
+on_control_connecting (GvcMixerControl *control,
+ GvcApplet *applet)
+{
+ g_debug ("Connecting..");
+}
+
+static void
+on_control_default_sink_changed (GvcMixerControl *control,
+ guint id,
+ GvcApplet *applet)
+{
+ update_default_sink (applet);
+}
+
+static void
+on_control_default_source_changed (GvcMixerControl *control,
+ guint id,
+ GvcApplet *applet)
+{
+ update_default_source (applet);
+}
+
+static void
+on_control_stream_removed (GvcMixerControl *control,
+ guint id,
+ GvcApplet *applet)
+{
+ maybe_show_status_icons (applet);
+}
+
+static void
+on_control_stream_added (GvcMixerControl *control,
+ guint id,
+ GvcApplet *applet)
+{
+ maybe_show_status_icons (applet);
+}
+
+static GObject *
+gvc_applet_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcApplet *self;
+
+ object = G_OBJECT_CLASS (gvc_applet_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_APPLET (object);
+
+ self->priv->control = gvc_mixer_control_new ("MATE Volume Control Applet");
+ g_signal_connect (self->priv->control,
+ "ready",
+ G_CALLBACK (on_control_ready),
+ self);
+ g_signal_connect (self->priv->control,
+ "connecting",
+ G_CALLBACK (on_control_connecting),
+ self);
+ g_signal_connect (self->priv->control,
+ "default-sink-changed",
+ G_CALLBACK (on_control_default_sink_changed),
+ self);
+ g_signal_connect (self->priv->control,
+ "default-source-changed",
+ G_CALLBACK (on_control_default_source_changed),
+ self);
+ g_signal_connect (self->priv->control,
+ "stream-added",
+ G_CALLBACK (on_control_stream_added),
+ self);
+ g_signal_connect (self->priv->control,
+ "stream-removed",
+ G_CALLBACK (on_control_stream_removed),
+ self);
+
+ gvc_mixer_control_open (self->priv->control);
+
+ return object;
+}
+
+static void
+gvc_applet_class_init (GvcAppletClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = gvc_applet_finalize;
+ object_class->dispose = gvc_applet_dispose;
+ object_class->constructor = gvc_applet_constructor;
+
+ g_type_class_add_private (klass, sizeof (GvcAppletPrivate));
+}
+
+static void
+gvc_applet_init (GvcApplet *applet)
+{
+ applet->priv = GVC_APPLET_GET_PRIVATE (applet);
+
+ applet->priv->output_status_icon = gvc_stream_status_icon_new (NULL,
+ output_icon_names);
+ gvc_stream_status_icon_set_display_name (applet->priv->output_status_icon,
+ _("Output"));
+ gtk_status_icon_set_title (GTK_STATUS_ICON (applet->priv->output_status_icon),
+ _("Sound Output Volume"));
+ applet->priv->input_status_icon = gvc_stream_status_icon_new (NULL,
+ input_icon_names);
+ gvc_stream_status_icon_set_display_name (applet->priv->input_status_icon,
+ _("Input"));
+ gtk_status_icon_set_title (GTK_STATUS_ICON (applet->priv->input_status_icon),
+ _("Microphone Volume"));
+}
+
+static void
+gvc_applet_finalize (GObject *object)
+{
+ GvcApplet *applet;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_APPLET (object));
+
+ applet = GVC_APPLET (object);
+
+ g_return_if_fail (applet->priv != NULL);
+
+
+ G_OBJECT_CLASS (gvc_applet_parent_class)->finalize (object);
+}
+
+GvcApplet *
+gvc_applet_new (void)
+{
+ GObject *applet;
+
+ applet = g_object_new (GVC_TYPE_APPLET, NULL);
+
+ return GVC_APPLET (applet);
+}
diff --git a/mate-volume-control/src/gvc-applet.h b/mate-volume-control/src/gvc-applet.h
new file mode 100644
index 0000000..d9e0311
--- /dev/null
+++ b/mate-volume-control/src/gvc-applet.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_APPLET_H
+#define __GVC_APPLET_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_APPLET (gvc_applet_get_type ())
+#define GVC_APPLET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_APPLET, GvcApplet))
+#define GVC_APPLET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_APPLET, GvcAppletClass))
+#define GVC_IS_APPLET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_APPLET))
+#define GVC_IS_APPLET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_APPLET))
+#define GVC_APPLET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_APPLET, GvcAppletClass))
+
+typedef struct GvcAppletPrivate GvcAppletPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GvcAppletPrivate *priv;
+} GvcApplet;
+
+typedef struct
+{
+ GObjectClass parent_class;
+} GvcAppletClass;
+
+GType gvc_applet_get_type (void);
+
+GvcApplet * gvc_applet_new (void);
+void gvc_applet_start (GvcApplet *applet);
+
+G_END_DECLS
+
+#endif /* __GVC_APPLET_H */
diff --git a/mate-volume-control/src/gvc-balance-bar.c b/mate-volume-control/src/gvc-balance-bar.c
new file mode 100644
index 0000000..6f5c47f
--- /dev/null
+++ b/mate-volume-control/src/gvc-balance-bar.c
@@ -0,0 +1,548 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <canberra-gtk.h>
+
+#include "gvc-balance-bar.h"
+
+#define SCALE_SIZE 128
+#define ADJUSTMENT_MAX_NORMAL 65536.0 /* PA_VOLUME_NORM */
+
+#define GVC_BALANCE_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_BALANCE_BAR, GvcBalanceBarPrivate))
+
+struct GvcBalanceBarPrivate
+{
+ GvcChannelMap *channel_map;
+ GvcBalanceType btype;
+ GtkWidget *scale_box;
+ GtkWidget *start_box;
+ GtkWidget *end_box;
+ GtkWidget *label;
+ GtkWidget *scale;
+ GtkAdjustment *adjustment;
+ GtkSizeGroup *size_group;
+ gboolean symmetric;
+ gboolean click_lock;
+};
+
+enum
+{
+ PROP_0,
+ PROP_CHANNEL_MAP,
+ PROP_BALANCE_TYPE,
+};
+
+static void gvc_balance_bar_class_init (GvcBalanceBarClass *klass);
+static void gvc_balance_bar_init (GvcBalanceBar *balance_bar);
+static void gvc_balance_bar_finalize (GObject *object);
+
+static gboolean on_scale_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcBalanceBar *bar);
+static gboolean on_scale_button_release_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcBalanceBar *bar);
+static gboolean on_scale_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event,
+ GvcBalanceBar *bar);
+static void on_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcBalanceBar *bar);
+
+G_DEFINE_TYPE (GvcBalanceBar, gvc_balance_bar, GTK_TYPE_HBOX)
+
+static GtkWidget *
+_scale_box_new (GvcBalanceBar *bar)
+{
+ GvcBalanceBarPrivate *priv = bar->priv;
+ GtkWidget *box;
+ GtkWidget *sbox;
+ GtkWidget *ebox;
+ GtkAdjustment *adjustment = bar->priv->adjustment;
+ char *str_lower, *str_upper;
+ gdouble lower, upper;
+
+ bar->priv->scale_box = box = gtk_hbox_new (FALSE, 6);
+ priv->scale = gtk_hscale_new (priv->adjustment);
+ gtk_widget_set_size_request (priv->scale, SCALE_SIZE, -1);
+
+ gtk_widget_set_name (priv->scale, "balance-bar-scale");
+ gtk_rc_parse_string ("style \"balance-bar-scale-style\" {\n"
+ " GtkScale::trough-side-details = 0\n"
+ "}\n"
+ "widget \"*.balance-bar-scale\" style : rc \"balance-bar-scale-style\"\n");
+
+ bar->priv->start_box = sbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), sbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (sbox), priv->label, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (box), priv->scale, TRUE, TRUE, 0);
+
+ switch (bar->priv->btype) {
+ case BALANCE_TYPE_RL:
+ str_lower = g_strdup_printf ("<small>%s</small>", C_("balance", "Left"));
+ str_upper = g_strdup_printf ("<small>%s</small>", C_("balance", "Right"));
+ break;
+ case BALANCE_TYPE_FR:
+ str_lower = g_strdup_printf ("<small>%s</small>", C_("balance", "Rear"));
+ str_upper = g_strdup_printf ("<small>%s</small>", C_("balance", "Front"));
+ break;
+ case BALANCE_TYPE_LFE:
+ str_lower = g_strdup_printf ("<small>%s</small>", C_("balance", "Minimum"));
+ str_upper = g_strdup_printf ("<small>%s</small>", C_("balance", "Maximum"));
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ lower = gtk_adjustment_get_lower (adjustment);
+ gtk_scale_add_mark (GTK_SCALE (priv->scale), lower,
+ GTK_POS_BOTTOM, str_lower);
+ g_free (str_lower);
+ upper = gtk_adjustment_get_upper (adjustment);
+ gtk_scale_add_mark (GTK_SCALE (priv->scale), upper,
+ GTK_POS_BOTTOM, str_upper);
+ g_free (str_upper);
+
+ if (bar->priv->btype != BALANCE_TYPE_LFE) {
+ gtk_scale_add_mark (GTK_SCALE (priv->scale),
+ (upper - lower)/2 + lower,
+ GTK_POS_BOTTOM, NULL);
+ }
+
+ bar->priv->end_box = ebox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), ebox, FALSE, FALSE, 0);
+
+ gtk_range_set_update_policy (GTK_RANGE (priv->scale), GTK_UPDATE_CONTINUOUS);
+ ca_gtk_widget_disable_sounds (bar->priv->scale, FALSE);
+ gtk_widget_add_events (bar->priv->scale, GDK_SCROLL_MASK);
+
+ g_signal_connect (G_OBJECT (bar->priv->scale), "button-press-event",
+ G_CALLBACK (on_scale_button_press_event), bar);
+ g_signal_connect (G_OBJECT (bar->priv->scale), "button-release-event",
+ G_CALLBACK (on_scale_button_release_event), bar);
+ g_signal_connect (G_OBJECT (bar->priv->scale), "scroll-event",
+ G_CALLBACK (on_scale_scroll_event), bar);
+
+ if (bar->priv->size_group != NULL) {
+ gtk_size_group_add_widget (bar->priv->size_group, sbox);
+
+ if (bar->priv->symmetric) {
+ gtk_size_group_add_widget (bar->priv->size_group, ebox);
+ }
+ }
+
+ gtk_scale_set_draw_value (GTK_SCALE (priv->scale), FALSE);
+
+ return box;
+}
+
+void
+gvc_balance_bar_set_size_group (GvcBalanceBar *bar,
+ GtkSizeGroup *group,
+ gboolean symmetric)
+{
+ g_return_if_fail (GVC_IS_BALANCE_BAR (bar));
+
+ bar->priv->size_group = group;
+ bar->priv->symmetric = symmetric;
+
+ if (bar->priv->size_group != NULL) {
+ gtk_size_group_add_widget (bar->priv->size_group,
+ bar->priv->start_box);
+
+ if (bar->priv->symmetric) {
+ gtk_size_group_add_widget (bar->priv->size_group,
+ bar->priv->end_box);
+ }
+ }
+ gtk_widget_queue_draw (GTK_WIDGET (bar));
+}
+
+static const char *
+btype_to_string (guint btype)
+{
+ switch (btype) {
+ case BALANCE_TYPE_RL:
+ return "Balance";
+ case BALANCE_TYPE_FR:
+ return "Fade";
+ break;
+ case BALANCE_TYPE_LFE:
+ return "LFE";
+ default:
+ g_assert_not_reached ();
+ }
+ return NULL;
+}
+
+static void
+update_level_from_map (GvcBalanceBar *bar,
+ GvcChannelMap *map)
+{
+ const gdouble *volumes;
+ gdouble val;
+
+ g_debug ("Volume changed (for %s bar)", btype_to_string (bar->priv->btype));
+
+ volumes = gvc_channel_map_get_volume (map);
+ switch (bar->priv->btype) {
+ case BALANCE_TYPE_RL:
+ val = volumes[BALANCE];
+ break;
+ case BALANCE_TYPE_FR:
+ val = volumes[FADE];
+ break;
+ case BALANCE_TYPE_LFE:
+ val = volumes[LFE];
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ gtk_adjustment_set_value (bar->priv->adjustment, val);
+}
+
+static void
+on_channel_map_volume_changed (GvcChannelMap *map,
+ gboolean set,
+ GvcBalanceBar *bar)
+{
+ update_level_from_map (bar, map);
+}
+
+static void
+gvc_balance_bar_set_channel_map (GvcBalanceBar *bar,
+ GvcChannelMap *map)
+{
+ g_return_if_fail (GVC_BALANCE_BAR (bar));
+
+ if (bar->priv->channel_map != NULL) {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (bar->priv->channel_map),
+ on_channel_map_volume_changed, bar);
+ g_object_unref (bar->priv->channel_map);
+ }
+ bar->priv->channel_map = g_object_ref (map);
+
+ update_level_from_map (bar, map);
+
+ g_signal_connect (G_OBJECT (map), "volume-changed",
+ G_CALLBACK (on_channel_map_volume_changed), bar);
+
+ g_object_notify (G_OBJECT (bar), "channel-map");
+}
+
+static void
+gvc_balance_bar_set_balance_type (GvcBalanceBar *bar,
+ GvcBalanceType btype)
+{
+ GtkWidget *frame;
+
+ g_return_if_fail (GVC_BALANCE_BAR (bar));
+
+ bar->priv->btype = btype;
+ if (bar->priv->btype != BALANCE_TYPE_LFE) {
+ bar->priv->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
+ -1.0,
+ 1.0,
+ 0.5,
+ 0.5,
+ 0.0));
+ } else {
+ bar->priv->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
+ 0.0,
+ ADJUSTMENT_MAX_NORMAL,
+ ADJUSTMENT_MAX_NORMAL/100.0,
+ ADJUSTMENT_MAX_NORMAL/10.0,
+ 0.0));
+ }
+
+ g_object_ref_sink (bar->priv->adjustment);
+ g_signal_connect (bar->priv->adjustment,
+ "value-changed",
+ G_CALLBACK (on_adjustment_value_changed),
+ bar);
+
+ switch (btype) {
+ case BALANCE_TYPE_RL:
+ bar->priv->label = gtk_label_new_with_mnemonic (_("_Balance:"));
+ break;
+ case BALANCE_TYPE_FR:
+ bar->priv->label = gtk_label_new_with_mnemonic (_("_Fade:"));
+ break;
+ case BALANCE_TYPE_LFE:
+ bar->priv->label = gtk_label_new_with_mnemonic (_("_Subwoofer:"));
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->label),
+ 0.0,
+ 0.0);
+ /* frame */
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+ gtk_container_add (GTK_CONTAINER (bar), frame);
+
+ /* box with scale */
+ bar->priv->scale_box = _scale_box_new (bar);
+ gtk_container_add (GTK_CONTAINER (frame), bar->priv->scale_box);
+ gtk_widget_show_all (frame);
+
+ gtk_widget_set_direction (bar->priv->scale, GTK_TEXT_DIR_LTR);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (bar->priv->label),
+ bar->priv->scale);
+
+ g_object_notify (G_OBJECT (bar), "balance-type");
+}
+
+static void
+gvc_balance_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcBalanceBar *self = GVC_BALANCE_BAR (object);
+
+ switch (prop_id) {
+ case PROP_CHANNEL_MAP:
+ gvc_balance_bar_set_channel_map (self, g_value_get_object (value));
+ break;
+ case PROP_BALANCE_TYPE:
+ gvc_balance_bar_set_balance_type (self, g_value_get_int (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_balance_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcBalanceBar *self = GVC_BALANCE_BAR (object);
+
+ switch (prop_id) {
+ case PROP_CHANNEL_MAP:
+ g_value_set_object (value, self->priv->channel_map);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+gvc_balance_bar_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ return G_OBJECT_CLASS (gvc_balance_bar_parent_class)->constructor (type, n_construct_properties, construct_params);
+}
+
+static void
+gvc_balance_bar_class_init (GvcBalanceBarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = gvc_balance_bar_constructor;
+ object_class->finalize = gvc_balance_bar_finalize;
+ object_class->set_property = gvc_balance_bar_set_property;
+ object_class->get_property = gvc_balance_bar_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_CHANNEL_MAP,
+ g_param_spec_object ("channel-map",
+ "channel map",
+ "The channel map",
+ GVC_TYPE_CHANNEL_MAP,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_BALANCE_TYPE,
+ g_param_spec_int ("balance-type",
+ "balance type",
+ "Whether the balance is right-left or front-rear",
+ BALANCE_TYPE_RL, NUM_BALANCE_TYPES - 1, BALANCE_TYPE_RL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+
+ g_type_class_add_private (klass, sizeof (GvcBalanceBarPrivate));
+}
+
+
+static gboolean
+on_scale_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcBalanceBar *bar)
+{
+ bar->priv->click_lock = TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+on_scale_button_release_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcBalanceBar *bar)
+{
+ bar->priv->click_lock = FALSE;
+
+ return FALSE;
+}
+
+static gboolean
+on_scale_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event,
+ GvcBalanceBar *bar)
+{
+ gdouble value;
+
+ value = gtk_adjustment_get_value (bar->priv->adjustment);
+
+ if (bar->priv->btype == BALANCE_TYPE_LFE) {
+ if (event->direction == GDK_SCROLL_UP) {
+ if (value + ADJUSTMENT_MAX_NORMAL/100.0 > ADJUSTMENT_MAX_NORMAL)
+ value = ADJUSTMENT_MAX_NORMAL;
+ else
+ value = value + ADJUSTMENT_MAX_NORMAL/100.0;
+ } else if (event->direction == GDK_SCROLL_DOWN) {
+ if (value - ADJUSTMENT_MAX_NORMAL/100.0 < 0)
+ value = 0.0;
+ else
+ value = value - ADJUSTMENT_MAX_NORMAL/100.0;
+ }
+ } else {
+ if (event->direction == GDK_SCROLL_UP) {
+ if (value + 0.01 > 1.0)
+ value = 1.0;
+ else
+ value = value + 0.01;
+ } else if (event->direction == GDK_SCROLL_DOWN) {
+ if (value - 0.01 < 0)
+ value = 0.0;
+ else
+ value = value - 0.01;
+ }
+ }
+ gtk_adjustment_set_value (bar->priv->adjustment, value);
+
+ return TRUE;
+}
+
+/* FIXME remove when we depend on a newer PA */
+static pa_cvolume *
+gvc_pa_cvolume_set_position (pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v) {
+ unsigned c;
+ gboolean good = FALSE;
+
+ g_assert(cv);
+ g_assert(map);
+
+ g_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), NULL);
+ g_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, NULL);
+
+ for (c = 0; c < map->channels; c++)
+ if (map->map[c] == t) {
+ cv->values[c] = v;
+ good = TRUE;
+ }
+
+ return good ? cv : NULL;
+}
+
+static void
+on_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcBalanceBar *bar)
+{
+ gdouble val;
+ pa_cvolume cv;
+ const pa_channel_map *pa_map;
+
+ if (bar->priv->channel_map == NULL)
+ return;
+
+ cv = *gvc_channel_map_get_cvolume (bar->priv->channel_map);
+ val = gtk_adjustment_get_value (adjustment);
+
+ pa_map = gvc_channel_map_get_pa_channel_map (bar->priv->channel_map);
+
+ switch (bar->priv->btype) {
+ case BALANCE_TYPE_RL:
+ pa_cvolume_set_balance (&cv, pa_map, val);
+ break;
+ case BALANCE_TYPE_FR:
+ pa_cvolume_set_fade (&cv, pa_map, val);
+ break;
+ case BALANCE_TYPE_LFE:
+ gvc_pa_cvolume_set_position (&cv, pa_map, PA_CHANNEL_POSITION_LFE, val);
+ break;
+ }
+
+ gvc_channel_map_volume_changed (bar->priv->channel_map, &cv, TRUE);
+}
+
+static void
+gvc_balance_bar_init (GvcBalanceBar *bar)
+{
+ bar->priv = GVC_BALANCE_BAR_GET_PRIVATE (bar);
+}
+
+static void
+gvc_balance_bar_finalize (GObject *object)
+{
+ GvcBalanceBar *bar;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_BALANCE_BAR (object));
+
+ bar = GVC_BALANCE_BAR (object);
+
+ g_return_if_fail (bar->priv != NULL);
+
+ if (bar->priv->channel_map != NULL) {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (bar->priv->channel_map),
+ on_channel_map_volume_changed, bar);
+ g_object_unref (bar->priv->channel_map);
+ }
+
+ G_OBJECT_CLASS (gvc_balance_bar_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gvc_balance_bar_new (const GvcChannelMap *channel_map, GvcBalanceType btype)
+{
+ GObject *bar;
+ bar = g_object_new (GVC_TYPE_BALANCE_BAR,
+ "channel-map", channel_map,
+ "balance-type", btype,
+ NULL);
+ return GTK_WIDGET (bar);
+}
diff --git a/mate-volume-control/src/gvc-balance-bar.h b/mate-volume-control/src/gvc-balance-bar.h
new file mode 100644
index 0000000..95e96dc
--- /dev/null
+++ b/mate-volume-control/src/gvc-balance-bar.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_BALANCE_BAR_H
+#define __GVC_BALANCE_BAR_H
+
+#include <glib-object.h>
+
+#include "gvc-channel-map.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_BALANCE_BAR (gvc_balance_bar_get_type ())
+#define GVC_BALANCE_BAR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_BALANCE_BAR, GvcBalanceBar))
+#define GVC_BALANCE_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_BALANCE_BAR, GvcBalanceBarClass))
+#define GVC_IS_BALANCE_BAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_BALANCE_BAR))
+#define GVC_IS_BALANCE_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_BALANCE_BAR))
+#define GVC_BALANCE_BAR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_BALANCE_BAR, GvcBalanceBarClass))
+
+typedef enum {
+ BALANCE_TYPE_RL,
+ BALANCE_TYPE_FR,
+ BALANCE_TYPE_LFE,
+} GvcBalanceType;
+
+#define NUM_BALANCE_TYPES BALANCE_TYPE_LFE + 1
+
+typedef struct GvcBalanceBarPrivate GvcBalanceBarPrivate;
+
+typedef struct
+{
+ GtkHBox parent;
+ GvcBalanceBarPrivate *priv;
+} GvcBalanceBar;
+
+typedef struct
+{
+ GtkHBoxClass parent_class;
+} GvcBalanceBarClass;
+
+GType gvc_balance_bar_get_type (void);
+
+GtkWidget * gvc_balance_bar_new (const GvcChannelMap *map,
+ GvcBalanceType btype);
+
+void gvc_balance_bar_set_size_group (GvcBalanceBar *bar,
+ GtkSizeGroup *group,
+ gboolean symmetric);
+
+G_END_DECLS
+
+#endif /* __GVC_BALANCE_BAR_H */
diff --git a/mate-volume-control/src/gvc-channel-bar.c b/mate-volume-control/src/gvc-channel-bar.c
new file mode 100644
index 0000000..d750871
--- /dev/null
+++ b/mate-volume-control/src/gvc-channel-bar.c
@@ -0,0 +1,930 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <pulse/pulseaudio.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <canberra-gtk.h>
+
+#include "gvc-channel-bar.h"
+
+#define SCALE_SIZE 128
+#define ADJUSTMENT_MAX_NORMAL 65536.0 /* PA_VOLUME_NORM */
+#define ADJUSTMENT_MAX_AMPLIFIED 98304.0 /* 1.5 * ADJUSTMENT_MAX_NORMAL */
+#define ADJUSTMENT_MAX (bar->priv->is_amplified ? ADJUSTMENT_MAX_AMPLIFIED : ADJUSTMENT_MAX_NORMAL)
+#define SCROLLSTEP (ADJUSTMENT_MAX / 100.0 * 5.0)
+
+#define GVC_CHANNEL_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_BAR, GvcChannelBarPrivate))
+
+struct GvcChannelBarPrivate
+{
+ GtkOrientation orientation;
+ GtkWidget *scale_box;
+ GtkWidget *start_box;
+ GtkWidget *end_box;
+ GtkWidget *image;
+ GtkWidget *label;
+ GtkWidget *low_image;
+ GtkWidget *scale;
+ GtkWidget *high_image;
+ GtkWidget *mute_box;
+ GtkWidget *mute_button;
+ GtkAdjustment *adjustment;
+ GtkAdjustment *zero_adjustment;
+ gboolean show_mute;
+ gboolean is_muted;
+ char *name;
+ char *icon_name;
+ char *low_icon_name;
+ char *high_icon_name;
+ GtkSizeGroup *size_group;
+ gboolean symmetric;
+ gboolean click_lock;
+ gboolean is_amplified;
+ guint32 base_volume;
+};
+
+enum
+{
+ PROP_0,
+ PROP_ORIENTATION,
+ PROP_SHOW_MUTE,
+ PROP_IS_MUTED,
+ PROP_ADJUSTMENT,
+ PROP_NAME,
+ PROP_ICON_NAME,
+ PROP_LOW_ICON_NAME,
+ PROP_HIGH_ICON_NAME,
+ PROP_IS_AMPLIFIED,
+};
+
+static void gvc_channel_bar_class_init (GvcChannelBarClass *klass);
+static void gvc_channel_bar_init (GvcChannelBar *channel_bar);
+static void gvc_channel_bar_finalize (GObject *object);
+
+static gboolean on_scale_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcChannelBar *bar);
+static gboolean on_scale_button_release_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcChannelBar *bar);
+static gboolean on_scale_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event,
+ GvcChannelBar *bar);
+
+G_DEFINE_TYPE (GvcChannelBar, gvc_channel_bar, GTK_TYPE_HBOX)
+
+static GtkWidget *
+_scale_box_new (GvcChannelBar *bar)
+{
+ GvcChannelBarPrivate *priv = bar->priv;
+ GtkWidget *box;
+ GtkWidget *sbox;
+ GtkWidget *ebox;
+
+ if (priv->orientation == GTK_ORIENTATION_VERTICAL) {
+ bar->priv->scale_box = box = gtk_vbox_new (FALSE, 6);
+
+ priv->scale = gtk_vscale_new (priv->adjustment);
+
+ gtk_widget_set_size_request (priv->scale, -1, SCALE_SIZE);
+ gtk_range_set_inverted (GTK_RANGE (priv->scale), TRUE);
+
+ bar->priv->start_box = sbox = gtk_vbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), sbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (sbox), priv->image, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (sbox), priv->label, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (sbox), priv->high_image, FALSE, FALSE, 0);
+ gtk_widget_hide (priv->high_image);
+ gtk_box_pack_start (GTK_BOX (box), priv->scale, TRUE, TRUE, 0);
+
+ bar->priv->end_box = ebox = gtk_vbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), ebox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (ebox), priv->low_image, FALSE, FALSE, 0);
+ gtk_widget_hide (priv->low_image);
+
+ gtk_box_pack_start (GTK_BOX (ebox), priv->mute_box, FALSE, FALSE, 0);
+ } else {
+ bar->priv->scale_box = box = gtk_hbox_new (FALSE, 6);
+
+ priv->scale = gtk_hscale_new (priv->adjustment);
+
+ gtk_widget_set_size_request (priv->scale, SCALE_SIZE, -1);
+
+ bar->priv->start_box = sbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), sbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_end (GTK_BOX (sbox), priv->low_image, FALSE, FALSE, 0);
+ gtk_widget_show (priv->low_image);
+
+ gtk_box_pack_start (GTK_BOX (sbox), priv->image, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (sbox), priv->label, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->scale, TRUE, TRUE, 0);
+
+ bar->priv->end_box = ebox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), ebox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (ebox), priv->high_image, FALSE, FALSE, 0);
+ gtk_widget_show (priv->high_image);
+ gtk_box_pack_start (GTK_BOX (ebox), priv->mute_box, FALSE, FALSE, 0);
+ }
+
+ gtk_range_set_update_policy (GTK_RANGE (priv->scale), GTK_UPDATE_CONTINUOUS);
+ ca_gtk_widget_disable_sounds (bar->priv->scale, FALSE);
+ gtk_widget_add_events (bar->priv->scale, GDK_SCROLL_MASK);
+
+ g_signal_connect (G_OBJECT (bar->priv->scale), "button-press-event",
+ G_CALLBACK (on_scale_button_press_event), bar);
+ g_signal_connect (G_OBJECT (bar->priv->scale), "button-release-event",
+ G_CALLBACK (on_scale_button_release_event), bar);
+ g_signal_connect (G_OBJECT (bar->priv->scale), "scroll-event",
+ G_CALLBACK (on_scale_scroll_event), bar);
+
+ if (bar->priv->size_group != NULL) {
+ gtk_size_group_add_widget (bar->priv->size_group, sbox);
+
+ if (bar->priv->symmetric) {
+ gtk_size_group_add_widget (bar->priv->size_group, ebox);
+ }
+ }
+
+ gtk_scale_set_draw_value (GTK_SCALE (priv->scale), FALSE);
+
+ return box;
+}
+
+static void
+update_image (GvcChannelBar *bar)
+{
+ gtk_image_set_from_icon_name (GTK_IMAGE (bar->priv->image),
+ bar->priv->icon_name,
+ GTK_ICON_SIZE_DIALOG);
+
+ if (bar->priv->icon_name != NULL) {
+ gtk_widget_show (bar->priv->image);
+ } else {
+ gtk_widget_hide (bar->priv->image);
+ }
+}
+
+static void
+update_label (GvcChannelBar *bar)
+{
+ if (bar->priv->name != NULL) {
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (bar->priv->label),
+ bar->priv->name);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (bar->priv->label),
+ bar->priv->scale);
+ gtk_widget_show (bar->priv->label);
+ } else {
+ gtk_label_set_text (GTK_LABEL (bar->priv->label), NULL);
+ gtk_widget_hide (bar->priv->label);
+ }
+}
+
+static void
+update_layout (GvcChannelBar *bar)
+{
+ GtkWidget *box;
+ GtkWidget *frame;
+
+ if (bar->priv->scale == NULL) {
+ return;
+ }
+
+ box = bar->priv->scale_box;
+ frame = gtk_widget_get_parent (box);
+
+ g_object_ref (bar->priv->image);
+ g_object_ref (bar->priv->label);
+ g_object_ref (bar->priv->mute_box);
+ g_object_ref (bar->priv->low_image);
+ g_object_ref (bar->priv->high_image);
+
+ gtk_container_remove (GTK_CONTAINER (bar->priv->start_box), bar->priv->image);
+ gtk_container_remove (GTK_CONTAINER (bar->priv->start_box), bar->priv->label);
+ gtk_container_remove (GTK_CONTAINER (bar->priv->end_box), bar->priv->mute_box);
+
+ if (bar->priv->orientation == GTK_ORIENTATION_VERTICAL) {
+ gtk_container_remove (GTK_CONTAINER (bar->priv->start_box), bar->priv->low_image);
+ gtk_container_remove (GTK_CONTAINER (bar->priv->end_box), bar->priv->high_image);
+ } else {
+ gtk_container_remove (GTK_CONTAINER (bar->priv->end_box), bar->priv->low_image);
+ gtk_container_remove (GTK_CONTAINER (bar->priv->start_box), bar->priv->high_image);
+ }
+
+ gtk_container_remove (GTK_CONTAINER (box), bar->priv->start_box);
+ gtk_container_remove (GTK_CONTAINER (box), bar->priv->scale);
+ gtk_container_remove (GTK_CONTAINER (box), bar->priv->end_box);
+ gtk_container_remove (GTK_CONTAINER (frame), box);
+
+ bar->priv->scale_box = _scale_box_new (bar);
+ gtk_container_add (GTK_CONTAINER (frame), bar->priv->scale_box);
+
+ g_object_unref (bar->priv->image);
+ g_object_unref (bar->priv->label);
+ g_object_unref (bar->priv->mute_box);
+ g_object_unref (bar->priv->low_image);
+ g_object_unref (bar->priv->high_image);
+
+ gtk_widget_show_all (frame);
+}
+
+void
+gvc_channel_bar_set_size_group (GvcChannelBar *bar,
+ GtkSizeGroup *group,
+ gboolean symmetric)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ bar->priv->size_group = group;
+ bar->priv->symmetric = symmetric;
+
+ if (bar->priv->size_group != NULL) {
+ gtk_size_group_add_widget (bar->priv->size_group,
+ bar->priv->start_box);
+
+ if (bar->priv->symmetric) {
+ gtk_size_group_add_widget (bar->priv->size_group,
+ bar->priv->end_box);
+ }
+ }
+ gtk_widget_queue_draw (GTK_WIDGET (bar));
+}
+
+void
+gvc_channel_bar_set_name (GvcChannelBar *bar,
+ const char *name)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ g_free (bar->priv->name);
+ bar->priv->name = g_strdup (name);
+ update_label (bar);
+ g_object_notify (G_OBJECT (bar), "name");
+}
+
+void
+gvc_channel_bar_set_icon_name (GvcChannelBar *bar,
+ const char *name)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ g_free (bar->priv->icon_name);
+ bar->priv->icon_name = g_strdup (name);
+ update_image (bar);
+ g_object_notify (G_OBJECT (bar), "icon-name");
+}
+
+void
+gvc_channel_bar_set_low_icon_name (GvcChannelBar *bar,
+ const char *name)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (name != NULL && strcmp (bar->priv->low_icon_name, name) != 0) {
+ g_free (bar->priv->low_icon_name);
+ bar->priv->low_icon_name = g_strdup (name);
+ gtk_image_set_from_icon_name (GTK_IMAGE (bar->priv->low_image),
+ bar->priv->low_icon_name,
+ GTK_ICON_SIZE_BUTTON);
+ g_object_notify (G_OBJECT (bar), "low-icon-name");
+ }
+}
+
+void
+gvc_channel_bar_set_high_icon_name (GvcChannelBar *bar,
+ const char *name)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (name != NULL && strcmp (bar->priv->high_icon_name, name) != 0) {
+ g_free (bar->priv->high_icon_name);
+ bar->priv->high_icon_name = g_strdup (name);
+ gtk_image_set_from_icon_name (GTK_IMAGE (bar->priv->high_image),
+ bar->priv->high_icon_name,
+ GTK_ICON_SIZE_BUTTON);
+ g_object_notify (G_OBJECT (bar), "high-icon-name");
+ }
+}
+
+void
+gvc_channel_bar_set_orientation (GvcChannelBar *bar,
+ GtkOrientation orientation)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (orientation != bar->priv->orientation) {
+ bar->priv->orientation = orientation;
+ update_layout (bar);
+ g_object_notify (G_OBJECT (bar), "orientation");
+ }
+}
+
+static void
+gvc_channel_bar_set_adjustment (GvcChannelBar *bar,
+ GtkAdjustment *adjustment)
+{
+ g_return_if_fail (GVC_CHANNEL_BAR (bar));
+ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+
+ if (bar->priv->adjustment != NULL) {
+ g_object_unref (bar->priv->adjustment);
+ }
+ bar->priv->adjustment = g_object_ref_sink (adjustment);
+
+ if (bar->priv->scale != NULL) {
+ gtk_range_set_adjustment (GTK_RANGE (bar->priv->scale), adjustment);
+ }
+
+ g_object_notify (G_OBJECT (bar), "adjustment");
+}
+
+GtkAdjustment *
+gvc_channel_bar_get_adjustment (GvcChannelBar *bar)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_BAR (bar), NULL);
+
+ return bar->priv->adjustment;
+}
+
+static gboolean
+on_scale_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcChannelBar *bar)
+{
+ /* HACK: we want the behaviour you get with the middle button, so we
+ * mangle the event. clicking with other buttons moves the slider in
+ * step increments, clicking with the middle button moves the slider to
+ * the location of the click.
+ */
+ if (event->button == 1)
+ event->button = 2;
+
+ bar->priv->click_lock = TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+on_scale_button_release_event (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcChannelBar *bar)
+{
+ GtkAdjustment *adj;
+ gdouble value;
+
+ /* HACK: see on_scale_button_press_event() */
+ if (event->button == 1)
+ event->button = 2;
+
+ bar->priv->click_lock = FALSE;
+
+ adj = gtk_range_get_adjustment (GTK_RANGE (widget));
+
+ value = gtk_adjustment_get_value (adj);
+
+ /* this means the adjustment moved away from zero and
+ * therefore we should unmute and set the volume. */
+ gvc_channel_bar_set_is_muted (bar, (value == 0.0));
+
+ /* Play a sound! */
+ ca_gtk_play_for_widget (GTK_WIDGET (bar), 0,
+ CA_PROP_EVENT_ID, "audio-volume-change",
+ CA_PROP_EVENT_DESCRIPTION, "foobar event happened",
+ CA_PROP_APPLICATION_ID, "org.mate.VolumeControl",
+ NULL);
+
+ return FALSE;
+}
+
+gboolean
+gvc_channel_bar_scroll (GvcChannelBar *bar, GdkScrollDirection direction)
+{
+ GtkAdjustment *adj;
+ gdouble value;
+
+ g_return_val_if_fail (bar != NULL, FALSE);
+ g_return_val_if_fail (GVC_IS_CHANNEL_BAR (bar), FALSE);
+
+ if (bar->priv->orientation == GTK_ORIENTATION_VERTICAL) {
+ if (direction != GDK_SCROLL_UP && direction != GDK_SCROLL_DOWN)
+ return FALSE;
+ } else {
+ /* Switch direction for RTL */
+ if (gtk_widget_get_direction (GTK_WIDGET (bar)) == GTK_TEXT_DIR_RTL) {
+ if (direction == GDK_SCROLL_RIGHT)
+ direction = GDK_SCROLL_LEFT;
+ else if (direction == GDK_SCROLL_LEFT)
+ direction = GDK_SCROLL_RIGHT;
+ }
+ /* Switch side scroll to vertical */
+ if (direction == GDK_SCROLL_RIGHT)
+ direction = GDK_SCROLL_UP;
+ else if (GDK_SCROLL_LEFT)
+ direction = GDK_SCROLL_DOWN;
+ }
+
+ adj = gtk_range_get_adjustment (GTK_RANGE (bar->priv->scale));
+ if (adj == bar->priv->zero_adjustment) {
+ if (direction == GDK_SCROLL_UP)
+ gvc_channel_bar_set_is_muted (bar, FALSE);
+ return TRUE;
+ }
+
+ value = gtk_adjustment_get_value (adj);
+
+ if (direction == GDK_SCROLL_UP) {
+ if (value + SCROLLSTEP > ADJUSTMENT_MAX)
+ value = ADJUSTMENT_MAX;
+ else
+ value = value + SCROLLSTEP;
+ } else if (direction == GDK_SCROLL_DOWN) {
+ if (value - SCROLLSTEP < 0)
+ value = 0.0;
+ else
+ value = value - SCROLLSTEP;
+ }
+
+ gvc_channel_bar_set_is_muted (bar, (value == 0.0));
+ adj = gtk_range_get_adjustment (GTK_RANGE (bar->priv->scale));
+ gtk_adjustment_set_value (adj, value);
+
+ return TRUE;
+}
+
+static gboolean
+on_scale_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event,
+ GvcChannelBar *bar)
+{
+ return gvc_channel_bar_scroll (bar, event->direction);
+}
+
+static void
+on_zero_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcChannelBar *bar)
+{
+ gdouble value;
+
+ if (bar->priv->click_lock != FALSE) {
+ return;
+ }
+
+ value = gtk_adjustment_get_value (bar->priv->zero_adjustment);
+ gtk_adjustment_set_value (bar->priv->adjustment, value);
+
+
+ if (bar->priv->show_mute == FALSE) {
+ /* this means the adjustment moved away from zero and
+ * therefore we should unmute and set the volume. */
+ gvc_channel_bar_set_is_muted (bar, value > 0.0);
+ }
+}
+
+static void
+update_mute_button (GvcChannelBar *bar)
+{
+ if (bar->priv->show_mute) {
+ gtk_widget_show (bar->priv->mute_button);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bar->priv->mute_button),
+ bar->priv->is_muted);
+ } else {
+ gtk_widget_hide (bar->priv->mute_button);
+
+ if (bar->priv->is_muted) {
+ /* If we aren't showing the mute button then
+ * move slider to the zero. But we don't want to
+ * change the adjustment. */
+ g_signal_handlers_block_by_func (bar->priv->zero_adjustment,
+ on_zero_adjustment_value_changed,
+ bar);
+ gtk_adjustment_set_value (bar->priv->zero_adjustment, 0);
+ g_signal_handlers_unblock_by_func (bar->priv->zero_adjustment,
+ on_zero_adjustment_value_changed,
+ bar);
+ gtk_range_set_adjustment (GTK_RANGE (bar->priv->scale),
+ bar->priv->zero_adjustment);
+ } else {
+ /* no longer muted so restore the original adjustment
+ * and tell the front-end that the value changed */
+ gtk_range_set_adjustment (GTK_RANGE (bar->priv->scale),
+ bar->priv->adjustment);
+ gtk_adjustment_value_changed (bar->priv->adjustment);
+ }
+ }
+}
+
+void
+gvc_channel_bar_set_is_muted (GvcChannelBar *bar,
+ gboolean is_muted)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (is_muted != bar->priv->is_muted) {
+ /* Update our internal state before telling the
+ * front-end about our changes */
+ bar->priv->is_muted = is_muted;
+ update_mute_button (bar);
+ g_object_notify (G_OBJECT (bar), "is-muted");
+ }
+}
+
+gboolean
+gvc_channel_bar_get_is_muted (GvcChannelBar *bar)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_BAR (bar), FALSE);
+ return bar->priv->is_muted;
+}
+
+void
+gvc_channel_bar_set_show_mute (GvcChannelBar *bar,
+ gboolean show_mute)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (show_mute != bar->priv->show_mute) {
+ bar->priv->show_mute = show_mute;
+ g_object_notify (G_OBJECT (bar), "show-mute");
+ update_mute_button (bar);
+ }
+}
+
+gboolean
+gvc_channel_bar_get_show_mute (GvcChannelBar *bar)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_BAR (bar), FALSE);
+ return bar->priv->show_mute;
+}
+
+void
+gvc_channel_bar_set_is_amplified (GvcChannelBar *bar, gboolean amplified)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ bar->priv->is_amplified = amplified;
+ gtk_adjustment_set_upper (bar->priv->adjustment, ADJUSTMENT_MAX);
+ gtk_adjustment_set_upper (bar->priv->zero_adjustment, ADJUSTMENT_MAX);
+ gtk_scale_clear_marks (GTK_SCALE (bar->priv->scale));
+
+ if (amplified) {
+ char *str;
+
+ if (bar->priv->base_volume == ADJUSTMENT_MAX_NORMAL) {
+ str = g_strdup_printf ("<small>%s</small>", C_("volume", "100%"));
+ gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), ADJUSTMENT_MAX_NORMAL,
+ GTK_POS_BOTTOM, str);
+ } else {
+ str = g_strdup_printf ("<small>%s</small>", C_("volume", "Unamplified"));
+ gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), bar->priv->base_volume,
+ GTK_POS_BOTTOM, str);
+ /* Only show 100% if it's higher than the base volume */
+ if (bar->priv->base_volume < ADJUSTMENT_MAX_NORMAL) {
+ str = g_strdup_printf ("<small>%s</small>", C_("volume", "100%"));
+ gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), ADJUSTMENT_MAX_NORMAL,
+ GTK_POS_BOTTOM, str);
+ }
+ }
+
+ g_free (str);
+ gtk_alignment_set (GTK_ALIGNMENT (bar->priv->mute_box), 0.5, 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->low_image), 0.5, 0);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->high_image), 0.5, 0);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->label), 0, 0);
+ } else {
+ gtk_alignment_set (GTK_ALIGNMENT (bar->priv->mute_box), 0.5, 0.5, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->low_image), 0.5, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->high_image), 0.5, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->label), 0, 0.5);
+ }
+}
+
+void
+gvc_channel_bar_set_base_volume (GvcChannelBar *bar,
+ pa_volume_t base_volume)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+ if (base_volume == 0) {
+ bar->priv->base_volume = ADJUSTMENT_MAX_NORMAL;
+ return;
+ }
+
+ /* Note that you need to call _is_amplified() afterwards to update the marks */
+ bar->priv->base_volume = base_volume;
+}
+
+static void
+gvc_channel_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcChannelBar *self = GVC_CHANNEL_BAR (object);
+
+ switch (prop_id) {
+ case PROP_ORIENTATION:
+ gvc_channel_bar_set_orientation (self, g_value_get_enum (value));
+ break;
+ case PROP_IS_MUTED:
+ gvc_channel_bar_set_is_muted (self, g_value_get_boolean (value));
+ break;
+ case PROP_SHOW_MUTE:
+ gvc_channel_bar_set_show_mute (self, g_value_get_boolean (value));
+ break;
+ case PROP_NAME:
+ gvc_channel_bar_set_name (self, g_value_get_string (value));
+ break;
+ case PROP_ICON_NAME:
+ gvc_channel_bar_set_icon_name (self, g_value_get_string (value));
+ break;
+ case PROP_LOW_ICON_NAME:
+ gvc_channel_bar_set_low_icon_name (self, g_value_get_string (value));
+ break;
+ case PROP_HIGH_ICON_NAME:
+ gvc_channel_bar_set_high_icon_name (self, g_value_get_string (value));
+ break;
+ case PROP_ADJUSTMENT:
+ gvc_channel_bar_set_adjustment (self, g_value_get_object (value));
+ break;
+ case PROP_IS_AMPLIFIED:
+ gvc_channel_bar_set_is_amplified (self, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_channel_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcChannelBar *self = GVC_CHANNEL_BAR (object);
+ GvcChannelBarPrivate *priv = self->priv;
+
+ switch (prop_id) {
+ case PROP_ORIENTATION:
+ g_value_set_enum (value, priv->orientation);
+ break;
+ case PROP_IS_MUTED:
+ g_value_set_boolean (value, priv->is_muted);
+ break;
+ case PROP_SHOW_MUTE:
+ g_value_set_boolean (value, priv->show_mute);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, priv->name);
+ break;
+ case PROP_ICON_NAME:
+ g_value_set_string (value, priv->icon_name);
+ break;
+ case PROP_LOW_ICON_NAME:
+ g_value_set_string (value, priv->low_icon_name);
+ break;
+ case PROP_HIGH_ICON_NAME:
+ g_value_set_string (value, priv->high_icon_name);
+ break;
+ case PROP_ADJUSTMENT:
+ g_value_set_object (value, gvc_channel_bar_get_adjustment (self));
+ break;
+ case PROP_IS_AMPLIFIED:
+ g_value_set_boolean (value, priv->is_amplified);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+gvc_channel_bar_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcChannelBar *self;
+
+ object = G_OBJECT_CLASS (gvc_channel_bar_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_CHANNEL_BAR (object);
+
+ update_mute_button (self);
+
+ return object;
+}
+
+static void
+gvc_channel_bar_class_init (GvcChannelBarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = gvc_channel_bar_constructor;
+ object_class->finalize = gvc_channel_bar_finalize;
+ object_class->set_property = gvc_channel_bar_set_property;
+ object_class->get_property = gvc_channel_bar_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ORIENTATION,
+ g_param_spec_enum ("orientation",
+ "Orientation",
+ "The orientation of the scale",
+ GTK_TYPE_ORIENTATION,
+ GTK_ORIENTATION_VERTICAL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_IS_MUTED,
+ g_param_spec_boolean ("is-muted",
+ "is muted",
+ "Whether stream is muted",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_SHOW_MUTE,
+ g_param_spec_boolean ("show-mute",
+ "show mute",
+ "Whether stream is muted",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class,
+ PROP_ADJUSTMENT,
+ g_param_spec_object ("adjustment",
+ "Adjustment",
+ "The GtkAdjustment that contains the current value of this scale button object",
+ GTK_TYPE_ADJUSTMENT,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "Name to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_ICON_NAME,
+ g_param_spec_string ("icon-name",
+ "Icon Name",
+ "Name of icon to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_LOW_ICON_NAME,
+ g_param_spec_string ("low-icon-name",
+ "Icon Name",
+ "Name of icon to display for this stream",
+ "audio-volume-low",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_HIGH_ICON_NAME,
+ g_param_spec_string ("high-icon-name",
+ "Icon Name",
+ "Name of icon to display for this stream",
+ "audio-volume-high",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_IS_AMPLIFIED,
+ g_param_spec_boolean ("is-amplified",
+ "is amplified",
+ "Whether the stream is digitally amplified",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GvcChannelBarPrivate));
+}
+
+static void
+on_mute_button_toggled (GtkToggleButton *button,
+ GvcChannelBar *bar)
+{
+ gboolean is_muted;
+ is_muted = gtk_toggle_button_get_active (button);
+ gvc_channel_bar_set_is_muted (bar, is_muted);
+}
+
+static void
+gvc_channel_bar_init (GvcChannelBar *bar)
+{
+ GtkWidget *frame;
+
+ bar->priv = GVC_CHANNEL_BAR_GET_PRIVATE (bar);
+
+ bar->priv->base_volume = ADJUSTMENT_MAX_NORMAL;
+ bar->priv->low_icon_name = g_strdup ("audio-volume-low");
+ bar->priv->high_icon_name = g_strdup ("audio-volume-high");
+
+ bar->priv->orientation = GTK_ORIENTATION_VERTICAL;
+ bar->priv->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
+ 0.0,
+ ADJUSTMENT_MAX_NORMAL,
+ ADJUSTMENT_MAX_NORMAL/100.0,
+ ADJUSTMENT_MAX_NORMAL/10.0,
+ 0.0));
+ g_object_ref_sink (bar->priv->adjustment);
+
+ bar->priv->zero_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
+ 0.0,
+ ADJUSTMENT_MAX_NORMAL,
+ ADJUSTMENT_MAX_NORMAL/100.0,
+ ADJUSTMENT_MAX_NORMAL/10.0,
+ 0.0));
+ g_object_ref_sink (bar->priv->zero_adjustment);
+
+ g_signal_connect (bar->priv->zero_adjustment,
+ "value-changed",
+ G_CALLBACK (on_zero_adjustment_value_changed),
+ bar);
+
+ bar->priv->mute_button = gtk_check_button_new_with_label (_("Mute"));
+ gtk_widget_set_no_show_all (bar->priv->mute_button, TRUE);
+ g_signal_connect (bar->priv->mute_button,
+ "toggled",
+ G_CALLBACK (on_mute_button_toggled),
+ bar);
+ bar->priv->mute_box = gtk_alignment_new (0.5, 0.5, 0, 0);
+ gtk_container_add (GTK_CONTAINER (bar->priv->mute_box), bar->priv->mute_button);
+
+ bar->priv->low_image = gtk_image_new_from_icon_name ("audio-volume-low",
+ GTK_ICON_SIZE_BUTTON);
+ gtk_widget_set_no_show_all (bar->priv->low_image, TRUE);
+ bar->priv->high_image = gtk_image_new_from_icon_name ("audio-volume-high",
+ GTK_ICON_SIZE_BUTTON);
+ gtk_widget_set_no_show_all (bar->priv->high_image, TRUE);
+
+ bar->priv->image = gtk_image_new ();
+ gtk_widget_set_no_show_all (bar->priv->image, TRUE);
+
+ bar->priv->label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (bar->priv->label), 0.0, 0.5);
+ gtk_widget_set_no_show_all (bar->priv->label, TRUE);
+
+ /* frame */
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+ gtk_container_add (GTK_CONTAINER (bar), frame);
+ gtk_widget_show_all (frame);
+
+ /* box with scale */
+ bar->priv->scale_box = _scale_box_new (bar);
+
+ gtk_container_add (GTK_CONTAINER (frame), bar->priv->scale_box);
+}
+
+static void
+gvc_channel_bar_finalize (GObject *object)
+{
+ GvcChannelBar *channel_bar;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_CHANNEL_BAR (object));
+
+ channel_bar = GVC_CHANNEL_BAR (object);
+
+ g_return_if_fail (channel_bar->priv != NULL);
+
+ g_free (channel_bar->priv->name);
+ g_free (channel_bar->priv->icon_name);
+ g_free (channel_bar->priv->low_icon_name);
+ g_free (channel_bar->priv->high_icon_name);
+
+ G_OBJECT_CLASS (gvc_channel_bar_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gvc_channel_bar_new (void)
+{
+ GObject *bar;
+ bar = g_object_new (GVC_TYPE_CHANNEL_BAR,
+ NULL);
+ return GTK_WIDGET (bar);
+}
diff --git a/mate-volume-control/src/gvc-channel-bar.h b/mate-volume-control/src/gvc-channel-bar.h
new file mode 100644
index 0000000..d405038
--- /dev/null
+++ b/mate-volume-control/src/gvc-channel-bar.h
@@ -0,0 +1,86 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_CHANNEL_BAR_H
+#define __GVC_CHANNEL_BAR_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_CHANNEL_BAR (gvc_channel_bar_get_type ())
+#define GVC_CHANNEL_BAR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_CHANNEL_BAR, GvcChannelBar))
+#define GVC_CHANNEL_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_CHANNEL_BAR, GvcChannelBarClass))
+#define GVC_IS_CHANNEL_BAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_CHANNEL_BAR))
+#define GVC_IS_CHANNEL_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_CHANNEL_BAR))
+#define GVC_CHANNEL_BAR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_CHANNEL_BAR, GvcChannelBarClass))
+
+typedef struct GvcChannelBarPrivate GvcChannelBarPrivate;
+
+typedef struct
+{
+ GtkHBox parent;
+ GvcChannelBarPrivate *priv;
+} GvcChannelBar;
+
+typedef struct
+{
+ GtkHBoxClass parent_class;
+} GvcChannelBarClass;
+
+GType gvc_channel_bar_get_type (void);
+
+GtkWidget * gvc_channel_bar_new (void);
+
+void gvc_channel_bar_set_name (GvcChannelBar *bar,
+ const char *name);
+void gvc_channel_bar_set_icon_name (GvcChannelBar *bar,
+ const char *icon_name);
+void gvc_channel_bar_set_low_icon_name (GvcChannelBar *bar,
+ const char *icon_name);
+void gvc_channel_bar_set_high_icon_name (GvcChannelBar *bar,
+ const char *icon_name);
+
+void gvc_channel_bar_set_orientation (GvcChannelBar *bar,
+ GtkOrientation orientation);
+GtkOrientation gvc_channel_bar_get_orientation (GvcChannelBar *bar);
+
+GtkAdjustment * gvc_channel_bar_get_adjustment (GvcChannelBar *bar);
+
+gboolean gvc_channel_bar_get_is_muted (GvcChannelBar *bar);
+void gvc_channel_bar_set_is_muted (GvcChannelBar *bar,
+ gboolean is_muted);
+gboolean gvc_channel_bar_get_show_mute (GvcChannelBar *bar);
+void gvc_channel_bar_set_show_mute (GvcChannelBar *bar,
+ gboolean show_mute);
+void gvc_channel_bar_set_size_group (GvcChannelBar *bar,
+ GtkSizeGroup *group,
+ gboolean symmetric);
+void gvc_channel_bar_set_is_amplified (GvcChannelBar *bar,
+ gboolean amplified);
+void gvc_channel_bar_set_base_volume (GvcChannelBar *bar,
+ guint32 base_volume);
+
+gboolean gvc_channel_bar_scroll (GvcChannelBar *bar,
+ GdkScrollDirection direction);
+
+G_END_DECLS
+
+#endif /* __GVC_CHANNEL_BAR_H */
diff --git a/mate-volume-control/src/gvc-channel-map.c b/mate-volume-control/src/gvc-channel-map.c
new file mode 100644
index 0000000..a7a412c
--- /dev/null
+++ b/mate-volume-control/src/gvc-channel-map.c
@@ -0,0 +1,245 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-channel-map.h"
+
+#define GVC_CHANNEL_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapPrivate))
+
+struct GvcChannelMapPrivate
+{
+ pa_channel_map pa_map;
+ gboolean pa_volume_is_set;
+ pa_cvolume pa_volume;
+ gdouble extern_volume[NUM_TYPES]; /* volume, balance, fade, lfe */
+ gboolean can_balance;
+ gboolean can_fade;
+};
+
+enum {
+ VOLUME_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0, };
+
+static void gvc_channel_map_class_init (GvcChannelMapClass *klass);
+static void gvc_channel_map_init (GvcChannelMap *channel_map);
+static void gvc_channel_map_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcChannelMap, gvc_channel_map, G_TYPE_OBJECT)
+
+guint
+gvc_channel_map_get_num_channels (const GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0);
+
+ if (!pa_channel_map_valid(&map->priv->pa_map))
+ return 0;
+
+ return map->priv->pa_map.channels;
+}
+
+const gdouble *
+gvc_channel_map_get_volume (GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
+
+ if (!pa_channel_map_valid(&map->priv->pa_map))
+ return NULL;
+
+ map->priv->extern_volume[VOLUME] = (gdouble) pa_cvolume_max (&map->priv->pa_volume);
+ if (gvc_channel_map_can_balance (map))
+ map->priv->extern_volume[BALANCE] = (gdouble) pa_cvolume_get_balance (&map->priv->pa_volume, &map->priv->pa_map);
+ else
+ map->priv->extern_volume[BALANCE] = 0;
+ if (gvc_channel_map_can_fade (map))
+ map->priv->extern_volume[FADE] = (gdouble) pa_cvolume_get_fade (&map->priv->pa_volume, &map->priv->pa_map);
+ else
+ map->priv->extern_volume[FADE] = 0;
+ if (gvc_channel_map_has_lfe (map))
+ map->priv->extern_volume[LFE] = (gdouble) pa_cvolume_get_position (&map->priv->pa_volume, &map->priv->pa_map, PA_CHANNEL_POSITION_LFE);
+ else
+ map->priv->extern_volume[LFE] = 0;
+
+ return map->priv->extern_volume;
+}
+
+gboolean
+gvc_channel_map_can_balance (const GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
+
+ return map->priv->can_balance;
+}
+
+gboolean
+gvc_channel_map_can_fade (const GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
+
+ return map->priv->can_fade;
+}
+
+const char *
+gvc_channel_map_get_mapping (const GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
+
+ if (!pa_channel_map_valid(&map->priv->pa_map))
+ return NULL;
+
+ return pa_channel_map_to_pretty_name (&map->priv->pa_map);
+}
+
+gboolean
+gvc_channel_map_has_position (const GvcChannelMap *map,
+ pa_channel_position_t position)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
+
+ return pa_channel_map_has_position (&(map->priv->pa_map), position);
+}
+
+const pa_channel_map *
+gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
+
+ if (!pa_channel_map_valid(&map->priv->pa_map))
+ return NULL;
+
+ return &map->priv->pa_map;
+}
+
+const pa_cvolume *
+gvc_channel_map_get_cvolume (const GvcChannelMap *map)
+{
+ g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
+
+ if (!pa_channel_map_valid(&map->priv->pa_map))
+ return NULL;
+
+ return &map->priv->pa_volume;
+}
+
+static void
+gvc_channel_map_class_init (GvcChannelMapClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = gvc_channel_map_finalize;
+
+ signals [VOLUME_CHANGED] =
+ g_signal_new ("volume-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcChannelMapClass, volume_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ g_type_class_add_private (klass, sizeof (GvcChannelMapPrivate));
+}
+
+void
+gvc_channel_map_volume_changed (GvcChannelMap *map,
+ const pa_cvolume *cv,
+ gboolean set)
+{
+ g_return_if_fail (GVC_IS_CHANNEL_MAP (map));
+ g_return_if_fail (cv != NULL);
+ g_return_if_fail (pa_cvolume_compatible_with_channel_map(cv, &map->priv->pa_map));
+
+ if (pa_cvolume_equal(cv, &map->priv->pa_volume))
+ return;
+
+ map->priv->pa_volume = *cv;
+
+ if (map->priv->pa_volume_is_set == FALSE) {
+ map->priv->pa_volume_is_set = TRUE;
+ return;
+ }
+ g_signal_emit (map, signals[VOLUME_CHANGED], 0, set);
+}
+
+static void
+gvc_channel_map_init (GvcChannelMap *map)
+{
+ map->priv = GVC_CHANNEL_MAP_GET_PRIVATE (map);
+ map->priv->pa_volume_is_set = FALSE;
+}
+
+static void
+gvc_channel_map_finalize (GObject *object)
+{
+ GvcChannelMap *channel_map;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_CHANNEL_MAP (object));
+
+ channel_map = GVC_CHANNEL_MAP (object);
+
+ g_return_if_fail (channel_map->priv != NULL);
+
+ G_OBJECT_CLASS (gvc_channel_map_parent_class)->finalize (object);
+}
+
+GvcChannelMap *
+gvc_channel_map_new (void)
+{
+ GObject *map;
+ map = g_object_new (GVC_TYPE_CHANNEL_MAP, NULL);
+ return GVC_CHANNEL_MAP (map);
+}
+
+static void
+set_from_pa_map (GvcChannelMap *map,
+ const pa_channel_map *pa_map)
+{
+ g_assert (pa_channel_map_valid(pa_map));
+
+ map->priv->can_balance = pa_channel_map_can_balance (pa_map);
+ map->priv->can_fade = pa_channel_map_can_fade (pa_map);
+
+ map->priv->pa_map = *pa_map;
+ pa_cvolume_set(&map->priv->pa_volume, pa_map->channels, PA_VOLUME_NORM);
+}
+
+GvcChannelMap *
+gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *pa_map)
+{
+ GObject *map;
+ map = g_object_new (GVC_TYPE_CHANNEL_MAP, NULL);
+
+ set_from_pa_map (GVC_CHANNEL_MAP (map), pa_map);
+
+ return GVC_CHANNEL_MAP (map);
+}
diff --git a/mate-volume-control/src/gvc-channel-map.h b/mate-volume-control/src/gvc-channel-map.h
new file mode 100644
index 0000000..a149ee3
--- /dev/null
+++ b/mate-volume-control/src/gvc-channel-map.h
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_CHANNEL_MAP_H
+#define __GVC_CHANNEL_MAP_H
+
+#include <glib-object.h>
+#include <pulse/pulseaudio.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_CHANNEL_MAP (gvc_channel_map_get_type ())
+#define GVC_CHANNEL_MAP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMap))
+#define GVC_CHANNEL_MAP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_CHANNEL_MAP, GvcChannelMapClass))
+#define GVC_IS_CHANNEL_MAP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_CHANNEL_MAP))
+#define GVC_IS_CHANNEL_MAP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_CHANNEL_MAP))
+#define GVC_CHANNEL_MAP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapClass))
+
+typedef struct GvcChannelMapPrivate GvcChannelMapPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GvcChannelMapPrivate *priv;
+} GvcChannelMap;
+
+typedef struct
+{
+ GObjectClass parent_class;
+ void (*volume_changed) (GvcChannelMap *channel_map, gboolean set);
+} GvcChannelMapClass;
+
+enum {
+ VOLUME,
+ BALANCE,
+ FADE,
+ LFE,
+};
+
+#define NUM_TYPES LFE + 1
+
+GType gvc_channel_map_get_type (void);
+
+GvcChannelMap * gvc_channel_map_new (void);
+GvcChannelMap * gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *map);
+guint gvc_channel_map_get_num_channels (const GvcChannelMap *map);
+const gdouble * gvc_channel_map_get_volume (GvcChannelMap *map);
+gboolean gvc_channel_map_can_balance (const GvcChannelMap *map);
+gboolean gvc_channel_map_can_fade (const GvcChannelMap *map);
+gboolean gvc_channel_map_has_position (const GvcChannelMap *map,
+ pa_channel_position_t position);
+#define gvc_channel_map_has_lfe(x) gvc_channel_map_has_position (x, PA_CHANNEL_POSITION_LFE)
+
+void gvc_channel_map_volume_changed (GvcChannelMap *map,
+ const pa_cvolume *cv,
+ gboolean set);
+const char * gvc_channel_map_get_mapping (const GvcChannelMap *map);
+
+/* private */
+const pa_cvolume * gvc_channel_map_get_cvolume (const GvcChannelMap *map);
+const pa_channel_map * gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map);
+G_END_DECLS
+
+#endif /* __GVC_CHANNEL_MAP_H */
diff --git a/mate-volume-control/src/gvc-combo-box.c b/mate-volume-control/src/gvc-combo-box.c
new file mode 100644
index 0000000..5e0d82c
--- /dev/null
+++ b/mate-volume-control/src/gvc-combo-box.c
@@ -0,0 +1,394 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Bastien Nocera
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <canberra-gtk.h>
+
+#include "gvc-combo-box.h"
+#include "gvc-mixer-stream.h"
+#include "gvc-mixer-card.h"
+
+#define GVC_COMBO_BOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_COMBO_BOX, GvcComboBoxPrivate))
+
+struct GvcComboBoxPrivate
+{
+ GtkWidget *drop_box;
+ GtkWidget *start_box;
+ GtkWidget *end_box;
+ GtkWidget *label;
+ GtkWidget *button;
+ GtkTreeModel *model;
+ GtkWidget *combobox;
+ gboolean set_called;
+ GtkSizeGroup *size_group;
+ gboolean symmetric;
+};
+
+enum {
+ COL_NAME,
+ COL_HUMAN_NAME,
+ NUM_COLS
+};
+
+enum {
+ CHANGED,
+ BUTTON_CLICKED,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_LABEL,
+ PROP_SHOW_BUTTON,
+ PROP_BUTTON_LABEL
+};
+
+static guint signals [LAST_SIGNAL] = { 0, };
+
+static void gvc_combo_box_class_init (GvcComboBoxClass *klass);
+static void gvc_combo_box_init (GvcComboBox *combo_box);
+static void gvc_combo_box_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcComboBox, gvc_combo_box, GTK_TYPE_HBOX)
+
+void
+gvc_combo_box_set_size_group (GvcComboBox *combo_box,
+ GtkSizeGroup *group,
+ gboolean symmetric)
+{
+ g_return_if_fail (GVC_IS_COMBO_BOX (combo_box));
+
+ combo_box->priv->size_group = group;
+ combo_box->priv->symmetric = symmetric;
+
+ if (combo_box->priv->size_group != NULL) {
+ gtk_size_group_add_widget (combo_box->priv->size_group,
+ combo_box->priv->start_box);
+
+ if (combo_box->priv->symmetric) {
+ gtk_size_group_add_widget (combo_box->priv->size_group,
+ combo_box->priv->end_box);
+ }
+ }
+ gtk_widget_queue_draw (GTK_WIDGET (combo_box));
+}
+
+static void
+gvc_combo_box_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcComboBox *self = GVC_COMBO_BOX (object);
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (self->priv->label), g_value_get_string (value));
+ break;
+ case PROP_BUTTON_LABEL:
+ gtk_button_set_label (GTK_BUTTON (self->priv->button), g_value_get_string (value));
+ break;
+ case PROP_SHOW_BUTTON:
+ gtk_widget_set_visible (self->priv->button, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_combo_box_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcComboBox *self = GVC_COMBO_BOX (object);
+
+ switch (prop_id) {
+ case PROP_LABEL:
+ g_value_set_string (value,
+ gtk_label_get_text (GTK_LABEL (self->priv->label)));
+ break;
+ case PROP_BUTTON_LABEL:
+ g_value_set_string (value,
+ gtk_button_get_label (GTK_BUTTON (self->priv->button)));
+ break;
+ case PROP_SHOW_BUTTON:
+ g_value_set_boolean (value,
+ gtk_widget_get_visible (self->priv->button));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_combo_box_class_init (GvcComboBoxClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = gvc_combo_box_finalize;
+ object_class->set_property = gvc_combo_box_set_property;
+ object_class->get_property = gvc_combo_box_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_LABEL,
+ g_param_spec_string ("label",
+ "label",
+ "The combo box label",
+ _("_Profile:"),
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_SHOW_BUTTON,
+ g_param_spec_boolean ("show-button",
+ "show-button",
+ "Whether to show the button",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_BUTTON_LABEL,
+ g_param_spec_string ("button-label",
+ "button-label",
+ "The button's label",
+ "APPLICATION BUG",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ signals [CHANGED] =
+ g_signal_new ("changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcComboBoxClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+ signals [BUTTON_CLICKED] =
+ g_signal_new ("button-clicked",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcComboBoxClass, button_clicked),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+
+ g_type_class_add_private (klass, sizeof (GvcComboBoxPrivate));
+}
+
+void
+gvc_combo_box_set_profiles (GvcComboBox *combo_box,
+ const GList *profiles)
+{
+ const GList *l;
+
+ g_return_if_fail (GVC_IS_COMBO_BOX (combo_box));
+ g_return_if_fail (combo_box->priv->set_called == FALSE);
+
+ for (l = profiles; l != NULL; l = l->next) {
+ GvcMixerCardProfile *p = l->data;
+
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (combo_box->priv->model),
+ NULL,
+ G_MAXINT,
+ COL_NAME, p->profile,
+ COL_HUMAN_NAME, p->human_profile,
+ -1);
+ }
+ combo_box->priv->set_called = TRUE;
+}
+
+void
+gvc_combo_box_set_ports (GvcComboBox *combo_box,
+ const GList *ports)
+{
+ const GList *l;
+
+ g_return_if_fail (GVC_IS_COMBO_BOX (combo_box));
+ g_return_if_fail (combo_box->priv->set_called == FALSE);
+
+ for (l = ports; l != NULL; l = l->next) {
+ GvcMixerStreamPort *p = l->data;
+
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (combo_box->priv->model),
+ NULL,
+ G_MAXINT,
+ COL_NAME, p->port,
+ COL_HUMAN_NAME, p->human_port,
+ -1);
+ }
+ combo_box->priv->set_called = TRUE;
+}
+
+void
+gvc_combo_box_set_active (GvcComboBox *combo_box,
+ const char *id)
+{
+ GtkTreeIter iter;
+ gboolean cont;
+
+ cont = gtk_tree_model_get_iter_first (combo_box->priv->model, &iter);
+ while (cont != FALSE) {
+ char *name;
+
+ gtk_tree_model_get (combo_box->priv->model, &iter,
+ COL_NAME, &name,
+ -1);
+ if (g_strcmp0 (name, id) == 0) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box->priv->combobox), &iter);
+ return;
+ }
+ gtk_tree_model_iter_next (combo_box->priv->model, &iter);
+ }
+ g_warning ("Could not find id '%s' in combo box", id);
+}
+
+static void
+on_combo_box_changed (GtkComboBox *widget,
+ GvcComboBox *combo_box)
+{
+ GtkTreeIter iter;
+ char *profile;
+
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter) == FALSE) {
+ g_warning ("Could not find an active profile or port");
+ return;
+ }
+
+ gtk_tree_model_get (combo_box->priv->model, &iter,
+ COL_NAME, &profile,
+ -1);
+ g_signal_emit (combo_box, signals[CHANGED], 0, profile);
+ g_free (profile);
+}
+
+static void
+on_combo_box_button_clicked (GtkButton *button,
+ GvcComboBox *combo_box)
+{
+ g_signal_emit (combo_box, signals[BUTTON_CLICKED], 0);
+}
+
+static void
+gvc_combo_box_init (GvcComboBox *combo_box)
+{
+ GtkWidget *frame;
+ GtkWidget *box;
+ GtkWidget *sbox;
+ GtkWidget *ebox;
+ GtkCellRenderer *renderer;
+
+
+ combo_box->priv = GVC_COMBO_BOX_GET_PRIVATE (combo_box);
+
+ combo_box->priv->model = GTK_TREE_MODEL (gtk_list_store_new (NUM_COLS,
+ G_TYPE_STRING,
+ G_TYPE_STRING));
+
+ combo_box->priv->label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (combo_box->priv->label),
+ 0.0,
+ 0.5);
+
+ /* frame */
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+ gtk_container_add (GTK_CONTAINER (combo_box), frame);
+
+ combo_box->priv->drop_box = box = gtk_hbox_new (FALSE, 6);
+ combo_box->priv->combobox = gtk_combo_box_new_with_model (combo_box->priv->model);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box->priv->combobox),
+ renderer, FALSE);
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box->priv->combobox),
+ renderer,
+ "text", COL_HUMAN_NAME);
+
+/* gtk_widget_set_size_request (combo_box->priv->combobox, 128, -1); */
+
+ combo_box->priv->start_box = sbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), sbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (sbox), combo_box->priv->label, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (box), combo_box->priv->combobox, TRUE, TRUE, 0);
+
+ combo_box->priv->button = gtk_button_new_with_label ("APPLICATION BUG");
+ gtk_widget_set_no_show_all (combo_box->priv->button, TRUE);
+ gtk_box_pack_start (GTK_BOX (box), combo_box->priv->button, FALSE, FALSE, 0);
+
+
+ combo_box->priv->end_box = ebox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box), ebox, FALSE, FALSE, 0);
+
+ if (combo_box->priv->size_group != NULL) {
+ gtk_size_group_add_widget (combo_box->priv->size_group, sbox);
+
+ if (combo_box->priv->symmetric) {
+ gtk_size_group_add_widget (combo_box->priv->size_group, ebox);
+ }
+ }
+
+ gtk_container_add (GTK_CONTAINER (frame), combo_box->priv->drop_box);
+ gtk_widget_show_all (frame);
+
+ gtk_label_set_mnemonic_widget (GTK_LABEL (combo_box->priv->label),
+ combo_box->priv->combobox);
+
+ g_signal_connect (G_OBJECT (combo_box->priv->combobox), "changed",
+ G_CALLBACK (on_combo_box_changed), combo_box);
+ g_signal_connect (G_OBJECT (combo_box->priv->button), "clicked",
+ G_CALLBACK (on_combo_box_button_clicked), combo_box);
+}
+
+static void
+gvc_combo_box_finalize (GObject *object)
+{
+ GvcComboBox *combo_box;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_COMBO_BOX (object));
+
+ combo_box = GVC_COMBO_BOX (object);
+
+ g_return_if_fail (combo_box->priv != NULL);
+
+ g_object_unref (combo_box->priv->model);
+ combo_box->priv->model = NULL;
+
+ G_OBJECT_CLASS (gvc_combo_box_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gvc_combo_box_new (const char *label)
+{
+ GObject *combo_box;
+ combo_box = g_object_new (GVC_TYPE_COMBO_BOX,
+ "label", label,
+ NULL);
+ return GTK_WIDGET (combo_box);
+}
+
diff --git a/mate-volume-control/src/gvc-combo-box.h b/mate-volume-control/src/gvc-combo-box.h
new file mode 100644
index 0000000..f1ffc0d
--- /dev/null
+++ b/mate-volume-control/src/gvc-combo-box.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_COMBO_BOX_H
+#define __GVC_COMBO_BOX_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_COMBO_BOX (gvc_combo_box_get_type ())
+#define GVC_COMBO_BOX(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_COMBO_BOX, GvcComboBox))
+#define GVC_COMBO_BOX_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_COMBO_BOX, GvcComboBoxClass))
+#define GVC_IS_COMBO_BOX(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_COMBO_BOX))
+#define GVC_IS_COMBO_BOX_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_COMBO_BOX))
+#define GVC_COMBO_BOX_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_COMBO_BOX, GvcComboBoxClass))
+
+typedef struct GvcComboBoxPrivate GvcComboBoxPrivate;
+
+typedef struct
+{
+ GtkHBox parent;
+ GvcComboBoxPrivate *priv;
+} GvcComboBox;
+
+typedef struct
+{
+ GtkHBoxClass parent_class;
+ void (* changed) (GvcComboBox *combobox, const char *name);
+ void (* button_clicked) (GvcComboBox *combobox);
+} GvcComboBoxClass;
+
+GType gvc_combo_box_get_type (void);
+
+GtkWidget * gvc_combo_box_new (const char *label);
+
+void gvc_combo_box_set_size_group (GvcComboBox *combo_box,
+ GtkSizeGroup *group,
+ gboolean symmetric);
+
+void gvc_combo_box_set_profiles (GvcComboBox *combo_box,
+ const GList *profiles);
+void gvc_combo_box_set_ports (GvcComboBox *combo_box,
+ const GList *ports);
+void gvc_combo_box_set_active (GvcComboBox *combo_box,
+ const char *id);
+
+G_END_DECLS
+
+#endif /* __GVC_COMBO_BOX_H */
diff --git a/mate-volume-control/src/gvc-level-bar.c b/mate-volume-control/src/gvc-level-bar.c
new file mode 100644
index 0000000..12e2f1f
--- /dev/null
+++ b/mate-volume-control/src/gvc-level-bar.c
@@ -0,0 +1,753 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "gvc-level-bar.h"
+
+#define NUM_BOXES 15
+
+#define GVC_LEVEL_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_LEVEL_BAR, GvcLevelBarPrivate))
+
+#define MIN_HORIZONTAL_BAR_WIDTH 150
+#define HORIZONTAL_BAR_HEIGHT 6
+#define VERTICAL_BAR_WIDTH 6
+#define MIN_VERTICAL_BAR_HEIGHT 400
+
+typedef struct {
+ int peak_num;
+ int max_peak_num;
+
+ GdkRectangle area;
+ int delta;
+ int box_width;
+ int box_height;
+ int box_radius;
+ double bg_r;
+ double bg_g;
+ double bg_b;
+ double bdr_r;
+ double bdr_g;
+ double bdr_b;
+ double fl_r;
+ double fl_g;
+ double fl_b;
+} LevelBarLayout;
+
+struct GvcLevelBarPrivate
+{
+ GtkOrientation orientation;
+ GtkAdjustment *peak_adjustment;
+ GtkAdjustment *rms_adjustment;
+ int scale;
+ gdouble peak_fraction;
+ gdouble rms_fraction;
+ gdouble max_peak;
+ guint max_peak_id;
+ LevelBarLayout layout;
+};
+
+enum
+{
+ PROP_0,
+ PROP_PEAK_ADJUSTMENT,
+ PROP_RMS_ADJUSTMENT,
+ PROP_SCALE,
+ PROP_ORIENTATION,
+};
+
+static void gvc_level_bar_class_init (GvcLevelBarClass *klass);
+static void gvc_level_bar_init (GvcLevelBar *level_bar);
+static void gvc_level_bar_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcLevelBar, gvc_level_bar, GTK_TYPE_HBOX)
+
+#define check_rectangle(rectangle1, rectangle2) \
+ { \
+ if (rectangle1.x != rectangle2.x) return TRUE; \
+ if (rectangle1.y != rectangle2.y) return TRUE; \
+ if (rectangle1.width != rectangle2.width) return TRUE; \
+ if (rectangle1.height != rectangle2.height) return TRUE; \
+ }
+
+static gboolean
+layout_changed (LevelBarLayout *layout1,
+ LevelBarLayout *layout2)
+{
+ check_rectangle (layout1->area, layout2->area);
+ if (layout1->delta != layout2->delta) return TRUE;
+ if (layout1->peak_num != layout2->peak_num) return TRUE;
+ if (layout1->max_peak_num != layout2->max_peak_num) return TRUE;
+ if (layout1->bg_r != layout2->bg_r
+ || layout1->bg_g != layout2->bg_g
+ || layout1->bg_b != layout2->bg_b)
+ return TRUE;
+ if (layout1->bdr_r != layout2->bdr_r
+ || layout1->bdr_g != layout2->bdr_g
+ || layout1->bdr_b != layout2->bdr_b)
+ return TRUE;
+ if (layout1->fl_r != layout2->fl_r
+ || layout1->fl_g != layout2->fl_g
+ || layout1->fl_b != layout2->fl_b)
+ return TRUE;
+
+ return FALSE;
+}
+
+static gdouble
+fraction_from_adjustment (GvcLevelBar *bar,
+ GtkAdjustment *adjustment)
+{
+ gdouble level;
+ gdouble fraction;
+ gdouble min;
+ gdouble max;
+
+ level = gtk_adjustment_get_value (adjustment);
+
+ min = gtk_adjustment_get_lower (adjustment);
+ max = gtk_adjustment_get_upper (adjustment);
+
+ switch (bar->priv->scale) {
+ case GVC_LEVEL_SCALE_LINEAR:
+ fraction = (level - min) / (max - min);
+ break;
+ case GVC_LEVEL_SCALE_LOG:
+ fraction = log10 ((level - min + 1) / (max - min + 1));
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ return fraction;
+}
+
+static gboolean
+reset_max_peak (GvcLevelBar *bar)
+{
+ gdouble min;
+
+ min = gtk_adjustment_get_lower (bar->priv->peak_adjustment);
+ bar->priv->max_peak = min;
+ bar->priv->layout.max_peak_num = 0;
+ gtk_widget_queue_draw (GTK_WIDGET (bar));
+ bar->priv->max_peak_id = 0;
+ return FALSE;
+}
+
+static void
+bar_calc_layout (GvcLevelBar *bar)
+{
+ GdkColor color;
+ int peak_level;
+ int max_peak_level;
+ GtkAllocation allocation;
+ GtkStyle *style;
+
+ gtk_widget_get_allocation (GTK_WIDGET (bar), &allocation);
+ bar->priv->layout.area.width = allocation.width - 2;
+ bar->priv->layout.area.height = allocation.height - 2;
+
+ style = gtk_widget_get_style (GTK_WIDGET (bar));
+ color = style->bg [GTK_STATE_NORMAL];
+ bar->priv->layout.bg_r = (float)color.red / 65535.0;
+ bar->priv->layout.bg_g = (float)color.green / 65535.0;
+ bar->priv->layout.bg_b = (float)color.blue / 65535.0;
+ color = style->dark [GTK_STATE_NORMAL];
+ bar->priv->layout.bdr_r = (float)color.red / 65535.0;
+ bar->priv->layout.bdr_g = (float)color.green / 65535.0;
+ bar->priv->layout.bdr_b = (float)color.blue / 65535.0;
+ color = style->bg [GTK_STATE_SELECTED];
+ bar->priv->layout.fl_r = (float)color.red / 65535.0;
+ bar->priv->layout.fl_g = (float)color.green / 65535.0;
+ bar->priv->layout.fl_b = (float)color.blue / 65535.0;
+
+ if (bar->priv->orientation == GTK_ORIENTATION_VERTICAL) {
+ peak_level = bar->priv->peak_fraction * bar->priv->layout.area.height;
+ max_peak_level = bar->priv->max_peak * bar->priv->layout.area.height;
+
+ bar->priv->layout.delta = bar->priv->layout.area.height / NUM_BOXES;
+ bar->priv->layout.area.x = 0;
+ bar->priv->layout.area.y = 0;
+ bar->priv->layout.box_height = bar->priv->layout.delta / 2;
+ bar->priv->layout.box_width = bar->priv->layout.area.width;
+ bar->priv->layout.box_radius = bar->priv->layout.box_width / 2;
+ } else {
+ peak_level = bar->priv->peak_fraction * bar->priv->layout.area.width;
+ max_peak_level = bar->priv->max_peak * bar->priv->layout.area.width;
+
+ bar->priv->layout.delta = bar->priv->layout.area.width / NUM_BOXES;
+ bar->priv->layout.area.x = 0;
+ bar->priv->layout.area.y = 0;
+ bar->priv->layout.box_width = bar->priv->layout.delta / 2;
+ bar->priv->layout.box_height = bar->priv->layout.area.height;
+ bar->priv->layout.box_radius = bar->priv->layout.box_height / 2;
+ }
+
+ bar->priv->layout.peak_num = peak_level / bar->priv->layout.delta;
+ bar->priv->layout.max_peak_num = max_peak_level / bar->priv->layout.delta;
+}
+
+static void
+update_peak_value (GvcLevelBar *bar)
+{
+ gdouble val;
+ LevelBarLayout layout;
+
+ layout = bar->priv->layout;
+
+ val = fraction_from_adjustment (bar, bar->priv->peak_adjustment);
+ bar->priv->peak_fraction = val;
+
+ if (val > bar->priv->max_peak) {
+ if (bar->priv->max_peak_id > 0) {
+ g_source_remove (bar->priv->max_peak_id);
+ }
+ bar->priv->max_peak_id = g_timeout_add_seconds (1, (GSourceFunc)reset_max_peak, bar);
+ bar->priv->max_peak = val;
+ }
+
+ bar_calc_layout (bar);
+
+ if (layout_changed (&bar->priv->layout, &layout)) {
+ gtk_widget_queue_draw (GTK_WIDGET (bar));
+ }
+}
+
+static void
+update_rms_value (GvcLevelBar *bar)
+{
+ gdouble val;
+
+ val = fraction_from_adjustment (bar, bar->priv->rms_adjustment);
+ bar->priv->rms_fraction = val;
+}
+
+GtkOrientation
+gvc_level_bar_get_orientation (GvcLevelBar *bar)
+{
+ g_return_val_if_fail (GVC_IS_LEVEL_BAR (bar), 0);
+ return bar->priv->orientation;
+}
+
+void
+gvc_level_bar_set_orientation (GvcLevelBar *bar,
+ GtkOrientation orientation)
+{
+ g_return_if_fail (GVC_IS_LEVEL_BAR (bar));
+
+ if (orientation != bar->priv->orientation) {
+ bar->priv->orientation = orientation;
+ gtk_widget_queue_draw (GTK_WIDGET (bar));
+ g_object_notify (G_OBJECT (bar), "orientation");
+ }
+}
+
+static void
+on_peak_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcLevelBar *bar)
+{
+ update_peak_value (bar);
+}
+
+static void
+on_rms_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcLevelBar *bar)
+{
+ update_rms_value (bar);
+}
+
+void
+gvc_level_bar_set_peak_adjustment (GvcLevelBar *bar,
+ GtkAdjustment *adjustment)
+{
+ g_return_if_fail (GVC_LEVEL_BAR (bar));
+ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+
+ if (bar->priv->peak_adjustment != NULL) {
+ g_signal_handlers_disconnect_by_func (bar->priv->peak_adjustment,
+ G_CALLBACK (on_peak_adjustment_value_changed),
+ bar);
+ g_object_unref (bar->priv->peak_adjustment);
+ }
+
+ bar->priv->peak_adjustment = g_object_ref_sink (adjustment);
+
+ g_signal_connect (bar->priv->peak_adjustment,
+ "value-changed",
+ G_CALLBACK (on_peak_adjustment_value_changed),
+ bar);
+
+ update_peak_value (bar);
+
+ g_object_notify (G_OBJECT (bar), "peak-adjustment");
+}
+
+void
+gvc_level_bar_set_rms_adjustment (GvcLevelBar *bar,
+ GtkAdjustment *adjustment)
+{
+ g_return_if_fail (GVC_LEVEL_BAR (bar));
+ g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
+
+ if (bar->priv->rms_adjustment != NULL) {
+ g_signal_handlers_disconnect_by_func (bar->priv->peak_adjustment,
+ G_CALLBACK (on_rms_adjustment_value_changed),
+ bar);
+ g_object_unref (bar->priv->rms_adjustment);
+ }
+
+ bar->priv->rms_adjustment = g_object_ref_sink (adjustment);
+
+
+ g_signal_connect (bar->priv->peak_adjustment,
+ "value-changed",
+ G_CALLBACK (on_peak_adjustment_value_changed),
+ bar);
+
+ update_rms_value (bar);
+
+ g_object_notify (G_OBJECT (bar), "rms-adjustment");
+}
+
+GtkAdjustment *
+gvc_level_bar_get_peak_adjustment (GvcLevelBar *bar)
+{
+ g_return_val_if_fail (GVC_IS_LEVEL_BAR (bar), NULL);
+
+ return bar->priv->peak_adjustment;
+}
+
+GtkAdjustment *
+gvc_level_bar_get_rms_adjustment (GvcLevelBar *bar)
+{
+ g_return_val_if_fail (GVC_IS_LEVEL_BAR (bar), NULL);
+
+ return bar->priv->rms_adjustment;
+}
+
+void
+gvc_level_bar_set_scale (GvcLevelBar *bar,
+ GvcLevelScale scale)
+{
+ g_return_if_fail (GVC_IS_LEVEL_BAR (bar));
+
+ if (scale != bar->priv->scale) {
+ bar->priv->scale = scale;
+
+ update_peak_value (bar);
+ update_rms_value (bar);
+
+ g_object_notify (G_OBJECT (bar), "scale");
+ }
+}
+
+static void
+gvc_level_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcLevelBar *self = GVC_LEVEL_BAR (object);
+
+ switch (prop_id) {
+ case PROP_SCALE:
+ gvc_level_bar_set_scale (self, g_value_get_int (value));
+ break;
+ case PROP_ORIENTATION:
+ gvc_level_bar_set_orientation (self, g_value_get_enum (value));
+ break;
+ case PROP_PEAK_ADJUSTMENT:
+ gvc_level_bar_set_peak_adjustment (self, g_value_get_object (value));
+ break;
+ case PROP_RMS_ADJUSTMENT:
+ gvc_level_bar_set_rms_adjustment (self, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_level_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcLevelBar *self = GVC_LEVEL_BAR (object);
+
+ switch (prop_id) {
+ case PROP_SCALE:
+ g_value_set_int (value, self->priv->scale);
+ break;
+ case PROP_ORIENTATION:
+ g_value_set_enum (value, self->priv->orientation);
+ break;
+ case PROP_PEAK_ADJUSTMENT:
+ g_value_set_object (value, self->priv->peak_adjustment);
+ break;
+ case PROP_RMS_ADJUSTMENT:
+ g_value_set_object (value, self->priv->rms_adjustment);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+gvc_level_bar_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ return G_OBJECT_CLASS (gvc_level_bar_parent_class)->constructor (type, n_construct_properties, construct_params);
+}
+
+static void
+gvc_level_bar_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ GvcLevelBar *bar;
+
+ g_return_if_fail (GVC_IS_LEVEL_BAR (widget));
+ g_return_if_fail (requisition != NULL);
+
+ bar = GVC_LEVEL_BAR (widget);
+
+ switch (bar->priv->orientation) {
+ case GTK_ORIENTATION_VERTICAL:
+ requisition->width = VERTICAL_BAR_WIDTH;
+ requisition->height = MIN_VERTICAL_BAR_HEIGHT;
+ break;
+ case GTK_ORIENTATION_HORIZONTAL:
+ requisition->width = MIN_HORIZONTAL_BAR_WIDTH;
+ requisition->height = HORIZONTAL_BAR_HEIGHT;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+gvc_level_bar_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GvcLevelBar *bar;
+
+ g_return_if_fail (GVC_IS_LEVEL_BAR (widget));
+ g_return_if_fail (allocation != NULL);
+
+ bar = GVC_LEVEL_BAR (widget);
+
+ /* FIXME: add height property, labels, etc */
+ GTK_WIDGET_CLASS (gvc_level_bar_parent_class)->size_allocate (widget, allocation);
+
+ gtk_widget_set_allocation (widget, allocation);
+ gtk_widget_get_allocation (widget, allocation);
+
+ if (bar->priv->orientation == GTK_ORIENTATION_VERTICAL) {
+ allocation->height = MIN (allocation->height, MIN_VERTICAL_BAR_HEIGHT);
+ allocation->width = MAX (allocation->width, VERTICAL_BAR_WIDTH);
+ } else {
+ allocation->width = MIN (allocation->width, MIN_HORIZONTAL_BAR_WIDTH);
+ allocation->height = MAX (allocation->height, HORIZONTAL_BAR_HEIGHT);
+ }
+
+ bar_calc_layout (bar);
+}
+
+static void
+curved_rectangle (cairo_t *cr,
+ double x0,
+ double y0,
+ double width,
+ double height,
+ double radius)
+{
+ double x1;
+ double y1;
+
+ x1 = x0 + width;
+ y1 = y0 + height;
+
+ if (!width || !height) {
+ return;
+ }
+
+ if (width / 2 < radius) {
+ if (height / 2 < radius) {
+ cairo_move_to (cr, x0, (y0 + y1) / 2);
+ cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1) / 2, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1) / 2);
+ cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0) / 2, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1) / 2);
+ } else {
+ cairo_move_to (cr, x0, y0 + radius);
+ cairo_curve_to (cr, x0, y0, x0, y0, (x0 + x1) / 2, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
+ cairo_line_to (cr, x1, y1 - radius);
+ cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0) / 2, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, y1 - radius);
+ }
+ } else {
+ if (height / 2 < radius) {
+ cairo_move_to (cr, x0, (y0 + y1) / 2);
+ cairo_curve_to (cr, x0, y0, x0 , y0, x0 + radius, y0);
+ cairo_line_to (cr, x1 - radius, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1) / 2);
+ cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+ cairo_line_to (cr, x0 + radius, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1) / 2);
+ } else {
+ cairo_move_to (cr, x0, y0 + radius);
+ cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
+ cairo_line_to (cr, x1 - radius, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
+ cairo_line_to (cr, x1, y1 - radius);
+ cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+ cairo_line_to (cr, x0 + radius, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, y1 - radius);
+ }
+ }
+
+ cairo_close_path (cr);
+}
+
+static int
+gvc_level_bar_expose (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ GvcLevelBar *bar;
+ cairo_t *cr;
+ GtkAllocation allocation;
+
+ g_return_val_if_fail (GVC_IS_LEVEL_BAR (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ /* event queue compression */
+ if (event->count > 0) {
+ return FALSE;
+ }
+
+ bar = GVC_LEVEL_BAR (widget);
+
+ cr = gdk_cairo_create (gtk_widget_get_window (widget));
+
+ gtk_widget_get_allocation (widget, &allocation);
+ cairo_translate (cr,
+ allocation.x,
+ allocation.y);
+
+ if (bar->priv->orientation == GTK_ORIENTATION_VERTICAL) {
+ int i;
+ int by;
+
+ for (i = 0; i < NUM_BOXES; i++) {
+ by = i * bar->priv->layout.delta;
+ curved_rectangle (cr,
+ bar->priv->layout.area.x + 0.5,
+ by + 0.5,
+ bar->priv->layout.box_width - 1,
+ bar->priv->layout.box_height - 1,
+ bar->priv->layout.box_radius);
+ if ((bar->priv->layout.max_peak_num - 1) == i) {
+ /* fill peak foreground */
+ cairo_set_source_rgb (cr, bar->priv->layout.fl_r, bar->priv->layout.fl_g, bar->priv->layout.fl_b);
+ cairo_fill_preserve (cr);
+ } else if ((bar->priv->layout.peak_num - 1) >= i) {
+ /* fill background */
+ cairo_set_source_rgb (cr, bar->priv->layout.bg_r, bar->priv->layout.bg_g, bar->priv->layout.bg_b);
+ cairo_fill_preserve (cr);
+ /* fill foreground */
+ cairo_set_source_rgba (cr, bar->priv->layout.fl_r, bar->priv->layout.fl_g, bar->priv->layout.fl_b, 0.5);
+ cairo_fill_preserve (cr);
+ } else {
+ /* fill background */
+ cairo_set_source_rgb (cr, bar->priv->layout.bg_r, bar->priv->layout.bg_g, bar->priv->layout.bg_b);
+ cairo_fill_preserve (cr);
+ }
+
+ /* stroke border */
+ cairo_set_source_rgb (cr, bar->priv->layout.bdr_r, bar->priv->layout.bdr_g, bar->priv->layout.bdr_b);
+ cairo_set_line_width (cr, 1);
+ cairo_stroke (cr);
+ }
+
+ } else {
+ int i;
+ int bx;
+
+ for (i = 0; i < NUM_BOXES; i++) {
+ bx = i * bar->priv->layout.delta;
+ curved_rectangle (cr,
+ bx + 0.5,
+ bar->priv->layout.area.y + 0.5,
+ bar->priv->layout.box_width - 1,
+ bar->priv->layout.box_height - 1,
+ bar->priv->layout.box_radius);
+
+ if ((bar->priv->layout.max_peak_num - 1) == i) {
+ /* fill peak foreground */
+ cairo_set_source_rgb (cr, bar->priv->layout.fl_r, bar->priv->layout.fl_g, bar->priv->layout.fl_b);
+ cairo_fill_preserve (cr);
+ } else if ((bar->priv->layout.peak_num - 1) >= i) {
+ /* fill background */
+ cairo_set_source_rgb (cr, bar->priv->layout.bg_r, bar->priv->layout.bg_g, bar->priv->layout.bg_b);
+ cairo_fill_preserve (cr);
+ /* fill foreground */
+ cairo_set_source_rgba (cr, bar->priv->layout.fl_r, bar->priv->layout.fl_g, bar->priv->layout.fl_b, 0.5);
+ cairo_fill_preserve (cr);
+ } else {
+ /* fill background */
+ cairo_set_source_rgb (cr, bar->priv->layout.bg_r, bar->priv->layout.bg_g, bar->priv->layout.bg_b);
+ cairo_fill_preserve (cr);
+ }
+
+ /* stroke border */
+ cairo_set_source_rgb (cr, bar->priv->layout.bdr_r, bar->priv->layout.bdr_g, bar->priv->layout.bdr_b);
+ cairo_set_line_width (cr, 1);
+ cairo_stroke (cr);
+ }
+ }
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static void
+gvc_level_bar_class_init (GvcLevelBarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->constructor = gvc_level_bar_constructor;
+ object_class->finalize = gvc_level_bar_finalize;
+ object_class->set_property = gvc_level_bar_set_property;
+ object_class->get_property = gvc_level_bar_get_property;
+
+ widget_class->expose_event = gvc_level_bar_expose;
+ widget_class->size_request = gvc_level_bar_size_request;
+ widget_class->size_allocate = gvc_level_bar_size_allocate;
+
+ g_object_class_install_property (object_class,
+ PROP_ORIENTATION,
+ g_param_spec_enum ("orientation",
+ "Orientation",
+ "The orientation of the bar",
+ GTK_TYPE_ORIENTATION,
+ GTK_ORIENTATION_HORIZONTAL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_PEAK_ADJUSTMENT,
+ g_param_spec_object ("peak-adjustment",
+ "Peak Adjustment",
+ "The GtkAdjustment that contains the current peak value",
+ GTK_TYPE_ADJUSTMENT,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_RMS_ADJUSTMENT,
+ g_param_spec_object ("rms-adjustment",
+ "RMS Adjustment",
+ "The GtkAdjustment that contains the current rms value",
+ GTK_TYPE_ADJUSTMENT,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SCALE,
+ g_param_spec_int ("scale",
+ "Scale",
+ "Scale",
+ 0,
+ G_MAXINT,
+ GVC_LEVEL_SCALE_LINEAR,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GvcLevelBarPrivate));
+}
+
+static void
+gvc_level_bar_init (GvcLevelBar *bar)
+{
+ bar->priv = GVC_LEVEL_BAR_GET_PRIVATE (bar);
+
+ bar->priv->peak_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
+ 0.0,
+ 1.0,
+ 0.05,
+ 0.1,
+ 0.1));
+ g_object_ref_sink (bar->priv->peak_adjustment);
+ g_signal_connect (bar->priv->peak_adjustment,
+ "value-changed",
+ G_CALLBACK (on_peak_adjustment_value_changed),
+ bar);
+
+ bar->priv->rms_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
+ 0.0,
+ 1.0,
+ 0.05,
+ 0.1,
+ 0.1));
+ g_object_ref_sink (bar->priv->rms_adjustment);
+ g_signal_connect (bar->priv->rms_adjustment,
+ "value-changed",
+ G_CALLBACK (on_rms_adjustment_value_changed),
+ bar);
+
+ gtk_widget_set_has_window (GTK_WIDGET (bar), FALSE);
+}
+
+static void
+gvc_level_bar_finalize (GObject *object)
+{
+ GvcLevelBar *bar;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_LEVEL_BAR (object));
+
+ bar = GVC_LEVEL_BAR (object);
+
+ if (bar->priv->max_peak_id > 0) {
+ g_source_remove (bar->priv->max_peak_id);
+ }
+
+ g_return_if_fail (bar->priv != NULL);
+
+ G_OBJECT_CLASS (gvc_level_bar_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gvc_level_bar_new (void)
+{
+ GObject *bar;
+ bar = g_object_new (GVC_TYPE_LEVEL_BAR,
+ NULL);
+ return GTK_WIDGET (bar);
+}
diff --git a/mate-volume-control/src/gvc-level-bar.h b/mate-volume-control/src/gvc-level-bar.h
new file mode 100644
index 0000000..917b415
--- /dev/null
+++ b/mate-volume-control/src/gvc-level-bar.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_LEVEL_BAR_H
+#define __GVC_LEVEL_BAR_H
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_LEVEL_BAR (gvc_level_bar_get_type ())
+#define GVC_LEVEL_BAR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_LEVEL_BAR, GvcLevelBar))
+#define GVC_LEVEL_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_LEVEL_BAR, GvcLevelBarClass))
+#define GVC_IS_LEVEL_BAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_LEVEL_BAR))
+#define GVC_IS_LEVEL_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_LEVEL_BAR))
+#define GVC_LEVEL_BAR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_LEVEL_BAR, GvcLevelBarClass))
+
+typedef struct GvcLevelBarPrivate GvcLevelBarPrivate;
+
+typedef struct
+{
+ GtkHBox parent;
+ GvcLevelBarPrivate *priv;
+} GvcLevelBar;
+
+typedef struct
+{
+ GtkHBoxClass parent_class;
+} GvcLevelBarClass;
+
+typedef enum
+{
+ GVC_LEVEL_SCALE_LINEAR,
+ GVC_LEVEL_SCALE_LOG,
+ GVC_LEVEL_SCALE_LAST
+} GvcLevelScale;
+
+GType gvc_level_bar_get_type (void);
+
+GtkWidget * gvc_level_bar_new (void);
+void gvc_level_bar_set_orientation (GvcLevelBar *bar,
+ GtkOrientation orientation);
+GtkOrientation gvc_level_bar_get_orientation (GvcLevelBar *bar);
+
+void gvc_level_bar_set_peak_adjustment (GvcLevelBar *bar,
+ GtkAdjustment *adjustment);
+GtkAdjustment * gvc_level_bar_get_peak_adjustment (GvcLevelBar *bar);
+void gvc_level_bar_set_rms_adjustment (GvcLevelBar *bar,
+ GtkAdjustment *adjustment);
+GtkAdjustment * gvc_level_bar_get_rms_adjustment (GvcLevelBar *bar);
+void gvc_level_bar_set_scale (GvcLevelBar *bar,
+ GvcLevelScale scale);
+
+
+G_END_DECLS
+
+#endif /* __GVC_LEVEL_BAR_H */
diff --git a/mate-volume-control/src/gvc-log.c b/mate-volume-control/src/gvc-log.c
new file mode 100644
index 0000000..03a9486
--- /dev/null
+++ b/mate-volume-control/src/gvc-log.c
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+
+#include "config.h"
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include "gvc-log.h"
+
+
+static int log_levels = G_LOG_LEVEL_CRITICAL |
+ G_LOG_LEVEL_ERROR |
+ G_LOG_LEVEL_WARNING |
+ G_LOG_LEVEL_DEBUG;
+
+static void
+gvc_log_default_handler (const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer unused_data)
+{
+ if ((log_level & log_levels) == 0)
+ return;
+
+ g_log_default_handler (log_domain, log_level, message, unused_data);
+}
+
+void
+gvc_log_init (void)
+{
+ g_log_set_default_handler (gvc_log_default_handler, NULL);
+}
+
+void
+gvc_log_set_debug (gboolean debug)
+{
+ if (debug) {
+ log_levels |= G_LOG_LEVEL_DEBUG;
+ g_debug ("Enabling debugging");
+ } else {
+ log_levels &= ~G_LOG_LEVEL_DEBUG;
+ }
+}
diff --git a/mate-volume-control/src/gvc-log.h b/mate-volume-control/src/gvc-log.h
new file mode 100644
index 0000000..bc1cdd5
--- /dev/null
+++ b/mate-volume-control/src/gvc-log.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_LOG_H
+#define __GVC_LOG_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+
+void gvc_log_init (void);
+void gvc_log_set_debug (gboolean debug);
+
+
+G_END_DECLS
+
+#endif /* __GVC_LOG_H */
diff --git a/mate-volume-control/src/gvc-mixer-card.c b/mate-volume-control/src/gvc-mixer-card.c
new file mode 100644
index 0000000..dc4ccca
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-card.c
@@ -0,0 +1,498 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ * Copyright (C) 2009 Bastien Nocera
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-mixer-card.h"
+
+#define GVC_MIXER_CARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_CARD, GvcMixerCardPrivate))
+
+static guint32 card_serial = 1;
+
+struct GvcMixerCardPrivate
+{
+ pa_context *pa_context;
+ guint id;
+ guint index;
+ char *name;
+ char *icon_name;
+ char *profile;
+ char *target_profile;
+ char *human_profile;
+ GList *profiles;
+ pa_operation *profile_op;
+};
+
+enum
+{
+ PROP_0,
+ PROP_ID,
+ PROP_PA_CONTEXT,
+ PROP_INDEX,
+ PROP_NAME,
+ PROP_ICON_NAME,
+ PROP_PROFILE,
+ PROP_HUMAN_PROFILE,
+};
+
+static void gvc_mixer_card_class_init (GvcMixerCardClass *klass);
+static void gvc_mixer_card_init (GvcMixerCard *mixer_card);
+static void gvc_mixer_card_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerCard, gvc_mixer_card, G_TYPE_OBJECT)
+
+static guint32
+get_next_card_serial (void)
+{
+ guint32 serial;
+
+ serial = card_serial++;
+
+ if ((gint32)card_serial < 0) {
+ card_serial = 1;
+ }
+
+ return serial;
+}
+
+pa_context *
+gvc_mixer_card_get_pa_context (GvcMixerCard *card)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
+ return card->priv->pa_context;
+}
+
+guint
+gvc_mixer_card_get_index (GvcMixerCard *card)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
+ return card->priv->index;
+}
+
+guint
+gvc_mixer_card_get_id (GvcMixerCard *card)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
+ return card->priv->id;
+}
+
+const char *
+gvc_mixer_card_get_name (GvcMixerCard *card)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
+ return card->priv->name;
+}
+
+gboolean
+gvc_mixer_card_set_name (GvcMixerCard *card,
+ const char *name)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
+
+ g_free (card->priv->name);
+ card->priv->name = g_strdup (name);
+ g_object_notify (G_OBJECT (card), "name");
+
+ return TRUE;
+}
+
+const char *
+gvc_mixer_card_get_icon_name (GvcMixerCard *card)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
+ return card->priv->icon_name;
+}
+
+gboolean
+gvc_mixer_card_set_icon_name (GvcMixerCard *card,
+ const char *icon_name)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
+
+ g_free (card->priv->icon_name);
+ card->priv->icon_name = g_strdup (icon_name);
+ g_object_notify (G_OBJECT (card), "icon-name");
+
+ return TRUE;
+}
+
+GvcMixerCardProfile *
+gvc_mixer_card_get_profile (GvcMixerCard *card)
+{
+ GList *l;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
+ g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
+
+ for (l = card->priv->profiles; l != NULL; l = l->next) {
+ GvcMixerCardProfile *p = l->data;
+ if (g_str_equal (card->priv->profile, p->profile)) {
+ return p;
+ }
+ }
+
+ g_assert_not_reached ();
+
+ return NULL;
+}
+
+gboolean
+gvc_mixer_card_set_profile (GvcMixerCard *card,
+ const char *profile)
+{
+ GList *l;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
+ g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
+
+ g_free (card->priv->profile);
+ card->priv->profile = g_strdup (profile);
+
+ g_free (card->priv->human_profile);
+ card->priv->human_profile = NULL;
+
+ for (l = card->priv->profiles; l != NULL; l = l->next) {
+ GvcMixerCardProfile *p = l->data;
+ if (g_str_equal (card->priv->profile, p->profile)) {
+ card->priv->human_profile = g_strdup (p->human_profile);
+ break;
+ }
+ }
+
+ g_object_notify (G_OBJECT (card), "profile");
+
+ return TRUE;
+}
+
+static void
+_pa_context_set_card_profile_by_index_cb (pa_context *context,
+ int success,
+ void *userdata)
+{
+ GvcMixerCard *card = GVC_MIXER_CARD (userdata);
+
+ g_assert (card->priv->target_profile);
+
+ if (success > 0) {
+ gvc_mixer_card_set_profile (card, card->priv->target_profile);
+ } else {
+ g_debug ("Failed to switch profile on '%s' from '%s' to '%s'",
+ card->priv->name,
+ card->priv->profile,
+ card->priv->target_profile);
+ }
+ g_free (card->priv->target_profile);
+ card->priv->target_profile = NULL;
+
+ pa_operation_unref (card->priv->profile_op);
+ card->priv->profile_op = NULL;
+}
+
+gboolean
+gvc_mixer_card_change_profile (GvcMixerCard *card,
+ const char *profile)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
+ g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
+
+ /* Same profile, or already requested? */
+ if (g_strcmp0 (card->priv->profile, profile) == 0)
+ return TRUE;
+ if (g_strcmp0 (profile, card->priv->target_profile) == 0)
+ return TRUE;
+ if (card->priv->profile_op != NULL) {
+ pa_operation_cancel (card->priv->profile_op);
+ pa_operation_unref (card->priv->profile_op);
+ card->priv->profile_op = NULL;
+ }
+
+ if (card->priv->profile != NULL) {
+ g_free (card->priv->target_profile);
+ card->priv->target_profile = g_strdup (profile);
+
+ card->priv->profile_op = pa_context_set_card_profile_by_index (card->priv->pa_context,
+ card->priv->index,
+ card->priv->target_profile,
+ _pa_context_set_card_profile_by_index_cb,
+ card);
+
+ if (card->priv->profile_op == NULL) {
+ g_warning ("pa_context_set_card_profile_by_index() failed");
+ return FALSE;
+ }
+ } else {
+ g_assert (card->priv->human_profile == NULL);
+ card->priv->profile = g_strdup (profile);
+ }
+
+ return TRUE;
+}
+
+const GList *
+gvc_mixer_card_get_profiles (GvcMixerCard *card)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
+ return card->priv->profiles;
+}
+
+static int
+sort_profiles (GvcMixerCardProfile *a,
+ GvcMixerCardProfile *b)
+{
+ if (a->priority == b->priority)
+ return 0;
+ if (a->priority > b->priority)
+ return 1;
+ return -1;
+}
+
+gboolean
+gvc_mixer_card_set_profiles (GvcMixerCard *card,
+ GList *profiles)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
+ g_return_val_if_fail (card->priv->profiles == NULL, FALSE);
+
+ card->priv->profiles = g_list_sort (profiles, (GCompareFunc) sort_profiles);
+
+ return TRUE;
+}
+
+static void
+gvc_mixer_card_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerCard *self = GVC_MIXER_CARD (object);
+
+ switch (prop_id) {
+ case PROP_PA_CONTEXT:
+ self->priv->pa_context = g_value_get_pointer (value);
+ break;
+ case PROP_INDEX:
+ self->priv->index = g_value_get_ulong (value);
+ break;
+ case PROP_ID:
+ self->priv->id = g_value_get_ulong (value);
+ break;
+ case PROP_NAME:
+ gvc_mixer_card_set_name (self, g_value_get_string (value));
+ break;
+ case PROP_ICON_NAME:
+ gvc_mixer_card_set_icon_name (self, g_value_get_string (value));
+ break;
+ case PROP_PROFILE:
+ gvc_mixer_card_set_profile (self, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_mixer_card_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerCard *self = GVC_MIXER_CARD (object);
+
+ switch (prop_id) {
+ case PROP_PA_CONTEXT:
+ g_value_set_pointer (value, self->priv->pa_context);
+ break;
+ case PROP_INDEX:
+ g_value_set_ulong (value, self->priv->index);
+ break;
+ case PROP_ID:
+ g_value_set_ulong (value, self->priv->id);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, self->priv->name);
+ break;
+ case PROP_ICON_NAME:
+ g_value_set_string (value, self->priv->icon_name);
+ break;
+ case PROP_PROFILE:
+ g_value_set_string (value, self->priv->profile);
+ break;
+ case PROP_HUMAN_PROFILE:
+ g_value_set_string (value, self->priv->human_profile);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+gvc_mixer_card_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerCard *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_card_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_CARD (object);
+
+ self->priv->id = get_next_card_serial ();
+
+ return object;
+}
+
+static void
+gvc_mixer_card_class_init (GvcMixerCardClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->constructor = gvc_mixer_card_constructor;
+ gobject_class->finalize = gvc_mixer_card_finalize;
+
+ gobject_class->set_property = gvc_mixer_card_set_property;
+ gobject_class->get_property = gvc_mixer_card_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_INDEX,
+ g_param_spec_ulong ("index",
+ "Index",
+ "The index for this card",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_ID,
+ g_param_spec_ulong ("id",
+ "id",
+ "The id for this card",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_PA_CONTEXT,
+ g_param_spec_pointer ("pa-context",
+ "PulseAudio context",
+ "The PulseAudio context for this card",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "Name to display for this card",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_ICON_NAME,
+ g_param_spec_string ("icon-name",
+ "Icon Name",
+ "Name of icon to display for this card",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_PROFILE,
+ g_param_spec_string ("profile",
+ "Profile",
+ "Name of current profile for this card",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_HUMAN_PROFILE,
+ g_param_spec_string ("human-profile",
+ "Profile (Human readable)",
+ "Name of current profile for this card in human readable form",
+ NULL,
+ G_PARAM_READABLE));
+
+ g_type_class_add_private (klass, sizeof (GvcMixerCardPrivate));
+}
+
+static void
+gvc_mixer_card_init (GvcMixerCard *card)
+{
+ card->priv = GVC_MIXER_CARD_GET_PRIVATE (card);
+}
+
+GvcMixerCard *
+gvc_mixer_card_new (pa_context *context,
+ guint index)
+{
+ GObject *object;
+
+ object = g_object_new (GVC_TYPE_MIXER_CARD,
+ "index", index,
+ "pa-context", context,
+ NULL);
+ return GVC_MIXER_CARD (object);
+}
+
+static void
+free_profile (GvcMixerCardProfile *p)
+{
+ g_free (p->profile);
+ g_free (p->human_profile);
+ g_free (p->status);
+ g_free (p);
+}
+
+static void
+gvc_mixer_card_finalize (GObject *object)
+{
+ GvcMixerCard *mixer_card;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_CARD (object));
+
+ mixer_card = GVC_MIXER_CARD (object);
+
+ g_return_if_fail (mixer_card->priv != NULL);
+
+ g_free (mixer_card->priv->name);
+ mixer_card->priv->name = NULL;
+
+ g_free (mixer_card->priv->icon_name);
+ mixer_card->priv->icon_name = NULL;
+
+ g_free (mixer_card->priv->target_profile);
+ mixer_card->priv->target_profile = NULL;
+
+ g_free (mixer_card->priv->profile);
+ mixer_card->priv->profile = NULL;
+
+ g_free (mixer_card->priv->human_profile);
+ mixer_card->priv->human_profile = NULL;
+
+ g_list_foreach (mixer_card->priv->profiles, (GFunc) free_profile, NULL);
+ g_list_free (mixer_card->priv->profiles);
+ mixer_card->priv->profiles = NULL;
+
+ G_OBJECT_CLASS (gvc_mixer_card_parent_class)->finalize (object);
+}
+
diff --git a/mate-volume-control/src/gvc-mixer-card.h b/mate-volume-control/src/gvc-mixer-card.h
new file mode 100644
index 0000000..ad24cd6
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-card.h
@@ -0,0 +1,87 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008-2009 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_CARD_H
+#define __GVC_MIXER_CARD_H
+
+#include <glib-object.h>
+#include <pulse/pulseaudio.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_CARD (gvc_mixer_card_get_type ())
+#define GVC_MIXER_CARD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CARD, GvcMixerCard))
+#define GVC_MIXER_CARD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CARD, GvcMixerCardClass))
+#define GVC_IS_MIXER_CARD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_CARD))
+#define GVC_IS_MIXER_CARD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_CARD))
+#define GVC_MIXER_CARD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_CARD, GvcMixerCardClass))
+
+typedef struct GvcMixerCardPrivate GvcMixerCardPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GvcMixerCardPrivate *priv;
+} GvcMixerCard;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ /* vtable */
+} GvcMixerCardClass;
+
+typedef struct
+{
+ char *profile;
+ char *human_profile;
+ char *status;
+ guint priority;
+ guint n_sinks, n_sources;
+} GvcMixerCardProfile;
+
+GType gvc_mixer_card_get_type (void);
+GvcMixerCard * gvc_mixer_card_new (pa_context *context,
+ guint index);
+
+guint gvc_mixer_card_get_id (GvcMixerCard *card);
+guint gvc_mixer_card_get_index (GvcMixerCard *card);
+const char * gvc_mixer_card_get_name (GvcMixerCard *card);
+const char * gvc_mixer_card_get_icon_name (GvcMixerCard *card);
+GvcMixerCardProfile * gvc_mixer_card_get_profile (GvcMixerCard *card);
+const GList * gvc_mixer_card_get_profiles (GvcMixerCard *card);
+
+pa_context * gvc_mixer_card_get_pa_context (GvcMixerCard *card);
+gboolean gvc_mixer_card_change_profile (GvcMixerCard *card,
+ const char *profile);
+
+/* private */
+gboolean gvc_mixer_card_set_name (GvcMixerCard *card,
+ const char *name);
+gboolean gvc_mixer_card_set_icon_name (GvcMixerCard *card,
+ const char *name);
+gboolean gvc_mixer_card_set_profile (GvcMixerCard *card,
+ const char *profile);
+gboolean gvc_mixer_card_set_profiles (GvcMixerCard *card,
+ GList *profiles);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_CARD_H */
diff --git a/mate-volume-control/src/gvc-mixer-control.c b/mate-volume-control/src/gvc-mixer-control.c
new file mode 100644
index 0000000..b504427
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-control.c
@@ -0,0 +1,2150 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2006-2008 Lennart Poettering
+ * Copyright (C) 2008 Sjoerd Simons <[email protected]>
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+#include <pulse/glib-mainloop.h>
+#include <pulse/ext-stream-restore.h>
+
+#include "gvc-mixer-control.h"
+#include "gvc-mixer-sink.h"
+#include "gvc-mixer-source.h"
+#include "gvc-mixer-sink-input.h"
+#include "gvc-mixer-source-output.h"
+#include "gvc-mixer-event-role.h"
+#include "gvc-mixer-card.h"
+
+#define GVC_MIXER_CONTROL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControlPrivate))
+
+#define RECONNECT_DELAY 5
+
+enum {
+ PROP_0,
+ PROP_NAME
+};
+
+struct GvcMixerControlPrivate
+{
+ pa_glib_mainloop *pa_mainloop;
+ pa_mainloop_api *pa_api;
+ pa_context *pa_context;
+ int n_outstanding;
+ guint reconnect_id;
+ char *name;
+
+ gboolean default_sink_is_set;
+ guint default_sink_id;
+ char *default_sink_name;
+ gboolean default_source_is_set;
+ guint default_source_id;
+ char *default_source_name;
+
+ gboolean event_sink_input_is_set;
+ guint event_sink_input_id;
+
+ GHashTable *all_streams;
+ GHashTable *sinks; /* fixed outputs */
+ GHashTable *sources; /* fixed inputs */
+ GHashTable *sink_inputs; /* routable output streams */
+ GHashTable *source_outputs; /* routable input streams */
+ GHashTable *clients;
+ GHashTable *cards;
+
+ GvcMixerStream *new_default_stream; /* new default stream, used in gvc_mixer_control_set_default_sink () */
+};
+
+enum {
+ CONNECTING,
+ READY,
+ STREAM_ADDED,
+ STREAM_REMOVED,
+ CARD_ADDED,
+ CARD_REMOVED,
+ DEFAULT_SINK_CHANGED,
+ DEFAULT_SOURCE_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0, };
+
+static void gvc_mixer_control_class_init (GvcMixerControlClass *klass);
+static void gvc_mixer_control_init (GvcMixerControl *mixer_control);
+static void gvc_mixer_control_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerControl, gvc_mixer_control, G_TYPE_OBJECT)
+
+pa_context *
+gvc_mixer_control_get_pa_context (GvcMixerControl *control)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+ return control->priv->pa_context;
+}
+
+GvcMixerStream *
+gvc_mixer_control_get_event_sink_input (GvcMixerControl *control)
+{
+ GvcMixerStream *stream;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ stream = g_hash_table_lookup (control->priv->all_streams,
+ GUINT_TO_POINTER (control->priv->event_sink_input_id));
+
+ return stream;
+}
+
+static void
+gvc_mixer_control_stream_restore_cb (pa_context *c,
+ const pa_ext_stream_restore_info *info,
+ int eol,
+ void *userdata)
+{
+ pa_operation *o;
+ GvcMixerControl *control = (GvcMixerControl *) userdata;
+ pa_ext_stream_restore_info new_info;
+
+ if (eol || control->priv->new_default_stream == NULL)
+ return;
+
+ new_info.name = info->name;
+ new_info.channel_map = info->channel_map;
+ new_info.volume = info->volume;
+ new_info.mute = info->mute;
+
+ new_info.device = gvc_mixer_stream_get_name (control->priv->new_default_stream);
+
+ o = pa_ext_stream_restore_write (control->priv->pa_context,
+ PA_UPDATE_REPLACE,
+ &new_info, 1,
+ TRUE, NULL, NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_ext_stream_restore_write() failed: %s",
+ pa_strerror (pa_context_errno (control->priv->pa_context)));
+ return;
+ }
+
+ g_debug ("Changed default device for %s to %s", info->name, info->device);
+
+ pa_operation_unref (o);
+}
+
+gboolean
+gvc_mixer_control_set_default_sink (GvcMixerControl *control,
+ GvcMixerStream *stream)
+{
+ pa_operation *o;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ o = pa_context_set_default_sink (control->priv->pa_context,
+ gvc_mixer_stream_get_name (stream),
+ NULL,
+ NULL);
+ if (o == NULL) {
+ g_warning ("pa_context_set_default_sink() failed: %s",
+ pa_strerror (pa_context_errno (control->priv->pa_context)));
+ return FALSE;
+ }
+
+ pa_operation_unref (o);
+
+ control->priv->new_default_stream = stream;
+ g_object_add_weak_pointer (G_OBJECT (stream), (gpointer *) &control->priv->new_default_stream);
+
+ o = pa_ext_stream_restore_read (control->priv->pa_context,
+ gvc_mixer_control_stream_restore_cb,
+ control);
+
+ if (o == NULL) {
+ g_warning ("pa_ext_stream_restore_read() failed: %s",
+ pa_strerror (pa_context_errno (control->priv->pa_context)));
+ return FALSE;
+ }
+
+ pa_operation_unref (o);
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_control_set_default_source (GvcMixerControl *control,
+ GvcMixerStream *stream)
+{
+ pa_operation *o;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ o = pa_context_set_default_source (control->priv->pa_context,
+ gvc_mixer_stream_get_name (stream),
+ NULL,
+ NULL);
+ if (o == NULL) {
+ g_warning ("pa_context_set_default_source() failed");
+ return FALSE;
+ }
+
+ pa_operation_unref (o);
+
+ return TRUE;
+}
+
+GvcMixerStream *
+gvc_mixer_control_get_default_sink (GvcMixerControl *control)
+{
+ GvcMixerStream *stream;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ if (control->priv->default_sink_is_set) {
+ stream = g_hash_table_lookup (control->priv->all_streams,
+ GUINT_TO_POINTER (control->priv->default_sink_id));
+ } else {
+ stream = NULL;
+ }
+
+ return stream;
+}
+
+GvcMixerStream *
+gvc_mixer_control_get_default_source (GvcMixerControl *control)
+{
+ GvcMixerStream *stream;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ if (control->priv->default_source_is_set) {
+ stream = g_hash_table_lookup (control->priv->all_streams,
+ GUINT_TO_POINTER (control->priv->default_source_id));
+ } else {
+ stream = NULL;
+ }
+
+ return stream;
+}
+
+static gpointer
+gvc_mixer_control_lookup_id (GHashTable *hash_table,
+ guint id)
+{
+ return g_hash_table_lookup (hash_table,
+ GUINT_TO_POINTER (id));
+}
+
+GvcMixerStream *
+gvc_mixer_control_lookup_stream_id (GvcMixerControl *control,
+ guint id)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ return gvc_mixer_control_lookup_id (control->priv->all_streams, id);
+}
+
+GvcMixerCard *
+gvc_mixer_control_lookup_card_id (GvcMixerControl *control,
+ guint id)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ return gvc_mixer_control_lookup_id (control->priv->cards, id);
+}
+
+static void
+listify_hash_values_hfunc (gpointer key,
+ gpointer value,
+ gpointer user_data)
+{
+ GSList **list = user_data;
+
+ *list = g_slist_prepend (*list, value);
+}
+
+static int
+gvc_name_collate (const char *namea,
+ const char *nameb)
+{
+ if (nameb == NULL && namea == NULL)
+ return 0;
+ if (nameb == NULL)
+ return 1;
+ if (namea == NULL)
+ return -1;
+
+ return g_utf8_collate (namea, nameb);
+}
+
+static int
+gvc_card_collate (GvcMixerCard *a,
+ GvcMixerCard *b)
+{
+ const char *namea;
+ const char *nameb;
+
+ g_return_val_if_fail (a == NULL || GVC_IS_MIXER_CARD (a), 0);
+ g_return_val_if_fail (b == NULL || GVC_IS_MIXER_CARD (b), 0);
+
+ namea = gvc_mixer_card_get_name (a);
+ nameb = gvc_mixer_card_get_name (b);
+
+ return gvc_name_collate (namea, nameb);
+}
+
+GSList *
+gvc_mixer_control_get_cards (GvcMixerControl *control)
+{
+ GSList *retval;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ retval = NULL;
+ g_hash_table_foreach (control->priv->cards,
+ listify_hash_values_hfunc,
+ &retval);
+ return g_slist_sort (retval, (GCompareFunc) gvc_card_collate);
+}
+
+static int
+gvc_stream_collate (GvcMixerStream *a,
+ GvcMixerStream *b)
+{
+ const char *namea;
+ const char *nameb;
+
+ g_return_val_if_fail (a == NULL || GVC_IS_MIXER_STREAM (a), 0);
+ g_return_val_if_fail (b == NULL || GVC_IS_MIXER_STREAM (b), 0);
+
+ namea = gvc_mixer_stream_get_name (a);
+ nameb = gvc_mixer_stream_get_name (b);
+
+ return gvc_name_collate (namea, nameb);
+}
+
+GSList *
+gvc_mixer_control_get_streams (GvcMixerControl *control)
+{
+ GSList *retval;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ retval = NULL;
+ g_hash_table_foreach (control->priv->all_streams,
+ listify_hash_values_hfunc,
+ &retval);
+ return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
+}
+
+GSList *
+gvc_mixer_control_get_sinks (GvcMixerControl *control)
+{
+ GSList *retval;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ retval = NULL;
+ g_hash_table_foreach (control->priv->sinks,
+ listify_hash_values_hfunc,
+ &retval);
+ return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
+}
+
+GSList *
+gvc_mixer_control_get_sources (GvcMixerControl *control)
+{
+ GSList *retval;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ retval = NULL;
+ g_hash_table_foreach (control->priv->sources,
+ listify_hash_values_hfunc,
+ &retval);
+ return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
+}
+
+GSList *
+gvc_mixer_control_get_sink_inputs (GvcMixerControl *control)
+{
+ GSList *retval;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ retval = NULL;
+ g_hash_table_foreach (control->priv->sink_inputs,
+ listify_hash_values_hfunc,
+ &retval);
+ return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
+}
+
+GSList *
+gvc_mixer_control_get_source_outputs (GvcMixerControl *control)
+{
+ GSList *retval;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), NULL);
+
+ retval = NULL;
+ g_hash_table_foreach (control->priv->source_outputs,
+ listify_hash_values_hfunc,
+ &retval);
+ return g_slist_sort (retval, (GCompareFunc) gvc_stream_collate);
+}
+
+static void
+dec_outstanding (GvcMixerControl *control)
+{
+ if (control->priv->n_outstanding <= 0) {
+ return;
+ }
+
+ if (--control->priv->n_outstanding <= 0) {
+ g_signal_emit (G_OBJECT (control), signals[READY], 0);
+ }
+}
+
+gboolean
+gvc_mixer_control_is_ready (GvcMixerControl *control)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
+
+ return (control->priv->n_outstanding == 0);
+}
+
+
+static void
+_set_default_source (GvcMixerControl *control,
+ GvcMixerStream *stream)
+{
+ guint new_id;
+
+ if (stream == NULL) {
+ control->priv->default_source_id = 0;
+ control->priv->default_source_is_set = FALSE;
+ g_signal_emit (control,
+ signals[DEFAULT_SOURCE_CHANGED],
+ 0,
+ PA_INVALID_INDEX);
+ return;
+ }
+
+ new_id = gvc_mixer_stream_get_id (stream);
+
+ if (control->priv->default_source_id != new_id) {
+ control->priv->default_source_id = new_id;
+ control->priv->default_source_is_set = TRUE;
+ g_signal_emit (control,
+ signals[DEFAULT_SOURCE_CHANGED],
+ 0,
+ new_id);
+ }
+}
+
+static void
+_set_default_sink (GvcMixerControl *control,
+ GvcMixerStream *stream)
+{
+ guint new_id;
+
+ if (stream == NULL) {
+ /* Don't tell front-ends about an unset default
+ * sink if it's already unset */
+ if (control->priv->default_sink_is_set == FALSE)
+ return;
+ control->priv->default_sink_id = 0;
+ control->priv->default_sink_is_set = FALSE;
+ g_signal_emit (control,
+ signals[DEFAULT_SINK_CHANGED],
+ 0,
+ PA_INVALID_INDEX);
+ return;
+ }
+
+ new_id = gvc_mixer_stream_get_id (stream);
+
+ if (control->priv->default_sink_id != new_id) {
+ control->priv->default_sink_id = new_id;
+ control->priv->default_sink_is_set = TRUE;
+ g_signal_emit (control,
+ signals[DEFAULT_SINK_CHANGED],
+ 0,
+ new_id);
+ }
+}
+
+static gboolean
+_stream_has_name (gpointer key,
+ GvcMixerStream *stream,
+ const char *name)
+{
+ const char *t_name;
+
+ t_name = gvc_mixer_stream_get_name (stream);
+
+ if (t_name != NULL
+ && name != NULL
+ && strcmp (t_name, name) == 0) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static GvcMixerStream *
+find_stream_for_name (GvcMixerControl *control,
+ const char *name)
+{
+ GvcMixerStream *stream;
+
+ stream = g_hash_table_find (control->priv->all_streams,
+ (GHRFunc)_stream_has_name,
+ (char *)name);
+ return stream;
+}
+
+static void
+update_default_source_from_name (GvcMixerControl *control,
+ const char *name)
+{
+ gboolean changed;
+
+ if ((control->priv->default_source_name == NULL
+ && name != NULL)
+ || (control->priv->default_source_name != NULL
+ && name == NULL)
+ || strcmp (control->priv->default_source_name, name) != 0) {
+ changed = TRUE;
+ }
+
+ if (changed) {
+ GvcMixerStream *stream;
+
+ g_free (control->priv->default_source_name);
+ control->priv->default_source_name = g_strdup (name);
+
+ stream = find_stream_for_name (control, name);
+ _set_default_source (control, stream);
+ }
+}
+
+static void
+update_default_sink_from_name (GvcMixerControl *control,
+ const char *name)
+{
+ gboolean changed;
+
+ if ((control->priv->default_sink_name == NULL
+ && name != NULL)
+ || (control->priv->default_sink_name != NULL
+ && name == NULL)
+ || strcmp (control->priv->default_sink_name, name) != 0) {
+ changed = TRUE;
+ }
+
+ if (changed) {
+ GvcMixerStream *stream;
+ g_free (control->priv->default_sink_name);
+ control->priv->default_sink_name = g_strdup (name);
+
+ stream = find_stream_for_name (control, name);
+ _set_default_sink (control, stream);
+ }
+}
+
+static void
+update_server (GvcMixerControl *control,
+ const pa_server_info *info)
+{
+ if (info->default_source_name != NULL) {
+ update_default_source_from_name (control, info->default_source_name);
+ }
+ if (info->default_sink_name != NULL) {
+ update_default_sink_from_name (control, info->default_sink_name);
+ }
+}
+
+static void
+remove_stream (GvcMixerControl *control,
+ GvcMixerStream *stream)
+{
+ guint id;
+
+ g_object_ref (stream);
+
+ id = gvc_mixer_stream_get_id (stream);
+
+ if (id == control->priv->default_sink_id) {
+ _set_default_sink (control, NULL);
+ } else if (id == control->priv->default_source_id) {
+ _set_default_source (control, NULL);
+ }
+
+ g_hash_table_remove (control->priv->all_streams,
+ GUINT_TO_POINTER (id));
+ g_signal_emit (G_OBJECT (control),
+ signals[STREAM_REMOVED],
+ 0,
+ gvc_mixer_stream_get_id (stream));
+ g_object_unref (stream);
+}
+
+static void
+add_stream (GvcMixerControl *control,
+ GvcMixerStream *stream)
+{
+ g_hash_table_insert (control->priv->all_streams,
+ GUINT_TO_POINTER (gvc_mixer_stream_get_id (stream)),
+ stream);
+ g_signal_emit (G_OBJECT (control),
+ signals[STREAM_ADDED],
+ 0,
+ gvc_mixer_stream_get_id (stream));
+}
+
+static void
+update_sink (GvcMixerControl *control,
+ const pa_sink_info *info)
+{
+ GvcMixerStream *stream;
+ gboolean is_new;
+ pa_volume_t max_volume;
+ GvcChannelMap *map;
+ char map_buff[PA_CHANNEL_MAP_SNPRINT_MAX];
+
+ pa_channel_map_snprint (map_buff, PA_CHANNEL_MAP_SNPRINT_MAX, &info->channel_map);
+#if 1
+ g_debug ("Updating sink: index=%u name='%s' description='%s' map='%s'",
+ info->index,
+ info->name,
+ info->description,
+ map_buff);
+#endif
+
+ map = NULL;
+ is_new = FALSE;
+ stream = g_hash_table_lookup (control->priv->sinks,
+ GUINT_TO_POINTER (info->index));
+ if (stream == NULL) {
+#if PA_MICRO > 15
+ GList *list = NULL;
+ guint i;
+#endif /* PA_MICRO > 15 */
+
+ map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
+ stream = gvc_mixer_sink_new (control->priv->pa_context,
+ info->index,
+ map);
+#if PA_MICRO > 15
+ for (i = 0; i < info->n_ports; i++) {
+ GvcMixerStreamPort *port;
+
+ port = g_new0 (GvcMixerStreamPort, 1);
+ port->port = g_strdup (info->ports[i]->name);
+ port->human_port = g_strdup (info->ports[i]->description);
+ port->priority = info->ports[i]->priority;
+ list = g_list_prepend (list, port);
+ }
+ gvc_mixer_stream_set_ports (stream, list);
+#endif /* PA_MICRO > 15 */
+ g_object_unref (map);
+ is_new = TRUE;
+ } else if (gvc_mixer_stream_is_running (stream)) {
+ /* Ignore events if volume changes are outstanding */
+ g_debug ("Ignoring event, volume changes are outstanding");
+ return;
+ }
+
+ max_volume = pa_cvolume_max (&info->volume);
+ gvc_mixer_stream_set_name (stream, info->name);
+ gvc_mixer_stream_set_card_index (stream, info->card);
+ gvc_mixer_stream_set_description (stream, info->description);
+ gvc_mixer_stream_set_icon_name (stream, "audio-card");
+ gvc_mixer_stream_set_volume (stream, (guint)max_volume);
+ gvc_mixer_stream_set_is_muted (stream, info->mute);
+ gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME));
+ gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume);
+#if PA_MICRO > 15
+ if (info->active_port != NULL)
+ gvc_mixer_stream_set_port (stream, info->active_port->name);
+#endif /* PA_MICRO > 15 */
+
+ if (is_new) {
+ g_hash_table_insert (control->priv->sinks,
+ GUINT_TO_POINTER (info->index),
+ g_object_ref (stream));
+ add_stream (control, stream);
+ }
+
+ if (control->priv->default_sink_name != NULL
+ && info->name != NULL
+ && strcmp (control->priv->default_sink_name, info->name) == 0) {
+ _set_default_sink (control, stream);
+ }
+
+ if (map == NULL)
+ map = (GvcChannelMap *) gvc_mixer_stream_get_channel_map (stream);
+ gvc_channel_map_volume_changed (map, &info->volume, FALSE);
+}
+
+static void
+update_source (GvcMixerControl *control,
+ const pa_source_info *info)
+{
+ GvcMixerStream *stream;
+ gboolean is_new;
+ pa_volume_t max_volume;
+
+#if 1
+ g_debug ("Updating source: index=%u name='%s' description='%s'",
+ info->index,
+ info->name,
+ info->description);
+#endif
+
+ /* completely ignore monitors, they're not real sources */
+ if (info->monitor_of_sink != PA_INVALID_INDEX) {
+ return;
+ }
+
+ is_new = FALSE;
+
+ stream = g_hash_table_lookup (control->priv->sources,
+ GUINT_TO_POINTER (info->index));
+ if (stream == NULL) {
+#if PA_MICRO > 15
+ GList *list = NULL;
+ guint i;
+#endif /* PA_MICRO > 15 */
+ GvcChannelMap *map;
+
+ map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
+ stream = gvc_mixer_source_new (control->priv->pa_context,
+ info->index,
+ map);
+#if PA_MICRO > 15
+ for (i = 0; i < info->n_ports; i++) {
+ GvcMixerStreamPort *port;
+
+ port = g_new0 (GvcMixerStreamPort, 1);
+ port->port = g_strdup (info->ports[i]->name);
+ port->human_port = g_strdup (info->ports[i]->description);
+ port->priority = info->ports[i]->priority;
+ list = g_list_prepend (list, port);
+ }
+ gvc_mixer_stream_set_ports (stream, list);
+#endif /* PA_MICRO > 15 */
+
+ g_object_unref (map);
+ is_new = TRUE;
+ } else if (gvc_mixer_stream_is_running (stream)) {
+ /* Ignore events if volume changes are outstanding */
+ g_debug ("Ignoring event, volume changes are outstanding");
+ return;
+ }
+
+ max_volume = pa_cvolume_max (&info->volume);
+
+ gvc_mixer_stream_set_name (stream, info->name);
+ gvc_mixer_stream_set_card_index (stream, info->card);
+ gvc_mixer_stream_set_description (stream, info->description);
+ gvc_mixer_stream_set_icon_name (stream, "audio-input-microphone");
+ gvc_mixer_stream_set_volume (stream, (guint)max_volume);
+ gvc_mixer_stream_set_is_muted (stream, info->mute);
+ gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SOURCE_DECIBEL_VOLUME));
+ gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume);
+#if PA_MICRO > 15
+ if (info->active_port != NULL)
+ gvc_mixer_stream_set_port (stream, info->active_port->name);
+#endif /* PA_MICRO > 15 */
+
+ if (is_new) {
+ g_hash_table_insert (control->priv->sources,
+ GUINT_TO_POINTER (info->index),
+ g_object_ref (stream));
+ add_stream (control, stream);
+ }
+
+ if (control->priv->default_source_name != NULL
+ && info->name != NULL
+ && strcmp (control->priv->default_source_name, info->name) == 0) {
+ _set_default_source (control, stream);
+ }
+}
+
+static void
+set_icon_name_from_proplist (GvcMixerStream *stream,
+ pa_proplist *l,
+ const char *default_icon_name)
+{
+ const char *t;
+
+ if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ICON_NAME))) {
+ goto finish;
+ }
+
+ if ((t = pa_proplist_gets (l, PA_PROP_WINDOW_ICON_NAME))) {
+ goto finish;
+ }
+
+ if ((t = pa_proplist_gets (l, PA_PROP_APPLICATION_ICON_NAME))) {
+ goto finish;
+ }
+
+ if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ROLE))) {
+
+ if (strcmp (t, "video") == 0 ||
+ strcmp (t, "phone") == 0) {
+ goto finish;
+ }
+
+ if (strcmp (t, "music") == 0) {
+ t = "audio";
+ goto finish;
+ }
+
+ if (strcmp (t, "game") == 0) {
+ t = "applications-games";
+ goto finish;
+ }
+
+ if (strcmp (t, "event") == 0) {
+ t = "dialog-information";
+ goto finish;
+ }
+ }
+
+ t = default_icon_name;
+
+ finish:
+ gvc_mixer_stream_set_icon_name (stream, t);
+}
+
+static void
+set_is_event_stream_from_proplist (GvcMixerStream *stream,
+ pa_proplist *l)
+{
+ const char *t;
+ gboolean is_event_stream;
+
+ is_event_stream = FALSE;
+
+ if ((t = pa_proplist_gets (l, PA_PROP_MEDIA_ROLE))) {
+ if (g_str_equal (t, "event"))
+ is_event_stream = TRUE;
+ }
+
+ gvc_mixer_stream_set_is_event_stream (stream, is_event_stream);
+}
+
+static void
+set_application_id_from_proplist (GvcMixerStream *stream,
+ pa_proplist *l)
+{
+ const char *t;
+
+ if ((t = pa_proplist_gets (l, PA_PROP_APPLICATION_ID))) {
+ gvc_mixer_stream_set_application_id (stream, t);
+ }
+}
+
+static void
+update_sink_input (GvcMixerControl *control,
+ const pa_sink_input_info *info)
+{
+ GvcMixerStream *stream;
+ gboolean is_new;
+ pa_volume_t max_volume;
+ const char *name;
+
+#if 0
+ g_debug ("Updating sink input: index=%u name='%s' client=%u sink=%u",
+ info->index,
+ info->name,
+ info->client,
+ info->sink);
+#endif
+
+ is_new = FALSE;
+
+ stream = g_hash_table_lookup (control->priv->sink_inputs,
+ GUINT_TO_POINTER (info->index));
+ if (stream == NULL) {
+ GvcChannelMap *map;
+ map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
+ stream = gvc_mixer_sink_input_new (control->priv->pa_context,
+ info->index,
+ map);
+ g_object_unref (map);
+ is_new = TRUE;
+ } else if (gvc_mixer_stream_is_running (stream)) {
+ /* Ignore events if volume changes are outstanding */
+ g_debug ("Ignoring event, volume changes are outstanding");
+ return;
+ }
+
+ max_volume = pa_cvolume_max (&info->volume);
+
+ name = (const char *)g_hash_table_lookup (control->priv->clients,
+ GUINT_TO_POINTER (info->client));
+ gvc_mixer_stream_set_name (stream, name);
+ gvc_mixer_stream_set_description (stream, info->name);
+
+ set_application_id_from_proplist (stream, info->proplist);
+ set_is_event_stream_from_proplist (stream, info->proplist);
+ set_icon_name_from_proplist (stream, info->proplist, "applications-multimedia");
+ gvc_mixer_stream_set_volume (stream, (guint)max_volume);
+ gvc_mixer_stream_set_is_muted (stream, info->mute);
+ gvc_mixer_stream_set_is_virtual (stream, info->client == PA_INVALID_INDEX);
+
+ if (is_new) {
+ g_hash_table_insert (control->priv->sink_inputs,
+ GUINT_TO_POINTER (info->index),
+ g_object_ref (stream));
+ add_stream (control, stream);
+ }
+}
+
+static void
+update_source_output (GvcMixerControl *control,
+ const pa_source_output_info *info)
+{
+ GvcMixerStream *stream;
+ gboolean is_new;
+ const char *name;
+
+#if 1
+ g_debug ("Updating source output: index=%u name='%s' client=%u source=%u",
+ info->index,
+ info->name,
+ info->client,
+ info->source);
+#endif
+
+ is_new = FALSE;
+ stream = g_hash_table_lookup (control->priv->source_outputs,
+ GUINT_TO_POINTER (info->index));
+ if (stream == NULL) {
+ GvcChannelMap *map;
+ map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map);
+ stream = gvc_mixer_source_output_new (control->priv->pa_context,
+ info->index,
+ map);
+ g_object_unref (map);
+ is_new = TRUE;
+ }
+
+ name = (const char *)g_hash_table_lookup (control->priv->clients,
+ GUINT_TO_POINTER (info->client));
+
+ gvc_mixer_stream_set_name (stream, name);
+ gvc_mixer_stream_set_description (stream, info->name);
+ set_application_id_from_proplist (stream, info->proplist);
+ set_is_event_stream_from_proplist (stream, info->proplist);
+ set_icon_name_from_proplist (stream, info->proplist, "audio-input-microphone");
+
+ if (is_new) {
+ g_hash_table_insert (control->priv->source_outputs,
+ GUINT_TO_POINTER (info->index),
+ g_object_ref (stream));
+ add_stream (control, stream);
+ }
+}
+
+static void
+update_client (GvcMixerControl *control,
+ const pa_client_info *info)
+{
+#if 1
+ g_debug ("Updating client: index=%u name='%s'",
+ info->index,
+ info->name);
+#endif
+ g_hash_table_insert (control->priv->clients,
+ GUINT_TO_POINTER (info->index),
+ g_strdup (info->name));
+}
+
+static char *
+card_num_streams_to_status (guint sinks,
+ guint sources)
+{
+ char *sinks_str;
+ char *sources_str;
+ char *ret;
+
+ if (sinks == 0 && sources == 0) {
+ /* translators:
+ * The device has been disabled */
+ return g_strdup (_("Disabled"));
+ }
+ if (sinks == 0) {
+ sinks_str = NULL;
+ } else {
+ /* translators:
+ * The number of sound outputs on a particular device */
+ sinks_str = g_strdup_printf (ngettext ("%u Output",
+ "%u Outputs",
+ sinks),
+ sinks);
+ }
+ if (sources == 0) {
+ sources_str = NULL;
+ } else {
+ /* translators:
+ * The number of sound inputs on a particular device */
+ sources_str = g_strdup_printf (ngettext ("%u Input",
+ "%u Inputs",
+ sources),
+ sources);
+ }
+ if (sources_str == NULL)
+ return sinks_str;
+ if (sinks_str == NULL)
+ return sources_str;
+ ret = g_strdup_printf ("%s / %s", sinks_str, sources_str);
+ g_free (sinks_str);
+ g_free (sources_str);
+ return ret;
+}
+
+static void
+update_card (GvcMixerControl *control,
+ const pa_card_info *info)
+{
+ GvcMixerCard *card;
+ gboolean is_new;
+#if 1
+ guint i;
+ const char *key;
+ void *state;
+
+ g_debug ("Udpating card %s (index: %u driver: %s):",
+ info->name, info->index, info->driver);
+
+ for (i = 0; i < info->n_profiles; i++) {
+ struct pa_card_profile_info pi = info->profiles[i];
+ gboolean is_default;
+
+ is_default = (g_strcmp0 (pi.name, info->active_profile->name) == 0);
+ g_debug ("\tProfile '%s': %d sources %d sinks%s",
+ pi.name, pi.n_sources, pi.n_sinks,
+ is_default ? " (Current)" : "");
+ }
+ state = NULL;
+ key = pa_proplist_iterate (info->proplist, &state);
+ while (key != NULL) {
+ g_debug ("\tProperty: '%s' = '%s'",
+ key, pa_proplist_gets (info->proplist, key));
+ key = pa_proplist_iterate (info->proplist, &state);
+ }
+#endif
+ card = g_hash_table_lookup (control->priv->cards,
+ GUINT_TO_POINTER (info->index));
+ if (card == NULL) {
+ GList *list = NULL;
+
+ for (i = 0; i < info->n_profiles; i++) {
+ struct pa_card_profile_info pi = info->profiles[i];
+ GvcMixerCardProfile *profile;
+
+ profile = g_new0 (GvcMixerCardProfile, 1);
+ profile->profile = g_strdup (pi.name);
+ profile->human_profile = g_strdup (pi.description);
+ profile->status = card_num_streams_to_status (pi.n_sinks, pi.n_sources);
+ profile->n_sinks = pi.n_sinks;
+ profile->n_sources = pi.n_sources;
+ profile->priority = pi.priority;
+ list = g_list_prepend (list, profile);
+ }
+ card = gvc_mixer_card_new (control->priv->pa_context,
+ info->index);
+ gvc_mixer_card_set_profiles (card, list);
+ is_new = TRUE;
+ }
+
+ gvc_mixer_card_set_name (card, pa_proplist_gets (info->proplist, "device.description"));
+ gvc_mixer_card_set_icon_name (card, pa_proplist_gets (info->proplist, "device.icon_name"));
+ gvc_mixer_card_set_profile (card, info->active_profile->name);
+
+ if (is_new) {
+ g_hash_table_insert (control->priv->cards,
+ GUINT_TO_POINTER (info->index),
+ g_object_ref (card));
+ }
+ g_signal_emit (G_OBJECT (control),
+ signals[CARD_ADDED],
+ 0,
+ info->index);
+}
+
+static void
+_pa_context_get_sink_info_cb (pa_context *context,
+ const pa_sink_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ if (pa_context_errno (context) == PA_ERR_NOENTITY) {
+ return;
+ }
+
+ g_warning ("Sink callback failure");
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ return;
+ }
+
+ update_sink (control, i);
+}
+
+static void
+_pa_context_get_source_info_cb (pa_context *context,
+ const pa_source_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ if (pa_context_errno (context) == PA_ERR_NOENTITY) {
+ return;
+ }
+
+ g_warning ("Source callback failure");
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ return;
+ }
+
+ update_source (control, i);
+}
+
+static void
+_pa_context_get_sink_input_info_cb (pa_context *context,
+ const pa_sink_input_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ if (pa_context_errno (context) == PA_ERR_NOENTITY) {
+ return;
+ }
+
+ g_warning ("Sink input callback failure");
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ return;
+ }
+
+ update_sink_input (control, i);
+}
+
+static void
+_pa_context_get_source_output_info_cb (pa_context *context,
+ const pa_source_output_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ if (pa_context_errno (context) == PA_ERR_NOENTITY) {
+ return;
+ }
+
+ g_warning ("Source output callback failure");
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ return;
+ }
+
+ update_source_output (control, i);
+}
+
+static void
+_pa_context_get_client_info_cb (pa_context *context,
+ const pa_client_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ if (pa_context_errno (context) == PA_ERR_NOENTITY) {
+ return;
+ }
+
+ g_warning ("Client callback failure");
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ return;
+ }
+
+ update_client (control, i);
+}
+
+static void
+_pa_context_get_card_info_by_index_cb (pa_context *context,
+ const pa_card_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ if (pa_context_errno (context) == PA_ERR_NOENTITY)
+ return;
+
+ g_warning ("Card callback failure");
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ return;
+ }
+
+ update_card (control, i);
+}
+
+static void
+_pa_context_get_server_info_cb (pa_context *context,
+ const pa_server_info *i,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (i == NULL) {
+ g_warning ("Server info callback failure");
+ return;
+ }
+
+ update_server (control, i);
+ dec_outstanding (control);
+}
+
+static void
+remove_event_role_stream (GvcMixerControl *control)
+{
+ g_debug ("Removing event role");
+}
+
+static void
+update_event_role_stream (GvcMixerControl *control,
+ const pa_ext_stream_restore_info *info)
+{
+ GvcMixerStream *stream;
+ gboolean is_new;
+ pa_volume_t max_volume;
+
+ if (strcmp (info->name, "sink-input-by-media-role:event") != 0) {
+ return;
+ }
+
+#if 0
+ g_debug ("Updating event role: name='%s' device='%s'",
+ info->name,
+ info->device);
+#endif
+
+ is_new = FALSE;
+
+ if (!control->priv->event_sink_input_is_set) {
+ pa_channel_map pa_map;
+ GvcChannelMap *map;
+
+ pa_map.channels = 1;
+ pa_map.map[0] = PA_CHANNEL_POSITION_MONO;
+ map = gvc_channel_map_new_from_pa_channel_map (&pa_map);
+
+ stream = gvc_mixer_event_role_new (control->priv->pa_context,
+ info->device,
+ map);
+ control->priv->event_sink_input_id = gvc_mixer_stream_get_id (stream);
+ control->priv->event_sink_input_is_set = TRUE;
+
+ is_new = TRUE;
+ } else {
+ stream = g_hash_table_lookup (control->priv->all_streams,
+ GUINT_TO_POINTER (control->priv->event_sink_input_id));
+ }
+
+ max_volume = pa_cvolume_max (&info->volume);
+
+ gvc_mixer_stream_set_name (stream, _("System Sounds"));
+ gvc_mixer_stream_set_icon_name (stream, "multimedia-volume-control");
+ gvc_mixer_stream_set_volume (stream, (guint)max_volume);
+ gvc_mixer_stream_set_is_muted (stream, info->mute);
+
+ if (is_new) {
+ add_stream (control, stream);
+ }
+}
+
+static void
+_pa_ext_stream_restore_read_cb (pa_context *context,
+ const pa_ext_stream_restore_info *i,
+ int eol,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ if (eol < 0) {
+ g_debug ("Failed to initialized stream_restore extension: %s",
+ pa_strerror (pa_context_errno (context)));
+ remove_event_role_stream (control);
+ return;
+ }
+
+ if (eol > 0) {
+ dec_outstanding (control);
+ /* If we don't have an event stream to restore, then
+ * set one up with a default 100% volume */
+ if (!control->priv->event_sink_input_is_set) {
+ pa_ext_stream_restore_info info;
+
+ memset (&info, 0, sizeof(info));
+ info.name = "sink-input-by-media-role:event";
+ info.volume.channels = 1;
+ info.volume.values[0] = PA_VOLUME_NORM;
+ update_event_role_stream (control, &info);
+ }
+ return;
+ }
+
+ update_event_role_stream (control, i);
+}
+
+static void
+_pa_ext_stream_restore_subscribe_cb (pa_context *context,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+ pa_operation *o;
+
+ o = pa_ext_stream_restore_read (context,
+ _pa_ext_stream_restore_read_cb,
+ control);
+ if (o == NULL) {
+ g_warning ("pa_ext_stream_restore_read() failed");
+ return;
+ }
+
+ pa_operation_unref (o);
+}
+
+static void
+req_update_server_info (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ o = pa_context_get_server_info (control->priv->pa_context,
+ _pa_context_get_server_info_cb,
+ control);
+ if (o == NULL) {
+ g_warning ("pa_context_get_server_info() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+req_update_client_info (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ if (index < 0) {
+ o = pa_context_get_client_info_list (control->priv->pa_context,
+ _pa_context_get_client_info_cb,
+ control);
+ } else {
+ o = pa_context_get_client_info (control->priv->pa_context,
+ index,
+ _pa_context_get_client_info_cb,
+ control);
+ }
+
+ if (o == NULL) {
+ g_warning ("pa_context_client_info_list() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+req_update_card (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ if (index < 0) {
+ o = pa_context_get_card_info_list (control->priv->pa_context,
+ _pa_context_get_card_info_by_index_cb,
+ control);
+ } else {
+ o = pa_context_get_card_info_by_index (control->priv->pa_context,
+ index,
+ _pa_context_get_card_info_by_index_cb,
+ control);
+ }
+
+ if (o == NULL) {
+ g_warning ("pa_context_get_card_info_by_index() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+req_update_sink_info (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ if (index < 0) {
+ o = pa_context_get_sink_info_list (control->priv->pa_context,
+ _pa_context_get_sink_info_cb,
+ control);
+ } else {
+ o = pa_context_get_sink_info_by_index (control->priv->pa_context,
+ index,
+ _pa_context_get_sink_info_cb,
+ control);
+ }
+
+ if (o == NULL) {
+ g_warning ("pa_context_get_sink_info_list() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+req_update_source_info (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ if (index < 0) {
+ o = pa_context_get_source_info_list (control->priv->pa_context,
+ _pa_context_get_source_info_cb,
+ control);
+ } else {
+ o = pa_context_get_source_info_by_index(control->priv->pa_context,
+ index,
+ _pa_context_get_source_info_cb,
+ control);
+ }
+
+ if (o == NULL) {
+ g_warning ("pa_context_get_source_info_list() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+req_update_sink_input_info (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ if (index < 0) {
+ o = pa_context_get_sink_input_info_list (control->priv->pa_context,
+ _pa_context_get_sink_input_info_cb,
+ control);
+ } else {
+ o = pa_context_get_sink_input_info (control->priv->pa_context,
+ index,
+ _pa_context_get_sink_input_info_cb,
+ control);
+ }
+
+ if (o == NULL) {
+ g_warning ("pa_context_get_sink_input_info_list() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+req_update_source_output_info (GvcMixerControl *control,
+ int index)
+{
+ pa_operation *o;
+
+ if (index < 0) {
+ o = pa_context_get_source_output_info_list (control->priv->pa_context,
+ _pa_context_get_source_output_info_cb,
+ control);
+ } else {
+ o = pa_context_get_source_output_info (control->priv->pa_context,
+ index,
+ _pa_context_get_source_output_info_cb,
+ control);
+ }
+
+ if (o == NULL) {
+ g_warning ("pa_context_get_source_output_info_list() failed");
+ return;
+ }
+ pa_operation_unref (o);
+}
+
+static void
+remove_client (GvcMixerControl *control,
+ guint index)
+{
+ g_hash_table_remove (control->priv->clients,
+ GUINT_TO_POINTER (index));
+}
+
+static void
+remove_card (GvcMixerControl *control,
+ guint index)
+{
+ g_hash_table_remove (control->priv->cards,
+ GUINT_TO_POINTER (index));
+
+ g_signal_emit (G_OBJECT (control),
+ signals[CARD_REMOVED],
+ 0,
+ index);
+}
+
+static void
+remove_sink (GvcMixerControl *control,
+ guint index)
+{
+ GvcMixerStream *stream;
+
+#if 0
+ g_debug ("Removing sink: index=%u", index);
+#endif
+
+ stream = g_hash_table_lookup (control->priv->sinks,
+ GUINT_TO_POINTER (index));
+ if (stream == NULL) {
+ return;
+ }
+ g_hash_table_remove (control->priv->sinks,
+ GUINT_TO_POINTER (index));
+
+ remove_stream (control, stream);
+}
+
+static void
+remove_source (GvcMixerControl *control,
+ guint index)
+{
+ GvcMixerStream *stream;
+
+#if 0
+ g_debug ("Removing source: index=%u", index);
+#endif
+
+ stream = g_hash_table_lookup (control->priv->sources,
+ GUINT_TO_POINTER (index));
+ if (stream == NULL) {
+ return;
+ }
+ g_hash_table_remove (control->priv->sources,
+ GUINT_TO_POINTER (index));
+
+ remove_stream (control, stream);
+}
+
+static void
+remove_sink_input (GvcMixerControl *control,
+ guint index)
+{
+ GvcMixerStream *stream;
+
+#if 0
+ g_debug ("Removing sink input: index=%u", index);
+#endif
+ stream = g_hash_table_lookup (control->priv->sink_inputs,
+ GUINT_TO_POINTER (index));
+ if (stream == NULL) {
+ return;
+ }
+ g_hash_table_remove (control->priv->sink_inputs,
+ GUINT_TO_POINTER (index));
+
+ remove_stream (control, stream);
+}
+
+static void
+remove_source_output (GvcMixerControl *control,
+ guint index)
+{
+ GvcMixerStream *stream;
+
+#if 0
+ g_debug ("Removing source output: index=%u", index);
+#endif
+
+ stream = g_hash_table_lookup (control->priv->source_outputs,
+ GUINT_TO_POINTER (index));
+ if (stream == NULL) {
+ return;
+ }
+ g_hash_table_remove (control->priv->source_outputs,
+ GUINT_TO_POINTER (index));
+
+ remove_stream (control, stream);
+}
+
+static void
+_pa_context_subscribe_cb (pa_context *context,
+ pa_subscription_event_type_t t,
+ uint32_t index,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) {
+ case PA_SUBSCRIPTION_EVENT_SINK:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ remove_sink (control, index);
+ } else {
+ req_update_sink_info (control, index);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SOURCE:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ remove_source (control, index);
+ } else {
+ req_update_source_info (control, index);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ remove_sink_input (control, index);
+ } else {
+ req_update_sink_input_info (control, index);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ remove_source_output (control, index);
+ } else {
+ req_update_source_output_info (control, index);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_CLIENT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ remove_client (control, index);
+ } else {
+ req_update_client_info (control, index);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SERVER:
+ req_update_server_info (control, index);
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_CARD:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ remove_card (control, index);
+ } else {
+ req_update_card (control, index);
+ }
+ break;
+ }
+}
+
+static void
+gvc_mixer_control_ready (GvcMixerControl *control)
+{
+ pa_operation *o;
+
+ pa_context_set_subscribe_callback (control->priv->pa_context,
+ _pa_context_subscribe_cb,
+ control);
+ o = pa_context_subscribe (control->priv->pa_context,
+ (pa_subscription_mask_t)
+ (PA_SUBSCRIPTION_MASK_SINK|
+ PA_SUBSCRIPTION_MASK_SOURCE|
+ PA_SUBSCRIPTION_MASK_SINK_INPUT|
+ PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT|
+ PA_SUBSCRIPTION_MASK_CLIENT|
+ PA_SUBSCRIPTION_MASK_SERVER|
+ PA_SUBSCRIPTION_MASK_CARD),
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_subscribe() failed");
+ return;
+ }
+ pa_operation_unref (o);
+
+ req_update_server_info (control, -1);
+ req_update_client_info (control, -1);
+ req_update_sink_info (control, -1);
+ req_update_source_info (control, -1);
+ req_update_sink_input_info (control, -1);
+ req_update_source_output_info (control, -1);
+ req_update_card (control, -1);
+
+ control->priv->n_outstanding = 6;
+
+ /* This call is not always supported */
+ o = pa_ext_stream_restore_read (control->priv->pa_context,
+ _pa_ext_stream_restore_read_cb,
+ control);
+ if (o != NULL) {
+ pa_operation_unref (o);
+ control->priv->n_outstanding++;
+
+ pa_ext_stream_restore_set_subscribe_cb (control->priv->pa_context,
+ _pa_ext_stream_restore_subscribe_cb,
+ control);
+
+ o = pa_ext_stream_restore_subscribe (control->priv->pa_context,
+ 1,
+ NULL,
+ NULL);
+ if (o != NULL) {
+ pa_operation_unref (o);
+ }
+
+ } else {
+ g_debug ("Failed to initialized stream_restore extension: %s",
+ pa_strerror (pa_context_errno (control->priv->pa_context)));
+ }
+}
+
+static void
+gvc_mixer_new_pa_context (GvcMixerControl *self)
+{
+ pa_proplist *proplist;
+
+ g_return_if_fail (self);
+ g_return_if_fail (!self->priv->pa_context);
+
+ proplist = pa_proplist_new ();
+ pa_proplist_sets (proplist,
+ PA_PROP_APPLICATION_NAME,
+ self->priv->name);
+ pa_proplist_sets (proplist,
+ PA_PROP_APPLICATION_ID,
+ "org.mate.VolumeControl");
+ pa_proplist_sets (proplist,
+ PA_PROP_APPLICATION_ICON_NAME,
+ "multimedia-volume-control");
+ pa_proplist_sets (proplist,
+ PA_PROP_APPLICATION_VERSION,
+ PACKAGE_VERSION);
+
+ self->priv->pa_context = pa_context_new_with_proplist (self->priv->pa_api, NULL, proplist);
+
+ pa_proplist_free (proplist);
+ g_assert (self->priv->pa_context);
+}
+
+static void
+remove_all_streams (GvcMixerControl *control, GHashTable *hash_table)
+{
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_hash_table_iter_init (&iter, hash_table);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ remove_stream (control, value);
+ g_hash_table_iter_remove (&iter);
+ }
+}
+
+static gboolean
+idle_reconnect (gpointer data)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (data);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_return_val_if_fail (control, FALSE);
+
+ if (control->priv->pa_context) {
+ pa_context_unref (control->priv->pa_context);
+ control->priv->pa_context = NULL;
+ gvc_mixer_new_pa_context (control);
+ }
+
+ remove_all_streams (control, control->priv->sinks);
+ remove_all_streams (control, control->priv->sources);
+ remove_all_streams (control, control->priv->sink_inputs);
+ remove_all_streams (control, control->priv->source_outputs);
+
+ g_hash_table_iter_init (&iter, control->priv->clients);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ g_hash_table_iter_remove (&iter);
+
+ gvc_mixer_control_open (control); /* cannot fail */
+
+ control->priv->reconnect_id = 0;
+ return FALSE;
+}
+
+static void
+_pa_context_state_cb (pa_context *context,
+ void *userdata)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (userdata);
+
+ switch (pa_context_get_state (context)) {
+ case PA_CONTEXT_UNCONNECTED:
+ case PA_CONTEXT_CONNECTING:
+ case PA_CONTEXT_AUTHORIZING:
+ case PA_CONTEXT_SETTING_NAME:
+ break;
+
+ case PA_CONTEXT_READY:
+ gvc_mixer_control_ready (control);
+ break;
+
+ case PA_CONTEXT_FAILED:
+ g_warning ("Connection failed, reconnecting...");
+ if (control->priv->reconnect_id == 0)
+ control->priv->reconnect_id = g_timeout_add_seconds (RECONNECT_DELAY, idle_reconnect, control);
+ break;
+
+ case PA_CONTEXT_TERMINATED:
+ default:
+ /* FIXME: */
+ break;
+ }
+}
+
+gboolean
+gvc_mixer_control_open (GvcMixerControl *control)
+{
+ int res;
+
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
+ g_return_val_if_fail (control->priv->pa_context != NULL, FALSE);
+ g_return_val_if_fail (pa_context_get_state (control->priv->pa_context) == PA_CONTEXT_UNCONNECTED, FALSE);
+
+ pa_context_set_state_callback (control->priv->pa_context,
+ _pa_context_state_cb,
+ control);
+
+ g_signal_emit (G_OBJECT (control), signals[CONNECTING], 0);
+ res = pa_context_connect (control->priv->pa_context, NULL, (pa_context_flags_t) PA_CONTEXT_NOFAIL, NULL);
+ if (res < 0) {
+ g_warning ("Failed to connect context: %s",
+ pa_strerror (pa_context_errno (control->priv->pa_context)));
+ }
+
+ return res;
+}
+
+gboolean
+gvc_mixer_control_close (GvcMixerControl *control)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE);
+ g_return_val_if_fail (control->priv->pa_context != NULL, FALSE);
+
+ pa_context_disconnect (control->priv->pa_context);
+ return TRUE;
+}
+
+static void
+gvc_mixer_control_dispose (GObject *object)
+{
+ GvcMixerControl *control = GVC_MIXER_CONTROL (object);
+
+ if (control->priv->pa_context != NULL) {
+ pa_context_unref (control->priv->pa_context);
+ control->priv->pa_context = NULL;
+ }
+
+ if (control->priv->default_source_name != NULL) {
+ g_free (control->priv->default_source_name);
+ control->priv->default_source_name = NULL;
+ }
+ if (control->priv->default_sink_name != NULL) {
+ g_free (control->priv->default_sink_name);
+ control->priv->default_sink_name = NULL;
+ }
+
+ if (control->priv->pa_mainloop != NULL) {
+ pa_glib_mainloop_free (control->priv->pa_mainloop);
+ control->priv->pa_mainloop = NULL;
+ }
+
+ if (control->priv->all_streams != NULL) {
+ g_hash_table_destroy (control->priv->all_streams);
+ control->priv->all_streams = NULL;
+ }
+
+ if (control->priv->sinks != NULL) {
+ g_hash_table_destroy (control->priv->sinks);
+ control->priv->sinks = NULL;
+ }
+ if (control->priv->sources != NULL) {
+ g_hash_table_destroy (control->priv->sources);
+ control->priv->sources = NULL;
+ }
+ if (control->priv->sink_inputs != NULL) {
+ g_hash_table_destroy (control->priv->sink_inputs);
+ control->priv->sink_inputs = NULL;
+ }
+ if (control->priv->source_outputs != NULL) {
+ g_hash_table_destroy (control->priv->source_outputs);
+ control->priv->source_outputs = NULL;
+ }
+ if (control->priv->clients != NULL) {
+ g_hash_table_destroy (control->priv->clients);
+ control->priv->clients = NULL;
+ }
+ if (control->priv->cards != NULL) {
+ g_hash_table_destroy (control->priv->cards);
+ control->priv->cards = NULL;
+ }
+
+ G_OBJECT_CLASS (gvc_mixer_control_parent_class)->dispose (object);
+}
+
+static void
+gvc_mixer_control_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerControl *self = GVC_MIXER_CONTROL (object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+ g_free (self->priv->name);
+ self->priv->name = g_value_dup_string (value);
+ g_object_notify (G_OBJECT (self), "name");
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_mixer_control_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerControl *self = GVC_MIXER_CONTROL (object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+ g_value_set_string (value, self->priv->name);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static GObject *
+gvc_mixer_control_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerControl *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_control_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_CONTROL (object);
+
+ gvc_mixer_new_pa_context (self);
+
+ return object;
+}
+
+static void
+gvc_mixer_control_class_init (GvcMixerControlClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_control_constructor;
+ object_class->dispose = gvc_mixer_control_dispose;
+ object_class->finalize = gvc_mixer_control_finalize;
+ object_class->set_property = gvc_mixer_control_set_property;
+ object_class->get_property = gvc_mixer_control_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "Name to display for this mixer control",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+
+ signals [CONNECTING] =
+ g_signal_new ("connecting",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, connecting),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals [READY] =
+ g_signal_new ("ready",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, ready),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals [STREAM_ADDED] =
+ g_signal_new ("stream-added",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, stream_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+ signals [STREAM_REMOVED] =
+ g_signal_new ("stream-removed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, stream_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+ signals [CARD_ADDED] =
+ g_signal_new ("card-added",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, card_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+ signals [CARD_REMOVED] =
+ g_signal_new ("card-removed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, card_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+ signals [DEFAULT_SINK_CHANGED] =
+ g_signal_new ("default-sink-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, default_sink_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+ signals [DEFAULT_SOURCE_CHANGED] =
+ g_signal_new ("default-source-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GvcMixerControlClass, default_source_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+
+ g_type_class_add_private (klass, sizeof (GvcMixerControlPrivate));
+}
+
+static void
+gvc_mixer_control_init (GvcMixerControl *control)
+{
+ control->priv = GVC_MIXER_CONTROL_GET_PRIVATE (control);
+
+ control->priv->pa_mainloop = pa_glib_mainloop_new (g_main_context_default ());
+ g_assert (control->priv->pa_mainloop);
+
+ control->priv->pa_api = pa_glib_mainloop_get_api (control->priv->pa_mainloop);
+ g_assert (control->priv->pa_api);
+
+ control->priv->all_streams = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
+ control->priv->sinks = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
+ control->priv->sources = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
+ control->priv->sink_inputs = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
+ control->priv->source_outputs = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
+ control->priv->cards = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_object_unref);
+
+ control->priv->clients = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_free);
+}
+
+static void
+gvc_mixer_control_finalize (GObject *object)
+{
+ GvcMixerControl *mixer_control;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_CONTROL (object));
+
+ mixer_control = GVC_MIXER_CONTROL (object);
+ g_free (mixer_control->priv->name);
+ mixer_control->priv->name = NULL;
+
+ g_return_if_fail (mixer_control->priv != NULL);
+ G_OBJECT_CLASS (gvc_mixer_control_parent_class)->finalize (object);
+}
+
+GvcMixerControl *
+gvc_mixer_control_new (const char *name)
+{
+ GObject *control;
+ control = g_object_new (GVC_TYPE_MIXER_CONTROL,
+ "name", name,
+ NULL);
+ return GVC_MIXER_CONTROL (control);
+}
diff --git a/mate-volume-control/src/gvc-mixer-control.h b/mate-volume-control/src/gvc-mixer-control.h
new file mode 100644
index 0000000..d49e5a3
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-control.h
@@ -0,0 +1,98 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_CONTROL_H
+#define __GVC_MIXER_CONTROL_H
+
+#include <glib-object.h>
+#include <pulse/pulseaudio.h>
+#include "gvc-mixer-stream.h"
+#include "gvc-mixer-card.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_CONTROL (gvc_mixer_control_get_type ())
+#define GVC_MIXER_CONTROL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControl))
+#define GVC_MIXER_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
+#define GVC_IS_MIXER_CONTROL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_CONTROL))
+#define GVC_IS_MIXER_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_CONTROL))
+#define GVC_MIXER_CONTROL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
+
+typedef struct GvcMixerControlPrivate GvcMixerControlPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GvcMixerControlPrivate *priv;
+} GvcMixerControl;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ void (*connecting) (GvcMixerControl *control);
+ void (*ready) (GvcMixerControl *control);
+ void (*stream_added) (GvcMixerControl *control,
+ guint id);
+ void (*stream_removed) (GvcMixerControl *control,
+ guint id);
+ void (*card_added) (GvcMixerControl *control,
+ guint id);
+ void (*card_removed) (GvcMixerControl *control,
+ guint id);
+ void (*default_sink_changed) (GvcMixerControl *control,
+ guint id);
+ void (*default_source_changed) (GvcMixerControl *control,
+ guint id);
+} GvcMixerControlClass;
+
+GType gvc_mixer_control_get_type (void);
+
+GvcMixerControl * gvc_mixer_control_new (const char *name);
+
+gboolean gvc_mixer_control_open (GvcMixerControl *control);
+gboolean gvc_mixer_control_close (GvcMixerControl *control);
+gboolean gvc_mixer_control_is_ready (GvcMixerControl *control);
+
+pa_context * gvc_mixer_control_get_pa_context (GvcMixerControl *control);
+GSList * gvc_mixer_control_get_cards (GvcMixerControl *control);
+GSList * gvc_mixer_control_get_streams (GvcMixerControl *control);
+GSList * gvc_mixer_control_get_sinks (GvcMixerControl *control);
+GSList * gvc_mixer_control_get_sources (GvcMixerControl *control);
+GSList * gvc_mixer_control_get_sink_inputs (GvcMixerControl *control);
+GSList * gvc_mixer_control_get_source_outputs (GvcMixerControl *control);
+
+GvcMixerStream * gvc_mixer_control_lookup_stream_id (GvcMixerControl *control,
+ guint id);
+GvcMixerCard * gvc_mixer_control_lookup_card_id (GvcMixerControl *control,
+ guint id);
+
+GvcMixerStream * gvc_mixer_control_get_default_sink (GvcMixerControl *control);
+GvcMixerStream * gvc_mixer_control_get_default_source (GvcMixerControl *control);
+GvcMixerStream * gvc_mixer_control_get_event_sink_input (GvcMixerControl *control);
+
+gboolean gvc_mixer_control_set_default_sink (GvcMixerControl *control,
+ GvcMixerStream *stream);
+gboolean gvc_mixer_control_set_default_source (GvcMixerControl *control,
+ GvcMixerStream *stream);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_CONTROL_H */
diff --git a/mate-volume-control/src/gvc-mixer-dialog.c b/mate-volume-control/src/gvc-mixer-dialog.c
new file mode 100644
index 0000000..cf8fcc1
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-dialog.c
@@ -0,0 +1,2134 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "gvc-channel-bar.h"
+#include "gvc-balance-bar.h"
+#include "gvc-combo-box.h"
+#include "gvc-mixer-control.h"
+#include "gvc-mixer-card.h"
+#include "gvc-mixer-sink.h"
+#include "gvc-mixer-source.h"
+#include "gvc-mixer-source-output.h"
+#include "gvc-mixer-dialog.h"
+#include "gvc-sound-theme-chooser.h"
+#include "gvc-level-bar.h"
+#include "gvc-speaker-test.h"
+
+#define SCALE_SIZE 128
+
+#define GVC_MIXER_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_DIALOG, GvcMixerDialogPrivate))
+
+struct GvcMixerDialogPrivate
+{
+ GvcMixerControl *mixer_control;
+ GHashTable *bars;
+ GtkWidget *notebook;
+ GtkWidget *output_bar;
+ GtkWidget *input_bar;
+ GtkWidget *input_level_bar;
+ GtkWidget *effects_bar;
+ GtkWidget *output_stream_box;
+ GtkWidget *sound_effects_box;
+ GtkWidget *hw_box;
+ GtkWidget *hw_treeview;
+ GtkWidget *hw_settings_box;
+ GtkWidget *hw_profile_combo;
+ GtkWidget *input_box;
+ GtkWidget *output_box;
+ GtkWidget *applications_box;
+ GtkWidget *no_apps_label;
+ GtkWidget *output_treeview;
+ GtkWidget *output_settings_box;
+ GtkWidget *output_balance_bar;
+ GtkWidget *output_fade_bar;
+ GtkWidget *output_lfe_bar;
+ GtkWidget *output_port_combo;
+ GtkWidget *input_treeview;
+ GtkWidget *input_port_combo;
+ GtkWidget *input_settings_box;
+ GtkWidget *sound_theme_chooser;
+ GtkWidget *click_feedback_button;
+ GtkWidget *audible_bell_button;
+ GtkSizeGroup *size_group;
+ GtkSizeGroup *apps_size_group;
+
+ gdouble last_input_peak;
+ guint num_apps;
+};
+
+enum {
+ NAME_COLUMN,
+ DEVICE_COLUMN,
+ ACTIVE_COLUMN,
+ ID_COLUMN,
+ SPEAKERS_COLUMN,
+ NUM_COLUMNS
+};
+
+enum {
+ HW_ID_COLUMN,
+ HW_ICON_COLUMN,
+ HW_NAME_COLUMN,
+ HW_STATUS_COLUMN,
+ HW_PROFILE_COLUMN,
+ HW_PROFILE_HUMAN_COLUMN,
+ HW_SENSITIVE_COLUMN,
+ HW_NUM_COLUMNS
+};
+
+enum
+{
+ PROP_0,
+ PROP_MIXER_CONTROL
+};
+
+static void gvc_mixer_dialog_class_init (GvcMixerDialogClass *klass);
+static void gvc_mixer_dialog_init (GvcMixerDialog *mixer_dialog);
+static void gvc_mixer_dialog_finalize (GObject *object);
+
+static void bar_set_stream (GvcMixerDialog *dialog,
+ GtkWidget *bar,
+ GvcMixerStream *stream);
+
+static void on_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcMixerDialog *dialog);
+
+G_DEFINE_TYPE (GvcMixerDialog, gvc_mixer_dialog, GTK_TYPE_DIALOG)
+
+static void
+update_default_input (GvcMixerDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean ret;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
+ ret = gtk_tree_model_get_iter_first (model, &iter);
+ if (ret == FALSE) {
+ g_debug ("No default input selected or available");
+ return;
+ }
+ do {
+ gboolean toggled;
+ gboolean is_default;
+ guint id;
+ GvcMixerStream *stream;
+
+ gtk_tree_model_get (model, &iter,
+ ID_COLUMN, &id,
+ ACTIVE_COLUMN, &toggled,
+ -1);
+
+ stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
+ if (stream == NULL) {
+ g_warning ("Unable to find stream for id: %u", id);
+ continue;
+ }
+
+ is_default = FALSE;
+ if (stream == gvc_mixer_control_get_default_source (dialog->priv->mixer_control)) {
+ is_default = TRUE;
+ }
+
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ ACTIVE_COLUMN, is_default,
+ -1);
+ } while (gtk_tree_model_iter_next (model, &iter));
+}
+
+static void
+update_description (GvcMixerDialog *dialog,
+ guint column,
+ const char *value,
+ GvcMixerStream *stream)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ guint id;
+
+ if (GVC_IS_MIXER_SOURCE (stream))
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
+ else if (GVC_IS_MIXER_SINK (stream))
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
+ else
+ g_assert_not_reached ();
+ gtk_tree_model_get_iter_first (model, &iter);
+
+ id = gvc_mixer_stream_get_id (stream);
+ do {
+ guint current_id;
+
+ gtk_tree_model_get (model, &iter,
+ ID_COLUMN, &current_id,
+ -1);
+ if (id != current_id)
+ continue;
+
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ column, value,
+ -1);
+ break;
+ } while (gtk_tree_model_iter_next (model, &iter));
+}
+
+static void
+port_selection_changed (GvcComboBox *combo_box,
+ const char *port,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+
+ stream = g_object_get_data (G_OBJECT (combo_box), "stream");
+ if (stream == NULL) {
+ g_warning ("Could not find stream for port combo box");
+ return;
+ }
+ if (gvc_mixer_stream_change_port (stream, port) == FALSE) {
+ g_warning ("Could not change port for stream");
+ }
+}
+
+static void
+update_output_settings (GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+ const GvcChannelMap *map;
+ const GList *ports;
+
+ g_debug ("Updating output settings");
+ if (dialog->priv->output_balance_bar != NULL) {
+ gtk_container_remove (GTK_CONTAINER (dialog->priv->output_settings_box),
+ dialog->priv->output_balance_bar);
+ dialog->priv->output_balance_bar = NULL;
+ }
+ if (dialog->priv->output_fade_bar != NULL) {
+ gtk_container_remove (GTK_CONTAINER (dialog->priv->output_settings_box),
+ dialog->priv->output_fade_bar);
+ dialog->priv->output_fade_bar = NULL;
+ }
+ if (dialog->priv->output_lfe_bar != NULL) {
+ gtk_container_remove (GTK_CONTAINER (dialog->priv->output_settings_box),
+ dialog->priv->output_lfe_bar);
+ dialog->priv->output_lfe_bar = NULL;
+ }
+ if (dialog->priv->output_port_combo != NULL) {
+ gtk_container_remove (GTK_CONTAINER (dialog->priv->output_settings_box),
+ dialog->priv->output_port_combo);
+ dialog->priv->output_port_combo = NULL;
+ }
+
+ stream = gvc_mixer_control_get_default_sink (dialog->priv->mixer_control);
+ if (stream == NULL) {
+ g_warning ("Default sink stream not found");
+ return;
+ }
+
+ gvc_channel_bar_set_base_volume (GVC_CHANNEL_BAR (dialog->priv->output_bar),
+ gvc_mixer_stream_get_base_volume (stream));
+ gvc_channel_bar_set_is_amplified (GVC_CHANNEL_BAR (dialog->priv->output_bar),
+ gvc_mixer_stream_get_can_decibel (stream));
+
+ map = gvc_mixer_stream_get_channel_map (stream);
+ if (map == NULL) {
+ g_warning ("Default sink stream has no channel map");
+ return;
+ }
+
+ dialog->priv->output_balance_bar = gvc_balance_bar_new (map, BALANCE_TYPE_RL);
+ if (dialog->priv->size_group != NULL) {
+ gvc_balance_bar_set_size_group (GVC_BALANCE_BAR (dialog->priv->output_balance_bar),
+ dialog->priv->size_group,
+ TRUE);
+ }
+ gtk_box_pack_start (GTK_BOX (dialog->priv->output_settings_box),
+ dialog->priv->output_balance_bar,
+ FALSE, FALSE, 6);
+ gtk_widget_show (dialog->priv->output_balance_bar);
+
+ if (gvc_channel_map_can_fade (map)) {
+ dialog->priv->output_fade_bar = gvc_balance_bar_new (map, BALANCE_TYPE_FR);
+ if (dialog->priv->size_group != NULL) {
+ gvc_balance_bar_set_size_group (GVC_BALANCE_BAR (dialog->priv->output_fade_bar),
+ dialog->priv->size_group,
+ TRUE);
+ }
+ gtk_box_pack_start (GTK_BOX (dialog->priv->output_settings_box),
+ dialog->priv->output_fade_bar,
+ FALSE, FALSE, 6);
+ gtk_widget_show (dialog->priv->output_fade_bar);
+ }
+
+ if (gvc_channel_map_has_lfe (map)) {
+ dialog->priv->output_lfe_bar = gvc_balance_bar_new (map, BALANCE_TYPE_LFE);
+ if (dialog->priv->size_group != NULL) {
+ gvc_balance_bar_set_size_group (GVC_BALANCE_BAR (dialog->priv->output_lfe_bar),
+ dialog->priv->size_group,
+ TRUE);
+ }
+ gtk_box_pack_start (GTK_BOX (dialog->priv->output_settings_box),
+ dialog->priv->output_lfe_bar,
+ FALSE, FALSE, 6);
+ gtk_widget_show (dialog->priv->output_lfe_bar);
+ }
+
+ ports = gvc_mixer_stream_get_ports (stream);
+ if (ports != NULL) {
+ const GvcMixerStreamPort *port;
+ port = gvc_mixer_stream_get_port (stream);
+
+ dialog->priv->output_port_combo = gvc_combo_box_new (_("Co_nnector:"));
+ gvc_combo_box_set_ports (GVC_COMBO_BOX (dialog->priv->output_port_combo),
+ ports);
+ gvc_combo_box_set_active (GVC_COMBO_BOX (dialog->priv->output_port_combo), port->port);
+ g_object_set_data (G_OBJECT (dialog->priv->output_port_combo), "stream", stream);
+ g_signal_connect (G_OBJECT (dialog->priv->output_port_combo), "changed",
+ G_CALLBACK (port_selection_changed), dialog);
+
+ gtk_box_pack_start (GTK_BOX (dialog->priv->output_settings_box),
+ dialog->priv->output_port_combo,
+ TRUE, FALSE, 6);
+
+ gvc_combo_box_set_size_group (GVC_COMBO_BOX (dialog->priv->output_port_combo), dialog->priv->size_group, FALSE);
+
+ gtk_widget_show (dialog->priv->output_port_combo);
+ }
+
+ /* FIXME: We could make this into a "No settings" label instead */
+ gtk_widget_set_sensitive (dialog->priv->output_balance_bar, gvc_channel_map_can_balance (map));
+}
+
+static void
+update_default_output (GvcMixerDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
+ gtk_tree_model_get_iter_first (model, &iter);
+ do {
+ gboolean toggled;
+ gboolean is_default;
+ guint id;
+ GvcMixerStream *stream;
+
+ gtk_tree_model_get (model, &iter,
+ ID_COLUMN, &id,
+ ACTIVE_COLUMN, &toggled,
+ -1);
+
+ stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
+ if (stream == NULL) {
+ g_warning ("Unable to find stream for id: %u", id);
+ continue;
+ }
+
+ is_default = FALSE;
+ if (stream == gvc_mixer_control_get_default_sink (dialog->priv->mixer_control)) {
+ is_default = TRUE;
+ }
+
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ ACTIVE_COLUMN, is_default,
+ -1);
+ } while (gtk_tree_model_iter_next (model, &iter));
+}
+
+static void
+on_mixer_control_default_sink_changed (GvcMixerControl *control,
+ guint id,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+
+ g_debug ("GvcMixerDialog: default sink changed: %u", id);
+
+ if (id == PA_INVALID_INDEX)
+ stream = NULL;
+ else
+ stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control,
+ id);
+ bar_set_stream (dialog, dialog->priv->output_bar, stream);
+
+ update_output_settings (dialog);
+
+ update_default_output (dialog);
+}
+
+
+#define DECAY_STEP .15
+
+static void
+update_input_peak (GvcMixerDialog *dialog,
+ gdouble v)
+{
+ GtkAdjustment *adj;
+
+ if (dialog->priv->last_input_peak >= DECAY_STEP) {
+ if (v < dialog->priv->last_input_peak - DECAY_STEP) {
+ v = dialog->priv->last_input_peak - DECAY_STEP;
+ }
+ }
+
+ dialog->priv->last_input_peak = v;
+
+ adj = gvc_level_bar_get_peak_adjustment (GVC_LEVEL_BAR (dialog->priv->input_level_bar));
+ if (v >= 0) {
+ gtk_adjustment_set_value (adj, v);
+ } else {
+ gtk_adjustment_set_value (adj, 0.0);
+ }
+}
+
+static void
+update_input_meter (GvcMixerDialog *dialog,
+ uint32_t source_index,
+ uint32_t sink_input_idx,
+ double v)
+{
+ update_input_peak (dialog, v);
+}
+
+static void
+on_monitor_suspended_callback (pa_stream *s,
+ void *userdata)
+{
+ GvcMixerDialog *dialog;
+
+ dialog = userdata;
+
+ if (pa_stream_is_suspended (s)) {
+ g_debug ("Stream suspended");
+ update_input_meter (dialog,
+ pa_stream_get_device_index (s),
+ PA_INVALID_INDEX,
+ -1);
+ }
+}
+
+static void
+on_monitor_read_callback (pa_stream *s,
+ size_t length,
+ void *userdata)
+{
+ GvcMixerDialog *dialog;
+ const void *data;
+ double v;
+
+ dialog = userdata;
+
+ if (pa_stream_peek (s, &data, &length) < 0) {
+ g_warning ("Failed to read data from stream");
+ return;
+ }
+
+ assert (length > 0);
+ assert (length % sizeof (float) == 0);
+
+ v = ((const float *) data)[length / sizeof (float) -1];
+
+ pa_stream_drop (s);
+
+ if (v < 0) {
+ v = 0;
+ }
+ if (v > 1) {
+ v = 1;
+ }
+
+ update_input_meter (dialog,
+ pa_stream_get_device_index (s),
+ pa_stream_get_monitor_stream (s),
+ v);
+}
+
+static void
+create_monitor_stream_for_source (GvcMixerDialog *dialog,
+ GvcMixerStream *stream)
+{
+ pa_stream *s;
+ char t[16];
+ pa_buffer_attr attr;
+ pa_sample_spec ss;
+ pa_context *context;
+ int res;
+ pa_proplist *proplist;
+ gboolean has_monitor;
+
+ if (stream == NULL) {
+ return;
+ }
+ has_monitor = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (stream), "has-monitor"));
+ if (has_monitor != FALSE) {
+ return;
+ }
+
+ g_debug ("Create monitor for %u",
+ gvc_mixer_stream_get_index (stream));
+
+ context = gvc_mixer_control_get_pa_context (dialog->priv->mixer_control);
+
+ if (pa_context_get_server_protocol_version (context) < 13) {
+ return;
+ }
+
+ ss.channels = 1;
+ ss.format = PA_SAMPLE_FLOAT32;
+ ss.rate = 25;
+
+ memset (&attr, 0, sizeof (attr));
+ attr.fragsize = sizeof (float);
+ attr.maxlength = (uint32_t) -1;
+
+ snprintf (t, sizeof (t), "%u", gvc_mixer_stream_get_index (stream));
+
+ proplist = pa_proplist_new ();
+ pa_proplist_sets (proplist, PA_PROP_APPLICATION_ID, "org.mate.VolumeControl");
+ s = pa_stream_new_with_proplist (context, _("Peak detect"), &ss, NULL, proplist);
+ pa_proplist_free (proplist);
+ if (s == NULL) {
+ g_warning ("Failed to create monitoring stream");
+ return;
+ }
+
+ pa_stream_set_read_callback (s, on_monitor_read_callback, dialog);
+ pa_stream_set_suspended_callback (s, on_monitor_suspended_callback, dialog);
+
+ res = pa_stream_connect_record (s,
+ t,
+ &attr,
+ (pa_stream_flags_t) (PA_STREAM_DONT_MOVE
+ |PA_STREAM_PEAK_DETECT
+ |PA_STREAM_ADJUST_LATENCY));
+ if (res < 0) {
+ g_warning ("Failed to connect monitoring stream");
+ pa_stream_unref (s);
+ } else {
+ g_object_set_data (G_OBJECT (stream), "has-monitor", GINT_TO_POINTER (TRUE));
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "pa_stream", s);
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "stream", stream);
+ }
+}
+
+static void
+stop_monitor_stream_for_source (GvcMixerDialog *dialog)
+{
+ pa_stream *s;
+ pa_context *context;
+ int res;
+ GvcMixerStream *stream;
+
+ s = g_object_get_data (G_OBJECT (dialog->priv->input_level_bar), "pa_stream");
+ if (s == NULL)
+ return;
+ stream = g_object_get_data (G_OBJECT (dialog->priv->input_level_bar), "stream");
+ g_assert (stream != NULL);
+
+ g_debug ("Stopping monitor for %u", pa_stream_get_index (s));
+
+ context = gvc_mixer_control_get_pa_context (dialog->priv->mixer_control);
+
+ if (pa_context_get_server_protocol_version (context) < 13) {
+ return;
+ }
+
+ res = pa_stream_disconnect (s);
+ if (res == 0)
+ g_object_set_data (G_OBJECT (stream), "has-monitor", GINT_TO_POINTER (FALSE));
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "pa_stream", NULL);
+ g_object_set_data (G_OBJECT (dialog->priv->input_level_bar), "stream", NULL);
+}
+
+static void
+update_input_settings (GvcMixerDialog *dialog)
+{
+ const GList *ports;
+ GvcMixerStream *stream;
+
+ g_debug ("Updating input settings");
+
+ stop_monitor_stream_for_source (dialog);
+
+ if (dialog->priv->input_port_combo != NULL) {
+ gtk_container_remove (GTK_CONTAINER (dialog->priv->input_settings_box),
+ dialog->priv->input_port_combo);
+ dialog->priv->input_port_combo = NULL;
+ }
+
+ stream = gvc_mixer_control_get_default_source (dialog->priv->mixer_control);
+ if (stream == NULL) {
+ g_debug ("Default source stream not found");
+ return;
+ }
+
+ gvc_channel_bar_set_base_volume (GVC_CHANNEL_BAR (dialog->priv->input_bar),
+ gvc_mixer_stream_get_base_volume (stream));
+ gvc_channel_bar_set_is_amplified (GVC_CHANNEL_BAR (dialog->priv->input_bar),
+ gvc_mixer_stream_get_can_decibel (stream));
+
+ ports = gvc_mixer_stream_get_ports (stream);
+ if (ports != NULL) {
+ const GvcMixerStreamPort *port;
+ port = gvc_mixer_stream_get_port (stream);
+
+ dialog->priv->input_port_combo = gvc_combo_box_new (_("Co_nnector:"));
+ gvc_combo_box_set_ports (GVC_COMBO_BOX (dialog->priv->input_port_combo),
+ ports);
+ gvc_combo_box_set_active (GVC_COMBO_BOX (dialog->priv->input_port_combo), port->port);
+ g_object_set_data (G_OBJECT (dialog->priv->input_port_combo), "stream", stream);
+ g_signal_connect (G_OBJECT (dialog->priv->input_port_combo), "changed",
+ G_CALLBACK (port_selection_changed), dialog);
+
+ gvc_combo_box_set_size_group (GVC_COMBO_BOX (dialog->priv->input_port_combo), dialog->priv->size_group, FALSE);
+ gtk_box_pack_start (GTK_BOX (dialog->priv->input_settings_box),
+ dialog->priv->input_port_combo,
+ TRUE, TRUE, 0);
+ gtk_widget_show (dialog->priv->input_port_combo);
+ }
+
+ create_monitor_stream_for_source (dialog, stream);
+}
+
+static void
+on_mixer_control_default_source_changed (GvcMixerControl *control,
+ guint id,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+ GtkAdjustment *adj;
+
+ g_debug ("GvcMixerDialog: default source changed: %u", id);
+
+ if (id == PA_INVALID_INDEX)
+ stream = NULL;
+ else
+ stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
+
+ /* Disconnect the adj, otherwise it might change if is_amplified changes */
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (dialog->priv->input_bar)));
+ g_signal_handlers_disconnect_by_func(adj, on_adjustment_value_changed, dialog);
+
+ bar_set_stream (dialog, dialog->priv->input_bar, stream);
+ update_input_settings (dialog);
+
+ g_signal_connect (adj,
+ "value-changed",
+ G_CALLBACK (on_adjustment_value_changed),
+ dialog);
+
+ update_default_input (dialog);
+}
+
+static void
+gvc_mixer_dialog_set_mixer_control (GvcMixerDialog *dialog,
+ GvcMixerControl *control)
+{
+ g_return_if_fail (GVC_MIXER_DIALOG (dialog));
+ g_return_if_fail (GVC_IS_MIXER_CONTROL (control));
+
+ g_object_ref (control);
+
+ if (dialog->priv->mixer_control != NULL) {
+ g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
+ G_CALLBACK (on_mixer_control_default_sink_changed),
+ dialog);
+ g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
+ G_CALLBACK (on_mixer_control_default_source_changed),
+ dialog);
+ g_object_unref (dialog->priv->mixer_control);
+ }
+
+ dialog->priv->mixer_control = control;
+
+ g_signal_connect (dialog->priv->mixer_control,
+ "default-sink-changed",
+ G_CALLBACK (on_mixer_control_default_sink_changed),
+ dialog);
+ g_signal_connect (dialog->priv->mixer_control,
+ "default-source-changed",
+ G_CALLBACK (on_mixer_control_default_source_changed),
+ dialog);
+
+ g_object_notify (G_OBJECT (dialog), "mixer-control");
+}
+
+static GvcMixerControl *
+gvc_mixer_dialog_get_mixer_control (GvcMixerDialog *dialog)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_DIALOG (dialog), NULL);
+
+ return dialog->priv->mixer_control;
+}
+
+static void
+gvc_mixer_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerDialog *self = GVC_MIXER_DIALOG (object);
+
+ switch (prop_id) {
+ case PROP_MIXER_CONTROL:
+ gvc_mixer_dialog_set_mixer_control (self, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_mixer_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerDialog *self = GVC_MIXER_DIALOG (object);
+
+ switch (prop_id) {
+ case PROP_MIXER_CONTROL:
+ g_value_set_object (value, gvc_mixer_dialog_get_mixer_control (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+on_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+
+ stream = g_object_get_data (G_OBJECT (adjustment), "gvc-mixer-dialog-stream");
+ if (stream != NULL) {
+ GObject *bar;
+ gdouble volume, rounded;
+ char *name;
+
+ volume = gtk_adjustment_get_value (adjustment);
+ rounded = round (volume);
+
+ bar = g_object_get_data (G_OBJECT (adjustment), "gvc-mixer-dialog-bar");
+ g_object_get (bar, "name", &name, NULL);
+ g_debug ("Setting stream volume %lf (rounded: %lf) for bar '%s'", volume, rounded, name);
+ g_free (name);
+
+ /* FIXME would need to do that in the balance bar really... */
+ /* Make sure we do not unmute muted streams, there's a button for that */
+ if (volume == 0.0)
+ gvc_mixer_stream_set_is_muted (stream, TRUE);
+ /* Only push the volume if it's actually changed */
+ if (gvc_mixer_stream_set_volume(stream, (pa_volume_t) rounded) != FALSE)
+ gvc_mixer_stream_push_volume (stream);
+ }
+}
+
+static void
+on_bar_is_muted_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcMixerDialog *dialog)
+{
+ gboolean is_muted;
+ GvcMixerStream *stream;
+
+ is_muted = gvc_channel_bar_get_is_muted (GVC_CHANNEL_BAR (object));
+
+ stream = g_object_get_data (object, "gvc-mixer-dialog-stream");
+ if (stream != NULL) {
+ gvc_mixer_stream_change_is_muted (stream, is_muted);
+ } else {
+ char *name;
+ g_object_get (object, "name", &name, NULL);
+ g_warning ("Unable to find stream for bar '%s'", name);
+ g_free (name);
+ }
+}
+
+static GtkWidget *
+lookup_bar_for_stream (GvcMixerDialog *dialog,
+ GvcMixerStream *stream)
+{
+ GtkWidget *bar;
+
+ bar = g_hash_table_lookup (dialog->priv->bars, GUINT_TO_POINTER (gvc_mixer_stream_get_id (stream)));
+
+ return bar;
+}
+
+static GtkWidget *
+lookup_combo_box_for_stream (GvcMixerDialog *dialog,
+ GvcMixerStream *stream)
+{
+ GvcMixerStream *combo_stream;
+ guint id;
+
+ id = gvc_mixer_stream_get_id (stream);
+
+ if (dialog->priv->output_port_combo != NULL) {
+ combo_stream = g_object_get_data (G_OBJECT (dialog->priv->output_port_combo),
+ "stream");
+ if (combo_stream != NULL) {
+ if (id == gvc_mixer_stream_get_id (combo_stream))
+ return dialog->priv->output_port_combo;
+ }
+ }
+
+ if (dialog->priv->input_port_combo != NULL) {
+ combo_stream = g_object_get_data (G_OBJECT (dialog->priv->input_port_combo),
+ "stream");
+ if (combo_stream != NULL) {
+ if (id == gvc_mixer_stream_get_id (combo_stream))
+ return dialog->priv->input_port_combo;
+ }
+ }
+
+ return NULL;
+}
+
+static void
+on_stream_description_notify (GvcMixerStream *stream,
+ GParamSpec *pspec,
+ GvcMixerDialog *dialog)
+{
+ update_description (dialog, NAME_COLUMN,
+ gvc_mixer_stream_get_description (stream),
+ stream);
+}
+
+static void
+on_stream_port_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcMixerDialog *dialog)
+{
+ GvcComboBox *combo_box;
+ char *port;
+
+ combo_box = GVC_COMBO_BOX (lookup_combo_box_for_stream (dialog, GVC_MIXER_STREAM (object)));
+ if (combo_box == NULL)
+ return;
+
+ g_signal_handlers_block_by_func (G_OBJECT (combo_box),
+ port_selection_changed,
+ dialog);
+
+ g_object_get (object, "port", &port, NULL);
+ gvc_combo_box_set_active (GVC_COMBO_BOX (combo_box), port);
+
+ g_signal_handlers_unblock_by_func (G_OBJECT (combo_box),
+ port_selection_changed,
+ dialog);
+}
+
+static void
+on_stream_volume_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+ GtkWidget *bar;
+ GtkAdjustment *adj;
+
+ stream = GVC_MIXER_STREAM (object);
+
+ bar = lookup_bar_for_stream (dialog, stream);
+
+ if (bar == NULL) {
+ g_warning ("Unable to find bar for stream %s in on_stream_volume_notify()",
+ gvc_mixer_stream_get_name (stream));
+ return;
+ }
+
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (bar)));
+
+ g_signal_handlers_block_by_func (adj,
+ on_adjustment_value_changed,
+ dialog);
+
+ gtk_adjustment_set_value (adj,
+ gvc_mixer_stream_get_volume (stream));
+
+ g_signal_handlers_unblock_by_func (adj,
+ on_adjustment_value_changed,
+ dialog);
+}
+
+static void
+on_stream_is_muted_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+ GtkWidget *bar;
+ gboolean is_muted;
+
+ stream = GVC_MIXER_STREAM (object);
+ bar = lookup_bar_for_stream (dialog, stream);
+
+ if (bar == NULL) {
+ g_warning ("Unable to find bar for stream %s in on_stream_is_muted_notify()",
+ gvc_mixer_stream_get_name (stream));
+ return;
+ }
+
+ is_muted = gvc_mixer_stream_get_is_muted (stream);
+ gvc_channel_bar_set_is_muted (GVC_CHANNEL_BAR (bar),
+ is_muted);
+
+ if (stream == gvc_mixer_control_get_default_sink (dialog->priv->mixer_control)) {
+ gtk_widget_set_sensitive (dialog->priv->applications_box,
+ !is_muted);
+ }
+
+}
+
+static void
+save_bar_for_stream (GvcMixerDialog *dialog,
+ GvcMixerStream *stream,
+ GtkWidget *bar)
+{
+ g_hash_table_insert (dialog->priv->bars,
+ GUINT_TO_POINTER (gvc_mixer_stream_get_id (stream)),
+ bar);
+}
+
+static GtkWidget *
+create_bar (GvcMixerDialog *dialog,
+ GtkSizeGroup *size_group,
+ gboolean symmetric)
+{
+ GtkWidget *bar;
+
+ bar = gvc_channel_bar_new ();
+ gtk_widget_set_sensitive (bar, FALSE);
+ if (size_group != NULL) {
+ gvc_channel_bar_set_size_group (GVC_CHANNEL_BAR (bar),
+ size_group,
+ symmetric);
+ }
+ gvc_channel_bar_set_orientation (GVC_CHANNEL_BAR (bar),
+ GTK_ORIENTATION_HORIZONTAL);
+ gvc_channel_bar_set_show_mute (GVC_CHANNEL_BAR (bar),
+ TRUE);
+ g_signal_connect (bar,
+ "notify::is-muted",
+ G_CALLBACK (on_bar_is_muted_notify),
+ dialog);
+ return bar;
+}
+
+static void
+bar_set_stream (GvcMixerDialog *dialog,
+ GtkWidget *bar,
+ GvcMixerStream *stream)
+{
+ GtkAdjustment *adj;
+ GvcMixerStream *old_stream;
+
+ g_assert (bar != NULL);
+
+ old_stream = g_object_get_data (G_OBJECT (bar), "gvc-mixer-dialog-stream");
+ if (old_stream != NULL) {
+ char *name;
+
+ g_object_get (bar, "name", &name, NULL);
+ g_debug ("Disconnecting old stream '%s' from bar '%s'",
+ gvc_mixer_stream_get_name (old_stream), name);
+ g_free (name);
+
+ g_signal_handlers_disconnect_by_func (old_stream, on_stream_is_muted_notify, dialog);
+ g_signal_handlers_disconnect_by_func (old_stream, on_stream_volume_notify, dialog);
+ g_signal_handlers_disconnect_by_func (old_stream, on_stream_port_notify, dialog);
+ g_hash_table_remove (dialog->priv->bars, GUINT_TO_POINTER (gvc_mixer_stream_get_id (old_stream)));
+ }
+
+ gtk_widget_set_sensitive (bar, (stream != NULL));
+
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (bar)));
+
+ g_signal_handlers_disconnect_by_func (adj, on_adjustment_value_changed, dialog);
+
+ g_object_set_data (G_OBJECT (bar), "gvc-mixer-dialog-stream", stream);
+ g_object_set_data (G_OBJECT (adj), "gvc-mixer-dialog-stream", stream);
+ g_object_set_data (G_OBJECT (adj), "gvc-mixer-dialog-bar", bar);
+
+ if (stream != NULL) {
+ gboolean is_muted;
+
+ is_muted = gvc_mixer_stream_get_is_muted (stream);
+ gvc_channel_bar_set_is_muted (GVC_CHANNEL_BAR (bar), is_muted);
+
+ save_bar_for_stream (dialog, stream, bar);
+
+ gtk_adjustment_set_value (adj,
+ gvc_mixer_stream_get_volume (stream));
+
+ g_signal_connect (stream,
+ "notify::is-muted",
+ G_CALLBACK (on_stream_is_muted_notify),
+ dialog);
+ g_signal_connect (stream,
+ "notify::volume",
+ G_CALLBACK (on_stream_volume_notify),
+ dialog);
+ g_signal_connect (stream,
+ "notify::port",
+ G_CALLBACK (on_stream_port_notify),
+ dialog);
+ g_signal_connect (adj,
+ "value-changed",
+ G_CALLBACK (on_adjustment_value_changed),
+ dialog);
+ }
+}
+
+static void
+add_stream (GvcMixerDialog *dialog,
+ GvcMixerStream *stream)
+{
+ GtkWidget *bar;
+ gboolean is_muted;
+ gboolean is_default;
+ GtkAdjustment *adj;
+ const char *id;
+
+ g_assert (stream != NULL);
+
+ if (gvc_mixer_stream_is_event_stream (stream) != FALSE)
+ return;
+
+ bar = NULL;
+ is_default = FALSE;
+ id = gvc_mixer_stream_get_application_id (stream);
+
+ if (stream == gvc_mixer_control_get_default_sink (dialog->priv->mixer_control)) {
+ bar = dialog->priv->output_bar;
+ is_muted = gvc_mixer_stream_get_is_muted (stream);
+ is_default = TRUE;
+ gtk_widget_set_sensitive (dialog->priv->applications_box,
+ !is_muted);
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (bar)));
+ g_signal_handlers_disconnect_by_func(adj, on_adjustment_value_changed, dialog);
+ update_output_settings (dialog);
+ } else if (stream == gvc_mixer_control_get_default_source (dialog->priv->mixer_control)) {
+ bar = dialog->priv->input_bar;
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (bar)));
+ g_signal_handlers_disconnect_by_func(adj, on_adjustment_value_changed, dialog);
+ update_input_settings (dialog);
+ is_default = TRUE;
+ } else if (stream == gvc_mixer_control_get_event_sink_input (dialog->priv->mixer_control)) {
+ bar = dialog->priv->effects_bar;
+ g_debug ("Adding effects stream");
+ } else if (! GVC_IS_MIXER_SOURCE (stream)
+ && !GVC_IS_MIXER_SINK (stream)
+ && !gvc_mixer_stream_is_virtual (stream)
+ && g_strcmp0 (id, "org.mate.VolumeControl") != 0
+ && g_strcmp0 (id, "org.PulseAudio.pavucontrol") != 0) {
+ const char *name;
+
+ bar = create_bar (dialog, dialog->priv->apps_size_group, FALSE);
+
+ name = gvc_mixer_stream_get_name (stream);
+ if (name == NULL || strchr (name, '_') == NULL) {
+ gvc_channel_bar_set_name (GVC_CHANNEL_BAR (bar), name);
+ } else {
+ char **tokens, *escaped;
+
+ tokens = g_strsplit (name, "_", -1);
+ escaped = g_strjoinv ("__", tokens);
+ g_strfreev (tokens);
+ gvc_channel_bar_set_name (GVC_CHANNEL_BAR (bar), escaped);
+ g_free (escaped);
+ }
+
+ gvc_channel_bar_set_icon_name (GVC_CHANNEL_BAR (bar),
+ gvc_mixer_stream_get_icon_name (stream));
+
+ gtk_box_pack_start (GTK_BOX (dialog->priv->applications_box), bar, FALSE, FALSE, 12);
+ dialog->priv->num_apps++;
+ gtk_widget_hide (dialog->priv->no_apps_label);
+ }
+
+ if (GVC_IS_MIXER_SOURCE (stream)) {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ NAME_COLUMN, gvc_mixer_stream_get_description (stream),
+ DEVICE_COLUMN, "",
+ ACTIVE_COLUMN, is_default,
+ ID_COLUMN, gvc_mixer_stream_get_id (stream),
+ -1);
+ g_signal_connect (stream,
+ "notify::description",
+ G_CALLBACK (on_stream_description_notify),
+ dialog);
+ } else if (GVC_IS_MIXER_SINK (stream)) {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ const GvcChannelMap *map;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ map = gvc_mixer_stream_get_channel_map (stream);
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ NAME_COLUMN, gvc_mixer_stream_get_description (stream),
+ DEVICE_COLUMN, "",
+ ACTIVE_COLUMN, is_default,
+ ID_COLUMN, gvc_mixer_stream_get_id (stream),
+ SPEAKERS_COLUMN, gvc_channel_map_get_mapping (map),
+ -1);
+ g_signal_connect (stream,
+ "notify::description",
+ G_CALLBACK (on_stream_description_notify),
+ dialog);
+ }
+
+ if (bar != NULL) {
+ bar_set_stream (dialog, bar, stream);
+ gtk_widget_show (bar);
+ }
+}
+
+static void
+on_control_stream_added (GvcMixerControl *control,
+ guint id,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerStream *stream;
+ GtkWidget *bar;
+
+ bar = g_hash_table_lookup (dialog->priv->bars, GUINT_TO_POINTER (id));
+ if (bar != NULL) {
+ g_debug ("GvcMixerDialog: Stream %u already added", id);
+ return;
+ }
+
+ stream = gvc_mixer_control_lookup_stream_id (control, id);
+ if (stream != NULL) {
+ add_stream (dialog, stream);
+ }
+}
+
+static gboolean
+find_item_by_id (GtkTreeModel *model,
+ guint id,
+ guint column,
+ GtkTreeIter *iter)
+{
+ gboolean found_item;
+
+ found_item = FALSE;
+
+ if (!gtk_tree_model_get_iter_first (model, iter)) {
+ return FALSE;
+ }
+
+ do {
+ guint t_id;
+
+ gtk_tree_model_get (model, iter,
+ column, &t_id, -1);
+
+ if (id == t_id) {
+ found_item = TRUE;
+ }
+ } while (!found_item && gtk_tree_model_iter_next (model, iter));
+
+ return found_item;
+}
+
+static void
+remove_stream (GvcMixerDialog *dialog,
+ guint id)
+{
+ GtkWidget *bar;
+ gboolean found;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ /* remove bars for applications and reset fixed bars */
+ bar = g_hash_table_lookup (dialog->priv->bars, GUINT_TO_POINTER (id));
+ if (bar == dialog->priv->output_bar
+ || bar == dialog->priv->input_bar
+ || bar == dialog->priv->effects_bar) {
+ char *name;
+ g_object_get (bar, "name", &name, NULL);
+ g_debug ("Removing stream for bar '%s'", name);
+ g_free (name);
+ bar_set_stream (dialog, bar, NULL);
+ } else if (bar != NULL) {
+ g_hash_table_remove (dialog->priv->bars, GUINT_TO_POINTER (id));
+ gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (bar)),
+ bar);
+ dialog->priv->num_apps--;
+ if (dialog->priv->num_apps == 0) {
+ gtk_widget_show (dialog->priv->no_apps_label);
+ }
+ }
+
+ /* remove from any models */
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
+ found = find_item_by_id (GTK_TREE_MODEL (model), id, ID_COLUMN, &iter);
+ if (found) {
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ }
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
+ found = find_item_by_id (GTK_TREE_MODEL (model), id, ID_COLUMN, &iter);
+ if (found) {
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ }
+}
+
+static void
+on_control_stream_removed (GvcMixerControl *control,
+ guint id,
+ GvcMixerDialog *dialog)
+{
+ remove_stream (dialog, id);
+}
+
+static void
+add_card (GvcMixerDialog *dialog,
+ GvcMixerCard *card)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ GvcMixerCardProfile *profile;
+ GIcon *icon;
+ guint index;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->hw_treeview));
+ index = gvc_mixer_card_get_index (card);
+ if (find_item_by_id (GTK_TREE_MODEL (model), index, HW_ID_COLUMN, &iter) == FALSE)
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ profile = gvc_mixer_card_get_profile (card);
+ g_assert (profile != NULL);
+ icon = g_themed_icon_new_with_default_fallbacks (gvc_mixer_card_get_icon_name (card));
+ //FIXME we need the status (default for a profile?) here
+ gtk_list_store_set (GTK_LIST_STORE (model),
+ &iter,
+ HW_NAME_COLUMN, gvc_mixer_card_get_name (card),
+ HW_ID_COLUMN, index,
+ HW_ICON_COLUMN, icon,
+ HW_PROFILE_COLUMN, profile->profile,
+ HW_PROFILE_HUMAN_COLUMN, profile->human_profile,
+ HW_STATUS_COLUMN, profile->status,
+ HW_SENSITIVE_COLUMN, g_strcmp0 (profile->profile, "off") != 0,
+ -1);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->hw_treeview));
+ if (gtk_tree_selection_get_selected (selection, NULL, NULL) == FALSE) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ } else if (dialog->priv->hw_profile_combo != NULL) {
+ GvcMixerCard *selected;
+
+ /* Set the current profile if it changed for the selected card */
+ selected = g_object_get_data (G_OBJECT (dialog->priv->hw_profile_combo), "card");
+ if (gvc_mixer_card_get_index (selected) == gvc_mixer_card_get_index (card)) {
+ gvc_combo_box_set_active (GVC_COMBO_BOX (dialog->priv->hw_profile_combo),
+ profile->profile);
+ g_object_set (G_OBJECT (dialog->priv->hw_profile_combo),
+ "show-button", profile->n_sinks == 1,
+ NULL);
+ }
+ }
+}
+
+static void
+on_control_card_added (GvcMixerControl *control,
+ guint id,
+ GvcMixerDialog *dialog)
+{
+ GvcMixerCard *card;
+
+ card = gvc_mixer_control_lookup_card_id (control, id);
+ if (card != NULL) {
+ add_card (dialog, card);
+ }
+}
+
+static void
+remove_card (GvcMixerDialog *dialog,
+ guint id)
+{
+ gboolean found;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ /* remove from any models */
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->hw_treeview));
+ found = find_item_by_id (GTK_TREE_MODEL (model), id, HW_ID_COLUMN, &iter);
+ if (found) {
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ }
+}
+static void
+on_control_card_removed (GvcMixerControl *control,
+ guint id,
+ GvcMixerDialog *dialog)
+{
+ remove_card (dialog, id);
+}
+
+static void
+_gtk_label_make_bold (GtkLabel *label)
+{
+ PangoFontDescription *font_desc;
+
+ font_desc = pango_font_description_new ();
+
+ pango_font_description_set_weight (font_desc,
+ PANGO_WEIGHT_BOLD);
+
+ /* This will only affect the weight of the font, the rest is
+ * from the current state of the widget, which comes from the
+ * theme or user prefs, since the font desc only has the
+ * weight flag turned on.
+ */
+ gtk_widget_modify_font (GTK_WIDGET (label), font_desc);
+
+ pango_font_description_free (font_desc);
+}
+
+static void
+on_input_radio_toggled (GtkCellRendererToggle *renderer,
+ char *path_str,
+ GvcMixerDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ gboolean toggled;
+ guint id;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
+
+ path = gtk_tree_path_new_from_string (path_str);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_path_free (path);
+
+ gtk_tree_model_get (model, &iter,
+ ID_COLUMN, &id,
+ ACTIVE_COLUMN, &toggled,
+ -1);
+
+ toggled ^= 1;
+ if (toggled) {
+ GvcMixerStream *stream;
+
+ g_debug ("Default input selected: %u", id);
+ stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
+ if (stream == NULL) {
+ g_warning ("Unable to find stream for id: %u", id);
+ return;
+ }
+
+ gvc_mixer_control_set_default_source (dialog->priv->mixer_control, stream);
+ }
+}
+
+static void
+on_output_radio_toggled (GtkCellRendererToggle *renderer,
+ char *path_str,
+ GvcMixerDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ gboolean toggled;
+ guint id;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
+
+ path = gtk_tree_path_new_from_string (path_str);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_path_free (path);
+
+ gtk_tree_model_get (model, &iter,
+ ID_COLUMN, &id,
+ ACTIVE_COLUMN, &toggled,
+ -1);
+
+ toggled ^= 1;
+ if (toggled) {
+ GvcMixerStream *stream;
+
+ g_debug ("Default output selected: %u", id);
+ stream = gvc_mixer_control_lookup_stream_id (dialog->priv->mixer_control, id);
+ if (stream == NULL) {
+ g_warning ("Unable to find stream for id: %u", id);
+ return;
+ }
+
+ gvc_mixer_control_set_default_sink (dialog->priv->mixer_control, stream);
+ }
+}
+
+static void
+name_to_text (GtkTreeViewColumn *column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ char *name, *mapping;
+
+ gtk_tree_model_get(model, iter,
+ NAME_COLUMN, &name,
+ SPEAKERS_COLUMN, &mapping,
+ -1);
+
+ if (mapping == NULL) {
+ g_object_set (cell, "text", name, NULL);
+ } else {
+ char *str;
+
+ str = g_strdup_printf ("%s\n<i>%s</i>",
+ name, mapping);
+ g_object_set (cell, "markup", str, NULL);
+ g_free (str);
+ }
+
+ g_free (name);
+ g_free (mapping);
+}
+
+static GtkWidget *
+create_stream_treeview (GvcMixerDialog *dialog,
+ GCallback on_toggled)
+{
+ GtkWidget *treeview;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ treeview = gtk_tree_view_new ();
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
+
+ store = gtk_list_store_new (NUM_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN,
+ G_TYPE_UINT,
+ G_TYPE_STRING);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
+ GTK_TREE_MODEL (store));
+
+ renderer = gtk_cell_renderer_toggle_new ();
+ gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer),
+ TRUE);
+ column = gtk_tree_view_column_new_with_attributes (NULL,
+ renderer,
+ "active", ACTIVE_COLUMN,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+ g_signal_connect (renderer,
+ "toggled",
+ G_CALLBACK (on_toggled),
+ dialog);
+
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview), -1,
+ _("Name"), gtk_cell_renderer_text_new (),
+ name_to_text, NULL, NULL);
+
+#if 0
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Device"),
+ renderer,
+ "text", DEVICE_COLUMN,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+#endif
+ return treeview;
+}
+
+static void
+on_profile_changed (GvcComboBox *widget,
+ const char *profile,
+ gpointer user_data)
+{
+ GvcMixerCard *card;
+
+ card = g_object_get_data (G_OBJECT (widget), "card");
+ if (card == NULL) {
+ g_warning ("Could not find card for combobox");
+ return;
+ }
+
+ g_debug ("Profile changed to %s for card %s", profile,
+ gvc_mixer_card_get_name (card));
+
+ gvc_mixer_card_change_profile (card, profile);
+}
+
+static void
+on_test_speakers_clicked (GvcComboBox *widget,
+ gpointer user_data)
+{
+ GvcMixerDialog *dialog = GVC_MIXER_DIALOG (user_data);
+ GvcMixerCard *card;
+ GvcMixerCardProfile *profile;
+ GtkWidget *d, *speaker_test, *container;
+ char *title;
+
+ card = g_object_get_data (G_OBJECT (widget), "card");
+ if (card == NULL) {
+ g_warning ("Could not find card for combobox");
+ return;
+ }
+ profile = gvc_mixer_card_get_profile (card);
+
+ g_debug ("XXX Start speaker testing for profile '%s', card %s XXX",
+ profile->profile, gvc_mixer_card_get_name (card));
+
+ title = g_strdup_printf (_("Speaker Testing for %s"), gvc_mixer_card_get_name (card));
+ d = gtk_dialog_new_with_buttons (title,
+ GTK_WINDOW (dialog),
+ GTK_DIALOG_MODAL |
+#if !GTK_CHECK_VERSION (2, 21, 8)
+ GTK_DIALOG_NO_SEPARATOR |
+#endif
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ NULL);
+ g_free (title);
+ speaker_test = gvc_speaker_test_new (dialog->priv->mixer_control,
+ card);
+ gtk_widget_show (speaker_test);
+ container = gtk_dialog_get_content_area (GTK_DIALOG (d));
+ gtk_container_add (GTK_CONTAINER (container), speaker_test);
+
+ gtk_dialog_run (GTK_DIALOG (d));
+ gtk_widget_destroy (d);
+}
+
+static void
+on_card_selection_changed (GtkTreeSelection *selection,
+ gpointer user_data)
+{
+ GvcMixerDialog *dialog = GVC_MIXER_DIALOG (user_data);
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ const GList *profiles;
+ guint id;
+ GvcMixerCard *card;
+ GvcMixerCardProfile *current_profile;
+
+ g_debug ("Card selection changed");
+
+ if (dialog->priv->hw_profile_combo != NULL) {
+ gtk_container_remove (GTK_CONTAINER (dialog->priv->hw_settings_box),
+ dialog->priv->hw_profile_combo);
+ dialog->priv->hw_profile_combo = NULL;
+ }
+
+ if (gtk_tree_selection_get_selected (selection,
+ NULL,
+ &iter) == FALSE) {
+ return;
+ }
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->hw_treeview));
+ gtk_tree_model_get (model, &iter,
+ HW_ID_COLUMN, &id,
+ -1);
+ card = gvc_mixer_control_lookup_card_id (dialog->priv->mixer_control, id);
+ if (card == NULL) {
+ g_warning ("Unable to find card for id: %u", id);
+ return;
+ }
+
+ current_profile = gvc_mixer_card_get_profile (card);
+ profiles = gvc_mixer_card_get_profiles (card);
+ dialog->priv->hw_profile_combo = gvc_combo_box_new (_("_Profile:"));
+ g_object_set (G_OBJECT (dialog->priv->hw_profile_combo), "button-label", _("Test Speakers"), NULL);
+ gvc_combo_box_set_profiles (GVC_COMBO_BOX (dialog->priv->hw_profile_combo), profiles);
+ gvc_combo_box_set_active (GVC_COMBO_BOX (dialog->priv->hw_profile_combo), current_profile->profile);
+
+ gtk_box_pack_start (GTK_BOX (dialog->priv->hw_settings_box),
+ dialog->priv->hw_profile_combo,
+ TRUE, TRUE, 6);
+ g_object_set (G_OBJECT (dialog->priv->hw_profile_combo),
+ "show-button", current_profile->n_sinks == 1,
+ NULL);
+ gtk_widget_show (dialog->priv->hw_profile_combo);
+
+ g_object_set_data (G_OBJECT (dialog->priv->hw_profile_combo), "card", card);
+ g_signal_connect (G_OBJECT (dialog->priv->hw_profile_combo), "changed",
+ G_CALLBACK (on_profile_changed), dialog);
+ g_signal_connect (G_OBJECT (dialog->priv->hw_profile_combo), "button-clicked",
+ G_CALLBACK (on_test_speakers_clicked), dialog);
+}
+
+static void
+card_to_text (GtkTreeViewColumn *column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ char *name, *status, *profile, *str;
+ gboolean sensitive;
+
+ gtk_tree_model_get(model, iter,
+ HW_NAME_COLUMN, &name,
+ HW_STATUS_COLUMN, &status,
+ HW_PROFILE_HUMAN_COLUMN, &profile,
+ HW_SENSITIVE_COLUMN, &sensitive,
+ -1);
+
+ str = g_strdup_printf ("%s\n<i>%s</i>\n<i>%s</i>",
+ name, status, profile);
+ g_object_set (cell,
+ "markup", str,
+ "sensitive", sensitive,
+ NULL);
+ g_free (str);
+
+ g_free (name);
+ g_free (status);
+ g_free (profile);
+}
+
+static GtkWidget *
+create_cards_treeview (GvcMixerDialog *dialog,
+ GCallback on_changed)
+{
+ GtkWidget *treeview;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ treeview = gtk_tree_view_new ();
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+ g_signal_connect (G_OBJECT (selection), "changed",
+ on_changed, dialog);
+
+ store = gtk_list_store_new (HW_NUM_COLUMNS,
+ G_TYPE_UINT,
+ G_TYPE_ICON,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
+ GTK_TREE_MODEL (store));
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ g_object_set (G_OBJECT (renderer), "stock-size", GTK_ICON_SIZE_DIALOG, NULL);
+ column = gtk_tree_view_column_new_with_attributes (NULL,
+ renderer,
+ "gicon", HW_ICON_COLUMN,
+ "sensitive", HW_SENSITIVE_COLUMN,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+ gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview), -1,
+ _("Name"), gtk_cell_renderer_text_new (),
+ card_to_text, NULL, NULL);
+
+ return treeview;
+}
+
+static const guint tab_accel_keys[] = {
+ GDK_1, GDK_2, GDK_3, GDK_4, GDK_5
+};
+
+static void
+dialog_accel_cb (GtkAccelGroup *accelgroup,
+ GObject *object,
+ guint key,
+ GdkModifierType mod,
+ GvcMixerDialog *self)
+{
+ gint num = -1;
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (tab_accel_keys); i++) {
+ if (tab_accel_keys[i] == key) {
+ num = i;
+ break;
+ }
+ }
+
+ if (num != -1) {
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook), num);
+ }
+}
+
+static GObject *
+gvc_mixer_dialog_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerDialog *self;
+ GtkWidget *main_vbox;
+ GtkWidget *label;
+ GtkWidget *alignment;
+ GtkWidget *box;
+ GtkWidget *sbox;
+ GtkWidget *ebox;
+ GSList *streams;
+ GSList *cards;
+ GSList *l;
+ GvcMixerStream *stream;
+ GvcMixerCard *card;
+ GtkTreeSelection *selection;
+ GtkAccelGroup *accel_group;
+ GClosure *closure;
+ gint i;
+
+ object = G_OBJECT_CLASS (gvc_mixer_dialog_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_DIALOG (object);
+ gtk_dialog_add_button (GTK_DIALOG (self), "gtk-close", GTK_RESPONSE_OK);
+
+ main_vbox = gtk_dialog_get_content_area (GTK_DIALOG (self));
+ gtk_box_set_spacing (GTK_BOX (main_vbox), 2);
+
+ gtk_container_set_border_width (GTK_CONTAINER (self), 6);
+
+ self->priv->output_stream_box = gtk_hbox_new (FALSE, 12);
+ alignment = gtk_alignment_new (0, 0, 1, 1);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 12, 0, 0, 0);
+ gtk_container_add (GTK_CONTAINER (alignment), self->priv->output_stream_box);
+ gtk_box_pack_start (GTK_BOX (main_vbox),
+ alignment,
+ FALSE, FALSE, 0);
+ self->priv->output_bar = create_bar (self, self->priv->size_group, TRUE);
+ gvc_channel_bar_set_name (GVC_CHANNEL_BAR (self->priv->output_bar),
+ _("_Output volume: "));
+ gtk_widget_set_sensitive (self->priv->output_bar, FALSE);
+ gtk_box_pack_start (GTK_BOX (self->priv->output_stream_box),
+ self->priv->output_bar, TRUE, TRUE, 12);
+
+ self->priv->notebook = gtk_notebook_new ();
+ gtk_box_pack_start (GTK_BOX (main_vbox),
+ self->priv->notebook,
+ TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (self->priv->notebook), 5);
+
+ /* Set up accels (borrowed from Empathy) */
+ accel_group = gtk_accel_group_new ();
+ gtk_window_add_accel_group (GTK_WINDOW (self), accel_group);
+
+ for (i = 0; i < G_N_ELEMENTS (tab_accel_keys); i++) {
+ closure = g_cclosure_new (G_CALLBACK (dialog_accel_cb),
+ self,
+ NULL);
+ gtk_accel_group_connect (accel_group,
+ tab_accel_keys[i],
+ GDK_MOD1_MASK,
+ 0,
+ closure);
+ }
+
+ g_object_unref (accel_group);
+
+ /* Effects page */
+ self->priv->sound_effects_box = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (self->priv->sound_effects_box), 12);
+ label = gtk_label_new (_("Sound Effects"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (self->priv->notebook),
+ self->priv->sound_effects_box,
+ label);
+
+ self->priv->effects_bar = create_bar (self, self->priv->size_group, TRUE);
+ gvc_channel_bar_set_name (GVC_CHANNEL_BAR (self->priv->effects_bar),
+ _("_Alert volume: "));
+ gtk_widget_set_sensitive (self->priv->effects_bar, FALSE);
+ gtk_box_pack_start (GTK_BOX (self->priv->sound_effects_box),
+ self->priv->effects_bar, FALSE, FALSE, 0);
+
+ self->priv->sound_theme_chooser = gvc_sound_theme_chooser_new ();
+ gtk_box_pack_start (GTK_BOX (self->priv->sound_effects_box),
+ self->priv->sound_theme_chooser,
+ TRUE, TRUE, 6);
+
+ /* Hardware page */
+ self->priv->hw_box = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (self->priv->hw_box), 12);
+ label = gtk_label_new (_("Hardware"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (self->priv->notebook),
+ self->priv->hw_box,
+ label);
+
+ box = gtk_frame_new (_("C_hoose a device to configure:"));
+ label = gtk_frame_get_label_widget (GTK_FRAME (box));
+ _gtk_label_make_bold (GTK_LABEL (label));
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+ gtk_frame_set_shadow_type (GTK_FRAME (box), GTK_SHADOW_NONE);
+ gtk_box_pack_start (GTK_BOX (self->priv->hw_box), box, TRUE, TRUE, 0);
+
+ alignment = gtk_alignment_new (0, 0, 1, 1);
+ gtk_container_add (GTK_CONTAINER (box), alignment);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
+
+ self->priv->hw_treeview = create_cards_treeview (self,
+ G_CALLBACK (on_card_selection_changed));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->priv->hw_treeview);
+
+ box = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (box),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (box),
+ GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (box), self->priv->hw_treeview);
+ gtk_container_add (GTK_CONTAINER (alignment), box);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->hw_treeview));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ box = gtk_frame_new (_("Settings for the selected device:"));
+ label = gtk_frame_get_label_widget (GTK_FRAME (box));
+ _gtk_label_make_bold (GTK_LABEL (label));
+ gtk_frame_set_shadow_type (GTK_FRAME (box), GTK_SHADOW_NONE);
+ gtk_box_pack_start (GTK_BOX (self->priv->hw_box), box, FALSE, TRUE, 12);
+ self->priv->hw_settings_box = gtk_vbox_new (FALSE, 12);
+ gtk_container_add (GTK_CONTAINER (box), self->priv->hw_settings_box);
+
+ /* Input page */
+ self->priv->input_box = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (self->priv->input_box), 12);
+ label = gtk_label_new (_("Input"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (self->priv->notebook),
+ self->priv->input_box,
+ label);
+
+ self->priv->input_bar = create_bar (self, self->priv->size_group, TRUE);
+ gvc_channel_bar_set_name (GVC_CHANNEL_BAR (self->priv->input_bar),
+ _("_Input volume: "));
+ gvc_channel_bar_set_low_icon_name (GVC_CHANNEL_BAR (self->priv->input_bar),
+ "audio-input-microphone-low");
+ gvc_channel_bar_set_high_icon_name (GVC_CHANNEL_BAR (self->priv->input_bar),
+ "audio-input-microphone-high");
+ gtk_widget_set_sensitive (self->priv->input_bar, FALSE);
+ alignment = gtk_alignment_new (0, 0, 1, 1);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
+ gtk_container_add (GTK_CONTAINER (alignment), self->priv->input_bar);
+ gtk_box_pack_start (GTK_BOX (self->priv->input_box),
+ alignment,
+ FALSE, FALSE, 0);
+
+ box = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (self->priv->input_box),
+ box,
+ FALSE, FALSE, 6);
+
+ sbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box),
+ sbox,
+ FALSE, FALSE, 0);
+
+ label = gtk_label_new (_("Input level:"));
+ gtk_box_pack_start (GTK_BOX (sbox),
+ label,
+ FALSE, FALSE, 0);
+ gtk_size_group_add_widget (self->priv->size_group, sbox);
+
+ self->priv->input_level_bar = gvc_level_bar_new ();
+ gvc_level_bar_set_orientation (GVC_LEVEL_BAR (self->priv->input_level_bar),
+ GTK_ORIENTATION_HORIZONTAL);
+ gvc_level_bar_set_scale (GVC_LEVEL_BAR (self->priv->input_level_bar),
+ GVC_LEVEL_SCALE_LINEAR);
+ gtk_box_pack_start (GTK_BOX (box),
+ self->priv->input_level_bar,
+ TRUE, TRUE, 6);
+
+ ebox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (box),
+ ebox,
+ FALSE, FALSE, 0);
+ gtk_size_group_add_widget (self->priv->size_group, ebox);
+
+ self->priv->input_settings_box = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (self->priv->input_box),
+ self->priv->input_settings_box,
+ FALSE, FALSE, 0);
+
+ box = gtk_frame_new (_("C_hoose a device for sound input:"));
+ label = gtk_frame_get_label_widget (GTK_FRAME (box));
+ _gtk_label_make_bold (GTK_LABEL (label));
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+ gtk_frame_set_shadow_type (GTK_FRAME (box), GTK_SHADOW_NONE);
+ gtk_box_pack_start (GTK_BOX (self->priv->input_box), box, TRUE, TRUE, 0);
+
+ alignment = gtk_alignment_new (0, 0, 1, 1);
+ gtk_container_add (GTK_CONTAINER (box), alignment);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
+
+ self->priv->input_treeview = create_stream_treeview (self,
+ G_CALLBACK (on_input_radio_toggled));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->priv->input_treeview);
+
+ box = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (box),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (box),
+ GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (box), self->priv->input_treeview);
+ gtk_container_add (GTK_CONTAINER (alignment), box);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->input_treeview));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ /* Output page */
+ self->priv->output_box = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (self->priv->output_box), 12);
+ label = gtk_label_new (_("Output"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (self->priv->notebook),
+ self->priv->output_box,
+ label);
+
+ box = gtk_frame_new (_("C_hoose a device for sound output:"));
+ label = gtk_frame_get_label_widget (GTK_FRAME (box));
+ _gtk_label_make_bold (GTK_LABEL (label));
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+ gtk_frame_set_shadow_type (GTK_FRAME (box), GTK_SHADOW_NONE);
+ gtk_box_pack_start (GTK_BOX (self->priv->output_box), box, TRUE, TRUE, 0);
+
+ alignment = gtk_alignment_new (0, 0, 1, 1);
+ gtk_container_add (GTK_CONTAINER (box), alignment);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 0, 0);
+
+ self->priv->output_treeview = create_stream_treeview (self,
+ G_CALLBACK (on_output_radio_toggled));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->priv->output_treeview);
+
+ box = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (box),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (box),
+ GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (box), self->priv->output_treeview);
+ gtk_container_add (GTK_CONTAINER (alignment), box);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->output_treeview));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ box = gtk_frame_new (_("Settings for the selected device:"));
+ label = gtk_frame_get_label_widget (GTK_FRAME (box));
+ _gtk_label_make_bold (GTK_LABEL (label));
+ gtk_frame_set_shadow_type (GTK_FRAME (box), GTK_SHADOW_NONE);
+ gtk_box_pack_start (GTK_BOX (self->priv->output_box), box, FALSE, FALSE, 12);
+ self->priv->output_settings_box = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (box), self->priv->output_settings_box);
+
+ /* Applications */
+ self->priv->applications_box = gtk_vbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (self->priv->applications_box), 12);
+ label = gtk_label_new (_("Applications"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (self->priv->notebook),
+ self->priv->applications_box,
+ label);
+ self->priv->no_apps_label = gtk_label_new (_("No application is currently playing or recording audio."));
+ gtk_box_pack_start (GTK_BOX (self->priv->applications_box),
+ self->priv->no_apps_label,
+ TRUE, TRUE, 0);
+
+ g_signal_connect (self->priv->mixer_control,
+ "stream-added",
+ G_CALLBACK (on_control_stream_added),
+ self);
+ g_signal_connect (self->priv->mixer_control,
+ "stream-removed",
+ G_CALLBACK (on_control_stream_removed),
+ self);
+ g_signal_connect (self->priv->mixer_control,
+ "card-added",
+ G_CALLBACK (on_control_card_added),
+ self);
+ g_signal_connect (self->priv->mixer_control,
+ "card-removed",
+ G_CALLBACK (on_control_card_removed),
+ self);
+
+ gtk_widget_show_all (main_vbox);
+
+ streams = gvc_mixer_control_get_streams (self->priv->mixer_control);
+ for (l = streams; l != NULL; l = l->next) {
+ stream = l->data;
+ add_stream (self, stream);
+ }
+ g_slist_free (streams);
+
+ cards = gvc_mixer_control_get_cards (self->priv->mixer_control);
+ for (l = cards; l != NULL; l = l->next) {
+ card = l->data;
+ add_card (self, card);
+ }
+ g_slist_free (cards);
+
+ return object;
+}
+
+static void
+gvc_mixer_dialog_dispose (GObject *object)
+{
+ GvcMixerDialog *dialog = GVC_MIXER_DIALOG (object);
+
+ if (dialog->priv->mixer_control != NULL) {
+ g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
+ on_control_stream_added,
+ dialog);
+ g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
+ on_control_stream_removed,
+ dialog);
+ g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
+ on_control_card_added,
+ dialog);
+ g_signal_handlers_disconnect_by_func (dialog->priv->mixer_control,
+ on_control_card_removed,
+ dialog);
+
+ g_object_unref (dialog->priv->mixer_control);
+ dialog->priv->mixer_control = NULL;
+ }
+
+ if (dialog->priv->bars != NULL) {
+ g_hash_table_destroy (dialog->priv->bars);
+ dialog->priv->bars = NULL;
+ }
+
+ G_OBJECT_CLASS (gvc_mixer_dialog_parent_class)->dispose (object);
+}
+
+static void
+gvc_mixer_dialog_class_init (GvcMixerDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_dialog_constructor;
+ object_class->dispose = gvc_mixer_dialog_dispose;
+ object_class->finalize = gvc_mixer_dialog_finalize;
+ object_class->set_property = gvc_mixer_dialog_set_property;
+ object_class->get_property = gvc_mixer_dialog_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_MIXER_CONTROL,
+ g_param_spec_object ("mixer-control",
+ "mixer control",
+ "mixer control",
+ GVC_TYPE_MIXER_CONTROL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GvcMixerDialogPrivate));
+}
+
+
+static void
+gvc_mixer_dialog_init (GvcMixerDialog *dialog)
+{
+ dialog->priv = GVC_MIXER_DIALOG_GET_PRIVATE (dialog);
+ dialog->priv->bars = g_hash_table_new (NULL, NULL);
+ dialog->priv->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ dialog->priv->apps_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+}
+
+static void
+gvc_mixer_dialog_finalize (GObject *object)
+{
+ GvcMixerDialog *mixer_dialog;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_DIALOG (object));
+
+ mixer_dialog = GVC_MIXER_DIALOG (object);
+
+ g_return_if_fail (mixer_dialog->priv != NULL);
+ G_OBJECT_CLASS (gvc_mixer_dialog_parent_class)->finalize (object);
+}
+
+GvcMixerDialog *
+gvc_mixer_dialog_new (GvcMixerControl *control)
+{
+ GObject *dialog;
+ dialog = g_object_new (GVC_TYPE_MIXER_DIALOG,
+ "icon-name", "multimedia-volume-control",
+ "title", _("Sound Preferences"),
+ "has-separator", FALSE,
+ "mixer-control", control,
+ NULL);
+ return GVC_MIXER_DIALOG (dialog);
+}
+
+enum {
+ PAGE_EVENTS,
+ PAGE_HARDWARE,
+ PAGE_INPUT,
+ PAGE_OUTPUT,
+ PAGE_APPLICATIONS
+};
+
+gboolean
+gvc_mixer_dialog_set_page (GvcMixerDialog *self,
+ const char *page)
+{
+ guint num;
+
+ g_return_val_if_fail (self != NULL, FALSE);
+
+ if (page == NULL)
+ num = 0;
+ else if (g_str_equal (page, "effects"))
+ num = PAGE_EVENTS;
+ else if (g_str_equal (page, "hardware"))
+ num = PAGE_HARDWARE;
+ else if (g_str_equal (page, "input"))
+ num = PAGE_INPUT;
+ else if (g_str_equal (page, "output"))
+ num = PAGE_OUTPUT;
+ else if (g_str_equal (page, "applications"))
+ num = PAGE_APPLICATIONS;
+ else
+ num = 0;
+
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook), num);
+
+ return TRUE;
+}
diff --git a/mate-volume-control/src/gvc-mixer-dialog.h b/mate-volume-control/src/gvc-mixer-dialog.h
new file mode 100644
index 0000000..64857b3
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-dialog.h
@@ -0,0 +1,56 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_DIALOG_H
+#define __GVC_MIXER_DIALOG_H
+
+#include <glib-object.h>
+#include "gvc-mixer-control.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_DIALOG (gvc_mixer_dialog_get_type ())
+#define GVC_MIXER_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_DIALOG, GvcMixerDialog))
+#define GVC_MIXER_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_DIALOG, GvcMixerDialogClass))
+#define GVC_IS_MIXER_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_DIALOG))
+#define GVC_IS_MIXER_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_DIALOG))
+#define GVC_MIXER_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_DIALOG, GvcMixerDialogClass))
+
+typedef struct GvcMixerDialogPrivate GvcMixerDialogPrivate;
+
+typedef struct
+{
+ GtkDialog parent;
+ GvcMixerDialogPrivate *priv;
+} GvcMixerDialog;
+
+typedef struct
+{
+ GtkDialogClass parent_class;
+} GvcMixerDialogClass;
+
+GType gvc_mixer_dialog_get_type (void);
+
+GvcMixerDialog * gvc_mixer_dialog_new (GvcMixerControl *control);
+gboolean gvc_mixer_dialog_set_page (GvcMixerDialog *dialog, const gchar* page);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_DIALOG_H */
diff --git a/mate-volume-control/src/gvc-mixer-event-role.c b/mate-volume-control/src/gvc-mixer-event-role.c
new file mode 100644
index 0000000..6166d1d
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-event-role.c
@@ -0,0 +1,239 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+#include <pulse/ext-stream-restore.h>
+
+#include "gvc-mixer-event-role.h"
+
+#define GVC_MIXER_EVENT_ROLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRolePrivate))
+
+struct GvcMixerEventRolePrivate
+{
+ char *device;
+};
+
+enum
+{
+ PROP_0,
+ PROP_DEVICE
+};
+
+static void gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass);
+static void gvc_mixer_event_role_init (GvcMixerEventRole *mixer_event_role);
+static void gvc_mixer_event_role_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerEventRole, gvc_mixer_event_role, GVC_TYPE_MIXER_STREAM)
+
+static gboolean
+update_settings (GvcMixerEventRole *role,
+ gboolean is_muted,
+ gpointer *op)
+{
+ pa_operation *o;
+ guint index;
+ const GvcChannelMap *map;
+ pa_context *context;
+ pa_ext_stream_restore_info info;
+
+ index = gvc_mixer_stream_get_index (GVC_MIXER_STREAM (role));
+
+ map = gvc_mixer_stream_get_channel_map (GVC_MIXER_STREAM(role));
+
+ info.volume = *gvc_channel_map_get_cvolume(map);
+ info.name = "sink-input-by-media-role:event";
+ info.channel_map = *gvc_channel_map_get_pa_channel_map(map);
+ info.device = role->priv->device;
+ info.mute = is_muted;
+
+ context = gvc_mixer_stream_get_pa_context (GVC_MIXER_STREAM (role));
+
+ o = pa_ext_stream_restore_write (context,
+ PA_UPDATE_REPLACE,
+ &info,
+ 1,
+ TRUE,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_ext_stream_restore_write() failed");
+ return FALSE;
+ }
+
+ if (op != NULL)
+ *op = o;
+
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_event_role_push_volume (GvcMixerStream *stream, gpointer *op)
+{
+ return update_settings (GVC_MIXER_EVENT_ROLE (stream),
+ gvc_mixer_stream_get_is_muted (stream), op);
+}
+
+static gboolean
+gvc_mixer_event_role_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ return update_settings (GVC_MIXER_EVENT_ROLE (stream),
+ is_muted, NULL);
+}
+
+static gboolean
+gvc_mixer_event_role_set_device (GvcMixerEventRole *role,
+ const char *device)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_EVENT_ROLE (role), FALSE);
+
+ g_free (role->priv->device);
+ role->priv->device = g_strdup (device);
+ g_object_notify (G_OBJECT (role), "device");
+
+ return TRUE;
+}
+
+static void
+gvc_mixer_event_role_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE:
+ gvc_mixer_event_role_set_device (self, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_mixer_event_role_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE:
+ g_value_set_string (value, self->priv->device);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+gvc_mixer_event_role_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerEventRole *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_EVENT_ROLE (object);
+
+ return object;
+}
+
+static void
+gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_event_role_constructor;
+ object_class->finalize = gvc_mixer_event_role_finalize;
+ object_class->set_property = gvc_mixer_event_role_set_property;
+ object_class->get_property = gvc_mixer_event_role_get_property;
+
+ stream_class->push_volume = gvc_mixer_event_role_push_volume;
+ stream_class->change_is_muted = gvc_mixer_event_role_change_is_muted;
+
+ g_object_class_install_property (object_class,
+ PROP_DEVICE,
+ g_param_spec_string ("device",
+ "Device",
+ "Device",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GvcMixerEventRolePrivate));
+}
+
+static void
+gvc_mixer_event_role_init (GvcMixerEventRole *event_role)
+{
+ event_role->priv = GVC_MIXER_EVENT_ROLE_GET_PRIVATE (event_role);
+
+}
+
+static void
+gvc_mixer_event_role_finalize (GObject *object)
+{
+ GvcMixerEventRole *mixer_event_role;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_EVENT_ROLE (object));
+
+ mixer_event_role = GVC_MIXER_EVENT_ROLE (object);
+
+ g_return_if_fail (mixer_event_role->priv != NULL);
+
+ g_free (mixer_event_role->priv->device);
+
+ G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->finalize (object);
+}
+
+GvcMixerStream *
+gvc_mixer_event_role_new (pa_context *context,
+ const char *device,
+ GvcChannelMap *channel_map)
+{
+ GObject *object;
+
+ object = g_object_new (GVC_TYPE_MIXER_EVENT_ROLE,
+ "pa-context", context,
+ "index", 0,
+ "device", device,
+ "channel-map", channel_map,
+ NULL);
+
+ return GVC_MIXER_STREAM (object);
+}
diff --git a/mate-volume-control/src/gvc-mixer-event-role.h b/mate-volume-control/src/gvc-mixer-event-role.h
new file mode 100644
index 0000000..ab4c509
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-event-role.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_EVENT_ROLE_H
+#define __GVC_MIXER_EVENT_ROLE_H
+
+#include <glib-object.h>
+#include "gvc-mixer-stream.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_EVENT_ROLE (gvc_mixer_event_role_get_type ())
+#define GVC_MIXER_EVENT_ROLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRole))
+#define GVC_MIXER_EVENT_ROLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRoleClass))
+#define GVC_IS_MIXER_EVENT_ROLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_EVENT_ROLE))
+#define GVC_IS_MIXER_EVENT_ROLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_EVENT_ROLE))
+#define GVC_MIXER_EVENT_ROLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRoleClass))
+
+typedef struct GvcMixerEventRolePrivate GvcMixerEventRolePrivate;
+
+typedef struct
+{
+ GvcMixerStream parent;
+ GvcMixerEventRolePrivate *priv;
+} GvcMixerEventRole;
+
+typedef struct
+{
+ GvcMixerStreamClass parent_class;
+} GvcMixerEventRoleClass;
+
+GType gvc_mixer_event_role_get_type (void);
+
+GvcMixerStream * gvc_mixer_event_role_new (pa_context *context,
+ const char *device,
+ GvcChannelMap *channel_map);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_EVENT_ROLE_H */
diff --git a/mate-volume-control/src/gvc-mixer-sink-input.c b/mate-volume-control/src/gvc-mixer-sink-input.c
new file mode 100644
index 0000000..9d4ad2a
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-sink-input.c
@@ -0,0 +1,188 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-mixer-sink-input.h"
+
+#define GVC_MIXER_SINK_INPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputPrivate))
+
+struct GvcMixerSinkInputPrivate
+{
+ gpointer dummy;
+};
+
+static void gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass);
+static void gvc_mixer_sink_input_init (GvcMixerSinkInput *mixer_sink_input);
+static void gvc_mixer_sink_input_finalize (GObject *object);
+static void gvc_mixer_sink_input_dispose (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM)
+
+static gboolean
+gvc_mixer_sink_input_push_volume (GvcMixerStream *stream, gpointer *op)
+{
+ pa_operation *o;
+ guint index;
+ const GvcChannelMap *map;
+ pa_context *context;
+ const pa_cvolume *cv;
+ guint num_channels;
+
+ index = gvc_mixer_stream_get_index (stream);
+
+ map = gvc_mixer_stream_get_channel_map (stream);
+ num_channels = gvc_channel_map_get_num_channels (map);
+
+ cv = gvc_channel_map_get_cvolume(map);
+
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_sink_input_volume (context,
+ index,
+ cv,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_sink_input_volume() failed");
+ return FALSE;
+ }
+
+ *op = o;
+
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_sink_input_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ pa_operation *o;
+ guint index;
+ pa_context *context;
+
+ index = gvc_mixer_stream_get_index (stream);
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_sink_input_mute (context,
+ index,
+ is_muted,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_sink_input_mute_by_index() failed");
+ return FALSE;
+ }
+
+ pa_operation_unref(o);
+
+ return TRUE;
+}
+
+static GObject *
+gvc_mixer_sink_input_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerSinkInput *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_SINK_INPUT (object);
+
+ return object;
+}
+
+static void
+gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_sink_input_constructor;
+ object_class->dispose = gvc_mixer_sink_input_dispose;
+ object_class->finalize = gvc_mixer_sink_input_finalize;
+
+ stream_class->push_volume = gvc_mixer_sink_input_push_volume;
+ stream_class->change_is_muted = gvc_mixer_sink_input_change_is_muted;
+
+ g_type_class_add_private (klass, sizeof (GvcMixerSinkInputPrivate));
+}
+
+static void
+gvc_mixer_sink_input_init (GvcMixerSinkInput *sink_input)
+{
+ sink_input->priv = GVC_MIXER_SINK_INPUT_GET_PRIVATE (sink_input);
+}
+
+static void
+gvc_mixer_sink_input_dispose (GObject *object)
+{
+ GvcMixerSinkInput *mixer_sink_input;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
+
+ mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
+
+ G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->dispose (object);
+}
+
+static void
+gvc_mixer_sink_input_finalize (GObject *object)
+{
+ GvcMixerSinkInput *mixer_sink_input;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
+
+ mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
+
+ g_return_if_fail (mixer_sink_input->priv != NULL);
+ G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->finalize (object);
+}
+
+GvcMixerStream *
+gvc_mixer_sink_input_new (pa_context *context,
+ guint index,
+ GvcChannelMap *channel_map)
+{
+ GObject *object;
+
+ object = g_object_new (GVC_TYPE_MIXER_SINK_INPUT,
+ "pa-context", context,
+ "index", index,
+ "channel-map", channel_map,
+ NULL);
+
+ return GVC_MIXER_STREAM (object);
+}
diff --git a/mate-volume-control/src/gvc-mixer-sink-input.h b/mate-volume-control/src/gvc-mixer-sink-input.h
new file mode 100644
index 0000000..8a4b714
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-sink-input.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_SINK_INPUT_H
+#define __GVC_MIXER_SINK_INPUT_H
+
+#include <glib-object.h>
+#include "gvc-mixer-stream.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_SINK_INPUT (gvc_mixer_sink_input_get_type ())
+#define GVC_MIXER_SINK_INPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInput))
+#define GVC_MIXER_SINK_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputClass))
+#define GVC_IS_MIXER_SINK_INPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SINK_INPUT))
+#define GVC_IS_MIXER_SINK_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SINK_INPUT))
+#define GVC_MIXER_SINK_INPUT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputClass))
+
+typedef struct GvcMixerSinkInputPrivate GvcMixerSinkInputPrivate;
+
+typedef struct
+{
+ GvcMixerStream parent;
+ GvcMixerSinkInputPrivate *priv;
+} GvcMixerSinkInput;
+
+typedef struct
+{
+ GvcMixerStreamClass parent_class;
+} GvcMixerSinkInputClass;
+
+GType gvc_mixer_sink_input_get_type (void);
+
+GvcMixerStream * gvc_mixer_sink_input_new (pa_context *context,
+ guint index,
+ GvcChannelMap *map);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_SINK_INPUT_H */
diff --git a/mate-volume-control/src/gvc-mixer-sink.c b/mate-volume-control/src/gvc-mixer-sink.c
new file mode 100644
index 0000000..649b840
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-sink.c
@@ -0,0 +1,220 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-mixer-sink.h"
+
+#define GVC_MIXER_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SINK, GvcMixerSinkPrivate))
+
+struct GvcMixerSinkPrivate
+{
+ gpointer dummy;
+};
+
+static void gvc_mixer_sink_class_init (GvcMixerSinkClass *klass);
+static void gvc_mixer_sink_init (GvcMixerSink *mixer_sink);
+static void gvc_mixer_sink_finalize (GObject *object);
+static void gvc_mixer_sink_dispose (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM)
+
+static gboolean
+gvc_mixer_sink_push_volume (GvcMixerStream *stream, gpointer *op)
+{
+ pa_operation *o;
+ guint index;
+ const GvcChannelMap *map;
+ pa_context *context;
+ const pa_cvolume *cv;
+
+ index = gvc_mixer_stream_get_index (stream);
+
+ map = gvc_mixer_stream_get_channel_map (stream);
+
+ /* set the volume */
+ cv = gvc_channel_map_get_cvolume(map);
+
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_sink_volume_by_index (context,
+ index,
+ cv,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_sink_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
+ return FALSE;
+ }
+
+ *op = o;
+
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_sink_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ pa_operation *o;
+ guint index;
+ pa_context *context;
+
+ index = gvc_mixer_stream_get_index (stream);
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_sink_mute_by_index (context,
+ index,
+ is_muted,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_sink_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
+ return FALSE;
+ }
+
+ pa_operation_unref(o);
+
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_sink_change_port (GvcMixerStream *stream,
+ const char *port)
+{
+#if PA_MICRO > 15
+ pa_operation *o;
+ guint index;
+ pa_context *context;
+
+ index = gvc_mixer_stream_get_index (stream);
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_sink_port_by_index (context,
+ index,
+ port,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_sink_port_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
+ return FALSE;
+ }
+
+ pa_operation_unref(o);
+
+ return TRUE;
+#else
+ return FALSE;
+#endif /* PA_MICRO > 15 */
+}
+
+static GObject *
+gvc_mixer_sink_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerSink *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_SINK (object);
+
+ return object;
+}
+
+static void
+gvc_mixer_sink_class_init (GvcMixerSinkClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_sink_constructor;
+ object_class->dispose = gvc_mixer_sink_dispose;
+ object_class->finalize = gvc_mixer_sink_finalize;
+
+ stream_class->push_volume = gvc_mixer_sink_push_volume;
+ stream_class->change_port = gvc_mixer_sink_change_port;
+ stream_class->change_is_muted = gvc_mixer_sink_change_is_muted;
+
+ g_type_class_add_private (klass, sizeof (GvcMixerSinkPrivate));
+}
+
+static void
+gvc_mixer_sink_init (GvcMixerSink *sink)
+{
+ sink->priv = GVC_MIXER_SINK_GET_PRIVATE (sink);
+}
+
+static void
+gvc_mixer_sink_dispose (GObject *object)
+{
+ GvcMixerSink *mixer_sink;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SINK (object));
+
+ mixer_sink = GVC_MIXER_SINK (object);
+
+ G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->dispose (object);
+}
+
+static void
+gvc_mixer_sink_finalize (GObject *object)
+{
+ GvcMixerSink *mixer_sink;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SINK (object));
+
+ mixer_sink = GVC_MIXER_SINK (object);
+
+ g_return_if_fail (mixer_sink->priv != NULL);
+ G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->finalize (object);
+}
+
+GvcMixerStream *
+gvc_mixer_sink_new (pa_context *context,
+ guint index,
+ GvcChannelMap *channel_map)
+
+{
+ GObject *object;
+
+ object = g_object_new (GVC_TYPE_MIXER_SINK,
+ "pa-context", context,
+ "index", index,
+ "channel-map", channel_map,
+ NULL);
+
+ return GVC_MIXER_STREAM (object);
+}
diff --git a/mate-volume-control/src/gvc-mixer-sink.h b/mate-volume-control/src/gvc-mixer-sink.h
new file mode 100644
index 0000000..2a4a4ba
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-sink.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_SINK_H
+#define __GVC_MIXER_SINK_H
+
+#include <glib-object.h>
+#include "gvc-mixer-stream.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_SINK (gvc_mixer_sink_get_type ())
+#define GVC_MIXER_SINK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SINK, GvcMixerSink))
+#define GVC_MIXER_SINK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SINK, GvcMixerSinkClass))
+#define GVC_IS_MIXER_SINK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SINK))
+#define GVC_IS_MIXER_SINK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SINK))
+#define GVC_MIXER_SINK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SINK, GvcMixerSinkClass))
+
+typedef struct GvcMixerSinkPrivate GvcMixerSinkPrivate;
+
+typedef struct
+{
+ GvcMixerStream parent;
+ GvcMixerSinkPrivate *priv;
+} GvcMixerSink;
+
+typedef struct
+{
+ GvcMixerStreamClass parent_class;
+} GvcMixerSinkClass;
+
+GType gvc_mixer_sink_get_type (void);
+
+GvcMixerStream * gvc_mixer_sink_new (pa_context *context,
+ guint index,
+ GvcChannelMap *map);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_SINK_H */
diff --git a/mate-volume-control/src/gvc-mixer-source-output.c b/mate-volume-control/src/gvc-mixer-source-output.c
new file mode 100644
index 0000000..b4cc34d
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-source-output.c
@@ -0,0 +1,128 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-mixer-source-output.h"
+
+#define GVC_MIXER_SOURCE_OUTPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputPrivate))
+
+struct GvcMixerSourceOutputPrivate
+{
+ gpointer dummy;
+};
+
+static void gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass);
+static void gvc_mixer_source_output_init (GvcMixerSourceOutput *mixer_source_output);
+static void gvc_mixer_source_output_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerSourceOutput, gvc_mixer_source_output, GVC_TYPE_MIXER_STREAM)
+
+static gboolean
+gvc_mixer_source_output_push_volume (GvcMixerStream *stream, gpointer *op)
+{
+ /* FIXME: */
+ *op = NULL;
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_source_output_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ /* FIXME: */
+ return TRUE;
+}
+
+static GObject *
+gvc_mixer_source_output_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerSourceOutput *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_SOURCE_OUTPUT (object);
+
+ return object;
+}
+
+static void
+gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_source_output_constructor;
+ object_class->finalize = gvc_mixer_source_output_finalize;
+
+ stream_class->push_volume = gvc_mixer_source_output_push_volume;
+ stream_class->change_is_muted = gvc_mixer_source_output_change_is_muted;
+
+ g_type_class_add_private (klass, sizeof (GvcMixerSourceOutputPrivate));
+}
+
+static void
+gvc_mixer_source_output_init (GvcMixerSourceOutput *source_output)
+{
+ source_output->priv = GVC_MIXER_SOURCE_OUTPUT_GET_PRIVATE (source_output);
+
+}
+
+static void
+gvc_mixer_source_output_finalize (GObject *object)
+{
+ GvcMixerSourceOutput *mixer_source_output;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SOURCE_OUTPUT (object));
+
+ mixer_source_output = GVC_MIXER_SOURCE_OUTPUT (object);
+
+ g_return_if_fail (mixer_source_output->priv != NULL);
+ G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->finalize (object);
+}
+
+GvcMixerStream *
+gvc_mixer_source_output_new (pa_context *context,
+ guint index,
+ GvcChannelMap *channel_map)
+{
+ GObject *object;
+
+ object = g_object_new (GVC_TYPE_MIXER_SOURCE_OUTPUT,
+ "pa-context", context,
+ "index", index,
+ "channel-map", channel_map,
+ NULL);
+
+ return GVC_MIXER_STREAM (object);
+}
diff --git a/mate-volume-control/src/gvc-mixer-source-output.h b/mate-volume-control/src/gvc-mixer-source-output.h
new file mode 100644
index 0000000..2283e3b
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-source-output.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_SOURCE_OUTPUT_H
+#define __GVC_MIXER_SOURCE_OUTPUT_H
+
+#include <glib-object.h>
+#include "gvc-mixer-stream.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_SOURCE_OUTPUT (gvc_mixer_source_output_get_type ())
+#define GVC_MIXER_SOURCE_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutput))
+#define GVC_MIXER_SOURCE_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputClass))
+#define GVC_IS_MIXER_SOURCE_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT))
+#define GVC_IS_MIXER_SOURCE_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SOURCE_OUTPUT))
+#define GVC_MIXER_SOURCE_OUTPUT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputClass))
+
+typedef struct GvcMixerSourceOutputPrivate GvcMixerSourceOutputPrivate;
+
+typedef struct
+{
+ GvcMixerStream parent;
+ GvcMixerSourceOutputPrivate *priv;
+} GvcMixerSourceOutput;
+
+typedef struct
+{
+ GvcMixerStreamClass parent_class;
+} GvcMixerSourceOutputClass;
+
+GType gvc_mixer_source_output_get_type (void);
+
+GvcMixerStream * gvc_mixer_source_output_new (pa_context *context,
+ guint index,
+ GvcChannelMap *map);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_SOURCE_OUTPUT_H */
diff --git a/mate-volume-control/src/gvc-mixer-source.c b/mate-volume-control/src/gvc-mixer-source.c
new file mode 100644
index 0000000..309bcb9
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-source.c
@@ -0,0 +1,220 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-mixer-source.h"
+
+#define GVC_MIXER_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSourcePrivate))
+
+struct GvcMixerSourcePrivate
+{
+ gpointer dummy;
+};
+
+static void gvc_mixer_source_class_init (GvcMixerSourceClass *klass);
+static void gvc_mixer_source_init (GvcMixerSource *mixer_source);
+static void gvc_mixer_source_finalize (GObject *object);
+static void gvc_mixer_source_dispose (GObject *object);
+
+G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM)
+
+static gboolean
+gvc_mixer_source_push_volume (GvcMixerStream *stream, gpointer *op)
+{
+ pa_operation *o;
+ guint index;
+ const GvcChannelMap *map;
+ pa_context *context;
+ const pa_cvolume *cv;
+
+ index = gvc_mixer_stream_get_index (stream);
+
+ map = gvc_mixer_stream_get_channel_map (stream);
+
+ /* set the volume */
+ cv = gvc_channel_map_get_cvolume (map);
+
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_source_volume_by_index (context,
+ index,
+ cv,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_source_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
+ return FALSE;
+ }
+
+ *op = o;
+
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_source_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ pa_operation *o;
+ guint index;
+ pa_context *context;
+
+ index = gvc_mixer_stream_get_index (stream);
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_source_mute_by_index (context,
+ index,
+ is_muted,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_source_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
+ return FALSE;
+ }
+
+ pa_operation_unref(o);
+
+ return TRUE;
+}
+
+static gboolean
+gvc_mixer_source_change_port (GvcMixerStream *stream,
+ const char *port)
+{
+#if PA_MICRO > 15
+ pa_operation *o;
+ guint index;
+ pa_context *context;
+
+ index = gvc_mixer_stream_get_index (stream);
+ context = gvc_mixer_stream_get_pa_context (stream);
+
+ o = pa_context_set_source_port_by_index (context,
+ index,
+ port,
+ NULL,
+ NULL);
+
+ if (o == NULL) {
+ g_warning ("pa_context_set_source_port_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
+ return FALSE;
+ }
+
+ pa_operation_unref(o);
+
+ return TRUE;
+#else
+ return FALSE;
+#endif /* PA_MICRO > 15 */
+}
+
+static GObject *
+gvc_mixer_source_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerSource *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_source_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_SOURCE (object);
+
+ return object;
+}
+
+static void
+gvc_mixer_source_class_init (GvcMixerSourceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
+
+ object_class->constructor = gvc_mixer_source_constructor;
+ object_class->dispose = gvc_mixer_source_dispose;
+ object_class->finalize = gvc_mixer_source_finalize;
+
+ stream_class->push_volume = gvc_mixer_source_push_volume;
+ stream_class->change_is_muted = gvc_mixer_source_change_is_muted;
+ stream_class->change_port = gvc_mixer_source_change_port;
+
+ g_type_class_add_private (klass, sizeof (GvcMixerSourcePrivate));
+}
+
+static void
+gvc_mixer_source_init (GvcMixerSource *source)
+{
+ source->priv = GVC_MIXER_SOURCE_GET_PRIVATE (source);
+}
+
+static void
+gvc_mixer_source_dispose (GObject *object)
+{
+ GvcMixerSource *mixer_source;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
+
+ mixer_source = GVC_MIXER_SOURCE (object);
+
+ G_OBJECT_CLASS (gvc_mixer_source_parent_class)->dispose (object);
+}
+
+static void
+gvc_mixer_source_finalize (GObject *object)
+{
+ GvcMixerSource *mixer_source;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
+
+ mixer_source = GVC_MIXER_SOURCE (object);
+
+ g_return_if_fail (mixer_source->priv != NULL);
+ G_OBJECT_CLASS (gvc_mixer_source_parent_class)->finalize (object);
+}
+
+GvcMixerStream *
+gvc_mixer_source_new (pa_context *context,
+ guint index,
+ GvcChannelMap *channel_map)
+
+{
+ GObject *object;
+
+ object = g_object_new (GVC_TYPE_MIXER_SOURCE,
+ "pa-context", context,
+ "index", index,
+ "channel-map", channel_map,
+ NULL);
+
+ return GVC_MIXER_STREAM (object);
+}
diff --git a/mate-volume-control/src/gvc-mixer-source.h b/mate-volume-control/src/gvc-mixer-source.h
new file mode 100644
index 0000000..503f1b5
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-source.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_SOURCE_H
+#define __GVC_MIXER_SOURCE_H
+
+#include <glib-object.h>
+#include "gvc-mixer-stream.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_SOURCE (gvc_mixer_source_get_type ())
+#define GVC_MIXER_SOURCE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSource))
+#define GVC_MIXER_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SOURCE, GvcMixerSourceClass))
+#define GVC_IS_MIXER_SOURCE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SOURCE))
+#define GVC_IS_MIXER_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SOURCE))
+#define GVC_MIXER_SOURCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSourceClass))
+
+typedef struct GvcMixerSourcePrivate GvcMixerSourcePrivate;
+
+typedef struct
+{
+ GvcMixerStream parent;
+ GvcMixerSourcePrivate *priv;
+} GvcMixerSource;
+
+typedef struct
+{
+ GvcMixerStreamClass parent_class;
+} GvcMixerSourceClass;
+
+GType gvc_mixer_source_get_type (void);
+
+GvcMixerStream * gvc_mixer_source_new (pa_context *context,
+ guint index,
+ GvcChannelMap *map);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_SOURCE_H */
diff --git a/mate-volume-control/src/gvc-mixer-stream.c b/mate-volume-control/src/gvc-mixer-stream.c
new file mode 100644
index 0000000..243d773
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-stream.c
@@ -0,0 +1,912 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <pulse/pulseaudio.h>
+
+#include "gvc-mixer-stream.h"
+
+#define GVC_MIXER_STREAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStreamPrivate))
+
+static guint32 stream_serial = 1;
+
+struct GvcMixerStreamPrivate
+{
+ pa_context *pa_context;
+ guint id;
+ guint index;
+ gint card_index;
+ GvcChannelMap *channel_map;
+ char *name;
+ char *description;
+ char *application_id;
+ char *icon_name;
+ gboolean is_muted;
+ gboolean can_decibel;
+ gboolean is_event_stream;
+ gboolean is_virtual;
+ pa_volume_t base_volume;
+ pa_operation *change_volume_op;
+ char *port;
+ char *human_port;
+ GList *ports;
+};
+
+enum
+{
+ PROP_0,
+ PROP_ID,
+ PROP_PA_CONTEXT,
+ PROP_CHANNEL_MAP,
+ PROP_INDEX,
+ PROP_NAME,
+ PROP_DESCRIPTION,
+ PROP_APPLICATION_ID,
+ PROP_ICON_NAME,
+ PROP_VOLUME,
+ PROP_DECIBEL,
+ PROP_IS_MUTED,
+ PROP_CAN_DECIBEL,
+ PROP_IS_EVENT_STREAM,
+ PROP_IS_VIRTUAL,
+ PROP_CARD_INDEX,
+ PROP_PORT,
+};
+
+static void gvc_mixer_stream_class_init (GvcMixerStreamClass *klass);
+static void gvc_mixer_stream_init (GvcMixerStream *mixer_stream);
+static void gvc_mixer_stream_finalize (GObject *object);
+
+G_DEFINE_ABSTRACT_TYPE (GvcMixerStream, gvc_mixer_stream, G_TYPE_OBJECT)
+
+static guint32
+get_next_stream_serial (void)
+{
+ guint32 serial;
+
+ serial = stream_serial++;
+
+ if ((gint32)stream_serial < 0) {
+ stream_serial = 1;
+ }
+
+ return serial;
+}
+
+pa_context *
+gvc_mixer_stream_get_pa_context (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+ return stream->priv->pa_context;
+}
+
+guint
+gvc_mixer_stream_get_index (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+ return stream->priv->index;
+}
+
+guint
+gvc_mixer_stream_get_id (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+ return stream->priv->id;
+}
+
+const GvcChannelMap *
+gvc_mixer_stream_get_channel_map (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+ return stream->priv->channel_map;
+}
+
+pa_volume_t
+gvc_mixer_stream_get_volume (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+
+ return (pa_volume_t) gvc_channel_map_get_volume(stream->priv->channel_map)[VOLUME];
+}
+
+gdouble
+gvc_mixer_stream_get_decibel (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+
+ return pa_sw_volume_to_dB(
+ (pa_volume_t) gvc_channel_map_get_volume(stream->priv->channel_map)[VOLUME]);
+}
+
+gboolean
+gvc_mixer_stream_set_volume (GvcMixerStream *stream,
+ pa_volume_t volume)
+{
+ pa_cvolume cv;
+
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ cv = *gvc_channel_map_get_cvolume(stream->priv->channel_map);
+ pa_cvolume_scale(&cv, volume);
+
+ if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
+ gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
+ g_object_notify (G_OBJECT (stream), "volume");
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+gboolean
+gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
+ gdouble db)
+{
+ pa_cvolume cv;
+
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ cv = *gvc_channel_map_get_cvolume(stream->priv->channel_map);
+ pa_cvolume_scale(&cv, pa_sw_volume_from_dB(db));
+
+ if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
+ gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
+ g_object_notify (G_OBJECT (stream), "volume");
+ }
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_stream_get_is_muted (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ return stream->priv->is_muted;
+}
+
+gboolean
+gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ return stream->priv->can_decibel;
+}
+
+gboolean
+gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ if (is_muted != stream->priv->is_muted) {
+ stream->priv->is_muted = is_muted;
+ g_object_notify (G_OBJECT (stream), "is-muted");
+ }
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
+ gboolean can_decibel)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ if (can_decibel != stream->priv->can_decibel) {
+ stream->priv->can_decibel = can_decibel;
+ g_object_notify (G_OBJECT (stream), "can-decibel");
+ }
+
+ return TRUE;
+}
+
+const char *
+gvc_mixer_stream_get_name (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+ return stream->priv->name;
+}
+
+const char *
+gvc_mixer_stream_get_description (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+ return stream->priv->description;
+}
+
+gboolean
+gvc_mixer_stream_set_name (GvcMixerStream *stream,
+ const char *name)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ g_free (stream->priv->name);
+ stream->priv->name = g_strdup (name);
+ g_object_notify (G_OBJECT (stream), "name");
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_stream_set_description (GvcMixerStream *stream,
+ const char *description)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ g_free (stream->priv->description);
+ stream->priv->description = g_strdup (description);
+ g_object_notify (G_OBJECT (stream), "description");
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_stream_is_event_stream (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ return stream->priv->is_event_stream;
+}
+
+gboolean
+gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
+ gboolean is_event_stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ stream->priv->is_event_stream = is_event_stream;
+ g_object_notify (G_OBJECT (stream), "is-event-stream");
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_stream_is_virtual (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ return stream->priv->is_virtual;
+}
+
+gboolean
+gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
+ gboolean is_virtual)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ stream->priv->is_virtual = is_virtual;
+ g_object_notify (G_OBJECT (stream), "is-virtual");
+
+ return TRUE;
+}
+
+const char *
+gvc_mixer_stream_get_application_id (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+ return stream->priv->application_id;
+}
+
+gboolean
+gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
+ const char *application_id)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ g_free (stream->priv->application_id);
+ stream->priv->application_id = g_strdup (application_id);
+ g_object_notify (G_OBJECT (stream), "application-id");
+
+ return TRUE;
+}
+
+static void
+on_channel_map_volume_changed (GvcChannelMap *channel_map,
+ gboolean set,
+ GvcMixerStream *stream)
+{
+ if (set == TRUE)
+ gvc_mixer_stream_push_volume (stream);
+
+ g_object_notify (G_OBJECT (stream), "volume");
+}
+
+static gboolean
+gvc_mixer_stream_set_channel_map (GvcMixerStream *stream,
+ GvcChannelMap *channel_map)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ if (channel_map != NULL) {
+ g_object_ref (channel_map);
+ }
+
+ if (stream->priv->channel_map != NULL) {
+ g_signal_handlers_disconnect_by_func (stream->priv->channel_map,
+ on_channel_map_volume_changed,
+ stream);
+ g_object_unref (stream->priv->channel_map);
+ }
+
+ stream->priv->channel_map = channel_map;
+
+ if (stream->priv->channel_map != NULL) {
+ g_signal_connect (stream->priv->channel_map,
+ "volume-changed",
+ G_CALLBACK (on_channel_map_volume_changed),
+ stream);
+
+ g_object_notify (G_OBJECT (stream), "channel-map");
+ }
+
+ return TRUE;
+}
+
+const char *
+gvc_mixer_stream_get_icon_name (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+ return stream->priv->icon_name;
+}
+
+gboolean
+gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
+ const char *icon_name)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ g_free (stream->priv->icon_name);
+ stream->priv->icon_name = g_strdup (icon_name);
+ g_object_notify (G_OBJECT (stream), "icon-name");
+
+ return TRUE;
+}
+
+pa_volume_t
+gvc_mixer_stream_get_base_volume (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+
+ return stream->priv->base_volume;
+}
+
+gboolean
+gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
+ pa_volume_t base_volume)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ stream->priv->base_volume = base_volume;
+
+ return TRUE;
+}
+
+const GvcMixerStreamPort *
+gvc_mixer_stream_get_port (GvcMixerStream *stream)
+{
+ GList *l;
+
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
+ g_return_val_if_fail (stream->priv->ports != NULL, NULL);
+
+ for (l = stream->priv->ports; l != NULL; l = l->next) {
+ GvcMixerStreamPort *p = l->data;
+ if (g_strcmp0 (stream->priv->port, p->port) == 0) {
+ return p;
+ }
+ }
+
+ g_assert_not_reached ();
+
+ return NULL;
+}
+
+gboolean
+gvc_mixer_stream_set_port (GvcMixerStream *stream,
+ const char *port)
+{
+ GList *l;
+
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ g_return_val_if_fail (stream->priv->ports != NULL, FALSE);
+
+ g_free (stream->priv->port);
+ stream->priv->port = g_strdup (port);
+
+ g_free (stream->priv->human_port);
+ stream->priv->human_port = NULL;
+
+ for (l = stream->priv->ports; l != NULL; l = l->next) {
+ GvcMixerStreamPort *p = l->data;
+ if (g_str_equal (stream->priv->port, p->port)) {
+ stream->priv->human_port = g_strdup (p->human_port);
+ break;
+ }
+ }
+
+ g_object_notify (G_OBJECT (stream), "port");
+
+ return TRUE;
+}
+
+gboolean
+gvc_mixer_stream_change_port (GvcMixerStream *stream,
+ const char *port)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ return GVC_MIXER_STREAM_GET_CLASS (stream)->change_port (stream, port);
+}
+
+const GList *
+gvc_mixer_stream_get_ports (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ return stream->priv->ports;
+}
+
+static int
+sort_ports (GvcMixerStreamPort *a,
+ GvcMixerStreamPort *b)
+{
+ if (a->priority == b->priority)
+ return 0;
+ if (a->priority > b->priority)
+ return 1;
+ return -1;
+}
+
+gboolean
+gvc_mixer_stream_set_ports (GvcMixerStream *stream,
+ GList *ports)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ g_return_val_if_fail (stream->priv->ports == NULL, FALSE);
+
+ stream->priv->ports = g_list_sort (ports, (GCompareFunc) sort_ports);
+
+ return TRUE;
+}
+
+gint
+gvc_mixer_stream_get_card_index (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), PA_INVALID_INDEX);
+ return stream->priv->card_index;
+}
+
+gboolean
+gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
+ gint card_index)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ stream->priv->card_index = card_index;
+ g_object_notify (G_OBJECT (stream), "card-index");
+
+ return TRUE;
+}
+
+static void
+gvc_mixer_stream_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerStream *self = GVC_MIXER_STREAM (object);
+
+ switch (prop_id) {
+ case PROP_PA_CONTEXT:
+ self->priv->pa_context = g_value_get_pointer (value);
+ break;
+ case PROP_INDEX:
+ self->priv->index = g_value_get_ulong (value);
+ break;
+ case PROP_ID:
+ self->priv->id = g_value_get_ulong (value);
+ break;
+ case PROP_CHANNEL_MAP:
+ gvc_mixer_stream_set_channel_map (self, g_value_get_object (value));
+ break;
+ case PROP_NAME:
+ gvc_mixer_stream_set_name (self, g_value_get_string (value));
+ break;
+ case PROP_DESCRIPTION:
+ gvc_mixer_stream_set_description (self, g_value_get_string (value));
+ break;
+ case PROP_APPLICATION_ID:
+ gvc_mixer_stream_set_application_id (self, g_value_get_string (value));
+ break;
+ case PROP_ICON_NAME:
+ gvc_mixer_stream_set_icon_name (self, g_value_get_string (value));
+ break;
+ case PROP_VOLUME:
+ gvc_mixer_stream_set_volume (self, g_value_get_ulong (value));
+ break;
+ case PROP_DECIBEL:
+ gvc_mixer_stream_set_decibel (self, g_value_get_double (value));
+ break;
+ case PROP_IS_MUTED:
+ gvc_mixer_stream_set_is_muted (self, g_value_get_boolean (value));
+ break;
+ case PROP_IS_EVENT_STREAM:
+ gvc_mixer_stream_set_is_event_stream (self, g_value_get_boolean (value));
+ break;
+ case PROP_IS_VIRTUAL:
+ gvc_mixer_stream_set_is_virtual (self, g_value_get_boolean (value));
+ break;
+ case PROP_CAN_DECIBEL:
+ gvc_mixer_stream_set_can_decibel (self, g_value_get_boolean (value));
+ break;
+ case PROP_PORT:
+ gvc_mixer_stream_set_port (self, g_value_get_string (value));
+ break;
+ case PROP_CARD_INDEX:
+ self->priv->card_index = g_value_get_long (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_mixer_stream_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcMixerStream *self = GVC_MIXER_STREAM (object);
+
+ switch (prop_id) {
+ case PROP_PA_CONTEXT:
+ g_value_set_pointer (value, self->priv->pa_context);
+ break;
+ case PROP_INDEX:
+ g_value_set_ulong (value, self->priv->index);
+ break;
+ case PROP_ID:
+ g_value_set_ulong (value, self->priv->id);
+ break;
+ case PROP_CHANNEL_MAP:
+ g_value_set_object (value, self->priv->channel_map);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, self->priv->name);
+ break;
+ case PROP_DESCRIPTION:
+ g_value_set_string (value, self->priv->description);
+ break;
+ case PROP_APPLICATION_ID:
+ g_value_set_string (value, self->priv->application_id);
+ break;
+ case PROP_ICON_NAME:
+ g_value_set_string (value, self->priv->icon_name);
+ break;
+ case PROP_VOLUME:
+ g_value_set_ulong (value,
+ pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map)));
+ break;
+ case PROP_DECIBEL:
+ g_value_set_double (value,
+ pa_sw_volume_to_dB(pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map))));
+ break;
+ case PROP_IS_MUTED:
+ g_value_set_boolean (value, self->priv->is_muted);
+ break;
+ case PROP_IS_EVENT_STREAM:
+ g_value_set_boolean (value, self->priv->is_event_stream);
+ break;
+ case PROP_IS_VIRTUAL:
+ g_value_set_boolean (value, self->priv->is_virtual);
+ break;
+ case PROP_CAN_DECIBEL:
+ g_value_set_boolean (value, self->priv->can_decibel);
+ break;
+ case PROP_PORT:
+ g_value_set_string (value, self->priv->port);
+ break;
+ case PROP_CARD_INDEX:
+ g_value_set_long (value, self->priv->card_index);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+gvc_mixer_stream_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcMixerStream *self;
+
+ object = G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ self = GVC_MIXER_STREAM (object);
+
+ self->priv->id = get_next_stream_serial ();
+
+ return object;
+}
+
+static gboolean
+gvc_mixer_stream_real_change_port (GvcMixerStream *stream,
+ const char *port)
+{
+ return FALSE;
+}
+
+static gboolean
+gvc_mixer_stream_real_push_volume (GvcMixerStream *stream, gpointer *op)
+{
+ return FALSE;
+}
+
+static gboolean
+gvc_mixer_stream_real_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ return FALSE;
+}
+
+gboolean
+gvc_mixer_stream_push_volume (GvcMixerStream *stream)
+{
+ pa_operation *op;
+ gboolean ret;
+
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ if (stream->priv->is_event_stream != FALSE)
+ return TRUE;
+
+ g_debug ("Pushing new volume to stream '%s' (%s)",
+ stream->priv->description, stream->priv->name);
+
+ ret = GVC_MIXER_STREAM_GET_CLASS (stream)->push_volume (stream, (gpointer *) &op);
+ if (ret) {
+ if (stream->priv->change_volume_op != NULL)
+ pa_operation_unref (stream->priv->change_volume_op);
+ stream->priv->change_volume_op = op;
+ }
+ return ret;
+}
+
+gboolean
+gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted)
+{
+ gboolean ret;
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ ret = GVC_MIXER_STREAM_GET_CLASS (stream)->change_is_muted (stream, is_muted);
+ return ret;
+}
+
+gboolean
+gvc_mixer_stream_is_running (GvcMixerStream *stream)
+{
+ if (stream->priv->change_volume_op == NULL)
+ return FALSE;
+
+ if ((pa_operation_get_state(stream->priv->change_volume_op) == PA_OPERATION_RUNNING))
+ return TRUE;
+
+ pa_operation_unref(stream->priv->change_volume_op);
+ stream->priv->change_volume_op = NULL;
+
+ return FALSE;
+}
+
+static void
+gvc_mixer_stream_class_init (GvcMixerStreamClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->constructor = gvc_mixer_stream_constructor;
+ gobject_class->finalize = gvc_mixer_stream_finalize;
+ gobject_class->set_property = gvc_mixer_stream_set_property;
+ gobject_class->get_property = gvc_mixer_stream_get_property;
+
+ klass->push_volume = gvc_mixer_stream_real_push_volume;
+ klass->change_port = gvc_mixer_stream_real_change_port;
+ klass->change_is_muted = gvc_mixer_stream_real_change_is_muted;
+
+ g_object_class_install_property (gobject_class,
+ PROP_INDEX,
+ g_param_spec_ulong ("index",
+ "Index",
+ "The index for this stream",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_ID,
+ g_param_spec_ulong ("id",
+ "id",
+ "The id for this stream",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_CHANNEL_MAP,
+ g_param_spec_object ("channel-map",
+ "channel map",
+ "The channel map for this stream",
+ GVC_TYPE_CHANNEL_MAP,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_PA_CONTEXT,
+ g_param_spec_pointer ("pa-context",
+ "PulseAudio context",
+ "The PulseAudio context for this stream",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_VOLUME,
+ g_param_spec_ulong ("volume",
+ "Volume",
+ "The volume for this stream",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_DECIBEL,
+ g_param_spec_double ("decibel",
+ "Decibel",
+ "The decibel level for this stream",
+ -G_MAXDOUBLE, G_MAXDOUBLE, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (gobject_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "Name to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_DESCRIPTION,
+ g_param_spec_string ("description",
+ "Description",
+ "Description to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_APPLICATION_ID,
+ g_param_spec_string ("application-id",
+ "Application identifier",
+ "Application identifier for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_ICON_NAME,
+ g_param_spec_string ("icon-name",
+ "Icon Name",
+ "Name of icon to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_IS_MUTED,
+ g_param_spec_boolean ("is-muted",
+ "is muted",
+ "Whether stream is muted",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_CAN_DECIBEL,
+ g_param_spec_boolean ("can-decibel",
+ "can decibel",
+ "Whether stream volume can be converted to decibel units",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_IS_EVENT_STREAM,
+ g_param_spec_boolean ("is-event-stream",
+ "is event stream",
+ "Whether stream's role is to play an event",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_IS_VIRTUAL,
+ g_param_spec_boolean ("is-virtual",
+ "is virtual stream",
+ "Whether the stream is virtual",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_PORT,
+ g_param_spec_string ("port",
+ "Port",
+ "The name of the current port for this stream",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_CARD_INDEX,
+ g_param_spec_long ("card-index",
+ "Card index",
+ "The index of the card for this stream",
+ PA_INVALID_INDEX, G_MAXLONG, PA_INVALID_INDEX,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_type_class_add_private (klass, sizeof (GvcMixerStreamPrivate));
+}
+
+static void
+gvc_mixer_stream_init (GvcMixerStream *stream)
+{
+ stream->priv = GVC_MIXER_STREAM_GET_PRIVATE (stream);
+}
+
+static void
+free_port (GvcMixerStreamPort *p)
+{
+ g_free (p->port);
+ g_free (p->human_port);
+ g_free (p);
+}
+
+static void
+gvc_mixer_stream_finalize (GObject *object)
+{
+ GvcMixerStream *mixer_stream;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_MIXER_STREAM (object));
+
+ mixer_stream = GVC_MIXER_STREAM (object);
+
+ g_return_if_fail (mixer_stream->priv != NULL);
+
+ g_object_unref (mixer_stream->priv->channel_map);
+ mixer_stream->priv->channel_map = NULL;
+
+ g_free (mixer_stream->priv->name);
+ mixer_stream->priv->name = NULL;
+
+ g_free (mixer_stream->priv->description);
+ mixer_stream->priv->description = NULL;
+
+ g_free (mixer_stream->priv->application_id);
+ mixer_stream->priv->application_id = NULL;
+
+ g_free (mixer_stream->priv->icon_name);
+ mixer_stream->priv->icon_name = NULL;
+
+ g_free (mixer_stream->priv->port);
+ mixer_stream->priv->port = NULL;
+
+ g_free (mixer_stream->priv->human_port);
+ mixer_stream->priv->human_port = NULL;
+
+ g_list_foreach (mixer_stream->priv->ports, (GFunc) free_port, NULL);
+ g_list_free (mixer_stream->priv->ports);
+ mixer_stream->priv->ports = NULL;
+
+ if (mixer_stream->priv->change_volume_op) {
+ pa_operation_unref(mixer_stream->priv->change_volume_op);
+ mixer_stream->priv->change_volume_op = NULL;
+ }
+
+ G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->finalize (object);
+}
diff --git a/mate-volume-control/src/gvc-mixer-stream.h b/mate-volume-control/src/gvc-mixer-stream.h
new file mode 100644
index 0000000..bbeb8a3
--- /dev/null
+++ b/mate-volume-control/src/gvc-mixer-stream.h
@@ -0,0 +1,127 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_MIXER_STREAM_H
+#define __GVC_MIXER_STREAM_H
+
+#include <glib-object.h>
+#include <pulse/pulseaudio.h>
+
+#include "gvc-channel-map.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_MIXER_STREAM (gvc_mixer_stream_get_type ())
+#define GVC_MIXER_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStream))
+#define GVC_MIXER_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_STREAM, GvcMixerStreamClass))
+#define GVC_IS_MIXER_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_STREAM))
+#define GVC_IS_MIXER_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_STREAM))
+#define GVC_MIXER_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStreamClass))
+
+typedef struct GvcMixerStreamPrivate GvcMixerStreamPrivate;
+
+typedef struct
+{
+ GObject parent;
+ GvcMixerStreamPrivate *priv;
+} GvcMixerStream;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ /* vtable */
+ gboolean (*push_volume) (GvcMixerStream *stream,
+ gpointer *operation);
+ gboolean (*change_is_muted) (GvcMixerStream *stream,
+ gboolean is_muted);
+ gboolean (*change_port) (GvcMixerStream *stream,
+ const char *port);
+} GvcMixerStreamClass;
+
+typedef struct
+{
+ char *port;
+ char *human_port;
+ guint priority;
+} GvcMixerStreamPort;
+
+GType gvc_mixer_stream_get_type (void);
+
+pa_context * gvc_mixer_stream_get_pa_context (GvcMixerStream *stream);
+guint gvc_mixer_stream_get_index (GvcMixerStream *stream);
+guint gvc_mixer_stream_get_id (GvcMixerStream *stream);
+const GvcChannelMap *gvc_mixer_stream_get_channel_map(GvcMixerStream *stream);
+const GvcMixerStreamPort *gvc_mixer_stream_get_port (GvcMixerStream *stream);
+const GList * gvc_mixer_stream_get_ports (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_change_port (GvcMixerStream *stream,
+ const char *port);
+
+pa_volume_t gvc_mixer_stream_get_volume (GvcMixerStream *stream);
+gdouble gvc_mixer_stream_get_decibel (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_push_volume (GvcMixerStream *stream);
+pa_volume_t gvc_mixer_stream_get_base_volume (GvcMixerStream *stream);
+
+gboolean gvc_mixer_stream_get_is_muted (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
+ gboolean is_muted);
+gboolean gvc_mixer_stream_is_running (GvcMixerStream *stream);
+const char * gvc_mixer_stream_get_name (GvcMixerStream *stream);
+const char * gvc_mixer_stream_get_icon_name (GvcMixerStream *stream);
+const char * gvc_mixer_stream_get_description (GvcMixerStream *stream);
+const char * gvc_mixer_stream_get_application_id (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_is_event_stream (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_is_virtual (GvcMixerStream *stream);
+gint gvc_mixer_stream_get_card_index (GvcMixerStream *stream);
+
+/* private */
+gboolean gvc_mixer_stream_set_volume (GvcMixerStream *stream,
+ pa_volume_t volume);
+gboolean gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
+ gdouble db);
+gboolean gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
+ gboolean is_muted);
+gboolean gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
+ gboolean can_decibel);
+gboolean gvc_mixer_stream_set_name (GvcMixerStream *stream,
+ const char *name);
+gboolean gvc_mixer_stream_set_description (GvcMixerStream *stream,
+ const char *description);
+gboolean gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
+ const char *name);
+gboolean gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
+ gboolean is_event_stream);
+gboolean gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
+ gboolean is_event_stream);
+gboolean gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
+ const char *application_id);
+gboolean gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
+ pa_volume_t base_volume);
+gboolean gvc_mixer_stream_set_port (GvcMixerStream *stream,
+ const char *port);
+gboolean gvc_mixer_stream_set_ports (GvcMixerStream *stream,
+ GList *ports);
+gboolean gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
+ gint card_index);
+
+G_END_DECLS
+
+#endif /* __GVC_MIXER_STREAM_H */
diff --git a/mate-volume-control/src/gvc-speaker-test.c b/mate-volume-control/src/gvc-speaker-test.c
new file mode 100644
index 0000000..b3bb99c
--- /dev/null
+++ b/mate-volume-control/src/gvc-speaker-test.c
@@ -0,0 +1,499 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Bastien Nocera
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <canberra.h>
+#include <canberra-gtk.h>
+
+#include "gvc-speaker-test.h"
+#include "gvc-mixer-stream.h"
+#include "gvc-mixer-card.h"
+
+#define GVC_SPEAKER_TEST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_SPEAKER_TEST, GvcSpeakerTestPrivate))
+
+struct GvcSpeakerTestPrivate
+{
+ GtkWidget *channel_controls[PA_CHANNEL_POSITION_MAX];
+ ca_context *canberra;
+ GvcMixerCard *card;
+ GvcMixerControl *control;
+};
+
+enum {
+ COL_NAME,
+ COL_HUMAN_NAME,
+ NUM_COLS
+};
+
+enum {
+ PROP_0,
+ PROP_CARD,
+ PROP_CONTROL
+};
+
+static void gvc_speaker_test_class_init (GvcSpeakerTestClass *klass);
+static void gvc_speaker_test_init (GvcSpeakerTest *speaker_test);
+static void gvc_speaker_test_finalize (GObject *object);
+static void update_channel_map (GvcSpeakerTest *speaker_test);
+
+G_DEFINE_TYPE (GvcSpeakerTest, gvc_speaker_test, GTK_TYPE_TABLE)
+
+static const int position_table[] = {
+ /* Position, X, Y */
+ PA_CHANNEL_POSITION_FRONT_LEFT, 0, 0,
+ PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, 1, 0,
+ PA_CHANNEL_POSITION_FRONT_CENTER, 2, 0,
+ PA_CHANNEL_POSITION_MONO, 2, 0,
+ PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, 3, 0,
+ PA_CHANNEL_POSITION_FRONT_RIGHT, 4, 0,
+ PA_CHANNEL_POSITION_SIDE_LEFT, 0, 1,
+ PA_CHANNEL_POSITION_SIDE_RIGHT, 4, 1,
+ PA_CHANNEL_POSITION_REAR_LEFT, 0, 2,
+ PA_CHANNEL_POSITION_REAR_CENTER, 2, 2,
+ PA_CHANNEL_POSITION_REAR_RIGHT, 4, 2,
+ PA_CHANNEL_POSITION_LFE, 3, 2
+};
+
+static void
+gvc_speaker_test_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcSpeakerTest *self = GVC_SPEAKER_TEST (object);
+
+ switch (prop_id) {
+ case PROP_CARD:
+ self->priv->card = g_value_dup_object (value);
+ if (self->priv->control != NULL)
+ update_channel_map (self);
+ break;
+ case PROP_CONTROL:
+ self->priv->control = g_value_dup_object (value);
+ if (self->priv->card != NULL)
+ update_channel_map (self);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_speaker_test_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcSpeakerTest *self = GVC_SPEAKER_TEST (object);
+
+ switch (prop_id) {
+ case PROP_CARD:
+ g_value_set_object (value, self->priv->card);
+ break;
+ case PROP_CONTROL:
+ g_value_set_object (value, self->priv->control);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_speaker_test_class_init (GvcSpeakerTestClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = gvc_speaker_test_finalize;
+ object_class->set_property = gvc_speaker_test_set_property;
+ object_class->get_property = gvc_speaker_test_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_CARD,
+ g_param_spec_object ("card",
+ "card",
+ "The card",
+ GVC_TYPE_MIXER_CARD,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_CONTROL,
+ g_param_spec_object ("control",
+ "control",
+ "The mixer controller",
+ GVC_TYPE_MIXER_CONTROL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ g_type_class_add_private (klass, sizeof (GvcSpeakerTestPrivate));
+}
+
+static const char *
+sound_name (pa_channel_position_t position)
+{
+ switch (position) {
+ case PA_CHANNEL_POSITION_FRONT_LEFT:
+ return "audio-channel-front-left";
+ case PA_CHANNEL_POSITION_FRONT_RIGHT:
+ return "audio-channel-front-right";
+ case PA_CHANNEL_POSITION_FRONT_CENTER:
+ return "audio-channel-front-center";
+ case PA_CHANNEL_POSITION_REAR_LEFT:
+ return "audio-channel-rear-left";
+ case PA_CHANNEL_POSITION_REAR_RIGHT:
+ return "audio-channel-rear-right";
+ case PA_CHANNEL_POSITION_REAR_CENTER:
+ return "audio-channel-rear-center";
+ case PA_CHANNEL_POSITION_LFE:
+ return "audio-channel-lfe";
+ case PA_CHANNEL_POSITION_SIDE_LEFT:
+ return "audio-channel-side-left";
+ case PA_CHANNEL_POSITION_SIDE_RIGHT:
+ return "audio-channel-side-right";
+ default:
+ return NULL;
+ }
+}
+
+static const char *
+icon_name (pa_channel_position_t position, gboolean playing)
+{
+ switch (position) {
+ case PA_CHANNEL_POSITION_FRONT_LEFT:
+ return playing ? "audio-speaker-left-testing" : "audio-speaker-left";
+ case PA_CHANNEL_POSITION_FRONT_RIGHT:
+ return playing ? "audio-speaker-right-testing" : "audio-speaker-right";
+ case PA_CHANNEL_POSITION_FRONT_CENTER:
+ return playing ? "audio-speaker-center-testing" : "audio-speaker-center";
+ case PA_CHANNEL_POSITION_REAR_LEFT:
+ return playing ? "audio-speaker-left-back-testing" : "audio-speaker-left-back";
+ case PA_CHANNEL_POSITION_REAR_RIGHT:
+ return playing ? "audio-speaker-right-back-testing" : "audio-speaker-right-back";
+ case PA_CHANNEL_POSITION_REAR_CENTER:
+ return playing ? "audio-speaker-center-back-testing" : "audio-speaker-center-back";
+ case PA_CHANNEL_POSITION_LFE:
+ return playing ? "audio-subwoofer-testing" : "audio-subwoofer";
+ case PA_CHANNEL_POSITION_SIDE_LEFT:
+ return playing ? "audio-speaker-left-side-testing" : "audio-speaker-left-side";
+ case PA_CHANNEL_POSITION_SIDE_RIGHT:
+ return playing ? "audio-speaker-right-side-testing" : "audio-speaker-right-side";
+ default:
+ return NULL;
+ }
+}
+
+static void
+update_button (GtkWidget *control)
+{
+ GtkWidget *button;
+ GtkWidget *image;
+ pa_channel_position_t position;
+ gboolean playing;
+
+ button = g_object_get_data (G_OBJECT (control), "button");
+ image = g_object_get_data (G_OBJECT (control), "image");
+ position = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (control), "position"));
+ playing = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (control), "playing"));
+ gtk_button_set_label (GTK_BUTTON (button), playing ? _("Stop") : _("Test"));
+ gtk_image_set_from_icon_name (GTK_IMAGE (image), icon_name (position, playing), GTK_ICON_SIZE_DIALOG);
+}
+
+static const char *
+pretty_position (pa_channel_position_t position)
+{
+ if (position == PA_CHANNEL_POSITION_LFE)
+ return N_("Subwoofer");
+
+ return pa_channel_position_to_pretty_string (position);
+}
+
+static gboolean
+idle_cb (GtkWidget *control)
+{
+ if (control == NULL)
+ return FALSE;
+
+ /* This is called in the background thread, hence
+ * forward to main thread via idle callback */
+ g_object_set_data (G_OBJECT (control), "playing", GINT_TO_POINTER(FALSE));
+ update_button (control);
+
+ return FALSE;
+}
+
+static void
+finish_cb (ca_context *c, uint32_t id, int error_code, void *userdata)
+{
+ GtkWidget *control = (GtkWidget *) userdata;
+
+ if (error_code == CA_ERROR_DESTROYED || control == NULL)
+ return;
+ g_idle_add ((GSourceFunc) idle_cb, control);
+}
+
+static void
+on_test_button_clicked (GtkButton *button,
+ GtkWidget *control)
+{
+ gboolean playing;
+ ca_context *canberra;
+
+ canberra = g_object_get_data (G_OBJECT (control), "canberra");
+
+ ca_context_cancel (canberra, 1);
+
+ playing = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (control), "playing"));
+
+ if (playing) {
+ g_object_set_data (G_OBJECT (control), "playing", GINT_TO_POINTER(FALSE));
+ } else {
+ pa_channel_position_t position;
+ const char *name;
+ ca_proplist *proplist;
+
+ position = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (control), "position"));
+
+ ca_proplist_create (&proplist);
+ ca_proplist_sets (proplist, CA_PROP_MEDIA_ROLE, "test");
+ ca_proplist_sets (proplist, CA_PROP_MEDIA_NAME, pretty_position (position));
+ ca_proplist_sets (proplist, CA_PROP_CANBERRA_FORCE_CHANNEL,
+ pa_channel_position_to_string (position));
+ ca_proplist_sets (proplist, CA_PROP_CANBERRA_ENABLE, "1");
+
+ name = sound_name (position);
+ if (name != NULL) {
+ ca_proplist_sets (proplist, CA_PROP_EVENT_ID, name);
+ playing = ca_context_play_full (canberra, 1, proplist, finish_cb, control) >= 0;
+ }
+
+ if (!playing) {
+ ca_proplist_sets (proplist, CA_PROP_EVENT_ID, "audio-test-signal");
+ playing = ca_context_play_full (canberra, 1, proplist, finish_cb, control) >= 0;
+ }
+
+ if (!playing) {
+ ca_proplist_sets(proplist, CA_PROP_EVENT_ID, "bell-window-system");
+ playing = ca_context_play_full (canberra, 1, proplist, finish_cb, control) >= 0;
+ }
+ g_object_set_data (G_OBJECT (control), "playing", GINT_TO_POINTER(playing));
+ }
+
+ update_button (control);
+}
+
+static GtkWidget *
+channel_control_new (ca_context *canberra, pa_channel_position_t position)
+{
+ GtkWidget *control;
+ GtkWidget *box;
+ GtkWidget *label;
+ GtkWidget *image;
+ GtkWidget *test_button;
+ const char *name;
+
+ control = gtk_vbox_new (FALSE, 6);
+ g_object_set_data (G_OBJECT (control), "playing", GINT_TO_POINTER(FALSE));
+ g_object_set_data (G_OBJECT (control), "position", GINT_TO_POINTER(position));
+ g_object_set_data (G_OBJECT (control), "canberra", canberra);
+
+ name = icon_name (position, FALSE);
+ if (name == NULL)
+ name = "audio-volume-medium";
+ image = gtk_image_new_from_icon_name (name, GTK_ICON_SIZE_DIALOG);
+ g_object_set_data (G_OBJECT (control), "image", image);
+ gtk_box_pack_start (GTK_BOX (control), image, FALSE, FALSE, 0);
+
+ label = gtk_label_new (pretty_position (position));
+ gtk_box_pack_start (GTK_BOX (control), label, FALSE, FALSE, 0);
+
+ test_button = gtk_button_new_with_label (_("Test"));
+ g_signal_connect (G_OBJECT (test_button), "clicked",
+ G_CALLBACK (on_test_button_clicked), control);
+ g_object_set_data (G_OBJECT (control), "button", test_button);
+
+ box = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), test_button, TRUE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (control), box, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (control);
+
+ return control;
+}
+
+static void
+create_channel_controls (GvcSpeakerTest *speaker_test)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (position_table); i += 3) {
+ speaker_test->priv->channel_controls[position_table[i]] = channel_control_new (speaker_test->priv->canberra, (pa_channel_position_t) position_table[i]);
+ gtk_table_attach (GTK_TABLE (speaker_test),
+ speaker_test->priv->channel_controls[position_table[i]],
+ position_table[i+1],
+ position_table[i+1]+1,
+ position_table[i+2],
+ position_table[i+2]+1,
+ GTK_EXPAND, GTK_EXPAND, 0, 0);
+ }
+}
+
+static const GvcChannelMap *
+get_channel_map_for_card (GvcMixerControl *control,
+ GvcMixerCard *card,
+ char **output_name)
+{
+ int card_index;
+ GSList *sinks, *l;
+ GvcMixerStream *stream;
+ const GvcChannelMap *map;
+
+ /* This gets the channel map for the only
+ * output for the card */
+
+ card_index = gvc_mixer_card_get_index (card);
+ if (card_index == PA_INVALID_INDEX)
+ return NULL;
+ sinks = gvc_mixer_control_get_sinks (control);
+ stream = NULL;
+ for (l = sinks; l != NULL; l = l->next) {
+ GvcMixerStream *s = l->data;
+ if (gvc_mixer_stream_get_card_index (s) == card_index) {
+ stream = g_object_ref (s);
+ break;
+ }
+ }
+ g_slist_free (sinks);
+
+ g_assert (stream);
+
+ g_debug ("Found stream '%s' for card '%s'",
+ gvc_mixer_stream_get_name (stream),
+ gvc_mixer_card_get_name (card));
+
+ *output_name = g_strdup (gvc_mixer_stream_get_name (stream));
+ map = gvc_mixer_stream_get_channel_map (stream);
+
+ g_debug ("Got channel map '%s' for port '%s'",
+ gvc_channel_map_get_mapping (map), *output_name);
+
+ return map;
+}
+
+static void
+update_channel_map (GvcSpeakerTest *speaker_test)
+{
+ guint i;
+ const GvcChannelMap *map;
+ char *output_name;
+
+ g_return_if_fail (speaker_test->priv->control != NULL);
+ g_return_if_fail (speaker_test->priv->card != NULL);
+
+ g_debug ("XXX update_channel_map called XXX");
+
+ map = get_channel_map_for_card (speaker_test->priv->control,
+ speaker_test->priv->card,
+ &output_name);
+
+ g_return_if_fail (map != NULL);
+
+ ca_context_change_device (speaker_test->priv->canberra, output_name);
+ g_free (output_name);
+
+ for (i = 0; i < G_N_ELEMENTS (position_table); i += 3) {
+ gtk_widget_set_visible (speaker_test->priv->channel_controls[position_table[i]],
+ gvc_channel_map_has_position(map, position_table[i]));
+ }
+}
+
+static void
+gvc_speaker_test_init (GvcSpeakerTest *speaker_test)
+{
+ GtkWidget *face;
+
+ speaker_test->priv = GVC_SPEAKER_TEST_GET_PRIVATE (speaker_test);
+
+ ca_context_create (&speaker_test->priv->canberra);
+ ca_context_set_driver (speaker_test->priv->canberra, "pulse");
+ ca_context_change_props (speaker_test->priv->canberra,
+ CA_PROP_APPLICATION_ID, "org.mate.VolumeControl",
+ NULL);
+
+ gtk_table_resize (GTK_TABLE (speaker_test), 3, 5);
+ gtk_container_set_border_width (GTK_CONTAINER (speaker_test), 12);
+ gtk_table_set_homogeneous (GTK_TABLE (speaker_test), TRUE);
+ gtk_table_set_row_spacings (GTK_TABLE (speaker_test), 12);
+ gtk_table_set_col_spacings (GTK_TABLE (speaker_test), 12);
+
+ create_channel_controls (speaker_test);
+
+ face = gtk_image_new_from_icon_name ("face-smile", GTK_ICON_SIZE_DIALOG);
+ gtk_table_attach (GTK_TABLE (speaker_test), face,
+ 2, 3, 1, 2, GTK_EXPAND, GTK_EXPAND, 0, 0);
+ gtk_widget_show (face);
+}
+
+static void
+gvc_speaker_test_finalize (GObject *object)
+{
+ GvcSpeakerTest *speaker_test;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_SPEAKER_TEST (object));
+
+ speaker_test = GVC_SPEAKER_TEST (object);
+
+ g_return_if_fail (speaker_test->priv != NULL);
+
+ g_object_unref (speaker_test->priv->card);
+ speaker_test->priv->card = NULL;
+
+ g_object_unref (speaker_test->priv->control);
+ speaker_test->priv->control = NULL;
+
+ ca_context_destroy (speaker_test->priv->canberra);
+ speaker_test->priv->canberra = NULL;
+
+ G_OBJECT_CLASS (gvc_speaker_test_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gvc_speaker_test_new (GvcMixerControl *control,
+ GvcMixerCard *card)
+{
+ GObject *speaker_test;
+
+ g_return_val_if_fail (card != NULL, NULL);
+ g_return_val_if_fail (control != NULL, NULL);
+
+ speaker_test = g_object_new (GVC_TYPE_SPEAKER_TEST,
+ "card", card,
+ "control", control,
+ NULL);
+
+ return GTK_WIDGET (speaker_test);
+}
+
diff --git a/mate-volume-control/src/gvc-speaker-test.h b/mate-volume-control/src/gvc-speaker-test.h
new file mode 100644
index 0000000..912c594
--- /dev/null
+++ b/mate-volume-control/src/gvc-speaker-test.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_SPEAKER_TEST_H
+#define __GVC_SPEAKER_TEST_H
+
+#include <glib-object.h>
+#include <gvc-mixer-card.h>
+#include <gvc-mixer-control.h>
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_SPEAKER_TEST (gvc_speaker_test_get_type ())
+#define GVC_SPEAKER_TEST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_SPEAKER_TEST, GvcSpeakerTest))
+#define GVC_SPEAKER_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_SPEAKER_TEST, GvcSpeakerTestClass))
+#define GVC_IS_SPEAKER_TEST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_SPEAKER_TEST))
+#define GVC_IS_SPEAKER_TEST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_SPEAKER_TEST))
+#define GVC_SPEAKER_TEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_SPEAKER_TEST, GvcSpeakerTestClass))
+
+typedef struct GvcSpeakerTestPrivate GvcSpeakerTestPrivate;
+
+typedef struct
+{
+ GtkNotebook parent;
+ GvcSpeakerTestPrivate *priv;
+} GvcSpeakerTest;
+
+typedef struct
+{
+ GtkNotebookClass parent_class;
+} GvcSpeakerTestClass;
+
+GType gvc_speaker_test_get_type (void);
+
+GtkWidget * gvc_speaker_test_new (GvcMixerControl *control,
+ GvcMixerCard *card);
+
+G_END_DECLS
+
+#endif /* __GVC_SPEAKER_TEST_H */
diff --git a/mate-volume-control/src/gvc-stream-status-icon.c b/mate-volume-control/src/gvc-stream-status-icon.c
new file mode 100644
index 0000000..f89d39e
--- /dev/null
+++ b/mate-volume-control/src/gvc-stream-status-icon.c
@@ -0,0 +1,825 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 William Jon McCann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#if GTK_CHECK_VERSION (2, 21, 8)
+#include <gdk/gdkkeysyms-compat.h>
+#else
+#include <gdk/gdkkeysyms.h>
+#endif
+
+#include "gvc-mixer-stream.h"
+#include "gvc-channel-bar.h"
+#include "gvc-stream-status-icon.h"
+
+#define GVC_STREAM_STATUS_ICON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_STREAM_STATUS_ICON, GvcStreamStatusIconPrivate))
+
+struct GvcStreamStatusIconPrivate
+{
+ char **icon_names;
+ GvcMixerStream *mixer_stream;
+ GtkWidget *dock;
+ GtkWidget *bar;
+ guint current_icon;
+ char *display_name;
+ gboolean thaw;
+};
+
+enum
+{
+ PROP_0,
+ PROP_DISPLAY_NAME,
+ PROP_MIXER_STREAM,
+ PROP_ICON_NAMES,
+};
+
+static void gvc_stream_status_icon_class_init (GvcStreamStatusIconClass *klass);
+static void gvc_stream_status_icon_init (GvcStreamStatusIcon *stream_status_icon);
+static void gvc_stream_status_icon_finalize (GObject *object);
+
+G_DEFINE_TYPE (GvcStreamStatusIcon, gvc_stream_status_icon, GTK_TYPE_STATUS_ICON)
+
+static void
+on_adjustment_value_changed (GtkAdjustment *adjustment,
+ GvcStreamStatusIcon *icon)
+{
+ gdouble volume;
+
+ if (icon->priv->thaw)
+ return;
+
+ volume = gtk_adjustment_get_value (adjustment);
+
+ /* Only push the volume if it's actually changed */
+ if (gvc_mixer_stream_set_volume(icon->priv->mixer_stream,
+ (pa_volume_t) round (volume)) != FALSE) {
+ gvc_mixer_stream_push_volume(icon->priv->mixer_stream);
+ }
+}
+
+static void
+update_dock (GvcStreamStatusIcon *icon)
+{
+ GtkAdjustment *adj;
+ gboolean is_muted;
+
+ g_return_if_fail (icon);
+
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (icon->priv->bar)));
+
+ icon->priv->thaw = TRUE;
+ gtk_adjustment_set_value (adj,
+ gvc_mixer_stream_get_volume (icon->priv->mixer_stream));
+ is_muted = gvc_mixer_stream_get_is_muted (icon->priv->mixer_stream);
+ gvc_channel_bar_set_is_muted (GVC_CHANNEL_BAR (icon->priv->bar), is_muted);
+ icon->priv->thaw = FALSE;
+}
+
+static gboolean
+popup_dock (GvcStreamStatusIcon *icon,
+ guint time)
+{
+ GdkRectangle area;
+ GtkOrientation orientation;
+ GdkDisplay *display;
+ GdkScreen *screen;
+ gboolean res;
+ int x;
+ int y;
+ int monitor_num;
+ GdkRectangle monitor;
+ GtkRequisition dock_req;
+
+ update_dock (icon);
+
+ screen = gtk_status_icon_get_screen (GTK_STATUS_ICON (icon));
+ res = gtk_status_icon_get_geometry (GTK_STATUS_ICON (icon),
+ &screen,
+ &area,
+ &orientation);
+ if (! res) {
+ g_warning ("Unable to determine geometry of status icon");
+ return FALSE;
+ }
+
+ /* position roughly */
+ gtk_window_set_screen (GTK_WINDOW (icon->priv->dock), screen);
+ gvc_channel_bar_set_orientation (GVC_CHANNEL_BAR (icon->priv->bar),
+ 1 - orientation);
+
+ monitor_num = gdk_screen_get_monitor_at_point (screen, area.x, area.y);
+ gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+
+ gtk_container_foreach (GTK_CONTAINER (icon->priv->dock),
+ (GtkCallback) gtk_widget_show_all, NULL);
+ gtk_widget_size_request (icon->priv->dock, &dock_req);
+
+ if (orientation == GTK_ORIENTATION_VERTICAL) {
+ if (area.x + area.width + dock_req.width <= monitor.x + monitor.width) {
+ x = area.x + area.width;
+ } else {
+ x = area.x - dock_req.width;
+ }
+ if (area.y + dock_req.height <= monitor.y + monitor.height) {
+ y = area.y;
+ } else {
+ y = monitor.y + monitor.height - dock_req.height;
+ }
+ } else {
+ if (area.y + area.height + dock_req.height <= monitor.y + monitor.height) {
+ y = area.y + area.height;
+ } else {
+ y = area.y - dock_req.height;
+ }
+ if (area.x + dock_req.width <= monitor.x + monitor.width) {
+ x = area.x;
+ } else {
+ x = monitor.x + monitor.width - dock_req.width;
+ }
+ }
+
+ gtk_window_move (GTK_WINDOW (icon->priv->dock), x, y);
+
+ /* FIXME: without this, the popup window appears as a square
+ * after changing the orientation
+ */
+ gtk_window_resize (GTK_WINDOW (icon->priv->dock), 1, 1);
+
+ gtk_widget_show_all (icon->priv->dock);
+
+
+ /* grab focus */
+ gtk_grab_add (icon->priv->dock);
+
+ if (gdk_pointer_grab (gtk_widget_get_window (icon->priv->dock), TRUE,
+ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK, NULL, NULL,
+ time)
+ != GDK_GRAB_SUCCESS) {
+ gtk_grab_remove (icon->priv->dock);
+ gtk_widget_hide (icon->priv->dock);
+ return FALSE;
+ }
+
+ if (gdk_keyboard_grab (gtk_widget_get_window (icon->priv->dock), TRUE, time) != GDK_GRAB_SUCCESS) {
+ display = gtk_widget_get_display (icon->priv->dock);
+ gdk_display_pointer_ungrab (display, time);
+ gtk_grab_remove (icon->priv->dock);
+ gtk_widget_hide (icon->priv->dock);
+ return FALSE;
+ }
+
+ gtk_widget_grab_focus (icon->priv->dock);
+
+ return TRUE;
+}
+
+static void
+on_status_icon_activate (GtkStatusIcon *status_icon,
+ GvcStreamStatusIcon *icon)
+{
+ popup_dock (icon, GDK_CURRENT_TIME);
+}
+
+static void
+on_menu_mute_toggled (GtkMenuItem *item,
+ GvcStreamStatusIcon *icon)
+{
+ gboolean is_muted;
+ is_muted = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (item));
+ gvc_channel_bar_set_is_muted (GVC_CHANNEL_BAR (icon->priv->bar), is_muted);
+}
+
+static void
+on_menu_activate_open_volume_control (GtkMenuItem *item,
+ GvcStreamStatusIcon *icon)
+{
+ GError *error;
+
+ error = NULL;
+ gdk_spawn_command_line_on_screen (gtk_widget_get_screen (icon->priv->dock),
+ "mate-volume-control",
+ &error);
+
+ if (error != NULL) {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Failed to start Sound Preferences: %s"),
+ error->message);
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ gtk_widget_show (dialog);
+ g_error_free (error);
+ }
+}
+
+static void
+on_status_icon_popup_menu (GtkStatusIcon *status_icon,
+ guint button,
+ guint activate_time,
+ GvcStreamStatusIcon *icon)
+{
+ GtkWidget *menu;
+ GtkWidget *item;
+ GtkWidget *image;
+
+ menu = gtk_menu_new ();
+
+ item = gtk_check_menu_item_new_with_mnemonic (_("_Mute"));
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
+ gvc_mixer_stream_get_is_muted (icon->priv->mixer_stream));
+ g_signal_connect (item,
+ "toggled",
+ G_CALLBACK (on_menu_mute_toggled),
+ icon);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Sound Preferences"));
+ image = gtk_image_new_from_icon_name ("multimedia-volume-control",
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (on_menu_activate_open_volume_control),
+ icon);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+ gtk_widget_show_all (menu);
+ gtk_menu_popup (GTK_MENU (menu),
+ NULL,
+ NULL,
+ gtk_status_icon_position_menu,
+ status_icon,
+ button,
+ activate_time);
+}
+
+static gboolean
+on_status_icon_scroll_event (GtkStatusIcon *status_icon,
+ GdkEventScroll *event,
+ GvcStreamStatusIcon *icon)
+{
+ return gvc_channel_bar_scroll (GVC_CHANNEL_BAR (icon->priv->bar), event->direction);
+}
+
+static void
+gvc_icon_release_grab (GvcStreamStatusIcon *icon,
+ GdkEventButton *event)
+{
+ GdkDisplay *display;
+
+ /* ungrab focus */
+ display = gtk_widget_get_display (GTK_WIDGET (icon->priv->dock));
+ gdk_display_keyboard_ungrab (display, event->time);
+ gdk_display_pointer_ungrab (display, event->time);
+ gtk_grab_remove (icon->priv->dock);
+
+ /* hide again */
+ gtk_widget_hide (icon->priv->dock);
+}
+
+static gboolean
+on_dock_button_press (GtkWidget *widget,
+ GdkEventButton *event,
+ GvcStreamStatusIcon *icon)
+{
+ if (event->type == GDK_BUTTON_PRESS) {
+ gvc_icon_release_grab (icon, event);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+popdown_dock (GvcStreamStatusIcon *icon)
+{
+ GdkDisplay *display;
+
+ /* ungrab focus */
+ display = gtk_widget_get_display (icon->priv->dock);
+ gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME);
+ gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
+ gtk_grab_remove (icon->priv->dock);
+
+ /* hide again */
+ gtk_widget_hide (icon->priv->dock);
+}
+
+/* This is called when the grab is broken for
+ * either the dock, or the scale itself */
+static void
+gvc_icon_grab_notify (GvcStreamStatusIcon *icon,
+ gboolean was_grabbed)
+{
+ if (was_grabbed != FALSE) {
+ return;
+ }
+
+ if (!gtk_widget_has_grab (icon->priv->dock)) {
+ return;
+ }
+
+ if (gtk_widget_is_ancestor (gtk_grab_get_current (), icon->priv->dock)) {
+ return;
+ }
+
+ popdown_dock (icon);
+}
+
+static void
+on_dock_grab_notify (GtkWidget *widget,
+ gboolean was_grabbed,
+ GvcStreamStatusIcon *icon)
+{
+ gvc_icon_grab_notify (icon, was_grabbed);
+}
+
+static gboolean
+on_dock_grab_broken_event (GtkWidget *widget,
+ gboolean was_grabbed,
+ GvcStreamStatusIcon *icon)
+{
+ gvc_icon_grab_notify (icon, FALSE);
+
+ return FALSE;
+}
+
+static gboolean
+on_dock_key_release (GtkWidget *widget,
+ GdkEventKey *event,
+ GvcStreamStatusIcon *icon)
+{
+ if (event->keyval == GDK_Escape) {
+ popdown_dock (icon);
+ return TRUE;
+ }
+
+#if 0
+ if (!gtk_bindings_activate_event (GTK_OBJECT (widget), event)) {
+ /* The popup hasn't managed the event, pass onto the button */
+ gtk_bindings_activate_event (GTK_OBJECT (user_data), event);
+ }
+#endif
+ return TRUE;
+}
+
+static gboolean
+on_dock_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event,
+ GvcStreamStatusIcon *icon)
+{
+ /* Forward event to the status icon */
+ on_status_icon_scroll_event (NULL, event, icon);
+ return TRUE;
+}
+
+static void
+update_icon (GvcStreamStatusIcon *icon)
+{
+ guint volume;
+ gboolean is_muted;
+ guint n;
+ char *markup;
+ gboolean can_decibel;
+ gdouble db;
+
+ if (icon->priv->mixer_stream == NULL) {
+ return;
+ }
+
+ volume = gvc_mixer_stream_get_volume (icon->priv->mixer_stream);
+ is_muted = gvc_mixer_stream_get_is_muted (icon->priv->mixer_stream);
+ db = gvc_mixer_stream_get_decibel (icon->priv->mixer_stream);
+ can_decibel = gvc_mixer_stream_get_can_decibel (icon->priv->mixer_stream);
+
+ /* select image */
+ if (volume <= 0 || is_muted) {
+ n = 0;
+ } else {
+ n = 3 * volume / PA_VOLUME_NORM + 1;
+ if (n < 1) {
+ n = 1;
+ } else if (n > 3) {
+ n = 3;
+ }
+ }
+
+ /* apparently status icon will reset icon even if
+ * if doesn't change */
+ if (icon->priv->current_icon != n) {
+ gtk_status_icon_set_from_icon_name (GTK_STATUS_ICON (icon),
+ icon->priv->icon_names [n]);
+ icon->priv->current_icon = n;
+ }
+
+
+ if (is_muted) {
+ markup = g_strdup_printf (
+ "<b>%s: %s</b>\n<small>%s</small>",
+ icon->priv->display_name,
+ _("Muted"),
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ } else if (can_decibel && (db > PA_DECIBEL_MININFTY)) {
+ markup = g_strdup_printf (
+ "<b>%s: %.0f%%</b>\n<small>%0.2f dB\n%s</small>",
+ icon->priv->display_name,
+ 100 * (float)volume / PA_VOLUME_NORM,
+ db,
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ } else if (can_decibel) {
+ markup = g_strdup_printf (
+ "<b>%s: %.0f%%</b>\n<small>-&#8734; dB\n%s</small>",
+ icon->priv->display_name,
+ 100 * (float)volume / PA_VOLUME_NORM,
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ } else {
+ markup = g_strdup_printf (
+ "<b>%s: %.0f%%</b>\n<small>%s</small>",
+ icon->priv->display_name,
+ 100 * (float)volume / PA_VOLUME_NORM,
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ }
+ gtk_status_icon_set_tooltip_markup (GTK_STATUS_ICON (icon), markup);
+ g_free (markup);
+}
+
+void
+gvc_stream_status_icon_set_icon_names (GvcStreamStatusIcon *icon,
+ const char **names)
+{
+ g_return_if_fail (GVC_IS_STREAM_STATUS_ICON (icon));
+
+ g_strfreev (icon->priv->icon_names);
+ icon->priv->icon_names = g_strdupv ((char **)names);
+ update_icon (icon);
+ g_object_notify (G_OBJECT (icon), "icon-names");
+}
+
+static void
+on_stream_volume_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcStreamStatusIcon *icon)
+{
+ update_icon (icon);
+ update_dock (icon);
+}
+
+static void
+on_stream_is_muted_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcStreamStatusIcon *icon)
+{
+ update_icon (icon);
+ update_dock (icon);
+}
+
+void
+gvc_stream_status_icon_set_display_name (GvcStreamStatusIcon *icon,
+ const char *name)
+{
+ g_return_if_fail (GVC_STREAM_STATUS_ICON (icon));
+
+ g_free (icon->priv->display_name);
+ icon->priv->display_name = g_strdup (name);
+ update_icon (icon);
+ g_object_notify (G_OBJECT (icon), "display-name");
+}
+
+void
+gvc_stream_status_icon_set_mixer_stream (GvcStreamStatusIcon *icon,
+ GvcMixerStream *stream)
+{
+ g_return_if_fail (GVC_STREAM_STATUS_ICON (icon));
+
+ if (stream != NULL) {
+ g_object_ref (stream);
+ }
+
+ if (icon->priv->mixer_stream != NULL) {
+ g_signal_handlers_disconnect_by_func (icon->priv->mixer_stream,
+ G_CALLBACK (on_stream_volume_notify),
+ icon);
+ g_signal_handlers_disconnect_by_func (icon->priv->mixer_stream,
+ G_CALLBACK (on_stream_is_muted_notify),
+ icon);
+ g_object_unref (icon->priv->mixer_stream);
+ icon->priv->mixer_stream = NULL;
+ }
+
+ icon->priv->mixer_stream = stream;
+
+ if (icon->priv->mixer_stream != NULL) {
+ GtkAdjustment *adj;
+
+ g_object_ref (icon->priv->mixer_stream);
+
+ icon->priv->thaw = TRUE;
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (icon->priv->bar)));
+ gtk_adjustment_set_value (adj,
+ gvc_mixer_stream_get_volume (icon->priv->mixer_stream));
+ icon->priv->thaw = FALSE;
+
+ g_signal_connect (icon->priv->mixer_stream,
+ "notify::volume",
+ G_CALLBACK (on_stream_volume_notify),
+ icon);
+ g_signal_connect (icon->priv->mixer_stream,
+ "notify::is-muted",
+ G_CALLBACK (on_stream_is_muted_notify),
+ icon);
+ }
+
+ update_icon (icon);
+
+ g_object_notify (G_OBJECT (icon), "mixer-stream");
+}
+
+static void
+gvc_stream_status_icon_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GvcStreamStatusIcon *self = GVC_STREAM_STATUS_ICON (object);
+
+ switch (prop_id) {
+ case PROP_MIXER_STREAM:
+ gvc_stream_status_icon_set_mixer_stream (self, g_value_get_object (value));
+ break;
+ case PROP_DISPLAY_NAME:
+ gvc_stream_status_icon_set_display_name (self, g_value_get_string (value));
+ break;
+ case PROP_ICON_NAMES:
+ gvc_stream_status_icon_set_icon_names (self, g_value_get_boxed (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gvc_stream_status_icon_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GvcStreamStatusIcon *self = GVC_STREAM_STATUS_ICON (object);
+ GvcStreamStatusIconPrivate *priv = self->priv;
+
+ switch (prop_id) {
+ case PROP_MIXER_STREAM:
+ g_value_set_object (value, priv->mixer_stream);
+ break;
+ case PROP_DISPLAY_NAME:
+ g_value_set_string (value, priv->display_name);
+ break;
+ case PROP_ICON_NAMES:
+ g_value_set_boxed (value, priv->icon_names);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+on_bar_is_muted_notify (GObject *object,
+ GParamSpec *pspec,
+ GvcStreamStatusIcon *icon)
+{
+ gboolean is_muted;
+
+ is_muted = gvc_channel_bar_get_is_muted (GVC_CHANNEL_BAR (object));
+
+ if (gvc_mixer_stream_get_is_muted (icon->priv->mixer_stream) != is_muted) {
+ /* Update the stream before pushing the change */
+ gvc_mixer_stream_set_is_muted (icon->priv->mixer_stream, is_muted);
+ gvc_mixer_stream_change_is_muted (icon->priv->mixer_stream,
+ is_muted);
+ }
+}
+
+static GObject *
+gvc_stream_status_icon_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ GvcStreamStatusIcon *icon;
+ GtkWidget *frame;
+ GtkWidget *box;
+ GtkAdjustment *adj;
+
+ object = G_OBJECT_CLASS (gvc_stream_status_icon_parent_class)->constructor (type, n_construct_properties, construct_params);
+
+ icon = GVC_STREAM_STATUS_ICON (object);
+
+ gtk_status_icon_set_from_icon_name (GTK_STATUS_ICON (icon),
+ icon->priv->icon_names[0]);
+
+ /* window */
+ icon->priv->dock = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_widget_set_name (icon->priv->dock, "gvc-stream-status-icon-popup-window");
+ g_signal_connect (icon->priv->dock,
+ "button-press-event",
+ G_CALLBACK (on_dock_button_press),
+ icon);
+ g_signal_connect (icon->priv->dock,
+ "key-release-event",
+ G_CALLBACK (on_dock_key_release),
+ icon);
+ g_signal_connect (icon->priv->dock,
+ "scroll-event",
+ G_CALLBACK (on_dock_scroll_event),
+ icon);
+ g_signal_connect (icon->priv->dock,
+ "grab-notify",
+ G_CALLBACK (on_dock_grab_notify),
+ icon);
+ g_signal_connect (icon->priv->dock,
+ "grab-broken-event",
+ G_CALLBACK (on_dock_grab_broken_event),
+ icon);
+
+ gtk_window_set_decorated (GTK_WINDOW (icon->priv->dock), FALSE);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+ gtk_container_add (GTK_CONTAINER (icon->priv->dock), frame);
+
+ box = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (box), 2);
+ gtk_container_add (GTK_CONTAINER (frame), box);
+
+ icon->priv->bar = gvc_channel_bar_new ();
+ gvc_channel_bar_set_orientation (GVC_CHANNEL_BAR (icon->priv->bar),
+ GTK_ORIENTATION_VERTICAL);
+
+ gtk_box_pack_start (GTK_BOX (box), icon->priv->bar, TRUE, FALSE, 0);
+ g_signal_connect (icon->priv->bar,
+ "notify::is-muted",
+ G_CALLBACK (on_bar_is_muted_notify),
+ icon);
+
+ adj = GTK_ADJUSTMENT (gvc_channel_bar_get_adjustment (GVC_CHANNEL_BAR (icon->priv->bar)));
+ g_signal_connect (adj,
+ "value-changed",
+ G_CALLBACK (on_adjustment_value_changed),
+ icon);
+
+ return object;
+}
+
+static void
+gvc_stream_status_icon_dispose (GObject *object)
+{
+ GvcStreamStatusIcon *icon = GVC_STREAM_STATUS_ICON (object);
+
+ if (icon->priv->dock != NULL) {
+ gtk_widget_destroy (icon->priv->dock);
+ icon->priv->dock = NULL;
+ }
+
+ if (icon->priv->mixer_stream != NULL) {
+ g_object_unref (icon->priv->mixer_stream);
+ icon->priv->mixer_stream = NULL;
+ }
+
+ G_OBJECT_CLASS (gvc_stream_status_icon_parent_class)->dispose (object);
+}
+
+static void
+gvc_stream_status_icon_class_init (GvcStreamStatusIconClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = gvc_stream_status_icon_constructor;
+ object_class->finalize = gvc_stream_status_icon_finalize;
+ object_class->dispose = gvc_stream_status_icon_dispose;
+ object_class->set_property = gvc_stream_status_icon_set_property;
+ object_class->get_property = gvc_stream_status_icon_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_MIXER_STREAM,
+ g_param_spec_object ("mixer-stream",
+ "mixer stream",
+ "mixer stream",
+ GVC_TYPE_MIXER_STREAM,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_DISPLAY_NAME,
+ g_param_spec_string ("display-name",
+ "Display Name",
+ "Name to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_ICON_NAMES,
+ g_param_spec_boxed ("icon-names",
+ "Icon Names",
+ "Name of icon to display for this stream",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (klass, sizeof (GvcStreamStatusIconPrivate));
+}
+
+static void
+on_status_icon_visible_notify (GvcStreamStatusIcon *icon)
+{
+ gboolean visible;
+
+ g_object_get (icon, "visible", &visible, NULL);
+ if (! visible) {
+ if (icon->priv->dock != NULL) {
+ gtk_widget_hide (icon->priv->dock);
+ }
+ }
+}
+
+static void
+gvc_stream_status_icon_init (GvcStreamStatusIcon *icon)
+{
+ icon->priv = GVC_STREAM_STATUS_ICON_GET_PRIVATE (icon);
+
+ g_signal_connect (icon,
+ "activate",
+ G_CALLBACK (on_status_icon_activate),
+ icon);
+ g_signal_connect (icon,
+ "popup-menu",
+ G_CALLBACK (on_status_icon_popup_menu),
+ icon);
+ g_signal_connect (icon,
+ "scroll-event",
+ G_CALLBACK (on_status_icon_scroll_event),
+ icon);
+ g_signal_connect (icon,
+ "notify::visible",
+ G_CALLBACK (on_status_icon_visible_notify),
+ NULL);
+
+ icon->priv->thaw = FALSE;
+}
+
+static void
+gvc_stream_status_icon_finalize (GObject *object)
+{
+ GvcStreamStatusIcon *stream_status_icon;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (GVC_IS_STREAM_STATUS_ICON (object));
+
+ stream_status_icon = GVC_STREAM_STATUS_ICON (object);
+
+ g_return_if_fail (stream_status_icon->priv != NULL);
+
+ g_strfreev (stream_status_icon->priv->icon_names);
+
+ G_OBJECT_CLASS (gvc_stream_status_icon_parent_class)->finalize (object);
+}
+
+GvcStreamStatusIcon *
+gvc_stream_status_icon_new (GvcMixerStream *stream,
+ const char **icon_names)
+{
+ GObject *icon;
+ icon = g_object_new (GVC_TYPE_STREAM_STATUS_ICON,
+ "mixer-stream", stream,
+ "icon-names", icon_names,
+ NULL);
+ return GVC_STREAM_STATUS_ICON (icon);
+}
diff --git a/mate-volume-control/src/gvc-stream-status-icon.h b/mate-volume-control/src/gvc-stream-status-icon.h
new file mode 100644
index 0000000..55887f3
--- /dev/null
+++ b/mate-volume-control/src/gvc-stream-status-icon.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __GVC_STREAM_STATUS_ICON_H
+#define __GVC_STREAM_STATUS_ICON_H
+
+#include <glib-object.h>
+#include "gvc-mixer-stream.h"
+
+G_BEGIN_DECLS
+
+#define GVC_TYPE_STREAM_STATUS_ICON (gvc_stream_status_icon_get_type ())
+#define GVC_STREAM_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_STREAM_STATUS_ICON, GvcStreamStatusIcon))
+#define GVC_STREAM_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_STREAM_STATUS_ICON, GvcStreamStatusIconClass))
+#define GVC_IS_STREAM_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_STREAM_STATUS_ICON))
+#define GVC_IS_STREAM_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_STREAM_STATUS_ICON))
+#define GVC_STREAM_STATUS_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_STREAM_STATUS_ICON, GvcStreamStatusIconClass))
+
+typedef struct GvcStreamStatusIconPrivate GvcStreamStatusIconPrivate;
+
+typedef struct
+{
+ GtkStatusIcon parent;
+ GvcStreamStatusIconPrivate *priv;
+} GvcStreamStatusIcon;
+
+typedef struct
+{
+ GtkStatusIconClass parent_class;
+} GvcStreamStatusIconClass;
+
+GType gvc_stream_status_icon_get_type (void);
+
+GvcStreamStatusIcon * gvc_stream_status_icon_new (GvcMixerStream *stream,
+ const char **icon_names);
+
+void gvc_stream_status_icon_set_icon_names (GvcStreamStatusIcon *icon,
+ const char **icon_names);
+void gvc_stream_status_icon_set_display_name (GvcStreamStatusIcon *icon,
+ const char *display_name);
+void gvc_stream_status_icon_set_mixer_stream (GvcStreamStatusIcon *icon,
+ GvcMixerStream *stream);
+
+G_END_DECLS
+
+#endif /* __GVC_STREAM_STATUS_ICON_H */