@@ -13,15 +13,15 @@ use windows_sys::Win32::{
1313 } ,
1414 WindowsAndMessaging :: {
1515 AdjustWindowRectEx , CreateWindowExW , DefWindowProcW , DestroyWindow , DispatchMessageW ,
16- GetMessageW , GetWindowLongPtrW , LoadCursorW , PostMessageW , SetCursor , SetTimer ,
17- SetWindowLongPtrW , SetWindowPos , TranslateMessage , GWLP_USERDATA , HTCLIENT , MSG ,
18- SWP_NOACTIVATE , SWP_NOMOVE , SWP_NOZORDER , WHEEL_DELTA , WM_CHAR , WM_CLOSE , WM_CREATE ,
19- WM_DPICHANGED , WM_INPUTLANGCHANGE , WM_KEYDOWN , WM_KEYUP , WM_LBUTTONDOWN , WM_LBUTTONUP ,
20- WM_MBUTTONDOWN , WM_MBUTTONUP , WM_MOUSEHWHEEL , WM_MOUSEMOVE , WM_MOUSEWHEEL ,
21- WM_NCDESTROY , WM_RBUTTONDOWN , WM_RBUTTONUP , WM_SETCURSOR , WM_SHOWWINDOW , WM_SIZE ,
22- WM_SYSCHAR , WM_SYSKEYDOWN , WM_SYSKEYUP , WM_TIMER , WM_USER , WM_XBUTTONDOWN ,
23- WM_XBUTTONUP , WS_CAPTION , WS_CHILD , WS_CLIPSIBLINGS , WS_MAXIMIZEBOX , WS_MINIMIZEBOX ,
24- WS_POPUPWINDOW , WS_SIZEBOX , WS_VISIBLE ,
16+ GetMessageW , GetParent , GetWindowLongPtrW , LoadCursorW , PostMessageW , SendMessageW ,
17+ SetCursor , SetTimer , SetWindowLongPtrW , SetWindowPos , TranslateMessage , GWLP_USERDATA ,
18+ HTCLIENT , MSG , SWP_NOACTIVATE , SWP_NOMOVE , SWP_NOZORDER , WHEEL_DELTA , WM_CHAR ,
19+ WM_CLOSE , WM_CREATE , WM_DPICHANGED , WM_INPUTLANGCHANGE , WM_KEYDOWN , WM_KEYUP ,
20+ WM_LBUTTONDOWN , WM_LBUTTONUP , WM_MBUTTONDOWN , WM_MBUTTONUP , WM_MOUSEHWHEEL ,
21+ WM_MOUSEMOVE , WM_MOUSEWHEEL , WM_NCDESTROY , WM_RBUTTONDOWN , WM_RBUTTONUP , WM_SETCURSOR ,
22+ WM_SHOWWINDOW , WM_SIZE , WM_SYSCHAR , WM_SYSKEYDOWN , WM_SYSKEYUP , WM_TIMER , WM_USER ,
23+ WM_XBUTTONDOWN , WM_XBUTTONUP , WS_CAPTION , WS_CHILD , WS_CLIPSIBLINGS , WS_MAXIMIZEBOX ,
24+ WS_MINIMIZEBOX , WS_POPUPWINDOW , WS_SIZEBOX , WS_VISIBLE ,
2525 } ,
2626 } ,
2727} ;
@@ -45,8 +45,8 @@ const BV_WINDOW_MUST_CLOSE: u32 = WM_USER + 1;
4545
4646use crate :: win:: hook:: { self , KeyboardHookHandle } ;
4747use crate :: {
48- Event , MouseButton , MouseCursor , MouseEvent , PhyPoint , PhySize , ScrollDelta , Size , WindowEvent ,
49- WindowHandler , WindowInfo , WindowOpenOptions , WindowScalePolicy ,
48+ Event , EventStatus , MouseButton , MouseCursor , MouseEvent , PhyPoint , PhySize , ScrollDelta , Size ,
49+ WindowEvent , WindowHandler , WindowInfo , WindowOpenOptions , WindowScalePolicy ,
5050} ;
5151
5252use super :: cursor:: cursor_to_lpcwstr;
@@ -352,13 +352,24 @@ unsafe fn wnd_proc_inner(
352352 let opt_event =
353353 window_state. keyboard_state . borrow_mut ( ) . process_message ( hwnd, msg, wparam, lparam) ;
354354
355- if let Some ( event) = opt_event {
355+ let status = if let Some ( event) = opt_event {
356356 window_state
357357 . handler
358358 . borrow_mut ( )
359359 . as_mut ( )
360360 . unwrap ( )
361- . on_event ( & mut window, Event :: Keyboard ( event) ) ;
361+ . on_event ( & mut window, Event :: Keyboard ( event) )
362+ } else {
363+ EventStatus :: Ignored
364+ } ;
365+
366+ if status == EventStatus :: Ignored {
367+ let parent = GetParent ( hwnd) ;
368+ if !parent. is_null ( ) {
369+ SendMessageW ( parent, msg, wparam, lparam) ;
370+ return Some ( 0 ) ;
371+ }
372+ return None ;
362373 }
363374
364375 if msg != WM_SYSKEYDOWN {
0 commit comments