@@ -363,6 +363,21 @@ private GuiWidget FindRootSystemWindow()
363363
364364 private static readonly uint ModifierKeyMask = ModifierKeyList . Aggregate ( 0u , ( acc , v ) => acc | ( uint ) v ) ;
365365
366+ private static void TrySetModifierKeys ( IPlatformWindow platformWindow , Keys mods )
367+ {
368+ var type = platformWindow . GetType ( ) ;
369+ while ( type != null )
370+ {
371+ var method = type . GetMethod ( "SetModifierKeys" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . DeclaredOnly ) ;
372+ if ( method != null )
373+ {
374+ method . Invoke ( platformWindow , new object [ ] { mods } ) ;
375+ return ;
376+ }
377+ type = type . BaseType ;
378+ }
379+ }
380+
366381 public void PressModifierKeys ( Keys modifierKeys )
367382 {
368383 var mods = ( uint ) modifierKeys & ModifierKeyMask ;
@@ -402,12 +417,7 @@ void setModifiers(uint m, Keys key)
402417 setModifiers ( mods , Keys . Control ) ;
403418 setModifiers ( mods , Keys . Alt ) ;
404419
405- var platformWindowType = systemWindow . PlatformWindow . GetType ( ) ;
406- if ( platformWindowType . Name == "OpenGLSystemWindow" )
407- {
408- var methodInfo = platformWindowType . GetMethod ( "SetModifierKeys" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
409- methodInfo . Invoke ( systemWindow . PlatformWindow , new object [ ] { ( Keys ) mods } ) ;
410- }
420+ TrySetModifierKeys ( systemWindow . PlatformWindow , ( Keys ) mods ) ;
411421
412422 systemWindow . OnKeyDown ( keyDownEvent ) ;
413423 }
@@ -451,12 +461,7 @@ void unsetModifier(uint m, Keys key)
451461 unsetModifier ( mods , Keys . Control ) ;
452462 unsetModifier ( mods , Keys . Alt ) ;
453463
454- var platformWindowType = systemWindow . PlatformWindow . GetType ( ) ;
455- if ( platformWindowType . Name == "OpenGLSystemWindow" )
456- {
457- var methodInfo = platformWindowType . GetMethod ( "SetModifierKeys" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
458- methodInfo . Invoke ( systemWindow . PlatformWindow , new object [ ] { ( Keys ) mods } ) ;
459- }
464+ TrySetModifierKeys ( systemWindow . PlatformWindow , ( Keys ) mods ) ;
460465
461466 systemWindow . OnKeyUp ( keyUpEvent ) ;
462467 }
0 commit comments