Removed the MainWindow::MDIWindowChanged slot which was handling the custom focus we no longer need.
Removed the custom _parentHasFocus member and its setter from the asset scroll area background.
Switched A and D to left/right respectively in the asset scroll area background because they were backwards before.
Allowed the asset scroll area background to handle events when it's not in focus. It's supposed to do this by design because widgets actually need to repaint as another window is moved around on top of them.
The asset scroll area background will not handle events like mouse movement when another MDI window occludes them. The Qt platform does this for us automatically using a mouse trap. Anything else would be direct input, hence the name of DirectInput or raw input.
I verified the above by printing, and it's also behavior I expect from UI frameworks based on my experience with Swing/Qt.
GM 8.1 & LGM have the same expected behavior, the mouse position is updated when not in focus but not if occluded.
This was quite a bit of a mess and actually inconsistent with both how GUI frameworks are designed and GM8.1 path editor.
hasFocus()
which the framework automatically handles for us including the focus traversal order. It's extremely rare that you should ever be doing your own custom focus handling in any framework really. https://doc.qt.io/qt-5/qwidget.html#focus-prop https://doc.qt.io/qt-5/focus.htmlMainWindow::MDIWindowChanged
slot which was handling the custom focus we no longer need._parentHasFocus
member and its setter from the asset scroll area background.