------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. http://bugs.kde.org/show_bug.cgi?id=59774 ------- Additional Comments From jl.houberdon@laposte.net 2003-09-01 00:54 ------- This patch should solve the second bug (deleting a diagram with associations in it and which has been saved/loaded) : --- umlview.cpp 2003-08-31 22:46:15.000000000 +0200 +++ umlview.new.cpp 2003-08-31 22:47:27.000000000 +0200 @@ -2197,16 +2197,31 @@ void UMLView::removeAllWidgets() { - //FIXME bug 59774 - //this queryList returns a too high count and list items which cause the program to crash - //when you touch them on diagrams that contain associations /and/ have been saved and loaded - QObjectList * l = queryList( "UMLWidget"); - QObjectListIt it( *l ); + QObjectList * l = queryList("UMLWidget"); + QObjectListIt it(*l); UMLWidget * temp = 0; - while ( (temp=(UMLWidget*)it.current()) != 0 ) { + while ((temp=(UMLWidget*)it.current()) != 0) { ++it; - if( !( temp -> getBaseType() == wt_Text && ((FloatingText *)temp)-> getRole() != tr_Floating ) ) { - removeWidget( temp ); + if( !(temp->getBaseType() == wt_Text && ((FloatingText *)temp)->getRole() != tr_Floating) ) { + removeWidget(temp); + + /* Update list; removing a widget will also delete the associations + * connected to it; so we have to update the list, because other + * widgets might be already deleted + */ + */ + QObjectList * currentList = queryList("UMLWidget"); + QObjectListIt OldListIt(*l); + + while ((temp = (UMLWidget*)OldListIt.current()) != 0) + { + ++OldListIt; + if (!currentList->contains(temp)) + { + l->remove(temp); + } + } + it.toFirst(); + delete currentList; } } delete l; In fact, it is the same problem as in the [63248] bug (crash when cutting a class). The fact that it must be saved/loaded to crash (before applying this patch :)) is not really true. If you make a diagram with an association and you rename it (creating the widgets which make finally crash), when you delete the diagram it crashes.