Skip to content

Commit 00716eb

Browse files
authored
Fix widget initialization avoid registration multiple handlers (eclipse-che#6472)
* Fix widget initialization avoid regitration multiple handlers. Add timeout for input box init value Signed-off-by: Vitalii Parfonov <vparfonov@redhat.com>
1 parent 2512d7b commit 00716eb

1 file changed

Lines changed: 28 additions & 24 deletions

File tree

ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/navigation/NavigateToFileViewImpl.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@
1010
*/
1111
package org.eclipse.che.ide.navigation;
1212

13-
import com.google.gwt.core.client.Scheduler;
1413
import com.google.gwt.dom.client.Style;
1514
import com.google.gwt.event.dom.client.KeyCodes;
1615
import com.google.gwt.event.dom.client.KeyDownEvent;
17-
import com.google.gwt.event.logical.shared.ResizeEvent;
18-
import com.google.gwt.event.logical.shared.ResizeHandler;
1916
import com.google.gwt.event.shared.HandlerRegistration;
2017
import com.google.gwt.resources.client.CssResource;
2118
import com.google.gwt.uibinder.client.UiBinder;
2219
import com.google.gwt.uibinder.client.UiField;
2320
import com.google.gwt.uibinder.client.UiHandler;
24-
import com.google.gwt.user.client.Command;
2521
import com.google.gwt.user.client.Timer;
2622
import com.google.gwt.user.client.Window;
2723
import com.google.gwt.user.client.ui.FlowPanel;
@@ -111,8 +107,6 @@ public void setDelegate(ActionDelegate delegate) {
111107

112108
@Override
113109
public void showPopup() {
114-
suggestionsContainer = new HTML();
115-
suggestionsContainer.addStyleName(style.noborder());
116110
fileName.getElement().setAttribute("placeholder", locale.navigateToFileSearchIsCaseSensitive());
117111

118112
setPopupPositionAndShow(
@@ -130,18 +124,16 @@ public void run() {
130124
}.schedule(300);
131125
});
132126

133-
Scheduler.get().scheduleDeferred(() -> fileName.setFocus(true));
127+
new Timer() {
128+
@Override
129+
public void run() {
130+
fileName.setFocus(true);
131+
}
132+
}.schedule(300);
134133

135134
// Add window resize handler
136135
if (resizeHandler == null) {
137-
resizeHandler =
138-
Window.addResizeHandler(
139-
new ResizeHandler() {
140-
@Override
141-
public void onResize(ResizeEvent event) {
142-
updatePositionAndSize();
143-
}
144-
});
136+
resizeHandler = Window.addResizeHandler(event -> updatePositionAndSize());
145137
}
146138
}
147139

@@ -189,6 +181,9 @@ public void hidePopup() {
189181
public void showItems(List<SearchResultDto> items) {
190182
// Hide popup if it is nothing to show
191183
if (items.isEmpty()) {
184+
if (suggestionsContainer == null) {
185+
return;
186+
}
192187
suggestionsContainer.getElement().setInnerHTML("");
193188
suggestionsContainer.removeFromParent();
194189
suggestionsPanel.setVisible(false);
@@ -201,6 +196,8 @@ public void showItems(List<SearchResultDto> items) {
201196

202197
// Show popup
203198
suggestionsPanel.setVisible(true);
199+
suggestionsContainer = new HTML();
200+
suggestionsContainer.addStyleName(style.noborder());
204201
suggestionsPanel.add(suggestionsContainer);
205202

206203
// Create and show list of items
@@ -278,31 +275,31 @@ void handleKeyDown(KeyDownEvent event) {
278275
if (list != null) {
279276
list.getSelectionModel().selectPrevious();
280277
}
281-
return;
278+
break;
282279

283280
case KeyCodes.KEY_DOWN:
284281
event.stopPropagation();
285282
event.preventDefault();
286283
if (list != null) {
287284
list.getSelectionModel().selectNext();
288285
}
289-
return;
286+
break;
290287

291288
case KeyCodes.KEY_PAGEUP:
292289
event.stopPropagation();
293290
event.preventDefault();
294291
if (list != null) {
295292
list.getSelectionModel().selectPreviousPage();
296293
}
297-
return;
294+
break;
298295

299296
case KeyCodes.KEY_PAGEDOWN:
300297
event.stopPropagation();
301298
event.preventDefault();
302299
if (list != null) {
303300
list.getSelectionModel().selectNextPage();
304301
}
305-
return;
302+
break;
306303

307304
case KeyCodes.KEY_ENTER:
308305
event.stopPropagation();
@@ -311,16 +308,23 @@ void handleKeyDown(KeyDownEvent event) {
311308
if (selectedItem != null) {
312309
delegate.onFileSelected(Path.valueOf(selectedItem.getItemReference().getPath()));
313310
}
314-
return;
311+
break;
315312

316313
case KeyCodes.KEY_ESCAPE:
317314
event.stopPropagation();
318315
event.preventDefault();
319316
hidePopup();
320-
return;
317+
break;
318+
default:
319+
//here need some delay to be sure input box initiated with given value
320+
//in manually testing hard to reproduce this problem but it reproduced with selenium tests
321+
new Timer() {
322+
@Override
323+
public void run() {
324+
delegate.onFileNameChanged(fileName.getText());
325+
}
326+
}.schedule(300);
327+
break;
321328
}
322-
323-
Scheduler.get()
324-
.scheduleDeferred((Command) () -> delegate.onFileNameChanged(fileName.getText()));
325329
}
326330
}

0 commit comments

Comments
 (0)