Skip to content

Commit 92d7138

Browse files
committed
Fix windows crash
1 parent b01b041 commit 92d7138

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/modules/winnt/FiretrayWindow.jsm

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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}
135141
firetray.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

Comments
 (0)