diff --git a/platform/platform-impl/src/com/intellij/ui/messages/SheetController.java b/platform/platform-impl/src/com/intellij/ui/messages/SheetController.java index d9d65955a9be..b8d59a84f1d8 100755 --- a/platform/platform-impl/src/com/intellij/ui/messages/SheetController.java +++ b/platform/platform-impl/src/com/intellij/ui/messages/SheetController.java @@ -198,6 +198,17 @@ public class SheetController implements Disposable { }); } + void setDefaultResult () { + myResult = myDefaultButton.getName(); + } + + void setFocusedResult () { + if (myFocusedComponent instanceof JButton) { + JButton focusedButton = (JButton)myFocusedComponent; + myResult = focusedButton.getName(); + } + } + JPanel getPanel(final JDialog w) { w.getRootPane().setDefaultButton(myDefaultButton); diff --git a/platform/platform-impl/src/com/intellij/ui/messages/SheetMessage.java b/platform/platform-impl/src/com/intellij/ui/messages/SheetMessage.java index e568e9da412c..44a7e7e4f7e8 100755 --- a/platform/platform-impl/src/com/intellij/ui/messages/SheetMessage.java +++ b/platform/platform-impl/src/com/intellij/ui/messages/SheetMessage.java @@ -31,10 +31,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; +import java.awt.event.*; import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -126,6 +123,42 @@ public class SheetMessage implements Disposable { myWindow.setSize(myController.SHEET_NC_WIDTH, myController.SHEET_NC_HEIGHT); setPositionRelativeToParent(); } + + KeyListener animationKeyListener = new KeyListener() { + @Override + public void keyTyped(KeyEvent e) {} + + @Override + public void keyPressed(KeyEvent e) { + int modifiers = e.getModifiers(); + int modifiersUnion = InputEvent.SHIFT_DOWN_MASK + | InputEvent.CTRL_DOWN_MASK + | InputEvent.ALT_DOWN_MASK + | InputEvent.META_DOWN_MASK; + + boolean modifiersAreNotPressed = ((modifiers & modifiersUnion) == 0); + + if (modifiersAreNotPressed) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + Disposer.dispose(SheetMessage.this); + } + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + myController.setDefaultResult(); + Disposer.dispose(SheetMessage.this); + } + if (e.getKeyCode() == KeyEvent.VK_SPACE) { + myController.setFocusedResult(); + Disposer.dispose(SheetMessage.this); + } + } + } + + @Override + public void keyReleased(KeyEvent e) {} + }; + Disposer.register(this, () -> myWindow.removeKeyListener(animationKeyListener)); + myWindow.addKeyListener(animationKeyListener); + startAnimation(true); if (couldBeInFullScreen()) { FullScreenUtilities.setWindowCanFullScreen(myParent, false);