completion: add new completion engine
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 styling. 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 footprint). * 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
Showing with 6595 additions and 367 deletions
This diff is collapsed.