Browse Source

Support Firefox 65+ key down event behavior (#11503)

Fixes #11502
tags/8.8.0.beta1
Yuriy Artamonov 5 years ago
parent
commit
4771193032

+ 2
- 2
client/src/main/java/com/vaadin/client/ui/VMenuBar.java View File

@@ -133,11 +133,11 @@ public class VMenuBar extends FocusableFlowPanel implements
addFocusHandler(this);

/*
* Firefox auto-repeat works correctly only if we use a key press
* Firefox prior to v65 auto-repeat works correctly only if we use a key press
* handler, other browsers handle it correctly when using a key down
* handler
*/
if (BrowserInfo.get().isGecko()) {
if (BrowserInfo.get().isGecko() && BrowserInfo.get().getGeckoVersion() < 65) {
addKeyPressHandler(this);
} else {
addKeyDownHandler(this);

+ 9
- 4
client/src/main/java/com/vaadin/client/ui/VSlider.java View File

@@ -272,10 +272,7 @@ public class VSlider extends SimpleFocusablePanel
increaseValue(true);
} else if (DOM.eventGetType(event) == Event.MOUSEEVENTS) {
processBaseEvent(event);
} else if (BrowserInfo.get().isGecko()
&& DOM.eventGetType(event) == Event.ONKEYPRESS
|| !BrowserInfo.get().isGecko()
&& DOM.eventGetType(event) == Event.ONKEYDOWN) {
} else if (isNavigationEvent(event)) {

if (handleNavigation(event.getKeyCode(), event.getCtrlKey(),
event.getShiftKey())) {
@@ -302,6 +299,14 @@ public class VSlider extends SimpleFocusablePanel
}
}

private boolean isNavigationEvent(Event event) {
if (BrowserInfo.get().isGecko() && BrowserInfo.get().getGeckoVersion() < 65) {
return DOM.eventGetType(event) == Event.ONKEYPRESS;
} else {
return DOM.eventGetType(event) == Event.ONKEYDOWN;
}
}

private void processMouseWheelEvent(final Event event) {
final int dir = DOM.eventGetMouseWheelVelocityY(event);


+ 2
- 2
compatibility-client/src/main/java/com/vaadin/v7/client/ui/VCalendarPanel.java View File

@@ -212,11 +212,11 @@ public class VCalendarPanel extends FocusableFlexTable implements
Roles.getGridRole().set(getElement());

/*
* Firefox auto-repeat works correctly only if we use a key press
* Firefox prior to v65 auto-repeat works correctly only if we use a key press
* handler, other browsers handle it correctly when using a key down
* handler
*/
if (BrowserInfo.get().isGecko()) {
if (BrowserInfo.get().isGecko() && BrowserInfo.get().getGeckoVersion() < 65) {
addKeyPressHandler(this);
} else {
addKeyDownHandler(this);

+ 16
- 6
compatibility-client/src/main/java/com/vaadin/v7/client/ui/VScrollTable.java View File

@@ -568,10 +568,10 @@ public class VScrollTable extends FlowPanel

@Override
public void onKeyPress(KeyPressEvent keyPressEvent) {
// This is used for Firefox only, since Firefox auto-repeat
// This is used for Firefox (prior to v65) only, since Firefox auto-repeat
// works correctly only if we use a key press handler, other
// browsers handle it correctly when using a key down handler
if (!BrowserInfo.get().isGecko()) {
if (!useOldGeckoNavigation()) {
return;
}

@@ -635,8 +635,8 @@ public class VScrollTable extends FlowPanel
@Override
public void onKeyDown(KeyDownEvent keyDownEvent) {
NativeEvent event = keyDownEvent.getNativeEvent();
// This is not used for Firefox
if (BrowserInfo.get().isGecko()) {
// This is not used for Firefox after v65
if (useOldGeckoNavigation()) {
return;
}

@@ -840,11 +840,11 @@ public class VScrollTable extends FlowPanel
scrollBodyPanel.addScrollHandler(this);

/*
* Firefox auto-repeat works correctly only if we use a key press
* Firefox prior to v65 auto-repeat works correctly only if we use a key press
* handler, other browsers handle it correctly when using a key down
* handler
*/
if (BrowserInfo.get().isGecko()) {
if (useOldGeckoNavigation()) {
scrollBodyPanel.addKeyPressHandler(navKeyPressHandler);
} else {
scrollBodyPanel.addKeyDownHandler(navKeyDownHandler);
@@ -862,6 +862,16 @@ public class VScrollTable extends FlowPanel
rowRequestHandler = new RowRequestHandler();
}

/*
* Firefox prior to v65 auto-repeat works correctly only if we use a key press
* handler, other browsers handle it correctly when using a key down
* handler.
*/
private boolean useOldGeckoNavigation() {
return BrowserInfo.get().isGecko()
&& BrowserInfo.get().getGeckoVersion() < 65;
}

@Override
public void setStyleName(String style) {
updateStyleNames(style, false);

+ 9
- 4
compatibility-client/src/main/java/com/vaadin/v7/client/ui/VSlider.java View File

@@ -287,10 +287,7 @@ public class VSlider extends SimpleFocusablePanel
increaseValue(true);
} else if (DOM.eventGetType(event) == Event.MOUSEEVENTS) {
processBaseEvent(event);
} else if (BrowserInfo.get().isGecko()
&& DOM.eventGetType(event) == Event.ONKEYPRESS
|| !BrowserInfo.get().isGecko()
&& DOM.eventGetType(event) == Event.ONKEYDOWN) {
} else if (isNavigationEvent(event)) {

if (handleNavigation(event.getKeyCode(), event.getCtrlKey(),
event.getShiftKey())) {
@@ -317,6 +314,14 @@ public class VSlider extends SimpleFocusablePanel
}
}

private boolean isNavigationEvent(Event event) {
if (BrowserInfo.get().isGecko() && BrowserInfo.get().getGeckoVersion() < 65) {
return DOM.eventGetType(event) == Event.ONKEYPRESS;
} else {
return DOM.eventGetType(event) == Event.ONKEYDOWN;
}
}

private void processMouseWheelEvent(final Event event) {
final int dir = DOM.eventGetMouseWheelVelocityY(event);


+ 2
- 2
compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTree.java View File

@@ -216,11 +216,11 @@ public class VTree extends FocusElementPanel
}, ContextMenuEvent.getType());

/*
* Firefox auto-repeat works correctly only if we use a key press
* Firefox prior to v65 auto-repeat works correctly only if we use a key press
* handler, other browsers handle it correctly when using a key down
* handler
*/
if (BrowserInfo.get().isGecko()) {
if (BrowserInfo.get().isGecko() && BrowserInfo.get().getGeckoVersion() < 65) {
addKeyPressHandler(this);
} else {
addKeyDownHandler(this);

Loading…
Cancel
Save