diff --git a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp index 84339e40eee..080e8d42741 100644 --- a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp +++ b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp @@ -101,7 +101,8 @@ LRESULT CALLBACK FileDialogWndProc(HWND hWnd, UINT message, } } - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam); + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); } static UINT_PTR CALLBACK @@ -135,16 +136,19 @@ FileDialogHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) } // subclass dialog's parent to receive additional messages - ComCtl32Util::GetInstance().SubclassHWND(parent, - FileDialogWndProc); + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(parent, + FileDialogWndProc); + ::SetProp(parent, NativeDialogWndProcProp, reinterpret_cast(lpfnWndProc)); break; } case WM_DESTROY: { + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(parent, NativeDialogWndProcProp)); ComCtl32Util::GetInstance().UnsubclassHWND(parent, FileDialogWndProc, - NULL); + lpfnWndProc); ::RemoveProp(parent, ModalDialogPeerProp); + ::RemoveProp(parent, NativeDialogWndProcProp); break; } case WM_NOTIFY: { diff --git a/jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp b/jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp index 762ae2673eb..12b208b9493 100644 --- a/jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp +++ b/jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp @@ -65,7 +65,8 @@ LRESULT CALLBACK PrintDialogWndProc(HWND hWnd, UINT message, } } - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam); + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); } static UINT_PTR CALLBACK @@ -99,16 +100,19 @@ PrintDialogHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) } // subclass dialog's parent to receive additional messages - ComCtl32Util::GetInstance().SubclassHWND(hdlg, - PrintDialogWndProc); + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hdlg, + PrintDialogWndProc); + ::SetProp(hdlg, NativeDialogWndProcProp, reinterpret_cast(lpfnWndProc)); break; } case WM_DESTROY: { + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hdlg, NativeDialogWndProcProp)); ComCtl32Util::GetInstance().UnsubclassHWND(hdlg, PrintDialogWndProc, - NULL); + lpfnWndProc); ::RemoveProp(hdlg, ModalDialogPeerProp); + ::RemoveProp(hdlg, NativeDialogWndProcProp); break; } } diff --git a/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp b/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp index 9136b786412..c3339778695 100644 --- a/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp +++ b/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp @@ -2885,7 +2885,8 @@ LRESULT CALLBACK PageDialogWndProc(HWND hWnd, UINT message, } } - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam); + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); } /** @@ -2919,16 +2920,19 @@ static UINT CALLBACK pageDlgHook(HWND hDlg, UINT msg, } // subclass dialog's parent to receive additional messages - ComCtl32Util::GetInstance().SubclassHWND(hDlg, - PageDialogWndProc); + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hDlg, + PageDialogWndProc); + ::SetProp(hDlg, NativeDialogWndProcProp, reinterpret_cast(lpfnWndProc)); break; } case WM_DESTROY: { + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hDlg, NativeDialogWndProcProp)); ComCtl32Util::GetInstance().UnsubclassHWND(hDlg, PageDialogWndProc, - NULL); + lpfnWndProc); ::RemoveProp(hDlg, ModalDialogPeerProp); + ::RemoveProp(hDlg, NativeDialogWndProcProp); break; } } diff --git a/jdk/src/windows/native/sun/windows/awt_Window.h b/jdk/src/windows/native/sun/windows/awt_Window.h index a3d57db7b2d..17f05ec164a 100644 --- a/jdk/src/windows/native/sun/windows/awt_Window.h +++ b/jdk/src/windows/native/sun/windows/awt_Window.h @@ -34,6 +34,7 @@ // property name tagging windows disabled by modality static LPCTSTR ModalBlockerProp = TEXT("SunAwtModalBlockerProp"); static LPCTSTR ModalDialogPeerProp = TEXT("SunAwtModalDialogPeerProp"); +static LPCTSTR NativeDialogWndProcProp = TEXT("SunAwtNativeDialogWndProcProp"); #ifndef WH_MOUSE_LL #define WH_MOUSE_LL 14