[Aptitude-svn-commit] r3760 - in branches/aptitude-0.3/aptitude: .
src/vscreen
Daniel Burrows
dburrows at costa.debian.org
Mon Aug 8 22:45:32 UTC 2005
Author: dburrows
Date: Mon Aug 8 22:45:29 2005
New Revision: 3760
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/vscreen/vs_table.cc
Log:
Don't crash removing the last widget in a table.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Mon Aug 8 22:45:29 2005
@@ -1,5 +1,10 @@
2005-08-08 Daniel Burrows <dburrows at debian.org>
+ * src/vscreen/vs_table.cc:
+
+ Be more careful in handling iterators so that the table routines
+ don't crash when the last widget is removed.
+
* src/vscreen/vs_bin.cc, src/vscreen/vscreen_widget.cc, src/vscreen/vscreen_widget.h, src/vscreen/vs_menubar.cc, src/vscreen/vs_minibuf_win.cc, src/vscreen/vs_multiplex.cc, src/vscreen/vs_stacked.cc, src/vscreen/vs_table.cc:
Make sure that all containers destroy their contents in their
Modified: branches/aptitude-0.3/aptitude/src/vscreen/vs_table.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/vs_table.cc (original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/vs_table.cc Mon Aug 8 22:45:29 2005
@@ -238,35 +238,42 @@
void vs_table::rem_widget(const vs_widget_ref &w)
{
- for(childlist::iterator i=children.begin(); i!=children.end(); ++i)
- if(i->w==w)
+ for(childlist::iterator i = children.begin(); i != children.end(); ++i)
+ if(i->w == w)
{
- if(i==focus)
+ if(i == focus)
{
if(get_isfocussed())
focus->w->unfocussed();
focus++;
- while(focus!=children.end() && focus->w->focus_me())
+ while(focus != children.end() && (focus == i ||
+ focus->w->focus_me()))
focus++;
- if(focus==children.end())
+ if(focus == children.end())
{
- focus=children.begin();
+ focus = children.begin();
- while(focus!=children.end() && focus->w->focus_me())
+ while(focus != children.end() && (focus == i ||
+ focus->w->focus_me()))
focus++;
}
- if(focus!=children.end() && get_isfocussed())
- focus->w->focussed();
+ if(focus != children.end() && get_isfocussed())
+ {
+ assert(focus != i);
+ focus->w->focussed();
+ }
}
i->shown_conn.disconnect();
i->hidden_conn.disconnect();
children.erase(i);
+
+
vscreen_queuelayout();
w->set_owner(NULL);
More information about the Aptitude-svn-commit
mailing list