[Goodies-commits] r7849 - in parole/trunk: . data/desktop data/icons data/icons/scalable data/icons/scalable/apps data/icons/scalable/status data/interfaces data/pixmaps parole plugins plugins/properties plugins/tray po

Ali Abdallah aliov at xfce.org
Mon Jul 27 16:50:47 CEST 2009


Author: aliov
Date: 2009-07-27 14:50:47 +0000 (Mon, 27 Jul 2009)
New Revision: 7849

Added:
   parole/trunk/data/icons/scalable/
   parole/trunk/data/icons/scalable/Makefile.am
   parole/trunk/data/icons/scalable/apps/
   parole/trunk/data/icons/scalable/apps/Makefile.am
   parole/trunk/data/icons/scalable/apps/parole.svg
   parole/trunk/data/icons/scalable/status/
   parole/trunk/data/icons/scalable/status/Makefile.am
   parole/trunk/plugins/tray/
   parole/trunk/plugins/tray/Makefile.am
   parole/trunk/plugins/tray/tray-icon.c
Modified:
   parole/trunk/ChangeLog
   parole/trunk/TODO
   parole/trunk/configure.ac.in
   parole/trunk/data/desktop/parole.desktop.in.in
   parole/trunk/data/icons/Makefile.am
   parole/trunk/data/interfaces/parole.ui
   parole/trunk/data/interfaces/plugins.ui
   parole/trunk/data/pixmaps/parole.png
   parole/trunk/parole/Makefile.am
   parole/trunk/parole/parole-gst.c
   parole/trunk/parole/parole-gst.h
   parole/trunk/parole/parole-module.c
   parole/trunk/parole/parole-player.c
   parole/trunk/parole/parole-plugin.c
   parole/trunk/parole/parole-plugin.h
   parole/trunk/parole/parole-plugins-manager.c
   parole/trunk/parole/parole-rc-utils.h
   parole/trunk/parole/parole-stream.c
   parole/trunk/parole/parole-stream.h
   parole/trunk/plugins/Makefile.am
   parole/trunk/plugins/properties/stream-properties.c
   parole/trunk/po/POTFILES.in
   parole/trunk/po/parole-media-player.pot
Log:
	* Added system tray icon plugin, with optional notification
	support.
	* plugins, Now have optional configure dialog.
	* Added some home made icons and a logo.
	* Always set the stop button sensitive when we are trying to play
	a media file, this gives the possibility to cancel at any time.

Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/ChangeLog	2009-07-27 14:50:47 UTC (rev 7849)
@@ -1,3 +1,11 @@
+2009-07-27: 15:36 Ali aliov at xfce.org
+	* Added system tray icon plugin, with optional notification
+	support.
+	* plugins, Now have optional configure dialog.
+	* Added some home made icons and a logo.
+	* Always set the stop button sensitive when we are trying to play
+	a media file, this gives the possibility to cancel at any time.
+
 2009-07-26: 01:15 Ali aliov at xfce.org
 	* Provides a dialog to load/unload plugins.
 	* data/interfaces/ Mark some gtk labels as non-translatable+default

Modified: parole/trunk/TODO
===================================================================
--- parole/trunk/TODO	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/TODO	2009-07-27 14:50:47 UTC (rev 7849)
@@ -1,6 +1,6 @@
 === Media player ===
-* Configure plugins dialog to load/unload plugins.
 * Better statusbar information.
+* Complete the settings dialog.
 * Complete the shortcut keys.
 * Encoding support for subtitles.
 * Better support for cdda.

Modified: parole/trunk/configure.ac.in
===================================================================
--- parole/trunk/configure.ac.in	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/configure.ac.in	2009-07-27 14:50:47 UTC (rev 7849)
@@ -132,6 +132,22 @@
 AM_CONDITIONAL([PAROLE_PROPERTIES_PLUGIN], [test x"$ac_properties_plugin" = x"yes"])
 AC_MSG_RESULT([$ac_properties_plugin])
 
+# Tray plugin.
+#--------------------------
+AC_ARG_ENABLE([tray-plugin], AC_HELP_STRING([--disable-tray-plugin], [Don't build parole tray icon plugin]),
+  [ac_tray_plugin=$enableval], [ac_tray_plugin=yes])
+AC_MSG_CHECKING([whether to build the system tray plugin])
+AM_CONDITIONAL([PAROLE_TRAY_PLUGIN], [test x"$ac_tray_plugin" = x"yes"])
+AC_MSG_RESULT([$ac_tray_plugin])
+# Should we build the tray icon with notification support?
+LIBNOTIFY_FOUND="no"
+if test x"$ac_tray_plugin" = x"yes"; then
+ 	XDT_CHECK_OPTIONAL_PACKAGE([LIBNOTIFY],
+ 	[libnotify], [libnotify_minimum_version],
+ 	[libnotify],
+ 	[libnotify library], [yes]) 
+fi
+
 #=======================================================#
 #              Check for debugging support              #
 #=======================================================#
@@ -148,11 +164,15 @@
 data/pixmaps/Makefile
 data/interfaces/Makefile
 data/icons/Makefile
+data/icons/scalable/Makefile
+data/icons/scalable/apps/Makefile
+data/icons/scalable/status/Makefile
 data/mime/Makefile
 data/desktop/Makefile
 parole/Makefile
 plugins/Makefile
 plugins/properties/Makefile
+plugins/tray/Makefile
 docs/Makefile
 docs/plugin-api/version.xml
 docs/plugin-api/Makefile
@@ -170,9 +190,10 @@
         Debug:   			$enable_debug
 	Building plugin api docs:       ${enable_gtk_doc}
 	
-	    Plugins to build:
-	    -----------------
-	Stream Properties plugin:       ${ac_properties_plugin}
+	Plugins to build:
+	=================
+	Stream Properties:       	${ac_properties_plugin}
+	System Tray icon:       	${ac_tray_plugin} (With notification $LIBNOTIFY_FOUND).
 ------------------------------------------------------
 
 Configuration finished, type make to compile"

Modified: parole/trunk/data/desktop/parole.desktop.in.in
===================================================================
--- parole/trunk/data/desktop/parole.desktop.in.in	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/data/desktop/parole.desktop.in.in	2009-07-27 14:50:47 UTC (rev 7849)
@@ -1,6 +1,6 @@
 [Desktop Entry]
 _Name=Parole Media Player
-Icon=multimedia
+Icon=parole
 Exec=parole-media-player %F
 Terminal=false
 Type=Application;

Modified: parole/trunk/data/icons/Makefile.am
===================================================================
--- parole/trunk/data/icons/Makefile.am	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/data/icons/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,17 @@
+SUBDIRS =         \
+	scalable  
+        						
+	
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
+
+install-data-hook:
+	@-if test -z "$(DESTDIR)"; then					\
+                echo "Updating Gtk icon cache.";			\
+                $(gtk_update_icon_cache);				\
+        else								\
+                echo "*** Icon cache not updated. Remember to run:";	\
+		echo "***";						\
+                echo "***   $(gtk_update_icon_cache)";			\
+		echo "***";						\
+        fi

Added: parole/trunk/data/icons/scalable/Makefile.am
===================================================================
--- parole/trunk/data/icons/scalable/Makefile.am	                        (rev 0)
+++ parole/trunk/data/icons/scalable/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,2 @@
+SUBDIRS = apps status
+

Added: parole/trunk/data/icons/scalable/apps/Makefile.am
===================================================================
--- parole/trunk/data/icons/scalable/apps/Makefile.am	                        (rev 0)
+++ parole/trunk/data/icons/scalable/apps/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,7 @@
+EXTRA_DIST =				\
+	$(Data_DATA)
+
+Datadir = $(datadir)/icons/hicolor/scalable/apps
+
+Data_DATA =				\
+	parole.svg

Added: parole/trunk/data/icons/scalable/apps/parole.svg
===================================================================
--- parole/trunk/data/icons/scalable/apps/parole.svg	                        (rev 0)
+++ parole/trunk/data/icons/scalable/apps/parole.svg	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,1346 @@
+<?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="64px"
+   height="64px"
+   id="svg2393"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="parole.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2395">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective2401" />
+    <linearGradient
+       y2="47.250328"
+       x2="12.875"
+       y1="1.2498308"
+       x1="12.875"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7275"
+       xlink:href="#linearGradient3459"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="0.74983191"
+       x2="10"
+       y1="49.613293"
+       x1="10"
+       gradientTransform="translate(1,-1)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7273"
+       xlink:href="#linearGradient3435"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1.8811454"
+       x2="17.375"
+       y1="47.874966"
+       x1="17.375"
+       gradientTransform="translate(1,-1)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7271"
+       xlink:href="#linearGradient3427"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="31.003086"
+       x2="12.625"
+       y1="21.121838"
+       x1="12.625"
+       gradientTransform="matrix(0.8,0,0,1,2.4,11)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7263"
+       xlink:href="#linearGradient7221"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="28.762295"
+       x2="12.625"
+       y1="20.371838"
+       x1="12.625"
+       gradientTransform="matrix(0.8,0,0,1,2.4,23)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7261"
+       xlink:href="#linearGradient7213"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="31.003086"
+       x2="12.625"
+       y1="21.121838"
+       x1="12.625"
+       gradientTransform="matrix(0.8,0,0,1,2.4,-1)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7259"
+       xlink:href="#linearGradient7686"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="31.003086"
+       x2="12.625"
+       y1="21.121838"
+       x1="12.625"
+       gradientTransform="matrix(0.8,0,0,1,2.4,-13)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7257"
+       xlink:href="#linearGradient7227"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1.5"
+       x2="13.125"
+       y1="7.00071"
+       x1="13.125"
+       gradientTransform="matrix(0.8,0,0,1,2.4,-1)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7255"
+       xlink:href="#linearGradient7726"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.0982903,0,0,1.451942,-30.497853,0.5192613)"
+       r="7"
+       fy="6.2929435"
+       fx="30.5"
+       cy="6.2929435"
+       cx="30.5"
+       id="radialGradient7253"
+       xlink:href="#linearGradient7247"
+       inkscape:collect="always" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.4244604,0,22.913669)"
+       r="8.6875"
+       fy="39.8125"
+       fx="38.8125"
+       cy="39.8125"
+       cx="38.8125"
+       id="radialGradient8052"
+       xlink:href="#linearGradient8046"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="43.406342"
+       x2="35.606419"
+       y1="40.792191"
+       x1="33.786095"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8034"
+       xlink:href="#linearGradient2397"
+       inkscape:collect="always" />
+    <radialGradient
+       r="6.1868596"
+       fy="39.242989"
+       fx="31.635492"
+       cy="39.242989"
+       cx="31.635492"
+       gradientTransform="matrix(0.8459014,0,-2.6674958e-8,0.2782165,5.0485079,30.343064)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8032"
+       xlink:href="#linearGradient2508"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="24.705801"
+       x2="18.488775"
+       y1="8.672389"
+       x1="18.488775"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8030"
+       xlink:href="#linearGradient3345"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="24.705801"
+       x2="18.488775"
+       y1="8.672389"
+       x1="18.488775"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8028"
+       xlink:href="#linearGradient3345"
+       inkscape:collect="always" />
+    <radialGradient
+       r="7"
+       fy="19.956959"
+       fx="33.457024"
+       cy="19.956959"
+       cx="33.457024"
+       gradientTransform="matrix(0.9037069,-0.5217554,0.9177806,1.5896425,-14.147728,4.4338202)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8026"
+       xlink:href="#linearGradient3390"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="24.705801"
+       x2="18.488775"
+       y1="8.672389"
+       x1="18.488775"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8024"
+       xlink:href="#linearGradient3345"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="24.705801"
+       x2="18.488775"
+       y1="8.672389"
+       x1="18.488775"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8022"
+       xlink:href="#linearGradient3345"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="43.406342"
+       x2="35.606419"
+       y1="40.792191"
+       x1="33.786095"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8020"
+       xlink:href="#linearGradient2397"
+       inkscape:collect="always" />
+    <radialGradient
+       r="6.1868596"
+       fy="39.242989"
+       fx="31.635492"
+       cy="39.242989"
+       cx="31.635492"
+       gradientTransform="matrix(0.8459014,0,-2.6674958e-8,0.2782165,5.0485079,30.343064)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient8018"
+       xlink:href="#linearGradient2508"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="18.520807"
+       x2="28.5"
+       y1="9.122757"
+       x1="32.426598"
+       gradientTransform="translate(5,0)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient8016"
+       xlink:href="#linearGradient7789"
+       inkscape:collect="always" />
+    <radialGradient
+       r="9.375"
+       fy="9.375"
+       fx="9.375"
+       cy="9.375"
+       cx="9.375"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5879"
+       xlink:href="#linearGradient3524"
+       inkscape:collect="always" />
+    <radialGradient
+       r="9.375"
+       fy="9.375"
+       fx="9.375"
+       cy="9.375"
+       cx="9.375"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5877"
+       xlink:href="#linearGradient3524"
+       inkscape:collect="always" />
+    <radialGradient
+       r="9.375"
+       fy="9.375"
+       fx="9.375"
+       cy="9.375"
+       cx="9.375"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5875"
+       xlink:href="#linearGradient3524"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="40.00526"
+       x2="29"
+       y1="31.069963"
+       x1="28.976408"
+       gradientTransform="translate(-222.45316,-277.85765)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5654"
+       xlink:href="#linearGradient4457"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="40.00526"
+       x2="29"
+       y1="31.069963"
+       x1="28.976408"
+       gradientTransform="matrix(0.750053,0,0,0.750052,49.87293,11.12351)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5643"
+       xlink:href="#linearGradient4457"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="40.00526"
+       x2="29"
+       y1="31.069963"
+       x1="28.976408"
+       gradientTransform="translate(-1,-1)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5639"
+       xlink:href="#linearGradient4457"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4457"
+       inkscape:collect="always">
+      <stop
+         id="stop4459"
+         offset="0"
+         style="stop-color:#cc0000" />
+      <stop
+         id="stop4461"
+         offset="1"
+         style="stop-color:#ef2929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3524">
+      <stop
+         style="stop-color:#729fcf;stop-opacity:0;"
+         offset="0"
+         id="stop5270" />
+      <stop
+         id="stop5272"
+         offset="0.85000002"
+         style="stop-color:#729fcf;stop-opacity:0;" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1;"
+         offset="1"
+         id="stop3528" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2508">
+      <stop
+         id="stop2510"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2512"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2397">
+      <stop
+         id="stop2399"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2401"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3345"
+       inkscape:collect="always">
+      <stop
+         id="stop3347"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3349"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3390"
+       inkscape:collect="always">
+      <stop
+         id="stop3392"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0" />
+      <stop
+         id="stop3394"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3427">
+      <stop
+         id="stop3429"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:0;" />
+      <stop
+         style="stop-color:#6d6f6a;stop-opacity:1;"
+         offset="0.34788632"
+         id="stop3445" />
+      <stop
+         id="stop3447"
+         offset="0.79285717"
+         style="stop-color:#6f726c;stop-opacity:1;" />
+      <stop
+         id="stop3431"
+         offset="1"
+         style="stop-color:#555753;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3435">
+      <stop
+         id="stop3437"
+         offset="0"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0.19285715"
+         id="stop3449" />
+      <stop
+         id="stop3453"
+         offset="0.69999999"
+         style="stop-color:#2e3436;stop-opacity:1;" />
+      <stop
+         id="stop3439"
+         offset="1"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3459">
+      <stop
+         id="stop3461"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0.1632653"
+         id="stop3467" />
+      <stop
+         id="stop3472"
+         offset="0.80000001"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3463"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7686">
+      <stop
+         id="stop7688"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1" />
+      <stop
+         id="stop7690"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7726"
+       inkscape:collect="always">
+      <stop
+         id="stop7728"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop7730"
+         offset="1"
+         style="stop-color:#729fcf;stop-opacity:0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7789">
+      <stop
+         style="stop-color:#a7cc5c;stop-opacity:1;"
+         offset="0"
+         id="stop7791" />
+      <stop
+         style="stop-color:#789e2d;stop-opacity:1;"
+         offset="1"
+         id="stop7793" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8046"
+       inkscape:collect="always">
+      <stop
+         id="stop8048"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop8050"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7213">
+      <stop
+         style="stop-color:#9bbbdd;stop-opacity:1"
+         offset="0"
+         id="stop7215" />
+      <stop
+         id="stop7219"
+         offset="0.5"
+         style="stop-color:#b8cfe7;stop-opacity:0.0295858;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0"
+         offset="1"
+         id="stop7217" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7221">
+      <stop
+         id="stop7223"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1" />
+      <stop
+         id="stop7225"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.69083971" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7227">
+      <stop
+         id="stop7229"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:0.62213743" />
+      <stop
+         id="stop7231"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7247"
+       inkscape:collect="always">
+      <stop
+         id="stop7249"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop7251"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective167"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 24 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       spreadMethod="pad"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient619"
+       id="radialGradient627"
+       r="5.5634472"
+       fy="55.133288"
+       fx="28.736504"
+       cy="55.133288"
+       cx="28.736504"
+       gradientTransform="scale(1.074784,0.9304195)" />
+    <linearGradient
+       spreadMethod="pad"
+       gradientUnits="objectBoundingBox"
+       xlink:href="#linearGradient619"
+       id="linearGradient626"
+       y2="0.00000000"
+       x2="1.00000000"
+       y1="0.00000000"
+       x1="0.00000000" />
+    <radialGradient
+       spreadMethod="pad"
+       gradientTransform="matrix(1.074967,0,0,0.930261,-2.970606e-7,-1.274941e-6)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient619"
+       id="radialGradient622"
+       r="3.43041444"
+       fy="60.7591972"
+       fx="9.37104893"
+       cy="60.7591972"
+       cx="9.37104893" />
+    <linearGradient
+       spreadMethod="pad"
+       gradientUnits="objectBoundingBox"
+       id="linearGradient619"
+       y2="0.00000000"
+       x2="1.00000000"
+       y1="0.00000000"
+       x1="0.00000000">
+      <stop
+         id="stop620"
+         offset="0.00000000"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop621"
+         offset="1.00000000"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3185"
+       inkscape:persp3d-origin="45 : 30 : 1"
+       inkscape:vp_z="90 : 45 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 45 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3427"
+       id="linearGradient3861"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1,-1)"
+       x1="17.375"
+       y1="47.874966"
+       x2="17.375"
+       y2="1.8811454" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3435"
+       id="linearGradient3863"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1,-1)"
+       x1="10"
+       y1="49.613293"
+       x2="10"
+       y2="0.74983191" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7686"
+       id="linearGradient3865"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8,0,0,1,2.4,-1)"
+       x1="12.625"
+       y1="21.121838"
+       x2="12.625"
+       y2="31.003086" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3459"
+       id="linearGradient3867"
+       gradientUnits="userSpaceOnUse"
+       x1="12.875"
+       y1="1.2498308"
+       x2="12.875"
+       y2="47.250328" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7227"
+       id="linearGradient3869"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8,0,0,1,2.4,-13)"
+       x1="12.625"
+       y1="21.121838"
+       x2="12.625"
+       y2="31.003086" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7726"
+       id="linearGradient3871"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8,0,0,1,2.4,-1)"
+       x1="13.125"
+       y1="7.00071"
+       x2="13.125"
+       y2="1.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7221"
+       id="linearGradient3873"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8,0,0,1,2.4,11)"
+       x1="12.625"
+       y1="21.121838"
+       x2="12.625"
+       y2="31.003086" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7213"
+       id="linearGradient3875"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8,0,0,1,2.4,23)"
+       x1="12.625"
+       y1="20.371838"
+       x2="12.625"
+       y2="28.762295" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient619"
+       id="radialGradient3913"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.074967,0,0,0.930261,-2.9706059e-7,-1.274941e-6)"
+       spreadMethod="pad"
+       cx="9.37104893"
+       cy="60.7591972"
+       fx="9.37104893"
+       fy="60.7591972"
+       r="3.43041444" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient619"
+       id="radialGradient3915"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.074784,0.9304195)"
+       spreadMethod="pad"
+       cx="28.736504"
+       cy="55.133288"
+       fx="28.736504"
+       fy="55.133288"
+       r="5.5634472" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient619"
+       id="radialGradient3917"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.074967,0,0,0.930261,-2.9706061e-7,-1.274941e-6)"
+       spreadMethod="pad"
+       cx="9.37104893"
+       cy="60.7591972"
+       fx="9.37104893"
+       fy="60.7591972"
+       r="3.43041444" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="32"
+     inkscape:cy="25.606225"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="721"
+     inkscape:window-x="0"
+     inkscape:window-y="25" />
+  <metadata
+     id="metadata2398">
+    <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"
+       inkscape:label="Layer 1"
+       id="g2863"
+       transform="translate(153.22661,104.92883)">
+      <g
+         transform="translate(9,3)"
+         style="opacity:0.30632181"
+         id="g3238" />
+      <g
+         transform="translate(1.0000005,98.6875)"
+         id="g3374" />
+      <g
+         transform="translate(-80,60)"
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/lapo/Desktop/kenneth.png"
+         style="opacity:0"
+         id="g3681">
+        <rect
+           style="opacity:0.25999989;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="rect3675"
+           width="48"
+           height="48"
+           x="0"
+           y="-1.7763568e-15" />
+        <rect
+           style="opacity:0.25999989;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="rect3677"
+           width="48"
+           height="48"
+           x="-80"
+           y="-1.7763568e-15" />
+        <rect
+           style="opacity:0.25999989;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="rect3679"
+           width="48"
+           height="48"
+           x="-160"
+           y="-1.7763568e-15" />
+      </g>
+      <rect
+         style="fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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:none;overflow:visible"
+         id="rect1315"
+         width="16"
+         height="16"
+         x="-203.45316"
+         y="-253.85765" />
+      <rect
+         style="fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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:none;overflow:visible"
+         id="rect3481"
+         width="22"
+         height="22"
+         x="-203.45316"
+         y="-227.85765" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient5875);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.60878164;stroke-linecap:round;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:none;overflow:visible"
+         id="path3584"
+         sodipodi:cx="9.375"
+         sodipodi:cy="9.375"
+         sodipodi:rx="9.375"
+         sodipodi:ry="9.375"
+         d="M 18.75,9.375 A 9.375,9.375 0 1 1 0,9.375 A 9.375,9.375 0 1 1 18.75,9.375 z"
+         transform="matrix(1.706666,0,0,1.706666,-151.45316,-198.85765)" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient5877);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.48148614;stroke-linecap:round;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:none;overflow:visible"
+         id="path3586"
+         sodipodi:cx="9.375"
+         sodipodi:cy="9.375"
+         sodipodi:rx="9.375"
+         sodipodi:ry="9.375"
+         d="M 18.75,9.375 A 9.375,9.375 0 1 1 0,9.375 A 9.375,9.375 0 1 1 18.75,9.375 z"
+         transform="matrix(2.133334,0,0,2.133334,-155.45316,-202.85766)" />
+      <path
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient5879);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.39974412;stroke-linecap:round;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:none;overflow:visible"
+         id="path3588"
+         sodipodi:cx="9.375"
+         sodipodi:cy="9.375"
+         sodipodi:rx="9.375"
+         sodipodi:ry="9.375"
+         d="M 18.75,9.375 A 9.375,9.375 0 1 1 0,9.375 A 9.375,9.375 0 1 1 18.75,9.375 z"
+         transform="matrix(2.559999,0,0,2.559999,-159.45316,-206.85765)" />
+      <g
+         style="display:none"
+         id="g3977"
+         transform="translate(-339.45321,-219.35765)">
+        <path
+           transform="matrix(1.142857,0,0,1.5,-11.14285,-8.25)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path3954"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+        <rect
+           y="26"
+           x="53"
+           height="8.5"
+           width="1"
+           id="rect3956"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path3964"
+           d="M 54,26 C 56,26 55.5,29 56.5,28.999999 C 54.5,29 56,27.5 54,27.5 L 54,26 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      </g>
+      <g
+         style="display:none"
+         id="g3997"
+         transform="translate(-339.45321,-219.35765)">
+        <path
+           transform="matrix(1.142857,0,0,1.5,-2.642849,-8.25)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path3984"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+        <rect
+           y="26"
+           x="61.5"
+           height="8.5"
+           width="1"
+           id="rect3986"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path3988"
+           d="M 62.500001,26 C 64.5,26 64,28.500001 65,28.5 C 63.499999,28.500001 64.500001,27.5 62.500001,27.5 L 62.500001,26 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path3995"
+           d="M 62.500001,28 C 64.5,28 64,30.500001 65,30.5 C 63.499999,30.500001 64.500001,29.5 62.500001,29.5 L 62.500001,28 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      </g>
+      <g
+         transform="translate(-261.45316,-253.85765)"
+         id="g4113"
+         style="display:none">
+        <path
+           transform="matrix(-1.142857,0,0,-1.5,56.14275,104.75)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path4005"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+        <rect
+           transform="scale(-1,-1)"
+           y="-70.5"
+           x="8.0000496"
+           height="8.5"
+           width="1"
+           id="rect4007"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path4009"
+           d="M -8.00005,70.499999 C -6.00005,70.499999 -6.50005,67.499999 -5.50005,67.5 C -7.50005,67.499999 -6.00005,68.999999 -8.00005,68.999999 L -8.00005,70.499999 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      </g>
+      <g
+         style="display:none"
+         id="g4028"
+         transform="translate(-339.95316,-219.35765)">
+        <path
+           transform="matrix(-1.142857,0,0,-1.5,142.6428,70.25)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path4016"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+        <rect
+           transform="scale(-1,-1)"
+           y="-36"
+           x="-78.5"
+           height="8.5"
+           width="1"
+           id="rect4018"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path4020"
+           d="M 78.500001,36 C 80.5,36 80,33.499999 81,33.5 C 79.499999,33.499999 80.500001,34.5 78.500001,34.5 L 78.500001,36 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path4022"
+           d="M 78.500001,34 C 80.5,34 80,31.499999 81,31.5 C 79.499999,31.499999 80.500001,32.5 78.500001,32.5 L 78.500001,34 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      </g>
+      <g
+         id="g4074"
+         transform="translate(-260.45316,-254.85765)"
+         style="display:none">
+        <path
+           transform="matrix(1.142857,0,0,1.5,-89.14285,39.75)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path4053"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:nodetypes="ccccccccc"
+           id="rect4055"
+           d="M -25,74 L -19,75.5 L -19,84 L -20,84 L -20,77 L -24,76 L -24,82.5 L -25,82.5 L -25,74 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           transform="matrix(1.142857,0,0,1.5,-84.14285,41.25)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path4061"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+      </g>
+      <g
+         id="g4090"
+         transform="translate(-261.95316,-255.85765)"
+         style="display:none">
+        <path
+           transform="matrix(1.142857,0,0,-1.5,-74.64285,120.75)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path4081"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+        <path
+           sodipodi:nodetypes="ccccccccc"
+           id="path4083"
+           d="M -13.5,86.5 L -7.5,85 L -7.5,76.5 L -8.5,76.5 L -8.5,83.5 L -12.5,84.5 L -12.5,78 L -13.5,78 L -13.5,86.5 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           transform="matrix(1.142857,0,0,-1.5,-69.64285,119.25)"
+           d="M 57,28.5 A 1.75,1 0 1 1 53.5,28.5 A 1.75,1 0 1 1 57,28.5 z"
+           sodipodi:ry="1"
+           sodipodi:rx="1.75"
+           sodipodi:cy="28.5"
+           sodipodi:cx="55.25"
+           id="path4085"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+           sodipodi:type="arc" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#5c3566;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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:none;overflow:visible"
+         id="path5560"
+         sodipodi:cx="64"
+         sodipodi:cy="37"
+         sodipodi:rx="16"
+         sodipodi:ry="16"
+         d="M 80,37 A 16,16 0 1 1 48,37 A 16,16 0 1 1 80,37 z"
+         transform="translate(-197.94836,-174.85285)" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#75507b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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:none;overflow:visible"
+         id="path5562"
+         sodipodi:cx="64"
+         sodipodi:cy="37"
+         sodipodi:rx="16"
+         sodipodi:ry="16"
+         d="M 80,37 A 16,16 0 1 1 48,37 A 16,16 0 1 1 80,37 z"
+         transform="matrix(0.7503,0,0,0.7503,-181.96756,-165.61395)" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#ad7fa8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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:none;overflow:visible"
+         id="path5564"
+         sodipodi:cx="64"
+         sodipodi:cy="37"
+         sodipodi:rx="16"
+         sodipodi:ry="16"
+         d="M 80,37 A 16,16 0 1 1 48,37 A 16,16 0 1 1 80,37 z"
+         transform="matrix(0.499916,0,0,0.499916,-165.943,-156.34975)" />
+      <g
+         id="g4489"
+         transform="translate(-261.45316,-254.85765)"
+         style="display:none">
+        <rect
+           ry="1.0852587"
+           y="27.5"
+           x="26.5"
+           height="12"
+           width="12"
+           id="rect4451"
+           style="fill:url(#linearGradient5639);fill-opacity:1;fill-rule:evenodd;stroke:#a40000;stroke-width:1;stroke-linecap:round;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" />
+        <g
+           transform="translate(-2.000047,-2.00005)"
+           id="g4467">
+          <rect
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+             id="rect4463"
+             width="9.0000229"
+             height="2.0000057"
+             x="44.997532"
+             y="-0.29288569"
+             ry="0"
+             transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)" />
+          <rect
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;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"
+             id="rect4465"
+             width="9.0000229"
+             height="2.0000057"
+             x="-3.7929118"
+             y="48.497509"
+             ry="0"
+             transform="matrix(-0.707107,0.707107,0.707107,0.707107,0,0)" />
+        </g>
+        <rect
+           style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ef2929;stroke-width:1;stroke-linecap:round;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"
+           id="rect4479"
+           width="10"
+           height="10"
+           x="27.5"
+           y="28.5"
+           ry="0" />
+      </g>
+      <rect
+         ry="1.0852587"
+         y="-249.35765"
+         x="-194.95316"
+         height="7"
+         width="7"
+         id="rect4506"
+         style="fill:url(#linearGradient5654);fill-opacity:1;fill-rule:evenodd;stroke:#a40000;stroke-width:1;stroke-linecap:round;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:none;overflow:visible" />
+      <path
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:none"
+         d="M -193.95316,-247.35765 L -192.95316,-248.35765 L -188.95316,-244.35765 L -189.95316,-243.35765 L -193.95316,-247.35765 z"
+         id="path4510"
+         sodipodi:nodetypes="ccccc" />
+      <path
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:none"
+         d="M -192.95316,-243.35765 L -193.95316,-244.35765 L -189.95316,-248.35765 L -188.95316,-247.35765 L -192.95316,-243.35765 z"
+         id="path4512"
+         sodipodi:nodetypes="ccccc" />
+      <g
+         transform="translate(-261.45316,-253.85765)"
+         id="g5709"
+         style="display:none">
+        <rect
+           ry="0.99253845"
+           y="32.499989"
+           x="70.499382"
+           height="9.0006237"
+           width="9.0006361"
+           id="rect5674"
+           style="fill:url(#linearGradient5643);fill-opacity:1;fill-rule:evenodd;stroke:#a40000;stroke-width:1;stroke-linecap:round;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" />
+        <rect
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ef2929;stroke-width:1;stroke-linecap:round;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"
+           id="rect5682"
+           width="7"
+           height="7"
+           x="71.5"
+           y="33.5"
+           ry="0" />
+        <g
+           id="g5705">
+          <path
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 72.5,35.5 L 73.5,34.5 L 77.5,38.5 L 76.5,39.5 L 72.5,35.5 z"
+             id="path5693"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 73.5,39.5 L 72.5,38.5 L 76.5,34.5 L 77.5,35.5 L 73.5,39.5 z"
+             id="path5695"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+      </g>
+      <path
+         transform="matrix(1.0647482,0,0,1,-3.5755396,2.25)"
+         d="M 47.5,39.8125 A 8.6875,3.6875 0 1 1 30.125,39.8125 A 8.6875,3.6875 0 1 1 47.5,39.8125 z"
+         sodipodi:ry="3.6875"
+         sodipodi:rx="8.6875"
+         sodipodi:cy="39.8125"
+         sodipodi:cx="38.8125"
+         id="path8036"
+         style="opacity:0.35;fill:url(#radialGradient8052);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <g
+         transform="translate(1,0)"
+         style="opacity:0.9"
+         id="g7235">
+        <path
+           style="opacity:1;fill:url(#linearGradient7271);fill-opacity:1;stroke:url(#linearGradient7273);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 2.5,-16.5 L 2.5,60.5 L 4.5,60.5 L 4.5,59.5 L 6.5,59.5 L 6.5,60.5 L 21.5,60.5 L 21.5,59.5 L 23.5,59.5 L 23.5,60.5 L 25.5,60.5 L 25.5,-16.5 L 23.5,-16.5 L 23.5,-14.5 L 21.5,-14.5 L 21.5,-16.5 L 6.5,-16.5 L 6.5,-14.5 L 4.5,-14.5 L 4.5,-16.5 L 2.5,-16.5 z M 4.5,-12.5 L 6.5,-12.5 L 6.5,-10.5 L 4.5,-10.5 L 4.5,-12.5 z M 21.5,-12.5 L 23.5,-12.5 L 23.5,-10.5 L 21.5,-10.5 L 21.5,-12.5 z M 4.5,-8.5 L 6.5,-8.5 L 6.5,-6.5 L 4.5,-6.5 L 4.5,-8.5 z M 21.5,-8.5 L 23.5,-8.5 L 23.5,-6.5 L 21.5,-6.5 L 21.5,-8.5 z M 4.5,-4.5 L 6.5,-4.5 L 6.5,-2.5 L 4.5,-2.5 L 4.5,-4.5 z M 21.5,-4.5 L 23.5,-4.5 L 23.5,-2.5 L 21.5,-2.5 L 21.5,-4.5 z M 4.5,-0.5 L 6.5,-0.5 L 6.5,1.5 L 4.5,1.5 L 4.5,-0.5 z M 21.5,-0.5 L 23.5,-0.5 L 23.5,1.5 L 21.5,1.5 L 21.5,-0.5 z M 4.5,3.5 L 6.5,3.5 L 6.5,5.5 L 4.5,5.5 L 4.5,3.5 z M 21.5,3.5 L 23.5,3.5 L 23.5,5.5 L 21.5,5.5 L 21.5,3.5 z M 4.5,7.5 L 6.5,7.5 L 6.5,9.5 L 4.5,9.5 L 4.5,7.5 z M 21.5,7.5 L 23.5,7.5 L 23.5,9.5 L 21.5,9.5 L 21.5,7.5 z M 4.5,11.5 L 6.5,11.5
  L 6.5,13.5 L 4.5,13.5 L 4.5,11.5 z M 21.5,11.5 L 23.5,11.5 L 23.5,13.5 L 21.5,13.5 L 21.5,11.5 z M 4.5,15.5 L 6.5,15.5 L 6.5,17.5 L 4.5,17.5 L 4.5,15.5 z M 21.5,15.5 L 23.5,15.5 L 23.5,17.5 L 21.5,17.5 L 21.5,15.5 z M 4.5,19.5 L 6.5,19.5 L 6.5,21.5 L 4.5,21.5 L 4.5,19.5 z M 21.5,19.5 L 23.5,19.5 L 23.5,21.5 L 21.5,21.5 L 21.5,19.5 z M 4.5,23.5 L 6.5,23.5 L 6.5,25.5 L 4.5,25.5 L 4.5,23.5 z M 21.5,23.5 L 23.5,23.5 L 23.5,25.5 L 21.5,25.5 L 21.5,23.5 z M 4.5,27.5 L 6.5,27.5 L 6.5,29.5 L 4.5,29.5 L 4.5,27.5 z M 21.5,27.5 L 23.5,27.5 L 23.5,29.5 L 21.5,29.5 L 21.5,27.5 z M 4.5,31.5 L 6.5,31.5 L 6.5,33.5 L 4.5,33.5 L 4.5,31.5 z M 21.5,31.5 L 23.5,31.5 L 23.5,33.5 L 21.5,33.5 L 21.5,31.5 z M 4.5,35.5 L 6.5,35.5 L 6.5,37.5 L 4.5,37.5 L 4.5,35.5 z M 21.5,35.5 L 23.5,35.5 L 23.5,37.5 L 21.5,37.5 L 21.5,35.5 z M 4.5,39.5 L 6.5,39.5 L 6.5,41.5 L 4.5,41.5 L 4.5,39.5 z M 21.5,39.5 L 23.5,39.5 L 23.5,41.5 L 21.5,41.5 L 21.5,39.5 z M 4.5,43.5 L 6.5,43.5 L 6.5,45.5 L 4.5,45.5 L 4.5,43.5 z M
  21.5,43.5 L 23.5,43.5 L 23.5,45.5 L 21.5,45.5 L 21.5,43.5 z M 4.5,47.5 L 6.5,47.5 L 6.5,49.5 L 4.5,49.5 L 4.5,47.5 z M 21.5,47.5 L 23.5,47.5 L 23.5,49.5 L 21.5,49.5 L 21.5,47.5 z M 4.5,51.5 L 6.5,51.5 L 6.5,53.5 L 4.5,53.5 L 4.5,51.5 z M 21.5,51.5 L 23.5,51.5 L 23.5,53.5 L 21.5,53.5 L 21.5,51.5 z M 4.5,55.5 L 6.5,55.5 L 6.5,57.5 L 4.5,57.5 L 4.5,55.5 z M 21.5,55.5 L 23.5,55.5 L 23.5,57.5 L 21.5,57.5 L 21.5,55.5 z"
+           id="rect3561"
+           sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+        <path
+           style="opacity:1;fill:url(#linearGradient7259);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 8,19 L 20,19 L 20,30 L 8,30 L 8,19 z"
+           id="rect3558"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="opacity:0.3;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7275);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+           d="M 3.5,-15.5 L 24.5,-15.5 L 24.5,59.499992 L 3.5,59.499992 L 3.5,-15.5 z"
+           id="rect6707"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="opacity:1;fill:url(#linearGradient7257);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+           d="M 8,7 L 20,7 L 20,18 L 8,18 L 8,7 z"
+           id="rect7694"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="opacity:0.5;fill:url(#linearGradient7255);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+           d="M 8,-5 L 20,-5 L 20,6 L 8,6 L 8,-5 z"
+           id="rect7698"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="opacity:1;fill:url(#linearGradient7263);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+           d="M 8,31 L 20,31 L 20,42 L 8,42 L 8,31 z"
+           id="rect7702"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="opacity:0.74626896;fill:url(#linearGradient7261);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+           d="M 8,43 L 20,43 L 20,54 L 8,54 L 8,43 z"
+           id="path7209"
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <g
+         transform="translate(-2,1)"
+         id="g8005">
+        <path
+           sodipodi:nodetypes="cccsssccccsssccccc"
+           id="rect2415"
+           d="M 31.5,5.5 L 31.5,12.5 L 31.5,27.3125 C 30.333,26.789102 28.74849,26.500001 27,26.5 C 23.41909,26.5 20.5,27.835511 20.5,29.5 C 20.5,31.16449 23.41909,32.500001 27,32.5 C 30.58091,32.5 33.5,31.164492 33.5,29.5 L 33.5,13.84375 L 44.5,21.15625 L 44.5,36.3125 C 43.333,35.789102 41.74849,35.500001 40,35.5 C 36.41909,35.5 33.5,36.835511 33.5,38.5 C 33.5,40.16449 36.41909,41.500001 40,41.5 C 43.58091,41.5 46.5,40.164492 46.5,38.5 L 46.5,22.5 L 46.5,17.5 L 46.5,15.5 L 31.5,5.5 z"
+           style="fill:url(#linearGradient8016);fill-opacity:1;fill-rule:nonzero;stroke:#42770c;stroke-width:1;stroke-linecap:round;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" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:url(#radialGradient8018);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient8020);stroke-width:0.98374951;stroke-linecap:square;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"
+           id="path2237"
+           sodipodi:cx="33.786095"
+           sodipodi:cy="41.87933"
+           sodipodi:rx="5.6637621"
+           sodipodi:ry="1.8473293"
+           d="M 39.449857,41.87933 A 5.6637621,1.8473293 0 1 1 28.122333,41.87933 A 5.6637621,1.8473293 0 1 1 39.449857,41.87933 z"
+           transform="matrix(0.966787,0,0,1.068809,7.32798,-6.261024)" />
+        <g
+           id="g3361"
+           style="opacity:0.6529851"
+           transform="translate(5,1)">
+          <g
+             transform="translate(9,3)"
+             style="opacity:1;fill-opacity:1;stroke:url(#linearGradient8022)"
+             id="g3392">
+            <path
+               sodipodi:nodetypes="cc"
+               id="path2387"
+               d="M 18.5,25.5 L 18.5,4.5"
+               style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8024);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.973384;display:inline" />
+          </g>
+          <path
+             sodipodi:nodetypes="cccscccccc"
+             id="path3264"
+             d="M 27.5,6.375 L 27.5,11.5 L 27.5,12.75 C 27.526842,12.393366 27.742082,12.078211 28.064505,11.923448 C 28.386928,11.768685 28.767453,11.797873 29.0625,12 L 40.0625,19.3125 C 40.314911,19.482855 40.475956,19.758931 40.5,20.0625 L 40.5,16.5 L 40.5,15.0625 L 27.5,6.375 z"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient8026);stroke-width:1;stroke-linecap:round;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" />
+          <g
+             transform="translate(22,13)"
+             style="opacity:1;fill-opacity:1;stroke:url(#linearGradient8028)"
+             id="g3353">
+            <path
+               sodipodi:nodetypes="cc"
+               id="path3355"
+               d="M 18.5,25.5 L 18.5,2.5"
+               style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8030);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.973384;display:inline" />
+          </g>
+        </g>
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:url(#radialGradient8032);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient8034);stroke-width:0.98374951;stroke-linecap:square;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"
+           id="path7999"
+           sodipodi:cx="33.786095"
+           sodipodi:cy="41.87933"
+           sodipodi:rx="5.6637621"
+           sodipodi:ry="1.8473293"
+           d="M 39.449857,41.87933 A 5.6637621,1.8473293 0 1 1 28.122333,41.87933 A 5.6637621,1.8473293 0 1 1 39.449857,41.87933 z"
+           transform="matrix(0.966787,0,0,1.068809,-5.67202,-15.261024)" />
+      </g>
+      <path
+         sodipodi:nodetypes="cc"
+         id="path7244"
+         d="M 43.5,17.0625 L 30.5,8.375"
+         style="opacity:0.88805967;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient7253);stroke-width:1;stroke-linecap:round;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" />
+    </g>
+    <g
+       id="g3845"
+       style="opacity:0.9;display:inline"
+       transform="matrix(2.6432826,0,0,1.1913711,-4.733227,2.4262009)">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+         id="path3847"
+         d="M 2.5,-16.5 L 2.5,60.5 L 4.5,60.5 L 4.5,59.5 L 6.5,59.5 L 6.5,60.5 L 21.5,60.5 L 21.5,59.5 L 23.5,59.5 L 23.5,60.5 L 25.5,60.5 L 25.5,-16.5 L 23.5,-16.5 L 23.5,-14.5 L 21.5,-14.5 L 21.5,-16.5 L 6.5,-16.5 L 6.5,-14.5 L 4.5,-14.5 L 4.5,-16.5 L 2.5,-16.5 z M 4.5,-12.5 L 6.5,-12.5 L 6.5,-10.5 L 4.5,-10.5 L 4.5,-12.5 z M 21.5,-12.5 L 23.5,-12.5 L 23.5,-10.5 L 21.5,-10.5 L 21.5,-12.5 z M 4.5,-8.5 L 6.5,-8.5 L 6.5,-6.5 L 4.5,-6.5 L 4.5,-8.5 z M 21.5,-8.5 L 23.5,-8.5 L 23.5,-6.5 L 21.5,-6.5 L 21.5,-8.5 z M 4.5,-4.5 L 6.5,-4.5 L 6.5,-2.5 L 4.5,-2.5 L 4.5,-4.5 z M 21.5,-4.5 L 23.5,-4.5 L 23.5,-2.5 L 21.5,-2.5 L 21.5,-4.5 z M 4.5,-0.5 L 6.5,-0.5 L 6.5,1.5 L 4.5,1.5 L 4.5,-0.5 z M 21.5,-0.5 L 23.5,-0.5 L 23.5,1.5 L 21.5,1.5 L 21.5,-0.5 z M 4.5,3.5 L 6.5,3.5 L 6.5,5.5 L 4.5,5.5 L 4.5,3.5 z M 21.5,3.5 L 23.5,3.5 L 23.5,5.5 L 21.5,5.5 L 21.5,3.5 z M 4.5,7.5 L 6.5,7.5 L 6.5,9.5 L 4.5,9.5 L 4.5,7.5 z M 21.5,7.5 L 23.5,7.5 L 23.5,9.5 L 21.5,9.5 L 21.5,7.5 z M 4.5,11.5 L 6.5,11.5 L
  6.5,13.5 L 4.5,13.5 L 4.5,11.5 z M 21.5,11.5 L 23.5,11.5 L 23.5,13.5 L 21.5,13.5 L 21.5,11.5 z M 4.5,15.5 L 6.5,15.5 L 6.5,17.5 L 4.5,17.5 L 4.5,15.5 z M 21.5,15.5 L 23.5,15.5 L 23.5,17.5 L 21.5,17.5 L 21.5,15.5 z M 4.5,19.5 L 6.5,19.5 L 6.5,21.5 L 4.5,21.5 L 4.5,19.5 z M 21.5,19.5 L 23.5,19.5 L 23.5,21.5 L 21.5,21.5 L 21.5,19.5 z M 4.5,23.5 L 6.5,23.5 L 6.5,25.5 L 4.5,25.5 L 4.5,23.5 z M 21.5,23.5 L 23.5,23.5 L 23.5,25.5 L 21.5,25.5 L 21.5,23.5 z M 4.5,27.5 L 6.5,27.5 L 6.5,29.5 L 4.5,29.5 L 4.5,27.5 z M 21.5,27.5 L 23.5,27.5 L 23.5,29.5 L 21.5,29.5 L 21.5,27.5 z M 4.5,31.5 L 6.5,31.5 L 6.5,33.5 L 4.5,33.5 L 4.5,31.5 z M 21.5,31.5 L 23.5,31.5 L 23.5,33.5 L 21.5,33.5 L 21.5,31.5 z M 4.5,35.5 L 6.5,35.5 L 6.5,37.5 L 4.5,37.5 L 4.5,35.5 z M 21.5,35.5 L 23.5,35.5 L 23.5,37.5 L 21.5,37.5 L 21.5,35.5 z M 4.5,39.5 L 6.5,39.5 L 6.5,41.5 L 4.5,41.5 L 4.5,39.5 z M 21.5,39.5 L 23.5,39.5 L 23.5,41.5 L 21.5,41.5 L 21.5,39.5 z M 4.5,43.5 L 6.5,43.5 L 6.5,45.5 L 4.5,45.5 L 4.5,43.5 z M 2
 1.5,43.5 L 23.5,43.5 L 23.5,45.5 L 21.5,45.5 L 21.5,43.5 z M 4.5,47.5 L 6.5,47.5 L 6.5,49.5 L 4.5,49.5 L 4.5,47.5 z M 21.5,47.5 L 23.5,47.5 L 23.5,49.5 L 21.5,49.5 L 21.5,47.5 z M 4.5,51.5 L 6.5,51.5 L 6.5,53.5 L 4.5,53.5 L 4.5,51.5 z M 21.5,51.5 L 23.5,51.5 L 23.5,53.5 L 21.5,53.5 L 21.5,51.5 z M 4.5,55.5 L 6.5,55.5 L 6.5,57.5 L 4.5,57.5 L 4.5,55.5 z M 21.5,55.5 L 23.5,55.5 L 23.5,57.5 L 21.5,57.5 L 21.5,55.5 z"
+         style="opacity:1;fill:url(#linearGradient3861);fill-opacity:1;stroke:url(#linearGradient3863);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3849"
+         d="M 8,19 L 20,19 L 20,30 L 8,30 L 8,19 z"
+         style="opacity:1;fill:url(#linearGradient3865);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3851"
+         d="M 3.5,-15.5 L 24.5,-15.5 L 24.5,59.499992 L 3.5,59.499992 L 3.5,-15.5 z"
+         style="opacity:0.3;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3867);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3853"
+         d="M 8,7 L 20,7 L 20,18 L 8,18 L 8,7 z"
+         style="opacity:1;fill:url(#linearGradient3869);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3855"
+         d="M 8,-5 L 20,-5 L 20,6 L 8,6 L 8,-5 z"
+         style="opacity:0.5;fill:url(#linearGradient3871);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3857"
+         d="M 8,31 L 20,31 L 20,42 L 8,42 L 8,31 z"
+         style="opacity:1;fill:url(#linearGradient3873);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path3859"
+         d="M 8,43 L 20,43 L 20,54 L 8,54 L 8,43 z"
+         style="opacity:0.74626926;fill:url(#linearGradient3875);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+    </g>
+    <g
+       id="g3877"
+       transform="matrix(0.7248717,0,0,0.6796277,7.1508262,-4.2292099)">
+      <g
+         id="g3879"
+         style="font-size:12px"
+         transform="translate(3.125,-8.28125)">
+        <path
+           id="path3881"
+           style="fill:#0d0000;fill-opacity:0.30147101;fill-rule:evenodd;stroke-width:1pt"
+           transform="matrix(1.035546,0,0,1.035546,0.722309,-0.302267)"
+           d="M 7.73398,34.2049 L 12.0429,51.3301 C 5.08232,51.2196 4.19844,55.9705 4.64039,59.1746 C 6.73961,68.2343 17.4567,65.6933 24.5277,62.7102 C 23.6438,59.506 20.3293,44.3696 19.8874,41.7178 C 23.7543,40.7235 31.8198,38.4033 31.8198,38.4033 C 31.8198,38.4033 34.6924,45.5849 35.1343,47.0212 C 26.0745,46.6897 25.4117,52.3244 26.1851,54.8656 C 27.6214,61.9367 34.0295,61.8262 37.5651,60.8318 C 40.8796,60.2795 45.52,58.2907 48.0612,57.1859 C 47.0668,53.3189 38.3384,29.233 37.2336,26.1394 C 32.9246,27.6862 7.62349,34.4258 7.73398,34.2049 z" />
+        <path
+           id="path3883"
+           style="fill:#0d3c07;fill-rule:evenodd;stroke-width:1pt"
+           d="M 7.73398,34.2049 L 12.0429,51.3301 C 5.08232,51.2196 4.19844,55.9705 4.64039,59.1746 C 6.73961,68.2343 17.4567,65.6933 24.5277,62.7102 C 23.6438,59.506 20.3293,44.3696 19.8874,41.7178 C 23.7543,40.7235 31.8198,38.4033 31.8198,38.4033 C 31.8198,38.4033 34.6924,45.5849 35.1343,47.0212 C 26.0745,46.6897 25.4117,52.3244 26.1851,54.8656 C 27.6214,61.9367 34.0295,61.8262 37.5651,60.8318 C 40.8796,60.2795 45.52,58.2907 48.0612,57.1859 C 47.0668,53.3189 38.3384,29.233 37.2336,26.1394 C 32.9246,27.6862 7.62349,34.4258 7.73398,34.2049 z" />
+        <path
+           id="path3885"
+           style="fill:#2aaf18;fill-rule:evenodd;stroke-width:1pt"
+           d="M 15.7994,54.2027 L 11.159,35.9726 L 35.7973,29.1225 L 44.7466,54.9761 C 44.7466,54.9761 33.3666,59.506 31.7093,57.5173 C 28.9471,57.4067 26.7375,51.2197 33.4771,50.0043 C 37.1231,49.8938 38.5594,49.6728 39.5538,50.0042 L 33.3666,34.0944 L 15.247,39.3977 L 20.3293,60.0584 C 20.3293,60.0584 13.7002,64.9198 7.95495,60.1689 C 6.73961,59.0641 6.62912,56.0809 8.61786,54.9761 C 10.2751,52.8769 15.6889,54.4237 15.7994,54.2027 z" />
+        <path
+           id="path3887"
+           style="fill:url(#radialGradient3913);fill-rule:evenodd;stroke-width:1pt"
+           transform="matrix(1.488889,0,0,1.488889,-6.003039,-28.69898)"
+           d="M 14.4736,57.5725 C 12.6184,56.7928 11.9994,58.2032 11.601,60.0584 C 10.0153,60.0584 8.87676,59.2416 8.87676,57.8693 C 8.87676,56.4971 9.94109,55.5318 11.5268,55.5318 C 13.1125,55.5318 14.4736,56.2003 14.4736,57.5725 z" />
+        <path
+           id="path3889"
+           style="fill:url(#radialGradient3915);fill-rule:evenodd;stroke-width:1pt"
+           d="M 37.3441,53.6503 C 33.3666,51.8834 34.4706,54.4237 33.6428,56.8544 C 31.5997,56.8544 29.9416,55.4189 29.9416,53.6503 C 29.9416,51.8816 31.5997,50.4462 33.6428,50.4462 C 35.6859,50.4462 37.3441,51.8816 37.3441,53.6503 z" />
+        <path
+           id="path3891"
+           style="fill:#34674b;fill-rule:evenodd;stroke-width:1pt"
+           d="M 15.3575,39.5082 L 33.3666,34.2049 L 33.8085,32.5476 L 15.7994,37.7404 L 15.3575,39.5082 z" />
+        <path
+           id="path3893"
+           style="fill:#cbff87;fill-rule:evenodd;stroke-width:1pt"
+           d="M 11.159,35.9726 L 13.3687,36.5251 L 36.1287,30.2274 L 35.6868,29.1225 L 11.159,35.9726 z" />
+        <path
+           id="path3895"
+           style="fill:#cbff87;fill-rule:evenodd;stroke-width:1pt"
+           d="M 33.6981,32.879 L 39.6643,49.8938 L 33.2561,34.2049 L 33.6981,32.879 z" />
+        <path
+           id="path3897"
+           style="fill:#cbff87;fill-rule:evenodd;stroke-width:1pt"
+           d="M 13.1478,36.1936 C 13.1478,36.1936 16.1309,54.3132 16.0204,54.3132 C 15.9099,54.3132 11.2695,36.0831 11.2695,36.0831 L 13.1478,36.1936 z" />
+      </g>
+      <g
+         id="g3899"
+         style="font-size:12px"
+         transform="translate(-8.90625,-2.1875)">
+        <path
+           id="path3901"
+           style="fill:#0d0007;fill-opacity:0.3;fill-rule:evenodd;stroke-width:1pt"
+           transform="translate(1.878252,1.988735)"
+           d="M 59.5517,32.3266 L 63.5291,56.8544 C 52.7015,54.3132 51.9282,59.948 52.1491,63.152 C 52.7016,75.8578 66.6227,75.416 71.926,72.6538 C 72.147,68.8973 71.926,40.7235 71.926,40.7235 C 76.3454,35.9727 84.4109,27.0233 86.7311,24.4821 C 80.8753,25.808 62.5347,31.6637 59.5517,32.3266 z" />
+        <path
+           id="path3903"
+           style="fill:#0d3c07;fill-rule:evenodd;stroke-width:1pt"
+           d="M 59.5517,32.3266 L 63.5291,56.8544 C 52.7015,54.3132 51.9282,59.948 52.1491,63.152 C 52.7016,75.8578 66.6227,75.416 71.926,72.6538 C 72.147,68.8973 71.926,40.7235 71.926,40.7235 C 76.3454,35.9727 84.4109,27.0233 86.7311,24.4821 C 80.8753,25.808 62.5347,31.6637 59.5517,32.3266 z" />
+        <path
+           id="path3905"
+           style="fill:#2aaf18;fill-rule:evenodd;stroke-width:1pt"
+           d="M 67.5066,63.9254 L 63.1977,35.6412 L 80.4334,28.1282 L 67.9485,39.6186 C 67.838,41.3864 69.6058,67.3505 69.2744,69.3392 C 69.6059,70.9966 67.1751,70.665 64.8549,70.665 C 56.0162,69.2287 53.1435,62.5996 58.5573,60.0584 C 61.5404,59.5061 66.5122,61.2738 67.5066,63.9254 z" />
+        <path
+           id="path3907"
+           style="fill:url(#radialGradient3917);fill-rule:evenodd;stroke-width:1pt"
+           transform="matrix(1.488889,0,0,1.488889,42.83153,-22.62228)"
+           d="M 14.4736,57.5725 C 12.6184,56.7928 11.9994,58.2032 11.601,60.0584 C 10.0153,60.0584 8.87676,59.2416 8.87676,57.8693 C 8.87676,56.4971 9.94109,55.5318 11.5268,55.5318 C 13.1125,55.5318 14.4736,56.2003 14.4736,57.5725 z" />
+        <path
+           id="path3909"
+           style="fill:#34674b;fill-rule:evenodd;stroke-width:1pt"
+           d="M 67.9485,39.8396 L 67.3961,37.9614 L 80.2124,28.2386 L 67.9485,39.8396 z" />
+        <path
+           id="path3911"
+           style="fill:#cbff87;fill-rule:evenodd;stroke-width:1pt"
+           d="M 79.881,28.4596 L 64.634,36.5251 L 67.5066,63.4835 L 63.1977,35.5307 L 79.881,28.4596 z" />
+      </g>
+    </g>
+  </g>
+</svg>

Added: parole/trunk/data/icons/scalable/status/Makefile.am
===================================================================
--- parole/trunk/data/icons/scalable/status/Makefile.am	                        (rev 0)
+++ parole/trunk/data/icons/scalable/status/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,6 @@
+EXTRA_DIST =				\
+	$(Data_DATA)
+
+Datadir = $(datadir)/icons/hicolor/scalable/status
+
+Data_DATA =

Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/data/interfaces/parole.ui	2009-07-27 14:50:47 UTC (rev 7849)
@@ -6,9 +6,10 @@
     <property name="window_position">center</property>
     <property name="default_width">780</property>
     <property name="default_height">480</property>
+    <property name="icon_name">parole</property>
     <signal name="destroy" handler="parole_player_destroy_cb"/>
     <signal name="key_press_event" handler="parole_player_key_press"/>
-    <signal name="delete_event" handler="parole_player_delete_event_cb"/>
+    <signal name="delete_event" handler="parole_player_delete_event_cb" after="yes"/>
     <child>
       <object class="GtkVBox" id="vbox1">
         <property name="visible">True</property>

Modified: parole/trunk/data/interfaces/plugins.ui
===================================================================
--- parole/trunk/data/interfaces/plugins.ui	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/data/interfaces/plugins.ui	2009-07-27 14:50:47 UTC (rev 7849)
@@ -14,9 +14,15 @@
   </object>
   <object class="GtkDialog" id="dialog">
     <property name="border_width">5</property>
+    <property name="title" translatable="yes">Parole Plugins Preferences</property>
+    <property name="default_width">300</property>
+    <property name="default_height">220</property>
+    <property name="destroy_with_parent">True</property>
     <property name="type_hint">normal</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
     <property name="has_separator">False</property>
-    <signal name="response" handler="gtk_widget_destroy"/>
+    <signal name="response" handler="parole_plugins_manager_pref_response_cb"/>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox1">
         <property name="visible">True</property>
@@ -25,7 +31,7 @@
         <child>
           <object class="GtkHBox" id="hbox1">
             <property name="visible">True</property>
-            <property name="spacing">5</property>
+            <property name="spacing">10</property>
             <child>
               <object class="GtkViewport" id="viewport1">
                 <property name="visible">True</property>
@@ -72,122 +78,160 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVSeparator" id="vseparator1">
+              <object class="GtkVBox" id="vbox1">
                 <property name="visible">True</property>
                 <property name="orientation">vertical</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="vbox2">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
+                <property name="spacing">10</property>
                 <child>
-                  <object class="GtkHBox" id="hbox5">
+                  <object class="GtkVBox" id="vbox2">
                     <property name="visible">True</property>
-                    <property name="spacing">4</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
                     <child>
-                      <object class="GtkLabel" id="label1">
+                      <object class="GtkHBox" id="hbox5">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Description:</b></property>
-                        <property name="use_markup">True</property>
+                        <property name="spacing">4</property>
+                        <child>
+                          <object class="GtkLabel" id="label1">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes"><b>Description:</b></property>
+                            <property name="use_markup">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="description">
+                            <property name="visible">True</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkLabel" id="description">
+                      <object class="GtkHBox" id="hbox4">
                         <property name="visible">True</property>
+                        <property name="spacing">4</property>
+                        <child>
+                          <object class="GtkLabel" id="label2">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes"><b>Author:</b></property>
+                            <property name="use_markup">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="author">
+                            <property name="visible">True</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
                         <property name="position">1</property>
                       </packing>
                     </child>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" id="hbox4">
-                    <property name="visible">True</property>
-                    <property name="spacing">4</property>
                     <child>
-                      <object class="GtkLabel" id="label2">
+                      <object class="GtkHBox" id="hbox3">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Author:</b></property>
-                        <property name="use_markup">True</property>
+                        <property name="spacing">4</property>
+                        <child>
+                          <object class="GtkLabel" id="label3">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes"><b>Copyright:</b></property>
+                            <property name="use_markup">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="copyright">
+                            <property name="visible">True</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="position">0</property>
+                        <property name="position">2</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkLabel" id="author">
+                      <object class="GtkHBox" id="hbox2">
                         <property name="visible">True</property>
+                        <property name="spacing">4</property>
+                        <child>
+                          <object class="GtkLabel" id="label4">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes"><b>Site:</b></property>
+                            <property name="use_markup">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="site">
+                            <property name="visible">True</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
-                        <property name="position">1</property>
+                        <property name="position">3</property>
                       </packing>
                     </child>
-                  </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" id="hbox3">
-                    <property name="visible">True</property>
-                    <property name="spacing">4</property>
                     <child>
-                      <object class="GtkLabel" id="label3">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Copyright:</b></property>
-                        <property name="use_markup">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">0</property>
-                      </packing>
+                      <placeholder/>
                     </child>
-                    <child>
-                      <object class="GtkLabel" id="copyright">
-                        <property name="visible">True</property>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
                   </object>
                   <packing>
-                    <property name="position">2</property>
+                    <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHBox" id="hbox2">
+                  <object class="GtkHBox" id="hbox6">
                     <property name="visible">True</property>
-                    <property name="spacing">4</property>
+                    <property name="spacing">10</property>
                     <child>
-                      <object class="GtkLabel" id="label4">
+                      <object class="GtkButton" id="configure">
+                        <property name="label" translatable="yes">gtk-properties</property>
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes"><b>Site:</b></property>
-                        <property name="use_markup">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_stock">True</property>
+                        <signal name="clicked" handler="parole_plugins_manager_show_configure"/>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkLabel" id="site">
+                      <object class="GtkButton" id="about">
+                        <property name="label" translatable="yes">gtk-about</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_stock">True</property>
+                        <signal name="clicked" handler="parole_plugins_manager_show_about"/>
                       </object>
                       <packing>
                         <property name="position">1</property>
@@ -195,12 +239,12 @@
                     </child>
                   </object>
                   <packing>
-                    <property name="position">3</property>
+                    <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
-                <property name="position">2</property>
+                <property name="position">1</property>
               </packing>
             </child>
           </object>

Modified: parole/trunk/data/pixmaps/parole.png
===================================================================
(Binary files differ)

Modified: parole/trunk/parole/Makefile.am
===================================================================
--- parole/trunk/parole/Makefile.am	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -133,7 +133,8 @@
 parole_glib_enum_headers =			\
 	parole-gst.h				\
 	parole-plugin.h				\
-	parole-pl-parser.h
+	parole-pl-parser.h			\
+	parole-stream.h
 
 if MAINTAINER_MODE
 
@@ -166,6 +167,7 @@
 		--fhead "#include \"parole-gst.h\"\n\n" \
 		--fhead "#include \"parole-plugin.h\"\n\n" \
 		--fhead "#include \"parole-pl-parser.h\"\n\n" \
+		--fhead "#include \"parole-stream.h\"\n\n" \
 		--fprod "\n/* enumerations from \"@filename@\" */" \
 		--vhead "GType\n at enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G at Type@Value values[] = {" \
 		--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \

Modified: parole/trunk/parole/parole-gst.c
===================================================================
--- parole/trunk/parole/parole-gst.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-gst.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -28,7 +28,6 @@
 
 #include <glib.h>
 
-#include <gst/gst.h>
 #include <gst/interfaces/xoverlay.h>
 #include <gst/interfaces/navigation.h>
 
@@ -61,6 +60,7 @@
     GMutex       *lock;
     GstState      state;
     GstState      target;
+    ParoleMediaState media_state;
     
     ParoleStream *stream;
     gulong	  tick_id;
@@ -566,15 +566,17 @@
 	    parole_gst_query_duration (gst);
 	    parole_gst_query_capabilities (gst);
 	    parole_gst_query_info (gst);
-	    
+	    gst->priv->media_state = PAROLE_MEDIA_STATE_PLAYING;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
 			   gst->priv->stream, PAROLE_MEDIA_STATE_PLAYING);
 	    break;
 	case GST_STATE_PAUSED:
+	    gst->priv->media_state = PAROLE_MEDIA_STATE_PAUSED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
 			   gst->priv->stream, PAROLE_MEDIA_STATE_PAUSED);
 	    break;
 	case GST_STATE_READY:
+	    gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
 			   gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
 
@@ -592,6 +594,7 @@
 	    }
 	    break;
 	case GST_STATE_NULL:
+	    gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
 			   gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
 	    break;
@@ -662,6 +665,10 @@
 	g_free (str);
     }
 
+    g_object_set (G_OBJECT (gst->priv->stream),
+		  "tag-available", TRUE,
+		  NULL);
+		  
     g_signal_emit (G_OBJECT (gst), signals [MEDIA_TAG], 0, gst->priv->stream);
 }
 
@@ -676,6 +683,7 @@
     {
         case GST_MESSAGE_EOS:
 	    TRACE ("End of stream");
+	    gst->priv->media_state = PAROLE_MEDIA_STATE_FINISHED;
 	    g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
 			       gst->priv->stream, PAROLE_MEDIA_STATE_FINISHED);
 	    break;
@@ -1033,6 +1041,7 @@
     
     gst->priv->state = GST_STATE_VOID_PENDING;
     gst->priv->target = GST_STATE_VOID_PENDING;
+    gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
     gst->priv->lock = g_mutex_new ();
     gst->priv->stream = parole_stream_new ();
     gst->priv->tick_id = 0;
@@ -1201,3 +1210,18 @@
 		  NULL);
     return volume;
 }
+
+ParoleMediaState parole_gst_get_state (ParoleGst *gst)
+{
+    return gst->priv->media_state;
+}
+
+GstState parole_gst_get_gst_state (ParoleGst *gst)
+{
+    return gst->priv->state;
+}
+
+GstState parole_gst_get_gst_target_state (ParoleGst *gst)
+{
+    return gst->priv->target;
+}

Modified: parole/trunk/parole/parole-gst.h
===================================================================
--- parole/trunk/parole/parole-gst.h	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-gst.h	2009-07-27 14:50:47 UTC (rev 7849)
@@ -22,6 +22,7 @@
 #define __PAROLE_GST_H
 
 #include <glib-object.h>
+#include <gst/gst.h>
 #include <gtk/gtk.h>
 
 #include "parole-stream.h"
@@ -101,6 +102,12 @@
 						    
 gdouble			parole_gst_get_volume	   (ParoleGst *gst);
 
+ParoleMediaState        parole_gst_get_state	   (ParoleGst *gst);
+
+GstState	        parole_gst_get_gst_state   (ParoleGst *gst);
+
+GstState	        parole_gst_get_gst_target_state (ParoleGst *gst);
+
 G_END_DECLS
 
 #endif /* __PAROLE_GST_H */

Modified: parole/trunk/parole/parole-module.c
===================================================================
--- parole/trunk/parole/parole-module.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-module.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -116,7 +116,7 @@
     {
 	if ( module->plugin ) 
 	{
-	    g_signal_emit_by_name (G_OBJECT (module->plugin), "free-data", 0);
+	    g_signal_emit_by_name (G_OBJECT (module->plugin), "free-data");
 	    g_object_unref (module->plugin);
 	    module->plugin = NULL;
 	}

Modified: parole/trunk/parole/parole-player.c
===================================================================
--- parole/trunk/parole/parole-player.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-player.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -237,6 +237,7 @@
 parole_player_disc_selected_cb (ParoleDisc *disc, const gchar *uri, ParolePlayer *player)
 {
     parole_player_reset (player);
+    gtk_widget_set_sensitive (player->priv->stop, TRUE);
     parole_gst_play_uri (PAROLE_GST (player->priv->gst), uri);
 }
 
@@ -244,6 +245,7 @@
 parole_player_uri_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlayer *player)
 {
     parole_player_reset (player);
+    gtk_widget_set_sensitive (player->priv->stop, TRUE);
     parole_gst_play_uri (PAROLE_GST (player->priv->gst), uri);
 }
 
@@ -310,7 +312,7 @@
     gboolean seekable;
     
     player->priv->state = PAROLE_MEDIA_STATE_PLAYING;
-    pix = xfce_themed_icon_load ("gtk-media-play-ltr", 16);
+    pix = xfce_themed_icon_load (GTK_STOCK_MEDIA_PLAY, 16);
     
     parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, pix);
     
@@ -386,7 +388,15 @@
     parole_statusbar_set_text (player->priv->status, _("Stopped"));
     
     gtk_widget_set_sensitive (player->priv->play_pause, FALSE);
-    gtk_widget_set_sensitive (player->priv->stop, FALSE);
+    
+    /* Set the stop widget insensitive only if we are not going to got to playing
+     * state, this give the possibility to press on it if the media get stuck
+     * for some reason.
+     */
+    if ( parole_gst_get_gst_target_state (PAROLE_GST (player->priv->gst)) != GST_STATE_PLAYING)
+    {
+	gtk_widget_set_sensitive (player->priv->stop, FALSE);
+    }
 
     parole_player_change_range_value (player, 0);
     gtk_widget_set_sensitive (player->priv->range, FALSE);

Modified: parole/trunk/parole/parole-plugin.c
===================================================================
--- parole/trunk/parole/parole-plugin.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-plugin.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -60,6 +60,9 @@
     GtkWidget *widget;
     gboolean packed;
     
+    gboolean configurable;
+    gboolean show_about;
+    
     /* sig id's*/
     gulong gst_sig1;
     gulong gst_sig2;
@@ -70,7 +73,9 @@
     PROP_0,
     PROP_TITLE,
     PROP_DESC,
-    PROP_AUTHOR
+    PROP_AUTHOR,
+    PROP_CONFIGURABLE,
+    PROP_SHOW_ABOUT
 };
 
 enum
@@ -78,6 +83,8 @@
     STATE_CHANGED,
     TAG_MESSAGE,
     FREE_DATA,
+    CONFIGURE,
+    ABOUT,
     LAST_SIGNAL
 };
 
@@ -162,6 +169,42 @@
                       G_TYPE_NONE, 0, G_TYPE_NONE);
 
     /**
+     * ParolePlugin::configure:
+     * @plugin: the object which received the signal.
+     * 
+     * Emitted when the user click the configure button in the plugins
+     * configuration dialog.
+     * 
+     * Since: 0.1 
+     **/
+    signals [CONFIGURE] = 
+        g_signal_new ("configure",
+                      PAROLE_TYPE_PLUGIN,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET(ParolePluginClass, configure),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1, GTK_TYPE_WIDGET);
+
+    /**
+     * ParolePlugin::configure:
+     * @plugin: the object which received the signal.
+     * 
+     * Emitted when the user click the configure button in the plugins
+     * configuration dialog.
+     * 
+     * Since: 0.1 
+     **/
+    signals [ABOUT] = 
+        g_signal_new ("about",
+                      PAROLE_TYPE_PLUGIN,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET(ParolePluginClass, about),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1, GTK_TYPE_WIDGET);
+
+    /**
      * ParolePlugin:title:
      * 
      * Title to display for this plugin.
@@ -205,7 +248,33 @@
                                                           NULL,
                                                           G_PARAM_READWRITE|
 							  G_PARAM_CONSTRUCT_ONLY));
+							
+    /**
+     * ParolePlugin:configurable:
+     * 
+     * 
+     * Since: 0.1 
+     **/
+    g_object_class_install_property (object_class,
+                                     PROP_CONFIGURABLE,
+                                     g_param_spec_boolean ("configurable",
+                                                           NULL, NULL,
+                                                           FALSE,
+                                                           G_PARAM_READWRITE));
 							  
+    /**
+     * ParolePlugin:show-about:
+     * 
+     * 
+     * Since: 0.1 
+     **/
+    g_object_class_install_property (object_class,
+                                     PROP_SHOW_ABOUT,
+                                     g_param_spec_boolean ("show-about",
+                                                           NULL, NULL,
+                                                           FALSE,
+                                                           G_PARAM_READWRITE));
+							   
     g_type_class_add_private (klass, sizeof (ParolePluginPrivate));
 }
 
@@ -219,6 +288,7 @@
     priv->title  = NULL;
     priv->packed = FALSE;
     priv->widget = NULL;
+    priv->configurable = FALSE;
     
     priv->gst = PAROLE_GST (parole_gst_new ());
     
@@ -248,6 +318,12 @@
 	case PROP_AUTHOR:
 	    PAROLE_PLUGIN_GET_PRIVATE (plugin)->author = g_value_dup_string (value);
 	    break;
+	case PROP_CONFIGURABLE:
+	    PAROLE_PLUGIN_GET_PRIVATE (plugin)->configurable = g_value_get_boolean (value);
+	    break;
+	case PROP_SHOW_ABOUT:
+	    PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about = g_value_get_boolean (value);
+	    break;
 	default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             break;
@@ -274,6 +350,12 @@
 	case PROP_AUTHOR:
 	    g_value_set_string (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->author);
 	    break;
+	case PROP_CONFIGURABLE:
+	    g_value_set_boolean (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->configurable);
+	    break;
+	case PROP_SHOW_ABOUT:
+	    g_value_set_boolean (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about);
+	    break;
 	default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
             break;
@@ -340,9 +422,13 @@
  **/
 GtkWidget *parole_plugin_get_main_window (ParolePlugin *plugin)
 {
+    ParolePluginPrivate *priv;
     
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), NULL);
     
-    return NULL;
+    priv = PAROLE_PLUGIN_GET_PRIVATE (plugin);
+    
+    return gtk_widget_get_toplevel (GTK_WIDGET (priv->gst));
 }
 
 /**
@@ -380,6 +466,83 @@
 }
 
 /**
+ * parole_plugin_get_state:
+ * @plugin: a #ParolePlugin.
+ * 
+ * 
+ * 
+ * Returns: The current state of the media player.
+ **/
+ParoleState parole_plugin_get_state (ParolePlugin *plugin)
+{
+    ParolePluginPrivate *priv;
+    
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), PAROLE_STATE_STOPPED);
+    
+    priv = PAROLE_PLUGIN_GET_PRIVATE (plugin);
+    
+    return parole_gst_get_state (priv->gst);
+}
+
+/**
+ * parole_plugin_get_is_configurable:
+ * @plugin: a #ParolePlugin.
+ * 
+ * 
+ * 
+ * Returns: Whether the plugin is configurable.
+ **/
+gboolean parole_plugin_get_is_configurable (ParolePlugin *plugin)
+{
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), FALSE);
+    
+    return PAROLE_PLUGIN_GET_PRIVATE (plugin)->configurable;
+}
+
+/**
+ * parole_plugin_set_is_configurable:
+ * @plugin: a #ParolePlugin.
+ * 
+ * 
+ * 
+ **/
+void parole_plugin_set_is_configurable (ParolePlugin *plugin, gboolean is_configurable)
+{
+    g_return_if_fail (PAROLE_IS_PLUGIN (plugin));
+    
+    PAROLE_PLUGIN_GET_PRIVATE (plugin)->configurable = is_configurable;
+}
+
+/**
+ * parole_plugin_get_show_about:
+ * @plugin: a #ParolePlugin.
+ * 
+ * 
+ * 
+ * Returns:
+ **/
+gboolean parole_plugin_get_show_about (ParolePlugin *plugin)
+{
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), FALSE);
+    
+    return PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about;
+}
+
+/**
+ * parole_plugin_set_show_about:
+ * @plugin: a #ParolePlugin.
+ * 
+ * 
+ * 
+ **/
+void parole_plugin_set_show_about (ParolePlugin *plugin, gboolean show_about)
+{
+    g_return_if_fail (PAROLE_IS_PLUGIN (plugin));
+    
+    PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about = show_about;
+}
+
+/**
  * parole_plugin_play_uri:
  * @plugin: a #ParolePlugin.
  * @uri: uri of the file to play.
@@ -396,45 +559,53 @@
 }
 
 /**
- * parole_plugin_pause_playing:
+ * parole_plugin_pause_playback:
  * @plugin: a #ParolePlugin.
  * 
  * Causes the media player to pause any playback.
  * 
  * Returns: TRUE on success, FALSE otherwise.
  **/
-gboolean parole_plugin_pause_playing (ParolePlugin *plugin)
+gboolean parole_plugin_pause_playback (ParolePlugin *plugin)
 {
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), FALSE);
     
+    parole_gst_pause (PAROLE_PLUGIN_GET_PRIVATE (plugin)->gst);
+    
     return TRUE;
 }
 
 /**
- * parole_plugin_pause_playing:
+ * parole_plugin_pause_playback:
  * @plugin: a #ParolePlugin.
  * 
  * Causes the media player to resume playing the currently paused stream.
  * 
  * Returns: TRUE on success, FALSE otherwise.
  **/
-gboolean  parole_plugin_resume (ParolePlugin *plugin)
+gboolean  parole_plugin_resume_playback (ParolePlugin *plugin)
 {
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), FALSE);
     
+    parole_gst_resume (PAROLE_PLUGIN_GET_PRIVATE (plugin)->gst);
     
     return TRUE;
-}
-	
+}	
+
 /**
- * parole_plugin_stop_playing:
+ * parole_plugin_stop_playback:
  * @plugin: a #ParolePlugin.
  * 
  * Causes the media player to stop any playback.
  * 
  * Returns: TRUE on success, FALSE otherwise.
  **/
-gboolean parole_plugin_stop_playing (ParolePlugin *plugin)
+gboolean parole_plugin_stop_playback (ParolePlugin *plugin)
 {
+    g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), FALSE);
     
+    parole_gst_stop (PAROLE_PLUGIN_GET_PRIVATE (plugin)->gst);
+    
     return TRUE;
 }
 

Modified: parole/trunk/parole/parole-plugin.h
===================================================================
--- parole/trunk/parole/parole-plugin.h	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-plugin.h	2009-07-27 14:50:47 UTC (rev 7849)
@@ -45,7 +45,7 @@
 typedef enum
 {
     
-    PAROLE_STATE_STOPPED,
+    PAROLE_STATE_STOPPED = 0,
     PAROLE_STATE_PLAYBACK_FINISHED,
     PAROLE_STATE_PAUSED,
     PAROLE_STATE_PLAYING
@@ -61,39 +61,57 @@
 {
     GObjectClass 	     parent_class;
     
-    void		    (*state_changed)		   (ParolePlugin *plugin,
-						            const ParoleStream *stream,
-							    ParoleState state);
+    void		    (*state_changed)		   		(ParolePlugin *plugin,
+									 const ParoleStream *stream,
+									 ParoleState state);
     
-    void		    (*tag_message)                 (ParolePlugin *plugin,
-							    const ParoleStream *stream);
+    void		    (*tag_message)                 		(ParolePlugin *plugin,
+									 const ParoleStream *stream);
     
-    void		    (*free_data)		   (ParolePlugin *plugin);
+    void		    (*free_data)		   		(ParolePlugin *plugin);
+    
+    void		    (*configure)				(ParolePlugin *plugin,
+									 GtkWidget *widget);
+    
+    void		    (*about)					(ParolePlugin *plugin,
+									 GtkWidget *widget);
 };
 
-GType        		     parole_plugin_get_type        (void) G_GNUC_CONST;
+GType        		     parole_plugin_get_type        		(void) G_GNUC_CONST;
 
-ParolePlugin       	    *parole_plugin_new             (const gchar *title,
-							    const gchar *desc, 
-							    const gchar *author);
+ParolePlugin       	    *parole_plugin_new             		(const gchar *title,
+								         const gchar *desc, 
+									 const gchar *author);
 
-GtkWidget		    *parole_plugin_get_main_window (ParolePlugin *plugin);
+GtkWidget		    *parole_plugin_get_main_window 		(ParolePlugin *plugin);
 
-void			     parole_plugin_pack_widget	   (ParolePlugin *plugin,
-							    GtkWidget *widget,
-							    ParolePluginContainer container);
+void			     parole_plugin_pack_widget	   		(ParolePlugin *plugin,
+									 GtkWidget *widget,
+									 ParolePluginContainer container);
 
-gboolean		     parole_plugin_play_uri        (ParolePlugin *plugin,
-							    const gchar *uri);
+ParoleState		     parole_plugin_get_state	   		(ParolePlugin *plugin);
 
-gboolean		     parole_plugin_pause_playing   (ParolePlugin *plugin);
+gboolean		     parole_plugin_get_is_configurable 		(ParolePlugin *plugin);
 
-gboolean		     parole_plugin_resume          (ParolePlugin *plugin);
+void			     parole_plugin_set_is_configurable 		(ParolePlugin *plugin,
+									 gboolean is_configurable);
+
+gboolean		     parole_plugin_get_show_about 		(ParolePlugin *plugin);
+
+void			     parole_plugin_set_show_about 		(ParolePlugin *plugin,
+									 gboolean show_about);
+
+gboolean		     parole_plugin_play_uri        		(ParolePlugin *plugin,
+									 const gchar *uri);
+
+gboolean		     parole_plugin_pause_playback   		(ParolePlugin *plugin);
+
+gboolean		     parole_plugin_resume_playback     		(ParolePlugin *plugin);
 							    
-gboolean		     parole_plugin_stop_playing    (ParolePlugin *plugin);
+gboolean		     parole_plugin_stop_playback    		(ParolePlugin *plugin);
 
-gboolean		     parole_plugin_seek            (ParolePlugin *plugin,
-						            gdouble pos);
+gboolean		     parole_plugin_seek            		(ParolePlugin *plugin,
+									 gdouble pos);
 
 G_END_DECLS
 

Modified: parole/trunk/parole/parole-plugins-manager.c
===================================================================
--- parole/trunk/parole/parole-plugins-manager.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-plugins-manager.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -37,13 +37,39 @@
 #include "parole-plugins-manager.h"
 #include "parole-module.h"
 
+typedef struct
+{
+    ParolePluginsManager *manager;
+
+    GtkWidget *window;
+    GtkWidget *view;
+    GtkListStore *store;
+    GtkWidget *desc;
+    GtkWidget *author;
+    GtkWidget *copyright;
+    GtkWidget *site;
+    GtkWidget *about;
+    GtkWidget *configure;
+    
+} PrefData;
+
+void parole_plugins_manager_pref_response_cb		(GtkDialog *dialog,
+							 gint reponse_id,
+							 PrefData *pref);
+
 void parole_plugins_manager_cell_toggled_cb 		(GtkCellRendererToggle *cell_renderer, 
 							 gchar *path, 
-							 ParolePluginsManager *manager);
+							 PrefData *pref);
 
 void parole_plugins_manager_tree_cursor_changed_cb	(GtkTreeView *view,
-							 ParolePluginsManager *manager);
+							 PrefData *pref);
 
+void parole_plugins_manager_show_configure		(GtkButton *button,
+							 PrefData *pref);
+
+void parole_plugins_manager_show_about			(GtkButton *button,
+							 PrefData *pref);
+
 static void parole_plugins_manager_finalize   (GObject *object);
 
 #define PAROLE_PLUGINS_MANAGER_GET_PRIVATE(o) \
@@ -66,6 +92,59 @@
     COL_DATA
 };
 
+void parole_plugins_manager_pref_response_cb		(GtkDialog *dialog,
+							 gint reponse_id,
+							 PrefData *pref)
+{
+    gtk_widget_destroy (GTK_WIDGET (dialog));
+    g_free (pref);
+}
+
+static ParoleModule *
+parole_plugins_manager_get_selected_module (PrefData *pref)
+{
+    ParoleModule *module;
+    GtkTreeSelection *sel;
+    GtkTreeModel     *model;
+    GtkTreeIter       iter;
+
+    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (pref->view));
+
+    if ( !gtk_tree_selection_get_selected (sel, &model, &iter))
+        return NULL;
+
+    gtk_tree_model_get (model,
+                        &iter,
+                        COL_DATA,
+                        &module,
+                        -1);
+    return module;
+}
+
+void parole_plugins_manager_show_configure (GtkButton *button, PrefData *pref)
+{
+    ParoleModule *module;
+    
+    module = parole_plugins_manager_get_selected_module (pref);
+    
+    if ( !module )
+	return;
+	
+    g_signal_emit_by_name (G_OBJECT (module->plugin), "configure", pref->window);
+}
+
+void parole_plugins_manager_show_about (GtkButton *button, PrefData *pref)
+{
+    ParoleModule *module;
+    
+    module = parole_plugins_manager_get_selected_module (pref);
+    
+    if ( !module )
+	return;
+	
+    g_signal_emit_by_name (G_OBJECT (module->plugin), "about", pref->window);
+}
+
 static void
 parole_plugins_manager_save_rc (gchar *filename, gboolean active)
 {
@@ -112,20 +191,17 @@
 void 
 parole_plugins_manager_cell_toggled_cb (GtkCellRendererToggle *cell_renderer, 
 					gchar *path_str, 
-					ParolePluginsManager *manager)
+					PrefData *pref)
 {
     ParoleModule *module;
-    GtkListStore *store;
     GtkTreeIter iter;
     GtkTreePath *path;
     gboolean active;
 
-    store = g_object_get_data (G_OBJECT (manager), "liststore");
-
     path = gtk_tree_path_new_from_string (path_str);
     
-    gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
-    gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 
+    gtk_tree_model_get_iter (GTK_TREE_MODEL (pref->store), &iter, path);
+    gtk_tree_model_get (GTK_TREE_MODEL (pref->store), &iter, 
 		        COL_ACTIVE, &active, 
 			COL_DATA, &module,
 			-1);
@@ -134,7 +210,7 @@
     
     parole_module_set_active (module, active);
     
-    gtk_list_store_set (GTK_LIST_STORE (store), &iter, 
+    gtk_list_store_set (GTK_LIST_STORE (pref->store), &iter, 
 			COL_ACTIVE, active,
 			-1);
 			
@@ -144,36 +220,29 @@
 }
 
 void parole_plugins_manager_tree_cursor_changed_cb (GtkTreeView *view,
-						    ParolePluginsManager *manager)
+						    PrefData *pref)
 {
     ParoleModule *module;
-    GtkWidget *desc;
-    GtkWidget *author;
-    GtkWidget *copyright;
-    GtkWidget *site;
-    GtkTreeSelection *sel;
-    GtkTreeModel     *model;
-    GtkTreeIter       iter;
+    gboolean configurable = FALSE, show_about = FALSE;
 
-    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
-
-    if ( !gtk_tree_selection_get_selected (sel, &model, &iter))
-        return;
-
-    gtk_tree_model_get (model,
-                        &iter,
-                        COL_DATA,
-                        &module,
-                        -1);
-
+    module = parole_plugins_manager_get_selected_module (pref);
     
-    desc = g_object_get_data (G_OBJECT (manager), "desc");
-    author = g_object_get_data (G_OBJECT (manager), "author");
-    copyright = g_object_get_data (G_OBJECT (manager), "copyright");
-    site = g_object_get_data (G_OBJECT (manager), "site");
+    if ( !module )
+	return;
     
-    gtk_label_set_text (GTK_LABEL (desc), module->desc->desc);
-    gtk_label_set_text (GTK_LABEL (author), module->desc->author);
+    gtk_label_set_text (GTK_LABEL (pref->desc), module->desc->desc);
+    gtk_label_set_text (GTK_LABEL (pref->author), module->desc->author);
+    
+    if ( module->enabled )
+    {
+	g_object_get (G_OBJECT (module->plugin),
+		      "configurable", &configurable,
+		      "show-about", &show_about,
+		      NULL);
+    }
+    
+    gtk_widget_set_sensitive (pref->about, show_about);
+    gtk_widget_set_sensitive (pref->configure, configurable);
 }
 
 static void
@@ -191,36 +260,31 @@
 parole_plugins_manager_show_plugins_pref (GtkWidget *widget, ParolePluginsManager *manager)
 {
     GtkBuilder *builder;
-    GtkWidget *view;
-    GtkWidget *window;
-    GtkWidget *desc;
-    GtkWidget *author;
-    GtkWidget *copyright;
-    GtkWidget *site;
     GtkTreeSelection *sel;
-    GtkListStore *store;
     GtkTreePath *path;
     GtkTreeIter iter;
     guint i;
     
+    PrefData *pref;
     builder = parole_builder_new_from_string (plugins_ui, plugins_ui_length);
     
-    window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog"));
-    view = GTK_WIDGET (gtk_builder_get_object (builder, "treeview"));
-    store = GTK_LIST_STORE (gtk_builder_get_object (builder, "liststore"));
+    pref = g_new0 (PrefData, 1);
     
-    desc = GTK_WIDGET (gtk_builder_get_object (builder, "description"));
-    author = GTK_WIDGET (gtk_builder_get_object (builder, "author"));
-    copyright = GTK_WIDGET (gtk_builder_get_object (builder, "copyright"));
-    site = GTK_WIDGET (gtk_builder_get_object (builder, "site"));
+    pref->window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog"));
+    pref->view = GTK_WIDGET (gtk_builder_get_object (builder, "treeview"));
     
-    g_object_set_data (G_OBJECT (manager), "liststore", store);
-    g_object_set_data (G_OBJECT (manager), "desc", desc);
-    g_object_set_data (G_OBJECT (manager), "author", author);
-    g_object_set_data (G_OBJECT (manager), "copyright", copyright);
-    g_object_set_data (G_OBJECT (manager), "site", site);
+    pref->manager = manager;
+    pref->store = GTK_LIST_STORE (gtk_builder_get_object (builder, "liststore"));
     
-    gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (gtk_widget_get_toplevel (manager->priv->main_nt)));
+    pref->desc = GTK_WIDGET (gtk_builder_get_object (builder, "description"));
+    pref->author = GTK_WIDGET (gtk_builder_get_object (builder, "author"));
+    pref->copyright = GTK_WIDGET (gtk_builder_get_object (builder, "copyright"));
+    pref->site = GTK_WIDGET (gtk_builder_get_object (builder, "site"));
+    
+    pref->about = GTK_WIDGET (gtk_builder_get_object (builder, "about"));
+    pref->configure = GTK_WIDGET (gtk_builder_get_object (builder, "configure"));
+    
+    gtk_window_set_transient_for (GTK_WINDOW (pref->window), GTK_WINDOW (gtk_widget_get_toplevel (manager->priv->main_nt)));
 
     for ( i = 0; i < manager->priv->array->len; i++)
     {
@@ -229,8 +293,8 @@
 	
 	if ( module->desc )
 	{
-	    gtk_list_store_append (store, &iter);
-	    gtk_list_store_set (store, &iter, 
+	    gtk_list_store_append (pref->store, &iter);
+	    gtk_list_store_set (pref->store, &iter, 
 			        COL_ACTIVE, module->enabled, 
 				COL_PLUGIN, module->desc->title, 
 				COL_DATA, module,
@@ -238,18 +302,17 @@
 	}
     }
     
-    gtk_builder_connect_signals (builder, manager);
-    gtk_widget_show_all (window);
+    gtk_builder_connect_signals (builder, pref);
+    gtk_widget_show_all (pref->window);
     g_object_unref (builder);
     
-    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (pref->view));
 
     path = gtk_tree_path_new_from_string ("0");
 
     gtk_tree_selection_select_path (sel, path);
-    gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path, NULL, FALSE);
+    gtk_tree_view_set_cursor (GTK_TREE_VIEW (pref->view), path, NULL, FALSE);
     gtk_tree_path_free (path);
-    
 }
 
 void 

Modified: parole/trunk/parole/parole-rc-utils.h
===================================================================
--- parole/trunk/parole/parole-rc-utils.h	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-rc-utils.h	2009-07-27 14:50:47 UTC (rev 7849)
@@ -22,7 +22,7 @@
 #define __RC_UTILS_
 
 #define PAROLE_RC_GROUP_GENERAL		"General"
-#define PAROLE_RC_GROUP_PLUGINS		"General"
+#define PAROLE_RC_GROUP_PLUGINS		"Plugins"
 
 void			parole_rc_write_entry_bool	(const gchar *property,
 							 const gchar *group,

Modified: parole/trunk/parole/parole-stream.c
===================================================================
--- parole/trunk/parole/parole-stream.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-stream.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -30,6 +30,7 @@
 
 #include "parole-stream.h"
 #include "parole-file.h"
+#include "enum-gtypes.h"
 
 #define PAROLE_STREAM_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_STREAM, ParoleStreamPrivate))
@@ -53,6 +54,7 @@
     gboolean    has_video;
     gboolean 	live;
     gboolean 	seekable;
+    gboolean 	tag_available;
     gdouble   	duration;
     gint64  	absolute_duration;
     
@@ -61,6 +63,7 @@
     gchar      *year;
     gchar      *album;
     gchar      *comment;
+    ParoleMediaType media_type; 
 };
 
 enum
@@ -68,9 +71,11 @@
     PROP_0,
     PROP_URI,
     PROP_LIVE,
+    PROP_MEDIA_TYPE,
     PROP_HAS_AUDIO,
     PROP_HAS_VIDEO,
     PROP_SEEKABLE,
+    PROP_TAG_AVAILABLE,
     PROP_DURATION,
     PROP_ABSOLUTE_DURATION,
     PROP_TITLE,
@@ -82,6 +87,32 @@
 
 G_DEFINE_TYPE (ParoleStream, parole_stream, G_TYPE_OBJECT)
 
+static void
+parole_stream_get_media_type_from_uri (ParoleStream *stream, const gchar *uri)
+{
+    GValue val = { 0, };
+    
+    ParoleMediaType type = PAROLE_MEDIA_TYPE_UNKNOWN;
+    
+    if ( g_str_has_prefix (uri, "file:/") )
+	type = PAROLE_MEDIA_TYPE_LOCAL_FILE;
+    else if ( g_str_has_prefix (uri, "dvd:/") )
+	type = PAROLE_MEDIA_TYPE_DVD;
+    else if ( g_str_has_prefix (uri, "vcd:") )
+	type = PAROLE_MEDIA_TYPE_VCD;
+    else if ( g_str_has_prefix (uri, "svcd:/") )
+	type = PAROLE_MEDIA_TYPE_SVCD;
+    else if ( g_str_has_prefix (uri, "cdda:/") )
+	type = PAROLE_MEDIA_TYPE_CDDA;
+    else 
+	type = PAROLE_MEDIA_TYPE_UNKNOWN;
+    
+    g_value_init (&val, ENUM_GTYPE_MEDIA_TYPE);
+    g_value_set_enum (&val, type);
+    g_object_set_property (G_OBJECT (stream), "media-type", &val);
+    g_value_unset (&val);
+}
+
 static void parole_stream_set_property (GObject *object,
 				        guint prop_id,
 				        const GValue *value,
@@ -93,11 +124,19 @@
     switch (prop_id)
     {
 	case PROP_URI:
-	    PAROLE_STREAM_GET_PRIVATE (stream)->uri = g_value_dup_string (value);
+	{
+	    ParoleStreamPrivate *priv;
+	    priv = PAROLE_STREAM_GET_PRIVATE (stream);
+	    priv->uri = g_value_dup_string (value);
+	    parole_stream_get_media_type_from_uri (stream, priv->uri);
 	    break;
+	}
 	case PROP_LIVE:
 	    PAROLE_STREAM_GET_PRIVATE (stream)->live = g_value_get_boolean (value);
 	    break;
+	case PROP_MEDIA_TYPE:
+	    PAROLE_STREAM_GET_PRIVATE (stream)->media_type = g_value_get_enum (value);
+	    break;
 	case PROP_HAS_AUDIO:
 	    PAROLE_STREAM_GET_PRIVATE (stream)->has_audio = g_value_get_boolean (value);
 	    break;
@@ -107,6 +146,9 @@
 	case PROP_SEEKABLE:
 	    PAROLE_STREAM_GET_PRIVATE (stream)->seekable = g_value_get_boolean (value);
 	    break;
+	case PROP_TAG_AVAILABLE:
+	    PAROLE_STREAM_GET_PRIVATE (stream)->tag_available = g_value_get_boolean (value);
+	    break;
 	case PROP_DURATION:
 	    PAROLE_STREAM_GET_PRIVATE (stream)->duration = g_value_get_double (value);
 	    break;
@@ -150,6 +192,9 @@
 	case PROP_LIVE:
 	    g_value_set_boolean (value, PAROLE_STREAM_GET_PRIVATE (stream)->live);
 	    break;
+	case PROP_MEDIA_TYPE:
+	    g_value_set_enum (value, PAROLE_STREAM_GET_PRIVATE (stream)->media_type);
+	    break;
 	case PROP_HAS_AUDIO:
 	    g_value_set_boolean (value, PAROLE_STREAM_GET_PRIVATE (stream)->has_audio);
 	    break;
@@ -162,6 +207,9 @@
 	case PROP_DURATION:
 	    g_value_set_double (value, PAROLE_STREAM_GET_PRIVATE (stream)->duration);
 	    break;
+	case PROP_TAG_AVAILABLE:
+	    g_value_set_double (value, PAROLE_STREAM_GET_PRIVATE (stream)->tag_available);
+	    break;
 	case PROP_ABSOLUTE_DURATION:
 	    g_value_set_int64 (value, PAROLE_STREAM_GET_PRIVATE (stream)->absolute_duration);
 	    break;
@@ -264,6 +312,21 @@
 							   G_PARAM_READWRITE));
 
     /**
+     * ParoleStream:media-type:
+     * 
+     *
+     * 
+     * Since: 0.1 
+     **/
+    g_object_class_install_property (object_class,
+				     PROP_MEDIA_TYPE,
+				     g_param_spec_enum ("media-type",
+							NULL, NULL,
+							ENUM_GTYPE_MEDIA_TYPE,
+							PAROLE_MEDIA_TYPE_UNKNOWN,
+							G_PARAM_READWRITE));
+
+    /**
      * ParoleStream:seekable:
      * 
      * Whether the stream is seekable, for example live 
@@ -294,6 +357,20 @@
 							 G_PARAM_READWRITE));
 
     /**
+     * ParoleStream:tag-available:
+     * 
+     * Whether tags information are available on the current stream.
+     * 
+     * Since: 0.1 
+     **/
+    g_object_class_install_property (object_class,
+				     PROP_SEEKABLE,
+				     g_param_spec_boolean ("tag-available",
+							   NULL, NULL,
+							   FALSE,
+							   G_PARAM_READWRITE));
+
+    /**
      * ParoleStream:absolute-duration:
      * 
      * 
@@ -408,6 +485,8 @@
     priv->has_video = FALSE;
     priv->absolute_duration = 0;
     priv->duration = 0;
+    priv->tag_available = FALSE;
+    priv->media_type = PAROLE_MEDIA_TYPE_UNKNOWN;
     
     PAROLE_STREAM_FREE_STR_PROP (priv->title);
     PAROLE_STREAM_FREE_STR_PROP (priv->uri);

Modified: parole/trunk/parole/parole-stream.h
===================================================================
--- parole/trunk/parole/parole-stream.h	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/parole/parole-stream.h	2009-07-27 14:50:47 UTC (rev 7849)
@@ -29,6 +29,18 @@
 #define PAROLE_STREAM(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_STREAM, ParoleStream))
 #define PAROLE_IS_STREAM(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_STREAM))
 
+typedef enum
+{
+    PAROLE_MEDIA_TYPE_UNKNOWN,
+    PAROLE_MEDIA_TYPE_LOCAL_FILE,
+    PAROLE_MEDIA_TYPE_CDDA,
+    PAROLE_MEDIA_TYPE_VCD,
+    PAROLE_MEDIA_TYPE_SVCD,
+    PAROLE_MEDIA_TYPE_DVD,
+    PAROLE_MEDIA_TYPE_REMOTE
+    
+} ParoleMediaType;
+
 typedef struct _ParoleStream      ParoleStream;
 typedef struct _ParoleStreamClass ParoleStreamClass;
 

Modified: parole/trunk/plugins/Makefile.am
===================================================================
--- parole/trunk/plugins/Makefile.am	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/plugins/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -3,3 +3,7 @@
 if PAROLE_PROPERTIES_PLUGIN
 SUBDIRS+=properties
 endif
+
+if PAROLE_TRAY_PLUGIN
+SUBDIRS+=tray
+endif
\ No newline at end of file

Modified: parole/trunk/plugins/properties/stream-properties.c
===================================================================
--- parole/trunk/plugins/properties/stream-properties.c	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/plugins/properties/stream-properties.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -18,6 +18,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>

Added: parole/trunk/plugins/tray/Makefile.am
===================================================================
--- parole/trunk/plugins/tray/Makefile.am	                        (rev 0)
+++ parole/trunk/plugins/tray/Makefile.am	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,31 @@
+INCLUDES =					\
+	-I$(top_builddir)			\
+	-I$(top_srcdir)				\
+	-DG_LOG_DOMAIN=\"parole_tray\"    	\
+	-DLIBEXECDIR=\"$(libexecdir)\"		\
+	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"
+
+pluginsdir = 					\
+	$(libdir)/parole-$(PAROLE_VERSION_API)
+
+plugins_LTLIBRARIES =				\
+	tray-icon.la
+
+tray_icon_la_SOURCES =				\
+	tray-icon.c
+
+tray_icon_la_CFLAGS =				\
+	$(PLATFORM_CFLAGS)			\
+	$(GTK_CFLAGS)				\
+	$(LIBXFCE4GUI_CFLAGS)			\
+	$(LIBXFCE4UTIL_CFLAGS)			\
+	$(LIBNOTIFY_CFLAGS)
+
+tray_icon_la_LDFLAGS =				\
+	-avoid-version				\
+	-export-dynamic				\
+	-module					\
+	$(PLATFORM_LDFLAGS)
+
+tray_icon_la_LIBADD =				\
+	$(LIBNOTIFY_LIBS)
\ No newline at end of file

Added: parole/trunk/plugins/tray/tray-icon.c
===================================================================
--- parole/trunk/plugins/tray/tray-icon.c	                        (rev 0)
+++ parole/trunk/plugins/tray/tray-icon.c	2009-07-27 14:50:47 UTC (rev 7849)
@@ -0,0 +1,410 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <parole/parole.h>
+
+#ifdef HAVE_LIBNOTIFY
+#include <libnotify/notify.h>
+#endif
+
+#include <libxfcegui4/libxfcegui4.h>
+#include <libxfce4util/libxfce4util.h>
+
+#define RESOURCE_FILE 	"xfce4/parole/parole-plugins/tray.rc"
+
+typedef struct
+{
+    ParolePlugin  *plugin;
+    GtkStatusIcon *tray;
+    GtkWidget     *window;
+    gulong         sig;
+
+#ifdef HAVE_LIBNOTIFY
+    NotifyNotification *n;
+    gboolean	  notify;
+    gboolean      enabled;
+#endif
+    ParoleState state;
+    GtkWidget     *menu;
+    
+} PluginData;
+
+static void
+menu_selection_done_cb (PluginData *data)
+{
+    gtk_widget_destroy (data->menu);
+    data->menu = NULL;
+}
+
+static void
+exit_activated_cb (PluginData *data)
+{
+    GdkEventAny ev;
+    
+    menu_selection_done_cb (data);
+    
+    ev.type = GDK_DELETE;
+    ev.window = data->window->window;
+    ev.send_event = TRUE;
+
+    g_signal_handler_block (data->window, data->sig);
+    gtk_main_do_event ((GdkEvent *) &ev);
+}
+
+static void
+play_pause_activated_cb (PluginData *data)
+{
+    menu_selection_done_cb (data);
+    
+    if ( data->state == PAROLE_STATE_PLAYING )
+	parole_plugin_pause_playback (data->plugin);
+    else if ( data->state == PAROLE_STATE_PAUSED )
+	parole_plugin_resume_playback (data->plugin);
+}   
+  
+static void
+stop_activated_cb (PluginData *data)
+{
+    menu_selection_done_cb (data);
+    parole_plugin_stop_playback (data->plugin);
+}
+
+static void
+popup_menu_cb (GtkStatusIcon *icon, guint button, 
+               guint activate_time, PluginData *data)
+{
+    GtkWidget *menu, *mi;
+    
+    menu = gtk_menu_new ();
+
+    /*
+     * Play pause.
+     */
+    mi = gtk_image_menu_item_new_from_stock (data->state == PAROLE_STATE_PLAYING ? GTK_STOCK_MEDIA_PAUSE : 
+					     GTK_STOCK_MEDIA_PLAY, NULL);
+    gtk_widget_set_sensitive (mi, TRUE);
+    gtk_widget_show (mi);
+    g_signal_connect_swapped (mi, "activate", G_CALLBACK (play_pause_activated_cb), data);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+    
+    /*
+     * Stop
+     */
+    mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_STOP, NULL);
+    gtk_widget_set_sensitive (mi, data->state >= PAROLE_STATE_PAUSED);
+    gtk_widget_show (mi);
+    g_signal_connect_swapped (mi, "activate", G_CALLBACK (stop_activated_cb), data);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+    
+    /*
+     * Separator.
+     */
+    mi = gtk_separator_menu_item_new ();
+    gtk_widget_show (mi);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+    
+    /*
+     * Exit
+     */
+    mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
+    gtk_widget_set_sensitive (mi, TRUE);
+    gtk_widget_show (mi);
+    g_signal_connect_swapped (mi, "activate", G_CALLBACK (exit_activated_cb), data);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+    
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
+                    gtk_status_icon_position_menu, 
+                    icon, button, activate_time);
+
+    g_signal_connect_swapped (menu, "selection-done",
+			      G_CALLBACK (menu_selection_done_cb), data);
+
+    data->menu = menu;
+}
+
+static void
+free_data_cb (ParolePlugin *plugin, PluginData *data)
+{
+    if ( GTK_IS_WIDGET (data->window) && g_signal_handler_is_connected (data->window, data->sig) )
+	g_signal_handler_disconnect (data->window, data->sig);
+ 
+    g_object_unref (G_OBJECT (data->tray));
+    g_free (data);
+}
+
+static void
+tray_activate_cb (GtkStatusIcon *tray, PluginData *data)
+{
+    if ( GTK_WIDGET_VISIBLE (data->window) )
+	gtk_widget_hide (data->window);
+    else
+	gtk_window_present (GTK_WINDOW (data->window));
+}
+
+#ifdef HAVE_LIBNOTIFY
+static void
+notification_closed_cb (NotifyNotification *n, PluginData *data)
+{
+    data->n = NULL;
+}
+
+static void
+notify_playing (PluginData *data, const ParoleStream *stream)
+{
+    GdkPixbuf *pix;
+    gboolean live, has_audio, has_video;
+    gchar *title;
+    gchar *message;
+    gdouble duration;
+    ParoleMediaType media_type;
+    
+    if ( !data->notify || !data->enabled)
+	return;
+    
+    g_object_get (G_OBJECT (stream), 
+		  "title", &title,
+		  "has-audio", &has_audio,
+		  "has-video", &has_video,
+		  "duration", &duration,
+		  "live", &live,
+		  "media-type", &media_type,
+		  NULL);
+    
+    if ( live || media_type != PAROLE_MEDIA_TYPE_LOCAL_FILE )
+    {
+	g_free (title);
+	return;
+    }
+    
+    message = g_strdup_printf ("%s %s %s %4.2f", _("<b>Playing:</b>"), title, _("<b>Duration:</b>"), duration);
+    
+    data->n = notify_notification_new (title, message, NULL, NULL);
+    g_free (title);
+    g_free (message);
+    
+    notify_notification_attach_to_status_icon (data->n, data->tray);
+    pix = xfce_themed_icon_load (has_video ? "video" : "audio-x-generic", 48);
+    if ( pix )
+    {
+	notify_notification_set_icon_from_pixbuf (data->n, pix);
+	g_object_unref (pix);
+    }
+    notify_notification_set_urgency (data->n, NOTIFY_URGENCY_LOW);
+    notify_notification_set_timeout (data->n, 5000);
+    
+    notify_notification_show (data->n, NULL);
+    g_signal_connect (data->n, "closed",
+		      G_CALLBACK (notification_closed_cb), data);
+		      
+    data->notify = FALSE;
+}
+#endif
+
+static void
+state_changed_cb (ParolePlugin *plugin, const ParoleStream *stream, ParoleState state, PluginData *data)
+{
+#ifdef HAVE_LIBNOTIFY
+    gboolean tag;
+#endif
+
+    data->state = state;
+    
+    if ( data->menu )
+    {
+	gtk_widget_destroy (data->menu);
+	data->menu = NULL;
+	g_signal_emit_by_name (G_OBJECT (data->tray), "popup-menu", 0, gtk_get_current_event_time ());
+    }
+    
+#ifdef HAVE_LIBNOTIFY
+
+    if ( state == PAROLE_STATE_PLAYING )
+    {
+	g_object_get (G_OBJECT (stream),
+		      "tag-available", &tag,
+		      NULL);
+
+	if ( tag )
+	    notify_playing (data, stream);
+    }
+    else if ( state <= PAROLE_STATE_PAUSED )
+    {
+	if ( data->n )
+	{
+	    notify_notification_close (data->n, NULL);
+	    data->n = NULL;
+	}
+	if ( state < PAROLE_STATE_PAUSED )
+	    data->notify = TRUE;
+    }
+#endif
+}
+
+static void
+tag_message_cb (ParolePlugin *plugin, const ParoleStream *stream, PluginData *data)
+{
+#ifdef HAVE_LIBNOTIFY
+    ParoleState state;
+    
+    state = parole_plugin_get_state (plugin);
+    
+    if (state == PAROLE_STATE_PLAYING )
+	notify_playing (data, stream);
+    
+#endif
+}
+
+#ifdef HAVE_LIBNOTIFY
+static gboolean
+notify_enabled (void)
+{
+    gboolean ret_val = TRUE;
+    gchar *file;
+    XfceRc *rc;
+    
+    file = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, RESOURCE_FILE, TRUE);
+    rc = xfce_rc_simple_open (file, TRUE);
+    g_free (file);
+    
+    if ( rc )
+    {
+	ret_val = xfce_rc_read_bool_entry (rc, "NOTIFY", TRUE);
+	xfce_rc_close (rc);
+    }
+    
+    return ret_val;
+}
+
+static void
+notify_toggled_cb (GtkToggleButton *bt, PluginData *data)
+{
+    gboolean active;
+    gchar *file;
+    XfceRc *rc;
+    
+    file = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, RESOURCE_FILE, TRUE);
+    rc = xfce_rc_simple_open (file, FALSE);
+    g_free (file);
+    
+    active = gtk_toggle_button_get_active (bt);
+    
+    data->enabled = active;
+    
+    xfce_rc_write_bool_entry (rc, "NOTIFY", active);
+    xfce_rc_close (rc);
+}
+
+static void
+configure_cb (ParolePlugin *plugin, GtkWidget *widget, PluginData *data)
+{
+    GtkWidget *dialog;
+    GtkWidget *content_area;
+    GtkWidget *check;
+    
+    dialog = gtk_dialog_new_with_buttons (_("Tray icon plugin"), 
+					  GTK_WINDOW (widget),
+					  GTK_DIALOG_DESTROY_WITH_PARENT,
+					  GTK_STOCK_CANCEL,
+                                          GTK_RESPONSE_CANCEL,
+                                          NULL);
+
+    content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+    
+    check = gtk_check_button_new_with_label (_("Enable notification"));
+    
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), data->enabled);
+    
+    g_signal_connect (check, "toggled",
+		      G_CALLBACK (notify_toggled_cb), data);
+    
+    gtk_container_add (GTK_CONTAINER (content_area), check);
+    
+    g_signal_connect (dialog, "response",
+		      G_CALLBACK (gtk_widget_destroy), NULL);
+    gtk_widget_show_all (dialog);
+}
+#endif
+
+G_MODULE_EXPORT static void
+construct (ParolePlugin *plugin)
+{
+    PluginData *data;
+    GdkPixbuf *pix;
+    
+    data = g_new0 (PluginData, 1);
+    data->n = NULL;
+    data->state = PAROLE_STATE_STOPPED;
+    
+    data->window = parole_plugin_get_main_window (plugin);
+    
+    data->tray = gtk_status_icon_new ();
+    data->plugin = plugin;
+    data->menu = NULL;
+
+#ifdef HAVE_LIBNOTIFY
+    notify_init ("parole-tray-icon");
+    data->enabled = notify_enabled ();
+    data->notify = TRUE;
+#endif
+    
+    pix = xfce_themed_icon_load ("parole", 48);
+    
+    if ( pix )
+    {
+	gtk_status_icon_set_from_pixbuf (data->tray, pix);
+	g_object_unref (pix);
+    }
+    
+    g_signal_connect (data->tray, "popup-menu",
+		      G_CALLBACK (popup_menu_cb), data);
+    
+    g_signal_connect (data->tray, "activate",
+		      G_CALLBACK (tray_activate_cb), data);
+    
+    data->sig = g_signal_connect (data->window, "delete-event",
+			          G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+				  
+    g_signal_connect (plugin, "free-data",
+		      G_CALLBACK (free_data_cb), data);
+		      
+    g_signal_connect (plugin, "state_changed", 
+		      G_CALLBACK (state_changed_cb), data);
+		      
+    g_signal_connect (plugin, "tag-message",
+		      G_CALLBACK (tag_message_cb), data);
+
+#ifdef HAVE_LIBNOTIFY
+    parole_plugin_set_is_configurable (plugin, TRUE);
+    g_signal_connect (plugin, "configure", 
+		      G_CALLBACK (configure_cb), data);
+#endif
+}
+
+PAROLE_PLUGIN_CONSTRUCT (construct,                  	    /* Construct function */
+			 _("Tray icon"),            	    /* Title */
+			 _("Show icon in the system tray"), /* Description */
+			 "Ali Abdallah");            	    /* Author */

Modified: parole/trunk/po/POTFILES.in
===================================================================
--- parole/trunk/po/POTFILES.in	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/po/POTFILES.in	2009-07-27 14:50:47 UTC (rev 7849)
@@ -17,3 +17,4 @@
 parole/parole-about.c
 parole/parole-disc.c
 plugins/properties/stream-properties.c
+plugins/tray/tray-icon.c

Modified: parole/trunk/po/parole-media-player.pot
===================================================================
--- parole/trunk/po/parole-media-player.pot	2009-07-27 06:50:10 UTC (rev 7848)
+++ parole/trunk/po/parole-media-player.pot	2009-07-27 14:50:47 UTC (rev 7849)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-26 01:16+0200\n"
+"POT-Creation-Date: 2009-07-27 16:47+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -65,9 +65,21 @@
 msgstr ""
 
 #: ../data/interfaces/plugins.ui.h:5
+msgid "Parole Plugins Preferences"
+msgstr ""
+
+#: ../data/interfaces/plugins.ui.h:6
+msgid "gtk-about"
+msgstr ""
+
+#: ../data/interfaces/plugins.ui.h:7
 msgid "gtk-close"
 msgstr ""
 
+#: ../data/interfaces/plugins.ui.h:8
+msgid "gtk-properties"
+msgstr ""
+
 #: ../data/interfaces/parole-settings.ui.h:1
 msgid "<b>Audio</b>"
 msgstr ""
@@ -131,16 +143,16 @@
 msgid "Type '%s --help' for usage."
 msgstr ""
 
-#: ../parole/parole-gst.c:788
+#: ../parole/parole-gst.c:796
 msgid "Error in changing state to ready"
 msgstr ""
 
-#: ../parole/parole-gst.c:837
+#: ../parole/parole-gst.c:845
 msgid ""
 "Unable to load playbin GStreamer plugin, check your GStreamer installation"
 msgstr ""
 
-#: ../parole/parole-gst.c:852
+#: ../parole/parole-gst.c:860
 msgid ""
 "Unable to load video GStreamer plugin, check your GStreamer installation"
 msgstr ""
@@ -173,7 +185,7 @@
 msgid "Unknown playlist format, Please select a support playlist format"
 msgstr ""
 
-#: ../parole/parole-medialist.c:455 ../parole/parole-player.c:953
+#: ../parole/parole-medialist.c:455 ../parole/parole-player.c:963
 msgid "Playlist"
 msgstr ""
 
@@ -205,20 +217,20 @@
 msgid "Show playlist"
 msgstr ""
 
-#: ../parole/parole-player.c:336 ../parole/parole-statusbar.c:125
+#: ../parole/parole-player.c:338 ../parole/parole-statusbar.c:125
 #: ../parole/parole-statusbar.c:127
 msgid "Playing"
 msgstr ""
 
-#: ../parole/parole-player.c:337
+#: ../parole/parole-player.c:339
 msgid "Media stream is not seekable"
 msgstr ""
 
-#: ../parole/parole-player.c:355 ../parole/parole-player.c:368
+#: ../parole/parole-player.c:357 ../parole/parole-player.c:370
 msgid "Paused"
 msgstr ""
 
-#: ../parole/parole-player.c:386
+#: ../parole/parole-player.c:388
 msgid "Stopped"
 msgstr ""
 
@@ -254,40 +266,66 @@
 msgid "Play Disc"
 msgstr ""
 
-#: ../plugins/properties/stream-properties.c:40
-#: ../plugins/properties/stream-properties.c:41
-#: ../plugins/properties/stream-properties.c:42
-#: ../plugins/properties/stream-properties.c:43
 #: ../plugins/properties/stream-properties.c:44
+#: ../plugins/properties/stream-properties.c:45
+#: ../plugins/properties/stream-properties.c:46
+#: ../plugins/properties/stream-properties.c:47
+#: ../plugins/properties/stream-properties.c:48
 msgid "Unknown"
 msgstr ""
 
-#: ../plugins/properties/stream-properties.c:66
+#: ../plugins/properties/stream-properties.c:70
 msgid "Title:"
 msgstr ""
 
-#: ../plugins/properties/stream-properties.c:89
+#: ../plugins/properties/stream-properties.c:93
 msgid "Artist:"
 msgstr ""
 
-#: ../plugins/properties/stream-properties.c:112
+#: ../plugins/properties/stream-properties.c:116
 msgid "Album:"
 msgstr ""
 
-#: ../plugins/properties/stream-properties.c:135
+#: ../plugins/properties/stream-properties.c:139
 msgid "Year:"
 msgstr ""
 
-#: ../plugins/properties/stream-properties.c:158
+#: ../plugins/properties/stream-properties.c:162
 msgid "Comment:"
 msgstr ""
 
 #. Construct function
-#: ../plugins/properties/stream-properties.c:284
+#: ../plugins/properties/stream-properties.c:288
 msgid "Properties"
 msgstr ""
 
 #. Title
-#: ../plugins/properties/stream-properties.c:285
+#: ../plugins/properties/stream-properties.c:289
 msgid "Read media properties"
 msgstr ""
+
+#: ../plugins/tray/tray-icon.c:203
+msgid "<b>Playing:</b>"
+msgstr ""
+
+#: ../plugins/tray/tray-icon.c:203
+msgid "<b>Duration:</b>"
+msgstr ""
+
+#: ../plugins/tray/tray-icon.c:328
+msgid "Tray icon plugin"
+msgstr ""
+
+#: ../plugins/tray/tray-icon.c:337
+msgid "Enable notification"
+msgstr ""
+
+#. Construct function
+#: ../plugins/tray/tray-icon.c:408
+msgid "Tray icon"
+msgstr ""
+
+#. Title
+#: ../plugins/tray/tray-icon.c:409
+msgid "Show icon in the system tray"
+msgstr ""




More information about the Goodies-commits mailing list