• Christian Hergert's avatar
    core: add new libide-core library · a9b12408
    Christian Hergert authored
    This is the center-most library that all the new static libraries will
    be based upon. It provides our core objects, and some new ways to work
    with things going forward.
    IdeObject is now a bit of a directed graph (without cycles). It provides
    a mechanism similar to GtkWidget to destroy hierarchies of objects without
    relying on the GObject.dispose directly upon final-unref. Doing so helps
    us ensure that we can cleanup objects even if a leak occurs somewhere and
    therefore reduce how much we leak.
    It also provides us a number of debugging tools going forward to get info
    about the object graph.
    You can encapsulate a non-IdeObject in an IdeObjectBox which allows
    associating it with a tree. IdeBuffer does this so that we can attach
    sub-objects to the buffer and have it cleaned up with the buffer. Various
    extension points use this for auto-cleanup.
    IdeNotification(s) is also used all over in the new design to track
    progress of operations. It has convenient UI components in libide-gui to
    make visualizing them easier in the carousel and elsewhere.
    The IdeContext is now just the root IdeObject. We no longer require loading
    a project into the context, which is useful in future scenarios like a
    project-less editor window.
    IdeObject provides more safety-checks around threading as well as built
    in support for locking parts of the graph. Plugins utilizing
    multi-threading should take advantage of this feature.