More changes to various controls for more reliably
preventing them from emitting event when their state was changed programatically. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12467 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
bc87fd68e3
commit
9864c56ded
@ -54,6 +54,8 @@ public:
|
|||||||
|
|
||||||
GtkWidget *m_widgetCheckbox;
|
GtkWidget *m_widgetCheckbox;
|
||||||
GtkWidget *m_widgetLabel;
|
GtkWidget *m_widgetLabel;
|
||||||
|
|
||||||
|
bool m_blockEvent;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
@ -50,6 +50,8 @@ public:
|
|||||||
bool IsOwnGtkWindow( GdkWindow *window );
|
bool IsOwnGtkWindow( GdkWindow *window );
|
||||||
void OnInternalIdle();
|
void OnInternalIdle();
|
||||||
|
|
||||||
|
bool m_blockEvent;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ public:
|
|||||||
GdkColor *m_fg;
|
GdkColor *m_fg;
|
||||||
GdkColor *m_bg;
|
GdkColor *m_bg;
|
||||||
|
|
||||||
bool m_blockNextEvent;
|
bool m_blockEvent;
|
||||||
|
|
||||||
void OnInternalIdle();
|
void OnInternalIdle();
|
||||||
|
|
||||||
|
@ -63,12 +63,10 @@ public:
|
|||||||
void SetLabel(const wxString& label);
|
void SetLabel(const wxString& label);
|
||||||
bool Enable(bool enable = TRUE);
|
bool Enable(bool enable = TRUE);
|
||||||
|
|
||||||
protected:
|
|
||||||
// Callback function given to gtk
|
// implementation
|
||||||
static void gtk_togglebutton_clicked_callback(GtkWidget *widget,
|
bool m_blockEvent;
|
||||||
wxToggleButton *win);
|
|
||||||
|
|
||||||
// wx stuff
|
|
||||||
void ApplyWidgetStyle();
|
void ApplyWidgetStyle();
|
||||||
bool IsOwnGtkWindow(GdkWindow *window);
|
bool IsOwnGtkWindow(GdkWindow *window);
|
||||||
|
|
||||||
|
@ -54,6 +54,8 @@ public:
|
|||||||
|
|
||||||
GtkWidget *m_widgetCheckbox;
|
GtkWidget *m_widgetCheckbox;
|
||||||
GtkWidget *m_widgetLabel;
|
GtkWidget *m_widgetLabel;
|
||||||
|
|
||||||
|
bool m_blockEvent;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
@ -50,6 +50,8 @@ public:
|
|||||||
bool IsOwnGtkWindow( GdkWindow *window );
|
bool IsOwnGtkWindow( GdkWindow *window );
|
||||||
void OnInternalIdle();
|
void OnInternalIdle();
|
||||||
|
|
||||||
|
bool m_blockEvent;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ public:
|
|||||||
GdkColor *m_fg;
|
GdkColor *m_fg;
|
||||||
GdkColor *m_bg;
|
GdkColor *m_bg;
|
||||||
|
|
||||||
bool m_blockNextEvent;
|
bool m_blockEvent;
|
||||||
|
|
||||||
void OnInternalIdle();
|
void OnInternalIdle();
|
||||||
|
|
||||||
|
@ -63,12 +63,10 @@ public:
|
|||||||
void SetLabel(const wxString& label);
|
void SetLabel(const wxString& label);
|
||||||
bool Enable(bool enable = TRUE);
|
bool Enable(bool enable = TRUE);
|
||||||
|
|
||||||
protected:
|
|
||||||
// Callback function given to gtk
|
// implementation
|
||||||
static void gtk_togglebutton_clicked_callback(GtkWidget *widget,
|
bool m_blockEvent;
|
||||||
wxToggleButton *win);
|
|
||||||
|
|
||||||
// wx stuff
|
|
||||||
void ApplyWidgetStyle();
|
void ApplyWidgetStyle();
|
||||||
bool IsOwnGtkWindow(GdkWindow *window);
|
bool IsOwnGtkWindow(GdkWindow *window);
|
||||||
|
|
||||||
|
@ -46,6 +46,8 @@ static void gtk_checkbox_clicked_callback( GtkWidget *WXUNUSED(widget), wxCheckB
|
|||||||
if (!cb->m_hasVMT) return;
|
if (!cb->m_hasVMT) return;
|
||||||
|
|
||||||
if (g_blockEventsOnDrag) return;
|
if (g_blockEventsOnDrag) return;
|
||||||
|
|
||||||
|
if (cb->m_blockEvent) return;
|
||||||
|
|
||||||
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
|
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
|
||||||
event.SetInt( cb->GetValue() );
|
event.SetInt( cb->GetValue() );
|
||||||
@ -74,6 +76,7 @@ bool wxCheckBox::Create(wxWindow *parent,
|
|||||||
{
|
{
|
||||||
m_needParent = TRUE;
|
m_needParent = TRUE;
|
||||||
m_acceptsFocus = TRUE;
|
m_acceptsFocus = TRUE;
|
||||||
|
m_blockEvent = FALSE;
|
||||||
|
|
||||||
if (!PreCreation( parent, pos, size ) ||
|
if (!PreCreation( parent, pos, size ) ||
|
||||||
!CreateBase( parent, id, pos, size, style, validator, name ))
|
!CreateBase( parent, id, pos, size, style, validator, name ))
|
||||||
@ -143,16 +146,11 @@ void wxCheckBox::SetValue( bool state )
|
|||||||
if (state == GetValue())
|
if (state == GetValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(m_widgetCheckbox),
|
m_blockEvent = TRUE;
|
||||||
GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback),
|
|
||||||
(gpointer *)this );
|
|
||||||
|
|
||||||
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widgetCheckbox), state );
|
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widgetCheckbox), state );
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widgetCheckbox),
|
m_blockEvent = FALSE;
|
||||||
"clicked",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback),
|
|
||||||
(gpointer *)this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxCheckBox::GetValue() const
|
bool wxCheckBox::GetValue() const
|
||||||
|
@ -49,6 +49,8 @@ void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioButton *r
|
|||||||
if (g_blockEventsOnDrag) return;
|
if (g_blockEventsOnDrag) return;
|
||||||
|
|
||||||
if (!button->active) return;
|
if (!button->active) return;
|
||||||
|
|
||||||
|
if (rb->m_blockEvent) return;
|
||||||
|
|
||||||
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
|
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
|
||||||
event.SetInt( rb->GetValue() );
|
event.SetInt( rb->GetValue() );
|
||||||
@ -69,22 +71,24 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
|
|||||||
m_acceptsFocus = TRUE;
|
m_acceptsFocus = TRUE;
|
||||||
m_needParent = TRUE;
|
m_needParent = TRUE;
|
||||||
m_isRadioButton = TRUE;
|
m_isRadioButton = TRUE;
|
||||||
|
|
||||||
|
m_blockEvent = FALSE;
|
||||||
|
|
||||||
if (!PreCreation( parent, pos, size ) ||
|
if (!PreCreation( parent, pos, size ) ||
|
||||||
!CreateBase( parent, id, pos, size, style, validator, name ))
|
!CreateBase( parent, id, pos, size, style, validator, name ))
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
|
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFlag(wxRB_GROUP))
|
if (HasFlag(wxRB_GROUP))
|
||||||
{
|
{
|
||||||
/* start a new group */
|
// start a new group
|
||||||
m_radioButtonGroup = (GSList*) NULL;
|
m_radioButtonGroup = (GSList*) NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* search backward for last group start */
|
// search backward for last group start
|
||||||
wxRadioButton *chief = (wxRadioButton*) NULL;
|
wxRadioButton *chief = (wxRadioButton*) NULL;
|
||||||
wxWindowList::Node *node = parent->GetChildren().GetLast();
|
wxWindowList::Node *node = parent->GetChildren().GetLast();
|
||||||
while (node)
|
while (node)
|
||||||
@ -99,12 +103,12 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
|
|||||||
}
|
}
|
||||||
if (chief)
|
if (chief)
|
||||||
{
|
{
|
||||||
/* we are part of the group started by chief */
|
// we are part of the group started by chief
|
||||||
m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
|
m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* start a new group */
|
// start a new group
|
||||||
m_radioButtonGroup = (GSList*) NULL;
|
m_radioButtonGroup = (GSList*) NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,8 +160,7 @@ void wxRadioButton::SetValue( bool val )
|
|||||||
if (val == GetValue())
|
if (val == GetValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
|
m_blockEvent = TRUE;
|
||||||
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
|
|
||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
{
|
{
|
||||||
@ -170,8 +173,7 @@ void wxRadioButton::SetValue( bool val )
|
|||||||
// as FALSE. Failing silently is probably TRTTD here.
|
// as FALSE. Failing silently is probably TRTTD here.
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "clicked",
|
m_blockEvent = FALSE;
|
||||||
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxRadioButton::GetValue() const
|
bool wxRadioButton::GetValue() const
|
||||||
|
@ -99,11 +99,8 @@ static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
|
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
|
||||||
if ( tbar->m_blockNextEvent )
|
|
||||||
{
|
if (tbar->m_blockEvent) return;
|
||||||
tbar->m_blockNextEvent = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_blockEventsOnDrag) return;
|
if (g_blockEventsOnDrag) return;
|
||||||
if (!tool->IsEnabled()) return;
|
if (!tool->IsEnabled()) return;
|
||||||
@ -196,7 +193,7 @@ void wxToolBar::Init()
|
|||||||
m_fg =
|
m_fg =
|
||||||
m_bg = (GdkColor *)NULL;
|
m_bg = (GdkColor *)NULL;
|
||||||
m_toolbar = (GtkToolbar *)NULL;
|
m_toolbar = (GtkToolbar *)NULL;
|
||||||
m_blockNextEvent = FALSE;
|
m_blockEvent = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar::~wxToolBar()
|
wxToolBar::~wxToolBar()
|
||||||
@ -440,9 +437,11 @@ void wxToolBar::DoToggleTool( wxToolBarToolBase *toolBase, bool toggle )
|
|||||||
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
|
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_blockNextEvent = TRUE; // we cannot use gtk_signal_disconnect here
|
m_blockEvent = TRUE;
|
||||||
|
|
||||||
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
|
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
|
||||||
|
|
||||||
|
m_blockEvent = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,13 +24,15 @@ extern wxCursor g_globalCursor;
|
|||||||
|
|
||||||
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
|
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
|
||||||
// Callback function given to gtk.
|
// Callback function given to gtk.
|
||||||
void wxToggleButton::gtk_togglebutton_clicked_callback(GtkWidget *WXUNUSED(widget), wxToggleButton *cb)
|
static void gtk_togglebutton_clicked_callback(GtkWidget *WXUNUSED(widget), wxToggleButton *cb)
|
||||||
{
|
{
|
||||||
if (g_isIdle)
|
if (g_isIdle)
|
||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
if (!cb->m_hasVMT || g_blockEventsOnDrag)
|
if (!cb->m_hasVMT || g_blockEventsOnDrag)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (cb->m_blockEvent) return;
|
||||||
|
|
||||||
// Generate a wx event.
|
// Generate a wx event.
|
||||||
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
|
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
|
||||||
@ -54,6 +56,8 @@ bool wxToggleButton::Create(wxWindow *parent, wxWindowID id,
|
|||||||
{
|
{
|
||||||
m_needParent = TRUE;
|
m_needParent = TRUE;
|
||||||
m_acceptsFocus = TRUE;
|
m_acceptsFocus = TRUE;
|
||||||
|
|
||||||
|
m_blockEvent = FALSE;
|
||||||
|
|
||||||
if (!PreCreation(parent, pos, size) ||
|
if (!PreCreation(parent, pos, size) ||
|
||||||
!CreateBase(parent, id, pos, size, style, validator, name )) {
|
!CreateBase(parent, id, pos, size, style, validator, name )) {
|
||||||
@ -102,15 +106,11 @@ void wxToggleButton::SetValue(bool state)
|
|||||||
if (state == GetValue())
|
if (state == GetValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func(GTK_OBJECT(m_widget),
|
m_blockEvent = TRUE;
|
||||||
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
|
|
||||||
(gpointer *)this);
|
|
||||||
|
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state);
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state);
|
||||||
|
|
||||||
gtk_signal_connect(GTK_OBJECT(m_widget), "clicked",
|
m_blockEvent = FALSE;
|
||||||
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
|
|
||||||
(gpointer *)this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool GetValue() const
|
// bool GetValue() const
|
||||||
|
@ -46,6 +46,8 @@ static void gtk_checkbox_clicked_callback( GtkWidget *WXUNUSED(widget), wxCheckB
|
|||||||
if (!cb->m_hasVMT) return;
|
if (!cb->m_hasVMT) return;
|
||||||
|
|
||||||
if (g_blockEventsOnDrag) return;
|
if (g_blockEventsOnDrag) return;
|
||||||
|
|
||||||
|
if (cb->m_blockEvent) return;
|
||||||
|
|
||||||
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
|
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
|
||||||
event.SetInt( cb->GetValue() );
|
event.SetInt( cb->GetValue() );
|
||||||
@ -74,6 +76,7 @@ bool wxCheckBox::Create(wxWindow *parent,
|
|||||||
{
|
{
|
||||||
m_needParent = TRUE;
|
m_needParent = TRUE;
|
||||||
m_acceptsFocus = TRUE;
|
m_acceptsFocus = TRUE;
|
||||||
|
m_blockEvent = FALSE;
|
||||||
|
|
||||||
if (!PreCreation( parent, pos, size ) ||
|
if (!PreCreation( parent, pos, size ) ||
|
||||||
!CreateBase( parent, id, pos, size, style, validator, name ))
|
!CreateBase( parent, id, pos, size, style, validator, name ))
|
||||||
@ -143,16 +146,11 @@ void wxCheckBox::SetValue( bool state )
|
|||||||
if (state == GetValue())
|
if (state == GetValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(m_widgetCheckbox),
|
m_blockEvent = TRUE;
|
||||||
GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback),
|
|
||||||
(gpointer *)this );
|
|
||||||
|
|
||||||
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widgetCheckbox), state );
|
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widgetCheckbox), state );
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widgetCheckbox),
|
m_blockEvent = FALSE;
|
||||||
"clicked",
|
|
||||||
GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback),
|
|
||||||
(gpointer *)this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxCheckBox::GetValue() const
|
bool wxCheckBox::GetValue() const
|
||||||
|
@ -49,6 +49,8 @@ void gtk_radiobutton_clicked_callback( GtkToggleButton *button, wxRadioButton *r
|
|||||||
if (g_blockEventsOnDrag) return;
|
if (g_blockEventsOnDrag) return;
|
||||||
|
|
||||||
if (!button->active) return;
|
if (!button->active) return;
|
||||||
|
|
||||||
|
if (rb->m_blockEvent) return;
|
||||||
|
|
||||||
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
|
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
|
||||||
event.SetInt( rb->GetValue() );
|
event.SetInt( rb->GetValue() );
|
||||||
@ -69,22 +71,24 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
|
|||||||
m_acceptsFocus = TRUE;
|
m_acceptsFocus = TRUE;
|
||||||
m_needParent = TRUE;
|
m_needParent = TRUE;
|
||||||
m_isRadioButton = TRUE;
|
m_isRadioButton = TRUE;
|
||||||
|
|
||||||
|
m_blockEvent = FALSE;
|
||||||
|
|
||||||
if (!PreCreation( parent, pos, size ) ||
|
if (!PreCreation( parent, pos, size ) ||
|
||||||
!CreateBase( parent, id, pos, size, style, validator, name ))
|
!CreateBase( parent, id, pos, size, style, validator, name ))
|
||||||
{
|
{
|
||||||
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
|
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFlag(wxRB_GROUP))
|
if (HasFlag(wxRB_GROUP))
|
||||||
{
|
{
|
||||||
/* start a new group */
|
// start a new group
|
||||||
m_radioButtonGroup = (GSList*) NULL;
|
m_radioButtonGroup = (GSList*) NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* search backward for last group start */
|
// search backward for last group start
|
||||||
wxRadioButton *chief = (wxRadioButton*) NULL;
|
wxRadioButton *chief = (wxRadioButton*) NULL;
|
||||||
wxWindowList::Node *node = parent->GetChildren().GetLast();
|
wxWindowList::Node *node = parent->GetChildren().GetLast();
|
||||||
while (node)
|
while (node)
|
||||||
@ -99,12 +103,12 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
|
|||||||
}
|
}
|
||||||
if (chief)
|
if (chief)
|
||||||
{
|
{
|
||||||
/* we are part of the group started by chief */
|
// we are part of the group started by chief
|
||||||
m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
|
m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* start a new group */
|
// start a new group
|
||||||
m_radioButtonGroup = (GSList*) NULL;
|
m_radioButtonGroup = (GSList*) NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,8 +160,7 @@ void wxRadioButton::SetValue( bool val )
|
|||||||
if (val == GetValue())
|
if (val == GetValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
|
m_blockEvent = TRUE;
|
||||||
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
|
|
||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
{
|
{
|
||||||
@ -170,8 +173,7 @@ void wxRadioButton::SetValue( bool val )
|
|||||||
// as FALSE. Failing silently is probably TRTTD here.
|
// as FALSE. Failing silently is probably TRTTD here.
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "clicked",
|
m_blockEvent = FALSE;
|
||||||
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxRadioButton::GetValue() const
|
bool wxRadioButton::GetValue() const
|
||||||
|
@ -99,11 +99,8 @@ static void gtk_toolbar_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
|
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
|
||||||
if ( tbar->m_blockNextEvent )
|
|
||||||
{
|
if (tbar->m_blockEvent) return;
|
||||||
tbar->m_blockNextEvent = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_blockEventsOnDrag) return;
|
if (g_blockEventsOnDrag) return;
|
||||||
if (!tool->IsEnabled()) return;
|
if (!tool->IsEnabled()) return;
|
||||||
@ -196,7 +193,7 @@ void wxToolBar::Init()
|
|||||||
m_fg =
|
m_fg =
|
||||||
m_bg = (GdkColor *)NULL;
|
m_bg = (GdkColor *)NULL;
|
||||||
m_toolbar = (GtkToolbar *)NULL;
|
m_toolbar = (GtkToolbar *)NULL;
|
||||||
m_blockNextEvent = FALSE;
|
m_blockEvent = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxToolBar::~wxToolBar()
|
wxToolBar::~wxToolBar()
|
||||||
@ -440,9 +437,11 @@ void wxToolBar::DoToggleTool( wxToolBarToolBase *toolBase, bool toggle )
|
|||||||
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
|
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_blockNextEvent = TRUE; // we cannot use gtk_signal_disconnect here
|
m_blockEvent = TRUE;
|
||||||
|
|
||||||
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
|
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
|
||||||
|
|
||||||
|
m_blockEvent = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,13 +24,15 @@ extern wxCursor g_globalCursor;
|
|||||||
|
|
||||||
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
|
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
|
||||||
// Callback function given to gtk.
|
// Callback function given to gtk.
|
||||||
void wxToggleButton::gtk_togglebutton_clicked_callback(GtkWidget *WXUNUSED(widget), wxToggleButton *cb)
|
static void gtk_togglebutton_clicked_callback(GtkWidget *WXUNUSED(widget), wxToggleButton *cb)
|
||||||
{
|
{
|
||||||
if (g_isIdle)
|
if (g_isIdle)
|
||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
if (!cb->m_hasVMT || g_blockEventsOnDrag)
|
if (!cb->m_hasVMT || g_blockEventsOnDrag)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (cb->m_blockEvent) return;
|
||||||
|
|
||||||
// Generate a wx event.
|
// Generate a wx event.
|
||||||
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
|
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
|
||||||
@ -54,6 +56,8 @@ bool wxToggleButton::Create(wxWindow *parent, wxWindowID id,
|
|||||||
{
|
{
|
||||||
m_needParent = TRUE;
|
m_needParent = TRUE;
|
||||||
m_acceptsFocus = TRUE;
|
m_acceptsFocus = TRUE;
|
||||||
|
|
||||||
|
m_blockEvent = FALSE;
|
||||||
|
|
||||||
if (!PreCreation(parent, pos, size) ||
|
if (!PreCreation(parent, pos, size) ||
|
||||||
!CreateBase(parent, id, pos, size, style, validator, name )) {
|
!CreateBase(parent, id, pos, size, style, validator, name )) {
|
||||||
@ -102,15 +106,11 @@ void wxToggleButton::SetValue(bool state)
|
|||||||
if (state == GetValue())
|
if (state == GetValue())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_signal_disconnect_by_func(GTK_OBJECT(m_widget),
|
m_blockEvent = TRUE;
|
||||||
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
|
|
||||||
(gpointer *)this);
|
|
||||||
|
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state);
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_widget), state);
|
||||||
|
|
||||||
gtk_signal_connect(GTK_OBJECT(m_widget), "clicked",
|
m_blockEvent = FALSE;
|
||||||
GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
|
|
||||||
(gpointer *)this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool GetValue() const
|
// bool GetValue() const
|
||||||
|
Loading…
Reference in New Issue
Block a user