X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e441e1f4e8671915ee9bb32049edb4f1d700126e..b6a20a20d010d643e52914f51aa0700df0da925f:/src/x11/window.cpp?ds=sidebyside diff --git a/src/x11/window.cpp b/src/x11/window.cpp index 93c612e4e9..666f2d0157 100644 --- a/src/x11/window.cpp +++ b/src/x11/window.cpp @@ -62,8 +62,6 @@ // global variables for this module // ---------------------------------------------------------------------------- -extern wxHashTable *wxWidgetHashTable; -extern wxHashTable *wxClientWidgetHashTable; static wxWindow* g_captureWindow = NULL; static GC g_eraseGC; @@ -99,9 +97,6 @@ END_EVENT_TABLE() void wxWindowX11::Init() { - // generic initializations first - InitBase(); - // X11-specific m_mainWindow = (WXWindow) 0; m_clientWindow = (WXWindow) 0; @@ -111,7 +106,6 @@ void wxWindowX11::Init() m_winCaptured = FALSE; m_needsInputFocus = FALSE; m_isShown = TRUE; - m_isBeingDeleted = FALSE; m_lastTS = 0; m_lastButton = 0; } @@ -1297,73 +1291,71 @@ void wxWindowX11::OnInternalIdle() } // ---------------------------------------------------------------------------- -// function which maintain the global hash table mapping Widgets to wxWindows +// function which maintain the global hash table mapping Widgets to wxWidgets // ---------------------------------------------------------------------------- -bool wxAddWindowToTable(Window w, wxWindow *win) +static bool DoAddWindowToTable(wxWindowHash *hash, Window w, wxWindow *win) { - wxWindow *oldItem = NULL; - if ((oldItem = (wxWindow *)wxWidgetHashTable->Get ((long) w))) + if ( !hash->insert(wxWindowHash::value_type(w, win)).second ) { - wxLogDebug( wxT("Widget table clash: new widget is %ld, %s"), - (long)w, win->GetClassInfo()->GetClassName()); + wxLogDebug( wxT("Widget table clash: new widget is 0x%08x, %s"), + (unsigned int)w, win->GetClassInfo()->GetClassName()); return FALSE; } - wxWidgetHashTable->Put((long) w, win); - wxLogTrace( wxT("widget"), wxT("XWindow 0x%08x <-> window %p (%s)"), (unsigned int) w, win, win->GetClassInfo()->GetClassName()); return TRUE; } -wxWindow *wxGetWindowFromTable(Window w) +static inline wxWindow *DoGetWindowFromTable(wxWindowHash *hash, Window w) { - return (wxWindow *)wxWidgetHashTable->Get((long) w); + wxWindowHash::iterator i = hash->find(w); + return i == hash->end() ? NULL : i->second; } -void wxDeleteWindowFromTable(Window w) +static inline void DoDeleteWindowFromTable(wxWindowHash *hash, Window w) { - wxWidgetHashTable->Delete((long)w); + wxLogTrace( wxT("widget"), wxT("XWindow 0x%08x deleted"), (unsigned int) w); + + hash->erase(w); } // ---------------------------------------------------------------------------- -// function which maintain the global hash table mapping client widgets +// public wrappers // ---------------------------------------------------------------------------- -bool wxAddClientWindowToTable(Window w, wxWindow *win) +bool wxAddWindowToTable(Window w, wxWindow *win) { - wxWindow *oldItem = NULL; - if ((oldItem = (wxWindow *)wxClientWidgetHashTable->Get ((long) w))) - { - wxLogDebug( wxT("Client window table clash: new window is %ld, %s"), - (long)w, win->GetClassInfo()->GetClassName()); - return FALSE; - } + return DoAddWindowToTable(wxWidgetHashTable, w, win); +} - wxClientWidgetHashTable->Put((long) w, win); +wxWindow *wxGetWindowFromTable(Window w) +{ + return DoGetWindowFromTable(wxWidgetHashTable, w); +} - wxLogTrace( wxT("widget"), wxT("XWindow 0x%08x <-> window %p (%s)"), - (unsigned int) w, win, win->GetClassInfo()->GetClassName()); +void wxDeleteWindowFromTable(Window w) +{ + DoDeleteWindowFromTable(wxWidgetHashTable, w); +} - return TRUE; +bool wxAddClientWindowToTable(Window w, wxWindow *win) +{ + return DoAddWindowToTable(wxClientWidgetHashTable, w, win); } wxWindow *wxGetClientWindowFromTable(Window w) { - return (wxWindow *)wxClientWidgetHashTable->Get((long) w); + return DoGetWindowFromTable(wxClientWidgetHashTable, w); } void wxDeleteClientWindowFromTable(Window w) { - wxClientWidgetHashTable->Delete((long)w); + DoDeleteWindowFromTable(wxClientWidgetHashTable, w); } -// ---------------------------------------------------------------------------- -// add/remove window from the table -// ---------------------------------------------------------------------------- - // ---------------------------------------------------------------------------- // X11-specific accessors // ----------------------------------------------------------------------------