← Back to team overview

cairo-dock-team team mailing list archive

[Branch ~ubuntu-branches/ubuntu/maverick/cairo-dock-plug-ins/maverick] Rev 13: * New Upstream Version (LP: #653702)

 

Merge authors:
  Matthieu Baerts (matttbe)
------------------------------------------------------------
revno: 13 [merge]
tags: 2.2.0~4-0ubuntu1
fixes bug(s): https://launchpad.net/bugs/653702 https://launchpad.net/bugs/653336
author: Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx>
committer: Bazaar Package Importer <james.westby@xxxxxxxxxx>
branch nick: maverick
timestamp: Sat 2010-10-02 22:10:47 +0200
message:
  * New Upstream Version (LP: #653702)
  * Fixed a few bugs:
   - All .mo files aren't installed into the right directory (LP: #653336)
   - Dbus: Fixed a crash when exiting Cairo-Dock
   - Indicator: Some modifications needed for the latest
                 version of libindicator
   - RSSreader: Prevented a crash if myDrawContext != NULL
   - Clock: Prevented a crash if myDrawContext != NULL
   - Switcher:
    - Prevented a crash if myDrawContext != NULL
    - Fixed a crash if the plugin is launched much time before the WM
   - musicPlayer:
    - Used the right image set from the config panel
    - MPRIS plugin: fixed a bug with the tracknumber
   - Systray: not drawn outside the screen.
   - tomboy: not popup a dialogue inside the screen
   - xfce-integration: displayed a window when logout applet is launched
  * debian/control:
   - Updated the version of cairo-dock-dev and cairo-dock-core
modified:
  CMakeLists.txt
  Dbus/src/applet-dbus.c
  Dbus/src/interface-applet-object.c
  Indicator-applet/indicator-applet.c
  RSSreader/src/applet-draw.c
  clock/src/applet-draw.c
  debian/changelog
  debian/control
  musicPlayer/src/applet-draw.c
  musicPlayer/src/applet-mpris.c
  netspeed/data/netspeed
  switcher/src/applet-draw.c
  systray/src/systray-init.c
  tomboy/src/tomboy-notifications.c
  xfce-integration/src/applet-utils.c


--
lp:ubuntu/maverick/cairo-dock-plug-ins
https://code.launchpad.net/~ubuntu-branches/ubuntu/maverick/cairo-dock-plug-ins/maverick

Your team Cairo-Dock Team is subscribed to branch lp:ubuntu/maverick/cairo-dock-plug-ins.
To unsubscribe from this branch go to https://code.launchpad.net/~ubuntu-branches/ubuntu/maverick/cairo-dock-plug-ins/maverick/+edit-subscription
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt	2010-09-18 14:20:27 +0000
+++ CMakeLists.txt	2010-10-02 20:10:47 +0000
@@ -10,7 +10,7 @@
 ########### project ###############
 
 project ("cairo-dock-plugins")
-set (VERSION "2.2.0-2")
+set (VERSION "2.2.0-4")
 
 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})
@@ -45,32 +45,33 @@
 
 set (PACKAGE ${CMAKE_PROJECT_NAME})
 set (GETTEXT_PACKAGE ${PACKAGE})
+					# CMAKE_INSTALL_PREFIX = /usr
 execute_process(
-    COMMAND pkg-config cairo-dock --variable=pluginsdir
+    COMMAND pkg-config cairo-dock --variable=pluginsdir		# /usr/lib/cairo-dock
     OUTPUT_VARIABLE pluginsdir)
 STRING (REGEX REPLACE "\n" "" pluginsdir ${pluginsdir})  # la commande rajoute un retour chariot ...
 execute_process(
-    COMMAND pkg-config cairo-dock --variable=pluginsdatadir
+    COMMAND pkg-config cairo-dock --variable=pluginsdatadir	# /usr/share/cairo-dock/plug-ins
     OUTPUT_VARIABLE pluginsdatadir)
 STRING (REGEX REPLACE "\n" "" pluginsdatadir ${pluginsdatadir})
 execute_process(
-    COMMAND pkg-config --modversion cairo-dock
+    COMMAND pkg-config --modversion cairo-dock			# 2.2.0-3
     OUTPUT_VARIABLE dock_version)
 STRING (REGEX REPLACE "\n" "" dock_version ${dock_version})
-if (NOT "${dock_version}" STREQUAL "${VERSION}")
+if (NOT "${dock_version}" STREQUAL "${VERSION}")		# Version
 	MESSAGE (FATAL_ERROR "warning : version mismatch with the core : " ${VERSION} <> ${dock_version})
 endif()
 set (GETTEXT_PLUGINS "cairo-dock-plugins")
 
 if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT "${FORCE_LIB64}" STREQUAL "")  # 64bits and force install in lib64
-	set (libdir ${prefix}/lib64)
+	set (libdir ${CMAKE_INSTALL_PREFIX}/lib64)
 else()
-	set (libdir ${prefix}/lib${LIB_SUFFIX})
+	set (libdir ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})	# /usr/lib
 endif()
 
-if (NOT "${pluginsdir}" STREQUAL "${CMAKE_INSTALL_PREFIX}/${libdir}")
-	message (STATUS "Warning : plug-ins should be installed in the same place asthe dock, that is to say in ${pluginsdir}")
-	STRING (REGEX REPLACE "/${libdir}" "" CMAKE_INSTALL_PREFIX ${pluginsdir})
+if (NOT "${pluginsdir}" STREQUAL "${libdir}/cairo-dock")
+	message (STATUS "Warning : plug-ins should be installed in the same directory as the core, that is to say in ${pluginsdir}")
+	STRING (REGEX REPLACE "/${libdir}/cairo-dock" "" CMAKE_INSTALL_PREFIX ${pluginsdir})
 endif()
 set (localedir "${CMAKE_INSTALL_PREFIX}/share/locale")
 set (gaugesdir "${CMAKE_INSTALL_PREFIX}/share/cairo-dock/gauges")

=== modified file 'Dbus/src/applet-dbus.c'
--- Dbus/src/applet-dbus.c	2010-09-18 14:20:27 +0000
+++ Dbus/src/applet-dbus.c	2010-10-02 20:10:47 +0000
@@ -282,9 +282,13 @@
 			}
 		}
 		if (pDbusApplet->pSubApplet != NULL)
+		{
 			g_object_unref (pDbusApplet->pSubApplet);
-		g_object_unref (pDbusApplet);
+			pDbusApplet->pSubApplet = NULL;
+		}
+		///g_object_unref (pDbusApplet);
 	}
+	g_list_foreach (myData.pAppletList, (GFunc)g_object_unref, NULL);
 	g_list_free (myData.pAppletList);
 	myData.pAppletList = NULL;
 	

=== modified file 'Dbus/src/interface-applet-object.c'
--- Dbus/src/interface-applet-object.c	2010-08-10 00:05:57 +0000
+++ Dbus/src/interface-applet-object.c	2010-10-02 20:10:47 +0000
@@ -78,7 +78,7 @@
 	for (a = myData.pAppletList; a != NULL; a = a->next)
 	{
 		pDbusApplet = a->data;
-		if (strcmp (cModuleName, pDbusApplet->cModuleName) == 0)
+		if (pDbusApplet->cModuleName && strcmp (cModuleName, pDbusApplet->cModuleName) == 0)
 			break ;
 	}
 	return (a ? pDbusApplet : NULL);
@@ -92,7 +92,7 @@
 	for (a = myData.pAppletList; a != NULL; a = a->next)
 	{
 		pDbusApplet = a->data;
-		if (strcmp (cModuleName, pDbusApplet->cModuleName) == 0)
+		if (pDbusApplet->cModuleName && strcmp (cModuleName, pDbusApplet->cModuleName) == 0)
 			break ;
 	}
 	myData.pAppletList = g_list_delete_link (myData.pAppletList, a);

=== modified file 'Indicator-applet/indicator-applet.c'
--- Indicator-applet/indicator-applet.c	2010-09-07 02:38:17 +0000
+++ Indicator-applet/indicator-applet.c	2010-10-02 20:10:47 +0000
@@ -123,7 +123,7 @@
 		g_object_unref (pIndicator->pServiceProxy);
 	g_print ("destroy menu...\n");
 	if (pIndicator->pMenu)
-		g_object_ref_sink (pIndicator->pMenu);
+		g_object_unref (pIndicator->pMenu);
 	g_print ("done.\n");
 	g_free (pIndicator);
 }
@@ -140,14 +140,30 @@
 	if (cStatusIcon == NULL)
 		return;
 	
-	gchar *cIconPath = cairo_dock_search_icon_s_path (cStatusIcon);
+	const gchar *cIconName = cStatusIcon;
+	gchar *tmp_icon_name = NULL;
+	gchar *cIconPath = cairo_dock_search_icon_s_path (cIconName);  // on regarde si l'icone sera trouvee.
 	gchar *cIconPathFallback = NULL;
+	if (cIconPath == NULL)  // l'icone ne sera pas trouvee, on regarde si ce n'est pas une icone en carton d'Ubuntu.
+	{
+		gchar *str = g_strstr_len (cIconName, -1, "-panel");
+		if (str)
+		{
+			tmp_icon_name = g_strndup (cIconName, str - cIconName);
+			cIconName = tmp_icon_name;
+			cIconPath = cairo_dock_search_icon_s_path (cIconName);
+		}
+	}
 	if (cIconPath == NULL)  // l'icone ne sera pas trouvee, on met une icone par defaut.
-		cIconPathFallback = g_strdup_printf ("%s/%s.svg", myApplet->pModule->pVisitCard->cShareDataDir, cStatusIcon);
-	
-	g_print ("set %s\n", cIconPathFallback ? cIconPathFallback : cStatusIcon);
-	CD_APPLET_SET_IMAGE_ON_MY_ICON (cIconPathFallback ? cIconPathFallback : cStatusIcon);
-	
+	{
+		gboolean bAddSuffix = (!g_str_has_suffix (cIconName, ".png") && !g_str_has_suffix (cIconName, ".svg"));
+		cIconPathFallback = g_strdup_printf ("%s/%s%s", myApplet->pModule->pVisitCard->cShareDataDir, cIconName, bAddSuffix ? ".svg" : "");
+	}
+	
+	g_print ("set %s\n", cIconPathFallback ? cIconPathFallback : cIconName);
+	CD_APPLET_SET_IMAGE_ON_MY_ICON (cIconPathFallback ? cIconPathFallback : cIconName);
+	
+	g_free (tmp_icon_name);
 	g_free (cIconPath);
 	g_free (cIconPathFallback);
 }

=== modified file 'RSSreader/src/applet-draw.c'
--- RSSreader/src/applet-draw.c	2010-08-10 00:05:57 +0000
+++ RSSreader/src/applet-draw.c	2010-10-02 20:10:47 +0000
@@ -30,6 +30,7 @@
 {
 	if (iWidth < 20 || iHeight < 20)  // inutile de dessiner tant que le desklet n'a pas atteint sa taille definitive.
 		return;
+	g_return_if_fail (myDrawContext != NULL);
 	cd_debug ("%s (%dx%d)", __func__, iWidth, iHeight);
 	PangoLayout *pLayout = pango_cairo_create_layout (myDrawContext);
 	PangoRectangle ink, log;

=== modified file 'clock/src/applet-draw.c'
--- clock/src/applet-draw.c	2010-09-18 14:20:27 +0000
+++ clock/src/applet-draw.c	2010-10-02 20:10:47 +0000
@@ -36,6 +36,7 @@
 
 void cd_clock_draw_text (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime)
 {
+	g_return_if_fail (myDrawContext != NULL);
 	cairo_dock_erase_cairo_context (myDrawContext);
 	if (myData.pNumericBgSurface != NULL)
 	{
@@ -191,6 +192,7 @@
 
 void cd_clock_draw_analogic (CairoDockModuleInstance *myApplet, int iWidth, int iHeight, struct tm *pTime)
 {
+	g_return_if_fail (myDrawContext != NULL);
 	//g_print ("%s (%dx%d)\n", __func__, width, height);
 	cairo_t *pSourceContext = myDrawContext;
 	double fHalfX;

=== modified file 'debian/changelog'
--- debian/changelog	2010-09-18 14:20:27 +0000
+++ debian/changelog	2010-10-02 20:10:47 +0000
@@ -1,3 +1,27 @@
+cairo-dock-plug-ins (2.2.0~4-0ubuntu1) maverick; urgency=low
+
+  * New Upstream Version (LP: #653702)
+  * Fixed a few bugs:
+   - All .mo files aren't installed into the right directory (LP: #653336)
+   - Dbus: Fixed a crash when exiting Cairo-Dock
+   - Indicator: Some modifications needed for the latest
+                 version of libindicator
+   - RSSreader: Prevented a crash if myDrawContext != NULL
+   - Clock: Prevented a crash if myDrawContext != NULL
+   - Switcher:
+    - Prevented a crash if myDrawContext != NULL
+    - Fixed a crash if the plugin is launched much time before the WM
+   - musicPlayer:
+    - Used the right image set from the config panel
+    - MPRIS plugin: fixed a bug with the tracknumber
+   - Systray: not drawn outside the screen.
+   - tomboy: not popup a dialogue inside the screen
+   - xfce-integration: displayed a window when logout applet is launched
+  * debian/control:
+   - Updated the version of cairo-dock-dev and cairo-dock-core
+
+ -- Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx>  Sat, 02 Oct 2010 20:10:47 +0200
+
 cairo-dock-plug-ins (2.2.0~2-0ubuntu1) maverick; urgency=low
 
   [ Matthieu Baerts (matttbe) ]

=== modified file 'debian/control'
--- debian/control	2010-09-18 14:20:27 +0000
+++ debian/control	2010-10-02 20:10:47 +0000
@@ -15,8 +15,8 @@
 		libxml2-dev,
 		libxtst-dev,
 		libglib2.0-dev (>= 2.20),
-		cairo-dock-dev (>= 2.2.0~2),
-		cairo-dock-core (>= 2.2.0~2),
+		cairo-dock-dev (>= 2.2.0~4),
+		cairo-dock-core (>= 2.2.0~4),
 		libasound2-dev,
 		libvte-dev,
 		x11proto-xf86vidmode-dev,

=== modified file 'musicPlayer/src/applet-draw.c'
--- musicPlayer/src/applet-draw.c	2010-09-07 02:38:17 +0000
+++ musicPlayer/src/applet-draw.c	2010-10-02 20:10:47 +0000
@@ -367,22 +367,25 @@
 {
 	g_return_if_fail (iStatus < PLAYER_NB_STATUS);
 	gboolean bUse3DTheme = (CD_APPLET_MY_CONTAINER_IS_OPENGL && myConfig.bOpenglThemes);
-	const gchar **cIconName = (bUse3DTheme ? s_cDefaultIconName3D : s_cDefaultIconName);
 	cairo_surface_t *pSurface = myData.pSurfaces[iStatus];
 	
 	if (pSurface == NULL)  // surface pas encore chargee.
 	{
-		if (myConfig.cUserImage[iStatus] != NULL) {
-			gchar *cUserImagePath = cairo_dock_generate_file_path (myConfig.cUserImage[iStatus]);
-			myData.pSurfaces[iStatus] = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cUserImagePath);
+		gchar *cUserIcon = myConfig.cUserImage[iStatus];
+		if (cUserIcon != NULL)  // l'utilisateur a defini une icone perso pour ce statut => on essaye de la charger.
+		{
+			gchar *cUserImagePath = cairo_dock_search_icon_s_path (cUserIcon);
+			myData.pSurfaces[iStatus] = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cUserImagePath ? cUserImagePath : cUserIcon);  // si on a trouve une icone, on la prend, sinon on considere le fichier comme une image.
 			g_free (cUserImagePath);
 		}
-		else {
-			gchar *cImagePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, cIconName[iStatus]);
+		if (myData.pSurfaces[iStatus] == NULL)  // pas d'icone perso pour ce statut, ou l'icone specifiee n'a pas ete trouvee ou pas ete chargee => on prend l'icone par defaut.
+		{
+			const gchar **cIconName = (bUse3DTheme ? s_cDefaultIconName3D : s_cDefaultIconName);
+			gchar *cImagePath = g_strdup_printf (MY_APPLET_SHARE_DATA_DIR"/%s", cIconName[iStatus]);
 			myData.pSurfaces[iStatus] = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cImagePath);
 			g_free (cImagePath);
 		}
-		if (bUse3DTheme)
+		if (bUse3DTheme)  // si on utilise un theme 3D, il faut aussi charger la nouvelle texture, et lancer une transition avec la precedente.
 		{
 			if (myData.iPrevTextureCover != 0)
 				_cairo_dock_delete_texture (myData.iPrevTextureCover);
@@ -399,9 +402,9 @@
 				CD_APPLET_REDRAW_MY_ICON;
 			}
 		}
-		else
+		else  // pas de theme 3D, on applique juste la surface du statut.
 		{
-			CD_APPLET_SET_SURFACE_ON_MY_ICON(myData.pSurfaces[iStatus]);
+			CD_APPLET_SET_SURFACE_ON_MY_ICON (myData.pSurfaces[iStatus]);
 		}
 	}
 	else  // surface en memoire.

=== modified file 'musicPlayer/src/applet-mpris.c'
--- musicPlayer/src/applet-mpris.c	2010-09-07 02:38:17 +0000
+++ musicPlayer/src/applet-mpris.c	2010-10-02 20:10:47 +0000
@@ -345,14 +345,24 @@
 	}
 	cd_message ("  cTitle <- %s", myData.cTitle);
 	
-	/**value = (GValue *) g_hash_table_lookup(data_list, "tracknumber");
+	value = (GValue *) g_hash_table_lookup(data_list, "tracknumber");
 	if (value == NULL)
 		value = (GValue *) g_hash_table_lookup(data_list, "track-number");  // au cas ou
-	if (value != NULL && G_VALUE_HOLDS_INT(value))
-		myData.iTrackNumber = g_value_get_int(value);
+	if (value != NULL)
+	{
+		if (G_VALUE_HOLDS_INT (value))  // amarok
+			myData.iTrackNumber = g_value_get_int (value);
+		else if (G_VALUE_HOLDS_UINT (value))
+			myData.iTrackNumber = g_value_get_uint (value);
+		else if (G_VALUE_HOLDS_STRING (value))  // qmmp
+		{
+			const gchar *s = g_value_get_string (value);
+			myData.iTrackNumber = (s ? atoi(s) : 0);
+		}
+	}
 	else
 		myData.iTrackNumber = 0;
-	cd_message ("  iTrackNumber <- %d", myData.iTrackNumber);*/
+	cd_message ("  iTrackNumber <- %d", myData.iTrackNumber);
 	
 	myData.iSongLength = 0;
 	value = (GValue *) g_hash_table_lookup(data_list, "mtime");  // duree en ms.

=== modified file 'netspeed/data/netspeed'
--- netspeed/data/netspeed	2010-08-10 00:05:57 +0000
+++ netspeed/data/netspeed	2010-10-02 20:10:47 +0000
@@ -1,4 +1,4 @@
- #!/bin/bash
+#!/bin/bash
 
 # Compiz check for Cairo-Dock
 #

=== modified file 'switcher/src/applet-draw.c'
--- switcher/src/applet-draw.c	2010-09-07 02:38:17 +0000
+++ switcher/src/applet-draw.c	2010-10-02 20:10:47 +0000
@@ -127,6 +127,7 @@
 void cd_switcher_draw_main_icon_compact_mode (void)
 {
 	g_return_if_fail (myData.switcher.iNbColumns != 0 && myData.switcher.iNbLines != 0);
+	g_return_if_fail (myDrawContext != NULL);
 	//g_print ("%s (%d;%d)\n", __func__, myData.switcher.iCurrentLine, myData.switcher.iCurrentColumn);
 	// On efface l'icone.
 	cairo_dock_erase_cairo_context (myDrawContext);
@@ -524,66 +525,72 @@
 	cairo_dock_get_icon_extent (pIcon, NULL, &iWidth, &iHeight);
 	
 	// on cree une copie de la surface de l'icone a la taille du menu.
-	int w = 24, h = w;
-	cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
-		w,
-		h);
-	cairo_t *pCairoContext = cairo_create (surface);
-	cairo_scale (pCairoContext, (double)w/iWidth, (double)h/iHeight);
-	cairo_set_source_surface (pCairoContext, pIcon->pIconBuffer, 0., 0.);
-	cairo_paint (pCairoContext);
-	cairo_destroy (pCairoContext);
-	guchar *d, *data = cairo_image_surface_get_data (surface);
-	int r = cairo_image_surface_get_stride (surface);
-	
-	// on la convertit en un pixbuf.
-	GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
-		TRUE,
-		8,
-		w,
-		h);
-	guchar *p, *pixels = gdk_pixbuf_get_pixels (pixbuf);
-	int iNbChannels = gdk_pixbuf_get_n_channels (pixbuf);
-	int iRowstride = gdk_pixbuf_get_rowstride (pixbuf);
-	
-	int x, y;
-	int red, green, blue;
-	float fAlphaFactor;
-	for (y = 0; y < h; y ++)
+	GdkPixbuf *pixbuf = NULL;
+	if (iWidth > 0 && iHeight > 0 && pIcon->pIconBuffer != NULL)
 	{
-		for (x = 0; x < w; x ++)
+		int w = 24, h = w;
+		cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
+			w,
+			h);
+		cairo_t *pCairoContext = cairo_create (surface);
+		cairo_scale (pCairoContext, (double)w/iWidth, (double)h/iHeight);
+		cairo_set_source_surface (pCairoContext, pIcon->pIconBuffer, 0., 0.);
+		cairo_paint (pCairoContext);
+		cairo_destroy (pCairoContext);
+		guchar *d, *data = cairo_image_surface_get_data (surface);
+		int r = cairo_image_surface_get_stride (surface);
+		
+		// on la convertit en un pixbuf.
+		pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+			TRUE,
+			8,
+			w,
+			h);
+		guchar *p, *pixels = gdk_pixbuf_get_pixels (pixbuf);
+		int iNbChannels = gdk_pixbuf_get_n_channels (pixbuf);
+		int iRowstride = gdk_pixbuf_get_rowstride (pixbuf);
+		
+		int x, y;
+		int red, green, blue;
+		float fAlphaFactor;
+		for (y = 0; y < h; y ++)
 		{
-			p = pixels + y * iRowstride + x * iNbChannels;
-			d = data + y * r + x * 4;
-			
-			fAlphaFactor = (float) d[3] / 255;
-			if (fAlphaFactor != 0)
-			{
-				red = d[0] / fAlphaFactor;
-				green = d[1] / fAlphaFactor;
-				blue = d[2] / fAlphaFactor;
-			}
-			else
-			{
-				red = blue = green = 0;
-			}
-			p[0] = blue;
-			p[1] = green;
-			p[2] = red;
-			p[3] = d[3];
+			for (x = 0; x < w; x ++)
+			{
+				p = pixels + y * iRowstride + x * iNbChannels;
+				d = data + y * r + x * 4;
+				
+				fAlphaFactor = (float) d[3] / 255;
+				if (fAlphaFactor != 0)
+				{
+					red = d[0] / fAlphaFactor;
+					green = d[1] / fAlphaFactor;
+					blue = d[2] / fAlphaFactor;
+				}
+				else
+				{
+					red = blue = green = 0;
+				}
+				p[0] = blue;
+				p[1] = green;
+				p[2] = red;
+				p[3] = d[3];
+			}
 		}
+		
+		cairo_surface_destroy (surface);
 	}
 	
-	cairo_surface_destroy (surface);
-	
 	// on ajoute une entree au menu avec le pixbuf.
 	GtkWidget *pMenuItem = gtk_image_menu_item_new_with_label (pIcon->cName);
-	GtkWidget *image = gtk_image_new_from_pixbuf (pixbuf);
-	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (pMenuItem), image);
+	if (pixbuf)
+	{
+		GtkWidget *image = gtk_image_new_from_pixbuf (pixbuf);
+		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (pMenuItem), image);
+		g_object_unref (pixbuf);
+	}
 	gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), pMenuItem);
 	g_signal_connect (G_OBJECT (pMenuItem), "activate", G_CALLBACK (_show_window), pIcon);
-	
-	g_object_unref (pixbuf);
 }
 void cd_switcher_build_windows_list (GtkWidget *pMenu)
 {

=== modified file 'systray/src/systray-init.c'
--- systray/src/systray-init.c	2010-08-10 00:05:57 +0000
+++ systray/src/systray-init.c	2010-10-02 20:10:47 +0000
@@ -115,7 +115,7 @@
 	if (myDesklet)  // on cloue le desklet.
 	{
 		GdkGravity iGravity;
-		if (myContainer->iWindowPositionX < g_desktopGeometry.iXScreenWidth[CAIRO_DOCK_HORIZONTAL]/2)
+		if (myContainer->iWindowPositionX < g_desktopGeometry.iScreenWidth[CAIRO_DOCK_HORIZONTAL]/2)  // on prend la taille de l'ecran ou il est place plutot que la taille totale, car en general on n'utilise pas un dual-screen comme un seul grand ecran maisplutot comme 2 bureaux.
 			iGravity = GDK_GRAVITY_NORTH_WEST;
 		else
 			iGravity = GDK_GRAVITY_NORTH_EAST;

=== modified file 'tomboy/src/tomboy-notifications.c'
--- tomboy/src/tomboy-notifications.c	2010-09-18 14:20:27 +0000
+++ tomboy/src/tomboy-notifications.c	2010-10-02 20:10:47 +0000
@@ -65,6 +65,13 @@
 	{
 		cd_message("tomboy : %s",pClickedIcon->cCommand);
 		showNote (pClickedIcon->cCommand);
+		
+		if (myData.iSidPopupDialog != 0)
+		{
+			g_source_remove (myData.iSidPopupDialog);
+			myData.iSidPopupDialog = 0;
+		}
+		cairo_dock_remove_dialog_if_any (pClickedIcon);
 	}
 	else if (pClickedIcon == myIcon && ! myData.bIsRunning)  // possible si on l'a quitte apres le demarrage de l'applet.
 	{
@@ -281,7 +288,7 @@
 		cairo_dock_remove_dialog_if_any (icon);
 	}
 	
-	if (pIcon->bPointed)
+	if (pIcon && pIcon->bPointed)
 	{
 		myData.iSidPopupDialog = g_timeout_add (500, (GSourceFunc)_popup_dialog, pIcon);
 	}

=== modified file 'xfce-integration/src/applet-utils.c'
--- xfce-integration/src/applet-utils.c	2010-08-10 00:05:57 +0000
+++ xfce-integration/src/applet-utils.c	2010-10-02 20:10:47 +0000
@@ -29,7 +29,7 @@
 
 void env_backend_shutdown (void)
 {
-	cairo_dock_launch_command ("xfce4-session-logout --halt");
+	cairo_dock_launch_command ("xfce4-session-logout");  // avec les options telles que --halt, la fenetre n'est pas montree.
 }
 
 void env_backend_lock_screen (void)