diff options
Diffstat (limited to 'platform/platform-api/src/com/intellij/ui/table/JBTable.java')
-rw-r--r-- | platform/platform-api/src/com/intellij/ui/table/JBTable.java | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/platform/platform-api/src/com/intellij/ui/table/JBTable.java b/platform/platform-api/src/com/intellij/ui/table/JBTable.java index 435c4358959f..bda230eb767e 100644 --- a/platform/platform-api/src/com/intellij/ui/table/JBTable.java +++ b/platform/platform-api/src/com/intellij/ui/table/JBTable.java @@ -52,7 +52,6 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component private Integer myMinRowHeight; private boolean myStriped; - private boolean isTypeAhead = true; private AsyncProcessIcon myBusyIcon; private boolean myBusy; @@ -69,6 +68,8 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component public JBTable(final TableModel model, final TableColumnModel columnModel) { super(model, columnModel); + setSurrendersFocusOnKeystroke(true); + myEmptyText = new StatusText(this) { @Override protected boolean isStatusVisible() { @@ -421,7 +422,10 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component return false; } - if (e instanceof KeyEvent && UIUtil.isReallyTypedEvent((KeyEvent)e)) { + if (e instanceof KeyEvent) { + // do not start editing in autoStartsEdit mode on Ctrl-Z and other non-typed events + if (!UIUtil.isReallyTypedEvent((KeyEvent)e)) return false; + SpeedSearchSupply supply = SpeedSearchSupply.getSupply(this); if (supply != null && supply.isPopupActive()) { return false; @@ -449,20 +453,43 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component add(editorComp); editorComp.validate(); - IdeFocusManager.findInstanceByComponent(this).requestFocus(editorComp, false); + if (surrendersFocusOnKeyStroke()) { + // this replaces focus request in JTable.processKeyBinding + final IdeFocusManager focusManager = IdeFocusManager.findInstanceByComponent(this); + focusManager.setTypeaheadEnabled(false); + focusManager.requestFocus(editorComp, true).doWhenProcessed(new Runnable() { + @Override + public void run() { + focusManager.setTypeaheadEnabled(true); + } + }); + } setCellEditor(editor); setEditingRow(row); setEditingColumn(column); editor.addCellEditorListener(this); - if (isTypeAhead) { - JTableCellEditorHelper.typeAhead(this, e, row, column); - } + return true; } return false; } + /** + * Always returns false. + * If you're interested in value of JTable.surrendersFocusOnKeystroke property, call JBTable.surrendersFocusOnKeyStroke() + * @return false + * @see #surrendersFocusOnKeyStroke + */ + @Override + public boolean getSurrendersFocusOnKeystroke() { + return false; // prevents JTable.processKeyBinding from requesting editor component to be focused + } + + public boolean surrendersFocusOnKeyStroke() { + return super.getSurrendersFocusOnKeystroke(); + } + private static boolean isTableDecorationSupported() { return UIUtil.isUnderAlloyLookAndFeel() || UIUtil.isUnderNativeMacLookAndFeel() @@ -472,10 +499,6 @@ public class JBTable extends JTable implements ComponentWithEmptyText, Component || UIUtil.isUnderWindowsLookAndFeel(); } - public void disableTypeAheadInCellEditors() { - isTypeAhead = false; - } - @NotNull @Override public Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column) { |