← Back to team overview

cairo-dock-team team mailing list archive

[Merge] lp:~cairo-dock-team/cairo-dock-plug-ins/ubuntu into lp:ubuntu/cairo-dock-plug-ins

 

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

Requested reviews:
  Cairo-Dock Team (cairo-dock-team)
Related bugs:
  #449422 Cairo-Dock resize problem
  https://bugs.launchpad.net/bugs/449422
  #455261 Cannot Modify / Add Custom Launchers
  https://bugs.launchpad.net/bugs/455261
  #483963 Dustbin applet does not display trash on all volumes
  https://bugs.launchpad.net/bugs/483963
  #485159 Some applications have problem with Systray
  https://bugs.launchpad.net/bugs/485159
  #489349 showDesktop Applet only seems to work every second time you click on it.
  https://bugs.launchpad.net/bugs/489349
  #500677 xsession-errors log
  https://bugs.launchpad.net/bugs/500677
  #500979 shortcuts display order gets messed up
  https://bugs.launchpad.net/bugs/500979
  #519915 Create a cairo dock plugin
  https://bugs.launchpad.net/bugs/519915
  #521531 mail plugin crashes on Maildir
  https://bugs.launchpad.net/bugs/521531
  #521536 Please update cairo-dock-plug-ins to 2.1.3-3 version
  https://bugs.launchpad.net/bugs/521536
  #523447 MusicPlayer applet crashes on tracks with russians symbols
  https://bugs.launchpad.net/bugs/523447
  #526138 GMenu does not handle desktop file exec strings properly
  https://bugs.launchpad.net/bugs/526138
  #526742 The system monitor plugin and netspeed plugin inverts upside-down continuously
  https://bugs.launchpad.net/bugs/526742
  #531317 cairo-dock-plugins does not support prefix on make install
  https://bugs.launchpad.net/bugs/531317
  #531319 please check the version of cairo-dock when building the plugin
  https://bugs.launchpad.net/bugs/531319
  #537115 Click at the position where icon label was, the icon and dock still receive the event
  https://bugs.launchpad.net/bugs/537115
  #537943 Terminal applet shortkey behaviour
  https://bugs.launchpad.net/bugs/537943
  #538637 Trash applet doesn't create *.trashinfo files on Xfce
  https://bugs.launchpad.net/bugs/538637
  #568083 Please update Cairo-Dock to v2.1.3-10
  https://bugs.launchpad.net/bugs/568083
  #568258 [lucid] cannot start cairo-dock since last updates
  https://bugs.launchpad.net/bugs/568258
  #575178 music-player applet crashes on change songs automatically
  https://bugs.launchpad.net/bugs/575178
  #576647 Please update Cairo-Dock with the following patches
  https://bugs.launchpad.net/bugs/576647
  #582452 GMenu does not contain any applications
  https://bugs.launchpad.net/bugs/582452
  #604034 Change terminal tab's name lost the color
  https://bugs.launchpad.net/bugs/604034
  #614625 Please update cairo-dock to 2.2.0 version  
  https://bugs.launchpad.net/bugs/614625
  #616176 Dust Bin Hang and Incorrect Configuration
  https://bugs.launchpad.net/bugs/616176
  #632054 Please update cairo-dock-plug-ins to the latest 2.2.0 version
  https://bugs.launchpad.net/bugs/632054
  #638529 Please update cairo-dock to the final 2.2.0 version  
  https://bugs.launchpad.net/bugs/638529

-- 
The attached diff has been truncated due to its size.
https://code.launchpad.net/~cairo-dock-team/cairo-dock-plug-ins/ubuntu/+merge/35618
Your team Cairo-Dock Team is requested to review the proposed merge of lp:~cairo-dock-team/cairo-dock-plug-ins/ubuntu into lp:ubuntu/cairo-dock-plug-ins.
=== removed file 'Animated-icons/data/messages'
--- Animated-icons/data/messages	2010-08-07 01:43:25 +0000
+++ Animated-icons/data/messages	1970-01-01 00:00:00 +0000
@@ -1,192 +0,0 @@
-_("Global")
-
-_("Animations are triggered when hovering an icon only in OpenGL mode.")
-
-_("when hovering over an icon")
-
-_("Effects used:")
-
-_("Bounce")
-
-_("Rotate")
-
-_("Blink")
-
-_("Pulse")
-
-_("Wobbly")
-
-_("Wave")
-
-_("Spot")
-
-_("when clicking on an launcher")
-
-_("Effects used on launcher:")
-
-_("Bounce")
-
-_("Rotate")
-
-_("Blink")
-
-_("Pulse")
-
-_("Wobbly")
-
-_("Wave")
-
-_("Number of times the animation will play:")
-
-_("when clicking on an application")
-
-_("Effects used on applications:")
-
-_("Bounce")
-
-_("Rotate")
-
-_("Blink")
-
-_("Pulse")
-
-_("Wobbly")
-
-_("Wave")
-
-_("Number of times the animation will play:")
-
-_("when clicking on an applet")
-
-_("Effects used on applets:")
-
-_("Bounce")
-
-_("Rotate")
-
-_("Blink")
-
-_("Pulse")
-
-_("Wobbly")
-
-_("Wave")
-
-_("Number of times the animation will play:")
-
-_("Rotation")
-
-_("In ms.")
-
-_("Duration of the animation:")
-
-_("Repeat while icon is pointed to?")
-
-_("Type of mesh:")
-
-_("Normal")
-
-_("Cube")
-
-_("Capsule")
-
-_("Colour of the sheen:")
-
-_("Spot")
-
-_("In ms.")
-
-_("Duration of the animation:")
-
-_("Repeat while icon is pointed to?")
-
-_("Spot")
-
-_("Leave empty to use the default one.")
-
-_("Image for the spotlight:")
-
-_("Leave empty to use the default one.")
-
-_("Image for the front spotlight:")
-
-_("Spot colour:")
-
-_("Halo colour:")
-
-_("Rays")
-
-_("st color of gradation :")
-
-_("nd color of gradation :")
-
-_("Random colours?")
-
-_("Number of rays:")
-
-_("Ray size:")
-
-_("Ray speed:")
-
-_("Wobbly")
-
-_("Initial stretch:")
-
-_("Horizontal stretch")
-
-_("Vertical stretch")
-
-_("Corner stretch")
-
-_("Spring constant:")
-
-_("Friction:")
-
-_("Number of points on the grid in each direction:")
-
-_("Wave")
-
-_("In ms.")
-
-_("Duration of the animation:")
-
-_("Repeat while icon is pointed to?")
-
-_("Wave width:")
-
-_("Wave amplitude:")
-
-_("Pulse")
-
-_("In ms.")
-
-_("Pulse duration:")
-
-_("Repeat while icon is pointed to?")
-
-_("Pulse max zoom:")
-
-_("Pulse follows icon shape?")
-
-_("Bounce")
-
-_("In ms.")
-
-_("Bounce duration:")
-
-_("Repeat while icon is pointed to?")
-
-_("When bouncing, resize the icon by:")
-
-_("the lower the value, the more it will flatten.")
-
-_("How much the icon will flatten when hitting the ground:")
-
-_("Blink")
-
-_("In ms.")
-
-_("Blink duration:")
-
-_("Repeat while icon is pointed to?")
-

=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2010-08-07 01:43:25 +0000
+++ CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -10,7 +10,7 @@
 ########### project ###############
 
 project ("cairo-dock-plugins")
-set (VERSION "2.2.0-0beta4")
+set (VERSION "2.2.0-1")
 
 add_definitions (-std=c99 -Wstrict-prototypes -Wextra -Wwrite-strings -Wuninitialized -Werror-implicit-function-declaration) #-Wunreachable-code -Wno-unused-parameter -Wall
 if (NOT ${CMAKE_BUILD_TYPE})
@@ -23,7 +23,7 @@
 set (CPACK_SOURCE_GENERATOR "TGZ")
 set (CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}")
 set (CPACK_SOURCE_IGNORE_FILES 
-	"/build/;/.bzr/;bzrignore$;/misc/;/en_GB.po$;~$;${CPACK_SOURCE_IGNORE_FILES}")
+	"/build/;/.bzr/;bzrignore$;/misc/;~$;${CPACK_SOURCE_IGNORE_FILES}")
 include (CPack)
 
 add_custom_target( dist
@@ -62,12 +62,10 @@
 endif()
 set (GETTEXT_PLUGINS "cairo-dock-plugins")
 
-if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND "${LIB_SUFFIX}" STREQUAL "" AND "${FORCE_NOT_LIB64}" STREQUAL "" )
-	set (libdir lib64/cairo-dock)
-elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT "${FORCE_NOT_LIB64}" STREQUAL "" )
-	set (libdir lib${LIB_SUFFIX}/cairo-dock)
+if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT "${FORCE_LIB64}" STREQUAL "")  # 64bits and force install in lib64
+	set (libdir ${prefix}/lib64)
 else()
-	set (libdir lib${LIB_SUFFIX}/cairo-dock)
+	set (libdir ${prefix}/lib${LIB_SUFFIX})
 endif()
 
 if (NOT "${pluginsdir}" STREQUAL "${CMAKE_INSTALL_PREFIX}/${libdir}")
@@ -509,12 +507,17 @@
 
 ############# STATUS NOTIFIER #################
 if ("${enable-status-notifier}" STREQUAL "yes")
-	set (GETTEXT_STATUS_NOTIFIER ${GETTEXT_PLUGINS})
-	set (VERSION_STATUS_NOTIFIER "0.0.1")
-	set (PACKAGE_STATUS_NOTIFIER "cd-status-notifier")
-	set (status_notifierdatadir "${pluginsdatadir}/Status-Notifier")
-	configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Status-Notifier/data/Status-Notifier.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Status-Notifier/data/Status-Notifier.conf)
-	add_subdirectory (Status-Notifier)
+	pkg_check_modules (STATUS_NOTIFIER dbusmenu-gtk)
+	if ("${STATUS_NOTIFIER_FOUND}" STREQUAL "")
+		message (STATUS "Could not find Status-Notifier libs; Cairo-Dock won't be built with Status-Notifier support.")
+	else()
+		set (GETTEXT_STATUS_NOTIFIER ${GETTEXT_PLUGINS})
+		set (VERSION_STATUS_NOTIFIER "0.1.0")
+		set (PACKAGE_STATUS_NOTIFIER "cd-status-notifier")
+		set (status_notifierdatadir "${pluginsdatadir}/Status-Notifier")
+		configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Status-Notifier/data/Status-Notifier.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Status-Notifier/data/Status-Notifier.conf)
+		add_subdirectory (Status-Notifier)
+	endif()
 endif()
 
 ############# SWITCHER #################
@@ -527,7 +530,7 @@
 
 ############# SYSTEM MONITOR #################
 set (GETTEXT_SYSTEM_MONITOR ${GETTEXT_PLUGINS})
-set (VERSION_SYSTEM_MONITOR "1.0.4")
+set (VERSION_SYSTEM_MONITOR "1.0.5")
 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)
@@ -554,7 +557,7 @@
 	add_subdirectory (terminal)
 endif()
 
-############# OY #################
+############# TOMBOY #################
 set (GETTEXT_TOMBOY ${GETTEXT_PLUGINS})
 set (VERSION_TOMBOY "1.3.0")
 set (PACKAGE_TOMBOY "cd-tomboy")
@@ -631,3 +634,13 @@
 endif()
 
 add_subdirectory (po)
+
+############# REMOTE_CONTROL #################
+if ("${enable_remote_control}" STREQUAL "yes")
+	set (GETTEXT_REMOTE_CONTROL ${GETTEXT_PLUGINS})
+	set (VERSION_REMOTE_CONTROL "0.0.1")
+	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)
+	add_subdirectory (Remote-Control)
+endif()

=== modified file 'Cairo-Penguin/data/Cairo-Penguin.conf.in'
--- Cairo-Penguin/data/Cairo-Penguin.conf.in	2010-08-07 01:43:25 +0000
+++ Cairo-Penguin/data/Cairo-Penguin.conf.in	2010-09-16 01:12:52 +0000
@@ -7,7 +7,7 @@
 icon size = 0;0
 
 #s Icon name for busy penguin:
-name = Tux
+name = 
 
 #d Name of the dock it belongs to:
 dock name = 
@@ -26,7 +26,7 @@
 theme = Classic
 
 #i Delay between animation changes :
-#{in seconds.
+#{in seconds.}
 change delay = 8
 
 #e[0;1] Penguin transparency:

=== removed file 'Cairo-Penguin/data/messages'
--- Cairo-Penguin/data/messages	2010-08-07 01:43:25 +0000
+++ Cairo-Penguin/data/messages	1970-01-01 00:00:00 +0000
@@ -1,28 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Icon size for busy penguin:")
-
-_("Icon name for busy penguin:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Configuration")
-
-_("Choose one of the available themes:")
-
-_("in seconds.")
-
-_("Delay between animation changes :")
-
-_("Penguin transparency:")
-
-_("Let the penguin wander everywhere in the dock?")
-
-_("in pixels.")
-
-_("Ground offset:")
-

=== modified file 'Cairo-Penguin/src/applet-notifications.c'
--- Cairo-Penguin/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ Cairo-Penguin/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -105,7 +105,7 @@
 {
 	PenguinAnimation *pAnimation = penguin_get_current_animation ();
 	if(pAnimation == NULL)
-		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	
 	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))
 	{
@@ -113,15 +113,14 @@
 		{
 			cd_debug ("%s\n", myApplet->cConfFilePath);
 			cairo_dock_notify (CAIRO_DOCK_BUILD_ICON_MENU, myIcon, myContainer, CD_APPLET_MY_MENU);
-			return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+			CD_APPLET_LEAVE (CAIRO_DOCK_INTERCEPT_NOTIFICATION);
 		}
 		
 		GtkWidget *pMenuItem, *image;
 		
 		CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 		
-		GtkWidget *pModuleSubMenu = CD_APPLET_ADD_SUB_MENU (D_("Hey, you there!"), CD_APPLET_MY_MENU);
-		//GtkWidget *pModuleSubMenu = CD_APPLET_CREATE_MY_SUB_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);
@@ -170,7 +169,7 @@
 			else if (iRandom == 1 && ! myConfig.bFree)
 			{
 				CD_APPLET_ANIMATE_MY_ICON ("bounce", 3);
-				myData.pDialog = cairo_dock_show_temporary_dialog ("Olllééééé !", myIcon, myContainer, 2500);
+				myData.pDialog = cairo_dock_show_temporary_dialog ("Olll����� !", myIcon, myContainer, 2500);
 			}
 			else
 			{

=== modified file 'Clipper/data/Clipper.conf.in'
--- Clipper/data/Clipper.conf.in	2010-08-07 01:43:25 +0000
+++ Clipper/data/Clipper.conf.in	2010-09-16 01:12:52 +0000
@@ -59,9 +59,6 @@
 #b Should be visible on all desktops?
 sticky=true
 
-
-
-
 #F[Decorations;gtk-orientation-portrait]
 frame_deco=
 
@@ -95,6 +92,7 @@
 #e+[0;1] Foreground tansparency:
 fg alpha = 1
 
+
 #[gtk-preferences]
 [Configuration]
 
@@ -132,7 +130,7 @@
 shortkey = <Control>F8
 
 #b Pop-up menus at mouse position?
-menu on mouse = true
+menu on mouse = false 
 
 
 #F[Actions;gtk-execute]
@@ -140,7 +138,7 @@
 
 #b Enable actions?
 #{If some actions are associated with an item, they will be proposed when the item is created.}
-enable actions = true
+enable actions = false
 
 #b Replay actions?
 #{Display actions when selecting an item in the history.}

=== removed file 'Clipper/data/messages'
--- Clipper/data/messages	2010-08-07 01:43:25 +0000
+++ Clipper/data/messages	1970-01-01 00:00:00 +0000
@@ -1,146 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Items")
-
-_("Clipboard items are those you get with CTRL+c. Selection items are those you get by selecting some text with the mouse.")
-
-_("Which items should be remembered?")
-
-_("None")
-
-_("Clipboard")
-
-_("Selection")
-
-_("Both")
-
-_("Number of items:")
-
-_("Remember items between 2 sessions ?")
-
-_("It is especially useful if you often select text with the mouse and don't want to loose your clipboard items due to too many items in the selection.")
-
-_("Separate clipboard and selection?")
-
-_("If so, number of selection items:")
-
-_("When you click on an item, its content will become accessible with CTRL+v")
-
-_("Paste into Clipboard?")
-
-_("When you click on an item, its content will become accessible with the middle-click")
-
-_("Paste into Selection?")
-
-_("Shortkey to pop-up the items menu:")
-
-_("Pop-up menus at mouse position?")
-
-_("Actions")
-
-_("If some actions are associated with an item, they will be proposed when the item is created.")
-
-_("Enable actions?")
-
-_("Display actions when selecting an item in the history.")
-
-_("Replay actions?")
-
-_("in seconds.")
-
-_("Duration of the action menu:")
-
-_("Persistent items")
-
-_("A list of persistent items which can be accessed with middle-click:")
-

=== modified file 'Clipper/src/applet-init.c'
--- Clipper/src/applet-init.c	2010-08-07 01:43:25 +0000
+++ Clipper/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -26,7 +26,7 @@
 #include "applet-init.h"
 
 
-CD_APPLET_DEFINITION (N_("Clipper"),
+CD_APPLET_DEFINE_BEGIN ("Clipper",
 	1, 6, 3,
 	CAIRO_DOCK_CATEGORY_APPLET_ACCESSORY,
 	N_("This applet keeps a trace of the clipboard and mouse selection,\n"
@@ -35,6 +35,9 @@
 	"Left-click to popup the clipboard and mouse selection history,\n"
 	"Drop text on the icon to create persistent items, and middle-clck to recall them."),
 	"Fabrice Rey (Fabounet)")
+	CD_APPLET_DEFINE_COMMON_APPLET_INTERFACE
+	CD_APPLET_REDEFINE_TITLE (N_("Clipboard history"))
+CD_APPLET_DEFINE_END
 
 
 //\___________ 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).

=== modified file 'Clipper/src/applet-notifications.c'
--- Clipper/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ Clipper/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -35,7 +35,7 @@
 	else
 	{
 		GtkWidget *pMenu = cd_clipper_build_items_menu ();
-		cairo_dock_popup_menu_on_container (pMenu, myContainer);
+		cairo_dock_popup_menu_on_icon (pMenu, myIcon, myContainer);
 	}
 CD_APPLET_ON_CLICK_END
 
@@ -85,9 +85,11 @@
 	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-clear", _cd_clipper_clear_history, pSubMenu);
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK ("Paste all copied items", "gtk-paste", _cd_clipper_paste_all, pSubMenu);
+		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_ON_BUILD_MENU_END
 
@@ -101,7 +103,7 @@
 	else
 	{
 		GtkWidget *pMenu = cd_clipper_build_persistent_items_menu ();
-		cairo_dock_popup_menu_on_container (pMenu, myContainer);
+		cairo_dock_popup_menu_on_icon (pMenu, myIcon, myContainer);
 	}
 CD_APPLET_ON_MIDDLE_CLICK_END
 

=== removed file 'Dbus/data/messages'
--- Dbus/data/messages	2010-08-07 01:43:25 +0000
+++ Dbus/data/messages	1970-01-01 00:00:00 +0000
@@ -1,26 +0,0 @@
-_("Configuration")
-
-_("Let external applications pop up dialogs in the dock?")
-
-_("Let external applications reboot the dock?")
-
-_("Let external applications quit the dock?")
-
-_("Let external applications show/hide desklets?")
-
-_("Let external applications reload applets?")
-
-_("Let external applications show/hide docks?")
-
-_("Let extern applications add launchers to the docks?")
-
-_("Let external applications modify the labels of icons?")
-
-_("Let extern applications modify the quick-infos on icons?")
-
-_("Let extern applications modify the icons' image?")
-
-_("Let extern applications animate icons?")
-
-_("Let extern applications register new module?")
-

=== modified file 'Dbus/src/applet-dbus.c'
--- Dbus/src/applet-dbus.c	2010-08-07 01:43:25 +0000
+++ Dbus/src/applet-dbus.c	2010-09-16 01:12:52 +0000
@@ -146,7 +146,7 @@
 	gchar *cUserPackagesDir = g_strdup_printf ("%s/%s", g_cCairoDockDataDir, CD_DBUS_APPLETS_FOLDER);
 	gchar *cDistantPackagesDir = g_strdup_printf ("%s/%d.%d.%d", CD_DBUS_APPLETS_FOLDER, g_iMajorVersion, g_iMinorVersion, g_iMicroVersion);
 	gchar *cPath = cairo_dock_get_package_path (cModuleName, cSharePackagesDir, cUserPackagesDir, cDistantPackagesDir,  CAIRO_DOCK_UPDATED_PACKAGE);
-	g_print ("*** update of the applet '%s' -> got '%s'\n", cModuleName, cPath);
+	cd_debug ("*** update of the applet '%s' -> got '%s'\n", cModuleName, cPath);
 	g_free (cPath);
 	g_free (cSharePackagesDir);
 	g_free (cUserPackagesDir);
@@ -161,7 +161,7 @@
 	
 	if (pModule->pInstancesList != NULL)  // applet active => on la recharge.
 	{
-		g_print ("*** applet '%s' is active, reload it\n", cModuleName);
+		cd_debug ("*** applet '%s' is active, reload it", cModuleName);
 		CairoDockModuleInstance *pModuleInstance = pModule->pInstancesList->data;
 		Icon *pIcon = pModuleInstance->pIcon;
 		CairoContainer *pContainer = pModuleInstance->pContainer;
@@ -193,15 +193,15 @@
 	//cairo_dock_free_task (pUpdateTask);
 	return TRUE;
 }
-static void _check_update_theme (const gchar *cModuleName, CairoDockPackage *pPackage, gpointer data)
+static void _check_update_package (const gchar *cModuleName, CairoDockPackage *pPackage, gpointer data)
 {
-	g_print ("*** %s (%s, %d)\n", __func__, cModuleName, pPackage->iType);
+	cd_message ("*** %s (%s, %d)", __func__, cModuleName, pPackage->iType);
 	if (pPackage->iType == CAIRO_DOCK_UPDATED_PACKAGE)
 	{
 		gchar *cUserDirPath = g_strdup_printf ("%s/%s/%s", g_cCairoDockDataDir, CD_DBUS_APPLETS_FOLDER, cModuleName);
 		if (g_file_test (cUserDirPath, G_FILE_TEST_EXISTS))
 		{
-			g_print ("*** the applet '%s' needs to be updated\n", cModuleName);
+			cd_message ("*** the applet '%s' needs to be updated", cModuleName);
 			CairoDockTask *pUpdateTask = cairo_dock_new_task_full (0, (CairoDockGetDataAsyncFunc) _get_package_path, (CairoDockUpdateSyncFunc) _apply_package_update, (GFreeFunc) g_free, g_strdup (cModuleName));
 			myData.pUpdateTasksList = g_list_prepend (myData.pUpdateTasksList, pUpdateTask);
 			cairo_dock_launch_task (pUpdateTask);
@@ -212,7 +212,7 @@
 {
 	if (pThemesTable != NULL)
 	{
-		g_hash_table_foreach (pThemesTable, (GHFunc) _check_update_theme, NULL);
+		g_hash_table_foreach (pThemesTable, (GHFunc) _check_update_package, NULL);
 	}
 	cairo_dock_free_task (myData.pGetListTask);
 	myData.pGetListTask = NULL;
@@ -240,11 +240,10 @@
 	g_idle_add ((GSourceFunc) _cd_dbus_launch_third_party_applets, NULL);  // on les lance avec un delai, car si l'applet DBus est lancee au demarrage du dock, on est dans la fonction cairo_dock_activate_modules_from_list(), et donc si on enregistre des applets pendant ce temps, le dock risque de recharger certaines des applets distantes (celles qui seront actives en conf et qui viendront apres DBus).
 	
 	// on telecharge en tache de fond la liste des applets.
-	gchar *cSharePackagesDir = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, CD_DBUS_APPLETS_FOLDER);
+	const gchar *cSharePackagesDir = NULL;  // MY_APPLET_SHARE_DATA_DIR"/"CD_DBUS_APPLETS_FOLDER;
 	gchar *cUserPackagesDir = g_strdup_printf ("%s/%s", g_cCairoDockDataDir, CD_DBUS_APPLETS_FOLDER);
 	gchar *cDistantPackagesDir = g_strdup_printf ("%s/%d.%d.%d", CD_DBUS_APPLETS_FOLDER, g_iMajorVersion, g_iMinorVersion, g_iMicroVersion);
 	myData.pGetListTask = cairo_dock_list_packages_async (cSharePackagesDir, cUserPackagesDir, cDistantPackagesDir, (CairoDockGetPackagesFunc) _on_got_list, NULL);
-	g_free (cSharePackagesDir);
 	g_free (cUserPackagesDir);
 	g_free (cDistantPackagesDir);
 }
@@ -345,7 +344,7 @@
 {
 	if (! myConfig.bEnableNewModule)
 		return FALSE;
-	g_print ("%s (%s)\n", __func__, cModuleName);
+	cd_message ("%s (%s)", __func__, cModuleName);
 	
 	//\____________ on cree et on enregistre un nouveau module s'il n'existe pas deja.
 	CairoDockModule *pModule = cairo_dock_find_module_from_name (cModuleName);
@@ -435,7 +434,7 @@
 	gpointer invocation_hint G_GNUC_UNUSED,
 	gpointer marshal_data)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	typedef void (*GMarshalFunc_VOID__INT_STRING) (gpointer     data1,
 												gint        arg_1,
 												gchar 	   *arg_2,
@@ -469,7 +468,7 @@
 	gpointer invocation_hint G_GNUC_UNUSED,
 	gpointer marshal_data)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	typedef void (*GMarshalFunc_VOID__BOOLEAN_STRING) (gpointer     data1,
 												gboolean    arg_1,
 												gchar 	   *arg_2,
@@ -503,7 +502,7 @@
 	gpointer invocation_hint G_GNUC_UNUSED,
 	gpointer marshal_data)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer     data1,
 												gchar      *arg_1,
 												gchar 	   *arg_2,
@@ -537,7 +536,7 @@
 	gpointer invocation_hint G_GNUC_UNUSED,
 	gpointer marshal_data)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	typedef void (*GMarshalFunc_VOID__VALUE) (gpointer     data1,
 												GValue     *arg_1,
 												gpointer     data2);
@@ -569,7 +568,7 @@
 	gpointer invocation_hint G_GNUC_UNUSED,
 	gpointer marshal_data)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	typedef void (*GMarshalFunc_VOID__INT_VALUE) (gpointer     data1,
 												gint 		arg_1,
 												GValue     *arg_2,
@@ -603,7 +602,7 @@
 	gpointer invocation_hint G_GNUC_UNUSED,
 	gpointer marshal_data)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	typedef void (*GMarshalFunc_VOID__VALUE_STRING) (gpointer     data1,
 												GValue     *arg_1,
 												gchar 	   *arg_2,

=== modified file 'Dbus/src/interface-applet-methods.c'
--- Dbus/src/interface-applet-methods.c	2010-08-07 01:43:25 +0000
+++ Dbus/src/interface-applet-methods.c	2010-09-16 01:12:52 +0000
@@ -1145,7 +1145,7 @@
 		}
 		if (! cShortkeys[i])  // raccourci non trouve dans la nouvelle liste => on l'enleve
 		{
-			g_print (" shortkey '%s' not wanted anymore\n", key);
+			//g_print (" shortkey '%s' not wanted anymore\n", key);
 			cd_keybinder_unbind (key, (CDBindkeyHandler) cd_dbus_applet_emit_on_shortkey);
 			pDbusApplet->pShortkeyList = g_list_delete_link (pDbusApplet->pShortkeyList, sk);
 		}
@@ -1165,7 +1165,7 @@
 		}
 		if (! sk)  // raccourci non encore lie => on lie.
 		{
-			g_print (" shortkey '%s' wanted\n", cShortkey);
+			//g_print (" shortkey '%s' wanted\n", cShortkey);
 			bCouldBind = cd_keybinder_bind (cShortkey, (CDBindkeyHandler) cd_dbus_applet_emit_on_shortkey, pDbusApplet);
 			if (bCouldBind)
 				pDbusApplet->pShortkeyList = g_list_prepend (pDbusApplet->pShortkeyList, g_strdup (cShortkey));

=== modified file 'Dbus/src/interface-applet-signals.c'
--- Dbus/src/interface-applet-signals.c	2010-08-07 01:43:25 +0000
+++ Dbus/src/interface-applet-signals.c	2010-09-16 01:12:52 +0000
@@ -632,7 +632,7 @@
 	}
 	
 	const gchar *cText = gtk_entry_get_text (GTK_ENTRY (pEntry));
-	g_print (" -> %s\n", cText);
+	//g_print (" -> %s\n", cText);
 	g_value_set_string (&v, cText);
 	_emit_answer_dialog (pDbusApplet, pDialog, iClickedButton, &v);
 }

=== removed file 'Doncky/data/messages'
--- Doncky/data/messages	2010-08-07 01:43:25 +0000
+++ Doncky/data/messages	1970-01-01 00:00:00 +0000
@@ -1,140 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Leave empty to use the default one.")
-
-_("Specify the xml file to be used :")
-
-_("Appearance")
-
-_("Text")
-
-_("Font to be used by default if none is specify in the .xml")
-
-_("Default Font:")
-
-_("Color to be used by default if none is specify in the .xml")
-
-_("Default colour:")
-
-_("Margin to be used on left, right and top of the desklet")
-
-_("Margin all around the desklet:")
-
-_("Use this to increase the space between the lines")
-
-_("Space between lines:")
-
-_("Background")
-
-_("You can have more attractive backgrounds using the Desklet decorations")
-
-_("Display a simple background?")
-
-_("first colour of the gradation")
-
-_("Background first colour :")
-
-_("second colour of the gradation")
-
-_("Background second colour:")
-
-_("Set the radius corner to 0 for no radius")
-
-_("Background radius corner:")
-
-_("Set the thickness to 0 for no border")
-
-_("Border thickness:")
-
-_("Border colour")
-
-_("Border colour :")
-

=== modified file 'Folders/data/Folders.conf.in'
--- Folders/data/Folders.conf.in	2010-08-07 01:43:25 +0000
+++ Folders/data/Folders.conf.in	2010-09-16 01:12:52 +0000
@@ -11,6 +11,12 @@
 #{Let empty to use the name of the folder.}
 name =
 
+#d Name of the dock it belongs to:
+dock name = 
+
+#v
+sep_icon=
+
 #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
 
@@ -18,9 +24,6 @@
 #{Leave empty to use the default one.}
 image file = 
 
-#d Name of the dock it belongs to:
-dock name = 
-
 icon =
 order=
 
@@ -29,6 +32,7 @@
 #A
 handbook=Folders
 
+
 #[gtk-convert]
 [Desklet]
 
@@ -39,9 +43,9 @@
 #{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+[48;512] Desklet dimensions (width x height):
+#j+[96;640] 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 = 256;196
+size = 400;200
 
 #i[-2048;2048] Desklet position (x, y):
 #{Depending on your WindowManager, you may be able to move this with ALT + left-click.}
@@ -64,9 +68,6 @@
 #b Should be visible on all desktops?
 sticky=true
 
-
-
-
 #F[Decorations;gtk-orientation-portrait]
 frame_deco=
 

=== removed file 'Folders/data/messages'
--- Folders/data/messages	2010-08-07 01:43:25 +0000
+++ Folders/data/messages	1970-01-01 00:00:00 +0000
@@ -1,124 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Let empty to use the name of the folder.")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("How to render the icon :")
-
-_("Use an image")
-
-_("Draw sub-dock's content as emblems")
-
-_("Draw sub-dock's content as stack")
-
-_("Draw sub-dock's content inside a box")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Folder's path:")
-
-_("Maximum number of files to list:")
-
-_("Sort files by :")
-
-_("Name")
-
-_("Date")
-
-_("Size")
-
-_("Sort folders before files?")
-
-_("Show hidden files?")
-
-_("Leave empty to use default sub-dock view.")
-
-_("Sub-dock view name:")
-

=== modified file 'Folders/src/applet-config.c'
--- Folders/src/applet-config.c	2010-08-07 01:43:25 +0000
+++ Folders/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -30,11 +30,20 @@
 	myConfig.cDefaultTitle = CD_CONFIG_GET_STRING ("Icon", "name");
 	myConfig.cImageFile = CD_CONFIG_GET_STRING ("Icon", "image file");
 	myConfig.cDirPath = CD_CONFIG_GET_STRING ("Configuration", "dir path");
-	if (myConfig.cDirPath && *myConfig.cDirPath == '/')
+	if (myConfig.cDirPath)
 	{
-		gchar *tmp = myConfig.cDirPath;
-		myConfig.cDirPath = g_filename_to_uri (myConfig.cDirPath, NULL, NULL);
-		g_free (tmp);
+		if (*myConfig.cDirPath == '~')
+		{
+			gchar *tmp = myConfig.cDirPath;
+			myConfig.cDirPath = g_strdup_printf ("%s/%s", g_getenv ("HOME"), myConfig.cDirPath);
+			g_free (tmp);
+		}
+		if (*myConfig.cDirPath == '/')
+		{
+			gchar *tmp = myConfig.cDirPath;
+			myConfig.cDirPath = g_filename_to_uri (myConfig.cDirPath, NULL, NULL);
+			g_free (tmp);
+		}
 	}
 	myConfig.cRenderer = CD_CONFIG_GET_STRING ("Configuration", "renderer");
 	//myConfig.iNbIcons = CD_CONFIG_GET_INTEGER ("Configuration", "nb icons");

=== modified file 'Folders/src/applet-notifications.c'
--- Folders/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ Folders/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -47,14 +47,14 @@
 					D_("Empty or unreadable folder."));
 		}
 		else
-			return CAIRO_DOCK_LET_PASS_NOTIFICATION;  // on laisse passer la notification (pour ouvrir le sous-dock au clic).
+			CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);  // on laisse passer la notification (pour ouvrir le sous-dock au clic).
 	}
 	else if (CD_APPLET_CLICKED_ICON != NULL)
 	{
-		g_print ("clic on %s\n", CD_APPLET_CLICKED_ICON->cBaseURI);
+		//g_print ("clic on %s\n", CD_APPLET_CLICKED_ICON->cBaseURI);
 		if (CD_APPLET_CLICKED_ICON->iVolumeID == -1)
 		{
-			g_print ("folder\n");
+			//g_print ("folder\n");
 			
 			/// lister le repertoire dans un thread.
 			
@@ -257,13 +257,13 @@
 	gtk_widget_destroy (pFileChooserDialog);
 }
 
-static void _cd_folders_new_file (GtkMenuItem *pMenuItem, CairoDockModuleInstance *myApplet)
+static inline void _create_new_file (CairoDockModuleInstance *myApplet, gboolean bFolder)
 {
 	gchar *cNewName = cairo_dock_show_demand_and_wait (D_("Enter a file name:"), myIcon, myContainer, NULL);
 	if (cNewName != NULL && *cNewName != '\0')
 	{
 		gchar *cURI = g_strdup_printf ("%s/%s", myConfig.cDirPath, cNewName);
-		gboolean bSuccess = cairo_dock_fm_create_file (cURI, FALSE);  // FALSE <=> file
+		gboolean bSuccess = cairo_dock_fm_create_file (cURI, bFolder);
 		if (! bSuccess)
 		{
 			cd_warning ("couldn't create this file.\nCheck that you have writing rights, and that the new name does not already exist.");
@@ -271,10 +271,18 @@
 		}
 	}
 }
+static void _cd_folders_new_file (GtkMenuItem *pMenuItem, CairoDockModuleInstance *myApplet)
+{
+	_create_new_file (myApplet, FALSE);
+}
+static void _cd_folders_new_folder (GtkMenuItem *pMenuItem, CairoDockModuleInstance *myApplet)
+{
+	_create_new_file (myApplet, TRUE);
+}
 
 static void _cd_folders_open_folder (GtkMenuItem *pMenuItem, CairoDockModuleInstance *myApplet)
 {
-	
+	cairo_dock_fm_launch_uri (myConfig.cDirPath);
 }
 
 static void _cd_folders_launch_with (GtkMenuItem *pMenuItem, gpointer *app)
@@ -308,21 +316,30 @@
 	data[1] = CD_APPLET_CLICKED_CONTAINER;
 	data[2] = myApplet;
 	
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
-	
-	if (CD_APPLET_CLICKED_ICON != NULL && CD_APPLET_CLICKED_ICON != myIcon)  // clic sur un des fichiers
-	{
+	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 ();
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Open the folder (middle-click)"), GTK_STOCK_OPEN, _cd_folders_open_folder, CD_APPLET_MY_MENU, myApplet);
+		CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
+		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	}
+	else  // clic on a file.
+	{
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Rename this file"), GTK_STOCK_SAVE_AS, _cd_folders_rename_file, CD_APPLET_MY_MENU, data);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Delete this file"), GTK_STOCK_REMOVE, _cd_folders_delete_file, CD_APPLET_MY_MENU, data);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Move this file"), GTK_STOCK_JUMP_TO, _cd_folders_move_file, CD_APPLET_MY_MENU, data);
+		
 		GList *pApps = cairo_dock_fm_list_apps_for_file (CD_APPLET_CLICKED_ICON->cBaseURI);
 		if (pApps != NULL)
 		{
+			CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 			GtkWidget *pSubMenu = CD_APPLET_ADD_SUB_MENU_WITH_IMAGE (D_("Open with"), CD_APPLET_MY_MENU, GTK_STOCK_OPEN);
 			
 			cd_folders_free_apps_list (myApplet);
 			
 			GList *a;
 			gchar **pAppInfo;
-			gchar *cIconPath; 
+			gchar *cIconPath;
 			gpointer *app;
 			for (a = pApps; a != NULL; a = a->next)
 			{
@@ -333,7 +350,7 @@
 				app[1] = CD_APPLET_CLICKED_CONTAINER;
 				app[2] = myApplet;
 				app[3] = g_strdup (pAppInfo[1]);
-				g_print (" + %s (%s ; %s)\n", pAppInfo[0], pAppInfo[1], pAppInfo[2]);
+				//g_print (" + %s (%s ; %s)\n", pAppInfo[0], pAppInfo[1], pAppInfo[2]);
 				myData.pAppList = g_list_prepend (myData.pAppList, app);
 				
 				if (pAppInfo[2] != NULL)
@@ -347,21 +364,14 @@
 			g_list_free (pApps);
 		}
 		else
-			g_print ("no apps list for '%s'\n", CD_APPLET_CLICKED_ICON->cBaseURI);
-		
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Delete this file"), GTK_STOCK_REMOVE, _cd_folders_delete_file, CD_APPLET_MY_MENU, data);
-		
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Rename this file"), GTK_STOCK_EDIT, _cd_folders_rename_file, CD_APPLET_MY_MENU, data);
-		
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Move this file"), GTK_STOCK_JUMP_TO, _cd_folders_move_file, CD_APPLET_MY_MENU, data);
-		
+			//g_print ("no apps list for '%s'\n", CD_APPLET_CLICKED_ICON->cBaseURI);
+		
+		CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Properties"), GTK_STOCK_PROPERTIES, _cd_folders_show_file_properties, CD_APPLET_MY_MENU, data);
 		
+		CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
 		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Create a new file"), GTK_STOCK_NEW, _cd_folders_new_file, CD_APPLET_MY_MENU, myApplet);
-	}
-	else
-	{
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Open the folder (middle-click)"), GTK_STOCK_OPEN, _cd_folders_open_folder, CD_APPLET_MY_MENU, myApplet);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Create a new folder"), GTK_STOCK_NEW, _cd_folders_new_folder, CD_APPLET_MY_MENU, myApplet);
 	}
 	
 	if (CD_APPLET_CLICKED_ICON != NULL && CD_APPLET_CLICKED_ICON != myIcon)
@@ -371,7 +381,7 @@
 
 gboolean cd_folders_on_drop_data (gpointer data, const gchar *cReceivedData, Icon *icon, double fOrder, CairoContainer *pContainer)
 {
-	g_print ("Folders received '%s'\n", cReceivedData);
+	//g_print ("Folders received '%s'\n", cReceivedData);
 	
 	if (fOrder == CAIRO_DOCK_LAST_ORDER)  // lachage sur une icone.
 		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
@@ -384,7 +394,7 @@
 	
 	if (g_file_test (cPath, G_FILE_TEST_IS_DIR))
 	{
-		g_print (" ajout d'un repertoire...\n");
+		//g_print (" ajout d'un repertoire...\n");
 		CairoDockModule *pModule = cairo_dock_find_module_from_name ("Folders");
 		g_return_val_if_fail (pModule != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
 		

=== removed file 'GMenu/data/messages'
--- GMenu/data/messages	2010-08-07 01:43:25 +0000
+++ GMenu/data/messages	1970-01-01 00:00:00 +0000
@@ -1,114 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Display icons in the menu?")
-
-_("Shortkey to show/hide the menu:")
-
-_("Shortkey to show/hide the quick-launch dialog:")
-
-_("Leave empty to use the default one.")
-
-_("Command to use for configuring the menu:")
-
-_("Recent documents")
-
-_("Show recent documents?")
-
-_("Leave blank if filter is not needed.")
-
-_("Only show files that are under this folder or its sub-folder:")
-
-_("in days. Set 0 if unsued.")
-
-_("Only show files whose last modification date is less than ;")
-

=== modified file 'GMenu/src/applet-menu.c'
--- GMenu/src/applet-menu.c	2010-08-07 01:43:25 +0000
+++ GMenu/src/applet-menu.c	2010-09-16 01:12:52 +0000
@@ -690,8 +690,20 @@
 GtkWidget * create_main_menu (CairoDockModuleInstance *myApplet)
 {
 	GtkWidget *main_menu;
-
-	main_menu = create_applications_menu ("applications.menu", NULL, NULL);
+	
+	// workaround pour KDE, qui ne loupe pas une occasion de se distinguer.
+	const gchar *cMenuFileName = NULL;
+	if (! g_file_test ("/etc/xdg/menus/applications.menu", G_FILE_TEST_EXISTS))  // on pourrait aussi aller lire le start-here.menu, mais je suis pas sur que ce soit standard.
+	{
+		if (g_file_test ("/etc/xdg/menus/kde-applications.menu", G_FILE_TEST_EXISTS))
+			cMenuFileName = "kde-applications.menu";
+		else if (g_file_test ("/etc/xdg/menus/xfce-applications.menu", G_FILE_TEST_EXISTS))
+			cMenuFileName = "xfce-applications.menu";
+	}
+	if (cMenuFileName == NULL)
+		cMenuFileName = "applications.menu";
+	
+	main_menu = create_applications_menu (cMenuFileName, NULL, NULL);
 	
 	g_object_set_data (G_OBJECT (main_menu),
 		"panel-menu-append-callback",

=== modified file 'GMenu/src/applet-notifications.c'
--- GMenu/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ GMenu/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -30,7 +30,7 @@
 {
 	if (myData.pMenu != NULL)
 	{
-		cairo_dock_popup_menu_on_container (myData.pMenu, myContainer);
+		cairo_dock_popup_menu_on_icon (myData.pMenu, myIcon, myContainer);
 	}
 }
 
@@ -48,79 +48,8 @@
 }
 
 //\___________ Define here the action to be taken when the user left-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.
-static void _on_activate_item (GtkWidget *pMenuItem, gpointer *data);
-static void _fill_menu_with_dir (gchar *cDirPath, GtkWidget *pMenu)
-{
-	GError *erreur = NULL;
-	GDir *dir = g_dir_open (cDirPath, 0, &erreur);
-	if (erreur != NULL)
-	{
-		return ;
-	}
-	
-	const gchar *cFileName;
-	gchar *cPath;
-	gpointer *data;
-	GtkWidget *pMenuItem;
-	do
-	{
-		cFileName = g_dir_read_name (dir);
-		if (cFileName == NULL)
-			break ;
-		
-		cPath = g_strdup_printf ("%s/%s", cDirPath, cFileName);
-		pMenuItem = gtk_menu_item_new_with_label (cFileName);
-		data = g_new (gpointer, 2);
-		data[0] = cPath;
-		
-		gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), pMenuItem);
-		g_signal_connect (G_OBJECT (pMenuItem), "activate", G_CALLBACK(_on_activate_item), data);
-		
-		if (g_file_test (cPath, G_FILE_TEST_IS_DIR))
-		{
-			GtkWidget *pSubMenu = gtk_menu_new ();
-			gtk_menu_item_set_submenu (GTK_MENU_ITEM (pMenuItem), pSubMenu);
-			data[1] = pSubMenu;
-		}
-	}
-	while (1);
-	g_dir_close (dir);
-}
-static void _on_activate_item (GtkWidget *pMenuItem, gpointer *data)
-{
-	gchar *cPath = data[0];
-	cd_debug ("%s (%s)\n", __func__, cPath);
-	
-	if (g_file_test (cPath, G_FILE_TEST_IS_DIR))
-	{
-		cd_debug ("c'est un repertoire\n");
-		GtkWidget *pSubMenu = data[1];
-		_fill_menu_with_dir (cPath, pSubMenu);
-		gtk_widget_show_all (pSubMenu);
-	}
-	else
-	{
-		cairo_dock_fm_launch_uri (cPath);
-	}
-}
 CD_APPLET_ON_CLICK_BEGIN
 	cd_menu_show_menu ();
-	
-	/*gchar *cDirPath = g_getenv ("HOME");
-	GtkWidget *pMenu = gtk_menu_new ();
-	
-	_fill_menu_with_dir (cDirPath, pMenu);
-	
-	gtk_widget_show_all (pMenu);
-	
-	gtk_menu_popup (GTK_MENU (pMenu),
-		NULL,
-		NULL,
-		NULL,
-		NULL,
-		1,
-		gtk_get_current_event_time ());*/
-	
 CD_APPLET_ON_CLICK_END
 
 
@@ -143,10 +72,14 @@
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
 	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Quick launch (Middle-click)"), GTK_STOCK_EXECUTE, cd_menu_show_hide_quick_launch, CD_APPLET_MY_MENU);
+		CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Configure menu"), GTK_STOCK_PREFERENCES, _cd_menu_configure_menu, CD_APPLET_MY_MENU);
+		
+		CD_APPLET_ADD_SEPARATOR_IN_MENU (pSubMenu);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Clear recent"), GTK_STOCK_CLEAR, cd_menu_clear_recent, CD_APPLET_MY_MENU);
+		
 		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Quick launch"), GTK_STOCK_EXECUTE, cd_menu_show_hide_quick_launch, pSubMenu);
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Configure menu"), GTK_STOCK_PREFERENCES, _cd_menu_configure_menu, pSubMenu);
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Clear recent"), GTK_STOCK_CLEAR, cd_menu_clear_recent, pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 
 

=== modified file 'GMenu/src/applet-util.c'
--- GMenu/src/applet-util.c	2010-08-07 01:43:25 +0000
+++ GMenu/src/applet-util.c	2010-09-16 01:12:52 +0000
@@ -188,7 +188,7 @@
 	else
 		cCommandExpanded = g_strdup (cCommand);
 #endif //CD_EXPAND_FIELD_CODES
-	g_print ("cCommandExpanded : %s\n", cCommandExpanded);
+	//g_print ("cCommandExpanded : %s\n", cCommandExpanded);
 	return cCommandExpanded;
 }
 static void _launch_from_file (const gchar *cDesktopFilePath)

=== modified file 'Indicator-applet/indicator-applet.c'
--- Indicator-applet/indicator-applet.c	2010-08-07 01:43:25 +0000
+++ Indicator-applet/indicator-applet.c	2010-09-16 01:12:52 +0000
@@ -164,7 +164,7 @@
 	_cd_indicator_make_menu (pIndicator);
 	if (pIndicator->pMenu != NULL)
 	{
-		cairo_dock_popup_menu_on_container (GTK_WIDGET (pIndicator->pMenu), myContainer);
+		cairo_dock_popup_menu_on_icon (GTK_WIDGET (pIndicator->pMenu), myIcon, myContainer);
 		return TRUE;
 	}
 	return FALSE;

=== removed file 'MeMenu/data/messages'
--- MeMenu/data/messages	2010-08-07 01:43:25 +0000
+++ MeMenu/data/messages	1970-01-01 00:00:00 +0000
@@ -1,86 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-

=== modified file 'MeMenu/src/applet-me.c'
--- MeMenu/src/applet-me.c	2010-08-07 01:43:25 +0000
+++ MeMenu/src/applet-me.c	2010-09-16 01:12:52 +0000
@@ -46,14 +46,14 @@
 static void
 username_cb (DBusGProxy * proxy, const char * username, GError *error, CairoDockModuleInstance *myApplet)
 {
-	g_print (" + new username: '%s'\n", username);
+	//g_print (" + new username: '%s'\n", username);
 	CD_APPLET_SET_NAME_FOR_MY_ICON (username);  // username peut etre NULL ou vide, c'est pas genant.
 }
 
 static void
 username_changed (DBusGProxy * proxy, gchar * username, CairoDockModuleInstance *myApplet)
 {
-	g_print ("Changing username: '%s'\n", username);
+	//g_print ("Changing username: '%s'\n", username);
 	
 	return username_cb(proxy, username, NULL, myApplet);
 }
@@ -63,7 +63,7 @@
 {
 	g_return_if_fail(icons != NULL);
 	g_return_if_fail(icons[0] != '\0');
-	g_print (" + new icon: '%s'\n", icons);
+	//g_print (" + new icon: '%s'\n", icons);
 	
 	cd_indicator_set_icon (myData.pIndicator, icons);
 	CD_APPLET_REDRAW_MY_ICON;
@@ -74,7 +74,7 @@
 static void
 status_icon_changed (DBusGProxy * proxy, gchar * icon, CairoDockModuleInstance *myApplet)
 {
-	g_print ("Changing status icon: '%s'\n", icon);
+	//g_print ("Changing status icon: '%s'\n", icon);
 	
 	return status_icon_cb(proxy, icon, NULL, myApplet);
 }

=== modified file 'MeMenu/src/applet-menu.c'
--- MeMenu/src/applet-menu.c	2010-08-07 01:43:25 +0000
+++ MeMenu/src/applet-menu.c	2010-09-16 01:12:52 +0000
@@ -56,7 +56,7 @@
 	g_value_init (&value, G_TYPE_STRING);
 	g_value_set_static_string (&value, gtk_entry_get_text (entry));
 
-	g_print ("user typed: %s\n", g_value_get_string (&value));
+	//g_print ("user typed: %s\n", g_value_get_string (&value));
 	dbusmenu_menuitem_handle_event (mi, "send", &value, gtk_get_current_event_time());
 }
 

=== removed file 'Messaging-Menu/data/messages'
--- Messaging-Menu/data/messages	2010-08-07 01:43:25 +0000
+++ Messaging-Menu/data/messages	1970-01-01 00:00:00 +0000
@@ -1,90 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Animation of the icon when one of the application demands your attention :")
-

=== modified file 'Messaging-Menu/src/applet-menu.c'
--- Messaging-Menu/src/applet-menu.c	2010-08-07 01:43:25 +0000
+++ Messaging-Menu/src/applet-menu.c	2010-09-16 01:12:52 +0000
@@ -67,7 +67,7 @@
 static gboolean
 new_application_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	GtkMenuItem * gmi = GTK_MENU_ITEM(gtk_image_menu_item_new());
 
 	gint padding = 4;
@@ -86,7 +86,7 @@
 	gtk_widget_show(icon);
 
 	/* Application name in a label */
-	g_print ("  name : %s\n", dbusmenu_menuitem_property_get(newitem, APPLICATION_MENUITEM_PROP_NAME));
+	//g_print ("  name : %s\n", dbusmenu_menuitem_property_get(newitem, APPLICATION_MENUITEM_PROP_NAME));
 	GtkWidget * label = gtk_label_new(dbusmenu_menuitem_property_get(newitem, APPLICATION_MENUITEM_PROP_NAME));
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 	gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, padding);
@@ -131,7 +131,7 @@
 static void
 indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, indicator_item_t * mi_data)
 {
-	g_print ("%s (%s)\n", __func__, prop);
+	//g_print ("%s (%s)\n", __func__, prop);
 	if (!g_strcmp0(prop, INDICATOR_MENUITEM_PROP_LABEL)) {
 		/* Set the main label */
 		gtk_label_set_text(GTK_LABEL(mi_data->label), g_value_get_string(value));
@@ -180,7 +180,7 @@
 static gboolean
 new_indicator_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client)
 {
-	g_print ("%s ()\n", __func__);
+	//g_print ("%s ()\n", __func__);
 	g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE);
 	g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE);
 	/* Note: not checking parent, it's reasonable for it to be NULL */

=== modified file 'Messaging-Menu/src/applet-messaging.c'
--- Messaging-Menu/src/applet-messaging.c	2010-08-07 01:43:25 +0000
+++ Messaging-Menu/src/applet-messaging.c	2010-09-16 01:12:52 +0000
@@ -38,7 +38,7 @@
 static void
 attention_changed_cb (DBusGProxy * proxy, gboolean dot, CairoDockModuleInstance *myApplet)
 {
-	g_print ("%s (attention : %d)\n", __func__, dot);
+	//g_print ("%s (attention : %d)\n", __func__, dot);
 	if (dot)
 	{
 		cd_indicator_set_icon (myData.pIndicator, "indicator-messages-new");
@@ -58,7 +58,7 @@
 static void
 icon_changed_cb (DBusGProxy * proxy, gboolean hidden, CairoDockModuleInstance *myApplet)
 {
-	g_print ("%s (hidden : %d)\n", __func__, hidden);
+	//g_print ("%s (hidden : %d)\n", __func__, hidden);
 	if (hidden)
 	{
 		myIcon->fAlpha = .5;
@@ -116,7 +116,7 @@
 
 void cd_messaging_on_disconnect (CairoDockModuleInstance *myApplet)
 {
-	g_print ("disconnected\n");
+	//g_print ("disconnected\n");
 	cd_indicator_set_icon (myData.pIndicator, DEFAULT_ICON);  // If we're disconnecting, go back to offline.
 }
 

=== modified file 'Network-Monitor/data/Network-Monitor.conf.in'
--- Network-Monitor/data/Network-Monitor.conf.in	2010-08-07 01:43:25 +0000
+++ Network-Monitor/data/Network-Monitor.conf.in	2010-09-16 01:12:52 +0000
@@ -140,7 +140,7 @@
 #X[Gauge;gtk-dialog-info]
 frame_gauge=
 
-#h+[@gaugesdir@;gauges;gauges] Choose one of the available themes:/
+#h+[@gaugesdir@;gauges;gauges2] Choose one of the available themes:/
 theme = turbo-night-fuel
 
 #X[Graph;gtk-dialog-info]
@@ -179,7 +179,7 @@
 #X[Gauge;gtk-dialog-info]
 frame_gauge=
 
-#h+[@gaugesdir@;gauges;gauges] Choose one of the available themes:/
+#h+[@gaugesdir@;gauges;gauges2] Choose one of the available themes:/
 theme = turbo-night-fuel
 
 

=== removed file 'Network-Monitor/data/messages'
--- Network-Monitor/data/messages	2010-08-07 01:43:25 +0000
+++ Network-Monitor/data/messages	1970-01-01 00:00:00 +0000
@@ -1,258 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Leave empty to use the connection name.")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Always display the icon, even when the dock is hidden?")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Parameters")
-
-_("You can quickly switch to the other mode by scrolling on the icon.")
-
-_("Info displayed by the icon:")
-
-_("Wifi signal")
-
-_("Connexion speed")
-
-_("By default the first active interface is used.")
-
-_("Connection interface to monitor:")
-
-_("Display numeric values:")
-
-_("No")
-
-_("On icon")
-
-_("On label")
-
-_("You need OpenGL for this option. Set it to 0 means not used, 1 means the movement is continue.")
-
-_("Fluidity of the transition animation between 2 values:")
-
-_("Animation of the icon when connecting:")
-
-_("Allow you to overwrite applet's default command line and launch your preferred wireless configuration interface.")
-
-_("User command to show Wireless Configuration:")
-
-_("Leave empty to use the default.")
-
-_("User command to display a system monitor:")
-
-_("Net Speed")
-
-_("Choose the style of the display: ")
-
-_("Gauge")
-
-_("Graph")
-
-_("Gauge")
-
-_("Choose one of the available themes:")
-
-_("Graph")
-
-_("Type of graphic :")
-
-_("Line")
-
-_("Plain")
-
-_("Bar")
-
-_("Circle")
-
-_("Plain Circle")
-
-_("It's the colour of the graphic for high quality signal.")
-
-_("High value's colour :")
-
-_("It's the colour of the graphic for low quality signal.")
-
-_("Low value's colour :")
-
-_("Background colour of the graphic :")
-
-_("Parameters")
-
-_("in seconds.")
-
-_("Delays between net speed checks:")
-
-_("Wifi")
-
-_("Choose the style of the display:")
-
-_("Gauge")
-
-_("Graph")
-
-_("Icons")
-
-_("Gauge")
-
-_("Choose one of the available themes:")
-
-_("Graph")
-
-_("Type of graphic :")
-
-_("Line")
-
-_("Plain")
-
-_("Bar")
-
-_("Circle")
-
-_("Plain Circle")
-
-_("It's the colour of the graphic for high quality signal.")
-
-_("High value's colour :")
-
-_("It's the colour of the graphic for low quality signal.")
-
-_("Low value's colour :")
-
-_("Background colour of the graphic :")
-
-_("Icons")
-
-_("Effect to apply on the icon according to strength :")
-
-_("None")
-
-_("Zoom")
-
-_("Transparency")
-
-_("Draw Bar")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'No signal' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'Very low' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'Low' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'Middle' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of an image for the 'Good' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'Excellent' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'Not connected' icon :")
-
-_("Leave empty to use the default icon.")
-
-_("Name of the image for the 'Wired connection' icon :")
-
-_("Parameters")
-
-_("in seconds. if you don't have Network-Manager.")
-
-_("Delays between wifi signal checks:")
-

=== removed file 'RSSreader/data/messages'
--- RSSreader/data/messages	2010-08-07 01:43:25 +0000
+++ RSSreader/data/messages	1970-01-01 00:00:00 +0000
@@ -1,204 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Leave empty to use the title of the RSS feed.")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("RSS Feed")
-
-_("Enter a valid atom/rss feed")
-
-_("URL:")
-
-_("RSS login (optional):")
-
-_("RSS password (optional):")
-
-_("Behaviour")
-
-_("In minutes.")
-
-_("Refresh time:")
-
-_("Notify about feed updates:")
-
-_("No")
-
-_("Icon animation")
-
-_("Dialog bubble")
-
-_("Icon animation + Dialog bubble")
-
-_("Let empty to use the default notification animation.")
-
-_("Animation of the icon:")
-
-_("In seconds. Set to 0 for infinite time (need to click on dialog to close it).")
-
-_("Duration of the notification:")
-
-_("Leave empty to use the default one.")
-
-_("Open the feed with the following program:")
-
-_("Appearance")
-
-_("Title")
-
-_("Font to be used for the title")
-
-_("Title font:")
-
-_("Colour to be used for the title")
-
-_("Title colour:")
-
-_("Alignment of the title:")
-
-_("left")
-
-_("right")
-
-_("Text")
-
-_("Font to be used for the feed lines")
-
-_("Feed lines font:")
-
-_("Colour to be used for the feed lines")
-
-_("Feed lines colour:")
-
-_("Left margin for the feed lines:")
-
-_("Space between 2 feed lines:")
-
-_("Logo")
-
-_("The default logo is the applet's icon")
-
-_("Display the logo?")
-
-_("Adjust to increase/decrease the logo's size")
-
-_("Logo size:")
-
-_("normal")
-
-_("big")
-
-_("Background")
-
-_("You can have more attractive backgrounds using the Desklet decorations")
-
-_("Display a simple background?")
-
-_("first colour of the gradation")
-
-_("Background first colour :")
-
-_("second colour of the gradation")
-
-_("Background second colour:")
-
-_("Set the radius corner to 0 for no radius")
-
-_("Background radius corner:")
-
-_("Set the thickness to 0 for no border")
-
-_("Border thickness:")
-
-_("Border colour")
-
-_("Border colour :")
-

=== modified file 'RSSreader/src/applet-notifications.c'
--- RSSreader/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ RSSreader/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -137,13 +137,13 @@
 }
 CD_APPLET_ON_SCROLL_BEGIN
 	if (! myDesklet)
-		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	
 	myData.iFirstDisplayedItem += (CD_APPLET_SCROLL_UP ? -1 : 1);
 	if (myData.iFirstDisplayedItem < 0)  // on a scrolle trop haut.
 	{
 		myData.iFirstDisplayedItem = 0;
-		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	}
 	else
 	{
@@ -151,7 +151,7 @@
 		if (myData.iFirstDisplayedItem > n - 1)  // on a scrolle trop bas.
 		{
 			myData.iFirstDisplayedItem = n - 1;
-			return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+			CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 		}
 	}
 	if (myData.iSidRedrawIdle == 0)  // on planifie un redessin pour quand la boucle principale sera accessible, de facon a éviter de la surcharger en cas de scroll rapide.

=== added directory 'Remote-Control'
=== added file 'Remote-Control/CMakeLists.txt'
--- Remote-Control/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Remote-Control/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -0,0 +1,2 @@
+add_subdirectory(src)
+add_subdirectory(data)

=== added directory 'Remote-Control/data'
=== added file 'Remote-Control/data/CMakeLists.txt'
--- Remote-Control/data/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Remote-Control/data/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -0,0 +1,11 @@
+########### subdirs if any ###############
+
+
+########### install files ###############
+
+install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Remote-Control.conf
+	preview.jpg
+	icon.png
+	arrows.svg
+	DESTINATION ${remote_controldatadir})
+

=== added file 'Remote-Control/data/Remote-Control.conf.in'
--- Remote-Control/data/Remote-Control.conf.in	1970-01-01 00:00:00 +0000
+++ Remote-Control/data/Remote-Control.conf.in	2010-09-16 01:12:52 +0000
@@ -0,0 +1,14 @@
+#!en;@VERSION_REMOTE_CONTROL@
+
+#[gtk-preferences]
+[Configuration]
+
+#k Shortkey to trigger the applet:
+shortkey = <Control>F9
+
+#a+ Animation of the current icon :
+animation=pulse
+
+#I[0;2000] Duration of the stop animation :
+#{In ms.}
+stop duration = 800

=== added file 'Remote-Control/data/arrows.svg'
--- Remote-Control/data/arrows.svg	1970-01-01 00:00:00 +0000
+++ Remote-Control/data/arrows.svg	2010-09-16 01:12:52 +0000
@@ -0,0 +1,289 @@
+<?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="128"
+   height="128"
+   id="svg2391"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="arrows.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs2393">
+    <linearGradient
+       id="linearGradient2076">
+      <stop
+         id="stop2078"
+         offset="0.0000000"
+         style="stop-color:#afd9ed;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2080"
+         offset="1.0000000"
+         style="stop-color:#cfc3db;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2082"
+       x1="12.615197"
+       x2="48.374069"
+       xlink:href="#linearGradient2076"
+       y1="25.909756"
+       y2="62.720371" />
+    <linearGradient
+       id="linearGradient2088">
+      <stop
+         id="stop2090"
+         offset="0.0000000"
+         style="stop-color:#87a8b7;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2092"
+         offset="1.0000000"
+         style="stop-color:#7f718e;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2086"
+       x1="12.615197"
+       x2="48.374069"
+       xlink:href="#linearGradient2088"
+       y1="25.909756"
+       y2="62.720371" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2399" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2088"
+       id="linearGradient2420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2076"
+       id="linearGradient2422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2088"
+       id="linearGradient2434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2076"
+       id="linearGradient2436"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2088"
+       id="linearGradient2448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2076"
+       id="linearGradient2450"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2088"
+       id="linearGradient2462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2076"
+       id="linearGradient2464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
+       x1="12.615197"
+       y1="25.909756"
+       x2="48.374069"
+       y2="62.720371" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.3277206"
+     inkscape:cx="117.47785"
+     inkscape:cy="-15.977159"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="641"
+     inkscape:window-height="719"
+     inkscape:window-x="293"
+     inkscape:window-y="0" />
+  <metadata
+     id="metadata2396">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g2409"
+       transform="matrix(0,0.8161651,-1.764176,0,125.43391,77.398373)">
+      <path
+         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
+         id="path2084"
+         style="fill:url(#linearGradient2420);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
+         id="rect1303"
+         style="fill:url(#linearGradient2422);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
+         id="path2096"
+         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         height="1"
+         id="rect2098"
+         rx="0.5"
+         ry="0.5"
+         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
+         transform="scale(-1,-1)"
+         width="23"
+         x="-27.270832"
+         y="-28" />
+    </g>
+    <g
+       id="g2424"
+       transform="matrix(0,-0.8161651,-1.6782543,0,122.04356,52.382073)">
+      <path
+         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
+         id="path2426"
+         style="fill:url(#linearGradient2434);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
+         id="path2428"
+         style="fill:url(#linearGradient2436);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
+         id="path2430"
+         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         height="1"
+         id="rect2432"
+         rx="0.5"
+         ry="0.5"
+         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
+         transform="scale(-1,-1)"
+         width="23"
+         x="-27.270832"
+         y="-28" />
+    </g>
+    <g
+       id="g2438"
+       transform="matrix(-0.8161651,0,0,-1.6496137,51.134197,122.05924)">
+      <path
+         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
+         id="path2440"
+         style="fill:url(#linearGradient2448);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
+         id="path2442"
+         style="fill:url(#linearGradient2450);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
+         id="path2444"
+         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         height="1"
+         id="rect2446"
+         rx="0.5"
+         ry="0.5"
+         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
+         transform="scale(-1,-1)"
+         width="23"
+         x="-27.270832"
+         y="-28" />
+    </g>
+    <g
+       id="g2452"
+       transform="matrix(0.8161651,0,0,-1.6496137,77.748214,121.52667)">
+      <path
+         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
+         id="path2454"
+         style="fill:url(#linearGradient2462);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
+         id="path2456"
+         style="fill:url(#linearGradient2464);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
+         id="path2458"
+         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         height="1"
+         id="rect2460"
+         rx="0.5"
+         ry="0.5"
+         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
+         transform="scale(-1,-1)"
+         width="23"
+         x="-27.270832"
+         y="-28" />
+    </g>
+  </g>
+</svg>

=== added file 'Remote-Control/data/icon.png'
Binary files Remote-Control/data/icon.png	1970-01-01 00:00:00 +0000 and Remote-Control/data/icon.png	2010-09-16 01:12:52 +0000 differ
=== added file 'Remote-Control/data/preview.jpg'
Binary files Remote-Control/data/preview.jpg	1970-01-01 00:00:00 +0000 and Remote-Control/data/preview.jpg	2010-09-16 01:12:52 +0000 differ
=== added directory 'Remote-Control/src'
=== added file 'Remote-Control/src/CMakeLists.txt'
--- Remote-Control/src/CMakeLists.txt	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -0,0 +1,40 @@
+
+########### sources ###############
+
+SET(MODULE_SRCS
+	applet-struct.h
+	applet-init.c 			applet-init.h
+	applet-config.c 			applet-config.h
+	applet-session.c 			applet-session.h
+	applet-icon-finder.c 		applet-icon-finder.h
+	applet-notifications.c 		applet-notifications.h
+)
+
+add_library(${PACKAGE_REMOTE_CONTROL} SHARED ${MODULE_SRCS})
+
+########### compil ###############
+add_definitions (-DMY_APPLET_SHARE_DATA_DIR="${remote_controldatadir}")
+add_definitions (-DMY_APPLET_PREVIEW_FILE="preview.jpg")
+add_definitions (-DMY_APPLET_CONF_FILE="Remote-Control.conf")
+add_definitions (-DMY_APPLET_USER_DATA_DIR="Remote-Control")
+add_definitions (-DMY_APPLET_VERSION="${VERSION_REMOTE_CONTROL}")
+add_definitions (-DMY_APPLET_GETTEXT_DOMAIN="${GETTEXT_REMOTE_CONTROL}")
+add_definitions (-DMY_APPLET_DOCK_VERSION="${dock_version}")
+add_definitions (-DMY_APPLET_ICON_FILE="icon.png")
+### 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")
+
+include_directories (
+	${PACKAGE_INCLUDE_DIRS})
+
+link_directories (
+	${PACKAGE_LIBRARY_DIRS})
+
+target_link_libraries (${PACKAGE_REMOTE_CONTROL}
+	${PACKAGE_LIBRARIES})
+
+########### install files ###############
+
+install(TARGETS ${PACKAGE_REMOTE_CONTROL} DESTINATION ${pluginsdir})

=== added file 'Remote-Control/src/applet-config.c'
--- Remote-Control/src/applet-config.c	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,51 @@
+/**
+* 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-notifications.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
+	myConfig.cShortkeyNav = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
+	myConfig.iCloseDuration = CD_CONFIG_GET_INTEGER ("Configuration", "stop duration");
+	myConfig.cIconAnimation = CD_CONFIG_GET_STRING ("Configuration", "animation");
+	
+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
+	if (myConfig.cShortkeyNav)
+	{
+		cd_keybinder_unbind (myConfig.cShortkeyNav, (CDBindkeyHandler) cd_do_on_shortkey_nav);
+		g_free (myConfig.cShortkeyNav);
+	}
+	
+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 'Remote-Control/src/applet-config.h'
--- Remote-Control/src/applet-config.h	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-config.h	2010-09-16 01:12:52 +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 'Remote-Control/src/applet-icon-finder.c'
--- Remote-Control/src/applet-icon-finder.c	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-icon-finder.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,257 @@
+/**
+* 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 "applet-struct.h"
+#include "applet-session.h"
+#include "applet-notifications.h"
+#include "applet-icon-finder.h"
+
+static inline gboolean _cd_do_icon_match (Icon *pIcon, const gchar *cCommandPrefix, int length)
+{
+	gboolean bMatch = FALSE;
+	if (pIcon->cBaseURI != NULL)
+	{
+		gchar *cFile = g_path_get_basename (pIcon->cCommand);
+		bMatch = (cFile && g_ascii_strncasecmp (cCommandPrefix, cFile, length) == 0);
+		g_free (cFile);
+	}
+	else if (pIcon->cCommand)
+	{
+		bMatch = (g_ascii_strncasecmp (cCommandPrefix, pIcon->cCommand, length) == 0);
+		if (!bMatch)
+		{
+			gchar *str = strchr (pIcon->cCommand, '-');  // on se limite au 1er tiret.
+			if (str && *(str-1) != ' ')  // on verifie qu'il n'est pas un tiret d'option
+			{
+				str ++;
+				bMatch = (g_strncasecmp (str, cCommandPrefix, length) == 0);
+			}
+			if (!bMatch && pIcon->cName)
+				bMatch = (g_ascii_strncasecmp (cCommandPrefix, pIcon->cName, length) == 0);
+		}
+	}
+	return bMatch;
+}
+
+static void _find_icon_in_dock_with_command (Icon *pIcon, CairoDock *pDock, gpointer *data)
+{
+	gchar *cCommandPrefix = data[0];
+	int length = GPOINTER_TO_INT (data[1]);
+	Icon *pAfterIcon = data[2];
+	Icon **pFoundIcon = data[3];
+	CairoDock **pFoundDock = data[4];
+	Icon **pFirstIcon = data[5];
+	CairoDock **pFirstParentDock = data[6];
+	if (pDock == g_pMainDock || *pFoundIcon != NULL) // on a deja cherche dans le main dock, ou deja trouve ce qu'on cherchait.
+		return ;
+	
+	gboolean bFound = _cd_do_icon_match (pIcon, cCommandPrefix, length);
+	if (bFound)
+	{
+		if (pAfterIcon == NULL)
+		{
+			*pFoundIcon = pIcon;
+			*pFoundDock = pDock;
+		}
+		else
+		{
+			if (*pFirstIcon == NULL)  // on garde une trace de la 1ere icone pour boucler dans la liste.
+			{
+				*pFirstIcon = pIcon;
+				*pFirstParentDock = g_pMainDock;
+			}
+			if (pIcon == pAfterIcon)
+			{
+				data[2] = NULL;
+			}
+		}
+	}
+}
+Icon *cd_do_search_icon_by_command (const gchar *cCommandPrefix, Icon *pAfterIcon, CairoDock **pDock)
+{
+	g_return_val_if_fail (cCommandPrefix != NULL, NULL);
+	
+	//\_________________ on cherche en premier dans le main dock, car il est deja visible.
+	int length = strlen (cCommandPrefix);
+	Icon *pIcon, *pFirstIcon = NULL;
+	CairoDock *pParentDock, *pFirstParentDock = NULL;
+	GList *ic;
+	for (ic = g_pMainDock->icons; ic != NULL; ic = ic->next)
+	{
+		pIcon = ic->data;
+		if (pIcon->cCommand && g_ascii_strncasecmp (cCommandPrefix, pIcon->cCommand, length) == 0)
+		{
+			if (pAfterIcon == NULL)
+			{
+				*pDock = g_pMainDock;
+				return pIcon;
+			}
+			else
+			{
+				if (pFirstIcon == NULL)  // on garde une trace de la 1ere icone pour boucler dans la liste.
+				{
+					pFirstIcon = pIcon;
+					pFirstParentDock = g_pMainDock;
+				}
+				if (pIcon == pAfterIcon)
+				{
+					pAfterIcon = NULL;
+				}
+			}
+		}
+	}
+	
+	//\_________________ si on a rien trouve on cherche dans tous les docks.
+	pIcon = NULL;
+	*pDock = NULL;
+	gpointer data[7];
+	data[0] = (gchar *)cCommandPrefix;
+	data[1] = GINT_TO_POINTER (length);
+	data[2] = pAfterIcon;
+	data[3] = &pIcon;
+	data[4] = pDock;
+	data[5] = &pFirstIcon;
+	data[6] = &pFirstParentDock;
+	cairo_dock_foreach_icons_in_docks ((CairoDockForeachIconFunc) _find_icon_in_dock_with_command, data);
+	
+	if (pIcon == NULL)
+	{
+		pIcon = pFirstIcon;
+		*pDock = pFirstParentDock;
+	}
+	return pIcon;
+}
+
+
+void cd_do_change_current_icon (Icon *pIcon, CairoDock *pDock)
+{
+	//\_________________ on gere le cachage et le montrage du dock precedent et actuel.
+	if (myData.pCurrentDock != NULL && pDock != myData.pCurrentDock)  // on remet au repos le dock precedemment anime.
+	{
+		cairo_dock_emit_leave_signal (CAIRO_CONTAINER (myData.pCurrentDock));
+		cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (myData.pCurrentDock), CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) cd_do_render, NULL);
+		cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (myData.pCurrentDock), CAIRO_DOCK_UPDATE_DOCK, (CairoDockNotificationFunc) cd_do_update_container, NULL);
+	}
+	if (pDock != NULL && pDock != myData.pCurrentDock)  // on montre le nouveau dock
+	{
+		if (pDock != NULL)
+		{
+			if (pDock->iRefCount > 0)
+			{
+				CairoDock *pParentDock = NULL;
+				Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pParentDock);
+				if (pPointingIcon != NULL)
+				{
+					cairo_dock_show_subdock (pPointingIcon, pParentDock);  // utile pour le montrage des sous-docks au clic.
+				}
+			}
+			else
+			{
+				/// utile de faire ca si on entre dedans ?...
+				if (pDock->bAutoHide)
+					cairo_dock_start_showing (pDock);
+				if (pDock->iVisibility == CAIRO_DOCK_VISI_KEEP_BELOW)
+					cairo_dock_pop_up (pDock);
+			}
+			cairo_dock_emit_enter_signal (CAIRO_CONTAINER (pDock));
+		}
+		
+		cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDock),
+			CAIRO_DOCK_UPDATE_DOCK,
+			(CairoDockNotificationFunc) cd_do_update_container,
+			CAIRO_DOCK_RUN_AFTER, NULL);
+		cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDock),
+			CAIRO_DOCK_RENDER_DOCK,
+			(CairoDockNotificationFunc) cd_do_render,
+			CAIRO_DOCK_RUN_AFTER, NULL);
+	}
+	if (pDock != NULL)
+	{
+		gtk_window_present (GTK_WINDOW (pDock->container.pWidget));
+	}
+	
+	//\_________________ on gere l'allumage et l'eteignage de l'icone precedente et actuelle.
+	if (myData.pCurrentIcon != NULL && pIcon != myData.pCurrentIcon)  // on remet au repos l'icone precedemment anime.
+	{
+		myData.bIgnoreIconState = TRUE;
+		cairo_dock_stop_icon_animation (myData.pCurrentIcon);
+		myData.bIgnoreIconState = FALSE;
+		cairo_dock_redraw_icon (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));  /// utile ?...
+	}
+	if (pIcon != NULL && myData.pCurrentIcon != pIcon)  // on anime la nouvelle icone.
+	{
+		int x = pIcon->fXAtRest + pIcon->fWidth/2 + (- pDock->fFlatDockWidth + pDock->iMaxDockWidth)/2;
+		int y = pIcon->fDrawY + pIcon->fHeight/2 * pIcon->fScale;
+		if (1||myData.pCurrentDock != pDock)
+		{
+			cairo_dock_emit_motion_signal (pDock,
+				x,
+				y);
+		}
+		else
+		{
+			myData.iPrevMouseX = myData.iMouseX;
+			myData.iPrevMouseY = myData.iMouseY;
+			myData.iMotionCount = 10;
+		}
+		myData.iMouseX = x;
+		myData.iMouseY = y;
+		cairo_dock_request_icon_animation (pIcon, pDock, myConfig.cIconAnimation, 1e6);  // interrompt l'animation de "mouse over".
+		cairo_dock_launch_animation (CAIRO_CONTAINER (pDock));
+		//if (myAccessibility.bShowSubDockOnClick)
+		//	cairo_dock_show_subdock (pIcon, pDock, FALSE);
+	}
+	
+	myData.pCurrentDock = pDock;
+	myData.pCurrentIcon = pIcon;
+	if (myData.pCurrentDock == NULL)
+		gtk_window_present (GTK_WINDOW (g_pMainDock->container.pWidget));
+}
+
+
+void cd_do_search_current_icon (gboolean bLoopSearch)
+{
+	//\_________________ on cherche un lanceur correspondant.
+	CairoDock *pDock;
+	Icon *pIcon = cd_do_search_icon_by_command (myData.sCurrentText->str, (bLoopSearch ? myData.pCurrentIcon : NULL), &pDock);
+	cd_debug ("found icon : %s\n", pIcon ? pIcon->cName : "none");
+	
+	//\_________________ on gere le changement d'icone/dock.
+	cd_do_change_current_icon (pIcon, pDock);
+}
+
+
+gboolean cairo_dock_emit_motion_signal (CairoDock *pDock, int iMouseX, int iMouseY)
+{
+	static gboolean bReturn;
+	static GdkEventMotion motion;
+	motion.state = 0;
+	motion.x = iMouseX;
+	motion.y = iMouseY;
+	motion.x_root = pDock->container.iWindowPositionX + pDock->container.iMouseX;
+	motion.y_root = pDock->container.iWindowPositionY + pDock->container.iMouseY;
+	motion.time = 0;
+	motion.window = pDock->container.pWidget->window;
+	motion.device = gdk_device_get_core_pointer ();
+	g_signal_emit_by_name (pDock->container.pWidget, "motion-notify-event", &motion, &bReturn);
+	return FALSE;
+}

=== added file 'Remote-Control/src/applet-icon-finder.h'
--- Remote-Control/src/applet-icon-finder.h	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-icon-finder.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,40 @@
+/**
+* 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_ICON_FINDER__
+#define  __APPLET_ICON_FINDER__
+
+#include <cairo-dock.h>
+#include "applet-struct.h"
+
+
+Icon *cd_do_search_icon_by_command (const gchar *cCommandPrefix, Icon *pAfterIcon, CairoDock **pDock);
+
+
+void cd_do_change_current_icon (Icon *pIcon, CairoDock *pDock);
+
+
+void cd_do_search_current_icon (gboolean bLoopSearch);
+
+
+gboolean cairo_dock_emit_motion_signal (CairoDock *pDock, int iMouseX, int iMouseY);
+
+
+#endif

=== added file 'Remote-Control/src/applet-init.c'
--- Remote-Control/src/applet-init.c	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,66 @@
+/**
+* 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-struct.h"
+#include "applet-config.h"
+#include "applet-notifications.h"
+#include "applet-session.h"
+#include "applet-init.h"
+
+
+CD_APPLET_DEFINE_BEGIN (("Remote-Control"),
+	2, 2, 0,
+	CAIRO_DOCK_CATEGORY_APPLET_FUN,
+	("This plug-in lets you control your dock from the keyboard,\n"
+	" or even a remote controller.\n"
+	"Press the shortcut (by default CTRL + F9),\n"
+	" then use the arrows to navigate into the docks and sub-docks,\n"
+	" or type the name of a launcher and press Tab to automatically jump to the next suitable launcher\n"
+	"Press Enter to click on the icon, Shift+Enter for Shift+click, Alt+Enter for middle click, and Ctrl+Enter for left click\n"
+	"Escape or the same shortkey will cancel."),
+	"Fabounet (Fabrice Rey)")
+	CD_APPLET_DEFINE_COMMON_APPLET_INTERFACE
+	CD_APPLET_SET_CONTAINER_TYPE (CAIRO_DOCK_MODULE_IS_PLUGIN);
+CD_APPLET_DEFINE_END
+
+
+//\___________ 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
+	cd_keybinder_bind (myConfig.cShortkeyNav, (CDBindkeyHandler) cd_do_on_shortkey_nav, myApplet);
+	
+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
+	cd_do_exit_session ();
+	
+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 (CD_APPLET_MY_CONFIG_CHANGED)
+	{
+		cd_keybinder_bind (myConfig.cShortkeyNav, (CDBindkeyHandler) cd_do_on_shortkey_nav, myApplet);  // shortkey were unbinded during reset_config.
+		
+	}
+CD_APPLET_RELOAD_END

=== added file 'Remote-Control/src/applet-init.h'
--- Remote-Control/src/applet-init.h	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-init.h	2010-09-16 01:12:52 +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 'Remote-Control/src/applet-notifications.c'
--- Remote-Control/src/applet-notifications.c	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,480 @@
+/**
+* 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 <math.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "applet-struct.h"
+#include "applet-icon-finder.h"
+#include "applet-session.h"
+#include "applet-notifications.h"
+
+#define _alpha_prompt(k,n) cos (G_PI/2*fabs ((double) ((k % (2*n)) - n) / n));
+
+const int s_iNbPromptAnimationSteps = 40;
+
+
+static inline int _orient_arrow (CairoContainer *pContainer, int iKeyVal)
+{
+	switch (iKeyVal)
+	{
+		case GDK_Up :
+			if (pContainer->bIsHorizontal)
+			{
+				if (!pContainer->bDirectionUp)
+					iKeyVal = GDK_Down;
+			}
+			else
+			{
+				iKeyVal = GDK_Left;
+			}
+		break;
+		
+		case GDK_Down :
+			if (pContainer->bIsHorizontal)
+			{
+				if (!pContainer->bDirectionUp)
+					iKeyVal = GDK_Up;
+			}
+			else
+			{
+				iKeyVal = GDK_Right;
+			}
+		break;
+		
+		case GDK_Left :
+			if (!pContainer->bIsHorizontal)
+			{
+				if (pContainer->bDirectionUp)
+					iKeyVal = GDK_Up;
+				else
+					iKeyVal = GDK_Down;
+			}
+		break;
+		
+		case GDK_Right :
+			if (!pContainer->bIsHorizontal)
+			{
+				if (pContainer->bDirectionUp)
+					iKeyVal = GDK_Down;
+				else
+					iKeyVal = GDK_Up;
+			}
+		break;
+		default:
+		break;
+
+	}
+	return iKeyVal;
+}
+static void _find_next_dock (CairoDock *pDock, gpointer *data)
+{
+	if (data[3] == NULL)  // first root dock in the list.
+		data[3] = pDock;
+	if (data[0] == pDock)  // this dock is the current one, we'll take the next one.
+		data[2] = GINT_TO_POINTER (TRUE);
+	else if (data[2])  // we take this one.
+		data[1] = pDock;
+}
+gboolean cd_do_key_pressed (gpointer pUserData, CairoContainer *pContainer, guint iKeyVal, guint iModifierType, const gchar *string)
+{
+	g_return_val_if_fail (cd_do_session_is_running (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	
+	const gchar *cKeyName = gdk_keyval_name (iKeyVal);
+	guint32 iUnicodeChar = gdk_keyval_to_unicode (iKeyVal);
+	cd_debug ("+ cKeyName : %s (%c, %s)\n", cKeyName, iUnicodeChar, string);
+	
+	if (iKeyVal == GDK_Escape)  // on clot la session.
+	{
+		cd_do_close_session ();
+	}
+	else if (iKeyVal == GDK_space && myData.sCurrentText->len == 0)  // pas d'espace en debut de chaine.
+	{
+		// on rejette.
+	}
+	else if (iKeyVal >= GDK_Shift_L && iKeyVal <= GDK_Hyper_R)  // on n'ecrit pas les modificateurs.
+	{
+		// on rejette.
+	}
+	else if (iKeyVal == GDK_Menu)  // emulation du clic droit.
+	{
+		if (myData.pCurrentIcon != NULL && myData.pCurrentDock != NULL)
+		{
+			myData.bIgnoreIconState = TRUE;
+			cairo_dock_stop_icon_animation (myData.pCurrentIcon);  // car on va perdre le focus.
+			myData.bIgnoreIconState = FALSE;
+			
+			GtkWidget *menu = cairo_dock_build_menu (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));
+			cairo_dock_popup_menu_on_icon (menu, myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));
+		}
+	}
+	else if (iKeyVal == GDK_BackSpace)  // on efface la derniere lettre.
+	{
+		if (myData.sCurrentText->len > 0)
+		{
+			cd_debug ("on efface la derniere lettre de %s (%d)\n", myData.sCurrentText->str, myData.sCurrentText->len);
+			
+			g_string_truncate (myData.sCurrentText, myData.sCurrentText->len-1);
+			
+			// on relance la recherche.
+			if (myData.pCurrentIcon == NULL)  // sinon l'icone actuelle convient toujours.
+				cd_do_search_current_icon (FALSE);
+		}
+	}
+	else if (iKeyVal == GDK_Tab)  // jump to next icon.
+	{
+		if (myData.sCurrentText->len > 0)
+		{
+			gboolean bPrevious = iModifierType & GDK_SHIFT_MASK;
+			// on cherche l'icone suivante.
+			cd_do_search_current_icon (TRUE);  // pCurrentIcon peut etre NULL si elle s'est faite detruire pendant la recherche, auquel cas on cherchera juste normalement.
+		}
+	}
+	else if (iKeyVal == GDK_Return)
+	{
+		if (myData.pCurrentIcon != NULL && myData.pCurrentDock != NULL)
+		{
+			cd_debug ("on clique sur l'icone '%s' [%d, %d]\n", myData.pCurrentIcon->cName, iModifierType, GDK_SHIFT_MASK);
+			
+			myData.bIgnoreIconState = TRUE;
+			if (iModifierType & GDK_MOD1_MASK)  // ALT
+			{
+				myData.bIgnoreIconState = TRUE;
+				cairo_dock_stop_icon_animation (myData.pCurrentIcon);  // car aucune animation ne va la remplacer.
+				myData.bIgnoreIconState = FALSE;
+				cairo_dock_notify (CAIRO_DOCK_MIDDLE_CLICK_ICON, myData.pCurrentIcon, myData.pCurrentDock);
+			}
+			else if (iModifierType & GDK_CONTROL_MASK)  // CTRL
+			{
+				myData.bIgnoreIconState = TRUE;
+				cairo_dock_stop_icon_animation (myData.pCurrentIcon);  // car on va perdre le focus.
+				myData.bIgnoreIconState = FALSE;
+				
+				myData.pCurrentDock->bMenuVisible = TRUE;
+				GtkWidget *menu = cairo_dock_build_menu (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));
+				cairo_dock_popup_menu_on_icon (menu, myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));
+			}
+			else if (myData.pCurrentIcon != NULL)
+			{
+				cairo_dock_notify (CAIRO_DOCK_CLICK_ICON, myData.pCurrentIcon, myData.pCurrentDock, iModifierType);
+				if (CAIRO_DOCK_IS_APPLI (myData.pCurrentIcon))
+					myData.iPreviouslyActiveWindow = 0;
+			}
+			if (myData.pCurrentIcon != NULL)
+				cairo_dock_start_icon_animation (myData.pCurrentIcon, myData.pCurrentDock);
+			myData.bIgnoreIconState = FALSE;
+			myData.pCurrentIcon = NULL;  // sinon on va interrompre l'animation en fermant la session.
+		}
+		cd_do_close_session ();
+	}
+	else if (iKeyVal == GDK_Left || iKeyVal == GDK_Right || iKeyVal == GDK_Up || iKeyVal == GDK_Down)
+	{
+		iKeyVal = _orient_arrow (pContainer, iKeyVal);
+		if (iKeyVal == GDK_Up)
+		{
+			if (myData.pCurrentIcon != NULL && myData.pCurrentIcon->pSubDock != NULL)
+			{
+				cd_debug ("on monte dans le sous-dock %s\n", myData.pCurrentIcon->cName);
+				Icon *pIcon = cairo_dock_get_first_icon (myData.pCurrentIcon->pSubDock->icons);
+				cd_do_change_current_icon (pIcon, myData.pCurrentIcon->pSubDock);
+			}
+		}
+		else if (iKeyVal == GDK_Down)
+		{
+			if (myData.pCurrentDock != NULL && myData.pCurrentDock->iRefCount > 0)
+			{
+				CairoDock *pParentDock = NULL;
+				Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (myData.pCurrentDock, &pParentDock);
+				if (pPointingIcon != NULL)
+				{
+					cd_debug ("on redescend dans le dock parent via %s\n", pPointingIcon->cName);
+					cd_do_change_current_icon (pPointingIcon, pParentDock);
+				}
+			}
+		}
+		else if (iKeyVal == GDK_Left)
+		{
+			if (myData.pCurrentDock == NULL)  // on initialise le deplacement.
+			{
+				myData.pCurrentDock = g_pMainDock;
+				int n = g_list_length (g_pMainDock->icons);
+				if (n > 0)
+				{
+					myData.pCurrentIcon =  g_list_nth_data (g_pMainDock->icons, (n-1) / 2);
+					if (CAIRO_DOCK_IS_SEPARATOR (myData.pCurrentIcon) && n > 1)
+						myData.pCurrentIcon = g_list_nth_data (g_pMainDock->icons, (n+1) / 2);
+				}
+			}
+			if (myData.pCurrentDock->icons != NULL)
+			{
+				Icon *pPrevIcon = cairo_dock_get_previous_icon (myData.pCurrentDock->icons, myData.pCurrentIcon);
+				if (CAIRO_DOCK_IS_SEPARATOR (pPrevIcon))
+					pPrevIcon = cairo_dock_get_previous_icon (myData.pCurrentDock->icons, pPrevIcon);
+				if (pPrevIcon == NULL)  // pas trouve ou bien 1ere icone.
+				{
+					pPrevIcon = cairo_dock_get_last_icon (myData.pCurrentDock->icons);
+				}
+				
+				cd_debug ("on se deplace a gauche sur %s\n", pPrevIcon ? pPrevIcon->cName : "none");
+				cd_do_change_current_icon (pPrevIcon, myData.pCurrentDock);
+			}
+		}
+		else  // Gdk_Right.
+		{
+			if (myData.pCurrentDock == NULL)  // on initialise le deplacement.
+			{
+				myData.pCurrentDock = g_pMainDock;
+				int n = g_list_length (g_pMainDock->icons);
+				if (n > 0)
+				{
+					myData.pCurrentIcon =  g_list_nth_data (g_pMainDock->icons, (n-1) / 2);
+					if (CAIRO_DOCK_IS_SEPARATOR (myData.pCurrentIcon) && n > 1)
+						myData.pCurrentIcon = g_list_nth_data (g_pMainDock->icons, (n+1) / 2);
+				}
+			}
+			if (myData.pCurrentDock->icons != NULL)
+			{
+				Icon *pNextIcon = cairo_dock_get_next_icon (myData.pCurrentDock->icons, myData.pCurrentIcon);
+				if (CAIRO_DOCK_IS_SEPARATOR (pNextIcon))
+					pNextIcon = cairo_dock_get_next_icon (myData.pCurrentDock->icons, pNextIcon);
+				if (pNextIcon == NULL)  // pas trouve ou bien 1ere icone.
+				{
+					pNextIcon = cairo_dock_get_first_icon (myData.pCurrentDock->icons);
+				}
+				
+				cd_debug ("on se deplace a gauche sur %s\n", pNextIcon ? pNextIcon->cName : "none");
+				cd_do_change_current_icon (pNextIcon, myData.pCurrentDock);
+			}
+		}
+	}
+	else if (iKeyVal == GDK_Page_Down || iKeyVal == GDK_Page_Up || iKeyVal == GDK_Home || iKeyVal == GDK_End)
+	{
+		if (iModifierType & GDK_CONTROL_MASK)  // changement de dock principal
+		{
+			gpointer data[4] = {myData.pCurrentDock, NULL, GINT_TO_POINTER (FALSE), NULL};
+			cairo_dock_foreach_root_docks ((GFunc) _find_next_dock, data);
+			CairoDock *pNextDock = data[1];
+			if (pNextDock == NULL)
+				pNextDock = data[3];
+			if (pNextDock != NULL)
+			{
+				Icon *pNextIcon = NULL;
+				int n = g_list_length (pNextDock->icons);
+				if (n > 0)
+				{
+					pNextIcon =  g_list_nth_data (pNextDock->icons, (n-1) / 2);
+					if (CAIRO_DOCK_IS_SEPARATOR (pNextIcon) && n > 1)
+						pNextIcon = g_list_nth_data (pNextDock->icons, (n+1) / 2);
+				}
+				cd_do_change_current_icon (pNextIcon, pNextDock);
+			}
+		}
+		
+		Icon *pIcon = (iKeyVal == GDK_Page_Up || iKeyVal == GDK_Home ? cairo_dock_get_first_icon (myData.pCurrentDock->icons) : cairo_dock_get_last_icon (myData.pCurrentDock->icons));
+		cd_debug ("on se deplace a l'extremite sur %s\n", pIcon ? pIcon->cName : "none");
+		cd_do_change_current_icon (pIcon, myData.pCurrentDock);
+	}
+	else if (string)  /// utiliser l'unichar ...
+	{
+		cd_debug ("string:'%s'\n", string);
+		g_string_append_c (myData.sCurrentText, *string);
+		
+		cd_do_search_current_icon (FALSE);
+	}
+	
+	return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+}
+
+
+void cd_do_on_shortkey_nav (const char *keystring, gpointer data)
+{
+	if (! cd_do_session_is_running ())
+	{
+		cd_do_open_session ();
+	}
+	else
+	{
+		cd_do_close_session ();
+	}
+}
+
+
+gboolean cd_do_update_container (gpointer pUserData, CairoContainer *pContainer, gboolean *bContinueAnimation)
+{
+	g_return_val_if_fail (!cd_do_session_is_off (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	
+	if (myData.iMotionCount != 0)
+	{
+		myData.iMotionCount --;
+		double f = (double) myData.iMotionCount / 10;
+		cairo_dock_emit_motion_signal (CAIRO_DOCK (pContainer),
+			f * myData.iPrevMouseX + (1-f) * myData.iMouseX,
+			f * myData.iPrevMouseY + (1-f) * myData.iMouseY);
+		*bContinueAnimation = TRUE;
+	}
+	
+	int iDeltaT = cairo_dock_get_animation_delta_t (pContainer);
+	if (cd_do_session_is_closing ())
+	{
+		//\___________________ animation de fermeture de la session (disparition des lettres ou du prompt).
+		myData.iCloseTime -= iDeltaT;
+		if (myData.iCloseTime <= 0)
+			cd_do_exit_session ();
+		else
+			*bContinueAnimation = TRUE;
+		cairo_dock_redraw_container (pContainer);
+	}
+	else if (cd_do_session_is_running ())
+	{
+		//\___________________ animation du prompt.
+		myData.iPromptAnimationCount ++;
+		*bContinueAnimation = TRUE;
+		
+		cairo_dock_redraw_container (pContainer);
+	}
+	
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+
+gboolean cd_do_check_icon_stopped (gpointer pUserData, Icon *pIcon)
+{
+	if (pIcon == myData.pCurrentIcon && ! myData.bIgnoreIconState)
+	{
+		cd_debug ("notre icone vient de se faire stopper\n");
+		myData.pCurrentIcon = NULL;
+		myData.pCurrentDock = NULL;
+		
+		// eventuellement emuler un TAB pour trouver la suivante ...
+	}
+	
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+
+static void _check_dock_is_active (gchar *cDockName, CairoDock *pDock, Window *data)
+{
+	Window xActiveWindow = data[0];
+	if (GDK_WINDOW_XID (pDock->container.pWidget->window) == xActiveWindow)
+		data[1] = 1;
+}
+gboolean cd_do_check_active_dock (gpointer pUserData, Window *XActiveWindow)
+{
+	if (myData.sCurrentText == NULL || XActiveWindow == NULL)
+		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	Window data[2] = {*XActiveWindow, 0};
+	cairo_dock_foreach_docks ((GHFunc) _check_dock_is_active, data);
+	
+	if (data[1] == 0)
+		gtk_window_present (GTK_WINDOW (g_pMainDock->container.pWidget));
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+
+static void _render_cairo (CairoContainer *pContainer, cairo_t *pCairoContext)
+{
+	double fAlpha;
+	if (myData.iCloseTime != 0) // animation de fin
+		fAlpha = (double) myData.iCloseTime / myConfig.iCloseDuration;
+	else
+		fAlpha = 1.;
+	
+	if (myData.pArrowImage->pSurface != NULL)
+	{
+		double fFrameWidth = myData.pArrowImage->iWidth;
+		double fFrameHeight = myData.pArrowImage->iHeight;
+		
+		double fDockOffsetX, fDockOffsetY;  // Offset du coin haut gauche du prompt.
+		if (pContainer->bIsHorizontal)
+		{
+			fDockOffsetX = (pContainer->iWidth - fFrameWidth) / 2;
+			fDockOffsetY = (pContainer->iHeight - fFrameHeight) / 2;
+		}
+		else
+		{
+			fDockOffsetY = (pContainer->iWidth - fFrameWidth) / 2;
+			fDockOffsetX = (pContainer->iHeight - fFrameHeight) / 2;
+		}
+		
+		fAlpha *= _alpha_prompt (myData.iPromptAnimationCount, s_iNbPromptAnimationSteps);
+		
+		if (fAlpha != 0)
+		{
+			cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);
+			cairo_dock_draw_surface (pCairoContext, myData.pArrowImage->pSurface, fFrameWidth, fFrameHeight, pContainer->bDirectionUp, pContainer->bIsHorizontal, fAlpha);
+		}
+	}
+}
+
+static void _render_opengl (CairoContainer *pContainer)
+{
+	double fAlpha;
+	if (myData.iCloseTime != 0) // animation de fin
+		fAlpha = (double) myData.iCloseTime / myConfig.iCloseDuration;
+	else
+		fAlpha = 1.;
+	
+	if (myData.pArrowImage->iTexture != 0)
+	{
+		double fFrameWidth = myData.pArrowImage->iWidth;
+		double fFrameHeight = myData.pArrowImage->iHeight;
+		
+		double fDockOffsetX, fDockOffsetY;  // Offset du coin haut gauche du prompt.
+		fDockOffsetX = (pContainer->iWidth - fFrameWidth) / 2;
+		fDockOffsetY = (pContainer->iHeight - fFrameHeight) / 2;
+		
+		fAlpha *= _alpha_prompt (myData.iPromptAnimationCount, s_iNbPromptAnimationSteps);
+		
+		if (fAlpha != 0)
+		{
+			glPushMatrix ();
+			
+			cairo_dock_set_container_orientation_opengl (pContainer);
+			
+			glTranslatef (pContainer->iWidth/2, pContainer->iHeight/2, 0.);
+			
+			_cairo_dock_enable_texture ();
+			_cairo_dock_set_blend_alpha ();
+			
+			_cairo_dock_apply_texture_at_size_with_alpha (myData.pArrowImage->iTexture, fFrameWidth, fFrameHeight, fAlpha);
+			
+			_cairo_dock_disable_texture ();
+			
+			glPopMatrix();
+		}
+	}
+}
+
+gboolean cd_do_render (gpointer pUserData, CairoContainer *pContainer, cairo_t *pCairoContext)
+{
+	g_return_val_if_fail (!cd_do_session_is_off (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	
+	if (pCairoContext != NULL)
+	{
+		_render_cairo (pContainer, pCairoContext);
+	}
+	else
+	{
+		_render_opengl (pContainer);
+	}
+	
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}

=== added file 'Remote-Control/src/applet-notifications.h'
--- Remote-Control/src/applet-notifications.h	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-notifications.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,45 @@
+/**
+* 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>
+
+
+gboolean cd_do_key_pressed (gpointer pUserData, CairoContainer *pContainer, guint iKeyVal, guint iModifierType, const gchar *string);
+
+
+void cd_do_on_shortkey_nav (const char *keystring, gpointer data);
+
+
+gboolean cd_do_update_container (gpointer pUserData, CairoContainer *pContainer, gboolean *bContinueAnimation);
+
+
+gboolean cd_do_check_icon_stopped (gpointer pUserData, Icon *pIcon);
+
+
+gboolean cd_do_check_active_dock (gpointer pUserData, Window *XActiveWindow);
+
+
+gboolean cd_do_render (gpointer pUserData, CairoContainer *pContainer, cairo_t *pCairoContext);
+
+
+#endif

=== added file 'Remote-Control/src/applet-session.c'
--- Remote-Control/src/applet-session.c	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-session.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,154 @@
+/**
+* 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 "applet-struct.h"
+#include "applet-notifications.h"
+#include "applet-icon-finder.h"
+#include "applet-session.h"
+
+
+void cd_do_open_session (void)
+{
+	if (cd_do_session_is_running ())  // session already running
+		return;
+	
+	// register to draw on dock.
+	/**if (cd_do_session_is_off ())
+	{
+		cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock),
+			CAIRO_DOCK_UPDATE_DOCK,
+			(CairoDockNotificationFunc) cd_do_update_container,
+			CAIRO_DOCK_RUN_AFTER, NULL);
+		cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock),
+			CAIRO_DOCK_RENDER_DOCK,
+			(CairoDockNotificationFunc) cd_do_render,
+			CAIRO_DOCK_RUN_AFTER, NULL);
+	}*/
+	
+	// wait for keyboard input.
+	cairo_dock_register_notification (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, CAIRO_DOCK_RUN_AFTER, NULL);
+	cairo_dock_register_notification (CAIRO_DOCK_STOP_ICON, (CairoDockNotificationFunc) cd_do_check_icon_stopped, CAIRO_DOCK_RUN_AFTER, NULL);
+	cairo_dock_register_notification (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, CAIRO_DOCK_RUN_AFTER, NULL);
+	
+	myData.sCurrentText = g_string_sized_new (20);
+	myData.iPromptAnimationCount = 0;
+	if (myData.pArrowImage == NULL)
+	{
+		myData.pArrowImage = cairo_dock_create_image_buffer (MY_APPLET_SHARE_DATA_DIR"/arrows.svg",
+			g_pMainDock->iMaxDockHeight,
+			g_pMainDock->iMaxDockHeight,
+			CAIRO_DOCK_KEEP_RATIO);
+	}
+	
+	// set initial position.
+	myData.pCurrentDock = NULL;
+	myData.pCurrentIcon =  NULL;
+	
+	CairoDock *pDock = g_pMainDock;
+	Icon *pIcon = NULL;
+	int n = g_list_length (g_pMainDock->icons);
+	if (n > 0)
+	{
+		pIcon =  g_list_nth_data (pDock->icons, (n-1) / 2);
+		if (CAIRO_DOCK_IS_SEPARATOR (pIcon) && n > 1)
+			pIcon = g_list_nth_data (pDock->icons, (n+1) / 2);
+	}
+	cd_do_change_current_icon (pIcon, pDock);
+	
+	// show main dock.
+	myData.bIgnoreIconState = TRUE;
+	cairo_dock_emit_enter_signal (CAIRO_CONTAINER (g_pMainDock));
+	myData.bIgnoreIconState = FALSE;
+	
+	// give focus to main dock for inputs.
+	myData.iPreviouslyActiveWindow = cairo_dock_get_active_xwindow ();
+	
+	///gtk_window_present (GTK_WINDOW (g_pMainDock->container.pWidget));
+	gtk_window_present_with_time (GTK_WINDOW (g_pMainDock->container.pWidget), gdk_x11_get_server_time (g_pMainDock->container.pWidget->window));  // pour eviter la prevention du vol de focus.
+	cairo_dock_freeze_docks (TRUE);
+	
+	// launch animation.
+	cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
+	
+	myData.iSessionState = 2;
+}
+
+void cd_do_close_session (void)
+{
+	if (! cd_do_session_is_running ())  // session not running
+		return;
+	
+	// no more keyboard input.
+	cairo_dock_remove_notification_func (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, NULL);
+	cairo_dock_remove_notification_func (CAIRO_DOCK_STOP_ICON, (CairoDockNotificationFunc) cd_do_check_icon_stopped, NULL);
+	cairo_dock_remove_notification_func (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, NULL);
+	
+	g_string_free (myData.sCurrentText, TRUE);
+	myData.sCurrentText = NULL;
+	
+	// give back focus.
+	if (myData.iPreviouslyActiveWindow != 0)
+	{
+		// ne le faire que si on a encore le focus, sinon c'est que l'utilisateur a change lui-meme de fenetre...
+		Window iActiveWindow = cairo_dock_get_active_xwindow ();
+		if (myData.pCurrentDock && iActiveWindow == GDK_WINDOW_XID (myData.pCurrentDock->container.pWidget->window))
+			cairo_dock_show_xwindow (myData.iPreviouslyActiveWindow);
+		
+		myData.iPreviouslyActiveWindow = 0;
+	}
+	
+	// reset session state.
+	if (myData.pCurrentIcon != NULL)
+	{
+		myData.bIgnoreIconState = TRUE;
+		cairo_dock_stop_icon_animation (myData.pCurrentIcon);
+		myData.bIgnoreIconState = FALSE;
+		myData.pCurrentIcon = NULL;
+	}
+	
+	if (myData.pCurrentDock != NULL)
+	{
+		cairo_dock_emit_leave_signal (CAIRO_CONTAINER (myData.pCurrentDock));
+	}
+	
+	// launch closing animation.
+	myData.iCloseTime = myConfig.iCloseDuration;
+	cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
+	cairo_dock_freeze_docks (FALSE);
+	
+	myData.iSessionState = 1;
+}
+
+
+void cd_do_exit_session (void)
+{
+	if (cd_do_session_is_off ())  // session already off
+		return;
+	
+	cd_do_close_session ();
+	
+	myData.iCloseTime = 0;
+	
+	cd_do_change_current_icon (NULL, NULL);
+	
+	myData.iSessionState = 0;
+}

=== added file 'Remote-Control/src/applet-session.h'
--- Remote-Control/src/applet-session.h	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-session.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,38 @@
+/**
+* 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_SESSION__
+#define  __APPLET_SESSION__
+
+#include <cairo-dock.h>
+#include "applet-struct.h"
+
+
+void cd_do_open_session (void);
+
+void cd_do_close_session (void);
+
+void cd_do_exit_session (void);
+
+#define cd_do_session_is_running(...) (myData.iSessionState == 2)
+#define cd_do_session_is_closing(...) (myData.iSessionState == 1)
+#define cd_do_session_is_off(...) (myData.iSessionState == 0)
+
+
+#endif

=== added file 'Remote-Control/src/applet-struct.h'
--- Remote-Control/src/applet-struct.h	1970-01-01 00:00:00 +0000
+++ Remote-Control/src/applet-struct.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,51 @@
+/**
+* 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>
+
+//\___________ structure containing the applet's configuration parameters.
+struct _AppletConfig {
+	gchar *cShortkeyNav;
+	gchar *cIconAnimation;
+	gint iCloseDuration;
+	} ;
+
+//\___________ structure containing the applet's data, like surfaces, dialogs, results of calculus, etc.
+struct _AppletData {
+	gint iSessionState;  // 0:no session, 1: session closing, 2: session running
+	GString *sCurrentText;
+	CairoDockImageBuffer *pArrowImage;
+	gint iPromptAnimationCount;
+	gint iCloseTime;
+	Window iPreviouslyActiveWindow;
+	Icon *pCurrentIcon;
+	CairoDock *pCurrentDock;
+	gboolean bIgnoreIconState;
+	
+	int iPrevMouseX, iPrevMouseY;
+	int iMouseX, iMouseY;
+	int iMotionCount;
+	} ;
+
+
+#endif

=== modified file 'Scooby-Do/data/CMakeLists.txt'
--- Scooby-Do/data/CMakeLists.txt	2010-08-07 01:43:25 +0000
+++ Scooby-Do/data/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -9,7 +9,6 @@
 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Scooby-Do.conf
 	preview.jpg
 	icon.png
-	arrows.svg
 	active-button.svg
 	inactive-button.svg
 	internet.png

=== modified file 'Scooby-Do/data/Scooby-Do.conf.in'
--- Scooby-Do/data/Scooby-Do.conf.in	2010-08-07 01:43:25 +0000
+++ Scooby-Do/data/Scooby-Do.conf.in	2010-09-16 01:12:52 +0000
@@ -6,9 +6,6 @@
 #k Shortkey to enable/disable the finder mode:
 shortkey search = <Control>Return
 
-#k Shortkey to enable/disable the navigation mode:
-shortkey = <Control>F9
-
 #i[10;200] Maximum number of results :
 #{Maximum number of mails that will be previewed. Put -1 to show the maximum possible.}
 nb results = 80

=== removed file 'Scooby-Do/data/arrows.svg'
--- Scooby-Do/data/arrows.svg	2009-10-05 19:27:17 +0000
+++ Scooby-Do/data/arrows.svg	1970-01-01 00:00:00 +0000
@@ -1,289 +0,0 @@
-<?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="128"
-   height="128"
-   id="svg2391"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   version="1.0"
-   sodipodi:docname="arrows.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs2393">
-    <linearGradient
-       id="linearGradient2076">
-      <stop
-         id="stop2078"
-         offset="0.0000000"
-         style="stop-color:#afd9ed;stop-opacity:1.0000000;" />
-      <stop
-         id="stop2080"
-         offset="1.0000000"
-         style="stop-color:#cfc3db;stop-opacity:1.0000000;" />
-    </linearGradient>
-    <linearGradient
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient2082"
-       x1="12.615197"
-       x2="48.374069"
-       xlink:href="#linearGradient2076"
-       y1="25.909756"
-       y2="62.720371" />
-    <linearGradient
-       id="linearGradient2088">
-      <stop
-         id="stop2090"
-         offset="0.0000000"
-         style="stop-color:#87a8b7;stop-opacity:1.0000000;" />
-      <stop
-         id="stop2092"
-         offset="1.0000000"
-         style="stop-color:#7f718e;stop-opacity:1.0000000;" />
-    </linearGradient>
-    <linearGradient
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient2086"
-       x1="12.615197"
-       x2="48.374069"
-       xlink:href="#linearGradient2088"
-       y1="25.909756"
-       y2="62.720371" />
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective2399" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2088"
-       id="linearGradient2420"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2076"
-       id="linearGradient2422"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2088"
-       id="linearGradient2434"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2076"
-       id="linearGradient2436"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2088"
-       id="linearGradient2448"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2076"
-       id="linearGradient2450"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2088"
-       id="linearGradient2462"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,63.3302,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2076"
-       id="linearGradient2464"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-1.186331,0,0,-0.780016,61.16353,67.13542)"
-       x1="12.615197"
-       y1="25.909756"
-       x2="48.374069"
-       y2="62.720371" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.3277206"
-     inkscape:cx="117.47785"
-     inkscape:cy="-15.977159"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:window-width="641"
-     inkscape:window-height="719"
-     inkscape:window-x="293"
-     inkscape:window-y="0" />
-  <metadata
-     id="metadata2396">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Calque 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <g
-       id="g2409"
-       transform="matrix(0,0.8161651,-1.764176,0,125.43391,77.398373)">
-      <path
-         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
-         id="path2084"
-         style="fill:url(#linearGradient2420);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
-         id="rect1303"
-         style="fill:url(#linearGradient2422);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
-         id="path2096"
-         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <rect
-         height="1"
-         id="rect2098"
-         rx="0.5"
-         ry="0.5"
-         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
-         transform="scale(-1,-1)"
-         width="23"
-         x="-27.270832"
-         y="-28" />
-    </g>
-    <g
-       id="g2424"
-       transform="matrix(0,-0.8161651,-1.6782543,0,122.04356,52.382073)">
-      <path
-         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
-         id="path2426"
-         style="fill:url(#linearGradient2434);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
-         id="path2428"
-         style="fill:url(#linearGradient2436);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
-         id="path2430"
-         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <rect
-         height="1"
-         id="rect2432"
-         rx="0.5"
-         ry="0.5"
-         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
-         transform="scale(-1,-1)"
-         width="23"
-         x="-27.270832"
-         y="-28" />
-    </g>
-    <g
-       id="g2438"
-       transform="matrix(-0.8161651,0,0,-1.6496137,51.134197,122.05924)">
-      <path
-         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
-         id="path2440"
-         style="fill:url(#linearGradient2448);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
-         id="path2442"
-         style="fill:url(#linearGradient2450);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
-         id="path2444"
-         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <rect
-         height="1"
-         id="rect2446"
-         rx="0.5"
-         ry="0.5"
-         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
-         transform="scale(-1,-1)"
-         width="23"
-         x="-27.270832"
-         y="-28" />
-    </g>
-    <g
-       id="g2452"
-       transform="matrix(0.8161651,0,0,-1.6496137,77.748214,121.52667)">
-      <path
-         d="M 32.186126,52.104166 C 32.931029,52.568927 46.362619,43.287677 47.107522,42.822916 C 47.852425,42.358155 62,34.471188 62,33.541666 C 62,32.612144 47.852425,24.693927 47.107522,24.229166 C 46.362619,23.764405 32.931028,14.483154 32.186126,14.947916 C 31.736229,15.228616 31.839046,20.824428 31.983704,26.041666 L 5.900179,26.041666 C 5.643855,26.041666 5.4375,26.264666 5.4375,26.541666 L 5.4375,40.541666 C 5.4375,40.818666 5.643855,41.041666 5.900179,41.041666 L 31.983704,41.041666 C 31.839045,46.258903 31.73623,51.823466 32.186126,52.104166 z"
-         id="path2454"
-         style="fill:url(#linearGradient2462);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 30.019459,52.104166 C 30.764362,52.568927 44.195952,43.287677 44.940855,42.822916 C 45.685758,42.358155 59.833333,34.471188 59.833333,33.541666 C 59.833333,32.612144 45.685758,24.693927 44.940855,24.229166 C 44.195952,23.764405 30.764361,14.483154 30.019459,14.947916 C 29.569562,15.228616 29.672379,20.824428 29.817037,26.041666 L 3.733512,26.041666 C 3.477188,26.041666 3.270833,26.264666 3.270833,26.541666 L 3.270833,40.541666 C 3.270833,40.818666 3.477188,41.041666 3.733512,41.041666 L 29.817037,41.041666 C 29.672378,46.258903 29.569563,51.823466 30.019459,52.104166 z"
-         id="path2456"
-         style="fill:url(#linearGradient2464);fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1" />
-      <path
-         d="M 56,32.498092 C 56,32.498092 46.143163,28.758884 45.393163,27.459846 C 44.643163,26.160808 31.765602,20.067541 32.131627,18.701516 C 32.497652,17.33549 43.893163,24.86177 43.893163,24.86177 C 43.893163,24.86177 52.611644,28.295956 56,32.498092 z"
-         id="path2458"
-         style="fill:#d0f1fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-      <rect
-         height="1"
-         id="rect2460"
-         rx="0.5"
-         ry="0.5"
-         style="fill:#d0f1fc;fill-opacity:1;stroke:none;stroke-width:0.375;stroke-miterlimit:4;stroke-opacity:1"
-         transform="scale(-1,-1)"
-         width="23"
-         x="-27.270832"
-         y="-28" />
-    </g>
-  </g>
-</svg>

=== removed file 'Scooby-Do/data/messages'
--- Scooby-Do/data/messages	2010-08-07 01:43:25 +0000
+++ Scooby-Do/data/messages	1970-01-01 00:00:00 +0000
@@ -1,118 +0,0 @@
-_("Configuration")
-
-_("Shortkey to enable/disable the finder mode:")
-
-_("Shortkey to enable/disable the navigation mode:")
-
-_("Maximum number of mails that will be previewed. Put -1 to show the maximum possible.")
-
-_("Maximum number of results :")
-
-_("Number of lines of the listing. If there are more results, the listing will scroll when you go up or down with the arrows.")
-
-_("Number of lines to display :")
-
-_("Animations")
-
-_("In ms.")
-
-_("Duration of the appearance animation :")
-
-_("In ms.")
-
-_("Duration of the stop animation :")
-
-_("Animation of the current icon :")
-
-_("Is detached from the dock")
-
-_("Font used to display what you type:")
-
-_("Color of the text's frame  :")
-
-_("Font size, relative to the dock size:")
-
-_("between 1 and 9, the higher, the bigger.")
-
-_("Text size:")
-
-_("Outline text?")
-
-_("Text colour:")
-
-_("Character background colour:")
-
-_("Write text on the top of the dock?")
-
-_("Favorite applications")
-
-_("FAvorite applications starting with 'a' :")
-
-_("Favorite application starting with 'b' :")
-
-_("Favorite application(s) starting with 'c' :")
-
-_("Favorite application(s starting with 'd' :")
-
-_("Favorite application(s) starting with 'e' :")
-
-_("Favorite application(s) starting with 'f' :")
-
-_("Favorite application(s) starting with 'g' :")
-
-_("Favorite application(s) starting with 'h' :")
-
-_("Favorite application(s) starting with 'i' :")
-
-_("Favorite application(s) starting with 'j' :")
-
-_("Favorite application(s) starting with 'k' :")
-
-_("Favorite application(s) starting with 'l' :")
-
-_("Favorite application(s) starting with 'm' :")
-
-_("Favorite application(s) starting with 'n' :")
-
-_("Favorite application(s) starting with 'o' :")
-
-_("Favorite application(s) starting with 'p' :")
-
-_("Favorite application(s) starting with 'q' :")
-
-_("Favorite application(s) starting with 'r' :")
-
-_("Favorite application(s) starting with 's' :")
-
-_("Favorite application(s) starting with 't' :")
-
-_("Favorite application(s) starting with 'u' :")
-
-_("Favorite application(s) starting with 'v' :")
-
-_("Favorite application(s) starting with 'w' :")
-
-_("Favorite application(s) starting with 'x' :")
-
-_("Favorite application(s) starting with 'y' :")
-
-_("Favorite application(s) starting with 'z' :")
-
-_("Start XPenguins")
-
-_("Show hidden files?")
-
-_("Firefox bookmarks")
-
-_("Recent files")
-
-_("Propose some web search engines ?")
-
-_("It can launch commands and even do some calculations.")
-
-_("Enter a command to launch:")
-
-_("Help")
-
-_("Applet's Handbook")
-

=== modified file 'Scooby-Do/src/applet-appli-finder.h'
--- Scooby-Do/src/applet-appli-finder.h	2009-10-05 19:27:17 +0000
+++ Scooby-Do/src/applet-appli-finder.h	2010-09-16 01:12:52 +0000
@@ -17,11 +17,9 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __APPLET_APPLI_FINDER__
 #define  __APPLET_APPLI_FINDER__
 
-
 #include <cairo-dock.h>
 #include "applet-struct.h"
 

=== modified file 'Scooby-Do/src/applet-config.c'
--- Scooby-Do/src/applet-config.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -60,7 +60,6 @@
 
 //\_________________ 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.cShortkeyNav = CD_CONFIG_GET_STRING ("Configuration", "shortkey");
 	myConfig.cShortkeySearch = CD_CONFIG_GET_STRING ("Configuration", "shortkey search");
 	myConfig.iAppearanceDuration = CD_CONFIG_GET_INTEGER ("Configuration", "appear duration");
 	myConfig.iCloseDuration = CD_CONFIG_GET_INTEGER ("Configuration", "stop duration");
@@ -126,10 +125,6 @@
 
 //\_________________ 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_print ("%s / %s\n", myConfig.cShortkeyNav, myConfig.cShortkeySearch);
-	if (myConfig.cShortkeyNav)
-		cd_keybinder_unbind (myConfig.cShortkeyNav, (CDBindkeyHandler) cd_do_on_shortkey_nav);
-	g_free (myConfig.cShortkeyNav);
 	if (myConfig.cShortkeySearch)
 		cd_keybinder_unbind (myConfig.cShortkeySearch, (CDBindkeyHandler) cd_do_on_shortkey_search);
 	g_free (myConfig.cShortkeySearch);
@@ -154,10 +149,6 @@
 		cairo_surface_destroy (myData.pPromptSurface);
 	if (myData.iPromptTexture != 0)
 		_cairo_dock_delete_texture (myData.iPromptTexture);
-	if (myData.pArrowSurface != NULL)
-		cairo_surface_destroy (myData.pArrowSurface);
-	if (myData.iArrowTexture != 0)
-		_cairo_dock_delete_texture (myData.iArrowTexture);
 	if (myData.pScoobySurface != NULL)
 		cairo_surface_destroy (myData.pScoobySurface);
 	if (myData.pActiveButtonSurface != NULL)

=== modified file 'Scooby-Do/src/applet-draw.c'
--- Scooby-Do/src/applet-draw.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-draw.c	2010-09-16 01:12:52 +0000
@@ -91,7 +91,7 @@
 	
 	if (myData.pCharList == NULL && myData.pListingHistory == NULL)  // aucune lettre de tapee => on montre le prompt.
 	{
-		if (! myData.bNavigationMode && myData.pPromptSurface != NULL)
+		if (myData.pPromptSurface != NULL)
 		{
 			double fFrameWidth = myData.iPromptWidth;
 			double fFrameHeight = myData.iPromptHeight;
@@ -105,30 +105,11 @@
 			if (fAlpha != 0)
 			{
 				cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);
-				cairo_dock_draw_surface (pCairoContext, myData.pArrowSurface, fFrameWidth, fFrameHeight, pMainDock->container.bDirectionUp, pMainDock->container.bIsHorizontal, fAlpha);
+				cairo_dock_draw_surface (pCairoContext, myData.pPromptSurface, fFrameWidth, fFrameHeight, pMainDock->container.bDirectionUp, pMainDock->container.bIsHorizontal, fAlpha);
 				//cairo_set_source_surface (pCairoContext, myData.pPromptSurface, 0., 0.);
 				//cairo_paint_with_alpha (pCairoContext, fAlpha);
 			}
 		}
-		else if (myData.bNavigationMode && myData.pArrowSurface != NULL)
-		{
-			double fFrameWidth = myData.iArrowWidth;
-			double fFrameHeight = myData.iArrowHeight;
-			
-			double fDockOffsetX, fDockOffsetY;  // Offset du coin haut gauche du prompt.
-			fDockOffsetX = (pMainDock->container.iWidth - fFrameWidth) / 2;
-			fDockOffsetY = (pMainDock->container.iHeight - fFrameHeight) / 2;
-			
-			fAlpha *= _alpha_prompt (myData.iPromptAnimationCount, s_iNbPromptAnimationSteps);
-			
-			if (fAlpha != 0)
-			{
-				cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);
-				cairo_dock_draw_surface (pCairoContext, myData.pArrowSurface, fFrameWidth, fFrameHeight, pMainDock->container.bDirectionUp, pMainDock->container.bIsHorizontal, fAlpha);
-				//cairo_set_source_surface (pCairoContext, myData.pArrowSurface, 0., 0.);
-				//cairo_paint_with_alpha (pCairoContext, fAlpha);
-			}
-		}
 	}
 	else  // si du texte a ete entre, on le dessine, ainsi que eventuellement la liste des icones correspondantes.
 	{
@@ -282,7 +263,7 @@
 	
 	if (myData.pCharList == NULL && myData.pListingHistory == NULL)  // aucune lettre de tapee => on montre le prompt.
 	{
-		if (! myData.bNavigationMode && myData.iPromptTexture != 0)
+		if (myData.iPromptTexture != 0)
 		{
 			double fFrameWidth = myData.iPromptWidth;
 			double fFrameHeight = myData.iPromptHeight;
@@ -310,34 +291,6 @@
 				glPopMatrix();
 			}
 		}
-		else if (myData.bNavigationMode && myData.iArrowTexture != 0)
-		{
-			double fFrameWidth = myData.iArrowWidth;
-			double fFrameHeight = myData.iArrowHeight;
-						
-			double fDockOffsetX, fDockOffsetY;  // Offset du coin haut gauche du prompt.
-			fDockOffsetX = (pMainDock->container.iWidth - fFrameWidth) / 2;
-			fDockOffsetY = (pMainDock->container.iHeight - fFrameHeight) / 2;
-			
-			fAlpha *= _alpha_prompt (myData.iPromptAnimationCount, s_iNbPromptAnimationSteps);
-			
-			if (fAlpha != 0)
-			{
-				glPushMatrix ();
-				if (! pMainDock->container.bIsHorizontal)
-					glRotatef (pMainDock->container.bDirectionUp ? 90. : -90., 0., 0., 1.);
-				glTranslatef (pMainDock->container.iWidth/2, pMainDock->container.iHeight/2, 0.);
-				
-				_cairo_dock_enable_texture ();
-				_cairo_dock_set_blend_alpha ();
-				
-				_cairo_dock_apply_texture_at_size_with_alpha (myData.iArrowTexture, fFrameWidth, fFrameHeight, fAlpha);
-				
-				_cairo_dock_disable_texture ();
-				
-				glPopMatrix();
-			}
-		}
 	}
 	else  // si du texte a ete entre, on le dessine, ainsi que eventuellement la liste des icones correspondantes.
 	{

=== modified file 'Scooby-Do/src/applet-icon-finder.c'
--- Scooby-Do/src/applet-icon-finder.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-icon-finder.c	2010-09-16 01:12:52 +0000
@@ -52,197 +52,6 @@
 	return bMatch;
 }
 
-static void _find_icon_in_dock_with_command (Icon *pIcon, CairoDock *pDock, gpointer *data)
-{
-	gchar *cCommandPrefix = data[0];
-	int length = GPOINTER_TO_INT (data[1]);
-	Icon *pAfterIcon = data[2];
-	Icon **pFoundIcon = data[3];
-	CairoDock **pFoundDock = data[4];
-	Icon **pFirstIcon = data[5];
-	CairoDock **pFirstParentDock = data[6];
-	if (pDock == g_pMainDock || *pFoundIcon != NULL) // on a deja cherche dans le main dock, ou deja trouve ce qu'on cherchait.
-		return ;
-	
-	gboolean bFound = _cd_do_icon_match (pIcon, cCommandPrefix, length);
-	if (bFound)
-	{
-		if (pAfterIcon == NULL)
-		{
-			*pFoundIcon = pIcon;
-			*pFoundDock = pDock;
-		}
-		else
-		{
-			if (*pFirstIcon == NULL)  // on garde une trace de la 1ere icone pour boucler dans la liste.
-			{
-				*pFirstIcon = pIcon;
-				*pFirstParentDock = g_pMainDock;
-			}
-			if (pIcon == pAfterIcon)
-			{
-				data[2] = NULL;
-			}
-		}
-	}
-}
-Icon *cd_do_search_icon_by_command (const gchar *cCommandPrefix, Icon *pAfterIcon, CairoDock **pDock)
-{
-	g_return_val_if_fail (cCommandPrefix != NULL, NULL);
-	
-	//\_________________ on cherche en premier dans le main dock, car il est deja visible.
-	int length = strlen (cCommandPrefix);
-	Icon *pIcon, *pFirstIcon = NULL;
-	CairoDock *pParentDock, *pFirstParentDock = NULL;
-	GList *ic;
-	for (ic = g_pMainDock->icons; ic != NULL; ic = ic->next)
-	{
-		pIcon = ic->data;
-		if (pIcon->cCommand && g_ascii_strncasecmp (cCommandPrefix, pIcon->cCommand, length) == 0)
-		{
-			if (pAfterIcon == NULL)
-			{
-				*pDock = g_pMainDock;
-				return pIcon;
-			}
-			else
-			{
-				if (pFirstIcon == NULL)  // on garde une trace de la 1ere icone pour boucler dans la liste.
-				{
-					pFirstIcon = pIcon;
-					pFirstParentDock = g_pMainDock;
-				}
-				if (pIcon == pAfterIcon)
-				{
-					pAfterIcon = NULL;
-				}
-			}
-		}
-	}
-	
-	//\_________________ si on a rien trouve on cherche dans tous les docks.
-	pIcon = NULL;
-	*pDock = NULL;
-	gpointer data[7];
-	data[0] = (gchar *)cCommandPrefix;
-	data[1] = GINT_TO_POINTER (length);
-	data[2] = pAfterIcon;
-	data[3] = &pIcon;
-	data[4] = pDock;
-	data[5] = &pFirstIcon;
-	data[6] = &pFirstParentDock;
-	cairo_dock_foreach_icons_in_docks ((CairoDockForeachIconFunc) _find_icon_in_dock_with_command, data);
-	
-	if (pIcon == NULL)
-	{
-		pIcon = pFirstIcon;
-		*pDock = pFirstParentDock;
-	}
-	return pIcon;
-}
-
-
-void cd_do_change_current_icon (Icon *pIcon, CairoDock *pDock)
-{
-	//\_________________ on gere le cachage et le montrage du dock precedent et actuel.
-	if (myData.pCurrentDock != NULL && pDock != myData.pCurrentDock && myData.pCurrentDock != g_pMainDock)  // on remet au repos dock precedemment anime.
-	{
-		cairo_dock_emit_leave_signal (myData.pCurrentDock);
-	}
-	if (pDock != NULL && pDock != g_pMainDock && pDock != myData.pCurrentDock)  // on montre le nouveau dock
-	{
-		if (pDock != NULL)
-		{
-			if (pDock->iRefCount > 0)
-			{
-				CairoDock *pParentDock = NULL;
-				Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pParentDock);
-				if (pPointingIcon != NULL)
-				{
-					cairo_dock_show_subdock (pPointingIcon, pParentDock);  // utile pour le montrage des sous-docks au clic.
-				}
-			}
-			else
-			{
-				///cairo_dock_pop_up (pDock);
-			}
-			cairo_dock_emit_enter_signal (pDock);
-		}
-	}
-	if (pDock != NULL)
-	{
-		
-		gtk_window_present (GTK_WINDOW (pDock->container.pWidget));
-	}
-	
-	//\_________________ on gere l'allumage et l'eteignage de l'icone precedente et actuelle.
-	if (myData.pCurrentIcon != NULL && pIcon != myData.pCurrentIcon)  // on remet au repos l'icone precedemment anime.
-	{
-		myData.bIgnoreIconState = TRUE;
-		cairo_dock_stop_icon_animation (myData.pCurrentIcon);
-		myData.bIgnoreIconState = FALSE;
-		cairo_dock_redraw_icon (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));  /// utile ?...
-	}
-	if (pIcon != NULL && myData.pCurrentIcon != pIcon)  // on anime la nouvelle icone.
-	{
-		int x = pIcon->fXAtRest + pIcon->fWidth/2 + (- pDock->fFlatDockWidth + pDock->iMaxDockWidth)/2;
-		int y = pIcon->fDrawY + pIcon->fHeight/2 * pIcon->fScale;
-		if (1||myData.pCurrentDock != pDock)
-		{
-			cairo_dock_emit_motion_signal (pDock,
-				x,
-				y);
-		}
-		else
-		{
-			myData.iPrevMouseX = myData.iMouseX;
-			myData.iPrevMouseY = myData.iMouseY;
-			myData.iMotionCount = 10;
-		}
-		myData.iMouseX = x;
-		myData.iMouseY = y;
-		cairo_dock_request_icon_animation (pIcon, pDock, myConfig.cIconAnimation, 1e6);  // interrompt l'animation de "mouse over".
-		cairo_dock_launch_animation (CAIRO_CONTAINER (pDock));
-		//if (myAccessibility.bShowSubDockOnClick)
-		//	cairo_dock_show_subdock (pIcon, pDock, FALSE);
-	}
-	
-	myData.pCurrentDock = pDock;
-	myData.pCurrentIcon = pIcon;
-	if (myData.pCurrentDock == NULL)
-		gtk_window_present (GTK_WINDOW (g_pMainDock->container.pWidget));
-}
-
-
-void cd_do_search_current_icon (gboolean bLoopSearch)
-{
-	//\_________________ on cherche un lanceur correspondant.
-	CairoDock *pDock;
-	Icon *pIcon = cd_do_search_icon_by_command (myData.sCurrentText->str, (bLoopSearch ? myData.pCurrentIcon : NULL), &pDock);
-	cd_debug ("found icon : %s\n", pIcon ? pIcon->cName : "none");
-	
-	//\_________________ on gere le changement d'icone/dock.
-	cd_do_change_current_icon (pIcon, pDock);
-}
-
-
-gboolean cairo_dock_emit_motion_signal (CairoDock *pDock, int iMouseX, int iMouseY)
-{
-	static gboolean bReturn;
-	static GdkEventMotion motion;
-	motion.state = 0;
-	motion.x = iMouseX;
-	motion.y = iMouseY;
-	motion.x_root = pDock->container.iWindowPositionX + pDock->container.iMouseX;
-	motion.y_root = pDock->container.iWindowPositionY + pDock->container.iMouseY;
-	motion.time = 0;
-	motion.window = pDock->container.pWidget->window;
-	motion.device = gdk_device_get_core_pointer ();
-	g_signal_emit_by_name (pDock->container.pWidget, "motion-notify-event", &motion, &bReturn);
-	return FALSE;
-}
-
-
 
 static inline void _cd_do_search_matching_icons_in_dock (CairoDock *pDock)
 {
@@ -270,7 +79,7 @@
 		return;
 	cd_debug ("%s (%s)\n", __func__, myData.sCurrentText->str);
 	gchar *str = strchr (myData.sCurrentText->str, ' ');  // on ne compte pas les arguments d'une eventuelle commande deja tapee.
-	int length = myData.sCurrentText->len;
+	guint length = myData.sCurrentText->len;
 	if (str != NULL)
 	{
 		g_string_set_size (myData.sCurrentText, str - myData.sCurrentText->str + 1);
@@ -279,22 +88,13 @@
 		
 	if (myData.pMatchingIcons == NULL)
 	{
-		if (myData.bSessionStartedAutomatically)  // on cherche dans le dock courant.
-		{
-			cd_debug ("on cherche dans le dock\n");
-			_cd_do_search_matching_icons_in_dock (myData.pCurrentDock);
-			myData.pMatchingIcons = g_list_reverse (myData.pMatchingIcons);
-		}
-		else
-		{
-			cd_debug ("on cherche tout\n");
-			// on parcours tous les docks.
-			cairo_dock_foreach_icons_in_docks ((CairoDockForeachIconFunc) _cd_do_search_in_one_dock, NULL);
-			myData.pMatchingIcons = g_list_reverse (myData.pMatchingIcons);
-			
-			// on rajoute les icones ne venant pas du dock.
-			cd_do_find_matching_applications ();
-		}
+		cd_debug ("on cherche tout\n");
+		// on parcours tous les docks.
+		cairo_dock_foreach_icons_in_docks ((CairoDockForeachIconFunc) _cd_do_search_in_one_dock, NULL);
+		myData.pMatchingIcons = g_list_reverse (myData.pMatchingIcons);
+		
+		// on rajoute les icones ne venant pas du dock.
+		cd_do_find_matching_applications ();
 	}
 	else  // optimisation : on peut se contenter de chercher parmi les icones deja trouvees.
 	{
@@ -317,7 +117,7 @@
 	myData.iCurrentMatchingOffset = 0;
 	if (myData.pCurrentApplicationToLoad != NULL)  // on va continuer le chargement sur la sous-liste.
 		myData.pCurrentApplicationToLoad = myData.pMatchingIcons;  // comme l'ordre de la liste n'a pas ete altere, on n'est sur de ne pas sauter d'icone.
-	cairo_dock_redraw_container (CAIRO_CONTAINER (myData.pCurrentDock));
+	cairo_dock_redraw_container (CAIRO_CONTAINER (g_pMainDock));
 	//g_print ("%d / %d\n", length , myData.sCurrentText->len);
 	if (length != myData.sCurrentText->len)
 		g_string_set_size (myData.sCurrentText, length);

=== modified file 'Scooby-Do/src/applet-icon-finder.h'
--- Scooby-Do/src/applet-icon-finder.h	2009-10-05 19:27:17 +0000
+++ Scooby-Do/src/applet-icon-finder.h	2010-09-16 01:12:52 +0000
@@ -17,7 +17,6 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __APPLET_ICON_FINDER__
 #define  __APPLET_ICON_FINDER__
 

=== modified file 'Scooby-Do/src/applet-init.c'
--- Scooby-Do/src/applet-init.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -36,22 +36,18 @@
 CD_APPLET_DEFINE_BEGIN ("Scooby-Do",
 	2, 1, 4,
 	CAIRO_DOCK_CATEGORY_APPLET_SYSTEM,
-	N_("This plug-in allows you to make different actions directly from the keyboard.\n"
-	"It has 2 modes, each one being triggered by a keyboard shortcut:\n\n"
-	"- the finder mode (default shortcut : CTRL + Enter) :\n"
-	"    It lets you find and launch applications, files, recent files, firefox bookmarks, commands, and even calculations.\n"
-	"    Type what you want to search, the results will be displayed in real time.\n"
-	"    The first results of each category are displayed in the main listing.\n"
-	"    Use the up/down arrows to navigate inside the list,\n"
-	"    and use the left/right arrows to enter into a category, or to display more actions (when a little arrow is drawn next to text).\n"
-	"    Once inside a category, you can filter the results by typing some letters.\n"
-	"    Press Enter to validate, maintain SHIFT or ALT to keep the list of results opened.\n\n"
-	"- the navigation mode (default shortcut : CTRL + F9) :\n"
-	"    use the arrows to navigate into the docks and sub-docks,\n"
-	"    or type the name of a launcher and press Tab to automatically jump to the next suitable launcher\n"
-	"    press Enter to click on the icon, Shift+Enter for Shift+click, Alt+Enter for middle click, and Ctrl+Enter for left click\n"
+	("This plug-in allows you to make different actions directly from the keyboard.\n"
+	"It is triggered by a keyboard shortcut (by default: CTRL + Enter):\n"
+	"It lets you find and launch applications, files, recent files, firefox bookmarks, commands, and even calculations.\n"
+	"Type what you want to search, the results will be displayed in real time.\n"
+	"The first results of each category are displayed in the main listing.\n"
+	"Use the up/down arrows to navigate inside the list,\n"
+	" and use the left/right arrows to enter into a category, or to display more actions (when a little arrow is drawn next to text).\n"
+	"Once inside a category, you can filter the results by typing some letters.\n"
+	"Press Enter to validate, maintain SHIFT or ALT to keep the list of results opened.\n"
 	"Escape or the same shortkey will cancel."),
 	"Fabounet (Fabrice Rey)")
+	CD_APPLET_DEFINE_COMMON_APPLET_INTERFACE
 	CD_APPLET_SET_CONTAINER_TYPE (CAIRO_DOCK_MODULE_IS_PLUGIN);
 CD_APPLET_DEFINE_END
 
@@ -70,7 +66,6 @@
 CD_APPLET_INIT_BEGIN
 	cairo_dock_register_notification (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, CAIRO_DOCK_RUN_AFTER, NULL);
 	
-	cd_keybinder_bind (myConfig.cShortkeyNav, (CDBindkeyHandler) cd_do_on_shortkey_nav, myApplet);
 	cd_keybinder_bind (myConfig.cShortkeySearch, (CDBindkeyHandler) cd_do_on_shortkey_search, myApplet);
 	
 	_register_backends ();
@@ -97,7 +92,6 @@
 		cd_do_destroy_listing (myData.pListing);
 		myData.pListing = NULL;
 		
-		cd_keybinder_bind (myConfig.cShortkeyNav, (CDBindkeyHandler) cd_do_on_shortkey_nav, myApplet);  // shortkey were unbinded during reset_config.
 		cd_keybinder_bind (myConfig.cShortkeySearch, (CDBindkeyHandler) cd_do_on_shortkey_search, myApplet);  // shortkey were unbinded during reset_config.
 		
 		if (myData.sCurrentText != NULL)  // peu probable.

=== modified file 'Scooby-Do/src/applet-notifications.c'
--- Scooby-Do/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -32,7 +32,7 @@
 
 gboolean cd_do_render (gpointer pUserData, CairoContainer *pContainer, cairo_t *pCairoContext)
 {
-	g_return_val_if_fail (cd_do_session_is_running (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	g_return_val_if_fail (!cd_do_session_is_off (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	
 	if (pCairoContext != NULL)
 	{
@@ -49,17 +49,7 @@
 
 gboolean cd_do_update_container (gpointer pUserData, CairoContainer *pContainer, gboolean *bContinueAnimation)
 {
-	g_return_val_if_fail (cd_do_session_is_running (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
-	
-	if (myData.iMotionCount != 0)
-	{
-		myData.iMotionCount --;
-		double f = (double) myData.iMotionCount / 10;
-		cairo_dock_emit_motion_signal (CAIRO_DOCK (pContainer),
-			f * myData.iPrevMouseX + (1-f) * myData.iMouseX,
-			f * myData.iPrevMouseY + (1-f) * myData.iMouseY);
-		*bContinueAnimation = TRUE;
-	}
+	g_return_val_if_fail (!cd_do_session_is_off (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	
 	int iDeltaT = cairo_dock_get_animation_delta_t (pContainer);
 	if (cd_do_session_is_closing ())
@@ -72,7 +62,7 @@
 			*bContinueAnimation = TRUE;
 		cairo_dock_redraw_container (pContainer);
 	}
-	else if (cd_do_session_is_waiting_for_input ())
+	else if (cd_do_session_is_running ())
 	{
 		if (myData.pCharList == NULL)
 		{
@@ -137,31 +127,6 @@
 }*/
 
 
-gboolean cd_do_check_icon_stopped (gpointer pUserData, Icon *pIcon)
-{
-	if (pIcon == myData.pCurrentIcon && ! myData.bIgnoreIconState)
-	{
-		cd_debug ("notre icone vient de se faire stopper\n");
-		myData.pCurrentIcon = NULL;
-		myData.pCurrentDock = NULL;
-		
-		// eventuellement emuler un TAB pour trouver la suivante ...
-	}
-	if (myData.pMatchingIcons != NULL)
-	{
-		myData.pMatchingIcons = g_list_remove (myData.pMatchingIcons, pIcon);
-		if (myData.pCurrentMatchingElement && myData.pCurrentMatchingElement->data == pIcon)
-			myData.pCurrentMatchingElement = NULL;
-		if (myData.pCurrentApplicationToLoad && myData.pCurrentApplicationToLoad->data == pIcon)
-		{
-			myData.pCurrentApplicationToLoad = myData.pCurrentApplicationToLoad->next;
-		}
-	}
-	
-	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
-}
-
-
 static void _check_dock_is_active (gchar *cDockName, CairoDock *pDock, Window *data)
 {
 	Window xActiveWindow = data[0];
@@ -170,6 +135,8 @@
 }
 gboolean cd_do_check_active_dock (gpointer pUserData, Window *XActiveWindow)
 {
+	g_return_val_if_fail (cd_do_session_is_running (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	
 	if (myData.sCurrentText == NULL || XActiveWindow == NULL)
 		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 	Window data[2] = {*XActiveWindow, 0};
@@ -181,73 +148,10 @@
 }
 
 
-static void _place_menu (GtkMenu *menu,
-	gint *x,
-	gint *y,
-	gboolean *push_in,
-	gpointer user_data)
-{
-	/// gerer les docks verticaux ...
-	*x = myData.pCurrentDock->container.iWindowPositionX + myData.pCurrentDock->container.iMouseX;
-	*y = myData.pCurrentDock->container.iWindowPositionY;
-	*push_in = TRUE;
-}
-
-static inline int _orient_arrow (CairoContainer *pContainer, int iKeyVal)
-{
-	switch (iKeyVal)
-	{
-		case GDK_Up :
-			if (pContainer->bIsHorizontal)
-			{
-				if (!pContainer->bDirectionUp)
-					iKeyVal = GDK_Down;
-			}
-			else
-			{
-				iKeyVal = GDK_Left;
-			}
-		break;
-		
-		case GDK_Down :
-			if (pContainer->bIsHorizontal)
-			{
-				if (!pContainer->bDirectionUp)
-					iKeyVal = GDK_Up;
-			}
-			else
-			{
-				iKeyVal = GDK_Right;
-			}
-		break;
-		
-		case GDK_Left :
-			if (!pContainer->bIsHorizontal)
-			{
-				if (pContainer->bDirectionUp)
-					iKeyVal = GDK_Up;
-				else
-					iKeyVal = GDK_Down;
-			}
-		break;
-		
-		case GDK_Right :
-			if (!pContainer->bIsHorizontal)
-			{
-				if (pContainer->bDirectionUp)
-					iKeyVal = GDK_Down;
-				else
-					iKeyVal = GDK_Up;
-			}
-		break;
-		default:
-		break;
-
-	}
-	return iKeyVal;
-}
 gboolean cd_do_key_pressed (gpointer pUserData, CairoContainer *pContainer, guint iKeyVal, guint iModifierType, const gchar *string)
 {
+	g_return_val_if_fail (cd_do_session_is_running (), CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	
 	if (myData.sCurrentText == NULL)
 		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 	
@@ -267,30 +171,6 @@
 	{
 		// on rejette.
 	}
-	else if (iKeyVal == GDK_Menu)  // emulation du clic droit.
-	{
-		if (myData.bNavigationMode)
-		{
-			if (myData.pCurrentIcon != NULL)
-			{
-				myData.bIgnoreIconState = TRUE;
-				cairo_dock_stop_icon_animation (myData.pCurrentIcon);  // car on va perdre le focus.
-				myData.bIgnoreIconState = FALSE;
-			}
-			if (myData.pCurrentDock == NULL)
-				myData.pCurrentDock = g_pMainDock;
-			myData.pCurrentDock->bMenuVisible = TRUE;
-			GtkWidget *menu = cairo_dock_build_menu (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));
-			gtk_widget_show_all (menu);
-			gtk_menu_popup (GTK_MENU (menu),
-				NULL,
-				NULL,
-				(GtkMenuPositionFunc) _place_menu,  // pour positionner le menu sur le dock plutot que sur la souris.
-				NULL,
-				1,
-				gtk_get_current_event_time ());
-		}
-	}
 	else if (iKeyVal == GDK_BackSpace)  // on efface la derniere lettre.
 	{
 		if (myData.iNbValidCaracters > 0)
@@ -303,38 +183,31 @@
 			cd_do_delete_invalid_caracters ();
 			
 			// on relance la recherche.
-			if (myData.bNavigationMode)
-			{
-				if (myData.pCurrentIcon == NULL)  // sinon l'icone actuelle convient toujours.
-					cd_do_search_current_icon (FALSE);
-			}
-			else  // mode recherche.
-			{
-				if (myData.pListingHistory == NULL)  // recherche principale.
-				{
-					g_list_free (myData.pMatchingIcons);
-					myData.pMatchingIcons = NULL;
-					cd_do_search_matching_icons ();
-					if (myData.pMatchingIcons == NULL && myData.sCurrentText->len > 0)  // on n'a trouve aucun programme, on cherche des entrees.
-					{
-						if (myData.iSidLoadExternAppliIdle != 0)
-						{
-							g_source_remove (myData.iSidLoadExternAppliIdle);
-							myData.iSidLoadExternAppliIdle = 0;
-						}
-						cd_do_launch_all_backends ();
-					}
-					else  // on a trouve au moins un programme, on cache le listing des fichiers.
-					{
-						
-						cd_do_hide_listing ();
-					}
-				}
-				else  // sous-recherche => on filtre.
-				{
-					cd_do_filter_current_listing ();
-				}
-			}
+			if (myData.pListingHistory == NULL)  // recherche principale.
+			{
+				g_list_free (myData.pMatchingIcons);
+				myData.pMatchingIcons = NULL;
+				cd_do_search_matching_icons ();
+				if (myData.pMatchingIcons == NULL && myData.sCurrentText->len > 0)  // on n'a trouve aucun programme, on cherche des entrees.
+				{
+					if (myData.iSidLoadExternAppliIdle != 0)
+					{
+						g_source_remove (myData.iSidLoadExternAppliIdle);
+						myData.iSidLoadExternAppliIdle = 0;
+					}
+					cd_do_launch_all_backends ();
+				}
+				else  // on a trouve au moins un programme, on cache le listing des fichiers.
+				{
+					
+					cd_do_hide_listing ();
+				}
+			}
+			else  // sous-recherche => on filtre.
+			{
+				cd_do_filter_current_listing ();
+			}
+			
 			
 			// on repositionne les caracteres et on anime tout ca.
 			cd_do_launch_appearance_animation ();
@@ -345,176 +218,45 @@
 		if (myData.iNbValidCaracters > 0)
 		{
 			gboolean bPrevious = iModifierType & GDK_SHIFT_MASK;
-			if (myData.bNavigationMode)
+			if (myData.pMatchingIcons != NULL)
 			{
-				// on cherche l'icone suivante.
-				cd_do_search_current_icon (TRUE);  // pCurrentIcon peut etre NULL si elle s'est faite detruire pendant la recherche, auquel cas on cherchera juste normalement.
+				cd_do_select_previous_next_matching_icon (!bPrevious);
 			}
-			else 
+			else
 			{
-				if (myData.pMatchingIcons != NULL)
-				{
-					cd_do_select_previous_next_matching_icon (!bPrevious);
-				}
-				else
-				{
-					// faire un truc ?...
-				}
+				// faire un truc ?...
 			}
 		}
 	}
 	else if (iKeyVal == GDK_Return)
 	{
 		cd_debug ("Enter (%s)\n", myData.cSearchText);
-		if (myData.bNavigationMode)
-		{
-			if (myData.pCurrentIcon != NULL && myData.pCurrentDock != NULL)
-			{
-				cd_debug ("on clique sur l'icone '%s' [%d, %d]\n", myData.pCurrentIcon->cName, iModifierType, GDK_SHIFT_MASK);
-				
-				myData.bIgnoreIconState = TRUE;
-				if (iModifierType & GDK_MOD1_MASK)  // ALT
-				{
-					myData.bIgnoreIconState = TRUE;
-					cairo_dock_stop_icon_animation (myData.pCurrentIcon);  // car aucune animation ne va la remplacer.
-					myData.bIgnoreIconState = FALSE;
-					cairo_dock_notify (CAIRO_DOCK_MIDDLE_CLICK_ICON, myData.pCurrentIcon, myData.pCurrentDock);
-				}
-				else if (iModifierType & GDK_CONTROL_MASK)  // CTRL
-				{
-					myData.bIgnoreIconState = TRUE;
-					cairo_dock_stop_icon_animation (myData.pCurrentIcon);  // car on va perdre le focus.
-					myData.bIgnoreIconState = FALSE;
-					
-					myData.pCurrentDock->bMenuVisible = TRUE;
-					GtkWidget *menu = cairo_dock_build_menu (myData.pCurrentIcon, CAIRO_CONTAINER (myData.pCurrentDock));
-					gtk_widget_show_all (menu);
-					gtk_menu_popup (GTK_MENU (menu),
-						NULL,
-						NULL,
-						NULL,
-						NULL,
-						1,
-						gtk_get_current_event_time ());
-				}
-				else if (myData.pCurrentIcon != NULL)
-					cairo_dock_notify (CAIRO_DOCK_CLICK_ICON, myData.pCurrentIcon, myData.pCurrentDock, iModifierType);
-				if (myData.pCurrentIcon != NULL)
-					cairo_dock_start_icon_animation (myData.pCurrentIcon, myData.pCurrentDock);
-				myData.bIgnoreIconState = FALSE;
-				myData.pCurrentIcon = NULL;  // sinon on va interrompre l'animation en fermant la session.
-			}
+		if (myData.pMatchingIcons != NULL)  // on a une appli a lancer.
+		{
+			Icon *pIcon = (myData.pCurrentMatchingElement ? myData.pCurrentMatchingElement->data : myData.pMatchingIcons->data);
+			cairo_dock_launch_command (pIcon->cCommand);
+		}
+		else if (myData.pListing && myData.pListing->pCurrentEntry)  // pas d'appli mais une entree => on l'execute.
+		{
+			CDEntry *pEntry = myData.pListing->pCurrentEntry->data;
+			cd_debug ("on valide l'entree '%s ; %s'\n", pEntry->cName, pEntry->cPath);
+			if (pEntry->execute)
+				pEntry->execute (pEntry);
+			else
+				return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+		}
+		else if (myData.iNbValidCaracters > 0)  // pas d'entree mais du texte => on l'execute tel quel.
+		{
+			cd_debug ("on execute '%s'\n", myData.sCurrentText->str);
+			cairo_dock_launch_command (myData.sCurrentText->str);
+		}
+		
+		if (!(iModifierType & GDK_CONTROL_MASK) && !(iModifierType & GDK_MOD1_MASK) && !(iModifierType & GDK_SHIFT_MASK))
 			cd_do_close_session ();
-		}
-		else  // mode recherche.
-		{
-			if (myData.pMatchingIcons != NULL)  // on a une appli a lancer.
-			{
-				Icon *pIcon = (myData.pCurrentMatchingElement ? myData.pCurrentMatchingElement->data : myData.pMatchingIcons->data);
-				cairo_dock_launch_command (pIcon->cCommand);
-			}
-			else if (myData.pListing && myData.pListing->pCurrentEntry)  // pas d'appli mais une entree => on l'execute.
-			{
-				CDEntry *pEntry = myData.pListing->pCurrentEntry->data;
-				cd_debug ("on valide l'entree '%s ; %s'\n", pEntry->cName, pEntry->cPath);
-				if (pEntry->execute)
-					pEntry->execute (pEntry);
-				else
-					return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
-			}
-			else if (myData.iNbValidCaracters > 0)  // pas d'entree mais du texte => on l'execute tel quel.
-			{
-				cd_debug ("on execute '%s'\n", myData.sCurrentText->str);
-				cairo_dock_launch_command (myData.sCurrentText->str);
-			}
-			
-			if (!(iModifierType & GDK_CONTROL_MASK) && !(iModifierType & GDK_MOD1_MASK) && !(iModifierType & GDK_SHIFT_MASK))
-				cd_do_close_session ();
-		}
 	}
 	else if (iKeyVal == GDK_Left || iKeyVal == GDK_Right || iKeyVal == GDK_Up || iKeyVal == GDK_Down)
 	{
-		if (myData.bNavigationMode)
-		{
-			iKeyVal = _orient_arrow (pContainer, iKeyVal);
-			if (iKeyVal == GDK_Up)
-			{
-				if (myData.pCurrentIcon != NULL && myData.pCurrentIcon->pSubDock != NULL)
-				{
-					cd_debug ("on monte dans le sous-dock %s\n", myData.pCurrentIcon->cName);
-					Icon *pIcon = cairo_dock_get_first_icon (myData.pCurrentIcon->pSubDock->icons);
-					cd_do_change_current_icon (pIcon, myData.pCurrentIcon->pSubDock);
-				}
-			}
-			else if (iKeyVal == GDK_Down)
-			{
-				if (myData.pCurrentDock != NULL && myData.pCurrentDock->iRefCount > 0)
-				{
-					CairoDock *pParentDock = NULL;
-					Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (myData.pCurrentDock, &pParentDock);
-					if (pPointingIcon != NULL)
-					{
-						cd_debug ("on redescend dans le dock parent via %s\n", pPointingIcon->cName);
-						cd_do_change_current_icon (pPointingIcon, pParentDock);
-					}
-				}
-			}
-			else if (iKeyVal == GDK_Left)
-			{
-				if (myData.pCurrentDock == NULL)  // on initialise le deplacement.
-				{
-					myData.pCurrentDock = g_pMainDock;
-					int n = g_list_length (g_pMainDock->icons);
-					if (n > 0)
-					{
-						myData.pCurrentIcon =  g_list_nth_data (g_pMainDock->icons, (n-1) / 2);
-						if (CAIRO_DOCK_IS_SEPARATOR (myData.pCurrentIcon) && n > 1)
-							myData.pCurrentIcon = g_list_nth_data (g_pMainDock->icons, (n+1) / 2);
-					}
-				}
-				if (myData.pCurrentDock->icons != NULL)
-				{
-					Icon *pPrevIcon = cairo_dock_get_previous_icon (myData.pCurrentDock->icons, myData.pCurrentIcon);
-					if (CAIRO_DOCK_IS_SEPARATOR (pPrevIcon))
-						pPrevIcon = cairo_dock_get_previous_icon (myData.pCurrentDock->icons, pPrevIcon);
-					if (pPrevIcon == NULL)  // pas trouve ou bien 1ere icone.
-					{
-						pPrevIcon = cairo_dock_get_last_icon (myData.pCurrentDock->icons);
-					}
-					
-					cd_debug ("on se deplace a gauche sur %s\n", pPrevIcon ? pPrevIcon->cName : "none");
-					cd_do_change_current_icon (pPrevIcon, myData.pCurrentDock);
-				}
-			}
-			else  // Gdk_Right.
-			{
-				if (myData.pCurrentDock == NULL)  // on initialise le deplacement.
-				{
-					myData.pCurrentDock = g_pMainDock;
-					int n = g_list_length (g_pMainDock->icons);
-					if (n > 0)
-					{
-						myData.pCurrentIcon =  g_list_nth_data (g_pMainDock->icons, (n-1) / 2);
-						if (CAIRO_DOCK_IS_SEPARATOR (myData.pCurrentIcon) && n > 1)
-							myData.pCurrentIcon = g_list_nth_data (g_pMainDock->icons, (n+1) / 2);
-					}
-				}
-				if (myData.pCurrentDock->icons != NULL)
-				{
-					Icon *pNextIcon = cairo_dock_get_next_icon (myData.pCurrentDock->icons, myData.pCurrentIcon);
-					if (CAIRO_DOCK_IS_SEPARATOR (pNextIcon))
-						pNextIcon = cairo_dock_get_next_icon (myData.pCurrentDock->icons, pNextIcon);
-					if (pNextIcon == NULL)  // pas trouve ou bien 1ere icone.
-					{
-						pNextIcon = cairo_dock_get_first_icon (myData.pCurrentDock->icons);
-					}
-					
-					cd_debug ("on se deplace a gauche sur %s\n", pNextIcon ? pNextIcon->cName : "none");
-					cd_do_change_current_icon (pNextIcon, myData.pCurrentDock);
-				}
-			}
-		}
-		else if (myData.pMatchingIcons != NULL)
+		if (myData.pMatchingIcons != NULL)
 		{
 			cd_do_select_previous_next_matching_icon (iKeyVal == GDK_Right || iKeyVal == GDK_Down);
 		}
@@ -540,15 +282,7 @@
 	}
 	else if (iKeyVal == GDK_Page_Down || iKeyVal == GDK_Page_Up || iKeyVal == GDK_Home || iKeyVal == GDK_End)
 	{
-		if (myData.bNavigationMode)
-		{
-			if (myData.pCurrentDock == NULL)  // on initialise le deplacement.
-				myData.pCurrentDock = g_pMainDock;
-			Icon *pIcon = (iKeyVal == GDK_Page_Up || iKeyVal == GDK_Home ? cairo_dock_get_first_icon (myData.pCurrentDock->icons) : cairo_dock_get_last_icon (myData.pCurrentDock->icons));
-			cd_debug ("on se deplace a l'extremite sur %s\n", pIcon ? pIcon->cName : "none");
-			cd_do_change_current_icon (pIcon, myData.pCurrentDock);
-		}
-		else if (myData.pListing != NULL)
+		if (myData.pListing != NULL)
 		{
 			if (iKeyVal == GDK_Page_Down || iKeyVal == GDK_Page_Up)
 				cd_do_select_prev_next_page_in_listing (iKeyVal == GDK_Page_Down);  // TRUE <=> next page
@@ -558,7 +292,7 @@
 	}
 	else if (iKeyVal >= GDK_F1 && iKeyVal <= GDK_F9)
 	{
-		if (! myData.bNavigationMode && myData.pListing != NULL && GTK_WIDGET_VISIBLE (myData.pListing->container.pWidget))
+		if (myData.pListing != NULL && GTK_WIDGET_VISIBLE (myData.pListing->container.pWidget))
 		{
 			cd_debug ("modification du filtre : option n°%d", iKeyVal - GDK_F1);
 			cd_do_activate_filter_option (iKeyVal - GDK_F1);
@@ -568,7 +302,7 @@
 	else if (string)  /// utiliser l'unichar ...
 	{
 		cd_debug ("string:'%s'\n", string);
-		int iNbNewChar = 0;
+		guint iNbNewChar = 0;
 		if ((iModifierType & GDK_CONTROL_MASK) && iUnicodeChar == 'v')  // CTRL+v
 		{
 			cd_debug ("CTRL+v\n");
@@ -597,30 +331,25 @@
 			myData.iNbValidCaracters = myData.sCurrentText->len;  // l'utilisateur valide la nouvelle lettre ainsi que celles precedemment ajoutee par completion.
 		}
 		
-		if (myData.bNavigationMode)  // on cherche un lanceur correspondant.
+
+		// on cherche la liste des icones qui correspondent.
+		if (myData.pListingHistory == NULL)
 		{
-			cd_do_search_current_icon (FALSE);
+			//if (! (myData.bFoundNothing || (myData.pListing && myData.pListing->pEntries)))  // on n'est pas deja dans une recherche de fichiers
+			if (myData.iNbValidCaracters == iNbNewChar || myData.pMatchingIcons != NULL)  // 1er ajout de lettre ou precedente recherche d'icones fructueuse => on remet ca.
+			{
+				cd_do_search_matching_icons ();
+			}
+			
+			// si on n'a trouve aucun lanceur, on lance la recherche dans les backends.
+			if (myData.pMatchingIcons == NULL)
+			{
+				cd_do_launch_all_backends ();
+			}
 		}
-		else  // on cherche la liste des icones qui correspondent.
+		else
 		{
-			if (myData.pListingHistory == NULL)
-			{
-				//if (! (myData.bFoundNothing || (myData.pListing && myData.pListing->pEntries)))  // on n'est pas deja dans une recherche de fichiers
-				if (myData.iNbValidCaracters == iNbNewChar || myData.pMatchingIcons != NULL)  // 1er ajout de lettre ou precedente recherche d'icones fructueuse => on remet ca.
-				{
-					cd_do_search_matching_icons ();
-				}
-				
-				// si on n'a trouve aucun lanceur, on lance la recherche dans les backends.
-				if (myData.pMatchingIcons == NULL)
-				{
-					cd_do_launch_all_backends ();
-				}
-			}
-			else
-			{
-				cd_do_filter_current_listing ();
-			}
+			cd_do_filter_current_listing ();
 		}
 		
 		// on rajoute une surface/texture pour la/les nouvelle(s) lettre(s).
@@ -636,22 +365,14 @@
 }
 
 
-#define _cd_do_on_shortkey(bNewModeNav) \
-	if (myData.sCurrentText == NULL) { \
-		myData.bNavigationMode = bNewModeNav; \
-		cd_do_open_session (); } \
-	else { \
-		cd_do_close_session (); \
-		if (myData.bNavigationMode != bNewModeNav) { \
-			cd_do_open_session (); \
-			myData.bNavigationMode = bNewModeNav; } }
-	
-void cd_do_on_shortkey_nav (const char *keystring, gpointer data)
-{
-	_cd_do_on_shortkey (TRUE);
-}
-
 void cd_do_on_shortkey_search (const char *keystring, gpointer data)
 {
-	_cd_do_on_shortkey (FALSE);
+	if (! cd_do_session_is_running ())
+	{
+		cd_do_open_session ();
+	}
+	else
+	{
+		cd_do_close_session ();
+	}
 }

=== modified file 'Scooby-Do/src/applet-notifications.h'
--- Scooby-Do/src/applet-notifications.h	2009-10-05 19:27:17 +0000
+++ Scooby-Do/src/applet-notifications.h	2010-09-16 01:12:52 +0000
@@ -35,16 +35,12 @@
 //gboolean cd_do_enter_container (gpointer pUserData, CairoContainer *pContainer, gboolean *bStartAnimation);
 
 
-gboolean cd_do_check_icon_stopped (gpointer pUserData, Icon *pIcon);
-
-
 gboolean cd_do_check_active_dock (gpointer pUserData, Window *XActiveWindow);
 
 
 gboolean cd_do_key_pressed (gpointer pUserData, CairoContainer *pContainer, guint iKeyVal, guint iModifierType, const gchar *string);
 
 
-void cd_do_on_shortkey_nav (const char *keystring, gpointer data);
 void cd_do_on_shortkey_search (const char *keystring, gpointer data);
 
 

=== modified file 'Scooby-Do/src/applet-search.c'
--- Scooby-Do/src/applet-search.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-search.c	2010-09-16 01:12:52 +0000
@@ -70,7 +70,7 @@
 	pBackend->bFoundNothing = FALSE;
 	pBackend->bTooManyResults = FALSE;
 	
-	if (! cd_do_session_is_waiting_for_input () || myData.pListingHistory != NULL)  // on a quitte la session ou on a choisi une entree en cours de route.
+	if (! cd_do_session_is_running () || myData.pListingHistory != NULL)  // on a quitte la session ou on a choisi une entree en cours de route.
 	{
 		cd_debug (" on a quitte la session ou on a choisi une entree en cours de route\n");
 		_discard_results (pBackend);

=== modified file 'Scooby-Do/src/applet-session.c'
--- Scooby-Do/src/applet-session.c	2010-08-07 01:43:25 +0000
+++ Scooby-Do/src/applet-session.c	2010-09-16 01:12:52 +0000
@@ -29,22 +29,34 @@
 
 void cd_do_open_session (void)
 {
-	// on termine l'animation de fin de la precedente session.
+	if (cd_do_session_is_running ())  // session already running
+		return;
+	
+	// on termine la precedente session.
 	cd_do_exit_session ();
 	cd_do_stop_all_backends ();  // on le fait maintenant pour ne pas bloquer au exit.
 	
-	// on s'abonne aux notifications dont on aura besoin pour la session.
-	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_UPDATE_DOCK, (CairoDockNotificationFunc) cd_do_update_container, CAIRO_DOCK_RUN_AFTER, NULL);
-	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) cd_do_render, CAIRO_DOCK_RUN_AFTER, NULL);
-	cairo_dock_register_notification (CAIRO_DOCK_STOP_ICON, (CairoDockNotificationFunc) cd_do_check_icon_stopped, CAIRO_DOCK_RUN_AFTER, NULL);
+	// register to draw on dock.
+	if (cd_do_session_is_off ())
+	{
+		cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock),
+			CAIRO_DOCK_UPDATE_DOCK,
+			(CairoDockNotificationFunc) cd_do_update_container,
+			CAIRO_DOCK_RUN_AFTER, NULL);
+		cairo_dock_register_notification_on_container (CAIRO_CONTAINER (g_pMainDock),
+			CAIRO_DOCK_RENDER_DOCK,
+			(CairoDockNotificationFunc) cd_do_render,
+			CAIRO_DOCK_RUN_AFTER, NULL);
+	}
+	
+	// wait for keyboard input.
+	cairo_dock_register_notification (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, CAIRO_DOCK_RUN_AFTER, NULL);
 	cairo_dock_register_notification (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, CAIRO_DOCK_RUN_AFTER, NULL);
-	//cairo_dock_register_notification (CAIRO_DOCK_ENTER_DOCK, (CairoDockNotificationFunc) cd_do_enter_container, CAIRO_DOCK_RUN_FIRST, NULL);
 	
-	// on se met en attente de texte.
 	myData.sCurrentText = g_string_sized_new (20);
 	myConfig.labelDescription.iSize = myConfig.fFontSizeRatio * g_pMainDock->iMaxDockHeight;
 	myData.iPromptAnimationCount = 0;
-	if (! myData.bNavigationMode && myData.pPromptSurface == NULL)
+	if (myData.pPromptSurface == NULL)
 	{
 		cairo_t *pCairoContext = cairo_dock_create_context_from_window (CAIRO_CONTAINER (g_pMainDock));
 		myData.pPromptSurface = cairo_dock_create_surface_from_text (D_("Enter your search"), &myConfig.labelDescription, &myData.iPromptWidth, &myData.iPromptHeight);
@@ -54,22 +66,9 @@
 			myData.iPromptTexture = cairo_dock_create_texture_from_surface (myData.pPromptSurface);
 		}
 	}
-	else if (myData.bNavigationMode && myData.pArrowSurface == NULL)
-	{
-		cairo_t *pCairoContext = cairo_dock_create_context_from_window (CAIRO_CONTAINER (g_pMainDock));
-		myData.pArrowSurface = cairo_dock_create_surface_for_icon (MY_APPLET_SHARE_DATA_DIR"/arrows.svg", g_pMainDock->iMaxDockHeight, g_pMainDock->iMaxDockHeight);
-		myData.iArrowWidth = g_pMainDock->iMaxDockHeight;
-		myData.iArrowHeight = g_pMainDock->iMaxDockHeight;
-		cairo_destroy (pCairoContext);
-		if (g_bUseOpenGL)
-		{
-			myData.iArrowTexture = cairo_dock_create_texture_from_surface (myData.pArrowSurface);
-		}
-	}
+	
 	// on montre le main dock.
-	myData.bIgnoreIconState = TRUE;
-	cairo_dock_emit_enter_signal (g_pMainDock);
-	myData.bIgnoreIconState = FALSE;
+	cairo_dock_emit_enter_signal (CAIRO_CONTAINER (g_pMainDock));
 	
 	// le main dock prend le focus.
 	myData.iPreviouslyActiveWindow = cairo_dock_get_active_xwindow ();
@@ -81,24 +80,23 @@
 	
 	// On lance l'animation d'attente.
 	cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
+	
+	myData.iSessionState = 2;
 }
 
 void cd_do_close_session (void)
 {
-	// on ne veut plus de texte.
+	if (! cd_do_session_is_running ())  // session not running
+		return;
+	
+	// no more keyboard input.
+	cairo_dock_remove_notification_func (CAIRO_DOCK_KEY_PRESSED, (CairoDockNotificationFunc) cd_do_key_pressed, NULL);
+	cairo_dock_remove_notification_func (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, NULL);
+	
 	g_string_free (myData.sCurrentText, TRUE);
 	myData.sCurrentText = NULL;
 	myData.iNbValidCaracters = 0;
 	
-	// on remet a zero la session.
-	if (myData.pCurrentIcon != NULL)
-	{
-		myData.bIgnoreIconState = TRUE;
-		cairo_dock_stop_icon_animation (myData.pCurrentIcon);
-		myData.bIgnoreIconState = FALSE;
-		myData.pCurrentIcon = NULL;
-	}
-	
 	// on cache les resultats
 	cd_do_hide_listing ();
 	
@@ -106,16 +104,7 @@
 	myData.cSearchText = NULL;
 	myData.iCurrentFilter = 0;
 	
-	if (myData.pCurrentDock != NULL)
-	{
-		//cairo_dock_leave_from_main_dock (myData.pCurrentDock);  /// voir avec un emit_leave_signal ...
-		cairo_dock_emit_leave_signal (myData.pCurrentDock);
-		myData.pCurrentDock = NULL;
-	}
-	if (myData.pCurrentDock != g_pMainDock)
-	{
-		cairo_dock_emit_leave_signal (g_pMainDock);
-	}
+	cairo_dock_emit_leave_signal (CAIRO_CONTAINER (g_pMainDock));
 	
 	// on redonne le focus a l'ancienne fenetre.
 	if (myData.iPreviouslyActiveWindow != 0)
@@ -131,20 +120,26 @@
 	myData.iCloseTime = myConfig.iCloseDuration;
 	cairo_dock_launch_animation (CAIRO_CONTAINER (g_pMainDock));
 	cairo_dock_freeze_docks (FALSE);
+	
+	myData.iSessionState = 1;
 }
 
 void cd_do_exit_session (void)
 {
+	if (cd_do_session_is_off ())  // session already off
+		return;
+	
+	
+	cd_do_close_session ();
+	
+	myData.iCloseTime = 0;
+	
 	cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_RENDER_DOCK, (CairoDockNotificationFunc) cd_do_render, NULL);
 	cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (g_pMainDock), CAIRO_DOCK_UPDATE_DOCK, (CairoDockNotificationFunc) cd_do_update_container, NULL);
-	cairo_dock_remove_notification_func (CAIRO_DOCK_STOP_ICON, (CairoDockNotificationFunc) cd_do_check_icon_stopped, NULL);
-	cairo_dock_remove_notification_func (CAIRO_DOCK_WINDOW_ACTIVATED, (CairoDockNotificationFunc) cd_do_check_active_dock, NULL);
-	//cairo_dock_remove_notification_func (CAIRO_DOCK_ENTER_DOCK, (CairoDockNotificationFunc) cd_do_enter_container, NULL);
-	
-	// arreter les backends...
-	
-	
-	myData.iCloseTime = 0;
+	
+	/// arreter les backends...
+	
+	
 	if (myData.pCharList != NULL)
 	{
 		cd_do_free_char_list (myData.pCharList);
@@ -179,6 +174,8 @@
 		myData.iPreviousMatchingOffset = 0;
 		myData.iCurrentMatchingOffset = 0;
 	}
+	
+	myData.iSessionState = 0;
 }
 
 
@@ -214,7 +211,8 @@
 	CDChar *pChar;
 	cairo_t *pCairoContext = cairo_dock_create_context_from_window (CAIRO_CONTAINER (g_pMainDock));
 	int iDeltaT = cairo_dock_get_animation_delta_t (g_pMainDock);
-	int i, iOffsetX=0;
+	guint i;
+	int iOffsetX=0;
 	for (i = myData.iNbValidCaracters-0; i < myData.sCurrentText->len; i++)
 	{
 		//g_print (" on charge la lettre '%c' (%d) tex:%d\n", myData.sCurrentText->str[i], i, bLoadTexture);
@@ -297,7 +295,7 @@
 	// on efface les lettres precedentes jusqu'a la derniere position validee.
 	CDChar *pChar;
 	GList *c = g_list_last (myData.pCharList), *c_prev;
-	int i;
+	guint i;
 	for (i = myData.iNbValidCaracters; i < myData.sCurrentText->len && c != NULL; i ++)
 	{
 		//g_print ("on efface '%c'\n", myData.sCurrentText->str[i]);

=== modified file 'Scooby-Do/src/applet-session.h'
--- Scooby-Do/src/applet-session.h	2009-10-05 19:27:17 +0000
+++ Scooby-Do/src/applet-session.h	2010-09-16 01:12:52 +0000
@@ -31,11 +31,9 @@
 
 void cd_do_exit_session (void);
 
-#define cd_do_session_is_waiting_for_input(...) (myData.sCurrentText != NULL)
-#define cd_do_session_is_closing(...) (myData.iCloseTime != 0)
-#define cd_do_session_is_running(...) (cd_do_session_is_waiting_for_input () || cd_do_session_is_closing ())
-#define cd_do_session_is_in_navigation_mode(...) (myData.pCharList == NULL)
-#define cd_do_session_is_in_selection_mode(...) (myData.pCharList != NUUL)
+#define cd_do_session_is_running(...) (myData.iSessionState == 2)
+#define cd_do_session_is_closing(...) (myData.iSessionState == 1)
+#define cd_do_session_is_off(...) (myData.iSessionState == 0)
 
 void cd_do_free_char (CDChar *pChar);
 void cd_do_free_char_list (GList *pCharList);

=== modified file 'Scooby-Do/src/applet-struct.h'
--- Scooby-Do/src/applet-struct.h	2010-02-14 00:51:22 +0000
+++ Scooby-Do/src/applet-struct.h	2010-09-16 01:12:52 +0000
@@ -23,30 +23,11 @@
 
 #include <cairo-dock.h>
 
-/**Le concept de ce plug-in est le suivant : 
- * - l'utilisateur l'active par la combinaison de touches pre-definie :
- *   => mode navigation : les fleches deplacent l'icone courante
- *      une lettre deplace sur la 1ere icone correspondante au mot courant
- *      TAB deplace sur l'icone suivante corespondante au mot courant
- *      la completion est automatique
- *      si aucune icone n'est trouvee, la completion elargie est utilisee.
- *   => mode recherche : les fleches deplacent parmi la liste d'icones correspondantes
- *      une lettre reduit/elargit la liste courante
- *      les icones de la liste sont affichees dans le dock principal, zoomees si necessaire
- *      completion: idem
- * - l'utilisateur appuie sur une lettre en ayant la souris dans un dock ayant le focus :
- *   => le mode navigation est active avec cette 1ere lettre
- *      seule le dock courant est pris en compte
- *      en cas de sortie du dock, la session est terminee
- *      la completion est automatique sur les icones trouvees seulement.
- * */
-
 //\___________ structure containing the applet's configuration parameters.
 struct _AppletConfig {
 	gdouble fFontSizeRatio;  // 1 <=> taille du dock
 	gboolean bTextOnTop;
 	CairoDockLabelDescription labelDescription;
-	gchar *cShortkeyNav;
 	gchar *cShortkeySearch;
 	gchar *cIconAnimation;
 	gdouble pFrameColor[4];
@@ -167,31 +148,19 @@
 
 //\___________ structure containing the applet's data, like surfaces, dialogs, results of calculation, etc.
 struct _AppletData {
+	gint iSessionState;  // 0:no session, 1: session closing, 2: session running
 	GString *sCurrentText;
-	gint iStopCount;
-	gint iNbValidCaracters;
+	guint iNbValidCaracters;
 	Window iPreviouslyActiveWindow;
-	Icon *pCurrentIcon;
-	CairoDock *pCurrentDock;
 	gint iTextWidth, iTextHeight;
 	gint iCloseTime;
 	GList *pCharList;
-	gboolean bIgnoreIconState;
 	gint iAppearanceTime;
 	
-	gint iPrevMouseX, iPrevMouseY;
-	gint iMouseX, iMouseY;
-	gint iMotionCount;
-	
-	gboolean bNavigationMode;
-	gboolean bSessionStartedAutomatically;
 	gint iPromptAnimationCount;
 	cairo_surface_t *pPromptSurface;
 	gint iPromptWidth, iPromptHeight;
 	GLuint iPromptTexture;
-	cairo_surface_t *pArrowSurface;
-	gint iArrowWidth, iArrowHeight;
-	GLuint iArrowTexture;
 	
 	GList *pMatchingIcons;
 	GList *pCurrentMatchingElement;

=== modified file 'Status-Notifier/CMakeLists.txt'
--- Status-Notifier/CMakeLists.txt	2010-08-07 01:43:25 +0000
+++ Status-Notifier/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -1,15 +1,3 @@
 
 add_subdirectory(src)
 add_subdirectory(data)
-
-
-########### install files ###############
-
-
-
-
-#original Makefile.am contents follow:
-
-##dnl Process this file with automake to produce Makefile.in
-#
-#SUBDIRS = . src data

=== modified file 'Status-Notifier/data/Status-Notifier.conf.in'
--- Status-Notifier/data/Status-Notifier.conf.in	2010-08-07 01:43:25 +0000
+++ Status-Notifier/data/Status-Notifier.conf.in	2010-09-16 01:12:52 +0000
@@ -24,88 +24,78 @@
 #A
 handbook=CD_APPLET_NAME
 
+
 #[gtk-convert]
 [Desklet]
 
 #X[Position]
 frame_pos =
 
-#b Lock position ?
-#{If locked, the desklet can't be moved by simply dragging it with the left mouse button. Of course you can still move it with ALT + left_click.}
+#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+[48;512] Desklet's dimension (width x height) :
-#{Depending on your WindowManager, you can resize it with ALT + middle_click or ALT + left_click for exemple.}
+#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's position (x ; y) :
-#{Depending on your WindowManager, you can move it with ALT + left_click}
+#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 :
+#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 ?
+#b Is detached from the dock
 initially detached=false
-#l[Normal;Keep above;Keep below;On Widget Layer;Reserve space] Visibility :
+#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 ?
+#b Should be visible on all desktops?
 sticky=true
 
-
-
-
 #F[Decorations;gtk-orientation-portrait]
 frame_deco=
 
-#o+ Choose a decoration theme for this desklet :
+#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 :
-#{It's an image that will be displayed below the drawings, like a frame for exemple. Let empty to not use any.}
+#S+ Background image:
+#{Image to be displayed below drawings, e.g. a frame. Leave empty for no image.}
 bg desklet =
-#e+[0;1] Background tansparency :
+#e+[0;1] Background transparency:
 bg alpha = 1
-#i+[0;256] Left offset :
-#{in pixels. Use this to adjust the left position of the drawings.}
+#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 the drawings.}
+#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 the drawings.}
+#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 the drawings.}
+#i+[0;256] Bottom offset:
+#{in pixels. Use this to adjust the bottom position of drawings.}
 bottom offset = 0
-#S+ Foreground image :
-#{It's an image that will be displayed above the drawings, like a reflect for exemple. Let empty to not use any.}
+#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 :
+#e+[0;1] Foreground tansparency:
 fg alpha = 1
 
 
 #[gtk-preferences]
 [Configuration]
 
-#b This is a boolean parameter. Y/N ?
-#{This is a tooltip for this parameter.}
-yes_no = false
-
-#i[0;10] This integer can go from 0 to 10 :
-int = 0
-
-#s Enter some text here :
-text = pouic pouic
-
+#b Display items in compact mode?
+compact = false

=== removed file 'Status-Notifier/data/messages'
--- Status-Notifier/data/messages	2010-08-07 01:43:25 +0000
+++ Status-Notifier/data/messages	1970-01-01 00:00:00 +0000
@@ -1,100 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its label in the dock :")
-
-_("Let empty to use the default one.")
-
-_("Image's filename :")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("Position")
-
-_("If locked, the desklet can't be moved by simply dragging it with the left mouse button. Of course you can still move it with ALT + left_click.")
-
-_("Lock position ?")
-
-_("Depending on your WindowManager, you can resize it with ALT + middle_click or ALT + left_click for exemple.")
-
-_("Desklet's dimension (width x height) :")
-
-_("Depending on your WindowManager, you can move it with ALT + left_click")
-
-_("Desklet's position (x ; y) :")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation :")
-
-_("Visibility")
-
-_("Is detached from the dock ?")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility :")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("On Widget Layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops ?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet :")
-
-_("It's an image that will be displayed below the drawings, like a frame for exemple. Let empty to not use any.")
-
-_("Background image :")
-
-_("Background tansparency :")
-
-_("in pixels. Use this to adjust the left position of the drawings.")
-
-_("Left offset :")
-
-_("in pixels. Use this to adjust the top position of the drawings.")
-
-_("Top offset :")
-
-_("in pixels. Use this to adjust the right position of the drawings.")
-
-_("Right offset :")
-
-_("in pixels. Use this to adjust the bottom position of the drawings.")
-
-_("Bottom offset :")
-
-_("It's an image that will be displayed above the drawings, like a reflect for exemple. Let empty to not use any.")
-
-_("Foreground image :")
-
-_("Foreground tansparency :")
-
-_("Configuration")
-
-_("This is a tooltip for this parameter.")
-
-_("This is a boolean parameter. Y/N ?")
-
-_("This integer can go from 0 to 10 :")
-
-_("Enter some text here :")
-

=== modified file 'Status-Notifier/src/CMakeLists.txt'
--- Status-Notifier/src/CMakeLists.txt	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -2,14 +2,12 @@
 ########### sources ###############
 
 SET(cd-StatusNotifier_LIB_SRCS
-	applet-init.c
-	applet-init.h
-	applet-config.c
-	applet-config.h
-	applet-host.c
-	applet-host.h
-	applet-notifications.c
-	applet-notifications.h
+	applet-init.c 		applet-init.h
+	applet-config.c 		applet-config.h
+	applet-host.c 		applet-host.h
+	applet-item.c 		applet-item.h
+	applet-draw.c 		applet-draw.h
+	applet-notifications.c 	applet-notifications.h
 	applet-struct.h
 )
 
@@ -27,15 +25,15 @@
 
 include_directories (
 	${PACKAGE_INCLUDE_DIRS}
-	${STATUS_NOTIFIER_PACKAGE_INCLUDE_DIRS})
+	${STATUS_NOTIFIER_INCLUDE_DIRS})
 
 link_directories (
 	${PACKAGE_LIBRARY_DIRS}
-	${STATUS_NOTIFIER_PACKAGE_LIBRARY_DIRS})
+	${STATUS_NOTIFIER_LIBRARY_DIRS})
 
 target_link_libraries (${PACKAGE_STATUS_NOTIFIER}
 	${PACKAGE_LIBRARIES}
-	${STATUS_NOTIFIER_PACKAGE_LIBRARIES})
+	${STATUS_NOTIFIER_LIBRARIES})
 
 ########### install files ###############
 

=== modified file 'Status-Notifier/src/applet-config.c'
--- Status-Notifier/src/applet-config.c	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -28,15 +28,15 @@
 
 //\_________________ 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.bCompactMode = CD_CONFIG_GET_BOOLEAN ("Configuration", "compact");
+	myConfig.bResizeIcon = FALSE;
+	myConfig.iNbLines = 2;
 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
 	
-	
 CD_APPLET_RESET_CONFIG_END
 
 

=== added file 'Status-Notifier/src/applet-draw.c'
--- Status-Notifier/src/applet-draw.c	1970-01-01 00:00:00 +0000
+++ Status-Notifier/src/applet-draw.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,242 @@
+/**
+* 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 <sys/types.h>
+#include <unistd.h>
+
+#include "applet-struct.h"
+#include "applet-item.h"
+#include "applet-draw.h"
+
+
+void cd_satus_notifier_compute_grid (void)
+{
+	if (myData.pItems == NULL)
+		return;
+	
+	// on compte les items actifs.
+	int iNbItems = 0;
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->iStatus != CD_STATUS_PASSIVE)
+			iNbItems ++;
+	}
+	
+	// taille disponible.
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	
+	// on calcule la meilleure grille.
+	int iNbLines, iNbItemsByLine;
+	int iSize, iSizeMax = 0;
+	for (iNbLines = 1; iNbLines <= iNbItems; iNbLines ++)
+	{
+		iNbItemsByLine = iNbItems / iNbLines;
+		iSize = MIN (iWidth / iNbItemsByLine, iHeight / iNbLines);
+		if (iSize > iSizeMax)
+		{
+			iSizeMax = iSize;
+			myData.iNbLines = iNbLines;
+			myData.iNbColumns = iNbItemsByLine;
+			myData.iItemSize = iSize;
+		}
+	}
+	//g_print ("satus_notifier : %dx%d\n", myData.iNbLines, myData.iNbColumns);
+}
+
+
+void cd_satus_notifier_draw_compact_icon (void)
+{
+	//g_print ("%s ()\n", __func__);
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	
+	// erase all.
+	cairo_dock_erase_cairo_context (myDrawContext);
+	
+	// icons background.
+	if (g_pIconBackgroundBuffer.pSurface != NULL)
+	{
+		cairo_save (myDrawContext);
+		cairo_scale(myDrawContext,
+			iWidth / g_pIconBackgroundBuffer.iWidth,
+			iHeight / g_pIconBackgroundBuffer.iHeight);
+		cairo_set_source_surface (myDrawContext,
+			g_pIconBackgroundBuffer.pSurface,
+			0.,
+			0.);
+		cairo_paint (myDrawContext);
+		cairo_restore (myDrawContext);
+	}
+	
+	int x_pad = (iWidth - myData.iItemSize * myData.iNbColumns) / 2;  // pour centrer le dessin.
+	int y_pad = (iHeight - myData.iItemSize * myData.iNbLines) / 2;
+	
+	// draw each active item, in lines, from left to right.
+	int i = 0, j = 0;  // ligne, colonne
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->pSurface != NULL && pItem->iStatus != CD_STATUS_PASSIVE)
+		{
+			cairo_set_source_surface (myDrawContext,
+				pItem->pSurface,
+				x_pad + j * myData.iItemSize,
+				y_pad + i * myData.iItemSize);
+			cairo_paint (myDrawContext);
+			
+			j ++;
+			if (j == myData.iNbColumns)  // ligne suivante.
+			{
+				j = 0;
+				i ++;
+			}
+		}
+	}
+	
+	// update cairo/opengl
+	if (CD_APPLET_MY_CONTAINER_IS_OPENGL)  // we are lazy, we could do an opengl rendering.
+	{
+		cairo_dock_update_icon_texture (myIcon);
+	}
+	else if (myDock)  // les reflets pour cairo.
+	{
+		CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
+	}
+	
+	CD_APPLET_REDRAW_MY_ICON;
+}
+
+
+void cd_satus_notifier_reload_compact_mode (void)
+{
+	//g_print ("%s ()\n", __func__);
+	// re-compute the grid.
+	int iPrevSize = myData.iItemSize;
+	cd_satus_notifier_compute_grid ();
+	
+	// reload surfaces if their size has changed.
+	//g_print (" size: %d -> %d\n", iPrevSize, myData.iItemSize);
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->iStatus != CD_STATUS_PASSIVE)
+		{
+			if (iPrevSize != myData.iItemSize || pItem->pSurface == NULL)
+			{
+				gchar *cIconPath = cd_satus_notifier_search_item_icon_s_path (pItem);
+				if (cIconPath != NULL)
+				{
+					if (pItem->pSurface != NULL)
+						cairo_surface_destroy (pItem->pSurface);
+					pItem->pSurface = cairo_dock_create_surface_from_icon (cIconPath, myData.iItemSize, myData.iItemSize);
+					g_free (cIconPath);
+				}
+			}
+		}
+	}
+	
+	// redraw all.
+	cd_satus_notifier_draw_compact_icon ();
+}
+
+
+CDStatusNotifierItem *cd_satus_notifier_find_item_from_coord (void)
+{
+	if (myData.pItems == NULL)
+		return NULL;
+	
+	int iMouseX, iMouseY;
+	iMouseX = myContainer->iMouseX - myIcon->fDrawX;
+	iMouseY = myContainer->iMouseY - myIcon->fDrawY;
+	
+	//g_print ("%s (%d;%d)\n", __func__, iMouseX, iMouseY);
+	// get index on the grid.
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	int x_pad = (iWidth - myData.iItemSize * myData.iNbColumns) / 2;
+	int y_pad = (iHeight - myData.iItemSize * myData.iNbLines) / 2;
+	
+	int line, col;  // line, column
+	col = (iMouseX - x_pad) / myData.iItemSize;
+	line = (iMouseY - y_pad) / myData.iItemSize;
+	
+	// get item from index.
+	CDStatusNotifierItem *pItem, *pFoundItem = NULL;
+	GList *it;
+	int i=0, j=0;  // line, column
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->pSurface != NULL && pItem->iStatus != CD_STATUS_PASSIVE)
+		{
+			if (i == line && j == col)
+			{
+				pFoundItem = pItem;
+				break;
+			}
+			j ++;
+			if (j == myData.iNbColumns)  // next line.
+			{
+				j = 0;
+				i ++;
+			}
+		}
+	}
+	
+	return pFoundItem;
+}
+
+
+void cd_satus_notifier_update_item_image (CDStatusNotifierItem *pItem)
+{
+	if (myConfig.bCompactMode)
+	{
+		gchar *cIconPath = cd_satus_notifier_search_item_icon_s_path (pItem);
+		if (cIconPath != NULL)
+		{
+			if (pItem->pSurface != NULL)
+				cairo_surface_destroy (pItem->pSurface);
+			pItem->pSurface = cairo_dock_create_surface_from_icon (cIconPath, myData.iItemSize, myData.iItemSize);
+			g_free (cIconPath);
+		}
+		cd_satus_notifier_draw_compact_icon ();
+	}
+	else
+	{
+		Icon *pIcon = cd_satus_notifier_get_icon_from_item (pItem);
+		if (pIcon != NULL && pIcon->pIconBuffer != NULL)
+		{
+			cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
+			cairo_dock_set_image_on_icon (pIconContext,
+				pItem->iStatus == CD_STATUS_NEEDS_ATTENTION ? pItem->cAttentionIconName : pItem->cIconName,
+				pIcon, CD_APPLET_MY_ICONS_LIST_CONTAINER);
+			cairo_destroy (pIconContext);
+		}
+	}
+}

=== added file 'Status-Notifier/src/applet-draw.h'
--- Status-Notifier/src/applet-draw.h	1970-01-01 00:00:00 +0000
+++ Status-Notifier/src/applet-draw.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,41 @@
+/**
+* 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>
+
+
+void cd_satus_notifier_compute_grid (void);
+
+
+void cd_satus_notifier_draw_compact_icon (void);
+
+
+void cd_satus_notifier_reload_compact_mode (void);
+
+
+CDStatusNotifierItem *cd_satus_notifier_find_item_from_coord (void);
+
+
+void cd_satus_notifier_update_item_image (CDStatusNotifierItem *pItem);
+
+
+#endif

=== modified file 'Status-Notifier/src/applet-host.c'
--- Status-Notifier/src/applet-host.c	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/applet-host.c	2010-09-16 01:12:52 +0000
@@ -23,155 +23,155 @@
 #include <unistd.h>
 
 #include "applet-struct.h"
+#include "applet-item.h"
+#include "applet-draw.h"
 #include "applet-host.h"
 
-#define CD_STATUS_NOTIFIER_ITEM_IFACE "org.kde.StatusNotifierItem"
-#define CD_STATUS_NOTIFIER_ITEM_OBJ "/StatusNotifierItem"
 #define CD_STATUS_NOTIFIER_HOST_ADDR "org.kde.StatusNotifierHost"
+
+#define CD_STATUS_NOTIFIER_WATCHER_ADDR2 "org.kde.NotificationItemWatcher"
+#define CD_STATUS_NOTIFIER_WATCHER_OBJ2 "/NotificationItemWatcher"
+#define CD_STATUS_NOTIFIER_WATCHER_IFACE2 "org.kde.NotificationItemWatcher"
+
 #define CD_STATUS_NOTIFIER_WATCHER_ADDR "org.kde.StatusNotifierWatcher"
 #define CD_STATUS_NOTIFIER_WATCHER_OBJ "/StatusNotifierWatcher"
 #define CD_STATUS_NOTIFIER_WATCHER_IFACE "org.kde.StatusNotifierWatcher"
 
-static void cd_free_tooltip (CDToolTip *pToolTip);
-static void cd_free_item_data (CDStatusNotifierItemData *pItemData);
-static Icon *cd_satus_notifier_create_item_icon (const gchar *cService);
-
-
-G_DEFINE_TYPE(statusNotifierHostObject, cd_satus_notifier_host, G_TYPE_OBJECT);
-
-static void cd_satus_notifier_host_class_init(statusNotifierHostObjectClass *klass)
-{
-	cd_message("");
-}
-static void cd_satus_notifier_host_init (statusNotifierHostObject *pMainObject)
-{
-	cd_message("");
-	
-	// Initialise the DBus connection
-	pMainObject->connection = cairo_dock_get_session_connection ();
-	
-	//dbus_g_object_type_install_info(cd_satus_notifier_host_get_type(), &dbus_glib_cd_satus_notifier_host_object_info);
-	
-	// Register DBUS path
-	dbus_g_connection_register_g_object(pMainObject->connection, "/org/kde/StatusNotifierHost", G_OBJECT(pMainObject));
-}
-
-
-static CDCategoryEnum _find_category (const gchar *cCategory)
-{
-	if (!cCategory)
-		return CD_CATEGORY_APPLICATION_STATUS;
-	if (*cCategory == 'A')
-		return CD_CATEGORY_APPLICATION_STATUS;
-	if (*cCategory == 'C')
-		return CD_CATEGORY_COMMUNICATIONS;
-	if (*cCategory == 'S')
-		return CD_CATEGORY_SYSTEM_SERVICES;
-	if (*cCategory == 'H')
-		return CD_CATEGORY_HARDWARE;
-	return CD_CATEGORY_APPLICATION_STATUS;
-}
-
-static CDStatusEnum _find_status (const gchar *cStatus)
-{
-	if (!cStatus)
-		return CD_STATUS_ACTIVE;
-	if (*cStatus == 'N')
-		return CD_STATUS_NEEDS_ATTENTION;
-	if (*cStatus == 'A')
-		return CD_STATUS_ACTIVE;
-	if (*cStatus == 'P')
-		return CD_STATUS_PASSIVE;
-	return CD_STATUS_ACTIVE;
-}
-
-static CDToolTip *_make_tooltip_from_dbus_struct (GValueArray *pToolTipTab)
-{
-	CDToolTip *pToolTip = NULL;
-	if (pToolTipTab)
-	{
-		pToolTip = g_new0 (CDToolTip, 1);
-		GValue *v = &pToolTipTab->values[0];
-		if (v && G_VALUE_HOLDS_STRING (v))
-			pToolTip->cIconName = g_strdup (g_value_get_string (v));
-		v = &pToolTipTab->values[2];
-		if (v && G_VALUE_HOLDS_STRING (v))
-			pToolTip->cTitle = g_strdup (g_value_get_string (v));
-		v = &pToolTipTab->values[3];
-		if (v && G_VALUE_HOLDS_STRING (v))
-			pToolTip->cMessage = g_strdup (g_value_get_string (v));
-		if (pToolTip->cMessage != NULL)
-		{
-			if (strncmp (pToolTip->cMessage, "<qt>", 4) == 0)
-			{
-				gchar *str = pToolTip->cMessage;
-				int n = strlen (str);
-				*(str + n - 5) = '\0';
-				pToolTip->cMessage = g_strdup (str+4);
-				g_free (str);
-			}
-			/// remplacer <br/> pas \n
-			
-			/// virer les <nobr> et </nobr>
-			
-			/// virer les <img src=...> et </img>
-			
-		}
-	}
-	return pToolTip;
-}
-
-static void _show_item_tooltip (Icon *pIcon, CDStatusNotifierItemData *pItemData)
-{
-	gchar *cText = g_strdup_printf ("<b>%s</b>\n%s", pItemData->pToolTip->cTitle, pItemData->pToolTip->cMessage);
-	cairo_dock_show_temporary_dialog_with_icon (cText, pIcon, CAIRO_CONTAINER (myIcon->pSubDock), 4000, pItemData->pToolTip->cIconName);
-	g_free (cText);
-}
-
-static void _show_item_status (Icon *pIcon, CDStatusNotifierItemData *pItemData)
-{
-	switch (pItemData->iStatus)
-	{
-		case CD_STATUS_PASSIVE :
-			pIcon->fAlpha = 0.5;
-			cairo_dock_stop_icon_attention (pIcon, myIcon->pSubDock);
-			cairo_dock_redraw_icon (pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-		break;
-		case CD_STATUS_ACTIVE :
-		default:
-			pIcon->fAlpha = 1.;
-			cairo_dock_stop_icon_attention (pIcon, myIcon->pSubDock);
-			cairo_dock_redraw_icon (pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-		break;
-		case CD_STATUS_NEEDS_ATTENTION:
-			pIcon->fAlpha = 1.;
-			cairo_dock_request_icon_attention (pIcon, myIcon->pSubDock, "rotate", 60);
-		break;
-	}
-}
-
+#define CD_INDICATOR_APPLICATION_ADDR "org.ayatana.indicator.application"
+#define CD_INDICATOR_APPLICATION_OBJ "/org/ayatana/indicator/application/service"
+#define CD_INDICATOR_APPLICATION_IFACE "org.ayatana.indicator.application.service"
+
+
+static void _cd_cclosure_marshal_VOID__STRING_INT_STRING_STRING_STRING_STRING_STRING (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)
+{
+	//g_print ("%s ()\n", __func__);
+	typedef void (*GMarshalFunc_VOID__STRING_INT_STRING_STRING_STRING_STRING_STRING) (
+		gpointer     data1,
+		gchar      *arg_1,
+		gint        arg_2,
+		gchar      *arg_3,
+		gchar      *arg_4,
+		gchar      *arg_5,
+		gchar      *arg_6,
+		gchar      *arg_7,
+		gpointer     data2);
+	register GMarshalFunc_VOID__STRING_INT_STRING_STRING_STRING_STRING_STRING callback;
+	register GCClosure *cc = (GCClosure*) closure;
+	register gpointer data1, data2;
+	g_return_if_fail (n_param_values == 8);  // return_value est NULL ici, car la callback ne renvoit rien.
+
+	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_VOID__STRING_INT_STRING_STRING_STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+
+	callback (data1,
+		(char*) g_value_get_string (param_values + 1),
+		g_value_get_int (param_values + 2),
+		(char*) g_value_get_string (param_values + 3),
+		(char*) g_value_get_string (param_values + 4),
+		(char*) g_value_get_string (param_values + 5),
+		(char*) g_value_get_string (param_values + 6),
+		(char*) g_value_get_string (param_values + 7),
+		data2);
+}
+
+
+static CDStatusNotifierItem * _cd_satus_notifier_find_item_from_service (const gchar *cService)
+{
+	g_return_val_if_fail (cService != NULL, NULL);
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->cService && strcmp (pItem->cService, cService) == 0)
+			return pItem;
+	}
+	return NULL;
+}
+
+static CDStatusNotifierItem * _cd_satus_notifier_find_item_from_position (int iPosition)
+{
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->iPosition == iPosition)
+			return pItem;
+	}
+	return NULL;
+}
+
+  //////////////////////////////
+ /// SIGNAUX SUR LE WATCHER ///
+//////////////////////////////
+
+static inline void _add_new_item (const gchar *cService, const gchar *cObjectPath, int iPosition)
+{
+	CDStatusNotifierItem *pItem = _cd_satus_notifier_find_item_from_service (cService);
+	g_return_if_fail (pItem == NULL);  // on evite d'ajouter 2 fois le meme service.
+	
+	pItem = cd_satus_notifier_create_item (cService, cObjectPath);
+	g_return_if_fail (pItem != NULL);
+	
+	pItem->iPosition = iPosition;
+	myData.pItems = g_list_prepend (myData.pItems, pItem);
+	
+	if (pItem->iStatus == CD_STATUS_PASSIVE)  // don't show a passive item.
+		return;
+	if (myConfig.bCompactMode)
+	{
+		cd_satus_notifier_reload_compact_mode ();
+	}
+	else
+	{
+		Icon *pIcon = cd_satus_notifier_create_icon_for_item (pItem);
+		CD_APPLET_ADD_ICON_IN_MY_ICONS_LIST (pIcon);
+	}
+}
+
+static inline void _remove_item (const gchar *cService, int iPosition)
+{
+	CDStatusNotifierItem *pItem = (cService ? _cd_satus_notifier_find_item_from_service (cService) : _cd_satus_notifier_find_item_from_position (iPosition));
+	g_return_if_fail (pItem != NULL);
+	
+	myData.pItems = g_list_remove (myData.pItems, pItem);
+	
+	if (pItem->iStatus == CD_STATUS_PASSIVE)  // the item was passive, therefore not visible.
+		return;
+	if (myConfig.bCompactMode)
+	{
+		cd_satus_notifier_reload_compact_mode ();
+	}
+	else
+	{
+		Icon *pIcon = cd_satus_notifier_get_icon_from_item (pItem);
+		CD_APPLET_REMOVE_ICON_FROM_MY_ICONS_LIST (pIcon);
+	}
+	
+	cd_free_item (pItem);
+}
 
 static void on_new_item (DBusGProxy *proxy_watcher, const gchar *cService, CairoDockModuleInstance *myApplet)
 {
 	CD_APPLET_ENTER;
-	g_print ("new item : '%s'\n", cService);
-	
-	Icon *pIcon = cd_satus_notifier_create_item_icon (cService);
-	CD_APPLET_LEAVE_IF_FAIL (pIcon != NULL);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	cairo_dock_load_icon_buffers (pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-	
-	if (myIcon->pSubDock)
-		cairo_dock_insert_icon_in_dock (pIcon, myIcon->pSubDock, CAIRO_DOCK_UPDATE_DOCK_SIZE, CAIRO_DOCK_ANIMATE_ICON);
-	else
-	{
-		CD_APPLET_LOAD_MY_ICONS_LIST (g_list_copy (myData.pIcons), NULL, "Caroussel", NULL);
-	}
-	
-	if (pItemData->iStatus != CD_STATUS_ACTIVE)
-		_show_item_status (pIcon, pItemData);
+	//g_print ("%s (%s)\n", __func__, cService);
+	
+	_add_new_item (cService, NULL, -1);  // on suppose que leur indicator-application ne mettra jamais -1 comme position.
 	
 	CD_APPLET_LEAVE ();
 }
@@ -179,459 +179,434 @@
 static void on_removed_item (DBusGProxy *proxy_watcher, const gchar *cService, CairoDockModuleInstance *myApplet)
 {
 	CD_APPLET_ENTER;
-	g_print ("item removed : '%s'\n", cService);
-	
-	gchar *str = strchr (cService, '/');
-	if (str)
-		*str = '\0';
-	
-	Icon *pIcon = cd_satus_notifier_find_icon_from_service (cService);
-	CD_APPLET_LEAVE_IF_FAIL (pIcon != NULL);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	myData.pIcons = g_list_remove (myData.pIcons, pIcon);
-	if (myIcon->pSubDock)
-		cairo_dock_detach_icon_from_dock (pIcon, myIcon->pSubDock, TRUE);
-	
-	cd_free_item_data (pItemData);
-	CD_APPLET_SET_MY_ICON_DATA (pIcon, NULL);
-	cairo_dock_free_icon (pIcon);
-	
-	cairo_dock_update_dock_size (myIcon->pSubDock);
-	
-	CD_APPLET_LEAVE ();
-}
-
-static void on_new_item_title (DBusGProxy *proxy_item, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	g_print ("%s ()\n", __func__);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	gchar *cTitle = cairo_dock_dbus_get_property_as_string (pItemData->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "Title");
-	cairo_dock_set_icon_name (cTitle, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-	g_free (cTitle);
-	
-	CD_APPLET_LEAVE ();
-}
-
-static void on_new_item_icon (DBusGProxy *proxy_item, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	g_print ("%s ()\n", __func__);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	gchar *cIconName = cairo_dock_dbus_get_property_as_string (pItemData->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "IconName");
-	cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
-	cairo_dock_set_image_on_icon (pIconContext, pItemData->cAttentionIconName, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-	cairo_destroy (pIconContext);
-	g_free (cIconName);
-	
-	CD_APPLET_LEAVE ();
-}
-
-static void on_new_item_attention_icon (DBusGProxy *proxy_item, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	g_print ("%s ()\n", __func__);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	g_free (pItemData->cAttentionIconName);
-	pItemData->cAttentionIconName = cairo_dock_dbus_get_property_as_string (pItemData->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "AttentionIconName");
-	if (pIcon->bIsDemandingAttention && pIcon->pIconBuffer)
-	{
-		cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
-		cairo_dock_set_image_on_icon (pIconContext, pItemData->cAttentionIconName, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-		cairo_destroy (pIconContext);
-	}
-	
-	CD_APPLET_LEAVE ();
-}
-
-static void on_new_item_overlay_icon (DBusGProxy *proxy_item, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	g_print ("%s ()\n", __func__);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	g_free (pItemData->cOverlayIconName);
-	pItemData->cOverlayIconName = cairo_dock_dbus_get_property_as_string (pItemData->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "OverlayIconName");
-	if (pIcon->pIconBuffer)
-	{
-		cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
-		cairo_dock_set_image_on_icon (pIconContext, pIcon->cFileName, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-		cairo_destroy (pIconContext);
-		
-		if (pItemData->cOverlayIconName != NULL)
-		{
-			CairoEmblem *pEmblem = cairo_dock_make_emblem (pItemData->cOverlayIconName, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-			cairo_dock_set_emblem_position (pEmblem, CAIRO_DOCK_EMBLEM_MIDDLE);
-			cairo_dock_draw_emblem_on_icon (pEmblem, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
-			cairo_dock_free_emblem (pEmblem);
-		}
-	}
-	
-	CD_APPLET_LEAVE ();
-}
-
-static void on_new_item_tooltip (DBusGProxy *proxy_item, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	g_print ("%s ()\n", __func__);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	cairo_dock_remove_dialog_if_any (pIcon);
-	cd_free_tooltip (pItemData->pToolTip);
-	pItemData->pToolTip = NULL;
-	
-	GValueArray *pToolTipTab = cairo_dock_dbus_get_property_as_boxed (pItemData->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "ToolTip");
-	if (pToolTipTab)
-	{
-		pItemData->pToolTip = _make_tooltip_from_dbus_struct (pToolTipTab);
-		
-		if (pItemData->pToolTip && pItemData->pToolTip->cMessage != NULL)
-			_show_item_tooltip (pIcon, pItemData);
-	}
-	
-	CD_APPLET_LEAVE ();
-}
-
-static void on_new_item_status (DBusGProxy *proxy_item, const gchar *cStatus, Icon *pIcon)
-{
-	CD_APPLET_ENTER;
-	g_print ("%s (%s)\n", __func__, cStatus);
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-	CD_APPLET_LEAVE_IF_FAIL (pItemData != NULL);
-	
-	pItemData->iStatus = _find_status (cStatus);
-	_show_item_status (pIcon, pItemData);
-	
-	CD_APPLET_LEAVE ();
-}
-
-
-static int _compare_items (const CDStatusNotifierItemData *i1, const CDStatusNotifierItemData *i2)
-{
-	if (!i1)
-		return -1;
-	if (!i2)
-		return 1;
-	return (i1->iCategory < i2->iCategory ? -1 : (i1->iCategory > i2->iCategory ? 1 : 0));
-}
-static Icon *cd_satus_notifier_create_item_icon (const gchar *cService)
-{
-	gchar *str = strchr (cService, '/');
-	if (str)
-		*str = '\0';
-	g_print (" + item '%s' on the bus\n", cService);
-	
-	//\_________________ get the properties of the item.
-	DBusGProxy *pProxyItemProp = cairo_dock_create_new_session_proxy (
-		cService,
-		"/StatusNotifierItem",
-		"org.freedesktop.DBus.Properties");
-	if (pProxyItemProp == NULL)
-		return NULL;
-	
-	g_print ("getting properties ...\n");
-	GHashTable *hProps = cairo_dock_dbus_get_all_properties (pProxyItemProp, CD_STATUS_NOTIFIER_ITEM_IFACE);
-	if (hProps == NULL)
-		return NULL;
-	
+	//g_print ("%s (%s)\n", __func__, cService);
+	
+	gchar *str = strchr (cService, '/');
+	if (str)
+		*str = '\0';
+	
+	_remove_item (cService, -1);
+	
+	CD_APPLET_LEAVE ();
+}
+
+static void on_new_application (DBusGProxy *proxy_watcher, const gchar *cIconName, gint iPosition, const gchar *cAdress, const gchar *cObjectPath, const gchar *cIconThemePath, const gchar *cLabel, const gchar *cLabelGuide, CairoDockModuleInstance *myApplet)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s (%s, %s, %s, %s, %d)\n", __func__, cAdress, cObjectPath, cIconName, cIconThemePath, iPosition);
+	
+	_add_new_item (cAdress, cObjectPath, iPosition);
+	
+	CD_APPLET_LEAVE ();
+}
+
+static void on_removed_application (DBusGProxy *proxy_watcher, gint iPosition, CairoDockModuleInstance *myApplet)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s (%d)\n", __func__, iPosition);
+	
+	_remove_item (NULL, iPosition);
+	
+	CD_APPLET_LEAVE ();
+}
+
+
+  //////////////////////////////
+ /// INITIALISATION DU HOST ///
+//////////////////////////////
+
+static void _on_get_applications_from_service (DBusGProxy *proxy, DBusGProxyCall *call_id, CairoDockModuleInstance *myApplet)
+{
+	//g_print ("%s ()\n", __func__);
+	CD_APPLET_ENTER;
+	myData.pGetApplicationsCall = NULL;
+	
+	//\______________________ get the applications list from the service.
+	GPtrArray *pApplications = NULL;
+	GError *erreur = NULL;
+	GType g_type_ptrarray = g_type_ptrarray = dbus_g_type_get_collection ("GPtrArray",
+		dbus_g_type_get_struct("GValueArray",
+			G_TYPE_STRING,  // iconname
+			G_TYPE_INT,  // position
+			G_TYPE_STRING,  // dbusaddress
+			DBUS_TYPE_G_OBJECT_PATH,  // dbusobject
+			G_TYPE_STRING,  // iconpath
+			G_TYPE_STRING,  // label
+			G_TYPE_STRING,  // labelguide
+			G_TYPE_INVALID));
+	gboolean bSuccess = dbus_g_proxy_end_call (proxy,
+		call_id,
+		&erreur,
+		g_type_ptrarray, &pApplications,
+		G_TYPE_INVALID);
+	if (erreur != NULL)
+	{
+		g_print ("couldn't get applications in the systray (%s)\n", erreur->message);
+		CD_APPLET_LEAVE ();
+	}
+	if (pApplications == NULL)
+		CD_APPLET_LEAVE ();
+	
+	//\______________________ build each items.
+	guint i, j;
+	GValueArray *va;
 	GValue *v;
-	const gchar *cId = NULL;
-	v = g_hash_table_lookup (hProps, "Id");
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cId = g_value_get_string (v);
-	}
-	g_print ("  ID '%s\n", cId);
-	
-	const gchar *cTitle = NULL;
-	v = g_hash_table_lookup (hProps, "Title");  // -> cName
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cTitle = g_value_get_string (v);
-	}
-	g_print ("  Title '%s\n", cTitle);
-	
-	const gchar *cCategory = NULL;
-	v = g_hash_table_lookup (hProps, "Category");  // (ApplicationStatus, Communications, SystemServices, Hardware) -> fOrder
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cCategory = g_value_get_string (v);
-	}
-	g_print ("  Category '%s'\n", cCategory);
-	
-	const gchar *cStatus = NULL;
-	v = g_hash_table_lookup (hProps, "Category");  // (Passive, Active, NeedsAttention) -> demands attention
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cStatus = g_value_get_string (v);
-	}
-	g_print ("  Status '%s'\n", cStatus);
-	
-	v = g_hash_table_lookup (hProps, "WindowId");
-	guint iWindowId = 0;
-	if (v && G_VALUE_HOLDS_UINT(v))
-	{
-		iWindowId = g_value_get_uint (v);
-	}
-	g_print ("  WindowId '%d'\n", iWindowId);
-	
-	const gchar *cIconName = NULL;
-	v = g_hash_table_lookup (hProps, "IconName");  // -> cIFileName
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cIconName = g_value_get_string (v);
-	}
-	g_print ("  IconName '%s'\n", cIconName);
-	
-	const gchar *cIconThemePath = NULL;
-	v = g_hash_table_lookup (hProps, "IconThemePath");
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cIconThemePath = g_value_get_string (v);
-	}
-	g_print ("  IconThemePath '%s'\n", cIconThemePath);
-	
-	const gchar *cOverlayIconName = NULL;
-	v = g_hash_table_lookup (hProps, "OverlayIconName");  // -> emblem
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cOverlayIconName = g_value_get_string (v);
-	}
-	g_print ("  OverlayIconName '%s'\n", cOverlayIconName);
-	
-	const gchar *cAttentionIconName = NULL;
-	v = g_hash_table_lookup (hProps, "AttentionIconName");  // -> keep for demands of attention
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cAttentionIconName = g_value_get_string (v);
-	}
-	g_print ("  AttentionIconName '%s'\n", cAttentionIconName);
-	
-	const gchar *cAttentionMovieName = NULL;
-	v = g_hash_table_lookup (hProps, "AttentionMovieName");  // -> idem
-	if (v && G_VALUE_HOLDS_STRING (v))
-	{
-		cAttentionMovieName = g_value_get_string (v);
-	}
-	g_print ("  AttentionMovieName '%s'\n", cAttentionMovieName);
-	
-	GValueArray *pToolTipTab = NULL;
-	v = g_hash_table_lookup (hProps, "ToolTip");
-	if (v && G_VALUE_HOLDS_BOXED (v))
-	{
-		pToolTipTab = g_value_get_boxed (v);
-	}
-	
-	g_print ("creating the icon...\n");
-	DBusGProxy *pProxyItem = cairo_dock_create_new_session_proxy (
-		cService,
-		"/StatusNotifierItem",
-		CD_STATUS_NOTIFIER_ITEM_IFACE);
-	if (pProxyItem == NULL)
-		return NULL;
-	
-	//\_________________ create a new item.
-	CDStatusNotifierItemData *pItemData = g_new0 (CDStatusNotifierItemData, 1);
-	pItemData->cService = g_strdup (cService);
-	pItemData->pProxyProps = pProxyItemProp;
-	pItemData->pProxy = pProxyItem;
-	pItemData->cId = g_strdup (cId);
-	pItemData->iWindowId = iWindowId;
-	pItemData->iCategory = _find_category (cCategory);
-	pItemData->iStatus = _find_status (cStatus);
-	pItemData->cIconThemePath = g_strdup (cIconThemePath);
-	pItemData->cAttentionIconName = g_strdup (cAttentionIconName);
-	pItemData->cAttentionMovieName = g_strdup (cAttentionMovieName);
-	pItemData->cOverlayIconName = g_strdup (cOverlayIconName);
-	if (pToolTipTab)
-	{
-		pItemData->pToolTip = _make_tooltip_from_dbus_struct (pToolTipTab);
-	}
-	
-	//\_________________ create a new associated icon.
-	Icon *pIcon = cairo_dock_create_dummy_launcher (g_strdup (cTitle),
-		g_strdup (cIconName),
-		g_strdup ("none"),
-		NULL,
-		pItemData->iCategory);
-	CD_APPLET_SET_MY_ICON_DATA (pIcon, pItemData);
-	
-	myData.pIcons = g_list_insert_sorted (myData.pIcons, pIcon, (GCompareFunc)_compare_items);
-	
-	//\_________________ track any changes in the item.
-	dbus_g_proxy_add_signal(pProxyItem, "NewTitle",
-		G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(pProxyItem, "NewTitle",
-		G_CALLBACK(on_new_item_title), myApplet, NULL);
-	
-	dbus_g_proxy_add_signal(pProxyItem, "NewIcon",
-		G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(pProxyItem, "NewIcon",
-		G_CALLBACK(on_new_item_icon), myApplet, NULL);
-	
-	dbus_g_proxy_add_signal(pProxyItem, "NewAttentionIcon",
-		G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(pProxyItem, "NewAttentionIcon",
-		G_CALLBACK(on_new_item_attention_icon), myApplet, NULL);
-	
-	dbus_g_proxy_add_signal(pProxyItem, "NewOverlayIcon",
-		G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(pProxyItem, "NewOverlayIcon",
-		G_CALLBACK(on_new_item_overlay_icon), myApplet, NULL);
-	
-	dbus_g_proxy_add_signal(pProxyItem, "NewToolTip",
-		G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(pProxyItem, "NewToolTip",
-		G_CALLBACK(on_new_item_tooltip), myApplet, NULL);
-	
-	dbus_g_proxy_add_signal(pProxyItem, "NewStatus",
-		G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(pProxyItem, "NewStatus",
-		G_CALLBACK(on_new_item_status), myApplet, NULL);
-	
-	g_print ("destroy props...\n");
-	g_hash_table_destroy (hProps);
-	return pIcon;
-}
-
-static void cd_free_tooltip (CDToolTip *pToolTip)
-{
-	if (pToolTip == NULL)
-		return;
-	g_free (pToolTip->cIconName);
-	g_free (pToolTip->cTitle);
-	g_free (pToolTip->cMessage);
-	g_free (pToolTip);
-}
-
-static void cd_free_item_data (CDStatusNotifierItemData *pItemData)
-{
-	if (pItemData == NULL)
-		return;
-	if (pItemData->iSidPopupTooltip != 0)
-		g_source_remove (pItemData->iSidPopupTooltip);
-	g_object_unref (pItemData->pProxy);
-	g_object_unref (pItemData->pProxyProps);
-	g_free (pItemData->cService);
-	g_free (pItemData->cId);
-	g_free (pItemData->cAttentionIconName);
-	g_free (pItemData->cAttentionMovieName);
-	g_free (pItemData->cOverlayIconName);
-	cd_free_tooltip (pItemData->pToolTip);
-	g_free (pItemData);
-}
-
-
-
+	CDStatusNotifierItem *pItem=NULL;
+	//g_print ("%d apps in the systray\n", pApplications->len);
+	for (i = 0; i < pApplications->len; i ++)
+	{
+		va = pApplications->pdata[i];
+		if (! va)
+			continue;
+		
+		const gchar *cIconName = NULL;
+		gint iPosition = 0;
+		const gchar *cAdress = NULL;
+		const gchar *cObjectPath = NULL;
+		const gchar *cIconThemePath = NULL;
+		const gchar *cLabel = NULL;
+		const gchar *cLabelGuide = NULL;
+		
+		v = g_value_array_get_nth (va, 0);
+		if (v && G_VALUE_HOLDS_STRING (v))
+			cIconName = g_value_get_string (v);
+		
+		v = g_value_array_get_nth (va, 1);
+		if (v && G_VALUE_HOLDS_INT (v))
+			iPosition = g_value_get_int (v);
+		
+		v = g_value_array_get_nth (va, 2);
+		if (v && G_VALUE_HOLDS_STRING (v))
+			cAdress = g_value_get_string (v);
+		
+		v = g_value_array_get_nth (va, 3);
+		if (v && G_VALUE_HOLDS_BOXED (v))
+			cObjectPath = (gchar*)g_value_get_boxed (v);
+		
+		v = g_value_array_get_nth (va, 4);
+		if (v && G_VALUE_HOLDS_STRING (v))
+			cIconThemePath = g_value_get_string (v);
+		
+		v = g_value_array_get_nth (va, 5);
+		if (v && G_VALUE_HOLDS_STRING (v))
+			cLabel = g_value_get_string (v);
+		
+		v = g_value_array_get_nth (va, 6);
+		if (v && G_VALUE_HOLDS_STRING (v))
+			cLabelGuide = g_value_get_string (v);
+		
+		//g_print (" + item {%s ; %d ; %s ; %s ; %s ; %s ; %s}\n",
+			cIconName,
+			iPosition,
+			cAdress,
+			cObjectPath,
+			cIconThemePath,
+			cLabel,
+			cLabelGuide);
+		
+		pItem = cd_satus_notifier_create_item (cAdress, cObjectPath);
+		if (! pItem)
+			continue;
+		pItem->iPosition = iPosition;
+		myData.pItems = g_list_prepend (myData.pItems, pItem);
+	}
+	
+	if (myConfig.bCompactMode)
+	{
+		cd_satus_notifier_reload_compact_mode ();
+	}
+	else
+	{
+		cd_satus_notifier_load_icons_from_items ();
+	}
+	
+	g_ptr_array_free (pApplications, TRUE);
+	CD_APPLET_LEAVE ();
+}
+
+static void _cd_satus_notifier_get_indicator_application (void)
+{
+	//g_print ("%s ()\n", __func__);
+	// get the service
+	myData.pProxyIndicatorApplicationService = cairo_dock_create_new_session_proxy (
+		CD_INDICATOR_APPLICATION_ADDR,
+		CD_INDICATOR_APPLICATION_OBJ,
+		CD_INDICATOR_APPLICATION_IFACE);
+	
+	// connect to the signals.
+	dbus_g_object_register_marshaller(_cd_cclosure_marshal_VOID__STRING_INT_STRING_STRING_STRING_STRING_STRING,
+			G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+	dbus_g_proxy_add_signal(myData.pProxyIndicatorApplicationService, "ApplicationAdded",
+		G_TYPE_STRING,  // iconname
+		G_TYPE_INT,  // position
+		G_TYPE_STRING,  // dbusaddress
+		G_TYPE_STRING,  // dbusobject
+		G_TYPE_STRING,  // iconpath
+		G_TYPE_STRING,  // label
+		G_TYPE_STRING,  // labelguide
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(myData.pProxyIndicatorApplicationService, "ApplicationAdded",
+		G_CALLBACK(on_new_application), myApplet, NULL);
+	
+	dbus_g_proxy_add_signal(myData.pProxyIndicatorApplicationService, "ApplicationRemoved",
+		G_TYPE_INT,  // position
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(myData.pProxyIndicatorApplicationService, "ApplicationRemoved",
+		G_CALLBACK(on_removed_application), myApplet, NULL);
+	
+	myData.pGetApplicationsCall = dbus_g_proxy_begin_call (myData.pProxyIndicatorApplicationService,
+		"GetApplications",
+		(DBusGProxyCallNotify)_on_get_applications_from_service,
+		myApplet,
+		(GDestroyNotify) NULL,
+		G_TYPE_INVALID);
+}
+
+static void _on_get_applications_from_watcher (DBusGProxy *proxy, DBusGProxyCall *call_id, CairoDockModuleInstance *myApplet)
+{
+	//g_print ("%s ()\n", __func__);
+	CD_APPLET_ENTER;
+	myData.pGetApplicationsCall = NULL;
+	
+	gchar **pApplications = NULL;
+	GError *erreur = NULL;
+	gboolean bSuccess = dbus_g_proxy_end_call (proxy,
+		call_id,
+		&erreur,
+		G_TYPE_STRV, &pApplications,
+		G_TYPE_INVALID);
+	if (erreur != NULL)
+	{
+		cd_debug ("couldn't get applications from the watcher (%s)", erreur->message);
+		bSuccess = FALSE;
+	}
+	
+	if (bSuccess)
+	{
+		if (pApplications == NULL)
+			CD_APPLET_LEAVE ();
+		guint i;
+		CDStatusNotifierItem *pItem;
+		for (i = 0; pApplications[i] != NULL; i ++)
+		{
+			pItem = cd_satus_notifier_create_item (pApplications[i], NULL);
+			if (! pItem)
+				continue;
+			myData.pItems = g_list_prepend (myData.pItems, pItem);
+		}
+		
+		g_strfreev (pApplications);
+		
+		if (myConfig.bCompactMode)
+		{
+			cd_satus_notifier_reload_compact_mode ();
+		}
+		else
+		{
+			cd_satus_notifier_load_icons_from_items ();
+		}
+	}
+	else  // un watcher asocial comme celui d'Ubuntu, on essaye avec l'"indicator-application".
+	{
+		//g_print ("this watcher is not so friendly, let's try the 'application indicator'\n");
+		_cd_satus_notifier_get_indicator_application ();
+	}
+	CD_APPLET_LEAVE ();
+}
+
+static void _on_register_host (DBusGProxy *proxy, DBusGProxyCall *call_id, CairoDockModuleInstance *myApplet)
+{
+	//g_print ("%s ()\n", __func__);
+	CD_APPLET_ENTER;
+	GError *erreur = NULL;
+	gboolean bSuccess = dbus_g_proxy_end_call (proxy,
+		call_id,
+		&erreur,
+		G_TYPE_INVALID);
+	if (erreur != NULL)
+	{
+		cd_debug ("couldn't register to a Notification Watcher (%s)", erreur->message);
+		g_error_free (erreur);
+		erreur = NULL;
+		bSuccess = FALSE;
+	}
+	
+	if (bSuccess)  // il y'a un watcher.
+	{
+		//g_print ("found a friendly watcher, now ask for the items...\n");
+		// get the items
+		DBusGProxy *pProxyWatcherProps = cairo_dock_create_new_session_proxy (
+			CD_STATUS_NOTIFIER_WATCHER_ADDR,
+			CD_STATUS_NOTIFIER_WATCHER_OBJ,
+			DBUS_INTERFACE_PROPERTIES);
+		myData.pGetApplicationsCall = dbus_g_proxy_begin_call (pProxyWatcherProps,
+			"Get",
+			(DBusGProxyCallNotify)_on_get_applications_from_watcher,
+			myApplet,
+			(GDestroyNotify) NULL,
+			G_TYPE_STRING, CD_STATUS_NOTIFIER_WATCHER_IFACE,
+			G_TYPE_STRING, "RegisteredStatusNotifierItems",
+			G_TYPE_INVALID);
+		
+		// connect to the signals.
+		dbus_g_proxy_add_signal(myData.pProxyWatcher, "ServiceRegistered",
+			G_TYPE_STRING, G_TYPE_INVALID);  // StatusNotifierItemRegistered
+		dbus_g_proxy_connect_signal(myData.pProxyWatcher, "ServiceRegistered",
+			G_CALLBACK(on_new_item), myApplet, NULL);
+		dbus_g_proxy_add_signal(myData.pProxyWatcher, "ServiceUnregistered",
+			G_TYPE_STRING, G_TYPE_INVALID);  // StatusNotifierItemUnregistered
+		dbus_g_proxy_connect_signal(myData.pProxyWatcher, "ServiceUnregistered",
+			G_CALLBACK(on_removed_item), myApplet, NULL);
+	}
+	else  // pas de watcher, ou un asocial comme celui d'Ubuntu, on essaye avec l'"indicator-application".
+	{
+		//g_print ("no friendy watcher, let's try the 'application indicator'\n");
+		_cd_satus_notifier_get_indicator_application ();
+	}
+	CD_APPLET_LEAVE ();
+}
+static void _cd_satus_notifier_register_host (void)
+{
+	// register to the watcher.
+	//g_print ("registering to the watcher...\n");
+	myData.pRegisterHostCall = dbus_g_proxy_begin_call (myData.pProxyWatcher, "RegisterNotificationHost",
+		(DBusGProxyCallNotify)_on_register_host,
+		myApplet,
+		(GDestroyNotify) NULL,
+		G_TYPE_STRING, myData.cHostName,
+		G_TYPE_INVALID);
+}
+
+
+static gboolean _get_watcher (CairoDockModuleInstance *myApplet)
+{
+	myData.pProxyWatcher = cairo_dock_create_new_session_proxy (
+		CD_STATUS_NOTIFIER_WATCHER_ADDR,
+		CD_STATUS_NOTIFIER_WATCHER_OBJ,
+		CD_STATUS_NOTIFIER_WATCHER_IFACE);
+	if (myData.pProxyWatcher != NULL)
+	{
+		myData.iSidGetWatcher = 0;
+		_cd_satus_notifier_register_host ();
+		return FALSE;
+	}
+	return TRUE;
+}
 void cd_satus_notifier_launch_service (void)
 {
-	g_return_if_fail (myData.pMainObject == NULL);
-	g_type_init();
+	if (myData.pThemePaths == NULL)
+		myData.pThemePaths = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);  // (path dir,ref count).
 	
-	// on cree l'objet distant principal.
-	g_print ("satus-notifier : Lancement du service\n");
+	// Register the service name on the bus.
 	pid_t pid = getpid ();
-	///myData.pMainObject = g_object_new (cd_satus_notifier_host_get_type(), NULL);  // appelle class_init() et init().
-	
-	// Register the service name no the bus.
 	myData.cHostName = g_strdup_printf (CD_STATUS_NOTIFIER_HOST_ADDR"-%d", pid);
-	g_print ("registering %s ...\n", myData.cHostName);
+	//g_print ("registering name '%s' on the bus ...\n", myData.cHostName);
 	cairo_dock_register_service_name (myData.cHostName);
 	
 	// get the watcher.
-	g_print ("getting the watcher...\n");
+	//g_print ("getting the watcher ...\n");
 	myData.pProxyWatcher = cairo_dock_create_new_session_proxy (
 		CD_STATUS_NOTIFIER_WATCHER_ADDR,
 		CD_STATUS_NOTIFIER_WATCHER_OBJ,
-		CD_STATUS_NOTIFIER_WATCHER_IFACE);
-	g_return_if_fail (myData.pProxyWatcher != NULL);
-	
-	// register to the watcher.
-	g_print ("registering to the watcher...\n");
-	GError *erreur = NULL;
-	dbus_g_proxy_call (myData.pProxyWatcher, "RegisterStatusNotifierHost", &erreur,
-		G_TYPE_STRING, myData.cHostName,
-		G_TYPE_INVALID,
-		G_TYPE_INVALID);
-	if (erreur != NULL)
+		CD_STATUS_NOTIFIER_WATCHER_IFACE);  /// dbus_g_proxy_new_for_name_owner ?...
+	if (myData.pProxyWatcher == NULL)  // no watcher yet, let's try again in a few moment.
 	{
-		cd_warning ("couldn't find a Status Notifier Watcher (%s)\nYour system doesn't support Systray 2.0", erreur->message);
-		g_error_free (erreur);
+		//g_print ("no watcher yet, let's try again in a few moment\n");
+		myData.iSidGetWatcher = g_timeout_add (1000., (GSourceFunc)_get_watcher, myApplet);
 		return;
 	}
-	// connect to the signals.
-	dbus_g_proxy_add_signal(myData.pProxyWatcher, "StatusNotifierItemRegistered",
-		G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(myData.pProxyWatcher, "StatusNotifierItemRegistered",
-		G_CALLBACK(on_new_item), myApplet, NULL);
-	dbus_g_proxy_add_signal(myData.pProxyWatcher, "StatusNotifierItemUnregistered",
-		G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal(myData.pProxyWatcher, "StatusNotifierItemUnregistered",
-		G_CALLBACK(on_removed_item), myApplet, NULL);
-	
-	// get the items.
-	DBusGProxy *pProxyWatcherProps = cairo_dock_create_new_session_proxy (
-		CD_STATUS_NOTIFIER_WATCHER_ADDR,
-		CD_STATUS_NOTIFIER_WATCHER_OBJ,
-		"org.freedesktop.DBus.Properties");
-	gchar **cItemsName = cairo_dock_dbus_get_property_as_string_list (pProxyWatcherProps, CD_STATUS_NOTIFIER_WATCHER_IFACE, "RegisteredStatusNotifierItems");
-	g_object_unref (pProxyWatcherProps);
-	
-	// create all the icons.
-	if (cItemsName != NULL)
-	{
-		int i;
-		for (i = 0; cItemsName[i] != NULL; i ++)
-		{
-			cd_satus_notifier_create_item_icon (cItemsName[i]);
-		}
-		g_strfreev (cItemsName);
-		
-		CD_APPLET_LOAD_MY_ICONS_LIST (g_list_copy (myData.pIcons), NULL, "Caroussel", NULL);
-	}
+	
+	_cd_satus_notifier_register_host ();
 }
 
+
 void cd_satus_notifier_stop_service (void)
 {
-	if (myData.pMainObject = NULL)
-		return;
-	g_object_unref (myData.pMainObject);
+	if (myData.iSidGetWatcher != 0)
+		g_source_remove (myData.iSidGetWatcher);
+	
 	g_object_unref (myData.pProxyWatcher);
-	
-	Icon *pIcon = NULL;
-	GList *ic;
-	for (ic = myData.pIcons; ic != NULL; ic = ic->next)
-	{
-		pIcon = ic->data;
-		CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-		cd_free_item_data (pItemData);
-		CD_APPLET_SET_MY_ICON_DATA (pIcon, NULL);
-	}
-	g_list_free (myData.pIcons);
-	CD_APPLET_DELETE_MY_ICONS_LIST;
-}
-
-Icon * cd_satus_notifier_find_icon_from_service (const gchar *cService)
-{
-	Icon *pIcon = NULL;
-	GList *ic;
-	for (ic = myData.pIcons; ic != NULL; ic = ic->next)
-	{
-		pIcon = ic->data;
-		CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-		if (pItemData && pItemData->cService && strcmp (pItemData->cService, cService) == 0)
-			return pIcon;
-	}
-	return NULL;
-}
-
+	g_object_unref (myData.pProxyIndicatorApplicationService);
+	
+	g_list_foreach (myData.pItems, (GFunc) cd_free_item, NULL);
+	g_list_free (myData.pItems);
+	
+	if (! myConfig.bCompactMode)
+		CD_APPLET_DELETE_MY_ICONS_LIST;
+	
+	g_hash_table_destroy (myData.pThemePaths);
+	myData.pThemePaths = NULL;
+}
+
+
+void cd_satus_notifier_add_theme_path (const gchar * cThemePath)
+{
+	g_return_if_fail (cThemePath != NULL);
+	int ref = GPOINTER_TO_INT (g_hash_table_lookup (myData.pThemePaths, cThemePath));  // 0 si le theme n'est pas dans la table.
+	ref ++;  // on incremente la reference.
+	g_hash_table_insert (myData.pThemePaths, g_strdup (cThemePath), GINT_TO_POINTER (ref));  // et on la met a jour dans la table.
+	
+	if (ref == 1)  // premiere fois qu'on voit ce chemin.
+		gtk_icon_theme_append_search_path (gtk_icon_theme_get_default(), cThemePath);  // append car ce sont des icones par defaut.
+}
+
+void cd_satus_notifier_remove_theme_path (const gchar * cThemePath)
+{
+	g_return_if_fail (cThemePath != NULL);
+	int ref = GPOINTER_TO_INT (g_hash_table_lookup (myData.pThemePaths, cThemePath));
+	if (ref == 0)  // pas dans la table, rien a faire (ne devrait pas arriver).
+		return;
+	
+	if (ref == 1)  // derniere reference.
+	{
+		g_hash_table_remove (myData.pThemePaths, cThemePath);  // on le supprime de la table.
+		
+		GtkIconTheme *pIconTheme = gtk_icon_theme_get_default();  // et du theme.
+		gchar **paths = NULL;
+		gint iNbPaths = 0;
+		gtk_icon_theme_get_search_path (pIconTheme, &paths, &iNbPaths);
+	
+		int i;
+		for (i = 0; i < iNbPaths; i++)  // on cherche sa position dans le tableau.
+		{
+			if (strcmp (paths[i], cThemePath))
+				break;
+		}
+		if (i < iNbPaths)  // trouve
+		{
+			g_free (paths[i]);
+			for (i = i+1; i < iNbPaths; i++)  // on decale tous les suivants vers l'arriere.
+			{
+				paths[i-1] = paths[i];
+			}
+			paths[i-1] = NULL;
+			gtk_icon_theme_set_search_path (pIconTheme, (const gchar **)paths, iNbPaths - 1);
+		}
+		
+		g_strfreev (paths);
+	}
+	else  // on decremente la reference.
+	{
+		ref --;
+		g_hash_table_insert (myData.pThemePaths, g_strdup (cThemePath), GINT_TO_POINTER (ref));  // et on la met a jour dans la table.
+	}
+}
+
+
+void cd_satus_notifier_load_icons_from_items (void)
+{
+	GList *pIcons = NULL;
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pItem->iStatus != CD_STATUS_PASSIVE)
+		{
+			Icon *pIcon = cd_satus_notifier_create_icon_for_item (pItem);
+			if (pIcon)
+				pIcons = g_list_prepend (pIcons, pIcon);
+		}
+	}
+	CD_APPLET_LOAD_MY_ICONS_LIST (pIcons, NULL, "Slide", NULL);
+}

=== modified file 'Status-Notifier/src/applet-host.h'
--- Status-Notifier/src/applet-host.h	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/applet-host.h	2010-09-16 01:12:52 +0000
@@ -17,18 +17,24 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __APPLET_HOST__
 #define  __APPLET_HOST__
 
-
 #include <cairo-dock.h>
 
 
 void cd_satus_notifier_launch_service (void);
 
 
-Icon * cd_satus_notifier_find_icon_from_service (const gchar *cService);
+void cd_satus_notifier_stop_service (void);
+
+
+void cd_satus_notifier_add_theme_path (const gchar * cThemePath);
+
+void cd_satus_notifier_remove_theme_path (const gchar * cThemePath);
+
+
+void cd_satus_notifier_load_icons_from_items (void);
 
 
 #endif

=== modified file 'Status-Notifier/src/applet-init.c'
--- Status-Notifier/src/applet-init.c	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -25,13 +25,14 @@
 #include "applet-notifications.h"
 #include "applet-struct.h"
 #include "applet-host.h"
+#include "applet-draw.h"
 #include "applet-init.h"
 
 
 CD_APPLET_DEFINITION (N_("Status Notifier"),
-	2, 0, 0,
+	2, 2, 0,
 	CAIRO_DOCK_CATEGORY_APPLET_DESKTOP,
-	N_("A <b>notification area</b> for your dock\n"
+	("A <b>notification area</b> for your dock\n"
 	"Also called 'systray'.\n"
 	"It is designed to work on any desktop that supports the latest systray specifications (KDE, Gnome, etc)"),
 	"Fabounet (Fabrice Rey)")
@@ -42,19 +43,23 @@
 	if (! cairo_dock_reserve_data_slot (myApplet))
 		return;
 	
+	if (myConfig.bCompactMode)
+		CD_APPLET_SET_STATIC_ICON;
+	
 	if (myDesklet)
 	{
 		CD_APPLET_SET_DESKLET_RENDERER ("Simple");
 	}
 	
-	CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE;  // set the default icon if none is specified in conf.
+	if (!myConfig.bCompactMode && myDock)
+		CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE;  // set the default icon if none is specified in conf.
 	
 	CD_APPLET_REGISTER_FOR_CLICK_EVENT;
 	CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
 	CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
-	cairo_dock_register_notification (CAIRO_DOCK_ENTER_ICON,
+	/*cairo_dock_register_notification (CAIRO_DOCK_ENTER_ICON,
 		(CairoDockNotificationFunc) cd_status_notifier_on_enter_icon,
-		CAIRO_DOCK_RUN_AFTER, myApplet);
+		CAIRO_DOCK_RUN_AFTER, myApplet);*/
 	cairo_dock_register_notification (CAIRO_DOCK_BUILD_CONTAINER_MENU,
 		(CairoDockNotificationFunc) cd_status_notifier_on_right_click,
 		CAIRO_DOCK_RUN_FIRST, myApplet);
@@ -71,6 +76,7 @@
 	cairo_dock_remove_notification_func (CAIRO_DOCK_BUILD_CONTAINER_MENU,
 		(CairoDockNotificationFunc) cd_status_notifier_on_right_click,
 		myApplet);
+	cd_satus_notifier_stop_service ();
 CD_APPLET_STOP_END
 
 
@@ -78,12 +84,30 @@
 CD_APPLET_RELOAD_BEGIN
 	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");  // set a desklet renderer.
-		}
-		
-		CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE;  // set the default icon if none is specified in conf.
-		
+		if (myConfig.bCompactMode)
+		{
+			if (myDesklet && CD_APPLET_MY_CONTAINER_TYPE_CHANGED)  // we are now in a desklet, set a renderer.
+			{
+				CD_APPLET_SET_DESKLET_RENDERER ("Simple");  // set a desklet renderer.
+			}
+			CD_APPLET_DELETE_MY_ICONS_LIST;
+			cd_satus_notifier_reload_compact_mode ();
+			
+		}
+		else
+		{
+			myData.iItemSize = 0;  // unvalidate the grid.
+			cd_satus_notifier_load_icons_from_items ();
+			
+			if (myDock)
+				CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE;  // set the default icon if none is specified in conf.
+		}
+	}
+	else  // applet resized
+	{
+		if (myConfig.bCompactMode)
+		{
+			cd_satus_notifier_reload_compact_mode ();
+		}
 	}
 CD_APPLET_RELOAD_END

=== added file 'Status-Notifier/src/applet-item.c'
--- Status-Notifier/src/applet-item.c	1970-01-01 00:00:00 +0000
+++ Status-Notifier/src/applet-item.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,669 @@
+/**
+* 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 <sys/types.h>
+#include <unistd.h>
+
+#include "applet-struct.h"
+#include "applet-host.h"
+#include "applet-draw.h"
+#include "applet-item.h"
+
+#define CD_STATUS_NOTIFIER_ITEM_IFACE "org.kde.StatusNotifierItem"
+#define CD_STATUS_NOTIFIER_ITEM_OBJ "/StatusNotifierItem"
+
+#define CD_INDICATOR_APPLICATION_ITEM_OBJ "/org/ayatana/NotificationItem"
+
+
+static CDCategoryEnum _find_category (const gchar *cCategory)
+{
+	if (!cCategory)
+		return CD_CATEGORY_APPLICATION_STATUS;
+	if (*cCategory == 'A')
+		return CD_CATEGORY_APPLICATION_STATUS;
+	if (*cCategory == 'C')
+		return CD_CATEGORY_COMMUNICATIONS;
+	if (*cCategory == 'S')
+		return CD_CATEGORY_SYSTEM_SERVICES;
+	if (*cCategory == 'H')
+		return CD_CATEGORY_HARDWARE;
+	return CD_CATEGORY_APPLICATION_STATUS;
+}
+
+static CDStatusEnum _find_status (const gchar *cStatus)
+{
+	if (!cStatus)
+		return CD_STATUS_ACTIVE;
+	if (*cStatus == 'N')
+		return CD_STATUS_NEEDS_ATTENTION;
+	if (*cStatus == 'A')
+		return CD_STATUS_ACTIVE;
+	if (*cStatus == 'P')
+		return CD_STATUS_PASSIVE;
+	return CD_STATUS_ACTIVE;
+}
+
+static void cd_free_tooltip (CDToolTip *pToolTip)
+{
+	if (pToolTip == NULL)
+		return;
+	g_free (pToolTip->cIconName);
+	g_free (pToolTip->cTitle);
+	g_free (pToolTip->cMessage);
+	g_free (pToolTip);
+}
+
+static CDToolTip *_make_tooltip_from_dbus_struct (GValueArray *pToolTipTab)
+{
+	CDToolTip *pToolTip = NULL;
+	if (pToolTipTab)
+	{
+		pToolTip = g_new0 (CDToolTip, 1);
+		GValue *v = &pToolTipTab->values[0];
+		if (v && G_VALUE_HOLDS_STRING (v))
+			pToolTip->cIconName = g_strdup (g_value_get_string (v));
+		v = &pToolTipTab->values[2];
+		if (v && G_VALUE_HOLDS_STRING (v))
+			pToolTip->cTitle = g_strdup (g_value_get_string (v));
+		v = &pToolTipTab->values[3];
+		if (v && G_VALUE_HOLDS_STRING (v))
+			pToolTip->cMessage = g_strdup (g_value_get_string (v));
+		if (pToolTip->cMessage != NULL)
+		{
+			if (strncmp (pToolTip->cMessage, "<qt>", 4) == 0)
+			{
+				gchar *str = pToolTip->cMessage;
+				int n = strlen (str);
+				*(str + n - 5) = '\0';
+				pToolTip->cMessage = g_strdup (str+4);
+				g_free (str);
+			}
+			/// remplacer <br/> par \n
+			
+			/// virer les <nobr> et </nobr>
+			
+			/// virer les <img src=...> et </img>
+			
+		}
+	}
+	return pToolTip;
+}
+
+static void _show_item_tooltip (Icon *pIcon, CDStatusNotifierItem *pItem)
+{
+	gchar *cText = g_strdup_printf ("<b>%s</b>\n%s", pItem->pToolTip->cTitle, pItem->pToolTip->cMessage);
+	cairo_dock_show_temporary_dialog_with_icon (cText, pIcon, CAIRO_CONTAINER (myIcon->pSubDock), 4000, pItem->pToolTip->cIconName);
+	g_free (cText);
+}
+
+static void _show_item_status (Icon *pIcon, CDStatusNotifierItem *pItem)
+{
+	switch (pItem->iStatus)
+	{
+		case CD_STATUS_PASSIVE :
+			pIcon->fAlpha = 0.5;
+			cairo_dock_stop_icon_attention (pIcon, myIcon->pSubDock);
+			cairo_dock_redraw_icon (pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
+		break;
+		case CD_STATUS_ACTIVE :
+		default:
+			pIcon->fAlpha = 1.;
+			cairo_dock_stop_icon_attention (pIcon, myIcon->pSubDock);
+			cairo_dock_redraw_icon (pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
+		break;
+		case CD_STATUS_NEEDS_ATTENTION:
+			pIcon->fAlpha = 1.;
+			cairo_dock_request_icon_attention (pIcon, myIcon->pSubDock, "rotate", 60);
+		break;
+	}
+}
+
+
+static void on_new_item_icon (DBusGProxy *proxy_item, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s ()\n", __func__);
+	
+	g_free (pItem->cIconName);
+	pItem->cIconName = cairo_dock_dbus_get_property_as_string (pItem->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "IconName");
+	//g_print (" new icon : %s\n", pItem->cIconName);
+	
+	if (pItem->iStatus != CD_STATUS_NEEDS_ATTENTION)
+	{
+		cd_satus_notifier_update_item_image (pItem);
+	}
+	CD_APPLET_LEAVE ();
+}
+
+static void on_new_item_attention_icon (DBusGProxy *proxy_item, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s ()\n", __func__);
+	
+	g_free (pItem->cAttentionIconName);
+	pItem->cAttentionIconName = cairo_dock_dbus_get_property_as_string (pItem->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "AttentionIconName");
+	//g_print (" new attention icon : %s\n", pItem->cAttentionIconName);
+	
+	if (pItem->iStatus == CD_STATUS_NEEDS_ATTENTION)
+	{
+		cd_satus_notifier_update_item_image (pItem);
+	}
+	CD_APPLET_LEAVE ();
+}
+
+static void on_new_item_status (DBusGProxy *proxy_item, const gchar *cStatus, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s (%s)\n", __func__, cStatus);
+	
+	// get the new status
+	CDStatusEnum iPrevStatus = pItem->iStatus;
+	pItem->iStatus = _find_status (cStatus);
+	if (pItem->iStatus == iPrevStatus)
+		CD_APPLET_LEAVE ();
+	
+	// update the item
+	if (iPrevStatus == CD_STATUS_PASSIVE || pItem->iStatus == CD_STATUS_PASSIVE)  // hide/show the item.
+	{
+		if (myConfig.bCompactMode)
+		{
+			cd_satus_notifier_reload_compact_mode ();
+		}
+		else
+		{
+			if (pItem->iStatus == CD_STATUS_PASSIVE)  // remove passive item
+			{
+				Icon *pIcon = cd_satus_notifier_get_icon_from_item (pItem);
+				CD_APPLET_REMOVE_ICON_FROM_MY_ICONS_LIST (pIcon);
+			}
+			else  // add newly active item
+			{
+				Icon *pIcon = cd_satus_notifier_create_icon_for_item (pItem);
+				CD_APPLET_ADD_ICON_IN_MY_ICONS_LIST (pIcon);
+			}
+		}
+	}
+	else  // status has changed => image has changed too.
+	{
+		cd_satus_notifier_update_item_image (pItem);
+	}
+	
+	CD_APPLET_LEAVE ();
+}
+
+
+static void on_new_item_label (DBusGProxy *proxy_item, const gchar *cLabel, const gchar *cLabelGuide, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s (%s, %s)\n", __func__, cLabel, cLabelGuide);
+	
+	g_free (pItem->cLabel);
+	pItem->cLabel = g_strdup (cLabel);
+	g_free (pItem->cLabelGuide);
+	pItem->cLabelGuide = g_strdup (cLabelGuide);
+	
+	
+	CD_APPLET_LEAVE ();
+}
+
+static void on_new_item_theme_path (DBusGProxy *proxy_item, const gchar *cNewThemePath, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s (%s)\n", __func__, cNewThemePath);
+	
+	g_free (pItem->cIconThemePath);
+	pItem->cIconThemePath = g_strdup (cNewThemePath);
+	
+	cd_satus_notifier_update_item_image (pItem);
+	
+	CD_APPLET_LEAVE ();
+}
+
+
+static void on_new_item_title (DBusGProxy *proxy_item, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s ()\n", __func__);
+	
+	g_free (pItem->cTitle);
+	pItem->cTitle = cairo_dock_dbus_get_property_as_string (pItem->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "Title");
+	//g_print (" new title : %s\n", pItem->cTitle);
+	
+	//cairo_dock_set_icon_name (cTitle, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
+	
+	CD_APPLET_LEAVE ();
+}
+
+static void on_new_item_overlay_icon (DBusGProxy *proxy_item, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s ()\n", __func__);
+	
+	g_free (pItem->cOverlayIconName);
+	pItem->cOverlayIconName = cairo_dock_dbus_get_property_as_string (pItem->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "OverlayIconName");
+	//g_print (" new overlay : %s\n", pItem->cOverlayIconName);
+	
+	/*if (pIcon->pIconBuffer)
+	{
+		cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
+		cairo_dock_set_image_on_icon (pIconContext, pIcon->cFileName, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
+		cairo_destroy (pIconContext);
+		
+		if (pItem->cOverlayIconName != NULL)
+		{
+			CairoEmblem *pEmblem = cairo_dock_make_emblem (pItem->cOverlayIconName, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
+			cairo_dock_set_emblem_position (pEmblem, CAIRO_DOCK_EMBLEM_MIDDLE);
+			cairo_dock_draw_emblem_on_icon (pEmblem, pIcon, CAIRO_CONTAINER (myIcon->pSubDock));
+			cairo_dock_free_emblem (pEmblem);
+		}
+	}*/
+	
+	CD_APPLET_LEAVE ();
+}
+
+
+
+static void on_new_item_tooltip (DBusGProxy *proxy_item, CDStatusNotifierItem *pItem)
+{
+	CD_APPLET_ENTER;
+	//g_print ("%s ()\n", __func__);
+	
+	cd_free_tooltip (pItem->pToolTip);
+	pItem->pToolTip = NULL;
+	
+	//cairo_dock_remove_dialog_if_any (pIcon);
+	
+	GValueArray *pToolTipTab = cairo_dock_dbus_get_property_as_boxed (pItem->pProxyProps, CD_STATUS_NOTIFIER_ITEM_IFACE, "ToolTip");
+	if (pToolTipTab)
+	{
+		pItem->pToolTip = _make_tooltip_from_dbus_struct (pToolTipTab);
+		
+		//if (pItem->pToolTip && pItem->pToolTip->cMessage != NULL)
+		//	_show_item_tooltip (pIcon, pItem);
+	}
+	
+	CD_APPLET_LEAVE ();
+}
+
+static void _on_item_proxy_destroyed (DBusGProxy *proxy_item, CDStatusNotifierItem *pItem)
+{
+	if (pItem->bInvalid)
+		return;
+	CD_APPLET_ENTER;
+	//g_print ("this item (%s) was suddenly removed\n", __func__, pItem->cService);
+	
+	myData.pItems = g_list_remove (myData.pItems, pItem);
+	
+	if (myConfig.bCompactMode)
+	{
+		cd_satus_notifier_reload_compact_mode ();
+	}
+	else
+	{
+		Icon *pIcon = cd_satus_notifier_get_icon_from_item (pItem);
+		CD_APPLET_REMOVE_ICON_FROM_MY_ICONS_LIST (pIcon);
+	}
+	
+	cd_free_item (pItem);
+	CD_APPLET_LEAVE ();
+}
+
+gchar *cd_satus_notifier_search_item_icon_s_path (CDStatusNotifierItem *pItem)
+{
+	g_return_val_if_fail (pItem != NULL, NULL);
+	gchar *cImageName = (pItem->iStatus == CD_STATUS_NEEDS_ATTENTION ? pItem->cAttentionIconName: pItem->cIconName);
+	
+	gchar *cIconPath = NULL;
+	if (pItem->cIconThemePath != NULL)  // workaround pour des applis telles que dropbox qui trouvent malin de specifier des icones avec des noms hyper generiques (idle.png).
+	{
+		cIconPath = g_strdup_printf ("%s/%s", pItem->cIconThemePath, pItem->cIconName);
+		if (! g_file_test (cIconPath, G_FILE_TEST_EXISTS))
+		{
+			g_free (cIconPath);
+			cIconPath = NULL;
+		}
+	}
+	
+	if (cIconPath == NULL)
+	{
+		cIconPath = cairo_dock_search_icon_s_path (pItem->cIconName);
+	}
+	
+	return cIconPath;
+}
+
+CDStatusNotifierItem *cd_satus_notifier_create_item (const gchar *cService, const gchar *cObjectPath)
+{
+	g_return_val_if_fail  (cService != NULL, NULL);
+	gchar *str = strchr (cService, '/');
+	if (str)
+		*str = '\0';
+	//g_print ("%s (%s)\n", __func__, cService);
+	
+	// special case for Ubuntu indicators: we don't know their object path.
+	if (cObjectPath != NULL && strncmp (cObjectPath, CD_INDICATOR_APPLICATION_ITEM_OBJ, strlen (CD_INDICATOR_APPLICATION_ITEM_OBJ)) == 0)
+	{
+		gchar *str = strrchr (cObjectPath, '/');
+		if (str)
+			*str = '\0';
+	}
+	else
+	{
+		cObjectPath = CD_STATUS_NOTIFIER_ITEM_OBJ;
+	}
+	
+	//\_________________ get the properties of the item.
+	DBusGProxy *pProxyItemProp = cairo_dock_create_new_session_proxy (
+		cService,
+		cObjectPath,
+		DBUS_INTERFACE_PROPERTIES);
+	if (pProxyItemProp == NULL)
+		return NULL;
+	//g_print ("owner : %s\n", dbus_g_proxy_get_bus_name (pProxyItemProp));
+	
+	//g_print ("getting properties ...\n");
+	GHashTable *hProps = cairo_dock_dbus_get_all_properties (pProxyItemProp, CD_STATUS_NOTIFIER_ITEM_IFACE);
+	if (hProps == NULL)
+		return NULL;
+	
+	// properties supported by KDE and Ubuntu.
+	GValue *v;
+	const gchar *cId = NULL;
+	v = g_hash_table_lookup (hProps, "Id");
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cId = g_value_get_string (v);
+	}
+	//g_print ("  ID '%s'\n", cId);
+	
+	const gchar *cCategory = NULL;
+	v = g_hash_table_lookup (hProps, "Category");  // (ApplicationStatus, Communications, SystemServices, Hardware) -> fOrder
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cCategory = g_value_get_string (v);
+	}
+	//g_print ("  Category '%s'\n", cCategory);
+	
+	const gchar *cStatus = NULL;
+	v = g_hash_table_lookup (hProps, "Status");  // (Passive, Active, NeedsAttention) -> demands attention
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cStatus = g_value_get_string (v);
+	}
+	//g_print ("  Status '%s'\n", cStatus);
+	
+	const gchar *cIconName = NULL;
+	v = g_hash_table_lookup (hProps, "IconName");  // -> cIFileName
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cIconName = g_value_get_string (v);
+	}
+	//g_print ("  IconName '%s'\n", cIconName);
+	
+	const gchar *cIconThemePath = NULL;
+	v = g_hash_table_lookup (hProps, "IconThemePath");
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cIconThemePath = g_value_get_string (v);
+	}
+	//g_print ("  IconThemePath '%s'\n", cIconThemePath);
+	
+	const gchar *cAttentionIconName = NULL;
+	v = g_hash_table_lookup (hProps, "AttentionIconName");  // -> keep for demands of attention
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cAttentionIconName = g_value_get_string (v);
+	}
+	//g_print ("  AttentionIconName '%s'\n", cAttentionIconName);
+	
+	// properties supported by Ubuntu.
+	const gchar *cMenuPath = NULL;
+	v = g_hash_table_lookup (hProps, "Menu");  // object path to a dbus-menu
+	if (v && G_VALUE_HOLDS_BOXED(v))
+	{
+		cMenuPath = (gchar*) g_value_get_boxed (v);
+	}
+	//g_print ("  cMenuPath '%s'\n", cMenuPath);
+	
+	const gchar *cLabel = NULL;
+	v = g_hash_table_lookup (hProps, "XAyatanaLabel");
+	if (v && G_VALUE_HOLDS_BOXED(v))
+	{
+		cLabel = g_value_get_string (v);
+	}
+	//g_print ("  cLabel '%s'\n", cLabel);
+	
+	const gchar *cLabelGuide = NULL;
+	v = g_hash_table_lookup (hProps, "XAyatanaLabelGuide");
+	if (v && G_VALUE_HOLDS_BOXED(v))
+	{
+		cLabelGuide = g_value_get_string (v);
+	}
+	//g_print ("  cLabelGuide '%s'\n", cLabelGuide);
+	
+	// properties supported by KDE.
+	const gchar *cTitle = NULL;
+	v = g_hash_table_lookup (hProps, "Title");  // -> cName
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cTitle = g_value_get_string (v);
+	}
+	//g_print ("  Title '%s\n", cTitle);
+	
+	v = g_hash_table_lookup (hProps, "WindowId");
+	guint iWindowId = 0;
+	if (v && G_VALUE_HOLDS_UINT(v))
+	{
+		iWindowId = g_value_get_uint (v);
+	}
+	//g_print ("  WindowId '%d'\n", iWindowId);
+	
+	const gchar *cOverlayIconName = NULL;
+	v = g_hash_table_lookup (hProps, "OverlayIconName");  // -> emblem
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cOverlayIconName = g_value_get_string (v);
+	}
+	//g_print ("  OverlayIconName '%s'\n", cOverlayIconName);
+	
+	const gchar *cAttentionMovieName = NULL;
+	v = g_hash_table_lookup (hProps, "AttentionMovieName");  // -> idem
+	if (v && G_VALUE_HOLDS_STRING (v))
+	{
+		cAttentionMovieName = g_value_get_string (v);
+	}
+	//g_print ("  AttentionMovieName '%s'\n", cAttentionMovieName);
+	
+	GValueArray *pToolTipTab = NULL;
+	v = g_hash_table_lookup (hProps, "ToolTip");
+	if (v && G_VALUE_HOLDS_BOXED (v))
+	{
+		pToolTipTab = g_value_get_boxed (v);
+	}
+	
+	DBusGProxy *pProxyItem = cairo_dock_create_new_session_proxy (
+		cService,
+		cObjectPath,
+		CD_STATUS_NOTIFIER_ITEM_IFACE);
+	if (pProxyItem == NULL)
+		return NULL;
+	
+	//\_________________ create a new item.
+	CDStatusNotifierItem *pItem = g_new0 (CDStatusNotifierItem, 1);
+	pItem->cService = g_strdup (cService);
+	pItem->pProxyProps = pProxyItemProp;
+	pItem->pProxy = pProxyItem;
+	pItem->cId = g_strdup (cId);
+	pItem->cTitle = g_strdup (cTitle);
+	pItem->cLabel = g_strdup (cLabel);
+	pItem->cLabelGuide = g_strdup (cLabelGuide);
+	pItem->cMenuPath = g_strdup (cMenuPath);
+	pItem->iWindowId = iWindowId;
+	pItem->iCategory = _find_category (cCategory);
+	pItem->iStatus = _find_status (cStatus);
+	pItem->cIconName = g_strdup (cIconName);
+	pItem->cIconThemePath = g_strdup (cIconThemePath);
+	pItem->cAttentionIconName = g_strdup (cAttentionIconName);
+	pItem->cAttentionMovieName = g_strdup (cAttentionMovieName);
+	pItem->cOverlayIconName = g_strdup (cOverlayIconName);
+	if (pToolTipTab)
+	{
+		pItem->pToolTip = _make_tooltip_from_dbus_struct (pToolTipTab);
+	}
+	if (pItem->cIconThemePath)  // on le rajoute au theme d'icones par defaut; comme le launcher-manager va deja chercher dedans pour charger l'icone, on n'a rien d'autre a faire.
+	{
+		cd_satus_notifier_add_theme_path (pItem->cIconThemePath);
+	}
+	
+	if (pItem->cMenuPath != NULL)
+		pItem->pMenu = dbusmenu_gtkmenu_new ((gchar *)pItem->cService, (gchar *)pItem->cMenuPath);
+	
+	//\_________________ track any changes in the item.
+	// signals supported by both.
+	dbus_g_proxy_add_signal(pProxyItem, "NewStatus",
+		G_TYPE_STRING, G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewStatus",
+		G_CALLBACK(on_new_item_status), pItem, NULL);
+	
+	dbus_g_proxy_add_signal(pProxyItem, "NewIcon",
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewIcon",
+		G_CALLBACK(on_new_item_icon), pItem, NULL);
+	
+	dbus_g_proxy_add_signal(pProxyItem, "NewAttentionIcon",
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewAttentionIcon",
+		G_CALLBACK(on_new_item_attention_icon), pItem, NULL);
+	
+	// signals supported by Ubuntu.
+	dbus_g_proxy_add_signal(pProxyItem, "XAyatanaNewLabel",
+		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "XAyatanaNewLabel",
+		G_CALLBACK(on_new_item_label), pItem, NULL);
+	
+	dbus_g_proxy_add_signal(pProxyItem, "NewIconThemePath",
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewIconThemePath",
+		G_CALLBACK(on_new_item_theme_path), pItem, NULL);
+	
+	// signals supported by KDE.
+	dbus_g_proxy_add_signal(pProxyItem, "NewOverlayIcon",
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewOverlayIcon",
+		G_CALLBACK(on_new_item_overlay_icon), pItem, NULL);
+	
+	dbus_g_proxy_add_signal(pProxyItem, "NewTitle",
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewTitle",
+		G_CALLBACK(on_new_item_title), pItem, NULL);
+	
+	dbus_g_proxy_add_signal(pProxyItem, "NewToolTip",
+		G_TYPE_INVALID);
+	dbus_g_proxy_connect_signal(pProxyItem, "NewToolTip",
+		G_CALLBACK(on_new_item_tooltip), pItem, NULL);
+	
+	g_signal_connect (G_OBJECT(pProxyItem), "destroy", G_CALLBACK (_on_item_proxy_destroyed), pItem);  // attention, dangereux car on va etre appele lorsqu'on detruit un item.
+	
+	g_hash_table_destroy (hProps);
+	return pItem;
+}
+
+void cd_free_item (CDStatusNotifierItem *pItem)
+{
+	if (pItem == NULL)
+		return;
+	pItem->bInvalid = TRUE;
+	if (pItem->iSidPopupTooltip != 0)
+		g_source_remove (pItem->iSidPopupTooltip);
+	if (pItem->cIconThemePath)
+		cd_satus_notifier_remove_theme_path (pItem->cIconThemePath);
+	g_object_unref (pItem->pProxy);
+	g_object_unref (pItem->pProxyProps);
+	g_free (pItem->cService);
+	g_free (pItem->cId);
+	g_free (pItem->cIconName);
+	g_free (pItem->cAttentionIconName);
+	g_free (pItem->cLabel);
+	g_free (pItem->cLabelGuide);
+	g_free (pItem->cTitle);
+	g_free (pItem->cAttentionMovieName);
+	g_free (pItem->cOverlayIconName);
+	cd_free_tooltip (pItem->pToolTip);
+	cairo_surface_destroy (pItem->pSurface);
+	g_free (pItem);
+}
+
+
+static void _load_item_image (Icon *icon)
+{
+	int iWidth = icon->iImageWidth;
+	int iHeight = icon->iImageHeight;
+	
+	CDStatusNotifierItem *pItem = cd_satus_notifier_get_item_from_icon (icon);
+	gchar *cIconPath = cd_satus_notifier_search_item_icon_s_path (pItem);
+	if (cIconPath != NULL && *cIconPath != '\0')
+		icon->pIconBuffer = cairo_dock_create_surface_from_image_simple (cIconPath,
+			iWidth,
+			iHeight);
+	g_free (cIconPath);
+}
+Icon *cd_satus_notifier_create_icon_for_item (CDStatusNotifierItem *pItem)
+{
+	g_return_val_if_fail (pItem != NULL, NULL);
+	Icon *pIcon = cairo_dock_create_dummy_launcher (g_strdup (pItem->cTitle?pItem->cTitle:pItem->cId),
+		g_strdup (pItem->cIconName),
+		g_strdup (pItem->cService),
+		NULL,
+		pItem->iPosition > -1 ? pItem->iPosition : (int)pItem->iCategory);
+	pIcon->iface.load_image = _load_item_image;  /// a voir...
+	return pIcon;
+}
+
+
+CDStatusNotifierItem *cd_satus_notifier_get_item_from_icon (Icon *pIcon)
+{
+	CDStatusNotifierItem *pItem;
+	GList *it;
+	for (it = myData.pItems; it != NULL; it = it->next)
+	{
+		pItem = it->data;
+		if (pIcon->cCommand && strcmp (pIcon->cCommand, pItem->cService) == 0)
+			return pItem;
+	}
+	return NULL;
+}
+
+Icon *cd_satus_notifier_get_icon_from_item (CDStatusNotifierItem *pItem)
+{
+	//g_print ("%s (%s)\n", __func__, pItem->cService);
+	GList *ic, *pIcons = CD_APPLET_MY_ICONS_LIST;
+	Icon *pIcon;
+	for (ic = pIcons; ic != NULL; ic = ic->next)
+	{
+		pIcon = ic->data;
+		//g_print ("  %s \n", pIcon->cCommand);
+		if (pIcon->cCommand && strcmp (pIcon->cCommand, pItem->cService) == 0)
+		{
+			return pIcon;
+		}
+	}
+	return NULL;
+}

=== added file 'Status-Notifier/src/applet-item.h'
--- Status-Notifier/src/applet-item.h	1970-01-01 00:00:00 +0000
+++ Status-Notifier/src/applet-item.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,40 @@
+/**
+* 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_ITEM__
+#define  __APPLET_ITEM__
+
+#include <cairo-dock.h>
+
+
+CDStatusNotifierItem *cd_satus_notifier_create_item (const gchar *cService, const gchar *cObjectPath);
+
+void cd_free_item (CDStatusNotifierItem *pItem);
+
+gchar *cd_satus_notifier_search_item_icon_s_path (CDStatusNotifierItem *pItem);
+
+Icon *cd_satus_notifier_create_icon_for_item (CDStatusNotifierItem *pItem);
+
+
+CDStatusNotifierItem *cd_satus_notifier_get_item_from_icon (Icon *pIcon);
+
+Icon *cd_satus_notifier_get_icon_from_item (CDStatusNotifierItem *pItem);
+
+
+#endif

=== modified file 'Status-Notifier/src/applet-notifications.c'
--- Status-Notifier/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -17,14 +17,16 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-//\________________ Add your name in the copyright file (and / or modify your name here)
-
 #include <stdlib.h>
 #include <string.h>
 
 #include "applet-struct.h"
+#include "applet-item.h"
+#include "applet-draw.h"
 #include "applet-notifications.h"
 
+//\___________ Define here the action to be taken when the user left-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.
+
 static void _get_x_y (Icon *pIcon, CairoContainer *pContainer, int *x, int *y)
 {
 	if (pContainer->bIsHorizontal)
@@ -37,63 +39,89 @@
 		*x = pContainer->iWindowPositionY + (pContainer->bDirectionUp ? 0 : pContainer->iHeight);
 		*y = pContainer->iWindowPositionX + pIcon->fDrawX + pIcon->fWidth * pIcon->fScale/2;
 	}
-	g_print ("menu position : %d;%d\n", *x, *y);
-}
-
-//\___________ Define here the action to be taken when the user left-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.
-static inline gboolean _emit_click (Icon *pIcon, CairoContainer *pContainer, const gchar *cSignal)
-{
-	if (pContainer == CAIRO_CONTAINER (myIcon->pSubDock) && myIcon->pSubDock != NULL)
-	{
-		if (pIcon != NULL)
-		{
-			cairo_dock_remove_dialog_if_any (pIcon);
-			
-			CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
-			if (pItemData != NULL)
-			{
-				if (pItemData->iSidPopupTooltip != 0)
-				{
-					g_source_remove (pItemData->iSidPopupTooltip);
-					pItemData->iSidPopupTooltip = 0;
-				}	
-				int x, y;
-				_get_x_y (pIcon, pContainer, &x, &y);
-				dbus_g_proxy_call (pItemData->pProxy, cSignal, NULL,
-					G_TYPE_INT, x,
-					G_TYPE_INT, y,
-					G_TYPE_INVALID,
-					G_TYPE_INVALID);
-			}
-		}
-		return TRUE;
-	}
-	return FALSE;
-}
+	//g_print ("click position : %d;%d\n", *x, *y);
+}
+static inline gboolean _emit_click (CDStatusNotifierItem *pItem, Icon *pIcon, CairoContainer *pContainer, const gchar *cSignal)
+{
+	int x, y;
+	_get_x_y (pIcon, pContainer, &x, &y);
+	
+	GError *erreur = NULL;
+	dbus_g_proxy_call (pItem->pProxy, cSignal, &erreur,
+		G_TYPE_INT, x,
+		G_TYPE_INT, y,
+		G_TYPE_INVALID,
+		G_TYPE_INVALID);
+	if (erreur != NULL)
+	{
+		//g_print ("method %s failed (%s)\n", cSignal, erreur->message);
+		g_error_free (erreur);
+		return FALSE;
+	}
+	return TRUE;
+}
+
+static inline CDStatusNotifierItem *_get_item (Icon *pClickedIcon, CairoContainer *pClickedContainer)
+{
+	CDStatusNotifierItem *pItem = NULL;
+	if (myConfig.bCompactMode)
+	{
+		if (pClickedIcon == myIcon)  // clic sur la bonne icone.
+		{
+			pItem = cd_satus_notifier_find_item_from_coord ();
+		}
+	}
+	else
+	{
+		if ((myIcon->pSubDock != NULL && pClickedContainer == CAIRO_CONTAINER (myIcon->pSubDock)) ||
+			(myDesklet && pClickedContainer == myContainer))  // clic sur le bon container.
+		{
+			pItem = cd_satus_notifier_get_item_from_icon (pClickedIcon);
+		}
+	}
+	return pItem;
+}
+
 CD_APPLET_ON_CLICK_BEGIN
-	_emit_click (CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER, "Activate");
+	CDStatusNotifierItem *pItem = _get_item (CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER);
+	//g_print ("click on item '%s'\n", pItem?pItem->cService:"none");
+	if (pItem != NULL)
+	{
+		gboolean r = _emit_click (pItem, CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER, "Activate");
+		if (!r)
+		{
+			if (pItem->cId != NULL)
+			{
+				cairo_dock_launch_command (pItem->cId);  // lancer une nouvelle fois l'appli montre sa fenetre (enfin, generalement).
+			}
+		}
+	}
 CD_APPLET_ON_CLICK_END
 
 
 CD_APPLET_ON_MIDDLE_CLICK_BEGIN
-	_emit_click (CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER, "SecondaryActivate");
+	CDStatusNotifierItem *pItem = _get_item (CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER);
+	if (pItem != NULL)
+	{
+		_emit_click (pItem, CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER, "SecondaryActivate");
+	}
 CD_APPLET_ON_CLICK_END
 
 
 CD_APPLET_ON_SCROLL_BEGIN
-	if (CD_APPLET_CLICKED_CONTAINER == CAIRO_CONTAINER (myIcon->pSubDock) && myIcon->pSubDock != NULL)
+	CDStatusNotifierItem *pItem = _get_item (CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER);
+	if (pItem != NULL)
 	{
-		if (CD_APPLET_CLICKED_ICON != NULL)
+		GError *erreur = NULL;
+		dbus_g_proxy_call (pItem->pProxy, "Scroll", &erreur,
+			G_TYPE_INT, CD_APPLET_SCROLL_UP ? +1 : -1,
+			G_TYPE_STRING, "vertical",
+			G_TYPE_INVALID,
+			G_TYPE_INVALID);
+		if (erreur != NULL)
 		{
-			CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (CD_APPLET_CLICKED_ICON);
-			if (pItemData != NULL)
-			{
-				dbus_g_proxy_call (pItemData->pProxy, "Scroll", NULL,
-					G_TYPE_INT, CD_APPLET_SCROLL_UP ? +1 : -1,
-					G_TYPE_STRING, "vertical",
-					G_TYPE_INVALID,
-					G_TYPE_INVALID);
-			}
+			//g_print ("method %s failed (%s)\n", "Scroll", erreur->message);
+			g_error_free (erreur);
 		}
 	}
 CD_APPLET_ON_SCROLL_END
@@ -108,26 +136,43 @@
 
 gboolean cd_status_notifier_on_right_click (CairoDockModuleInstance *myApplet, Icon *pClickedIcon, CairoContainer *pClickedContainer, GtkWidget *pAppletMenu, gboolean *bDiscardMenu)
 {
-	if (pClickedContainer == CAIRO_CONTAINER (myIcon->pSubDock) && myIcon->pSubDock != NULL)
+	if (pClickedIcon == NULL)
+		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	
+	CD_APPLET_ENTER;
+	CDStatusNotifierItem *pItem = _get_item (CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER);
+	if (pItem != NULL)
 	{
+		gboolean r = FALSE;
+		if (pItem->cMenuPath != NULL)
+		{
+			if (pItem->pMenu == NULL)
+				pItem->pMenu = dbusmenu_gtkmenu_new ((gchar *)pItem->cService, (gchar *)pItem->cMenuPath);
+			if (pItem->pMenu != NULL)
+			{
+				cairo_dock_popup_menu_on_icon (GTK_WIDGET (pItem->pMenu), pClickedIcon, pClickedContainer);
+				r = TRUE;
+			}
+		}
+		
+		if (!r)
+		{
+			_emit_click (pItem, pClickedIcon, pClickedContainer, "ContextMenu");
+		}
 		*bDiscardMenu = TRUE;
-		if (pClickedIcon != NULL)
-		{
-			_emit_click (pClickedIcon, pClickedContainer, "ContextMenu");
-		}
-		return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_INTERCEPT_NOTIFICATION);
 	}
-	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 }
 
 
 static gboolean _popup_tooltip (Icon *pIcon)
 {
-	CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
+	CDStatusNotifierItem *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
 	if (pItemData != NULL && pItemData->pToolTip != NULL)
 	{
 		myDialogs.dialogTextDescription.bUseMarkup = TRUE;
-		g_print ("pItemData->pToolTip->cMessage : %s\n", pItemData->pToolTip->cMessage);
+		//g_print ("pItemData->pToolTip->cMessage : %s\n", pItemData->pToolTip->cMessage);
 		gchar *cText = g_strdup_printf ("<b>%s</b>\n%s", pItemData->pToolTip->cTitle, pItemData->pToolTip->cMessage);
 		gchar *cIconPath = NULL;
 		if (pItemData->pToolTip->cIconName)
@@ -146,12 +191,12 @@
 {
 	if (pDock == myIcon->pSubDock && myIcon->pSubDock != NULL)
 	{
-		Icon *icon = NULL;
+		/*Icon *icon = NULL;
 		GList *ic;
 		for (ic = myData.pIcons; ic != NULL; ic = ic->next)
 		{
 			icon = ic->data;
-			CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
+			CDStatusNotifierItem *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
 			if (pItemData && pItemData->iSidPopupTooltip != 0)
 			{
 				g_source_remove (pItemData->iSidPopupTooltip);
@@ -162,9 +207,9 @@
 		
 		if (pIcon)
 		{
-			CDStatusNotifierItemData *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
+			CDStatusNotifierItem *pItemData = CD_APPLET_GET_MY_ICON_DATA (pIcon);
 			pItemData->iSidPopupTooltip = g_timeout_add (600, (GSourceFunc) _popup_tooltip, pIcon);
-		}
+		}*/
 	}
 	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 }

=== modified file 'Status-Notifier/src/applet-struct.h'
--- Status-Notifier/src/applet-struct.h	2010-08-07 01:43:25 +0000
+++ Status-Notifier/src/applet-struct.h	2010-09-16 01:12:52 +0000
@@ -21,28 +21,19 @@
 #ifndef __CD_APPLET_STRUCT__
 #define  __CD_APPLET_STRUCT__
 
+#include <libdbusmenu-gtk/menuitem.h>
+#include <libdbusmenu-gtk/menu.h>
+
 #include <cairo-dock.h>
 
 //\___________ structure containing the applet's configuration parameters.
 struct _AppletConfig {
-	gboolean bSomeBooleanValue;
-	gint iSomeIntegerValue;
-	gchar *cSomeStringValue;
+	gboolean bCompactMode;  // les items sur l'icone principale ou dans un sous-dock.
+	gboolean bResizeIcon;  // si compact, redimensionner l'icone principale automatiquement.
+	gint iNbLines;  // si compact et redimensionnement auto, nbre de lignes (colonnes en mode vertical).
 	} ;
 
 
-typedef struct _statusNotifierHostObject statusNotifierHostObject;
-
-struct _statusNotifierHostObject {
-	GObject parent;
-	DBusGConnection *connection;
-};
-typedef struct {
-	GObjectClass parent_class;
-} statusNotifierHostObjectClass;
-
-
-
 typedef enum {
 	CD_STATUS_PASSIVE=0,
 	CD_STATUS_ACTIVE,
@@ -66,29 +57,49 @@
 	} CDToolTip;
 
 typedef struct {
+	// props
 	gchar *cService;
-	DBusGProxy *pProxyProps;
-	DBusGProxy *pProxy;
 	gchar *cId;
+	CDCategoryEnum iCategory;
 	CDStatusEnum iStatus;
-	CDCategoryEnum iCategory;
-	Window iWindowId;
+	gchar *cIconName;
 	gchar *cIconThemePath;
 	gchar *cAttentionIconName;
+	gchar *cTitle;
+	// additionnal props supported by Ubuntu
+	gchar *cLabel;
+	gchar *cLabelGuide;
+	gchar *cMenuPath;
+	// additionnal props supported by KDE
+	Window iWindowId;
 	gchar *cAttentionMovieName;
 	gchar *cOverlayIconName;
 	CDToolTip *pToolTip;
+	
+	gint iPosition;  // donnee par l'indicator service
 	guint iSidPopupTooltip;
-} CDStatusNotifierItemData;
-
+	// data
+	DBusGProxy *pProxyProps;
+	DBusGProxy *pProxy;
+	gboolean bInvalid;  // item deja en cours de destruction
+	DbusmenuGtkMenu *pMenu;
+	cairo_surface_t *pSurface;
+	/*GLuint iTexture;
+	Icon *pIcon;*/
+} CDStatusNotifierItem;
 
 
 //\___________ structure containing the applet's data, like surfaces, dialogs, results of calculus, etc.
 struct _AppletData {
-	statusNotifierHostObject *pMainObject;
+	gchar *cHostName;
 	DBusGProxy *pProxyWatcher;
-	gchar *cHostName;
-	GList *pIcons;
+	DBusGProxy *pProxyIndicatorApplicationService;
+	DBusGProxyCall* pRegisterHostCall;
+	DBusGProxyCall* pGetApplicationsCall;
+	GList *pItems;
+	guint iSidGetWatcher;
+	GHashTable *pThemePaths;
+	gint iNbLines, iNbColumns, iItemSize;  // agencement compact.
 	} ;
 
 

=== modified file 'System-Monitor/data/System-Monitor.conf.in'
--- System-Monitor/data/System-Monitor.conf.in	2010-08-07 01:43:25 +0000
+++ System-Monitor/data/System-Monitor.conf.in	2010-09-16 01:12:52 +0000
@@ -104,7 +104,7 @@
 #X[Gauge;gtk-dialog-info]
 frame_gauge=
 
-#h+[@gaugesdir@;gauges;gauges] Choose one of the available themes:/
+#h+[@gaugesdir@;gauges;gauges2] Choose one of the available themes:/
 theme = Turbo-night-fuel
 
 

=== removed file 'System-Monitor/data/messages'
--- System-Monitor/data/messages	2010-08-07 01:43:25 +0000
+++ System-Monitor/data/messages	1970-01-01 00:00:00 +0000
@@ -1,208 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Always display the icon, even when the dock is hidden?")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Choose the style of the display: ")
-
-_("Gauge")
-
-_("Graph")
-
-_("Gauge")
-
-_("Choose one of the available themes:")
-
-_("Graph")
-
-_("Type of graphic :")
-
-_("Line")
-
-_("Plain")
-
-_("Bar")
-
-_("Circle")
-
-_("Plain Circle")
-
-_("It's the colour of the graphic for high values.")
-
-_("High value's colour :")
-
-_("It's the colour of the graphic for low values.")
-
-_("Low value's colour :")
-
-_("Background colour of the graphic :")
-
-_("Show all values on same graph?")
-
-_("Parameters")
-
-_("Show CPU usage?")
-
-_("Show RAM usage ?")
-
-_("Show SWAP too?")
-
-_("You need an nVidia card and the 'nvidia-settings' tool.")
-
-_("Show graphic card's temperature?")
-
-_("Show free memory instead of used memory?")
-
-_("Display values :")
-
-_("No")
-
-_("On icon")
-
-_("On label")
-
-_("in seconds.")
-
-_("Delay between refreshes:")
-
-_("You need OpenGL for this option. Set it to 0 means not used, 1 means the movement is continue.")
-
-_("How smooth is the movement?")
-
-_("Leave empty to use the default one.")
-
-_("User command to display a system monitor:")
-
-_("It will prevent the system monitor's icon to show in the taskbar. The applet's icon will then behave as a launcher, an application, and an applet.")
-
-_("Steal the system monitor's icon from the taskbar?")
-
-_("Leave empty to use the default one.")
-
-_("Class of the system monitor program:")
-
-_("Top List")
-
-_("When you left-click on the icon, you will get the list of the N most CPU/RAM-intensive programs.")
-
-_("Number of programs to display in the top list:")
-
-_("The first colour of the gradient used to display the top list.")
-
-_("Top list start colour:")
-
-_("The second colour of the gradient used to display the top list.")
-
-_("Top list stop colour:")
-
-_("Show top memory usage in %?")
-
-_("in seconds.")
-
-_("Delay between top list refreshes:")
-
-_("Graphic Card temperature")
-
-_("in Celsius. The temperature will be displayed between this value and the upper limit.")
-
-_("Lower limit of graphic card temperature:")
-
-_("in Celsius. The temperature will be displayed between this value and the upper limit.")
-
-_("Upper limit of graphic card temperature:")
-
-_("Notification when graphic card temperature is high?")
-
-_("in celcius.")
-
-_("Notification limit of graphic card temperature:")
-
-_("Play a sound when displaying warning?")
-
-_("Path to sound file:")
-

=== modified file 'System-Monitor/src/applet-config.c'
--- System-Monitor/src/applet-config.c	2010-08-07 01:43:25 +0000
+++ System-Monitor/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -48,12 +48,6 @@
 	CD_CONFIG_GET_COLOR_RVB ("Configuration", "high color", myConfig.fHigholor);
 	CD_CONFIG_GET_COLOR ("Configuration", "bg color", myConfig.fBgColor);
 	
-	/*myConfig.fAlpha = CD_CONFIG_GET_DOUBLE ("Configuration", "watermark alpha");
-	if (myConfig.fAlpha != 0)
-	{
-		myConfig.cWatermarkImagePath = CD_CONFIG_GET_FILE_PATH ("Configuration", "watermark image", MY_APPLET_ICON_FILE);
-	}*/
-	
 	myConfig.iLowerLimit = CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "llt", 50);
 	myConfig.iUpperLimit = MAX (myConfig.iLowerLimit+1, CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "ult", 110));
 	myConfig.iAlertLimit = CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "alt", 100);
@@ -102,7 +96,6 @@
 	g_free (myConfig.cGThemePath);
 	g_free (myConfig.defaultTitle);
 	cairo_dock_free_label_description (myConfig.pTopTextDescription);
-	g_free (myConfig.cWatermarkImagePath);
 	g_free (myConfig.cSystemMonitorCommand);
 	g_free (myConfig.cSystemMonitorClass);
 CD_APPLET_RESET_CONFIG_END

=== modified file 'System-Monitor/src/applet-init.c'
--- System-Monitor/src/applet-init.c	2010-08-07 01:43:25 +0000
+++ System-Monitor/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -48,7 +48,7 @@
 
 static void _set_data_renderer (CairoDockModuleInstance *myApplet, gboolean bReload)
 {
-	CairoDataRendererAttribute *pRenderAttr = NULL;  // les attributs du data-renderer global.
+	CairoDataRendererAttribute *pRenderAttr = NULL;  // les attributs generiques du data-renderer.
 	if (myConfig.iDisplayType == CD_SYSMONITOR_GAUGE)
 	{
 		CairoGaugeAttribute attr;  // les attributs de la jauge.
@@ -103,13 +103,29 @@
 	{
 		/// A FAIRE...
 	}
-	if (pRenderAttr != NULL)
+	if (pRenderAttr != NULL)  // attributs generiques.
 	{
 		pRenderAttr->iLatencyTime = myConfig.iCheckInterval * 1000 * myConfig.fSmoothFactor;
 		pRenderAttr->iNbValues = myConfig.bShowCpu + myConfig.bShowRam + myConfig.bShowSwap + myConfig.bShowNvidia;
-		pRenderAttr->format_value = (CairoDockGetValueFormatFunc) cd_sysmonitor_format_value;
-		pRenderAttr->pFormatData = myApplet;
-		//pRenderAttr->bWriteValues = TRUE;
+		if (myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_ICON)
+		{
+			pRenderAttr->bWriteValues = TRUE;
+			pRenderAttr->format_value = (CairoDataRendererFormatValueFunc)cd_sysmonitor_format_value;
+			pRenderAttr->pFormatData = myApplet;
+		}
+		const gchar *c[] = {"/usr/share/icons/gnome/scalable/actions/gtk-about.svg", "/usr/share/icons/gnome/scalable/actions/gtk-help.svg", "", ""};
+		//pRenderAttr->cEmblems = c;
+		const gchar *labels[4] = {NULL, NULL, NULL, NULL};
+		int i = 0;
+		if (myConfig.bShowCpu)
+			labels[i++] = "CPU";
+		if (myConfig.bShowRam)
+			labels[i++] = "RAM";
+		if (myConfig.bShowSwap)
+			labels[i++] = "SWAP";
+		if (myConfig.bShowNvidia)
+			labels[i++] = "TEMP";
+		pRenderAttr->cLabels = (gchar **)labels;
 		if (! bReload)
 			CD_APPLET_ADD_DATA_RENDERER_ON_MY_ICON (pRenderAttr);
 		else

=== modified file 'System-Monitor/src/applet-monitor.c'
--- System-Monitor/src/applet-monitor.c	2010-02-14 00:51:22 +0000
+++ System-Monitor/src/applet-monitor.c	2010-09-16 01:12:52 +0000
@@ -87,7 +87,7 @@
 		{
 			// Copier les donnes en memoire partagee...
 			
-			if (myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_ICON || (myDock && myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_LABEL))  // on affiche les valeurs soit en info-rapide, soit sur l'etiquette en mode dock.
+			if (/**myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_ICON || */(myDock && myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_LABEL))  // on affiche les valeurs soit en info-rapide, soit sur l'etiquette en mode dock.
 			{
 				gboolean bOneLine = (myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_LABEL);
 				GString *sInfo = g_string_new ("");
@@ -146,7 +146,7 @@
 				{
 					s_fValues[i++] = myData.fGpuTempPercent / 100.;
 					if (myData.bAlerted && myData.iGPUTemp < myConfig.iAlertLimit)
-						myData.bAlerted = FALSE; //On reinitialise l'alerte quand la temperature descend en dessou de la limite.
+						myData.bAlerted = FALSE; //On reinitialise l'alerte quand la temperature descend en dessous de la limite.
 					
 					if (!myData.bAlerted && myData.iGPUTemp >= myConfig.iAlertLimit)
 						cd_nvidia_alert (myApplet);
@@ -157,12 +157,12 @@
 	}
 	
 	CD_APPLET_LEAVE (myData.bAcquisitionOK);
-	//return myData.bAcquisitionOK;
 }
 
 
-void cd_sysmonitor_format_value (double fValue, int iNumValue, gchar *cFormatBuffer, int iBufferLength, CairoDockModuleInstance *myApplet)
+void cd_sysmonitor_format_value (CairoDataRenderer *pRenderer, int iNumValue, gchar *cFormatBuffer, int iBufferLength, CairoDockModuleInstance *myApplet)
 {
+	double fValue = cairo_data_renderer_get_normalized_current_value_with_latency (pRenderer, iNumValue);
 	int i = -1;
 	if (myConfig.bShowCpu)
 	{
@@ -197,7 +197,7 @@
 		if (i == iNumValue)
 		{
 			double fTemp = myConfig.iLowerLimit + fValue * (myConfig.iUpperLimit - myConfig.iLowerLimit);
-			snprintf (cFormatBuffer, iBufferLength, fTemp < 100. ? " %.0f°" : "%.0f°", fTemp);
+			snprintf (cFormatBuffer, iBufferLength, fTemp < 100. ? " %.0f�" : "%.0f�", fTemp);
 			return ;
 		}
 	}

=== modified file 'System-Monitor/src/applet-monitor.h'
--- System-Monitor/src/applet-monitor.h	2010-02-14 00:51:22 +0000
+++ System-Monitor/src/applet-monitor.h	2010-09-16 01:12:52 +0000
@@ -27,6 +27,6 @@
 
 gboolean cd_sysmonitor_update_from_data (CairoDockModuleInstance *myApplet);
 
-void cd_sysmonitor_format_value (double fValue, int iNumValue, gchar *cFormatBuffer, int iBufferLength, CairoDockModuleInstance *myApplet);
+void cd_sysmonitor_format_value (CairoDataRenderer *pRenderer, int iNumValue, gchar *cFormatBuffer, int iBufferLength, CairoDockModuleInstance *myApplet);
 
 #endif

=== modified file 'System-Monitor/src/applet-notifications.c'
--- System-Monitor/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ System-Monitor/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -51,7 +51,7 @@
 	if (myData.bInitialized && myData.bAcquisitionOK)
 	{
 		if (myData.pTopDialog != NULL || cairo_dock_remove_dialog_if_any (myIcon))
-			return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+			CD_APPLET_LEAVE (CAIRO_DOCK_INTERCEPT_NOTIFICATION);
 		
 		// On recupere l'uptime.
 		gchar *cUpTime = NULL, *cActivityTime = NULL, *cGCInfos = NULL;
@@ -112,6 +112,8 @@
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
 	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_IN_MENU (D_("Monitor System"), _show_monitor_system, pSubMenu);
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	
+	CD_APPLET_ADD_IN_MENU (D_("System Monitor"), _show_monitor_system, CD_APPLET_MY_MENU);
+	
+	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END

=== modified file 'System-Monitor/src/applet-struct.h'
--- System-Monitor/src/applet-struct.h	2010-08-07 01:43:25 +0000
+++ System-Monitor/src/applet-struct.h	2010-09-16 01:12:52 +0000
@@ -34,6 +34,14 @@
 	CD_SYSMONITOR_NB_TYPES
 	} CDSysmonitorDisplayType; 
 
+typedef struct {
+	gint iLowerLimit;
+	gint iUpperLimit;
+	gint iAlertLimit;
+	gboolean bAlert;
+	gboolean bAlertSound;
+	} CDAlertParam;
+
 struct _AppletConfig {
 	gchar *defaultTitle;
 	gint iCheckInterval;
@@ -46,8 +54,6 @@
 	
 	CairoDockInfoDisplay iInfoDisplay;
 	gchar *cGThemePath;
-	gchar *cWatermarkImagePath;
-	gdouble fAlpha;
 	
 	CDSysmonitorDisplayType iDisplayType;
 	CairoDockTypeGraph iGraphType;
@@ -108,6 +114,10 @@
 	gdouble fPrevRamPercent, fPrevSwapPercent;
 	gdouble fGpuTempPercent;
 	gdouble fPrevGpuTempPercent;
+	gdouble fCpuTempPercent;
+	gdouble fPrevCpuTempPercent;
+	gdouble fFanSpeedPercent;
+	gdouble fPrevFanSpeedPercent;
 	gboolean bNeedsUpdate;
 	gint iTimerCount;
 	// end of shared memory.

=== modified file 'Toons/data/Toons.conf.in'
--- Toons/data/Toons.conf.in	2010-08-07 01:43:25 +0000
+++ Toons/data/Toons.conf.in	2010-09-16 01:12:52 +0000
@@ -8,7 +8,7 @@
 icon size = 0;0
 
 #s Name of the icon as it will appear in its caption in the dock:
-name = Toons
+name = 
 
 icon = 
 

=== removed file 'Toons/data/messages'
--- Toons/data/messages	2010-08-07 01:43:25 +0000
+++ Toons/data/messages	1970-01-01 00:00:00 +0000
@@ -1,106 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Always display the icon, even when the dock is hidden?")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Choose one of the available themes:")
-
-_("in seconds.")
-
-_("Mean delay between winks:")
-
-_("in ms.")
-
-_("Wink duration:")
-
-_("Keep ratio?")
-
-_("A high refresh frequency will use more CPU.")
-
-_("High refresh frequency?")
-

=== modified file 'Toons/src/applet-notifications.c'
--- Toons/src/applet-notifications.c	2009-10-05 19:27:17 +0000
+++ Toons/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -27,14 +27,6 @@
 
 #define _XEYES_SENSITIVITY .5
 
-
-//\___________ Define here the action to be taken when the user left-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.
-/*CD_APPLET_ON_CLICK_BEGIN
-	
-	
-CD_APPLET_ON_CLICK_END*/
-
-
 //\___________ 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 ();
@@ -47,8 +39,6 @@
 	int iMouseX, iMouseY;
  	gdk_window_get_pointer (myContainer->pWidget->window, &iMouseX, &iMouseY, NULL);
 	
-	//\_________________ On garde les anciennes coordonnees.
-	
 	//\_________________ On calcule les nouvelles coordonnees.
 	gboolean bNeedsUpdate = FALSE;
 	double fScale = myIcon->fScale / cairo_dock_get_max_scale (myContainer) * myContainer->fRatio;

=== removed file 'Xgamma/data/messages'
--- Xgamma/data/messages	2010-08-07 01:43:25 +0000
+++ Xgamma/data/messages	1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Variation for 1 mouse scroll, in %:")
-
-_("Use 0 for none.")
-
-_("Brightness to apply automatically on startup:")
-

=== modified file 'Xgamma/src/applet-notifications.c'
--- Xgamma/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ Xgamma/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -57,8 +57,10 @@
 		G_TYPE_INVALID);
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
+	//Sub-Menu
 	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_IN_MENU (D_("Apply current luminosity on startup"), _cd_xgamma_remember_current_gamma, pSubMenu);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Apply current luminosity on startup"), GTK_STOCK_DIALOG_WARNING, _cd_xgamma_remember_current_gamma, pSubMenu);
+		CD_APPLET_ADD_SEPARATOR_IN_MENU (pSubMenu);
 		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 

=== modified file 'alsaMixer/data/CMakeLists.txt'
--- alsaMixer/data/CMakeLists.txt	2010-08-07 01:43:25 +0000
+++ alsaMixer/data/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -4,6 +4,7 @@
 install(FILES  ${CMAKE_CURRENT_BINARY_DIR}/AlsaMixer.conf
 	default.svg
 	mute.svg
+	emblem-mute.svg
 	broken.svg
 	preview.jpg
 	icon.png

=== added file 'alsaMixer/data/emblem-mute.svg'
--- alsaMixer/data/emblem-mute.svg	1970-01-01 00:00:00 +0000
+++ alsaMixer/data/emblem-mute.svg	2010-09-16 01:12:52 +0000
@@ -0,0 +1,461 @@
+<?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="svg6476"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="mute.svg"
+   inkscape:export-filename="/opt/cairo-dock_bzr/cairo-dock-plug-ins/alsaMixer/data/icon.png"
+   inkscape:export-xdpi="120"
+   inkscape:export-ydpi="120">
+  <metadata
+     id="metadata89">
+    <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>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="491"
+     id="namedview87"
+     showgrid="false"
+     inkscape:zoom="3.4766084"
+     inkscape:cx="-7.6737248"
+     inkscape:cy="6.2513755"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6476" />
+  <defs
+     id="defs6478">
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient6057"
+       id="radialGradient2532"
+       fy="6.2806997"
+       fx="18.031223"
+       r="3.1819806"
+       cy="6.2806997"
+       cx="18.031223" />
+    <linearGradient
+       id="linearGradient6057">
+      <stop
+         offset="0"
+         style="stop-color:white;stop-opacity:1"
+         id="stop6059" />
+      <stop
+         offset="1"
+         style="stop-color:white;stop-opacity:0"
+         id="stop6061" />
+    </linearGradient>
+    <filter
+       id="filter5745"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur5747"
+         stdDeviation="0.8362597" />
+    </filter>
+    <linearGradient
+       gradientTransform="translate(0,-1.926279)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient10591"
+       id="linearGradient2534"
+       y2="17.470011"
+       x2="27.192274"
+       y1="2.9136841"
+       x1="10.650842" />
+    <linearGradient
+       id="linearGradient10591">
+      <stop
+         offset="0"
+         style="stop-color:#cad0c6;stop-opacity:1"
+         id="stop10593" />
+      <stop
+         offset="0.5"
+         style="stop-color:#eaece9;stop-opacity:1"
+         id="stop10599" />
+      <stop
+         offset="1"
+         style="stop-color:#c5cbc0;stop-opacity:1"
+         id="stop10595" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(1.6824037,1.125)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient6227"
+       id="linearGradient2536-7"
+       y2="14.849737"
+       x2="33.004314"
+       y1="14.849737"
+       x1="35.004684" />
+    <linearGradient
+       id="linearGradient6227">
+      <stop
+         offset="0"
+         style="stop-color:black;stop-opacity:1"
+         id="stop6229" />
+      <stop
+         offset="1"
+         style="stop-color:black;stop-opacity:0"
+         id="stop6231" />
+    </linearGradient>
+    <filter
+       id="filter6251"
+       color-interpolation-filters="sRGB"
+       height="1.0951581"
+       width="1.4848505"
+       y="-0.047579072"
+       x="-0.24242526">
+      <feGaussianBlur
+         id="feGaussianBlur6253"
+         stdDeviation="0.24444548" />
+    </filter>
+    <linearGradient
+       gradientTransform="translate(-19.532826,1.7437184)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient6227"
+       id="linearGradient2538"
+       y2="13.789077"
+       x2="35.020981"
+       y1="13.789077"
+       x1="32.128025" />
+    <radialGradient
+       gradientTransform="matrix(1.3870968,0,0,0.8113208,10.987903,1.9296697)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient6075"
+       id="radialGradient2527"
+       fy="20.3125"
+       fx="15.9375"
+       r="3.3125"
+       cy="20.3125"
+       cx="15.9375" />
+    <linearGradient
+       id="linearGradient6075">
+      <stop
+         offset="0"
+         style="stop-color:black;stop-opacity:1"
+         id="stop6077" />
+      <stop
+         offset="1"
+         style="stop-color:black;stop-opacity:0"
+         id="stop6079" />
+    </linearGradient>
+    <radialGradient
+       gradientTransform="matrix(1.3870968,0,0,0.8113208,-7.0120971,1.9296697)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient6075"
+       id="radialGradient2530"
+       fy="20.3125"
+       fx="15.9375"
+       r="3.3125"
+       cy="20.3125"
+       cx="15.9375" />
+    <filter
+       id="filter5957"
+       color-interpolation-filters="sRGB"
+       height="1.1647059"
+       width="1.9882354"
+       y="-0.082352944"
+       x="-0.49411765">
+      <feGaussianBlur
+         id="feGaussianBlur5959"
+         stdDeviation="0.69878785" />
+    </filter>
+    <linearGradient
+       gradientTransform="matrix(0.9413543,0,0,0.7755502,1.4105206,6.2414233)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient12071"
+       id="linearGradient3236"
+       y2="18.037588"
+       x2="21.941509"
+       y1="21.550869"
+       x1="21.941509" />
+    <linearGradient
+       id="linearGradient12071">
+      <stop
+         offset="0"
+         style="stop-color:white;stop-opacity:1"
+         id="stop12073" />
+      <stop
+         offset="1"
+         style="stop-color:white;stop-opacity:0"
+         id="stop12075" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.9422167,0,0,1.5,1.3898222,-9.4028767)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient5881"
+       id="linearGradient3239"
+       y2="17"
+       x2="24.75"
+       y1="21"
+       x1="24.875" />
+    <linearGradient
+       id="linearGradient5881">
+      <stop
+         offset="0"
+         style="stop-color:#d6c8a7;stop-opacity:1"
+         id="stop5883" />
+      <stop
+         offset="1"
+         style="stop-color:#d0bd99;stop-opacity:1"
+         id="stop5885" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.9405192,0,0,1.1176137,1.4447998,-5.9978884)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient9845"
+       id="linearGradient3242"
+       y2="36.127281"
+       x2="30.875446"
+       y1="25.002281"
+       x1="10.907269" />
+    <linearGradient
+       id="linearGradient9845">
+      <stop
+         offset="0"
+         style="stop-color:white;stop-opacity:1"
+         id="stop9847" />
+      <stop
+         offset="1"
+         style="stop-color:white;stop-opacity:0.49484536"
+         id="stop9849" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.943025,0,0,1.1298556,1.3703378,-7.8420138)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient2411"
+       id="linearGradient3255"
+       y2="32.161697"
+       x2="40.938126"
+       y1="32.161697"
+       x1="6.72682" />
+    <linearGradient
+       id="linearGradient2411">
+      <stop
+         offset="0"
+         style="stop-color:#fee7b1;stop-opacity:1"
+         id="stop2413" />
+      <stop
+         offset="0.25796592"
+         style="stop-color:#ebd4b4;stop-opacity:1"
+         id="stop2419" />
+      <stop
+         offset="0.50796592"
+         style="stop-color:#c8a775;stop-opacity:1"
+         id="stop2421" />
+      <stop
+         offset="0.74009573"
+         style="stop-color:#b0935b;stop-opacity:1"
+         id="stop2423" />
+      <stop
+         offset="1"
+         style="stop-color:#fcebbf;stop-opacity:1"
+         id="stop2415" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient3257"
+       id="linearGradient3263"
+       y2="13.996504"
+       x2="22.015385"
+       y1="45"
+       x1="22.015385" />
+    <linearGradient
+       id="linearGradient3257">
+      <stop
+         offset="0"
+         style="stop-color:#957747;stop-opacity:1"
+         id="stop3259" />
+      <stop
+         offset="1"
+         style="stop-color:#ae8c56;stop-opacity:1"
+         id="stop3261" />
+    </linearGradient>
+    <radialGradient
+       gradientTransform="matrix(1.0196564,0,0,0.2039312,-0.935075,33.441752)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient3437"
+       id="radialGradient2498"
+       fy="46.869949"
+       fx="24.45439"
+       r="19.61445"
+       cy="46.869949"
+       cx="24.45439" />
+    <linearGradient
+       id="linearGradient3437">
+      <stop
+         offset="0"
+         style="stop-color:black;stop-opacity:1"
+         id="stop3439" />
+      <stop
+         offset="1"
+         style="stop-color:black;stop-opacity:0"
+         id="stop3441" />
+    </linearGradient>
+  </defs>
+  <g
+     id="layer1"
+     transform="matrix(0.99658873,0,0,0.99658873,0.35947304,0.7209234)">
+    <path
+       style="opacity:0.4;fill:url(#radialGradient2498);fill-opacity:1;stroke:none"
+       id="path3435"
+       d="m 44,43 c 0,2.209138 -8.954306,4 -20,4 -11.045695,0 -20.0000001,-1.790862 -20.0000001,-4 0,-2.209139 8.9543051,-4.000001 20.0000001,-4.000001 11.045694,0 20,1.790862 20,4.000001 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3255);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3263);stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       id="rect1314"
+       d="m 9.6076372,15.597122 c 9.5073408,-1.443399 19.1158448,-1.219316 28.7847248,0 1.167633,0 2.107638,1.04357 2.107638,2.339844 l 0,23.320312 c 0,1.296274 -1.000672,2.152344 -2.107638,2.339844 -10.02436,1.208603 -18.619576,1.199062 -28.7847248,0 -1.3496328,-0.4375 -2.107637,-1.04357 -2.107637,-2.339844 l 0,-23.320312 c 0,-1.296274 0.9400061,-2.339844 2.107637,-2.339844 z"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g4695"
+       transform="matrix(0.9706771,0,0,1,-0.7507553,-1.9028777)">
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path6193"
+         d="m 41.940271,24.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -16.308875,0.480472 -16.308875,0.480472 0,0 16.26324,0.159134 16.26324,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4678"
+         d="m 41.940271,26.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -19.058875,0.480472 -19.058875,0.480472 0,0 19.01324,0.159134 19.01324,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4680"
+         d="m 41.940271,28.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -16.308875,0.480472 -16.308875,0.480472 0,0 16.26324,0.159134 16.26324,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4682"
+         d="m 41.940271,30.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -11.058875,0.480472 -11.058875,0.480472 0,0 11.01324,0.159134 11.01324,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4684"
+         d="m 41.940271,32.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -16.308875,0.480472 -16.308875,0.480472 0,0 16.26324,0.159134 16.26324,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4686"
+         d="m 41.940271,34.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -18.746375,0.480472 -18.746375,0.480472 0,0 18.70074,0.159134 18.70074,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4688"
+         d="m 41.940271,36.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -13.996375,0.480472 -13.996375,0.480472 0,0 13.95074,0.159134 13.95074,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4690"
+         d="m 41.940271,38.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -8.433875,0.480472 -8.433875,0.480472 0,0 8.38824,0.159134 8.38824,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path4692"
+         d="m 41.940271,40.444505 c -0.398206,1.330312 -4.534152,1.670412 -5.302076,1.773431 0,0 -16.308875,0.480472 -16.308875,0.480472 0,0 16.26324,0.159134 16.26324,0.159134 0.825913,-0.09712 5.218651,0.103389 5.4361,-1.70593 l -0.08839,-0.707107 z"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="opacity:0.37999998;fill:none;stroke:url(#linearGradient3242);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.60109289;stroke-dashoffset:0"
+       id="rect6903"
+       d="m 9.6836237,17.092483 28.6396773,0 c 0.671971,0 1.212946,0.586115 1.212946,1.314159 l 0,22.876321 c 0,0.728044 -0.480307,1.064159 -1.212946,1.314159 -9.364556,1.203613 -18.60778,1.200821 -28.6396773,0 -0.6719726,-0.25 -1.2129464,-0.586115 -1.2129464,-1.314159 l 0,-22.876321 c 0,-0.728044 0.5409738,-1.314159 1.2129464,-1.314159 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient3239);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
+       id="rect1460"
+       d="m 9.545921,16.097122 c 9.638068,-1.460747 19.276134,-1.200569 28.914203,0 0.864562,0 1.560583,0.717046 1.560583,1.607725 l 0,2.78455 c 0,0.890679 -0.696021,1.607725 -1.560583,1.607725 -10.057893,0.6901 -19.312035,0.44381 -28.914203,0 -0.8645622,0 -1.5605819,-0.717046 -1.5605819,-1.607725 l 0,-2.78455 c 0,-0.890679 0.6960197,-1.607725 1.5605819,-1.607725 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="opacity:0.6;fill:none;stroke:url(#linearGradient3236);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+       id="rect1593"
+       d="m 9.6004853,19.813555 28.8050767,0 c 0.625913,0 1.129809,0.398555 1.129809,0.893623 l 0,0.539405 c 0,0.495067 -0.503896,0.893623 -1.129809,0.893623 -9.512086,0.977722 -19.131629,1.037555 -28.8050767,0 -0.625914,0 -1.129808,-0.398556 -1.129808,-0.893623 l 0,-0.539405 c 0,-0.495068 0.503894,-0.893623 1.129808,-0.893623 z"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5957);enable-background:accumulate"
+       id="rect5887"
+       transform="matrix(1.9144392,0,0,1.2283366,-15.858733,-7.2062543)"
+       y="23.226137"
+       x="14.594036"
+       ry="1.6077254"
+       rx="1.6077254"
+       height="16.970562"
+       width="2.8284271" />
+    <path
+       style="opacity:0.3;fill:url(#radialGradient2530);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path6073"
+       d="m 19.689516,18.409623 c 0,1.484266 -2.057144,2.6875 -4.594758,2.6875 -2.537615,0 -4.594758,-1.203234 -4.594758,-2.6875 0,-1.484266 2.057143,-2.6875 4.594758,-2.6875 2.537614,0 4.594758,1.203234 4.594758,2.6875 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="opacity:0.3;fill:url(#radialGradient2527);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path6083"
+       d="m 37.689516,18.409623 c 0,1.484266 -2.057143,2.6875 -4.594758,2.6875 -2.537614,0 -4.594758,-1.203234 -4.594758,-2.6875 0,-1.484266 2.057144,-2.6875 4.594758,-2.6875 2.537615,0 4.594758,1.203234 4.594758,2.6875 z"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g1387"
+       transform="matrix(0.8563683,0,0,0.9968005,3.3880698,-2.4746473)">
+      <path
+         style="fill:url(#linearGradient2534);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.08234417;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="path2086"
+         d="m 10.6402,20.234846 0,-5.734846 C 10.6402,6.6298666 15.897609,2.8910066 24.020027,2.9892921 32.18664,3.0875777 37.5,6.5372782 37.5,14.5 l 0,5.984846 c 0,1.954229 -5.490701,2.202951 -5.490701,0 l 0,-3.984846 c 0,-2 0.568453,-8.471853 -7.932058,-8.471853 -8.430413,0 -7.81615,6.511738 -7.783459,8.463879 l 0,3.776498 c 0,2.35462 -5.653582,2.344609 -5.653582,-0.03368 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.18235294;fill:url(#linearGradient2536-7);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter6251)"
+         id="rect1345"
+         d="m 34.687087,10.837069 1.263948,0.125 c 0.927239,2.822733 0.736052,9.510413 0.736052,9.510413 -0.0625,1.125 -2.03125,0.53125 -2,0 l 0,-9.635413 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:0.14117647;fill:url(#linearGradient2538);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter6251)"
+         id="path6332"
+         transform="matrix(-1,0,0,1,29.05878,-0.6187184)"
+         d="m 12.926606,11.544175 0.371719,0.169195 c 1.720331,1.054966 2.173532,9.37783 2.173532,9.37783 -0.0625,1.125 -2.03125,0.53125 -2,0 0,0 0.37822,-6.87064 -0.545251,-9.547025 z"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       style="opacity:0.62352941;fill:none;stroke:#ffffff;stroke-width:2.0439775;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5745);enable-background:accumulate"
+       id="path5675"
+       transform="matrix(0.9605048,0,0,0.9968005,0.9443375,-0.08738921)"
+       d="m 13.876557,17.722122 0.124999,-7.5 c 0,-9.8763728 18.6875,-10.6764 18.6875,0.875 l 0,6.875"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g6067"
+       transform="matrix(0.9605048,0,0,0.9968005,0.3540496,-2.5128119)">
+      <path
+         style="fill:url(#radialGradient2532);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path6055"
+         d="m 21.213204,6.2806997 c 4.41e-4,1.7576709 -1.42431,3.1827783 -3.181981,3.1827783 -1.75767,0 -3.182421,-1.4251074 -3.18198,-3.1827783 -4.41e-4,-1.7576709 1.42431,-3.1827783 3.18198,-3.1827783 1.757671,0 3.182422,1.4251074 3.181981,3.1827783 l 0,0 z"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path6065"
+         transform="matrix(0.4343344,0,0,0.4343344,10.199642,3.5527756)"
+         d="m 21.213204,6.2806997 c 4.41e-4,1.7576709 -1.42431,3.1827783 -3.181981,3.1827783 -1.75767,0 -3.182421,-1.4251074 -3.18198,-3.1827783 -4.41e-4,-1.7576709 1.42431,-3.1827783 3.18198,-3.1827783 1.757671,0 3.182422,1.4251074 3.181981,3.1827783 l 0,0 z"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>

=== removed file 'alsaMixer/data/messages'
--- alsaMixer/data/messages	2010-08-07 01:43:25 +0000
+++ alsaMixer/data/messages	1970-01-01 00:00:00 +0000
@@ -1,146 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Leave empty to use the default sound card.")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("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")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Alsa")
-
-_("Leave empty to use the default sound card.")
-
-_("Sound card:")
-
-_("Select channel:")
-
-_("On some cards, a channel only controls 1 side (right or left). You will then need to specify a second channel here, to control both sides. Most of the time, you should just leave this empty.")
-
-_("Choose a second channel to control (optional):")
-
-_("Leave empty to use the defaut command.")
-
-_("Specific command to run to show an advanced sound mixer:")
-
-_("Control")
-
-_("Shortkey to show/hide the sound control dialog:")
-
-_("Variation for 1 mouse scroll, in %:")
-
-_("Hide the scale when mouse leaves the desklet?")
-
-_("Display")
-
-_("Display volume :")
-
-_("No")
-
-_("On label")
-
-_("On icon")
-
-_("Effect to apply to the icon when adjusting volume:")
-
-_("None")
-
-_("Zoom")
-
-_("Transparency")
-
-_("Draw Bar")
-
-_("Leave empty to use the default one.")
-
-_("Default icon:")
-
-_("Leave empty to use the default one.")
-
-_("Broken icon:")
-
-_("Leave empty to use the default one.")
-
-_("Mute icon:")
-

=== modified file 'alsaMixer/src/applet-notifications.c'
--- alsaMixer/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ alsaMixer/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -42,7 +42,7 @@
 	}
 	else
 	{
-		g_spawn_command_line_async ("gnome-volume-control", &erreur);
+		g_spawn_command_line_async ("gnome-volume-control -p applications", &erreur);
 	}
 	
 	if (erreur != NULL)
@@ -54,8 +54,11 @@
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
 	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_IN_MENU(_("Adjust channels"), _mixer_show_advanced_mixer, pSubMenu);
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	// Main Menu
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK (_("Adjust channels"), GTK_STOCK_PREFERENCES, _mixer_show_advanced_mixer, CD_APPLET_MY_MENU);
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK ((myData.bIsMute ? _("Unmute (middle-click)") : _("Mute (middle-click)")), MY_APPLET_SHARE_DATA_DIR"/emblem-mute.svg", mixer_switch_mute, CD_APPLET_MY_MENU);
+	// Sub-Menu
+	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 
 
@@ -88,7 +91,7 @@
 		iVolume = MIN (iVolume + delta, 100);
 	}
 	else
-		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 	
 	mixer_set_volume (iVolume);
 CD_APPLET_ON_SCROLL_END

=== modified file 'clock/data/clock.conf.in'
--- clock/data/clock.conf.in	2010-08-07 01:43:25 +0000
+++ clock/data/clock.conf.in	2010-09-16 01:12:52 +0000
@@ -146,6 +146,9 @@
 #C+ Text colour:
 text color = 0.0; 0.0; 0.5; 1.
 
+#l+[Automatic;On 1 line;On 2 lines] Layout of the text:
+text layout = 0
+
 #e+[.5;1] Ratio to apply on text :
 text ratio = 1
 

=== removed file 'clock/data/messages'
--- clock/data/messages	2010-08-07 01:43:25 +0000
+++ clock/data/messages	1970-01-01 00:00:00 +0000
@@ -1,162 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Leave empty to use the location name if available.")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Always display the icon, even when the dock is hidden?")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("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")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Module")
-
-_("Behaviour")
-
-_("Show the date:")
-
-_("No")
-
-_("On icon")
-
-_("On label")
-
-_("for digital format only.")
-
-_("Display the time in a 24h format?")
-
-_("if not, then the applet will update the time once a minute, saving CPU power.")
-
-_("Show seconds?")
-
-_("In ms. Set 0 for non-smooth animation, set 1000 to have a continuous animation. Requires OpenGL.")
-
-_("Display seconds with smooth animation for a duration of:")
-
-_("E.g. :Europe/Paris, :Japan, etc. Leave empty for local time.")
-
-_("Timezone:")
-
-_("Use the tasks from the following task-manager:")
-
-_("Default")
-
-_("iCal")
-
-_("Style")
-
-_("The analogue view is based on CairoClock; otherwise it will be displayed in digital format.")
-
-_("Select the view :")
-
-_("Analogue")
-
-_("Digital")
-
-_("Analogue View")
-
-_("List of available themes for analogue display:")
-
-_("Date text colour:")
-
-_("Digital View")
-
-_("Font:")
-
-_("Text colour:")
-
-_("Ratio to apply on text :")
-
-_("Background image:")
-
-_("Configure time and date")
-
-_("Leave empty to use the default command.")
-
-_("Specific command to run:")
-
-_("Alarm")
-
-_("The new alarm will be added to the end / the last alarm will be removed.")
-
-_("Add or remove an alarm:")
-

=== modified file 'clock/src/CMakeLists.txt'
--- clock/src/CMakeLists.txt	2010-08-07 01:43:25 +0000
+++ clock/src/CMakeLists.txt	2010-09-16 01:12:52 +0000
@@ -4,9 +4,10 @@
 SET(cd-clock_LIB_SRCS
 	applet-struct.h
 	applet-init.c 			applet-init.h
-	applet-draw.c 			applet-draw.h
 	applet-config.c 			applet-config.h
 	applet-notifications.c 		applet-notifications.h
+	applet-draw.c 			applet-draw.h
+	applet-timer.c 			applet-timer.h
 	applet-theme.c 			applet-theme.h
 	applet-calendar.c 		applet-calendar.h
 	applet-task-editor.c 		applet-task-editor.h

=== modified file 'clock/src/applet-backend-default.c'
--- clock/src/applet-backend-default.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-backend-default.c	2010-09-16 01:12:52 +0000
@@ -45,46 +45,72 @@
 	}
 	gchar *cFile = g_strdup_printf ("%s/%s", cDirPath, "tasks.conf");
 	GKeyFile *pKeyFile = cairo_dock_open_key_file (cFile);
-	g_free (cFile);
+	
 	g_free (cDirPath);
 	if (pKeyFile == NULL)  // encore aucune taches.
+	{
+		g_free (cFile);
 		return NULL;
+	}
 	
 	gsize length=0;
 	gchar **pGroupList = g_key_file_get_groups (pKeyFile, &length);
 	if (pGroupList == NULL)
 	{
 		g_key_file_free (pKeyFile);
+		g_free (cFile);
 		return NULL;
 	}
 	
 	CDClockTask *pTask;
 	gchar *cTaskID;
 	GList *pTaskList = NULL;
+	guint iMonth = myData.currentTime.tm_mon;
+	guint iYear = myData.currentTime.tm_year + 1900;
+	guint y, m, freq;
+	gboolean bUpdateFile = FALSE;
 	guint i;
 	for (i = 0; i < length; i ++)
 	{
 		cTaskID = pGroupList[i];
+		
+		// discard tasks older than 1 year (clean the file too).
+		y = g_key_file_get_integer (pKeyFile, cTaskID, "year", NULL);
+		m = g_key_file_get_integer (pKeyFile, cTaskID, "month", NULL);
+		freq = g_key_file_get_integer (pKeyFile, cTaskID, "freq", NULL);
+		if (freq == CD_TASK_DONT_REPEAT && (iYear < y -1 || iYear == y - 1 && iMonth < m))
+		{
+			g_key_file_remove_group (pKeyFile, cTaskID, NULL);
+			bUpdateFile = TRUE;
+			g_free (cTaskID);
+			continue;
+		}
+		
+		// append the task.
 		pTask = g_new0 (CDClockTask, 1);
-		//g_print ("+ task %s\n", cTaskID);
-		
 		pTask->cID = cTaskID;
 		pTask->iDay = g_key_file_get_integer (pKeyFile, cTaskID, "day", NULL);
-		pTask->iMonth = g_key_file_get_integer (pKeyFile, cTaskID, "month", NULL);
-		pTask->iYear = g_key_file_get_integer (pKeyFile, cTaskID, "year", NULL);
+		pTask->iMonth = m;
+		pTask->iYear = y;
 		pTask->cTitle = g_key_file_get_string (pKeyFile, cTaskID, "title", NULL);
 		pTask->cText = g_key_file_get_string (pKeyFile, cTaskID, "text", NULL);
 		pTask->cTags = g_key_file_get_string (pKeyFile, cTaskID, "tags", NULL);
 		pTask->iHour = g_key_file_get_integer (pKeyFile, cTaskID, "hour", NULL);
 		pTask->iMinute = g_key_file_get_integer (pKeyFile, cTaskID, "minute", NULL);
-		pTask->iFrequency = g_key_file_get_integer (pKeyFile, cTaskID, "freq", NULL);
+		pTask->iFrequency = freq;
+		pTask->bAcknowledged = g_key_file_get_boolean (pKeyFile, cTaskID, "ack", NULL);
 		
 		pTaskList = g_list_prepend (pTaskList, pTask);
 		s_iCounter = MAX (s_iCounter, atoi (cTaskID));
 	}
 	
 	g_free (pGroupList);  // les elements sont les IDs et sont integres dans les taches.
+	
+	if (bUpdateFile)
+		cairo_dock_write_keys_to_file (pKeyFile, cFile);
+	
 	g_key_file_free (pKeyFile);
+	g_free (cFile);
 	return pTaskList;
 }
 
@@ -107,6 +133,7 @@
 	g_key_file_set_integer (pKeyFile, pTask->cID, "hour", pTask->iHour);
 	g_key_file_set_integer (pKeyFile, pTask->cID, "minute", pTask->iMinute);
 	g_key_file_set_integer (pKeyFile, pTask->cID, "freq", pTask->iFrequency);
+	g_key_file_set_boolean (pKeyFile, pTask->cID, "ack", pTask->bAcknowledged);
 	
 	cairo_dock_write_keys_to_file (pKeyFile, cFile);
 	g_free (cFile);
@@ -143,6 +170,7 @@
 	g_key_file_set_integer (pKeyFile, pTask->cID, "hour", pTask->iHour);
 	g_key_file_set_integer (pKeyFile, pTask->cID, "minute", pTask->iMinute);
 	g_key_file_set_integer (pKeyFile, pTask->cID, "freq", pTask->iFrequency);
+	g_key_file_set_boolean (pKeyFile, pTask->cID, "ack", pTask->bAcknowledged);
 	
 	cairo_dock_write_keys_to_file (pKeyFile, cFile);
 	g_free (cFile);

=== modified file 'clock/src/applet-backend-ical.c'
--- clock/src/applet-backend-ical.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-backend-ical.c	2010-09-16 01:12:52 +0000
@@ -173,7 +173,7 @@
 		pTask->iYear = liCalStartDate.year;
 		pTask->iHour = liCalStartDate.hour;
 		pTask->iMinute = liCalStartDate.minute;
-
+		
 		pTask->iFrequency = CD_TASK_DONT_REPEAT;
 		// TODO: really do the frequency management. If possible.
 		icalproperty *rrule = NULL;
@@ -191,6 +191,8 @@
 		pTask->cText = g_strdup(icalcomponent_get_description(piCalComponent));
 		pTask->cTags = g_strdup(icalcomponent_get_comment(piCalComponent));
 		
+		pTask->bAcknowledged = TRUE;  /// a recuperer si possible ...
+		
 		pTaskList = g_list_prepend (pTaskList, pTask);
 	}
 	
@@ -293,7 +295,7 @@
 
 static gboolean delete_task (CDClockTask *pTask, CairoDockModuleInstance *myApplet)
 {
-	g_print ("%s (%s)\n", __func__, pTask->cTitle);
+	//g_print ("%s (%s)\n", __func__, pTask->cTitle);
 
 	if( !_assert_data() ) return FALSE;
 	if( pTask == NULL ) return FALSE;
@@ -314,7 +316,7 @@
 
 static gboolean update_task (CDClockTask *pTask, CairoDockModuleInstance *myApplet)
 {
-	g_print ("%s (%s, '%s')\n", __func__, pTask->cTitle, pTask->cText);
+	//g_print ("%s (%s, '%s')\n", __func__, pTask->cTitle, pTask->cText);
 	//if( !delete_task (pTask, myApplet) ) return FALSE;
 	if( !create_task (pTask, myApplet) ) return FALSE;
 		

=== modified file 'clock/src/applet-calendar.c'
--- clock/src/applet-calendar.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-calendar.c	2010-09-16 01:12:52 +0000
@@ -131,6 +131,7 @@
 void cd_clock_remove_task_from_list (CDClockTask *pTask, CairoDockModuleInstance *myApplet)
 {
 	myData.pTasks = g_list_remove (myData.pTasks, pTask);
+	myData.pMissedTasks = g_list_remove (myData.pMissedTasks, pTask);
 	myData.pNextTask = cd_clock_get_next_scheduled_task (myApplet);
 	myData.pNextAnniversary = cd_clock_get_next_anniversary (myApplet);
 }
@@ -154,8 +155,10 @@
 {
 	g_list_foreach (myData.pTasks, (GFunc)cd_clock_free_task, NULL);
 	g_list_free (myData.pTasks);
+	g_list_free (myData.pMissedTasks);
 	myData.pTasks = NULL;
 	myData.pNextTask = NULL;
+	myData.pMissedTasks = NULL;
 }
 
 CDClockTask *cd_clock_get_task_by_id (const gchar *cID, CairoDockModuleInstance *myApplet)
@@ -384,6 +387,94 @@
 }
 
 
+GList *cd_clock_get_missed_tasks (CairoDockModuleInstance *myApplet)
+{
+	GList *pTaskList = NULL;
+	guint iDay = myData.currentTime.tm_mday;
+	guint iMonth = myData.currentTime.tm_mon;
+	guint iYear = myData.currentTime.tm_year + 1900;
+	guint iHour = myData.currentTime.tm_hour;
+	guint iMinute = myData.currentTime.tm_min;
+	
+	GDate* pCurrentDate = g_date_new_dmy (iDay, iMonth + 1, iYear);
+	GDate* pDate = g_date_new ();
+	guint d, m, y;
+	int iDelta;
+	CDClockTask *pTask;
+	GList *t;
+	for (t = myData.pTasks; t != NULL; t = t->next)
+	{
+		pTask = t->data;
+		if (pTask->bAcknowledged)
+			continue;
+		
+		switch (pTask->iFrequency)
+		{
+			case CD_TASK_DONT_REPEAT:
+			default:
+				d = pTask->iDay;
+				m = pTask->iMonth+1;
+				y = pTask->iYear;
+				g_date_set_dmy (pDate, d, m, y);
+				iDelta = g_date_days_between (pCurrentDate, pDate);
+			break;
+			
+			case CD_TASK_EACH_MONTH:
+				d = pTask->iDay;
+				m = iMonth+1;
+				y = iYear;
+				g_date_set_dmy (pDate, d, m, y);
+				iDelta = g_date_days_between (pCurrentDate, pDate);
+				if (iDelta > 0)  // pDate est apres pCurrentDate => on teste le mois d'avant.
+				{
+					if (iMonth > 0)
+					{
+						m = iMonth;
+						g_date_set_dmy (pDate, d, m, y);
+					}
+					else
+					{
+						m = 12;
+						y = pTask->iYear - 1;
+						g_date_set_dmy (pDate, d, m, y);
+					}
+					iDelta = g_date_days_between (pCurrentDate, pDate);
+				}
+			break;
+			
+			case CD_TASK_EACH_YEAR:
+				d = pTask->iDay;
+				m = pTask->iMonth+1;
+				y = iYear;
+				g_date_set_dmy (pDate, d, m, y);
+				iDelta = g_date_days_between (pCurrentDate, pDate);
+				//g_print ("iDelta : %d/%d/%d -> %d (%s)\n", d, m, y, iDelta, pTask->cTitle);
+				if (iDelta > 0)  // pDate est apres pCurrentDate => on teste l'annee d'avant.
+				{
+					y = iYear - 1;
+					g_date_set_dmy (pDate, d, m, y);
+					iDelta = g_date_days_between (pCurrentDate, pDate);
+				}
+			break;
+		}
+		
+		if (iDelta <= 0 && iDelta > -7)
+		{
+			if (iDelta == 0)  // today's task, check time
+			{
+				if (pTask->iHour > iHour || (pTask->iHour == iHour && pTask->iMinute > iMinute))  // it's in the future, skip it.
+					continue;
+			}
+			pTaskList = g_list_prepend (pTaskList, pTask);
+		}  // on n'arrete pas le parcours si iDelta > 7 pour prendre en compte aussi les anniv.
+	}
+	g_date_free (pCurrentDate);
+	g_date_free (pDate);
+	
+	return pTaskList;
+}
+
+
   //////////////
  // CALENDAR //
 //////////////

=== modified file 'clock/src/applet-calendar.h'
--- clock/src/applet-calendar.h	2010-08-07 01:43:25 +0000
+++ clock/src/applet-calendar.h	2010-09-16 01:12:52 +0000
@@ -52,6 +52,8 @@
 
 CDClockTask *cd_clock_get_next_anniversary (CairoDockModuleInstance *myApplet);
 
+GList *cd_clock_get_missed_tasks (CairoDockModuleInstance *myApplet);
+
 
 void cd_clock_update_calendar_marks (CairoDockModuleInstance *myApplet);
 

=== modified file 'clock/src/applet-config.c'
--- clock/src/applet-config.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -24,6 +24,7 @@
 #include "applet-draw.h"
 #include "applet-theme.h"
 #include "applet-calendar.h"
+#include "applet-timer.h"
 #include "applet-config.h"
 
 #define CD_CLOCK_TIMEZONE_DIR "/usr/share/zoneinfo"
@@ -103,6 +104,8 @@
 		
 		myConfig.cNumericBackgroundImage = CD_CONFIG_GET_STRING ("Configuration", "numeric bg");
 		myConfig.fTextRatio = CD_CONFIG_GET_DOUBLE_WITH_DEFAULT ("Configuration", "text ratio", 1.);
+		
+		myConfig.iPreferedTextLayout = CD_CONFIG_GET_INTEGER ("Configuration", "text layout");
 	}
 	
 	//\_______________ On recupere les alarmes.

=== modified file 'clock/src/applet-draw.c'
--- clock/src/applet-draw.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-draw.c	2010-09-16 01:12:52 +0000
@@ -24,383 +24,18 @@
 #include <math.h>
 
 #include "applet-struct.h"
-#include "applet-config.h"
-#include "applet-digital.h" //Digital html like renderer
-#include "applet-calendar.h"
+//#include "applet-digital.h" //Digital html like renderer
 #include "applet-draw.h"
 
 #define CD_CLOCK_DATE_BUFFER_LENGTH 50
 static char s_cDateBuffer[CD_CLOCK_DATE_BUFFER_LENGTH+1];
 
-
-void cd_clock_free_alarm (CDClockAlarm *pAlarm)
-{
-	g_free (pAlarm->cMessage);
-	g_free (pAlarm);
-}
-
-static void _set_warning_repetition (int iClickedButton, GtkWidget *pInteractiveWidget, CDClockTask *pTask, CairoDialog *pDialog);
-static gboolean _task_warning (CDClockTask *pTask, const gchar *cMessage)
-{
-	cd_debug ("%s (%s)", __func__, cMessage);
-	CairoDockModuleInstance *myApplet = pTask->pApplet;
-	
-	GtkWidget *pScale = gtk_hscale_new_with_range (1, 60, 1);  // 1mn-60mn et 1 cran/mn.
-	gtk_scale_set_digits (GTK_SCALE (pScale), 0);
-	gtk_range_set_value (GTK_RANGE (pScale), pTask->iWarningDelay != 0 ? pTask->iWarningDelay : 15);  // 15mn par defaut.
-	gtk_widget_set (pScale, "width-request", CAIRO_DIALOG_MIN_SCALE_WIDTH, NULL);
-	
-	GtkWidget *pExtendedWidget = gtk_hbox_new (FALSE, 0);
-	GtkWidget *label = gtk_label_new (D_("1mn"));
-	GtkWidget *pAlign = gtk_alignment_new (1., 1., 0., 0.);
-	gtk_container_add (GTK_CONTAINER (pAlign), label);
-	gtk_box_pack_start (GTK_BOX (pExtendedWidget), pAlign, FALSE, FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (pExtendedWidget), pScale, FALSE, FALSE, 0);
-	label = gtk_label_new (D_("1h"));
-	pAlign = gtk_alignment_new (1., 1., 0., 0.);
-	gtk_container_add (GTK_CONTAINER (pAlign), label);
-	gtk_box_pack_start (GTK_BOX (pExtendedWidget), pAlign, FALSE, FALSE, 0);
-	
-	cairo_dock_dialog_unreference (pTask->pWarningDialog);
-	myDialogs.dialogTextDescription.bUseMarkup = TRUE;
-	pTask->pWarningDialog = cairo_dock_show_dialog_full (cMessage,
-		myIcon, myContainer,
-		(pTask->iWarningDelay != 0 ? MIN (pTask->iWarningDelay-.1, 15.) : 15) * 60e3,  // on laisse le dialogue visible le plus longtemps possible, jusqu'a 15mn.
-		MY_APPLET_SHARE_DATA_DIR"/icon-task.png",
-		pExtendedWidget,
-		(CairoDockActionOnAnswerFunc) _set_warning_repetition,
-		pTask,
-		NULL);
-	myDialogs.dialogTextDescription.bUseMarkup = FALSE;
-	
-	CD_APPLET_DEMANDS_ATTENTION (NULL, 3600);  // ~ 1h, pour si on loupe le dialogue.
-	return TRUE;
-}
-static gboolean _task_warning_repeat (CDClockTask *pTask, const gchar *cMessage)
-{
-	gchar *cText = g_strdup_printf ("%s %d:%02d\n<b>%s</b>\n %s\n\n%s",
-		D_("The following task was scheduled at"), pTask->iHour, pTask->iMinute,
-		pTask->cTitle?pTask->cTitle:D_("No title"),
-		pTask->cText?pTask->cText:"",
-		D_("Repeat this message every:"));
-	_task_warning (pTask, cText);
-	g_free (cText);
-	return TRUE;
-}
-static void _set_warning_repetition (int iClickedButton, GtkWidget *pInteractiveWidget, CDClockTask *pTask, CairoDialog *pDialog)
-{
-	g_print ("%s (%d)\n", __func__, iClickedButton);
-	GList *cl = gtk_container_get_children (GTK_CONTAINER (pInteractiveWidget));
-	g_return_if_fail (cl != NULL && cl->next != NULL);
-	GtkWidget *pScale = cl->next->data;
-	g_return_if_fail (pScale != NULL);
-	
-	int dt = gtk_range_get_value (GTK_RANGE (pScale));
-	if (dt == 0 || (iClickedButton != 0 && iClickedButton != -1))
-	{
-		if (pTask->iSidWarning != 0)
-		{
-			g_source_remove (pTask->iSidWarning);
-			pTask->iSidWarning = 0;
-		}
-	}
-	else
-	{
-		if (pTask->iSidWarning != 0 && dt != pTask->iWarningDelay)
-		{
-			g_source_remove (pTask->iSidWarning);
-			pTask->iSidWarning = 0;
-		}
-		if (pTask->iSidWarning == 0)
-		{
-			pTask->iSidWarning = g_timeout_add_seconds (dt*60, (GSourceFunc) _task_warning_repeat, pTask);
-			pTask->iWarningDelay = dt;
-		}
-	}
-	pTask->pWarningDialog = NULL;
-	CairoDockModuleInstance *myApplet = pTask->pApplet;
-	CD_APPLET_STOP_DEMANDING_ATTENTION;
-}
-
-static inline void _get_current_time (time_t epoch, CairoDockModuleInstance *myApplet)
-{
-	if (myConfig.cLocation != NULL)
-	{
-		g_setenv ("TZ", myConfig.cLocation, TRUE);
-		tzset ();
-	}
-	localtime_r (&epoch, &myData.currentTime);
-	if (myConfig.cLocation != NULL)
-	{
-		if (myData.cSystemLocation != NULL)
-			g_setenv ("TZ", myData.cSystemLocation, TRUE);
-		else
-			g_unsetenv ("TZ");
-	}
-}
-
-void cd_clock_init_time (CairoDockModuleInstance *myApplet)
-{
-	time_t epoch = (time_t) time (NULL);
-	_get_current_time (epoch, myApplet);
-}
-
-gboolean cd_clock_update_with_time (CairoDockModuleInstance *myApplet)
-{
-	CD_APPLET_ENTER;
-	//\________________ On recupere l'heure courante.
-	time_t epoch = (time_t) time (NULL);
-	_get_current_time (epoch, myApplet);
-	
-	//\________________ On change la date si necessaire.
-	int iWidth, iHeight;
-	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
-	gboolean bNewDate = (myData.currentTime.tm_mday != myData.iLastCheckedDay || myData.currentTime.tm_mon != myData.iLastCheckedMonth || myData.currentTime.tm_year != myData.iLastCheckedYear);
-	if (bNewDate)
-	{
-		strftime (s_cDateBuffer, CD_CLOCK_DATE_BUFFER_LENGTH, "%a %d %b", &myData.currentTime);
-		myData.iLastCheckedDay = myData.currentTime.tm_mday;
-		myData.iLastCheckedMonth = myData.currentTime.tm_mon;
-		myData.iLastCheckedYear = myData.currentTime.tm_year;
-	}
-	if (CD_APPLET_MY_CONTAINER_IS_OPENGL && myConfig.bOldStyle && myConfig.iShowDate == CAIRO_DOCK_INFO_ON_ICON)
-	{
-		if (bNewDate || myData.iDateTexture == 0)
-		{
-			strftime (s_cDateBuffer, CD_CLOCK_DATE_BUFFER_LENGTH, "%a %d %b", &myData.currentTime);
-			
-			if (myData.iDateTexture != 0)
-				_cairo_dock_delete_texture (myData.iDateTexture);
-			
-			double fScale = (double) iWidth / (double) myData.DimensionData.width;
-			CairoDockLabelDescription labelDescription;
-			labelDescription.iSize = 10;
-			labelDescription.cFont = (gchar*)"Sans";  // on peut caster car on ne liberera rien.
-			labelDescription.iWeight = cairo_dock_get_pango_weight_from_1_9 (5);
-			labelDescription.iStyle = PANGO_STYLE_NORMAL;
-			labelDescription.fColorStart[0] = myConfig.fDateColor[0];
-			labelDescription.fColorStart[1] = myConfig.fDateColor[1];
-			labelDescription.fColorStart[2] = myConfig.fDateColor[2];
-			memcpy (&labelDescription.fColorStop[0], &labelDescription.fColorStart[0], sizeof (labelDescription.fColorStop));
-			labelDescription.fBackgroundColor[3] = 0;
-			labelDescription.bOutlined = FALSE;
-			labelDescription.iMargin = 0;
-			cairo_surface_t *pDateSurface = cairo_dock_create_surface_from_text_full (s_cDateBuffer,
-				&labelDescription,
-				fScale,
-				iWidth,
-				&myData.iDateWidth, &myData.iDateHeight,
-				NULL, NULL);
-			myData.iDateWidth *= fScale;
-			myData.iDateHeight *= fScale;
-			//g_print ("date : %dx%d\n", myData.iDateWidth, myData.iDateHeight);
-			myData.iDateTexture = cairo_dock_create_texture_from_surface (pDateSurface);
-			cairo_surface_destroy (pDateSurface);
-		}
-	}
-	if (bNewDate && myConfig.iShowDate == CAIRO_DOCK_INFO_ON_LABEL)
-	{
-		CD_APPLET_SET_NAME_FOR_MY_ICON (s_cDateBuffer);
-	}
-	
-	//\________________ On dessine avec cette heure.
-	myData.iSmoothAnimationStep = 0;
-	if (myConfig.bOldStyle)
-	{
-		if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
-			cd_clock_render_analogic_to_texture (myApplet, iWidth, iHeight, &myData.currentTime, 0.);
-		else
-			cd_clock_draw_analogic (myApplet, iWidth, iHeight, &myData.currentTime);
-	}
-	else
-	{
-		cd_clock_draw_text (myApplet, iWidth, iHeight, &myData.currentTime);
-		if (CD_APPLET_MY_CONTAINER_IS_OPENGL)  // on ne sait pas bien dessiner du texte, donc on le fait en cairo, et on transfere tout sur notre texture.
-			cairo_dock_update_icon_texture (myIcon);
-	}
-	
-	if (myDock && ! CD_APPLET_MY_CONTAINER_IS_OPENGL)  // les reflets pour cairo.
-	{
-		CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
-	}
-	
-	//\________________ On redessine notre icone.
-	CD_APPLET_REDRAW_MY_ICON;
-	
-	//\________________ On teste les alarmes et les taches.
-	if (!myConfig.bShowSeconds || myData.currentTime.tm_min != myData.iLastCheckedMinute)  // un g_timeout de 1min ne s'effectue pas forcement a exectement 1 minute d'intervalle, et donc pourrait "sauter" la minute de l'alarme, d'ou le test sur bShowSeconds dans le cas ou l'applet ne verifie que chaque minute.
-	{
-		myData.iLastCheckedMinute = myData.currentTime.tm_min;
-		
-		// les alarmes.
-		CDClockAlarm *pAlarm;
-		guint i;
-		for (i = 0; i < myConfig.pAlarms->len; i ++)
-		{
-			pAlarm = g_ptr_array_index (myConfig.pAlarms, i);
-			
-			if (myData.currentTime.tm_hour == pAlarm->iHour && myData.currentTime.tm_min == pAlarm->iMinute)
-			{
-				gboolean bShowAlarm = FALSE, bRemoveAlarm = FALSE;
-				if (pAlarm->iDayOfWeek > 0)
-				{
-					if (pAlarm->iDayOfWeek == 1)
-						bShowAlarm = TRUE;
-					else if (pAlarm->iDayOfWeek - 1 == myData.currentTime.tm_wday)
-						bShowAlarm = TRUE;
-					else if (myData.currentTime.tm_wday == 0 || myData.currentTime.tm_wday == 6)  // week-end
-					{
-						if (pAlarm->iDayOfWeek == 9)
-							bShowAlarm = TRUE;
-					}
-					else if (pAlarm->iDayOfWeek == 8)
-						bShowAlarm = TRUE;
-				}
-				else if (pAlarm->iDayOfMonth > 0)
-					bShowAlarm = (pAlarm->iDayOfMonth - 1 == myData.currentTime.tm_mday);
-				else  // c'est une alarme qui ne se repete pas.
-				{
-					bShowAlarm = TRUE;
-					bRemoveAlarm = TRUE;
-				}
-				
-				if (bShowAlarm)
-				{
-					cd_message ("Dring ! %s", pAlarm->cMessage);
-					cairo_dock_show_temporary_dialog (pAlarm->cMessage, myIcon, myContainer, 60e3);
-					if (pAlarm->cCommand != NULL)
-					{
-						if (myData.iAlarmPID > 0)
-						{
-							kill (myData.iAlarmPID, 1);
-							myData.iAlarmPID = 0;
-						}
-						GError *erreur = NULL;
-						gchar **argv = g_strsplit (pAlarm->cCommand, " ", -1);
-						g_spawn_async (NULL,
-							argv,
-							NULL,
-							0,
-							NULL,
-							NULL,
-							&myData.iAlarmPID,
-							&erreur);
-						if (erreur != NULL)
-						{
-							cd_warning ("clock : when trying to execute '%s' : %s", pAlarm->cCommand, erreur->message);
-							g_error_free (erreur);
-							myData.iAlarmPID = 0;
-						}
-						g_strfreev (argv);
-						cd_message (" --> child_pid : %d", myData.iAlarmPID);
-					}
-				}
-				
-				if (bRemoveAlarm)
-				{
-					cd_message ("Cette alarme ne sera pas repetee");
-					g_ptr_array_remove_index (myConfig.pAlarms, i);
-					cd_clock_free_alarm (pAlarm);
-					/// A FAIRE : effacer l'heure dans le fichier de conf pour cette alarme.
-				}
-			}
-		}
-		
-		// les taches.
-		if (myData.pNextTask != NULL)
-		{
-			//g_print ("next task : %s\n", myData.pNextTask->cTitle);
-			struct tm st;
-			st.tm_min = myData.pNextTask->iMinute;
-			st.tm_hour = myData.pNextTask->iHour;
-			st.tm_mday = myData.pNextTask->iDay;
-			st.tm_mon = myData.pNextTask->iMonth;
-			st.tm_year = myData.pNextTask->iYear - 1900;
-			st.tm_sec = 0;
-			st.tm_isdst = myData.currentTime.tm_isdst;
-			time_t t = mktime (&st);
-			//g_print ("time : %ld, task : %ld\n", epoch, t);
-			if (t < epoch)  // la tache est depassee.
-			{
-				myData.pNextTask = cd_clock_get_next_scheduled_task (myApplet);
-			}
-			else if (t < epoch + 15*60 && t >= epoch)
-			{
-				if (! myData.pNextTask->b15mnWarning)
-				{
-					//g_print ("15 mn warning\n");
-					myData.pNextTask->b15mnWarning = TRUE;
-					myDialogs.dialogTextDescription.bUseMarkup = TRUE;
-					cairo_dock_show_temporary_dialog_with_icon_printf ("%s\n<b>%s</b>\n %s",
-						myIcon, myContainer,
-						60e3,
-						MY_APPLET_SHARE_DATA_DIR"/icon-task.png",
-						D_("This task will begin in 15 minutes:"),
-						myData.pNextTask->cTitle?myData.pNextTask->cTitle:D_("No title"),
-						myData.pNextTask->cText?myData.pNextTask->cText:"");
-					myDialogs.dialogTextDescription.bUseMarkup = FALSE;
-					CD_APPLET_DEMANDS_ATTENTION (NULL, 60);
-				}
-				else if (t < epoch + 60)
-				{
-					if (! myData.pNextTask->bFirstWarning)
-					{
-						//g_print ("first warning\n");
-						myData.pNextTask->bFirstWarning = TRUE;
-						myDialogs.dialogTextDescription.bUseMarkup = TRUE;
-						gchar *cText = g_strdup_printf ("%s\n<b>%s</b>\n %s\n\n%s",
-							D_("It's time for the following task:"),
-							myData.pNextTask->cTitle?myData.pNextTask->cTitle:D_("No title"),
-							myData.pNextTask->cText?myData.pNextTask->cText:"",
-							D_("Repeat this message every:"));
-						_task_warning (myData.pNextTask, cText);
-						g_free (cText);
-					}
-				}
-			}
-			
-			if (myData.pNextAnniversary != NULL)
-			{
-				if (!myData.pNextAnniversary->b1DayWarning && ! myData.pNextAnniversary->bFirstWarning && ! myData.pNextTask->b15mnWarning)
-				{
-					GDate* pCurrentDate = g_date_new_dmy (myData.currentTime.tm_mday, myData.currentTime.tm_mon + 1, myData.currentTime.tm_year+1900);
-					GDate* pAnnivDate = g_date_new_dmy (myData.pNextAnniversary->iDay, myData.pNextAnniversary->iMonth + 1, myData.currentTime.tm_year+1900);
-					gint iDaysToNextAnniversary = g_date_days_between (pCurrentDate, pAnnivDate);
-					if (iDaysToNextAnniversary >= 0 && iDaysToNextAnniversary <= 1)
-					{
-						myData.pNextAnniversary->b1DayWarning = TRUE;
-						gchar *cText = g_strdup_printf ("%s\n<b>%s</b>\n %s\n\n%s",
-							iDaysToNextAnniversary == 0 ? D_("Today is the following anniversary:") : D_("Tomorrow is the following anniversary:"),
-							myData.pNextTask->cTitle?myData.pNextTask->cTitle:D_("No title"),
-							myData.pNextTask->cText?myData.pNextTask->cText:"",
-							D_("Repeat this message every:"));
-						_task_warning (myData.pNextTask, cText);
-						g_free (cText);
-						myData.pNextAnniversary = cd_clock_get_next_anniversary (myApplet);
-					}
-					g_date_free (pCurrentDate);
-					g_date_free (pAnnivDate);
-				}
-			}
-		}
-	}
-	
-	CD_APPLET_LEAVE(TRUE);
-	//return TRUE;
-}
-
-/*void cd_clock_draw_text (CairoDockModuleInstance *myApplet, int width, int height, double fMaxScale, struct tm *pTime) {
-	cd_clock_draw_frames (myApplet);
-	cd_clock_put_text_on_frames (myApplet, width, height, fMaxScale, pTime);
-}*/
-
-#define GAPX 12
-#define GAPY 2
+#define GAPX .12
+#define GAPY .02
 #define MAX_RATIO 2.
+
 void cd_clock_draw_text (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime)
 {
-	GString *sFormat = g_string_new ("");
-	
 	cairo_dock_erase_cairo_context (myDrawContext);
 	if (myData.pNumericBgSurface != NULL)
 	{
@@ -418,22 +53,23 @@
 	PangoLayout *pLayout = pango_cairo_create_layout (myDrawContext);
 	pango_layout_set_font_description (pLayout, pDesc);
 	
+	const gchar *cFormat;
 	if (myConfig.b24Mode)
 	{
 		if (myConfig.bShowSeconds)
-			g_string_assign (sFormat, "%T");
+			cFormat = "%T";
 		else
-			g_string_assign (sFormat, "%R");
+			cFormat = "%R";
 	}
 	else
 	{
 		if (myConfig.bShowSeconds)
-			g_string_assign (sFormat, "%r");  // equivalent a %I:%M:%S %p
+			cFormat = "%r";  // equivalent a %I:%M:%S %p
 		else
-			g_string_printf (sFormat, "%%I:%%M %%p");
+			cFormat = "%I:%M %p";
 	}
 	
-	strftime (s_cDateBuffer, CD_CLOCK_DATE_BUFFER_LENGTH, sFormat->str, pTime);
+	strftime (s_cDateBuffer, CD_CLOCK_DATE_BUFFER_LENGTH, cFormat, pTime);
 	pango_layout_set_text (pLayout, s_cDateBuffer, -1);
 	PangoRectangle ink, log;
 	pango_layout_get_pixel_extents (pLayout, &ink, &log);
@@ -451,9 +87,9 @@
 		
 		double h=0, w=0, fZoomX=0, fZoomY=0;
 		double h_=0, w_=0, fZoomX_=0, fZoomY_=0;
-		if (myData.iTextOrientation == 1 || myData.iTextOrientation == 0)
+		if (myData.iTextLayout == CD_TEXT_LAYOUT_2_LINES || myData.iTextLayout == CD_TEXT_LAYOUT_AUTO)
 		{
-			h = ink.height + ink2.height + GAPY;
+			h = ink.height + ink2.height + GAPY * iHeight;
 			w = MAX (ink.width, ink2.width);
 			fZoomX = (double) iWidth / w;
 			fZoomY = (double) iHeight / h;
@@ -466,10 +102,10 @@
 				fZoomX = myConfig.fTextRatio * iWidth / w;
 			}
 		}
-		if (myData.iTextOrientation == 2 || myData.iTextOrientation == 0)
+		if (myData.iTextLayout == CD_TEXT_LAYOUT_1_LINE || myData.iTextLayout == CD_TEXT_LAYOUT_AUTO)
 		{
 			h_ = MAX (ink.height, ink2.height);
-			w_ = ink.width + ink2.width + GAPX;
+			w_ = ink.width + ink2.width + GAPX * iWidth;
 			fZoomX_ = (double) iWidth / w_;
 			fZoomY_ = (double) iHeight / h_;
 			if (myDock && fZoomY_ > MAX_RATIO * fZoomX_)  // on ne garde pas le ratio car ca ferait un texte trop petit en hauteur, toutefois on limite un peu la deformation en hauteur.
@@ -487,17 +123,17 @@
 			}
 		}
 		
-		if (myData.iTextOrientation == 0)  // si l'orientation n'est pas encore definie, on la definit de facon a ne pas changer (si on est tres proche de la limite, la taille du texte pourrait changer suffisamment pour nous faire passer d'une orientation a l'autre.
+		if (myData.iTextLayout == CD_TEXT_LAYOUT_AUTO)  // si l'orientation n'est pas encore definie, on la definit de facon a ne pas changer (si on est tres proche de la limite, la taille du texte pourrait changer suffisamment pour nous faire passer d'une orientation a l'autre.
 		{
 			double def = (fZoomX > fZoomY ? fZoomX / fZoomY : fZoomY / fZoomX);  // deformation.
 			double def_ = (fZoomX_ > fZoomY_ ? fZoomX_ / fZoomY_ : fZoomY_ / fZoomX_);
-			if (def > def_)  // deformation plus grande en mode vertical => on passe en mode horizontal.
-				myData.iTextOrientation = 2;
+			if (def > def_)  // deformation plus grande en mode 2 lignes => on passe en mode 1 ligne.
+				myData.iTextLayout = CD_TEXT_LAYOUT_2_LINES;
 			else
-				myData.iTextOrientation = 1;
+				myData.iTextLayout = CD_TEXT_LAYOUT_1_LINE;
 		}
 		
-		if (myData.iTextOrientation == 2)  // mode horizontal
+		if (myData.iTextLayout == CD_TEXT_LAYOUT_1_LINE)  // mode 1 ligne
 		{
 			cairo_translate (myDrawContext, (iWidth - fZoomX_ * w_) / 2, (iHeight - fZoomY_ * h_)/2);  // centre verticalement.
 			cairo_scale (myDrawContext, fZoomX_, fZoomY_);
@@ -512,7 +148,7 @@
 			cairo_translate (myDrawContext, -ink.x, -ink.y);
 			pango_cairo_show_layout (myDrawContext, pLayout);
 		}
-		else  // mode vertical
+		else  // mode 2 lignes
 		{
 			cairo_translate (myDrawContext, (iWidth - fZoomX * ink.width) / 2, (iHeight - fZoomY * h)/2);  // centre verticalement.
 			cairo_scale (myDrawContext, fZoomX, fZoomY);
@@ -647,15 +283,15 @@
 }
 
 
-
-void cd_clock_draw_analogic_opengl (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime, double fFraction)
+void cd_clock_render_analogic_to_texture (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime, double fFraction)
 {
+	CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN ();
+	
 	int iSeconds = pTime->tm_sec;
 	int iMinutes = pTime->tm_min;
 	int iHours = pTime->tm_hour;
 	
 	_cairo_dock_enable_texture ();
-	
 	//_cairo_dock_set_blend_over ();  // bof
 	_cairo_dock_set_blend_alpha ();  // pas mal
 	//_cairo_dock_set_blend_pbuffer ();
@@ -673,7 +309,7 @@
 		glPopMatrix ();
 	}
 	
-	// heure
+	// hour
 	glPushMatrix ();
 	glRotatef (-(iHours % 12 + iMinutes/60.) * 30. + 90., 0., 0., 1.);
 	glTranslatef (myData.iNeedleWidth/2 - myData.fNeedleScale * myData.iNeedleOffsetX, 0., 0.);
@@ -687,7 +323,7 @@
 	cairo_dock_apply_texture_at_size (myData.iMinuteNeedleTexture, myData.iNeedleWidth, myData.iNeedleHeight+1);
 	glPopMatrix ();
 	
-	// seconde
+	// second
 	if (myConfig.bShowSeconds)
 	{
 		glPushMatrix ();
@@ -701,13 +337,6 @@
 	cairo_dock_apply_texture_at_size (myData.iFgTexture, iWidth, iHeight);
 	
 	_cairo_dock_disable_texture ();
-}
-
-void cd_clock_render_analogic_to_texture (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime, double fFraction)
-{
-	CD_APPLET_START_DRAWING_MY_ICON_OR_RETURN ();
-	
-	cd_clock_draw_analogic_opengl (myApplet, iWidth, iHeight, pTime, fFraction);
 	
 	CD_APPLET_FINISH_DRAWING_MY_ICON;
 }

=== modified file 'clock/src/applet-draw.h'
--- clock/src/applet-draw.h	2010-08-07 01:43:25 +0000
+++ clock/src/applet-draw.h	2010-09-16 01:12:52 +0000
@@ -17,31 +17,19 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __CD_CLOCK_DRAW__
 #define  __CD_CLOCK_DRAW__
 
-
 #include <cairo-dock.h>
 #include "applet-struct.h"
 
 
-void cd_clock_free_alarm (CDClockAlarm *pAlarm);
-
-
-void cd_clock_init_time (CairoDockModuleInstance *myApplet);
-
-gboolean cd_clock_update_with_time (CairoDockModuleInstance *myApplet);
-
-
 void cd_clock_draw_text (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime);
 
 
 void cd_clock_draw_analogic (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime);
 
 
-void cd_clock_draw_analogic_opengl (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime, double fFraction);
-
 void cd_clock_render_analogic_to_texture (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime, double fFraction);
 
 

=== modified file 'clock/src/applet-init.c'
--- clock/src/applet-init.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -22,7 +22,7 @@
 
 #include "applet-struct.h"
 #include "applet-draw.h"
-#include "applet-digital.h" //Digital html like renderer
+#include "applet-timer.h"
 #include "applet-config.h"
 #include "applet-theme.h"
 #include "applet-calendar.h"
@@ -65,13 +65,12 @@
 	if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
 		cd_clock_load_textures (myApplet);
 	
-	///cd_clock_configure_digital (myApplet);  // mis en commentaire jusqu'a ce que ca soit fini.
-	
 	myData.cSystemLocation = g_strdup (g_getenv ("TZ"));
 	myData.iLastCheckedMinute = -1;
 	myData.iLastCheckedDay = -1;
 	myData.iLastCheckedMonth = -1;
 	myData.iLastCheckedYear = -1;
+	myData.iTextLayout = myConfig.iPreferedTextLayout;
 	
 	//\_______________ On enregistre nos notifications.
 	CD_APPLET_REGISTER_FOR_CLICK_EVENT;
@@ -116,10 +115,7 @@
 
 
 CD_APPLET_RELOAD_BEGIN
-	//\_______________ On recharge les donnees qui ont pu changer.
-		///cd_clock_configure_digital (myApplet);  // mis en commentaire jusqu'a ce que ca soit fini.
-	
-	myData.iTextOrientation = 0;  // on recalcule l'orientation.
+	myData.iTextLayout = myConfig.iPreferedTextLayout;  // on recalcule l'orientation si elle est automatique.
 	if (CD_APPLET_MY_CONFIG_CHANGED)
 	{
 		//\_______________ set a desklet view.

=== modified file 'clock/src/applet-notifications.c'
--- clock/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ clock/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -87,10 +87,15 @@
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
 	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
-		CD_APPLET_ADD_IN_MENU (D_("Set up time and date"), _cd_clock_launch_time_admin, pSubMenu);
-		CD_APPLET_ADD_IN_MENU (D_("Show today's tasks"), _cd_clock_show_tasks_today, pSubMenu);
-		CD_APPLET_ADD_IN_MENU (D_("Show this week's tasks"), _cd_clock_show_tasks_week, pSubMenu);
-		CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
+	
+	// Main Menu
+	CD_APPLET_ADD_IN_MENU (D_("Show today's tasks"), _cd_clock_show_tasks_today, CD_APPLET_MY_MENU);
+	CD_APPLET_ADD_IN_MENU (D_("Show this week's tasks"), _cd_clock_show_tasks_week, CD_APPLET_MY_MENU);
+	
+	// Sub-Menu
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Set up time and date"), GTK_STOCK_PREFERENCES, _cd_clock_launch_time_admin, pSubMenu);
+	CD_APPLET_ADD_SEPARATOR_IN_MENU (pSubMenu);
+	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 
 

=== modified file 'clock/src/applet-struct.h'
--- clock/src/applet-struct.h	2010-08-07 01:43:25 +0000
+++ clock/src/applet-struct.h	2010-09-16 01:12:52 +0000
@@ -120,6 +120,7 @@
 	gint iWarningDelay;  // en minutes.
 	guint iSidWarning;
 	CairoDialog *pWarningDialog;
+	gboolean bAcknowledged;
 	} CDClockTask;
 
 typedef struct {
@@ -132,11 +133,19 @@
 	gpointer pData;
 	} CDClockTaskBackend;
 
+typedef enum _CDClockTextLayout
+{
+	CD_TEXT_LAYOUT_AUTO = 0,
+	CD_TEXT_LAYOUT_1_LINE,
+	CD_TEXT_LAYOUT_2_LINES
+} CDClockTextLayout;
+
 struct _AppletConfig {
 	CairoDockInfoDisplay iShowDate;
 	gboolean bShowSeconds;
 	gboolean bOldStyle;
 	gboolean b24Mode;
+	CDClockTextLayout iPreferedTextLayout;
 	double fTextColor[4];
 	double fDateColor[4];
 	gchar *cThemePath;
@@ -173,7 +182,7 @@
 	
 	cairo_surface_t *pNumericBgSurface;
 	ClockDigital pDigitalClock;
-	guint iTextOrientation;
+	guint iTextLayout;
 	
 	GLuint iBgTexture, iFgTexture, iHourNeedleTexture, iMinuteNeedleTexture, iSecondNeedleTexture, iDateTexture;
 	gint iNeedleWidth, iNeedleHeight;
@@ -189,6 +198,8 @@
 	guint iButtonPressTime;
 	CDClockTask *pNextTask;
 	CDClockTask *pNextAnniversary;
+	gboolean bTaskCheckedOnce;
+	GList *pMissedTasks;
 	} ;
 
 #endif

=== added file 'clock/src/applet-timer.c'
--- clock/src/applet-timer.c	1970-01-01 00:00:00 +0000
+++ clock/src/applet-timer.c	2010-09-16 01:12:52 +0000
@@ -0,0 +1,506 @@
+/**
+* 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>
+#define __USE_POSIX
+#include <time.h>
+#include <signal.h>
+#include <math.h>
+
+#include "applet-struct.h"
+#include "applet-config.h"
+#include "applet-digital.h" //Digital html like renderer
+#include "applet-calendar.h"
+#include "applet-draw.h"
+#include "applet-timer.h"
+
+#define CD_CLOCK_DATE_BUFFER_LENGTH 50
+static char s_cDateBuffer[CD_CLOCK_DATE_BUFFER_LENGTH+1];
+
+
+void cd_clock_free_alarm (CDClockAlarm *pAlarm)
+{
+	g_free (pAlarm->cMessage);
+	g_free (pAlarm);
+}
+
+static void _set_warning_repetition (int iClickedButton, GtkWidget *pInteractiveWidget, CDClockTask *pTask, CairoDialog *pDialog);
+static gboolean _task_warning (CDClockTask *pTask, const gchar *cMessage)
+{
+	cd_debug ("%s (%s)", __func__, cMessage);
+	CairoDockModuleInstance *myApplet = pTask->pApplet;
+	
+	GtkWidget *pScale = gtk_hscale_new_with_range (1, 60, 1);  // 1mn-60mn et 1 cran/mn.
+	gtk_scale_set_digits (GTK_SCALE (pScale), 0);
+	gtk_range_set_value (GTK_RANGE (pScale), pTask->iWarningDelay != 0 ? pTask->iWarningDelay : 15);  // 15mn par defaut.
+	gtk_widget_set (pScale, "width-request", CAIRO_DIALOG_MIN_SCALE_WIDTH, NULL);
+	
+	GtkWidget *pExtendedWidget = gtk_hbox_new (FALSE, 0);
+	GtkWidget *label = gtk_label_new (D_("1mn"));
+	GtkWidget *pAlign = gtk_alignment_new (1., 1., 0., 0.);
+	gtk_container_add (GTK_CONTAINER (pAlign), label);
+	gtk_box_pack_start (GTK_BOX (pExtendedWidget), pAlign, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (pExtendedWidget), pScale, FALSE, FALSE, 0);
+	label = gtk_label_new (D_("1h"));
+	pAlign = gtk_alignment_new (1., 1., 0., 0.);
+	gtk_container_add (GTK_CONTAINER (pAlign), label);
+	gtk_box_pack_start (GTK_BOX (pExtendedWidget), pAlign, FALSE, FALSE, 0);
+	
+	cairo_dock_dialog_unreference (pTask->pWarningDialog);
+	myDialogs.dialogTextDescription.bUseMarkup = TRUE;
+	pTask->pWarningDialog = cairo_dock_show_dialog_full (cMessage,
+		myIcon, myContainer,
+		(pTask->iWarningDelay != 0 ? MIN (pTask->iWarningDelay-.1, 15.) : 15) * 60e3,  // on laisse le dialogue visible le plus longtemps possible, jusqu'a 15mn.
+		MY_APPLET_SHARE_DATA_DIR"/icon-task.png",
+		pExtendedWidget,
+		(CairoDockActionOnAnswerFunc) _set_warning_repetition,
+		pTask,
+		NULL);
+	myDialogs.dialogTextDescription.bUseMarkup = FALSE;
+	
+	CD_APPLET_DEMANDS_ATTENTION (NULL, 3600);  // ~ 1h, pour si on loupe le dialogue.
+	return TRUE;
+}
+static gboolean _task_warning_repeat (CDClockTask *pTask, const gchar *cMessage)
+{
+	gchar *cText = g_strdup_printf ("%s %d:%02d\n<b>%s</b>\n %s\n\n%s",
+		D_("The following task was scheduled at"), pTask->iHour, pTask->iMinute,
+		pTask->cTitle?pTask->cTitle:D_("No title"),
+		pTask->cText?pTask->cText:"",
+		D_("Repeat this message every:"));
+	_task_warning (pTask, cText);
+	g_free (cText);
+	return TRUE;
+}
+static void _set_warning_repetition (int iClickedButton, GtkWidget *pInteractiveWidget, CDClockTask *pTask, CairoDialog *pDialog)
+{
+	cd_debug ("%s (%d)", __func__, iClickedButton);
+	GList *cl = gtk_container_get_children (GTK_CONTAINER (pInteractiveWidget));
+	g_return_if_fail (cl != NULL && cl->next != NULL);
+	GtkWidget *pScale = cl->next->data;
+	g_return_if_fail (pScale != NULL);
+	
+	int dt = gtk_range_get_value (GTK_RANGE (pScale));
+	if (dt == 0 || (iClickedButton != 0 && iClickedButton != -1))
+	{
+		if (pTask->iSidWarning != 0)
+		{
+			g_source_remove (pTask->iSidWarning);
+			pTask->iSidWarning = 0;
+		}
+	}
+	else
+	{
+		if (pTask->iSidWarning != 0 && dt != pTask->iWarningDelay)
+		{
+			g_source_remove (pTask->iSidWarning);
+			pTask->iSidWarning = 0;
+		}
+		if (pTask->iSidWarning == 0)
+		{
+			pTask->iSidWarning = g_timeout_add_seconds (dt*60, (GSourceFunc) _task_warning_repeat, pTask);
+			pTask->iWarningDelay = dt;
+		}
+	}
+	pTask->pWarningDialog = NULL;
+	CairoDockModuleInstance *myApplet = pTask->pApplet;
+	CD_APPLET_STOP_DEMANDING_ATTENTION;
+}
+
+static inline void _get_current_time (time_t epoch, CairoDockModuleInstance *myApplet)
+{
+	if (myConfig.cLocation != NULL)
+	{
+		g_setenv ("TZ", myConfig.cLocation, TRUE);
+		tzset ();
+	}
+	localtime_r (&epoch, &myData.currentTime);
+	if (myConfig.cLocation != NULL)
+	{
+		if (myData.cSystemLocation != NULL)
+			g_setenv ("TZ", myData.cSystemLocation, TRUE);
+		else
+			g_unsetenv ("TZ");
+	}
+}
+
+void cd_clock_init_time (CairoDockModuleInstance *myApplet)
+{
+	time_t epoch = (time_t) time (NULL);
+	_get_current_time (epoch, myApplet);
+}
+
+static gchar *_make_missed_task_message (CDClockTask *pTask, CairoDockModuleInstance *myApplet)
+{
+	//g_print ("%s (%s)\n", __func__, pTask->cID);
+	struct tm st;
+	memset (&st, 0, sizeof (st));
+	st.tm_min = pTask->iMinute;
+	st.tm_hour = pTask->iHour;
+	st.tm_mday = pTask->iDay;
+	st.tm_mon = pTask->iMonth;
+	st.tm_year = pTask->iYear - 1900;
+	st.tm_sec = 0;
+	st.tm_isdst = myData.currentTime.tm_isdst;
+	char cDateBuffer[200+1];
+	memset (cDateBuffer, 0, 200);
+	const gchar *cFormat;
+	if (myConfig.b24Mode)
+		cFormat = "%a %d %b, %R";
+	else
+		cFormat = "%a %d %b, %I:%M %p";
+	strftime (cDateBuffer, 200, cFormat, &st);
+	return g_strdup_printf ("%s\n\n %s\n %s\n\n %s",
+		D_("The following task has felt due:"),
+		cDateBuffer,
+		pTask->cTitle?pTask->cTitle:D_("No title"),
+		pTask->cText?pTask->cText:"");
+}
+static void _on_next_missed_task (int iClickedButton, GtkWidget *pInteractiveWidget, CairoDockModuleInstance *myApplet, CairoDialog *pDialog)
+{
+	g_return_if_fail (myData.pMissedTasks != NULL);
+	//g_print ("%s ()\n", __func__);
+	
+	// acknowledge this task
+	CDClockTask *pTask = myData.pMissedTasks->data;
+	pTask->bAcknowledged = TRUE;
+	myData.pBackend->update_task (pTask, myApplet);
+	
+	// jump to next task.
+	if (iClickedButton == -1 || iClickedButton == 1)  // 'enter' or 2nd button
+	{
+		myData.pMissedTasks = g_list_delete_link (myData.pMissedTasks, myData.pMissedTasks);
+		if (myData.pMissedTasks != NULL)
+		{
+			// display next task.
+			pTask = myData.pMissedTasks->data;
+			//g_print ("display task '%s'\n", pTask->cID);
+			gchar *cMessage = _make_missed_task_message (pTask, myApplet);
+			cairo_dock_set_dialog_message (pDialog, cMessage);
+			g_free (cMessage);
+			
+			// remove 'next' button if no more task will follow.
+			if (myData.pMissedTasks->next == NULL && pDialog->pButtons != NULL && pDialog->iNbButtons > 1)
+			{
+				// remove 'next' button
+				cairo_surface_t *pSurface;
+				GLuint iTexture;
+				int i = 1;
+				pSurface = pDialog->pButtons[i].pSurface;
+				if (pSurface != NULL)
+				{
+					cairo_surface_destroy (pSurface);
+					pDialog->pButtons[i].pSurface = NULL;
+				}
+				iTexture = pDialog->pButtons[i].iTexture;
+				if (iTexture != 0)
+				{
+					_cairo_dock_delete_texture (iTexture);
+					pDialog->pButtons[i].iTexture = 0;
+				}
+				pDialog->iNbButtons = 1;  // only the 'ok' button will stay.
+				
+				// transform 'cancel' into 'ok'
+				i = 0;
+				pDialog->pButtons[i].iDefaultType = 1;
+			}
+			cairo_dock_dialog_reference (pDialog);  // keep the dialog alive.
+		}
+	}
+	else  // dismiss next missed tasks and let the dialog close itself.
+	{
+		g_list_free (myData.pMissedTasks);
+		myData.pMissedTasks = NULL;
+	}
+}
+
+gboolean cd_clock_update_with_time (CairoDockModuleInstance *myApplet)
+{
+	CD_APPLET_ENTER;
+	//\________________ On recupere l'heure courante.
+	time_t epoch = (time_t) time (NULL);
+	_get_current_time (epoch, myApplet);
+	
+	//\________________ On change la date si necessaire.
+	int iWidth, iHeight;
+	CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight);
+	gboolean bNewDate = (myData.currentTime.tm_mday != myData.iLastCheckedDay || myData.currentTime.tm_mon != myData.iLastCheckedMonth || myData.currentTime.tm_year != myData.iLastCheckedYear);
+	if (bNewDate)
+	{
+		strftime (s_cDateBuffer, CD_CLOCK_DATE_BUFFER_LENGTH, "%a %d %b", &myData.currentTime);
+		myData.iLastCheckedDay = myData.currentTime.tm_mday;
+		myData.iLastCheckedMonth = myData.currentTime.tm_mon;
+		myData.iLastCheckedYear = myData.currentTime.tm_year;
+	}
+	if (CD_APPLET_MY_CONTAINER_IS_OPENGL && myConfig.bOldStyle && myConfig.iShowDate == CAIRO_DOCK_INFO_ON_ICON)
+	{
+		if (bNewDate || myData.iDateTexture == 0)
+		{
+			if (myData.iDateTexture != 0)
+				_cairo_dock_delete_texture (myData.iDateTexture);
+			
+			double fScale = (double) iWidth / (double) myData.DimensionData.width;
+			CairoDockLabelDescription labelDescription;
+			labelDescription.iSize = 10;
+			labelDescription.cFont = (gchar*)"Sans";  // on peut caster car on ne liberera rien.
+			labelDescription.iWeight = cairo_dock_get_pango_weight_from_1_9 (5);
+			labelDescription.iStyle = PANGO_STYLE_NORMAL;
+			labelDescription.fColorStart[0] = myConfig.fDateColor[0];
+			labelDescription.fColorStart[1] = myConfig.fDateColor[1];
+			labelDescription.fColorStart[2] = myConfig.fDateColor[2];
+			memcpy (&labelDescription.fColorStop[0], &labelDescription.fColorStart[0], sizeof (labelDescription.fColorStop));
+			labelDescription.fBackgroundColor[3] = 0;
+			labelDescription.bOutlined = FALSE;
+			labelDescription.iMargin = 0;
+			cairo_surface_t *pDateSurface = cairo_dock_create_surface_from_text_full (s_cDateBuffer,
+				&labelDescription,
+				fScale,
+				iWidth,
+				&myData.iDateWidth, &myData.iDateHeight,
+				NULL, NULL);
+			myData.iDateWidth *= fScale;
+			myData.iDateHeight *= fScale;
+			//g_print ("date : %dx%d\n", myData.iDateWidth, myData.iDateHeight);
+			myData.iDateTexture = cairo_dock_create_texture_from_surface (pDateSurface);
+			cairo_surface_destroy (pDateSurface);
+		}
+	}
+	if (bNewDate && myConfig.iShowDate == CAIRO_DOCK_INFO_ON_LABEL)
+	{
+		CD_APPLET_SET_NAME_FOR_MY_ICON (s_cDateBuffer);
+	}
+	
+	//\________________ On dessine avec cette heure.
+	myData.iSmoothAnimationStep = 0;
+	if (myConfig.bOldStyle)
+	{
+		if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
+			cd_clock_render_analogic_to_texture (myApplet, iWidth, iHeight, &myData.currentTime, 0.);
+		else
+			cd_clock_draw_analogic (myApplet, iWidth, iHeight, &myData.currentTime);
+	}
+	else
+	{
+		cd_clock_draw_text (myApplet, iWidth, iHeight, &myData.currentTime);
+		if (CD_APPLET_MY_CONTAINER_IS_OPENGL)  // on ne sait pas bien dessiner du texte, donc on le fait en cairo, et on transfere tout sur notre texture.
+			cairo_dock_update_icon_texture (myIcon);
+	}
+	
+	if (myDock && ! CD_APPLET_MY_CONTAINER_IS_OPENGL)  // les reflets pour cairo.
+	{
+		CD_APPLET_UPDATE_REFLECT_ON_MY_ICON;
+	}
+	
+	CD_APPLET_REDRAW_MY_ICON;
+	
+	//\________________ On teste les alarmes et les taches.
+	if (!myConfig.bShowSeconds || myData.currentTime.tm_min != myData.iLastCheckedMinute)  // un g_timeout de 1min ne s'effectue pas forcement a exectement 1 minute d'intervalle, et donc pourrait "sauter" la minute de l'alarme, d'ou le test sur bShowSeconds dans le cas ou l'applet ne verifie que chaque minute.
+	{
+		myData.iLastCheckedMinute = myData.currentTime.tm_min;
+		
+		// les alarmes.
+		CDClockAlarm *pAlarm;
+		guint i;
+		for (i = 0; i < myConfig.pAlarms->len; i ++)
+		{
+			pAlarm = g_ptr_array_index (myConfig.pAlarms, i);
+			
+			if (myData.currentTime.tm_hour == pAlarm->iHour && myData.currentTime.tm_min == pAlarm->iMinute)
+			{
+				gboolean bShowAlarm = FALSE, bRemoveAlarm = FALSE;
+				if (pAlarm->iDayOfWeek > 0)
+				{
+					if (pAlarm->iDayOfWeek == 1)
+						bShowAlarm = TRUE;
+					else if (pAlarm->iDayOfWeek - 1 == myData.currentTime.tm_wday)
+						bShowAlarm = TRUE;
+					else if (myData.currentTime.tm_wday == 0 || myData.currentTime.tm_wday == 6)  // week-end
+					{
+						if (pAlarm->iDayOfWeek == 9)
+							bShowAlarm = TRUE;
+					}
+					else if (pAlarm->iDayOfWeek == 8)
+						bShowAlarm = TRUE;
+				}
+				else if (pAlarm->iDayOfMonth > 0)
+					bShowAlarm = (pAlarm->iDayOfMonth - 1 == myData.currentTime.tm_mday);
+				else  // c'est une alarme qui ne se repete pas.
+				{
+					bShowAlarm = TRUE;
+					bRemoveAlarm = TRUE;
+				}
+				
+				if (bShowAlarm)
+				{
+					cd_message ("Dring ! %s", pAlarm->cMessage);
+					cairo_dock_show_temporary_dialog (pAlarm->cMessage, myIcon, myContainer, 60e3);
+					if (pAlarm->cCommand != NULL)
+					{
+						if (myData.iAlarmPID > 0)
+						{
+							kill (myData.iAlarmPID, 1);
+							myData.iAlarmPID = 0;
+						}
+						GError *erreur = NULL;
+						gchar **argv = g_strsplit (pAlarm->cCommand, " ", -1);
+						g_spawn_async (NULL,
+							argv,
+							NULL,
+							0,
+							NULL,
+							NULL,
+							&myData.iAlarmPID,
+							&erreur);
+						if (erreur != NULL)
+						{
+							cd_warning ("clock : when trying to execute '%s' : %s", pAlarm->cCommand, erreur->message);
+							g_error_free (erreur);
+							myData.iAlarmPID = 0;
+						}
+						g_strfreev (argv);
+						cd_message (" --> child_pid : %d", myData.iAlarmPID);
+					}
+				}
+				
+				if (bRemoveAlarm)
+				{
+					cd_message ("Cette alarme ne sera pas repetee");
+					g_ptr_array_remove_index (myConfig.pAlarms, i);
+					cd_clock_free_alarm (pAlarm);
+					/// A FAIRE : effacer l'heure dans le fichier de conf pour cette alarme.
+				}
+			}
+		}
+		
+		// display missed tasks.
+		if (!myData.bTaskCheckedOnce)
+		{
+			myData.bTaskCheckedOnce = TRUE;
+			myData.pMissedTasks = cd_clock_get_missed_tasks (myApplet);
+		}
+		if (myData.pMissedTasks != NULL)  // so if the dialog was closed before we could acknowledge all the tasks, it will re-open.
+		{
+			CDClockTask *pTask = myData.pMissedTasks->data;
+			gchar *cMessage = _make_missed_task_message (pTask, myApplet);
+			CairoDialogAttribute attr;
+			memset (&attr, 0, sizeof (CairoDialogAttribute));
+			attr.cText = cMessage;
+			attr.cImageFilePath = (gchar *)MY_APPLET_SHARE_DATA_DIR"/icon-task.png";
+			const gchar *cButtonsImage[3] = {"ok", NULL, NULL};
+			if (myData.pMissedTasks->next != NULL)
+			{
+				cButtonsImage[0] = "cancel";
+				cButtonsImage[1] = "next.png";
+			}
+			attr.cButtonsImage = cButtonsImage;
+			attr.pActionFunc = (CairoDockActionOnAnswerFunc)_on_next_missed_task;
+			attr.pUserData = myApplet;
+			attr.pFreeDataFunc = NULL;
+			attr.iTimeLength = 0;
+			CairoDialog *pDialog = cairo_dock_build_dialog (&attr, myIcon, myContainer);
+			g_free (cMessage);
+		}
+		
+		// display next task.
+		if (myData.pNextTask != NULL)
+		{
+			//g_print ("next task : %s\n", myData.pNextTask->cTitle);
+			struct tm st;
+			st.tm_min = myData.pNextTask->iMinute;
+			st.tm_hour = myData.pNextTask->iHour;
+			st.tm_mday = myData.pNextTask->iDay;
+			st.tm_mon = myData.pNextTask->iMonth;
+			st.tm_year = myData.pNextTask->iYear - 1900;
+			st.tm_sec = 0;
+			st.tm_isdst = myData.currentTime.tm_isdst;
+			time_t t = mktime (&st);
+			//g_print ("time : %ld, task : %ld\n", epoch, t);
+			if (t < epoch)  // la tache est depassee.
+			{
+				// acknowledge this task
+				myData.pNextTask->bAcknowledged = TRUE;
+				myData.pBackend->update_task (myData.pNextTask, myApplet);
+				
+				// look for next task.
+				myData.pNextTask = cd_clock_get_next_scheduled_task (myApplet);
+			}
+			else if (t < epoch + 15*60 && t >= epoch)
+			{
+				if (t < epoch + 60)
+				{
+					if (! myData.pNextTask->bFirstWarning)
+					{
+						//g_print ("first warning\n");
+						myData.pNextTask->bFirstWarning = TRUE;
+						myDialogs.dialogTextDescription.bUseMarkup = TRUE;
+						gchar *cText = g_strdup_printf ("%s\n<b>%s</b>\n %s\n\n%s",
+							D_("It's time for the following task:"),
+							myData.pNextTask->cTitle?myData.pNextTask->cTitle:D_("No title"),
+							myData.pNextTask->cText?myData.pNextTask->cText:"",
+							D_("Repeat this message every:"));
+						_task_warning (myData.pNextTask, cText);
+						g_free (cText);
+					}
+				}
+				else if (! myData.pNextTask->b15mnWarning)
+				{
+					//g_print ("15 mn warning\n");
+					myData.pNextTask->b15mnWarning = TRUE;
+					myDialogs.dialogTextDescription.bUseMarkup = TRUE;
+					cairo_dock_show_temporary_dialog_with_icon_printf ("%s\n<b>%s</b>\n %s",
+						myIcon, myContainer,
+						60e3,
+						MY_APPLET_SHARE_DATA_DIR"/icon-task.png",
+						D_("This task will begin in 15 minutes:"),
+						myData.pNextTask->cTitle?myData.pNextTask->cTitle:D_("No title"),
+						myData.pNextTask->cText?myData.pNextTask->cText:"");
+					myDialogs.dialogTextDescription.bUseMarkup = FALSE;
+					CD_APPLET_DEMANDS_ATTENTION (NULL, 60);
+				}
+			}
+			
+			// display next anniversary if it is scheduled in less than 1 day, because anniversary require time to prepare.
+			if (myData.pNextAnniversary != NULL)
+			{
+				if (!myData.pNextAnniversary->b1DayWarning && ! myData.pNextAnniversary->bFirstWarning && ! myData.pNextAnniversary->b15mnWarning)
+				{
+					GDate* pCurrentDate = g_date_new_dmy (myData.currentTime.tm_mday, myData.currentTime.tm_mon + 1, myData.currentTime.tm_year+1900);
+					GDate* pAnnivDate = g_date_new_dmy (myData.pNextAnniversary->iDay, myData.pNextAnniversary->iMonth + 1, myData.currentTime.tm_year+1900);
+					gint iDaysToNextAnniversary = g_date_days_between (pCurrentDate, pAnnivDate);
+					if (iDaysToNextAnniversary >= 0 && iDaysToNextAnniversary <= 1)
+					{
+						myData.pNextAnniversary->b1DayWarning = TRUE;
+						gchar *cText = g_strdup_printf ("%s\n<b>%s</b>\n %s\n\n%s",
+							iDaysToNextAnniversary == 0 ? D_("Today is the following anniversary:") : D_("Tomorrow is the following anniversary:"),
+							myData.pNextTask->cTitle?myData.pNextTask->cTitle:D_("No title"),
+							myData.pNextTask->cText?myData.pNextTask->cText:"",
+							D_("Repeat this message every:"));
+						_task_warning (myData.pNextTask, cText);
+						g_free (cText);
+						myData.pNextAnniversary = cd_clock_get_next_anniversary (myApplet);
+					}
+					g_date_free (pCurrentDate);
+					g_date_free (pAnnivDate);
+				}
+			}
+		}
+	}
+	
+	CD_APPLET_LEAVE(TRUE);
+}

=== added file 'clock/src/applet-timer.h'
--- clock/src/applet-timer.h	1970-01-01 00:00:00 +0000
+++ clock/src/applet-timer.h	2010-09-16 01:12:52 +0000
@@ -0,0 +1,35 @@
+/**
+* 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_CLOCK_TIMER__
+#define  __CD_CLOCK_TIMER__
+
+#include <cairo-dock.h>
+#include "applet-struct.h"
+
+
+void cd_clock_free_alarm (CDClockAlarm *pAlarm);
+
+
+void cd_clock_init_time (CairoDockModuleInstance *myApplet);
+
+gboolean cd_clock_update_with_time (CairoDockModuleInstance *myApplet);
+
+
+#endif

=== modified file 'compiz-icon/data/compiz-icon.conf.in'
--- compiz-icon/data/compiz-icon.conf.in	2010-08-07 01:43:25 +0000
+++ compiz-icon/data/compiz-icon.conf.in	2010-09-16 01:12:52 +0000
@@ -56,8 +56,6 @@
 sticky=true
 
 
-
-
 #F[Decorations;gtk-orientation-portrait]
 frame_deco=
 
@@ -97,7 +95,7 @@
 #F[Actions;gtk-preferences]
 frame_act = 
 
-#l[None;Switch WM;Widget Layer;Expose;Show Desktop] Choose an action for middle click on the icon:
+#l[None;Switch WM;Widget Layer;Expose;Show Desktop] Action on middle click :
 #{Except when switching to another WM, you must activate the Dbus plugin in Compiz along with the plugin corresponding to the desired action.}
 middle click = 1
 

=== removed file 'compiz-icon/data/messages'
--- compiz-icon/data/messages	2010-08-07 01:43:25 +0000
+++ compiz-icon/data/messages	1970-01-01 00:00:00 +0000
@@ -1,196 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Actions")
-
-_("Except when switching to another WM, you must activate the Dbus plugin in Compiz along with the plugin corresponding to the desired action.")
-
-_("Choose an action for middle click on the icon:")
-
-_("None")
-
-_("Switch WM")
-
-_("Widget Layer")
-
-_("Expose")
-
-_("Show Desktop")
-
-_("This command will be used to launch the system WM. Leave blank to use the default.")
-
-_("Custom command for system's Windows Manager:")
-
-_("If Compiz quits unexpectedly, Cairo-Dock will restart it. You must then quit Compiz from the dock.")
-
-_("Auto-reload Compiz?")
-
-_("If the decorator quits unexpectedly, Cairo-Dock will restart it. ou must then quit Compiz from the dock.")
-
-_("Auto-reload the Decorator?")
-
-_("Load Compiz with options on startup.")
-
-_("Force Compiz settings on startup?")
-
-_("This will prevent the CSSM or Emerald icons appearing in the taskbar. The corresponding sub-dock's icons will then behave as a launcher and an application.")
-
-_("Steal the application's icon from the taskbar?")
-
-_("Display two icons for Compiz Exposition & Widget Layer plug-ins in the applet's sub-dock. Otherwise they will be available in the menu.")
-
-_("Add Exposition & Widget Layer to sub-dock?")
-
-_("Display an icon for the Emerald configuration panel in the applet's sub-dock.")
-
-_("Add Emerald Configuration to sub-dock?")
-
-_("Compiz Options")
-
-_("With strict binding, textures are bound whenever they are enabled. With loose binding they are enabled when created. The Nvidia driver seems a bit slow when binding textures, that's why this option gives a heavy performance increase with Nvidia cards.")
-
-_("Use Loose Binding?")
-
-_("Only use these options if you know what you're doing.?")
-
-_("Use Indirect Rendering?")
-
-_("Useful when using two or more separate X screens.")
-
-_("Only Current Screen?")
-
-_("By default this will be Emerald.")
-
-_("Choose your Window Decorator:")
-
-_("emerald")
-
-_("gtk-window-decorator")
-
-_("kde-window-decorator")
-
-_("heliodor")
-
-_("Leave empty to use default sub-dock view.")
-
-_("Sub-dock view name:")
-
-_("Images")
-
-_("Leave empty to use the default icon.")
-
-_("'Default' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Broken' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Other WM' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Settings' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Emerald' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Reload' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Exhibition' icon image name:")
-
-_("Leave empty to use the default icon.")
-
-_("'Widget Layer' icon image name:")
-

=== modified file 'compiz-icon/src/applet-notifications.c'
--- compiz-icon/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ compiz-icon/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -144,7 +144,7 @@
 	if (myDock != NULL && myIcon->pSubDock != NULL && pClickedContainer == CAIRO_CONTAINER (myIcon->pSubDock) && pClickedIcon != NULL) {  // clic sur ne icone du sous-dock.
 		//cd_debug (" clic sur %s", pClickedIcon->cName);
 		///if (pClickedIcon->cCommand != NULL && strcmp (pClickedIcon->cCommand, "none") != 0)
-		///	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		///	CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 		_compiz_action_by_id ((int) pClickedIcon->fOrder/2, pClickedIcon);
 	}
 	else if (myDesklet != NULL && pClickedContainer == myContainer && pClickedIcon != NULL) {  // clic sur une des icones du desklet.
@@ -152,12 +152,12 @@
 			cairo_dock_launch_task (myData.pTask);
 		else {
 			if (pClickedIcon->cCommand != NULL && strcmp (pClickedIcon->cCommand, "none") != 0)
-				return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+				CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 			_compiz_action_by_id ((int) pClickedIcon->fOrder/2, pClickedIcon);
 		}
 	}
 	else
-		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 CD_APPLET_ON_CLICK_END
 
 
@@ -166,7 +166,7 @@
 		_action_on_click (myConfig.iActionOnMiddleClick);
 	}
 	else if (pClickedIcon != NULL && pClickedIcon->cCommand != NULL && strcmp (pClickedIcon->cCommand, "none") != 0)
-		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+		CD_APPLET_LEAVE (CAIRO_DOCK_LET_PASS_NOTIFICATION);
 CD_APPLET_ON_MIDDLE_CLICK_END
 
 
@@ -175,11 +175,12 @@
 	cd_compiz_start_decorator (iDecorator);
 }
 CD_APPLET_ON_BUILD_MENU_BEGIN
+	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
+
 	if (CD_APPLET_CLICKED_ICON != NULL && strcmp(CD_APPLET_CLICKED_ICON->cName,D_("Emerald Manager")) == 0) {
-		CD_APPLET_ADD_IN_MENU (D_("Reload Emerald"), cd_compiz_start_favorite_decorator, CD_APPLET_MY_MENU);
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Reload Emerald"), GTK_STOCK_REFRESH, cd_compiz_start_favorite_decorator, CD_APPLET_MY_MENU);
 	}
 	
-	GtkWidget *pSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
 	CD_APPLET_ADD_IN_MENU (D_("Switch Windows Manager"), cd_compiz_switch_manager, pSubMenu);
 	GtkWidget *pDecoratorSubMenu = CD_APPLET_ADD_SUB_MENU (D_("Switch Windows Decorator"), pSubMenu);
 		CD_APPLET_ADD_IN_MENU_WITH_DATA (myConfig.cDecorators[DECORATOR_EMERALD], cd_compiz_switch_decorator, pDecoratorSubMenu, GINT_TO_POINTER (DECORATOR_EMERALD));
@@ -193,8 +194,11 @@
 		CD_APPLET_ADD_IN_MENU (D_("Toggle Exposition Mode"), _compiz_menu_activate_expo, pSubMenu);
 		CD_APPLET_ADD_IN_MENU (D_("Toggle Widget Layer"), _compiz_menu_toggle_wlayer, pSubMenu);
 	}
-	CD_APPLET_ADD_IN_MENU (D_("Toggle Show Desktop"), _compiz_menu_show_desktop, pSubMenu);
+	
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Toggle Show Desktop"), GTK_STOCK_FULLSCREEN, _compiz_menu_show_desktop, CD_APPLET_MY_MENU);
+
+	if (pClickedIcon != myIcon && (pClickedIcon == NULL || pClickedIcon->cCommand == NULL || strcmp (pClickedIcon->cCommand, "none") == 0 || ! CAIRO_DOCK_IS_APPLI (pClickedIcon)))
+		CD_APPLET_LEAVE (CAIRO_DOCK_INTERCEPT_NOTIFICATION);  // on ne veut pas des autres entrees habituelles du menu.
+	CD_APPLET_ADD_SEPARATOR_IN_MENU (pSubMenu);
 	CD_APPLET_ADD_ABOUT_IN_MENU (pSubMenu);
-	if (pClickedIcon != myIcon && (pClickedIcon == NULL || pClickedIcon->cCommand == NULL || strcmp (pClickedIcon->cCommand, "none") == 0 || ! CAIRO_DOCK_IS_APPLI (pClickedIcon)))
-		return CAIRO_DOCK_INTERCEPT_NOTIFICATION;  // on ne veut pas des autres entrees habituelles du menu.
 CD_APPLET_ON_BUILD_MENU_END

=== modified file 'copyright'
--- copyright	2010-08-07 01:43:25 +0000
+++ copyright	2010-09-16 01:12:52 +0000
@@ -1,5 +1,7 @@
-X-Source-Downloaded-From: http://developer.berlios.de/projects/cairo-dock/
-X-Upstream-Author: Fabrice Rey <fabounet@xxxxxxxxxxxx>.
+X-Source-Downloaded-From: https://launchpad.net/cairo-dock
+X-Upstream-Author: Fabrice Rey <fabounet@xxxxxxxxxxxx>
+X-Debianized-By: Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx>
+X-Debianized-Date: Sat, 07 Aug 2010 03:37:36 +0200
 
 Files: systray/src/cd-tray.c: LGPL (v2 or later)
 Copyright: 2007 Neil Jagdish Patel
@@ -79,10 +81,6 @@
 Copyright: 2008 Adrien Pilleboue
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
 
-Files: 	rhythmbox/*
-Copyright: 2008 Adrien Pilleboue and 2009 Yann Dulieu
-Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
-
 Files: 	mail/*
 Copyright: Christophe Chapuis and Fabrice Rey
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
@@ -105,14 +103,25 @@
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
 
 Files: 	musicPlayer/*
-Copyright: Rémy Robertson, Yann Sladek and Fabrice Rey <fabounet@xxxxxxxxxxxx>
+Copyright: Rémy Robertson, Yann Sladek, Yann Dulieu and Fabrice Rey <fabounet@xxxxxxxxxxxx>
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
 
 Files: dnd2share/*
-	RSSreader/*
 Copyright: Yann Dulieu and Fabrice Rey <fabounet@xxxxxxxxxxxx>
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
 
+Files: 	RSSreader/*
+Copyright: 2008 Yann Dulieu and Fabrice Rey <fabounet@xxxxxxxxxxxx>
+Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
+
+Files: 	Doncky/*
+Copyright: 2008 Yann Dulieu
+Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
+
+Files: 	Network-Monitor/*
+Copyright: 2008 Yann Sladek and Fabrice Rey <fabounet@xxxxxxxxxxxx>
+Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
+
 
 Files: 	alsaMixer/*
 	Animated-icons/*
@@ -133,12 +142,18 @@
 	motion-blur/*
 	quick-browser/*
 	rendering/*
-	Scooby-Do
+	Scooby-Do/*
 	showDesklets/*
 	show-mouse/*
 	Toons/*
 	weather/*
 	Xgamma/*
+	*Menu/*
+	Folders/*
+	Indicator-applet/*
+	Status-Notifier/*
+	gvfs-integration/*
+	*/*
 Copyright: Fabrice Rey <fabounet@xxxxxxxxxxxx>
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
 

=== modified file 'debian/changelog'
--- debian/changelog	2010-08-10 07:10:54 +0000
+++ debian/changelog	2010-09-16 01:12:52 +0000
@@ -1,3 +1,36 @@
+cairo-dock-plug-ins (2.2.0~1-0ubuntu1) maverick; urgency=low
+
+  * New Upstream Version (LP: #638529)
+  * Fixed a few bugs on LP:
+   - Fixed a crash in rainbow view when the cone is completely opened
+   - Installed in lib directory by default even in 64bits arch
+   - Status-Notifier: fixed few bugs
+   - Clock applet:
+     - Notify of missed tasks (moved some functions to a new file)
+     - Fixed a little memory leak
+   - Removed some 'g_print' (LP: #500677: xsession-errors log)
+  * Updated translations
+
+ -- Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx>  Thu, 16 Sep 2010 02:16:28 +0200
+
+cairo-dock-plug-ins (2.2.0~0rc1-0ubuntu1) maverick; urgency=low
+
+  * New Upstream Version (LP: #632054)
+  * Fixed a few bugs on LP:
+   - LP: #616176 Dust Bin Hang and Incorrect Configuration
+   - LP: #604034 Change terminal tab's name lost the color
+   - LP: #582452 GMenu does not contain any applications
+  * Fixed a few bugs on glx-dock forum:
+   - Fixed support of GMusicBrowser.
+   - AlsaMixer has no emblem.
+   - Status-Notifier doesn't be drawed into the dock.
+  * Updated translations
+  * debian/control:
+   - Added cairo-dock-core as build-depends in order to prevent
+     some builds errors.
+
+ -- Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx>  Tue, 07 Sep 2010 02:38:17 +0200
+
 cairo-dock-plug-ins (2.2.0~0beta4-0ubuntu1) maverick; urgency=low
 
   * New Upstream Version (LP: #614625)

=== modified file 'debian/control'
--- debian/control	2010-08-10 07:10:54 +0000
+++ debian/control	2010-09-16 01:12:52 +0000
@@ -15,7 +15,8 @@
 		libxml2-dev,
 		libxtst-dev,
 		libglib2.0-dev (>= 2.20),
-		cairo-dock-dev (>= 2.2.0~0beta4-0ubuntu1),
+		cairo-dock-dev (>= 2.2.0~0rc1-0ubuntu1),
+		cairo-dock-core (>= 2.2.0~0rc1-0ubuntu1),
 		libasound2-dev,
 		libvte-dev,
 		x11proto-xf86vidmode-dev,

=== modified file 'debian/copyright' (properties changed: -x to +x)
--- debian/copyright	2010-08-07 01:43:25 +0000
+++ debian/copyright	2010-09-16 01:12:52 +0000
@@ -1,8 +1,7 @@
-X-Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat
+X-Source-Downloaded-From: https://launchpad.net/cairo-dock
+X-Upstream-Author: Fabrice Rey <fabounet@xxxxxxxxxxxx>
 X-Debianized-By: Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx>
 X-Debianized-Date: Sat, 07 Aug 2010 03:37:36 +0200
-X-Source-Downloaded-From: https://launchpad.net/cairo-dock
-X-Upstream-Author: Fabrice Rey <fabounet@xxxxxxxxxxxx>
 
 Files: systray/src/cd-tray.c: LGPL (v2 or later)
 Copyright: 2007 Neil Jagdish Patel
@@ -158,6 +157,14 @@
 Copyright: Fabrice Rey <fabounet@xxxxxxxxxxxx>
 Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
 
+Icons inspired of the Humanity Icons theme and recolorized by Matthieu Baerts
+Copyright: Daniel Fore, Jonian Guveli and K.Vishnoo Charan Reddy.
+Licence: GPL v2  (See /usr/share/common-licenses/GPL-2 for complete licence)
+
+Pictures on slider/data/preview.jpg:
+Copyright: Matthieu Baerts
+Licence: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete licence)
+
 Files: 	debian/*
 Copyright: Copyright (C) Julien Lavergne <julien.lavergne@xxxxxxxxx>
 Licence: GPL 2+ (See /usr/share/common-licenses/GPL-2 for complete licence)

=== removed file 'desklet-rendering/data/messages'
=== modified file 'desklet-rendering/src/rendering-desklet-slide.c'
--- desklet-rendering/src/rendering-desklet-slide.c	2010-08-07 01:43:25 +0000
+++ desklet-rendering/src/rendering-desklet-slide.c	2010-09-16 01:12:52 +0000
@@ -93,14 +93,14 @@
 	}
 }
 
-static void load_data (CairoDesklet *pDesklet)
+/**static void load_data (CairoDesklet *pDesklet)
 {
 	CDSlideParameters *pSlide = (CDSlideParameters *) pDesklet->pRendererData;
 	if (pSlide == NULL)
 		return ;
 	
 	_compute_icons_grid (pDesklet, pSlide);
-}
+}*/
 
 
 static void free_data (CairoDesklet *pDesklet)
@@ -257,7 +257,6 @@
 			
 			cairo_restore (pCairoContext);
 			
-			
 			if (pIcon->pTextBuffer != NULL)
 			{
 				cairo_save (pCairoContext);
@@ -478,7 +477,7 @@
 	CairoDeskletRenderer *pRenderer = g_new0 (CairoDeskletRenderer, 1);
 	pRenderer->render 			= (CairoDeskletRenderFunc) render;
 	pRenderer->configure 		= (CairoDeskletConfigureRendererFunc) configure;
-	pRenderer->load_data 		= (CairoDeskletLoadRendererDataFunc) load_data;
+	pRenderer->load_data 		= (CairoDeskletLoadRendererDataFunc) NULL;  /// load_data;
 	pRenderer->free_data 		= (CairoDeskletFreeRendererDataFunc) free_data;
 	pRenderer->calculate_icons 	= (CairoDeskletCalculateIconsFunc) calculate_icons;
 	pRenderer->render_opengl 	= (CairoDeskletGLRenderFunc) render_opengl;

=== modified file 'desklet-rendering/src/rendering-desklet-viewport.c'
--- desklet-rendering/src/rendering-desklet-viewport.c	2010-08-07 01:43:25 +0000
+++ desklet-rendering/src/rendering-desklet-viewport.c	2010-09-16 01:12:52 +0000
@@ -23,286 +23,271 @@
 
 #include "rendering-desklet-viewport.h"
 
-#define _cairo_dock_set_path_as_current(...) _cairo_dock_set_vertex_pointer(pVertexTab)
-
-
-static gboolean on_enter_icon_viewport (gpointer pUserData, Icon *pPointedIcon, CairoContainer *pContainer, gboolean *bStartAnimation)
+static void render (cairo_t *pCairoContext, CairoDesklet *pDesklet);
+
+
+static inline void _get_gridXY_from_index (guint nRowsX, guint index, guint* gridX, guint* gridY)
+{
+	*gridX = index % nRowsX;
+	*gridY = index / nRowsX;
+}
+
+static void _compute_icons_grid (CairoDesklet *pDesklet, CDViewportParameters *pViewport)
+{
+	// nombre d'icones.
+	guint nIcones = 0;  // nb icones.
+	Icon *icon;
+	GList *ic;
+	for (ic = pDesklet->icons; ic != NULL; ic = ic->next)
+	{
+		icon = ic->data;
+		if (! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
+			nIcones ++;
+	}
+	
+	// taille des differents composants.
+	pViewport->iIconGapX = 50;
+	pViewport->iIconGapY = 10;
+	pViewport->fMargin = pViewport->iIconGapX / 2;
+	pViewport->fArrowGap = .05 * pDesklet->container.iHeight;
+	pViewport->fArrowHeight = 14.;
+	pViewport->fScrollbarWidth = 10.;
+	pViewport->fScrollbarArrowGap = 4.;
+	pViewport->fScrollbarIconGap = 10.;
+	
+	int iIconSize = 48;
+	double h_min = pViewport->iIconSize + myLabels.iLabelSize;  // hauteur min pour caser 1 icone.
+	double fx=1, fy=1;
+	if (h_min > pDesklet->container.iHeight)
+	{
+		fy = (double) MAX (1, pDesklet->container.iHeight - myLabels.iLabelSize) / pViewport->iIconSize;
+		pViewport->fArrowHeight *= fy;
+		iIconSize *= fy;
+	}
+	double w_min = pViewport->fMargin + iIconSize + pViewport->fMargin + pViewport->fScrollbarIconGap + pViewport->fScrollbarWidth + pViewport->fScrollbarIconGap;  // largeur min pour caser 1 icone.
+	if (w_min > pDesklet->container.iWidth)
+	{
+		fx = (double) pDesklet->container.iWidth / w_min;
+		iIconSize *= fx;
+		pViewport->iIconGapX *= fx;
+		pViewport->fMargin *= fx;
+		pViewport->fScrollbarWidth *= fx;
+		pViewport->fScrollbarArrowGap *= fx;
+		pViewport->fScrollbarIconGap *= fx;
+		w_min = pDesklet->container.iWidth;
+	}
+	pViewport->iIconSize = iIconSize;
+	
+	// taille de la grille.
+	pViewport->nRowsX = (pDesklet->container.iWidth - w_min) / (pViewport->iIconSize + pViewport->iIconGapX) + 1;
+	pViewport->nRowsY = ceil ((double)nIcones / pViewport->nRowsX);
+	pViewport->iDeltaHeight = MAX (0, (pViewport->nRowsY - 1) * (pViewport->iIconSize + myLabels.iLabelSize + pViewport->iIconGapY) + pViewport->iIconSize + myLabels.iLabelSize - pDesklet->container.iHeight);
+	pViewport->fMargin = (pDesklet->container.iWidth - (pViewport->nRowsX * (pViewport->iIconSize + pViewport->iIconGapX) - pViewport->iIconSize + pViewport->fScrollbarIconGap + pViewport->fScrollbarWidth + pViewport->fScrollbarIconGap)) / 2;  // on reajuste la marge pour centrer les icones.
+}
+
+static void _compute_icons_position (CairoDesklet *pDesklet, CDViewportParameters *pViewport)
+{
+	double fScrollOffset = - pViewport->iScrollOffset;
+	int iOffsetY = myLabels.iLabelSize +  // le texte des icones de la 1ere ligne
+		fScrollOffset;
+	
+	Icon* icon;
+	GList* ic, *pointed_ic=NULL;
+	int i, x, y;
+	for (ic = pDesklet->icons, i = 0; ic != NULL; ic = ic->next, i++)
+	{
+		icon = ic->data;
+		
+		// position sur la grille.
+		_get_gridXY_from_index (pViewport->nRowsX, i, &x, &y);
+		
+		// on en deduit la position au repos.
+		icon->fX = pViewport->fMargin + (icon->fWidth + pViewport->iIconGapX) * x;
+		icon->fY = iOffsetY + (icon->fHeight + myLabels.iLabelSize + pViewport->iIconGapY) * y;
+		
+		icon->fDrawX = icon->fX;
+		icon->fDrawY = icon->fY;
+	}
+}
+
+
+static void _set_scroll (CairoDesklet *pDesklet, int iOffsetY)
+{
+	//g_print ("%s (%d)\n", __func__, iOffsetY);
+	CDViewportParameters *pData = pDesklet->pRendererData;
+	g_return_if_fail (pData != NULL);
+	
+	pData->iScrollOffset = MAX (0, MIN (iOffsetY, pData->iDeltaHeight));
+	_compute_icons_position (pDesklet, pData);
+	gtk_widget_queue_draw (pDesklet->container.pWidget);
+}
+
+static gboolean _add_scroll (CairoDesklet *pDesklet, int iDeltaOffsetY)
+{
+	//g_print ("%s (%d)\n", __func__, iDeltaOffsetY);
+	CDViewportParameters *pData = pDesklet->pRendererData;
+	g_return_val_if_fail (pData != NULL, FALSE);
+	
+	if (iDeltaOffsetY < 0)
+	{
+		if (pData->iScrollOffset <= 0)
+			return FALSE;
+	}
+	else
+	{
+		if (pData->iScrollOffset >= pData->iDeltaHeight)
+			return FALSE;
+	}
+	_set_scroll (pDesklet, pData->iScrollOffset + iDeltaOffsetY);
+	return TRUE;
+}
+
+static gboolean _cd_slide_on_scroll (gpointer data, Icon *pClickedIcon, CairoDesklet *pDesklet, int iDirection)
+{
+	CDViewportParameters *pData = pDesklet->pRendererData;
+	g_return_val_if_fail (pData != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	if (pData->iDeltaHeight == 0)
+		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	
+	gboolean bScrolled = _add_scroll (pDesklet, iDirection == 1 ? pData->iIconSize : - pData->iIconSize);
+	return (bScrolled ? CAIRO_DOCK_INTERCEPT_NOTIFICATION : CAIRO_DOCK_LET_PASS_NOTIFICATION);
+}
+
+static gboolean _cd_slide_on_press_button (GtkWidget* pWidget, GdkEventButton* pButton, CairoDesklet *pDesklet)
+{
+	CDViewportParameters *pData = pDesklet->pRendererData;
+	g_return_val_if_fail (pData != NULL, FALSE);
+	if (pData->iDeltaHeight == 0)
+		return FALSE;
+	
+	gboolean bIntercept = FALSE;
+	if (pButton->type == GDK_BUTTON_PRESS && pButton->button == 1)
+	{
+		double x_arrow = pDesklet->container.iWidth - pData->fScrollbarIconGap - pData->fScrollbarWidth;
+		if (pButton->x > x_arrow)  // on a clique dans la zone de scroll.
+		{
+			// on regarde sur quoi on clic.
+			double y_arrow_top = 2., y_arrow_bottom = pDesklet->container.iHeight - 2.;  // on laisse 2 pixels de marge.
+			
+			if (pButton->y > y_arrow_top - pData->fScrollbarArrowGap/2 && pButton->y < y_arrow_top + pData->fArrowHeight + pData->fScrollbarArrowGap/2)  // bouton haut
+			{
+				_set_scroll (pDesklet, 0);
+				bIntercept = TRUE;
+				pDesklet->retaching = FALSE;
+			}
+			else if (pButton->y < y_arrow_bottom + pData->fScrollbarArrowGap/2 && pButton->y > y_arrow_bottom - pData->fArrowHeight - pData->fScrollbarArrowGap/2)  // bouton bas
+			{
+				_set_scroll (pDesklet, pData->iDeltaHeight);
+				bIntercept = TRUE;
+				pDesklet->making_transparent = FALSE;
+			}
+			else  // scrollbar
+			{
+				pData->bDraggingScrollbar = TRUE;
+				pData->iClickY = pButton->y;
+				pData->iClickOffset = pData->iScrollOffset;
+				bIntercept = TRUE;
+				pDesklet->moving = TRUE;
+			}
+			pDesklet->bClicked = !bIntercept;  // on fait croire au desklet qu'on n'a pas clique sur lui. c'est vraiment limite, mais on peut difficilement s'enregistrer au clic avant l'applet qui possede le desklet.
+		}
+	}
+	else if (GDK_BUTTON_RELEASE)
+	{
+		//g_print ("release\n");
+		pData->bDraggingScrollbar = FALSE;
+		pDesklet->moving = FALSE;
+	}
+	return FALSE;
+}
+
+static gboolean _cd_slide_on_mouse_moved (gpointer data, CairoDesklet *pDesklet, gboolean *bStartAnimation)
+{
+	CDViewportParameters *pData = pDesklet->pRendererData;
+	g_return_val_if_fail (pData != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
+	if (pData->iDeltaHeight == 0)
+		return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+	
+	if (pData->bDraggingScrollbar)
+	{
+		double y_arrow_top = 2., y_arrow_bottom = pDesklet->container.iHeight - 2.;  // on laisse 2 pixels de marge.
+		double fFrameHeight = pDesklet->container.iHeight;  // hauteur du cadre.
+		double fGripHeight = fFrameHeight / (fFrameHeight + pData->iDeltaHeight) * (y_arrow_bottom - y_arrow_top - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap));
+		double ygrip = (double) pData->iScrollOffset / pData->iDeltaHeight * (y_arrow_bottom - y_arrow_top - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap) - fGripHeight);
+		
+		int delta = pDesklet->container.iMouseY - pData->iClickY;
+		_set_scroll (pDesklet, (pData->iClickOffset + (double)delta / (y_arrow_bottom - y_arrow_top - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap) - fGripHeight) * pData->iDeltaHeight));
+		return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+	}
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
+}
+
+static gboolean on_enter_icon_slide (gpointer pUserData, Icon *pPointedIcon, CairoContainer *pContainer, gboolean *bStartAnimation)
 {
 	gtk_widget_queue_draw (pContainer->pWidget);  // et oui, on n'a rien d'autre a faire.
 	
 	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 }
 
-static inline void _viewport_pan_delta(CairoDesklet *pDesklet, double fDeltaX, double fDeltaY)
-{
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	pViewportConf->fCurrentPanXSpeed = fDeltaX;
-	pViewportConf->fCurrentPanYSpeed = fDeltaY;
-	pViewportConf->iCurrentOffsetX += fDeltaX;
-	pViewportConf->iCurrentOffsetY += fDeltaY;
-	if (pViewportConf->iCurrentOffsetX < 0)
-	{
-		pViewportConf->iCurrentOffsetX = 0;
-		pViewportConf->fCurrentPanXSpeed = 0;
-	}
-	else if( pViewportConf->iCurrentOffsetX > pViewportConf->iMaxOffsetX )
-	{
-		pViewportConf->iCurrentOffsetX = pViewportConf->iMaxOffsetX;
-		pViewportConf->fCurrentPanXSpeed = 0;
-	}
-	if (pViewportConf->iCurrentOffsetY < 0)
-	{
-		pViewportConf->iCurrentOffsetY = 0;
-		pViewportConf->fCurrentPanYSpeed = 0;
-	}
-	else if( pViewportConf->iCurrentOffsetY > pViewportConf->iMaxOffsetY )
-	{
-		pViewportConf->iCurrentOffsetY = pViewportConf->iMaxOffsetY;
-		pViewportConf->fCurrentPanYSpeed = 0;
-	}
-
-	gtk_widget_queue_draw (pDesklet->container.pWidget);
-}
-
-static gboolean on_update_desklet (gpointer pUserData, CairoDesklet *pDesklet, gboolean *bContinueAnimation)
-{
-	if (pDesklet->icons != NULL)
-	{
-		CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-		if (pViewportConf == NULL)
-			return CAIRO_DOCK_LET_PASS_NOTIFICATION;
-		
-		if (! pDesklet->container.bInside)  // on est en-dehors du desklet, on ralentit.
-		{
-			_viewport_pan_delta (pDesklet, pViewportConf->fCurrentPanXSpeed*.85, pViewportConf->fCurrentPanYSpeed*.85);
-			if (fabs (pViewportConf->fCurrentPanXSpeed)+fabs (pViewportConf->fCurrentPanYSpeed) < pViewportConf->iIconSize/15)
-			// vitesse de translation epsilonesque, on quitte.
-			{
-				pViewportConf->fCurrentPanXSpeed = 0;
-				pViewportConf->fCurrentPanYSpeed = 0;
-				return CAIRO_DOCK_LET_PASS_NOTIFICATION;
-			}
-			*bContinueAnimation = TRUE;
-		}
-		else
-		{
-			double fDeltaX = 0;
-			double fDeltaY = 0;
-			// si on est dans la marge de 20% de la largeur du desklet a gauche,
-			// alors on translate a droite
-			if (pDesklet->container.iMouseX <= pDesklet->container.iWidth*0.2)
-			{
-				// La force de translation va de 0 (lorsqu'on est a 20%) jusqu'a
-				// pViewportConf->iIconSize / 2. (lorsqu'on est a 0%)
-				fDeltaX = (pViewportConf->iIconSize / 10) *
-									(pDesklet->container.iWidth*0.2 - pDesklet->container.iMouseX)/(pDesklet->container.iWidth*0.2);
-				*bContinueAnimation = TRUE;
-			}
-			// si on est dans la marge de 20% de la largeur du desklet a droite,
-			// alors on translate a gauche (-1)
-			else if( pDesklet->container.iMouseX >= pDesklet->container.iWidth*0.8 )
-			{
-				// La force de translation va de 0 (lorsqu'on est a 80%) jusqu'a
-				// pViewportConf->iIconSize / 2. (lorsqu'on est a 100%)
-				fDeltaX = -(pViewportConf->iIconSize / 10) *
-									 (pDesklet->container.iMouseX - pDesklet->container.iWidth*0.8)/(pDesklet->container.iWidth*0.2);
-				*bContinueAnimation = TRUE;
-			}
-			// si on est dans la marge de 20% de la hauteur du desklet en haut,
-			// alors on translate en bas
-			if (pDesklet->container.iMouseY <= pDesklet->container.iHeight*0.2)
-			{
-				// La force de translation va de 0 (lorsqu'on est a 20%) jusqu'a
-				// pViewportConf->iIconSize / 2. (lorsqu'on est a 0%)
-				fDeltaY = -(pViewportConf->iIconSize / 10) *
-									 (pDesklet->container.iHeight*0.2 - pDesklet->container.iMouseY)/(pDesklet->container.iHeight*0.2);
-				*bContinueAnimation = TRUE;
-			}
-			// si on est dans la marge de 20% de la hauteur du desklet en bas,
-			// alors on translate en haut (-1)
-			else if( pDesklet->container.iMouseY >= pDesklet->container.iHeight*0.8 )
-			{
-				// La force de translation va de 0 (lorsqu'on est a 80%) jusqu'a
-				// pViewportConf->iIconSize / 2. (lorsqu'on est a 100%)
-				fDeltaY = (pViewportConf->iIconSize / 10) *
-									(pDesklet->container.iMouseY - pDesklet->container.iHeight*0.8)/(pDesklet->container.iHeight*0.2);
-				*bContinueAnimation = TRUE;
-			}
-			if( *bContinueAnimation == TRUE )
-			{
-				_viewport_pan_delta( pDesklet, fDeltaX, fDeltaY );
-			}
-			else
-			{
-				pViewportConf->fCurrentPanXSpeed = 0.;
-				pViewportConf->fCurrentPanYSpeed = 0.;
-			}
-		}
-	}
-	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
-}
-
-static gboolean on_mouse_move (gpointer pUserData, CairoDesklet *pDesklet, gboolean *bStartAnimation)
-{
-	if (pDesklet->icons != NULL)
-	{
-		CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-		if (pViewportConf == NULL)
-			return CAIRO_DOCK_LET_PASS_NOTIFICATION;
-		if (pViewportConf->bInfiniteWidth && (pDesklet->container.iMouseX <= pDesklet->container.iWidth*0.2 || pDesklet->container.iMouseX >= pDesklet->container.iWidth*0.8))
-			*bStartAnimation = TRUE;
-		if (pViewportConf->bInfiniteHeight && (pDesklet->container.iMouseY <= pDesklet->container.iHeight*0.2 || pDesklet->container.iMouseY >= pDesklet->container.iHeight*0.8))
-			*bStartAnimation = TRUE;
-	}
-	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
-}
-
-static CDViewportParameters *configure (CairoDesklet *pDesklet, gpointer *pConfig)  // gboolean, int, gdouble[4]
-{
-	CDViewportParameters *pViewportConf = g_new0 (CDViewportParameters, 1);
+static CDViewportParameters *configure (CairoDesklet *pDesklet, gpointer *pConfig)
+{
+	CDViewportParameters *pViewport = g_new0 (CDViewportParameters, 1);
 	if (pConfig != NULL)
 	{
-		pViewportConf->bRoundedRadius = GPOINTER_TO_INT (pConfig[0]);
-		pViewportConf->iRadius = GPOINTER_TO_INT (pConfig[1]);
-		if (pConfig[2] != NULL)
-			memcpy (pViewportConf->fLineColor, pConfig[2], 4 * sizeof (gdouble));
-	}
-	
-	pViewportConf->iLineWidth = 2;
-	pViewportConf->iGapBetweenIcons = 10;
-	pViewportConf->iMinimumIconSize = 48;
-	pViewportConf->iCurrentOffsetX = 0;
-	pViewportConf->iCurrentOffsetY = 0;
-	pViewportConf->fCurrentPanXSpeed = 0;
-	pViewportConf->fCurrentPanYSpeed = 0;
-	pViewportConf->iMaxOffsetX = 0;
-	pViewportConf->iMaxOffsetY = 0;
-	pViewportConf->bInfiniteHeight=TRUE;
-	pViewportConf->bInfiniteWidth=FALSE;
-	
-	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_ENTER_ICON, (CairoDockNotificationFunc) on_enter_icon_viewport, CAIRO_DOCK_RUN_FIRST, NULL);
-	
-	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_UPDATE_DESKLET, (CairoDockNotificationFunc) on_update_desklet, CAIRO_DOCK_RUN_AFTER, NULL);
-	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_MOUSE_MOVED, (CairoDockNotificationFunc) on_mouse_move, CAIRO_DOCK_RUN_AFTER, NULL);
-	
-	return pViewportConf;
-}
-
-
-static inline void _compute_icons_grid (CairoDesklet *pDesklet, CDViewportParameters *pViewportConf)
-{
-	pViewportConf->fMargin = (pViewportConf->bRoundedRadius ?
-		.5 * pViewportConf->iLineWidth + (1. - sqrt (2) / 2) * pViewportConf->iRadius :
-		.5 * pViewportConf->iLineWidth + .5 * pViewportConf->iRadius);
-	
-	int iNbIcons = 0;
-	Icon *pIcon;
-	GList *ic;
-	for (ic = pDesklet->icons; ic != NULL; ic = ic->next)
-	{
-		pIcon = ic->data;
-		if (! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
-			iNbIcons ++;
-	}
-	pViewportConf->iNbIcons = iNbIcons;
-	
-	double w = pDesklet->container.iWidth - 2 * pViewportConf->fMargin;
-	double h = pDesklet->container.iHeight - 2 * pViewportConf->fMargin;
-	int dh = myLabels.iLabelSize;  // taille verticale ajoutee a chaque icone.
-	int dw = 2 * dh;  // taille horizontale ajoutee a chaque icone.
-	int di = pViewportConf->iGapBetweenIcons;  // ecart entre 2 lignes/colonnes.
-	
-	int p, q;  // nombre de lignes et colonnes.
-	int iSize;
-	pViewportConf->iIconSize = 0, pViewportConf->iNbLines = 0, pViewportConf->iNbColumns = 0;
-	//g_print ("%d icones sur %dx%d (%d)\n", pViewportConf->iNbIcons, (int)w, (int)h, myLabels.iLabelSize);
-	for (p = 1; p <= pViewportConf->iNbIcons; p ++)
-	{
-		q = (int) ceil ((double)pViewportConf->iNbIcons / p);
-		iSize = MIN ((h - (p - 1) * di) / p - dh, (w - (q - 1) * di) / q - dw);
-		//g_print ("  %dx%d -> %d\n", p, q, iSize);
-		if (iSize > pViewportConf->iIconSize)
-		{
-			pViewportConf->iIconSize = iSize;
-			pViewportConf->iNbLines = p;
-			pViewportConf->iNbColumns = q;
-		}
-		else if(iSize > 0) // there is only one maximum
-		{
-			break;
-		}
-	}
-	// si les icones sont trop petites, et qu'on a une largeur et/ou une
-	// hauteur infinie(s), essayer d'avoir au moins une taille minimale
-	if(  pViewportConf->iIconSize < pViewportConf->iMinimumIconSize &&
-	    (pViewportConf->bInfiniteWidth || pViewportConf->bInfiniteHeight) )
-	{
-		if( pViewportConf->bInfiniteWidth && pViewportConf->bInfiniteHeight )
-		{
-			// surface infinie: on garde le meme nb de colonnes&lignes,
-			// mais on met la taille d'icone a iMinimumIconSize
-			pViewportConf->iIconSize = pViewportConf->iMinimumIconSize;
-		}
-		else if( pViewportConf->bInfiniteHeight )
-		{
-			// hauteur infinie et largeur fixe: on calcule le nombre de colonnes
-			// maxi avec pViewportConf->iIconSize = pViewportConf->iMinimumIconSize
-			pViewportConf->iIconSize = pViewportConf->iMinimumIconSize;
-			pViewportConf->iNbColumns = (w + di) / ( pViewportConf->iIconSize + dw + di );
-			if( pViewportConf->iNbColumns < 1 )
-			{
-				pViewportConf->iNbColumns = 1;
-				pViewportConf->iIconSize = w - dw; 
-			}
-			pViewportConf->iNbLines = (int) ceil ((double)pViewportConf->iNbIcons / pViewportConf->iNbColumns);
-		}
-		else if( pViewportConf->bInfiniteWidth )
-		{
-			// largeur infinie et hauteur fixe: on calcule le nombre de lignes
-			// maxi avec pViewportConf->iIconSize = pViewportConf->iMinimumIconSize
-			pViewportConf->iIconSize = pViewportConf->iMinimumIconSize;
-			pViewportConf->iNbLines = (h + di) / ( pViewportConf->iIconSize + dh + di );
-			if( pViewportConf->iNbLines < 1 )
-			{
-				pViewportConf->iNbLines = 1;
-				pViewportConf->iIconSize = h - dh; 
-			}
-			pViewportConf->iNbColumns = (int) ceil ((double)pViewportConf->iNbIcons / pViewportConf->iNbLines);
-		}
-		// on calcule l'offset maximal atteignable en X
-		pViewportConf->iMaxOffsetX = MAX(( pViewportConf->iIconSize + dw + di )*pViewportConf->iNbColumns - (w + di), 0);
-		// on calcule l'offset maximal atteignable en Y
-		pViewportConf->iMaxOffsetY = MAX(( pViewportConf->iIconSize + dh + di )*pViewportConf->iNbLines - (h + di), 0);
-	}
-}
-
-static void load_data (CairoDesklet *pDesklet)
-{
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	if (pViewportConf == NULL)
-		return ;
-	
-	_compute_icons_grid (pDesklet, pViewportConf);
+		// get parameters ...
+		// gap icon, horizontal scroll bar, icon size, icon gap
+	}
+	
+	pViewport->color_scrollbar_inside[0] = .8;
+	pViewport->color_scrollbar_inside[1] = .8;
+	pViewport->color_scrollbar_inside[2] = .8;
+	pViewport->color_scrollbar_inside[3] = .75;
+	pViewport->color_scrollbar_line[0] = 1.;
+	pViewport->color_scrollbar_line[1] = 1.;
+	pViewport->color_scrollbar_line[2] = 1.;
+	pViewport->color_scrollbar_line[3] = 1.;
+	pViewport->color_grip[0] = .9;
+	pViewport->color_grip[1] = .9;
+	pViewport->color_grip[2] = .9;
+	pViewport->color_grip[3] = 1.;
+	
+	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_SCROLL_ICON, (CairoDockNotificationFunc) _cd_slide_on_scroll, CAIRO_DOCK_RUN_AFTER, NULL);
+	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_MOUSE_MOVED, (CairoDockNotificationFunc) _cd_slide_on_mouse_moved, CAIRO_DOCK_RUN_FIRST, NULL);
+	cairo_dock_register_notification_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_ENTER_ICON, (CairoDockNotificationFunc) on_enter_icon_slide, CAIRO_DOCK_RUN_FIRST, NULL);
+	pViewport->iSidPressEvent = g_signal_connect (G_OBJECT (pDesklet->container.pWidget),
+		"button-press-event",
+		G_CALLBACK (_cd_slide_on_press_button),
+		pDesklet);  // car les notification de clic en provenance du dock sont emises lors du relachement du bouton.
+	pViewport->iSidReleaseEvent = g_signal_connect (G_OBJECT (pDesklet->container.pWidget),
+		"button-release-event",
+		G_CALLBACK (_cd_slide_on_press_button),
+		pDesklet);
+	
+	return pViewport;
 }
 
 
 static void free_data (CairoDesklet *pDesklet)
 {
-	cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_ENTER_ICON, (CairoDockNotificationFunc) on_enter_icon_viewport, NULL);
-	
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	if (pViewportConf == NULL)
+	CDViewportParameters *pViewport = (CDViewportParameters *) pDesklet->pRendererData;
+	if (pViewport == NULL)
 		return ;
 	
-	g_free (pViewportConf);
+	cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_SCROLL_ICON, (CairoDockNotificationFunc) _cd_slide_on_scroll, NULL);
+	cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_MOUSE_MOVED, (CairoDockNotificationFunc) _cd_slide_on_mouse_moved, NULL);
+	cairo_dock_remove_notification_func_on_container (CAIRO_CONTAINER (pDesklet), CAIRO_DOCK_ENTER_ICON, (CairoDockNotificationFunc) on_enter_icon_slide, NULL);
+	g_signal_handler_disconnect (pDesklet->container.pWidget, pViewport->iSidPressEvent);
+	g_signal_handler_disconnect (pDesklet->container.pWidget, pViewport->iSidReleaseEvent);
+	
+	g_free (pViewport);
 	pDesklet->pRendererData = NULL;
 }
 
 
 static void set_icon_size (CairoDesklet *pDesklet, Icon *pIcon)
 {
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	if (pViewportConf == NULL)
+	CDViewportParameters *pViewport = (CDViewportParameters *) pDesklet->pRendererData;
+	if (pViewport == NULL)
 		return ;
 	
 	if (pIcon == pDesklet->pIcon)
@@ -312,20 +297,22 @@
 	}
 	else
 	{
-		pIcon->fWidth = pViewportConf->iIconSize;
-		pIcon->fHeight = pViewportConf->iIconSize;
+		pIcon->fWidth = pViewport->iIconSize;
+		pIcon->fHeight = pViewport->iIconSize;
 	}
 }
 
+
 static void calculate_icons (CairoDesklet *pDesklet)
 {
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	if (pViewportConf == NULL)
+	CDViewportParameters *pViewport = (CDViewportParameters *) pDesklet->pRendererData;
+	if (pViewport == NULL)
 		return ;
 	
-	_compute_icons_grid (pDesklet, pViewportConf);
-	cd_debug ("pViewportConf->iIconSize : %d\n", pViewportConf->iIconSize);
+	//\____________________ On calcule la grille : repartition et taille des icones, scrollbar.
+	_compute_icons_grid (pDesklet, pViewport);
 	
+	//\____________________ On renseigne chaque icone apres (elles sont toutes identiques).
 	Icon *pIcon = pDesklet->pIcon;
 	if (pIcon != NULL)  // on ne veut pas charger cette icone.
 	{
@@ -344,8 +331,8 @@
 		}
 		else
 		{
-			pIcon->fWidth = pViewportConf->iIconSize;
-			pIcon->fHeight = pViewportConf->iIconSize;
+			pIcon->fWidth = pViewport->iIconSize;
+			pIcon->fHeight = pViewport->iIconSize;
 		
 			pIcon->fScale = 1.;
 			pIcon->fAlpha = 1.;
@@ -354,97 +341,88 @@
 			pIcon->fGlideScale = 1.;
 		}
 	}
+	
+	//\____________________ tant qu'on y est, on calcule leur position.
+	_compute_icons_position (pDesklet, pViewport);
 }
 
 
 static void render (cairo_t *pCairoContext, CairoDesklet *pDesklet)
 {
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	//g_print ("%s(%x)\n", __func__, pViewportConf);
-	if (pViewportConf == NULL)
+	CDViewportParameters *pData = (CDViewportParameters *) pDesklet->pRendererData;
+	//g_print ("%s(%x)\n", __func__, pViewport);
+	if (pData == NULL)
 		return ;
 	
-	double fRadius = pViewportConf->iRadius;
-	double fLineWidth = pViewportConf->iLineWidth;
-	// le cadre.
-	cairo_set_line_width (pCairoContext, pViewportConf->iLineWidth);
-	if (pViewportConf->bRoundedRadius)
-	{
-		cairo_translate (pCairoContext, 0., .5 * fLineWidth);
-		cairo_dock_draw_rounded_rectangle (pCairoContext,
-			fRadius,
-			fLineWidth,
-			pDesklet->container.iWidth - 2 * fRadius - fLineWidth,
-			pDesklet->container.iHeight - 2*fLineWidth);
-	}
-	else
-	{
-		cairo_move_to (pCairoContext, 0., 0.);
-		cairo_rel_line_to (pCairoContext,
-			0.,
-			pDesklet->container.iHeight - fRadius - fLineWidth);
-		cairo_rel_line_to (pCairoContext,
-			pViewportConf->iRadius,
-			pViewportConf->iRadius);
-		cairo_rel_line_to (pCairoContext,
-			pDesklet->container.iWidth - fRadius - fLineWidth,
-			0.);
-	}
-	cairo_set_source_rgba (pCairoContext, pViewportConf->fLineColor[0], pViewportConf->fLineColor[1], pViewportConf->fLineColor[2], pViewportConf->fLineColor[3]);
-	cairo_stroke (pCairoContext);
-	
-	// les icones.
-	double w = pDesklet->container.iWidth - 2 * pViewportConf->fMargin;
-	double h = pDesklet->container.iHeight - 2 * pViewportConf->fMargin;
-	int dh = myLabels.iLabelSize;  // taille verticale ajoutee a chaque icone.
-	int dw = 2 * dh;  // taille horizontale ajoutee a chaque icone.
-	if( pViewportConf->iMaxOffsetY == 0 )
-	{
-		dh = (h - pViewportConf->iNbLines * (pViewportConf->iIconSize + myLabels.iLabelSize)) / pViewportConf->iNbLines;  // ecart entre 2 lignes.
-	}
-	if( pViewportConf->iMaxOffsetX == 0 )
-	{
-		dw = (w - pViewportConf->iNbColumns * pViewportConf->iIconSize) / pViewportConf->iNbColumns;  // ecart entre 2 colonnes.
-	}
-	
-	// on determine la 1ere icone a tracer : l'icone suivant l'icone pointee.
-	
-	double x = pViewportConf->fMargin + dw/2, y = pViewportConf->fMargin + dh/2;
-	int q = 0;
-	Icon *pIcon;
-	GList *ic;
-	GList *pVisibleIcons = NULL;
-	for (ic = pDesklet->icons; ic != NULL; ic = ic->next)
-	{
-		pIcon = ic->data;
-		if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
-			continue;
-		
-		pIcon->fDrawX = x - pViewportConf->iCurrentOffsetX;
-		pIcon->fDrawY = y - pViewportConf->iCurrentOffsetY;
-		
-		x += pViewportConf->iIconSize + dw;
-		q ++;
-		if (q == pViewportConf->iNbColumns)
-		{
-			q = 0;
-			x = pViewportConf->fMargin + dw/2;
-			y += pViewportConf->iIconSize + myLabels.iLabelSize + dh;
-		}
-		// On ne dessine que les icones qui sont visibles
-		if( pIcon->fDrawX - pViewportConf->fMargin + dw/2 >= 0                &&
-		    pIcon->fDrawY - pViewportConf->fMargin + myLabels.iLabelSize >= 0 &&
-		    pIcon->fDrawX - pViewportConf->fMargin + dw/2 <= w - (pViewportConf->iIconSize + dw)          &&
-		    pIcon->fDrawY - pViewportConf->fMargin + myLabels.iLabelSize <= h - (pViewportConf->iIconSize + myLabels.iLabelSize + dh))
-		{
-			pVisibleIcons = g_list_append(pVisibleIcons, pIcon);
-		}
-	}
-	
-	GList *pFirstDrawnElement = cairo_dock_get_first_drawn_element_linear (pVisibleIcons);
+	//\____________________ On dessine les barres de defilement.
+	if (pData != NULL && pData->iDeltaHeight != 0)
+	{
+		cairo_save (pCairoContext);
+		cairo_set_line_width (pCairoContext, 2.);
+		
+		double x_arrow = pDesklet->container.iWidth - pData->fScrollbarIconGap - pData->fScrollbarWidth/2;  // pointe de la fleche.
+		double y_arrow_top, y_arrow_bottom;
+		y_arrow_top = 2.;
+		y_arrow_bottom = pDesklet->container.iHeight - 2.;
+		
+		if (pData->iScrollOffset != 0)  // fleche vers le haut.
+		{
+			cairo_move_to (pCairoContext, x_arrow, y_arrow_top);
+			cairo_rel_line_to (pCairoContext, pData->fScrollbarWidth/2, pData->fArrowHeight);
+			cairo_rel_line_to (pCairoContext, -pData->fScrollbarWidth, 0.);
+			cairo_close_path (pCairoContext);
+			
+			cairo_set_source_rgba (pCairoContext, pData->color_scrollbar_inside[0], pData->color_scrollbar_inside[1], pData->color_scrollbar_inside[2], pData->color_scrollbar_inside[3]);
+			cairo_fill_preserve (pCairoContext);
+			
+			cairo_set_source_rgba (pCairoContext, pData->color_scrollbar_line[0], pData->color_scrollbar_line[1], pData->color_scrollbar_line[2], pData->color_scrollbar_line[3]);
+			cairo_stroke (pCairoContext);
+		}
+		if (pData->iScrollOffset != pData->iDeltaHeight)  // fleche vers le bas.
+		{
+			cairo_move_to (pCairoContext, x_arrow, y_arrow_bottom);
+			cairo_rel_line_to (pCairoContext, pData->fScrollbarWidth/2, - pData->fArrowHeight);
+			cairo_rel_line_to (pCairoContext, -pData->fScrollbarWidth, 0.);
+			cairo_close_path (pCairoContext);
+			
+			cairo_set_source_rgba (pCairoContext, pData->color_scrollbar_inside[0], pData->color_scrollbar_inside[1], pData->color_scrollbar_inside[2], pData->color_scrollbar_inside[3]);
+			cairo_fill_preserve (pCairoContext);
+			
+			cairo_set_source_rgba (pCairoContext, pData->color_scrollbar_line[0], pData->color_scrollbar_line[1], pData->color_scrollbar_line[2], pData->color_scrollbar_line[3]);
+			cairo_stroke (pCairoContext);
+		}
+		// scrollbar outline
+		cairo_move_to (pCairoContext, x_arrow - pData->fScrollbarWidth/2, y_arrow_top + pData->fArrowHeight + pData->fScrollbarArrowGap);
+		cairo_rel_line_to (pCairoContext, pData->fScrollbarWidth, 0.);
+		cairo_rel_line_to (pCairoContext, 0., y_arrow_bottom - y_arrow_top - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap));
+		cairo_rel_line_to (pCairoContext, -pData->fScrollbarWidth, 0.);
+		cairo_close_path (pCairoContext);
+		
+		cairo_set_source_rgba (pCairoContext, pData->color_scrollbar_inside[0], pData->color_scrollbar_inside[1], pData->color_scrollbar_inside[2], pData->color_scrollbar_inside[3]);
+		cairo_fill_preserve (pCairoContext);
+		
+		cairo_set_source_rgba (pCairoContext, pData->color_scrollbar_line[0], pData->color_scrollbar_line[1], pData->color_scrollbar_line[2], pData->color_scrollbar_line[3]);
+		cairo_stroke (pCairoContext);
+		// grip
+		double fFrameHeight = pDesklet->container.iHeight ;  // hauteur du cadre.
+		double fGripHeight = fFrameHeight / (fFrameHeight + pData->iDeltaHeight) * (y_arrow_bottom - y_arrow_top - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap));
+		double ygrip = (double) pData->iScrollOffset / pData->iDeltaHeight * (y_arrow_bottom - y_arrow_top - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap) - fGripHeight);
+		cairo_set_source_rgba (pCairoContext, pData->color_grip[0], pData->color_grip[1], pData->color_grip[2], pData->color_grip[3]);
+		cairo_move_to (pCairoContext, x_arrow - pData->fScrollbarWidth/2 + 1, y_arrow_top + pData->fArrowHeight + pData->fScrollbarArrowGap + ygrip);
+		cairo_rel_line_to (pCairoContext, pData->fScrollbarWidth - 2, 0.);
+		cairo_rel_line_to (pCairoContext, 0., fGripHeight);
+		cairo_rel_line_to (pCairoContext, - (pData->fScrollbarWidth - 2), 0.);
+		cairo_fill (pCairoContext);
+		
+		cairo_restore (pCairoContext);
+	}
+	
+	//\____________________ On dessine les icones.
+	GList *pFirstDrawnElement = cairo_dock_get_first_drawn_element_linear (pDesklet->icons);
 	if (pFirstDrawnElement == NULL)
 		return;
-	ic = pFirstDrawnElement;
+	Icon *pIcon;
+	GList *ic = pFirstDrawnElement;
 	do
 	{
 		pIcon = ic->data;
@@ -456,7 +434,6 @@
 			
 			cairo_restore (pCairoContext);
 			
-			
 			if (pIcon->pTextBuffer != NULL)
 			{
 				cairo_save (pCairoContext);
@@ -526,91 +503,103 @@
 				cairo_restore (pCairoContext);
 			}
 		}
-		ic = cairo_dock_get_next_element (ic, pVisibleIcons);
+		ic = cairo_dock_get_next_element (ic, pDesklet->icons);
 	}
 	while (ic != pFirstDrawnElement);
+	
+	// la scrollbar
+	
 }
 
 
 static void render_opengl (CairoDesklet *pDesklet)
 {
-	CDViewportParameters *pViewportConf = (CDViewportParameters *) pDesklet->pRendererData;
-	if (pViewportConf == NULL)
+	static CairoDockGLPath *pScrollPath = NULL;
+	
+	CDViewportParameters *pData = (CDViewportParameters *) pDesklet->pRendererData;
+	//g_print ("%s(%x)\n", __func__, pViewport);
+	if (pData == NULL)
 		return ;
 	
-	// le cadre.
-	double fRadius = (pViewportConf->bRoundedRadius ? pViewportConf->iRadius : 0.);
-	double fLineWidth = pViewportConf->iLineWidth;
-	if (fLineWidth != 0 && pViewportConf->fLineColor[3] != 0)
-	{
-		cairo_dock_draw_rounded_rectangle_opengl (pDesklet->container.iWidth - 2 * fRadius,
-			pDesklet->container.iHeight,
-			fRadius,
-			fLineWidth,
-			pViewportConf->fLineColor);
-		glTranslatef (-pDesklet->container.iWidth/2, -pDesklet->container.iHeight/2, 0.);
-	}
-	
-	glTranslatef (-pDesklet->container.iWidth/2, -pDesklet->container.iHeight/2, 0.);
-	
-	// les icones.
-	double w = pDesklet->container.iWidth - 2 * pViewportConf->fMargin;
-	double h = pDesklet->container.iHeight - 2 * pViewportConf->fMargin;
-	int dh = myLabels.iLabelSize;  // taille verticale ajoutee a chaque icone.
-	int dw = 2 * dh;  // taille horizontale ajoutee a chaque icone.
-	if( pViewportConf->iMaxOffsetY == 0 )
-	{
-		// ecart entre 2 lignes si il faut repartir vertivalement les icones.
-		dh = (h - pViewportConf->iNbLines * (pViewportConf->iIconSize + myLabels.iLabelSize) - 2*pViewportConf->fMargin - myLabels.iLabelSize) / pViewportConf->iNbLines;
-	}
-	if( pViewportConf->iMaxOffsetX == 0 )
-	{
-		// ecart entre 2 colonnes si il faut repartir horizontalement les icones.
-		dw = (w - pViewportConf->iNbColumns * pViewportConf->iIconSize - 2*pViewportConf->fMargin) / pViewportConf->iNbColumns;
-	}
-	
+	glPushMatrix ();
+	glTranslatef (- pDesklet->container.iWidth/2, - pDesklet->container.iHeight / 2, 0.);
+	_cairo_dock_set_blend_alpha ();
+	_cairo_dock_disable_texture ();
+	
+	//\____________________ On dessine les barres de defilement.
+	if (pData != NULL && pData->iDeltaHeight != 0)
+	{
+		glPushMatrix ();
+		if (pScrollPath == NULL)
+			pScrollPath = cairo_dock_new_gl_path (4, 0., 0., 0, 0);  // des triangles ou des rectangles => 4 points max.
+		glLineWidth (2.);
+		
+		double x_arrow = pDesklet->container.iWidth - pData->fScrollbarIconGap - pData->fScrollbarWidth/2;  // pointe de la fleche.
+		double y_arrow_top, y_arrow_bottom;
+		y_arrow_bottom = 2.;
+		y_arrow_top = pDesklet->container.iHeight - 2.;
+		
+		if (pData->iScrollOffset != 0)  // fleche vers le haut.
+		{
+			cairo_dock_gl_path_move_to (pScrollPath, x_arrow, y_arrow_top);
+			cairo_dock_gl_path_rel_line_to (pScrollPath, pData->fScrollbarWidth/2, -pData->fArrowHeight);
+			cairo_dock_gl_path_rel_line_to (pScrollPath, -pData->fScrollbarWidth, 0.);
+			
+			glColor4f (pData->color_scrollbar_inside[0], pData->color_scrollbar_inside[1], pData->color_scrollbar_inside[2], pData->color_scrollbar_inside[3]);
+			cairo_dock_fill_gl_path (pScrollPath, 0);
+			
+			glColor4f (pData->color_scrollbar_line[0], pData->color_scrollbar_line[1], pData->color_scrollbar_line[2], pData->color_scrollbar_line[3]);
+			cairo_dock_stroke_gl_path (pScrollPath, TRUE);  // TRUE <=> close
+		}
+		if (pData->iScrollOffset != pData->iDeltaHeight)  // fleche vers le bas.
+		{
+			cairo_dock_gl_path_move_to (pScrollPath, x_arrow, y_arrow_bottom);
+			cairo_dock_gl_path_rel_line_to (pScrollPath, pData->fScrollbarWidth/2, pData->fArrowHeight);
+			cairo_dock_gl_path_rel_line_to (pScrollPath, -pData->fScrollbarWidth, 0.);
+			
+			glColor4f (pData->color_scrollbar_inside[0], pData->color_scrollbar_inside[1], pData->color_scrollbar_inside[2], pData->color_scrollbar_inside[3]);
+			cairo_dock_fill_gl_path (pScrollPath, 0);
+			
+			glColor4f (pData->color_scrollbar_line[0], pData->color_scrollbar_line[1], pData->color_scrollbar_line[2], pData->color_scrollbar_line[3]);
+			cairo_dock_stroke_gl_path (pScrollPath, TRUE);  // TRUE <=> close
+		}
+		
+		// scrollbar outline
+		cairo_dock_gl_path_move_to (pScrollPath, x_arrow - pData->fScrollbarWidth/2, y_arrow_bottom + pData->fArrowHeight + pData->fScrollbarArrowGap);
+		cairo_dock_gl_path_rel_line_to (pScrollPath, pData->fScrollbarWidth, 0.);
+		cairo_dock_gl_path_rel_line_to (pScrollPath, 0., y_arrow_top - y_arrow_bottom - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap));
+		cairo_dock_gl_path_rel_line_to (pScrollPath, -pData->fScrollbarWidth, 0.);
+		
+		glColor4f (pData->color_scrollbar_inside[0], pData->color_scrollbar_inside[1], pData->color_scrollbar_inside[2], pData->color_scrollbar_inside[3]);
+		cairo_dock_fill_gl_path (pScrollPath, 0);
+		
+		glColor4f (pData->color_scrollbar_line[0], pData->color_scrollbar_line[1], pData->color_scrollbar_line[2], pData->color_scrollbar_line[3]);
+		cairo_dock_stroke_gl_path (pScrollPath, TRUE);
+		
+		// grip
+		double fFrameHeight = pDesklet->container.iHeight;  // hauteur du cadre.
+		double fGripHeight = fFrameHeight / (fFrameHeight + pData->iDeltaHeight) * (y_arrow_top - y_arrow_bottom - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap));
+		double ygrip = (double) pData->iScrollOffset / pData->iDeltaHeight * (y_arrow_top - y_arrow_bottom - 2*(pData->fArrowHeight + pData->fScrollbarArrowGap) - fGripHeight);
+		glColor4f (pData->color_grip[0], pData->color_grip[1], pData->color_grip[2], pData->color_grip[3]);
+		cairo_dock_gl_path_move_to (pScrollPath, x_arrow - pData->fScrollbarWidth/2, y_arrow_top - (pData->fArrowHeight + pData->fScrollbarArrowGap) - ygrip);
+		cairo_dock_gl_path_rel_line_to (pScrollPath, pData->fScrollbarWidth, 0.);
+		cairo_dock_gl_path_rel_line_to (pScrollPath, 0., - fGripHeight);
+		cairo_dock_gl_path_rel_line_to (pScrollPath, -pData->fScrollbarWidth, 0.);
+		cairo_dock_fill_gl_path (pScrollPath, 0);
+		
+		glPopMatrix ();
+	}
+	
+	//\____________________ On dessine les icones.
 	_cairo_dock_enable_texture ();
 	_cairo_dock_set_blend_alpha ();
 	_cairo_dock_set_alpha (1.);
 	
-	
-	double x = pViewportConf->fMargin + dw/2, y = pViewportConf->fMargin + myLabels.iLabelSize + dh/2;
-	int q = 0;
-	Icon *pIcon;
-	GList *ic;
-	GList *pVisibleIcons = NULL;
-	for (ic = pDesklet->icons; ic != NULL; ic = ic->next)
-	{
-		pIcon = ic->data;
-		if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
-			continue;
-		
-		pIcon->fDrawX = x - pViewportConf->iCurrentOffsetX;
-		pIcon->fDrawY = y - pViewportConf->iCurrentOffsetY;
-		
-		x += pViewportConf->iIconSize + dw;
-		q ++;
-		if (q == pViewportConf->iNbColumns)
-		{
-			q = 0;
-			x = pViewportConf->fMargin + dw/2;
-			y += pViewportConf->iIconSize + myLabels.iLabelSize + dh;
-		}
-		// On ne dessine que les icones qui sont visibles
-		if( pIcon->fDrawX - pViewportConf->fMargin - dw/2 >= 0                &&
-		    pIcon->fDrawY - pViewportConf->fMargin - myLabels.iLabelSize - dh/2 >= 0 &&
-		    pIcon->fDrawX - pViewportConf->fMargin - dw/2 <= w - (pViewportConf->iIconSize + dw/2)          &&
-		    pIcon->fDrawY - pViewportConf->fMargin - myLabels.iLabelSize - dh/2 <= h - (pViewportConf->iIconSize + myLabels.iLabelSize + dh/2))
-		{
-			pVisibleIcons = g_list_append(pVisibleIcons, pIcon);
-		}
-	}
-	
-	
-	GList *pFirstDrawnElement = cairo_dock_get_first_drawn_element_linear (pVisibleIcons);
+	GList *pFirstDrawnElement = cairo_dock_get_first_drawn_element_linear (pDesklet->icons);
 	if (pFirstDrawnElement == NULL)
 		return;
-	ic = pFirstDrawnElement;
+	Icon *pIcon;
+	GList *ic = pFirstDrawnElement;
 	do
 	{
 		pIcon = ic->data;
@@ -626,14 +615,6 @@
 			_cairo_dock_apply_texture_at_size (pIcon->iIconTexture, pIcon->fWidth, pIcon->fHeight);
 			
 			/// generer une notification ...
-			/*if (pIcon->bHasIndicator && g_pIndicatorBuffer.iTexture != 0)
-			{
-				glPushMatrix ();
-				glTranslatef (0., - pIcon->fHeight/2 + g_pIndicatorBuffer.iHeight/2 * pIcon->fWidth / g_pIndicatorBuffer.iWidth, 0.);
-				_cairo_dock_apply_texture_at_size (g_pIndicatorBuffer.iTexture, pIcon->fWidth, g_pIndicatorBuffer.iHeight * pIcon->fWidth / g_pIndicatorBuffer.iWidth);
-				glPopMatrix ();
-			}*/
-			
 			if (pIcon->iLabelTexture != 0)
 			{
 				glPushMatrix ();
@@ -684,10 +665,11 @@
 			glPopMatrix ();
 		}
 
-		ic = cairo_dock_get_next_element (ic, pVisibleIcons);
+		ic = cairo_dock_get_next_element (ic, pDesklet->icons);
 		
 	} while (ic != pFirstDrawnElement);
 	
+	glPopMatrix ();
 	_cairo_dock_disable_texture ();
 }
 
@@ -698,7 +680,7 @@
 	CairoDeskletRenderer *pRenderer = g_new0 (CairoDeskletRenderer, 1);
 	pRenderer->render 			= (CairoDeskletRenderFunc) render;
 	pRenderer->configure 		= (CairoDeskletConfigureRendererFunc) configure;
-	pRenderer->load_data 		= (CairoDeskletLoadRendererDataFunc) load_data;
+	pRenderer->load_data 		= (CairoDeskletLoadRendererDataFunc) NULL;  // nothing to load.
 	pRenderer->free_data 		= (CairoDeskletFreeRendererDataFunc) free_data;
 	pRenderer->calculate_icons 	= (CairoDeskletCalculateIconsFunc) calculate_icons;
 	pRenderer->render_opengl 	= (CairoDeskletGLRenderFunc) render_opengl;

=== modified file 'desklet-rendering/src/rendering-desklet-viewport.h'
--- desklet-rendering/src/rendering-desklet-viewport.h	2010-08-07 01:43:25 +0000
+++ desklet-rendering/src/rendering-desklet-viewport.h	2010-09-16 01:12:52 +0000
@@ -17,7 +17,6 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
 #ifndef __RENDERING_DESKLET_VIEWPORT__
 #define  __RENDERING_DESKLET_VIEWPORT__
 
@@ -26,31 +25,35 @@
 
 typedef struct {
 	// from config
-	gboolean bRoundedRadius;
-	gint iRadius;
-	gdouble fLineColor[4];
-	gint iLineWidth;
-	gint iGapBetweenIcons;
-	gint iMinimumIconSize;
-	gboolean bInfiniteWidth;
-	gboolean bInfiniteHeight;
+	gboolean bHorizontalScrolBar;
+	gint iIconGapX, iIconGapY;
+	gdouble color_scrollbar_line[4];
+	gdouble color_scrollbar_inside[4];
+	gdouble color_grip[4];
 	// computed data
+	gint nRowsX;
+	gint nRowsY;
+	gint iDeltaHeight;  // hauteur scrollable, en pixels
+	gint iScrollOffset;  // hauteur scrollee, en pixels, positive.
+	gboolean bDraggingScrollbar;  // si le clic est couramment enfonce sur la scrollbar.
+	guint iSidPressEvent;  // sid du clic
+	guint iSidReleaseEvent;  // sid du relachement du clic
+	gint iClickY;  // hauteur ou on a clique, en coordonnees fenetre
+	gint iClickOffset;  // hauteur scrollee au moment du clic
 	gdouble fMargin;
-	gint iNbIcons;
-	GList* iFirstIconToShow;
+	
 	gint iIconSize;
-	gint iNbLines, iNbColumns;
-	gint iMaxOffsetX;
-	gint iMaxOffsetY;
-	// current state
-	gint iCurrentOffsetX;
-	gint iCurrentOffsetY;
-	gint fCurrentPanXSpeed;
-	gint fCurrentPanYSpeed;
+	gdouble fArrowHeight;
+	gdouble fArrowGap;
+	gdouble fScrollbarArrowGap;
+	gdouble fScrollbarWidth;
+	gdouble fScrollbarIconGap;
 	} CDViewportParameters;
 
 
 void rendering_register_viewport_desklet_renderer (void);
 
+//gboolean cd_slide_on_click (gpointer data, Icon *pClickedIcon, CairoDesklet *pDesklet, guint iButtonState);
+
 
 #endif

=== modified file 'desklet-rendering/src/rendering-init.c'
--- desklet-rendering/src/rendering-init.c	2010-08-07 01:43:25 +0000
+++ desklet-rendering/src/rendering-init.c	2010-09-16 01:12:52 +0000
@@ -52,7 +52,9 @@
 	
 	//\_______________ On enregistre les decorations.
 	cd_rendering_register_desklet_decorations ();
-
+	
+	//cairo_dock_register_notification (CAIRO_DOCK_CLICK_ICON, (CairoDockNotificationFunc) cd_slide_on_click, CAIRO_DOCK_RUN_FIRST, NULL);
+	
 	CD_APPLET_SET_CONTAINER_TYPE (CAIRO_DOCK_MODULE_IS_PLUGIN);
 	CD_APPLET_ATTACH_TO_INTERNAL_MODULE ("Desklets");
 CD_APPLET_DEFINE_END

=== removed file 'dialog-rendering/data/messages'
--- dialog-rendering/data/messages	2010-08-07 01:43:25 +0000
+++ dialog-rendering/data/messages	1970-01-01 00:00:00 +0000
@@ -1,50 +0,0 @@
-_("Comics")
-
-_("Corner radius:")
-
-_("Border width:")
-
-_("Bubble's line colour:")
-
-_("Modern")
-
-_("Corner radius:")
-
-_("Border width:")
-
-_("Bubble's line colour:")
-
-_("Space between lines of the tip :")
-
-_("3D plane")
-
-_("Corner radius:")
-
-_("Border width of the plane :")
-
-_("Colour of the plane's line :")
-
-_("Colour of the plane :")
-
-_("Tooltip")
-
-_("Corner radius:")
-
-_("Border width:")
-
-_("Bubble's line colour:")
-
-_("Colour of the margin :")
-
-_("Curly")
-
-_("Corner radius:")
-
-_("Border width:")
-
-_("Bubble's line colour:")
-
-_("Curvature of the tip :")
-
-_("Curve the sides too?")
-

=== modified file 'dialog-rendering/src/applet-decorator-tooltip.c'
--- dialog-rendering/src/applet-decorator-tooltip.c	2010-08-07 01:43:25 +0000
+++ dialog-rendering/src/applet-decorator-tooltip.c	2010-09-16 01:12:52 +0000
@@ -35,7 +35,7 @@
 	int iIconOffset = myDialogs.iDialogIconSize/2;
 	pDialog->iRightMargin = iMargin;
 	pDialog->iLeftMargin = iIconOffset + iMargin;
-	pDialog->iTopMargin = MAX (iIconOffset, _CAIRO_DIALOG_TOOLTIP_MARGIN);
+	pDialog->iTopMargin = iIconOffset + _CAIRO_DIALOG_TOOLTIP_MARGIN + myConfig.iTooltipLineWidth;
 	pDialog->iBottomMargin = _CAIRO_DIALOG_TOOLTIP_MARGIN;
 	pDialog->iMinBottomGap = _CAIRO_DIALOG_TOOLTIP_MIN_GAP;
 	pDialog->iMinFrameWidth = _CAIRO_DIALOG_TOOLTIP_ARROW_WIDTH;
@@ -43,7 +43,7 @@
 	pDialog->container.fRatio = 0.;
 	pDialog->container.bUseReflect = FALSE;
 	pDialog->iIconOffsetX = iIconOffset;
-	pDialog->iIconOffsetY = iIconOffset;
+	pDialog->iIconOffsetY = pDialog->iTopMargin;
 }
 
 

=== removed file 'dnd2share/data/messages'
--- dnd2share/data/messages	2010-08-07 01:43:25 +0000
+++ dnd2share/data/messages	1970-01-01 00:00:00 +0000
@@ -1,158 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Leave empty to use the default one.")
-
-_("Image filename:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("Depending on your WindowManager, you may be able to move this with ALT + left-click.")
-
-_("Desklet position (x, y):")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Info-bubbles")
-
-_("Enable info-bubbles?")
-
-_("in seconds.")
-
-_("Duration of the info-bubbles :")
-
-_("Behaviour")
-
-_("Number of items to keep in the history :")
-
-_("Keep a copy of each uploaded image?")
-
-_("This will override the image setting.")
-
-_("If so, display the last image on the icon?")
-
-_("Animation of the icon during upload :")
-
-_("in KB/s - 0 means unlimited")
-
-_("Maximum upload rate:")
-
-_("Sites")
-
-_("Preferred site for texts hosting :")
-
-_("Custom")
-
-_("Pastebin.ca")
-
-_("Preferred site for images hosting :")
-
-_("Custom")
-
-_("Uppix.net")
-
-_("Imagebin.ca")
-
-_("ImageShack.us")
-
-_("Preferred site for videos hosting :")
-
-_("Custom")
-
-_("VideoBin.org")
-
-_("Preferred site for files hosting :")
-
-_("Custom")
-
-_("dl.free.fr")
-
-_("DropBox")
-
-_("Custom script for text upload : ")
-
-_("Custom script for image upload : ")
-
-_("Custom script for video upload : ")
-
-_("Custom script for file upload : ")
-
-_("Leave empty to upload files into '~/Dropbox/Public'.")
-
-_("Path of the DropBox folder :")
-
-_("Post text as Anonymous ?")
-

=== modified file 'dnd2share/src/applet-notifications.c'
--- dnd2share/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ dnd2share/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -392,78 +392,92 @@
 CD_APPLET_ON_BUILD_MENU_BEGIN
 	GtkWidget *pModuleSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
 	
-	CD_APPLET_ADD_IN_MENU (D_("Send the clipboard's content"), _send_clipboard, CD_APPLET_MY_MENU);
-	
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Send the clipboard's content"), GTK_STOCK_PASTE, _send_clipboard, CD_APPLET_MY_MENU);
+	
+	GtkWidget *pHistoryMenu = gtk_menu_new ();
+	GtkWidget *mi = gtk_image_menu_item_new_with_label (D_("History"));
+	
+	GtkWidget *im = gtk_image_new_from_stock (GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), im);
+	
+	gtk_menu_shell_append (GTK_MENU_SHELL (CD_APPLET_MY_MENU), mi); 
+	gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), pHistoryMenu);
+	
+	//GtkWidget *pHistoryMenu = CD_APPLET_ADD_SUB_MENU_WITH_IMAGE (D_("History"), CD_APPLET_MY_MENU, GTK_STOCK_INDEX);
 	if (myData.pUpoadedItems != NULL)
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Clear History"), GTK_STOCK_CLEAR, _clear_history, CD_APPLET_MY_MENU);
-	
-	CDSiteBackend *pBackend;
-	CDUploadedItem *pItem;
-	GtkWidget *pItemSubMenu;
-	gchar *str;
-	gchar *cName = NULL, *cURI = NULL, *cIconName = NULL;
-	gboolean bIsDirectory;
-	int iVolumeID;
-	double fOrder;
-	int i;
-	GList *it;
-	for (it = myData.pUpoadedItems; it != NULL; it = it->next)
 	{
-		pItem = it->data;
-		
-		// on cherche une miniature a mettre dans le menu.
-		gchar *cPreview = NULL;
-		if (pItem->iFileType == CD_TYPE_IMAGE)
-		{
-			cPreview = g_strdup_printf ("%s/%s", myData.cWorkingDirPath, pItem->cItemName);
-			if (! g_file_test (cPreview, G_FILE_TEST_EXISTS))
-			{
-				g_free (cPreview);
-				cPreview = cairo_dock_search_icon_s_path ("image-x-generic");;
-			}
-		}
-		else if (pItem->iFileType == CD_TYPE_TEXT)
-		{
-			cPreview = cairo_dock_search_icon_s_path ("text-x-generic");
-		}
-		else if (pItem->iFileType == CD_TYPE_VIDEO)
-		{
-			cPreview = cairo_dock_search_icon_s_path ("video-x-generic");
-		}
-		if (cPreview == NULL)
-		{
-			cairo_dock_fm_get_file_info (pItem->cLocalPath, &cName, &cURI, &cPreview, &bIsDirectory, &iVolumeID, &fOrder, 0);
-			g_free (cName);
-			cName = NULL;
-			g_free (cURI);
-			cURI = NULL;
-		}
-		
-		// on cree un sous-menu pour ce fichier.
-		str = strchr (pItem->cFileName, '\n');
-		if (str)
-			*str = '\0';
-		pItemSubMenu = CD_APPLET_ADD_SUB_MENU_WITH_IMAGE (pItem->cFileName, pModuleSubMenu, cPreview);
-		if (str)
-			*str = '\n';
-		g_free (cPreview);
-		
-		// on le peuple avec les liens.
-		pBackend = &myData.backends[pItem->iFileType][pItem->iSiteID];
-		for (i = 0; i < pBackend->iNbUrls; i ++)
-		{
-			//g_print ("%d) %s : ", i, pBackend->cUrlLabels[i]);
-			//g_print (" + %s\n", pItem->cDistantUrls[i]);
-			if (pItem->cDistantUrls[i] != NULL)  // peut etre null (par exemple la tiny url).
-				CD_APPLET_ADD_IN_MENU_WITH_DATA (pBackend->cUrlLabels[i], _copy_url_into_clipboard, pItemSubMenu, pItem->cDistantUrls[i]);
-		}
-		if (pItem->iFileType != CD_TYPE_TEXT)
-			CD_APPLET_ADD_IN_MENU_WITH_DATA (D_("Open file"), _show_local_file, pItemSubMenu, pItem);
-		else
-			CD_APPLET_ADD_IN_MENU_WITH_DATA (D_("Get text"), _show_local_file, pItemSubMenu, pItem);
-		
-		CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Remove from history"), GTK_STOCK_REMOVE, _remove_from_history, pItemSubMenu, pItem);
+		CDSiteBackend *pBackend;
+		CDUploadedItem *pItem;
+		GtkWidget *pItemSubMenu;
+		gchar *str;
+		gchar *cName = NULL, *cURI = NULL, *cIconName = NULL;
+		gboolean bIsDirectory;
+		int iVolumeID;
+		double fOrder;
+		int i;
+		GList *it;
+		for (it = myData.pUpoadedItems; it != NULL; it = it->next)
+		{
+			pItem = it->data;
+			
+			// on cherche une miniature a mettre dans le menu.
+			gchar *cPreview = NULL;
+			if (pItem->iFileType == CD_TYPE_IMAGE)
+			{
+				cPreview = g_strdup_printf ("%s/%s", myData.cWorkingDirPath, pItem->cItemName);
+				if (! g_file_test (cPreview, G_FILE_TEST_EXISTS))
+				{
+					g_free (cPreview);
+					cPreview = cairo_dock_search_icon_s_path ("image-x-generic");;
+				}
+			}
+			else if (pItem->iFileType == CD_TYPE_TEXT)
+			{
+				cPreview = cairo_dock_search_icon_s_path ("text-x-generic");
+			}
+			else if (pItem->iFileType == CD_TYPE_VIDEO)
+			{
+				cPreview = cairo_dock_search_icon_s_path ("video-x-generic");
+			}
+			if (cPreview == NULL)
+			{
+				cairo_dock_fm_get_file_info (pItem->cLocalPath, &cName, &cURI, &cPreview, &bIsDirectory, &iVolumeID, &fOrder, 0);
+				g_free (cName);
+				cName = NULL;
+				g_free (cURI);
+				cURI = NULL;
+			}
+			
+			// on cree un sous-menu pour ce fichier.
+			str = strchr (pItem->cFileName, '\n');
+			if (str)
+				*str = '\0';
+			pItemSubMenu = CD_APPLET_ADD_SUB_MENU_WITH_IMAGE (pItem->cFileName, pHistoryMenu, cPreview);
+			if (str)
+				*str = '\n';
+			g_free (cPreview);
+			
+			// on le peuple avec les liens.
+			pBackend = &myData.backends[pItem->iFileType][pItem->iSiteID];
+			for (i = 0; i < pBackend->iNbUrls; i ++)
+			{
+				//g_print ("%d) %s : ", i, pBackend->cUrlLabels[i]);
+				//g_print (" + %s\n", pItem->cDistantUrls[i]);
+				if (pItem->cDistantUrls[i] != NULL)  // peut etre null (par exemple la tiny url).
+					CD_APPLET_ADD_IN_MENU_WITH_DATA (pBackend->cUrlLabels[i], _copy_url_into_clipboard, pItemSubMenu, pItem->cDistantUrls[i]);
+			}
+			if (pItem->iFileType != CD_TYPE_TEXT)
+				CD_APPLET_ADD_IN_MENU_WITH_DATA (D_("Open file"), _show_local_file, pItemSubMenu, pItem);
+			else
+				CD_APPLET_ADD_IN_MENU_WITH_DATA (D_("Get text"), _show_local_file, pItemSubMenu, pItem);
+			
+			CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Remove from history"), GTK_STOCK_REMOVE, _remove_from_history, pItemSubMenu, pItem);
+		}
+		
+		CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Clear History"), GTK_STOCK_CLEAR, _clear_history, pHistoryMenu);
 	}
+	else
+		gtk_widget_set_sensitive (GTK_WIDGET (mi), FALSE);
 	
-	CD_APPLET_ADD_ABOUT_IN_MENU (CD_APPLET_MY_MENU);
+	CD_APPLET_ADD_ABOUT_IN_MENU (pModuleSubMenu);
 CD_APPLET_ON_BUILD_MENU_END

=== removed file 'dock-rendering/data/messages'
--- dock-rendering/data/messages	2010-08-07 01:43:25 +0000
+++ dock-rendering/data/messages	1970-01-01 00:00:00 +0000
@@ -1,114 +0,0 @@
-_("Inclinated Plane")
-
-_("The lower the value, the lower the point of view on the plane.")
-
-_("Height of the vanishing point:")
-
-_("Curve")
-
-_("The lower the value, the flatter the curve will appear.")
-
-_("Curvature of the curve in percent:")
-
-_("in pixels.")
-
-_("Amplitude of the curve:")
-
-_("Panel")
-
-_("At 1, the icons will have the same size as in other views.")
-
-_("Ratio to apply on icons' size :")
-
-_("smaller icons")
-
-_("normal icons")
-
-_("SimpleSlide")
-
-_("Grid")
-
-_("Space between columns:")
-
-_("Space between rows:")
-
-_("Max icon size:")
-
-_("Sinusoidal wave radius:")
-
-_("Use a linear wave rather than a sinusoidal wave?")
-
-_("Pack icons horizontally rather than vertically?")
-
-_("Display text for all icons?")
-
-_("Frame")
-
-_("Draw a background?")
-
-_("First gradient colour :")
-
-_("Second gradient colour :")
-
-_("Top to bottom gradient?")
-
-_("Left to right gradient?")
-
-_("Corner radius:")
-
-_("Border line width :")
-
-_("Border line colour :")
-
-_("Arrow width :")
-
-_("Arrow height:")
-
-_("Arrow shift percentage:")
-
-_("Parabolic")
-
-_("The higher this value, the sooner the parabola will be curved.")
-
-_("Curvature:")
-
-_("The parabola will be restricted to a rectangle of this proportion.")
-
-_("Height/width ratio:")
-
-_("0 represents a flat wave, 1 represents maximum wave curvature.")
-
-_("Magnitude of the wave:")
-
-_("Curve towards the outside?")
-
-_("in pixels.")
-
-_("Space between icons and their captions:")
-
-_("This may recquire more CPU during the unfolding animation, except if you launch Cairo-Dock with OpenGL.")
-
-_("Draw captions while unfolding?")
-
-_("Rainbow")
-
-_("Space between rows:")
-
-_("Space between icons:")
-
-_("0 represents a flat wave, 1 means the wave is identical to other views.")
-
-_("Magnitude of the wave:")
-
-_("Number of icons on the first row:")
-
-_("in degrees. The lower the value, the narrower the cone. 180\302\260 represents a wide open cone.")
-
-_("Cone width:")
-
-_("Set transparency to 0 to not use it. This is quite slow with cairo.")
-
-_("Bow colour:")
-
-_("Line colour:")
-

=== modified file 'dock-rendering/src/rendering-3D-plane.c'
--- dock-rendering/src/rendering-3D-plane.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-3D-plane.c	2010-09-16 01:12:52 +0000
@@ -140,10 +140,6 @@
 
 static void cd_rendering_make_3D_separator (Icon *icon, cairo_t *pCairoContext, CairoDock *pDock, gboolean bIncludeEdges, gboolean bBackGround)
 {
-	gboolean bDirectionUp = pDock->container.bDirectionUp;
-	gboolean bIsHorizontal = pDock->container.bIsHorizontal;
-	bDirectionUp = TRUE;
-	bIsHorizontal = TRUE;
 	double hi = myIcons.fReflectSize * pDock->container.fRatio + myBackground.iFrameMargin;
 	hi = (pDock->container.bDirectionUp ? pDock->container.iHeight - (icon->fDrawY + icon->fHeight * icon->fScale) : icon->fDrawY);
 	double fLeftInclination = (icon->fDrawX - pDock->container.iWidth / 2) / iVanishingPointY;
@@ -152,7 +148,7 @@
 	double fHeight, fBigWidth, fLittleWidth;
 	if (bIncludeEdges)
 	{
-		fHeight = (bBackGround ? pDock->iDecorationsHeight - hi : hi) + myBackground.iDockLineWidth;
+		fHeight = (bBackGround ? pDock->iDecorationsHeight - hi : hi) + 2*myBackground.iDockLineWidth;
 		fBigWidth = fabs (fRightInclination - fLeftInclination) * (bBackGround ? iVanishingPointY : iVanishingPointY + fHeight);
 		fLittleWidth = fabs (fRightInclination - fLeftInclination) * (bBackGround ? iVanishingPointY - fHeight : iVanishingPointY);
 	}
@@ -166,71 +162,34 @@
 	double fDeltaXRight = fHeight * fRightInclination;
 	//g_print ("fBigWidth : %.2f ; fLittleWidth : %.2f\n", fBigWidth, fLittleWidth);
 	
-	int sens;
 	double fDockOffsetX, fDockOffsetY;
-	if (bDirectionUp)
-	{
-		sens = 1;
-		if (bIncludeEdges)
-			fDockOffsetY = pDock->container.iHeight - fHeight - (bBackGround ? myBackground.iDockLineWidth + hi : 0);
-		else
-			fDockOffsetY = pDock->container.iHeight - fHeight - myBackground.iDockLineWidth;
-	}
-	else
-	{
-		sens = -1;
-		if (bIncludeEdges)
-			fDockOffsetY = fHeight + (bBackGround ? myBackground.iDockLineWidth + hi : 0);
-		else
-			fDockOffsetY = fHeight + myBackground.iDockLineWidth;
-	}
 	if (bIncludeEdges)
+	{
 		fDockOffsetX = icon->fDrawX - (bBackGround ? fHeight * fLeftInclination : 0);
+		fDockOffsetY = pDock->container.iHeight - fHeight - (bBackGround ? myBackground.iDockLineWidth + hi : -.5*myBackground.iDockLineWidth);
+	}
 	else
+	{
 		fDockOffsetX = icon->fDrawX - (fHeight - hi) * fLeftInclination;
-	
-	if (bIsHorizontal)
-	{
-		cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);  // coin haut gauche.
-		cairo_move_to (pCairoContext, 0, 0);  // coin haut gauche.
-		
-		cairo_rel_line_to (pCairoContext, fLittleWidth, 0);
-		cairo_rel_line_to (pCairoContext, fDeltaXRight, sens * fHeight);
-		cairo_rel_line_to (pCairoContext, - fBigWidth, 0);
-		cairo_rel_line_to (pCairoContext, - fDeltaXLeft, - sens * fHeight);
-		
-		if (my_iDrawSeparator3D == CAIRO_DOCK_FLAT_SEPARATOR)
-		{
-			if (! bDirectionUp)
-				cairo_scale (pCairoContext, 1, -1);
-			cairo_set_source_surface (pCairoContext, my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL], MIN (0, (fHeight + hi) * fLeftInclination), 0);
-		}
-	}
-	else
-	{
-		cairo_translate (pCairoContext, fDockOffsetY, fDockOffsetX);  // coin haut gauche.
-		cairo_move_to (pCairoContext, 0, 0);  // coin haut gauche.
-		
-		cairo_rel_line_to (pCairoContext, 0, fLittleWidth);
-		cairo_rel_line_to (pCairoContext, sens * fHeight, fDeltaXRight);
-		cairo_rel_line_to (pCairoContext, 0, - fBigWidth);
-		cairo_rel_line_to (pCairoContext, - sens * fHeight, - fDeltaXLeft);
-		
-		if (my_iDrawSeparator3D == CAIRO_DOCK_FLAT_SEPARATOR)
-		{
-			if (! bDirectionUp)
-				cairo_scale (pCairoContext, -1, 1);
-			cairo_set_source_surface (pCairoContext, my_pFlatSeparatorSurface[CAIRO_DOCK_VERTICAL], 0, MIN (0, (fHeight + hi) * fLeftInclination));
-		}
+		fDockOffsetY = pDock->container.iHeight - fHeight - myBackground.iDockLineWidth;
+	}	
+	
+	cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);  // coin haut gauche.
+	cairo_move_to (pCairoContext, 0, 0);  // coin haut gauche.
+	
+	cairo_rel_line_to (pCairoContext, fLittleWidth, 0);
+	cairo_rel_line_to (pCairoContext, fDeltaXRight, fHeight);
+	cairo_rel_line_to (pCairoContext, - fBigWidth, 0);
+	cairo_rel_line_to (pCairoContext, - fDeltaXLeft, - fHeight);
+	
+	if (my_iDrawSeparator3D == CAIRO_DOCK_FLAT_SEPARATOR)
+	{
+		cairo_set_source_surface (pCairoContext, my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL], MIN (0, (fHeight + hi) * fLeftInclination), 0);
 	}
 }
 
 static void cd_rendering_draw_3D_separator_edge (Icon *icon, cairo_t *pCairoContext, CairoDock *pDock, gboolean bBackGround)
 {
-	gboolean bDirectionUp = pDock->container.bDirectionUp;
-	gboolean bIsHorizontal = pDock->container.bIsHorizontal;
-	bDirectionUp = TRUE;
-	bIsHorizontal = TRUE;
 	double hi = myIcons.fReflectSize * pDock->container.fRatio + myBackground.iFrameMargin;
 	hi = (pDock->container.bDirectionUp ? pDock->container.iHeight - (icon->fDrawY + icon->fHeight * icon->fScale) : icon->fDrawY);
 	double fLeftInclination = (icon->fDrawX - pDock->container.iWidth / 2) / iVanishingPointY;
@@ -245,41 +204,20 @@
 	double fDeltaXRight = fHeight * fRightInclination;
 	//g_print ("fBigWidth : %.2f ; fLittleWidth : %.2f\n", fBigWidth, fLittleWidth);
 	
-	int sens;
 	double fDockOffsetX, fDockOffsetY;
-	if (bDirectionUp)
-	{
-		sens = 1;
-		fDockOffsetY =  (bBackGround ? 0.5*myBackground.iDockLineWidth : - 1.*myBackground.iDockLineWidth);
-	}
-	else
-	{
-		sens = -1;
-		fDockOffsetY =  (bBackGround ? - 0.5*myBackground.iDockLineWidth : 1.*myBackground.iDockLineWidth);
-	}
+	fDockOffsetY =  (bBackGround ? 2.*myBackground.iDockLineWidth : - 1.0*myBackground.iDockLineWidth);
+	
 	fDockOffsetX = (bBackGround ? .5*myBackground.iDockLineWidth * fLeftInclination + 1.*fLeftInclination : - 0.5 * myBackground.iDockLineWidth * fLeftInclination);
 	//fDockOffsetX = -.5*myBackground.iDockLineWidth;
 	
-	if (bIsHorizontal)
-	{
-		cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);  // coin haut droit.
-		
-		cairo_move_to (pCairoContext, fLittleWidth, 0);
-		cairo_rel_line_to (pCairoContext, fDeltaXRight, sens * fHeight);
-		
-		cairo_move_to (pCairoContext, 0, 0);
-		cairo_rel_line_to (pCairoContext, fDeltaXLeft, sens * fHeight);
-	}
-	else
-	{
-		cairo_translate (pCairoContext, fDockOffsetY, fDockOffsetX);  // coin haut droit.
-		
-		cairo_move_to (pCairoContext, 0, fLittleWidth);
-		cairo_rel_line_to (pCairoContext, sens * fHeight, fDeltaXRight);
-		
-		cairo_move_to (pCairoContext, 0, 0);
-		cairo_rel_line_to (pCairoContext, sens * fHeight, fDeltaXLeft);
-	}
+	
+	cairo_translate (pCairoContext, fDockOffsetX, fDockOffsetY);  // coin haut droit.
+	
+	cairo_move_to (pCairoContext, fLittleWidth, 0);
+	cairo_rel_line_to (pCairoContext, fDeltaXRight, fHeight);
+	
+	cairo_move_to (pCairoContext, 0, 0);
+	cairo_rel_line_to (pCairoContext, fDeltaXLeft, fHeight);
 }
 
 
@@ -295,13 +233,13 @@
 	}
 	else
 	{
+		cairo_translate (pCairoContext, pDock->container.iHeight/2, pDock->container.iWidth/2);
+		cairo_rotate (pCairoContext, G_PI/2);
+		cairo_translate (pCairoContext, -pDock->container.iWidth/2, -pDock->container.iHeight/2);
 		if (pDock->container.bDirectionUp)
 		{
-			
-		}
-		else
-		{
-			
+			cairo_translate (pCairoContext, 0., pDock->container.iHeight);
+			cairo_scale (pCairoContext, 1., -1.);
 		}
 	}
 	cd_rendering_make_3D_separator (icon, pCairoContext, pDock, (my_iDrawSeparator3D == CAIRO_DOCK_PHYSICAL_SEPARATOR), bBackGround);
@@ -927,16 +865,18 @@
 void cd_rendering_register_3D_plane_renderer (const gchar *cRendererName)
 {
 	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-3D-plane-view", MY_APPLET_SHARE_DATA_DIR);
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-3D-plane.jpg", MY_APPLET_SHARE_DATA_DIR);
+	// interface
 	pRenderer->compute_size = cd_rendering_calculate_max_dock_size_3D_plane;
 	pRenderer->calculate_icons = cd_rendering_calculate_icons_3D_plane;
 	pRenderer->render = cd_rendering_render_3D_plane;
 	pRenderer->render_optimized = cd_rendering_render_optimized_3D_plane;
 	pRenderer->render_opengl = cd_rendering_render_3D_plane_opengl;
 	pRenderer->set_subdock_position = cairo_dock_set_subdock_position_linear;
+	// parametres
 	pRenderer->bUseReflect = TRUE;
 	pRenderer->cDisplayedName = D_ (cRendererName);
+	pRenderer->cReadmeFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-3D-plane-view");
+	pRenderer->cPreviewFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-3D-plane.jpg");
 	
 	cairo_dock_register_renderer (cRendererName, pRenderer);
 }

=== modified file 'dock-rendering/src/rendering-caroussel.c'
--- dock-rendering/src/rendering-caroussel.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-caroussel.c	2010-09-16 01:12:52 +0000
@@ -325,8 +325,8 @@
 void cd_rendering_register_caroussel_renderer (const gchar *cRendererName)
 {
 	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-caroussel-view", MY_APPLET_SHARE_DATA_DIR);
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-caroussel.jpg", MY_APPLET_SHARE_DATA_DIR);
+	pRenderer->cReadmeFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-caroussel-view");
+	pRenderer->cPreviewFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-caroussel.jpg");
 	pRenderer->compute_size = cd_rendering_calculate_max_dock_size_caroussel;
 	pRenderer->calculate_icons = cd_rendering_calculate_icons_caroussel;  // cairo_dock_apply_wave_effect;
 	pRenderer->render = cd_rendering_render_caroussel;

=== modified file 'dock-rendering/src/rendering-commons.c'
--- dock-rendering/src/rendering-commons.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-commons.c	2010-09-16 01:12:52 +0000
@@ -94,7 +94,7 @@
 	cairo_surface_destroy (my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL]);
 	cairo_surface_destroy (my_pFlatSeparatorSurface[CAIRO_DOCK_VERTICAL]);
 	
-	my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL] = cd_rendering_create_flat_separator_surface (300, 150);
+	my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL] = cd_rendering_create_flat_separator_surface ((g_bUseOpenGL?10:200), (g_bUseOpenGL?50:150));  // en opengl on etire la texture, donc pas besoin de la charger en grand.
 	
 	if (g_bUseOpenGL)
 	{
@@ -107,7 +107,7 @@
 	}
 	else
 	{
-		my_pFlatSeparatorSurface[CAIRO_DOCK_VERTICAL] = cairo_dock_rotate_surface (my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL], 300, 150, -G_PI / 2);
+		my_pFlatSeparatorSurface[CAIRO_DOCK_VERTICAL] = cairo_dock_rotate_surface (my_pFlatSeparatorSurface[CAIRO_DOCK_HORIZONTAL], 200, 150, -G_PI / 2);
 	}
 }
 

=== modified file 'dock-rendering/src/rendering-curve.c'
--- dock-rendering/src/rendering-curve.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-curve.c	2010-09-16 01:12:52 +0000
@@ -1298,17 +1298,19 @@
 void cd_rendering_register_curve_renderer (const gchar *cRendererName)
 {
 	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-curve-view", MY_APPLET_SHARE_DATA_DIR);
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-curve.jpg", MY_APPLET_SHARE_DATA_DIR);
+	// interface
 	pRenderer->compute_size = cd_rendering_calculate_max_dock_size_curve;
 	pRenderer->calculate_icons = cd_rendering_calculate_icons_curve;
 	pRenderer->render = cd_rendering_render_curve;
 	pRenderer->render_optimized = cd_rendering_render_optimized_curve;
 	pRenderer->render_opengl = cd_rendering_render_curve_opengl;
 	pRenderer->set_subdock_position = cairo_dock_set_subdock_position_linear;
+	// parametres
 	pRenderer->bUseReflect = TRUE;
 	pRenderer->bUseStencil = TRUE;
 	pRenderer->cDisplayedName = D_ (cRendererName);
+	pRenderer->cReadmeFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-curve-view");
+	pRenderer->cPreviewFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-curve.jpg");
 	
 	cairo_dock_register_renderer (cRendererName, pRenderer);
 }

=== modified file 'dock-rendering/src/rendering-diapo-simple.c'
--- dock-rendering/src/rendering-diapo-simple.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-diapo-simple.c	2010-09-16 01:12:52 +0000
@@ -48,9 +48,9 @@
 extern gboolean my_diapo_simple_draw_background;
 extern gboolean my_diapo_simple_display_all_labels;
 
-extern gdouble  my_diapo_simple_color_scrollbar_line[4];
-extern gdouble  my_diapo_simple_color_scrollbar_inside[4];
-extern gdouble  my_diapo_simple_color_grip[4];
+extern gdouble my_diapo_simple_color_scrollbar_line[4];
+extern gdouble my_diapo_simple_color_scrollbar_inside[4];
+extern gdouble my_diapo_simple_color_grip[4];
 
 const gint X_BORDER_SPACE = 40;  // espace laisse de chaque cote pour eviter de sortir trop facilement (et pour laisser de la place pour les etiquettes).
 const gint ARROW_TIP = 5;  // pour gerer la pointe de la fleche.
@@ -66,7 +66,7 @@
 	gboolean bDraggingScrollbar;  // si le clic est couramment enfonce sur la scrollbar.
 	guint iSidPressEvent;  // sid du clic
 	guint iSidReleaseEvent;  // sid du relachement du clic
-	gint iClickY;  // hauteur ou on a clique, en coordonnees fenetre
+	gint iClickY;  // hauteur ou on a clique, en coordonnees container.
 	gint iClickOffset;  // hauteur scrollee au moment du clic
 	} CDSlideData;
 
@@ -86,7 +86,16 @@
 static guint _cd_rendering_diapo_simple_guess_grid (GList *pIconList, guint *nRowX, guint *nRowY)
 {
 	// Calcul du nombre de lignes (nY) / colonnes (nX) :
-	guint count = g_list_length (pIconList);
+	guint count = 0;  // g_list_length (pIconList)
+	Icon *icon;
+	GList *ic;
+	for (ic = pIconList; ic != NULL; ic = ic->next)
+	{
+		icon = ic->data;
+		if (! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
+			count ++;
+	}
+	
 	if (count == 0)
 	{
 		*nRowX = 0;
@@ -105,8 +114,6 @@
 	return count;
 }
 
-const double sr = .5;  // screen ratio
-
 static void _set_scroll (CairoDock *pDock, int iOffsetY)
 {
 	//g_print ("%s (%d)\n", __func__, iOffsetY);
@@ -168,9 +175,20 @@
 	if (pButton->type == GDK_BUTTON_PRESS && pButton->button == 1)
 	{
 		double x_arrow = pDock->iMaxDockWidth - X_BORDER_SPACE - fScrollbarWidth;
-		if (pButton->x > x_arrow)  // on a clique dans la zone de scroll.
-		{
-			//g_print ("click (y=%d, scroll=%d)\n", (int) pButton->y, pData->iScrollOffset);
+		int x, y;
+		if (pDock->container.bIsHorizontal)
+		{
+			x = pButton->x;
+			y = pButton->y;
+		}
+		else
+		{
+			x = pButton->y;
+			y = pButton->x;
+		}
+		if (x > x_arrow)  // on a clique dans la zone de scroll.
+		{
+			//g_print ("click (y=%d, scroll=%d)\n", (int) y, pData->iScrollOffset);
 			
 			// on regarde sur quoi on clic.
 			double y_arrow_top, y_arrow_bottom;
@@ -184,18 +202,18 @@
 				y_arrow_bottom = pDock->iMaxDockHeight - my_diapo_simple_lineWidth;
 				y_arrow_top = my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth;
 			}
-			if (pButton->y > y_arrow_top - fScrollbarArrowGap/2 && pButton->y < y_arrow_top + fArrowHeight + fScrollbarArrowGap/2)  // bouton haut
+			if (y > y_arrow_top - fScrollbarArrowGap/2 && y < y_arrow_top + fArrowHeight + fScrollbarArrowGap/2)  // bouton haut
 			{
 				_set_scroll (pDock, 0);
 			}
-			else if (pButton->y < y_arrow_bottom + fScrollbarArrowGap/2 && pButton->y > y_arrow_bottom - fArrowHeight - fScrollbarArrowGap/2)  // bouton bas
+			else if (y < y_arrow_bottom + fScrollbarArrowGap/2 && y > y_arrow_bottom - fArrowHeight - fScrollbarArrowGap/2)  // bouton bas
 			{
 				_set_scroll (pDock, pData->iDeltaHeight);
 			}
 			else  // scrollbar
 			{
 				pData->bDraggingScrollbar = TRUE;
-				pData->iClickY = pButton->y;
+				pData->iClickY = y;
 				pData->iClickOffset = pData->iScrollOffset;
 			}
 		}
@@ -235,8 +253,9 @@
 		
 		int delta = pDock->container.iMouseY - pData->iClickY;
 		_set_scroll (pDock, (pData->iClickOffset + (double)delta / (y_arrow_top - y_arrow_bottom - 2*(fArrowHeight+fScrollbarArrowGap) - fGripHeight) * pData->iDeltaHeight));
+		return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
 	}
-	return CAIRO_DOCK_INTERCEPT_NOTIFICATION;
+	return CAIRO_DOCK_LET_PASS_NOTIFICATION;
 }
 gboolean cd_slide_on_leave (gpointer data, CairoDock *pDock, gboolean *bStartAnimation)
 {
@@ -249,6 +268,7 @@
 	
 	return (pData->bDraggingScrollbar ? CAIRO_DOCK_INTERCEPT_NOTIFICATION : CAIRO_DOCK_LET_PASS_NOTIFICATION);
 }
+const double sr = .5;  // screen ratio
 static void cd_rendering_calculate_max_dock_size_diapo_simple (CairoDock *pDock)
 {
 	// On calcule la configuration de la grille sans contrainte.
@@ -257,6 +277,9 @@
 	guint nIcones = 0;  // nb icones.
 	int iDeltaHeight = 0;  // hauteur ne pouvant rentrer dans le dock.
 	int iMaxIconWidth = 0;
+	int iDockWidth, iDockHeight;  // dimension dock.
+	int Ws = g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL];  // dimensions ecran.
+	int Hs = g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL];
 	nIcones = _cd_rendering_diapo_simple_guess_grid(pDock->icons, &nRowsX, &nRowsY);
 	
 	// On calcule la taille de l'affichage avec contrainte taille ecran.
@@ -264,53 +287,42 @@
 	{
 		// on calcule la largeur avec contrainte, ce qui donne aussi le nombre de lignes.
 		iMaxIconWidth = ((Icon*)pDock->icons->data)->fWidth;  // approximation un peu bof.
-		pDock->iMaxDockWidth = nRowsX * (iMaxIconWidth + my_diapo_simple_iconGapX) + 2*X_BORDER_SPACE;
-		int iMaxWidth = sr * g_desktopGeometry.iXScreenWidth[pDock->container.bIsHorizontal];
-		if (pDock->iMaxDockWidth > iMaxWidth)
+		iDockWidth = nRowsX * (iMaxIconWidth + my_diapo_simple_iconGapX) + 2*X_BORDER_SPACE;
+		int iMaxWidth = sr * Ws;
+		if (iDockWidth > iMaxWidth)
 		{
 			nRowsX = (iMaxWidth - 2*X_BORDER_SPACE) / (iMaxIconWidth + my_diapo_simple_iconGapX);
 			nRowsY = ceil((double) nIcones / nRowsX);
-			pDock->iMaxDockWidth = nRowsX * (iMaxIconWidth + my_diapo_simple_iconGapX) + 2*X_BORDER_SPACE;
-			//g_print ("%d -> %d\n", iMaxWidth, pDock->iMaxDockWidth);
+			iDockWidth = nRowsX * (iMaxIconWidth + my_diapo_simple_iconGapX) + 2*X_BORDER_SPACE;
+			//g_print ("%d -> %d\n", iMaxWidth, iDockWidth);
 		}
 		
 		// on calcule la hauteur avec contrainte, ce qui donne aussi la marge de defilement.
-		pDock->iMaxDockHeight = (nRowsY - 1) * (pDock->iMaxIconHeight * pDock->container.fRatio + my_diapo_simple_iconGapY) +  // les icones
+		iDockHeight = (nRowsY - 1) * (pDock->iMaxIconHeight * pDock->container.fRatio + my_diapo_simple_iconGapY) +  // les icones
 			pDock->iMaxIconHeight * pDock->container.fRatio * my_diapo_simple_fScaleMax +  // les icones des bords zooment
 			myLabels.iLabelSize +  // le texte des icones de la 1ere ligne
 			my_diapo_simple_lineWidth + // les demi-lignes du haut et du bas
 			my_diapo_simple_arrowHeight + ARROW_TIP;  // la fleche etendue
-		int iMaxHeight = MIN (pDock->iMaxDockWidth, sr * g_desktopGeometry.iXScreenHeight[pDock->container.bIsHorizontal]);
-		if (pDock->iMaxDockHeight > iMaxHeight)
+		int iMaxHeight = sr * Hs;
+		if (iDockHeight > iMaxHeight)
 		{
 			nRowsY = (iMaxHeight - (my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth + myLabels.iLabelSize + pDock->iMaxIconHeight * pDock->container.fRatio * my_diapo_simple_fScaleMax)) / (pDock->iMaxIconHeight * pDock->container.fRatio + my_diapo_simple_iconGapY);
-			int iMaxDockHeight0 = pDock->iMaxDockHeight;
-			pDock->iMaxDockHeight = (nRowsY - 1) * (pDock->iMaxIconHeight * pDock->container.fRatio + my_diapo_simple_iconGapY) +
+			int iMaxDockHeight0 = iDockHeight;
+			iDockHeight = (nRowsY - 1) * (pDock->iMaxIconHeight * pDock->container.fRatio + my_diapo_simple_iconGapY) +
 				pDock->iMaxIconHeight * pDock->container.fRatio * my_diapo_simple_fScaleMax +
 				myLabels.iLabelSize +
 				my_diapo_simple_lineWidth +
 				my_diapo_simple_arrowHeight + ARROW_TIP;
-			iDeltaHeight = iMaxDockHeight0 - pDock->iMaxDockHeight;
-			//g_print ("%d -> %d\n", iMaxHeight, pDock->iMaxDockHeight);
+			iDeltaHeight = iMaxDockHeight0 - iDockHeight;
+			//g_print ("%d -> %d\n", iMaxHeight, iDockHeight);
 		}
-		
-		pDock->iMinDockWidth = pDock->iMaxDockWidth - 2*X_BORDER_SPACE;
-		pDock->iMinDockHeight = pDock->iMaxDockHeight;
 	}
 	else
 	{
-		pDock->iMaxDockWidth = pDock->iMinDockWidth = X_BORDER_SPACE * 2 + 1;
-		pDock->iMaxDockHeight = pDock->iMinDockHeight = my_diapo_simple_lineWidth + my_diapo_simple_arrowHeight + ARROW_TIP + 1;
+		iDockWidth = X_BORDER_SPACE * 2 + 1;
+		iDockHeight = my_diapo_simple_lineWidth + my_diapo_simple_arrowHeight + ARROW_TIP + 1;
 	}
 	
-	// pas de decorations.
-	pDock->iDecorationsHeight = 0;
-	pDock->iDecorationsWidth  = 0;
-	
-	// On affecte ca aussi au cas ou.
-	pDock->fFlatDockWidth = pDock->iMaxDockWidth;
-	pDock->fMagnitudeMax = my_diapo_simple_fScaleMax / (1+g_fAmplitude);
-	
 	CDSlideData *pData = pDock->pRendererData;
 	if (pData == NULL)
 	{
@@ -335,9 +347,29 @@
 	{
 		int iScrollMargin = iMaxIconWidth * (my_diapo_simple_fScaleMax - 1) / 2
 			+ fScrollbarIconGap
-			+ fScrollbarWidth;  // donc a droite on a : derniere icone en taille max + demi-gapx + + gab + scrollbar + X_BORDER_SPACE
-		pDock->iMaxDockWidth += iScrollMargin;
-	}
+			+ fScrollbarWidth;  // donc a droite on a : derniere icone en taille max + demi-gapx + gap + scrollbar + X_BORDER_SPACE
+		iDockWidth += iScrollMargin;
+	}
+	
+	// taille du dock
+	//if (pDock->container.bIsHorizontal)
+	{
+		pDock->iMaxDockWidth = iDockWidth;
+		pDock->iMaxDockHeight = iDockHeight;
+	}
+	/*else  // pareil, sauf la fleche qui sera sur les cotes.
+	{
+		pDock->iMaxDockWidth = iDockHeight - (my_diapo_simple_arrowHeight + ARROW_TIP);
+		pDock->iMaxDockHeight = iDockWidth + my_diapo_simple_arrowHeight + ARROW_TIP;
+	}*/
+	pDock->iMinDockWidth = pDock->iMaxDockWidth - 2*X_BORDER_SPACE;
+	pDock->iMinDockHeight = pDock->iMaxDockHeight;
+	// pas de decorations.
+	pDock->iDecorationsHeight = 0;
+	pDock->iDecorationsWidth  = 0;
+	// On affecte ca aussi au cas ou.
+	pDock->fFlatDockWidth = pDock->iMaxDockWidth;
+	pDock->fMagnitudeMax = my_diapo_simple_fScaleMax / (1+g_fAmplitude);
 }
 
 
@@ -347,9 +379,9 @@
 static void cairo_dock_draw_frame_horizontal_for_diapo_simple (cairo_t *pCairoContext, CairoDock *pDock)
 {
 	const gdouble arrow_dec = 2;
-	gdouble fFrameWidth  = pDock->iMaxDockWidth - 2 * X_BORDER_SPACE - 0 * my_diapo_simple_radius;
+	gdouble fFrameWidth  = pDock->iMaxDockWidth - 2 * X_BORDER_SPACE;
 	gdouble fFrameHeight = pDock->iMaxDockHeight - (my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth);
-	gdouble fDockOffsetX = X_BORDER_SPACE + 0*my_diapo_simple_radius;
+	gdouble fDockOffsetX = X_BORDER_SPACE;
 	gdouble fDockOffsetY = (pDock->container.bDirectionUp ? .5*my_diapo_simple_lineWidth : my_diapo_simple_arrowHeight + ARROW_TIP);
 	
 	cairo_move_to (pCairoContext, fDockOffsetX, fDockOffsetY);
@@ -412,9 +444,9 @@
 static void cairo_dock_draw_frame_vertical_for_diapo_simple (cairo_t *pCairoContext, CairoDock *pDock)
 {
 	const gdouble arrow_dec = 2;
-	gdouble fFrameWidth  = pDock->iMaxDockWidth - 2 * X_BORDER_SPACE - 2 * my_diapo_simple_radius;
+	gdouble fFrameWidth  = pDock->iMaxDockWidth - 2 * X_BORDER_SPACE;
 	gdouble fFrameHeight = pDock->iMaxDockHeight - (my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth);
-	gdouble fDockOffsetX = X_BORDER_SPACE + my_diapo_simple_radius;
+	gdouble fDockOffsetX = X_BORDER_SPACE;
 	gdouble fDockOffsetY = (pDock->container.bDirectionUp ? .5*my_diapo_simple_lineWidth : my_diapo_simple_arrowHeight + ARROW_TIP);
 	
 	cairo_move_to (pCairoContext, fDockOffsetY, fDockOffsetX);
@@ -544,6 +576,14 @@
 		cairo_save (pCairoContext);
 		cairo_set_line_width (pCairoContext, 2.);
 		
+		if (! pDock->container.bIsHorizontal)
+		{
+			cairo_translate (pCairoContext, pDock->container.iHeight/2, pDock->container.iWidth/2);
+			cairo_rotate (pCairoContext, G_PI/2);
+			cairo_scale (pCairoContext, 1., -1.);
+			cairo_translate (pCairoContext, -pDock->container.iWidth/2, -pDock->container.iHeight/2);
+		}
+		
 		double x_arrow = pDock->iMaxDockWidth - X_BORDER_SPACE - fScrollbarWidth/2;  // pointe de la fleche.
 		double y_arrow_top, y_arrow_bottom;
 		if (pDock->container.bDirectionUp)
@@ -624,9 +664,17 @@
 				0.,
 				(pDock->container.bDirectionUp ? my_diapo_simple_lineWidth : h),  // top left corner.
 				pDock->container.iWidth,
-				pDock->container.iHeight - h);
-			cairo_clip (pCairoContext);
-		}  // sinon clip inutile.
+				pDock->container.iHeight - h - my_diapo_simple_lineWidth);
+		}
+		else
+		{
+			cairo_rectangle (pCairoContext,
+				(pDock->container.bDirectionUp ? my_diapo_simple_lineWidth : h),  // top left corner.
+				0.,
+				pDock->container.iHeight - h - my_diapo_simple_lineWidth,
+				pDock->container.iWidth);
+		}
+		cairo_clip (pCairoContext);
 	}
 	
 	// on dessine les icones, l'icone pointee en dernier.
@@ -636,15 +684,12 @@
 	{
 		icon = ic->data;
 		if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
+		{
+			ic = cairo_dock_get_next_element (ic, pDock->icons);
 			continue;
-		
-		if (icon->bPointed)
-		{
-			
 		}
 		
 		cairo_save (pCairoContext);
-		/// faire un clip si scroll != 0 ...
 		cairo_dock_render_one_icon (icon, pDock, pCairoContext, 1., FALSE);
 		cairo_restore (pCairoContext);
 		
@@ -754,11 +799,16 @@
 		fScrollOffset = (pDock->container.bDirectionUp ? - pData->iScrollOffset : pData->iScrollOffset);
 	
 	// On calcule la position de base pour toutes les icones
-	int iOffsetY = .5 * pDock->iMaxIconHeight * pDock->container.fRatio * (my_diapo_simple_fScaleMax - 1) +  // les icones de la 1ere ligne zooment
-		myLabels.iLabelSize +  // le texte des icones de la 1ere ligne
-		.5 * my_diapo_simple_lineWidth +  // demi-ligne du haut;
-		fScrollOffset;
-	
+	int iOffsetY;
+	if (pDock->container.bDirectionUp)
+		iOffsetY = .5 * pDock->iMaxIconHeight * pDock->container.fRatio * (my_diapo_simple_fScaleMax - 1) +  // les icones de la 1ere ligne zooment
+			myLabels.iLabelSize +  // le texte des icones de la 1ere ligne
+			.5 * my_diapo_simple_lineWidth +  // demi-ligne du haut;
+			fScrollOffset;
+	else
+		iOffsetY = .5 * pDock->iMaxIconHeight * pDock->container.fRatio * (my_diapo_simple_fScaleMax - 1) +  // les icones de la 1ere ligne zooment
+				.5 * my_diapo_simple_lineWidth +  // demi-ligne du bas;
+				fScrollOffset;
 	double fFoldingX = (pDock->fFoldingFactor > .2 ? (pDock->fFoldingFactor - .2) / .8 : 0.);  // placement de 1 a 0.2
 	double fFoldingY = (pDock->fFoldingFactor > .5 ? (pDock->fFoldingFactor - .5) / .5 : 0.);  // placement de 1 a 0.5
 	Icon* icon;
@@ -776,7 +826,9 @@
 		if (pDock->container.bDirectionUp)
 			icon->fY = iOffsetY + (icon->fHeight + my_diapo_simple_iconGapY) * y;
 		else
-			icon->fY = pDock->container.iHeight - iOffsetY - icon->fHeight - (nRowsY - 1 - y) * (icon->fHeight + my_diapo_simple_iconGapY) + (my_diapo_simple_arrowHeight + ARROW_TIP);  // la ligne du haut quand le dock est en bas, reste en haut quand le dock est en haut.
+		{
+			icon->fY = pDock->container.iHeight - iOffsetY - icon->fHeight - (nRowsY - 1 - y) * (icon->fHeight + my_diapo_simple_iconGapY);
+		}
 		
 		// on en deduit le zoom par rapport a la position de la souris.
 		gdouble distanceE = sqrt ((icon->fX + icon->fWidth/2 - Mx) * (icon->fX + icon->fWidth/2 - Mx) + (icon->fY + icon->fHeight/2 - My) * (icon->fY + icon->fHeight/2 - My));
@@ -820,7 +872,6 @@
 		else
 		{
 			icon->bPointed = FALSE;
-			///icon->fAlpha *= 0.75;
 		}
 		
 		// On affecte tous les parametres qui n'ont pas été défini précédement
@@ -850,20 +901,12 @@
 {
 	if (pDock->icons == NULL)
 		return NULL;
-	
-	// On calcule la configuration de la grille
-	gint nRowsX = 0;
-	gint nRowsY = 0;
-	gint nIcones = 0;
-	///nIcones = _cd_rendering_diapo_simple_guess_grid (pDock->icons, &nRowsX, &nRowsY);
-	
 	CDSlideData *pData = pDock->pRendererData;
 	g_return_val_if_fail (pData != NULL, NULL);
-	nRowsX = pData->nRowsX;
-	nRowsY = pData->nRowsY;
-	/*int iMaxIconWidth = ((Icon*)pDock->icons->data)->fWidth;  // approximation un peu bof.
-	nRowsX = (pDock->iMaxDockWidth - 2*X_BORDER_SPACE) / (iMaxIconWidth + my_diapo_simple_iconGapX);
-	nRowsY = (pDock->iMaxDockHeight - (my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth + myLabels.iLabelSize + pDock->iMaxIconHeight * pDock->container.fRatio * my_diapo_simple_fScaleMax)) / (pDock->iMaxIconHeight * pDock->container.fRatio + my_diapo_simple_iconGapY);*/
+	
+	// On recupere la configuration de la grille
+	gint nRowsX = pData->nRowsX;
+	gint nRowsY = pData->nRowsY;
 	
 	// On calcule les parametres des icones
 	Icon *pPointedIcon = _cd_rendering_calculate_icons_for_diapo_simple (pDock, nRowsX, nRowsY, pDock->container.iMouseX, pDock->container.iMouseY);
@@ -1033,11 +1076,8 @@
 	double fFrameWidth  = pDock->iMaxDockWidth - 2*X_BORDER_SPACE;  // longueur du trait horizontal.
 	double fFrameHeight = pDock->iMaxDockHeight - (my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth);  // hauteur du cadre avec les rayons et sans la pointe.
 	double fDockOffsetX, fDockOffsetY;
-	
 	fDockOffsetX = X_BORDER_SPACE;
 	fDockOffsetY = my_diapo_simple_arrowHeight+ARROW_TIP;
-	///fFrameWidth  = pDock->iMaxDockWidth - 2*X_BORDER_SPACE;  // longueur du trait horizontal.
-	///fFrameHeight = pDock->iMaxDockHeight- (my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth);  // hauteur du cadre avec les rayons et sans la pointe.
 	
 	//\_____________ On genere les coordonnees du contour.
 	CairoDockGLPath *pFramePath = cd_generate_frame_path_without_arrow (fFrameWidth, fFrameHeight, fRadius);
@@ -1082,11 +1122,17 @@
 	CDSlideData *pData = pDock->pRendererData;
 	if (pData != NULL && pData->iDeltaHeight != 0)
 	{
-		glPushMatrix ();
 		if (pScrollPath == NULL)
 			pScrollPath = cairo_dock_new_gl_path (4, 0., 0., 0, 0);  // des triangles ou des rectangles => 4 points max.
 		glLineWidth (2.);
-		
+		glPushMatrix ();
+		if (!pDock->container.bIsHorizontal)
+		{
+			glTranslatef (pDock->container.iHeight/2, pDock->container.iWidth/2, 0.);
+			glRotatef (-90., 0., 0., 1.);
+			glScalef (1., -1., 1.);  // comme si bDirectionUp
+			glTranslatef (-pDock->container.iWidth/2, -pDock->container.iHeight/2, 0.);
+		}
 		double x_arrow = pDock->iMaxDockWidth - X_BORDER_SPACE - fScrollbarWidth/2;  // pointe de la fleche.
 		double y_arrow_top, y_arrow_bottom;
 		if (pDock->container.bDirectionUp)
@@ -1145,7 +1191,6 @@
 		cairo_dock_gl_path_rel_line_to (pScrollPath, 0., - fGripHeight);
 		cairo_dock_gl_path_rel_line_to (pScrollPath, -fScrollbarWidth, 0.);
 		cairo_dock_fill_gl_path (pScrollPath, 0);
-		
 		glPopMatrix ();
 	}
 	
@@ -1166,14 +1211,21 @@
 	if (pData != NULL && pData->iDeltaHeight != 0) // on fait un clip pour les icones qui debordent.
 	{
 		int h = my_diapo_simple_arrowHeight + ARROW_TIP + my_diapo_simple_lineWidth;
+		glEnable (GL_SCISSOR_TEST);
 		if (pDock->container.bIsHorizontal)
 		{
-			glEnable (GL_SCISSOR_TEST);
 			glScissor (0,
-				(pDock->container.bDirectionUp ? h : 0),  // lower left corner of the scissor box.
+				(pDock->container.bDirectionUp ? h : my_diapo_simple_lineWidth),  // lower left corner of the scissor box.
 				pDock->container.iWidth,
-				pDock->container.iHeight - h);
-		}  // sinon clip inutile.
+				pDock->container.iHeight - h - my_diapo_simple_lineWidth);
+		}
+		else
+		{
+			glScissor ((!pDock->container.bDirectionUp ? h : my_diapo_simple_lineWidth),  // lower left corner of the scissor box.
+				my_diapo_simple_lineWidth,
+				pDock->container.iHeight - h - my_diapo_simple_lineWidth,
+				pDock->container.iWidth);
+		}
 	}
 	
 	Icon *icon;
@@ -1182,7 +1234,10 @@
 	{
 		icon = ic->data;
 		if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
+		{
+			ic = cairo_dock_get_next_element (ic, pDock->icons);
 			continue;
+		}
 		
 		cairo_dock_render_one_icon_opengl (icon, pDock, 1., FALSE);
 		
@@ -1282,22 +1337,20 @@
 
 void cd_rendering_register_diapo_simple_renderer (const gchar *cRendererName)
 {
-//////////////////////////////////////////////////////////////////////////////////////// On definit le renderer :
-	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);                                           //Nouvelle structure	
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-diapo-simple-view", MY_APPLET_SHARE_DATA_DIR);        //On affecte le readme
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-diapo-simple.jpg", MY_APPLET_SHARE_DATA_DIR);       // la preview
-	pRenderer->compute_size = cd_rendering_calculate_max_dock_size_diapo_simple;                        //La fonction qui défini les bornes     
-	pRenderer->calculate_icons = cd_rendering_calculate_icons_diapo_simple;                                        //qui calcule les param des icones      
-	pRenderer->render = cd_rendering_render_diapo_simple;                                                          //qui initie le calcul du rendu         
-	pRenderer->render_optimized = NULL;//cd_rendering_render_diapo_simple_optimized;                                      //pareil en mieux                       
-	pRenderer->set_subdock_position = cairo_dock_set_subdock_position_linear;                               // ?                                    
-	pRenderer->render_opengl = cd_rendering_render_diapo_simple_opengl;
-	
-	pRenderer->free_data = cd_rendering_free_slide_data;
-	
-	
-	pRenderer->bUseReflect = FALSE;                                                                         // On dit non au reflections
-	pRenderer->cDisplayedName = D_ (cRendererName);
-	
-	cairo_dock_register_renderer (cRendererName, pRenderer);                                    //Puis on signale l'existence de notre rendu
+	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
+	// interface
+	pRenderer->compute_size 	= cd_rendering_calculate_max_dock_size_diapo_simple;
+	pRenderer->calculate_icons 	= cd_rendering_calculate_icons_diapo_simple;
+	pRenderer->render 		= cd_rendering_render_diapo_simple;
+	pRenderer->render_optimized 	= NULL;
+	pRenderer->render_opengl 	= cd_rendering_render_diapo_simple_opengl;
+	pRenderer->free_data 		= cd_rendering_free_slide_data;
+	pRenderer->set_subdock_position = cairo_dock_set_subdock_position_linear;
+	// parametres
+	pRenderer->cReadmeFilePath 	= g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-diapo-simple-view");
+	pRenderer->cPreviewFilePath 	= g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-diapo-simple.jpg");
+	pRenderer->bUseReflect = FALSE;  // pas de reflections
+	pRenderer->cDisplayedName = D_(cRendererName);
+	
+	cairo_dock_register_renderer (cRendererName, pRenderer);
 }

=== modified file 'dock-rendering/src/rendering-init.c'
--- dock-rendering/src/rendering-init.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-init.c	2010-09-16 01:12:52 +0000
@@ -152,7 +152,7 @@
 	cd_rendering_register_diapo_simple_renderer 	(CD_RENDERING_DIAPO_SIMPLE_VIEW_NAME);  // By Paradoxxx_Zero
 	cairo_dock_register_notification (CAIRO_DOCK_LEAVE_DOCK,
 		(CairoDockNotificationFunc) cd_slide_on_leave,
-		CAIRO_DOCK_RUN_FIRST, NULL);
+		CAIRO_DOCK_RUN_FIRST, NULL);  // on l'enregistre ici, et non pas sur le container, pour intercepter la fermeture du dock lorsque l'on en sort en tirant la scrollbar.
 	
 	cd_rendering_register_curve_renderer 			(CD_RENDERING_CURVE_VIEW_NAME);  // By Paradoxxx_Zero and Fabounet
 	

=== modified file 'dock-rendering/src/rendering-panel.c'
--- dock-rendering/src/rendering-panel.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-panel.c	2010-09-16 01:12:52 +0000
@@ -754,16 +754,18 @@
 void cd_rendering_register_panel_renderer (const gchar *cRendererName)
 {
 	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-panel-view", MY_APPLET_SHARE_DATA_DIR);
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-panel.png", MY_APPLET_SHARE_DATA_DIR);
+	// interface
 	pRenderer->compute_size = cd_compute_size;
 	pRenderer->calculate_icons = cd_calculate_icons;
 	pRenderer->render = cd_render;
 	pRenderer->render_optimized = cd_render_optimized;
 	pRenderer->render_opengl = cd_render_opengl;
 	pRenderer->set_subdock_position = cairo_dock_set_subdock_position_linear;
+	// parametres
 	pRenderer->bUseReflect = FALSE;
 	pRenderer->cDisplayedName = D_ (cRendererName);
-
+	pRenderer->cReadmeFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-panel-view");
+	pRenderer->cPreviewFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-panel.png");
+	
 	cairo_dock_register_renderer (cRendererName, pRenderer);
 }

=== modified file 'dock-rendering/src/rendering-parabole.c'
--- dock-rendering/src/rendering-parabole.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-parabole.c	2010-09-16 01:12:52 +0000
@@ -763,15 +763,17 @@
 void cd_rendering_register_parabole_renderer (const gchar *cRendererName)
 {
 	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-parabolic-view", MY_APPLET_SHARE_DATA_DIR);
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-parabolic.jpg", MY_APPLET_SHARE_DATA_DIR);
+	// interface
 	pRenderer->compute_size = cd_rendering_calculate_max_dock_size_parabole;
 	pRenderer->calculate_icons = cd_rendering_calculate_icons_parabole;
 	pRenderer->render = cd_rendering_render_parabole;
 	pRenderer->render_optimized = NULL;
 	pRenderer->render_opengl = cd_rendering_render_parabole_opengl;
 	pRenderer->set_subdock_position = cd_rendering_set_subdock_position_parabole;
+	// parametres
 	pRenderer->cDisplayedName = D_ (cRendererName);
+	pRenderer->cReadmeFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-parabolic-view");
+	pRenderer->cPreviewFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-parabolic.jpg");
 	
 	cairo_dock_register_renderer (cRendererName, pRenderer);
 }

=== modified file 'dock-rendering/src/rendering-rainbow.c'
--- dock-rendering/src/rendering-rainbow.c	2010-08-07 01:43:25 +0000
+++ dock-rendering/src/rendering-rainbow.c	2010-09-16 01:12:52 +0000
@@ -505,7 +505,7 @@
 }
 
 
-static double *_generate_cos_sin (double fConeOffset, double fDelta, double *pTabValues)
+static void _generate_cos_sin (double fConeOffset, double fDelta, double *pTabValues)
 {
 	int i, n = (int) ceil ((G_PI/2 - fConeOffset) / fDelta);
 	pTabValues[2*n] = 0.;  // point au milieu.
@@ -521,9 +521,8 @@
 		pTabValues[2*(2*n-i)] = - pTabValues[2*i];
 		pTabValues[2*(2*n-i)+1] = pTabValues[2*i+1];
 	}
-	return pTabValues;
 }
-static GLfloat *_generate_sector_path (double fConeOffset, double fRadius1, double fRadius2, double fDelta, double *pCosSinTab, GLfloat *pTabValues)
+static void _generate_sector_path (double fConeOffset, double fRadius1, double fRadius2, double fDelta, double *pCosSinTab, GLfloat *pTabValues)
 {
 	int i, n = (int) ceil ((G_PI/2 - fConeOffset) / fDelta), N = (2*n+1) * 2;
 	for (i = 0; i < 2*n+1; i ++)
@@ -538,25 +537,24 @@
 	pTabValues[3*N+1] = pTabValues[3*0+1];
 	pTabValues[3*(N+1)] = pTabValues[3*1];
 	pTabValues[3*(N+1)+1] = pTabValues[3*1+1];
-	
-	return pTabValues;
 }
 
 static void cd_rendering_render_rainbow_opengl (CairoDock *pDock)
 {
 	static double fDelta = 1.;
+	int n = ceil (180./fDelta+1) + 1;  // nb points max, +1 for safety with rounded calculations.
 	if (pCosSinTab == NULL)
 	{
-		pCosSinTab = g_new0 (double, (180./fDelta+1) * 2);
+		pCosSinTab = g_new0 (double, n * 2);
 		_generate_cos_sin (my_fRainbowConeOffset, fDelta/180.*G_PI, pCosSinTab);
 	}
 	if (pVertexTab == NULL)
-		pVertexTab = g_new0 (GLfloat, ((180./fDelta+1) * 2) * 3);
+		pVertexTab = g_new0 (GLfloat, (n * 2) * 3);
 	if (pColorTab == NULL)
 	{
-		pColorTab = g_new0 (GLfloat, ((180./fDelta+1) * 2) * 4);
+		pColorTab = g_new0 (GLfloat, (n * 2) * 4);
 		int i;
-		for (i = 0; i < (180./fDelta+1); i ++)
+		for (i = 0; i < n; i ++)
 		{
 			pColorTab[4*2*i+0] = my_fRainbowColor[0];
 			pColorTab[4*2*i+1] = my_fRainbowColor[1];
@@ -582,7 +580,7 @@
 		glEnableClientState(GL_COLOR_ARRAY);
 		glLineWidth (1);
 		
-		int i, n = (int) ceil ((G_PI/2 - my_fRainbowConeOffset) / (fDelta/180.*G_PI)), N = (2*n+1) * 2;
+		int n = (int) ceil ((G_PI/2 - my_fRainbowConeOffset) / (fDelta/180.*G_PI)), N = (2*n+1) * 2;
 		
 		glPushMatrix ();
 		if (! pDock->container.bIsHorizontal)
@@ -722,21 +720,25 @@
 	pColorTab = NULL;
 	g_free (pCosSinTab);
 	pCosSinTab = NULL;
+	g_free (pVertexTab);
+	pVertexTab = NULL;
 }
 
 
 void cd_rendering_register_rainbow_renderer (const gchar *cRendererName)
 {
 	CairoDockRenderer *pRenderer = g_new0 (CairoDockRenderer, 1);
-	pRenderer->cReadmeFilePath = g_strdup_printf ("%s/readme-rainbow-view", MY_APPLET_SHARE_DATA_DIR);
-	pRenderer->cPreviewFilePath = g_strdup_printf ("%s/preview-rainbow.jpg", MY_APPLET_SHARE_DATA_DIR);
+	// interface
 	pRenderer->compute_size = cd_rendering_calculate_max_dock_size_rainbow;
 	pRenderer->calculate_icons = cd_rendering_calculate_icons_rainbow;
 	pRenderer->render = cd_rendering_render_rainbow;
 	pRenderer->render_optimized = NULL;
 	pRenderer->render_opengl = cd_rendering_render_rainbow_opengl;
 	pRenderer->set_subdock_position = cairo_dock_set_subdock_position_linear;
+	// parametres
 	pRenderer->cDisplayedName = D_ (cRendererName);
+	pRenderer->cReadmeFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/readme-rainbow-view");
+	pRenderer->cPreviewFilePath = g_strdup (MY_APPLET_SHARE_DATA_DIR"/preview-rainbow.jpg");
 	
 	cairo_dock_register_renderer (cRendererName, pRenderer);
 }

=== removed file 'drop-indicator/data/messages'
--- drop-indicator/data/messages	2010-08-07 01:43:25 +0000
+++ drop-indicator/data/messages	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-_("Drag and drop indicator")
-
-_("Images")
-
-_("Typically an arrow, this will be displayed when you try to drop a new launcher into the dock. Leave this empty to use the default.")
-
-_("Image for the drag & drop animation:")
-
-_("An emblem that will be displayed when you try to drop something on an icon. Leave empty to use the default one.")
-
-_("Image when hovering an icon :")
-
-_("Animation")
-
-_("Speed:")
-
-_("Number of round per second.")
-
-_("Rotation speed :")
-

=== removed file 'dustbin/data/messages'
--- dustbin/data/messages	2010-08-07 01:43:25 +0000
+++ dustbin/data/messages	1970-01-01 00:00:00 +0000
@@ -1,110 +0,0 @@
-_("Icon")
-
-_("Set to 0 to use the default applet size")
-
-_("Desired icon size for this applet")
-
-_("Name of the icon as it will appear in its caption in the dock:")
-
-_("Name of the dock it belongs to:")
-
-_("Applet's Handbook")
-
-_("Desklet")
-
-_("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.")
-
-_("Lock position?")
-
-_("Depending on your WindowManager, you may be able to resize this with ALT + middle-click or ALT + left-click.")
-
-_("Desklet dimensions (width x height):")
-
-_("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")
-
-_("Desklet position (x, y):")
-
-_("You can quickly rotate the desklet with the mouse, by dragging the little buttons on its left and top sides.")
-
-_("Rotation:")
-
-_("Visibility")
-
-_("Is detached from the dock")
-
-_("for CompizFusion's \"widget layer\", set behaviour in Compiz to: (class=Cairo-dock & type=utility)")
-
-_("Visibility:")
-
-_("Normal")
-
-_("Keep above")
-
-_("Keep below")
-
-_("Keep on widget layer")
-
-_("Reserve space")
-
-_("Should be visible on all desktops?")
-
-_("Decorations")
-
-_("Choose 'Custom decorations' to define your own decorations below.")
-
-_("Choose a decoration theme for this desklet:")
-
-_("Image to be displayed below drawings, e.g. a frame. Leave empty for no image.")
-
-_("Background image:")
-
-_("Background transparency:")
-
-_("in pixels. Use this to adjust the left position of drawings.")
-
-_("Left offset:")
-
-_("in pixels. Use this to adjust the top position of drawings.")
-
-_("Top offset:")
-
-_("in pixels. Use this to adjust the right position of drawings.")
-
-_("Right offset:")
-
-_("in pixels. Use this to adjust the bottom position of drawings.")
-
-_("Bottom offset:")
-
-_("Image to be displayed above the drawings, e.g. a reflection. Leave empty for no image.")
-
-_("Foreground image:")
-
-_("Foreground tansparency:")
-
-_("Configuration")
-
-_("Theme")
-
-_("Choose one of the available themes:")
-
-_("Name of the image to overwrite the theme's empty image :")
-
-_("Name of the image to overwrite the theme's full image :")
-
-_("Config")
-
-_("Display the following quick info :")
-
-_("None")
-
-_("Number of files")
-
-_("Total number of files")
-
-_("Total weight")
-
-_("Ask confirmation before emptying Dustbin?")
-

=== modified file 'dustbin/src/applet-config.c'
--- dustbin/src/applet-config.c	2010-08-07 01:43:25 +0000
+++ dustbin/src/applet-config.c	2010-09-16 01:12:52 +0000
@@ -38,7 +38,6 @@
 	
 	myConfig.iQuickInfoType = CD_CONFIG_GET_INTEGER_WITH_DEFAULT ("Configuration", "quick info", CD_DUSTBIN_INFO_NB_TRASHES);
 	myConfig.bAskBeforeDelete = CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT ("Configuration", "confirm", TRUE);
-	myConfig.iActionOnMiddleClick = CD_CONFIG_GET_INTEGER ("Configuration", "middle click");
 CD_APPLET_GET_CONFIG_END
 
 

=== modified file 'dustbin/src/applet-init.c'
--- dustbin/src/applet-init.c	2010-08-07 01:43:25 +0000
+++ dustbin/src/applet-init.c	2010-09-16 01:12:52 +0000
@@ -31,9 +31,8 @@
 	2, 2, 0,
 	CAIRO_DOCK_CATEGORY_APPLET_FILES,
 	N_("This applet manages the dustbin\n"
-	"You can threw files and unmount disks by drag andn droping them on the icon.\n"
-	"The applet can warn you if you use too much space\n"
-	"Middle-click to display usefull info about the dustbin."),
+	"You can threw files and unmount disks by drag-and-dropping them on the icon.\n"
+	"Middle-click on the icon will empty the dustbin."),
 	"Fabounet (Fabrice Rey)")
 
 static void _get_theme (void)
@@ -139,6 +138,7 @@
 		
 		//\_______________ On stoppe la surveillance.
 		cd_dustbin_stop (myApplet);
+		CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL);
 		
 		//\_______________ On la redemarre.
 		_get_theme ();

=== modified file 'dustbin/src/applet-notifications.c'
--- dustbin/src/applet-notifications.c	2010-08-07 01:43:25 +0000
+++ dustbin/src/applet-notifications.c	2010-09-16 01:12:52 +0000
@@ -41,40 +41,85 @@
 	cairo_dock_fm_launch_uri ("trash:/"/**myData.cDustbinPath*/);  // on force l'utilisation de trash:/ ici, car on sait que tous les backends sauront l'ouvrir.
 }
 
+
+static void _free_info_dialog (CairoDockModuleInstance *myApplet)
+{
+	myData.pInfoDialog = NULL;
+	if (myData.pInfoTask != NULL)
+	{
+		cairo_dock_discard_task (myData.pInfoTask);
+		myData.pInfoTask = NULL;
+	}
+}
+static void _measure_trash (CairoDockModuleInstance *myApplet)
+{
+	myData._iInfoMeasure = cairo_dock_fm_measure_diretory (myData.cDustbinPath, (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT ? 0 : 1), TRUE, &myData.pInfoTask->bDiscard);
+}
+static gboolean _display_result (CairoDockModuleInstance *myApplet)
+{
+	if (myData.pInfoDialog != NULL)
+	{
+		int iSize=-1, iNbFiles=-1, iTrashes=-1;
+		if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT)
+		{
+			iSize = myData.iMeasure;
+			iNbFiles = myData._iInfoMeasure;
+		}
+		else
+		{
+			iSize = myData._iInfoMeasure;
+			if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_NB_FILES)
+				iNbFiles = myData.iMeasure;
+			else
+			{
+				gint iCancel = 0;
+				iTrashes = cairo_dock_fm_measure_diretory (myData.cDustbinPath, 0, FALSE, &iCancel);  // ca c'est rapide.
+			}
+		}
+		
+		cairo_dock_set_dialog_message_printf (myData.pInfoDialog, "%s :\n %d %s\n %.2f %s", D_("The trash contains"),
+		iNbFiles > -1 ? iNbFiles : iTrashes,
+		iNbFiles > -1 ? D_("files") : D_("elements"),
+		(iSize > 1e6 ? (iSize >> 10) / 1024. : iSize / 1024.),
+		(iSize > 1e6 ? D_("Mo") : D_("Ko")));
+	}
+}
 static void _cd_dustbin_show_info (GtkMenuItem *menu_item, CairoDockModuleInstance *myApplet)
 {
 	gsize iSize, iNbFiles;
 	gint iCancel = 0;
-	if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT)
-	{
-		iSize = myData.iMeasure;
-	}
-	else
-	{
-		iSize = cairo_dock_fm_measure_diretory (myData.cDustbinPath, 0, TRUE, &iCancel);
-	}
-	iNbFiles = cairo_dock_fm_measure_diretory (myData.cDustbinPath, 0, FALSE, &iCancel);
-	
-	cairo_dock_remove_dialog_if_any (myIcon);
-	cairo_dock_show_temporary_dialog_with_icon_printf ("%s :\n %d %s\n %.2f %s",
-		myIcon, myContainer,
-		5000,
-		"same icon",
-		D_("The trash contains"),
-		iNbFiles,
-		D_("files"),
-		(iSize > 1e6 ? (iSize >> 10) / 1024. : iSize / 1024.),
-		(iSize > 1e6 ? D_("Mo") : D_("Ko")));
+	
+	if (myData.pInfoDialog != NULL)
+		cairo_dock_dialog_unreference (myData.pInfoDialog);
+	if (myData.pInfoTask != NULL)
+		cairo_dock_discard_task (myData.pInfoTask);
+	
+	CairoDialogAttribute attr;
+	memset (&attr, 0, sizeof (CairoDialogAttribute));
+	attr.cImageFilePath = "same icon";
+	attr.cText = g_strdup_printf ("%s ...\n\n", D_("Counting total size and files number..."));
+	attr.pFreeDataFunc = (GFreeFunc)_free_info_dialog;
+	attr.pUserData = myApplet;
+	myData.pInfoDialog = cairo_dock_build_dialog (&attr, myIcon, myContainer);
+	
+	// launch the task and update the dialog when finished.
+	myData.pInfoTask = cairo_dock_new_task (0,
+		(CairoDockGetDataAsyncFunc) _measure_trash,
+		(CairoDockUpdateSyncFunc) _display_result,
+		myApplet);
+	cairo_dock_launch_task (myData.pInfoTask);
 }
 
 CD_APPLET_ON_BUILD_MENU_BEGIN
 	GtkWidget *pModuleSubMenu = CD_APPLET_CREATE_MY_SUB_MENU ();
 	
-	CD_APPLET_ADD_IN_MENU_WITH_DATA (D_("Show Trash (click)"), _cd_dustbin_show_trash, CD_APPLET_MY_MENU, NULL);
-	CD_APPLET_ADD_IN_MENU_WITH_DATA (D_("Empty Trash (middle-click)"), _cd_dustbin_delete_trash, CD_APPLET_MY_MENU, NULL);
-	
-	CD_APPLET_ADD_IN_MENU (D_("Display dustbins information"), _cd_dustbin_show_info, CD_APPLET_MY_MENU);
-	
+	// Main Menu
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Show Trash (click)"), GTK_STOCK_OPEN, _cd_dustbin_show_trash, CD_APPLET_MY_MENU, NULL);
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Empty Trash (middle-click)"), GTK_STOCK_DELETE, _cd_dustbin_delete_trash, CD_APPLET_MY_MENU, NULL);
+	
+	CD_APPLET_ADD_IN_MENU_WITH_STOCK (D_("Display dustbins information"), GTK_STOCK_INFO, _cd_dustbin_show_info, CD_APPLET_MY_MENU);
+	
+	// Sub-Menu
 	CD_APPLET_ADD_ABOUT_IN_MENU (pModuleSubMenu);
 CD_APPLET_ON_BUILD_MENU_END
 

=== modified file 'dustbin/src/applet-struct.h'
--- dustbin/src/applet-struct.h	2010-08-07 01:43:25 +0000
+++ dustbin/src/applet-struct.h	2010-09-16 01:12:52 +

Follow ups