diff --git a/include/wx/gtk/choice.h b/include/wx/gtk/choice.h index e5da9b413d..70e93fd534 100644 --- a/include/wx/gtk/choice.h +++ b/include/wx/gtk/choice.h @@ -77,8 +77,8 @@ public: virtual void SetColumns(int n=1); virtual int GetColumns() const; - virtual void DisableEvents(); - virtual void EnableEvents(); + virtual void GTKDisableEvents(); + virtual void GTKEnableEvents(); static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index 3932eed912..462d9266ef 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -168,7 +168,7 @@ void wxChoice::DoClear() { wxCHECK_RET( m_widget != NULL, wxT("invalid control") ); - DisableEvents(); + GTKDisableEvents(); GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); GtkTreeModel* model = gtk_combo_box_get_model( combobox ); @@ -179,7 +179,7 @@ void wxChoice::DoClear() if (m_strings) m_strings->Clear(); - EnableEvents(); + GTKEnableEvents(); InvalidateBestSize(); } @@ -299,12 +299,12 @@ void wxChoice::SetSelection( int n ) { wxCHECK_RET( m_widget != NULL, wxT("invalid control") ); - DisableEvents(); + GTKDisableEvents(); GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); gtk_combo_box_set_active( combobox, n ); - EnableEvents(); + GTKEnableEvents(); } void wxChoice::SetColumns(int n) @@ -321,13 +321,13 @@ int wxChoice::GetColumns() const } -void wxChoice::DisableEvents() +void wxChoice::GTKDisableEvents() { g_signal_handlers_block_by_func(m_widget, (gpointer) gtk_choice_changed_callback, this); } -void wxChoice::EnableEvents() +void wxChoice::GTKEnableEvents() { g_signal_handlers_unblock_by_func(m_widget, (gpointer) gtk_choice_changed_callback, this); diff --git a/tests/controls/itemcontainertest.cpp b/tests/controls/itemcontainertest.cpp index b405e64a69..d5894c83d5 100644 --- a/tests/controls/itemcontainertest.cpp +++ b/tests/controls/itemcontainertest.cpp @@ -14,6 +14,8 @@ #include "wx/ctrlsub.h" #endif // WX_PRECOMP +#include "wx/scopeguard.h" + #include "itemcontainertest.h" void ItemContainerTestCase::Append() @@ -243,3 +245,38 @@ void ItemContainerTestCase::SetString() CPPUNIT_ASSERT_EQUAL("", container->GetString(2)); #endif } + +void ItemContainerTestCase::SetSelection() +{ + wxItemContainer * const container = GetContainer(); + + container->Append("first"); + container->Append("second"); + + // This class is used to check that SetSelection() doesn't generate any + // events, as documented. + class CommandEventHandler : public wxEvtHandler + { + public: + virtual bool ProcessEvent(wxEvent& event) + { + CPPUNIT_ASSERT_MESSAGE + ( + "unexpected command event from SetSelection", + !event.IsCommandEvent() + ); + + return wxEvtHandler::ProcessEvent(event); + } + } h; + + wxWindow * const win = GetContainerWindow(); + win->PushEventHandler(&h); + wxON_BLOCK_EXIT_OBJ1( *win, wxWindow::PopEventHandler, false ); + + container->SetSelection(0); + CPPUNIT_ASSERT_EQUAL( 0, container->GetSelection() ); + + container->SetSelection(1); + CPPUNIT_ASSERT_EQUAL( 1, container->GetSelection() ); +} diff --git a/tests/controls/itemcontainertest.h b/tests/controls/itemcontainertest.h index 86d0801a5d..3b152304d5 100644 --- a/tests/controls/itemcontainertest.h +++ b/tests/controls/itemcontainertest.h @@ -39,6 +39,7 @@ protected: CPPUNIT_TEST( ClientData ); \ CPPUNIT_TEST( VoidData ); \ CPPUNIT_TEST( Set ); \ + CPPUNIT_TEST( SetSelection ); \ CPPUNIT_TEST( SetString ) void Append(); @@ -49,6 +50,7 @@ protected: void ClientData(); void VoidData(); void Set(); + void SetSelection(); void SetString(); private: