mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
once the first calculation is finished, don't move the lookup
This commit is contained in:
@@ -87,12 +87,12 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
private final Project myProject;
|
||||
private final Editor myEditor;
|
||||
|
||||
private int myMinPrefixLength;
|
||||
private int myPreferredItemsCount;
|
||||
private String myInitialPrefix;
|
||||
private LookupArranger myCustomArranger;
|
||||
|
||||
private RangeMarker myLookupStartMarker;
|
||||
private boolean myStableStart;
|
||||
@NotNull private RangeMarker myLookupStartMarker;
|
||||
private final JList myList = new JBList(new DefaultListModel());
|
||||
private final LookupCellRenderer myCellRenderer;
|
||||
private Boolean myPositionedAbove = null;
|
||||
@@ -154,6 +154,8 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
myIconPanel.setBackground(Color.LIGHT_GRAY);
|
||||
myIconPanel.add(myProcessIcon);
|
||||
|
||||
updateLookupStart(0);
|
||||
|
||||
final ListModel model = myList.getModel();
|
||||
addEmptyItem((DefaultListModel)model);
|
||||
updateListHeight(model);
|
||||
@@ -270,10 +272,6 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
return myModel.getActionsFor(element);
|
||||
}
|
||||
|
||||
public int getMinPrefixLength() {
|
||||
return myMinPrefixLength;
|
||||
}
|
||||
|
||||
public JList getList() {
|
||||
return myList;
|
||||
}
|
||||
@@ -421,15 +419,17 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
}
|
||||
|
||||
private void checkMinPrefixLengthChanges(Collection<LookupElement> items) {
|
||||
if (myStableStart) return;
|
||||
if (!myCalculating && !items.isEmpty()) {
|
||||
myStableStart = true;
|
||||
}
|
||||
|
||||
int minPrefixLength = items.isEmpty() ? 0 : Integer.MAX_VALUE;
|
||||
for (final LookupElement item : items) {
|
||||
minPrefixLength = Math.min(item.getPrefixMatcher().getPrefix().length(), minPrefixLength);
|
||||
}
|
||||
|
||||
if (myMinPrefixLength != minPrefixLength) {
|
||||
myLookupStartMarker = null;
|
||||
}
|
||||
myMinPrefixLength = minPrefixLength;
|
||||
updateLookupStart(minPrefixLength);
|
||||
}
|
||||
|
||||
private void restoreSelection(@Nullable LookupElement oldSelected, boolean choosePreselectedItem, @Nullable String oldInvariant) {
|
||||
@@ -568,7 +568,7 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
Dimension dim = component.getPreferredSize();
|
||||
int lookupStart = getLookupStart();
|
||||
if (lookupStart < 0) {
|
||||
LOG.error(lookupStart + "; minprefix=" + myMinPrefixLength + "; offset=" + myEditor.getCaretModel().getOffset() + "; element=" +
|
||||
LOG.error(lookupStart + "; offset=" + myEditor.getCaretModel().getOffset() + "; element=" +
|
||||
getPsiElement());
|
||||
}
|
||||
|
||||
@@ -656,12 +656,6 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
}
|
||||
|
||||
public int getLookupStart() {
|
||||
if (myLookupStartMarker == null) {
|
||||
final int start = calcLookupStart();
|
||||
myLookupStartMarker = myEditor.getDocument().createRangeMarker(start, start);
|
||||
myLookupStartMarker.setGreedyToLeft(true);
|
||||
}
|
||||
|
||||
return myLookupStartMarker.getStartOffset();
|
||||
}
|
||||
|
||||
@@ -816,11 +810,14 @@ public class LookupImpl extends LightweightHint implements Lookup, Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
private int calcLookupStart() {
|
||||
private int updateLookupStart(int myMinPrefixLength) {
|
||||
int offset = myEditor.getSelectionModel().hasSelection()
|
||||
? myEditor.getSelectionModel().getSelectionStart()
|
||||
: myEditor.getCaretModel().getOffset();
|
||||
return Math.max(offset - myMinPrefixLength - myAdditionalPrefix.length(), 0);
|
||||
int start = Math.max(offset - myMinPrefixLength - myAdditionalPrefix.length(), 0);
|
||||
myLookupStartMarker = myEditor.getDocument().createRangeMarker(start, start);
|
||||
myLookupStartMarker.setGreedyToLeft(true);
|
||||
return start;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -126,8 +126,11 @@ public class TypedHandler implements TypedActionHandler {
|
||||
|
||||
@Nullable
|
||||
private static CharFilter.Result getFiltersDecision(char charTyped, LookupImpl lookup) {
|
||||
LookupElement item = lookup.getCurrentItem();
|
||||
int prefixLength = (item == null ? 0 : item.getPrefixMatcher().getPrefix().length()) + lookup.getAdditionalPrefix().length();
|
||||
|
||||
for (final CharFilter extension : getFilters()) {
|
||||
final CharFilter.Result result = extension.acceptChar(charTyped, lookup.getMinPrefixLength() + lookup.getAdditionalPrefix().length(), lookup);
|
||||
final CharFilter.Result result = extension.acceptChar(charTyped, prefixLength, lookup);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user