← Back to team overview

cairo-dock-team team mailing list archive

lp:~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0beta1 into lp:ubuntu/cairo-dock-plug-ins

 

Matthieu Baerts has proposed merging lp:~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0beta1 into lp:ubuntu/cairo-dock-plug-ins.

Requested reviews:
  Ubuntu Sponsors Team (ubuntu-sponsors)
Related bugs:
  Bug #932042 in cairo-dock-plug-ins (Ubuntu): "Please update Cairo-Dock Plug-Ins to 3.0.0.0beta1 version"
  https://bugs.launchpad.net/ubuntu/+source/cairo-dock-plug-ins/+bug/932042

For more details, see:
https://code.launchpad.net/~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0beta1/+merge/92987

Hello,

The Cairo-Dock team proposes a new version of its Cairo-Dock packages.

This is the Upstream (short) ChangeLog:
 * Upstream (short) ChangeLog:
   - The Log out applet has been rewritten, now allows to switch users.
   - Many shortkeys have been added in different applets
   - The Sound Menu from Ubuntu has been integrated into the
      Sound-Control applet.
   - The Sound Menu from Ubuntu has been integrated into the
      Sound-Control applet.
   - Cairo-Dock now uses GTK3, for a better integration in a Gnome desktop
   - Few additions to the DBus API.

Note that the next stable version if scheduled for March. (before the beta freeze)

This branch should be ready to be pushed on lp:ubuntu/cairo-dock-plug-ins (except the UNRELEASED version in debian/changelog)

Please upload this version before the Feature Freeze :)

Thank you for your help!

PS: 'cairo-dock' source package has to be uploaded before this package (if possible, min 20min before these plug-ins) ( LP: #932041 )
-- 
The attached diff has been truncated due to its size.
https://code.launchpad.net/~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0beta1/+merge/92987
Your team Cairo-Dock Team is subscribed to branch lp:~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0beta1.
=== removed directory '.pc/01-removed-useless-g_print.patch'
=== removed directory '.pc/01-removed-useless-g_print.patch/switcher'
=== removed directory '.pc/01-removed-useless-g_print.patch/switcher/src'
=== removed file '.pc/01-removed-useless-g_print.patch/switcher/src/applet-draw.c'
--- .pc/01-removed-useless-g_print.patch/switcher/src/applet-draw.c	2011-11-05 21:55:39 +0000
+++ .pc/01-removed-useless-g_print.patch/switcher/src/applet-draw.c	1970-01-01 00:00:00 +0000
@@ -1,689 +0,0 @@
-/**
-* This file is a part of the Cairo-Dock project
-*
-* Copyright : (C) see the 'copyright' file.
-* E-mail    : see the 'copyright' file.
-*
-* 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 3
-* 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, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <string.h>
-#include <glib/gstdio.h>
-#include <math.h>
-
-#include "applet-struct.h"
-#include "applet-load-icons.h"
-#include "applet-desktops.h"
-#include "applet-draw.h"
-
-typedef struct {
-	gint iNumDesktop;
-	gint iNumViewportX;
-	gint iNumViewportY;
-	gint iOneViewportWidth;
-	gint iOneViewportHeight;
-	cairo_t *pCairoContext;
-	} CDSwitcherDesktop;
- 
-static void _cd_switcher_draw_windows_on_viewport (Icon *pIcon, CDSwitcherDesktop *data)
-{
-	if (pIcon == NULL || pIcon->fInsertRemoveFactor > 0)
-		return ;
-	if (pIcon->bIsHidden && ! myConfig.bDisplayHiddenWindows)
-		return ;
-	int iNumDesktop = data->iNumDesktop;
-	int iNumViewportX = data->iNumViewportX;
-	int iNumViewportY = data->iNumViewportY;
-	int iOneViewportWidth = data->iOneViewportWidth;
-	int iOneViewportHeight = data->iOneViewportHeight;
-	cairo_t *pCairoContext = data->pCairoContext;
-	
-	// On calcule les coordonnees en repere absolu.
-	int x = pIcon->windowGeometry.x;  // par rapport au viewport courant.
-	x += myData.switcher.iCurrentViewportX * g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL];  // repere absolu
-	if (x < 0)
-		x += g_desktopGeometry.iNbViewportX * g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL];
-	int y = pIcon->windowGeometry.y;
-	y += myData.switcher.iCurrentViewportY * g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL];
-	if (y < 0)
-		y += g_desktopGeometry.iNbViewportY * g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL];
-	int w = pIcon->windowGeometry.width, h = pIcon->windowGeometry.height;
-	
-	// test d'intersection avec le viewport donne.
-	//g_print (" %s : (%d;%d) %dx%d\n", pIcon->cName, x, y, w, h);
-	if ((pIcon->iNumDesktop != -1 && pIcon->iNumDesktop != iNumDesktop) ||
-		x + w <= iNumViewportX * g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] ||
-		x >= (iNumViewportX + 1) * g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] ||
-		y + h <= iNumViewportY * g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL] ||
-		y >= (iNumViewportY + 1) * g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL])
-		return ;
-	//g_print (" > on la dessine (%x)\n", pIcon->pIconBuffer);
-	
-	// on dessine ses traits.
-	cairo_save (pCairoContext);
-	
-	cairo_set_source_rgba (pCairoContext, myConfig.RGBWLineColors[0], myConfig.RGBWLineColors[1], myConfig.RGBWLineColors[2], myConfig.RGBWLineColors[3]);
-	cairo_rectangle (pCairoContext,
-		(1.*x/g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] - iNumViewportX)*iOneViewportWidth,
-		(1.*y/g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL] - iNumViewportY)*iOneViewportHeight,
-		1.*w/g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL]*iOneViewportWidth,
-		1.*h/g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL]*iOneViewportHeight);
-	if (pIcon->Xid == cairo_dock_get_current_active_window ())
-	{
-		//g_print (" %s est la fenetre active\n", pIcon->cName);
-		cairo_fill (pCairoContext);
-	}
-	else
-	{
-		cairo_stroke (pCairoContext);
-	}
-	
-	if (pIcon->pIconBuffer != NULL)
-	{
-		int iWidth, iHeight;
-		cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight);
-		double fZoomX = (double) w/g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL]*iOneViewportWidth / iWidth;
-		double fZoomY = (double) h/g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL]*iOneViewportHeight / iHeight;
-		double fZoom = MIN (fZoomX, fZoomY);  // on garde le ratio.
-		
-		cairo_translate (pCairoContext,
-			(1.*x/g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] - iNumViewportX)*iOneViewportWidth + (fZoomX - fZoom) * iWidth/2,
-			(1.*y/g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL] - iNumViewportY)*iOneViewportHeight + (fZoomY - fZoom) * iHeight/2);
-		cairo_scale (pCairoContext,
-			fZoom,
-			fZoom);
-		cairo_set_source_surface (pCairoContext,
-			pIcon->pIconBuffer,
-			0.,
-			0.);
-		cairo_paint (pCairoContext);
-	}
-	
-	cairo_restore (pCairoContext);
-}
-
-
-static int _compare_icons_stack_order (Icon *icon1, Icon *icon2)
-{
-	if (icon1 == NULL)  // les icones nulles vont a la fin.
-		return 1;
-	if (icon2 == NULL)
-		return -1;
-	if (icon1->iStackOrder < icon2->iStackOrder)  // ordre petit => dessus => dessinee en dernier.
-		return -1;
-	else
-		return 1;
-}
-void cd_switcher_draw_main_icon_compact_mode (void)
-{
-	if (myData.switcher.iNbColumns == 0 || myData.switcher.iNbLines == 0)  // may happen in desklet mode with a cube desktop, when the desklet is still 0x0.
-		return;
-	g_return_if_fail (myDrawContext != NULL);
-	//g_print ("%s (%d;%d)\n", __func__, myData.switcher.iCurrentLine, myData.switcher.iCurrentColumn);
-	// On efface l'icone.
-	cairo_dock_erase_cairo_context (myDrawContext);
-	
-	// definition des parametres de dessin.
-	int iWidth, iHeight;
-	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
-	
-	myData.switcher.fOneViewportHeight = (double) (iHeight - 2 * myConfig.iLineSize - (myData.switcher.iNbLines - 1) * myConfig.iInLineSize) / myData.switcher.iNbLines; //hauteur d'un bureau/viewport sans compter les lignes exterieures et interieures.
-	myData.switcher.fOneViewportWidth = (double) (iWidth - 2 * myConfig.iLineSize - (myData.switcher.iNbColumns - 1) * myConfig.iInLineSize) / myData.switcher.iNbColumns; //largeur d'un bureau/viewport sans compter les lignes exterieures et interieures.
-	double dx=0, dy=0;
-	double w = iWidth, h = iHeight;
-	if (myConfig.bPreserveScreenRatio)
-	{
-		double r = (double) g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] / g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL];
-		double r_ = myData.switcher.fOneViewportWidth / myData.switcher.fOneViewportHeight;
-		if (r_ > r)  // on etire trop en largeur.
-		{
-			myData.switcher.fOneViewportWidth /= r_ / r;
-			dx = (double) iWidth/2 * (1 - r / r_);
-			w /= r_ / r;
-		}
-		else
-		{
-			myData.switcher.fOneViewportHeight /= r / r_;
-			dy = (double) iHeight/2 * (1 - r_ / r);
-			h /= r / r_;
-		}
-	}
-	myData.switcher.fOffsetX = dx;
-	myData.switcher.fOffsetY = dy;
-	
-	cairo_save (myDrawContext);
-	cairo_translate (myDrawContext, dx, dy);
-	
-	cairo_surface_t *pSurface = NULL;
-	double fZoomX, fZoomY;
-	if (myConfig.bMapWallpaper)
-	{
-		pSurface = myData.pDesktopBgMapSurface;
-	}
-	if (pSurface == NULL)
-	{
-		pSurface = myData.pDefaultMapSurface;
-	}
-	fZoomX = (double) myData.switcher.fOneViewportWidth / myData.iSurfaceWidth;  // both surfaces are loaded at the same size.
-	fZoomY= (double) myData.switcher.fOneViewportHeight / myData.iSurfaceHeight;
-	
-	// cadre exterieur.
-	cairo_set_line_width (myDrawContext,myConfig.iLineSize);
-	cairo_set_source_rgba(myDrawContext,myConfig.RGBLineColors[0],myConfig.RGBLineColors[1],myConfig.RGBLineColors[2],myConfig.RGBLineColors[3]);
-	cairo_rectangle(myDrawContext,
-		.5*myConfig.iLineSize,
-		.5*myConfig.iLineSize,
-		w - myConfig.iLineSize,
-		h - myConfig.iLineSize);
-
-	cairo_stroke (myDrawContext);
-	
-	// lignes interieures.
-	cairo_set_line_width (myDrawContext,myConfig.iInLineSize);
-	cairo_set_source_rgba(myDrawContext,myConfig.RGBInLineColors[0],myConfig.RGBInLineColors[1],myConfig.RGBInLineColors[2],myConfig.RGBInLineColors[3]);
-	double xi, yj;
-	int i, j;
-	for (i = 1; i < myData.switcher.iNbColumns; i ++)  // lignes verticales.
-	{
-		xi = myConfig.iLineSize + i * (myData.switcher.fOneViewportWidth + myConfig.iInLineSize) - .5*myConfig.iInLineSize;
-		cairo_move_to (myDrawContext, xi, myConfig.iLineSize);
-		cairo_rel_line_to (myDrawContext, 0, h - 2*myConfig.iLineSize);
-		cairo_stroke (myDrawContext);
-	}
-	for (j = 1; j < myData.switcher.iNbLines; j ++)  // lignes horizontales.
-	{
-		yj = myConfig.iLineSize + j * (myData.switcher.fOneViewportHeight + myConfig.iInLineSize) - .5*myConfig.iInLineSize;
-		cairo_move_to (myDrawContext, myConfig.iLineSize, yj);
-		cairo_rel_line_to (myDrawContext, w - 2*myConfig.iLineSize, 0);
-		cairo_stroke (myDrawContext);
-	}
-	
-	GList *pWindowList = NULL;
-	if (myConfig.bDrawWindows)
-	{
-		pWindowList = cairo_dock_get_current_applis_list ();
-		pWindowList = g_list_sort (pWindowList, (GCompareFunc) _compare_icons_stack_order);
-	}
-	
-	// chaque bureau/viewport.
-	int iNumDesktop=0, iNumViewportX=0, iNumViewportY=0;
-	int k = 0, N = g_desktopGeometry.iNbDesktops * g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY;
-	for (j = 0; j < myData.switcher.iNbLines && k < N; j ++)
-	{
-		for (i = 0; i < myData.switcher.iNbColumns && k < N; i ++)
-		{
-			cairo_save (myDrawContext);
-
-			xi = myConfig.iLineSize + i * (myData.switcher.fOneViewportWidth + myConfig.iInLineSize);
-			yj = myConfig.iLineSize + j * (myData.switcher.fOneViewportHeight + myConfig.iInLineSize);
-
-			cairo_translate (myDrawContext,
-				xi,
-				yj);
-
-			cairo_scale (myDrawContext,
-				fZoomX,
-				fZoomY);
-			cairo_set_source_surface (myDrawContext,
-				pSurface,
-				0.,
-				0.);
-			cairo_paint(myDrawContext);
-			
-			cairo_restore (myDrawContext);
-			
-			if (myConfig.iDrawCurrentDesktopMode == SWICTHER_FILL_INVERTED && (i != myData.switcher.iCurrentColumn || j != myData.switcher.iCurrentLine))
-			{
-				cairo_save (myDrawContext);
-				
-				cairo_set_source_rgba (myDrawContext, myConfig.RGBIndColors[0], myConfig.RGBIndColors[1], myConfig.RGBIndColors[2], myConfig.RGBIndColors[3]);
-				cairo_rectangle(myDrawContext,
-					xi - .5*myConfig.iLineSize,
-					yj - .5*myConfig.iLineSize,
-					myData.switcher.fOneViewportWidth + myConfig.iLineSize,
-					myData.switcher.fOneViewportHeight + myConfig.iLineSize);
-				cairo_fill (myDrawContext);
-				
-				cairo_restore (myDrawContext);
-			}
-			
-			if (myConfig.bDrawWindows)
-			{
-				cairo_save (myDrawContext);
-				
-				cairo_translate (myDrawContext,
-					xi,
-					yj);
-				cairo_set_line_width (myDrawContext, 1.);
-				cairo_rectangle (myDrawContext,
-					0.,
-					0.,
-					myData.switcher.fOneViewportWidth,
-					myData.switcher.fOneViewportHeight);
-				cairo_clip (myDrawContext);
-				
-				//g_print (" dessin des fenetres du bureau (%d;%d;%d) ...\n", iNumDesktop, iNumViewportX, iNumViewportY);
-				CDSwitcherDesktop data = {iNumDesktop, iNumViewportX, iNumViewportY, (int) myData.switcher.fOneViewportWidth, (int) myData.switcher.fOneViewportHeight, myDrawContext};
-				g_list_foreach (pWindowList, (GFunc) _cd_switcher_draw_windows_on_viewport, &data);
-				
-				cairo_restore (myDrawContext);
-			}
-			
-			iNumViewportX ++;
-			if (iNumViewportX == g_desktopGeometry.iNbViewportX)
-			{
-				iNumViewportX = 0;
-				iNumViewportY ++;
-				if (iNumViewportY == g_desktopGeometry.iNbViewportY)
-				{
-					iNumViewportY = 0;
-					iNumDesktop ++;
-				}
-			}
-			k ++;
-		}
-	}
-	
-	// dessin de l'indicateur sur le bureau courant (on le fait maintenant car dans le cas ou la ligne interieure est plus petite que la ligne de l'indicateur, les surfaces suivantes recouvreraient en partie la ligne.
-	if (myConfig.iDrawCurrentDesktopMode != SWICTHER_FILL_INVERTED)
-	{
-		i = myData.switcher.iCurrentColumn;
-		j = myData.switcher.iCurrentLine;
-		xi = myConfig.iLineSize + i * (myData.switcher.fOneViewportWidth + myConfig.iInLineSize);
-		yj = myConfig.iLineSize + j * (myData.switcher.fOneViewportHeight + myConfig.iInLineSize);
-		
-		cairo_set_line_width (myDrawContext,myConfig.iLineSize);
-		cairo_set_source_rgba (myDrawContext,myConfig.RGBIndColors[0],myConfig.RGBIndColors[1],myConfig.RGBIndColors[2],myConfig.RGBIndColors[3]);
-		cairo_rectangle(myDrawContext,
-			xi - .5*myConfig.iLineSize,
-			yj - .5*myConfig.iLineSize,
-			myData.switcher.fOneViewportWidth + myConfig.iLineSize,
-			myData.switcher.fOneViewportHeight + myConfig.iLineSize);
-		
-		if (myConfig.iDrawCurrentDesktopMode == SWICTHER_FILL)
-			cairo_fill (myDrawContext);
-		else
-			cairo_stroke(myDrawContext);
-	}
-	
-	cairo_restore (myDrawContext);
-	g_list_free (pWindowList);  // le contenu appartient a la hash table, mais pas la liste.
-	
-	if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
-		cairo_dock_update_icon_texture (myIcon);
-	else
-		CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
-}
-
-
-void cd_switcher_draw_main_icon_expanded_mode (void)
-{
-	// apply the desktop bg or the user image on the main icon, in dock mode
-	int iWidth, iHeight;
-	
-	if (myDock)
-	{
-		CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
-		myData.switcher.fOneViewportHeight = (iHeight - 2 * myConfig.iLineSize - (myData.switcher.iNbLines - 1) * myConfig.iInLineSize) / myData.switcher.iNbLines; //hauteur d'un bureau/viewport sans compter les lignes exterieures et interieures.
-		myData.switcher.fOneViewportWidth = (iWidth - 2 * myConfig.iLineSize - (myData.switcher.iNbColumns - 1) * myConfig.iInLineSize) / myData.switcher.iNbColumns; //largeur d'un bureau/viewport sans compter les lignes exterieures et interieures.
-
-		cairo_surface_t *pSurface = NULL;
-		double fZoomX, fZoomY;
-		if (myConfig.bMapWallpaper)
-		{
-			cairo_dock_erase_cairo_context (myDrawContext);
-
-			pSurface = myData.pDesktopBgMapSurface;
-			fZoomX = 1. * iWidth / myData.iSurfaceWidth;
-			fZoomY= 1. * iHeight / myData.iSurfaceHeight;
-			cairo_translate (myDrawContext,
-				0.,
-				0.);
-
-			cairo_save (myDrawContext);
-			cairo_scale (myDrawContext,
-				fZoomX ,
-				fZoomY );
-			cairo_set_source_surface (myDrawContext,
-				pSurface,
-				0.,
-				0.);
-			cairo_paint(myDrawContext);
-			cairo_restore (myDrawContext);
-
-			if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
-				cairo_dock_update_icon_texture (myIcon);
-			else
-				CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
-		}
-		else
-		{
-			CD_APPLET_SET_IMAGE_ON_MY_ICON (MY_APPLET_SHARE_DATA_DIR"/"MY_APPLET_ICON_FILE);
-		}
-	}
-	
-	if (myConfig.bDrawWindows)
-	{
-		GList *pWindowList = cairo_dock_get_current_applis_list ();
-		pWindowList = g_list_sort (pWindowList, (GCompareFunc) _compare_icons_stack_order);
-		
-		CDSwitcherDesktop data;
-		int iNumDesktop=0, iNumViewportX=0, iNumViewportY=0;
-		cairo_t *pCairoContext;
-		Icon *pIcon;
-		CairoContainer *pContainer = CD_APPLET_MY_ICONS_LIST_CONTAINER;
-		GList *pIconsList = CD_APPLET_MY_ICONS_LIST;
-		GList *ic;
-		for (ic = pIconsList; ic != NULL; ic = ic->next)
-		{
-			pIcon = ic->data;
-			cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight);
-			pCairoContext = cairo_create (pIcon->pIconBuffer);
-			cairo_set_line_width (pCairoContext, 1.);
-			cairo_set_source_rgba (pCairoContext, myConfig.RGBWLineColors[0], myConfig.RGBWLineColors[1], myConfig.RGBWLineColors[2], myConfig.RGBWLineColors[3]);
-			
-			data.iNumDesktop = iNumDesktop;
-			data.iNumViewportX = iNumViewportX;
-			data.iNumViewportY = iNumViewportY;
-			data.iOneViewportWidth = iWidth;
-			data.iOneViewportHeight = iHeight;
-			data.pCairoContext = pCairoContext;
-			g_list_foreach (pWindowList, (GFunc) _cd_switcher_draw_windows_on_viewport, &data);
-			
-			iNumViewportX ++;
-			if (iNumViewportX == g_desktopGeometry.iNbViewportX)
-			{
-				iNumViewportY ++;
-				if (iNumViewportY == g_desktopGeometry.iNbViewportY)
-					iNumDesktop ++;
-			}
-			cairo_destroy (pCairoContext);
-		}
-		g_list_free (pWindowList);  // le contenu appartient a la hash table, mais pas la liste.
-	}
-}
-
-/*Fonction de base pour toutes les autres*/
-void cd_switcher_draw_main_icon (void)
-{
-	cd_message ("%s (%d)", __func__, myConfig.bCompactView);
-	if (myConfig.bCompactView)
-	{
-		cd_switcher_draw_main_icon_compact_mode ();
-	}
-	else
-	{
-		cd_switcher_draw_main_icon_expanded_mode ();
-	}
-	
-	CD_APPLET_REDRAW_MY_ICON;
-}
-
-
-void cd_switcher_draw_desktops_bounding_box (CairoDesklet *pDesklet)
-{
-	CD_APPLET_ENTER;
-	//g_print ("%s (%.2Fx%.2f)\n", __func__, myData.switcher.fOneViewportWidth, myData.switcher.fOneViewportHeight);
-	double x, y, w, h;
-	glTranslatef (-pDesklet->container.iWidth/2, -pDesklet->container.iHeight/2, 0.);
-	
-	w = myData.switcher.fOneViewportWidth/2;
-	h = myData.switcher.fOneViewportHeight/2;
-	int i, j;
-	int k = 0, N = g_desktopGeometry.iNbDesktops * g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY;
-	
-	for (j = 0; j < myData.switcher.iNbLines; j ++)  // lignes horizontales.
-	{
-		y = myConfig.iLineSize + j * (myData.switcher.fOneViewportHeight + myConfig.iInLineSize) - .5*myConfig.iInLineSize;
-		y = pDesklet->container.iHeight - (y + h + myData.switcher.fOffsetY);	
-		
-		for (i = 0; i < myData.switcher.iNbColumns; i ++)  // lignes verticales.
-		{
-			x = myConfig.iLineSize + i * (myData.switcher.fOneViewportWidth + myConfig.iInLineSize) - .5*myConfig.iInLineSize;
-			x += w + myData.switcher.fOffsetX;
-			
-			glLoadName(i * myData.switcher.iNbLines + j + 1);  // +1 pour ne pas avoir 0.
-			
-			glBegin(GL_QUADS);
-			glVertex3f(x-w, y+h, 0.);
-			glVertex3f(x+w, y+h, 0.);
-			glVertex3f(x+w, y-h, 0.);
-			glVertex3f(x-w, y-h, 0.);
-			glEnd();
-			
-			k ++;
-			if (k == N)
-				break;
-		}
-	}
-	CD_APPLET_LEAVE ();
-}
-
-void cd_switcher_extract_viewport_coords_from_picked_object (CairoDesklet *pDesklet, int *iCoordX, int *iCoordY)
-{
-	//g_print ("%s (%d)\n", __func__, pDesklet->iPickedObject);
-	if (pDesklet->iPickedObject != 0)
-	{
-		pDesklet->iPickedObject --;  // cf le +1
-		int i, j;
-		i = pDesklet->iPickedObject / myData.switcher.iNbLines;
-		j = pDesklet->iPickedObject % myData.switcher.iNbLines;
-		//g_print ("bureau (%d;%d)\n", i, j);
-		
-		double x, y, w, h;
-		w = myData.switcher.fOneViewportWidth/2;
-		h = myData.switcher.fOneViewportHeight/2;
-		x = myConfig.iLineSize + i * (myData.switcher.fOneViewportWidth + myConfig.iInLineSize) - .5*myConfig.iInLineSize;
-		x += w + myData.switcher.fOffsetX;
-		y = myConfig.iLineSize + j * (myData.switcher.fOneViewportHeight + myConfig.iInLineSize) - .5*myConfig.iInLineSize;
-		y += h + myData.switcher.fOffsetY;
-		*iCoordX = x;
-		*iCoordY = y;
-	}
-}
-
-
-static void _show_window (GtkMenuItem *menu_item, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	cairo_dock_show_xwindow (pIcon->Xid);
-	CD_APPLET_LEAVE ();
-}
-
-static void _show_desktop (GtkMenuItem *menu_item, gpointer data)
-{
-	CD_APPLET_ENTER;
-	int iIndex = GPOINTER_TO_INT (data);
-	int iNumDesktop, iNumViewportX, iNumViewportY;
-	cd_switcher_compute_viewports_from_index (iIndex, &iNumDesktop, &iNumViewportX, &iNumViewportY);
-	if (iNumDesktop != myData.switcher.iCurrentDesktop)
-		cairo_dock_set_current_desktop (iNumDesktop);
-	if (iNumViewportX != myData.switcher.iCurrentViewportX || iNumViewportY != myData.switcher.iCurrentViewportY)
-		cairo_dock_set_current_viewport (iNumViewportX, iNumViewportY);
-	CD_APPLET_LEAVE ();
-}
-static void _cd_switcher_list_window_on_viewport (Icon *pIcon, int iNumDesktop, int iNumViewportX, int iNumViewportY, GtkWidget *pMenu)
-{
-	//g_print (" + %s\n", pIcon->cName);
-	// on recupere la taille de l'icone.
-	int iWidth, iHeight;
-	cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight);
-	
-	// on cree une copie de la surface de l'icone a la taille du menu.
-	GdkPixbuf *pixbuf = NULL;
-	if (iWidth > 0 && iHeight > 0 && pIcon->pIconBuffer != NULL)
-	{
-		int w = 24, h = w;
-		cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
-			w,
-			h);
-		cairo_t *pCairoContext = cairo_create (surface);
-		cairo_scale (pCairoContext, (double)w/iWidth, (double)h/iHeight);
-		cairo_set_source_surface (pCairoContext, pIcon->pIconBuffer, 0., 0.);
-		cairo_paint (pCairoContext);
-		cairo_destroy (pCairoContext);
-		guchar *d, *data = cairo_image_surface_get_data (surface);
-		int r = cairo_image_surface_get_stride (surface);
-		
-		// on la convertit en un pixbuf.
-		pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
-			TRUE,
-			8,
-			w,
-			h);
-		guchar *p, *pixels = gdk_pixbuf_get_pixels (pixbuf);
-		int iNbChannels = gdk_pixbuf_get_n_channels (pixbuf);
-		int iRowstride = gdk_pixbuf_get_rowstride (pixbuf);
-		
-		int x, y;
-		int red, green, blue;
-		float fAlphaFactor;
-		for (y = 0; y < h; y ++)
-		{
-			for (x = 0; x < w; x ++)
-			{
-				p = pixels + y * iRowstride + x * iNbChannels;
-				d = data + y * r + x * 4;
-				
-				fAlphaFactor = (float) d[3] / 255;
-				if (fAlphaFactor != 0)
-				{
-					red = d[0] / fAlphaFactor;
-					green = d[1] / fAlphaFactor;
-					blue = d[2] / fAlphaFactor;
-				}
-				else
-				{
-					red = blue = green = 0;
-				}
-				p[0] = blue;
-				p[1] = green;
-				p[2] = red;
-				p[3] = d[3];
-			}
-		}
-		
-		cairo_surface_destroy (surface);
-	}
-	
-	// on ajoute une entree au menu avec le pixbuf.
-	GtkWidget *pMenuItem = gtk_image_menu_item_new_with_label (pIcon->cName);
-	if (pixbuf)
-	{
-		GtkWidget *image = gtk_image_new_from_pixbuf (pixbuf);
-#if (GTK_MAJOR_VERSION > 2 || GTK_MINOR_VERSION >= 16)
-		gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (pMenuItem), TRUE);
-#endif
-		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (pMenuItem), image);
-		g_object_unref (pixbuf);
-	}
-	gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), pMenuItem);
-	g_signal_connect (G_OBJECT (pMenuItem), "activate", G_CALLBACK (_show_window), pIcon);
-}
-void cd_switcher_build_windows_list (GtkWidget *pMenu)
-{
-	GList *pWindowList = NULL;
-	pWindowList = cairo_dock_get_current_applis_list ();
-	pWindowList = g_list_sort (pWindowList, (GCompareFunc) _compare_icons_stack_order);
-	
-	// chaque bureau/viewport.
-	int iNumDesktop=0, iNumViewportX=0, iNumViewportY=0;
-	int k = 0, N = g_desktopGeometry.iNbDesktops * g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY;
-	int iIndex = cd_switcher_compute_index (myData.switcher.iCurrentDesktop, myData.switcher.iCurrentViewportX, myData.switcher.iCurrentViewportY);
-	GString *sDesktopName = g_string_new ("");
-	int i, j;
-	for (j = 0; j < myData.switcher.iNbLines; j ++)
-	{
-		for (i = 0; i < myData.switcher.iNbColumns; i ++)
-		{
-			// on ajoute le nom du bureau/viewport dans le menu.
-			GtkWidget *pMenuItem = gtk_separator_menu_item_new ();
-			gtk_menu_shell_append(GTK_MENU_SHELL (pMenu), pMenuItem);
-			g_object_set (pMenuItem, "height-request", 3, NULL);
-			
-			if (k < myConfig.iNbNames)
-			{
-				if (k == iIndex)
-					g_string_printf (sDesktopName, "<b>%s (%s)</b>", myConfig.cDesktopNames[k], D_("Current"));
-				else
-					g_string_printf (sDesktopName, "<b>%s</b>", myConfig.cDesktopNames[k]);
-			}
-			else
-			{
-				if (k == iIndex)
-					g_string_printf (sDesktopName, "<b>%s %d (%s)</b>", D_("Desktop"), k+1, D_("Current"));
-				else
-					g_string_printf (sDesktopName, "<b>%s %d</b>", D_("Desktop"), k+1);
-			}  // les noms des bureaux : _NET_DESKTOP_NAMES, UTF8_STRING
-			pMenuItem = gtk_menu_item_new ();
-			GtkWidget *pLabel = gtk_label_new (sDesktopName->str);
-			gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
-			gtk_misc_set_alignment (GTK_MISC (pLabel), .5, .5);
-			gtk_container_add (GTK_CONTAINER (pMenuItem), pLabel);
-			gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), pMenuItem);
-			g_signal_connect (G_OBJECT (pMenuItem), "activate", G_CALLBACK (_show_desktop), GINT_TO_POINTER (k));
-			
-			pMenuItem = gtk_separator_menu_item_new ();
-			gtk_menu_shell_append(GTK_MENU_SHELL (pMenu), pMenuItem);
-			g_object_set (pMenuItem, "height-request", 3, NULL);
-			
-			// on ajoute les fenetres du viewport au menu.
-			g_print (" listing des fenetres du bureau (%d;%d;%d) ...\n", iNumDesktop, iNumViewportX, iNumViewportY);
-			cd_switcher_foreach_window_on_viewport (iNumDesktop,
-				iNumViewportX,
-				iNumViewportY,
-				(CDSwitcherActionOnViewportFunc) _cd_switcher_list_window_on_viewport,
-				pMenu);
-			
-			// on passe au viewport suivant.
-			iNumViewportX ++;
-			if (iNumViewportX == g_desktopGeometry.iNbViewportX)
-			{
-				iNumViewportX = 0;
-				iNumViewportY ++;
-				if (iNumViewportY == g_desktopGeometry.iNbViewportY)
-				{
-					iNumViewportY = 0;
-					iNumDesktop ++;
-				}
-			}
-			k ++;
-			if (k == N)
-				break ;
-		}
-	}
-	g_string_free (sDesktopName, TRUE);
-}
-
-
-
-static void _cd_switcher_move_window_to_viewport (Icon *pIcon, int iNumDesktop, int iNumViewportX, int iNumViewportY, gint *data)
-{
-	int iDestNumDesktop = data[0];
-	int iDestNumViewportX = data[1];
-	int iDestNumViewportY = data[2];
-	
-	cairo_dock_move_xwindow_to_nth_desktop (pIcon->Xid,
-		iDestNumDesktop,
-		(iDestNumViewportX - myData.switcher.iCurrentViewportX) * g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL],
-		(iDestNumViewportY - myData.switcher.iCurrentViewportY) * g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL]);
-}
-void cd_switcher_move_current_desktop_to (int iNumDesktop, int iNumViewportX, int iNumViewportY)
-{
-	gint data[3] = {iNumDesktop, iNumViewportX, iNumViewportY};
-	cd_switcher_foreach_window_on_viewport (myData.switcher.iCurrentDesktop,
-		myData.switcher.iCurrentViewportX,
-		myData.switcher.iCurrentViewportY,
-		(CDSwitcherActionOnViewportFunc) _cd_switcher_move_window_to_viewport,
-		data);
-}

=== removed file '.pc/01-removed-useless-g_print.patch/switcher/src/applet-load-icons.c'
--- .pc/01-removed-useless-g_print.patch/switcher/src/applet-load-icons.c	2011-11-05 21:55:39 +0000
+++ .pc/01-removed-useless-g_print.patch/switcher/src/applet-load-icons.c	1970-01-01 00:00:00 +0000
@@ -1,238 +0,0 @@
-/**
-* This file is a part of the Cairo-Dock project
-*
-* Copyright : (C) see the 'copyright' file.
-* E-mail    : see the 'copyright' file.
-*
-* 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 3
-* 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, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <string.h>
-
-#include "applet-struct.h"
-#include "applet-desktops.h"
-#include "applet-draw.h"
-#include "applet-load-icons.h"
-
-
-static void _load_desktop_icon (Icon *pIcon)
-{
-	int iWidth = pIcon->iImageWidth;
-	int iHeight = pIcon->iImageHeight;
-	
-	pIcon->pIconBuffer = cairo_dock_duplicate_surface (myData.pDesktopBgMapSurface,
-		myData.iSurfaceWidth, myData.iSurfaceHeight,
-		iWidth, iHeight);
-}
-
-static GList * _load_icons (void)
-{
-	GList *pIconList = NULL;
-	int iIndex = cd_switcher_compute_index (myData.switcher.iCurrentDesktop, myData.switcher.iCurrentViewportX, myData.switcher.iCurrentViewportY);
-	Icon *pIcon;
-	int i;
-	for (i = 0; i < myData.switcher.iNbViewportTotal; i ++)
-	{
-		pIcon = cairo_dock_create_dummy_launcher (NULL,
-			(myConfig.bMapWallpaper ? NULL : (myConfig.cDefaultIcon != NULL ? g_strdup (myConfig.cDefaultIcon) : g_strdup (MY_APPLET_SHARE_DATA_DIR"/default.svg"))),
-			NULL,
-			g_strdup_printf ("%d",i+1),
-			i);
-		if (i == iIndex)
-		{
-			pIcon->cName = g_strdup_printf ("%s (%d)", D_("Current"), i+1);
-			pIcon->bHasIndicator = TRUE;
-			pIcon->fAlpha = .7;
-		}
-		else
-		{
-			pIcon->cName = (i < myConfig.iNbNames ? g_strdup (myConfig.cDesktopNames[i]) : g_strdup_printf ("%s %d", D_("Desktop"), i+1));
-			pIcon->bHasIndicator = FALSE;
-			pIcon->fAlpha = 1.;
-		}
-		pIcon->cParentDockName = g_strdup (myIcon->cName);
-		
-		if (myConfig.bMapWallpaper)
-		{
-			pIcon->iface.load_image = _load_desktop_icon;
-		}
-		
-		pIconList = g_list_append (pIconList, pIcon);
-	}
-	
-	return pIconList;
-}
-
-
-
-void cd_switcher_load_icons (void)
-{
-	CD_APPLET_DELETE_MY_ICONS_LIST;
-	cairo_surface_destroy (myData.pDesktopBgMapSurface);
-	myData.pDesktopBgMapSurface = NULL;
-	cairo_surface_destroy (myData.pDefaultMapSurface);
-	myData.pDefaultMapSurface = NULL;
-	
-	if (myConfig.bMapWallpaper)
-	{
-		cd_switcher_load_desktop_bg_map_surface ();
-	}
-	if (myData.pDesktopBgMapSurface == NULL)
-	{
-		cd_switcher_load_default_map_surface ();
-	}
-	
-	if (myConfig.bCompactView)
-	{
-		if (myIcon->pSubDock != NULL)  // si on est passe de expanded a compact, le sous-dock vide reste.
-		{
-			cairo_dock_destroy_dock (myIcon->pSubDock, myIcon->cName);
-			myIcon->pSubDock = NULL;
-		}
-		if (myDesklet)
-		{
-			CD_APPLET_SET_DESKLET_RENDERER ("Simple");
-			myDesklet->render_bounding_box = cd_switcher_draw_desktops_bounding_box;  // pour le picking du bureau clique.
-		}
-	}
-	else
-	{
-		//\_______________________ On cree la liste des icones de prevision.
-		GList *pIconList = _load_icons ();
-		
-		//\_______________________ On charge la nouvelle liste.
-		CD_APPLET_LOAD_MY_ICONS_LIST (pIconList, myConfig.cRenderer, "Slide", NULL);
-		
-		//\_______________________ On peint les icones.
-		///cd_switcher_trigger_paint_icons ();
-	}
-}
-
-/**void cd_switcher_paint_icons (void)
-{
-	//\_______________________ On applique la surface.
-	CairoContainer *pContainer = CD_APPLET_MY_ICONS_LIST_CONTAINER;
-	GList *pIconList = CD_APPLET_MY_ICONS_LIST;
-	if (pIconList == NULL)
-		return ;
-	
-	cairo_surface_t *pSurface = NULL;
-	double fZoomX, fZoomY;
-	Icon *pFirstIcon = pIconList->data;
-	
-	int iWidth, iHeight;
-	cairo_dock_get_icon_extent (pFirstIcon, &iWidth, &iHeight);
-	int _iWidth, _iHeight;
-	CD_APPLET_GET_MY_ICON_EXTENT (&_iWidth, &_iHeight);
-	
-	if (myConfig.bMapWallpaper)
-	{
-		cd_switcher_draw_main_icon();
-		pSurface = myData.pDesktopBgMapSurface;
-		fZoomX = (double)iWidth / _iWidth;
-		fZoomY = (double)iHeight / _iHeight;
-	
-	}
-	if (pSurface == NULL)
-	{
-		pSurface = myData.pDefaultMapSurface;
-		fZoomX = (double)iWidth / _iWidth;
-		fZoomY = (double)iHeight / _iHeight;
-	}
-	
-	cairo_t *pIconContext;
-	GList* ic;
-	Icon *icon;
-	for (ic = pIconList; ic != NULL; ic = ic->next)
-	{
-		icon = ic->data;
-		//g_print (" (%.2f; %.2f) %.2fx%.2f\n", icon->fDrawX, icon->fDrawY, icon->fWidth, icon->fHeight);
-		pIconContext = cairo_create (icon->pIconBuffer);
-		cairo_scale (pIconContext,
-			fZoomX,
-			fZoomY);
-
-		cairo_dock_set_icon_surface_with_reflect (pIconContext, pSurface, icon, pContainer);
-		cairo_destroy (pIconContext);
-	}
-}
-
-static gboolean _paint_icons (gpointer data)
-{
-	CD_APPLET_ENTER;
-	if (! myConfig.bCompactView)
-		cd_switcher_paint_icons ();
-	myData.iSidPainIcons = 0;
-	CD_APPLET_LEAVE (FALSE);
-}
-void cd_switcher_trigger_paint_icons (void)
-{
-	if (myData.iSidPainIcons != 0)  // on la lance en idle, car les icones sont chargees en idle.
-		g_source_remove (myData.iSidPainIcons);
-	myData.iSidPainIcons = g_idle_add ((GSourceFunc)_paint_icons, NULL);
-}*/
-
-
-void cd_switcher_load_desktop_bg_map_surface (void)
-{
-	// get the background surface
-	CairoDockDesktopBackground *db = cairo_dock_get_desktop_background (FALSE);  // FALSE <=> sans texture.
-	cairo_surface_t *pBgSurface = cairo_dock_get_desktop_bg_surface (db);
-	
-	if (myData.pDesktopBgMapSurface != NULL)
-		cairo_surface_destroy (myData.pDesktopBgMapSurface);
-	if (pBgSurface == NULL)
-	{
-		cd_warning ("couldn't get the wallpaper");
-		myData.pDesktopBgMapSurface = NULL;
-		cairo_dock_destroy_desktop_background (db);
-		return ;
-	}
-	
-	// load it at a decent size.
-	if (myDock)
-	{
-		CD_APPLET_GET_MY_ICON_EXTENT (&myData.iSurfaceWidth, &myData.iSurfaceHeight);
-	}
-	else
-	{
-		myData.iSurfaceWidth = myContainer->iWidth / myData.switcher.iNbViewportTotal;
-		myData.iSurfaceHeight = myContainer->iHeight / myData.switcher.iNbViewportTotal;
-	}
-	g_print ("%s (%dx%d)\n", __func__, myData.iSurfaceWidth, myData.iSurfaceHeight);
-	
-	myData.pDesktopBgMapSurface = cairo_dock_duplicate_surface (pBgSurface,
-		g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL], g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL],
-		myData.iSurfaceWidth, myData.iSurfaceHeight);
-	
-	cairo_dock_destroy_desktop_background (db);
-}
-
-void cd_switcher_load_default_map_surface (void)
-{
-	if (myData.pDefaultMapSurface != NULL)
-		cairo_surface_destroy (myData.pDefaultMapSurface);
-	if (myDock)
-	{
-		CD_APPLET_GET_MY_ICON_EXTENT (&myData.iSurfaceWidth, &myData.iSurfaceHeight);
-	}
-	else
-	{
-		myData.iSurfaceWidth = myContainer->iWidth / myData.switcher.iNbViewportTotal;
-		myData.iSurfaceHeight = myContainer->iHeight / myData.switcher.iNbViewportTotal;
-	}
-	g_print ("%s (%dx%d)\n", __func__, myData.iSurfaceWidth, myData.iSurfaceHeight);
-	myData.pDefaultMapSurface = cairo_dock_create_surface_from_image_simple (myConfig.cDefaultIcon,
-		myData.iSurfaceWidth,
-		myData.iSurfaceHeight);
-}

=== removed file '.pc/applied-patches'
--- .pc/applied-patches	2011-11-05 21:55:39 +0000
+++ .pc/applied-patches	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-01-removed-useless-g_print.patch

=== modified file 'Animated-icons/data/Animated-icons.conf.in' (properties changed: +x to -x)
--- Animated-icons/data/Animated-icons.conf.in	2011-08-09 18:08:08 +0000
+++ Animated-icons/data/Animated-icons.conf.in	2012-02-14 14:04:19 +0000
@@ -28,15 +28,6 @@
 #i+[1;5] Number of times the animation will play:
 nb rounds applis = 1
 
-#F-[when clicking on an applet]
-frame_applet =
-
-#V+[Bounce;Rotate;Blink;Pulse;Wobbly;Wave;Spot] Effects used on applets:
-click applets = 0
-
-#i+[1;5] Number of times the animation will play:
-nb rounds applets = 1
-
 
 #[@animated_iconsdatadir@/icon-rotation.png]
 [Rotation]

=== modified file 'Animated-icons/src/applet-config.c'
--- Animated-icons/src/applet-config.c	2011-04-20 20:46:51 +0000
+++ Animated-icons/src/applet-config.c	2012-02-14 14:04:19 +0000
@@ -49,11 +49,6 @@
 		(int *)myConfig.iEffectsOnClick[CAIRO_DOCK_APPLI]);
 	myConfig.iNbRoundsOnClick[CAIRO_DOCK_APPLI] = CD_CONFIG_GET_INTEGER ("Global", "nb rounds applis");
 	
-	CD_CONFIG_GET_INTEGER_LIST ("Global", "click applets", CD_ANIMATIONS_NB_EFFECTS,
-		(int *)myConfig.iEffectsOnClick[CAIRO_DOCK_APPLET]);
-	myConfig.iNbRoundsOnClick[CAIRO_DOCK_APPLET] = CD_CONFIG_GET_INTEGER ("Global", "nb rounds applets");
-	
-	
 	myConfig.iRotationDuration = CD_CONFIG_GET_INTEGER ("Rotation", "duration");
 	myConfig.bContinueRotation = CD_CONFIG_GET_BOOLEAN ("Rotation", "continue");
 	myConfig.iMeshType = CD_CONFIG_GET_INTEGER ("Rotation", "mesh");

=== modified file 'Animated-icons/src/applet-pulse.c'
--- Animated-icons/src/applet-pulse.c	2010-08-10 00:05:57 +0000
+++ Animated-icons/src/applet-pulse.c	2012-02-14 14:04:19 +0000
@@ -86,7 +86,8 @@
 	else
 		cairo_translate (pCairoContext, pIcon->fHeight * pIcon->fScale * (1 - fScaleFactor) / 2, pIcon->fWidth * pIcon->fScale * (1 - fScaleFactor) / 2);
 	
-	cairo_dock_set_icon_scale_on_context (pCairoContext, pIcon, pDock->container.bIsHorizontal, pDock->container.fRatio * fScaleFactor, pDock->container.bDirectionUp);
+	cairo_dock_set_icon_scale_on_context (pCairoContext, pIcon, pDock->container.bIsHorizontal, 1., pDock->container.bDirectionUp);
+	cairo_scale (pCairoContext, fScaleFactor, fScaleFactor);
 	
 	cairo_set_source_surface (pCairoContext, pIcon->pIconBuffer, 0.0, 0.0);
 	cairo_paint_with_alpha (pCairoContext, pData->fPulseAlpha * pIcon->fAlpha);

=== modified file 'Animated-icons/src/applet-rays.c'
--- Animated-icons/src/applet-rays.c	2009-10-05 19:27:17 +0000
+++ Animated-icons/src/applet-rays.c	2012-02-14 14:04:19 +0000
@@ -28,8 +28,10 @@
 {
 	if (myData.iRaysTexture == 0)
 		myData.iRaysTexture = cd_animations_load_rays_texture ();
-	double fMaxScale = cairo_dock_get_max_scale (CAIRO_CONTAINER (pDock));
-	CairoParticleSystem *pRaysParticleSystem = cairo_dock_create_particle_system (myConfig.iNbRaysParticles, myData.iRaysTexture, pIcon->fWidth, pIcon->fHeight * fMaxScale);
+	CairoParticleSystem *pRaysParticleSystem = cairo_dock_create_particle_system (myConfig.iNbRaysParticles,
+		myData.iRaysTexture,
+		pIcon->fWidth,
+		pDock->container.bIsHorizontal ? pIcon->iImageHeight : pIcon->iImageWidth);
 	pRaysParticleSystem->dt = dt;
 	pRaysParticleSystem->bDirectionUp = (pDock->container.bIsHorizontal ? pDock->container.bDirectionUp : ! pDock->container.bDirectionUp);
 	pRaysParticleSystem->bAddLuminance = TRUE;

=== modified file 'Animated-icons/src/applet-rotation.c'
--- Animated-icons/src/applet-rotation.c	2011-04-20 20:46:51 +0000
+++ Animated-icons/src/applet-rotation.c	2012-02-14 14:04:19 +0000
@@ -261,7 +261,7 @@
 			else
 			{
 				glTranslatef (0., fOffsetY, 0.);
-				//glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, myIconsParam.fReflectSize * pDock->container.fRatio, 1.);
+				//glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, 1.);
 			}
 			glScalef (1., -1., 1.);
 		}
@@ -270,12 +270,12 @@
 			if (pDock->container.bDirectionUp)
 			{
 				glTranslatef (fOffsetY, 0., 0.);
-				//glScalef (- myIconsParam.fReflectSize * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
+				//glScalef (- pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
 			}
 			else
 			{
 				glTranslatef (- fOffsetY, 0., 0.);
-				//glScalef (myIconsParam.fReflectSize * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
+				//glScalef (pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
 			}
 			glScalef (-1., 1., 1.);
 		}

=== modified file 'Animated-icons/src/applet-spot.c'
--- Animated-icons/src/applet-spot.c	2011-04-20 20:46:51 +0000
+++ Animated-icons/src/applet-spot.c	2012-02-14 14:04:19 +0000
@@ -51,7 +51,7 @@
 		glRotatef (90, 0., 0., 1.);
 	double fY = (- pIcon->fHeight + CD_ANIMATIONS_SPOT_HEIGHT) * pIcon->fScale/2;  // * fRadiusFactor
 	if (pDock->container.bUseReflect)
-		fY -= MIN (myIconsParam.fReflectSize, CD_ANIMATIONS_SPOT_HEIGHT/2);
+		fY -= MIN (pDock->iIconSize * myIconsParam.fReflectHeightRatio, CD_ANIMATIONS_SPOT_HEIGHT/2);
 	if (! pDock->container.bDirectionUp)
 		fY = -fY;
 	glTranslatef (0., fY, 0.);
@@ -81,7 +81,7 @@
 		glRotatef (90, 0., 0., 1.);
 	double fY = CD_ANIMATIONS_SPOT_HEIGHT * (1 + cos (G_PI * fHaloRotationAngle / 180.))/2 - pIcon->fHeight * pIcon->fScale/2;  // * fRadiusFactor
 	if (pDock->container.bUseReflect)
-		fY -= MIN (myIconsParam.fReflectSize, CD_ANIMATIONS_SPOT_HEIGHT/2);
+		fY -= MIN (pDock->iIconSize * myIconsParam.fReflectHeightRatio, CD_ANIMATIONS_SPOT_HEIGHT/2);
 	if (! pDock->container.bDirectionUp)
 		fY = -fY;
 	double fX = .9 * pIcon->fWidth * pIcon->fScale/2;  // * fRadiusFactor
@@ -115,7 +115,7 @@
 		glRotatef (90, 0., 0., 1.);
 	double fY = (- pIcon->fHeight + CD_ANIMATIONS_SPOT_HEIGHT/2 + pIcon->fHeight * fRadiusFactor) * pIcon->fScale/2;  // CD_ANIMATIONS_SPOT_HEIGHT/2 * fRadiusFactor
 	if (pDock->container.bUseReflect)
-		fY -= MIN (myIconsParam.fReflectSize, CD_ANIMATIONS_SPOT_HEIGHT/2);
+		fY -= MIN (pDock->iIconSize * myIconsParam.fReflectHeightRatio, CD_ANIMATIONS_SPOT_HEIGHT/2);
 	if (! pDock->container.bDirectionUp)
 		fY = -fY;
 	glTranslatef (0., fY, 0.);

=== modified file 'Animated-icons/src/applet-unfold.c'
--- Animated-icons/src/applet-unfold.c	2011-09-26 12:56:12 +0000
+++ Animated-icons/src/applet-unfold.c	2012-02-14 14:04:19 +0000
@@ -31,7 +31,7 @@
 	int w, h;
 	cairo_dock_get_icon_extent (pIcon, &w, &h);
 	double f = 1. - pIcon->pSubDock->fFoldingFactor;
-	double fMaxScale = cairo_dock_get_max_scale (CAIRO_CONTAINER (pDock));
+	double fMaxScale = (pIcon->fHeight != 0 ? (pDock->container.bIsHorizontal ? pIcon->iImageHeight : pIcon->iImageWidth) / pIcon->fHeight : 1.);
 	double z = pIcon->fScale / fMaxScale * pDock->container.fRatio;
 	
 	//\______________ On dessine la boite derriere.
@@ -55,11 +55,6 @@
 	cairo_scale(pCairoContext,
 		(double) w / g_pBoxBelowBuffer.iWidth,
 		(double) h / g_pBoxBelowBuffer.iHeight);
-	/**cairo_set_source_surface (pCairoContext,
-		g_pBoxBelowBuffer.pSurface,
-		0.,
-		0.);
-	cairo_paint (pCairoContext);*/
 	cairo_dock_draw_surface (pCairoContext,
 		g_pBoxBelowBuffer.pSurface,
 		g_pBoxBelowBuffer.iWidth, g_pBoxBelowBuffer.iHeight,
@@ -80,11 +75,9 @@
 		if (! pDock->container.bDirectionUp)
 			cairo_translate (pCairoContext, .2*h, 0.);
 	}
-	cairo_scale(pCairoContext,
-		.8,
-		.8);
 	int i;
 	double dx, dy;
+	int wi, hi;
 	Icon *icon;
 	GList *ic;
 	for (ic = pIcon->pSubDock->icons, i = 0; ic != NULL && i < 3; ic = ic->next, i++)
@@ -112,11 +105,18 @@
 			else
 				dx = - (.1*i - f*1.5) * h/z;
 		}
+		
+		cairo_dock_get_icon_extent (icon, &wi, &hi);
+		
+		cairo_save (pCairoContext);
+		cairo_translate (pCairoContext, dx, dy);
+		cairo_scale (pCairoContext, .8 * w / wi, .8 * h / hi);
 		cairo_set_source_surface (pCairoContext,
 			icon->pIconBuffer,
-			dx,
-			dy);
+			0,
+			0);
 		cairo_paint_with_alpha (pCairoContext, 1. - f);
+		cairo_restore (pCairoContext);
 	}
 	cairo_restore (pCairoContext);
 	
@@ -125,11 +125,6 @@
 	cairo_scale(pCairoContext,
 		(double) w / g_pBoxAboveBuffer.iWidth,
 		(double) h / g_pBoxAboveBuffer.iHeight);
-	/**cairo_set_source_surface (pCairoContext,
-		g_pBoxAboveBuffer.pSurface,
-		0.,
-		0.);
-	cairo_paint (pCairoContext);*/
 	cairo_dock_draw_surface (pCairoContext,
 		g_pBoxAboveBuffer.pSurface,
 		g_pBoxAboveBuffer.iWidth, g_pBoxAboveBuffer.iHeight,
@@ -139,9 +134,9 @@
 	cairo_restore (pCairoContext);
 	
 	//\_____________________ On dessine son reflet.
-	cairo_dock_draw_icon_reflect_cairo (pIcon, pDock, pCairoContext);
+	cairo_restore (pCairoContext);  // come back to the original context
 	
-	cairo_restore (pCairoContext);
+	cairo_dock_draw_icon_reflect_cairo (pIcon, CAIRO_CONTAINER (pDock), pCairoContext);
 }
 
 
@@ -151,7 +146,7 @@
 	int w, h;
 	cairo_dock_get_icon_extent (pIcon, &w, &h);
 	double f = 1. - pIcon->pSubDock->fFoldingFactor;
-	double fMaxScale = cairo_dock_get_max_scale (CAIRO_CONTAINER (pDock));
+	double fMaxScale = (pIcon->fHeight != 0 ? (pDock->container.bIsHorizontal ? pIcon->iImageHeight : pIcon->iImageWidth) / pIcon->fHeight : 1.);
 	double z = pIcon->fScale / fMaxScale * pDock->container.fRatio;
 	
 	//\______________ On dessine la boite derriere.

=== modified file 'Animated-icons/src/applet-wave.c'
--- Animated-icons/src/applet-wave.c	2011-04-20 20:46:51 +0000
+++ Animated-icons/src/applet-wave.c	2012-02-14 14:04:19 +0000
@@ -186,8 +186,8 @@
 	{
 		glPushMatrix ();
 		double x0, y0, x1, y1;
-		double fReflectRatio = myIconsParam.fReflectSize * pDock->container.fRatio / pIcon->fHeight / pIcon->fScale;
-		double fOffsetY = pIcon->fHeight * pIcon->fScale/2 + (myIconsParam.fReflectSize/2 + pIcon->fDeltaYReflection) * pDock->container.fRatio;
+		double fReflectRatio = pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio / pIcon->fHeight / pIcon->fScale;
+		double fOffsetY = pIcon->fHeight * pIcon->fScale/2 + (pDock->iIconSize * myIconsParam.fReflectHeightRatio/2 + pIcon->fDeltaYReflection) * pDock->container.fRatio;
 		if (pDock->container.bIsHorizontal)
 		{
 			if (pDock->container.bDirectionUp)
@@ -203,7 +203,7 @@
 			else
 			{
 				glTranslatef (0., fOffsetY, 0.);
-				glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, myIconsParam.fReflectSize * pDock->container.fRatio, 1.);
+				glScalef (pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, 1.);
 				x0 = 0.;
 				y0 = fReflectRatio;
 				x1 = 1.;
@@ -215,7 +215,7 @@
 			if (pDock->container.bDirectionUp)
 			{
 				glTranslatef (fOffsetY, 0., 0.);
-				glScalef (- myIconsParam.fReflectSize * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
+				glScalef (- pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
 				x0 = 1. - fReflectRatio;
 				y0 = 0.;
 				x1 = 1.;
@@ -224,7 +224,7 @@
 			else
 			{
 				glTranslatef (- fOffsetY, 0., 0.);
-				glScalef (myIconsParam.fReflectSize * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
+				glScalef (pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio, pIcon->fWidth * pIcon->fWidthFactor * pIcon->fScale, 1.);
 				x0 = fReflectRatio;
 				y0 = 0.;
 				x1 = 0.;

=== modified file 'Animated-icons/src/applet-wobbly.c'
--- Animated-icons/src/applet-wobbly.c	2011-08-09 18:08:08 +0000
+++ Animated-icons/src/applet-wobbly.c	2012-02-14 14:04:19 +0000
@@ -422,8 +422,8 @@
 	{
 		glPushMatrix ();
 		double x0, y0, x1, y1;
-		double fReflectRatio = myIconsParam.fReflectSize * pDock->container.fRatio / pIcon->fHeight / pIcon->fScale;
-		///double fOffsetY = pIcon->fHeight * pIcon->fScale/2 + (myIconsParam.fReflectSize/2 + pIcon->fDeltaYReflection) * pDock->container.fRatio;
+		double fReflectRatio = pDock->iIconSize * myIconsParam.fReflectHeightRatio * pDock->container.fRatio / pIcon->fHeight / pIcon->fScale;
+		///double fOffsetY = pIcon->fHeight * pIcon->fScale/2 + (pDock->iIconSize * myIconsParam.fReflectHeightRatio/2 + pIcon->fDeltaYReflection) * pDock->container.fRatio;
 		double fOffsetY = pIcon->fHeight * pIcon->fScale + pIcon->fDeltaYReflection;
 		if (pDock->container.bIsHorizontal)
 		{
@@ -498,7 +498,7 @@
 		//	0, 1, 8, 2, &pColorPts[0][0][0]);
 		glMap2f(GL_MAP2_COLOR_4, 0.0, 1.0, 4, 4,
 			0.0, 1.0, 16, 4, &colorPoints[0][0][0]);*/
-		glEvalMesh2(GL_FILL, 0, myConfig.iNbGridNodes, myConfig.iNbGridNodes*0, myConfig.iNbGridNodes*1);
+		glEvalMesh2(GL_FILL, 0, myConfig.iNbGridNodes, 0, myConfig.iNbGridNodes);
 		
 		/**glActiveTextureARB(GL_TEXTURE1_ARB);
 		glDisable(GL_TEXTURE_2D);

=== modified file 'Applets.stable'
--- Applets.stable	2011-09-26 12:56:12 +0000
+++ Applets.stable	2012-02-14 14:04:19 +0000
@@ -61,6 +61,8 @@
 Composite-Manager
 Impulse
 ###All other applets are considered to be either not enough functionnal, buggy/untested, or under heavy development.
+#Sound-Menu
+#Application-Menu
 #Scooby-Do
 #Network-Monitor
 #Disks

=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2011-10-09 00:19:16 +0000
+++ CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -6,13 +6,14 @@
 include (CheckIncludeFiles)
 include (CheckFunctionExists)
 include (CheckSymbolExists)
+include ("${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/GNUInstallDirs.cmake")
 
 ########### project ###############
 
 project ("cairo-dock-plugins")
-set (VERSION "2.4.0~2")
+set (VERSION "3.0.0.0beta1")
 
-add_definitions (-std=c99 -Wextra -Wwrite-strings -Wuninitialized -Werror-implicit-function-declaration) # removed for stable versions: -Wstrict-prototypes #-Wunreachable-code -Wno-unused-parameter -Wall
+add_definitions (-std=c99 -Wextra -Wwrite-strings -Wuninitialized -Werror-implicit-function-declaration -Wstrict-prototypes) # removed for stable versions: -Wstrict-prototypes #-Wunreachable-code -Wno-unused-parameter -Wall
 if (NOT ${CMAKE_BUILD_TYPE})
 	add_definitions (-O3)
 endif()
@@ -48,17 +49,27 @@
 
 # get plug-ins install dir
 execute_process(
-    COMMAND pkg-config gldi --variable=pluginsdir		# /usr/lib/cairo-dock
+    COMMAND pkg-config gldi --variable=pluginsdir  # /usr/lib/cairo-dock # or /usr/lib/x86_64-linux-gnu/cairo-dock
     OUTPUT_VARIABLE pluginsdir)
-STRING (REGEX REPLACE "\n" "" pluginsdir ${pluginsdir})  # la commande rajoute un retour chariot ...
+STRING (REGEX REPLACE "\n" "" pluginsdir ${pluginsdir})  # remove the \n
 # get plug-ins data dir
 execute_process(
-    COMMAND pkg-config gldi --variable=pluginsdatadir	# /usr/share/cairo-dock/plug-ins
+    COMMAND pkg-config gldi --variable=pluginsdatadir  # /usr/share/cairo-dock/plug-ins
     OUTPUT_VARIABLE pluginsdatadir)
 STRING (REGEX REPLACE "\n" "" pluginsdatadir ${pluginsdatadir})
+# get prefix dir
+execute_process(
+    COMMAND pkg-config gldi --variable=prefix  # /usr/share/cairo-dock/plug-ins
+    OUTPUT_VARIABLE prefix)
+STRING (REGEX REPLACE "\n" "" prefix ${prefix})
+# get GTK version (must be the same as the core, as GTK2 and GTK3 can't coexist at runtime)
+execute_process(
+    COMMAND pkg-config gldi --variable=gtkversion  # 2 or 3
+    OUTPUT_VARIABLE gtkversion)
+STRING (REGEX REPLACE "\n" "" gtkversion ${gtkversion})
 # check that version matches with the core
 execute_process(
-    COMMAND pkg-config --modversion gldi			# 2.2.0-3
+    COMMAND pkg-config --modversion gldi  # 2.2.0-3
     OUTPUT_VARIABLE dock_version)
 STRING (REGEX REPLACE "\n" "" dock_version ${dock_version})
 if (NOT "${dock_version}" STREQUAL "${VERSION}")		# Version
@@ -69,18 +80,13 @@
 	endif ()
 endif()
 
-#if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT "${FORCE_LIB64}" STREQUAL "")  # 64bits and force install in lib64
-#	set (libname "lib64")
-#else()
-#	set (libname "lib${LIB_SUFFIX}")
-#endif()
-#set (libdir "${CMAKE_INSTALL_PREFIX}/${libname}/cairo-dock")	# /usr/lib
-
 # check that installation dir matches with the core
-GET_FILENAME_COMPONENT(libdir "${pluginsdir}/.." ABSOLUTE)  # /usr/lib
-GET_FILENAME_COMPONENT(prefix "${pluginsdir}/../.." ABSOLUTE)  # /usr
-if (NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "${prefix}")
-	message (STATUS "It seems that the current CMAKE_INSTALL_PREFIX flag is not the same that you have used with the core.")
+GET_FILENAME_COMPONENT(libdir "${pluginsdir}/.." ABSOLUTE)  # /usr/lib # or /usr/lib/x86_64-linux-gnu
+GET_FILENAME_COMPONENT(datadir "${pluginsdatadir}/../.." ABSOLUTE)  # /usr/share
+if (NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "${prefix}"
+		OR NOT "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" STREQUAL "${libdir}"
+		OR NOT "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}" STREQUAL "${datadir}")
+	message (STATUS "It seems that the current CMAKE_INSTALL_{PREFIX,LIBDIR,DATAROOTDIR} flags are not the same that you have used with the core.")
 	message (STATUS " It will be replaced by this value: ${prefix}")
 	message (WARNING "Plug-ins should be installed in the same directory as the core, that is to say in ${pluginsdir}")
 	set (CMAKE_INSTALL_PREFIX "${prefix}")
@@ -89,8 +95,8 @@
 
 # set internationalisation
 set (GETTEXT_PLUGINS "cairo-dock-plugins")
-set (localedir "${CMAKE_INSTALL_PREFIX}/share/locale")
-set (gaugesdir "${CMAKE_INSTALL_PREFIX}/share/cairo-dock/gauges")
+set (localedir "${prefix}/${CMAKE_INSTALL_LOCALEDIR}")
+set (gaugesdir "${datadir}/cairo-dock/gauges")
 
 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules/")  # additionnal FindPackage files
 
@@ -102,14 +108,16 @@
 
 message ("")
 message (STATUS "=====================")
-message (STATUS "Check dependancies...")
+message (STATUS "Check dependencies...")
 message (STATUS "=====================")
 message ("")
 
-pkg_check_modules ("PACKAGE" REQUIRED "gtk+-2.0" "gthread-2.0" "cairo" "librsvg-2.0" "dbus-1" "dbus-glib-1" "libxml-2.0" "gtkglext-1.0")
-pkg_check_modules ("GLDI" REQUIRED "gldi")  # we don't want to link with gldi
+pkg_check_modules ("PACKAGE" REQUIRED "cairo" "librsvg-2.0" "dbus-1" "dbus-glib-1" "libxml-2.0")
+#pkg_check_modules ("PACKAGE" REQUIRED "ig")
+pkg_check_modules ("GLDI" REQUIRED "gldi")  # we don't want to link with gldi, so we check it separately.
 set (PACKAGE_INCLUDE_DIRS "${GLDI_INCLUDE_DIRS}")
-#message (STATUS "PACKAGE: ${PACKAGE_INCLUDE_DIRS}")
+
+add_definitions (-DGTK_DISABLE_DEPRECATED="1")
 
 #############    GLIB    #################
 pkg_check_modules (GLIB glib-2.0)
@@ -119,6 +127,127 @@
 	STRING (REGEX REPLACE ".*\\." "" GLIB_NANO "${GLIB_VERSION}") # 2.28.3 => 3
 	STRING (REGEX REPLACE "-.*" "" GLIB_NANO "${GLIB_NANO}")
 
+############# INDICATOR-APPLET #################
+message (STATUS "> Indicator-Applet:")
+# Note: the names of dbusmenu-glib, dbusmenu-gtk and indicator have changed...
+set (DBUSMENU_MODULE dbusmenu-glib-0.4)
+pkg_check_modules (DBUSMENU ${DBUSMENU_MODULE})
+if (NOT "${DBUSMENU_FOUND}")
+	set (DBUSMENU_MODULE dbusmenu-glib)
+	pkg_check_modules (DBUSMENU ${DBUSMENU_MODULE})
+endif()
+
+if ("${gtkversion}" STREQUAL "2")
+	set (DBUSMENU_GTK_MODULE dbusmenu-gtk-0.4)
+else()
+	set (DBUSMENU_GTK_MODULE dbusmenu-gtk3-0.4)
+endif()
+pkg_check_modules (DBUSMENU_GTK ${DBUSMENU_GTK_MODULE})
+if (NOT "${DBUSMENU_GTK_FOUND}")
+	if ("${gtkversion}" STREQUAL "2")
+		set (DBUSMENU_GTK_MODULE dbusmenu-gtk)
+	else()
+		set (DBUSMENU_GTK_MODULE dbusmenu-gtk3)
+	endif()
+	pkg_check_modules (DBUSMENU_GTK ${DBUSMENU_GTK_MODULE})
+endif()
+
+if ("${gtkversion}" STREQUAL "2")
+	set (INDICATOR_APPLET_MODULE indicator-0.4)
+else()
+	set (INDICATOR_APPLET_MODULE indicator3-0.4)
+endif()
+pkg_check_modules (INDICATOR_APPLET ${INDICATOR_APPLET_MODULE})
+if ("${INDICATOR_APPLET_FOUND}" STREQUAL "1")
+	set (INDICATOR_APPLICATIONADDED_HAS_HINT 1) # now the ApplicationAdded signal (Status-Notifier) has a new parameter (hint) => https://code.launchpad.net/~ted/indicator-application/name-hints/+merge/67213
+	set (INDICATOR_NEW_VERSION 1)  # oneiric and newer
+else()
+	if ("${gtkversion}" STREQUAL "2")
+		set (INDICATOR_APPLET_MODULE indicator)
+	else()
+		set (INDICATOR_APPLET_MODULE indicator3)
+	endif()
+	pkg_check_modules (INDICATOR_APPLET ${INDICATOR_APPLET_MODULE})
+	set (INDICATOR_APPLICATIONADDED_HAS_HINT 0)
+endif()
+
+if ("${gtkversion}" STREQUAL "2")
+	set (IDO_MODULE libido-0.1)
+else()
+	set (IDO_MODULE libido3-0.1)
+endif()
+pkg_check_modules (IDO ${IDO_MODULE})
+
+if ("${INDICATOR_APPLET_FOUND}" STREQUAL "1" AND "${DBUSMENU_FOUND}" STREQUAL "1" AND "${DBUSMENU_GTK_FOUND}" STREQUAL "1")
+	STRING (REGEX REPLACE "\\..*" "" DBUSMENU_MAJOR "${DBUSMENU_VERSION}")
+	STRING (REGEX REPLACE "[0-9]*\\.([^ ]+)" "\\1" DBUSMENU_MINOR "${DBUSMENU_VERSION}")  # 0.1.7 => 1.7
+	STRING (REGEX REPLACE "\\.[0-9]*" "" DBUSMENU_MINOR "${DBUSMENU_MINOR}")
+	STRING (REGEX REPLACE ".*\\." "" DBUSMENU_NANO "${DBUSMENU_VERSION}")
+	STRING (REGEX REPLACE "-.*" "" DBUSMENU_NANO "${DBUSMENU_NANO}")
+
+	STRING (REGEX REPLACE "\\..*" "" DBUSMENU_GTK_MAJOR "${DBUSMENU_GTK_VERSION}")
+	STRING (REGEX REPLACE "[0-9]*\\.([^ ]+)" "\\1" DBUSMENU_GTK_MINOR "${DBUSMENU_GTK_VERSION}")  # 0.1.7 => 1.7
+	STRING (REGEX REPLACE "\\.[0-9]*" "" DBUSMENU_GTK_MINOR "${DBUSMENU_GTK_MINOR}")
+	STRING (REGEX REPLACE ".*\\." "" DBUSMENU_GTK_NANO "${DBUSMENU_GTK_VERSION}")
+	STRING (REGEX REPLACE "-.*" "" DBUSMENU_GTK_NANO "${DBUSMENU_GTK_NANO}")
+
+	STRING (REGEX REPLACE "\\..*" "" INDICATOR_MAJOR "${INDICATOR_APPLET_VERSION}")
+	STRING (REGEX REPLACE "[0-9]*\\.([^ ]+)" "\\1" INDICATOR_MINOR "${INDICATOR_APPLET_VERSION}")  # 0.1.7 => 1.7
+	STRING (REGEX REPLACE "\\.[0-9]*" "" INDICATOR_MINOR "${INDICATOR_MINOR}")
+	STRING (REGEX REPLACE ".*\\." "" INDICATOR_NANO "${INDICATOR_APPLET_VERSION}")
+	STRING (REGEX REPLACE "-.*" "" INDICATOR_NANO "${INDICATOR_NANO}")
+
+	if (${DBUSMENU_GTK_MAJOR} GREATER 0 OR ${DBUSMENU_GTK_MINOR} GREATER 5 OR (${DBUSMENU_GTK_MINOR} EQUAL 5 AND ${DBUSMENU_GTK_NANO} GREATER 89))
+		set (DBUSMENU_GTK3_NEW 1)
+	endif()
+
+	if ("${INDICATOR_NEW_VERSION}" STREQUAL "1")  # oneiric and newer
+		if ("${gtkversion}" STREQUAL "2")
+			execute_process(
+				COMMAND pkg-config --variable=iconsdir indicator-0.4
+				OUTPUT_VARIABLE INDICATORICONSDIR)
+		else()
+			execute_process(
+				COMMAND pkg-config --variable=iconsdir indicator3-0.4
+				OUTPUT_VARIABLE INDICATORICONSDIR)
+		endif()
+	else()
+		if ("${gtkversion}" STREQUAL "2")
+			execute_process(
+				COMMAND pkg-config --variable=iconsdir indicator
+				OUTPUT_VARIABLE INDICATORICONSDIR)
+		else()
+			execute_process(
+				COMMAND pkg-config --variable=iconsdir indicator3
+				OUTPUT_VARIABLE INDICATORICONSDIR)
+		endif()
+	endif()
+	STRING (REGEX REPLACE "\n" "" INDICATORICONSDIR ${INDICATORICONSDIR})  # la commande rajoute un retour chariot ...
+	add_subdirectory (Indicator-applet)
+	set (with_indicator "yes")
+else()
+	message (WARNING "These modules are required to compile Indicators applet (MeMenu, Messaging-Menu, Sound-Control, Status-Notifier and Global-Menu): ${INDICATOR_APPLET_MODULE}(-0.4), ${IDO_MODULE}, ${DBUSMENU_MODULE}(-0.4), ${DBUSMENU_GTK_MODULE}(-0.4)")
+	set (MODULES_MISSING "${MODULES_MISSING} ${INDICATOR_APPLET_MODULE}(-0.4) (${IDO_MODULE}) ${DBUSMENU_MODULE}(-0.4) ${DBUSMENU_GTK_MODULE}(-0.4)")
+endif()
+
+############# INDICATOR-NAME #################
+message (STATUS "> Indicator Names:")
+set (INDICATOR_OLD_NAMES 0)
+if ("${force_old_indicator_names}" STREQUAL "yes")
+	set (INDICATOR_OLD_NAMES 1)
+	message (STATUS "  Indicators: use old Ayatana Dbus names (forced)")
+#~ elseif ("${DISTRO_ID}" STREQUAL "Ubuntu")
+	#~ STRING (REGEX REPLACE "\\..*" "" DISTRO_RELEASE_MAJOR ${DISTRO_RELEASE})
+	#~ # message (STATUS "DISTRO_RELEASE_MAJOR: ${DISTRO_RELEASE_MAJOR}")
+	#~ if (${DISTRO_RELEASE_MAJOR} LESS 11)  # from 11.04, new names are used.
+		#~ set (INDICATOR_OLD_NAMES 1)
+		#~ message (STATUS "  Indicators: use old Ayatana Dbus names")
+	#~ endif()
+elseif ("${INDICATOR_APPLET_FOUND}" STREQUAL "1" AND NOT (${INDICATOR_MAJOR} GREATER 0 OR ${INDICATOR_MINOR} GREATER 3 OR (${INDICATOR_MINOR} EQUAL 3 AND ${INDICATOR_NANO} GREATER 20)))
+	set (INDICATOR_OLD_NAMES 1)  # maverick or older
+	message (STATUS "  Indicators: use old Ayatana Dbus names")
+endif()
+
 ############# ALSA_MIXER #################
 message (STATUS "> AlsaMixer:")
 set (with_alsa "no")
@@ -130,11 +259,15 @@
 		set (MODULES_MISSING "${MODULES_MISSING} alsa")
 	else()
 		set (GETTEXT_ALSA_MIXER ${GETTEXT_PLUGINS})
-		set (VERSION_ALSA_MIXER "1.1.1")
+		set (VERSION_ALSA_MIXER "2.0.0")
 		set (PACKAGE_ALSA_MIXER "cd-AlsaMixer")
 		set (with_alsa "yes")
 		set (alsa_mixerdatadir "${pluginsdatadir}/AlsaMixer")
 		configure_file (${CMAKE_CURRENT_SOURCE_DIR}/alsaMixer/data/AlsaMixer.conf.in ${CMAKE_CURRENT_BINARY_DIR}/alsaMixer/data/AlsaMixer.conf)
+		if ("${with_indicator}" STREQUAL "yes" AND "${IDO_FOUND}"
+			AND "${INDICATOR_OLD_NAMES}" STREQUAL "0")
+			set (with_soundmenu "yes")
+		endif()
 		add_subdirectory ("alsaMixer")
 	endif()
 endif()
@@ -151,7 +284,7 @@
 ############# CAIRO_PENGUIN #################
 message (STATUS "> Cairo Penguin:")
 set (GETTEXT_CAIRO_PENGUIN ${GETTEXT_PLUGINS})
-set (VERSION_CAIRO_PENGUIN "1.1.9")
+set (VERSION_CAIRO_PENGUIN "1.1.10")
 set (PACKAGE_CAIRO_PENGUIN "cd-Cairo-Penguin")
 set (cairo_penguinuserdirname "Cairo-Penguin")
 set (cairo_penguindatadir "${pluginsdatadir}/Cairo-Penguin")
@@ -161,7 +294,7 @@
 ############# CLIPPER #################
 message (STATUS "> Clipper:")
 set (GETTEXT_CLIPPER ${GETTEXT_PLUGINS})
-set (VERSION_CLIPPER "1.1.5")
+set (VERSION_CLIPPER "1.1.6")
 set (PACKAGE_CLIPPER "cd-Clipper")
 set (Clipperdatadir "${pluginsdatadir}/Clipper")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Clipper/data/Clipper.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Clipper/data/Clipper.conf)
@@ -178,7 +311,7 @@
 	set (MODULES_MISSING "${MODULES_MISSING} libical")
 endif()
 set (GETTEXT_CLOCK ${GETTEXT_PLUGINS})
-set (VERSION_CLOCK "2.1.4")
+set (VERSION_CLOCK "2.1.5")
 set (PACKAGE_CLOCK "cd-clock")
 set (clockuserdirname "clock")
 set (clockdatadir "${pluginsdatadir}/clock")
@@ -188,7 +321,7 @@
 ############# COMPOSITE_MANAGER #################
 message (STATUS "> Composite Manager:")
 set (GETTEXT_COMPOSITE_MANAGER ${GETTEXT_PLUGINS})
-set (VERSION_COMPOSITE_MANAGER "1.0.0")
+set (VERSION_COMPOSITE_MANAGER "1.0.1")
 set (PACKAGE_COMPOSITE_MANAGER "cd-Composite-Manager")
 set (composite_managerdatadir "${pluginsdatadir}/Composite-Manager")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Composite-Manager/data/Composite-Manager.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Composite-Manager/data/Composite-Manager.conf)
@@ -197,7 +330,10 @@
 ############# DBUS #################
 message (STATUS "> DBus:")
 message (STATUS " * Python:")
-find_program (PYTHON_EXECUTABLE python)
+find_program (PYTHON_EXECUTABLE python2)  # if python v3 is the default python interpreter (e.g. on ArchLinux), python2 program should exist and we have to use it...
+if ("${PYTHON_EXECUTABLE}" STREQUAL "" OR NOT EXISTS ${PYTHON_EXECUTABLE})
+	find_program (PYTHON_EXECUTABLE python)
+endif()
 EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import sys; print sys.version" OUTPUT_VARIABLE PYTHON_VERSION)
 if ("${PYTHON_VERSION}" STREQUAL "")
 	message (STATUS "Could not find Python, won't install Python interface.")
@@ -207,6 +343,7 @@
 else()
 	STRING (REGEX REPLACE "\n" "" PYTHON_VERSION ${PYTHON_VERSION})
 	message (STATUS "   Python Version: ${PYTHON_VERSION}")
+	message (STATUS "   Python executable program: ${PYTHON_EXECUTABLE}")
 	GET_FILENAME_COMPONENT(DEBIAN_VERSION /etc/debian_version ABSOLUTE)
 	if (EXISTS ${DEBIAN_VERSION})
 		message (STATUS "   will use '--install-layout deb' with 'python setup.py install'")
@@ -256,7 +393,7 @@
 endif()
 
 message (STATUS " * Vala:")
-# Valac is only riquired to convert vala files to C files.
+# Valac is only required to convert vala files to C files.
 #  So we can directly use produced files (c, h, vapi) without using valac.
 set (with_vala "yes")
 set (with_valac "no")
@@ -265,10 +402,11 @@
 
 if ("${WITH_VALA}" STREQUAL "no")
 	set (with_vala "no")
-# >= Glib 2.26
+# Glib < 2.26
 elseif (${GLIB_MAJOR} LESS 3 AND ${GLIB_MINOR} LESS 26)
 	set (with_vala "no")
-elseif (NOT "${VALAC_EXE}" STREQUAL "VALAC_EXE-NOTFOUND") # now it works with 0.10 and 0.11 (= next 0.12)
+elseif ( (NOT "${VALAC_EXE}" STREQUAL "VALAC_EXE-NOTFOUND")
+	AND (EXISTS ${VALAC_EXE}) ) # now it works with 0.10 and 0.11 (= next 0.12) # $VALAC_EXE may be the correct path, even if valac is not installed !
 	execute_process(COMMAND ${VALAC_EXE} "--version"
 		OUTPUT_VARIABLE "VALA_VERSION")
 	string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION})
@@ -296,7 +434,7 @@
 	endif()
 else()
 	message (STATUS "Could not find ValaC, won't build Vala interface with the version of your distribution.")
-	message (WARNING "This program is required to compile DBus applet with Python interface: valac (version > 0.10)")
+	message (WARNING "This program is required to compile DBus applet with Vala interface: valac (version > 0.10)")
 	set (PROGRAMS_MISSING "${PROGRAMS_MISSING} valac")
 endif()
 
@@ -331,7 +469,7 @@
 if ("${enable-disks}" STREQUAL "yes")
 	message (STATUS "> Disks:")
 	set (GETTEXT_DISKS ${GETTEXT_PLUGINS})
-	set (VERSION_DISKS "0.0.3")
+	set (VERSION_DISKS "0.0.4")
 	set (PACKAGE_DISKS "cd-disks")
 	set (with_disks "yes")
 	set (disksdatadir "${pluginsdatadir}/Disks")
@@ -342,7 +480,7 @@
 ############# DND2SHARE #################
 message (STATUS "> DND2Share:")
 set (GETTEXT_DND2SHARE ${GETTEXT_PLUGINS})
-set (VERSION_DND2SHARE "1.0.6")
+set (VERSION_DND2SHARE "1.0.7")
 set (PACKAGE_DND2SHARE "cd-dnd2share")
 set (dnd2sharedatadir "${pluginsdatadir}/dnd2share")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/dnd2share/data/dnd2share.conf.in ${CMAKE_CURRENT_BINARY_DIR}/dnd2share/data/dnd2share.conf)
@@ -362,7 +500,7 @@
 if ("${enable-doncky}" STREQUAL "yes")
 	message (STATUS "> Doncky:")
 	set (GETTEXT_DONCKY ${GETTEXT_PLUGINS})
-	set (VERSION_DONCKY "0.0.5")
+	set (VERSION_DONCKY "0.0.6")
 	set (PACKAGE_DONCKY "cd-doncky")
 	set (with_doncky "yes")
 	set (donckydatadir "${pluginsdatadir}/Doncky")
@@ -373,7 +511,7 @@
 ############# DROP INDICATOR #################
 message (STATUS "> Drop Indicator:")
 set (GETTEXT_DROP_INDICATOR ${GETTEXT_PLUGINS})
-set (VERSION_DROP_INDICATOR "1.1.4")
+set (VERSION_DROP_INDICATOR "1.1.5")
 set (PACKAGE_DROP_INDICATOR "cd-drop_indicator")
 set (drop_indicatordatadir "${pluginsdatadir}/drop-indicator")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/drop-indicator/data/drop_indicator.conf.in ${CMAKE_CURRENT_BINARY_DIR}/drop-indicator/data/drop_indicator.conf)
@@ -382,7 +520,7 @@
 ############# DUSTBIN #################
 message (STATUS "> Dustbin:")
 set (GETTEXT_DUSTBIN ${GETTEXT_PLUGINS})
-set (VERSION_DUSTBIN "2.3.2")
+set (VERSION_DUSTBIN "2.3.3")
 set (PACKAGE_DUSTBIN "cd-dustbin")
 set (dustbinuserdirname "dustbin")
 set (dustbindatadir "${pluginsdatadir}/dustbin")
@@ -392,7 +530,7 @@
 ############# FOLDERS #################
 message (STATUS "> Folders:")
 set (GETTEXT_FOLDERS ${GETTEXT_PLUGINS})
-set (VERSION_FOLDERS "0.2.2")
+set (VERSION_FOLDERS "0.2.3")
 set (PACKAGE_FOLDERS "cd-Folders")
 set (foldersdatadir "${pluginsdatadir}/Folders")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Folders/data/Folders.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Folders/data/Folders.conf)
@@ -402,14 +540,20 @@
 message (STATUS "> GMenu:")
 set (with_gmenu "no")
 if (NOT "${enable-gmenu}" STREQUAL "no")
-	pkg_check_modules (GMENU_PACKAGE libgnome-menu)
+	if ("${gtkversion}" STREQUAL "2")
+		set (GMENU_MODULE libgnome-menu)
+	else()
+		set (GMENU_MODULE libgnome-menu)
+		# set (GMENU_MODULE libgnome-menu-3.0) # TODO
+	endif()
+	pkg_check_modules (GMENU_PACKAGE ${GMENU_MODULE})
 	if ("${GMENU_PACKAGE_FOUND}" STREQUAL "")
-		message (STATUS "Could not find libgnome-menu; Cairo-Dock won't be built with GMenu applet.")
-		message (WARNING "This module is required to compile GMenu applet: libgnome-menu")
-		set (MODULES_MISSING "${MODULES_MISSING} libgnome-menu")
+		message (STATUS "Could not find ${GMENU_MODULE}; Cairo-Dock won't be built with GMenu applet.")
+		message (WARNING "This module is required to compile GMenu applet: ${GMENU_MODULE}")
+		set (MODULES_MISSING "${MODULES_MISSING} ${GMENU_MODULE}")
 	else()
 		set (GETTEXT_GMENU ${GETTEXT_PLUGINS})
-		set (VERSION_GMENU "1.1.8")
+		set (VERSION_GMENU "1.1.9")
 		set (PACKAGE_GMENU "cd-GMenu")
 		set (with_gmenu "yes")
 		set (gmenudatadir "${pluginsdatadir}/GMenu")
@@ -472,14 +616,15 @@
 ############# IMPULSE #################
 set (with_impulse "no")
 message (STATUS "> Impulse:")
-pkg_check_modules (IMPULSE_PACKAGES libpulse fftw3)
-if ("${IMPULSE_PACKAGES_FOUND}" STREQUAL "")
+pkg_check_modules (LIBPULSE libpulse)
+pkg_check_modules (FFTW3 fftw3)  # optional, not advised for distributions packages (it's not a small dependence...)
+if ("${LIBPULSE_FOUND}" STREQUAL "")
 	message (STATUS "Could not find libpulse; Cairo-Dock won't be built with Impulse applet.")
-	message (WARNING "These modules are required to compile Impulse applet: libpulse fftw3")
-	set (MODULES_MISSING "${MODULES_MISSING} libpulse fftw3")
+	message (WARNING "These modules are required to compile Impulse applet: libpulse (and fftw3 - optional)")
+	set (MODULES_MISSING "${MODULES_MISSING} libpulse")
 else()
 	set (GETTEXT_IMPULSE ${GETTEXT_PLUGINS})
-	set (VERSION_IMPULSE "0.0.3")
+	set (VERSION_IMPULSE "0.0.4")
 	set (PACKAGE_IMPULSE "cd-Impulse")
 	set (with_impulse "yes")
 	set (impulsedatadir "${pluginsdatadir}/Impulse")
@@ -487,61 +632,6 @@
 	add_subdirectory (Impulse)
 endif()
 
-############# INDICATOR-APPLET #################
-message (STATUS "> Indicator-Applet:")
-# Note: the names of dbusmenu-glib, dbusmenu-gtk and indicator have changed...
-pkg_check_modules (DBUSMENU_04 QUIET dbusmenu-glib-0.4)
-pkg_check_modules (DBUSMENU_GTK_04 QUIET dbusmenu-gtk-0.4)
-pkg_check_modules (INDICATOR_04 QUIET indicator-0.4)
-if ("${DBUSMENU_04_FOUND}" STREQUAL "1")
-	pkg_check_modules (DBUSMENU dbusmenu-glib-0.4)
-else()
-	pkg_check_modules (DBUSMENU dbusmenu-glib)
-endif()
-if ("${DBUSMENU_GTK_04_FOUND}" STREQUAL "1")
-	pkg_check_modules (DBUSMENU_GTK dbusmenu-gtk-0.4)
-else()
-	pkg_check_modules (DBUSMENU_GTK dbusmenu-gtk)
-endif()
-if ("${INDICATOR_04_FOUND}" STREQUAL "1")
-	pkg_check_modules (INDICATOR_APPLET indicator-0.4 libido-0.1)
-	set (INDICATOR_APPLICATIONADDED_HAS_HINT 1) # now the ApplicationAdded signal (Status-Notifier) has a new parameter (hint) => https://code.launchpad.net/~ted/indicator-application/name-hints/+merge/67213
-else()
-	pkg_check_modules (INDICATOR_APPLET indicator libido-0.1)
-	set (INDICATOR_APPLICATIONADDED_HAS_HINT 0)
-endif()
-
-if ("${INDICATOR_APPLET_FOUND}" STREQUAL "1" AND "${DBUSMENU_FOUND}" STREQUAL "1" AND "${DBUSMENU_GTK_FOUND}" STREQUAL "1")
-	#message (STATUS "DBUSMENU_VERSION : ${DBUSMENU_VERSION}")
-
-	STRING (REGEX REPLACE "\\..*" "" DBUSMENU_MAJOR "${DBUSMENU_VERSION}")
-	# message (STATUS "DBUSMENU_MAJOR : ${DBUSMENU_MAJOR}")
-
-	STRING (REGEX REPLACE "[0-9]*\\.([^ ]+)" "\\1" DBUSMENU_MINOR "${DBUSMENU_VERSION}")  # 0.1.7 => 1.7
-	STRING (REGEX REPLACE "\\.[0-9]*" "" DBUSMENU_MINOR "${DBUSMENU_MINOR}")
-	# message (STATUS "DBUSMENU_MINOR : ${DBUSMENU_MINOR}")
-
-	STRING (REGEX REPLACE ".*\\." "" DBUSMENU_NANO "${DBUSMENU_VERSION}")
-	STRING (REGEX REPLACE "-.*" "" DBUSMENU_NANO "${DBUSMENU_NANO}")
-	# message (STATUS "DBUSMENU_NANO  : ${DBUSMENU_NANO}")
-
-	if ("${INDICATOR_04_FOUND}" STREQUAL "1")
-		execute_process(
-			COMMAND pkg-config --variable=iconsdir indicator-0.4
-			OUTPUT_VARIABLE INDICATORICONSDIR)
-	else()
-		execute_process(
-			COMMAND pkg-config --variable=iconsdir indicator
-			OUTPUT_VARIABLE INDICATORICONSDIR)
-	endif()
-	STRING (REGEX REPLACE "\n" "" INDICATORICONSDIR ${INDICATORICONSDIR})  # la commande rajoute un retour chariot ...
-	add_subdirectory (Indicator-applet)
-	set (with_indicator "yes")
-else()
-	message (WARNING "These modules are required to compile Indicators applet (MeMenu and Messaging-Menu): indicator(-0.4), libido-0.1, dbusmenu-glib(-0.4), dbusmenu-gtk(-0.4)")
-	set (MODULES_MISSING "${MODULES_MISSING} indicator(-0.4) libido-0.1 dbusmenu-glib(-0.4) dbusmenu-gtk(-0.4)")
-endif()
-
 ############# ILLUSION #################
 message (STATUS "> Illusion:")
 set (GETTEXT_ILLUSION ${GETTEXT_PLUGINS})
@@ -638,7 +728,7 @@
 	set (MODULES_MISSING "${MODULES_MISSING} libxklavier")
 else()
 	set (GETTEXT_KEYBOARD_INDICATOR ${GETTEXT_PLUGINS})
-	set (VERSION_KEYBOARD_INDICATOR "1.1.4")
+	set (VERSION_KEYBOARD_INDICATOR "1.1.5")
 	set (PACKAGE_KEYBOARD_INDICATOR "cd-keyboard-indicator")
 	set (with_keyboard_indicator "yes")
 	set (keyboard_indicatordatadir "${pluginsdatadir}/keyboard-indicator")
@@ -658,7 +748,7 @@
 	set (MODULES_MISSING "${MODULES_MISSING} upower-glib")
 endif()
 set (GETTEXT_LOGOUT ${GETTEXT_PLUGINS})
-set (VERSION_LOGOUT "1.2.11")
+set (VERSION_LOGOUT "2.0.0")
 set (PACKAGE_LOGOUT "cd-logout")
 set (logoutdatadir "${pluginsdatadir}/logout")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/logout/data/logout.conf.in ${CMAKE_CURRENT_BINARY_DIR}/logout/data/logout.conf)
@@ -672,10 +762,13 @@
 execute_process(
 	COMMAND ${LIBETPAN_CONFIG_EXECUTABLE} --cflags
 	OUTPUT_VARIABLE MAIL_PACKAGE_CFLAGS)
-if (NOT "${MAIL_PACKAGE_CFLAGS}" STREQUAL "") # if there is a problem with the previous, we don't want to have a lot of errors
-	STRING (REGEX MATCHALL "-I[^ ]+ " TMP_VARIABLE "${MAIL_PACKAGE_CFLAGS}") # first extract the "-I" options
+if (NOT "${MAIL_PACKAGE_CFLAGS}" STREQUAL "" AND NOT "${MAIL_PACKAGE_CFLAGS}" STREQUAL "\n") # if there is a problem with the previous, we don't want to have a lot of errors
+	STRING (REGEX REPLACE "\n" "" TMP_VARIABLE "${MAIL_PACKAGE_CFLAGS}") # to not skip the last option
+	STRING (REGEX MATCHALL "(^| )-I[^ ]+( |$)" TMP_VARIABLE "${TMP_VARIABLE}") # first extract the "-I" options
 	STRING (REGEX REPLACE ";" "" TMP_VARIABLE "${TMP_VARIABLE}")
 	STRING (REGEX REPLACE " $" "" TMP_VARIABLE "${TMP_VARIABLE}")
+	STRING (REGEX REPLACE "^ " "" TMP_VARIABLE "${TMP_VARIABLE}")
+	STRING (REGEX REPLACE "  " " " TMP_VARIABLE "${TMP_VARIABLE}")
 	STRING (REGEX REPLACE "-I([^ ]+)" "\\1" MAIL_PACKAGE_INCLUDE_DIRS "${TMP_VARIABLE}")  # then remove the "-I" string
 endif()
 # find the link flags
@@ -683,14 +776,19 @@
 	COMMAND ${LIBETPAN_CONFIG_EXECUTABLE} --libs
 	OUTPUT_VARIABLE MAIL_PACKAGE_LIBS)
 if (NOT "${MAIL_PACKAGE_LIBS}" STREQUAL "")
+	STRING (REGEX REPLACE "\n" "" MAIL_PACKAGE_LIBS "${MAIL_PACKAGE_LIBS}")
 	#   find the link libraries
-	STRING (REGEX MATCHALL "-l[^ ]+ " TMP_VARIABLE "${MAIL_PACKAGE_LIBS}") # extract the "-l" options
+	STRING (REGEX MATCHALL "(^| )-l[^ ]+( |$)" TMP_VARIABLE "${MAIL_PACKAGE_LIBS}") # extract the "-l" options (only if it's separated by two blank spaces or the end/beginning of the line => -L/usr/lib/x86_64-linux-gnu)
 	STRING (REGEX REPLACE ";" "" TMP_VARIABLE "${TMP_VARIABLE}")
+	STRING (REGEX REPLACE "^ " "" TMP_VARIABLE "${TMP_VARIABLE}")
+	STRING (REGEX REPLACE "  " " " TMP_VARIABLE "${TMP_VARIABLE}")
 	STRING (REGEX REPLACE " $" "" MAIL_PACKAGE_LIBRARIES "${TMP_VARIABLE}")
 	#   find the link directories
-	STRING (REGEX MATCHALL "-L[^ ]+ " TMP_VARIABLE "${MAIL_PACKAGE_LIBS}") # extract the "-L" options
+	STRING (REGEX MATCHALL "(^| )-L[^ ]+( |$)" TMP_VARIABLE "${MAIL_PACKAGE_LIBS}") # extract the "-L" options
 	STRING (REGEX REPLACE ";" "" TMP_VARIABLE "${TMP_VARIABLE}")
 	STRING (REGEX REPLACE " $" "" TMP_VARIABLE "${TMP_VARIABLE}")
+	STRING (REGEX REPLACE "^ " "" TMP_VARIABLE "${TMP_VARIABLE}")
+	STRING (REGEX REPLACE "  " " " TMP_VARIABLE "${TMP_VARIABLE}")
 	STRING (REGEX REPLACE "-L([^ ]+)" "\\1" MAIL_PACKAGE_LIBRARY_DIRS "${TMP_VARIABLE}")  # then remove the "-L" string
 endif()
 if ("${MAIL_PACKAGE_LIBS}" STREQUAL "")
@@ -703,7 +801,7 @@
 	message (STATUS "   Link directories: ${MAIL_PACKAGE_LIBRARY_DIRS}")
 	message (STATUS "   Link libraries: ${MAIL_PACKAGE_LIBRARIES}")
 	set (GETTEXT_MAIL ${GETTEXT_PLUGINS})
-	set (VERSION_MAIL "1.0.9")
+	set (VERSION_MAIL "1.0.10")
 	set (PACKAGE_MAIL "cd-mail")
 	set (maildatadir "${pluginsdatadir}/mail")
 	set (with_mail "yes")
@@ -754,29 +852,27 @@
 	message (STATUS "  DISTRO_ID: ${DISTRO_ID}, DISTRO_RELEASE: ${DISTRO_RELEASE}")
 endif()
 
-############# INDICATOR_NAME #################
-message (STATUS "> Indicator Names:")
-set (INDICATOR_OLD_NAMES 0)
-if ("${force_old_indicator_names}" STREQUAL "yes")
-	set (INDICATOR_OLD_NAMES 1)
-	message (STATUS "  Indicators: use old Ayatana Dbus names (forced)")
-elseif ("${DISTRO_ID}" STREQUAL "Ubuntu")
-	STRING (REGEX REPLACE "\\..*" "" DISTRO_RELEASE_MAJOR ${DISTRO_RELEASE})
-	# message (STATUS "DISTRO_RELEASE_MAJOR: ${DISTRO_RELEASE_MAJOR}")
-	if (${DISTRO_RELEASE_MAJOR} LESS 11)  # from 11.04, new names are used.
-		set (INDICATOR_OLD_NAMES 1)
-		message (STATUS "  Indicators: use old Ayatana Dbus names")
-	endif()
+############# GLOBAL-MENU #################
+set (with_global_menu "no")
+if ("${enable-global-menu}" STREQUAL "yes" AND "${INDICATOR_OLD_NAMES}" STREQUAL "0" AND "${DBUSMENU_FOUND}" AND "${DBUSMENU_GTK_FOUND}")  # currently only supported with new name of the indicator module and with newer version of dbusmenu
+	message (STATUS "> Global-Menu:")
+	set (GETTEXT_GLOBAL_MENU ${GETTEXT_PLUGINS})
+	set (VERSION_GLOBAL_MENU "0.1.0")
+	set (PACKAGE_GLOBAL_MENU "cd-Global-Menu")
+	set (with_global_menu "yes")
+	set (global_menudatadir "${pluginsdatadir}/Global-Menu")
+	configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Global-Menu/data/Global-Menu.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Global-Menu/data/Global-Menu.conf)
+	add_subdirectory (Global-Menu)
 endif()
 
 ############# MEMENU #################
 set (with_me_menu "no")
-if ("${INDICATOR_04_FOUND}" STREQUAL "1")
-	message (STATUS "> MeMenu: this applet has been automatically merged with Messaging-Menu")
-elseif ("${with_indicator}" STREQUAL "yes")
+if ("${INDICATOR_NEW_VERSION}" STREQUAL "1" AND NOT "${enable-memenu}" STREQUAL "yes")
+	message (STATUS "> MeMenu: this applet has been automatically merged with Messaging-Menu")  # oneiric or newer
+elseif ("${with_indicator}" STREQUAL "yes" AND "${IDO_FOUND}")
 	message (STATUS "> MeMenu:")
 	set (GETTEXT_MEMENU ${GETTEXT_PLUGINS})
-	set (VERSION_MEMENU "1.0.2")
+	set (VERSION_MEMENU "1.0.3")
 	set (PACKAGE_MEMENU "cd-MeMenu")
 	set (memenudatadir "${pluginsdatadir}/MeMenu")
 	set (with_me_menu "yes")
@@ -789,7 +885,7 @@
 if ("${with_indicator}" STREQUAL "yes") 
 	message (STATUS "> Messaging-Menu:")
 	set (GETTEXT_MESSAGING_MENU ${GETTEXT_PLUGINS})
-	set (VERSION_MESSAGING_MENU "1.0.2")
+	set (VERSION_MESSAGING_MENU "1.0.3")
 	set (PACKAGE_MESSAGING_MENU "cd-Messaging-Menu")
 	set (with_messaging_menu "yes")
 	set (messaging_menudatadir "${pluginsdatadir}/Messaging-Menu")
@@ -809,7 +905,7 @@
 ############# MUSICPLAYER #################
 message (STATUS "> MusicPlayer:")
 set (GETTEXT_MUSICPLAYER ${GETTEXT_PLUGINS})
-set (VERSION_MUSICPLAYER "1.1.0")
+set (VERSION_MUSICPLAYER "2.0.0")
 set (PACKAGE_MUSICPLAYER "cd-musicPlayer")
 set (musicplayerdatadir "${pluginsdatadir}/musicPlayer")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/musicPlayer/data/musicPlayer.conf.in ${CMAKE_CURRENT_BINARY_DIR}/musicPlayer/data/musicPlayer.conf)
@@ -818,7 +914,7 @@
 ############# NETSPEED #################
 message (STATUS "> NetSpeed:")
 set (GETTEXT_NETSPEED ${GETTEXT_PLUGINS})
-set (VERSION_NETSPEED "1.2.7")
+set (VERSION_NETSPEED "1.2.8")
 set (PACKAGE_NETSPEED "cd-netspeed")
 set (netspeeddatadir "${pluginsdatadir}/netspeed")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/netspeed/data/netspeed.conf.in ${CMAKE_CURRENT_BINARY_DIR}/netspeed/data/netspeed.conf)
@@ -829,7 +925,7 @@
 if ("${enable-network-monitor}" STREQUAL "yes")
 	message (STATUS "> Network Monitor:")
 	set (GETTEXT_NETWORK_MONITOR ${GETTEXT_PLUGINS})
-	set (VERSION_NETWORK_MONITOR "0.2.5")
+	set (VERSION_NETWORK_MONITOR "0.2.6")
 	set (PACKAGE_NETWORK_MONITOR "cd-network-monitor")
 	set (with_network_monitor "yes")
 	set (network_monitordatadir "${pluginsdatadir}/Network-Monitor")
@@ -840,7 +936,7 @@
 ############# POWERMANAGER #################
 message (STATUS "> PowerManager:")
 set (GETTEXT_POWERMANAGER ${GETTEXT_PLUGINS})
-set (VERSION_POWERMANAGER "1.3.7")
+set (VERSION_POWERMANAGER "1.3.8")
 set (PACKAGE_POWERMANAGER "cd-powermanager")
 set (powermanagerdatadir "${pluginsdatadir}/powermanager")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/powermanager/data/powermanager.conf.in ${CMAKE_CURRENT_BINARY_DIR}/powermanager/data/powermanager.conf)
@@ -849,7 +945,7 @@
 ############# QUICK BROWSER #################
 message (STATUS "> Quick Browser:")
 set (GETTEXT_QUICK_BROWSER ${GETTEXT_PLUGINS})
-set (VERSION_QUICK_BROWSER "1.0.9")
+set (VERSION_QUICK_BROWSER "1.0.10")
 set (PACKAGE_QUICK_BROWSER "cd-quick-browser")
 set (quick_browserdatadir "${pluginsdatadir}/quick_browser")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/quick-browser/data/quick-browser.conf.in ${CMAKE_CURRENT_BINARY_DIR}/quick-browser/data/quick-browser.conf)
@@ -865,7 +961,7 @@
 	set (MODULES_MISSING "${MODULES_MISSING} zeitgeist-1.0")
 else()
 	set (GETTEXT_RECENT_EVENTS ${GETTEXT_PLUGINS})
-	set (VERSION_RECENT_EVENTS "1.0.0")
+	set (VERSION_RECENT_EVENTS "1.0.1")
 	set (PACKAGE_RECENT_EVENTS "cd-Recent-Events")
 	set (with_recent_events "yes")
 	set (recent_eventsdatadir "${pluginsdatadir}/Recent-Events")
@@ -876,7 +972,7 @@
 ############# REMOTE_CONTROL #################
 message (STATUS "> Remote Control:")
 set (GETTEXT_REMOTE_CONTROL ${GETTEXT_PLUGINS})
-set (VERSION_REMOTE_CONTROL "0.0.2")
+set (VERSION_REMOTE_CONTROL "1.0.0")
 set (PACKAGE_REMOTE_CONTROL "cd-Remote-Control")
 set (remote_controldatadir "${pluginsdatadir}/Remote-Control")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Remote-Control/data/Remote-Control.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Remote-Control/data/Remote-Control.conf)
@@ -885,7 +981,7 @@
 ############# RSSREADER #################
 message (STATUS "> RSSreader:")
 set (GETTEXT_RSS_READER ${GETTEXT_PLUGINS})
-set (VERSION_RSS_READER "1.0.4")
+set (VERSION_RSS_READER "1.0.5")
 set (PACKAGE_RSS_READER "cd-rssreader")
 set (rss_readerdatadir "${pluginsdatadir}/RSSreader")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/RSSreader/data/RSSreader.conf.in ${CMAKE_CURRENT_BINARY_DIR}/RSSreader/data/RSSreader.conf)
@@ -904,14 +1000,14 @@
 	add_subdirectory (Scooby-Do)
 endif()
 
-############# SHARED-IMAGES #################
-set (shared_imagesdatadir "${pluginsdatadir}/shared-images")
-add_subdirectory (shared-images)
+############# SHARED-FILES #################
+set (shared_filesdatadir "${pluginsdatadir}/shared-files")
+add_subdirectory (shared-files)
 
 ############# SHORTCUTS #################
 message (STATUS "> Shortcuts:")
 set (GETTEXT_SHORTCUTS ${GETTEXT_PLUGINS})
-set (VERSION_SHORTCUTS "1.3.2")
+set (VERSION_SHORTCUTS "1.3.3")
 set (PACKAGE_SHORTCUTS "cd-shortcuts")
 set (shortcutsdatadir "${pluginsdatadir}/shortcuts")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/shortcuts/data/shortcuts.conf.in ${CMAKE_CURRENT_BINARY_DIR}/shortcuts/data/shortcuts.conf)
@@ -928,7 +1024,7 @@
 	set (with_xrandr "no")
 endif()
 set (GETTEXT_SHOW_DESKTOP ${GETTEXT_PLUGINS})
-set (VERSION_SHOW_DESKTOP "1.2.5")
+set (VERSION_SHOW_DESKTOP "1.2.6")
 set (PACKAGE_SHOW_DESKTOP "cd-showDesktop")
 set (show_desktopdatadir "${pluginsdatadir}/showDesktop")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/showDesktop/data/showDesktop.conf.in ${CMAKE_CURRENT_BINARY_DIR}/showDesktop/data/showDesktop.conf)
@@ -954,7 +1050,7 @@
 	set (with_exif "no")
 endif()
 set (GETTEXT_SLIDER ${GETTEXT_PLUGINS})
-set (VERSION_SLIDER "2.0.10")
+set (VERSION_SLIDER "2.0.11")
 set (PACKAGE_SLIDER "cd-slider")
 set (sliderdatadir "${pluginsdatadir}/slider")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/slider/data/slider.conf.in ${CMAKE_CURRENT_BINARY_DIR}/slider/data/slider.conf)
@@ -963,7 +1059,7 @@
 ############# STACK #################
 message (STATUS "> Stack:")
 set (GETTEXT_STACK ${GETTEXT_PLUGINS})
-set (VERSION_STACK "0.3.2")
+set (VERSION_STACK "0.3.3")
 set (PACKAGE_STACK "cd-stack")
 set (stackdatadir "${pluginsdatadir}/stack")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/stack/data/stack.conf.in ${CMAKE_CURRENT_BINARY_DIR}/stack/data/stack.conf)
@@ -973,7 +1069,7 @@
 message (STATUS "> Status Notifier:")
 if ("${DBUSMENU_GTK_FOUND}" STREQUAL "")
 	message (STATUS "Could not find Status-Notifier libs; Cairo-Dock won't be built with Status-Notifier support.")
-	message (WARNING "This module is required to compile Status Notifier applet: dbusmenu-gtk(-0.4)")
+	message (WARNING "This module is required to compile Status Notifier applet: ${DBUSMENU_GTK_MODULE}(-0.4)")
 	# set (MODULES_MISSING "${MODULES_MISSING} dbusmenu-gtk(-0.4)") # it should already be in the list.
 	set (with_status_notifier "no")
 else()
@@ -984,7 +1080,7 @@
 	endif()
 	message (STATUS "  ApplicationAdded signal has 'Hint' = ${INDICATOR_APPLICATIONADDED_HAS_HINT}")
 	set (GETTEXT_STATUS_NOTIFIER ${GETTEXT_PLUGINS})
-	set (VERSION_STATUS_NOTIFIER "0.1.4")
+	set (VERSION_STATUS_NOTIFIER "0.1.5")
 	set (PACKAGE_STATUS_NOTIFIER "cd-status-notifier")
 	set (with_status_notifier "yes")
 	set (status_notifierdatadir "${pluginsdatadir}/Status-Notifier")
@@ -995,7 +1091,7 @@
 ############# SWITCHER #################
 message (STATUS "> Switcher:")
 set (GETTEXT_SWITCHER ${GETTEXT_PLUGINS})
-set (VERSION_SWITCHER "2.1.7")
+set (VERSION_SWITCHER "2.1.8")
 set (PACKAGE_SWITCHER "cd-switcher")
 set (switcherdatadir "${pluginsdatadir}/switcher")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/switcher/data/switcher.conf.in ${CMAKE_CURRENT_BINARY_DIR}/switcher/data/switcher.conf)
@@ -1012,7 +1108,7 @@
 	set (with_sensors "no")
 endif()
 set (GETTEXT_SYSTEM_MONITOR ${GETTEXT_PLUGINS})
-set (VERSION_SYSTEM_MONITOR "1.0.9")
+set (VERSION_SYSTEM_MONITOR "1.0.10")
 set (PACKAGE_SYSTEM_MONITOR "cd-system-monitor")
 set (system_monitordatadir "${pluginsdatadir}/System-monitor")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/System-Monitor/data/System-Monitor.conf.in ${CMAKE_CURRENT_BINARY_DIR}/System-Monitor/data/System-Monitor.conf)
@@ -1021,7 +1117,7 @@
 ############# SYSTRAY #################
 message (STATUS "> Systray:")
 set (GETTEXT_SYSTRAY ${GETTEXT_PLUGINS})
-set (VERSION_SYSTRAY "0.2.3")
+set (VERSION_SYSTRAY "0.2.4")
 set (PACKAGE_SYSTRAY "cd-systray")
 set (systraydatadir "${pluginsdatadir}/systray")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/systray/data/systray.conf.in ${CMAKE_CURRENT_BINARY_DIR}/systray/data/systray.conf)
@@ -1029,15 +1125,20 @@
 
 ############# TERMINAL #################
 message (STATUS "> Terminal:")
-pkg_check_modules (TERMINAL_PACKAGE vte)
+if ("${gtkversion}" STREQUAL "2")
+	set (TERMINAL_MODULE vte)
+else()
+	set (TERMINAL_MODULE vte-2.90)
+endif()
+pkg_check_modules (TERMINAL_PACKAGE ${TERMINAL_MODULE})
 if ("${TERMINAL_PACKAGE_FOUND}" STREQUAL "")
-	message (STATUS "Could not find libvte; Cairo-Dock won't be built with terminal applet.")
-	message (WARNING "This module is required to compile Terminal applet: vte")
-	set (MODULES_MISSING "${MODULES_MISSING} vte")
+	message (STATUS "Could not find ${TERMINAL_MODULE}; Cairo-Dock won't be built with terminal applet.")
+	message (WARNING "This module is required to compile Terminal applet: ${TERMINAL_MODULE}")
+	set (MODULES_MISSING "${MODULES_MISSING} ${TERMINAL_MODULE}")
 	set (with_terminal "no")
 else()
 	set (GETTEXT_TERMINAL ${GETTEXT_PLUGINS})
-	set (VERSION_TERMINAL "1.0.11")
+	set (VERSION_TERMINAL "1.0.12")
 	set (PACKAGE_TERMINAL "cd-terminal")
 	set (with_terminal "yes")
 	set (terminaldatadir "${pluginsdatadir}/terminal")
@@ -1048,7 +1149,7 @@
 ############# TOMBOY #################
 message (STATUS "> Tomboy:")
 set (GETTEXT_TOMBOY ${GETTEXT_PLUGINS})
-set (VERSION_TOMBOY "1.3.2")
+set (VERSION_TOMBOY "1.3.3")
 set (PACKAGE_TOMBOY "cd-tomboy")
 set (tomboydatadir "${pluginsdatadir}/tomboy")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/tomboy/data/tomboy.conf.in ${CMAKE_CURRENT_BINARY_DIR}/tomboy/data/tomboy.conf)
@@ -1057,7 +1158,7 @@
 ############# TOONS #################
 message (STATUS "> Toons:")
 set (GETTEXT_TOONS ${GETTEXT_PLUGINS})
-set (VERSION_TOONS "1.0.10")
+set (VERSION_TOONS "1.0.11")
 set (PACKAGE_TOONS "cd-Toons")
 set (toonsdatadir "${pluginsdatadir}/Toons")
 set (toonsuserdirname "Toons")
@@ -1067,7 +1168,7 @@
 ############# WEATHER #################
 message (STATUS "> Weather:")
 set (GETTEXT_WEATHER ${GETTEXT_PLUGINS})
-set (VERSION_WEATHER "1.2.11")
+set (VERSION_WEATHER "1.2.12")
 set (PACKAGE_WEATHER "cd-weather")
 set (weatherdatadir "${pluginsdatadir}/weather")
 set (weatheruserdirname "weather")
@@ -1078,14 +1179,19 @@
 message (STATUS "> Weblets:")
 set (with_weblets "no")
 if (NOT "${enable-weblets}" STREQUAL "no")
-	pkg_check_modules (WEBKIT webkit-1.0)
+	if ("${gtkversion}" STREQUAL "2")
+		set (WEBKIT_MODULE webkit-1.0)
+	else()
+		set (WEBKIT_MODULE webkitgtk-3.0)
+	endif()
+	pkg_check_modules (WEBKIT ${WEBKIT_MODULE})
 	if ("${WEBKIT_FOUND}" STREQUAL "")
-		message (STATUS "Could not find webkit-1.0; Cairo-Dock won't be built with Weblets applet.")
-		message (WARNING "This module is required to compile Weblets applet: webkit-1.0")
-		set (MODULES_MISSING "${MODULES_MISSING} webkit-1.0")
+		message (STATUS "Could not find ${WEBKIT_MODULE}; Cairo-Dock won't be built with Weblets applet.")
+		message (WARNING "This module is required to compile Weblets applet: ${WEBKIT_MODULE}")
+		set (MODULES_MISSING "${MODULES_MISSING} ${WEBKIT_MODULE}")
 	else()
 		set (GETTEXT_WEBLETS ${GETTEXT_PLUGINS})
-		set (VERSION_WEBLETS "0.0.11")
+		set (VERSION_WEBLETS "0.0.12")
 		set (PACKAGE_WEBLETS "cd-weblets")
 		set (webletsdatadir "${pluginsdatadir}/weblets")
 		set (with_weblets "yes")
@@ -1097,7 +1203,7 @@
 ############# WIFI #################
 message (STATUS "> WiFi:")
 set (GETTEXT_WIFI ${GETTEXT_PLUGINS})
-set (VERSION_WIFI "1.2.9")
+set (VERSION_WIFI "1.2.10")
 set (PACKAGE_WIFI "cd-wifi")
 set (wifidatadir "${pluginsdatadir}/wifi")
 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/wifi/data/wifi.conf.in ${CMAKE_CURRENT_BINARY_DIR}/wifi/data/wifi.conf)
@@ -1107,7 +1213,7 @@
 message (STATUS "> XFCE-Integration:")
 set (with_xfce_integration "no")
 if (NOT "${enable-xfce-integration}" STREQUAL "no")
-	pkg_check_modules (XFCE_INTEGRATION_THUNAR thunar-vfs-1)
+	pkg_check_modules (XFCE_INTEGRATION_THUNAR QUIET thunar-vfs-1) # thunar-vfs is not used if gvfs (gio) is available
 	pkg_check_modules (XFCE_INTEGRATION_GVFS gio-2.0)
 	if ("${XFCE_INTEGRATION_THUNAR_FOUND}" STREQUAL "" AND "${XFCE_INTEGRATION_GVFS_FOUND}" STREQUAL "")
 		message (STATUS "Could find neither thunar-vfs or libgio-2.0; Cairo-Dock won't be built with XFCE support.")
@@ -1132,7 +1238,7 @@
 	set (with_xgamma "no")
 else()
 	set (GETTEXT_XGAMMA ${GETTEXT_PLUGINS})
-	set (VERSION_XGAMMA "1.2.1")
+	set (VERSION_XGAMMA "1.2.2")
 	set (PACKAGE_XGAMMA "cd-Xgamma")
 	set (with_xgamma "yes")
 	set (xgammadatadir "${pluginsdatadir}/Xgamma")
@@ -1159,29 +1265,33 @@
 message (STATUS " - with XFCE support:              ${with_xfce_integration}")
 message (STATUS " Plug-ins:")
 message (STATUS " - with Alsa-Mixer applet:         ${with_alsa}")
-message (STATUS " - with iCal support:              ${with_ical}")
 message (STATUS " - with GMenu applet:              ${with_gmenu}")
 message (STATUS " - with Impulse applet:            ${with_impulse}")
 message (STATUS " - with Keyboard-indicator applet: ${with_keyboard_indicator}")
 message (STATUS " - with Mail applet:               ${with_mail}")
-if (NOT "${INDICATOR_04_FOUND}" STREQUAL "1")
-message (STATUS " - with Me-Menu applet:            ${with_me_menu}")
+if (NOT "${INDICATOR_NEW_VERSION}" STREQUAL "1" OR "${enable-memenu}" STREQUAL "yes")  # oneiric or newer
+message (STATUS " - with Me-Menu applet applet:     ${with_me_menu}")
 endif()
-message (STATUS " - with Messaging-Menu:            ${with_messaging_menu}")
-message (STATUS " - with Screen Resolution support: ${with_xrandr}")
+message (STATUS " - with Messaging-Menu applet:     ${with_messaging_menu}")
+message (STATUS " - with Recent-Events applet:      ${with_recent_events}")
 message (STATUS " - with Status-Notifier applet:    ${with_status_notifier}")
-message (STATUS " - with Sensors support:           ${with_sensors}")
 message (STATUS " - with Terminal applet:           ${with_terminal}")
 message (STATUS " - with Weblets applet:            ${with_weblets}")
 message (STATUS " - with Xgamma applet:             ${with_xgamma}")
-message (STATUS " - with Recent-Events applet:      ${with_recent_events}")
+message (STATUS "Add On:")
+message (STATUS " - with Sound-Menu support:        ${with_soundmenu}")
+message (STATUS " - with Screen Resolution support: ${with_xrandr}")
+message (STATUS " - with Sensors support:           ${with_sensors}")
 message (STATUS " - with UPower support:            ${with_upower_support}")
+message (STATUS " - with iCal support:              ${with_ical}")
+message (STATUS "Third Party Interfaces:")
 message (STATUS " - with Python interface:          ${with_python}")
 message (STATUS " - with Ruby interface:            ${with_ruby}")
 message (STATUS " - with Mono interface:            ${with_mono}")
 message (STATUS " - with Vala interface:            ${with_vala}")
 message (STATUS " - with Vala Translator (valac):   ${with_valac}")
 message (STATUS "Unstable:")
+message (STATUS " - with Global-Menu applet:        ${with_global_menu}")
 message (STATUS " - with Disks applet:              ${with_disks}")
 message (STATUS " - with Doncky applet:             ${with_doncky}")
 message (STATUS " - with KDE experimental support:  ${with_kde_integration2}")
@@ -1193,13 +1303,13 @@
 if (NOT "${MODULES_MISSING}" STREQUAL "")
 	message ("")
 	message (STATUS "WARNING: It seems that one (or more) module(s) is (are) missing:${MODULES_MISSING}")
-	message (STATUS "It can be interesting to install them (even more if you're a maintainer of Cairo-Dock's packages).")
+	message (STATUS "It can be interesting to install them (especially if you're a maintainer of Cairo-Dock's packages).")
 endif ()
 
 if (NOT "${PROGRAMS_MISSING}" STREQUAL "")
 	message ("")
 	message (STATUS "WARNING: It seems that one (or more) program(s) or package(s) is (are) missing:${PROGRAMS_MISSING}")
-	message (STATUS "It can be interesting to install them (even more if you're a maintainer of Cairo-Dock's packages).")
+	message (STATUS "It can be interesting to install them (especially if you're a maintainer of Cairo-Dock's packages).")
 endif ()
 
 if (NOT "${MODULES_INTEGRATION_MISSING}" STREQUAL "")

=== modified file 'Cairo-Penguin/data/Cairo-Penguin.conf.in' (properties changed: +x to -x)
--- Cairo-Penguin/data/Cairo-Penguin.conf.in	2011-08-09 18:08:08 +0000
+++ Cairo-Penguin/data/Cairo-Penguin.conf.in	2012-02-14 14:04:19 +0000
@@ -9,9 +9,9 @@
 #d Name of the dock it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[Default] Name of the icon as it will appear in its caption in the dock:
 name = 
- #v
+#v
 sep_display=
 
 icon =

=== modified file 'Cairo-Penguin/src/applet-animation.c'
--- Cairo-Penguin/src/applet-animation.c	2011-09-26 12:56:12 +0000
+++ Cairo-Penguin/src/applet-animation.c	2012-02-14 14:04:19 +0000
@@ -37,11 +37,7 @@
 	g_return_if_fail (pAnimation != NULL);
 	int iPreviousPositionX = myData.iCurrentPositionX, iPreviousPositionY = myData.iCurrentPositionY;
 	
-	Icon *pFirstDrawnIcon = NULL;
-	if (myDock->pFirstDrawnElement != NULL)
-		pFirstDrawnIcon = myDock->pFirstDrawnElement->data;
-	if (pFirstDrawnIcon == NULL && myDock->icons != NULL)
-		pFirstDrawnIcon = myDock->icons->data;
+	Icon *pFirstDrawnIcon = cairo_dock_get_first_icon (myDock->icons);
 	int iXMin = (pFirstDrawnIcon != NULL ? pFirstDrawnIcon->fXAtRest : 0);
 	iXMin = 0;
 	int iXMax = iXMin + myDock->fFlatDockWidth;
@@ -246,7 +242,7 @@
 		}
 		
 		//\________________ les reflets.
-		CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
+		///CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
 	}
 	
 	CD_APPLET_REDRAW_MY_ICON;
@@ -335,11 +331,11 @@
 			{
 				cairo_dock_erase_cairo_context (myDrawContext);  // CD_APPLET_SET_SURFACE_ON_MY_ICON (NULL)
 				
-				if (myIcon->pReflectionBuffer != NULL)
+				/**if (myIcon->pReflectionBuffer != NULL)
 				{
 					cairo_surface_destroy (myIcon->pReflectionBuffer);
 					myIcon->pReflectionBuffer = NULL;
-				}
+				}*/
 				if (CAIRO_DOCK_CONTAINER_IS_OPENGL (myContainer))
 					cairo_dock_update_icon_texture (myIcon);
 			}
@@ -533,8 +529,8 @@
 	penguin_remove_notfications();
 	if (myConfig.bFree)
 	{
-		cairo_dock_register_notification_on_object (myContainer, NOTIFICATION_UPDATE_DOCK_SLOW, (CairoDockNotificationFunc) penguin_update_container, CAIRO_DOCK_RUN_AFTER, myApplet);
-		cairo_dock_register_notification_on_object (myContainer, NOTIFICATION_RENDER_DOCK, (CairoDockNotificationFunc) penguin_render_on_container, CAIRO_DOCK_RUN_AFTER, myApplet);
+		cairo_dock_register_notification_on_object (myContainer, NOTIFICATION_UPDATE_SLOW, (CairoDockNotificationFunc) penguin_update_container, CAIRO_DOCK_RUN_AFTER, myApplet);
+		cairo_dock_register_notification_on_object (myContainer, NOTIFICATION_RENDER, (CairoDockNotificationFunc) penguin_render_on_container, CAIRO_DOCK_RUN_AFTER, myApplet);
 	}
 	else
 	{
@@ -554,12 +550,11 @@
 		
 		if (myConfig.bFree)  // attention : c'est un hack moyen; il faudrait pouvoir indiquer a cairo-dock de ne pas inserer notre icone...
 		{
-			cairo_dock_detach_icon_from_dock (myIcon, myDock, myIconsParam.iSeparateIcons);
-			cairo_dock_update_dock_size (myDock);
+			cairo_dock_detach_icon_from_dock (myIcon, myDock);
 		}
 		else
 		{
-			cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, ! CAIRO_DOCK_ANIMATE_ICON);
+			cairo_dock_insert_icon_in_dock (myIcon, myDock, ! CAIRO_DOCK_ANIMATE_ICON);
 		}
 		cairo_dock_launch_animation (myContainer);
 	}

=== modified file 'Cairo-Penguin/src/applet-animation.h'
--- Cairo-Penguin/src/applet-animation.h	2011-04-20 20:46:51 +0000
+++ Cairo-Penguin/src/applet-animation.h	2012-02-14 14:04:19 +0000
@@ -30,8 +30,8 @@
 
 #define penguin_remove_notfications() do {\
 	cairo_dock_remove_notification_func_on_object (myIcon, NOTIFICATION_UPDATE_ICON_SLOW, (CairoDockNotificationFunc) penguin_update_icon, myApplet);\
-	cairo_dock_remove_notification_func_on_object (myDock, NOTIFICATION_UPDATE_DOCK_SLOW, (CairoDockNotificationFunc) penguin_update_container, myApplet);\
-	cairo_dock_remove_notification_func_on_object (myDock, NOTIFICATION_RENDER_DOCK, (CairoDockNotificationFunc) penguin_render_on_container, myApplet); } while (0)
+	cairo_dock_remove_notification_func_on_object (myDock, NOTIFICATION_UPDATE_SLOW, (CairoDockNotificationFunc) penguin_update_container, myApplet);\
+	cairo_dock_remove_notification_func_on_object (myDock, NOTIFICATION_RENDER, (CairoDockNotificationFunc) penguin_render_on_container, myApplet); } while (0)
 
 void penguin_move_in_dock (CairoDockModuleInstance *myApplet);
 gboolean penguin_render_on_container (CairoDockModuleInstance *myApplet, CairoContainer *pContainer, cairo_t *pCairoContext);

=== modified file 'Cairo-Penguin/src/applet-init.c'
--- Cairo-Penguin/src/applet-init.c	2011-04-20 20:46:51 +0000
+++ Cairo-Penguin/src/applet-init.c	2012-02-14 14:04:19 +0000
@@ -63,7 +63,7 @@
 		CAIRO_DOCK_RUN_FIRST,
 		myApplet);
 	cairo_dock_register_notification_on_object (myDock,
-		NOTIFICATION_STOP_DOCK,
+		NOTIFICATION_DESTROY,
 		(CairoDockNotificationFunc) cd_on_dock_destroyed,
 		CAIRO_DOCK_RUN_AFTER,
 		myApplet);
@@ -85,7 +85,7 @@
 		(CairoDockNotificationFunc) CD_APPLET_ON_BUILD_MENU_FUNC,
 		myApplet);
 	cairo_dock_remove_notification_func_on_object (myDock,
-		NOTIFICATION_STOP_DOCK,
+		NOTIFICATION_DESTROY,
 		(CairoDockNotificationFunc) cd_on_dock_destroyed,
 		myApplet);
 	penguin_remove_notfications();
@@ -118,8 +118,8 @@
 			area.x = (myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + myData.iCurrentPositionX;
 			area.y = myDock->container.iHeight - myData.iCurrentPositionY - pAnimation->iFrameHeight;
 			area.width = pAnimation->iFrameWidth;
-			area.height = pAnimation->iFrameHeight + myDock->container.bUseReflect * myIconsParam.fReflectSize;
-			gdk_window_invalidate_rect (myContainer->pWidget->window, &area, FALSE);
+			area.height = pAnimation->iFrameHeight + myDock->container.bUseReflect * myDock->iIconSize * myIconsParam.fReflectHeightRatio;
+			cairo_dock_redraw_container_area (myContainer, &area);
 		}
 		
 		//\_______________ On recharge tout de zero (changement de theme).
@@ -130,12 +130,12 @@
 		//\_______________ On libere le pingouin ou au contraire on le cloisonne.
 		if (myConfig.bFree)
 		{
-			cairo_dock_detach_icon_from_dock (myIcon, myDock, myIconsParam.iSeparateIcons);
+			cairo_dock_detach_icon_from_dock (myIcon, myDock);
 			cairo_dock_update_dock_size (myDock);
 		}
 		else
 		{
-			cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, ! CAIRO_DOCK_ANIMATE_ICON);
+			cairo_dock_insert_icon_in_dock (myIcon, myDock, ! CAIRO_DOCK_ANIMATE_ICON);
 		}
 		
 		penguin_start_animating (myApplet);

=== modified file 'Cairo-Penguin/src/applet-notifications.c'
--- Cairo-Penguin/src/applet-notifications.c	2011-04-20 20:46:51 +0000
+++ Cairo-Penguin/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -81,7 +81,7 @@
 		g_source_remove (myData.iSidRestartDelayed);
 		myData.iSidRestartDelayed = 0;
 	}
-	cairo_dock_remove_notification_func_on_object (myContainer, NOTIFICATION_UPDATE_DOCK_SLOW, (CairoDockNotificationFunc) penguin_update_container, myApplet);
+	cairo_dock_remove_notification_func_on_object (myContainer, NOTIFICATION_UPDATE_SLOW, (CairoDockNotificationFunc) penguin_update_container, myApplet);
 	cairo_dock_remove_notification_func_on_object (myIcon, NOTIFICATION_UPDATE_ICON_SLOW, (CairoDockNotificationFunc) penguin_update_icon, myApplet);
 	
 	//\_______________ On met l'animation de repos et on la dessine.
@@ -109,30 +109,21 @@
 	
 	if ((myConfig.bFree && pClickedContainer == myContainer && myDock->container.iMouseX >  (myDock->container.iWidth - myDock->fFlatDockWidth) / 2 + myData.iCurrentPositionX && myDock->container.iMouseX < (myDock->container.iWidth - myDock->fFlatDockWidth) / 2 +  myData.iCurrentPositionX + pAnimation->iFrameWidth && myDock->container.iMouseY > myContainer->iHeight - myData.iCurrentPositionY - pAnimation->iFrameHeight && myDock->container.iMouseY < myContainer->iHeight - myData.iCurrentPositionY) || (! myConfig.bFree && pClickedIcon == myIcon))
 	{
-		if (pClickedIcon != myIcon && ! (CAIRO_DOCK_IS_APPLET (pClickedIcon) && pClickedIcon->pModuleInstance->pModule == myIcon->pModuleInstance->pModule))
-		{
-			cd_debug ("%s\n", myApplet->cConfFilePath);
-			cairo_dock_notify_on_object (myContainer, NOTIFICATION_BUILD_ICON_MENU, myIcon, myContainer, CD_APPLET_MY_MENU);
-			CD_APPLET_LEAVE (CAIRO_DOCK_INTERCEPT_NOTIFICATION);
-		}
-		
 		GtkWidget *pMenuItem, *image;
 		
 		CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 		
-		GtkWidget *pModuleSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
 		if (penguin_is_resting (pAnimation))
 		{
-			CD_APPLET_ADD_IN_MENU(D_("Wake up"), _wake_up, pModuleSubMenu);
+			CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Wake up"), MY_APPLET_SHARE_DATA_DIR"/icon.png", _wake_up, CD_APPLET_MY_MENU);
 		}
 		else
 		{
-			CD_APPLET_ADD_IN_MENU(D_("Keep quiet"), _keep_quiet, pModuleSubMenu);
+			CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Keep quiet"), MY_APPLET_SHARE_DATA_DIR"/icon.png",_keep_quiet, CD_APPLET_MY_MENU);
 		}
 		
-		CD_APPLET_ADD_IN_MENU(D_("Start XPenguins"), _start_xpenguins, pModuleSubMenu);
-		CD_APPLET_ADD_IN_MENU(D_("Stop XPenguins"), _stop_xpenguins, pModuleSubMenu);
-		CD_APPLET_ADD_ABOUT_IN_MENU (pModuleSubMenu);
+		CD_APPLET_ADD_IN_MENU(D_("Start XPenguins"), _start_xpenguins, CD_APPLET_MY_MENU);
+		CD_APPLET_ADD_IN_MENU(D_("Stop XPenguins"), _stop_xpenguins, CD_APPLET_MY_MENU);
 CD_APPLET_ON_BUILD_MENU_END
 
 

=== modified file 'Clipper/data/Clipper.conf.in' (properties changed: +x to -x)
--- Clipper/data/Clipper.conf.in	2011-09-26 12:56:12 +0000
+++ Clipper/data/Clipper.conf.in	2012-02-14 14:04:19 +0000
@@ -9,12 +9,12 @@
 #d Name of the dock it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[Default] Name of the icon as it will appear in its caption in the dock:
 name =
- #v
+#v
 sep_display=
 
-#S+ Image filename:
+#S+[Default] Image filename:
 #{Leave empty to use the default one.}
 icon=accessories-text-editor
 
@@ -60,7 +60,6 @@
 #b Is detached from the dock
 initially detached=false
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 #b Should be visible on all desktops?
 sticky=true

=== modified file 'Clipper/src/applet-clipboard.c'
--- Clipper/src/applet-clipboard.c	2011-09-26 12:56:12 +0000
+++ Clipper/src/applet-clipboard.c	2012-02-14 14:04:19 +0000
@@ -554,7 +554,7 @@
 		CD_APPLET_ADD_IN_MENU_WITH_DATA ((pItem->cDisplayedText != NULL ? pItem->cDisplayedText : pItem->cText), _cd_clipper_activate_item, pMenu, pItem);
 		if (pElement->next != NULL && ((CDClipperItem *)pElement->next->data)->iType != pItem->iType)
 		{
-			CD_APPLET_ADD_SEPARATOR (pMenu);
+			CD_APPLET_ADD_SEPARATOR_IN_MENU (pMenu);
 		}
 	}
 	return pMenu;
@@ -605,7 +605,10 @@
 		pItem = it->data;
 		if ((pItem->iType & iType) == 0)
 			continue;
-		g_string_append_printf (sText, "%s%s", pItem->cText, it->next ? cSeparator : "");
+		g_string_prepend (sText, pItem->cText); // we prepend the string in order to keep the same order
+		if (it->next)
+			g_string_prepend (sText, cSeparator);
+		// g_string_append_printf (sText, "%s%s", pItem->cText, it->next ? cSeparator : "");
 	}
 	gchar *cText = sText->str;
 	g_string_free (sText, FALSE);

=== modified file 'Clipper/src/applet-config.c'
--- Clipper/src/applet-config.c	2010-08-10 00:05:57 +0000
+++ Clipper/src/applet-config.c	2012-02-14 14:04:19 +0000
@@ -25,22 +25,6 @@
 #include "applet-config.h"
 
 
-static void _cd_clipper_on_keybinding_pull (const char *keystring, gpointer user_data)
-{
-	if (myData.pItems == NULL)
-	{
-		gchar *cIconPath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, MY_APPLET_ICON_FILE);
-		cairo_dock_show_temporary_dialog_with_icon (D_("No items yet."), myIcon, myContainer, 2000, cIconPath);
-		g_free (cIconPath);
-	}
-	else
-	{
-		GtkWidget *pMenu = cd_clipper_build_items_menu ();
-		
-		cd_clipper_popup_menu (pMenu);
-	}
-}
-
 //\_________________ Here you have to get all your parameters from the conf file. Use the macros CD_CONFIG_GET_BOOLEAN, CD_CONFIG_GET_INTEGER, CD_CONFIG_GET_STRING, etc. myConfig has been reseted to 0 at this point. This function is called at the beginning of init and reload.
 CD_APPLET_GET_CONFIG_BEGIN
 	myConfig.iItemType = CD_CONFIG_GET_INTEGER ("Configuration", "item type");
@@ -65,8 +49,7 @@
 	myConfig.bReplayAction = CD_CONFIG_GET_BOOLEAN ("Configuration", "replay action");
 	myConfig.iActionMenuDuration = CD_CONFIG_GET_INTEGER ("Configuration", "action duration");
 	
-	myConfig.cShortCut = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
-	cd_keybinder_bind (myConfig.cShortCut, (CDBindkeyHandler)_cd_clipper_on_keybinding_pull, (gpointer)NULL);
+	myConfig.cShortcut = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
 	
 	gsize length = 0;
 	myConfig.pPersistentItems = CD_CONFIG_GET_STRING_LIST("Configuration", "persistent", &length);
@@ -78,11 +61,7 @@
 
 //\_________________ Here you have to free all ressources allocated for myConfig. This one will be reseted to 0 at the end of this function. This function is called right before you get the applet's config, and when your applet is stopped, in the end.
 CD_APPLET_RESET_CONFIG_BEGIN
-	if (myConfig.cShortCut)
-	{
-		cd_keybinder_unbind(myConfig.cShortCut, (CDBindkeyHandler)_cd_clipper_on_keybinding_pull);
-		g_free (myConfig.cShortCut);
-	}
+	g_free (myConfig.cShortcut);
 	g_strfreev (myConfig.pPersistentItems);
 	g_free (myConfig.cRememberedItems);
 CD_APPLET_RESET_CONFIG_END

=== modified file 'Clipper/src/applet-init.c'
--- Clipper/src/applet-init.c	2011-09-26 12:56:12 +0000
+++ Clipper/src/applet-init.c	2012-02-14 14:04:19 +0000
@@ -67,6 +67,12 @@
 		cd_clipper_load_items (myConfig.cRememberedItems);
 	}
 	
+	// shortkey
+	myData.cKeyBinding = CD_APPLET_BIND_KEY (myConfig.cShortcut,
+		D_("Pop-up the items menu"),
+		"Configuration", "shortkey",
+		(CDBindkeyHandler) cd_clipper_on_keybinding_pull);
+	
 	CD_APPLET_REGISTER_FOR_CLICK_EVENT;
 	CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
 	CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
@@ -95,12 +101,14 @@
 	
 	if (myConfig.bRememberItems)  // on se souvient des items courants.
 	{
-		gchar *cRememberedItems = cd_clipper_concat_items_of_type (CD_CLIPPER_CLIPBOARD, CD_ITEMS_DELIMITER);  // on prend que les CTRL+c.
+		gchar *cRememberedItems = cd_clipper_concat_items_of_type (myConfig.bSeparateSelections ? CD_CLIPPER_CLIPBOARD : CD_CLIPPER_BOTH, CD_ITEMS_DELIMITER);  // on prend que les CTRL+c.
 		cairo_dock_update_conf_file (CD_APPLET_MY_CONF_FILE,
 			G_TYPE_STRING, "Configuration", "last items", cRememberedItems,
 			G_TYPE_INVALID);
 		g_free (cRememberedItems);
 	}
+	
+	cd_keybinder_unbind (myData.cKeyBinding);
 CD_APPLET_STOP_END
 
 
@@ -158,6 +166,8 @@
 			}
 		}
 		
+		cd_keybinder_rebind (myData.cKeyBinding, myConfig.cShortcut, NULL);
+		
 		if (myConfig.cRememberedItems != NULL && ! myConfig.bRememberItems)  // on ne veut plus s'en souvenir.
 		{
 			cairo_dock_update_conf_file (CD_APPLET_MY_CONF_FILE,
@@ -173,8 +183,8 @@
 			while (myData.iNbItems[i] > myConfig.iNbItems[i])
 			{
 				GList *pElement = cd_clipper_get_last_item (i);
-				if (pElement == NULL)
-					continue;
+				if (pElement == NULL)  // shouldn't happen
+					break;
 				cd_clipper_free_item (pElement->data);
 				myData.pItems = g_list_delete_link (myData.pItems, pElement);
 				myData.iNbItems[i] --;

=== modified file 'Clipper/src/applet-notifications.c'
--- Clipper/src/applet-notifications.c	2011-04-20 20:46:51 +0000
+++ Clipper/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -30,7 +30,7 @@
 	if (myData.pItems == NULL)
 	{
 		cairo_dock_remove_dialog_if_any (myIcon);
-		cairo_dock_show_temporary_dialog_with_icon (D_("No items yet."), myIcon, myContainer, 2000, "same icon");
+		cairo_dock_show_temporary_dialog_with_icon (D_("The clipboard history is empty."), myIcon, myContainer, 3000, "same icon");
 	}
 	else
 	{
@@ -86,12 +86,9 @@
 	CD_APPLET_LEAVE();
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
-	// Sub-Menu
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK ("Clear clipboard History", GTK_STOCK_CLEAR, _cd_clipper_clear_history, pSubMenu);
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK ("Paste all copied items", GTK_STOCK_PASTE, _cd_clipper_paste_all, pSubMenu);
-		CD_APPLET_ADD_SEPARATOR_IN_MENU (pSubMenu);
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK ("Clear clipboard History", GTK_STOCK_CLEAR, _cd_clipper_clear_history, CD_APPLET_MY_MENU);
+	
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK ("Paste all copied items", GTK_STOCK_PASTE, _cd_clipper_paste_all, CD_APPLET_MY_MENU);
 CD_APPLET_ON_BUILD_MENU_END
 
 
@@ -136,3 +133,20 @@
 		g_string_free (pString, TRUE);
 	}
 CD_APPLET_ON_DROP_DATA_END
+
+
+void cd_clipper_on_keybinding_pull (const char *keystring, gpointer user_data)
+{
+	if (myData.pItems == NULL)
+	{
+		gchar *cIconPath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, MY_APPLET_ICON_FILE);
+		cairo_dock_show_temporary_dialog_with_icon (D_("No items yet."), myIcon, myContainer, 2000, cIconPath);
+		g_free (cIconPath);
+	}
+	else
+	{
+		GtkWidget *pMenu = cd_clipper_build_items_menu ();
+		
+		cd_clipper_popup_menu (pMenu);
+	}
+}

=== modified file 'Clipper/src/applet-notifications.h'
--- Clipper/src/applet-notifications.h	2009-08-26 21:07:39 +0000
+++ Clipper/src/applet-notifications.h	2012-02-14 14:04:19 +0000
@@ -17,15 +17,12 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __APPLET_NOTIFICATIONS__
 #define  __APPLET_NOTIFICATIONS__
 
-
 #include <cairo-dock.h>
 
 
-
 CD_APPLET_ON_CLICK_H
 
 CD_APPLET_ON_BUILD_MENU_H
@@ -35,4 +32,7 @@
 CD_APPLET_ON_DROP_DATA_H
 
 
+void cd_clipper_on_keybinding_pull (const char *keystring, gpointer user_data);
+
+
 #endif

=== modified file 'Clipper/src/applet-struct.h'
--- Clipper/src/applet-struct.h	2010-08-10 00:05:57 +0000
+++ Clipper/src/applet-struct.h	2012-02-14 14:04:19 +0000
@@ -62,7 +62,7 @@
 	gboolean bSeparateSelections;
 	gboolean bReplayAction;
 	gint iActionMenuDuration;
-	gchar *cShortCut;
+	gchar *cShortcut;
 	gchar **pPersistentItems;
 	gboolean bRememberItems;
 	gchar *cRememberedItems;
@@ -78,6 +78,7 @@
 	gboolean bActionsLoaded;
 	gboolean bActionBlocked;
 	GtkWidget *pActionMenu;
+	CairoKeyBinding *cKeyBinding;
 	} ;
 
 #endif

=== modified file 'Composite-Manager/data/Composite-Manager.conf.in' (properties changed: +x to -x)
--- Composite-Manager/data/Composite-Manager.conf.in	2011-09-26 12:56:12 +0000
+++ Composite-Manager/data/Composite-Manager.conf.in	2012-02-14 14:04:19 +0000
@@ -9,9 +9,9 @@
 #d Name of the dock it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[Default] Name of the icon as it will appear in its caption in the dock:
 name = 
- #v
+#v
 sep_display=
 
 icon = 
@@ -58,7 +58,6 @@
 #b Is detached from the dock
 initially detached=false
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 #b Should be visible on all desktops?
 sticky=true
@@ -104,11 +103,11 @@
 #F[Style;gtk-color-picker]
 frame_style =
 
-#S+ Image when composite is active:
+#S+[Default] Image when composite is active:
 #{Leave empty to use the default one.}
 icon on = 
 
-#S+ Image when composite is inactive:
+#S+[Default] Image when composite is inactive:
 #{Leave empty to use the default one.}
 icon off = 
 

=== modified file 'Composite-Manager/src/applet-config.c'
--- Composite-Manager/src/applet-config.c	2011-08-09 18:08:08 +0000
+++ Composite-Manager/src/applet-config.c	2012-02-14 14:04:19 +0000
@@ -24,11 +24,6 @@
 #include "applet-config.h"
 
 
-static void _cd_on_keybinding_pull (const char *keystring, gpointer user_data)
-{
-	cd_toggle_composite ();
-}
-
 CD_APPLET_GET_CONFIG_BEGIN
 	myConfig.cWmCompositor = CD_CONFIG_GET_STRING ("Configuration", "compositor");
 	myConfig.cWmFallback = CD_CONFIG_GET_STRING ("Configuration", "fallback");
@@ -40,8 +35,7 @@
 	
 	myConfig.iActionOnMiddleClick = CD_CONFIG_GET_INTEGER ("Configuration", "action on click");
 	
-	myConfig.cShortCut = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
-	cd_keybinder_bind (myConfig.cShortCut, (CDBindkeyHandler)_cd_on_keybinding_pull, (gpointer)NULL);
+	myConfig.cShortcut = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
 CD_APPLET_GET_CONFIG_END
 
 
@@ -50,11 +44,7 @@
 	g_free (myConfig.cWmFallback);
 	g_free (myConfig.cIconCompositeON);
 	g_free (myConfig.cIconCompositeOFF);
-	if (myConfig.cShortCut)
-	{
-		cd_keybinder_unbind(myConfig.cShortCut, (CDBindkeyHandler)_cd_on_keybinding_pull);
-		g_free (myConfig.cShortCut);
-	}
+	g_free (myConfig.cShortcut);
 CD_APPLET_RESET_CONFIG_END
 
 

=== modified file 'Composite-Manager/src/applet-init.c'
--- Composite-Manager/src/applet-init.c	2011-08-09 18:08:08 +0000
+++ Composite-Manager/src/applet-init.c	2012-02-14 14:04:19 +0000
@@ -46,6 +46,12 @@
 	CD_APPLET_REGISTER_FOR_CLICK_EVENT;
 	CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
 	CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
+	
+	// keyboard events
+	myData.cKeyBinding = CD_APPLET_BIND_KEY (myConfig.cShortcut,
+		D_("Toggle the composite ON/OFF"),
+		"Configuration", "shortkey",
+		(CDBindkeyHandler) cd_on_keybinding_pull);
 CD_APPLET_INIT_END
 
 
@@ -55,6 +61,9 @@
 	CD_APPLET_UNREGISTER_FOR_CLICK_EVENT;
 	CD_APPLET_UNREGISTER_FOR_MIDDLE_CLICK_EVENT;
 	CD_APPLET_UNREGISTER_FOR_BUILD_MENU_EVENT;
+	
+	// shortkey
+	cd_keybinder_unbind (myData.cKeyBinding);
 CD_APPLET_STOP_END
 
 
@@ -69,5 +78,7 @@
 		cd_define_prefered_wms ();
 		
 		cd_draw_current_state ();
+		
+		cd_keybinder_rebind (myData.cKeyBinding, myConfig.cShortcut, NULL);
 	}
 CD_APPLET_RELOAD_END

=== modified file 'Composite-Manager/src/applet-notifications.c'
--- Composite-Manager/src/applet-notifications.c	2011-08-09 18:08:08 +0000
+++ Composite-Manager/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -135,7 +135,7 @@
 	
 	cLabel = (myConfig.iActionOnMiddleClick == CD_SHOW_DESKTOP ? g_strdup_printf ("%s (%s)", D_("Show desktop"), D_("middle-click")) : g_strdup (D_("Show desktop")));
 	CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel,
-		MY_APPLET_SHARE_DATA_DIR"/../shared-images/show-desktop.svg",
+		MY_APPLET_SHARE_DATA_DIR"/../shared-files/images/show-desktop.svg",
 		_cd_show_desktop,
 		CD_APPLET_MY_MENU);
 	g_free (cLabel);
@@ -144,7 +144,7 @@
 	{
 		cLabel = (myConfig.iActionOnMiddleClick == CD_EXPOSE_DESKTOPS ? g_strdup_printf ("%s (%s)", D_("Expose all the desktops"), D_("middle-click")) : g_strdup (D_("Expose all the desktops")));
 		CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel,
-			MY_APPLET_SHARE_DATA_DIR"/../shared-images/expose-desktops.svg",
+			MY_APPLET_SHARE_DATA_DIR"/../shared-files/images/expose-desktops.svg",
 			_cd_expose_desktops,
 			CD_APPLET_MY_MENU);
 		g_free (cLabel);
@@ -153,7 +153,7 @@
 	{
 		cLabel = (myConfig.iActionOnMiddleClick == CD_EXPOSE_WINDOWS ? g_strdup_printf ("%s (%s)", D_("Expose all the windows"), D_("middle-click")) : g_strdup (D_("Expose all the windows")));
 		CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel,
-			MY_APPLET_SHARE_DATA_DIR"/../shared-images/expose-windows.svg",
+			MY_APPLET_SHARE_DATA_DIR"/../shared-files/images/expose-windows.svg",
 			_cd_expose_windows,
 			CD_APPLET_MY_MENU);
 		g_free (cLabel);
@@ -168,3 +168,9 @@
 		g_free (cLabel);
 	}
 CD_APPLET_ON_BUILD_MENU_END
+
+
+void cd_on_keybinding_pull (const char *keystring, gpointer user_data)
+{
+	cd_toggle_composite ();
+}

=== modified file 'Composite-Manager/src/applet-notifications.h'
--- Composite-Manager/src/applet-notifications.h	2011-08-09 18:08:08 +0000
+++ Composite-Manager/src/applet-notifications.h	2012-02-14 14:04:19 +0000
@@ -17,7 +17,6 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __APPLET_NOTIFICATIONS__
 #define  __APPLET_NOTIFICATIONS__
 
@@ -25,11 +24,14 @@
 #include <cairo-dock.h>
 
 
-
 CD_APPLET_ON_CLICK_H
 
 CD_APPLET_ON_BUILD_MENU_H
 
 CD_APPLET_ON_MIDDLE_CLICK_H
 
+
+void cd_on_keybinding_pull (const char *keystring, gpointer user_data);
+
+
 #endif

=== modified file 'Composite-Manager/src/applet-struct.h'
--- Composite-Manager/src/applet-struct.h	2011-08-09 18:08:08 +0000
+++ Composite-Manager/src/applet-struct.h	2012-02-14 14:04:19 +0000
@@ -62,7 +62,7 @@
 	gchar *cIconCompositeOFF;
 	gboolean bAskBeforeSwitching;
 	CDWMAction iActionOnMiddleClick;
-	gchar *cShortCut;
+	gchar *cShortcut;
 } ;
 
 typedef struct {
@@ -77,6 +77,7 @@
 	gboolean bIsComposited;
 	CDWM *wmc;
 	CDWM *wmfb;
+	CairoKeyBinding *cKeyBinding;
 } ;
 
 

=== modified file 'Dbus/demos/demo_python/demo_python' (properties changed: -x to +x)
=== removed file 'Dbus/interfaces/bash/CDBashApplet.py'
--- Dbus/interfaces/bash/CDBashApplet.py	2011-04-20 20:46:51 +0000
+++ Dbus/interfaces/bash/CDBashApplet.py	1970-01-01 00:00:00 +0000
@@ -1,83 +0,0 @@
-#!/usr/bin/python
-
-# This is a part of the external applets for Cairo-Dock
-# Copyright : (C) 2010-2011 by Nochka85, Fabounet and Matttbe
-# E-mail : fabounet@xxxxxxxxxxxx
-#
-# 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.
-# http://www.gnu.org/licenses/licenses.html#GPL
-
-####################
-### dependancies ###
-####################
-import os.path
-from CDApplet import CDApplet
-
-####################
-### Applet class ###
-####################
-class CDBashApplet(CDApplet):
-	def __init__(self):
-		# call high-level init
-		self.app_folder = os.path.abspath(".")
-		CDApplet.__init__(self)
-	
-	##### private methods #####
-	
-	def call(self,action):
-		os.popen("cd " + self.app_folder + " && ./" + self.cAppletName + ".sh " + self.cAppletName + " " + self.cBusPath + " " + self.cConfFile + " " + self.cParentAppName + " " + action).read().rstrip()
-	
-	##### applet definition #####
-	
-	def get_config(self,keyfile):
-		self.call("get_config")
-	
-	def end(self):
-		self.call("end")
-	
-	def begin(self):
-		self.call("begin")
-	
-	def reload(self):
-		self.call("reload")
-	
-	##### callbacks #####
-	
-	def on_click(self,iState):
-		self.call("on_click "+str(iState))
-	
-	def on_middle_click(self):
-		self.call("on_middle_click")
-		
-	def on_build_menu(self):
-		self.call("on_build_menu")
-		
-	def on_menu_select(self,iNumEntry):
-		self.call("on_menu_select "+str(iNumEntry))
-	
-	def on_scroll(self,bScrollUp):
-		self.call("on_scroll "+str(bScrollUp))
-	
-	def on_drop_data(self,cReceivedData):
-		self.call("on_drop_data '"+cReceivedData+"'")
-	
-	def on_answer_dialog(self, button, answer):
-		self.call("on_answer_dialog "+str(button)+" '"+str(answer)+"'")
-	
-	def on_shortkey(self,key):
-		self.call("on_shortkey '"+key+"'")
-	
-	def on_change_focus(self,bIsActive):
-		self.call("on_change_focus '"+str(bIsActive)+"'")
-	
-	def on_click_sub_icon(self, iState, cIconID):
-		self.call("on_click_sub_icon '"+str(iState)+"' '"+cIconID+"'")
-	

=== added file 'Dbus/interfaces/bash/CDBashApplet.py.in'
--- Dbus/interfaces/bash/CDBashApplet.py.in	1970-01-01 00:00:00 +0000
+++ Dbus/interfaces/bash/CDBashApplet.py.in	2012-02-14 14:04:19 +0000
@@ -0,0 +1,83 @@
+#!@PYTHON_EXECUTABLE@
+#
+# This is a part of the external applets for Cairo-Dock
+# Copyright : (C) 2010-2011 by Nochka85, Fabounet and Matttbe
+# E-mail : fabounet@xxxxxxxxxxxx
+#
+# 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 3
+# 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.
+# http://www.gnu.org/licenses/licenses.html#GPL
+
+####################
+### dependancies ###
+####################
+import os.path
+from CDApplet import CDApplet
+
+####################
+### Applet class ###
+####################
+class CDBashApplet(CDApplet):
+	def __init__(self):
+		# call high-level init
+		self.app_folder = os.path.abspath(".")
+		CDApplet.__init__(self)
+	
+	##### private methods #####
+	
+	def call(self,action):
+		os.popen("cd " + self.app_folder + " && ./" + self.cAppletName + ".sh " + self.cAppletName + " " + self.cBusPath + " " + self.cConfFile + " " + self.cParentAppName + " " + action)
+	
+	##### applet definition #####
+	
+	def get_config(self,keyfile):
+		self.call("get_config")
+	
+	def end(self):
+		self.call("end")
+	
+	def begin(self):
+		self.call("begin")
+	
+	def reload(self):
+		self.call("reload")
+	
+	##### callbacks #####
+	
+	def on_click(self,iState):
+		self.call("on_click "+str(iState))
+	
+	def on_middle_click(self):
+		self.call("on_middle_click")
+		
+	def on_build_menu(self):
+		self.call("on_build_menu")
+		
+	def on_menu_select(self,iNumEntry):
+		self.call("on_menu_select "+str(iNumEntry))
+	
+	def on_scroll(self,bScrollUp):
+		self.call("on_scroll "+str(bScrollUp))
+	
+	def on_drop_data(self,cReceivedData):
+		self.call("on_drop_data '"+cReceivedData+"'")
+	
+	def on_answer_dialog(self, button, answer):
+		self.call("on_answer_dialog "+str(button)+" '"+str(answer)+"'")
+	
+	def on_shortkey(self,key):
+		self.call("on_shortkey '"+key+"'")
+	
+	def on_change_focus(self,bIsActive):
+		self.call("on_change_focus '"+str(bIsActive)+"'")
+	
+	def on_click_sub_icon(self, iState, cIconID):
+		self.call("on_click_sub_icon '"+str(iState)+"' '"+cIconID+"'")
+	

=== modified file 'Dbus/interfaces/bash/CDBashApplet.sh'
--- Dbus/interfaces/bash/CDBashApplet.sh	2011-09-26 12:56:12 +0000
+++ Dbus/interfaces/bash/CDBashApplet.sh	2012-02-14 14:04:19 +0000
@@ -8,7 +8,7 @@
 #
 # 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
+# as published by the Free Software Foundation; either version 3
 # of the License, or (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -27,8 +27,11 @@
 DBUS_INTERFACE="org.cairodock.CairoDock"
 CONF_FILE="$1"
 shift 1
+ROOT_DATA_DIR="$1"
+shift 1
 PARENT_APP_NAME="$1"
 shift 1
+SHARE_DATA_DIR="$PWD"
 
 BOTTOM=0
 TOP=1

=== modified file 'Dbus/interfaces/bash/CMakeLists.txt'
--- Dbus/interfaces/bash/CMakeLists.txt	2011-04-20 20:46:51 +0000
+++ Dbus/interfaces/bash/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -1,10 +1,9 @@
-
-########### install files ###############
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CDBashApplet.py.in ${CMAKE_CURRENT_BINARY_DIR}/CDBashApplet.py)
 
 # the python script goes with other python scripts.
 if (NOT "${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
 	# copy *.py to current binary dir (cleaner)
-	execute_process(COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/setup.py" "${CMAKE_CURRENT_SOURCE_DIR}/CDBashApplet.py" ${CMAKE_CURRENT_BINARY_DIR})
+	execute_process(COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/setup.py" ${CMAKE_CURRENT_BINARY_DIR})
 	exec_program("${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}" ARGS "setup.py" "-q" "build")
 endif()
 # Run a custom script with 'make install' 
@@ -12,6 +11,8 @@
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/BashInstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/BashInstall.cmake)
 set_target_properties(bash_pyc PROPERTIES POST_INSTALL_SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/BashInstall.cmake)
 
+########### install files ###############
+
 # and the bash functions goes into the data dir of the applet (didn't find a better place).
 install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/CDBashApplet.sh
 	DESTINATION ${dbusdatadir}

=== modified file 'Dbus/interfaces/mono/CDApplet.cs'
--- Dbus/interfaces/mono/CDApplet.cs	2011-09-26 12:56:12 +0000
+++ Dbus/interfaces/mono/CDApplet.cs	2012-02-14 14:04:19 +0000
@@ -40,6 +40,8 @@
 	public string cParentAppName = null;
 	public string cBusPath = null;
 	public string cConfFile = null;
+	public string cShareDataDir = null;
+	public string cRootDataDir = null;
 	public IApplet icon = null;
 	public ISubApplet sub_icons= null;
 	private GLib.MainLoop loop = null;
@@ -89,7 +91,9 @@
 		this.cAppletName = argv[0].Substring(2);
 		this.cBusPath = argv[2];
 		this.cConfFile = argv[3];
-		this.cParentAppName = argv[4];
+		this.cRootDataDir = argv[4];
+		this.cParentAppName = argv[5];
+		//this.cShareDataDir = Environment.CurrentDir();  // not sure of the exact syntax...
 		
 		this._get_config ();
 		this._connect_to_dock ();

=== modified file 'Dbus/interfaces/mono/CMakeLists.txt'
--- Dbus/interfaces/mono/CMakeLists.txt	2011-04-20 20:46:51 +0000
+++ Dbus/interfaces/mono/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -7,7 +7,7 @@
 	-out:${CMAKE_CURRENT_BINARY_DIR}/CDApplet.dll
 	${CMAKE_CURRENT_SOURCE_DIR}/CDApplet.cs ${CMAKE_CURRENT_SOURCE_DIR}/ISubApplet.cs ${CMAKE_CURRENT_SOURCE_DIR}/IApplet.cs)
 ### find how to register to GAC ...
-set (MONO_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib/cli")
+set (MONO_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib/cli/cairo-dock-plug-ins")
 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/CDApplet.dll
 	DESTINATION ${MONO_LIB_DIR})
 

=== removed file 'Dbus/interfaces/python/CDApplet.py'
--- Dbus/interfaces/python/CDApplet.py	2011-09-26 12:56:12 +0000
+++ Dbus/interfaces/python/CDApplet.py	1970-01-01 00:00:00 +0000
@@ -1,272 +0,0 @@
-# This is a part of the external applets for Cairo-Dock
-# Copyright : (C) 2010-2011 by Fabounet
-# E-mail : fabounet@xxxxxxxxxxxx
-#
-# 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.
-# http://www.gnu.org/licenses/licenses.html#GPL
-
-# Base class for Cairo-Dock's applets.
-# Make your own class derive from a CDApplet, and override the functions you need (the ones which don't start with an underscore).
-
-####################
-### dependancies ###
-####################
-import sys
-import os.path
-import ConfigParser
-import gobject
-import glib
-import gettext
-import dbus
-from dbus.mainloop.glib import DBusGMainLoop
-
-DBusGMainLoop(set_as_default=True)
-
-INSTALL_PREFIX = os.path.abspath("..")  # applets are launched from their install directory, so ".." is the folder containing all applets.
-
-GETTEXT_NAME = 'cairo-dock-plugins-extra'
-LOCALE_DIR = INSTALL_PREFIX + '/locale'  # user version of /usr/share/locale
-gettext.textdomain(GETTEXT_NAME)
-gettext.bind_textdomain_codeset (GETTEXT_NAME, 'UTF-8');
-gettext.bindtextdomain(GETTEXT_NAME, LOCALE_DIR)
-_ = lambda x: gettext.dgettext(GETTEXT_NAME,x)
-
-####################
-### Applet class ###
-####################
-class CDApplet:
-	
-	#############
-	### Enums ###
-	#############
-	# orientation
-	BOTTOM = 0
-	TOP    = 1
-	RIGHT  = 2
-	LEFT   = 3
-	# container type
-	DOCK    = 0
-	DESKLET = 1
-	# emblem position
-	EMBLEM_TOP_LEFT     = 0
-	EMBLEM_BOTTOM_RIGHT = 1
-	EMBLEM_BOTTOM_LEFT  = 2
-	EMBLEM_TOP_RIGHT    = 3
-	EMBLEM_MIDDLE       = 4
-	EMBLEM_BOTTOM       = 5
-	EMBLEM_TOP          = 6
-	EMBLEM_RIGHT        = 7
-	EMBLEM_LEFT         = 8
-	# menu item types
-	MENU_ENTRY        = 0
-	MENU_SUB_MENU     = 1
-	MENU_SEPARATOR    = 2
-	MENU_CHECKBOX     = 3
-	MENU_RADIO_BUTTON = 4
-	# main menu ID
-	MAIN_MENU_ID = 0
-	# dialog key pressed
-	DIALOG_KEY_ENTER = -1
-	DIALOG_KEY_ESCAPE = -2
-	
-	#####################
-	### INIT AND DBUS ###
-	#####################
-	
-	def __init__(self):
-		""" initialize the applet. Must be called by any class that inheritates from it.
-		It defines the following:
-		 - icon : our main icon
-		 - sub_icons: our sub-icons
-		 - config : a dictionnary where our configuration parameters are stored
-		 - cAppletName : name of our applet (the same as the folder where files are stored)
-		 - cConfFile : path to our config file (you will rarely need it)
-		 """
-		self.icon = None
-		self.sub_icons = None
-		self.config = {}
-		self.loop = None
-		self._bEnded = False
-		self._cMenuIconId = None
-		self.cAppletName = sys.argv[0][2:]  # the command is ./applet_name
-		self.cBusPath = sys.argv[2]
-		self.cConfFile = sys.argv[3]
-		self.cParentAppName = sys.argv[4]
-		self.cShareDataDir = INSTALL_PREFIX + '/' + self.cAppletName
-		
-		self._get_config()
-		self._connect_to_dock()
-	
-	def _connect_to_dock(self):
-		# get our applet on the bus.
-		bus = dbus.SessionBus()
-		try:
-			applet_object = bus.get_object("org.cairodock.CairoDock", self.cBusPath)
-		except:
-			print ">>> object '"+self.cBusPath+"' can't be found on the bus, exit.\nMake sure that Cairo-Dock is running"
-			sys.exit(2)
-		self.icon = dbus.Interface(applet_object, "org.cairodock.CairoDock.applet")  # this object represents our icon inside the dock or a desklet.
-		sub_icons_object = bus.get_object("org.cairodock.CairoDock", self.cBusPath+"/sub_icons")
-		self.sub_icons = dbus.Interface(sub_icons_object, "org.cairodock.CairoDock.subapplet")  # this object represents the list of icons contained in our sub-dock, or in our desklet. We'll add them one by one later, giving them a unique ID, which will be used to identify each of them.
-		# connect to signals.
-		self.icon.connect_to_signal("on_click", self.on_click)  # when the user left-clicks on our icon.
-		self.icon.connect_to_signal("on_middle_click", self.on_middle_click)  # when the user middle-clicks on our icon.
-		self.icon.connect_to_signal("on_build_menu", self._on_build_menu)  # when the user right-clicks on our applet (which builds the menu)
-		self.icon.connect_to_signal("on_menu_select", self._on_menu_select)  # when the user selects an entry of this menu.
-		self.icon.connect_to_signal("on_scroll", self.on_scroll)  # when the user scroll up or down on our icon.
-		self.icon.connect_to_signal("on_drop_data", self.on_drop_data)  # when the user drops something on our icon.
-		self.icon.connect_to_signal("on_answer_dialog", self.on_answer_dialog)  # when the user answer a question.
-		self.icon.connect_to_signal("on_shortkey", self.on_shortkey)  # when the user press the shortkey.
-		self.icon.connect_to_signal("on_change_focus", self.on_change_focus)  # when the window's focus changes.
-		self.icon.connect_to_signal("on_stop_module", self._on_stop)  # when the user deactivate our applet (or the DBus plug-in, or when the Cairo-Dock is stopped).
-		self.icon.connect_to_signal("on_reload_module", self._on_reload)  # when the user changes something in our config, or when the desklet is resized (with no change in the config).
-		self.sub_icons.connect_to_signal("on_click_sub_icon", self.on_click_sub_icon)  # when the user left-clicks on a sub-icon.
-		self.sub_icons.connect_to_signal("on_middle_click_sub_icon", self.on_middle_click_sub_icon)
-		self.sub_icons.connect_to_signal("on_scroll_sub_icon", self.on_scroll_sub_icon)
-		self.sub_icons.connect_to_signal("on_build_menu_sub_icon", self._on_build_menu_sub_icon)
-		self.sub_icons.connect_to_signal("on_drop_data_sub_icon", self.on_drop_data_sub_icon)
-	
-	def run(self):
-		""" start the applet and enter the main loop; we never get out of this function """
-		self.begin()
-		if not self._bEnded:  # _bEnded can be true if the applet runs its own main loop, in which case we stay stuck in the 'begin' function until the end of the applet; in this case, we don't want to run a main loop again!
-			self.loop = gobject.MainLoop()
-			self.loop.run()
-		print ">>> applet '"+self.cAppletName+"' terminated."
-		sys.exit(0)
-	
-	##################################
-	### callbacks on the main icon ###
-	##################################
-	
-	def on_click(self,iState):
-		""" action on click """
-		pass
-	
-	def on_middle_click(self):
-		""" action on middle-click """
-		pass
-	
-	def _on_build_menu(self):
-		self._cMenuIconId = None
-		self.on_build_menu()
-		pass
-		
-	def on_build_menu(self):
-		""" build our menu """
-		pass
-	
-	def _on_menu_select(self,iNumEntry):
-		if self._cMenuIconId == None:
-			self.on_menu_select(iNumEntry)
-		else:
-			self.on_menu_select_sub_icon(iNumEntry,self._cMenuIconId)
-	
-	def on_menu_select(self,iNumEntry):
-		""" action on selecting an entry of our menu """
-		pass
-	
-	def on_scroll(self,bScrollUp):
-		""" action on scroll """
-		pass
-	
-	def on_drop_data(self,cReceivedData):
-		""" action on dropping something on our applet """
-	
-	def on_answer(self,answer):
-		""" action on answering ok to a dialog with ok/cancel buttons (deprecated) """
-		pass
-	
-	def on_answer_dialog(self, button, answer):
-		""" action on answering a dialog """
-		if button == -1 or button == 0:
-			self.on_answer(answer)
-	
-	def on_shortkey(self,cKey):
-		""" action on pressing one of the shortkeys we bound beforehand """
-		pass
-	
-	def on_change_focus(self,bIsActive):
-		""" action when the window controlled by the applet takes or looses the focus """
-		pass
-	
-	##################################
-	### callbacks on the sub-icons ###
-	##################################
-	
-	def on_click_sub_icon(self, iState, cIconID):
-		""" action on click on one of our sub-icons"""
-		pass
-	
-	def on_middle_click_sub_icon(self, cIconID):
-		""" action on middle-click on one of our sub-icons"""
-		pass
-	
-	def on_scroll_sub_icon(self, bScrollUp, cIconID):
-		""" action on scroll on one of our sub-icons"""
-		pass
-	
-	def _on_build_menu_sub_icon(self, cIconID):
-		self._cMenuIconId = cIconID
-		self.on_build_menu_sub_icon(cIconID)
-	
-	def on_build_menu_sub_icon(self, cIconID):
-		""" build our menu on one of our sub-icons"""
-		pass
-	
-	def on_menu_select_sub_icon(self, iNumEntry, cIconID):
-		""" action on selecting an entry of our menu on a sub-icon"""
-		pass
-	
-	def on_drop_data_sub_icon(self, cReceivedData, cIconID):
-		""" action on dropping something on one of our sub-icons"""
-		pass
-	
-	def on_answer_dialog_sub_icon(self, button, answer, cIconID):
-		""" action on answering a dialog about a sub-icon"""
-		pass
-	
-	###############################
-	### callbacks on the applet ###
-	###############################
-	
-	def begin(self):
-		""" action when the applet is started """
-		pass
-	
-	def end(self):
-		""" action when the applet is terminated """
-		pass
-	
-	def _on_stop(self):
-		self._bEnded = True
-		self.end()
-		if self.loop != None:
-			self.loop.quit()
-	
-	def reload(self):
-		""" called when our applet is reloaded (config parameters have changed) """
-		pass
-	
-	def _on_reload(self,bConfigHasChanged):
-		if bConfigHasChanged:
-			self._get_config()
-			self.reload()
-	
-	def get_config(self,keyfile):
-		""" get our parameters from the key-file """
-		pass
-	
-	def _get_config(self):
-		keyfile = ConfigParser.RawConfigParser()
-		keyfile.read(self.cConfFile)
-		self.get_config(keyfile)
-	

=== added file 'Dbus/interfaces/python/CDApplet.py.in'
--- Dbus/interfaces/python/CDApplet.py.in	1970-01-01 00:00:00 +0000
+++ Dbus/interfaces/python/CDApplet.py.in	2012-02-14 14:04:19 +0000
@@ -0,0 +1,275 @@
+#!@PYTHON_EXECUTABLE@
+#
+# This is a part of the external applets for Cairo-Dock
+# Copyright : (C) 2010-2011 by Fabounet
+# E-mail : fabounet@xxxxxxxxxxxx
+#
+# 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 3
+# 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.
+# http://www.gnu.org/licenses/licenses.html#GPL
+
+# Base class for Cairo-Dock's applets.
+# Make your own class derive from a CDApplet, and override the functions you need (the ones which don't start with an underscore).
+
+####################
+### dependancies ###
+####################
+import sys
+import os.path
+import ConfigParser
+import gobject
+import glib
+import gettext
+import dbus
+from dbus.mainloop.glib import DBusGMainLoop
+
+DBusGMainLoop(set_as_default=True)
+
+INSTALL_PREFIX = os.path.abspath("..")  # applets are launched from their install directory, so ".." is the folder containing all applets.
+
+GETTEXT_NAME = 'cairo-dock-plugins-extra'
+LOCALE_DIR = INSTALL_PREFIX + '/locale'  # user version of /usr/share/locale
+gettext.textdomain(GETTEXT_NAME)
+gettext.bind_textdomain_codeset (GETTEXT_NAME, 'UTF-8');
+gettext.bindtextdomain(GETTEXT_NAME, LOCALE_DIR)
+_ = lambda x: gettext.dgettext(GETTEXT_NAME,x)
+
+####################
+### Applet class ###
+####################
+class CDApplet:
+	
+	#############
+	### Enums ###
+	#############
+	# orientation
+	BOTTOM = 0
+	TOP    = 1
+	RIGHT  = 2
+	LEFT   = 3
+	# container type
+	DOCK    = 0
+	DESKLET = 1
+	# emblem position
+	EMBLEM_TOP_LEFT     = 0
+	EMBLEM_BOTTOM_RIGHT = 1
+	EMBLEM_BOTTOM_LEFT  = 2
+	EMBLEM_TOP_RIGHT    = 3
+	EMBLEM_MIDDLE       = 4
+	EMBLEM_BOTTOM       = 5
+	EMBLEM_TOP          = 6
+	EMBLEM_RIGHT        = 7
+	EMBLEM_LEFT         = 8
+	# menu item types
+	MENU_ENTRY        = 0
+	MENU_SUB_MENU     = 1
+	MENU_SEPARATOR    = 2
+	MENU_CHECKBOX     = 3
+	MENU_RADIO_BUTTON = 4
+	# main menu ID
+	MAIN_MENU_ID = 0
+	# dialog key pressed
+	DIALOG_KEY_ENTER = -1
+	DIALOG_KEY_ESCAPE = -2
+	
+	#####################
+	### INIT AND DBUS ###
+	#####################
+	
+	def __init__(self):
+		""" initialize the applet. Must be called by any class that inheritates from it.
+		It defines the following:
+		 - icon : our main icon
+		 - sub_icons: our sub-icons
+		 - config : a dictionnary where our configuration parameters are stored
+		 - cAppletName : name of our applet (the same as the folder where files are stored)
+		 - cConfFile : path to our config file (you will rarely need it)
+		 """
+		self.icon = None
+		self.sub_icons = None
+		self.config = {}
+		self.loop = None
+		self._bEnded = False
+		self._cMenuIconId = None
+		self.cAppletName = sys.argv[0][2:]  # the command is ./applet_name
+		self.cBusPath = sys.argv[2]
+		self.cConfFile = sys.argv[3]
+		self.cRootDataDir = sys.argv[4]
+		self.cParentAppName = sys.argv[5]
+		self.cShareDataDir = INSTALL_PREFIX + '/' + self.cAppletName
+		
+		self._get_config()
+		self._connect_to_dock()
+	
+	def _connect_to_dock(self):
+		# get our applet on the bus.
+		bus = dbus.SessionBus()
+		try:
+			applet_object = bus.get_object("org.cairodock.CairoDock", self.cBusPath)
+		except:
+			print ">>> object '"+self.cBusPath+"' can't be found on the bus, exit.\nMake sure that Cairo-Dock is running"
+			sys.exit(2)
+		self.icon = dbus.Interface(applet_object, "org.cairodock.CairoDock.applet")  # this object represents our icon inside the dock or a desklet.
+		sub_icons_object = bus.get_object("org.cairodock.CairoDock", self.cBusPath+"/sub_icons")
+		self.sub_icons = dbus.Interface(sub_icons_object, "org.cairodock.CairoDock.subapplet")  # this object represents the list of icons contained in our sub-dock, or in our desklet. We'll add them one by one later, giving them a unique ID, which will be used to identify each of them.
+		# connect to signals.
+		self.icon.connect_to_signal("on_click", self.on_click)  # when the user left-clicks on our icon.
+		self.icon.connect_to_signal("on_middle_click", self.on_middle_click)  # when the user middle-clicks on our icon.
+		self.icon.connect_to_signal("on_build_menu", self._on_build_menu)  # when the user right-clicks on our applet (which builds the menu)
+		self.icon.connect_to_signal("on_menu_select", self._on_menu_select)  # when the user selects an entry of this menu.
+		self.icon.connect_to_signal("on_scroll", self.on_scroll)  # when the user scroll up or down on our icon.
+		self.icon.connect_to_signal("on_drop_data", self.on_drop_data)  # when the user drops something on our icon.
+		self.icon.connect_to_signal("on_answer_dialog", self.on_answer_dialog)  # when the user answer a question.
+		self.icon.connect_to_signal("on_shortkey", self.on_shortkey)  # when the user press the shortkey.
+		self.icon.connect_to_signal("on_change_focus", self.on_change_focus)  # when the window's focus changes.
+		self.icon.connect_to_signal("on_stop_module", self._on_stop)  # when the user deactivate our applet (or the DBus plug-in, or when the Cairo-Dock is stopped).
+		self.icon.connect_to_signal("on_reload_module", self._on_reload)  # when the user changes something in our config, or when the desklet is resized (with no change in the config).
+		self.sub_icons.connect_to_signal("on_click_sub_icon", self.on_click_sub_icon)  # when the user left-clicks on a sub-icon.
+		self.sub_icons.connect_to_signal("on_middle_click_sub_icon", self.on_middle_click_sub_icon)
+		self.sub_icons.connect_to_signal("on_scroll_sub_icon", self.on_scroll_sub_icon)
+		self.sub_icons.connect_to_signal("on_build_menu_sub_icon", self._on_build_menu_sub_icon)
+		self.sub_icons.connect_to_signal("on_drop_data_sub_icon", self.on_drop_data_sub_icon)
+	
+	def run(self):
+		""" start the applet and enter the main loop; we never get out of this function """
+		self.begin()
+		if not self._bEnded:  # _bEnded can be true if the applet runs its own main loop, in which case we stay stuck in the 'begin' function until the end of the applet; in this case, we don't want to run a main loop again!
+			self.loop = gobject.MainLoop()
+			self.loop.run()
+		print ">>> applet '"+self.cAppletName+"' terminated."
+		sys.exit(0)
+	
+	##################################
+	### callbacks on the main icon ###
+	##################################
+	
+	def on_click(self,iState):
+		""" action on click """
+		pass
+	
+	def on_middle_click(self):
+		""" action on middle-click """
+		pass
+	
+	def _on_build_menu(self):
+		self._cMenuIconId = None
+		self.on_build_menu()
+		pass
+		
+	def on_build_menu(self):
+		""" build our menu """
+		pass
+	
+	def _on_menu_select(self,iNumEntry):
+		if self._cMenuIconId == None:
+			self.on_menu_select(iNumEntry)
+		else:
+			self.on_menu_select_sub_icon(iNumEntry,self._cMenuIconId)
+	
+	def on_menu_select(self,iNumEntry):
+		""" action on selecting an entry of our menu """
+		pass
+	
+	def on_scroll(self,bScrollUp):
+		""" action on scroll """
+		pass
+	
+	def on_drop_data(self,cReceivedData):
+		""" action on dropping something on our applet """
+	
+	def on_answer(self,answer):
+		""" action on answering ok to a dialog with ok/cancel buttons (deprecated) """
+		pass
+	
+	def on_answer_dialog(self, button, answer):
+		""" action on answering a dialog """
+		if button == -1 or button == 0:
+			self.on_answer(answer)
+	
+	def on_shortkey(self,cKey):
+		""" action on pressing one of the shortkeys we bound beforehand """
+		pass
+	
+	def on_change_focus(self,bIsActive):
+		""" action when the window controlled by the applet takes or looses the focus """
+		pass
+	
+	##################################
+	### callbacks on the sub-icons ###
+	##################################
+	
+	def on_click_sub_icon(self, iState, cIconID):
+		""" action on click on one of our sub-icons"""
+		pass
+	
+	def on_middle_click_sub_icon(self, cIconID):
+		""" action on middle-click on one of our sub-icons"""
+		pass
+	
+	def on_scroll_sub_icon(self, bScrollUp, cIconID):
+		""" action on scroll on one of our sub-icons"""
+		pass
+	
+	def _on_build_menu_sub_icon(self, cIconID):
+		self._cMenuIconId = cIconID
+		self.on_build_menu_sub_icon(cIconID)
+	
+	def on_build_menu_sub_icon(self, cIconID):
+		""" build our menu on one of our sub-icons"""
+		pass
+	
+	def on_menu_select_sub_icon(self, iNumEntry, cIconID):
+		""" action on selecting an entry of our menu on a sub-icon"""
+		pass
+	
+	def on_drop_data_sub_icon(self, cReceivedData, cIconID):
+		""" action on dropping something on one of our sub-icons"""
+		pass
+	
+	def on_answer_dialog_sub_icon(self, button, answer, cIconID):
+		""" action on answering a dialog about a sub-icon"""
+		pass
+	
+	###############################
+	### callbacks on the applet ###
+	###############################
+	
+	def begin(self):
+		""" action when the applet is started """
+		pass
+	
+	def end(self):
+		""" action when the applet is terminated """
+		pass
+	
+	def _on_stop(self):
+		self._bEnded = True
+		self.end()
+		if self.loop != None:
+			self.loop.quit()
+	
+	def reload(self):
+		""" called when our applet is reloaded (config parameters have changed) """
+		pass
+	
+	def _on_reload(self,bConfigHasChanged):
+		if bConfigHasChanged:
+			self._get_config()
+			self.reload()
+	
+	def get_config(self,keyfile):
+		""" get our parameters from the key-file """
+		pass
+	
+	def _get_config(self):
+		keyfile = ConfigParser.RawConfigParser()
+		keyfile.read(self.cConfFile)
+		self.get_config(keyfile)
+	

=== modified file 'Dbus/interfaces/python/CMakeLists.txt'
--- Dbus/interfaces/python/CMakeLists.txt	2011-08-09 18:08:08 +0000
+++ Dbus/interfaces/python/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -1,11 +1,13 @@
-
-########### install files ###############
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CDApplet.py.in ${CMAKE_CURRENT_BINARY_DIR}/CDApplet.py)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CairoDock.py.in ${CMAKE_CURRENT_BINARY_DIR}/CairoDock.py)
 
 if (NOT "${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
 	# copy *.py to current binary dir (cleaner)
-	execute_process(COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/setup.py" "${CMAKE_CURRENT_SOURCE_DIR}/CDApplet.py" "${CMAKE_CURRENT_SOURCE_DIR}/CairoDock.py" ${CMAKE_CURRENT_BINARY_DIR})
+	execute_process(COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/setup.py" ${CMAKE_CURRENT_BINARY_DIR})
 	exec_program("${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}" ARGS "setup.py" "-q" "build")
 endif()
+
+########### install files ###############
 # Run a custom script with 'make install' 
 add_custom_target(python_pyc ALL)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/PythonInstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/PythonInstall.cmake)

=== removed file 'Dbus/interfaces/python/CairoDock.py'
--- Dbus/interfaces/python/CairoDock.py	2011-09-26 12:56:12 +0000
+++ Dbus/interfaces/python/CairoDock.py	1970-01-01 00:00:00 +0000
@@ -1,115 +0,0 @@
-# This is a part of the Cairo-Dock plug-ins.
-# Copyright : (C) 2010-2011 by Fabounet
-# E-mail : fabounet@xxxxxxxxxxxx
-#
-# 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.
-# http://www.gnu.org/licenses/licenses.html#GPL
-
-# Base class for Cairo-Dock's main interface.
-
-####################
-### dependancies ###
-####################
-import os.path
-import dbus
-import re
-
-USER_CONFIG_DIR = os.path.abspath("~/.config")
-
-
-##################
-### Main class ###
-##################
-class CairoDock:
-	
-	#############
-	### Enums ###
-	#############
-	# orientation
-	BOTTOM = 0
-	TOP    = 1
-	RIGHT  = 2
-	LEFT   = 3
-	# container type
-	DOCK    = "Dock"
-	DESKLET = "Desklet"
-	# emblem position
-	EMBLEM_TOP_LEFT     = 0
-	EMBLEM_BOTTOM_RIGHT = 1
-	EMBLEM_BOTTOM_LEFT  = 2
-	EMBLEM_TOP_RIGHT    = 3
-	EMBLEM_MIDDLE       = 4
-	EMBLEM_BOTTOM       = 5
-	EMBLEM_TOP          = 6
-	EMBLEM_RIGHT        = 7
-	EMBLEM_LEFT         = 8
-	# module category
-	CATEGORY_BEHAVIOR         = 0
-	CATEGORY_THEME            = 1
-	CATEGORY_APPLET_FILES     = 2
-	CATEGORY_APPLET_INTERNET  = 3
-	CATEGORY_APPLET_DESKTOP   = 4
-	CATEGORY_APPLET_ACCESSORY = 5
-	CATEGORY_APPLET_SYSTEM    = 6
-	CATEGORY_APPLET_FUN       = 7
-	# module type
-	CAN_DOCK    = 1
-	CAN_DESKLET = 2
-	# icon type
-	TYPE_LAUNCHER        = "Launcher"
-	TYPE_APPLICATION     = "Application"
-	TYPE_APPLET          = "Applet"
-	TYPE_SEPARATOR       = "Separator"
-	TYPE_CONTAINER       = "Container"
-	TYPE_CLASS_CONTAINER = "Class-Container"
-	TYPE_OTHER           = "Other"
-	# toggle dock visibility
-	HIDE_DOCK   = 0
-	SHOW_DOCK   = 1
-	TOGGLE_DOCK = 2
-	
-	#####################
-	### INIT AND DBUS ###
-	#####################
-	
-	def __init__(self, app_name="cairo-dock"):
-		""" Initialize the interface.
-		It defines the following:
-		 - cDataDir: main dir
-		 - cCurrentThemeDir: current theme dir
-		 - cConfFile : path to the global config file
-		 """
-		self.dock = None
-		self.cAppName = app_name
-		self.cDataDir = USER_CONFIG_DIR + '/' + app_name
-		self.cCurrentThemeDir = self.cDataDir + '/current_theme'
-		self.cLaunchersDir = self.cCurrentThemeDir + '/launchers'
-		self.cPluginsDir = self.cCurrentThemeDir + '/plug-ins'
-		self.cConfFile = self.cCurrentThemeDir + '/' + app_name + '.conf'
-		
-		self._connect()
-	
-	def _connect(self):
-		# get gldi on the bus.
-		bus = dbus.SessionBus()
-		
-		name1 = self.cAppName.replace('-','')  # -> cairodock
-		name2 = re.sub('-[a-z]', lambda x: x.group(0).upper(), self.cAppName)
-		name2 = re.sub('^[a-z]', lambda x: x.group(0).upper(), name2)  # -> CairoDock
-		name2 = name2.replace('-','')  # -> CairoDock
-		cBusPath = '/org/'+name1+'/'+name2
-		try:
-			dbus_object = bus.get_object("org.cairodock.CairoDock", cBusPath)
-		except:
-			print ">>> object '"+cBusPath+"' can't be found on the bus, exit.\nMake sure that Cairo-Dock is running"
-			return
-		self.iface = dbus.Interface(dbus_object, "org.cairodock.CairoDock")  # this object represents gldi.
-		

=== added file 'Dbus/interfaces/python/CairoDock.py.in'
--- Dbus/interfaces/python/CairoDock.py.in	1970-01-01 00:00:00 +0000
+++ Dbus/interfaces/python/CairoDock.py.in	2012-02-14 14:04:19 +0000
@@ -0,0 +1,117 @@
+#!@PYTHON_EXECUTABLE@
+#
+# This is a part of the Cairo-Dock plug-ins.
+# Copyright : (C) 2010-2011 by Fabounet
+# E-mail : fabounet@xxxxxxxxxxxx
+#
+# 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 3
+# 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.
+# http://www.gnu.org/licenses/licenses.html#GPL
+
+# Base class for Cairo-Dock's main interface.
+
+####################
+### dependancies ###
+####################
+import os.path
+import dbus
+import re
+
+USER_CONFIG_DIR = os.path.abspath("~/.config")
+
+
+##################
+### Main class ###
+##################
+class CairoDock:
+	
+	#############
+	### Enums ###
+	#############
+	# orientation
+	BOTTOM = 0
+	TOP    = 1
+	RIGHT  = 2
+	LEFT   = 3
+	# container type
+	DOCK    = "Dock"
+	DESKLET = "Desklet"
+	# emblem position
+	EMBLEM_TOP_LEFT     = 0
+	EMBLEM_BOTTOM_RIGHT = 1
+	EMBLEM_BOTTOM_LEFT  = 2
+	EMBLEM_TOP_RIGHT    = 3
+	EMBLEM_MIDDLE       = 4
+	EMBLEM_BOTTOM       = 5
+	EMBLEM_TOP          = 6
+	EMBLEM_RIGHT        = 7
+	EMBLEM_LEFT         = 8
+	# module category
+	CATEGORY_BEHAVIOR         = 0
+	CATEGORY_THEME            = 1
+	CATEGORY_APPLET_FILES     = 2
+	CATEGORY_APPLET_INTERNET  = 3
+	CATEGORY_APPLET_DESKTOP   = 4
+	CATEGORY_APPLET_ACCESSORY = 5
+	CATEGORY_APPLET_SYSTEM    = 6
+	CATEGORY_APPLET_FUN       = 7
+	# module type
+	CAN_DOCK    = 1
+	CAN_DESKLET = 2
+	# icon type
+	TYPE_LAUNCHER        = "Launcher"
+	TYPE_APPLICATION     = "Application"
+	TYPE_APPLET          = "Applet"
+	TYPE_SEPARATOR       = "Separator"
+	TYPE_CONTAINER       = "Container"
+	TYPE_CLASS_CONTAINER = "Class-Container"
+	TYPE_OTHER           = "Other"
+	# toggle dock visibility
+	HIDE_DOCK   = 0
+	SHOW_DOCK   = 1
+	TOGGLE_DOCK = 2
+	
+	#####################
+	### INIT AND DBUS ###
+	#####################
+	
+	def __init__(self, app_name="cairo-dock"):
+		""" Initialize the interface.
+		It defines the following:
+		 - cDataDir: main dir
+		 - cCurrentThemeDir: current theme dir
+		 - cConfFile : path to the global config file
+		 """
+		self.dock = None
+		self.cAppName = app_name
+		self.cDataDir = USER_CONFIG_DIR + '/' + app_name
+		self.cCurrentThemeDir = self.cDataDir + '/current_theme'
+		self.cLaunchersDir = self.cCurrentThemeDir + '/launchers'
+		self.cPluginsDir = self.cCurrentThemeDir + '/plug-ins'
+		self.cConfFile = self.cCurrentThemeDir + '/' + app_name + '.conf'
+		
+		self._connect()
+	
+	def _connect(self):
+		# get gldi on the bus.
+		bus = dbus.SessionBus()
+		
+		name1 = self.cAppName.replace('-','')  # -> cairodock
+		name2 = re.sub('-[a-z]', lambda x: x.group(0).upper(), self.cAppName)
+		name2 = re.sub('^[a-z]', lambda x: x.group(0).upper(), name2)  # -> CairoDock
+		name2 = name2.replace('-','')  # -> CairoDock
+		cBusPath = '/org/'+name1+'/'+name2
+		try:
+			dbus_object = bus.get_object("org.cairodock.CairoDock", cBusPath)
+		except:
+			print ">>> object '"+cBusPath+"' can't be found on the bus, exit.\nMake sure that Cairo-Dock is running"
+			return
+		self.iface = dbus.Interface(dbus_object, "org.cairodock.CairoDock")  # this object represents gldi.
+		

=== modified file 'Dbus/interfaces/ruby/CDApplet.rb'
--- Dbus/interfaces/ruby/CDApplet.rb	2011-09-26 12:56:12 +0000
+++ Dbus/interfaces/ruby/CDApplet.rb	2012-02-14 14:04:19 +0000
@@ -57,8 +57,6 @@
 	DIALOG_KEY_ESCAPE = -2
 
 	def initialize
-		#~ self.cAppletName = File.basename(Dir.getwd)
-		#~ self.cConfFile = File.expand_path("~/.config/cairo-dock/current_theme/plug-ins/#{self.cAppletName}/#{self.cAppletName}.conf")
 		self.config = {}
 		self.bus = nil
 		self.icon = nil
@@ -67,7 +65,9 @@
 		self.cAppletName = $0[2,999]
 		self.cBusPath = ARGV[1]
 		self.cConfFile = ARGV[2]
-		self.cParentAppName = ARGV[3]
+		self.cRootDataDir = ARGV[3]
+		self.cParentAppName = ARGV[4]
+		self.cShareDataDir = Dir.getwd
 		
 		self._get_config()
 		self._connect_to_dock()

=== modified file 'Dbus/interfaces/vala/CDApplet.vala'
--- Dbus/interfaces/vala/CDApplet.vala	2011-09-26 12:56:12 +0000
+++ Dbus/interfaces/vala/CDApplet.vala	2012-02-14 14:04:19 +0000
@@ -83,6 +83,8 @@
 	public string cConfFile;
 	public string cParentAppName;
 	public string cBusPath;
+	public string cShareDataDir;
+	public string cRootDataDir;
 	private MainLoop loop;
 	private string _cMenuIconId;
 	
@@ -129,7 +131,9 @@
 		this.cAppletName = argv[0].substring(2,999);
 		this.cBusPath = argv[2];
 		this.cConfFile = argv[3];
-		this.cParentAppName = argv[4];
+		this.cRootDataDir = argv[4];
+		this.cParentAppName = argv[5];
+		//this.cShareDataDir = get_current_dir();  // not sure of the exact syntax...
 		
 		this._get_config();
 		this._connect_to_bus();

=== modified file 'Dbus/interfaces/vala/src/CDApplet.h'
--- Dbus/interfaces/vala/src/CDApplet.h	2011-10-03 15:13:15 +0000
+++ Dbus/interfaces/vala/src/CDApplet.h	2012-02-14 14:04:19 +0000
@@ -1,8 +1,8 @@
 /* CDApplet.h generated by valac 0.10.0, the Vala compiler, do not modify */
 
 
-#ifndef ___HOME_FAB_CD2_4_PLUG_INS_DBUS_INTERFACES_VALA_SRC_CDAPPLET_H__
-#define ___HOME_FAB_CD2_4_PLUG_INS_DBUS_INTERFACES_VALA_SRC_CDAPPLET_H__
+#ifndef ___HOME_FAB_CD2_CAIRO_DOCK_PLUG_INS_DBUS_INTERFACES_VALA_SRC_CDAPPLET_H__
+#define ___HOME_FAB_CD2_CAIRO_DOCK_PLUG_INS_DBUS_INTERFACES_VALA_SRC_CDAPPLET_H__
 
 #include <glib.h>
 #include <glib-object.h>

=== modified file 'Dbus/src/applet-dbus.c'
--- Dbus/src/applet-dbus.c	2011-08-09 18:08:08 +0000
+++ Dbus/src/applet-dbus.c	2012-02-14 14:04:19 +0000
@@ -82,7 +82,7 @@
 
 static void _on_init_module (CairoDockModuleInstance *pModuleInstance, GKeyFile *pKeyFile)
 {
-	cd_debug ("%s (%d)", __func__, (int)pModuleInstance->pModule->fLastLoadingTime);
+	cd_debug ("%s ()", __func__);
 	
 	//\_____________ On initialise l'icone.
 	cd_dbus_action_on_init_module (pModuleInstance);
@@ -105,7 +105,7 @@
 	//\_____________ On (re)lance l'executable de l'applet.
 	cd_dbus_launch_applet_process (pModuleInstance, pDbusApplet);
 }
-static gboolean _cd_dbus_register_new_module (const gchar *cModuleName, const gchar *cDescription, const gchar *cAuthor, const gchar *cVersion, gint iCategory, const gchar *cIconName, const gchar *cShareDataDir, gboolean bMultiInstance)
+static gboolean _cd_dbus_register_new_module (const gchar *cModuleName, const gchar *cDescription, const gchar *cAuthor, const gchar *cVersion, gint iCategory, const gchar *cIconName, const gchar *cShareDataDir, gboolean bMultiInstance, gboolean bActAsLauncher)
 {
 	cd_message ("%s (%s)", __func__, cModuleName);
 	
@@ -147,6 +147,7 @@
 		pVisitCard->cTitle = g_strdup (dgettext (pVisitCard->cGettextDomain, cModuleName));
 		pVisitCard->iContainerType = CAIRO_DOCK_MODULE_CAN_DOCK | CAIRO_DOCK_MODULE_CAN_DESKLET;
 		pVisitCard->bMultiInstance = bMultiInstance;
+		pVisitCard->bActAsLauncher = bActAsLauncher;  // ex.: XChat controls xchat/xchat-gnome, but it does that only after initializing; we need to know if it's a launcher before the taskbar is loaded, hence this parameter.
 		pModule->pInterface = g_new0 (CairoDockModuleInterface, 1);
 		pModule->pInterface->initModule = _on_init_module;
 		pModule->pInterface->stopModule = cd_dbus_emit_on_stop_module;
@@ -213,11 +214,13 @@
 	
 	gboolean bMultiInstance = g_key_file_get_boolean (pKeyFile, "Register", "multi-instance", NULL);  // false if not specified
 	
+	gboolean bActAsLauncher = g_key_file_get_boolean (pKeyFile, "Register", "act as launcher", NULL);  // false if not specified
+	
 	gchar *cShareDataDir = g_strdup_printf ("%s/%s", cThirdPartyPath, cModuleName);
 	
 	g_key_file_free (pKeyFile);
 	
-	gboolean bActivationOk = _cd_dbus_register_new_module (cModuleName, cDescription, cAuthor, cVersion, iCategory, cIconName, cShareDataDir, bMultiInstance);
+	gboolean bActivationOk = _cd_dbus_register_new_module (cModuleName, cDescription, cAuthor, cVersion, iCategory, cIconName, cShareDataDir, bMultiInstance, bActAsLauncher);
 	g_free (cDescription);
 	g_free (cAuthor);
 	g_free (cVersion);
@@ -295,7 +298,7 @@
 		{
 			if (CAIRO_DOCK_IS_DOCK (pContainer))
 			{
-				cairo_dock_detach_icon_from_dock (pIcon, CAIRO_DOCK (pContainer), myIconsParam.iSeparateIcons);
+				cairo_dock_detach_icon_from_dock (pIcon, CAIRO_DOCK (pContainer));
 				cairo_dock_free_icon (pIcon);
 				cairo_dock_update_dock_size (CAIRO_DOCK (pContainer));
 				cairo_dock_redraw_container (pContainer);

=== modified file 'Dbus/src/applet-struct.h'
--- Dbus/src/applet-struct.h	2011-09-26 12:56:12 +0000
+++ Dbus/src/applet-struct.h	2012-02-14 14:04:19 +0000
@@ -105,9 +105,10 @@
 	dbusMainObject *pMainObject;
 	const gchar *cProgName;
 	gchar *cBasePath;
-	GtkWidget *pModuleSubMenu;
+	///GtkWidget *pModuleSubMenu;
 	GtkWidget *pModuleMainMenu;
 	dbusApplet *pCurrentMenuDbusApplet;
+	gint iMenuPosition;
 	Window xActiveWindow;
 	CairoDockTask *pGetListTask;
 	GList *pUpdateTasksList;

=== modified file 'Dbus/src/dbus-applet-spec.h'
--- Dbus/src/dbus-applet-spec.h	2011-04-20 20:46:51 +0000
+++ Dbus/src/dbus-applet-spec.h	2012-02-14 14:04:19 +0000
@@ -55,102 +55,6 @@
 #endif /* !G_ENABLE_DEBUG */
 
 
-/* BOOLEAN:STRING,INT,POINTER */
-extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_INT_POINTER (GClosure     *closure,
-                                                                          GValue       *return_value,
-                                                                          guint         n_param_values,
-                                                                          const GValue *param_values,
-                                                                          gpointer      invocation_hint,
-                                                                          gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_INT_POINTER (GClosure     *closure,
-                                                              GValue       *return_value G_GNUC_UNUSED,
-                                                              guint         n_param_values,
-                                                              const GValue *param_values,
-                                                              gpointer      invocation_hint G_GNUC_UNUSED,
-                                                              gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_INT_POINTER) (gpointer     data1,
-                                                                gpointer     arg_1,
-                                                                gint         arg_2,
-                                                                gpointer     arg_3,
-                                                                gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_INT_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 4);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__STRING_INT_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_int (param_values + 2),
-                       g_marshal_value_peek_pointer (param_values + 3),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
-/* BOOLEAN:BOXED,POINTER */
-extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER (GClosure     *closure,
-                                                                     GValue       *return_value,
-                                                                     guint         n_param_values,
-                                                                     const GValue *param_values,
-                                                                     gpointer      invocation_hint,
-                                                                     gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER (GClosure     *closure,
-                                                         GValue       *return_value G_GNUC_UNUSED,
-                                                         guint         n_param_values,
-                                                         const GValue *param_values,
-                                                         gpointer      invocation_hint G_GNUC_UNUSED,
-                                                         gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER) (gpointer     data1,
-                                                           gpointer     arg_1,
-                                                           gpointer     arg_2,
-                                                           gpointer     data2);
-  register GMarshalFunc_BOOLEAN__BOXED_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_boxed (param_values + 1),
-                       g_marshal_value_peek_pointer (param_values + 2),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
 /* BOOLEAN:BOXED,BOXED,POINTER */
 extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_BOXED_POINTER (GClosure     *closure,
                                                                            GValue       *return_value,
@@ -200,32 +104,33 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:BOOLEAN,POINTER */
-extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
-                                                                       GValue       *return_value,
-                                                                       guint         n_param_values,
-                                                                       const GValue *param_values,
-                                                                       gpointer      invocation_hint,
-                                                                       gpointer      marshal_data);
+/* BOOLEAN:BOOLEAN,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_STRING_POINTER (GClosure     *closure,
+                                                                              GValue       *return_value,
+                                                                              guint         n_param_values,
+                                                                              const GValue *param_values,
+                                                                              gpointer      invocation_hint,
+                                                                              gpointer      marshal_data);
 void
-dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
-                                                           GValue       *return_value G_GNUC_UNUSED,
-                                                           guint         n_param_values,
-                                                           const GValue *param_values,
-                                                           gpointer      invocation_hint G_GNUC_UNUSED,
-                                                           gpointer      marshal_data)
+dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_STRING_POINTER (GClosure     *closure,
+                                                                  GValue       *return_value G_GNUC_UNUSED,
+                                                                  guint         n_param_values,
+                                                                  const GValue *param_values,
+                                                                  gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                  gpointer      marshal_data)
 {
-  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (gpointer     data1,
-                                                             gboolean     arg_1,
-                                                             gpointer     arg_2,
-                                                             gpointer     data2);
-  register GMarshalFunc_BOOLEAN__BOOLEAN_POINTER callback;
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_STRING_POINTER) (gpointer     data1,
+                                                                    gboolean     arg_1,
+                                                                    gpointer     arg_2,
+                                                                    gpointer     arg_3,
+                                                                    gpointer     data2);
+  register GMarshalFunc_BOOLEAN__BOOLEAN_STRING_POINTER callback;
   register GCClosure *cc = (GCClosure*) closure;
   register gpointer data1, data2;
   gboolean v_return;
 
   g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 3);
+  g_return_if_fail (n_param_values == 4);
 
   if (G_CCLOSURE_SWAP_DATA (closure))
     {
@@ -237,58 +142,10 @@
       data1 = g_value_peek_pointer (param_values + 0);
       data2 = closure->data;
     }
-  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
+  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
 
   v_return = callback (data1,
                        g_marshal_value_peek_boolean (param_values + 1),
-                       g_marshal_value_peek_pointer (param_values + 2),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
-/* BOOLEAN:STRING,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
-                                                                             GValue       *return_value,
-                                                                             guint         n_param_values,
-                                                                             const GValue *param_values,
-                                                                             gpointer      invocation_hint,
-                                                                             gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
-                                                                 GValue       *return_value G_GNUC_UNUSED,
-                                                                 guint         n_param_values,
-                                                                 const GValue *param_values,
-                                                                 gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                 gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (gpointer     data1,
-                                                                   gpointer     arg_1,
-                                                                   gpointer     arg_2,
-                                                                   gpointer     arg_3,
-                                                                   gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_STRING_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 4);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
                        g_marshal_value_peek_string (param_values + 2),
                        g_marshal_value_peek_pointer (param_values + 3),
                        data2);
@@ -345,6 +202,100 @@
   g_value_set_boolean (return_value, v_return);
 }
 
+/* BOOLEAN:POINTER,POINTER */
+extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__POINTER_POINTER (GClosure     *closure,
+                                                                       GValue       *return_value,
+                                                                       guint         n_param_values,
+                                                                       const GValue *param_values,
+                                                                       gpointer      invocation_hint,
+                                                                       gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_applet_BOOLEAN__POINTER_POINTER (GClosure     *closure,
+                                                           GValue       *return_value G_GNUC_UNUSED,
+                                                           guint         n_param_values,
+                                                           const GValue *param_values,
+                                                           gpointer      invocation_hint G_GNUC_UNUSED,
+                                                           gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_POINTER) (gpointer     data1,
+                                                             gpointer     arg_1,
+                                                             gpointer     arg_2,
+                                                             gpointer     data2);
+  register GMarshalFunc_BOOLEAN__POINTER_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_pointer (param_values + 1),
+                       g_marshal_value_peek_pointer (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:BOXED,POINTER */
+extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER (GClosure     *closure,
+                                                                     GValue       *return_value,
+                                                                     guint         n_param_values,
+                                                                     const GValue *param_values,
+                                                                     gpointer      invocation_hint,
+                                                                     gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER (GClosure     *closure,
+                                                         GValue       *return_value G_GNUC_UNUSED,
+                                                         guint         n_param_values,
+                                                         const GValue *param_values,
+                                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                                         gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER) (gpointer     data1,
+                                                           gpointer     arg_1,
+                                                           gpointer     arg_2,
+                                                           gpointer     data2);
+  register GMarshalFunc_BOOLEAN__BOXED_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_boxed (param_values + 1),
+                       g_marshal_value_peek_pointer (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
 /* BOOLEAN:STRING,INT,STRING,POINTER */
 extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_INT_STRING_POINTER (GClosure     *closure,
                                                                                  GValue       *return_value,
@@ -396,27 +347,27 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:BOOLEAN,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_STRING_POINTER (GClosure     *closure,
-                                                                              GValue       *return_value,
-                                                                              guint         n_param_values,
-                                                                              const GValue *param_values,
-                                                                              gpointer      invocation_hint,
-                                                                              gpointer      marshal_data);
+/* BOOLEAN:STRING,INT,POINTER */
+extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_INT_POINTER (GClosure     *closure,
+                                                                          GValue       *return_value,
+                                                                          guint         n_param_values,
+                                                                          const GValue *param_values,
+                                                                          gpointer      invocation_hint,
+                                                                          gpointer      marshal_data);
 void
-dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_STRING_POINTER (GClosure     *closure,
-                                                                  GValue       *return_value G_GNUC_UNUSED,
-                                                                  guint         n_param_values,
-                                                                  const GValue *param_values,
-                                                                  gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                  gpointer      marshal_data)
+dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_INT_POINTER (GClosure     *closure,
+                                                              GValue       *return_value G_GNUC_UNUSED,
+                                                              guint         n_param_values,
+                                                              const GValue *param_values,
+                                                              gpointer      invocation_hint G_GNUC_UNUSED,
+                                                              gpointer      marshal_data)
 {
-  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_STRING_POINTER) (gpointer     data1,
-                                                                    gboolean     arg_1,
-                                                                    gpointer     arg_2,
-                                                                    gpointer     arg_3,
-                                                                    gpointer     data2);
-  register GMarshalFunc_BOOLEAN__BOOLEAN_STRING_POINTER callback;
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_INT_POINTER) (gpointer     data1,
+                                                                gpointer     arg_1,
+                                                                gint         arg_2,
+                                                                gpointer     arg_3,
+                                                                gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_INT_POINTER callback;
   register GCClosure *cc = (GCClosure*) closure;
   register gpointer data1, data2;
   gboolean v_return;
@@ -434,11 +385,11 @@
       data1 = g_value_peek_pointer (param_values + 0);
       data2 = closure->data;
     }
-  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+  callback = (GMarshalFunc_BOOLEAN__STRING_INT_POINTER) (marshal_data ? marshal_data : cc->callback);
 
   v_return = callback (data1,
-                       g_marshal_value_peek_boolean (param_values + 1),
-                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_int (param_values + 2),
                        g_marshal_value_peek_pointer (param_values + 3),
                        data2);
 
@@ -543,26 +494,75 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:POINTER,POINTER */
-extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__POINTER_POINTER (GClosure     *closure,
+/* BOOLEAN:STRING,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
+                                                                             GValue       *return_value,
+                                                                             guint         n_param_values,
+                                                                             const GValue *param_values,
+                                                                             gpointer      invocation_hint,
+                                                                             gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
+                                                                 GValue       *return_value G_GNUC_UNUSED,
+                                                                 guint         n_param_values,
+                                                                 const GValue *param_values,
+                                                                 gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                 gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (gpointer     data1,
+                                                                   gpointer     arg_1,
+                                                                   gpointer     arg_2,
+                                                                   gpointer     arg_3,
+                                                                   gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_STRING_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_pointer (param_values + 3),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:BOOLEAN,POINTER */
+extern void dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
                                                                        GValue       *return_value,
                                                                        guint         n_param_values,
                                                                        const GValue *param_values,
                                                                        gpointer      invocation_hint,
                                                                        gpointer      marshal_data);
 void
-dbus_glib_marshal_cd_dbus_applet_BOOLEAN__POINTER_POINTER (GClosure     *closure,
+dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
                                                            GValue       *return_value G_GNUC_UNUSED,
                                                            guint         n_param_values,
                                                            const GValue *param_values,
                                                            gpointer      invocation_hint G_GNUC_UNUSED,
                                                            gpointer      marshal_data)
 {
-  typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_POINTER) (gpointer     data1,
-                                                             gpointer     arg_1,
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (gpointer     data1,
+                                                             gboolean     arg_1,
                                                              gpointer     arg_2,
                                                              gpointer     data2);
-  register GMarshalFunc_BOOLEAN__POINTER_POINTER callback;
+  register GMarshalFunc_BOOLEAN__BOOLEAN_POINTER callback;
   register GCClosure *cc = (GCClosure*) closure;
   register gpointer data1, data2;
   gboolean v_return;
@@ -580,10 +580,10 @@
       data1 = g_value_peek_pointer (param_values + 0);
       data2 = closure->data;
     }
-  callback = (GMarshalFunc_BOOLEAN__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
 
   v_return = callback (data1,
-                       g_marshal_value_peek_pointer (param_values + 1),
+                       g_marshal_value_peek_boolean (param_values + 1),
                        g_marshal_value_peek_pointer (param_values + 2),
                        data2);
 
@@ -613,15 +613,16 @@
   { (GCallback) cd_dbus_applet_render_values, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 992 },
   { (GCallback) cd_dbus_applet_control_appli, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_POINTER, 1052 },
   { (GCallback) cd_dbus_applet_show_appli, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOOLEAN_POINTER, 1121 },
-  { (GCallback) cd_dbus_applet_populate_menu, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 1175 },
-  { (GCallback) cd_dbus_applet_add_menu_items, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 1235 },
-  { (GCallback) cd_dbus_applet_bind_shortkey, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 1298 },
+  { (GCallback) cd_dbus_applet_act_on_appli, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__STRING_POINTER, 1175 },
+  { (GCallback) cd_dbus_applet_populate_menu, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 1232 },
+  { (GCallback) cd_dbus_applet_add_menu_items, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 1292 },
+  { (GCallback) cd_dbus_applet_bind_shortkey, dbus_glib_marshal_cd_dbus_applet_BOOLEAN__BOXED_POINTER, 1355 },
 };
 
 const DBusGObjectInfo dbus_glib_cd_dbus_applet_object_info = {  1,
   dbus_glib_cd_dbus_applet_methods,
-  20,
-"org.cairodock.CairoDock.applet\0Get\0S\0cProperty\0I\0s\0value\0O\0F\0N\0v\0\0org.cairodock.CairoDock.applet\0GetAll\0S\0hProperties\0O\0F\0N\0a{sv}\0\0org.cairodock.CairoDock.applet\0SetQuickInfo\0S\0cQuickInfo\0I\0s\0\0org.cairodock.CairoDock.applet\0SetLabel\0S\0cLabel\0I\0s\0\0org.cairodock.CairoDock.applet\0SetIcon\0S\0cImage\0I\0s\0\0org.cairodock.CairoDock.applet\0SetEmblem\0S\0cImage\0I\0s\0iPosition\0I\0i\0\0org.cairodock.CairoDock.applet\0Animate\0S\0cAnimation\0I\0s\0iNbRounds\0I\0i\0\0org.cairodock.CairoDock.applet\0DemandsAttention\0S\0bStart\0I\0b\0cAnimation\0I\0s\0\0org.cairodock.CairoDock.applet\0ShowDialog\0S\0cMessage\0I\0s\0iDuration\0I\0i\0\0org.cairodock.CairoDock.applet\0AskQuestion\0S\0cMessage\0I\0s\0\0org.cairodock.CairoDock.applet\0AskValue\0S\0cMessage\0I\0s\0fInitialValue\0I\0d\0fMaxlValue\0I\0d\0\0org.cairodock.CairoDock.applet\0AskText\0S\0cMessage\0I\0s\0cInitialText\0I\0s\0\0org.cairodock.CairoDock.applet\0PopupDialog\0S\0hDialogAttributes\0I\0a{sv}\0hWidgetAttributes\0I\0a{sv}\0\0org.cairodock.CairoDock.applet\0AddDataRenderer\0S\0cType\0I\0s\0iNbValues\0I\0i\0cTheme\0I\0s\0\0org.cairodock.CairoDock.applet\0RenderValues\0S\0pValues\0I\0ad\0\0org.cairodock.CairoDock.applet\0ControlAppli\0S\0cApplicationClass\0I\0s\0\0org.cairodock.CairoDock.applet\0ShowAppli\0S\0bShow\0I\0b\0\0org.cairodock.CairoDock.applet\0PopulateMenu\0S\0pLabels\0I\0as\0\0org.cairodock.CairoDock.applet\0AddMenuItems\0S\0pItems\0I\0aa{sv}\0\0org.cairodock.CairoDock.applet\0BindShortkey\0S\0cShortkeys\0I\0as\0\0\0",
+  21,
+"org.cairodock.CairoDock.applet\0Get\0S\0cProperty\0I\0s\0value\0O\0F\0N\0v\0\0org.cairodock.CairoDock.applet\0GetAll\0S\0hProperties\0O\0F\0N\0a{sv}\0\0org.cairodock.CairoDock.applet\0SetQuickInfo\0S\0cQuickInfo\0I\0s\0\0org.cairodock.CairoDock.applet\0SetLabel\0S\0cLabel\0I\0s\0\0org.cairodock.CairoDock.applet\0SetIcon\0S\0cImage\0I\0s\0\0org.cairodock.CairoDock.applet\0SetEmblem\0S\0cImage\0I\0s\0iPosition\0I\0i\0\0org.cairodock.CairoDock.applet\0Animate\0S\0cAnimation\0I\0s\0iNbRounds\0I\0i\0\0org.cairodock.CairoDock.applet\0DemandsAttention\0S\0bStart\0I\0b\0cAnimation\0I\0s\0\0org.cairodock.CairoDock.applet\0ShowDialog\0S\0cMessage\0I\0s\0iDuration\0I\0i\0\0org.cairodock.CairoDock.applet\0AskQuestion\0S\0cMessage\0I\0s\0\0org.cairodock.CairoDock.applet\0AskValue\0S\0cMessage\0I\0s\0fInitialValue\0I\0d\0fMaxlValue\0I\0d\0\0org.cairodock.CairoDock.applet\0AskText\0S\0cMessage\0I\0s\0cInitialText\0I\0s\0\0org.cairodock.CairoDock.applet\0PopupDialog\0S\0hDialogAttributes\0I\0a{sv}\0hWidgetAttributes\0I\0a{sv}\0\0org.cairodock.CairoDock.applet\0AddDataRenderer\0S\0cType\0I\0s\0iNbValues\0I\0i\0cTheme\0I\0s\0\0org.cairodock.CairoDock.applet\0RenderValues\0S\0pValues\0I\0ad\0\0org.cairodock.CairoDock.applet\0ControlAppli\0S\0cApplicationClass\0I\0s\0\0org.cairodock.CairoDock.applet\0ShowAppli\0S\0bShow\0I\0b\0\0org.cairodock.CairoDock.applet\0ActOnAppli\0S\0cAction\0I\0s\0\0org.cairodock.CairoDock.applet\0PopulateMenu\0S\0pLabels\0I\0as\0\0org.cairodock.CairoDock.applet\0AddMenuItems\0S\0pItems\0I\0aa{sv}\0\0org.cairodock.CairoDock.applet\0BindShortkey\0S\0cShortkeys\0I\0as\0\0\0",
 "org.cairodock.CairoDock.applet\0on_click\0org.cairodock.CairoDock.applet\0on_middle_click\0org.cairodock.CairoDock.applet\0on_scroll\0org.cairodock.CairoDock.applet\0on_build_menu\0org.cairodock.CairoDock.applet\0on_menu_select\0org.cairodock.CairoDock.applet\0on_drop_data\0org.cairodock.CairoDock.applet\0on_change_focus\0org.cairodock.CairoDock.applet\0on_answer\0org.cairodock.CairoDock.applet\0on_answer_dialog\0org.cairodock.CairoDock.applet\0on_shortkey\0org.cairodock.CairoDock.applet\0on_stop_module\0org.cairodock.CairoDock.applet\0on_reload_module\0\0",
 "\0"
 };

=== modified file 'Dbus/src/dbus-main-spec.h'
--- Dbus/src/dbus-main-spec.h	2011-08-09 18:08:08 +0000
+++ Dbus/src/dbus-main-spec.h	2012-02-14 14:04:19 +0000
@@ -102,146 +102,50 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:BOXED,POINTER */
-extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOXED_POINTER (GClosure     *closure,
-                                                                   GValue       *return_value,
-                                                                   guint         n_param_values,
-                                                                   const GValue *param_values,
-                                                                   gpointer      invocation_hint,
-                                                                   gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOXED_POINTER (GClosure     *closure,
-                                                       GValue       *return_value G_GNUC_UNUSED,
-                                                       guint         n_param_values,
-                                                       const GValue *param_values,
-                                                       gpointer      invocation_hint G_GNUC_UNUSED,
-                                                       gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER) (gpointer     data1,
-                                                           gpointer     arg_1,
-                                                           gpointer     arg_2,
-                                                           gpointer     data2);
-  register GMarshalFunc_BOOLEAN__BOXED_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_boxed (param_values + 1),
-                       g_marshal_value_peek_pointer (param_values + 2),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
-/* BOOLEAN:BOOLEAN,POINTER */
-extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
-                                                                     GValue       *return_value,
-                                                                     guint         n_param_values,
-                                                                     const GValue *param_values,
-                                                                     gpointer      invocation_hint,
-                                                                     gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
-                                                         GValue       *return_value G_GNUC_UNUSED,
-                                                         guint         n_param_values,
-                                                         const GValue *param_values,
-                                                         gpointer      invocation_hint G_GNUC_UNUSED,
-                                                         gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (gpointer     data1,
-                                                             gboolean     arg_1,
-                                                             gpointer     arg_2,
-                                                             gpointer     data2);
-  register GMarshalFunc_BOOLEAN__BOOLEAN_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_boolean (param_values + 1),
-                       g_marshal_value_peek_pointer (param_values + 2),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
-/* BOOLEAN:BOOLEAN,STRING,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_STRING_STRING_POINTER (GClosure     *closure,
-                                                                                   GValue       *return_value,
-                                                                                   guint         n_param_values,
-                                                                                   const GValue *param_values,
-                                                                                   gpointer      invocation_hint,
-                                                                                   gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_STRING_STRING_POINTER (GClosure     *closure,
-                                                                       GValue       *return_value G_GNUC_UNUSED,
-                                                                       guint         n_param_values,
-                                                                       const GValue *param_values,
-                                                                       gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                       gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_STRING_STRING_POINTER) (gpointer     data1,
-                                                                           gboolean     arg_1,
-                                                                           gpointer     arg_2,
-                                                                           gpointer     arg_3,
-                                                                           gpointer     arg_4,
-                                                                           gpointer     data2);
-  register GMarshalFunc_BOOLEAN__BOOLEAN_STRING_STRING_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 5);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_boolean (param_values + 1),
-                       g_marshal_value_peek_string (param_values + 2),
-                       g_marshal_value_peek_string (param_values + 3),
-                       g_marshal_value_peek_pointer (param_values + 4),
+/* BOOLEAN:STRING,BOOLEAN,POINTER */
+extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_BOOLEAN_POINTER (GClosure     *closure,
+                                                                            GValue       *return_value,
+                                                                            guint         n_param_values,
+                                                                            const GValue *param_values,
+                                                                            gpointer      invocation_hint,
+                                                                            gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_BOOLEAN_POINTER (GClosure     *closure,
+                                                                GValue       *return_value G_GNUC_UNUSED,
+                                                                guint         n_param_values,
+                                                                const GValue *param_values,
+                                                                gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_BOOLEAN_POINTER) (gpointer     data1,
+                                                                    gpointer     arg_1,
+                                                                    gboolean     arg_2,
+                                                                    gpointer     arg_3,
+                                                                    gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_BOOLEAN_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING_BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_boolean (param_values + 2),
+                       g_marshal_value_peek_pointer (param_values + 3),
                        data2);
 
   g_value_set_boolean (return_value, v_return);
@@ -292,55 +196,6 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:STRING,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
-                                                                           GValue       *return_value,
-                                                                           guint         n_param_values,
-                                                                           const GValue *param_values,
-                                                                           gpointer      invocation_hint,
-                                                                           gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
-                                                               GValue       *return_value G_GNUC_UNUSED,
-                                                               guint         n_param_values,
-                                                               const GValue *param_values,
-                                                               gpointer      invocation_hint G_GNUC_UNUSED,
-                                                               gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (gpointer     data1,
-                                                                   gpointer     arg_1,
-                                                                   gpointer     arg_2,
-                                                                   gpointer     arg_3,
-                                                                   gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_STRING_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 4);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_string (param_values + 2),
-                       g_marshal_value_peek_pointer (param_values + 3),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
 /* BOOLEAN:STRING,POINTER,POINTER */
 extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_POINTER_POINTER (GClosure     *closure,
                                                                             GValue       *return_value,
@@ -390,57 +245,6 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:STRING,INT,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_INT_STRING_POINTER (GClosure     *closure,
-                                                                               GValue       *return_value,
-                                                                               guint         n_param_values,
-                                                                               const GValue *param_values,
-                                                                               gpointer      invocation_hint,
-                                                                               gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_INT_STRING_POINTER (GClosure     *closure,
-                                                                   GValue       *return_value G_GNUC_UNUSED,
-                                                                   guint         n_param_values,
-                                                                   const GValue *param_values,
-                                                                   gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                   gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_INT_STRING_POINTER) (gpointer     data1,
-                                                                       gpointer     arg_1,
-                                                                       gint         arg_2,
-                                                                       gpointer     arg_3,
-                                                                       gpointer     arg_4,
-                                                                       gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_INT_STRING_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 5);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__STRING_INT_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_int (param_values + 2),
-                       g_marshal_value_peek_string (param_values + 3),
-                       g_marshal_value_peek_pointer (param_values + 4),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
 /* BOOLEAN:STRING,DOUBLE,STRING,POINTER,POINTER */
 extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_DOUBLE_STRING_POINTER_POINTER (GClosure     *closure,
                                                                                           GValue       *return_value,
@@ -494,6 +298,204 @@
   g_value_set_boolean (return_value, v_return);
 }
 
+/* BOOLEAN:BOOLEAN,STRING,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_STRING_STRING_POINTER (GClosure     *closure,
+                                                                                   GValue       *return_value,
+                                                                                   guint         n_param_values,
+                                                                                   const GValue *param_values,
+                                                                                   gpointer      invocation_hint,
+                                                                                   gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_STRING_STRING_POINTER (GClosure     *closure,
+                                                                       GValue       *return_value G_GNUC_UNUSED,
+                                                                       guint         n_param_values,
+                                                                       const GValue *param_values,
+                                                                       gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                       gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_STRING_STRING_POINTER) (gpointer     data1,
+                                                                           gboolean     arg_1,
+                                                                           gpointer     arg_2,
+                                                                           gpointer     arg_3,
+                                                                           gpointer     arg_4,
+                                                                           gpointer     data2);
+  register GMarshalFunc_BOOLEAN__BOOLEAN_STRING_STRING_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_boolean (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       g_marshal_value_peek_pointer (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:BOXED,POINTER */
+extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOXED_POINTER (GClosure     *closure,
+                                                                   GValue       *return_value,
+                                                                   guint         n_param_values,
+                                                                   const GValue *param_values,
+                                                                   gpointer      invocation_hint,
+                                                                   gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOXED_POINTER (GClosure     *closure,
+                                                       GValue       *return_value G_GNUC_UNUSED,
+                                                       guint         n_param_values,
+                                                       const GValue *param_values,
+                                                       gpointer      invocation_hint G_GNUC_UNUSED,
+                                                       gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER) (gpointer     data1,
+                                                           gpointer     arg_1,
+                                                           gpointer     arg_2,
+                                                           gpointer     data2);
+  register GMarshalFunc_BOOLEAN__BOXED_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__BOXED_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_boxed (param_values + 1),
+                       g_marshal_value_peek_pointer (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:STRING,INT,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_INT_STRING_POINTER (GClosure     *closure,
+                                                                               GValue       *return_value,
+                                                                               guint         n_param_values,
+                                                                               const GValue *param_values,
+                                                                               gpointer      invocation_hint,
+                                                                               gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_INT_STRING_POINTER (GClosure     *closure,
+                                                                   GValue       *return_value G_GNUC_UNUSED,
+                                                                   guint         n_param_values,
+                                                                   const GValue *param_values,
+                                                                   gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                   gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_INT_STRING_POINTER) (gpointer     data1,
+                                                                       gpointer     arg_1,
+                                                                       gint         arg_2,
+                                                                       gpointer     arg_3,
+                                                                       gpointer     arg_4,
+                                                                       gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_INT_STRING_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING_INT_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_int (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       g_marshal_value_peek_pointer (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:STRING,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
+                                                                           GValue       *return_value,
+                                                                           guint         n_param_values,
+                                                                           const GValue *param_values,
+                                                                           gpointer      invocation_hint,
+                                                                           gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_STRING_POINTER (GClosure     *closure,
+                                                               GValue       *return_value G_GNUC_UNUSED,
+                                                               guint         n_param_values,
+                                                               const GValue *param_values,
+                                                               gpointer      invocation_hint G_GNUC_UNUSED,
+                                                               gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (gpointer     data1,
+                                                                   gpointer     arg_1,
+                                                                   gpointer     arg_2,
+                                                                   gpointer     arg_3,
+                                                                   gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_STRING_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_pointer (param_values + 3),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
 /* BOOLEAN:STRING,POINTER */
 extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_POINTER (GClosure     *closure,
                                                                     GValue       *return_value,
@@ -541,33 +543,32 @@
   g_value_set_boolean (return_value, v_return);
 }
 
-/* BOOLEAN:STRING,BOOLEAN,POINTER */
-extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_BOOLEAN_POINTER (GClosure     *closure,
-                                                                            GValue       *return_value,
-                                                                            guint         n_param_values,
-                                                                            const GValue *param_values,
-                                                                            gpointer      invocation_hint,
-                                                                            gpointer      marshal_data);
+/* BOOLEAN:BOOLEAN,POINTER */
+extern void dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
+                                                                     GValue       *return_value,
+                                                                     guint         n_param_values,
+                                                                     const GValue *param_values,
+                                                                     gpointer      invocation_hint,
+                                                                     gpointer      marshal_data);
 void
-dbus_glib_marshal_cd_dbus_main_BOOLEAN__STRING_BOOLEAN_POINTER (GClosure     *closure,
-                                                                GValue       *return_value G_GNUC_UNUSED,
-                                                                guint         n_param_values,
-                                                                const GValue *param_values,
-                                                                gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                gpointer      marshal_data)
+dbus_glib_marshal_cd_dbus_main_BOOLEAN__BOOLEAN_POINTER (GClosure     *closure,
+                                                         GValue       *return_value G_GNUC_UNUSED,
+                                                         guint         n_param_values,
+                                                         const GValue *param_values,
+                                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                                         gpointer      marshal_data)
 {
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_BOOLEAN_POINTER) (gpointer     data1,
-                                                                    gpointer     arg_1,
-                                                                    gboolean     arg_2,
-                                                                    gpointer     arg_3,
-                                                                    gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_BOOLEAN_POINTER callback;
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (gpointer     data1,
+                                                             gboolean     arg_1,
+                                                             gpointer     arg_2,
+                                                             gpointer     data2);
+  register GMarshalFunc_BOOLEAN__BOOLEAN_POINTER callback;
   register GCClosure *cc = (GCClosure*) closure;
   register gpointer data1, data2;
   gboolean v_return;
 
   g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 4);
+  g_return_if_fail (n_param_values == 3);
 
   if (G_CCLOSURE_SWAP_DATA (closure))
     {
@@ -579,12 +580,11 @@
       data1 = g_value_peek_pointer (param_values + 0);
       data2 = closure->data;
     }
-  callback = (GMarshalFunc_BOOLEAN__STRING_BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
+  callback = (GMarshalFunc_BOOLEAN__BOOLEAN_POINTER) (marshal_data ? marshal_data : cc->callback);
 
   v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_boolean (param_values + 2),
-                       g_marshal_value_peek_pointer (param_values + 3),
+                       g_marshal_value_peek_boolean (param_values + 1),
+                       g_marshal_value_peek_pointer (param_values + 2),
                        data2);
 
   g_value_set_boolean (return_value, v_return);

=== modified file 'Dbus/src/dbus-sub-applet-spec.h'
--- Dbus/src/dbus-sub-applet-spec.h	2011-04-20 20:46:51 +0000
+++ Dbus/src/dbus-sub-applet-spec.h	2012-02-14 14:04:19 +0000
@@ -55,110 +55,6 @@
 #endif /* !G_ENABLE_DEBUG */
 
 
-/* BOOLEAN:STRING,DOUBLE,DOUBLE,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER (GClosure     *closure,
-                                                                                               GValue       *return_value,
-                                                                                               guint         n_param_values,
-                                                                                               const GValue *param_values,
-                                                                                               gpointer      invocation_hint,
-                                                                                               gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER (GClosure     *closure,
-                                                                                   GValue       *return_value G_GNUC_UNUSED,
-                                                                                   guint         n_param_values,
-                                                                                   const GValue *param_values,
-                                                                                   gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                                   gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER) (gpointer     data1,
-                                                                                 gpointer     arg_1,
-                                                                                 gdouble      arg_2,
-                                                                                 gdouble      arg_3,
-                                                                                 gpointer     arg_4,
-                                                                                 gpointer     arg_5,
-                                                                                 gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 6);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_double (param_values + 2),
-                       g_marshal_value_peek_double (param_values + 3),
-                       g_marshal_value_peek_string (param_values + 4),
-                       g_marshal_value_peek_pointer (param_values + 5),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
-/* BOOLEAN:STRING,STRING,STRING,POINTER */
-extern void dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_STRING_STRING_POINTER (GClosure     *closure,
-                                                                                        GValue       *return_value,
-                                                                                        guint         n_param_values,
-                                                                                        const GValue *param_values,
-                                                                                        gpointer      invocation_hint,
-                                                                                        gpointer      marshal_data);
-void
-dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_STRING_STRING_POINTER (GClosure     *closure,
-                                                                            GValue       *return_value G_GNUC_UNUSED,
-                                                                            guint         n_param_values,
-                                                                            const GValue *param_values,
-                                                                            gpointer      invocation_hint G_GNUC_UNUSED,
-                                                                            gpointer      marshal_data)
-{
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_STRING_POINTER) (gpointer     data1,
-                                                                          gpointer     arg_1,
-                                                                          gpointer     arg_2,
-                                                                          gpointer     arg_3,
-                                                                          gpointer     arg_4,
-                                                                          gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_STRING_STRING_POINTER callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-  gboolean v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 5);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_string (param_values + 2),
-                       g_marshal_value_peek_string (param_values + 3),
-                       g_marshal_value_peek_pointer (param_values + 4),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
-}
-
 /* BOOLEAN:BOXED,POINTER */
 extern void dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__BOXED_POINTER (GClosure     *closure,
                                                                          GValue       *return_value,
@@ -353,6 +249,110 @@
   g_value_set_boolean (return_value, v_return);
 }
 
+/* BOOLEAN:STRING,DOUBLE,DOUBLE,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER (GClosure     *closure,
+                                                                                               GValue       *return_value,
+                                                                                               guint         n_param_values,
+                                                                                               const GValue *param_values,
+                                                                                               gpointer      invocation_hint,
+                                                                                               gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER (GClosure     *closure,
+                                                                                   GValue       *return_value G_GNUC_UNUSED,
+                                                                                   guint         n_param_values,
+                                                                                   const GValue *param_values,
+                                                                                   gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                                   gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER) (gpointer     data1,
+                                                                                 gpointer     arg_1,
+                                                                                 gdouble      arg_2,
+                                                                                 gdouble      arg_3,
+                                                                                 gpointer     arg_4,
+                                                                                 gpointer     arg_5,
+                                                                                 gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 6);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING_DOUBLE_DOUBLE_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_double (param_values + 2),
+                       g_marshal_value_peek_double (param_values + 3),
+                       g_marshal_value_peek_string (param_values + 4),
+                       g_marshal_value_peek_pointer (param_values + 5),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:STRING,STRING,STRING,POINTER */
+extern void dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_STRING_STRING_POINTER (GClosure     *closure,
+                                                                                        GValue       *return_value,
+                                                                                        guint         n_param_values,
+                                                                                        const GValue *param_values,
+                                                                                        gpointer      invocation_hint,
+                                                                                        gpointer      marshal_data);
+void
+dbus_glib_marshal_cd_dbus_sub_applet_BOOLEAN__STRING_STRING_STRING_POINTER (GClosure     *closure,
+                                                                            GValue       *return_value G_GNUC_UNUSED,
+                                                                            guint         n_param_values,
+                                                                            const GValue *param_values,
+                                                                            gpointer      invocation_hint G_GNUC_UNUSED,
+                                                                            gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_STRING_POINTER) (gpointer     data1,
+                                                                          gpointer     arg_1,
+                                                                          gpointer     arg_2,
+                                                                          gpointer     arg_3,
+                                                                          gpointer     arg_4,
+                                                                          gpointer     data2);
+  register GMarshalFunc_BOOLEAN__STRING_STRING_STRING_POINTER callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       g_marshal_value_peek_string (param_values + 2),
+                       g_marshal_value_peek_string (param_values + 3),
+                       g_marshal_value_peek_pointer (param_values + 4),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
 G_END_DECLS
 
 #endif /* __dbus_glib_marshal_cd_dbus_sub_applet_MARSHAL_H__ */

=== modified file 'Dbus/src/dbus_applet_introspectable.xml'
--- Dbus/src/dbus_applet_introspectable.xml	2011-04-20 20:46:51 +0000
+++ Dbus/src/dbus_applet_introspectable.xml	2012-02-14 14:04:19 +0000
@@ -65,6 +65,9 @@
 		<method name="ShowAppli">
 			<arg name="bShow" type="b" direction="in"/>
 		</method>
+		<method name="ActOnAppli">
+			<arg name="cAction" type="s" direction="in"/>
+		</method>
 		<method name="PopulateMenu">
 			<arg name="pLabels" type="as" direction="in"/>
 		</method>

=== modified file 'Dbus/src/interface-applet-methods.c'
--- Dbus/src/interface-applet-methods.c	2011-10-03 15:13:15 +0000
+++ Dbus/src/interface-applet-methods.c	2012-02-14 14:04:19 +0000
@@ -240,6 +240,7 @@
 	else
 		cLabel = g_strdup_printf ("<span color=\"red\"><b>%d</b></span>", iNbChars);
 	gtk_label_set_markup (GTK_LABEL (pLabel), cLabel);
+	cairo_dock_set_dialog_widget_text_color (pLabel);
 	g_free (cLabel);
 }
 static void _on_dialog_destroyed (dbusApplet *pDbusApplet)
@@ -346,7 +347,7 @@
 						GtkWidget *pScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
 						gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (pScrolledWindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
 						gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (pScrolledWindow), pOneWidget);
-						gtk_widget_set (pScrolledWindow, "width-request", 230, "height-request", 130, NULL);
+						g_object_set (pScrolledWindow, "width-request", 230, "height-request", 130, NULL);
 						pInteractiveWidget = pScrolledWindow;
 						
 						if (! bEditable)
@@ -366,7 +367,7 @@
 						pOneWidget = gtk_entry_new ();
 						pInteractiveWidget = pOneWidget;
 						gtk_entry_set_has_frame (GTK_ENTRY (pOneWidget), FALSE);
-						gtk_widget_set (pOneWidget, "width-request", CAIRO_DIALOG_MIN_ENTRY_WIDTH, NULL);
+						g_object_set (pOneWidget, "width-request", CAIRO_DIALOG_MIN_ENTRY_WIDTH, NULL);
 						if (cInitialText != NULL)
 							gtk_entry_set_text (GTK_ENTRY (pOneWidget), cInitialText);
 						if (! bEditable)
@@ -383,7 +384,7 @@
 						GtkWidget *pLabel = gtk_label_new (cLabel);
 						g_free (cLabel);
 						gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
-						GtkWidget *pBox = gtk_hbox_new (FALSE, 3);
+						GtkWidget *pBox = _gtk_hbox_new (3);
 						gtk_box_pack_start (GTK_BOX (pBox), pInteractiveWidget, TRUE, TRUE, 0);
 						gtk_box_pack_start (GTK_BOX (pBox), pLabel, FALSE, FALSE, 0);
 						pInteractiveWidget = pBox;
@@ -398,6 +399,7 @@
 						{
 							g_signal_connect (pOneWidget, "changed", G_CALLBACK (_on_text_changed), pLabel);
 							g_object_set_data (G_OBJECT (pOneWidget), "nb-chars-max", GINT_TO_POINTER (iNbCharsMax));
+							gtk_entry_set_width_chars (GTK_ENTRY (pOneWidget), MIN (iNbCharsMax/2, 100));  // a rough estimate is: 140 chars ~ 1024 pixels
 						}
 					}
 				}
@@ -436,18 +438,22 @@
 					v = g_hash_table_lookup (hWidgetAttributes, "max-label");
 					if (v && G_VALUE_HOLDS_STRING (v))
 						cMaxLabel = g_value_get_string (v);
-					
+
+					#if (GTK_MAJOR_VERSION < 3)
 					pScale = gtk_hscale_new_with_range (fMinValue, fMaxValue, (fMaxValue - fMinValue) / 100.);
+					#else
+					pScale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, fMinValue, fMaxValue, (fMaxValue - fMinValue) / 100.);
+					#endif
 					pOneWidget = pScale;
 					gtk_scale_set_digits (GTK_SCALE (pScale), iNbDigit);
 					gtk_range_set_value (GTK_RANGE (pScale), fInitialValue);
 					
-					gtk_widget_set (pScale, "width-request", 150, NULL);
+					g_object_set (pScale, "width-request", 150, NULL);
 					cairo_dock_set_dialog_widget_text_color (pScale);
 					
 					if (cMinLabel || cMaxLabel)
 					{
-						GtkWidget *pExtendedWidget = gtk_hbox_new (FALSE, 0);
+						GtkWidget *pExtendedWidget = _gtk_hbox_new (0);
 						GtkWidget *label = gtk_label_new (cMinLabel);
 						GtkWidget *pAlign = gtk_alignment_new (1., 1., 0., 0.);
 						gtk_container_add (GTK_CONTAINER (pAlign), label);
@@ -484,10 +490,17 @@
 					if (cValues != NULL)
 						cValuesList = g_strsplit (cValues, ";", -1);
 					
+					#if (GTK_MAJOR_VERSION < 3 && GTK_MINOR_VERSION < 24)
 					if (bEditable)
 						pOneWidget = gtk_combo_box_entry_new_text ();
 					else
 						pOneWidget = gtk_combo_box_new_text ();
+					#else
+					if (bEditable)
+						pOneWidget = gtk_combo_box_text_new_with_entry ();
+					else
+						pOneWidget = gtk_combo_box_text_new ();
+					#endif
 					pInteractiveWidget = pOneWidget;
 					
 					if (cValuesList != NULL)
@@ -495,7 +508,11 @@
 						int i;
 						for (i = 0; cValuesList[i] != NULL; i ++)
 						{
+							#if (GTK_MAJOR_VERSION < 3 && GTK_MINOR_VERSION < 24)
 							gtk_combo_box_append_text (GTK_COMBO_BOX (pInteractiveWidget), cValuesList[i]);
+							#else
+							gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (pInteractiveWidget), cValuesList[i]);
+							#endif
 						}
 					}
 					
@@ -645,42 +662,8 @@
 		cd_warning ("the number of argument is incorrect\nThis may result in an incorrect number of loaded icons.");
 	}
 	
-	if (pInstance->pDock)
-	{
-		if (pIcon->pSubDock == NULL)
-		{
-			if (pIcon->cName == NULL)
-				cairo_dock_set_icon_name (pInstance->pModule->pVisitCard->cModuleName, pIcon, pContainer);
-			if (cairo_dock_check_unique_subdock_name (pIcon))
-				cairo_dock_set_icon_name (pIcon->cName, pIcon, pContainer);
-			pIcon->pSubDock = cairo_dock_create_subdock_from_scratch (pIconsList, pIcon->cName, pInstance->pDock);
-			//cairo_dock_set_renderer (pIcon->pSubDock, cRenderer);
-			cairo_dock_update_dock_size (pIcon->pSubDock);
-		}
-		else
-		{
-			GList *ic;
-			for (ic = pIconsList; ic != NULL; ic = ic->next)
-			{
-				pOneIcon = ic->data;
-				cairo_dock_load_icon_buffers (pOneIcon, CAIRO_CONTAINER (pIcon->pSubDock));
-				cairo_dock_insert_icon_in_dock (pOneIcon, pIcon->pSubDock, ! CAIRO_DOCK_UPDATE_DOCK_SIZE, ! CAIRO_DOCK_ANIMATE_ICON);
-			}
-			cairo_dock_update_dock_size (pIcon->pSubDock);
-			g_list_free (pIconsList);
-		}
-	}
-	else
-	{
-		if (pIcon->pSubDock != NULL)  // precaution.
-		{
-			cairo_dock_destroy_dock (pIcon->pSubDock, pIcon->cName);
-			pIcon->pSubDock = NULL;
-		}
-		pInstance->pDesklet->icons = g_list_concat (pInstance->pDesklet->icons, pIconsList);
-		gpointer data[3] = {GINT_TO_POINTER (0), GINT_TO_POINTER (TRUE), NULL};
-		cairo_dock_set_desklet_renderer_by_name (pInstance->pDesklet, "Panel", (CairoDeskletRendererConfigPtr) data);
-	}
+	gpointer data[3] = {GINT_TO_POINTER (0), GINT_TO_POINTER (TRUE), NULL};
+	cairo_dock_insert_icons_in_applet (pInstance, pIconsList, NULL, "Panel", (CairoDeskletRendererConfigPtr) data);  // NULL <=> default sub-docks renderer
 	
 	return TRUE;
 }
@@ -698,43 +681,13 @@
 	
 	if (cIconID == NULL || strcmp (cIconID, "any") == 0)  // remove all
 	{
-		if (pInstance->pDesklet && pInstance->pDesklet->icons != NULL)
-		{
-			g_list_foreach (pInstance->pDesklet->icons, (GFunc) cairo_dock_free_icon, NULL);
-			g_list_free (pInstance->pDesklet->icons);
-			pInstance->pDesklet->icons = NULL;
-		}
-		if (pIcon->pSubDock != NULL)
-		{
-			if (pInstance->pDesklet)
-			{
-				cairo_dock_destroy_dock (pIcon->pSubDock, pIcon->cName);
-				pIcon->pSubDock = NULL;
-			}
-			else
-			{
-				g_list_foreach (pIcon->pSubDock->icons, (GFunc) cairo_dock_free_icon, NULL);
-				g_list_free (pIcon->pSubDock->icons);
-				pIcon->pSubDock->icons = NULL;
-				pIcon->pSubDock->pFirstDrawnElement = NULL;
-			}
-		}
+		cairo_dock_remove_all_icons_from_applet (pInstance);
 	}
 	else
 	{
 		GList *pIconsList = (pInstance->pDock ? (pIcon->pSubDock ? pIcon->pSubDock->icons : NULL) : pInstance->pDesklet->icons);
 		Icon *pOneIcon = cairo_dock_get_icon_with_command (pIconsList, cIconID);
-		if (pInstance->pDock)
-		{
-			cairo_dock_detach_icon_from_dock (pOneIcon, pIcon->pSubDock, FALSE);
-			cairo_dock_update_dock_size (pIcon->pSubDock);
-		}
-		else
-		{
-			pInstance->pDesklet->icons = g_list_remove (pInstance->pDesklet->icons, pOneIcon);
-			gtk_widget_queue_draw (pInstance->pDesklet->container.pWidget);
-		}
-		cairo_dock_free_icon (pOneIcon);
+		cairo_dock_remove_icon_from_applet (pInstance, pOneIcon);
 	}
 	
 	return TRUE;
@@ -970,9 +923,50 @@
 	return TRUE;
 }
 
+gboolean cd_dbus_applet_act_on_appli (dbusApplet *pDbusApplet, const gchar *cAction, GError **error)
+{
+	CairoDockModuleInstance *pInstance = _get_module_instance_from_dbus_applet (pDbusApplet);
+	g_return_val_if_fail (pInstance != NULL, FALSE);
+	
+	Icon *pIcon = pInstance->pIcon;
+	g_return_val_if_fail (pIcon != NULL && pIcon->Xid != 0, FALSE);
+	
+	g_return_val_if_fail (cAction != NULL, FALSE);
+	
+	if (strcmp (cAction, "minimize") == 0)
+		cairo_dock_minimize_xwindow (pIcon->Xid);
+	else if (strcmp (cAction, "show") == 0)
+		cairo_dock_show_xwindow (pIcon->Xid);
+	else if (strcmp (cAction, "toggle-visibility") == 0)
+	{
+		if (pIcon->bIsHidden)
+			cairo_dock_show_xwindow (pIcon->Xid);
+		else
+			cairo_dock_minimize_xwindow (pIcon->Xid);
+	}	
+	else if (strcmp (cAction, "maximize") == 0)
+		cairo_dock_maximize_xwindow (pIcon->Xid, TRUE);
+	else if (strcmp (cAction, "restaure") == 0)
+		cairo_dock_maximize_xwindow (pIcon->Xid, FALSE);
+	else if (strcmp (cAction, "toggle-size") == 0)
+	{
+		cairo_dock_maximize_xwindow (pIcon->Xid, ! pIcon->bIsMaximized);
+	}
+	else if (strcmp (cAction, "close") == 0)
+		cairo_dock_close_xwindow (pIcon->Xid);
+	else if (strcmp (cAction, "kill") == 0)
+		cairo_dock_kill_xwindow (pIcon->Xid);
+	else
+	{
+		cd_warning ("invalid action '%s' on window %s", cAction, pIcon->cName);
+	}
+	
+	return TRUE;
+}
+
 gboolean cd_dbus_applet_populate_menu (dbusApplet *pDbusApplet, const gchar **pLabels, GError **error)
 {
-	if (myData.pModuleSubMenu == NULL || pDbusApplet != myData.pCurrentMenuDbusApplet)
+	if (myData.pModuleMainMenu == NULL || pDbusApplet != myData.pCurrentMenuDbusApplet)
 	{
 		cd_warning ("the 'PopulateMenu' method can only be used to populate the menu that was summoned from a right-click on your applet !\nthat is to say, after you received a 'build-menu' event.");
 		return FALSE;
@@ -983,43 +977,35 @@
 	{
 		if (*pLabels[i] == '\0')
 		{
-			gtk_menu_shell_append (GTK_MENU_SHELL (myData.pModuleSubMenu), gtk_separator_menu_item_new ());
+			gtk_menu_shell_append (GTK_MENU_SHELL (myData.pModuleMainMenu), gtk_separator_menu_item_new ());
 		}
 		else
 		{
 			cairo_dock_add_in_menu_with_stock_and_data (pLabels[i],
 				NULL,
-				(GFunc) cd_dbus_emit_on_menu_select,
-				myData.pModuleSubMenu,
+				G_CALLBACK (cd_dbus_emit_on_menu_select),
+				myData.pModuleMainMenu,
 				GINT_TO_POINTER (i));
 		}
 	}
-	gtk_widget_show_all (myData.pModuleSubMenu);
+	gtk_widget_show_all (myData.pModuleMainMenu);
 	
 	return TRUE;
 }
 
 gboolean cd_dbus_applet_add_menu_items (dbusApplet *pDbusApplet, GPtrArray *pItems, GError **error)
 {
-	if (myData.pModuleMainMenu == NULL || myData.pModuleSubMenu == NULL || pDbusApplet != myData.pCurrentMenuDbusApplet)
+	if (myData.pModuleMainMenu == NULL/** || myData.pModuleSubMenu == NULL*/ || pDbusApplet != myData.pCurrentMenuDbusApplet)
 	{
 		cd_warning ("the 'AddMenuItems' method can only be used to populate the menu that was summoned from a right-click on your applet !\nthat is to say, after you received a 'build-menu' event.");
 		return FALSE;
 	}
 	
-	// on recupere la position du sous-menu par defaut, afin d'inserer les items apres lui dans le menu principal.
-	GList *pChildren = gtk_container_get_children (GTK_CONTAINER (myData.pModuleMainMenu));
-	GList *c = g_list_find (pChildren, myData.pModuleSubMenu);
-	GtkMenuItem *item;
-	for (c = pChildren; c != NULL; c = c->next)
-	{
-		item = c->data;
-		if (gtk_menu_item_get_submenu (item) == myData.pModuleSubMenu)
-			break;
-	}
-	g_return_val_if_fail (c, FALSE);
-	int iPosition = g_list_position (pChildren, c) + 1;
-	g_list_free (pChildren);
+	// get the position of our items in the menu.
+	int iPosition = myData.iMenuPosition;
+	
+	// insert a separator
+	gtk_menu_shell_insert (GTK_MENU_SHELL (myData.pModuleMainMenu), gtk_separator_menu_item_new (), iPosition++);
 	
 	// table des menus et groupes de radio-boutons.
 	GHashTable *pSubMenus = g_hash_table_new_full (g_int_hash,
@@ -1155,21 +1141,16 @@
 		v = g_hash_table_lookup (pItem, "menu");
 		if (v && G_VALUE_HOLDS_INT (v))
 			iMenuID = g_value_get_int (v);
-		if (iMenuID == 0)
+		if (iMenuID <= 0)
 			pMenu = myData.pModuleMainMenu;
-		else if (iMenuID == -1)
-			pMenu = myData.pModuleSubMenu;
 		else
 		{
 			pMenu = g_hash_table_lookup (pSubMenus, &iMenuID);
 			if (pMenu == NULL)
-				pMenu = myData.pModuleSubMenu;
+				pMenu = myData.pModuleMainMenu;
 		}
 		
-		if (pMenu == myData.pModuleMainMenu)
-			gtk_menu_shell_insert (GTK_MENU_SHELL (pMenu), pMenuItem, iPosition++);
-		else
-			gtk_menu_shell_append (GTK_MENU_SHELL (pMenu), pMenuItem);
+		gtk_menu_shell_insert (GTK_MENU_SHELL (pMenu), pMenuItem, iPosition++);
 	}
 	
 	g_hash_table_destroy (pSubMenus);
@@ -1188,12 +1169,36 @@
 	CairoDockModuleInstance *pInstance = _get_module_instance_from_dbus_applet (pDbusApplet);
 	g_return_val_if_fail (pInstance != NULL, FALSE);
 	
-	const gchar *cShortkey;
+	const gchar *cShortkey, *cDescription = "Pouet", *cGroupName = "Configuration", *cKeyName = "shortkey";
+	CairoKeyBinding *pKeyBinding;
 	int i;
-	GList *sk, *next_sk;
-	gchar *key;
+	GList *kb;
 	
-	// on enleve les vieux raccourcis dont l'applet ne veut plus.
+	if (pDbusApplet->pShortkeyList == NULL)
+	{
+		for (i = 0; cShortkeys[i] != NULL; i ++)
+		{
+			cShortkey = cShortkeys[i];
+			pKeyBinding = cd_keybinder_bind (cShortkey,
+				pInstance->pModule->pVisitCard->cTitle,
+				cDescription,
+				pInstance->pModule->pVisitCard->cIconFilePath,
+				pInstance->cConfFilePath,
+				cGroupName, cKeyName,
+				(CDBindkeyHandler) cd_dbus_applet_emit_on_shortkey, pDbusApplet),
+			pDbusApplet->pShortkeyList = g_list_append (pDbusApplet->pShortkeyList, pKeyBinding);
+		}
+	}
+	else  // just rebind, we consider that the applet wants to rebind the same shortkeys.
+	{
+		for (i = 0, kb = pDbusApplet->pShortkeyList; cShortkeys[i] != NULL, kb != NULL; i ++, kb = kb->next)
+		{
+			cShortkey = cShortkeys[i];
+			pKeyBinding = kb->data;
+			cd_keybinder_rebind (pKeyBinding, cShortkey, NULL);
+		}
+	}
+	/** // on enleve les vieux raccourcis dont l'applet ne veut plus.
 	sk = pDbusApplet->pShortkeyList;
 	while (sk != NULL)
 	{
@@ -1235,7 +1240,7 @@
 				pDbusApplet->pShortkeyList = g_list_prepend (pDbusApplet->pShortkeyList, g_strdup (cShortkey));
 			cd_debug ("*** bind %s: %d", cShortkey, bCouldBind);
 		}
-	}
+	}*/
 	return TRUE;
 }
 
@@ -1292,16 +1297,10 @@
 		g_value_init (v, G_TYPE_UINT);
 		g_value_set_uint (v, pContainer->iType);
 	}
-	else if (strcmp (cProperty, "width") == 0)
+	else if (strcmp (cProperty, "width") == 0)  // this is the dimension of the icon when it's hovered.
 	{
 		int iWidth, iHeight;
 		cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight);
-		if (pInstance->pDock)
-		{
-			double a = cairo_dock_get_max_scale (pContainer);
-			double s = pInstance->pDock->fMagnitudeMax;
-			iWidth /= (1 + a) / (1 + s*a);
-		}
 		g_value_init (v, G_TYPE_INT);
 		g_value_set_int (v, iWidth);
 	}
@@ -1309,12 +1308,6 @@
 	{
 		int iWidth, iHeight;
 		cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight);
-		if (pInstance->pDock)
-		{
-			double a = cairo_dock_get_max_scale (pContainer);
-			double s = pInstance->pDock->fMagnitudeMax;
-			iHeight /= (1 + a) / (1 + s*a);
-		}
 		g_value_init (v, G_TYPE_INT);
 		g_value_set_int (v, iHeight);
 	}
@@ -1364,13 +1357,6 @@
 	CairoDockPositionType iScreenBorder = ((! pContainer->bIsHorizontal) << 1) | (! pContainer->bDirectionUp);
 	int iWidth, iHeight;
 	cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight);
-	if (pInstance->pDock)
-	{
-		double a = cairo_dock_get_max_scale (pContainer);
-		double s = pInstance->pDock->fMagnitudeMax;
-		iWidth /= (1 + a) / (1 + s*a);
-		iHeight /= (1 + a) / (1 + s*a);
-	}
 	
 	Window Xid = pIcon->Xid;
 	gboolean bHasFocus = (pIcon->Xid != 0 && pIcon->Xid == cairo_dock_get_current_active_window ());

=== modified file 'Dbus/src/interface-applet-methods.h'
--- Dbus/src/interface-applet-methods.h	2011-04-20 20:46:51 +0000
+++ Dbus/src/interface-applet-methods.h	2012-02-14 14:04:19 +0000
@@ -83,6 +83,8 @@
 
 gboolean cd_dbus_applet_show_appli (dbusApplet *pDbusApplet, gboolean bShow, GError **error);
 
+gboolean cd_dbus_applet_act_on_appli (dbusApplet *pDbusApplet, const gchar *cAction, GError **error);
+
 gboolean cd_dbus_applet_populate_menu (dbusApplet *pDbusApplet, const gchar **pLabels, GError **error);
 
 gboolean cd_dbus_applet_add_menu_items (dbusApplet *pDbusApplet, GPtrArray *pItems, GError **error);

=== modified file 'Dbus/src/interface-applet-object.c'
--- Dbus/src/interface-applet-object.c	2011-09-26 12:56:12 +0000
+++ Dbus/src/interface-applet-object.c	2012-02-14 14:04:19 +0000
@@ -199,13 +199,15 @@
 	if (pDbusApplet != NULL)
 	{
 		// on enleve les raccourcis clavier de l'applet.
-		GList *sk;
-		gchar *key;
-		for (sk = pDbusApplet->pShortkeyList; sk != NULL; sk = sk->next)
+		GList *kb;
+		CairoKeyBinding *pKeyBinding;
+		for (kb = pDbusApplet->pShortkeyList; kb != NULL; kb = kb->next)
 		{
-			key = sk->data;
-			cd_keybinder_unbind (key, (CDBindkeyHandler) cd_dbus_applet_emit_on_shortkey);
+			pKeyBinding = kb->data;
+			cd_keybinder_unbind (pKeyBinding);
 		}
+		g_list_free (pDbusApplet->pShortkeyList);
+		pDbusApplet->pShortkeyList = NULL;
 		
 		// on detruit l'objet.
 		g_object_unref (pDbusApplet);
@@ -243,12 +245,13 @@
 	const gchar *cDirPath = pModuleInstance->pModule->pVisitCard->cShareDataDir;
 	cd_message ("%s (%s)", __func__, cModuleName);
 	
- 	gchar *cCommand = g_strdup_printf ("cd \"%s\" && ./\"%s\" %d \"%s\" \"%s\" %s %d",
+ 	gchar *cCommand = g_strdup_printf ("cd \"%s\" && ./\"%s\" %d \"%s\" \"%s\" \"%s\" %s %d",
  		cDirPath,
  		cModuleName,
  		pDbusApplet->id,
  		pDbusApplet->cBusPath,
  		pModuleInstance->cConfFilePath,
+		g_cCairoDockDataDir,
  		myData.cProgName,
  		getpid());
 	cd_debug ("launching distant applet with: '%s'", cCommand);

=== modified file 'Dbus/src/interface-applet-signals.c'
--- Dbus/src/interface-applet-signals.c	2011-09-26 12:56:12 +0000
+++ Dbus/src/interface-applet-signals.c	2012-02-14 14:04:19 +0000
@@ -346,7 +346,7 @@
 
 static void _delete_menu (GtkMenuShell *menu, CairoDockModuleInstance *myApplet)
 {
-	myData.pModuleSubMenu = NULL;
+	///myData.pModuleSubMenu = NULL;
 	myData.pModuleMainMenu = NULL;
 }
 gboolean cd_dbus_applet_emit_on_build_menu (gpointer data, Icon *pClickedIcon, CairoContainer *pClickedContainer, GtkWidget *pAppletMenu)
@@ -358,15 +358,15 @@
 		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 	
 	myData.pModuleMainMenu = pAppletMenu;
-	myData.pModuleSubMenu = cairo_dock_create_sub_menu (pAppletIcon->pModuleInstance->pModule->pVisitCard->cModuleName,
+	/**myData.pModuleSubMenu = cairo_dock_create_sub_menu (pAppletIcon->pModuleInstance->pModule->pVisitCard->cModuleName,
 		pAppletMenu,
 		pAppletIcon->pModuleInstance->pModule->pVisitCard->cIconFilePath);
 	
 	cairo_dock_add_in_menu_with_stock_and_data (_("Applet's Handbook"),
 		GTK_STOCK_ABOUT,
-		(GFunc) cairo_dock_pop_up_about_applet,
+		G_CALLBACK (cairo_dock_pop_up_about_applet),
 		myData.pModuleSubMenu,
-		pAppletIcon->pModuleInstance);
+		pAppletIcon->pModuleInstance);*/
 	
 	g_signal_connect (G_OBJECT (pAppletMenu),
 		"deactivate",
@@ -378,6 +378,10 @@
 	g_return_val_if_fail (pDbusApplet != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	myData.pCurrentMenuDbusApplet = pDbusApplet;
 	
+	GList *pChildren = gtk_container_get_children (GTK_CONTAINER (pAppletMenu));
+	myData.iMenuPosition = g_list_length (pChildren);
+	g_list_free (pChildren);
+	
 	if (pClickedIcon == pAppletIcon)
 		g_signal_emit (pDbusApplet, s_iSignals[BUILD_MENU], 0);
 	else if (pDbusApplet->pSubApplet != NULL)
@@ -406,12 +410,8 @@
 		//\________________ On telecharge l'archive de l'applet et on l'installe/la met a jour.
 		GError *erreur = NULL;
 		//g_print ("dropped a distant applet\n");
-		gchar *cServerAdress = g_path_get_dirname (cReceivedData);
-		gchar *cDistantFileName = g_path_get_basename (cReceivedData);
 		gchar *cExtractTo = g_strdup_printf ("%s/%s", g_cCairoDockDataDir, CD_DBUS_APPLETS_FOLDER);
-		gchar *cAppletDirPath = cairo_dock_download_file (cServerAdress, "", cDistantFileName, cExtractTo, &erreur);
-		g_free (cServerAdress);
-		g_free (cDistantFileName);
+		gchar *cAppletDirPath = cairo_dock_download_archive (cReceivedData, cExtractTo);
 		if (erreur != NULL)
 		{
 			cd_warning (erreur->message);

=== modified file 'Dbus/src/interface-main-methods.c'
--- Dbus/src/interface-main-methods.c	2011-10-03 15:13:15 +0000
+++ Dbus/src/interface-main-methods.c	2012-02-14 14:04:19 +0000
@@ -849,7 +849,7 @@
 		fOrder = CAIRO_DOCK_LAST_ORDER;
 	Icon *pNewIcon;
 	if (iLauncherType != -1)
-		pNewIcon = cairo_dock_add_new_launcher_by_type (iLauncherType, pParentDock, fOrder, CAIRO_DOCK_LAUNCHER);
+		pNewIcon = cairo_dock_add_new_launcher_by_type (iLauncherType, pParentDock, fOrder);
 	else
 		pNewIcon = cairo_dock_add_new_launcher_by_uri (cDesktopFilePath, pParentDock, fOrder);
 	if (pNewIcon != NULL)
@@ -1014,11 +1014,11 @@
 			fOrder);
 		pIcon->iTrueType = CAIRO_DOCK_ICON_TYPE_CONTAINER;
 		cairo_dock_set_subdock_content_renderer (pIcon, iSubdockViewType);
-		pIcon->pSubDock = cairo_dock_create_subdock_from_scratch (NULL, pIcon->cName, pParentDock);  // NULL <=> default sub-docks view.
+		pIcon->pSubDock = cairo_dock_create_subdock (pIcon->cName, NULL, pParentDock, NULL);  // NULL <=> default sub-docks view.
 	}
 	else if (strcmp (cType, "Separator") == 0)
 	{
-		pIcon = cairo_dock_create_separator_icon (CAIRO_DOCK_LAUNCHER, NULL);  // NULL because we'll load the icon ourselves later.
+		pIcon = cairo_dock_create_separator_icon (CAIRO_DOCK_LAUNCHER);
 	}
 	else
 	{
@@ -1028,10 +1028,9 @@
 	pIcon->cParentDockName = g_strdup (cParentDockName);
 	
 	//\_______________ load it inside the dock.
-	cairo_dock_load_icon_buffers (pIcon, CAIRO_CONTAINER (pParentDock));
+	cairo_dock_insert_icon_in_dock (pIcon, pParentDock, CAIRO_DOCK_ANIMATE_ICON);
 	
-	cairo_dock_insert_icon_in_dock (pIcon, pParentDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
-	cairo_dock_start_icon_animation (pIcon, pParentDock);
+	///cairo_dock_load_icon_buffers (pIcon, CAIRO_CONTAINER (pParentDock));
 	
 	if (pIcon->cClass != NULL)
 	{
@@ -1122,7 +1121,7 @@
 	{
 		pIcon = ic->data;
 		cairo_dock_register_notification_on_object (pIcon,
-			NOTIFICATION_STOP_ICON,
+			NOTIFICATION_DESTROY,
 			(CairoDockNotificationFunc) _on_icon_deleted,
 			CAIRO_DOCK_RUN_FIRST, ic);
 	}
@@ -1135,7 +1134,7 @@
 			continue;
 		
 		cairo_dock_remove_notification_func_on_object (pIcon,
-			NOTIFICATION_STOP_ICON,
+			NOTIFICATION_DESTROY,
 			(CairoDockNotificationFunc) _on_icon_deleted,
 			ic);  // remove it now, since maybe this icon won't be deleted.
 		
@@ -1287,16 +1286,12 @@
 		}
 		else
 		{
-			if (iPosition < 0)  // [-N, -1]
-				cairo_dock_print_overlay_on_icon (pIcon, pContainer, cImage, - iPosition - 1);
-			else  // [0, N-1]
+			if (iPosition < 0)  // [-N, -1] => print the overlay
+				cairo_dock_print_overlay_on_icon_from_image (pIcon, pContainer, cImage, - iPosition - 1);
+			else  // [0, N-1] => add it
 				cairo_dock_add_overlay_from_image (pIcon, cImage, iPosition);
 		}
-		/**CairoEmblem *pEmblem = cairo_dock_make_emblem (cImage, pIcon);
-		pEmblem->iPosition = iPosition;
-		cairo_dock_draw_emblem_on_icon (pEmblem, pIcon, pContainer);
-		cairo_dock_free_emblem (pEmblem);*/
-
+		
 		cairo_dock_redraw_icon (pIcon, pContainer);
 	}
 	

=== modified file 'Disks/data/Disks.conf.in' (properties changed: +x to -x)
--- Disks/data/Disks.conf.in	2011-09-26 12:56:12 +0000
+++ Disks/data/Disks.conf.in	2012-02-14 14:04:19 +0000
@@ -9,9 +9,9 @@
 #d Name of the container it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[Default] Name of the icon as it will appear in its caption in the dock:
 name = 
- #v
+#v
 sep_display=
 
 icon = 
@@ -42,7 +42,6 @@
 size = 96;96
 
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 
 #b Should be visible on all desktops?

=== modified file 'Disks/src/applet-notifications.c'
--- Disks/src/applet-notifications.c	2011-04-20 20:46:51 +0000
+++ Disks/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -66,9 +66,6 @@
 	}
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-	
-	// Main Menu
 	CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("System Monitor"), GTK_STOCK_MEDIA_PLAY, _show_monitor_system, CD_APPLET_MY_MENU);
 	
 	// Sub-Menu
@@ -76,7 +73,6 @@
 		//~ CD_APPLET_ADD_IN_MENU (D_("Re-check interface"), _disks_recheck, pSubMenu);
 		//~ CD_APPLET_ADD_SEPARATOR_IN_MENU (pSubMenu);
 	//~ }
-	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 
 

=== modified file 'Doncky/data/Doncky.conf.in' (properties changed: +x to -x)
--- Doncky/data/Doncky.conf.in	2011-09-26 12:56:12 +0000
+++ Doncky/data/Doncky.conf.in	2012-02-14 14:04:19 +0000
@@ -9,12 +9,12 @@
 #d Name of the dock it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[Default] Name of the icon as it will appear in its caption in the dock:
 name = 
- #v
+#v
 sep_display=
 
-#S+ Image filename:
+#S+[Default] Image filename:
 #{Leave empty to use the default one.}
 icon = 
 
@@ -54,7 +54,6 @@
 #b Is detached from the dock
 initially detached=true
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 #b Should be visible on all desktops?
 sticky=true

=== modified file 'Doncky/src/applet-notifications.c'
--- Doncky/src/applet-notifications.c	2011-04-20 20:46:51 +0000
+++ Doncky/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -235,8 +235,7 @@
 
 //\___________ Define here the entries you want to add to the menu when the user right-clicks on your icon or on its subdock or your desklet. The icon and the container that were clicked are available through the macros CD_APPLET_CLICKED_ICON and CD_APPLET_CLICKED_CONTAINER. CD_APPLET_CLICKED_ICON may be NULL if the user clicked in the container but out of icons. The menu where you can add your entries is available throught the macro CD_APPLET_MY_MENU; you can add sub-menu to it if you want.
 CD_APPLET_ON_BUILD_MENU_BEGIN
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	
 CD_APPLET_ON_BUILD_MENU_END
 
 

=== modified file 'Folders/data/Folders.conf.in' (properties changed: +x to -x)
--- Folders/data/Folders.conf.in	2011-09-26 12:56:12 +0000
+++ Folders/data/Folders.conf.in	2012-02-14 14:04:19 +0000
@@ -9,16 +9,16 @@
 #d Name of the dock it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[folder name] Name of the icon as it will appear in its caption in the dock:
 #{Let empty to use the name of the folder.}
 name =
- #v
+#v
 sep_display=
 
 #Y[Use an image;1;1;Draw sub-dock's content as emblems;0;0;Draw sub-dock's content as stack;0;0;Draw sub-dock's content inside a box;0;0] How to render the icon :
 view type = 3
 
-#S+ Image filename:
+#S+[Default] Image filename:
 #{Leave empty to use the default one.}
 image file=folder
 
@@ -66,7 +66,6 @@
 #b Is detached from the dock
 initially detached=false
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 #b Should be visible on all desktops?
 sticky=true

=== modified file 'Folders/src/applet-notifications.c'
--- Folders/src/applet-notifications.c	2011-10-03 15:13:15 +0000
+++ Folders/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -96,6 +96,7 @@
 
 //\___________ Define here the entries you want to add to the menu when the user right-clicks on your icon or on its subdock or your desklet. The icon and the container that were clicked are available through the macros CD_APPLET_CLICKED_ICON and CD_APPLET_CLICKED_CONTAINER. CD_APPLET_CLICKED_ICON may be NULL if the user clicked in the container but out of icons. The menu where you can add your entries is available throught the macro CD_APPLET_MY_MENU; you can add sub-menu to it if you want.
 
+#define MARGIN 3
 static void _cd_folders_show_file_properties (GtkMenuItem *pMenuItem, gpointer *data)
 {
 	Icon *icon = data[0];
@@ -112,7 +113,7 @@
 			GTK_DIALOG_DESTROY_WITH_PARENT,
 			GTK_MESSAGE_INFO,
 			GTK_BUTTONS_OK,
-			"Properties :");
+			D_("Properties:"));
 
 		GString *sInfo = g_string_new ("");
 		g_string_printf (sInfo, "<b>%s</b>", icon->cName);
@@ -122,21 +123,21 @@
 		gtk_label_set_markup (GTK_LABEL (pLabel), sInfo->str);
 
 		GtkWidget *pFrame = gtk_frame_new (NULL);
-		gtk_container_set_border_width (GTK_CONTAINER (pFrame), 3);
+		gtk_container_set_border_width (GTK_CONTAINER (pFrame), MARGIN);
 		gtk_frame_set_label_widget (GTK_FRAME (pFrame), pLabel);
+		gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG(pDialog))), pFrame);
 		gtk_frame_set_shadow_type (GTK_FRAME (pFrame), GTK_SHADOW_OUT);
-		gtk_container_add (GTK_CONTAINER (GTK_DIALOG (pDialog)->vbox), pFrame);
 
-		GtkWidget *pVBox = gtk_vbox_new (FALSE, 3);
+		GtkWidget *pVBox = _gtk_vbox_new (MARGIN);
 		gtk_container_add (GTK_CONTAINER (pFrame), pVBox);
 
 		pLabel = gtk_label_new (NULL);
 		gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
-		g_string_printf (sInfo, "<u>Size</u> : %"G_GUINT64_FORMAT" bytes", iSize);
+		g_string_printf (sInfo, "<u>%s</u>: %"G_GUINT64_FORMAT" %s", D_("Size"), iSize, D_("bytes"));
 		if (iSize > 1024*1024)
-			g_string_append_printf (sInfo, " (%.1f MB)", 1. * iSize / 1024 / 1024);
+			g_string_append_printf (sInfo, " (%.1f %s)", 1. * iSize / 1024 / 1024, D_("MB"));
 		else if (iSize > 1024)
-			g_string_append_printf (sInfo, " (%.1f KB)", 1. * iSize / 1024);
+			g_string_append_printf (sInfo, " (%.1f %s)", 1. * iSize / 1024, D_("KB"));
 		gtk_label_set_markup (GTK_LABEL (pLabel), sInfo->str);
 		gtk_container_add (GTK_CONTAINER (pVBox), pLabel);
 
@@ -146,7 +147,7 @@
 		localtime_r (&iLastModificationTime, &epoch_tm);  // et non pas gmtime_r.
 		gchar *cTimeChain = g_new0 (gchar, 100);
 		strftime (cTimeChain, 100, "%F, %T", &epoch_tm);
-		g_string_printf (sInfo, "<u>Last Modification</u> : %s", cTimeChain);
+		g_string_printf (sInfo, "<u>%s</u>: %s", D_("Last Modification"), cTimeChain);
 		g_free (cTimeChain);
 		gtk_label_set_markup (GTK_LABEL (pLabel), sInfo->str);
 		gtk_container_add (GTK_CONTAINER (pVBox), pLabel);
@@ -155,17 +156,21 @@
 		{
 			pLabel = gtk_label_new (NULL);
 			gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
-			g_string_printf (sInfo, "<u>Mime Type</u> : %s", cMimeType);
+			g_string_printf (sInfo, "<u>%s</u>: %s", D_("Mime Type"), cMimeType);
 			gtk_label_set_markup (GTK_LABEL (pLabel), sInfo->str);
 			gtk_container_add (GTK_CONTAINER (pVBox), pLabel);
 		}
 
+		#if (GTK_MAJOR_VERSION < 3)
 		GtkWidget *pSeparator = gtk_hseparator_new ();
+		#else
+		GtkWidget *pSeparator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+		#endif
 		gtk_container_add (GTK_CONTAINER (pVBox), pSeparator);
 
 		pLabel = gtk_label_new (NULL);
 		gtk_label_set_use_markup (GTK_LABEL (pLabel), TRUE);
-		g_string_printf (sInfo, "<u>User ID</u> : %d / <u>Group ID</u> : %d", iUID, iGID);
+		g_string_printf (sInfo, "<u>%s</u>: %d \t <u>%s</u>: %d", D_("User ID"), iUID, D_("Group ID"), iGID);
 		gtk_label_set_markup (GTK_LABEL (pLabel), sInfo->str);
 		gtk_container_add (GTK_CONTAINER (pVBox), pLabel);
 
@@ -174,17 +179,18 @@
 		int iOwnerPermissions = iPermissionsMask >> 6;  // 8*8.
 		int iGroupPermissions = (iPermissionsMask - (iOwnerPermissions << 6)) >> 3;
 		int iOthersPermissions = (iPermissionsMask % 8);
-		g_string_printf (sInfo, "<u>Permissions</u> : read:%s / write:%s / execute:%s",
-			iOwnerPermissions?"yes":"no",
-			iGroupPermissions?"yes":"no",
-			iOthersPermissions?"yes":"no");
+		g_string_printf (sInfo, "<u>%s</u>: %s: %s / %s: %s / %s: %s",
+			D_("Permissions"), D_("Read"),
+			iOwnerPermissions ? D_("Yes") : D_("No"), D_("Write"),
+			iGroupPermissions ? D_("Yes") : D_("No"), D_("Execute"),
+			iOthersPermissions ? D_("Yes") : D_("No"));
 		gtk_label_set_markup (GTK_LABEL (pLabel), sInfo->str);
 		gtk_container_add (GTK_CONTAINER (pVBox), pLabel);
 
 		gtk_window_set_type_hint (GTK_WINDOW (pDialog), GDK_WINDOW_TYPE_HINT_DOCK);  // sinon le dialogue sera toujours derriere le sous-dock, meme avec un 'set_keep_above'. en contrepartie, le dialgue n'aura pas de bordure (du moins avec Compiz).
 		gtk_window_set_keep_above (GTK_WINDOW (pDialog), TRUE);
 		
-		gtk_widget_show_all (GTK_DIALOG (pDialog)->vbox);
+		gtk_widget_show_all (gtk_dialog_get_content_area (GTK_DIALOG(pDialog)));
 		gtk_window_set_position (GTK_WINDOW (pDialog), GTK_WIN_POS_CENTER_ALWAYS);
 		int answer = gtk_dialog_run (GTK_DIALOG (pDialog));
 		gtk_widget_destroy (pDialog);
@@ -246,7 +252,7 @@
 	cd_message ("%s (%s)", __func__, icon->cName);
 	
 	GtkWidget* pFileChooserDialog = gtk_file_chooser_dialog_new (
-		"Pick up a folder",
+		_("Pick up a directory"),
 		GTK_WINDOW (pContainer->pWidget),
 		GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
 		GTK_STOCK_OK,
@@ -354,16 +360,12 @@
 	
 	if (CD_APPLET_CLICKED_ICON == myIcon || CD_APPLET_CLICKED_ICON == NULL)  // click on main icon or on the container.
 	{
-		GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
 		if (myConfig.bShowFiles)
 		{
 			gchar *cLabel = g_strdup_printf ("%s (%s)", D_("Open the folder"), D_("middle-click"));
 			CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (cLabel, GTK_STOCK_OPEN, _cd_folders_open_folder, CD_APPLET_MY_MENU, myApplet);
 			g_free (cLabel);
-			if (pSubMenu == CD_APPLET_MY_MENU)
-				CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 		}
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 	}
 	else  // clic on a file.
 	{

=== modified file 'GMenu/data/GMenu.conf.in' (properties changed: +x to -x)
--- GMenu/data/GMenu.conf.in	2011-09-26 12:56:12 +0000
+++ GMenu/data/GMenu.conf.in	2012-02-14 14:04:19 +0000
@@ -9,12 +9,12 @@
 #d Name of the dock it belongs to:
 dock name = 
 
-#s Name of the icon as it will appear in its caption in the dock:
+#s[Default] Name of the icon as it will appear in its caption in the dock:
 name =
- #v
+#v
 sep_display=
 
-#S+ Image filename:
+#S+[Default] Image filename:
 #{Leave empty to use the default one.}
 icon=start-here
 
@@ -59,7 +59,6 @@
 #b Is detached from the dock
 initially detached=false
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 #b Should be visible on all desktops?
 sticky=true

=== modified file 'GMenu/src/applet-config.c'
--- GMenu/src/applet-config.c	2011-08-09 18:08:08 +0000
+++ GMenu/src/applet-config.c	2012-02-14 14:04:19 +0000
@@ -47,14 +47,8 @@
 //\_________________ Here you have to free all ressources allocated for myConfig. This one will be reseted to 0 at the end of this function. This function is called right before you get the applet's config, and when your applet is stopped, in the end.
 CD_APPLET_RESET_CONFIG_BEGIN
 	g_free (myConfig.cConfigureMenuCommand);
-	if (myConfig.cMenuShortkey)
-		cd_keybinder_unbind (myConfig.cMenuShortkey, (CDBindkeyHandler) cd_menu_on_shortkey_menu);
 	g_free (myConfig.cMenuShortkey);
-	
-	if (myConfig.cQuickLaunchShortkey)
-		cd_keybinder_unbind (myConfig.cQuickLaunchShortkey, (CDBindkeyHandler) cd_menu_on_shortkey_quick_launch);
 	g_free (myConfig.cQuickLaunchShortkey);
-	
 	g_free (myConfig.cRecentRootDirFilter);
 CD_APPLET_RESET_CONFIG_END
 

=== modified file 'GMenu/src/applet-init.c'
--- GMenu/src/applet-init.c	2011-08-09 18:08:08 +0000
+++ GMenu/src/applet-init.c	2012-02-14 14:04:19 +0000
@@ -60,8 +60,16 @@
 	CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
 	CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
 	
-	cd_keybinder_bind (myConfig.cMenuShortkey, (CDBindkeyHandler) cd_menu_on_shortkey_menu, myApplet);
-	cd_keybinder_bind (myConfig.cQuickLaunchShortkey, (CDBindkeyHandler) cd_menu_on_shortkey_quick_launch, myApplet);
+	// keyboard events
+	myData.cKeyBinding = CD_APPLET_BIND_KEY (myConfig.cMenuShortkey,
+		D_("Show/hide the Applications menu"),
+		"Configuration", "menu shortkey",
+		(CDBindkeyHandler) cd_menu_on_shortkey_menu);
+	
+	myData.cKeyBindingQuickLaunch = CD_APPLET_BIND_KEY (myConfig.cQuickLaunchShortkey,
+		D_("Show/hide the quick-launch dialog"),
+		"Configuration", "quick launch shortkey",
+		(CDBindkeyHandler) cd_menu_on_shortkey_quick_launch);
 CD_APPLET_INIT_END
 
 
@@ -77,6 +85,10 @@
 		g_source_remove (myData.iSidCreateMenuIdle);
 	if (myData.iSidTreeChangeIdle != 0)
 		g_source_remove (myData.iSidTreeChangeIdle);
+	
+	// keyboard events
+	cd_keybinder_unbind (myData.cKeyBinding);
+	cd_keybinder_unbind (myData.cKeyBindingQuickLaunch);
 CD_APPLET_STOP_END
 
 
@@ -91,8 +103,8 @@
 
 		CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE;  // set the default icon if none is specified in conf.
 		
-		cd_keybinder_bind (myConfig.cMenuShortkey, (CDBindkeyHandler) cd_menu_on_shortkey_menu, myApplet);  // shortkey were unbinded during reset_config.
-		cd_keybinder_bind (myConfig.cQuickLaunchShortkey, (CDBindkeyHandler) cd_menu_on_shortkey_quick_launch, myApplet);
+		cd_keybinder_rebind (myData.cKeyBinding, myConfig.cMenuShortkey, NULL);
+		cd_keybinder_rebind (myData.cKeyBindingQuickLaunch, myConfig.cQuickLaunchShortkey, NULL);
 		
 		// on reset ce qu'il faut.
 		cd_menu_reset_recent (myApplet);  // le fitre peut avoir change.

=== modified file 'GMenu/src/applet-menu-callbacks.c'
--- GMenu/src/applet-menu-callbacks.c	2011-08-09 18:08:08 +0000
+++ GMenu/src/applet-menu-callbacks.c	2012-02-14 14:04:19 +0000
@@ -50,9 +50,12 @@
 	return ;
 	
 	guint idle_id;
-
-	while (GTK_MENU_SHELL (menu)->children)
-                gtk_widget_destroy (GTK_MENU_SHELL (menu)->children->data);
+	
+	GList *children = gtk_container_get_children (GTK_CONTAINER (menu));
+	g_list_foreach (children, (GFunc)gtk_widget_destroy, NULL);
+	g_list_free (children);
+	///while (GTK_MENU_SHELL (menu)->children)
+	///	gtk_widget_destroy (GTK_MENU_SHELL (menu)->children->data);
 
 	g_object_set_data_full (G_OBJECT (menu),
 				"panel-menu-tree-directory",
@@ -362,7 +365,7 @@
 
 	widget = GTK_WIDGET (image);
 
-	is_mapped = GTK_WIDGET_MAPPED (widget);
+	is_mapped = gtk_widget_get_mapped (widget);  // since gtk-2.20
 	if (is_mapped)
 		gtk_widget_unmap (widget);
 
@@ -378,12 +381,12 @@
 
 		icons_to_add = g_list_delete_link (icons_to_add, icons_to_add);
 
-		if (icon_to_add->stock_id)
+		/**if (icon_to_add->stock_id)
 			gtk_image_set_from_stock (
 				GTK_IMAGE (icon_to_add->image),
 				icon_to_add->stock_id,
 				icon_to_add->icon_size);
-		else {
+		else {*/
 			g_assert (icon_to_add->pixbuf);
 
 			gtk_image_set_from_pixbuf (
@@ -395,7 +398,7 @@
 					  GINT_TO_POINTER (icon_to_add->icon_size));
 
 			g_object_unref (icon_to_add->pixbuf);
-		}
+		///}
 
 		g_object_unref (icon_to_add->image);
 		g_free (icon_to_add);
@@ -410,9 +413,9 @@
 		g_object_unref (icon->pixmap);
 	icon->pixmap = NULL;
 
-	if (icon->gicon)
+	/**if (icon->gicon)
 		g_object_unref (icon->gicon);
-	icon->gicon = NULL;
+	icon->gicon = NULL;*/
 
 	g_free (icon->image);          icon->image = NULL;
 	g_free (icon->fallback_image); icon->fallback_image = NULL;
@@ -438,14 +441,14 @@
 	icons_to_load = g_list_delete_link (icons_to_load, icons_to_load);
 
 	/* if not visible anymore, just ignore */
-	if ( ! GTK_WIDGET_VISIBLE (icon->pixmap)) {
+	if ( ! gtk_widget_get_visible (icon->pixmap)) {  // since 2.18
 		icon_to_load_free (icon);
 		/* we didn't do anything long/hard, so just do this again,
 		 * this is fun, don't go back to main loop */
 		goto load_icons_handler_again;
 	}
 
-	if (icon->stock_id) {
+	/**if (icon->stock_id) {
 		IconToAdd *icon_to_add;
 
 		icon_to_add            = g_new (IconToAdd, 1);
@@ -488,13 +491,13 @@
 		if (!pb) {
 			icon_to_load_free (icon);
 			if (long_operation)
-				/* this may have been a long operation so jump
-				 * back to the main loop for a while */
+				// this may have been a long operation so jump
+				// back to the main loop for a while 
 				return TRUE;
 			else
-				/* we didn't do anything long/hard, so just do
-				 * this again, this is fun, don't go back to
-				 * main loop */
+				// we didn't do anything long/hard, so just do
+				// this again, this is fun, don't go back to
+				// main loop
 				goto load_icons_handler_again;
 		}
 
@@ -507,7 +510,7 @@
 		icons_to_add = g_list_prepend (icons_to_add, icon_to_add);
 	}
 	#endif
-	else {
+	else {*/
 		IconToAdd *icon_to_add;
 		GdkPixbuf *pb;
 		int        icon_height = PANEL_DEFAULT_MENU_ICON_SIZE;
@@ -533,12 +536,12 @@
 
 		icon_to_add            = g_new (IconToAdd, 1);
 		icon_to_add->image     = g_object_ref (icon->pixmap);
-		icon_to_add->stock_id  = NULL;
+		///icon_to_add->stock_id  = NULL;
 		icon_to_add->pixbuf    = pb;
 		icon_to_add->icon_size = icon->icon_size;
 
 		icons_to_add = g_list_prepend (icons_to_add, icon_to_add);
-	}
+	///}
 
 	icon_to_load_free (icon);
 
@@ -570,13 +573,13 @@
 	retval = g_new0 (IconToLoad, 1);
 
 	retval->pixmap         = g_object_ref (icon->pixmap);
-	if (icon->gicon)
+	/**if (icon->gicon)
 		retval->gicon  = g_object_ref (icon->gicon);
 	else
-		retval->gicon  = NULL;
+		retval->gicon  = NULL;*/
 	retval->image          = g_strdup (icon->image);
 	retval->fallback_image = g_strdup (icon->fallback_image);
-	retval->stock_id       = icon->stock_id;
+	///retval->stock_id       = icon->stock_id;
 	retval->icon_size      = icon->icon_size;
 
 	return retval;
@@ -626,17 +629,15 @@
  */
 void  drag_end_menu_cb (GtkWidget *widget, GdkDragContext     *context)
 {
-  GtkWidget *xgrab_shell;
+  /**GtkWidget *xgrab_shell;
   GtkWidget *parent;
 
-  /* Find the last viewable ancestor, and make an X grab on it
-   */
+  // Find the last viewable ancestor, and make an X grab on it
   parent = widget->parent;
   xgrab_shell = NULL;
 
-  /* FIXME: workaround for a possible gtk+ bug
-   *    See bugs #92085(gtk+) and #91184(panel) for details.
-   */
+  // FIXME: workaround for a possible gtk+ bug
+  //    See bugs #92085(gtk+) and #91184(panel) for details.
   g_object_set (widget, "has-tooltip", TRUE, NULL);
 
   while (parent)
@@ -680,7 +681,7 @@
 	}
 
       gdk_cursor_unref (cursor);
-    }
+    }*/
 }
 
 void  drag_data_get_menu_cb (GtkWidget        *widget,
@@ -700,7 +701,7 @@
 	g_free (uri);
 
 	gtk_selection_data_set (selection_data,
-				selection_data->target, 8, (guchar *)uri_list,
+				gtk_selection_data_get_target (selection_data), 8, (guchar *)uri_list,
 				strlen (uri_list));
 	g_free (uri_list);
 }

=== modified file 'GMenu/src/applet-menu.c'
--- GMenu/src/applet-menu.c	2011-11-05 20:29:02 +0000
+++ GMenu/src/applet-menu.c	2012-02-14 14:04:19 +0000
@@ -92,8 +92,9 @@
 		GtkWidget *image = l->data;
 		gboolean   is_mapped;
       
-		is_mapped = GTK_WIDGET_MAPPED (image);
-
+		///is_mapped = GTK_WIDGET_MAPPED (image);
+		is_mapped = gtk_widget_get_mapped (image);
+		
 		if (is_mapped)
 			gtk_widget_unmap (image);
 
@@ -235,8 +236,8 @@
 
 void panel_load_menu_image_deferred (GtkWidget   *image_menu_item,
 				GtkIconSize  icon_size,
-				const char  *stock_id,
-				GIcon       *gicon,
+				///const char  *stock_id,
+				///GIcon       *gicon,
 				const char  *image_filename,
 				const char  *fallback_image_filename)
 {
@@ -244,33 +245,33 @@
 	GtkWidget *image;
 	int        icon_height = PANEL_DEFAULT_MENU_ICON_SIZE;
 
-	icon = g_new (IconToLoad, 1);
+	icon = g_new0 (IconToLoad, 1);
 
 	gtk_icon_size_lookup (icon_size, NULL, &icon_height);
 
 	image = gtk_image_new ();
-	image->requisition.width  = icon_height;
-	image->requisition.height = icon_height;
+	///image->requisition.width  = icon_height;
+	///image->requisition.height = icon_height;
 
 	/* this takes over the floating ref */
 	icon->pixmap = g_object_ref (G_OBJECT (image));
-	gtk_object_sink (GTK_OBJECT (image));
+	g_object_ref_sink (G_OBJECT (image));
 
-	icon->stock_id       = stock_id;
+	/**icon->stock_id       = stock_id;
 	if (gicon)
 		icon->gicon  = g_object_ref (gicon);
 	else
-		icon->gicon  = NULL;
+		icon->gicon  = NULL;*/
 	icon->image          = g_strdup (image_filename);
 	icon->fallback_image = g_strdup (fallback_image_filename);
 	icon->icon_size      = icon_size;
 
 	gtk_widget_show (image);
 
-	g_object_set_data_full (G_OBJECT (image_menu_item),
+	/**g_object_set_data_full (G_OBJECT (image_menu_item),
 				"Panel:Image",
 				g_object_ref (image),
-				(GDestroyNotify) g_object_unref);
+				(GDestroyNotify) g_object_unref);*/
  
 	if (myConfig.bHasIcons)
 	{
@@ -300,13 +301,13 @@
 
 	panel_load_menu_image_deferred (menuitem,
 					32, //panel_menu_icon_get_size (),
-					NULL, NULL,
+					///NULL, NULL,
 					gmenu_tree_directory_get_icon (directory),
 					PANEL_ICON_FOLDER);
 
 	setup_menuitem (menuitem,
 			32, //panel_menu_icon_get_size (),
-			NULL,
+			///NULL,
 			gmenu_tree_directory_get_name (directory));
 
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
@@ -375,14 +376,14 @@
 
 	panel_load_menu_image_deferred (menuitem,
 					PANEL_DEFAULT_MENU_ICON_SIZE, //panel_menu_icon_get_size (),
-					NULL, NULL,
+					///NULL, NULL,
 					alias_directory ? gmenu_tree_directory_get_icon (alias_directory) :
 							  gmenu_tree_entry_get_icon (entry),
 					NULL);
 
 	setup_menuitem (menuitem,
 			PANEL_DEFAULT_MENU_ICON_SIZE, //panel_menu_icon_get_size (),
-			NULL,
+			///NULL,
 			alias_directory ? gmenu_tree_directory_get_name (alias_directory) :
 					  gmenu_tree_entry_get_name (entry));
 
@@ -466,7 +467,7 @@
 }
 
 
-static void
+/**static void
 image_menuitem_size_request (GtkWidget      *menuitem,
 			     GtkRequisition *requisition,
 			     gpointer        data)
@@ -478,20 +479,19 @@
 	if (!gtk_icon_size_lookup (icon_size, NULL, &icon_height))
 		return;
 
-	/* If we don't have a pixmap for this menuitem
-	 * at least make sure its the same height as
-	 * the rest.
-	 * This is a bit ugly, since we should keep this in sync with what's in
-	 * gtk_menu_item_size_request()
-	 */
+	// If we don't have a pixmap for this menuitem
+	// at least make sure its the same height as
+	// the rest.
+	// This is a bit ugly, since we should keep this in sync with what's in
+	// gtk_menu_item_size_request()
 	req_height = icon_height;
 	req_height += (GTK_CONTAINER (menuitem)->border_width +
-		       menuitem->style->ythickness) * 2;
+		       menuitem->style->thickness) * 2;
 	requisition->height = MAX (requisition->height, req_height);
-}
+}*/
 void setup_menuitem (GtkWidget   *menuitem,
 		GtkIconSize  icon_size,
-		GtkWidget   *image,
+		///GtkWidget   *image,
 		const char  *title)
 			       
 {
@@ -513,7 +513,7 @@
 
 	gtk_container_add (GTK_CONTAINER (menuitem), label);
 
-	if (image) {
+	/**if (image) {
 		g_object_set_data_full (G_OBJECT (menuitem),
 					"Panel:Image",
 					g_object_ref (image),
@@ -532,7 +532,7 @@
 		g_signal_connect (menuitem, "size_request",
 				  G_CALLBACK (image_menuitem_size_request),
 				  GINT_TO_POINTER (icon_size));
-
+	*/
 	gtk_widget_show (menuitem);
 }
 
@@ -543,8 +543,11 @@
 	GSList   *items;
 	gboolean  add_separator;
 
-	add_separator = (GTK_MENU_SHELL (menu)->children != NULL);
-
+	///add_separator = (GTK_MENU_SHELL (menu)->children != NULL);
+	GList *children = gtk_container_get_children (GTK_CONTAINER (menu));
+	add_separator = (children != NULL);
+	g_list_free (children);  // not very optimized ...	
+	
 	items = gmenu_tree_directory_get_contents (directory);
 
 	for (l = items; l; l = l->next) {
@@ -708,6 +711,8 @@
 	const gchar *cMenuFileName = NULL;
 	if (g_file_test (XDG_MENUS_PATH"/applications.menu", G_FILE_TEST_EXISTS))  // first check 
 		cMenuFileName = "applications.menu";
+	else if (g_file_test (XDG_MENUS_PATH"/gnome-applications.menu", G_FILE_TEST_EXISTS))
+		cMenuFileName = "gnome-applications.menu";
 	else if (g_file_test (XDG_MENUS_PATH"/kde-applications.menu", G_FILE_TEST_EXISTS))
 		cMenuFileName = "kde-applications.menu";
 	else if (g_file_test (XDG_MENUS_PATH"/xfce-applications.menu", G_FILE_TEST_EXISTS))

=== modified file 'GMenu/src/applet-menu.h'
--- GMenu/src/applet-menu.h	2009-10-05 19:27:17 +0000
+++ GMenu/src/applet-menu.h	2012-02-14 14:04:19 +0000
@@ -41,7 +41,7 @@
 
 void setup_menuitem (GtkWidget   *menuitem,
 		GtkIconSize  icon_size,
-		GtkWidget   *image,
+		///GtkWidget   *image,
 		const char  *title);
 
 GtkWidget * populate_menu_from_directory (GtkWidget          *menu,

=== modified file 'GMenu/src/applet-notifications.c'
--- GMenu/src/applet-notifications.c	2011-04-20 20:46:51 +0000
+++ GMenu/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -71,8 +71,6 @@
 	}
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-	// Main menu
 	gchar *cLabel = g_strdup_printf ("%s (%s)", D_("Quick launch"), D_("middle-click"));
 	CD_APPLET_ADD_IN_MENU_WITH_STOCK (cLabel, GTK_STOCK_EXECUTE, cd_menu_show_hide_quick_launch, CD_APPLET_MY_MENU);
 	g_free (cLabel);
@@ -81,9 +79,6 @@
 	
 	CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 	CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Clear recent"), GTK_STOCK_CLEAR, cd_menu_clear_recent, CD_APPLET_MY_MENU);
-	
-	// Sub-Menu
-	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 
 

=== modified file 'GMenu/src/applet-run-dialog.c'
--- GMenu/src/applet-run-dialog.c	2011-04-20 20:46:51 +0000
+++ GMenu/src/applet-run-dialog.c	2012-02-14 14:04:19 +0000
@@ -31,6 +31,9 @@
 #include <sys/stat.h>
 
 #include <gdk/gdkkeysyms.h>
+#if (GTK_MAJOR_VERSION > 2 || GTK_MINOR_VERSION > 20)
+#include <gdk/gdkkeysyms-compat.h>
+#endif
 
 
 static GList *

=== modified file 'GMenu/src/applet-struct.h'
--- GMenu/src/applet-struct.h	2011-08-09 18:08:08 +0000
+++ GMenu/src/applet-struct.h	2012-02-14 14:04:19 +0000
@@ -22,16 +22,16 @@
 #define  __CD_APPLET_STRUCT__
 
 #include <cairo-dock.h>
-#ifdef HAVE_GIO
+/**#ifdef HAVE_GIO
 #include <gio/gio.h>
 #else
 #define GIcon gpointer
-#endif
+#endif*/
 
 typedef struct {
 	GtkWidget    *pixmap;
-	const char   *stock_id;
-	GIcon        *gicon;
+	///const char   *stock_id;
+	///GIcon        *gicon;
 	char         *image;
 	char         *fallback_image;
 	GtkIconTheme *icon_theme;
@@ -40,7 +40,7 @@
 
 typedef struct {
 	GtkWidget   *image;
-	const char  *stock_id;
+	///const char  *stock_id;
 	GdkPixbuf   *pixbuf;
 	GtkIconSize  icon_size;
 } IconToAdd;
@@ -85,6 +85,8 @@
 	GList *completion_items;
 	GCompletion *completion;
 	gboolean completion_started;
+	CairoKeyBinding *cKeyBinding;
+	CairoKeyBinding *cKeyBindingQuickLaunch;
 	} ;
 
 

=== added directory 'Global-Menu'
=== added file 'Global-Menu/CMakeLists.txt'
--- Global-Menu/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Global-Menu/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -0,0 +1,6 @@
+add_subdirectory(src)
+add_subdirectory(data)
+ 
+if ("${PYTHON_FOUND}" STREQUAL "TRUE")
+	add_subdirectory(registrar)
+endif()
\ No newline at end of file

=== added directory 'Global-Menu/data'
=== added file 'Global-Menu/data/CMakeLists.txt'
--- Global-Menu/data/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -0,0 +1,12 @@
+
+########### install files ###############
+
+install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Global-Menu.conf
+	preview.jpg
+	icon.svg
+	button-min.svg
+	button-max.svg
+	button-restore.svg
+	button-close.svg
+	DESTINATION ${global_menudatadir})
+

=== added file 'Global-Menu/data/Global-Menu.conf.in'
--- Global-Menu/data/Global-Menu.conf.in	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/Global-Menu.conf.in	2012-02-14 14:04:19 +0000
@@ -0,0 +1,131 @@
+#@VERSION_GLOBAL_MENU@
+
+#[gtk-about]
+[Icon]
+
+#F[Icon]
+frame_maininfo=
+
+#d Name of the dock it belongs to:
+dock name = 
+
+name = 
+#v
+sep_display=
+
+icon = 
+
+#j[0;128] Desired icon size for this applet
+#{Set to 0 to use the default applet size}
+icon size = 0;0
+
+order=
+
+#F[Applet's Handbook]
+frame_hand=
+#A
+handbook=Global Menu
+
+
+#[gtk-convert]
+[Desklet]
+
+#X[Position]
+frame_pos =
+
+#b Lock position?
+#{If locked, the desklet cannot be moved by simply dragging it with the left mouse button. It can still be moved with ALT + left-click.}
+locked = false
+
+#j+[24;512] Desklet dimensions (width x height):
+#{Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.}
+size = 96;96
+
+#i[-2048;2048] Desklet position (x, y):
+#{Depending on your WindowManager, you may be able to move this with ALT + left-click.. Negative values are counted from the right/bottom of the screen}
+x position=0
+#i[-2048;2048] ...
+y position=0
+
+#I[-180;180] Rotation:
+#{You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.}
+rotation = 0
+
+#X[Visibility]
+frame_visi =
+
+#b Is detached from the dock
+initially detached=false
+#l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
+accessibility=0
+#b Should be visible on all desktops?
+sticky=true
+
+
+#F[Decorations;gtk-orientation-portrait]
+frame_deco=
+
+#o+ Choose a decoration theme for this desklet:
+#{Choose 'Custom decorations' to define your own decorations below.}
+decorations = default
+
+#v
+sep_deco =
+
+#S+ Background image:
+#{Image to be displayed below drawings, e.g. a frame. Leave empty for no image.}
+bg desklet =
+#e+[0;1] Background transparency:
+bg alpha = 1
+#i+[0;256] Left offset:
+#{in pixels. Use this to adjust the left position of drawings.}
+left offset = 0
+#i+[0;256] Top offset:
+#{in pixels. Use this to adjust the top position of drawings.}
+top offset = 0
+#i+[0;256] Right offset:
+#{in pixels. Use this to adjust the right position of drawings.}
+right offset = 0
+#i+[0;256] Bottom offset:
+#{in pixels. Use this to adjust the bottom position of drawings.}
+bottom offset = 0
+#S+ Foreground image:
+#{Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.}
+fg desklet =
+#e+[0;1] Foreground tansparency:
+fg alpha = 1
+
+
+#[gtk-preferences]
+[Configuration]
+
+#Y[Steal window menu;1;2;Steal window decoration;3;2;Steal window menu and border;1;4] Behaviour
+#{The applet can steal the top border of maximized windows, in which case it will display the window control buttons.
+# The applet can steal the menu from the windows, in which case it will display a button to pop up the menu of the current window.}
+steal = 2
+
+#k Shortkey to pop up the menu
+shortkey = <Alt>F1
+
+#b Pop up the menu at mouse position
+menu on mouse = false
+
+#b Compact mode
+compact = false
+
+#l+[Auto;Close button at the end;Close button at first] Order of the buttons: 
+buttons order = 0
+
+#S+[Default] Image for the 'minimize' button
+min button =
+
+#S+[Default] Image for the 'maximize' button
+max button =
+
+#S+[Default] Image for the 'restore' button
+restore button =
+
+#S+[Default] Image for the 'close' button
+close button =
+
+

=== added file 'Global-Menu/data/button-close.svg'
--- Global-Menu/data/button-close.svg	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/button-close.svg	2012-02-14 14:04:19 +0000
@@ -0,0 +1,1198 @@
+<?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="288"
+   height="48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="button-close.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4209">
+      <stop
+         id="stop4211"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759" />
+      <stop
+         id="stop3765"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757"
+       id="linearGradient3763"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-6"
+       id="linearGradient3763-0"
+       x1="29.464285"
+       y1="41.75"
+       x2="29.553572"
+       y2="5.4107141"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-6">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4" />
+      <stop
+         id="stop3765-4"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-9"
+       xlink:href="#linearGradient3757-6-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-5">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-6" />
+      <stop
+         id="stop3765-4-8"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-9" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-99"
+       xlink:href="#linearGradient3757-6-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-1">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-62" />
+      <stop
+         id="stop3765-4-1"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-0" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-1"
+       xlink:href="#linearGradient3757-6-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-9">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-7" />
+      <stop
+         id="stop3765-4-6"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-8" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-4"
+       xlink:href="#linearGradient3757-6-3"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-3" />
+      <stop
+         id="stop3765-4-69"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-04" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-7"
+       id="linearGradient3763-8"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-7">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-9" />
+      <stop
+         id="stop3765-6"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-8" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-8"
+       id="linearGradient3763-81"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-8">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-5" />
+      <stop
+         id="stop3765-49"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-0" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-9"
+       id="linearGradient3763-6"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-9">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-91" />
+      <stop
+         id="stop3765-7"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-3"
+       id="linearGradient3763-87"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-3">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-58" />
+      <stop
+         id="stop3765-1"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-32"
+       id="linearGradient3763-3"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-32">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-1" />
+      <stop
+         id="stop3765-9"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-83" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-94"
+       id="linearGradient3763-1"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-94">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-3" />
+      <stop
+         id="stop3765-48"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-9" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-69"
+       id="linearGradient3763-65"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-69">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-6" />
+      <stop
+         id="stop3765-5"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-27" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-0"
+       id="radialGradient4207-0"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-0">
+      <stop
+         id="stop4211-4"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-1"
+       id="radialGradient4207-9"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-1">
+      <stop
+         id="stop4211-1"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-2" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-8"
+       id="radialGradient4207-1"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-8">
+      <stop
+         id="stop4211-3"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-9" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-2"
+       id="radialGradient4207-4"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-2">
+      <stop
+         id="stop4211-0"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-9"
+       id="radialGradient4207-02"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-9">
+      <stop
+         id="stop4211-11"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-6" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4209-0-1">
+      <stop
+         id="stop4211-4-5"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-1"
+       id="linearGradient3763-7"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-1">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-0" />
+      <stop
+         id="stop3765-60"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-7" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4209-0-10">
+      <stop
+         id="stop4211-4-9"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-57" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-4"
+       id="linearGradient3763-2"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-4">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-06" />
+      <stop
+         id="stop3765-606"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-79" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4209-0-5">
+      <stop
+         id="stop4211-4-8"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-3" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-13"
+       id="linearGradient3763-13"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-13">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-45" />
+      <stop
+         id="stop3765-8"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-97" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4209-0-58">
+      <stop
+         id="stop4211-4-55"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-71"
+       id="linearGradient3763-68"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-71">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-92" />
+      <stop
+         id="stop3765-56"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-26" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4209-0-3">
+      <stop
+         id="stop4211-4-81"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-65" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-16"
+       id="linearGradient3763-03"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-16">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-99" />
+      <stop
+         id="stop3765-52"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-81"
+       id="linearGradient3763-04"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-81">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-2" />
+      <stop
+         id="stop3765-51"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-28" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,46.555613,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4587"
+       xlink:href="#linearGradient3757-81"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-165"
+       id="linearGradient3763-9"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-165">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-8" />
+      <stop
+         id="stop3765-91"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-93" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,94.555605,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4587-3"
+       xlink:href="#linearGradient3757-165"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-5"
+       id="linearGradient3763-811"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-5">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-48" />
+      <stop
+         id="stop3765-93"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-34" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,142.5556,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4587-4"
+       xlink:href="#linearGradient3757-5"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-2"
+       id="linearGradient3763-98"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-2">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-43" />
+      <stop
+         id="stop3765-19"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-67" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,190.55561,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4587-9"
+       xlink:href="#linearGradient3757-2"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-0"
+       id="linearGradient3763-35"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-0">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-63" />
+      <stop
+         id="stop3765-16"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-86" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,238.55561,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4587-2"
+       xlink:href="#linearGradient3757-0"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-77"
+       id="linearGradient3763-16"
+       x1="29.464285"
+       y1="41.75"
+       x2="29.553572"
+       y2="5.4107141"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1.394036,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-77">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-00" />
+      <stop
+         id="stop3765-85"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-22" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="matrix(-1,0,0,1,49.345824,1004.551)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3046"
+       xlink:href="#linearGradient3757-77"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="matrix(-1,0,0,1,145.34582,1004.7866)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3046-1"
+       xlink:href="#linearGradient3757-77-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-77-1">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-00-6" />
+      <stop
+         id="stop3765-85-4"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-22-8" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="matrix(-1,0,0,1,97.345826,1004.7866)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3046-16"
+       xlink:href="#linearGradient3757-77-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-77-6">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-00-5" />
+      <stop
+         id="stop3765-85-8"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-22-2" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="matrix(-1,0,0,1,193.34582,1004.7866)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3046-2"
+       xlink:href="#linearGradient3757-77-11"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-77-11">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-00-7" />
+      <stop
+         id="stop3765-85-6"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-22-1" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="matrix(-1,0,0,1,241.34583,1004.7866)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3046-5"
+       xlink:href="#linearGradient3757-77-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-77-5">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-00-50" />
+      <stop
+         id="stop3765-85-43"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-22-0" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="matrix(-1,0,0,1,289.34582,1004.7866)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3046-7"
+       xlink:href="#linearGradient3757-77-67"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-77-67">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-00-53" />
+      <stop
+         id="stop3765-85-5"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-22-3" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.979899"
+     inkscape:cx="110.03093"
+     inkscape:cy="-0.103835"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="923"
+     inkscape:window-x="0"
+     inkscape:window-y="37"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1004.3622)">
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.85624409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 12.989596,1021.3202 22.001567,16.0415"
+       id="path4565"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.7706579;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 35.116149,1021.25 -22.23082,16.2269"
+       id="path4567"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3046);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 45.451788,1009.2407 2.5,1009.367 l 0.126269,38.2596 28.32425,-0.1263 c 11.450798,-7.7213 0.259602,-26.2866 14.501269,-38.2596 z"
+       id="path2985-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffd400;stroke-width:1.54677474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 10.288159,1024.1614 18.33351,13.3671"
+       id="path4565-1-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffd400;stroke-width:1.47545743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 28.725818,1024.1029 -18.524543,13.5216"
+       id="path4567-5-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ff9200;stroke-width:1.85624408999999990;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 108.9896,1021.5558 22.00156,16.0415"
+       id="path4565-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ff9200;stroke-width:1.77065790000000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 131.11615,1021.4856 -22.23082,16.2269"
+       id="path4567-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3046-1);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 141.45179,1009.4763 -42.95179,0.1263 0.126269,38.2596 28.324251,-0.1263 c 11.4508,-7.7213 0.2596,-26.2866 14.50127,-38.2596 z"
+       id="path2985-3-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff9200;stroke-width:1.54677474000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 106.28816,1024.397 18.33351,13.3671"
+       id="path4565-1-2-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ff9200;stroke-width:1.47545743000000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 124.72582,1024.3385 -18.52454,13.5216"
+       id="path4567-5-6-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.85624409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 60.989596,1021.5558 22.001567,16.0415"
+       id="path4565-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.7706579;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 83.116149,1021.4856 -22.23082,16.2269"
+       id="path4567-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3046-16);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 93.451786,1009.4763 50.5,1009.6026 l 0.126269,38.2596 28.32425,-0.1263 c 11.450797,-7.7213 0.259602,-26.2866 14.501267,-38.2596 z"
+       id="path2985-3-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffad00;stroke-width:1.54677474000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 58.288159,1024.397 18.33351,13.3671"
+       id="path4565-1-2-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffad00;stroke-width:1.47545743000000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 76.725818,1024.3385 -18.524543,13.5216"
+       id="path4567-5-6-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.85624409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 156.98959,1021.5558 22.00157,16.0415"
+       id="path4565-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.7706579;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 179.11615,1021.4856 -22.23082,16.2269"
+       id="path4567-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3046-2);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 189.45179,1009.4763 -42.95179,0.1263 0.12627,38.2596 28.32425,-0.1263 c 11.45079,-7.7213 0.2596,-26.2866 14.50127,-38.2596 z"
+       id="path2985-3-08"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1.54677474000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 154.28816,1024.397 18.33351,13.3671"
+       id="path4565-1-2-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1.47545743000000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 172.72582,1024.3385 -18.52455,13.5216"
+       id="path4567-5-6-47"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.85624409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 204.9896,1021.5558 22.00156,16.0415"
+       id="path4565-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.7706579;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 227.11615,1021.4856 -22.23082,16.2269"
+       id="path4567-38"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3046-5);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 237.45179,1009.4763 -42.95179,0.1263 0.12627,38.2596 28.32425,-0.1263 c 11.4508,-7.7213 0.2596,-26.2866 14.50127,-38.2596 z"
+       id="path2985-3-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff9200;stroke-width:1.54677474000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 202.28816,1024.397 18.33351,13.3671"
+       id="path4565-1-2-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ff9200;stroke-width:1.47545743000000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 220.72582,1024.3385 -18.52455,13.5216"
+       id="path4567-5-6-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.85624409;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 252.98959,1021.5558 22.00157,16.0415"
+       id="path4565-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffc200;stroke-width:1.7706579;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 275.11615,1021.4856 -22.23082,16.2269"
+       id="path4567-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:url(#linearGradient3046-7);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 285.45178,1009.4763 -42.95178,0.1263 0.12627,38.2596 28.32425,-0.1263 c 11.45079,-7.7213 0.2596,-26.2866 14.50126,-38.2596 z"
+       id="path2985-3-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffad00;stroke-width:1.54677474000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 250.28816,1024.397 18.33351,13.3671"
+       id="path4565-1-2-22"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#ffad00;stroke-width:1.47545743000000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 268.72581,1024.3385 -18.52454,13.5216"
+       id="path4567-5-6-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>

=== added file 'Global-Menu/data/button-max.svg'
--- Global-Menu/data/button-max.svg	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/button-max.svg	2012-02-14 14:04:19 +0000
@@ -0,0 +1,839 @@
+<?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="288"
+   height="48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="button-max.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4209">
+      <stop
+         id="stop4211"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759" />
+      <stop
+         id="stop3765"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757"
+       id="linearGradient3763"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-6"
+       id="linearGradient3763-0"
+       x1="29.464285"
+       y1="41.75"
+       x2="29.553572"
+       y2="5.4107141"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-6">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4" />
+      <stop
+         id="stop3765-4"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(46.605964,1004.7867)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-9"
+       xlink:href="#linearGradient3757-6-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-5">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-6" />
+      <stop
+         id="stop3765-4-8"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-9" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(94.605968,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-99"
+       xlink:href="#linearGradient3757-6-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-1">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-62" />
+      <stop
+         id="stop3765-4-1"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-0" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(142.60597,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843-5"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-1"
+       xlink:href="#linearGradient3757-6-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-9">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-7" />
+      <stop
+         id="stop3765-4-6"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-8" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(190.60596,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843-2"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-4"
+       xlink:href="#linearGradient3757-6-3"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-3" />
+      <stop
+         id="stop3765-4-69"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-04" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(238.60596,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843-8"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-7"
+       id="linearGradient3763-8"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-7">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-9" />
+      <stop
+         id="stop3765-6"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-8" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,94.555612,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050"
+       xlink:href="#linearGradient3757-7"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-8"
+       id="linearGradient3763-81"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-8">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-5" />
+      <stop
+         id="stop3765-49"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-0" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,142.55562,1004.4247)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-0"
+       xlink:href="#linearGradient3757-8"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-9"
+       id="linearGradient3763-6"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-9">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-91" />
+      <stop
+         id="stop3765-7"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-2" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,142.55562,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-09"
+       xlink:href="#linearGradient3757-9"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-3"
+       id="linearGradient3763-87"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-3">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-58" />
+      <stop
+         id="stop3765-1"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-6" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,163.79295,970.97959)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-1"
+       xlink:href="#linearGradient3757-3"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-32"
+       id="linearGradient3763-3"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-32">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-1" />
+      <stop
+         id="stop3765-9"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-83" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,190.55562,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-9"
+       xlink:href="#linearGradient3757-32"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-94"
+       id="linearGradient3763-1"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-94">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-3" />
+      <stop
+         id="stop3765-48"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-9" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,238.55562,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-2"
+       xlink:href="#linearGradient3757-94"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-69"
+       id="linearGradient3763-65"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-69">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-6" />
+      <stop
+         id="stop3765-5"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-27" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,46.555615,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-7"
+       xlink:href="#linearGradient3757-69"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209"
+       id="radialGradient4207"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-0"
+       id="radialGradient4207-0"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-0">
+      <stop
+         id="stop4211-4"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232"
+       xlink:href="#linearGradient4209-0"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-1"
+       id="radialGradient4207-9"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-1">
+      <stop
+         id="stop4211-1"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-2" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-4"
+       xlink:href="#linearGradient4209-1"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-8"
+       id="radialGradient4207-1"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-8">
+      <stop
+         id="stop4211-3"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-9" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-5"
+       xlink:href="#linearGradient4209-8"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-2"
+       id="radialGradient4207-4"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-2">
+      <stop
+         id="stop4211-0"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-1" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-6"
+       xlink:href="#linearGradient4209-2"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-9"
+       id="radialGradient4207-02"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-9">
+      <stop
+         id="stop4211-11"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-6" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-9"
+       xlink:href="#linearGradient4209-9"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.959798"
+     inkscape:cx="220.9429"
+     inkscape:cy="27.732336"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="923"
+     inkscape:window-x="0"
+     inkscape:window-y="37"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1004.3622)">
+    <path
+       style="fill:url(#linearGradient3763);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 2.5248592,1009.4716 43.7813688,0.1263 -0.128709,38.2595 -43.6727136,-0.1263 c 0.1691611,-19.2118 0.3789233,-19.7205 0.020054,-38.2595 z"
+       id="path2985"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffda00;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 10.871186,1016.2506 26.643065,0.1079 -0.09208,24.1747 -26.599654,-0.1525 z"
+       id="path4013"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4050);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 98.524859,1009.4716 43.781371,0.1263 -0.12871,38.2595 -43.672715,-0.1263 c 0.169161,-19.2118 0.378923,-19.7205 0.02005,-38.2595 z"
+       id="path2985-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff8c00;stroke-width:1.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 106.89567,1016.2511 26.64306,0.1079 -0.0921,24.1747 -26.59965,-0.1525 z"
+       id="path4013-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4050-0);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 146.52487,1009.1144 43.78136,0.1263 -0.12871,38.2595 -43.67271,-0.1263 c 0.16916,-19.2118 0.37893,-19.7205 0.02,-38.2595 z"
+       id="path2985-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffda00;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 154.89567,1015.8939 26.64306,0.1079 -0.0921,24.1747 -26.59965,-0.1525 z"
+       id="path4013-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4050-09);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 146.52487,1009.4716 43.78136,0.1263 -0.12871,38.2595 -43.67271,-0.1263 c 0.16916,-19.2118 0.37893,-19.7205 0.02,-38.2595 z"
+       id="path2985-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffda00;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 154.89567,1016.2511 26.64306,0.1079 -0.0921,24.1747 -26.59965,-0.1525 z"
+       id="path4013-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 154.89567,1016.2511 26.64306,0.1079 -0.0921,24.1747 -26.59965,-0.1525 z"
+       id="path4013-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4050-9);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.52487,1009.4716 43.78137,0.1263 -0.12871,38.2595 -43.67272,-0.1263 c 0.16917,-19.2118 0.37893,-19.7205 0.02,-38.2595 z"
+       id="path2985-05"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff8c00;stroke-width:1.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 202.89567,1016.2511 26.64307,0.1079 -0.0921,24.1747 -26.59965,-0.1525 z"
+       id="path4013-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4050-2);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 242.52487,1009.4716 43.78136,0.1263 -0.1287,38.2595 -43.67272,-0.1263 c 0.16916,-19.2118 0.37893,-19.7205 0.0201,-38.2595 z"
+       id="path2985-29"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffb000;stroke-width:1.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 250.89567,1016.2511 26.64307,0.1079 -0.0921,24.1747 -26.59966,-0.1525 z"
+       id="path4013-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4050-7);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 50.524855,1009.4716 43.78137,0.1263 -0.12871,38.2595 -43.67271,-0.1263 c 0.16916,-19.2118 0.37892,-19.7205 0.02,-38.2595 z"
+       id="path2985-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffb000;stroke-width:1.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 58.895665,1016.2511 26.64306,0.1079 -0.0921,24.1747 -26.59965,-0.1525 z"
+       id="path4013-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4207);fill-opacity:1;stroke:none"
+       id="path4199"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,-27.000003,993.1622)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232);fill-opacity:1;stroke:none"
+       id="path4199-4"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,-75.000003,993.1622)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-4);fill-opacity:1;stroke:none"
+       id="path4199-3"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,20.999997,993.1622)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-5);fill-opacity:1;stroke:none"
+       id="path4199-7"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,68.999997,993.1622)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-6);fill-opacity:1;stroke:none"
+       id="path4199-49"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,117,993.1622)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-9);fill-opacity:1;stroke:none"
+       id="path4199-1"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,165,993.1622)" />
+  </g>
+</svg>

=== added file 'Global-Menu/data/button-min.svg'
--- Global-Menu/data/button-min.svg	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/button-min.svg	2012-02-14 14:04:19 +0000
@@ -0,0 +1,323 @@
+<?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="288"
+   height="48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="button-min.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759" />
+      <stop
+         id="stop3765"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757"
+       id="linearGradient3763"
+       x1="29.464285"
+       y1="41.75"
+       x2="29.553572"
+       y2="5.4107141"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-1.394036,1004.7867)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-6"
+       id="linearGradient3763-0"
+       x1="29.464285"
+       y1="41.75"
+       x2="29.553572"
+       y2="5.4107141"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-6">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4" />
+      <stop
+         id="stop3765-4"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(46.605964,1004.7867)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-9"
+       xlink:href="#linearGradient3757-6-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-5">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-6" />
+      <stop
+         id="stop3765-4-8"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-9" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(94.605968,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-99"
+       xlink:href="#linearGradient3757-6-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-1">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-62" />
+      <stop
+         id="stop3765-4-1"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-0" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(142.60597,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843-5"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-1"
+       xlink:href="#linearGradient3757-6-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-9">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-7" />
+      <stop
+         id="stop3765-4-6"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-8" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(190.60596,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843-2"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-4"
+       xlink:href="#linearGradient3757-6-3"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-3" />
+      <stop
+         id="stop3765-4-69"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-04" />
+    </linearGradient>
+    <linearGradient
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientTransform="translate(238.60596,1004.7867)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3843-8"
+       xlink:href="#linearGradient3757"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.959798"
+     inkscape:cx="103.7616"
+     inkscape:cy="23.521226"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="923"
+     inkscape:window-x="0"
+     inkscape:window-y="37"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1004.3622)">
+    <path
+       style="fill:url(#linearGradient3763);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 2.5,1009.4764 42.951788,0.1263 -0.126269,38.2595 -28.32425,-0.1263 C 5.5504705,1040.0146 16.741667,1021.4494 2.5,1009.4764 z"
+       id="path2985"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffd100;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 17.024202,1035.5765 24.285715,0.1786"
+       id="path2987"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3803);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 50.5,1009.4764 42.951792,0.1263 -0.12627,38.2595 -28.324253,-0.1263 C 53.550471,1040.0146 64.741667,1021.4493 50.5,1009.4764 z"
+       id="path2985-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffb800;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 65.299597,1035.7885 24.285715,0.1785"
+       id="path2987-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3843);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 98.5,1009.4764 42.95179,0.1263 -0.12627,38.2595 -28.32425,-0.1263 c -11.4508,-7.7213 -0.2596,-26.2866 -14.50127,-38.2595 z"
+       id="path2985-7-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff6200;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 113.34719,1036.0816 24.28572,0.1785"
+       id="path2987-3-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3843-5);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 146.5,1009.4764 42.9518,0.1263 -0.12627,38.2595 -28.32426,-0.1263 c -11.45079,-7.7213 -0.2596,-26.2866 -14.50127,-38.2595 z"
+       id="path2985-7-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 161.07691,1036.2079 24.28571,0.1785"
+       id="path2987-3-2"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3843-2);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.5,1009.4764 42.95179,0.1263 -0.12627,38.2595 -28.32425,-0.1263 c -11.4508,-7.7213 -0.25961,-26.2866 -14.50127,-38.2595 z"
+       id="path2985-7-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff6200;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 209.54391,1036.3342 24.28571,0.1785"
+       id="path2987-3-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3843-8);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 242.5,1009.4764 42.95179,0.1263 -0.12627,38.2595 -28.32425,-0.1263 c -11.4508,-7.7213 -0.25961,-26.2866 -14.50127,-38.2595 z"
+       id="path2985-7-51"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffb800;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 256.99882,1036.5867 24.28571,0.1785"
+       id="path2987-3-29"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>

=== added file 'Global-Menu/data/button-restore.svg'
--- Global-Menu/data/button-restore.svg	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/button-restore.svg	2012-02-14 14:04:19 +0000
@@ -0,0 +1,1082 @@
+<?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="288"
+   height="48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="button-restore.svg">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4209">
+      <stop
+         id="stop4211"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3757">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759" />
+      <stop
+         id="stop3765"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757"
+       id="linearGradient3763"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-6"
+       id="linearGradient3763-0"
+       x1="29.464285"
+       y1="41.75"
+       x2="29.553572"
+       y2="5.4107141"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3757-6">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4" />
+      <stop
+         id="stop3765-4"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-9"
+       xlink:href="#linearGradient3757-6-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-5">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-6" />
+      <stop
+         id="stop3765-4-8"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-9" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-99"
+       xlink:href="#linearGradient3757-6-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-1">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-62" />
+      <stop
+         id="stop3765-4-1"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-0" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-1"
+       xlink:href="#linearGradient3757-6-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-9">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-7" />
+      <stop
+         id="stop3765-4-6"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-8" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(49.411816,1004.4479)"
+       y2="5.4107141"
+       x2="29.553572"
+       y1="41.75"
+       x1="29.464285"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3803-4"
+       xlink:href="#linearGradient3757-6-3"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3757-6-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3759-4-3" />
+      <stop
+         id="stop3765-4-69"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3761-3-04" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-7"
+       id="linearGradient3763-8"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-7">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-9" />
+      <stop
+         id="stop3765-6"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-8" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,94.555612,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050"
+       xlink:href="#linearGradient3757-7"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-8"
+       id="linearGradient3763-81"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-8">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-5" />
+      <stop
+         id="stop3765-49"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-0" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,142.55562,1004.4247)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-0"
+       xlink:href="#linearGradient3757-8"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-9"
+       id="linearGradient3763-6"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-9">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-91" />
+      <stop
+         id="stop3765-7"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-2" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,142.55562,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-09"
+       xlink:href="#linearGradient3757-9"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-3"
+       id="linearGradient3763-87"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-3">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-58" />
+      <stop
+         id="stop3765-1"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-32"
+       id="linearGradient3763-3"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-32">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-1" />
+      <stop
+         id="stop3765-9"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-83" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,190.55562,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-9"
+       xlink:href="#linearGradient3757-32"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-94"
+       id="linearGradient3763-1"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-94">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-3" />
+      <stop
+         id="stop3765-48"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-9" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,238.55562,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-2"
+       xlink:href="#linearGradient3757-94"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-69"
+       id="linearGradient3763-65"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4688664,1004.7867)" />
+    <linearGradient
+       id="linearGradient3757-69">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-6" />
+      <stop
+         id="stop3765-5"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-27" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,46.555615,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4050-7"
+       xlink:href="#linearGradient3757-69"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209"
+       id="radialGradient4207"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-0"
+       id="radialGradient4207-0"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-0">
+      <stop
+         id="stop4211-4"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232"
+       xlink:href="#linearGradient4209-0"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-1"
+       id="radialGradient4207-9"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-1">
+      <stop
+         id="stop4211-1"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-2" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-4"
+       xlink:href="#linearGradient4209-1"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-8"
+       id="radialGradient4207-1"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-8">
+      <stop
+         id="stop4211-3"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-9" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-5"
+       xlink:href="#linearGradient4209-8"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-2"
+       id="radialGradient4207-4"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-2">
+      <stop
+         id="stop4211-0"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-1" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-6"
+       xlink:href="#linearGradient4209-2"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4209-9"
+       id="radialGradient4207-02"
+       cx="66.428574"
+       cy="20.5"
+       fx="66.428574"
+       fy="20.5"
+       r="2.8571429"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient4209-9">
+      <stop
+         id="stop4211-11"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-6" />
+    </linearGradient>
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-9"
+       xlink:href="#linearGradient4209-9"
+       inkscape:collect="always" />
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-3"
+       xlink:href="#linearGradient4209-0-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4209-0-1">
+      <stop
+         id="stop4211-4-5"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-5" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-1"
+       id="linearGradient3763-7"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-1">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-0" />
+      <stop
+         id="stop3765-60"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-7" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,46.555613,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4379"
+       xlink:href="#linearGradient3757-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-1"
+       xlink:href="#linearGradient4209-0-10"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4209-0-10">
+      <stop
+         id="stop4211-4-9"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-57" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-4"
+       id="linearGradient3763-2"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-4">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-06" />
+      <stop
+         id="stop3765-606"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-79" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,94.555612,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4379-5"
+       xlink:href="#linearGradient3757-4"
+       inkscape:collect="always" />
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-38"
+       xlink:href="#linearGradient4209-0-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4209-0-5">
+      <stop
+         id="stop4211-4-8"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-3" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-13"
+       id="linearGradient3763-13"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-13">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-45" />
+      <stop
+         id="stop3765-8"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-97" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,142.55561,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4379-2"
+       xlink:href="#linearGradient3757-13"
+       inkscape:collect="always" />
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-2"
+       xlink:href="#linearGradient4209-0-58"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4209-0-58">
+      <stop
+         id="stop4211-4-55"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-71"
+       id="linearGradient3763-68"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-71">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-92" />
+      <stop
+         id="stop3765-56"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-26" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,190.55561,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4379-4"
+       xlink:href="#linearGradient3757-71"
+       inkscape:collect="always" />
+    <radialGradient
+       r="2.8571429"
+       fy="20.5"
+       fx="66.428574"
+       cy="20.5"
+       cx="66.428574"
+       gradientTransform="matrix(1,0,0,0.87499998,0,2.5625004)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4232-25"
+       xlink:href="#linearGradient4209-0-3"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4209-0-3">
+      <stop
+         id="stop4211-4-81"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4213-7-65" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3757-16"
+       id="linearGradient3763-03"
+       x1="3.9579327"
+       y1="42.760151"
+       x2="4.0472198"
+       y2="4.6530995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0193142,0,0,1,-1.4443871,1004.7819)" />
+    <linearGradient
+       id="linearGradient3757-16">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3759-99" />
+      <stop
+         id="stop3765-52"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#c5c5c5;stop-opacity:1;"
+         offset="1"
+         id="stop3761-1" />
+    </linearGradient>
+    <linearGradient
+       y2="4.6530995"
+       x2="4.0472198"
+       y1="42.760151"
+       x1="3.9579327"
+       gradientTransform="matrix(1.0193142,0,0,1,238.55561,1004.7819)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4379-9"
+       xlink:href="#linearGradient3757-16"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="142.41916"
+     inkscape:cy="9.3075653"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="923"
+     inkscape:window-x="0"
+     inkscape:window-y="37"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1004.3622)">
+    <path
+       style="fill:url(#linearGradient3763);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 2.5248592,1009.4716 43.7813688,0.1263 -0.128709,38.2595 -43.6727136,-0.1263 c 0.1691611,-19.2118 0.3789233,-19.7205 0.020054,-38.2595 z"
+       id="path2985"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffda00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 9.7462579,1016.203 18.9013311,0.077 -0.06532,17.1502 -18.8705341,-0.1082 z"
+       id="path4013"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232);fill-opacity:1;stroke:none"
+       id="path4199-4"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,-75.000003,993.1622)" />
+    <path
+       style="fill:none;stroke:#ffda00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 28.935017,1025.709 10.687045,-0.1016 -0.06532,17.1502 -18.870534,-0.1082 0.213094,-9.3511"
+       id="path4013-67"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4379);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 50.524859,1009.4716 43.781369,0.1263 -0.128709,38.2595 -43.672714,-0.1263 c 0.169162,-19.2118 0.378924,-19.7205 0.02005,-38.2595 z"
+       id="path2985-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffbf00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 57.746258,1016.203 18.901331,0.077 -0.06532,17.1502 -18.870534,-0.1082 z"
+       id="path4013-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-3);fill-opacity:1;stroke:none"
+       id="path4199-4-9"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,-27.000003,993.16215)" />
+    <path
+       style="fill:none;stroke:#ffbf00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 76.935017,1025.709 10.687045,-0.1016 -0.06532,17.1502 -18.870534,-0.1082 0.213094,-9.3511"
+       id="path4013-67-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4379-5);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 98.524858,1009.4716 43.781372,0.1263 -0.12871,38.2595 -43.672715,-0.1263 c 0.169161,-19.2118 0.378923,-19.7205 0.02005,-38.2595 z"
+       id="path2985-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff9500;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 105.74626,1016.203 18.90133,0.077 -0.0653,17.1502 -18.87054,-0.1082 z"
+       id="path4013-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-1);fill-opacity:1;stroke:none;stroke-width:1.42857143;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path4199-4-91"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,20.999996,993.16219)" />
+    <path
+       style="fill:none;stroke:#ff9500;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 124.93502,1025.709 10.68704,-0.1016 -0.0653,17.1502 -18.87053,-0.1082 0.21309,-9.3511"
+       id="path4013-67-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4379-2);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 146.52487,1009.4716 43.78136,0.1263 -0.1287,38.2595 -43.67272,-0.1263 c 0.16916,-19.2118 0.37893,-19.7205 0.0201,-38.2595 z"
+       id="path2985-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 153.74626,1016.203 18.90134,0.077 -0.0653,17.1502 -18.87054,-0.1082 z"
+       id="path4013-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-38);fill-opacity:1;stroke:none"
+       id="path4199-4-0"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,68.999999,993.16219)" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 172.93502,1025.709 10.68705,-0.1016 -0.0653,17.1502 -18.87054,-0.1082 0.2131,-9.3511"
+       id="path4013-67-55"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4379-4);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 194.52486,1009.4716 43.78137,0.1263 -0.12871,38.2595 -43.67271,-0.1263 c 0.16916,-19.2118 0.37892,-19.7205 0.0201,-38.2595 z"
+       id="path2985-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ff9500;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 201.74626,1016.203 18.90133,0.077 -0.0653,17.1502 -18.87053,-0.1082 z"
+       id="path4013-2"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-2);fill-opacity:1;stroke:none;stroke-width:1.42857143;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path4199-4-3"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,117,993.16219)" />
+    <path
+       style="fill:none;stroke:#ff9500;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 220.93502,1025.709 10.68705,-0.1016 -0.0653,17.1502 -18.87054,-0.1082 0.2131,-9.3511"
+       id="path4013-67-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:url(#linearGradient4379-9);fill-opacity:1;stroke:#000000;stroke-width:1.00961077px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 242.52487,1009.4716 43.78137,0.1263 -0.12871,38.2595 -43.67272,-0.1263 c 0.16917,-19.2118 0.37893,-19.7205 0.0201,-38.2595 z"
+       id="path2985-77"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:none;stroke:#ffbf00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 249.74627,1016.203 18.90133,0.077 -0.0653,17.1502 -18.87054,-0.1082 z"
+       id="path4013-25"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4232-25);fill-opacity:1;stroke:none;stroke-width:1.42857143;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path4199-4-39"
+       sodipodi:cx="66.428574"
+       sodipodi:cy="20.5"
+       sodipodi:rx="2.8571429"
+       sodipodi:ry="2.5"
+       d="m 69.285717,20.5 a 2.8571429,2.5 0 1 1 -5.714286,0 2.8571429,2.5 0 1 1 5.714286,0 z"
+       transform="matrix(1.4,0,0,1.4,165.00001,993.16219)" />
+    <path
+       style="fill:none;stroke:#ffbf00;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 268.93503,1025.709 10.68704,-0.1016 -0.0653,17.1502 -18.87053,-0.1082 0.21309,-9.3511"
+       id="path4013-67-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>

=== added file 'Global-Menu/data/icon.svg'
--- Global-Menu/data/icon.svg	1970-01-01 00:00:00 +0000
+++ Global-Menu/data/icon.svg	2012-02-14 14:04:19 +0000
@@ -0,0 +1,441 @@
+<?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";
+   version="1.0"
+   width="48"
+   height="48"
+   id="svg11300"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="icon.svg">
+  <metadata
+     id="metadata102">
+    <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>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1120"
+     inkscape:window-height="737"
+     id="namedview100"
+     showgrid="false"
+     inkscape:zoom="3.7454562"
+     inkscape:cx="-65.208497"
+     inkscape:cy="39.13215"
+     inkscape:window-x="90"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg11300" />
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient7400">
+      <stop
+         id="stop7402"
+         style="stop-color:black;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop7404"
+         style="stop-color:black;stop-opacity:1"
+         offset="0.35000691" />
+      <stop
+         id="stop7406"
+         style="stop-color:black;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6814">
+      <stop
+         id="stop6816"
+         style="stop-color:#e6e6e6;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop6818"
+         style="stop-color:#fafafa;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6806">
+      <stop
+         id="stop6808"
+         style="stop-color:white;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop6810"
+         style="stop-color:white;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         id="stop5050"
+         style="stop-color:black;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop5056"
+         style="stop-color:black;stop-opacity:1"
+         offset="0.5" />
+      <stop
+         id="stop5052"
+         style="stop-color:black;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5060">
+      <stop
+         id="stop5062"
+         style="stop-color:black;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5064"
+         style="stop-color:black;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient2942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.047619,0,0,1.2,-6.3809524,-7.6)"
+       x1="27.975767"
+       y1="13"
+       x2="27.991301"
+       y2="8" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7400"
+       id="linearGradient2945"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3333333,0,0,0.3846153,-5.9999999,-7.6923038)"
+       x1="18"
+       y1="46"
+       x2="18"
+       y2="32.999397" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6806"
+       id="radialGradient2948"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.4512815,0.02574254,-0.03333571,1.8793595,-2.1947685,-22.296918)"
+       cx="6.75"
+       cy="25.539635"
+       fx="6.75"
+       fy="25.539635"
+       r="15.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient2951"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3435663,0,0,1.0496031,-9.9180686,-5.4384915)"
+       x1="25"
+       y1="49"
+       x2="25"
+       y2="13.178486" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient2954"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.02108503,0,0,0.01235294,23.667902,39.47085)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient2957"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.02108502,0,0,0.01235294,19.332123,39.47085)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient2960"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.06161243,0,0,0.01235294,-0.768481,39.47083)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient3156">
+      <stop
+         id="stop3158"
+         style="stop-color:white;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3160"
+         style="stop-color:white;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8838-6">
+      <stop
+         id="stop8840-4"
+         style="stop-color:black;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop8842-3"
+         style="stop-color:black;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="62.625"
+       cy="4.625"
+       r="10.625"
+       fx="62.625"
+       fy="4.625"
+       id="radialGradient5729"
+       xlink:href="#linearGradient8838-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.341176,0,3.047059)" />
+    <linearGradient
+       x1="24.335312"
+       y1="61.852856"
+       x2="28.290144"
+       y2="20.663898"
+       id="linearGradient5745"
+       xlink:href="#linearGradient3156"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="27.888655"
+       y1="-0.81503254"
+       x2="28.290144"
+       y2="20.663898"
+       id="linearGradient5747"
+       xlink:href="#linearGradient3156"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="28.220636"
+       y1="-2.3103411"
+       x2="28.290144"
+       y2="20.663898"
+       id="linearGradient5749"
+       xlink:href="#linearGradient3156"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="30.501778"
+       y1="55.647495"
+       x2="29.724815"
+       y2="24.653727"
+       id="linearGradient5751"
+       xlink:href="#linearGradient3156"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="22.944935"
+       cy="11.222695"
+       r="14"
+       fx="22.944935"
+       fy="4.7612267"
+       id="radialGradient5537"
+       xlink:href="#linearGradient3156"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3571044,0.01021839,-0.00631345,0.8384895,-10.874695,1.3057951)" />
+    <radialGradient
+       cx="22.125"
+       cy="10.874998"
+       r="20"
+       fx="22.125"
+       fy="10.874998"
+       id="radialGradient5540"
+       xlink:href="#linearGradient3156"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0099925,-0.1119962,0.05668752,0.5112133,-5.8375646,1.7934718)" />
+    <radialGradient
+       cx="20.038782"
+       cy="12.610249"
+       r="22.463524"
+       fx="20.038782"
+       fy="12.610249"
+       id="radialGradient5551"
+       xlink:href="#linearGradient3242-187-536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9524671,-0.05018139,0.03650944,1.4214826,-20.408334,-5.9089096)" />
+    <radialGradient
+       cx="26"
+       cy="15.240479"
+       r="15.074549"
+       fx="26"
+       fy="15.240479"
+       id="radialGradient6332"
+       xlink:href="#linearGradient2490-182-124"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.2554569,0,-2.1857407e-8,2.0564463,-32.641879,-17.341228)" />
+    <linearGradient
+       id="linearGradient3242-187-536">
+      <stop
+         offset="0"
+         style="stop-color:#8badea;stop-opacity:1"
+         id="stop2778" />
+      <stop
+         offset="0.26238"
+         style="stop-color:#6396cd;stop-opacity:1"
+         id="stop2780" />
+      <stop
+         offset="0.66093999"
+         style="stop-color:#3b7caf;stop-opacity:1"
+         id="stop2782" />
+      <stop
+         offset="1"
+         style="stop-color:#194c70;stop-opacity:1"
+         id="stop2784-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2490-182-124">
+      <stop
+         offset="0"
+         style="stop-color:#1f4b6a;stop-opacity:1"
+         id="stop2788" />
+      <stop
+         offset="1"
+         style="stop-color:#4083c2;stop-opacity:1"
+         id="stop2790" />
+    </linearGradient>
+    <radialGradient
+       r="9.125"
+       fy="24.149399"
+       fx="17.81411"
+       cy="24.149399"
+       cx="17.81411"
+       gradientTransform="matrix(-2.643979,0,2.93653e-8,2.534421,78.72514,-37.986139)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2866"
+       xlink:href="#linearGradient4845"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4845">
+      <stop
+         offset="0"
+         style="stop-color:white;stop-opacity:1"
+         id="stop4847" />
+      <stop
+         offset="1"
+         style="stop-color:#b6b6b6;stop-opacity:1"
+         id="stop4849" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4845"
+       id="radialGradient3251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.643979,0,2.93653e-8,2.534421,78.72514,-37.986139)"
+       cx="17.81411"
+       cy="24.149399"
+       fx="17.81411"
+       fy="24.149399"
+       r="9.125" />
+  </defs>
+  <rect
+     style="opacity:0.35;fill:url(#linearGradient2960);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04588675;marker:none;visibility:visible;display:inline;overflow:visible"
+     id="rect3706"
+     y="44"
+     x="6.6250262"
+     height="2.9999998"
+     width="29.75" />
+  <path
+     style="opacity:0.35;fill:url(#radialGradient2957);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04588675;marker:none;visibility:visible;display:inline;overflow:visible"
+     id="path3708"
+     d="m 6.6250119,44.00013 c 0,0 0,2.99984 0,2.99984 -1.0858235,0.0057 -2.6250001,-0.67211 -2.6250001,-1.50011 0,-0.828 1.2117001,-1.49973 2.6250001,-1.49973 z" />
+  <path
+     style="opacity:0.35;fill:url(#radialGradient2954);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.04588675;marker:none;visibility:visible;display:inline;overflow:visible"
+     id="path3710"
+     d="m 36.375013,44.00013 c 0,0 0,2.99984 0,2.99984 1.085824,0.0057 2.625,-0.67211 2.625,-1.50011 0,-0.828 -1.2117,-1.49973 -2.625,-1.49973 z" />
+  <rect
+     style="fill:url(#linearGradient2951);fill-opacity:1;stroke:#aaaaaa;stroke-width:1.064008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect6802"
+     y="4.5320024"
+     x="5.5320044"
+     ry="0.9984408"
+     rx="1.1336958"
+     height="40.935997"
+     width="36.278175" />
+  <rect
+     style="fill:none;stroke:url(#radialGradient2948);stroke-width:1.00012183;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     id="rect6804"
+     y="4.500061"
+     x="6.500061"
+     ry="0.5"
+     rx="0.5"
+     height="39.999878"
+     width="29.999878" />
+  <rect
+     style="opacity:0.4;fill:url(#linearGradient2945);fill-opacity:1;stroke:none"
+     id="rect7392"
+     y="5.000001"
+     x="1.9999998"
+     height="4.999999"
+     width="44" />
+  <rect
+     style="fill:url(#linearGradient2942);fill-opacity:1;stroke:none"
+     id="rect6028"
+     y="2"
+     x="2"
+     height="6"
+     width="44" />
+  <rect
+     style="fill:#aaaaaa;fill-opacity:1;stroke:none"
+     id="rect6800"
+     y="8"
+     x="2"
+     height="1"
+     width="44" />
+  <path
+     style="fill:#999999;fill-opacity:1;stroke:none"
+     id="path5721"
+     d="m 10.09375,4 0,2.0681744 4.193469,0 0,-2.0681744 -4.193469,0 z m 5.84409,0 0,2.0681744 1.338341,0 0,-2.0681744 -1.338341,0 z m 2.765905,0 0,2.0681744 2.855129,0 0,-2.0681744 -2.855129,0 z m 4.282693,0 0,2.0681744 2.855128,0 0,-2.0681744 -2.855128,0 z m 4.371914,0 0,2.0681744 4.19347,0 0,-2.0681744 -4.19347,0 z m 5.754868,0 0,2.0681744 1.427564,0 0,-2.0681744 -1.427564,0 z m -22.885636,10.340872 0,2.068174 2.855128,0 0,-2.068174 -2.855128,0 z m 5.710256,0 0,2.068174 5.710256,0 0,-2.068174 -5.710256,0 z m 7.13782,0 0,2.068174 1.427564,0 0,-2.068174 -1.427564,0 z m 2.855128,0 0,2.068174 2.855128,0 0,-2.068174 -2.855128,0 z m 4.282692,0 0,2.068174 1.427564,0 0,-2.068174 -1.427564,0 z m -19.985896,6.204523 0,2.068174 4.193469,0 0,-2.068174 -4.193469,0 z m 5.710256,0 0,2.068174 2.855128,0 0,-2.068174 -2.855128,0 z m 4.282692,0 0,2.068174 1.427564,0 0,-2.068174 -1.427564,0 z m 4.282692,0 0,2.068174 2.855128,0 0,-2.068174 -2.855128,0 z m 4.416527,0 0,2.068174 4.148857,0 0,-2.068174 -4.148857,0 z m -18.692167,6.204523 0,2.068174 1.427564,0 0,-2.068174 -1.427564,0 z m 2.855128,0 0,2.068174 1.427564,0 0,-2.068174 -1.427564,0 z m 2.855128,0 0,2.068174 5.710256,0 0,-2.068174 -5.710256,0 z m 8.565384,0 0,2.068174 2.855128,0 0,-2.068174 -2.855128,0 z m 4.282692,0 0,2.068174 4.282692,0 0,-2.068174 -4.282692,0 z m -18.558332,12.409046 0,2.068175 4.193469,0 0,-2.068175 -4.193469,0 z m 5.84409,0 0,2.068175 4.148858,0 0,-2.068175 -4.148858,0 z m 5.576422,0 0,2.068175 1.427564,0 0,-2.068175 -1.427564,0 z m 4.282692,0 0,2.068175 2.855128,0 0,-2.068175 -2.855128,0 z" />
+  <rect
+     style="fill:#8babcb;fill-opacity:1;stroke:#426296;stroke-width:1.13075066;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+     id="rect5731"
+     y="31.037352"
+     x="7.5653753"
+     ry="1.124858"
+     rx="1.1369189"
+     height="5.6244121"
+     width="31.833851" />
+  <path
+     style="fill:#4d4d4d;fill-opacity:1;stroke:none;display:inline;enable-background:new"
+     id="rect7428"
+     d="m 10.21665,32.710828 0,2.277458 1.700761,0 0,-2.277458 -1.700761,0 z m 5.102282,0 0,2.277458 4.995985,0 0,-2.277458 -4.995985,0 z m 6.803044,0 0,2.277458 3.401522,0 0,-2.277458 -3.401522,0 z m 5.102282,0 0,2.277458 1.700761,0 0,-2.277458 -1.700761,0 z m 3.560969,0 0,2.277458 4.942836,0 0,-2.277458 -4.942836,0 z" />
+  <g
+     id="g2414"
+     transform="matrix(0.56181413,-0.00769835,0.00769835,0.56181413,20.086789,21.41845)">
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:url(#radialGradient3251);fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+       id="path3970"
+       d="m 30.5,20.93716 17,16.500001 -7.75,0.25 c 0,0 3.25,6.75 3.25,6.75 1,3 -3.5,4.125 -4.25,1.875 0,0 -3,-6.75 -3,-6.75 l -5.5,5.875 0.25,-24.500001 z" />
+    <path
+       inkscape:connector-curvature="0"
+       style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+       id="path4853"
+       d="m 31.657235,23.378571 13.475546,13.185793 -6.921861,0.277459 c 0,0 3.872136,7.756567 3.872136,7.756567 0.402731,1.650134 -2.028275,2.412565 -2.5071,1.152867 0,0 -3.683065,-7.844955 -3.683065,-7.844955 l -4.424727,4.708334 0.189071,-19.236065 z" />
+  </g>
+</svg>

=== added file 'Global-Menu/data/preview.jpg'
Binary files Global-Menu/data/preview.jpg	1970-01-01 00:00:00 +0000 and Global-Menu/data/preview.jpg	2012-02-14 14:04:19 +0000 differ
=== added directory 'Global-Menu/registrar'
=== added file 'Global-Menu/registrar/CMakeLists.txt'
--- Global-Menu/registrar/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Global-Menu/registrar/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -0,0 +1,8 @@
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/appmenu-registrar.py.in ${CMAKE_CURRENT_BINARY_DIR}/appmenu-registrar.py)
+
+########### install files ###############
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/appmenu-registrar.py
+	DESTINATION ${pluginsdir}
+	RENAME appmenu-registrar
+	PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

=== added file 'Global-Menu/registrar/appmenu-registrar.py.in'
--- Global-Menu/registrar/appmenu-registrar.py.in	1970-01-01 00:00:00 +0000
+++ Global-Menu/registrar/appmenu-registrar.py.in	2012-02-14 14:04:19 +0000
@@ -0,0 +1,95 @@
+#!@PYTHON_EXECUTABLE@
+#
+# This is a part of the Cairo-Dock plug-ins.
+# Copyright : (C) 2011 by Fabrice Rey
+# E-mail : fabounet@xxxxxxxxxxxx
+#
+# 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 3
+# 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.
+# http://www.gnu.org/licenses/licenses.html#GPL
+#
+# Developped as a part of Cairo-Dock, but usable as a stand-alone systray daemon.
+# The code follows the same logic as the KDE watcher, to ensure a complete compatibility.
+
+import sys
+import glib
+import gobject
+import dbus, dbus.service
+from dbus.mainloop.glib import DBusGMainLoop
+
+class Registrar(dbus.service.Object):
+	bus_name_str = 'com.canonical.AppMenu.Registrar'
+	bus_obj_str  = '/com/canonical/AppMenu/Registrar'
+	bus_iface_str = 'com.canonical.AppMenu.Registrar'
+	windows = {}  # table of couple (X id, menu object path)
+	
+	def __init__(self):
+		DBusGMainLoop(set_as_default=True)
+		try: 
+			self.bus = dbus.SessionBus()
+			bus_name = dbus.service.BusName (self.bus_name_str, self.bus)
+			print "registered a registrar:",bus_name
+			dbus.service.Object.__init__(self, bus_name, self.bus_obj_str)
+		except Exception, exception:
+			print 'Could not open dbus. Uncaught exception.'
+			return
+		
+		bus_object = self.bus.get_object(dbus.BUS_DAEMON_NAME, dbus.BUS_DAEMON_PATH)
+		self.main = dbus.Interface(bus_object, dbus.BUS_DAEMON_IFACE)
+		#self.main.connect_to_signal("NameOwnerChanged", self.on_name_owner_changed)
+		
+		self.loop = gobject.MainLoop()
+		self.loop.run()
+	
+	### methods ###
+	
+	@dbus.service.method(dbus_interface = bus_iface_str, in_signature = 'uo', out_signature = None, sender_keyword='sender')
+	def RegisterWindow(self, Xid, menu, sender=None):
+		self.windows[Xid] = (sender, menu)
+		
+		self.WindowRegistered (Xid, sender, menu)
+	
+	@dbus.service.method(dbus_interface = bus_iface_str, in_signature = 'u', out_signature = None)
+	def UnregisterWindow(self, Xid):
+		del self.windows[Xid]
+		
+		self.WindowUnregistered (Xid)
+	
+	@dbus.service.method(dbus_interface = bus_iface_str, in_signature = 'u', out_signature = 'so')
+	def GetMenuForWindow(self, Xid):
+		print "GetMenuForWindow(%d)..." % Xid
+		try:
+			service,menu = self.windows[Xid]
+			return service,menu  # dbus.ObjectPath(menu)
+		except:
+			return "","/"  # return an empty string to avoid ugly warnings; clients should be able to deal with it.
+	
+	@dbus.service.method(dbus_interface = bus_iface_str, in_signature = None, out_signature = 'a(uso)')
+	def GetMenus(self):
+		menus=[]
+		for xid in self.windows:
+			service,menu = self.windows[xid]
+			menus.append((xid, service, menu))
+	
+	### Signals ###
+	
+	@dbus.service.signal(dbus_interface=bus_name_str, signature='uso')
+	def WindowRegistered(self, Xid, service, menu):
+		print "%d registered" % (Xid)
+		sys.stdout.flush()
+	
+	@dbus.service.signal(dbus_interface=bus_name_str, signature='u')
+	def WindowUnregistered(self, Xid):
+		print "%d unregistered" % (Xid)
+		sys.stdout.flush()
+	
+
+if __name__ == '__main__':
+	Registrar()

=== added directory 'Global-Menu/src'
=== added file 'Global-Menu/src/CMakeLists.txt'
--- Global-Menu/src/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -0,0 +1,50 @@
+
+########### sources ###############
+
+SET(MODULE_SRCS
+	applet-struct.h
+	applet-init.c 				applet-init.h
+	applet-config.c 			applet-config.h
+	applet-notifications.c 		applet-notifications.h
+	applet-app.c 				applet-app.h
+	applet-draw.c 				applet-draw.h
+)
+
+add_library(${PACKAGE_GLOBAL_MENU} SHARED ${MODULE_SRCS})
+
+########### compil ###############
+add_definitions (-DMY_APPLET_SHARE_DATA_DIR="${global_menudatadir}")
+add_definitions (-DMY_APPLET_PREVIEW_FILE="preview.jpg")
+add_definitions (-DMY_APPLET_CONF_FILE="Global-Menu.conf")
+add_definitions (-DMY_APPLET_USER_DATA_DIR="Global-Menu")
+add_definitions (-DMY_APPLET_VERSION="${VERSION_GLOBAL_MENU}")
+add_definitions (-DMY_APPLET_GETTEXT_DOMAIN="${GETTEXT_GLOBAL_MENU}")
+add_definitions (-DMY_APPLET_DOCK_VERSION="${dock_version}")
+add_definitions (-DMY_APPLET_ICON_FILE="icon.svg")
+add_definitions (-DCD_PLUGINS_DIR="${pluginsdir}")
+### uncomment the following line to allow multi-instance applet.
+#add_definitions (-DCD_APPLET_MULTI_INSTANCE="1")
+### uncomment the following line to allow extended OpenGL drawing.
+#add_definitions (-DGL_GLEXT_PROTOTYPES="1")
+if (DBUSMENU_GTK3_NEW)
+	add_definitions (-DDBUSMENU_GTK3_NEW=1)
+endif()
+
+include_directories (
+	${PACKAGE_INCLUDE_DIRS}
+	${DBUSMENU_INCLUDE_DIRS}
+	${DBUSMENU_GTK_INCLUDE_DIRS})
+
+link_directories (
+	${PACKAGE_LIBRARY_DIRS}
+	${DBUSMENU_LIBRARY_DIRS}
+	${DBUSMENU_GTK_LIBRARY_DIRS})
+
+target_link_libraries (${PACKAGE_GLOBAL_MENU}
+	${PACKAGE_LIBRARIES}
+	${DBUSMENU_LIBRARIES}
+	${DBUSMENU_GTK_LIBRARIES})
+
+########### install files ###############
+
+install(TARGETS ${PACKAGE_GLOBAL_MENU} DESTINATION ${pluginsdir})

=== added file 'Global-Menu/src/MwmUtil.h'
--- Global-Menu/src/MwmUtil.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/MwmUtil.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,136 @@
+/**
+ *
+ * $Id$
+ *
+ * Copyright (C) 1995 Free Software Foundation, Inc.
+ *
+ * This file is part of the GNU LessTif Library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ *
+ * * Feb 21 1999 - George Lebl (jirka@xxxxxx)
+ *                 Owen Taylor (otaylor@xxxxxxxxxx)
+ *
+ *   Modified so that the MotifWmHints structure defined here
+ *   is suitable for client side use on 64-bit architectures.
+ *   X expects fields with a format of 32 to be longs, even
+ *   when sizeof(long) == 8.
+ **/
+
+#ifndef MWMUTIL_H_INCLUDED
+#define MWMUTIL_H_INCLUDED
+
+#include <X11/Xmd.h>
+
+//G_BEGIN_DECLS
+
+typedef struct {
+    unsigned long flags;
+    unsigned long functions;
+    unsigned long decorations;
+    long input_mode;
+    unsigned long status;
+} MotifWmHints, MwmHints;
+
+#define MWM_HINTS_FUNCTIONS     (1L << 0)
+#define MWM_HINTS_DECORATIONS   (1L << 1)
+#define MWM_HINTS_INPUT_MODE    (1L << 2)
+#define MWM_HINTS_STATUS        (1L << 3)
+
+#define MWM_FUNC_ALL            (1L << 0)
+#define MWM_FUNC_RESIZE         (1L << 1)
+#define MWM_FUNC_MOVE           (1L << 2)
+#define MWM_FUNC_MINIMIZE       (1L << 3)
+#define MWM_FUNC_MAXIMIZE       (1L << 4)
+#define MWM_FUNC_CLOSE          (1L << 5)
+
+#define MWM_DECOR_ALL           (1L << 0)
+#define MWM_DECOR_BORDER        (1L << 1)
+#define MWM_DECOR_RESIZEH       (1L << 2)
+#define MWM_DECOR_TITLE         (1L << 3)
+#define MWM_DECOR_MENU          (1L << 4)
+#define MWM_DECOR_MINIMIZE      (1L << 5)
+#define MWM_DECOR_MAXIMIZE      (1L << 6)
+
+#define MWM_INPUT_MODELESS 0
+#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
+#define MWM_INPUT_SYSTEM_MODAL 2
+#define MWM_INPUT_FULL_APPLICATION_MODAL 3
+#define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL
+
+#define MWM_TEAROFF_WINDOW	(1L<<0)
+
+/*
+ * atoms
+ */
+#define _XA_MOTIF_BINDINGS		"_MOTIF_BINDINGS"
+#define _XA_MOTIF_WM_HINTS		"_MOTIF_WM_HINTS"
+#define _XA_MOTIF_WM_MESSAGES		"_MOTIF_WM_MESSAGES"
+#define _XA_MOTIF_WM_OFFSET		"_MOTIF_WM_OFFSET"
+#define _XA_MOTIF_WM_MENU		"_MOTIF_WM_MENU"
+#define _XA_MOTIF_WM_INFO		"_MOTIF_WM_INFO"
+#define _XA_MWM_HINTS			_XA_MOTIF_WM_HINTS
+#define _XA_MWM_MESSAGES		_XA_MOTIF_WM_MESSAGES
+#define _XA_MWM_MENU			_XA_MOTIF_WM_MENU
+#define _XA_MWM_INFO			_XA_MOTIF_WM_INFO
+
+
+/*
+ * _MWM_INFO property
+ */
+typedef struct {
+    long flags;
+    Window wm_window;
+} MotifWmInfo;
+
+typedef MotifWmInfo MwmInfo;
+
+#define MWM_INFO_STARTUP_STANDARD	(1L<<0)
+#define MWM_INFO_STARTUP_CUSTOM		(1L<<1)
+
+/*
+ * _MWM_HINTS property
+ */
+typedef struct {
+    unsigned long flags;
+    unsigned long functions;
+    unsigned long decorations;
+    long inputMode;
+    unsigned long status;
+} PropMotifWmHints;
+
+typedef PropMotifWmHints PropMwmHints;
+
+#define PROP_MOTIF_WM_HINTS_ELEMENTS 5
+#define PROP_MWM_HINTS_ELEMENTS PROP_MOTIF_WM_HINTS_ELEMENTS
+
+/*
+ * _MWM_INFO property, slight return
+ */
+typedef struct {
+    unsigned long flags;
+    unsigned long wmWindow;
+} PropMotifWmInfo;
+
+typedef PropMotifWmInfo PropMwmInfo;
+
+#define PROP_MOTIF_WM_INFO_ELEMENTS 2
+#define PROP_MWM_INFO_ELEMENTS PROP_MOTIF_WM_INFO_ELEMENTS
+
+//G_END_DECLS
+
+#endif /* MWMUTIL_H_INCLUDED */

=== added file 'Global-Menu/src/applet-app.c'
--- Global-Menu/src/applet-app.c	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-app.c	2012-02-14 14:04:19 +0000
@@ -0,0 +1,462 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* based on indicator-messages.c written by :
+*  Ted Gould <ted@xxxxxxxxxxxxx>
+*  Cody Russell <cody.russell@xxxxxxxxxxxxx>
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+
+#include "MwmUtil.h"
+
+#include "applet-struct.h"
+#include "applet-draw.h"
+#include "applet-app.h"
+
+#define CD_APP_MENU_REGISTRAR_ADDR "com.canonical.AppMenu.Registrar"
+#define CD_APP_MENU_REGISTRAR_OBJ "/com/canonical/AppMenu/Registrar"
+#define CD_APP_MENU_REGISTRAR_IFACE "com.canonical.AppMenu.Registrar"
+
+static DBusGProxyCall *s_pDetectRegistrarCall = NULL;
+static DBusGProxyCall *s_pGetMenuCall = NULL;
+
+
+  ///////////////////////
+ /// WINDOW CONTROLS ///
+///////////////////////
+
+void cd_app_menu_set_window_border (Window Xid, gboolean bWithBorder)
+{
+	Display *dpy = cairo_dock_get_Xdisplay();
+	MwmHints mwmhints;
+	Atom prop;
+	memset(&mwmhints, 0, sizeof(mwmhints));
+	prop = XInternAtom(dpy, "_MOTIF_WM_HINTS", False);
+	mwmhints.flags = MWM_HINTS_DECORATIONS;
+	mwmhints.decorations = bWithBorder;
+	XChangeProperty (dpy, Xid, prop,
+		prop, 32, PropModeReplace,
+		(unsigned char *) &mwmhints,
+		PROP_MWM_HINTS_ELEMENTS);
+}
+
+static void _get_window_allowed_actions (Window Xid)
+{
+	if (Xid == 0)
+	{
+		myData.bCanMinimize = FALSE;
+		myData.bCanMaximize = FALSE;
+		myData.bCanClose = FALSE;
+		return;
+	}
+	
+	Atom aReturnedType = 0;
+	int aReturnedFormat = 0;
+	unsigned long iLeftBytes, iBufferNbElements = 0;
+	gulong *pXStateBuffer = NULL;
+	Display *dpy = cairo_dock_get_Xdisplay ();
+	Atom allowedActions = XInternAtom (dpy, "_NET_WM_ALLOWED_ACTIONS", False);
+	Atom atomMinimize = XInternAtom (dpy, "_NET_WM_ACTION_MINIMIZE", False);
+	Atom atomMaximizeHorz = XInternAtom (dpy, "_NET_WM_ACTION_MAXIMIZE_HORZ", False);
+	Atom atomMaximizeVert = XInternAtom (dpy, "_NET_WM_ACTION_MAXIMIZE_VERT", False);
+	Atom atomClose = XInternAtom (dpy, "_NET_WM_ACTION_CLOSE", False);
+	
+	XGetWindowProperty (dpy,
+		Xid, allowedActions, 0, G_MAXULONG, False, XA_ATOM,
+		&aReturnedType, &aReturnedFormat, &iBufferNbElements, &iLeftBytes, (guchar **)&pXStateBuffer);
+	
+	if (iBufferNbElements > 0)
+	{
+		myData.bCanMinimize = FALSE;
+		myData.bCanMaximize = FALSE;
+		myData.bCanClose = FALSE;
+		guint i;
+		for (i = 0; i < iBufferNbElements; i ++)
+		{
+			if (pXStateBuffer[i] == atomMinimize)
+			{
+				myData.bCanMinimize = TRUE;
+			}
+			else if (pXStateBuffer[i] == atomMaximizeHorz || pXStateBuffer[i] == atomMaximizeVert)
+			{
+				myData.bCanMaximize = TRUE;
+			}
+			else if (pXStateBuffer[i] == atomClose)
+			{
+				myData.bCanClose = TRUE;
+			}
+		}
+	}
+	else  // by default, allow all actions.
+	{
+		cd_warning ("couldn't get allowed actions for the window %u", Xid);
+		myData.bCanMinimize = TRUE;
+		myData.bCanMaximize = TRUE;
+		myData.bCanClose = TRUE;
+	}
+
+	XFree (pXStateBuffer);
+}
+
+static void _set_border (Icon *icon, CairoContainer *pContainer, gboolean bWithBorder)
+{
+	if (icon->bIsMaximized)
+		cd_app_menu_set_window_border (icon->Xid, bWithBorder);
+}
+void cd_app_menu_set_windows_borders (gboolean bWithBorder)
+{
+	cairo_dock_foreach_applis ((CairoDockForeachIconFunc)_set_border, FALSE, GINT_TO_POINTER (bWithBorder));
+}
+
+
+  ////////////////////////
+ /// APPLICATION MENU ///
+////////////////////////
+
+static void cd_app_menu_launch_our_registrar (void)
+{
+	cairo_dock_launch_command (CD_PLUGINS_DIR"/appmenu-registrar");
+	myData.bOwnRegistrar = TRUE;
+}
+
+static void _on_registrar_owner_changed (const gchar *cName, gboolean bOwned, gpointer data)
+{
+	g_print ("=== Registrar is on the bus (%d)\n", bOwned);
+	CD_APPLET_ENTER;
+	
+	if (bOwned)
+	{
+		// set up a proxy to the Registrar
+		myData.pProxyRegistrar = cairo_dock_create_new_session_proxy (
+			CD_APP_MENU_REGISTRAR_ADDR,
+			CD_APP_MENU_REGISTRAR_OBJ,
+			CD_APP_MENU_REGISTRAR_IFACE);  // whenever it appears on the bus, we'll get it.
+		
+		// get the controls and menu of the current window.
+		Window iActiveWindow = cairo_dock_get_current_active_window ();
+		
+		cd_app_menu_set_current_window (iActiveWindow);
+	}
+	else  // no more registrar on the bus.
+	{
+		g_object_unref (myData.pProxyRegistrar);
+		myData.pProxyRegistrar = NULL;
+		
+		cd_app_menu_launch_our_registrar ();
+	}
+	CD_APPLET_LEAVE ();
+}
+
+static void _on_detect_registrar (gboolean bPresent, gpointer data)
+{
+	g_print ("=== Registrar is present: %d\n", bPresent);
+	CD_APPLET_ENTER;
+	s_pDetectRegistrarCall = NULL;
+	// if present, set up proxy.
+	if (bPresent)
+	{
+		_on_registrar_owner_changed (CD_APP_MENU_REGISTRAR_ADDR, TRUE, NULL);
+	}
+	else
+	{
+		cd_app_menu_launch_our_registrar ();  // when it has been launched, we'll get notified by Dbus.
+	}
+	
+	// watch whenever the Registrar goes up or down.
+	cairo_dock_watch_dbus_name_owner (CD_APP_MENU_REGISTRAR_ADDR,
+		(CairoDockDbusNameOwnerChangedFunc) _on_registrar_owner_changed,
+		NULL);
+	CD_APPLET_LEAVE ();
+}
+void cd_app_detect_registrar (void)
+{
+	if (s_pDetectRegistrarCall == NULL)
+		s_pDetectRegistrarCall = cairo_dock_dbus_detect_application_async (CD_APP_MENU_REGISTRAR_ADDR,
+			(CairoDockOnAppliPresentOnDbus) _on_detect_registrar,
+			NULL);
+}
+
+
+void cd_app_disconnect_from_registrar (void)
+{
+	// stop detecting/watching the registrar
+	cairo_dock_stop_watching_dbus_name_owner (CD_APP_MENU_REGISTRAR_ADDR,
+		(CairoDockDbusNameOwnerChangedFunc) _on_registrar_owner_changed);
+	
+	if (s_pDetectRegistrarCall != NULL)
+	{
+		DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
+		dbus_g_proxy_cancel_call (pProxy, s_pDetectRegistrarCall);
+		s_pDetectRegistrarCall = NULL;
+	}
+	
+	// discard the menu
+	if (s_pGetMenuCall != NULL)
+	{
+		DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
+		dbus_g_proxy_cancel_call (pProxy, s_pGetMenuCall);
+		s_pGetMenuCall = NULL;
+	}
+	
+	if (myData.pMenu != NULL)
+	{
+		gtk_widget_destroy (GTK_WIDGET (myData.pMenu));
+		myData.pMenu = NULL;
+	}
+	
+	if (myData.pTask != NULL)
+	{
+		cairo_dock_discard_task (myData.pTask);
+		myData.pTask = NULL;
+	}
+	
+	// kill the registrar if it's our own one
+	if (myData.bOwnRegistrar)
+	{
+		int r = system ("pkill appmenu-registr");  // 15 chars limit; 'pkill -f' doesn't work :-/ this is not very clean, we should get the PID when we spawn it, and use it.
+		myData.bOwnRegistrar = FALSE;
+	}
+}
+
+
+typedef struct {
+	gchar *cService;
+	gchar *cMenuObject;
+	DbusmenuGtkMenu *pMenu;
+} CDSharedMemory;
+
+static void _on_menu_destroyed (CairoDockModuleInstance *myApplet, GObject *old_menu_pointer)
+{
+	if (old_menu_pointer == (GObject*)myData.pMenu)
+		myData.pMenu = NULL;
+}
+
+/*static void _free_shared_memory (CDSharedMemory *pSharedMemory)
+{
+	g_free (pSharedMemory->cService);
+	g_free (pSharedMemory->cMenuObject);
+	if (pSharedMemory->pMenu)
+		gtk_widget_destroy (GTK_WIDGET (pSharedMemory->pMenu));
+	g_free (pSharedMemory);
+}
+static void _get_menu_async (CDSharedMemory *pSharedMemory)
+{
+	g_print ("%s()\n", __func__);
+	pSharedMemory->pMenu = dbusmenu_gtkmenu_new (pSharedMemory->cService, pSharedMemory->cMenuObject);  /// can this object disappear by itself ? it seems to crash with 2 instances of inkscape, when closing one of them... 
+	g_print ("menu built\n");
+}
+static gboolean _fetch_menu (CDSharedMemory *pSharedMemory)
+{
+	g_print ("%s()\n", __func__);
+	CD_APPLET_ENTER;
+	myData.pMenu = pSharedMemory->pMenu;
+	pSharedMemory->pMenu = NULL;
+	
+	g_object_weak_ref (G_OBJECT (myData.pMenu),
+		(GWeakNotify)_on_menu_destroyed,
+		myApplet);
+	CD_APPLET_LEAVE (TRUE);
+}*/
+
+static void _on_got_menu (DBusGProxy *proxy, DBusGProxyCall *call_id, CairoDockModuleInstance *myApplet)
+{
+	g_print ("=== %s ()\n", __func__);
+	CD_APPLET_ENTER;
+	s_pGetMenuCall = NULL;
+	
+	GError *erreur = NULL;
+	gchar *cService = NULL, *cMenuObject = NULL;
+	
+	gboolean bSuccess = dbus_g_proxy_end_call (proxy,
+		call_id,
+		&erreur,
+		G_TYPE_STRING, &cService,
+		DBUS_TYPE_G_OBJECT_PATH, &cMenuObject,
+		G_TYPE_INVALID);
+	if (erreur)
+	{
+		cd_warning ("couldn't get the application menu (%s)", erreur->message);
+		g_error_free (erreur);
+	}
+	if (bSuccess)
+	{
+		g_print (" -> %s\n", cService);
+		g_print ("    %s\n", cMenuObject);
+		if (cService && *cService != '\0')
+		{
+			/*if (myData.pTask != NULL)
+			{
+				cairo_dock_discard_task (myData.pTask);
+				myData.pTask = NULL;
+			}
+			CDSharedMemory *pSharedMemory = g_new0 (CDSharedMemory, 1);
+			pSharedMemory->cService = cService;
+			pSharedMemory->cMenuObject = cMenuObject;
+			myData.pTask = cairo_dock_new_task_full (0,
+				(CairoDockGetDataAsyncFunc) _get_menu_async,
+				(CairoDockUpdateSyncFunc) _fetch_menu,
+				(GFreeFunc) _free_shared_memory,
+				pSharedMemory);
+			cairo_dock_launch_task_delayed (myData.pTask, 0);*/
+			/// TODO: it seems to hang he dock for a second, even with a task :-/
+			/// so maybe we need to cache the {window,menu} couples...
+			myData.pMenu = dbusmenu_gtkmenu_new (cService, cMenuObject);  /// can this object disappear by itself ? it seems to crash with 2 instances of inkscape, when closing one of them... 
+			if (myData.pMenu)
+				g_object_weak_ref (G_OBJECT (myData.pMenu),
+					(GWeakNotify)_on_menu_destroyed,
+					myApplet);
+		}
+	}
+	
+	///g_free (cService);
+	///g_free (cMenuObject);
+	CD_APPLET_LEAVE ();
+}
+static void _get_application_menu (Window Xid)
+{
+	// destroy the current menu
+	if (myData.pMenu != NULL)
+	{
+		gtk_widget_destroy (GTK_WIDGET (myData.pMenu));
+		myData.pMenu = NULL;
+	}
+
+	if (s_pGetMenuCall != NULL)
+	{
+		DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
+		dbus_g_proxy_cancel_call (pProxy, s_pGetMenuCall);
+		s_pGetMenuCall = NULL;
+	}
+	
+	if (myData.pTask != NULL)
+	{
+		cairo_dock_discard_task (myData.pTask);
+		myData.pTask = NULL;
+	}
+	
+	// get the new one.
+	if (Xid != 0)
+	{
+		if (myData.pProxyRegistrar != NULL)
+		{
+			s_pGetMenuCall = dbus_g_proxy_begin_call (myData.pProxyRegistrar,
+				"GetMenuForWindow",
+				(DBusGProxyCallNotify)_on_got_menu,
+				myApplet,
+				(GDestroyNotify) NULL,
+				G_TYPE_UINT, Xid,
+				G_TYPE_INVALID);
+		}
+	}
+}
+
+
+  ////////////////////
+ /// START / STOP ///
+////////////////////
+
+static gboolean _get_current_window_idle (CairoDockModuleInstance *myApplet)
+{
+	// get the controls and menu of the current window.
+	Window iActiveWindow = cairo_dock_get_current_active_window ();
+	
+	cd_app_menu_set_current_window (iActiveWindow);
+	
+	myData.iSidInitIdle = 0;
+	return FALSE;
+}
+static gboolean _remove_windows_borders (CairoDockModuleInstance *myApplet)
+{
+	cd_app_menu_set_windows_borders (FALSE);
+	
+	myData.iSidInitIdle2 = 0;
+	return FALSE;
+}
+void cd_app_menu_start (void)
+{
+	// connect to the registrar or directly get the current window.
+	if (myConfig.bDisplayMenu)
+	{
+		cd_app_detect_registrar ();  // -> will get the current window once connected to the registrar
+	}
+	else
+	{
+		myData.iSidInitIdle = g_idle_add ((GSourceFunc)_get_current_window_idle, myApplet);  // in idle, because it's heavy + the applications-manager is started after the plug-ins.
+	}
+	
+	// remove borders from all maximised windows
+	if (myConfig.bDisplayControls)
+	{
+		myData.iSidInitIdle2 = g_idle_add ((GSourceFunc)_remove_windows_borders, myApplet);  // in idle, because it's heavy + the applications-manager is started after the plug-ins.
+	}
+	
+	if (myConfig.bDisplayControls)
+	{
+		cd_app_menu_resize ();
+	}
+}
+
+
+void cd_app_menu_stop (void)
+{
+	// disconnect from the registrar.
+	if (myConfig.bDisplayMenu)
+	{
+		cd_app_disconnect_from_registrar ();
+	}
+	
+	// set back the window border of maximized windows.
+	if (myConfig.bDisplayControls)
+	{	
+		cd_app_menu_set_windows_borders (TRUE);
+	}
+	
+	if (myData.iSidInitIdle != 0)
+		g_source_remove (myData.iSidInitIdle);
+	if (myData.iSidInitIdle2 != 0)
+		g_source_remove (myData.iSidInitIdle2);
+}
+
+
+void cd_app_menu_set_current_window (Window iActiveWindow)
+{
+	g_print ("%s (%ld)\n", __func__, iActiveWindow);
+	if (iActiveWindow != myData.iCurrentWindow)
+	{
+		myData.iPreviousWindow = myData.iCurrentWindow;
+		myData.iCurrentWindow = iActiveWindow;
+		myIcon->Xid = iActiveWindow;  // set the Xid on our icon, so that the dock adds the usual actions in our right-click menu.
+		
+		if (myConfig.bDisplayMenu)
+			_get_application_menu (iActiveWindow);
+		
+		if (myConfig.bDisplayControls)
+			_get_window_allowed_actions (iActiveWindow);
+		
+		// update the icon
+		Icon *icon = cairo_dock_get_icon_with_Xid (iActiveWindow);
+		CD_APPLET_SET_NAME_FOR_MY_ICON (icon ? icon->cName : NULL);
+		
+		cd_app_menu_redraw_icon ();
+	}
+}

=== added file 'Global-Menu/src/applet-app.h'
--- Global-Menu/src/applet-app.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-app.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,44 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __APPLET_APP_MENU__
+#define  __APPLET_APP_MENU__
+
+#include <cairo-dock.h>
+
+
+void cd_app_menu_set_window_border (Window Xid, gboolean bWithBorder);
+
+
+void cd_app_menu_set_windows_borders (gboolean bWithBorder);
+
+
+void cd_app_detect_registrar (void);
+
+void cd_app_disconnect_from_registrar (void);
+
+
+void cd_app_menu_start (void);
+
+void cd_app_menu_stop (void);
+
+void cd_app_menu_set_current_window (Window iActiveWindow);
+
+
+#endif

=== added file 'Global-Menu/src/applet-config.c'
--- Global-Menu/src/applet-config.c	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-config.c	2012-02-14 14:04:19 +0000
@@ -0,0 +1,57 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <string.h>
+#include <cairo-dock.h>
+
+#include "applet-struct.h"
+#include "applet-config.h"
+
+
+//\_________________ Here you have to get all your parameters from the conf file. Use the macros CD_CONFIG_GET_BOOLEAN, CD_CONFIG_GET_INTEGER, CD_CONFIG_GET_STRING, etc. myConfig has been reseted to 0 at this point. This function is called at the beginning of init and reload.
+CD_APPLET_GET_CONFIG_BEGIN
+	guint iSteal = CD_CONFIG_GET_INTEGER ("Configuration", "steal");
+	myConfig.bDisplayMenu = (iSteal == 0 || iSteal == 2);
+	myConfig.bDisplayControls = (iSteal == 1 || iSteal == 2);
+	myConfig.cShortkey = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
+	myConfig.bMenuOnMouse = CD_CONFIG_GET_BOOLEAN ("Configuration", "menu on mouse");
+	myConfig.bCompactMode = CD_CONFIG_GET_BOOLEAN ("Configuration", "compact");
+	myConfig.iButtonsOrder = CD_CONFIG_GET_INTEGER ("Configuration", "buttons order"); // (auto / right / left)
+	myConfig.iTransitionDuration = 500;
+	myConfig.cMinimizeImage = CD_CONFIG_GET_FILE_PATH ("Configuration", "min button", "button-min.svg");
+	myConfig.cMaximizeImage = CD_CONFIG_GET_FILE_PATH ("Configuration", "max button", "button-max.svg");
+	myConfig.cRestoreImage = CD_CONFIG_GET_FILE_PATH ("Configuration", "restore button", "button-restore.svg");
+	myConfig.cCloseImage = CD_CONFIG_GET_FILE_PATH ("Configuration", "close button", "button-close.svg");
+CD_APPLET_GET_CONFIG_END
+
+
+//\_________________ Here you have to free all ressources allocated for myConfig. This one will be reseted to 0 at the end of this function. This function is called right before you get the applet's config, and when your applet is stopped, in the end.
+CD_APPLET_RESET_CONFIG_BEGIN
+	g_free (myConfig.cShortkey);
+	g_free (myConfig.cMinimizeImage);
+	g_free (myConfig.cMaximizeImage);
+	g_free (myConfig.cRestoreImage);
+	g_free (myConfig.cCloseImage);
+CD_APPLET_RESET_CONFIG_END
+
+		
+//\_________________ Here you have to free all ressources allocated for myData. This one will be reseted to 0 at the end of this function. This function is called when your applet is stopped, in the very end.
+CD_APPLET_RESET_DATA_BEGIN
+	
+CD_APPLET_RESET_DATA_END

=== added file 'Global-Menu/src/applet-config.h'
--- Global-Menu/src/applet-config.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-config.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,30 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#ifndef __APPLET_CONFIG__
+#define  __APPLET_CONFIG__
+
+#include <cairo-dock.h>
+
+
+CD_APPLET_CONFIG_H
+
+
+#endif

=== added file 'Global-Menu/src/applet-draw.c'
--- Global-Menu/src/applet-draw.c	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-draw.c	2012-02-14 14:04:19 +0000
@@ -0,0 +1,406 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* based on indicator-messages.c written by :
+*  Ted Gould <ted@xxxxxxxxxxxxx>
+*  Cody Russell <cody.russell@xxxxxxxxxxxxx>
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "applet-struct.h"
+#include "applet-draw.h"
+
+
+static void _add_button_opengl (gboolean bAlpha, gint iAnimIter, CairoDockImageBuffer *pImage, int x, int y)
+{
+	if (bAlpha)
+		_cairo_dock_set_alpha (1. - .4 * sin (G_PI * iAnimIter / (CD_ANIM_STEPS - 1)));
+	else
+		_cairo_dock_set_alpha (.6);
+
+	cairo_dock_apply_image_buffer_texture_with_offset (pImage, x, y);
+}
+
+static gboolean cd_app_menu_render_step_opengl (Icon *pIcon, CairoDockModuleInstance *myApplet)
+{
+	CD_APPLET_ENTER;
+	double f = CD_APPLET_GET_TRANSITION_FRACTION ();
+	
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	CD_APPLET_LEAVE_IF_FAIL (iHeight != 0, TRUE);
+	
+	_cairo_dock_enable_texture ();
+	_cairo_dock_set_blend_alpha ();
+	
+	// icon position/size
+	int x, y, w, h;
+	if (myConfig.bDisplayControls)
+	{
+		w = MIN (iWidth, iHeight);
+		h = w;
+	}
+	else
+	{
+		w = iWidth;
+		h = iHeight;
+	}
+	if (iWidth > iHeight)  // horizontal alignment
+	{
+		x = (-iWidth + w)/2;  // on the left
+		y = 0;  // vertically centered
+	}
+	else  // vertical alignment
+	{
+		x = 0;  // horizontally centered
+		y = (iHeight - h)/2;  // on top
+	}
+	
+	// draw current icon
+	Icon *pAppli = cairo_dock_get_icon_with_Xid (myData.iCurrentWindow);
+	GLuint iTexture = (pAppli ? pAppli->iIconTexture : myData.defaultIcon.iTexture);
+	Icon *pPrevIcon = cairo_dock_get_icon_with_Xid (myData.iPreviousWindow);
+	GLuint iPrevTexture = (pPrevIcon ? pPrevIcon->iIconTexture : myData.defaultIcon.iTexture);
+	
+	if (iPrevTexture != 0)
+	{
+		_cairo_dock_set_alpha (1-f);
+		glBindTexture (GL_TEXTURE_2D, iPrevTexture);
+		_cairo_dock_apply_current_texture_at_size_with_offset (w, h, x, y);
+	}
+	if (iTexture != 0)
+	{
+		_cairo_dock_set_alpha (f);
+		glBindTexture (GL_TEXTURE_2D, iTexture);
+		_cairo_dock_apply_current_texture_at_size_with_offset (w, h, x, y);
+	}
+	_cairo_dock_set_alpha (1);
+	
+	// draw window buttons
+	if (myConfig.bDisplayControls)
+	{
+		// minimize button
+		if (iWidth > iHeight)  // horizontal alignment
+			x += w;
+		else
+			y -= w;
+
+		if (myData.bReversedButtonsOrder)
+			_add_button_opengl (myData.bCanClose, myData.iAnimIterClose, &myData.closeButton, x, y);
+		else
+			_add_button_opengl (myData.bCanMinimize, myData.iAnimIterMin, &myData.minimizeButton, x, y);
+
+		// restore/maximize button
+		if (iWidth > iHeight)  // horizontal alignment
+			x += w;
+		else
+			y -= w;
+
+		if (myData.bReversedButtonsOrder)
+			_add_button_opengl (myData.bCanMinimize, myData.iAnimIterMin, &myData.minimizeButton, x, y);
+		else
+			_add_button_opengl (myData.bCanMaximize, myData.iAnimIterMax, pAppli && pAppli->bIsMaximized ? &myData.restoreButton : &myData.maximizeButton, x, y);
+
+		// close button
+		if (iWidth > iHeight)  // horizontal alignment
+			x += w;
+		else
+			y -= h;
+
+		if (myData.bReversedButtonsOrder)
+			_add_button_opengl (myData.bCanMaximize, myData.iAnimIterMax, pAppli && pAppli->bIsMaximized ? &myData.restoreButton : &myData.maximizeButton, x, y);
+		else
+			_add_button_opengl (myData.bCanClose, myData.iAnimIterClose, &myData.closeButton, x, y);
+	}
+	_cairo_dock_disable_texture ();
+	
+	CD_APPLET_LEAVE (TRUE);
+}
+
+static gboolean cd_app_menu_render_step_cairo (Icon *pIcon, CairoDockModuleInstance *myApplet)
+{
+	CD_APPLET_ENTER;
+	double f = CD_APPLET_GET_TRANSITION_FRACTION ();
+	
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	CD_APPLET_LEAVE_IF_FAIL (iHeight != 0, TRUE);
+	
+	cairo_dock_erase_cairo_context (myDrawContext);
+	
+	// items size
+	int x, y, w, h;
+	if (myConfig.bDisplayControls)  // we need to draw the icon + 3 buttons
+	{
+		if (iWidth > iHeight)  // horizontal alignment
+		{
+			w = MIN (iWidth / 4, iHeight);
+			h = w;
+		}
+		else
+		{
+			w = MIN (iHeight / 4, iWidth);
+			h = w;
+		}
+	}
+	else  // just draw the icon on the whole surface.
+	{
+		w = iWidth;
+		h = iHeight;
+	}
+	
+	// draw current icon
+	if (iWidth > iHeight)  // horizontal alignment
+	{
+		x = 0;  // on the left
+		y = (-iHeight + h)/2;  // vertically centered
+	}
+	else  // vertical alignment
+	{
+		x = (iWidth - w)/2;  // horizontally centered
+		y = 0;  // on top
+	}
+	
+	Icon *pAppli = cairo_dock_get_icon_with_Xid (myData.iCurrentWindow);
+	cairo_surface_t *pSurface = (pAppli ? pAppli->pIconBuffer : myData.defaultIcon.pSurface);
+	Icon *pPrevIcon = cairo_dock_get_icon_with_Xid (myData.iPreviousWindow);
+	cairo_surface_t *pPrevSurface = (pPrevIcon ? pPrevIcon->pIconBuffer : myData.defaultIcon.pSurface);
+	
+	if (pPrevSurface != NULL)
+	{
+		cairo_set_source_surface (myDrawContext, pPrevSurface, x, y);
+		cairo_paint_with_alpha (myDrawContext, 1-f);
+	}
+	if (pSurface != NULL)
+	{
+		cairo_set_source_surface (myDrawContext, pSurface, x, y);
+		cairo_paint_with_alpha (myDrawContext, f);
+	}
+	
+	// draw window buttons
+	if (myConfig.bDisplayControls)
+	{
+		// minimize button
+		if (iWidth > iHeight)  // horizontal alignment
+			x += w;
+		else
+			y += h;
+
+		if (myData.bReversedButtonsOrder)
+			cairo_dock_apply_image_buffer_surface_with_offset (&myData.closeButton, myDrawContext,
+				x, y, myData.bCanClose ? 1. : .6);
+		else
+			cairo_dock_apply_image_buffer_surface_with_offset (&myData.minimizeButton, myDrawContext,
+				x, y, myData.bCanMinimize ? 1. : .6);
+		
+		// restore/maximize button
+		if (iWidth > iHeight)  // horizontal alignment
+			x += w;
+		else
+			y += h;
+
+		if (myData.bReversedButtonsOrder)
+			cairo_dock_apply_image_buffer_surface_with_offset (&myData.minimizeButton, myDrawContext,
+				x, y, myData.bCanMinimize ? 1. : .6);
+		else
+			cairo_dock_apply_image_buffer_surface_with_offset (pAppli && pAppli->bIsMaximized ? &myData.restoreButton : &myData.maximizeButton, myDrawContext,
+				x, y, myData.bCanMaximize ? 1. : .6);
+		
+		// close button
+		if (iWidth > iHeight)  // horizontal alignment
+			x += w;
+		else
+			y += h;
+
+		if (myData.bReversedButtonsOrder)
+			cairo_dock_apply_image_buffer_surface_with_offset (pAppli && pAppli->bIsMaximized ? &myData.restoreButton : &myData.maximizeButton, myDrawContext,
+				x, y, myData.bCanMaximize ? 1. : .6);
+		else
+			cairo_dock_apply_image_buffer_surface_with_offset (&myData.closeButton, myDrawContext,
+				x, y, myData.bCanClose ? 1. : .6);
+	}
+	
+	CD_APPLET_LEAVE (TRUE);
+}
+
+
+void cd_app_menu_load_button_images (void)
+{
+	/// TODO: handle animated images (emerald themes)...
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	g_return_if_fail (iHeight != 0);
+	
+	int w, h;
+	if (myConfig.bDisplayControls)
+	{
+		w = MIN (iWidth, iHeight);
+		h = w;
+	}
+	else
+	{
+		w = iWidth;
+		h = iHeight;
+	}
+	cairo_dock_unload_image_buffer (&myData.minimizeButton);
+	cairo_dock_load_image_buffer (&myData.minimizeButton,
+		myConfig.cMinimizeImage,
+		w, h, CAIRO_DOCK_ANIMATED_IMAGE);
+	cairo_dock_unload_image_buffer (&myData.maximizeButton);
+	cairo_dock_load_image_buffer (&myData.maximizeButton,
+		myConfig.cMaximizeImage,
+		w, h, CAIRO_DOCK_ANIMATED_IMAGE);
+	cairo_dock_unload_image_buffer (&myData.restoreButton);
+	cairo_dock_load_image_buffer (&myData.restoreButton,
+		myConfig.cRestoreImage,
+		w, h, CAIRO_DOCK_ANIMATED_IMAGE);
+	cairo_dock_unload_image_buffer (&myData.closeButton);
+	cairo_dock_load_image_buffer (&myData.closeButton,
+		myConfig.cCloseImage,
+		w, h, CAIRO_DOCK_ANIMATED_IMAGE);
+}
+
+
+void cd_app_menu_default_image (void)
+{
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	g_return_if_fail (iHeight != 0);
+	
+	int w, h;
+	if (myConfig.bDisplayControls)
+	{
+		w = MIN (iWidth, iHeight);
+		h = w;
+	}
+	else
+	{
+		w = iWidth;
+		h = iHeight;
+	}
+	cairo_dock_load_image_buffer (&myData.defaultIcon,
+		MY_APPLET_SHARE_DATA_DIR"/"MY_APPLET_ICON_FILE,
+		w, h, 0);
+}
+
+
+void cd_app_menu_redraw_icon (void)
+{
+	// load the buttons and the default icon
+	if (myData.iCurrentWindow == 0 && myData.defaultIcon.iWidth == 0)
+	{
+		cd_app_menu_default_image ();
+	}
+	
+	if (myData.minimizeButton.iWidth == 0)
+	{
+		cd_app_menu_load_button_images ();
+	}
+	
+	// set and launch a transition
+	CD_APPLET_SET_TRANSITION_ON_MY_ICON (cd_app_menu_render_step_cairo,
+		cd_app_menu_render_step_opengl,
+		g_bUseOpenGL,  // bFastPace : vite si opengl, lent si cairo.
+		myConfig.iTransitionDuration,
+		TRUE);  // bRemoveWhenFinished
+}
+
+
+void cd_app_menu_redraw_buttons (void)
+{
+	if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
+	{
+		CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN ();
+		cd_app_menu_render_step_opengl (myIcon, myApplet);	
+		CD_APPLET_FINISH_DRAWING_MY_ICON;
+	}
+	else
+	{
+		cd_app_menu_render_step_cairo (myIcon, myApplet);
+		///CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
+	}
+	CD_APPLET_REDRAW_MY_ICON;
+}
+
+
+void cd_app_menu_resize (void)
+{
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	if (myContainer->bIsHorizontal)
+		cairo_dock_resize_applet (myApplet, MAX (iWidth, myData.iNbButtons*iHeight), iHeight);
+	else
+		cairo_dock_resize_applet (myApplet, iWidth, MAX (myData.iNbButtons*iWidth, iHeight));
+}
+
+
+CDButtonEnum cd_app_menu_find_button (CairoDockModuleInstance *myApplet)
+{
+	int iNumButton = -1;
+	int iMouseX, iMouseY;
+	if (myDesklet)  /// TODO: handle the opengl picking...
+	{
+		iMouseX = myDesklet->iMouseX2d;
+		iMouseY = myDesklet->iMouseY2d;
+	}
+	else
+	{
+		iMouseX = myContainer->iMouseX - myIcon->fDrawX;
+		iMouseY = myContainer->iMouseY - myIcon->fDrawY;
+	}
+	
+	int w, h;
+	if (myContainer->bIsHorizontal)
+	{
+		w = myIcon->fWidth * myIcon->fScale;
+		h = myIcon->fHeight * myIcon->fScale;
+	}
+	else
+	{
+		h = myIcon->fWidth * myIcon->fScale;
+		w = myIcon->fHeight * myIcon->fScale;
+		int tmp = iMouseX;
+		iMouseX = iMouseY;
+		iMouseY = tmp;
+	}
+	g_return_val_if_fail (iMouseX * iMouseY != 0, iNumButton); // it can crash with Arithmetic exception if we switch from the dock to a desklet
+	if (w >= h)  // horizontal alignment
+	{
+		iNumButton = iMouseX / (w/myData.iNbButtons);
+	}
+	else  // vertical alignment
+	{
+		iNumButton = iMouseY / (h/myData.iNbButtons);
+	}
+	
+	if (!myConfig.bDisplayControls)
+		iNumButton++;
+
+	if (myData.bReversedButtonsOrder) // 1->1 ; 2->4 ; 3->2 ; 4->3
+	{	// Menu (1) - Close (4) - Min (2) - Max (3) instead of
+		// Menu (1) - Min (2) - Max (3) - Close (4)
+		if (iNumButton == CD_BUTTON_MINIMIZE) // 2 is now 4
+			iNumButton = CD_BUTTON_CLOSE;
+		else if (iNumButton != CD_BUTTON_MENU)
+			iNumButton--; // 3 is now 2 and 4 is now 3
+	}
+	
+	return iNumButton;
+}

=== added file 'Global-Menu/src/applet-draw.h'
--- Global-Menu/src/applet-draw.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-draw.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,44 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __APPLET_DRAW__
+#define  __APPLET_DRAW__
+
+#include <cairo-dock.h>
+
+#include "applet-struct.h"
+
+
+void cd_app_menu_load_button_images (void);
+
+void cd_app_menu_default_image (void);
+
+
+void cd_app_menu_redraw_icon (void);
+
+void cd_app_menu_redraw_buttons (void);
+
+
+void cd_app_menu_resize (void);
+
+
+CDButtonEnum cd_app_menu_find_button (CairoDockModuleInstance *myApplet);
+
+
+#endif

=== added file 'Global-Menu/src/applet-init.c'
--- Global-Menu/src/applet-init.c	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-init.c	2012-02-14 14:04:19 +0000
@@ -0,0 +1,228 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "stdlib.h"
+
+#include "applet-config.h"
+#include "applet-notifications.h"
+#include "applet-app.h"
+#include "applet-draw.h"
+#include "applet-struct.h"
+#include "applet-init.h"
+
+
+CD_APPLET_DEFINE_BEGIN (N_("Global Menu"),
+	3, 0, 0,
+	CAIRO_DOCK_CATEGORY_APPLET_DESKTOP,
+	N_("This applet allows you to control the current active window:\n"
+	"  close, minimize, maximize, and display the application menu."
+	"To display the menu, applications have to support this feature, which is the case on Ubuntu by default.\n"
+	"You can bind a shortkey to this action."),
+	"Fabounet")
+	CD_APPLET_DEFINE_COMMON_APPLET_INTERFACE
+	CD_APPLET_ALLOW_EMPTY_TITLE
+CD_APPLET_DEFINE_END
+
+static gboolean _reversed_buttons_order (void)
+{	// TRUE: on the left (close, min, max) || FALSE: on the right (min, max, close)
+	if (myConfig.iButtonsOrder == CD_GM_BUTTON_ORDER_AUTO
+	        && ((myDock && (int) myIcon->fXAtRest < (g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] / 2))
+	        || (myDesklet && myDesklet->container.iWindowPositionX < (g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL] / 2))))
+		return TRUE;
+	return (myConfig.iButtonsOrder == CD_GM_BUTTON_ORDER_LEFT);
+}
+
+//\___________ Here is where you initiate your applet. myConfig is already set at this point, and also myIcon, myContainer, myDock, myDesklet (and myDrawContext if you're in dock mode). The macro CD_APPLET_MY_CONF_FILE and CD_APPLET_MY_KEY_FILE can give you access to the applet's conf-file and its corresponding key-file (also available during reload). If you're in desklet mode, myDrawContext is still NULL, and myIcon's buffers has not been filled, because you may not need them then (idem when reloading).
+CD_APPLET_INIT_BEGIN
+	if (myDesklet)
+	{
+		CD_APPLET_SET_DESKLET_RENDERER ("Simple");  // set a desklet renderer.
+	}
+	
+	cairo_dock_register_notification_on_object (&myDesktopMgr,
+		NOTIFICATION_WINDOW_ACTIVATED,
+		(CairoDockNotificationFunc) cd_app_menu_on_active_window_changed,
+		CAIRO_DOCK_RUN_AFTER, myApplet);
+	cairo_dock_register_notification_on_object (&myTaskbarMgr,
+		NOTIFICATION_APPLI_STATE_CHANGED,
+		(CairoDockNotificationFunc) cd_app_menu_on_state_changed,
+		CAIRO_DOCK_RUN_AFTER, myApplet);
+	cairo_dock_register_notification_on_object (&myTaskbarMgr,
+		NOTIFICATION_APPLI_NAME_CHANGED,
+		(CairoDockNotificationFunc) cd_app_menu_on_name_changed,
+		CAIRO_DOCK_RUN_AFTER, myApplet);
+	cairo_dock_register_notification_on_object (&myTaskbarMgr,
+		NOTIFICATION_APPLI_CREATED,
+		(CairoDockNotificationFunc) cd_app_menu_on_new_appli,
+		CAIRO_DOCK_RUN_AFTER, myApplet);
+	/**cairo_dock_register_notification_on_object (&myDesktopMgr,
+		NOTIFICATION_WINDOW_PROPERTY_CHANGED,
+		(CairoDockNotificationFunc) cd_app_menu_on_property_changed,
+		CAIRO_DOCK_RUN_AFTER, myApplet);*/
+	
+	cairo_dock_register_notification_on_object (myContainer,
+		NOTIFICATION_MOUSE_MOVED,
+		(CairoDockNotificationFunc) on_mouse_moved,
+		CAIRO_DOCK_RUN_AFTER, myApplet);
+	cairo_dock_register_notification_on_object (myContainer,
+		NOTIFICATION_UPDATE_SLOW,
+		(CairoDockNotificationFunc) cd_app_menu_on_update_container,
+		CAIRO_DOCK_RUN_AFTER, myApplet);
+	
+	// start !
+	myData.iNbButtons = myConfig.bDisplayControls * 3 + 1;  // we display the icon even if we don't provide the menu.
+	cd_app_menu_start ();
+	
+	if (myConfig.bDisplayControls)  // no animation on mouse hover if the buttons are displayed, it's hard to click
+	{
+		CD_APPLET_SET_STATIC_ICON;
+		myData.bReversedButtonsOrder = FALSE; /// _reversed_buttons_order (); => TODO? check if the position of the icon has changed. => the position of the icon seems to not be correct if we call this function here... we can check if something has changed with CD_APPLET_RELOAD but the order doesn't change if the icon has been moved in the same dock (it works if the container has changed). Do we have to register to this notifications? => NOTIFICATION_ICON_MOVED
+	}
+	
+	// mouse events
+	CD_APPLET_REGISTER_FOR_CLICK_EVENT;
+	CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
+	CD_APPLET_REGISTER_FOR_DOUBLE_CLICK_EVENT;
+	CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
+	CD_APPLET_REGISTER_FOR_SCROLL_EVENT;
+	
+	// keyboard events
+	if (myConfig.bDisplayMenu)
+		myData.pKeyBinding = CD_APPLET_BIND_KEY (myConfig.cShortkey,
+			D_("Show/hide the current application menu"),
+			"Configuration", "shortkey",
+			(CDBindkeyHandler) cd_app_menu_on_keybinding_pull);
+CD_APPLET_INIT_END
+
+
+//\___________ Here is where you stop your applet. myConfig and myData are still valid, but will be reseted to 0 at the end of the function. In the end, your applet will go back to its original state, as if it had never been activated.
+CD_APPLET_STOP_BEGIN
+	cairo_dock_remove_notification_func_on_object (&myDesktopMgr,
+		NOTIFICATION_WINDOW_ACTIVATED,
+		(CairoDockNotificationFunc) cd_app_menu_on_active_window_changed, myApplet);
+	/**cairo_dock_remove_notification_func_on_object (&myDesktopMgr,
+		NOTIFICATION_WINDOW_PROPERTY_CHANGED,
+		(CairoDockNotificationFunc) cd_app_menu_on_property_changed, myApplet);*/
+	cairo_dock_remove_notification_func_on_object (&myTaskbarMgr,
+		NOTIFICATION_APPLI_STATE_CHANGED,
+		(CairoDockNotificationFunc) cd_app_menu_on_state_changed, myApplet);
+	cairo_dock_remove_notification_func_on_object (&myTaskbarMgr,
+		NOTIFICATION_APPLI_NAME_CHANGED,
+		(CairoDockNotificationFunc) cd_app_menu_on_name_changed, myApplet);
+	cairo_dock_remove_notification_func_on_object (&myTaskbarMgr,
+		NOTIFICATION_APPLI_CREATED,
+		(CairoDockNotificationFunc) cd_app_menu_on_new_appli, myApplet);
+	
+	cairo_dock_remove_notification_func_on_object (myContainer,
+		NOTIFICATION_MOUSE_MOVED,
+		(CairoDockNotificationFunc) on_mouse_moved, myApplet);
+	cairo_dock_remove_notification_func_on_object (myContainer,
+		NOTIFICATION_UPDATE_SLOW,
+		(CairoDockNotificationFunc) cd_app_menu_on_update_container, myApplet);
+	
+	cd_app_menu_stop ();
+
+	// mouse events
+	CD_APPLET_UNREGISTER_FOR_CLICK_EVENT;
+	CD_APPLET_UNREGISTER_FOR_DOUBLE_CLICK_EVENT;
+	CD_APPLET_UNREGISTER_FOR_MIDDLE_CLICK_EVENT;
+	CD_APPLET_UNREGISTER_FOR_BUILD_MENU_EVENT;
+	CD_APPLET_UNREGISTER_FOR_SCROLL_EVENT;
+	
+	// keyboard events
+	if (myConfig.bDisplayMenu)
+		cd_keybinder_unbind (myData.pKeyBinding);
+CD_APPLET_STOP_END
+
+
+//\___________ The reload occurs in 2 occasions : when the user changes the applet's config, and when the user reload the cairo-dock's config or modify the desklet's size. The macro CD_APPLET_MY_CONFIG_CHANGED can tell you this. myConfig has already been reloaded at this point if you're in the first case, myData is untouched. You also have the macro CD_APPLET_MY_CONTAINER_TYPE_CHANGED that can tell you if you switched from dock/desklet to desklet/dock mode.
+CD_APPLET_RELOAD_BEGIN
+	// if they are loaded, reload the controls icons.
+	cd_app_menu_load_button_images ();
+	cd_app_menu_default_image ();
+	
+	if (CD_APPLET_MY_CONFIG_CHANGED)
+	{
+		if (myDesklet && CD_APPLET_MY_CONTAINER_TYPE_CHANGED)  // we are now in a desklet, set a renderer.
+		{
+			CD_APPLET_SET_DESKLET_RENDERER ("Simple");
+		}
+		
+		if (CD_APPLET_MY_OLD_CONTAINER != myContainer)
+		{
+			cairo_dock_remove_notification_func_on_object (CD_APPLET_MY_OLD_CONTAINER,
+				NOTIFICATION_MOUSE_MOVED,
+				(CairoDockNotificationFunc) on_mouse_moved, myApplet);
+			cairo_dock_remove_notification_func_on_object (CD_APPLET_MY_OLD_CONTAINER,
+				NOTIFICATION_UPDATE_SLOW,
+				(CairoDockNotificationFunc) cd_app_menu_on_update_container, myApplet);
+			
+			cairo_dock_register_notification_on_object (myContainer,
+				NOTIFICATION_MOUSE_MOVED,
+				(CairoDockNotificationFunc) on_mouse_moved,
+				CAIRO_DOCK_RUN_AFTER, myApplet);
+			cairo_dock_register_notification_on_object (myContainer,
+				NOTIFICATION_UPDATE_SLOW,
+				(CairoDockNotificationFunc) cd_app_menu_on_update_container,
+				CAIRO_DOCK_RUN_AFTER, myApplet);
+		}
+		
+		// windows borders
+		cd_app_menu_set_windows_borders (!myConfig.bDisplayControls);
+		
+		// registrar
+		if (myConfig.bDisplayMenu && !myData.pProxyRegistrar)
+			cd_app_detect_registrar ();
+		else if (! myConfig.bDisplayMenu)  // even if myData.pProxyRegistrar is NULL, we have to cancel the detection
+			cd_app_disconnect_from_registrar ();
+		
+		// to update any param that could have changed, simply re-set the current window.
+		myData.iNbButtons = myConfig.bDisplayControls * 3 + 1;
+		myData.iAnimIterMin = myData.iAnimIterMax = myData.iAnimIterClose = 0;
+		myData.bButtonAnimating = FALSE;
+		Window iActiveWindow = myData.iCurrentWindow;
+		myData.iCurrentWindow = 0;
+		cd_app_menu_set_current_window (iActiveWindow);
+		
+		// shortkey
+		if (myConfig.bDisplayMenu)
+		{
+			if (myData.pKeyBinding)
+				cd_keybinder_rebind (myData.pKeyBinding, myConfig.cShortkey, NULL);
+			else
+				myData.pKeyBinding = CD_APPLET_BIND_KEY (myConfig.cShortkey,
+					D_("Show/hide the current application menu"),
+					"Configuration", "shortkey",
+					(CDBindkeyHandler) cd_app_menu_on_keybinding_pull);
+		}
+		else if (myData.pKeyBinding)
+		{
+			cd_keybinder_unbind (myData.pKeyBinding);
+		}
+		
+		cairo_dock_set_icon_static (myIcon, myConfig.bDisplayControls);
+	}
+	
+	if (myConfig.bDisplayControls)
+	{
+		myData.bReversedButtonsOrder = _reversed_buttons_order ();
+		cd_app_menu_resize ();
+	}
+	
+CD_APPLET_RELOAD_END

=== added file 'Global-Menu/src/applet-init.h'
--- Global-Menu/src/applet-init.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-init.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,31 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#ifndef __APPLET_INIT__
+#define  __APPLET_INIT__
+
+
+#include <cairo-dock.h>
+
+
+CD_APPLET_H
+
+
+#endif

=== added file 'Global-Menu/src/applet-notifications.c'
--- Global-Menu/src/applet-notifications.c	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -0,0 +1,365 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "gdk/gdkx.h"
+
+#include "applet-struct.h"
+#include "applet-draw.h"
+#include "applet-app.h"
+#include "applet-notifications.h"
+
+
+static void _show_menu (gboolean bOnMouse)
+{
+	if (myData.pMenu != NULL)
+	{
+		if (bOnMouse)
+		{
+			gtk_widget_show_all (GTK_WIDGET (myData.pMenu));
+			gtk_menu_popup (GTK_MENU (myData.pMenu),
+				NULL,
+				NULL,
+				(GtkMenuPositionFunc) NULL,
+				NULL,
+				0,
+				gtk_get_current_event_time ());
+		}
+		else
+		{
+			CD_APPLET_POPUP_MENU_ON_MY_ICON (GTK_WIDGET (myData.pMenu));
+		}
+	}
+	else  /// either show a message, or remember the user demand, so that we pop the menu as soon as we get it...
+	{
+		cairo_dock_show_temporary_dialog_with_icon (D_("The application didn't send its menu to us."), myIcon, myContainer, 4000., "same icon");
+	}
+}
+
+//\___________ Action on click: show the menu
+CD_APPLET_ON_CLICK_BEGIN
+	if (myData.iCurrentWindow == 0)
+		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	if (myConfig.bDisplayControls)
+	{
+		int iNumButton = cd_app_menu_find_button (myApplet);
+		if (iNumButton >= 0)
+		{
+			switch (iNumButton)
+			{
+				case CD_BUTTON_MENU:
+					_show_menu (FALSE);
+				break;
+				case CD_BUTTON_MINIMIZE:
+					if (myData.bCanMinimize)
+						cairo_dock_minimize_xwindow (myData.iCurrentWindow);
+				break;
+				case CD_BUTTON_MAXIMIZE:
+					if (myData.bCanMaximize)
+					{
+						Icon *pAppli = cairo_dock_get_icon_with_Xid (myData.iCurrentWindow);
+						if (pAppli)
+							cairo_dock_maximize_xwindow (pAppli->Xid, ! pAppli->bIsMaximized);
+					}
+				break;
+				case CD_BUTTON_CLOSE:
+					if (myData.bCanClose)
+						cairo_dock_close_xwindow (myData.iCurrentWindow);
+				break;
+			}
+		}
+	}
+	else if (myConfig.bDisplayMenu)
+		_show_menu (FALSE);
+CD_APPLET_ON_CLICK_END
+
+
+//\___________ Other actions are defined to mime the usual actions available on windows top border
+CD_APPLET_ON_MIDDLE_CLICK_BEGIN
+	// set the window behind all the others.
+	if (myData.iCurrentWindow != 0)
+		cairo_dock_lower_xwindow (myData.iCurrentWindow);
+CD_APPLET_ON_MIDDLE_CLICK_END
+
+
+CD_APPLET_ON_SCROLL_BEGIN
+	// minimize the window (we could also use the scroll to (un)shade the window, but I'm afraid that a maximized shaded window would be too much hidden, users could be confused).
+	if (myData.iCurrentWindow != 0 && CD_APPLET_SCROLL_DOWN)
+		cairo_dock_minimize_xwindow (myData.iCurrentWindow);
+CD_APPLET_ON_SCROLL_END
+
+		
+CD_APPLET_ON_DOUBLE_CLICK_BEGIN
+	// maximize/restaure the window.
+	if (myData.iCurrentWindow != 0)
+	{
+		Icon *pAppli = cairo_dock_get_icon_with_Xid (myData.iCurrentWindow);
+		if (pAppli)
+			cairo_dock_maximize_xwindow (pAppli->Xid, ! pAppli->bIsMaximized);
+	}
+CD_APPLET_ON_DOUBLE_CLICK_END
+
+
+CD_APPLET_ON_BUILD_MENU_BEGIN
+	// nothing to do here, since the icon is considered as an appli, the dock will fill it for free !
+CD_APPLET_ON_BUILD_MENU_END
+
+
+void cd_app_menu_on_keybinding_pull (const gchar *keystring, CairoDockModuleInstance *myApplet)
+{
+	CD_APPLET_ENTER;
+	_show_menu (myConfig.bMenuOnMouse);
+	CD_APPLET_LEAVE();
+}
+
+
+//\___________ Other notifications, that are not from the user (but from the Applications-manager)
+static void _check_dock_is_active (gchar *cDockName, CairoDock *pDock, Window *data)
+{
+	Window xActiveWindow = data[0];
+	if (gldi_container_get_Xid (CAIRO_CONTAINER (pDock)) == xActiveWindow)
+		data[1] = 1;
+}
+gboolean cd_app_menu_on_active_window_changed (CairoDockModuleInstance *myApplet, Window *XActiveWindow)
+{
+	if (XActiveWindow == NULL)
+		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	
+	// check if a dock has the focus (we don't want to control the dock, it wouldn't make sense anyway).
+	/// TODO: check each container...
+	Window data[2] = {*XActiveWindow, 0};
+	cairo_dock_foreach_docks ((GHFunc) _check_dock_is_active, data);
+	
+	if (data[1] == 0)  // not a dock, so let's take it.
+	{
+		// take this new window (possibly 0).
+		cd_app_menu_set_current_window (*XActiveWindow);
+	}
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+gboolean cd_app_menu_on_state_changed (CairoDockModuleInstance *myApplet, Icon *pIcon, gboolean bHiddenChanged, gboolean bMaximizedChanged, gboolean bFullScreenChanged)
+{
+	if (pIcon && pIcon->Xid == myData.iCurrentWindow)
+	{
+		if (bMaximizedChanged)
+		{
+			cd_app_menu_set_window_border (pIcon->Xid, ! pIcon->bIsMaximized);
+			cd_app_menu_redraw_buttons ();
+		}
+	}
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+gboolean cd_app_menu_on_name_changed (CairoDockModuleInstance *myApplet, Icon *pIcon)
+{
+	if (pIcon && pIcon->Xid == myData.iCurrentWindow)
+	{
+		CD_APPLET_SET_NAME_FOR_MY_ICON (pIcon->cName);
+	}
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+gboolean cd_app_menu_on_new_appli (CairoDockModuleInstance *myApplet, Icon *pIcon)
+{
+	if (pIcon && pIcon->bIsMaximized)
+	{
+		cd_app_menu_set_window_border (pIcon->Xid, ! pIcon->bIsMaximized);
+	}
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+/**gboolean cd_app_menu_on_property_changed (CairoDockModuleInstance *myApplet, Window Xid, Atom aProperty, int iState)
+{
+	if (Xid != 0 && Xid == myData.iCurrentWindow)
+	{
+		Display *dpy = cairo_dock_get_Xdisplay();
+		Atom aNetWmState = XInternAtom (dpy, "_NET_WM_STATE", False);
+		Atom s_aNetWmName = XInternAtom (dpy, "_NET_WM_NAME", False);
+		Atom s_aWmName = XInternAtom (dpy, "WM_NAME", False);
+		if (aProperty == aNetWmState)
+		{
+			Icon *icon = cairo_dock_get_icon_with_Xid (Xid);
+			if (icon)
+				cd_app_menu_set_window_border (Xid, ! icon->bIsMaximized);
+			// update the icon to reflect the change of state (max/restore button)
+			cd_app_menu_redraw_buttons ();
+		}
+		else if (iState == PropertyNewValue && (aProperty == s_aNetWmName || aProperty == s_aWmName))
+		{
+			Icon *icon = cairo_dock_get_icon_with_Xid (Xid);
+			CD_APPLET_SET_NAME_FOR_MY_ICON (icon ? icon->cName : NULL);
+		}  // ignore the change of icon, we just want to use the default application icon.
+	}
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}*/
+
+
+//\___________ Other notifications, for animation of the buttons.
+
+gboolean on_mouse_moved (CairoDockModuleInstance *myApplet, CairoContainer *pContainer, gboolean *bStartAnimation)
+{
+	CD_APPLET_ENTER;
+	if (! myIcon->bPointed || ! pContainer->bInside)
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	
+	// find the pointed button
+	int iNumButton = cd_app_menu_find_button (myApplet);
+	if (iNumButton >= 0 && iNumButton < myData.iNbButtons)
+	{
+		// trigger animation
+		*bStartAnimation = TRUE;
+	}
+	
+	CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
+}
+
+
+gboolean cd_app_menu_on_update_container (CairoDockModuleInstance *myApplet, CairoContainer *pContainer, gboolean *bContinueAnimation)
+{
+	CD_APPLET_ENTER;
+	int iNumButton = 0;
+	if (! myIcon->bPointed || ! pContainer->bInside)  // our icon is not pointed, only update it to finish the current button animations.
+	{
+		if (myData.bButtonAnimating)  // one or more button is animating.
+		{
+			myData.bButtonAnimating = FALSE;
+			
+			if (cairo_dock_image_buffer_is_animated (&myData.minimizeButton))
+			{
+				if (iNumButton == CD_BUTTON_MINIMIZE || myData.minimizeButton.iCurrentFrame != 0)
+					cairo_dock_image_buffer_next_frame (&myData.minimizeButton);
+				myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MINIMIZE || myData.minimizeButton.iCurrentFrame != 0);
+			}
+			else
+			{
+				if (iNumButton == CD_BUTTON_MINIMIZE || myData.iAnimIterMin != 0)
+				{
+					myData.iAnimIterMin ++;
+					if (myData.iAnimIterMin >= CD_ANIM_STEPS)
+						myData.iAnimIterMin = 0;
+				}
+				myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MINIMIZE || myData.iAnimIterMin != 0);
+			}
+			
+			if (cairo_dock_image_buffer_is_animated (&myData.maximizeButton))
+			{
+				if (iNumButton == CD_BUTTON_MAXIMIZE || myData.maximizeButton.iCurrentFrame != 0)
+				{
+					cairo_dock_image_buffer_next_frame (&myData.maximizeButton);
+					cairo_dock_image_buffer_next_frame (&myData.restoreButton);
+				}
+				myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MAXIMIZE || myData.maximizeButton.iCurrentFrame != 0);
+			}
+			else
+			{
+				if (iNumButton == CD_BUTTON_MAXIMIZE || myData.iAnimIterMax != 0)
+				{
+					myData.iAnimIterMax ++;
+					if (myData.iAnimIterMax >= CD_ANIM_STEPS)
+						myData.iAnimIterMax = 0;
+				}
+				myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MAXIMIZE || myData.iAnimIterMax != 0);
+			}
+			
+			if (cairo_dock_image_buffer_is_animated (&myData.closeButton))
+			{
+				if (iNumButton == CD_BUTTON_CLOSE || myData.closeButton.iCurrentFrame != 0)
+					cairo_dock_image_buffer_next_frame (&myData.closeButton);
+				myData.bButtonAnimating |= (iNumButton == CD_BUTTON_CLOSE || myData.closeButton.iCurrentFrame != 0);
+			}
+			else
+			{
+				if (iNumButton == CD_BUTTON_CLOSE || myData.iAnimIterClose != 0)
+				{
+					myData.iAnimIterClose ++;
+					if (myData.iAnimIterClose >= CD_ANIM_STEPS)
+						myData.iAnimIterClose = 0;
+				}
+				myData.bButtonAnimating |= (iNumButton == CD_BUTTON_CLOSE || myData.iAnimIterClose != 0);
+			}
+			
+			cd_app_menu_redraw_buttons ();
+			*bContinueAnimation = myData.bButtonAnimating;
+		}
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	}
+	
+	iNumButton = cd_app_menu_find_button (myApplet);
+	myData.bButtonAnimating = FALSE;
+	
+	if (cairo_dock_image_buffer_is_animated (&myData.minimizeButton))
+	{
+		if (iNumButton == CD_BUTTON_MINIMIZE || myData.minimizeButton.iCurrentFrame != 0)
+			cairo_dock_image_buffer_next_frame (&myData.minimizeButton);
+		myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MINIMIZE || myData.minimizeButton.iCurrentFrame != 0);
+	}
+	else
+	{
+		if (iNumButton == CD_BUTTON_MINIMIZE || myData.iAnimIterMin != 0)
+		{
+			myData.iAnimIterMin ++;
+			if (myData.iAnimIterMin >= CD_ANIM_STEPS)
+				myData.iAnimIterMin = 0;
+		}
+		myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MINIMIZE || myData.iAnimIterMin != 0);
+	}
+	
+	if (cairo_dock_image_buffer_is_animated (&myData.maximizeButton))
+	{
+		if (iNumButton == CD_BUTTON_MAXIMIZE || myData.maximizeButton.iCurrentFrame != 0)
+		{
+			cairo_dock_image_buffer_next_frame (&myData.maximizeButton);
+			cairo_dock_image_buffer_next_frame (&myData.restoreButton);
+		}
+		myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MAXIMIZE || myData.maximizeButton.iCurrentFrame != 0);
+	}
+	else
+	{
+		if (iNumButton == CD_BUTTON_MAXIMIZE || myData.iAnimIterMax != 0)
+		{
+			myData.iAnimIterMax ++;
+			if (myData.iAnimIterMax >= CD_ANIM_STEPS)
+				myData.iAnimIterMax = 0;
+		}
+		myData.bButtonAnimating |= (iNumButton == CD_BUTTON_MAXIMIZE || myData.iAnimIterMax != 0);
+	}
+	
+	if (cairo_dock_image_buffer_is_animated (&myData.closeButton))
+	{
+		if (iNumButton == CD_BUTTON_CLOSE || myData.closeButton.iCurrentFrame != 0)
+			cairo_dock_image_buffer_next_frame (&myData.closeButton);
+		myData.bButtonAnimating |= (iNumButton == CD_BUTTON_CLOSE || myData.closeButton.iCurrentFrame != 0);
+	}
+	else
+	{
+		if (iNumButton == CD_BUTTON_CLOSE || myData.iAnimIterClose != 0)
+		{
+			myData.iAnimIterClose ++;
+			if (myData.iAnimIterClose >= CD_ANIM_STEPS)
+				myData.iAnimIterClose = 0;
+		}
+		myData.bButtonAnimating |= (iNumButton == CD_BUTTON_CLOSE || myData.iAnimIterClose != 0);
+	}
+	
+	cd_app_menu_redraw_buttons ();
+	*bContinueAnimation = myData.bButtonAnimating;
+	CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
+}

=== added file 'Global-Menu/src/applet-notifications.h'
--- Global-Menu/src/applet-notifications.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-notifications.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,58 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __APPLET_NOTIFICATIONS__
+#define  __APPLET_NOTIFICATIONS__
+
+#include <cairo-dock.h>
+
+
+CD_APPLET_ON_CLICK_H
+
+
+CD_APPLET_ON_MIDDLE_CLICK_H
+
+
+CD_APPLET_ON_SCROLL_H
+
+
+CD_APPLET_ON_DOUBLE_CLICK_H
+
+
+CD_APPLET_ON_BUILD_MENU_H
+
+void cd_app_menu_on_keybinding_pull (const gchar *keystring, CairoDockModuleInstance *myApplet);
+
+gboolean on_mouse_moved (CairoDockModuleInstance *myApplet, CairoContainer *pContainer, gboolean *bStartAnimation);
+
+
+gboolean cd_app_menu_on_active_window_changed (CairoDockModuleInstance *myApplet, Window *XActiveWindow);
+
+gboolean cd_app_menu_on_state_changed (CairoDockModuleInstance *myApplet, Icon *pIcon, gboolean bHiddenChanged, gboolean bMaximizedChanged, gboolean bFullScreenChanged);
+
+gboolean cd_app_menu_on_name_changed (CairoDockModuleInstance *myApplet, Icon *pIcon);
+
+gboolean cd_app_menu_on_new_appli (CairoDockModuleInstance *myApplet, Icon *pIcon);
+
+///gboolean cd_app_menu_on_property_changed (CairoDockModuleInstance *myApplet, Window Xid, Atom aProperty, int iState);
+
+
+gboolean cd_app_menu_on_update_container (CairoDockModuleInstance *myApplet, CairoContainer *pContainer, gboolean *bContinueAnimation);
+
+#endif

=== added file 'Global-Menu/src/applet-struct.h'
--- Global-Menu/src/applet-struct.h	1970-01-01 00:00:00 +0000
+++ Global-Menu/src/applet-struct.h	2012-02-14 14:04:19 +0000
@@ -0,0 +1,90 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail    : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __CD_APPLET_STRUCT__
+#define  __CD_APPLET_STRUCT__
+
+#include <cairo-dock.h>
+#include <gtk/gtk.h>
+
+#if (GTK_MAJOR_VERSION < 3) || defined (DBUSMENU_GTK3_NEW)
+#include <libdbusmenu-gtk/menuitem.h>
+#include <libdbusmenu-gtk/menu.h>
+#else
+#include <libdbusmenu-gtk3/menuitem.h>
+#include <libdbusmenu-gtk3/menu.h>
+#endif
+
+typedef enum {
+	CD_BUTTON_MENU,
+	CD_BUTTON_MINIMIZE,
+	CD_BUTTON_MAXIMIZE,
+	CD_BUTTON_CLOSE,
+	CD_NB_BUTTONS
+	} CDButtonEnum;
+
+typedef enum {
+	CD_GM_BUTTON_ORDER_AUTO,
+	CD_GM_BUTTON_ORDER_RIGHT,
+	CD_GM_BUTTON_ORDER_LEFT
+	} CDGMReversedMenu; 
+
+//\___________ structure containing the applet's configuration parameters.
+struct _AppletConfig {
+	gboolean bDisplayControls;  // steal the window top border
+	gboolean bDisplayMenu;  // steal the menu from the window
+	gboolean bCompactMode;  // TRUE = if bDisplayControls, display all control buttons on the icon
+	gint iButtonsOrder;  // Buttons' order (auto / right / left)
+	gchar *cShortkey;  // if bDisplayMenu, shortkey to pop up the menu
+	gboolean bMenuOnMouse;
+	gint iTransitionDuration;  // ms
+	gchar *cMinimizeImage;
+	gchar *cMaximizeImage;
+	gchar *cRestoreImage;
+	gchar *cCloseImage;
+	} ;
+
+//\___________ structure containing the applet's data, like surfaces, dialogs, results of calculus, etc.
+#define CD_ANIM_STEPS 15
+
+struct _AppletData {
+	DBusGProxy *pProxyRegistrar;
+	gboolean bOwnRegistrar;
+	Window iPreviousWindow, iCurrentWindow;  // window currently controlled.
+	gboolean bCanClose;
+	gboolean bCanMinimize;
+	gboolean bCanMaximize;
+	DbusmenuGtkMenu *pMenu;
+	CairoKeyBinding *pKeyBinding;
+	CairoDockImageBuffer defaultIcon;
+	CairoDockImageBuffer minimizeButton;
+	CairoDockImageBuffer maximizeButton;
+	CairoDockImageBuffer restoreButton;
+	CairoDockImageBuffer closeButton;
+	gint iAnimIterMin, iAnimIterMax, iAnimIterClose;
+	gboolean bButtonAnimating;
+	guint iSidInitIdle;
+	guint iSidInitIdle2;
+	CairoDockTask *pTask;
+	gint iNbButtons;
+	GHashTable *windows;
+	gboolean bReversedButtonsOrder;
+	} ;
+
+#endif

=== modified file 'Impulse/data/Impulse.conf.in' (properties changed: +x to -x)
--- Impulse/data/Impulse.conf.in	2011-09-26 12:56:12 +0000
+++ Impulse/data/Impulse.conf.in	2012-02-14 14:04:19 +0000
@@ -12,7 +12,7 @@
 #v
 sep_display=
 
-#S+ Image filename:
+#S+[Default] Image filename:
 #{Leave empty to use the default one.}
 icon =
 
@@ -58,7 +58,6 @@
 #b Is detached from the dock
 initially detached=false
 #l[Normal;Keep above;Keep below;Keep on widget layer;Reserve space] Visibility:
-#{for CompizFusion's "widget layer", set behaviour in Compiz to: (class=Cairo-dock & type=Utility)}
 accessibility=0
 #b Should be visible on all desktops?
 sticky=true

=== modified file 'Impulse/src/CMakeLists.txt'
--- Impulse/src/CMakeLists.txt	2011-08-09 18:08:08 +0000
+++ Impulse/src/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -25,18 +25,25 @@
 #add_definitions (-DCD_APPLET_MULTI_INSTANCE="1")
 ### uncomment the following line to allow extended OpenGL drawing.
 #add_definitions (-DGL_GLEXT_PROTOTYPES="1")
+if (${FFTW3_FOUND})
+	message (STATUS "   With FFTW3 support")
+	add_definitions (-DFFT_IS_AVAILABLE="1")
+endif()
 
 include_directories (
 	${PACKAGE_INCLUDE_DIRS}
-	${IMPULSE_PACKAGES_INCLUDE_DIRS})
+	${FFTW3_INCLUDE_DIRS}
+	${LIBPULSE_INCLUDE_DIRS})
 
 link_directories (
 	${PACKAGE_LIBRARY_DIRS}
-	${IMPULSE_PACKAGES_LIBRARY_DIRS})
+	${FFTW3_LIBRARY_DIRS}
+	${LIBPULSE_LIBRARY_DIRS})
 
 target_link_libraries (${PACKAGE_IMPULSE}
 	${PACKAGE_LIBRARIES}
-	${IMPULSE_PACKAGES_LIBRARIES})
+	${FFTW3_LIBRARIES}
+	${LIBPULSE_LIBRARIES})
 
 ########### install files ###############
 

=== modified file 'Impulse/src/Impulse.c'
--- Impulse/src/Impulse.c	2011-09-26 12:56:12 +0000
+++ Impulse/src/Impulse.c	2012-02-14 14:04:19 +0000
@@ -2,6 +2,8 @@
  *
  *+  Copyright (c) 2009 Ian Halpern
  *@  http://impulse.ian-halpern.com
+ *+  Copyright (c) 2011-2012 Matthieu Baerts (Cairo-Dock Project)
+ *@  http://glx-dock.org
  *
  *   This file is part of Impulse.
  *
@@ -23,14 +25,21 @@
 #include <assert.h>
 #include <string.h>
 #include <stdint.h>
+#include <stdio.h>
+#ifdef FFT_IS_AVAILABLE
 #include <fftw3.h>
+#endif
 #include <math.h>
 
 #include "Impulse.h"
 
 #define CHUNK 1024
 
-static const long fft_max[] = { 12317168L, 7693595L, 5863615L, 4082974L, 5836037L, 4550263L, 3377914L, 3085778L, 3636534L, 3751823L, 2660548L, 3313252L, 2698853L, 2186441L, 1697466L, 1960070L, 1286950L, 1252382L, 1313726L, 1140443L, 1345589L, 1269153L, 897605L, 900408L, 892528L, 587972L, 662925L, 668177L, 686784L, 656330L, 1580286L, 785491L, 761213L, 730185L, 851753L, 927848L, 891221L, 634291L, 833909L, 646617L, 804409L, 1015627L, 671714L, 813811L, 689614L, 727079L, 853936L, 819333L, 679111L, 730295L, 836287L, 1602396L, 990827L, 773609L, 733606L, 638993L, 604530L, 573002L, 634570L, 1015040L, 679452L, 672091L, 880370L, 1140558L, 1593324L, 686787L, 781368L, 605261L, 1190262L, 525205L, 393080L, 409546L, 436431L, 723744L, 765299L, 393927L, 322105L, 478074L, 458596L, 512763L, 381303L, 671156L, 1177206L, 476813L, 366285L, 436008L, 361763L, 252316L, 204433L, 291331L, 296950L, 329226L, 319209L, 258334L, 388701L, 543025L, 396709L, 296099L, 190213L, 167976L, 138928L, 116720L, 163538L, 331761L, 133932L, 187456L, 530630L, 131474L, 84888L, 82081L, 122379L, 82914L, 75510L, 62669L, 73492L, 68775L, 57121L, 94098L, 68262L, 68307L, 48801L, 46864L, 61480L, 46607L, 45974L, 45819L, 45306L, 45110L, 45175L, 44969L, 44615L, 44440L, 44066L, 43600L, 57117L, 43332L, 59980L, 55319L, 54385L, 81768L, 51165L, 54785L, 73248L, 52494L, 57252L, 61869L, 65900L, 75893L, 65152L, 108009L, 421578L, 152611L, 135307L, 254745L, 132834L, 169101L, 137571L, 141159L, 142151L, 211389L, 267869L, 367730L, 256726L, 185238L, 251197L, 204304L, 284443L, 258223L, 158730L, 228565L, 375950L, 294535L, 288708L, 351054L, 694353L, 477275L, 270576L, 426544L, 362456L, 441219L, 313264L, 300050L, 421051L, 414769L, 244296L, 292822L, 262203L, 418025L, 579471L, 418584L, 419449L, 405345L, 739170L, 488163L, 376361L, 339649L, 313814L, 430849L, 275287L, 382918L, 297214L, 286238L, 367684L, 303578L, 516246L, 654782L, 353370L, 417745L, 392892L, 418934L, 475608L, 284765L, 260639L, 288961L, 301438L, 301305L, 329190L, 252484L, 272364L, 261562L, 208419L, 203045L, 229716L, 191240L, 328251L, 267655L, 322116L, 509542L, 498288L, 341654L, 346341L, 451042L, 452194L, 467716L, 447635L, 644331L, 1231811L, 1181923L, 1043922L, 681166L, 1078456L, 1088757L, 1221378L, 1358397L, 1817252L, 1255182L, 1410357L, 2264454L, 1880361L, 1630934L, 1147988L, 1919954L, 1624734L, 1373554L, 1865118L, 2431931L };
+#ifdef FFT_IS_AVAILABLE
+static const long s_fft_max[] = { 12317168L, 7693595L, 5863615L, 4082974L, 5836037L, 4550263L, 3377914L, 3085778L, 3636534L, 3751823L, 2660548L, 3313252L, 2698853L, 2186441L, 1697466L, 1960070L, 1286950L, 1252382L, 1313726L, 1140443L, 1345589L, 1269153L, 897605L, 900408L, 892528L, 587972L, 662925L, 668177L, 686784L, 656330L, 1580286L, 785491L, 761213L, 730185L, 851753L, 927848L, 891221L, 634291L, 833909L, 646617L, 804409L, 1015627L, 671714L, 813811L, 689614L, 727079L, 853936L, 819333L, 679111L, 730295L, 836287L, 1602396L, 990827L, 773609L, 733606L, 638993L, 604530L, 573002L, 634570L, 1015040L, 679452L, 672091L, 880370L, 1140558L, 1593324L, 686787L, 781368L, 605261L, 1190262L, 525205L, 393080L, 409546L, 436431L, 723744L, 765299L, 393927L, 322105L, 478074L, 458596L, 512763L, 381303L, 671156L, 1177206L, 476813L, 366285L, 436008L, 361763L, 252316L, 204433L, 291331L, 296950L, 329226L, 319209L, 258334L, 388701L, 543025L, 396709L, 296099L, 190213L, 167976L, 138928L, 116720L, 163538L, 331761L, 133932L, 187456L, 530630L, 131474L, 84888L, 82081L, 122379L, 82914L, 75510L, 62669L, 73492L, 68775L, 57121L, 94098L, 68262L, 68307L, 48801L, 46864L, 61480L, 46607L, 45974L, 45819L, 45306L, 45110L, 45175L, 44969L, 44615L, 44440L, 44066L, 43600L, 57117L, 43332L, 59980L, 55319L, 54385L, 81768L, 51165L, 54785L, 73248L, 52494L, 57252L, 61869L, 65900L, 75893L, 65152L, 108009L, 421578L, 152611L, 135307L, 254745L, 132834L, 169101L, 137571L, 141159L, 142151L, 211389L, 267869L, 367730L, 256726L, 185238L, 251197L, 204304L, 284443L, 258223L, 158730L, 228565L, 375950L, 294535L, 288708L, 351054L, 694353L, 477275L, 270576L, 426544L, 362456L, 441219L, 313264L, 300050L, 421051L, 414769L, 244296L, 292822L, 262203L, 418025L, 579471L, 418584L, 419449L, 405345L, 739170L, 488163L, 376361L, 339649L, 313814L, 430849L, 275287L, 382918L, 297214L, 286238L, 367684L, 303578L, 516246L, 654782L, 353370L, 417745L, 392892L, 418934L, 475608L, 284765L, 260639L, 288961L, 301438L, 301305L, 329190L, 252484L, 272364L, 261562L, 208419L, 203045L, 229716L, 191240L, 328251L, 267655L, 322116L, 509542L, 498288L, 341654L, 346341L, 451042L, 452194L, 467716L, 447635L, 644331L, 1231811L, 1181923L, 1043922L, 681166L, 1078456L, 1088757L, 1221378L, 1358397L, 1817252L, 1255182L, 1410357L, 2264454L, 1880361L, 1630934L, 1147988L, 1919954L, 1624734L, 1373554L, 1865118L, 2431931L };
+#else
+#define MAXVALUE 32768 // 2^15
+#endif
 
 static uint32_t source_index = 0;
 static int context_ready = 0;
@@ -208,53 +217,65 @@
 		init_source_stream_for_recording();
 }
 
-double *im_getSnapshot( int fft ) {
-
-	static double magnitude[ CHUNK / 4 ];
-
-	if ( ! fft ) {
-		int i;
-		for ( i = 0; i < CHUNK / 2; i += sample_spec.channels ) {
-			magnitude[ i / sample_spec.channels ] = 0;
-			int j;
-			for ( j = 0; j < sample_spec.channels; j++ )
-				magnitude[ i / sample_spec.channels ] += fabs( ( (double) snapshot[ i + j ] / ( pow( 2, 16 ) / 2 ) ) / sample_spec.channels );
-		}
-	} else {
-
-		double *in;
-		fftw_complex *out;
-		fftw_plan p;
-
-		in = (double*) malloc( sizeof( double ) * ( CHUNK / 2 ) );
-		out = (fftw_complex*) fftw_malloc( sizeof( fftw_complex ) * ( CHUNK / 2 ) );
-
-		if ( snapshot != NULL ) {
-			int i;
-			for ( i = 0; i < CHUNK / 2; i++ ) {
-				in[ i ] = (double) snapshot[ i ];
-			}
-		}
-
-		p = fftw_plan_dft_r2c_1d( CHUNK / 2, in, out, 0 );
-
-		fftw_execute( p );
-
-		fftw_destroy_plan( p );
-
-		if ( out != NULL ) {
-			int i;
-			for ( i = 0; i < CHUNK / 2 / sample_spec.channels; i++ ) {
-				magnitude[ i ] = (double) sqrt( pow( out[ i ][ 0 ], 2 ) + pow( out[ i ][ 1 ], 2 ) ) / (double) fft_max[ i ];
-				if ( magnitude[ i ] > 1.0 ) magnitude[ i ] = 1.0;
-			}
-		}
-
-		free( in );
-		fftw_free(out);
-	}
-
-	return magnitude; // PyString_FromStringAndSize( (char *) snapshot, CHUNK );
+double *im_getSnapshot (void)
+{
+	static double magnitude [CHUNK / 4];
+
+#ifdef FFT_IS_AVAILABLE
+	double *in;
+	fftw_complex *out;
+	fftw_plan p;
+
+	in = (double*) malloc( sizeof( double ) * ( CHUNK / 2 ) );
+	out = (fftw_complex*) fftw_malloc( sizeof( fftw_complex ) * ( CHUNK / 2 ) );
+
+	if (snapshot != NULL)
+	{
+		int i;
+		for (i = 0; i < CHUNK / 2; i++)
+		{
+			in[ i ] = (double) snapshot[ i ];
+		}
+	}
+
+	p = fftw_plan_dft_r2c_1d( CHUNK / 2, in, out, 0 );
+
+	fftw_execute( p );
+
+	fftw_destroy_plan( p );
+
+	if (out != NULL)
+	{
+		int i;
+		for (i = 0; i < CHUNK / 2 / sample_spec.channels; i++)
+		{
+			magnitude[ i ] = (double) sqrt( pow( out[ i ][ 0 ], 2 ) + pow( out[ i ][ 1 ], 2 ) ) / s_fft_max[ i ];
+			if (magnitude[ i ] > 1.0 )
+				magnitude[ i ] = 1.0;
+		}
+	}
+
+	free( in );
+	fftw_free(out);
+#else
+	int i, iSnapshot, iCurrentMagnitude;
+	for (i = 0; i < CHUNK / 2; i += sample_spec.channels)
+	{
+		iCurrentMagnitude = i / sample_spec.channels; // 1 => 256 (= CHUNK / 2 / channels)
+		magnitude [iCurrentMagnitude] = 0; // init
+		for (int j = 0; j < sample_spec.channels; j++)
+		{
+			iSnapshot = snapshot [i + j];
+			if (iSnapshot > 0)
+				magnitude [iCurrentMagnitude] += (double) iSnapshot / MAXVALUE;
+		}
+		if (magnitude [iCurrentMagnitude] < 10e-5 && iCurrentMagnitude != 0)
+			magnitude [iCurrentMagnitude] = magnitude [iCurrentMagnitude - 1]; // strange to have 0...
+		magnitude [iCurrentMagnitude] = magnitude [iCurrentMagnitude] / sample_spec.channels / 1.75; // mean value / 1.66 => 
+	}
+#endif
+
+	return magnitude;
 }
 
 

=== modified file 'Impulse/src/Impulse.h'
--- Impulse/src/Impulse.h	2011-08-09 18:08:08 +0000
+++ Impulse/src/Impulse.h	2012-02-14 14:04:19 +0000
@@ -25,12 +25,12 @@
 #define IM_FAILED 0
 #define IM_SUCCESS 1
 
-double *im_getSnapshot( int fft );
-
-void im_setSourceIndex( uint32_t index );
-
-void im_start( void );
-
-void im_stop( void );
+double *im_getSnapshot (void);
+
+void im_setSourceIndex (uint32_t index);
+
+void im_start (void);
+
+void im_stop (void);
 
 int im_context_state (void);

=== modified file 'Impulse/src/applet-impulse.c'
--- Impulse/src/applet-impulse.c	2011-10-03 15:13:15 +0000
+++ Impulse/src/applet-impulse.c	2012-02-14 14:04:19 +0000
@@ -93,7 +93,7 @@
 
 	guint iIcons = IM_TAB_SIZE / g_list_length (myData.pSharedMemory->pIconsList); // number of icons (without separators)
 
-	double *array = im_getSnapshot(IM_FFT);
+	double *array = im_getSnapshot();
 
 	// we check if there is a signal (most of the time, all values are > 0)
 	if (array[0] == 0.0)
@@ -304,11 +304,12 @@
 
 		if (myConfig.bFree) // It's maybe a hack but Cairo-Penguin does that :)
 		{
-			cairo_dock_detach_icon_from_dock (myIcon, myDock, myIconsParam.iSeparateIcons);
-			cairo_dock_update_dock_size (myDock);
+			cairo_dock_detach_icon_from_dock (myIcon, myDock);
 		}
 		else
-			cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
+		{
+			cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_ANIMATE_ICON);
+		}
 
 		cd_impulse_launch_task (); // launched the animations
 	}

=== modified file 'Impulse/src/applet-init.c'
--- Impulse/src/applet-init.c	2011-08-09 18:08:08 +0000
+++ Impulse/src/applet-init.c	2012-02-14 14:04:19 +0000
@@ -126,11 +126,12 @@
 		// if the icon has to be destroyed
 		if (myConfig.bLaunchAtStartup && myConfig.bFree)
 		{
-			cairo_dock_detach_icon_from_dock (myIcon, myDock, myIconsParam.iSeparateIcons);
-			cairo_dock_update_dock_size (myDock);
+			cairo_dock_detach_icon_from_dock (myIcon, myDock);
 		}
 		else
-			cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
+		{
+			cairo_dock_insert_icon_in_dock (myIcon, myDock, CAIRO_DOCK_ANIMATE_ICON);
+		}
 
 		if (bWasLaunched || (myConfig.bLaunchAtStartup && myConfig.bFree)) // maybe the time has changed... or if it's automatically launched
 			cd_impulse_launch_task ();

=== modified file 'Impulse/src/applet-notifications.c'
--- Impulse/src/applet-notifications.c	2011-08-09 18:08:08 +0000
+++ Impulse/src/applet-notifications.c	2012-02-14 14:04:19 +0000
@@ -53,6 +53,5 @@
 
 //\___________ Define here the entries you want to add to the menu when the user right-clicks on your icon or on its subdock or your desklet. The icon and the container that were clicked are available through the macros CD_APPLET_CLICKED_ICON and CD_APPLET_CLICKED_CONTAINER. CD_APPLET_CLICKED_ICON may be NULL if the user clicked in the container but out of icons. The menu where you can add your entries is available throught the macro CD_APPLET_MY_MENU; you can add sub-menu to it if you want.
 CD_APPLET_ON_BUILD_MENU_BEGIN
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	
 CD_APPLET_ON_BUILD_MENU_END

=== modified file 'Indicator-applet/CMakeLists.txt'
--- Indicator-applet/CMakeLists.txt	2011-04-20 20:46:51 +0000
+++ Indicator-applet/CMakeLists.txt	2012-02-14 14:04:19 +0000
@@ -8,6 +8,9 @@
 # Needed for amd64 architecture
 add_definitions (-fPIC)
 add_definitions (-DINDICATOR_ICONS_DIR="${INDICATORICONSDIR}")
+if (DBUSMENU_GTK3_NEW)
+	add_definitions (-DDBUSMENU_GTK3_NEW=1)
+endif()
 
 link_directories(
 	${PACKAGE_LIBRARY_DIRS}

=== modified file 'Indicator-applet/indicator-applet.c'
--- Indicator-applet/indicator-applet.c	2011-10-03 15:13:15 +0000
+++ Indicator-applet/indicator-applet.c	2012-02-14 14:04:19 +0000
@@ -25,10 +25,15 @@
 
 #include "indicator-applet.h"
 
-#define INDICATOR_APPLET_DBUS_VERSION  1
-
 static gboolean s_bIndicatorIconThemeAdded = FALSE;
 
+static void _on_menu_destroyed (CDAppletIndicator *pIndicator, GObject *old_menu_pointer)
+{
+	g_print (" --------- no more menu (%p / %p\n", old_menu_pointer, pIndicator->pMenu);
+	if (old_menu_pointer == (GObject*)pIndicator->pMenu)
+		pIndicator->pMenu = NULL;
+}
+
 static void _cd_indicator_make_menu (CDAppletIndicator *pIndicator)
 {
 	if (pIndicator->pMenu == NULL)
@@ -36,6 +41,10 @@
 		pIndicator->pMenu = dbusmenu_gtkmenu_new ((gchar*)pIndicator->cBusName, (gchar*)pIndicator->cMenuObject);  // the cast is unorthodox, but the function definition is clumsy (it should require 2 const gchar*, since it actually duplicates the strings).
 		if (pIndicator->pMenu != NULL)
 		{
+			g_object_ref_sink (G_OBJECT (pIndicator->pMenu));
+			g_object_weak_ref (G_OBJECT (pIndicator->pMenu),
+				(GWeakNotify)_on_menu_destroyed,
+				pIndicator);
 			DbusmenuGtkClient * client = dbusmenu_gtkmenu_get_client (pIndicator->pMenu);
 			
 			if (pIndicator->add_menu_handler)
@@ -57,46 +66,69 @@
 	CairoDockModuleInstance *myApplet = pIndicator->pApplet;
 	if (connected)
 	{
-		// connect to the service.
-		if (pIndicator->pServiceProxy == NULL)
+		if (!pIndicator->bConnected)
 		{
-			GError * error = NULL;
-			DBusGConnection * sbus = cairo_dock_get_session_connection ();
-			pIndicator->pServiceProxy = dbus_g_proxy_new_for_name_owner(sbus,
-				pIndicator->cBusName,
-				pIndicator->cServiceObject,
-				pIndicator->cServiceInterface,
-				&error);
-			if (error != NULL)
-			{
-				cd_warning ("'%s' service not found on the bus : %s", pIndicator->cServiceObject, error->message);
-				g_error_free(error);
-			}
+			// connect to the service.
 			if (pIndicator->pServiceProxy == NULL)
-				return;
-			
-			if (pIndicator->on_connect)
-				pIndicator->on_connect (myApplet);
+			{
+				GError * error = NULL;
+				DBusGConnection * sbus = cairo_dock_get_session_connection ();
+				pIndicator->pServiceProxy = dbus_g_proxy_new_for_name_owner(sbus,
+					pIndicator->cBusName,
+					pIndicator->cServiceObject,
+					pIndicator->cServiceInterface,
+					&error);
+				if (error != NULL)
+				{
+					cd_warning ("'%s' service not found on the bus : %s", pIndicator->cServiceObject, error->message);
+					g_error_free(error);
+				}
+				if (pIndicator->pServiceProxy == NULL)
+					return;
+				
+				if (pIndicator->on_connect)
+					pIndicator->on_connect (myApplet);
+			}
+			
+			// query the service to display initial values.
+			if (pIndicator->get_initial_values)
+				pIndicator->get_initial_values (myApplet);
+			
+			pIndicator->iSidGetMenuOnce = g_idle_add ((GSourceFunc)_get_menu_once, pIndicator);
+			pIndicator->bConnected = TRUE;
 		}
-		
-		// query the service to display initial values.
-		if (pIndicator->get_initial_values)
-			pIndicator->get_initial_values (myApplet);
-		
-		pIndicator->iSidGetMenuOnce = g_idle_add ((GSourceFunc)_get_menu_once, pIndicator);
-		pIndicator->bConnected = TRUE;
 	}
 	else  // If we're disconnecting, go back to offline.
 	{
-		if (pIndicator->on_disconnect)
-			pIndicator->on_disconnect (myApplet);
-		pIndicator->bConnected = FALSE;
+		if (pIndicator->bConnected)
+		{
+			if (pIndicator->on_disconnect)
+				pIndicator->on_disconnect (myApplet);
+			if (pIndicator->pMenu)
+			{
+				g_print ("destroy menu...\n");
+				g_object_unref (pIndicator->pMenu);
+				g_print ("done.\n");
+				pIndicator->pMenu = NULL;
+			}
+			pIndicator->bConnected = FALSE;
+		}
 	}
 
 	return;
 }
 
-CDAppletIndicator *cd_indicator_new (CairoDockModuleInstance *pApplet, const gchar *cBusName, const gchar *cServiceObject, const gchar *cServiceInterface, const gchar *cMenuObject)
+static gboolean _check_indicator (CDAppletIndicator *pIndicator)
+{
+	CairoDockModuleInstance *myApplet = pIndicator->pApplet;
+	if (!pIndicator->bConnected && pIndicator->on_disconnect)
+		pIndicator->on_disconnect (myApplet);
+		
+	pIndicator->iSidCheckIndicator = 0;
+	return FALSE;
+}
+
+CDAppletIndicator *cd_indicator_new (CairoDockModuleInstance *pApplet, const gchar *cBusName, const gchar *cServiceObject, const gchar *cServiceInterface, const gchar *cMenuObject, int iVersion)
 {
 	if (!s_bIndicatorIconThemeAdded)
 	{
@@ -111,9 +143,12 @@
 	pIndicator->cServiceInterface = cServiceInterface;
 	pIndicator->cMenuObject = cMenuObject;
 	
-	pIndicator->service = indicator_service_manager_new_version ((gchar*)cBusName, INDICATOR_APPLET_DBUS_VERSION);
+	pIndicator->service = indicator_service_manager_new_version ((gchar*)cBusName, iVersion);
 	g_signal_connect (G_OBJECT(pIndicator->service), INDICATOR_SERVICE_MANAGER_SIGNAL_CONNECTION_CHANGE, G_CALLBACK(connection_changed), pIndicator);  // on sera appele une fois la connexion etablie.  // pour le cast, cf plus haut.
 	
+	// indicators don't send the 'connection-change' signal if the connection couldn't be done, so we have to handle this case ourselves.
+	pIndicator->iSidCheckIndicator = g_timeout_add_seconds (3, (GSourceFunc)_check_indicator, pIndicator);
+	
 	return pIndicator;
 }
 
@@ -124,6 +159,9 @@
 		return;
 	if (pIndicator->iSidGetMenuOnce != 0)
 		g_source_remove (pIndicator->iSidGetMenuOnce);
+	if (pIndicator->iSidCheckIndicator != 0)
+		g_source_remove (pIndicator->iSidCheckIndicator);
+	pIndicator->on_disconnect = NULL;  // since the indicator has been explicitely destroyed, we don't want t

Follow ups