rendered paste bodyIndex: 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;