From 1bffa9138f96098a82ec635b3e8612b34f414796 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 2 Nov 2001 00:44:19 +0000 Subject: [PATCH] replaced wxList for storing HWND <-> wxWindow with wxHashTable git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12250 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/window.h | 7 +++++++ src/msw/app.cpp | 6 ++---- src/msw/window.cpp | 12 ++++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index 4e9bc75585..790c282c83 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -28,6 +28,13 @@ // a better solution should be found later... #define wxUSE_MOUSEEVENT_HACK 0 +#include "wx/hash.h" + +// pseudo-template HWND <-> wxWindow hash table +WX_DECLARE_HASH(wxWindow, wxWindowList, wxWinHashTable); + +extern wxWinHashTable *wxWinHandleHash; + // --------------------------------------------------------------------------- // constants // --------------------------------------------------------------------------- diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 45250cfe16..31e9ddfc8a 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -124,7 +124,6 @@ // --------------------------------------------------------------------------- extern wxChar *wxBuffer; -extern wxList *wxWinHandleList; extern wxList WXDLLEXPORT wxPendingDelete; #ifndef __WXMICROWIN__ extern void wxSetKeyboardHook(bool doIt); @@ -295,7 +294,7 @@ bool wxApp::Initialize() wxRegisterPenWin(); #endif - wxWinHandleList = new wxList(wxKEY_INTEGER); + wxWinHandleHash = new wxWinHashTable(wxKEY_INTEGER, 100); // This is to foil optimizations in Visual C++ that throw out dummy.obj. // PLEASE DO NOT ALTER THIS. @@ -701,8 +700,7 @@ void wxApp::CleanUp() Ctl3dUnregister(wxhInstance); #endif - if (wxWinHandleList) - delete wxWinHandleList; + delete wxWinHandleHash; // GL: I'm annoyed ... I don't know where to put this and I don't want to // create a module for that as it's part of the core. diff --git a/src/msw/window.cpp b/src/msw/window.cpp index dc8a956358..a73e4bad73 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -118,7 +118,6 @@ #endif #endif - // --------------------------------------------------------------------------- // global variables // --------------------------------------------------------------------------- @@ -2594,14 +2593,11 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam // wxWindow <-> HWND map // ---------------------------------------------------------------------------- -wxList *wxWinHandleList = NULL; +wxWinHashTable *wxWinHandleHash = NULL; wxWindow *wxFindWinFromHandle(WXHWND hWnd) { - wxNode *node = wxWinHandleList->Find((long)hWnd); - if ( !node ) - return NULL; - return (wxWindow *)node->Data(); + return wxWinHandleHash->Get((long)hWnd); } void wxAssociateWinWithHandle(HWND hWnd, wxWindowMSW *win) @@ -2622,13 +2618,13 @@ void wxAssociateWinWithHandle(HWND hWnd, wxWindowMSW *win) #endif // __WXDEBUG__ if (!oldWin) { - wxWinHandleList->Append((long)hWnd, win); + wxWinHandleHash->Put((long)hWnd, win); } } void wxRemoveHandleAssociation(wxWindowMSW *win) { - wxWinHandleList->DeleteObject(win); + wxWinHandleHash->Delete((long)win->GetHWND()); } // ---------------------------------------------------------------------------- -- 2.45.2