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
16 files changed:
GtkWidget *m_widgetCheckbox;
GtkWidget *m_widgetLabel;
GtkWidget *m_widgetCheckbox;
GtkWidget *m_widgetLabel;
protected:
virtual wxSize DoGetBestSize() const;
protected:
virtual wxSize DoGetBestSize() const;
bool IsOwnGtkWindow( GdkWindow *window );
void OnInternalIdle();
bool IsOwnGtkWindow( GdkWindow *window );
void OnInternalIdle();
protected:
virtual wxSize DoGetBestSize() const;
protected:
virtual wxSize DoGetBestSize() const;
GdkColor *m_fg;
GdkColor *m_bg;
GdkColor *m_fg;
GdkColor *m_bg;
void SetLabel(const wxString& label);
bool Enable(bool enable = TRUE);
void SetLabel(const wxString& label);
bool Enable(bool enable = TRUE);
-protected:
- // Callback function given to gtk
- static void gtk_togglebutton_clicked_callback(GtkWidget *widget,
- wxToggleButton *win);
+
+ // implementation
+ bool m_blockEvent;
void ApplyWidgetStyle();
bool IsOwnGtkWindow(GdkWindow *window);
void ApplyWidgetStyle();
bool IsOwnGtkWindow(GdkWindow *window);
GtkWidget *m_widgetCheckbox;
GtkWidget *m_widgetLabel;
GtkWidget *m_widgetCheckbox;
GtkWidget *m_widgetLabel;
protected:
virtual wxSize DoGetBestSize() const;
protected:
virtual wxSize DoGetBestSize() const;
bool IsOwnGtkWindow( GdkWindow *window );
void OnInternalIdle();
bool IsOwnGtkWindow( GdkWindow *window );
void OnInternalIdle();
protected:
virtual wxSize DoGetBestSize() const;
protected:
virtual wxSize DoGetBestSize() const;
GdkColor *m_fg;
GdkColor *m_bg;
GdkColor *m_fg;
GdkColor *m_bg;
void SetLabel(const wxString& label);
bool Enable(bool enable = TRUE);
void SetLabel(const wxString& label);
bool Enable(bool enable = TRUE);
-protected:
- // Callback function given to gtk
- static void gtk_togglebutton_clicked_callback(GtkWidget *widget,
- wxToggleButton *win);
+
+ // implementation
+ bool m_blockEvent;
void ApplyWidgetStyle();
bool IsOwnGtkWindow(GdkWindow *window);
void ApplyWidgetStyle();
bool IsOwnGtkWindow(GdkWindow *window);
if (!cb->m_hasVMT) return;
if (g_blockEventsOnDrag) return;
if (!cb->m_hasVMT) return;
if (g_blockEventsOnDrag) return;
+
+ if (cb->m_blockEvent) return;
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
event.SetInt( cb->GetValue() );
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
event.SetInt( cb->GetValue() );
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
if (state == GetValue())
return;
if (state == GetValue())
return;
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_widgetCheckbox),
- 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),
- "clicked",
- GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback),
- (gpointer *)this );
}
bool wxCheckBox::GetValue() const
}
bool wxCheckBox::GetValue() const
if (g_blockEventsOnDrag) return;
if (!button->active) return;
if (g_blockEventsOnDrag) return;
if (!button->active) return;
+
+ if (rb->m_blockEvent) return;
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
event.SetInt( rb->GetValue() );
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
event.SetInt( rb->GetValue() );
m_acceptsFocus = TRUE;
m_needParent = TRUE;
m_isRadioButton = TRUE;
m_acceptsFocus = TRUE;
m_needParent = TRUE;
m_isRadioButton = TRUE;
+
+ m_blockEvent = FALSE;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
}
if (HasFlag(wxRB_GROUP))
{
}
if (HasFlag(wxRB_GROUP))
{
- /* start a new group */
m_radioButtonGroup = (GSList*) NULL;
}
else
{
m_radioButtonGroup = (GSList*) NULL;
}
else
{
- /* search backward for last group start */
+ // search backward for last group start
wxRadioButton *chief = (wxRadioButton*) NULL;
wxWindowList::Node *node = parent->GetChildren().GetLast();
while (node)
wxRadioButton *chief = (wxRadioButton*) NULL;
wxWindowList::Node *node = parent->GetChildren().GetLast();
while (node)
- /* 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) );
}
else
{
m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
}
else
{
- /* start a new group */
m_radioButtonGroup = (GSList*) NULL;
}
}
m_radioButtonGroup = (GSList*) NULL;
}
}
if (val == GetValue())
return;
if (val == GetValue())
return;
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
- GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
// as FALSE. Failing silently is probably TRTTD here.
}
// as FALSE. Failing silently is probably TRTTD here.
}
- gtk_signal_connect( GTK_OBJECT(m_widget), "clicked",
- GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
}
bool wxRadioButton::GetValue() const
}
bool wxRadioButton::GetValue() const
wxapp_install_idle_handler();
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
wxapp_install_idle_handler();
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
- if ( tbar->m_blockNextEvent )
- {
- tbar->m_blockNextEvent = FALSE;
- return;
- }
+
+ if (tbar->m_blockEvent) return;
if (g_blockEventsOnDrag) return;
if (!tool->IsEnabled()) return;
if (g_blockEventsOnDrag) return;
if (!tool->IsEnabled()) return;
m_fg =
m_bg = (GdkColor *)NULL;
m_toolbar = (GtkToolbar *)NULL;
m_fg =
m_bg = (GdkColor *)NULL;
m_toolbar = (GtkToolbar *)NULL;
- m_blockNextEvent = FALSE;
}
wxToolBar::~wxToolBar()
}
wxToolBar::~wxToolBar()
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
}
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
}
- m_blockNextEvent = TRUE; // we cannot use gtk_signal_disconnect here
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
+
+ m_blockEvent = FALSE;
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
// Callback function given to gtk.
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
// 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)
wxapp_install_idle_handler();
if (!cb->m_hasVMT || g_blockEventsOnDrag)
return;
{
if (g_isIdle)
wxapp_install_idle_handler();
if (!cb->m_hasVMT || g_blockEventsOnDrag)
return;
+
+ if (cb->m_blockEvent) return;
// Generate a wx event.
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
// Generate a wx event.
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
+
+ m_blockEvent = FALSE;
if (!PreCreation(parent, pos, size) ||
!CreateBase(parent, id, pos, size, style, validator, name )) {
if (!PreCreation(parent, pos, size) ||
!CreateBase(parent, id, pos, size, style, validator, name )) {
if (state == GetValue())
return;
if (state == GetValue())
return;
- gtk_signal_disconnect_by_func(GTK_OBJECT(m_widget),
- 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",
- GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
- (gpointer *)this);
}
// bool GetValue() const
}
// bool GetValue() const
if (!cb->m_hasVMT) return;
if (g_blockEventsOnDrag) return;
if (!cb->m_hasVMT) return;
if (g_blockEventsOnDrag) return;
+
+ if (cb->m_blockEvent) return;
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
event.SetInt( cb->GetValue() );
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, cb->GetId());
event.SetInt( cb->GetValue() );
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
if (state == GetValue())
return;
if (state == GetValue())
return;
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_widgetCheckbox),
- 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),
- "clicked",
- GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback),
- (gpointer *)this );
}
bool wxCheckBox::GetValue() const
}
bool wxCheckBox::GetValue() const
if (g_blockEventsOnDrag) return;
if (!button->active) return;
if (g_blockEventsOnDrag) return;
if (!button->active) return;
+
+ if (rb->m_blockEvent) return;
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
event.SetInt( rb->GetValue() );
wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
event.SetInt( rb->GetValue() );
m_acceptsFocus = TRUE;
m_needParent = TRUE;
m_isRadioButton = TRUE;
m_acceptsFocus = TRUE;
m_needParent = TRUE;
m_isRadioButton = TRUE;
+
+ m_blockEvent = FALSE;
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, validator, name ))
{
wxFAIL_MSG( wxT("wxRadioButton creation failed") );
}
if (HasFlag(wxRB_GROUP))
{
}
if (HasFlag(wxRB_GROUP))
{
- /* start a new group */
m_radioButtonGroup = (GSList*) NULL;
}
else
{
m_radioButtonGroup = (GSList*) NULL;
}
else
{
- /* search backward for last group start */
+ // search backward for last group start
wxRadioButton *chief = (wxRadioButton*) NULL;
wxWindowList::Node *node = parent->GetChildren().GetLast();
while (node)
wxRadioButton *chief = (wxRadioButton*) NULL;
wxWindowList::Node *node = parent->GetChildren().GetLast();
while (node)
- /* 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) );
}
else
{
m_radioButtonGroup = gtk_radio_button_group( GTK_RADIO_BUTTON(chief->m_widget) );
}
else
{
- /* start a new group */
m_radioButtonGroup = (GSList*) NULL;
}
}
m_radioButtonGroup = (GSList*) NULL;
}
}
if (val == GetValue())
return;
if (val == GetValue())
return;
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
- GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
// as FALSE. Failing silently is probably TRTTD here.
}
// as FALSE. Failing silently is probably TRTTD here.
}
- gtk_signal_connect( GTK_OBJECT(m_widget), "clicked",
- GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
}
bool wxRadioButton::GetValue() const
}
bool wxRadioButton::GetValue() const
wxapp_install_idle_handler();
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
wxapp_install_idle_handler();
wxToolBar *tbar = (wxToolBar *)tool->GetToolBar();
- if ( tbar->m_blockNextEvent )
- {
- tbar->m_blockNextEvent = FALSE;
- return;
- }
+
+ if (tbar->m_blockEvent) return;
if (g_blockEventsOnDrag) return;
if (!tool->IsEnabled()) return;
if (g_blockEventsOnDrag) return;
if (!tool->IsEnabled()) return;
m_fg =
m_bg = (GdkColor *)NULL;
m_toolbar = (GtkToolbar *)NULL;
m_fg =
m_bg = (GdkColor *)NULL;
m_toolbar = (GtkToolbar *)NULL;
- m_blockNextEvent = FALSE;
}
wxToolBar::~wxToolBar()
}
wxToolBar::~wxToolBar()
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
}
gtk_pixmap_set( pixmap, bitmap.GetPixmap(), mask );
}
- m_blockNextEvent = TRUE; // we cannot use gtk_signal_disconnect here
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(item), toggle );
+
+ m_blockEvent = FALSE;
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
// Callback function given to gtk.
// void gtk_togglebutton_clicked_callback(GtkWidget *widget, wxToggleButton *cb)
// 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)
wxapp_install_idle_handler();
if (!cb->m_hasVMT || g_blockEventsOnDrag)
return;
{
if (g_isIdle)
wxapp_install_idle_handler();
if (!cb->m_hasVMT || g_blockEventsOnDrag)
return;
+
+ if (cb->m_blockEvent) return;
// Generate a wx event.
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
// Generate a wx event.
wxCommandEvent event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, cb->GetId());
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
{
m_needParent = TRUE;
m_acceptsFocus = TRUE;
+
+ m_blockEvent = FALSE;
if (!PreCreation(parent, pos, size) ||
!CreateBase(parent, id, pos, size, style, validator, name )) {
if (!PreCreation(parent, pos, size) ||
!CreateBase(parent, id, pos, size, style, validator, name )) {
if (state == GetValue())
return;
if (state == GetValue())
return;
- gtk_signal_disconnect_by_func(GTK_OBJECT(m_widget),
- 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",
- GTK_SIGNAL_FUNC(gtk_togglebutton_clicked_callback),
- (gpointer *)this);
}
// bool GetValue() const
}
// bool GetValue() const