Index: src/common/paws/pawslistbox.cpp =================================================================== --- src/common/paws/pawslistbox.cpp (revision 5758) +++ src/common/paws/pawslistbox.cpp (working copy) @@ -115,6 +115,7 @@ void pawsListBox::Clear() { + selected = -1; for ( size_t x = 0; x < rows.GetSize(); x++ ) { children.Delete( rows[x] ); @@ -353,7 +354,6 @@ { pawsListBoxRow* zombie = rows[selected]; Remove(zombie); - selected = -1; return zombie; } } @@ -367,7 +367,7 @@ { pawsListBoxRow* zombie = rows[x]; Remove(zombie); - delete zombie; + delete zombie; return; } } @@ -378,9 +378,14 @@ { if (rowToRemove) { + pawsListBoxRow* selectedRow = NULL; + if (selected != -1) + selectedRow = rows[selected]; + rows.Delete( rowToRemove ); children.Delete( rowToRemove ); totalRows--; + Select(selectedRow); CalculateDrawPositions(); } } @@ -1174,18 +1179,11 @@ sort_ascOrder = ascOrder; qsort(sortedRows, rows.GetSize(), sizeof (void*), sort_cmp); - for ( i=0; i < rows.GetSize(); i++) - { - rows[i] = sortedRows[i]; - if(sortedRows[i] == selectedrow) //check if the current row is the one which was selected - selected = (int) i; //if so update our selected variable - } - delete [] sortedRows; CheckSortingArrow(sortColNum, ascOrder); //check if the sorting arrow is there if not add it - Select(GetSelectedRow()); //allows select to handle the new position and update gfx correctly + Select(selectedrow); //allows select to handle the new position and update gfx correctly CalculateDrawPositions(); } Index: src/client/gui/pawsskillwindow.cpp =================================================================== --- src/client/gui/pawsskillwindow.cpp (revision 5758) +++ src/client/gui/pawsskillwindow.cpp (working copy) @@ -216,7 +216,7 @@ rowEntry.PushBack(fact->name); ratingStr.Format("%d", fact->rating); rowEntry.PushBack(ratingStr); - pawsListBoxRow* row = factionList->NewTextBoxRow(rowEntry); + factionList->NewTextBoxRow(rowEntry); } } else if (factRequest) // ignore MSG_UPDATE if weve not had full list first @@ -266,7 +266,7 @@ rowEntry.PushBack(fact->name); ratingStr.Format("%d", fact->rating); rowEntry.PushBack(ratingStr); - pawsListBoxRow* row = factionList->NewTextBoxRow(rowEntry); + factionList->NewTextBoxRow(rowEntry); } } } @@ -298,11 +298,11 @@ skillString = incoming.commandData; skillCache.apply(&incoming.skillCache); - bool flush = train != incoming.trainingWindow; + bool flush = train != incoming.trainingWindow || incoming.openWindow; train=incoming.trainingWindow; int selectedRowIdx = -1; - HandleSkillList(&skillCache, incoming.focusSkill, &selectedRowIdx, true); + HandleSkillList(&skillCache, incoming.focusSkill, &selectedRowIdx, flush); SelectSkill(selectedRowIdx, incoming.skillCat); @@ -424,11 +424,9 @@ if (!flush && !skills->isModified()) return; - if (skills->hasRemoved()) + if (skills->hasRemoved() || unsortedSkills.IsEmpty()) flush = true; - selectedSkill.Clear(); - if (flush) { // Clear descriptions @@ -502,18 +500,13 @@ if (flush) { statsSkillList->SetSortedColumn(0); - statsSkillList->SortRows(); combatSkillList->SetSortedColumn(0); - combatSkillList->SortRows(); magicSkillList->SetSortedColumn(0); - magicSkillList->SortRows(); jobsSkillList->SetSortedColumn(0); - jobsSkillList->SortRows(); variousSkillList->SetSortedColumn(0); - variousSkillList->SortRows(); } - if (!foundSelected) + if (flush && !foundSelected) { selectedSkill.Clear(); } @@ -913,7 +906,7 @@ unsortedSkills[idx] = row; } - if (skillName == selectedSkill) + if (flush && skillName == selectedSkill) { statsSkillList->Select(row); foundSelected = true;