git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61029
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- // add the attribute - no need to do anything to reference count
- // since we take ownership of the attribute.
+ // store the new attribute, taking its ownership
m_rowsOrCols.Add(rowOrCol);
m_attrs.Add(attr);
}
// nothing to remove
}
m_rowsOrCols.Add(rowOrCol);
m_attrs.Add(attr);
}
// nothing to remove
}
+ else // we have an attribute for this row or column
- if ( m_attrs[n] == attr )
- // nothing to do
- return;
+
+ // notice that this code works correctly even when the old attribute is
+ // the same as the new one: as we own of it, we must call DecRef() on
+ // it in any case and this won't result in destruction of the new
+ // attribute if it's the same as old one because it must have ref count
+ // of at least 2 to be passed to us while we keep a reference to it too
+ m_attrs[n]->DecRef();
+
- // change the attribute, handling reference count manually,
- // taking ownership of the new attribute.
- m_attrs[n]->DecRef();
+ // replace the attribute with the new one
+ else // remove the attribute
- // remove this attribute, handling reference count manually
- m_attrs[n]->DecRef();
m_rowsOrCols.RemoveAt(n);
m_attrs.RemoveAt(n);
}
m_rowsOrCols.RemoveAt(n);
m_attrs.RemoveAt(n);
}