Index: gnome-panel/applet.c
===================================================================
--- gnome-panel/applet.c	(révision 10151)
+++ gnome-panel/applet.c	(copie de travail)
@@ -608,9 +608,19 @@ panel_applet_position_menu (GtkMenu   *m
 	}
 
 	if (PANEL_WIDGET (applet->parent)->orient == GTK_ORIENTATION_HORIZONTAL) {
-		if (pointer_x < applet->allocation.width &&
-		    requisition.width < pointer_x)
-			menu_x += MIN (pointer_x, applet->allocation.width - requisition.width);
+		if (gtk_widget_get_direction (GTK_WIDGET (menu)) != GTK_TEXT_DIR_RTL) {
+			if (pointer_x < applet->allocation.width &&
+			    requisition.width < pointer_x)
+				menu_x += MIN (pointer_x,
+					       applet->allocation.width - requisition.width);
+		} else {
+			menu_x += applet->allocation.width - requisition.width;
+			if (pointer_x > 0 && pointer_x < applet->allocation.width &&
+			    pointer_x < applet->allocation.width - requisition.width) {
+				menu_x -= MIN (applet->allocation.width - pointer_x,
+					       applet->allocation.width - requisition.width);
+			}
+		}
 		menu_x = MIN (menu_x, gdk_screen_get_width (screen) - requisition.width);
 
 		if (menu_y > gdk_screen_get_height (screen) / 2)
Index: libpanel-applet/panel-applet.c
===================================================================
--- libpanel-applet/panel-applet.c	(révision 10140)
+++ libpanel-applet/panel-applet.c	(copie de travail)
@@ -619,9 +619,19 @@ panel_applet_position_menu (GtkMenu   *m
 
 	if (applet->priv->orient == PANEL_APPLET_ORIENT_UP ||
 	    applet->priv->orient == PANEL_APPLET_ORIENT_DOWN) {
-		if (pointer_x < widget->allocation.width &&
-		    requisition.width < pointer_x)
-			menu_x += MIN (pointer_x, widget->allocation.width - requisition.width);
+		if (gtk_widget_get_direction (GTK_WIDGET (menu)) != GTK_TEXT_DIR_RTL) {
+			if (pointer_x < widget->allocation.width &&
+			    requisition.width < pointer_x)
+				menu_x += MIN (pointer_x,
+					       widget->allocation.width - requisition.width);
+		} else {
+			menu_x += widget->allocation.width - requisition.width;
+			if (pointer_x > 0 && pointer_x < widget->allocation.width &&
+			    pointer_x < widget->allocation.width - requisition.width) {
+				menu_x -= MIN (widget->allocation.width - pointer_x,
+					       widget->allocation.width - requisition.width);
+			}
+		}
 		menu_x = MIN (menu_x, gdk_screen_get_width (screen) - requisition.width);
 
 		if (menu_y > gdk_screen_get_height (screen) / 2)
