Propagate SetToolTip() call on wxCompositeWindow to all subwindows to ensure
that the tooltip is shown for all parts of the window.
Notice that this is still not ideal as the tooltip temporarily disappears when
mouse moves from one subwindow to another, instead of staying in place as it
does with "monolithic" windows and ideally we should find a way to avoid it
(should be possible at least under MSW with TTM_RELAYEVENT) but for now this
is already much better than nothing.
Closes #13523.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69286
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Added wxPersistentSplitter.
- Added wxWebView library (Steven Lamerton & Auria, GSoC 2011 project).
- Derive wxAuiNotebook from wxBookCtrlBase (Steven Lamerton)
- Added wxPersistentSplitter.
- Added wxWebView library (Steven Lamerton & Auria, GSoC 2011 project).
- Derive wxAuiNotebook from wxBookCtrlBase (Steven Lamerton)
+- Fix tooltips in wxSearchCtrl and other composite controls (Catalin Raceanu).
// Purpose: wxCompositeWindow<> declaration
// Author: Vadim Zeitlin
// Created: 2011-01-02
// Purpose: wxCompositeWindow<> declaration
// Author: Vadim Zeitlin
// Created: 2011-01-02
-// RCS-ID: $Id: wxhead.h,v 1.12 2010-04-22 12:44:51 zeitlin Exp $
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
+class WXDLLIMPEXP_FWD_CORE wxToolTip;
+
// NB: This is an experimental and, as for now, undocumented class used only by
// wxWidgets itself internally. Don't use it in your code until its API is
// officially stabilized unless you are ready to change it with the next
// NB: This is an experimental and, as for now, undocumented class used only by
// wxWidgets itself internally. Don't use it in your code until its API is
// officially stabilized unless you are ready to change it with the next
if ( !BaseWindowClass::SetForegroundColour(colour) )
return false;
if ( !BaseWindowClass::SetForegroundColour(colour) )
return false;
- DoSetForAllParts(&wxWindowBase::SetForegroundColour, colour);
+ SetForAllParts(&wxWindowBase::SetForegroundColour, colour);
if ( !BaseWindowClass::SetBackgroundColour(colour) )
return false;
if ( !BaseWindowClass::SetBackgroundColour(colour) )
return false;
- DoSetForAllParts(&wxWindowBase::SetBackgroundColour, colour);
+ SetForAllParts(&wxWindowBase::SetBackgroundColour, colour);
if ( !BaseWindowClass::SetFont(font) )
return false;
if ( !BaseWindowClass::SetFont(font) )
return false;
- DoSetForAllParts(&wxWindowBase::SetFont, font);
+ SetForAllParts(&wxWindowBase::SetFont, font);
if ( !BaseWindowClass::SetCursor(cursor) )
return false;
if ( !BaseWindowClass::SetCursor(cursor) )
return false;
- DoSetForAllParts(&wxWindowBase::SetCursor, cursor);
+ SetForAllParts(&wxWindowBase::SetCursor, cursor);
+#if wxUSE_TOOLTIPS
+ virtual void DoSetToolTip(wxToolTip *tip)
+ {
+ BaseWindowClass::DoSetToolTip(tip);
+
+ SetForAllParts(&wxWindowBase::CopyToolTip, tip);
+ }
+#endif // wxUSE_TOOLTIPS
+
private:
// Must be implemented by the derived class to return all children to which
// the public methods we override should forward to.
virtual wxWindowList GetCompositeWindowParts() const = 0;
template <class T>
private:
// Must be implemented by the derived class to return all children to which
// the public methods we override should forward to.
virtual wxWindowList GetCompositeWindowParts() const = 0;
template <class T>
- void DoSetForAllParts(bool (wxWindowBase::*func)(const T&), const T& arg)
+ void SetForAllParts(bool (wxWindowBase::*func)(const T&), const T& arg)
+ {
+ DoSetForAllParts<const T&>(func, arg);
+ }
+
+ template <class T>
+ void SetForAllParts(bool (wxWindowBase::*func)(T*), T* arg)
+ {
+ DoSetForAllParts<T*>(func, arg);
+ }
+
+ template <class T>
+ void DoSetForAllParts(bool (wxWindowBase::*func)(T), T arg)
{
// Simply call the setters for all parts of this composite window.
const wxWindowList parts = GetCompositeWindowParts();
{
// Simply call the setters for all parts of this composite window.
const wxWindowList parts = GetCompositeWindowParts();