X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1db8dc4a2b5b664e922b9d049320ec0354e0eccf..90f3fe56ee58fec86d7f938f9c630c0745f0a2dc:/src/gtk/checkbox.cpp diff --git a/src/gtk/checkbox.cpp b/src/gtk/checkbox.cpp index e63a67f08a..225f9df18e 100644 --- a/src/gtk/checkbox.cpp +++ b/src/gtk/checkbox.cpp @@ -12,12 +12,13 @@ #pragma implementation "checkbox.h" #endif -#include "wx/checkbox.h" +#include "wx/defs.h" #if wxUSE_CHECKBOX -#include -#include +#include "wx/checkbox.h" + +#include "wx/gtk/private.h" //----------------------------------------------------------------------------- // idle system @@ -44,6 +45,8 @@ static void gtk_checkbox_clicked_callback( GtkWidget *WXUNUSED(widget), wxCheckB 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() ); @@ -72,6 +75,7 @@ bool wxCheckBox::Create(wxWindow *parent, { m_needParent = TRUE; m_acceptsFocus = TRUE; + m_blockEvent = FALSE; if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, validator, name )) @@ -102,7 +106,7 @@ bool wxCheckBox::Create(wxWindow *parent, else { m_widgetCheckbox = gtk_check_button_new_with_label( m_label.mbc_str() ); - m_widgetLabel = GTK_BUTTON( m_widgetCheckbox )->child; + m_widgetLabel = BUTTON_CHILD( m_widgetCheckbox ); m_widget = m_widgetCheckbox; } @@ -141,16 +145,11 @@ void wxCheckBox::SetValue( bool state ) if (state == GetValue()) return; - gtk_signal_disconnect_by_func( GTK_OBJECT(m_widgetCheckbox), - GTK_SIGNAL_FUNC(gtk_checkbox_clicked_callback), - (gpointer *)this ); + m_blockEvent = TRUE; 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 ); + m_blockEvent = FALSE; } bool wxCheckBox::GetValue() const @@ -188,7 +187,7 @@ void wxCheckBox::ApplyWidgetStyle() bool wxCheckBox::IsOwnGtkWindow( GdkWindow *window ) { - return (window == GTK_TOGGLE_BUTTON(m_widget)->event_window); + return window == TOGGLE_BUTTON_EVENT_WIN(m_widget); } void wxCheckBox::OnInternalIdle() @@ -196,14 +195,15 @@ void wxCheckBox::OnInternalIdle() wxCursor cursor = m_cursor; if (g_globalCursor.Ok()) cursor = g_globalCursor; - if (GTK_TOGGLE_BUTTON(m_widgetCheckbox)->event_window && cursor.Ok()) + GdkWindow *event_window = TOGGLE_BUTTON_EVENT_WIN(m_widgetCheckbox); + if ( event_window && cursor.Ok() ) { /* I now set the cursor the anew in every OnInternalIdle call as setting the cursor in a parent window also effects the windows above so that checking for the current cursor is not possible. */ - gdk_window_set_cursor( GTK_TOGGLE_BUTTON(m_widgetCheckbox)->event_window, cursor.GetCursor() ); + gdk_window_set_cursor( event_window, cursor.GetCursor() ); } UpdateWindowUI();