Changing the text of the selected wxChoice (or wxComboBox, as it derives from
it in wxMSW) item made it unselected. Fix this by explicitly restoring the
selection to the item if needed.
Closes #13769.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70018
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
else if ( HasClientObjectData() )
oldObjData = GetClientObject(n);
else if ( HasClientObjectData() )
oldObjData = GetClientObject(n);
+ // and also the selection if we're going to delete the item that was
+ // selected
+ const bool wasSelected = static_cast<int>(n) == GetSelection();
+
::SendMessage(GetHwnd(), CB_DELETESTRING, n, 0);
::SendMessage(GetHwnd(), CB_INSERTSTRING, n, (LPARAM)s.wx_str() );
::SendMessage(GetHwnd(), CB_DELETESTRING, n, 0);
::SendMessage(GetHwnd(), CB_INSERTSTRING, n, (LPARAM)s.wx_str() );
else if ( oldObjData )
SetClientObject(n, oldObjData);
else if ( oldObjData )
SetClientObject(n, oldObjData);
+ // and the selection
+ if ( wasSelected )
+ SetSelection(n);
+
+ // the width could have changed so the best size needs to be recomputed
container->Append(testitems);
container->Append(testitems);
+ container->SetSelection(0);
container->SetString(0, "new item 0");
container->SetString(0, "new item 0");
-#ifndef __WXOSX__
- container->SetString(2, "");
-#endif
-
CPPUNIT_ASSERT_EQUAL("new item 0", container->GetString(0));
CPPUNIT_ASSERT_EQUAL("new item 0", container->GetString(0));
+
+ // Modifying the item shouldn't deselect it.
+ CPPUNIT_ASSERT_EQUAL(0, container->GetSelection());
+
+ // wxOSX doesn't support having empty items in some containers.
+ container->SetString(2, "");
CPPUNIT_ASSERT_EQUAL("", container->GetString(2));
#endif
}
CPPUNIT_ASSERT_EQUAL("", container->GetString(2));
#endif
}