Override DoEnable() instead of Enable() in wxGTK controls
This is slightly simpler, as it doesn't require checking whether the control state really changes or not (it always does if DoEnable() is called) and allows disabling the controls before creating them, e.g. code like wxButton* const b = new wxButton(); b->Disable(); b->Create(this, wxID_OK); works as expected now instead of spewing GTK+ errors.
This commit is contained in:
@@ -23,8 +23,6 @@ public:
|
|||||||
m_isPressed = false;
|
m_isPressed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool Enable( bool enable = true ) wxOVERRIDE;
|
|
||||||
|
|
||||||
// implementation
|
// implementation
|
||||||
// --------------
|
// --------------
|
||||||
|
|
||||||
@@ -41,6 +39,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void DoEnable(bool enable) wxOVERRIDE;
|
||||||
|
|
||||||
virtual wxBitmap DoGetBitmap(State which) const wxOVERRIDE;
|
virtual wxBitmap DoGetBitmap(State which) const wxOVERRIDE;
|
||||||
virtual void DoSetBitmap(const wxBitmap& bitmap, State which) wxOVERRIDE;
|
virtual void DoSetBitmap(const wxBitmap& bitmap, State which) wxOVERRIDE;
|
||||||
virtual void DoSetBitmapPosition(wxDirection dir) wxOVERRIDE;
|
virtual void DoSetBitmapPosition(wxDirection dir) wxOVERRIDE;
|
||||||
|
@@ -39,7 +39,6 @@ public:
|
|||||||
bool GetValue() const wxOVERRIDE;
|
bool GetValue() const wxOVERRIDE;
|
||||||
|
|
||||||
virtual void SetLabel( const wxString& label ) wxOVERRIDE;
|
virtual void SetLabel( const wxString& label ) wxOVERRIDE;
|
||||||
virtual bool Enable( bool enable = true ) wxOVERRIDE;
|
|
||||||
|
|
||||||
static wxVisualAttributes
|
static wxVisualAttributes
|
||||||
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
||||||
@@ -52,6 +51,8 @@ protected:
|
|||||||
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
|
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
|
||||||
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void DoEnable(bool enable) wxOVERRIDE;
|
||||||
|
|
||||||
void DoSet3StateValue(wxCheckBoxState state) wxOVERRIDE;
|
void DoSet3StateValue(wxCheckBoxState state) wxOVERRIDE;
|
||||||
wxCheckBoxState DoGet3StateValue() const wxOVERRIDE;
|
wxCheckBoxState DoGet3StateValue() const wxOVERRIDE;
|
||||||
|
|
||||||
|
@@ -141,6 +141,8 @@ protected:
|
|||||||
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
|
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
|
||||||
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void DoEnable(bool enable) wxOVERRIDE;
|
||||||
|
|
||||||
virtual bool GTKNeedsToFilterSameWindowFocus() const wxOVERRIDE { return true; }
|
virtual bool GTKNeedsToFilterSameWindowFocus() const wxOVERRIDE { return true; }
|
||||||
|
|
||||||
virtual bool GTKWidgetNeedsMnemonic() const wxOVERRIDE;
|
virtual bool GTKWidgetNeedsMnemonic() const wxOVERRIDE;
|
||||||
|
@@ -41,7 +41,6 @@ public:
|
|||||||
virtual void SetLabel(const wxString& label) wxOVERRIDE;
|
virtual void SetLabel(const wxString& label) wxOVERRIDE;
|
||||||
virtual void SetValue(bool val);
|
virtual void SetValue(bool val);
|
||||||
virtual bool GetValue() const;
|
virtual bool GetValue() const;
|
||||||
virtual bool Enable( bool enable = true ) wxOVERRIDE;
|
|
||||||
|
|
||||||
static wxVisualAttributes
|
static wxVisualAttributes
|
||||||
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
||||||
@@ -52,6 +51,8 @@ protected:
|
|||||||
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
|
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
|
||||||
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void DoEnable(bool enable) wxOVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef wxControl base_type;
|
typedef wxControl base_type;
|
||||||
|
|
||||||
|
@@ -44,8 +44,6 @@ public:
|
|||||||
static wxVisualAttributes
|
static wxVisualAttributes
|
||||||
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
||||||
|
|
||||||
virtual bool Enable( bool enable = true ) wxOVERRIDE;
|
|
||||||
|
|
||||||
// implementation
|
// implementation
|
||||||
int m_pos;
|
int m_pos;
|
||||||
|
|
||||||
@@ -56,6 +54,8 @@ protected:
|
|||||||
virtual wxSize DoGetBestSize() const wxOVERRIDE;
|
virtual wxSize DoGetBestSize() const wxOVERRIDE;
|
||||||
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void DoEnable(bool enable) wxOVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef wxSpinButtonBase base_type;
|
typedef wxSpinButtonBase base_type;
|
||||||
|
|
||||||
|
@@ -95,7 +95,6 @@ public:
|
|||||||
|
|
||||||
// Overridden wxWindow methods
|
// Overridden wxWindow methods
|
||||||
virtual void SetWindowStyleFlag( long style ) wxOVERRIDE;
|
virtual void SetWindowStyleFlag( long style ) wxOVERRIDE;
|
||||||
virtual bool Enable( bool enable = true ) wxOVERRIDE;
|
|
||||||
|
|
||||||
// Implementation from now on
|
// Implementation from now on
|
||||||
void OnDropFiles( wxDropFilesEvent &event );
|
void OnDropFiles( wxDropFilesEvent &event );
|
||||||
@@ -178,6 +177,8 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
virtual void DoEnable(bool enable) wxOVERRIDE;
|
||||||
|
|
||||||
// overridden wxTextEntry virtual methods
|
// overridden wxTextEntry virtual methods
|
||||||
virtual GtkEditable *GetEditable() const wxOVERRIDE;
|
virtual GtkEditable *GetEditable() const wxOVERRIDE;
|
||||||
virtual GtkEntry *GetEntry() const wxOVERRIDE;
|
virtual GtkEntry *GetEntry() const wxOVERRIDE;
|
||||||
|
@@ -69,10 +69,13 @@ wxgtk_button_released_callback(GtkWidget *WXUNUSED(widget), wxAnyButton *button)
|
|||||||
// wxAnyButton
|
// wxAnyButton
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
bool wxAnyButton::Enable( bool enable )
|
void wxAnyButton::DoEnable(bool enable)
|
||||||
{
|
{
|
||||||
if (!base_type::Enable(enable))
|
// See wxWindow::DoEnable()
|
||||||
return false;
|
if ( !m_widget )
|
||||||
|
return;
|
||||||
|
|
||||||
|
base_type::DoEnable(enable);
|
||||||
|
|
||||||
gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(m_widget)), enable);
|
gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(m_widget)), enable);
|
||||||
|
|
||||||
@@ -80,8 +83,6 @@ bool wxAnyButton::Enable( bool enable )
|
|||||||
GTKFixSensitivity();
|
GTKFixSensitivity();
|
||||||
|
|
||||||
GTKUpdateBitmap();
|
GTKUpdateBitmap();
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GdkWindow *wxAnyButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const
|
GdkWindow *wxAnyButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const
|
||||||
|
@@ -222,17 +222,17 @@ void wxCheckBox::SetLabel( const wxString& label )
|
|||||||
GTKSetLabelForLabel(GTK_LABEL(m_widgetLabel), label);
|
GTKSetLabelForLabel(GTK_LABEL(m_widgetLabel), label);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxCheckBox::Enable( bool enable )
|
void wxCheckBox::DoEnable(bool enable)
|
||||||
{
|
{
|
||||||
if (!base_type::Enable(enable))
|
if ( !m_widgetLabel )
|
||||||
return false;
|
return;
|
||||||
|
|
||||||
|
base_type::DoEnable(enable);
|
||||||
|
|
||||||
gtk_widget_set_sensitive( m_widgetLabel, enable );
|
gtk_widget_set_sensitive( m_widgetLabel, enable );
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
GTKFixSensitivity();
|
GTKFixSensitivity();
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxCheckBox::DoApplyWidgetStyle(GtkRcStyle *style)
|
void wxCheckBox::DoApplyWidgetStyle(GtkRcStyle *style)
|
||||||
|
@@ -487,8 +487,18 @@ void wxRadioBox::SetString(unsigned int item, const wxString& label)
|
|||||||
|
|
||||||
bool wxRadioBox::Enable( bool enable )
|
bool wxRadioBox::Enable( bool enable )
|
||||||
{
|
{
|
||||||
if ( !wxControl::Enable( enable ) )
|
// Explicitly forward to the base class just because we need to override
|
||||||
return false;
|
// this function to prevent it from being hidden by Enable(int, bool)
|
||||||
|
// overload.
|
||||||
|
return wxControl::Enable(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxRadioBox::DoEnable(bool enable)
|
||||||
|
{
|
||||||
|
if ( !m_widget )
|
||||||
|
return;
|
||||||
|
|
||||||
|
wxControl::DoEnable(enable);
|
||||||
|
|
||||||
wxRadioBoxButtonsInfoList::compatibility_iterator node = m_buttonsInfo.GetFirst();
|
wxRadioBoxButtonsInfoList::compatibility_iterator node = m_buttonsInfo.GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
@@ -503,8 +513,6 @@ bool wxRadioBox::Enable( bool enable )
|
|||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
GTKFixSensitivity();
|
GTKFixSensitivity();
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxRadioBox::Enable(unsigned int item, bool enable)
|
bool wxRadioBox::Enable(unsigned int item, bool enable)
|
||||||
|
@@ -149,17 +149,17 @@ bool wxRadioButton::GetValue() const
|
|||||||
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_widget)) != 0;
|
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_widget)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxRadioButton::Enable( bool enable )
|
void wxRadioButton::DoEnable(bool enable)
|
||||||
{
|
{
|
||||||
if (!base_type::Enable(enable))
|
if ( !m_widget )
|
||||||
return false;
|
return;
|
||||||
|
|
||||||
|
base_type::DoEnable(enable);
|
||||||
|
|
||||||
gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(m_widget)), enable);
|
gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(m_widget)), enable);
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
GTKFixSensitivity();
|
GTKFixSensitivity();
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxRadioButton::DoApplyWidgetStyle(GtkRcStyle *style)
|
void wxRadioButton::DoApplyWidgetStyle(GtkRcStyle *style)
|
||||||
|
@@ -173,16 +173,16 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
|
|||||||
GtkEnableEvents();
|
GtkEnableEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxSpinButton::Enable( bool enable )
|
void wxSpinButton::DoEnable(bool enable)
|
||||||
{
|
{
|
||||||
if (!base_type::Enable(enable))
|
if ( !m_widget )
|
||||||
return false;
|
return;
|
||||||
|
|
||||||
|
base_type::DoEnable(enable);
|
||||||
|
|
||||||
// Work around lack of visual update when enabling
|
// Work around lack of visual update when enabling
|
||||||
if (enable)
|
if (enable)
|
||||||
GTKFixSensitivity(false /* fix even if not under mouse */);
|
GTKFixSensitivity(false /* fix even if not under mouse */);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSpinButton::GtkDisableEvents() const
|
void wxSpinButton::GtkDisableEvents() const
|
||||||
|
@@ -1350,17 +1350,14 @@ void wxTextCtrl::SetEditable( bool editable )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxTextCtrl::Enable( bool enable )
|
void wxTextCtrl::DoEnable(bool enable)
|
||||||
{
|
{
|
||||||
if (!wxWindowBase::Enable(enable))
|
if ( !m_text )
|
||||||
{
|
return;
|
||||||
// nothing to do
|
|
||||||
return false;
|
wxTextCtrlBase::DoEnable(enable);
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_set_sensitive( m_text, enable );
|
gtk_widget_set_sensitive( m_text, enable );
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTextCtrl::MarkDirty()
|
void wxTextCtrl::MarkDirty()
|
||||||
|
Reference in New Issue
Block a user