Index: src/tabpopup.c
===================================================================
RCS file: /cvs/gnome/metacity/src/tabpopup.c,v
retrieving revision 1.46
diff -u -r1.46 tabpopup.c
--- src/tabpopup.c	1 Oct 2006 22:30:02 -0000	1.46
+++ src/tabpopup.c	19 Dec 2006 16:43:16 -0000
@@ -938,3 +938,10 @@
   return TRUE;
 }
 
+gboolean
+meta_ui_tab_popup_is_direction_rtl (MetaTabPopup *popup)
+{
+    if (gtk_widget_get_direction (popup->window) == GTK_TEXT_DIR_RTL)
+	return TRUE;
+    return FALSE;
+}
Index: src/tabpopup.h
===================================================================
RCS file: /cvs/gnome/metacity/src/tabpopup.h,v
retrieving revision 1.9
diff -u -r1.9 tabpopup.h
--- src/tabpopup.h	1 Oct 2006 22:30:02 -0000	1.9
+++ src/tabpopup.h	19 Dec 2006 16:43:16 -0000
@@ -62,6 +62,8 @@
 void            meta_ui_tab_popup_select       (MetaTabPopup       *popup,
                                                 MetaTabEntryKey     key);
 
+gboolean        meta_ui_tab_popup_is_direction_rtl (MetaTabPopup *popup);
+
 
 #endif
 
Index: src/workspace.c
===================================================================
RCS file: /cvs/gnome/metacity/src/workspace.c,v
retrieving revision 1.82
diff -u -r1.82 workspace.c
--- src/workspace.c	1 Oct 2006 22:30:10 -0000	1.82
+++ src/workspace.c	19 Dec 2006 16:43:16 -0000
@@ -814,11 +814,13 @@
 {
   MetaWorkspaceLayout layout;  
   int i, current_space, num_workspaces;
+  gboolean rtl;
 
   current_space = meta_workspace_index (workspace);
   num_workspaces = meta_screen_get_n_workspaces (workspace->screen);
   meta_screen_calc_workspace_layout (workspace->screen, num_workspaces,
                                      current_space, &layout);
+  rtl = meta_ui_tab_popup_is_direction_rtl (workspace->screen->tab_popup);
 
   meta_verbose ("Getting neighbor of %d in direction %s\n",
                 current_space, meta_motion_direction_to_string (direction));
@@ -826,10 +828,10 @@
   switch (direction) 
     {
     case META_MOTION_LEFT:
-      layout.current_col -= 1;
+      layout.current_col -= !rtl ? 1 : -1;
       break;
     case META_MOTION_RIGHT:
-      layout.current_col += 1;
+      layout.current_col += !rtl ? 1 : -1;
       break;
     case META_MOTION_UP:
       layout.current_row -= 1;
