1 package com
.intellij
.openapi
.wm
.impl
;
3 import com
.intellij
.openapi
.ui
.popup
.JBPopup
;
4 import com
.intellij
.openapi
.util
.ActionCallback
;
5 import com
.intellij
.openapi
.wm
.FocusCommand
;
6 import com
.intellij
.openapi
.wm
.IdeFocusManager
;
7 import com
.intellij
.openapi
.wm
.ex
.IdeFocusTraversalPolicy
;
8 import com
.intellij
.ui
.FocusTrackback
;
9 import org
.jetbrains
.annotations
.NotNull
;
10 import org
.jetbrains
.annotations
.Nullable
;
14 import java
.awt
.event
.KeyEvent
;
16 public class IdeFocusManagerImpl
extends IdeFocusManager
{
17 private final ToolWindowManagerImpl myToolWindowManager
;
19 public IdeFocusManagerImpl(ToolWindowManagerImpl toolWindowManager
) {
20 myToolWindowManager
= toolWindowManager
;
24 public ActionCallback
requestFocus(@NotNull final Component c
, final boolean forced
) {
25 return myToolWindowManager
.requestFocus(c
, forced
);
29 public ActionCallback
requestFocus(@NotNull final FocusCommand command
, final boolean forced
) {
30 return myToolWindowManager
.requestFocus(command
, forced
);
33 public JComponent
getFocusTargetFor(@NotNull final JComponent comp
) {
34 return IdeFocusTraversalPolicy
.getPreferredFocusedComponent(comp
);
37 public void doWhenFocusSettlesDown(@NotNull final Runnable runnable
) {
38 myToolWindowManager
.doWhenFocusSettlesDown(runnable
);
42 public Component
getFocusedDescendantFor(@NotNull final Component comp
) {
43 final Component focused
= KeyboardFocusManager
.getCurrentKeyboardFocusManager().getFocusOwner();
44 if (focused
== null) return null;
46 if (focused
== comp
|| SwingUtilities
.isDescendingFrom(focused
, comp
)) return focused
;
48 final JBPopup popup
= FocusTrackback
.getChildPopup(comp
);
50 if (popup
!= null && popup
.isFocused()) return focused
;
55 public boolean dispatch(KeyEvent e
) {
56 return myToolWindowManager
.dispatch(e
);
60 public void suspendKeyProcessingUntil(@NotNull ActionCallback done
) {
61 myToolWindowManager
.suspendKeyProcessingUntil(done
);
65 public ActionCallback
requestDefaultFocus(boolean forced
) {
66 return myToolWindowManager
.requestDefaultFocus(forced
);
69 public boolean isFocusBeingTransferred() {
70 return !myToolWindowManager
.isFocusTransferReady();