Bug 343273 Quick Access dialog opens on wrong monitor
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
index 2f715bf..4270cac 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,6 +36,8 @@
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Monitor;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.Text;
@@ -163,7 +165,28 @@
 	private void layoutShell() {
 		Composite parent = text.getParent();
 		Rectangle tempBounds = parent.getBounds();
-		Rectangle compBounds = text.getDisplay().map(parent, null, tempBounds);
+		Display display = text.getDisplay();
+		Rectangle compBounds = display.map(parent, null, tempBounds);
+		for (Monitor monitor : display.getMonitors()) {
+			if (monitor.getBounds().contains(compBounds.x, compBounds.y)) {
+				Rectangle monitorBounds = monitor.getBounds();
+				int width = Math.max(350, compBounds.width);
+				int height = 250;
+
+				if (compBounds.x + width > monitorBounds.width) {
+					compBounds.x = monitorBounds.width - width;
+				}
+
+				if (compBounds.y + height > monitorBounds.height) {
+					compBounds.y = compBounds.y - tempBounds.height - height;
+				}
+
+				shell.setBounds(compBounds.x, compBounds.y + compBounds.height, width, height);
+				shell.layout();
+				return;
+			}
+		}
+
 		Rectangle monitorBounds = text.getMonitor().getBounds();
 		int width = Math.max(350, compBounds.width);
 		int height = 250;