Improve focus tracking in Q7.


  • Type: Task Task
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 1.3.9
  • Fix Version/s: 1.3.10
  • Component/s: Recording, Runtime
  • Labels:
  • Test Mode:


Focus tracking problem and solution in Q7:

How it currently works:

1. Most of Q7 ECL commands send FocusIn/Activate on begining of the command and FocusOut/Deactivate on the end of the command.
2. We also have few restrictions to not call for FocusOut/Deactivate in case we detect a jface cell editor. But not for custom one popup editor with focus lost listeners.
3. We have active/apply/cancel-cell-editor set of commands to work with jface cell editors, we try to not send focus-out events to cell editors, and controls inside of them. We instead do a apply for cell editor in case of command.

The problem

Approach then we always send focusIn/focusOut is not always work as expected.

In case of cell-editors we are not always able to detect cell-editor controls, since they could show some popups, have comosite controls and so on. So for most of commands we incorrectly send focus-out, this is causing control to disappear, also lead to Widget is disposed exceptions in stack trace. So replay is broken because of this.

In case of some custom popups, if they use focus-lost listener we don't support them at all. So any command inside control will trigger it disappear.

Also triggering of Activate/FocusIn and Deactivate/Focus out then working in scope of one control could have additional performance impacts.

The solution:

Q7 should be aware of last focused control and send FocusLost/Deactivate only then we switch do different control.
In the same way we should send Focus-in/Activate only then we start working with particular control.

Issue Links


Andrey Sobolev added a comment - 11/Dec/13 10:45 PM

Mostly fixed.

Andrey Sobolev added a comment - 11/Dec/13 10:45 PM Mostly fixed.


Vote (0)
Watch (0)


  • Created:
    25/Nov/13 2:35 PM
    17/Jan/14 11:36 AM
    11/Dec/13 10:45 PM