[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: RFR: 8271054: [REDO] Wrong stage gets focused after modal stage creation [v3]
From:       Thiago Milczarek Sayao <tsayao () openjdk ! java ! net>
Date:       2021-09-30 12:07:51
Message-ID: CAUe2HUkeYwb9L9zMscIVHkaqeY0Str1yQ7_WOWFAis=.fe439a74-1fea-45b9-8fb6-0dad3e9f232d () github ! com
[Download RAW message or body]

On Wed, 22 Sep 2021 16:39:15 GMT, Thiago Milczarek Sayao <tsayao@openjdk.org> wrote:

> > 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 looks ok, java side on `handleFocusDisabled` I did not \
> > understand why it `requestToFront` and `requestFocus` on the latest window. 
> > The solution makes disabled windows unfocusable and prevents mouse and keyboard \
> > events as the docs states, making it compatible with other platforms.
> 
> Thiago Milczarek Sayao has updated the pull request incrementally with one \
> additional commit since the last revision: 
> Break if reach self

Just a note, our javafx application at the company I work for is unusable with \
javafx17 on Linux, windows go behind their owner or pops up wrongly. Can't use 17 \
line until it's fixed.

-------------

PR: https://git.openjdk.java.net/jfx/pull/598


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic