X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5ff845876ff171e2c9f3d543f30c37dff2599a2e..6d7b547184bfdcdf67790755deb0122050b1d728:/src/common/wincmn.cpp?ds=sidebyside diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 09a2f04668..7ce145ca24 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -29,7 +29,6 @@ #include "wx/log.h" #include "wx/intl.h" #include "wx/frame.h" - #include "wx/defs.h" #include "wx/window.h" #include "wx/control.h" #include "wx/checkbox.h" @@ -42,17 +41,10 @@ #include "wx/statusbr.h" #include "wx/toolbar.h" #include "wx/dcclient.h" -#endif //WX_PRECOMP - -#if defined(__WXMAC__) && wxUSE_SCROLLBAR #include "wx/scrolbar.h" -#endif - -#if wxUSE_CONSTRAINTS #include "wx/layout.h" -#endif // wxUSE_CONSTRAINTS - -#include "wx/sizer.h" + #include "wx/sizer.h" +#endif //WX_PRECOMP #if wxUSE_DRAG_AND_DROP #include "wx/dnd.h" @@ -91,6 +83,9 @@ extern const unsigned int gtk_micro_version; #endif +// Windows List +WXDLLIMPEXP_DATA_CORE(wxWindowList) wxTopLevelWindows; + // ---------------------------------------------------------------------------- // static data // ---------------------------------------------------------------------------- @@ -221,9 +216,6 @@ wxWindowBase::wxWindowBase() // VZ: this one shouldn't exist... m_isBeingDeleted = false; - - // Reserved for future use - m_windowReserved = NULL; } // common part of window creation process @@ -299,11 +291,6 @@ wxWindowBase::~wxWindowBase() // reset the dangling pointer our parent window may keep to us if ( m_parent ) { - if ( m_parent->GetDefaultItem() == this ) - { - m_parent->SetDefaultItem(NULL); - } - m_parent->RemoveChild(this); } @@ -446,8 +433,9 @@ void wxWindowBase::InvalidateBestSize() m_bestSizeCache = wxDefaultSize; // parent's best size calculation may depend on its children's - // best sizes, so let's invalidate it as well to be safe - // (but don't influence other wxTLWs) + // as long as child window we are in is not top level window itself + // (because the TLW size is never resized automatically) + // so let's invalidate it as well to be safe: if (m_parent && !IsTopLevel()) m_parent->InvalidateBestSize(); } @@ -504,7 +492,8 @@ wxSize wxWindowBase::DoGetBestSize() const #endif ) { - // our minimal acceptable size is such that all our visible child windows fit inside + // our minimal acceptable size is such that all our visible child + // windows fit inside int maxX = 0, maxY = 0; @@ -513,9 +502,10 @@ wxSize wxWindowBase::DoGetBestSize() const node = node->GetNext() ) { wxWindow *win = node->GetData(); - if ( win->IsTopLevel() || ( ! win->IsShown() ) + if ( win->IsTopLevel() + || !win->IsShown() #if wxUSE_STATUSBAR - || wxDynamicCast(win, wxStatusBar) + || wxDynamicCast(win, wxStatusBar) #endif // wxUSE_STATUSBAR ) { @@ -542,11 +532,6 @@ wxSize wxWindowBase::DoGetBestSize() const maxY = wy + wh; } - // for compatibility with the old versions and because it really looks - // slightly more pretty like this, add a pad - maxX += 7; - maxY += 14; - best = wxSize(maxX, maxY); } else // ! has children @@ -714,6 +699,18 @@ wxSize wxWindowBase::DoGetVirtualSize() const return size; } +void wxWindowBase::DoGetScreenPosition(int *x, int *y) const +{ + // screen position is the same as (0, 0) in client coords for non TLWs (and + // TLWs override this method) + if ( x ) + *x = 0; + if ( y ) + *y = 0; + + ClientToScreen(x, y); +} + // ---------------------------------------------------------------------------- // show/hide/enable/disable the window // ---------------------------------------------------------------------------- @@ -1464,7 +1461,10 @@ void wxWindowBase::SetHelpTextForId(const wxString& text) } // get the help string associated with this window (may be empty) -wxString wxWindowBase::GetHelpText() const +// default implementation forwards calls to the help provider +wxString +wxWindowBase::GetHelpTextAtPoint(const wxPoint & WXUNUSED(pt), + wxHelpEvent::Origin WXUNUSED(origin)) const { wxString text; wxHelpProvider *helpProvider = wxHelpProvider::Get(); @@ -1482,7 +1482,7 @@ void wxWindowBase::OnHelp(wxHelpEvent& event) wxHelpProvider *helpProvider = wxHelpProvider::Get(); if ( helpProvider ) { - if ( helpProvider->ShowHelp(this) ) + if ( helpProvider->ShowHelpAtPoint(this, event.GetPosition(), event.GetOrigin()) ) { // skip the event.Skip() below return; @@ -1518,10 +1518,13 @@ void wxWindowBase::SetToolTip( const wxString &tip ) void wxWindowBase::DoSetToolTip(wxToolTip *tooltip) { - if ( m_tooltip ) - delete m_tooltip; + if ( m_tooltip != tooltip ) + { + if ( m_tooltip ) + delete m_tooltip; - m_tooltip = tooltip; + m_tooltip = tooltip; + } } #endif // wxUSE_TOOLTIPS @@ -2334,7 +2337,7 @@ struct WXDLLEXPORT wxWindowNext void wxWindowBase::CaptureMouse() { - wxLogTrace(_T("mousecapture"), _T("CaptureMouse(%p)"), this); + wxLogTrace(_T("mousecapture"), _T("CaptureMouse(%p)"), wx_static_cast(void*, this)); wxWindow *winOld = GetCapture(); if ( winOld ) @@ -2354,7 +2357,7 @@ void wxWindowBase::CaptureMouse() void wxWindowBase::ReleaseMouse() { - wxLogTrace(_T("mousecapture"), _T("ReleaseMouse(%p)"), this); + wxLogTrace(_T("mousecapture"), _T("ReleaseMouse(%p)"), wx_static_cast(void*, this)); wxASSERT_MSG( GetCapture() == this, wxT("attempt to release mouse, but this window hasn't captured it") ); @@ -2372,7 +2375,7 @@ void wxWindowBase::ReleaseMouse() wxLogTrace(_T("mousecapture"), (const wxChar *) _T("After ReleaseMouse() mouse is captured by %p"), - GetCapture()); + wx_static_cast(void*, GetCapture())); } #if wxUSE_HOTKEY @@ -2793,7 +2796,7 @@ wxAccStatus wxWindowAccessible::GetDescription(int WXUNUSED(childId), wxString* if (!GetWindow()) return wxACC_FAIL; - wxString ht(GetWindow()->GetHelpText()); + wxString ht(GetWindow()->GetHelpTextAtPoint(wxDefaultPosition, wxHelpEvent::Origin_Keyboard)); if (!ht.empty()) { *description = ht; @@ -2809,7 +2812,7 @@ wxAccStatus wxWindowAccessible::GetHelpText(int WXUNUSED(childId), wxString* hel if (!GetWindow()) return wxACC_FAIL; - wxString ht(GetWindow()->GetHelpText()); + wxString ht(GetWindow()->GetHelpTextAtPoint(wxDefaultPosition, wxHelpEvent::Origin_Keyboard)); if (!ht.empty()) { *helpText = ht;