1. 08 Jun, 2018 1 commit
    • Christian Hergert's avatar
      completion: add new completion engine · 3cd417a3
      Christian Hergert authored
      This is a replacement for GtkSourceCompletion to handle a number of designs
      that we can't land into GtkSourceView for various API/ABI reasons but need
      in Builder for completion performance, memory footprint, and visual
      The important details in terms of design change are:
       * Use GListModel heavily to avoid GObject creation, GList creation,
         GQueue creation, and O(n²) treemodel lookups so that we can handle
         larger list sizes in (tens of thousands with much reduced memory
       * Allow providers to refilter existing results conveniently.
       * Break things into 4 columns (icon, lhs, word, rhs).
       * Use GtkListBoxRow instead of GtkTreeView for widget styling.
       * Only create widgets and proposals for the visible range of items
         through use of custom GtkBox-based GtkScrollable, listbox row, and
         dynamic access to joined-GListModel for all results.
       * Dynamic priorities for completion results based on context.
       * Adjust window size based on result set, with changeable xoffset.
       * Use different strategies for display based on our display manager.
       * Consistent and fast fuzzy text filtering.
      Some things we don't have yet that we'd like to add in the future.
       * Support for more complex comments than fit in the completion window
         such as a details window.
       * Use move_to_rect() API landing in gtk+ 3.24.
       * When wayland supports dynamic repositioning of popups, use that with
         the IdeCompletionWindow instead of our overlay display.
       * Simplified support for parameter completion
       * Simplified support for string interpolation