Bug 507400 - Search dialog should not be modal

This make the search dialog non-blocking anymore, so that the user can
still select text from the editor, even if the dialog is open. Opening
multiple times the dialog is not possible due to a check in the related
action.

Change-Id: Ic4ae870a3097e8f16aba708f138c2e05fe1d8cc2
Signed-off-by: Lars Vogel <Lars.Vogel@vogella.com>
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/OpenSearchDialogAction.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/OpenSearchDialogAction.java
index bc93e11..90aa71d 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/OpenSearchDialogAction.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/OpenSearchDialogAction.java
@@ -10,6 +10,9 @@
  *******************************************************************************/
 package org.eclipse.search.internal.ui;
 
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.viewers.ISelection;
@@ -53,6 +56,17 @@
 			SearchPlugin.beep();
 			return;
 		}
+		// search dialog already open?
+		Shell[] shells = Display.getCurrent().getShells();
+		for (Shell shell : shells) {
+			Object data = shell.getData();
+			if (data instanceof SearchDialog) {
+				shell.setActive();
+				shell.setFocus();
+				return;
+			}
+		}
+
 		SearchDialog dialog= new SearchDialog(getWorkbenchWindow(), fPageId);
 		dialog.open();
 	}
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java
index fcd9e97..c01c028 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchDialog.java
@@ -160,6 +160,8 @@
 
 	public SearchDialog(IWorkbenchWindow window, String pageId) {
 		super(window.getShell());
+		setShellStyle(SWT.RESIZE | SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE);
+		setBlockOnOpen(false);
 		fWorkbenchWindow= window;
 		fCurrentSelection= window.getSelectionService().getSelection();
 		fCurrentEnclosingProject= evaluateEnclosingProject(fCurrentSelection, getActiveEditor());