Windows: Pass EventStatus::Ignored keyboard events to parent (feature parity with OSX)#260
Windows: Pass EventStatus::Ignored keyboard events to parent (feature parity with OSX)#260AlexCharlton wants to merge 1 commit into
EventStatus::Ignored keyboard events to parent (feature parity with OSX)#260Conversation
1ab776c to
ccaeff9
Compare
ccaeff9 to
4eb0f59
Compare
4eb0f59 to
ecd35d8
Compare
|
This is not going to work correctly when there is not a one-to-one relationship between window messages and baseview keyboard events. The |
Ah ha! I did not appreciate that |
That sounds reasonable to me, though I would want to see some testing for the specific multi-message cases that More generally, I would want to see some testing of this PR in different hosts to determine if and where it is actually necessary and if it actually has the desired effect. |
By "see some testing," I'm guessing you mean you'd like me to describe under what conditions I tried this out? As for "if and where it is actually necessary", I'll refer you to the original commit+comment that introduced this feature: 72b6a4a#diff-14da7c350de5742eaa248de110fefeae9b4b639c0358e26024d6040ccf174a41R100-R105 There's lots of cases where this could be useful, though. Many plugins don't have any keybindings at all, so you really want to ignore everything or else you'll block your DAW's keybindings while your plugin is active. Or you could only handle keys that do something in your plugin, so that anything that doesn't overlap will still go through to your DAW. |
|
I definitely understand the rationale for the feature. I'm more interested in examples of specific hosts where this particular approach actually has the desired effect. Keyboard focus handling in hosts and plugins on Windows is a real mess, with hosts implementing all sorts of workarounds (using Win32 subclassing to intercept keyboard events received by the plugin's child window, filtering out keyboard events at the point of the event loop, etc.) and plugins implementing all sorts of workarounds in turn (creating invisible child windows to handle keyboard events, registering keyboard hooks, etc.). Because of that, it is not obvious to me just from looking at the code whether a change like this will actually accomplish what it's supposed to without causing other problems. |
Title says it all, I think :)