summaryrefslogtreecommitdiff
path: root/platform/platform-api/src/com/intellij/ui/table/JBTable.java
diff options
context:
space:
mode:
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.java43
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) {