@@ -43,7 +43,12 @@ firetray.Window.shutdown = function() {
4343
4444firetray . Window . getVisibility = function ( wid ) {
4545 let hwnd = firetray . Win32 . hexStrToHwnd ( wid ) ;
46- let style = user32 . GetWindowLongW ( hwnd , user32 . GWL_STYLE ) ;
46+ let style ;
47+ if ( firetray . Handler . app . ABI == "x86_64-msvc" ) {
48+ style = user32 . GetWindowLongPtrW ( hwnd , user32 . GWL_STYLE ) ;
49+ } else {
50+ style = user32 . GetWindowLongW ( hwnd , user32 . GWL_STYLE ) ;
51+ }
4752 return ( ( style & user32 . WS_VISIBLE ) != 0 ) ; // user32.IsWindowVisible(hwnd);
4853} ;
4954
@@ -57,7 +62,8 @@ firetray.Window.setVisibility = function(wid, visible) {
5762 visible = true ;
5863 }
5964 let ret = user32 . ShowWindow ( hwnd , visible ? user32 . SW_SHOW : user32 . SW_HIDE ) ;
60- if ( visible ) user32 . SetForegroundWindow ( hwnd ) ;
65+ if ( firetray . Utils . prefService . getBoolPref ( 'show_activates' ) )
66+ if ( visible ) user32 . SetForegroundWindow ( hwnd ) ;
6167 log . debug ( " ShowWindow=" + ret + " winLastError=" + ctypes . winLastError ) ;
6268 return visible ;
6369} ;
@@ -138,21 +144,21 @@ firetray.Window.wndProcStartup = function(hWnd, uMsg, wParam, lParam) {
138144 return user32 . CallWindowProcW ( user32 . WNDPROC ( procPrev ) , hWnd , uMsg , wParam , lParam ) ;
139145} ;
140146
141- // https://social.msdn.microsoft.com/Forums/en-US/4eb3bad0-caf3-45ca-bfe8-7bc257af986a/getwindowlongsetwindowlong-on-gwlwndproc-crashes-in-compact-2013?forum=winembmngdapp
142- var procNat = null ;
143- firetray . Window . NativeWndProc = function ( hWnd , uMsg , wParam , lParam ) {
144- return user32 . CallWindowProcW ( user32 . WNDPROC ( procNat ) , hWnd , uMsg , wParam , lParam ) ;
145- }
146-
147147// procInfo = {wid, hwnd, jsProc, mapNew, mapBak}
148+ var procDummy = null ;
148149firetray . Window . attachWndProc = function ( procInfo ) {
149150 try {
150151 let wndProc = ctypes . cast ( user32 . WNDPROC ( procInfo . jsProc ) , win32 . LONG_PTR ) ;
151152 log . debug ( "proc=" + wndProc ) ;
152153 procInfo . mapNew . insert ( procInfo . wid , wndProc ) ;
153154// let procPrev = user32.SetWindowLongW(procInfo.hwnd, user32.GWLP_WNDPROC, wndProc);
154- this . procNat = wndProc ;
155- let procPrev = user32 . SetWindowLongW ( procInfo . hwnd , user32 . GWLP_WNDPROC , this . procNat ) ;
155+ this . procDummy = wndProc ;
156+ let procPrev ;
157+ if ( firetray . Handler . app . ABI == "x86_64-msvc" ) {
158+ procPrev = user32 . SetWindowLongPtrW ( procInfo . hwnd , user32 . GWLP_WNDPROC , wndProc ) ;
159+ } else {
160+ procPrev = user32 . SetWindowLongW ( procInfo . hwnd , user32 . GWLP_WNDPROC , wndProc ) ;
161+ }
156162 log . debug ( "procPrev=" + procPrev + " winLastError=" + ctypes . winLastError ) ;
157163 /* we can't store WNDPROC callbacks (JS ctypes objects) with SetPropW(), as
158164 we need long-living refs. */
@@ -179,7 +185,12 @@ firetray.Window.detachWndProc = function(procInfo) {
179185 let procNew = procInfo . mapNew . get ( wid ) ;
180186 let hwnd = firetray . Win32 . hexStrToHwnd ( wid ) ;
181187 log . debug ( "hwnd=" + hwnd ) ;
182- let procPrev = user32 . SetWindowLongW ( hwnd , user32 . GWLP_WNDPROC , procBak ) ;
188+ let procPrev ;
189+ if ( firetray . Handler . app . ABI == "x86_64-msvc" ) {
190+ procPrev = user32 . SetWindowLongPtrW ( hwnd , user32 . GWLP_WNDPROC , procBak ) ;
191+ } else {
192+ procPrev = user32 . SetWindowLongW ( hwnd , user32 . GWLP_WNDPROC , procBak ) ;
193+ }
183194 firetray . js . assert ( firetray . js . strEquals ( procPrev , procNew ) ,
184195 "Wrong WndProc replaced." ) ;
185196 procInfo . mapNew . remove ( wid ) ;
0 commit comments