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