@@ -131,13 +131,21 @@ firetray.Window.wndProcStartup = function(hWnd, uMsg, wParam, lParam) {
131131 return user32 . CallWindowProcW ( user32 . WNDPROC ( procPrev ) , hWnd , uMsg , wParam , lParam ) ;
132132} ;
133133
134+ // https://social.msdn.microsoft.com/Forums/en-US/4eb3bad0-caf3-45ca-bfe8-7bc257af986a/getwindowlongsetwindowlong-on-gwlwndproc-crashes-in-compact-2013?forum=winembmngdapp
135+ var procNat = null ;
136+ firetray . Window . NativeWndProc = function ( hWnd , uMsg , wParam , lParam ) {
137+ return user32 . CallWindowProcW ( user32 . WNDPROC ( procNat ) , hWnd , uMsg , wParam , lParam ) ;
138+ }
139+
134140// procInfo = {wid, hwnd, jsProc, mapNew, mapBak}
135141firetray . Window . attachWndProc = function ( procInfo ) {
136142 try {
137143 let wndProc = ctypes . cast ( user32 . WNDPROC ( procInfo . jsProc ) , win32 . LONG_PTR ) ;
138144 log . debug ( "proc=" + wndProc ) ;
139145 procInfo . mapNew . insert ( procInfo . wid , wndProc ) ;
140- let procPrev = user32 . SetWindowLongW ( procInfo . hwnd , user32 . GWLP_WNDPROC , wndProc ) ;
146+ // let procPrev = user32.SetWindowLongW(procInfo.hwnd, user32.GWLP_WNDPROC, wndProc);
147+ this . procNat = wndProc ;
148+ let procPrev = user32 . SetWindowLongW ( procInfo . hwnd , user32 . GWLP_WNDPROC , this . procNat ) ;
141149 log . debug ( "procPrev=" + procPrev + " winLastError=" + ctypes . winLastError ) ;
142150 /* we can't store WNDPROC callbacks (JS ctypes objects) with SetPropW(), as
143151 we need long-living refs. */
0 commit comments