From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Fri, 2 Nov 2001 00:44:19 +0000 (+0000)
Subject: replaced wxList for storing HWND <-> wxWindow with wxHashTable
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1bffa9138f96098a82ec635b3e8612b34f414796

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
---

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());
 }
 
 // ----------------------------------------------------------------------------