Another week of work towards porting Builder to GTK 4. Since I can’t add to TWIG from IRC, I’ll try harder to drop some occasional updates here.
GtkSourceView
- Merged fixes for highlighting unicode literals for C
- Improved parsing of language values in snippet bundles
- GtkSourceGutter will not correctly mark prelit and selection quarks within
GtkSourceGutterLines
. - Fixed a bunch of little mouse pointer annoyances when using
GtkSourceHover
interactive tooltips. GtkSourceGutterRenderer
s can now opt-out of signal emission forGtkSourceGutterRenderer::query_data()
. Signal emission with GObject is rather slow, so avoiding it on every line can be helpful. Just set the virtual method pointer toNULL
. The signal was only ever added to make porting easier anyway.
libpanel
- Merged fixes to be used as a subproject with static libraries only
- CSS styling matches recent changes in libadwaita, particularly around making navigation tabs and panel frame headers more unified.
- PanelWidget no longer uses a
GtkBinLayout
so that it’s easier for subclasses to integrate with popovers fromsize_allocate()
to callgtk_popover_present()
.
Builder
- Georges did a live coding stream where they ported a bunch of the “buildui” plugin. That is merged to the GTK 4 port now. It brings a number of features back to the UI including the build terminal, run terminal, build panel (with pipeline stages, warnings, and errors), and project information in the omnibar popover.
- Günther did a bunch of work porting our old snippet files to the new XML-based snippet bundle format upstream in GtkSourceView. Along with that came porting of the snippets plugin for Builder’s new GTK 4-based editor.
- Workspace windows have a bit better predictability when restoring sizes.
- The project creation workflow was ported, albeit needs to have the redesign implemented still.
- Lots of resiliency fixes for clang and symbol-tree plugins to improve life-cycle management.
- The Valgrind plugin was ported to C. This was also back-ported to
main
because it fixed a number of oddities (crashes) occurring in PyGObject. - Builder’s “omni-gutter”
GtkSourceGutterRenderer
was ported to GTK 4 and got a lot of cleanups along the way. I believe there is still some outstanding things to fix such as handling rendering for symbolic icons as I’m pretty sure that’s not correct yet. - The “debuggerui” plugin has been ported to GTK 4 and appears to be working well now. This plugin is responsible for bridging the internal
IdeDebugger
interfaces to the UI interface. - Style schemes were updated for GtkSourceView 5
- Tabs are now the default navigation interface for pages. There is likely still a lot to do around how we want empty frames to look and behave though.
- The project-tree is now most ported, and with some workarounds to allow making
GtkPopover
work you can actually display popovers and activate menu items. - A long-standing plugin ordering issue has been fixed so that
gtk/menus.ui
embedded in plugin resources have menu-merging in the proper order. - Some incremental work landed to support per-project configuration of languages.
- The “ls” plugin (directory views) supports “humanized” timestamps again and columns are resizable once more.
- You can place panels in the right-side-bar now.
Upcoming
There are a bunch of foundational things to still get landed before I feel I can get Builder flipped over to our Nightly builds. In particular we need to land support for things like:
- Keyboard shortcuts using GtkShortcutController. This was all done with libdazzle previously.
- Allow plugins to define custom keyboard shortcuts and merge them into the controller.
- Port “shellcmd” plugin and integrate keyboard shortcuts to apply those commands.
- Finish rewrite of the search popover. I’m trying to delay this until
GtkListView
with sections is supported, as it would provide us a much greater path for performance. - A lot of our problems would be simpler if we could make GtkActionMuxer use an alternate action muxer parent from another (non-descendant) widget.
- Configuration editing in the project configuration window. This is a new design so the port is not 1:1.