mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
workaround for focused component gets lost after app looses focus
This commit is contained in:
@@ -107,6 +107,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
|
||||
|
||||
private FocusCommand myFocusCommandOnAppActivation;
|
||||
private ActionCallback myCallbackOnActivation;
|
||||
private WeakReference<Component> myFocusedComponentOnDeactivation;
|
||||
|
||||
/**
|
||||
* invoked by reflection
|
||||
@@ -1705,6 +1706,8 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
|
||||
public void run() {
|
||||
if (checkForRejectOrByPass(command, forced, result)) return;
|
||||
|
||||
myFocusedComponentOnDeactivation = null;
|
||||
|
||||
if (myRequestFocusCmd == command) {
|
||||
myRequestFocusCmd = null;
|
||||
|
||||
@@ -1806,6 +1809,12 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
|
||||
|
||||
|
||||
private class AppListener extends ApplicationAdapter {
|
||||
|
||||
@Override
|
||||
public void applicationDeactivated() {
|
||||
myFocusedComponentOnDeactivation = new WeakReference<Component>(KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applicationActivated() {
|
||||
final FocusCommand cmd = myFocusCommandOnAppActivation;
|
||||
@@ -1814,6 +1823,12 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
|
||||
myCallbackOnActivation = null;
|
||||
if (cmd != null) {
|
||||
requestFocus(cmd, true).notifyWhenDone(callback);
|
||||
} else {
|
||||
final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
|
||||
final Component old = myFocusedComponentOnDeactivation.get();
|
||||
if (owner == null && old != null) {
|
||||
requestFocus(old, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user