From 28437f99cff7812a91793caec84cf2c894f758fd Mon Sep 17 00:00:00 2001 From: John Platts Date: Mon, 19 Sep 2022 13:53:33 -0500 Subject: [PATCH] Update new and delete FlatWndProc.cpp --- .../src/main/cpp/FlatWndProc.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp b/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp index b2f72ce1..12758ebd 100644 --- a/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp +++ b/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp @@ -99,15 +99,24 @@ HWND FlatWndProc::install( JNIEnv *env, jobject obj, jobject window ) { return 0; // create HWND map - if( hwndMap == NULL ) - hwndMap = new HWNDMap(); + if( hwndMap == NULL ) { + HWNDMap* newHwndMap = new (FlatLafNoThrow) HWNDMap(); + if(newHwndMap == NULL) { + return 0; + } else if(!newHwndMap->isTableAllocated()) { + FlatLafWin32ProcessHeapFree(newHwndMap); + return 0; + } + + hwndMap = newHwndMap; + } // get window handle HWND hwnd = getWindowHandle( env, window ); if( hwnd == NULL || hwndMap->get( hwnd ) != NULL ) return 0; - FlatWndProc* fwp = new FlatWndProc(); + FlatWndProc* fwp = new (FlatLafNoThrow) FlatWndProc(); env->GetJavaVM( &fwp->jvm ); fwp->obj = env->NewGlobalRef( obj ); fwp->hwnd = hwnd; @@ -140,7 +149,7 @@ void FlatWndProc::uninstall( JNIEnv *env, jobject obj, HWND hwnd ) { env->DeleteGlobalRef( fwp->obj ); if( fwp->background != NULL ) ::DeleteObject( fwp->background ); - delete fwp; + FlatLafWin32ProcessHeapDelete(fwp); } void FlatWndProc::initIDs( JNIEnv *env, jobject obj ) { @@ -298,7 +307,7 @@ LRESULT FlatWndProc::WmDestroy( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lPara if( background != NULL ) ::DeleteObject( background ); hwndMap->remove( hwnd ); - delete this; + FlatLafWin32ProcessHeapFree(this); // call original AWT window procedure because it may fire window closed event in AwtWindow::WmDestroy() return ::CallWindowProc( defaultWndProc2, hwnd, uMsg, wParam, lParam );