diff options
Diffstat (limited to 'src/sp-object.cpp')
| -rw-r--r-- | src/sp-object.cpp | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/src/sp-object.cpp b/src/sp-object.cpp index fbe16e957..68865fb0e 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -246,18 +246,42 @@ public: } }; -class RefEvent : public RefCountEvent { -public: - RefEvent(SPObject *object) - : RefCountEvent(object, 1, Util::share_static_string("sp-object-ref")) + RefEvent(SPObject *object, Type type) + : _object(stringify(object)), + _class_name(Inkscape::Util::share_static_string(g_type_name(G_TYPE_FROM_INSTANCE(object)))), + _refcount(G_OBJECT(object)->ref_count), + _type(type) {} }; -class UnrefEvent : public RefCountEvent { -public: - UnrefEvent(SPObject *object) - : RefCountEvent(object, -1, Util::share_static_string("sp-object-unref")) - {} + static Category category() { return REFCOUNT; } + + Inkscape::Util::ptr_shared<char> name() const { + if ( _type == REF) { + return Inkscape::Util::share_static_string("sp-object-ref"); + } else { + return Inkscape::Util::share_static_string("sp-object-unref"); + } + } + unsigned propertyCount() const { return 3; } + PropertyPair property(unsigned index) const { + switch (index) { + case 0: + return PropertyPair("object", _object); + case 1: + return PropertyPair("class", _class_name); + case 2: + return PropertyPair("new-refcount", stringify( _type == REF ? _refcount + 1 : _refcount - 1 )); + default: + return PropertyPair(); + } + } + +private: + Inkscape::Util::ptr_shared<char> _object; + Inkscape::Util::ptr_shared<char> _class_name; + unsigned _refcount; + Type _type; }; } @@ -276,7 +300,7 @@ sp_object_ref(SPObject *object, SPObject *owner) g_return_val_if_fail(SP_IS_OBJECT(object), NULL); g_return_val_if_fail(!owner || SP_IS_OBJECT(owner), NULL); - Inkscape::Debug::EventTracker<RefEvent> tracker(object); + Inkscape::Debug::EventTracker<RefEvent> tracker(object, RefEvent::REF); g_object_ref(G_OBJECT(object)); return object; } @@ -296,7 +320,7 @@ sp_object_unref(SPObject *object, SPObject *owner) g_return_val_if_fail(SP_IS_OBJECT(object), NULL); g_return_val_if_fail(!owner || SP_IS_OBJECT(owner), NULL); - Inkscape::Debug::EventTracker<UnrefEvent> tracker(object); + Inkscape::Debug::EventTracker<RefEvent> tracker(object, RefEvent::UNREF); g_object_unref(G_OBJECT(object)); return NULL; } |
