diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index 847064aae799..5ea7fc7fbf2a 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -37,10 +37,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeGlassPaneUtil; import com.intellij.openapi.wm.WindowManager; -import com.intellij.ui.ColorUtil; -import com.intellij.ui.IdeBorderFactory; -import com.intellij.ui.JBColor; -import com.intellij.ui.UIBundle; +import com.intellij.ui.*; import com.intellij.ui.components.JBOptionButton; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.Alarm; @@ -1657,6 +1654,20 @@ public abstract class DialogWrapper { } final StackingPopupDispatcher popupDispatcher = StackingPopupDispatcher.getInstance(); if (popupDispatcher != null && !popupDispatcher.isPopupFocused()) { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + + JTree tree = UIUtil.getParentOfType(JTree.class, focusOwner); + JTable table = UIUtil.getParentOfType(JTable.class, focusOwner); + + if (tree != null && tree.isEditing()) { + tree.cancelEditing(); + return; + } + if (table != null && table.isEditing()) { + TableUtil.stopEditing(table); + return; + } + doCancelAction(e); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java index 29cbe53511a6..48bcafaa45c5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java @@ -505,15 +505,15 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer implements FocusTra } if (StackingPopupDispatcher.getInstance().isPopupFocused()) return; - - if (focusOwner instanceof JTree) { - JTree tree = (JTree)focusOwner; + JTree tree = UIUtil.getParentOfType(JTree.class, focusOwner); + JTable table = UIUtil.getParentOfType(JTable.class, focusOwner); + + if (tree != null) { if (!tree.isEditing()) { e.getPresentation().setEnabled(true); } } - else if (focusOwner instanceof JTable) { - JTable table = (JTable)focusOwner; + else if (table != null) { if (!table.isEditing()) { e.getPresentation().setEnabled(true); }