Workaround for Go to Class window loses focus during typing

This commit is contained in:
Sergey Malenkov
2014-09-24 14:49:31 +04:00
parent 521fca36d8
commit 539179a13b
3 changed files with 22 additions and 19 deletions
@@ -18,7 +18,6 @@ package com.intellij.openapi.ui.impl;
import com.intellij.ide.DataManager;
import com.intellij.ide.IdeEventQueue;
import com.intellij.ide.impl.TypeSafeDataProviderAdapter;
import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.Application;
@@ -49,6 +48,7 @@ import com.intellij.ui.components.JBLayeredPane;
import com.intellij.ui.mac.foundation.Foundation;
import com.intellij.ui.mac.foundation.ID;
import com.intellij.ui.mac.foundation.MacUtil;
import com.intellij.util.IJSwingUtilities;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
@@ -986,7 +986,7 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer implements FocusTra
toFocus = getRootPane().getDefaultButton();
}
moveMousePointerOnButton(getRootPane().getDefaultButton());
IJSwingUtilities.moveMousePointerOn(getRootPane().getDefaultButton());
setupSelectionOnPreferredComponent(toFocus);
if (toFocus != null) {
@@ -1033,23 +1033,6 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer implements FocusTra
return activeWrapper;
}
private void moveMousePointerOnButton(final JButton button) {
Application application = ApplicationManager.getApplication();
if (application != null && application.hasComponent(UISettings.class)) {
if (button != null && UISettings.getInstance().MOVE_MOUSE_ON_DEFAULT_BUTTON) {
Point p = button.getLocationOnScreen();
Rectangle r = button.getBounds();
try {
Robot robot = new Robot();
robot.mouseMove(p.x + r.width / 2, p.y + r.height / 2);
}
catch (AWTException e) {
LOG.warn(e);
}
}
}
}
}
private class MyComponentListener extends ComponentAdapter {
@@ -45,6 +45,7 @@ import com.intellij.ui.components.JBLabel;
import com.intellij.ui.speedSearch.SpeedSearch;
import com.intellij.util.Alarm;
import com.intellij.util.BooleanFunction;
import com.intellij.util.IJSwingUtilities;
import com.intellij.util.Processor;
import com.intellij.util.ui.ChildFocusWatcher;
import com.intellij.util.ui.EmptyIcon;
@@ -900,6 +901,7 @@ public class AbstractPopup implements JBPopup {
public void run() {
if (myPreferredFocusedComponent != null && myInStack && myFocusable) {
myFocusTrackback.registerFocusComponent(myPreferredFocusedComponent);
IJSwingUtilities.moveMousePointerOn(myPreferredFocusedComponent);
}
removeActivity();
@@ -15,6 +15,7 @@
*/
package com.intellij.util;
import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.wm.ex.WindowManagerEx;
@@ -269,4 +270,21 @@ public class IJSwingUtilities extends JBSwingUtilities {
}
}
}
public static void moveMousePointerOn(Component component) {
if (component != null && component.isShowing()) {
UISettings settings = ApplicationManager.getApplication() == null ? null : UISettings.getInstance();
if (settings != null && settings.MOVE_MOUSE_ON_DEFAULT_BUTTON) {
Point point = component.getLocationOnScreen();
int dx = component.getWidth() / 2;
int dy = component.getHeight() / 2;
try {
new Robot().mouseMove(point.x + dx, point.y + dy);
}
catch (AWTException ignored) {
// robot is not available
}
}
}
}
}