Difference between revisions of "Object Ownership"

From Inkscape Wiki
Jump to navigation Jump to search
Line 68: Line 68:
* src/widgets/desktop-widget.cpp
* src/widgets/desktop-widget.cpp
* src/ui/view/view.cpp
* src/ui/view/view.cpp
==== Undo stack ====
The undo stack should be owned by the document.
==== Selections ====
Selections should be owned by InkscapeWindow with an additional selection owned by InkscapeApplication for use with the GUI.

Revision as of 15:41, 8 September 2021


Inkscape currently uses garbage collecting to manage the lifetime of many objects. This is problematic...


Objects managed by GC: (grep -Ir GC:: src | grep public):

  • SPDocument: src/document.h
  • SPDesktop (via View): ui/view/view.h
  • Undo stack: undo-stack-observer.h
  • XML nodes: xml/event.h, xml/attribute-record.h, xml/composite-node-observer.h, xml/node.h, xml/simple-node-observer.h, xml/simple-node.h
  • Profile manager: profile-manager.h
  • Layer manager: layer-manager.h
  • Selections: selection.h
  • Document subset: document-subset.h

Document

Documents opened for editing should be owned by InkscapeApplication.

  • Help (tutorials)

Temporary documents should be opened with unique_ptr<>.

  • SVG Cursors (ui/cursor-utils.cpp, uses ink_file_open(), unique_ptr)
  • SVG to Pixbuf (ui/svg-renderer.cpp, uses ink_file_open(), unique_ptr)
  • SPDocument::copy (document.cpp, uses createDoc() ***)
  • Paint selector (ui/widget/paint-selector.cpp, uses SPDocument::createNewDoc, static, never deleted)
  • Markers (ui/widget/marker-combo-box.cpp, uses SPDocument::createNewDoc, static, never deleted)
  • Symbols (ui/dialog/symbols.cpp, uses SPDocument::createNewDoc() x3, not clear if any deleted)
  • Win32 File (ui/dialog/filedialogimpl-win32.cpp, uses SPDocument::createNewDoc(), unique_ptr)
  • About (ui/dialog/about.cpp, uses SPDocument::createNewDoc(), document not deleted!)
  • Paint servers (ui/dialog/paint-servers.cpp, uses SPDocument::createNewDoc(), not deleted!)
  • SVG Preview (ui/dialog/svg-preview.cpp, uses SPDocument::createNewDoc(), deleted in destructor)
  • Clipboard (ui/clipboard.cpp, uses SPDocument::createNewDoc(), uses std::unique_ptr)
  • InkView (inkview-window.h, uses SPDocument::createNewDoc(), not deleted!)
  • ink_file_new(), ink_file_open() (io/file.cpp, uses SPDocument::createNewDoc(), not deleted, utility for other functions)
  • CDR (extension/internal/cdr-input.cpp, uses SPDocument::createNewDocFromMem() x3, not deleted!)
  • SVG (extension/internal/svg.cpp, uses SPDocument::createNew() x3, SPDocument::createNewDocFromMem(), not deleted!)
  • PDF Input ...
  • PixBuf
  • WMF
  • WPG
  • Gimp Grad
  • EMF
  • VSD
  • DBUS
  • Cairo utils (display/cairo-utils.cpp, uses SPDocument::createNewDocFromMem(), uses std::unique_ptr)
  • Stock items (helper/stock-items.cpp, uses SPDocument::createNewDoc(), markers, static, not deleted).
  • URIReference (object/uri-reference.cpp, uses SPDocument::createChildDoc(),

One problem, when saving, a document is copied so it can be modified in place. This document stores a reference to the original document.

Inkscape::Application (different from InkscapeApplication) has a list of documents too. This list should be removed (as should Inkscape::Application).

Desktop

Desktop should be owned by InkscapeWindow. There should be no need to ref count.

The desktop is used in the following sources for two purpose, one to find the SPDocument and the second to ensure the pop-up window is over the correct window.

  • live_effects/parameter/powerstrokepointarray.cpp
  • ui/dialog/knot-properties.cpp
  • ui/dialog/layer-properties.cpp
  • ui/dialog/lpe-fillet-chamfer-properties.cpp
  • ui/dialog/lpe-powerstroke-properties.cpp
  • ui/tools/measure-tool.cpp
  • /ui/widget/style-subject.cpp
  • src/widgets/desktop-widget.cpp
  • src/ui/view/view.cpp

Undo stack

The undo stack should be owned by the document.

Selections

Selections should be owned by InkscapeWindow with an additional selection owned by InkscapeApplication for use with the GUI.