git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12922
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// we refresh the window when it is dis/enabled
virtual bool Enable(bool enable = TRUE);
// we refresh the window when it is dis/enabled
virtual bool Enable(bool enable = TRUE);
- // remember that the font/colour was changed
- virtual bool SetBackgroundColour(const wxColour& colour);
- virtual bool SetForegroundColour(const wxColour& colour);
- virtual bool SetFont(const wxFont& font);
-
// our Capture/ReleaseMouse() maintains the stack of windows which had
// captured the mouse and when ReleaseMouse() is called, the mouse freed
// only if the stack is empty, otherwise it is captured back by the window
// our Capture/ReleaseMouse() maintains the stack of windows which had
// captured the mouse and when ReleaseMouse() is called, the mouse freed
// only if the stack is empty, otherwise it is captured back by the window
int m_alignBgBitmap;
wxStretch m_stretchBgBitmap;
int m_alignBgBitmap;
wxStretch m_stretchBgBitmap;
- // more flags
- bool m_isCurrent:1; // is the mouse currently inside the window?
- bool m_hasBgCol:1; // was the bg colour explicitly changed by user?
- bool m_hasFgCol:1; // fg
- bool m_hasFont:1; // font
+ // is the mouse currently inside the window?
+ bool m_isCurrent:1;
private:
// the window scrollbars
private:
// the window scrollbars
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Purpose: wxWindowBase class - the interface of wxWindow
// Author: Vadim Zeitlin
// Modified by:
// Purpose: wxWindowBase class - the interface of wxWindow
// Author: Vadim Zeitlin
// Modified by:
bool m_isEnabled:1;
bool m_isBeingDeleted:1;
bool m_isEnabled:1;
bool m_isBeingDeleted:1;
+ // was the window colours/font explicitly changed by user?
+ bool m_hasBgCol:1;
+ bool m_hasFgCol:1;
+ bool m_hasFont:1;
+
// window attributes
long m_windowStyle,
m_exStyle;
// window attributes
long m_windowStyle,
m_exStyle;
m_backgroundColour = colour;
m_backgroundColour = colour;
m_foregroundColour = colour;
m_foregroundColour = colour;
// Item members
wxControl::wxControl()
{
// Item members
wxControl::wxControl()
{
- m_backgroundColour = *wxWHITE;
- m_foregroundColour = *wxBLACK;
-
#if WXWIN_COMPATIBILITY
m_callback = 0;
#endif // WXWIN_COMPATIBILITY
#if WXWIN_COMPATIBILITY
m_callback = 0;
#endif // WXWIN_COMPATIBILITY
wxSysColourChangedEvent event;
event.SetEventObject(this);
wxSysColourChangedEvent event;
event.SetEventObject(this);
- return GetEventHandler()->ProcessEvent(event);
+ (void)GetEventHandler()->ProcessEvent(event);
+
+ // always let the system carry on the default processing to allow the
+ // native controls to react to the colours update
+ return FALSE;
}
bool wxWindowMSW::HandleCtlColor(WXHBRUSH *brush,
}
bool wxWindowMSW::HandleCtlColor(WXHBRUSH *brush,
// Responds to colour changes: passes event on to children.
void wxWindowMSW::OnSysColourChanged(wxSysColourChangedEvent& event)
{
// Responds to colour changes: passes event on to children.
void wxWindowMSW::OnSysColourChanged(wxSysColourChangedEvent& event)
{
- wxNode *node = GetChildren().First();
+ wxWindowList::Node *node = GetChildren().GetFirst();
- // Only propagate to non-top-level windows
- wxWindow *win = (wxWindow *)node->Data();
- if ( win->GetParent() )
+ // Only propagate to non-top-level windows because Windows already
+ // sends this event to all top-level ones
+ wxWindow *win = node->GetData();
+ if ( !win->IsTopLevel() )
- wxSysColourChangedEvent event2;
- event.m_eventObject = win;
- win->GetEventHandler()->ProcessEvent(event2);
+ // we need to send the real WM_SYSCOLORCHANGE and not just trigger
+ // EVT_SYS_COLOUR_CHANGED call because the latter wouldn't work for
+ // the standard controls
+ ::SendMessage(GetHwndOf(win), WM_SYSCOLORCHANGE, 0, 0);
+ node = node->GetNext();
+ }
+
+ // update the colours we use if they were not set explicitly by the user:
+ // this must be done or OnCtlColor() would continue to use the old colours
+ if ( !m_hasFgCol )
+ {
+ m_foregroundColour = wxSystemSettings::
+ GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
+ }
+
+ if ( !m_hasBgCol )
+ {
+ m_backgroundColour = wxSystemSettings::
+ GetSystemColour(wxSYS_COLOUR_BTNFACE);
-// ----------------------------------------------------------------------------
-// colours/fonts
-// ----------------------------------------------------------------------------
-
-bool wxWindow::SetBackgroundColour(const wxColour& colour)
-{
- if ( !wxWindowNative::SetBackgroundColour(colour) )
- return FALSE;
-
- m_hasBgCol = TRUE;
-
- return TRUE;
-}
-
-bool wxWindow::SetForegroundColour(const wxColour& colour)
-{
- if ( !wxWindowNative::SetForegroundColour(colour) )
- return FALSE;
-
- m_hasFgCol = TRUE;
-
- return TRUE;
-}
-
-bool wxWindow::SetFont(const wxFont& font)
-{
- if ( !wxWindowNative::SetFont(font) )
- return FALSE;
-
- m_hasFont = TRUE;
-
- return TRUE;
-}
-
// ----------------------------------------------------------------------------
// mouse capture
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// mouse capture
// ----------------------------------------------------------------------------