Index: src/core/window.c
===================================================================
--- src/core/window.c	(revision 3554)
+++ src/core/window.c	(working copy)
@@ -2882,8 +2882,23 @@
   /* Get window on current or given workspace */
   if (workspace == NULL)
     workspace = window->screen->active_workspace;
-  if (!meta_window_located_on_workspace (window, workspace))
-    meta_window_change_workspace (window, workspace);
+
+  /* For non-transient windows, we just set up a pulsing indicator, 
+     rather than move windows or workspaces.
+     See http://bugzilla.gnome.org/show_bug.cgi?id=482354 */
+  if (window->xtransient_for == None && 
+      !meta_window_located_on_workspace (window, workspace))
+    {
+      meta_window_set_demands_attention (window);
+      /* We've marked it as demanding, don't need to do anything else. */
+      return;
+    }
+  else if (window->xtransient_for != None)
+    {
+      /* Move transients to current workspace - preference dialogs should appear over 
+         the source window.  */
+      meta_window_change_workspace (window, workspace);
+    }
   
   if (window->shaded)
     meta_window_unshade (window, timestamp);
