[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 [v9]
From:       Thiago Milczarek Sayao <tsayao () openjdk ! java ! net>
Date:       2022-01-25 23:57:09
Message-ID: eGr_0Pr8DlFeCC_3BP3OPIKQbrdFvzsx2z25AIAMCpk=.95d50851-c702-45e1-9fc2-ade1f713d431 () github ! com
[Download RAW message or body]

> 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:

  Capture event serial on process_key

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

Changes:
  - all: https://git.openjdk.java.net/jfx/pull/598/files
  - new: https://git.openjdk.java.net/jfx/pull/598/files/8630c557..ee8ab1e2

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jfx&pr=598&range=08
 - incr: https://webrevs.openjdk.java.net/?repo=jfx&pr=598&range=07-08

  Stats: 7 lines in 2 files changed: 6 ins; 1 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


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

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