Made wxWindowBase's variables protected again and such.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-05-10 21:04:17 +00:00
parent 36453d0ffb
commit 739730cae7
7 changed files with 258 additions and 137 deletions

View File

@@ -143,19 +143,24 @@ public:
virtual bool IsOwnGtkWindow( GdkWindow *window ); virtual bool IsOwnGtkWindow( GdkWindow *window );
void ConnectWidget( GtkWidget *widget ); void ConnectWidget( GtkWidget *widget );
// creates a new widget style if none is there
// and sets m_widgetStyle to this value.
GtkStyle *GetWidgetStyle(); GtkStyle *GetWidgetStyle();
// called by SetFont() and SetXXXColour etc
void SetWidgetStyle(); void SetWidgetStyle();
// overridden in many GTK widgets
virtual void ApplyWidgetStyle(); virtual void ApplyWidgetStyle();
#if wxUSE_TOOLTIPS #if wxUSE_TOOLTIPS
virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip ); virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
#endif // wxUSE_TOOLTIPS #endif // wxUSE_TOOLTIPS
// called from GTK signales handlers // called from GTK signales handlers. it indicates that
// the layouting functions have to be called later on
// (i.e. in idle time, implemented in OnInternalIdle() ).
void UpdateSize() { m_sizeSet = FALSE; } void UpdateSize() { m_sizeSet = FALSE; }
void InternalSetPosition(int x, int y) { m_x = x; m_y = y; }
void InternalSetSize(int w, int h)
{ m_width = w; m_height = h; UpdateSize(); }
// position and size of the window // position and size of the window
int m_x, m_y; int m_x, m_y;
@@ -167,8 +172,13 @@ public:
// scrolling stuff // scrolling stuff
GtkAdjustment *m_hAdjust,*m_vAdjust; GtkAdjustment *m_hAdjust,*m_vAdjust;
float m_oldHorizontalPos, float m_oldHorizontalPos;
m_oldVerticalPos; float m_oldVerticalPos;
// we need an extra XGC flag set to get exposed
// events from overlapping children upon moving
// them. this flag will be set in this GC and
// the GC will be used in wxWindow::ScrollWindow().
GdkGC *m_scrollGC; GdkGC *m_scrollGC;
// extra (wxGTK-specific) flags // extra (wxGTK-specific) flags
@@ -181,9 +191,28 @@ public:
bool m_isStaticBox:1; /* faster than IS_KIND_OF */ bool m_isStaticBox:1; /* faster than IS_KIND_OF */
bool m_isFrame:1; /* faster than IS_KIND_OF */ bool m_isFrame:1; /* faster than IS_KIND_OF */
bool m_acceptsFocus:1; /* ! wxStaticBox etc. */ bool m_acceptsFocus:1; /* ! wxStaticBox etc. */
// these are true if the style were set before the
// widget was realized (typcally in the constructor)
// but the actual GTK style must not be set before
// the widget has been "realized"
bool m_delayedFont:1;
bool m_delayedForegroundColour:1;
bool m_delayedBackgroundColour:1;
bool m_delayedCursor:1;
// contains GTK's widgets internal information
// about non-default widget font and colours.
// we create one for each widget that gets any
// non-default attribute set via SetFont() or
// SetForegroundColour() / SetBackgroundColour().
GtkStyle *m_widgetStyle; GtkStyle *m_widgetStyle;
// C++ has no virtual methods in the constrcutor
// of any class but we need different methods
// of inserting a child window into a wxFrame,
// wxMDIFrame, wxNotebook etc. this is the
// callback that will get used.
wxInsertChildFunction m_insertCallback; wxInsertChildFunction m_insertCallback;
// implement the base class pure virtuals // implement the base class pure virtuals

View File

@@ -143,19 +143,24 @@ public:
virtual bool IsOwnGtkWindow( GdkWindow *window ); virtual bool IsOwnGtkWindow( GdkWindow *window );
void ConnectWidget( GtkWidget *widget ); void ConnectWidget( GtkWidget *widget );
// creates a new widget style if none is there
// and sets m_widgetStyle to this value.
GtkStyle *GetWidgetStyle(); GtkStyle *GetWidgetStyle();
// called by SetFont() and SetXXXColour etc
void SetWidgetStyle(); void SetWidgetStyle();
// overridden in many GTK widgets
virtual void ApplyWidgetStyle(); virtual void ApplyWidgetStyle();
#if wxUSE_TOOLTIPS #if wxUSE_TOOLTIPS
virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip ); virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
#endif // wxUSE_TOOLTIPS #endif // wxUSE_TOOLTIPS
// called from GTK signales handlers // called from GTK signales handlers. it indicates that
// the layouting functions have to be called later on
// (i.e. in idle time, implemented in OnInternalIdle() ).
void UpdateSize() { m_sizeSet = FALSE; } void UpdateSize() { m_sizeSet = FALSE; }
void InternalSetPosition(int x, int y) { m_x = x; m_y = y; }
void InternalSetSize(int w, int h)
{ m_width = w; m_height = h; UpdateSize(); }
// position and size of the window // position and size of the window
int m_x, m_y; int m_x, m_y;
@@ -167,8 +172,13 @@ public:
// scrolling stuff // scrolling stuff
GtkAdjustment *m_hAdjust,*m_vAdjust; GtkAdjustment *m_hAdjust,*m_vAdjust;
float m_oldHorizontalPos, float m_oldHorizontalPos;
m_oldVerticalPos; float m_oldVerticalPos;
// we need an extra XGC flag set to get exposed
// events from overlapping children upon moving
// them. this flag will be set in this GC and
// the GC will be used in wxWindow::ScrollWindow().
GdkGC *m_scrollGC; GdkGC *m_scrollGC;
// extra (wxGTK-specific) flags // extra (wxGTK-specific) flags
@@ -181,9 +191,28 @@ public:
bool m_isStaticBox:1; /* faster than IS_KIND_OF */ bool m_isStaticBox:1; /* faster than IS_KIND_OF */
bool m_isFrame:1; /* faster than IS_KIND_OF */ bool m_isFrame:1; /* faster than IS_KIND_OF */
bool m_acceptsFocus:1; /* ! wxStaticBox etc. */ bool m_acceptsFocus:1; /* ! wxStaticBox etc. */
// these are true if the style were set before the
// widget was realized (typcally in the constructor)
// but the actual GTK style must not be set before
// the widget has been "realized"
bool m_delayedFont:1;
bool m_delayedForegroundColour:1;
bool m_delayedBackgroundColour:1;
bool m_delayedCursor:1;
// contains GTK's widgets internal information
// about non-default widget font and colours.
// we create one for each widget that gets any
// non-default attribute set via SetFont() or
// SetForegroundColour() / SetBackgroundColour().
GtkStyle *m_widgetStyle; GtkStyle *m_widgetStyle;
// C++ has no virtual methods in the constrcutor
// of any class but we need different methods
// of inserting a child window into a wxFrame,
// wxMDIFrame, wxNotebook etc. this is the
// callback that will get used.
wxInsertChildFunction m_insertCallback; wxInsertChildFunction m_insertCallback;
// implement the base class pure virtuals // implement the base class pure virtuals

View File

@@ -596,14 +596,10 @@ public:
void OnInitDialog( wxInitDialogEvent &event ); void OnInitDialog( wxInitDialogEvent &event );
/* /*
What is this doing in the platform independent part? // What is this doing in the platform independent part?
// No doc specifies this. Of what use would that be?
// accessors // the window handle (for the underlying windowing system)
WXWidget GetHandle() const { return m_widget; }
// the window handle (for the underlying windowing system) and the window
// id - a number which uniquely identifies a window among its siblings
// unless it is -1
union union
{ {
// we have 2 common names for this member, one for MSW and the other // we have 2 common names for this member, one for MSW and the other
@@ -611,8 +607,15 @@ public:
WXWidget m_widget; WXWidget m_widget;
WXWidget m_hWnd; WXWidget m_hWnd;
}; };
// accessor
WXWidget GetHandle() const { return m_widget; }
*/ */
protected:
// the window id - a number which uniquely identifies a window among
// its siblings unless it is -1
wxWindowID m_windowId; wxWindowID m_windowId;
// the parent window of this window (or NULL) and the list of the children // the parent window of this window (or NULL) and the list of the children

View File

@@ -284,7 +284,7 @@ void wxDialog::OnCancel( wxCommandEvent &WXUNUSED(event) )
else else
{ {
SetReturnCode(wxID_CANCEL); SetReturnCode(wxID_CANCEL);
this->Show(FALSE); Show(FALSE);
} }
} }
@@ -296,12 +296,12 @@ void wxDialog::OnOK( wxCommandEvent &WXUNUSED(event) )
printf( "OnOK 2.\n" ); printf( "OnOK 2.\n" );
if (IsModal()) if (IsModal())
{ {
printf( "OnOK: modal.\n" ); printf( "OnOK: modal.\n" );
EndModal(wxID_OK); EndModal(wxID_OK);
} }
else else
{ {
printf( "OnOK: non-modal.\n" ); printf( "OnOK: non-modal.\n" );
SetReturnCode(wxID_OK); SetReturnCode(wxID_OK);
this->Show(FALSE); this->Show(FALSE);
} }
@@ -508,21 +508,11 @@ bool wxDialog::Show( bool show )
GtkOnSize( m_x, m_y, m_width, m_height ); GtkOnSize( m_x, m_y, m_width, m_height );
} }
if (show != m_isShown) bool ret = wxWindow::Show( show );
{
if (show)
{
gtk_widget_show( m_widget );
}
else
gtk_widget_hide( m_widget );
m_isShown = show;
}
if (show) InitDialog(); if (show) InitDialog();
return TRUE; return ret;
} }
bool wxDialog::IsModal() const bool wxDialog::IsModal() const

View File

@@ -1374,30 +1374,16 @@ gtk_window_realized_callback( GtkWidget *widget, wxWindow *win )
if (g_isIdle) if (g_isIdle)
wxapp_install_idle_handler(); wxapp_install_idle_handler();
if (win->m_font != *wxSWISS_FONT) if (win->m_delayedFont)
{ win->SetFont( win->GetFont() );
wxFont font( win->m_font );
win->m_font = wxNullFont;
win->SetFont( font );
}
if (win->m_backgroundColour != wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE )) if (win->m_delayedBackgroundColour)
{ win->SetBackgroundColour( win->GetBackgroundColour() );
wxColour bg( win->m_backgroundColour );
win->m_backgroundColour = wxNullColour;
win->SetBackgroundColour( bg );
}
if (win->m_foregroundColour != *wxBLACK) if (win->m_delayedForegroundColour)
{ win->SetForegroundColour( win->GetForegroundColour() );
wxColour fg( win->m_foregroundColour );
win->m_foregroundColour = wxNullColour;
win->SetForegroundColour( fg );
}
wxCursor cursor( win->m_cursor ); win->SetCursor( win->GetCursor() );
win->m_cursor = wxNullCursor;
win->SetCursor( cursor );
return FALSE; return FALSE;
} }
@@ -1464,9 +1450,6 @@ void wxWindow::Init()
m_width = 0; m_width = 0;
m_height = 0; m_height = 0;
m_font = *wxSWISS_FONT;
m_windowName = "noname";
m_sizeSet = FALSE; m_sizeSet = FALSE;
m_hasVMT = FALSE; m_hasVMT = FALSE;
m_needParent = TRUE; m_needParent = TRUE;
@@ -2098,8 +2081,11 @@ bool wxWindow::Show( bool show )
{ {
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") ); wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
if ( !wxWindowBase::Show(show) ) if (!wxWindowBase::Show(show))
{
// nothing to do
return FALSE; return FALSE;
}
if (show) if (show)
gtk_widget_show( m_widget ); gtk_widget_show( m_widget );
@@ -2113,8 +2099,11 @@ bool wxWindow::Enable( bool enable )
{ {
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") ); wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
if ( !wxWindowBase::Enable(enable) ) if (!wxWindowBase::Enable(enable))
{
// nothing to do
return FALSE; return FALSE;
}
gtk_widget_set_sensitive( m_widget, enable ); gtk_widget_set_sensitive( m_widget, enable );
if ( m_wxwindow ) if ( m_wxwindow )
@@ -2234,9 +2223,24 @@ bool wxWindow::SetCursor( const wxCursor &cursor )
{ {
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") ); wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
if ( wxWindowBase::SetCursor(cursor) ) if (!wxWindowBase::SetCursor(cursor))
{ {
if (!m_widget->window) return TRUE; // don't leave if the GTK widget has just
// been realized
if (!m_delayedCursor) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedCursor = TRUE;
// pretend we have done something
return TRUE;
}
if ((m_widget) && (m_widget->window)) if ((m_widget) && (m_widget->window))
gdk_window_set_cursor( m_widget->window, GetCursor().GetCursor() ); gdk_window_set_cursor( m_widget->window, GetCursor().GetCursor() );
@@ -2244,14 +2248,8 @@ bool wxWindow::SetCursor( const wxCursor &cursor )
if ((m_wxwindow) && (m_wxwindow->window)) if ((m_wxwindow) && (m_wxwindow->window))
gdk_window_set_cursor( m_wxwindow->window, GetCursor().GetCursor() ); gdk_window_set_cursor( m_wxwindow->window, GetCursor().GetCursor() );
// cursor was set // cursor was set
return TRUE; return TRUE;
}
else
{
// cursor hasn't been changed
return FALSE;
}
} }
void wxWindow::WarpPointer( int WXUNUSED(x), int WXUNUSED(y) ) void wxWindow::WarpPointer( int WXUNUSED(x), int WXUNUSED(y) )
@@ -2332,10 +2330,24 @@ bool wxWindow::SetBackgroundColour( const wxColour &colour )
{ {
wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") ); wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
if (!wxWindowBase::SetBackgroundColour(colour)) return FALSE; if (!wxWindowBase::SetBackgroundColour(colour))
{
// don't leave if the GTK widget has just
// been realized
if (!m_delayedBackgroundColour) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget(); GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return TRUE; if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedBackgroundColour = TRUE;
// pretend we have done something
return TRUE;
}
if (m_wxwindow && m_wxwindow->window) if (m_wxwindow && m_wxwindow->window)
{ {
@@ -2366,10 +2378,24 @@ bool wxWindow::SetForegroundColour( const wxColour &colour )
{ {
wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") ); wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
if (!wxWindowBase::SetForegroundColour(colour)) return FALSE; if (!wxWindowBase::SetForegroundColour(colour))
{
// don't leave if the GTK widget has just
// been realized
if (!m_delayedForegroundColour) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget(); GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return TRUE; if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedForegroundColour = TRUE;
// pretend we have done something
return TRUE;
}
wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ); wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
if (sysbg == m_foregroundColour) if (sysbg == m_foregroundColour)
@@ -2514,10 +2540,24 @@ bool wxWindow::SetFont( const wxFont &font )
{ {
wxCHECK_MSG( m_widget != NULL, FALSE, _T( "invalid window") ); wxCHECK_MSG( m_widget != NULL, FALSE, _T( "invalid window") );
if (!wxWindowBase::SetFont(font)) return FALSE; if (!wxWindowBase::SetFont(font))
{
// don't leave if the GTK widget has just
// been realized
if (!m_delayedFont) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget(); GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return TRUE; if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedFont = TRUE;
// pretend we have done something
return TRUE;
}
wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ); wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
if ( sysbg == m_backgroundColour ) if ( sysbg == m_backgroundColour )

View File

@@ -284,7 +284,7 @@ void wxDialog::OnCancel( wxCommandEvent &WXUNUSED(event) )
else else
{ {
SetReturnCode(wxID_CANCEL); SetReturnCode(wxID_CANCEL);
this->Show(FALSE); Show(FALSE);
} }
} }
@@ -296,12 +296,12 @@ void wxDialog::OnOK( wxCommandEvent &WXUNUSED(event) )
printf( "OnOK 2.\n" ); printf( "OnOK 2.\n" );
if (IsModal()) if (IsModal())
{ {
printf( "OnOK: modal.\n" ); printf( "OnOK: modal.\n" );
EndModal(wxID_OK); EndModal(wxID_OK);
} }
else else
{ {
printf( "OnOK: non-modal.\n" ); printf( "OnOK: non-modal.\n" );
SetReturnCode(wxID_OK); SetReturnCode(wxID_OK);
this->Show(FALSE); this->Show(FALSE);
} }
@@ -508,21 +508,11 @@ bool wxDialog::Show( bool show )
GtkOnSize( m_x, m_y, m_width, m_height ); GtkOnSize( m_x, m_y, m_width, m_height );
} }
if (show != m_isShown) bool ret = wxWindow::Show( show );
{
if (show)
{
gtk_widget_show( m_widget );
}
else
gtk_widget_hide( m_widget );
m_isShown = show;
}
if (show) InitDialog(); if (show) InitDialog();
return TRUE; return ret;
} }
bool wxDialog::IsModal() const bool wxDialog::IsModal() const

View File

@@ -1374,30 +1374,16 @@ gtk_window_realized_callback( GtkWidget *widget, wxWindow *win )
if (g_isIdle) if (g_isIdle)
wxapp_install_idle_handler(); wxapp_install_idle_handler();
if (win->m_font != *wxSWISS_FONT) if (win->m_delayedFont)
{ win->SetFont( win->GetFont() );
wxFont font( win->m_font );
win->m_font = wxNullFont;
win->SetFont( font );
}
if (win->m_backgroundColour != wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE )) if (win->m_delayedBackgroundColour)
{ win->SetBackgroundColour( win->GetBackgroundColour() );
wxColour bg( win->m_backgroundColour );
win->m_backgroundColour = wxNullColour;
win->SetBackgroundColour( bg );
}
if (win->m_foregroundColour != *wxBLACK) if (win->m_delayedForegroundColour)
{ win->SetForegroundColour( win->GetForegroundColour() );
wxColour fg( win->m_foregroundColour );
win->m_foregroundColour = wxNullColour;
win->SetForegroundColour( fg );
}
wxCursor cursor( win->m_cursor ); win->SetCursor( win->GetCursor() );
win->m_cursor = wxNullCursor;
win->SetCursor( cursor );
return FALSE; return FALSE;
} }
@@ -1464,9 +1450,6 @@ void wxWindow::Init()
m_width = 0; m_width = 0;
m_height = 0; m_height = 0;
m_font = *wxSWISS_FONT;
m_windowName = "noname";
m_sizeSet = FALSE; m_sizeSet = FALSE;
m_hasVMT = FALSE; m_hasVMT = FALSE;
m_needParent = TRUE; m_needParent = TRUE;
@@ -2098,8 +2081,11 @@ bool wxWindow::Show( bool show )
{ {
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") ); wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
if ( !wxWindowBase::Show(show) ) if (!wxWindowBase::Show(show))
{
// nothing to do
return FALSE; return FALSE;
}
if (show) if (show)
gtk_widget_show( m_widget ); gtk_widget_show( m_widget );
@@ -2113,8 +2099,11 @@ bool wxWindow::Enable( bool enable )
{ {
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") ); wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
if ( !wxWindowBase::Enable(enable) ) if (!wxWindowBase::Enable(enable))
{
// nothing to do
return FALSE; return FALSE;
}
gtk_widget_set_sensitive( m_widget, enable ); gtk_widget_set_sensitive( m_widget, enable );
if ( m_wxwindow ) if ( m_wxwindow )
@@ -2234,9 +2223,24 @@ bool wxWindow::SetCursor( const wxCursor &cursor )
{ {
wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") ); wxCHECK_MSG( (m_widget != NULL), FALSE, _T("invalid window") );
if ( wxWindowBase::SetCursor(cursor) ) if (!wxWindowBase::SetCursor(cursor))
{ {
if (!m_widget->window) return TRUE; // don't leave if the GTK widget has just
// been realized
if (!m_delayedCursor) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedCursor = TRUE;
// pretend we have done something
return TRUE;
}
if ((m_widget) && (m_widget->window)) if ((m_widget) && (m_widget->window))
gdk_window_set_cursor( m_widget->window, GetCursor().GetCursor() ); gdk_window_set_cursor( m_widget->window, GetCursor().GetCursor() );
@@ -2244,14 +2248,8 @@ bool wxWindow::SetCursor( const wxCursor &cursor )
if ((m_wxwindow) && (m_wxwindow->window)) if ((m_wxwindow) && (m_wxwindow->window))
gdk_window_set_cursor( m_wxwindow->window, GetCursor().GetCursor() ); gdk_window_set_cursor( m_wxwindow->window, GetCursor().GetCursor() );
// cursor was set // cursor was set
return TRUE; return TRUE;
}
else
{
// cursor hasn't been changed
return FALSE;
}
} }
void wxWindow::WarpPointer( int WXUNUSED(x), int WXUNUSED(y) ) void wxWindow::WarpPointer( int WXUNUSED(x), int WXUNUSED(y) )
@@ -2332,10 +2330,24 @@ bool wxWindow::SetBackgroundColour( const wxColour &colour )
{ {
wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") ); wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
if (!wxWindowBase::SetBackgroundColour(colour)) return FALSE; if (!wxWindowBase::SetBackgroundColour(colour))
{
// don't leave if the GTK widget has just
// been realized
if (!m_delayedBackgroundColour) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget(); GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return TRUE; if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedBackgroundColour = TRUE;
// pretend we have done something
return TRUE;
}
if (m_wxwindow && m_wxwindow->window) if (m_wxwindow && m_wxwindow->window)
{ {
@@ -2366,10 +2378,24 @@ bool wxWindow::SetForegroundColour( const wxColour &colour )
{ {
wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") ); wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") );
if (!wxWindowBase::SetForegroundColour(colour)) return FALSE; if (!wxWindowBase::SetForegroundColour(colour))
{
// don't leave if the GTK widget has just
// been realized
if (!m_delayedForegroundColour) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget(); GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return TRUE; if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedForegroundColour = TRUE;
// pretend we have done something
return TRUE;
}
wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ); wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
if (sysbg == m_foregroundColour) if (sysbg == m_foregroundColour)
@@ -2514,10 +2540,24 @@ bool wxWindow::SetFont( const wxFont &font )
{ {
wxCHECK_MSG( m_widget != NULL, FALSE, _T( "invalid window") ); wxCHECK_MSG( m_widget != NULL, FALSE, _T( "invalid window") );
if (!wxWindowBase::SetFont(font)) return FALSE; if (!wxWindowBase::SetFont(font))
{
// don't leave if the GTK widget has just
// been realized
if (!m_delayedFont) return FALSE;
}
GtkWidget *connect_widget = GetConnectWidget(); GtkWidget *connect_widget = GetConnectWidget();
if (!connect_widget->window) return TRUE; if (!connect_widget->window)
{
// indicate that a new style has been set
// but it couldn't get applied as the
// widget hasn't been realized yet.
m_delayedFont = TRUE;
// pretend we have done something
return TRUE;
}
wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE ); wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
if ( sysbg == m_backgroundColour ) if ( sysbg == m_backgroundColour )