mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Workaround for Go to Class window loses focus during typing
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user