Here's the patch that works for me.
Submitted [ Patch #1897 ] Windows XP --personality=ask not working
https://developer.berlios.de/patch/index.php?func=detailpatch&patch_id=1897&group_id=5358File 1: src/sdk/personalitymanager.cpp
Problem 1: ConfigManager::GetConfigFolder() returns empty string or null string.
Solution 1: Replaced with ConfigManager::GetFolder(sdConfig).
File 2: src/src/app.cpp
Problem 2: Under windows XP SP2, my guess is that wxSingleChoiceDialog has some unknown side effect that prevents code from working.
Solution 2: re-wrote logic using wxGetSingleChoiceIndex
Index: src/sdk/personalitymanager.cpp
===================================================================
--- src/sdk/personalitymanager.cpp (revision 3639)
+++ src/sdk/personalitymanager.cpp (working copy)
@@ -55,7 +55,7 @@
const wxArrayString PersonalityManager::GetPersonalitiesList()
{
wxArrayString list;
- wxDir::GetAllFiles(ConfigManager::GetConfigFolder(), &list, _T("*.conf"), wxDIR_FILES);
+ wxDir::GetAllFiles(ConfigManager::GetFolder(sdConfig), &list, _T("*.conf"), wxDIR_FILES);
for(size_t i = 0; i < list.GetCount(); ++i)
list[i] = wxFileName(list[i]).GetName();
Index: src/src/app.cpp
===================================================================
--- src/src/app.cpp (revision 3639)
+++ src/src/app.cpp (working copy)
@@ -880,6 +880,7 @@
{
if (personality.CmpNoCase(_T("ask")) == 0)
{
+/* This Code failed to work under windows XP SP2 reason unkwown
#if (wxMAJOR_VERSION == 2) && (wxMINOR_VERSION < 5)
// wx < 2.5.x single choice dialog wants wxString*
const wxArrayString& list = Manager::Get()->GetPersonalityManager()->GetPersonalitiesList();
@@ -902,6 +903,21 @@
#if (wxMAJOR_VERSION == 2) && (wxMINOR_VERSION < 5)
delete[] strings;
#endif
+*/
+ wxArrayString persNames = Manager::Get()->GetPersonalityManager()->GetPersonalitiesList();
+ int persIndex;
+ persIndex = wxGetSingleChoiceIndex
+ (
+ _("Please choose which personality (profile) to load:"),
+ _("Personalities (profiles)"),
+ persNames
+ );
+
+ if ( persIndex != -1 )
+ Manager::Get()->GetPersonalityManager()->SetPersonality(persNames[persIndex]);
+ else
+ Manager::Get()->GetPersonalityManager()->SetPersonality(_T("default"));
+
}
else
Manager::Get()->GetPersonalityManager()->SetPersonality(personality, true);