RFR: 8271054: [REDO] Wrong stage gets focused after modal stage creation
Thiago Milczarek Sayao
tsayao at openjdk.java.net
Thu Aug 5 23:43:44 UTC 2021
Found the problem thru this path:
**WindowStage.java**
final void handleFocusDisabled() {
if (activeWindows.isEmpty()) {
return;
}
WindowStage window = activeWindows.get(activeWindows.size() - 1);
window.setIconified(false);
window.requestToFront();
window.requestFocus();
}
**glass_window.cpp**
void WindowContextBase::process_focus(GdkEventFocus* event) {
...
if (jwindow) {
if (!event->in || isEnabled()) {
mainEnv->CallVoidMethod(jwindow, jWindowNotifyFocus,
event->in ? com_sun_glass_events_WindowEvent_FOCUS_GAINED : com_sun_glass_events_WindowEvent_FOCUS_LOST);
CHECK_JNI_EXCEPTION(mainEnv)
} else {
mainEnv->CallVoidMethod(jwindow, jWindowNotifyFocusDisabled);
CHECK_JNI_EXCEPTION(mainEnv)
}
}
}
So `glass_window.cpp` was triggering `jWindowNotifyFocusDisabled` which triggered the java code on the Primary Stage (on the bug reproduce code).
The docs states:
/**
* Enables or disables the window.
*
* A disabled window is unfocusable by definition.
* Also, key or mouse events aren't generated for disabled windows.
*
* When a user tries to activate a disabled window, or the window gets
* accidentally brought to the top of the stacking order, the window
* generates the FOCUS_DISABLED window event. A Glass client should react
* to this event and bring the currently active modal blocker of the
* disabled window to top by calling blocker's minimize(false), toFront(),
* and requestFocus() methods. It may also 'blink' the blocker window to
* further attract user's attention.
*
.....
So I guess the C++ side is ok, java side on `handleFocusDisabled` looks fishy to me, but not sure about that.
-------------
Commit messages:
- Fix for JDK-8271054
- Merge branch 'openjdk:master' into master
- Merge branch 'openjdk:master' into master
- Merge pull request #18 from openjdk/master
- Merge pull request #17 from openjdk/master
- Merge pull request #16 from openjdk/master
- Merge pull request #15 from openjdk/master
- Merge pull request #14 from openjdk/master
- Merge pull request #13 from openjdk/master
- Merge pull request #12 from openjdk/master
- ... and 8 more: https://git.openjdk.java.net/jfx/compare/ba61a173...3770f101
Changes: https://git.openjdk.java.net/jfx/pull/598/files
Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=598&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8271054
Stats: 2 lines in 1 file changed: 2 ins; 0 del; 0 mod
Patch: https://git.openjdk.java.net/jfx/pull/598.diff
Fetch: git fetch https://git.openjdk.java.net/jfx pull/598/head:pull/598
PR: https://git.openjdk.java.net/jfx/pull/598
More information about the openjfx-dev
mailing list