index 5fcf1641cf80d26052816317ed244686e845bcd6..a25205db9f5c8df55305a9a5e2943f9a109bfd65 100644 (file)
--- a/src/document-subset.cpp
+++ b/src/document-subset.cpp
while ( first != last ) {
Siblings::const_iterator mid = first + ( last - first + 1 ) / 2;
- int pos = sp_object_compare_position(*mid, obj);
+ int pos = sp_object_compare_position(*mid,obj);
if ( pos < 0 ) {
first = mid;
} else if ( pos > 0 ) {
if ( first == last ) {
// compare to the single possiblity left
- int pos = sp_object_compare_position(*last, obj);
+ int pos = sp_object_compare_position(*last,obj);
if ( pos < 0 ) {
last++;
}
for ( Map::iterator iter=records.begin()
; iter != records.end() ; ++iter )
{
- sp_object_unref((*iter).first);
+ if ((*iter).first) {
+ sp_object_unref((*iter).first);
+ Record &record=(*iter).second;
+ record.release_connection.disconnect();
+ record.position_changed_connection.disconnect();
+ }
}
}
void _doRemove(SPObject *obj) {
Record &record=records[obj];
- record.release_connection.disconnect();
- record.position_changed_connection.disconnect();
- records.erase(obj);
if ( record.parent == NULL ) {
Record &root = records[NULL];
}
}
+ record.release_connection.disconnect();
+ record.position_changed_connection.disconnect();
+ records.erase(obj);
removed_signal.emit(obj);
sp_object_unref(obj);
}
/* remove obj's record */
_doRemove(obj);
}
-
+
changed_signal.emit();
}