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());