#if wxUSE_THREADS
#include "wx/thread.h"
- // define the array of MSG strutures
- WX_DECLARE_OBJARRAY(MSG, wxMsgArray);
+ // define the list of MSG strutures
+ WX_DECLARE_LIST(MSG, wxMsgList);
- #include "wx/arrimpl.cpp"
+ #include "wx/listimpl.cpp"
- WX_DEFINE_OBJARRAY(wxMsgArray);
+ WX_DEFINE_LIST(wxMsgList);
#endif // wxUSE_THREADS
// ----------------------------------------------------------------------------
HWND hwnd = msg->hwnd;
wxWindow *wndThis = wxGetWindowFromHWND((WXHWND)hwnd);
- // this may happen if the event occured in a standard modeless dialog (the
+ // this may happen if the event occurred in a standard modeless dialog (the
// only example of which I know of is the find/replace dialog) - then call
// IsDialogMessage() to make TAB navigation in it work
if ( !wndThis )
wxT("only the main thread can process Windows messages") );
static bool s_hadGuiLock = true;
- static wxMsgArray s_aSavedMessages;
+ static wxMsgList s_aSavedMessages;
// if a secondary thread owning the mutex is doing GUI calls, save all
// messages for later processing - we can't process them right now because
// the message will be processed twice
if ( !wxIsWaitingForThread() || msg.message != WM_COMMAND )
{
- s_aSavedMessages.Add(msg);
+ MSG* pMsg = new MSG(msg);
+ s_aSavedMessages.Append(pMsg);
}
return true;
{
s_hadGuiLock = true;
- size_t count = s_aSavedMessages.Count();
- for ( size_t n = 0; n < count; n++ )
+ wxMsgList::compatibility_iterator node = s_aSavedMessages.GetFirst();
+ while (node)
{
- MSG& msg = s_aSavedMessages[n];
- ProcessMessage(&msg);
- }
+ MSG* pMsg = node->GetData();
+ s_aSavedMessages.Erase(node);
+
+ ProcessMessage(pMsg);
+ delete pMsg;
- s_aSavedMessages.Empty();
+ node = s_aSavedMessages.GetFirst();
+ }
}
}
#endif // wxUSE_THREADS