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.
- 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
- Fixed a bunch of little mouse pointer annoyances when using
GtkSourceGutterRenderers can now opt-out of signal emission for
GtkSourceGutterRenderer::query_data(). Signal emission with GObject is rather slow, so avoiding it on every line can be helpful. Just set the virtual method pointer to
NULL. The signal was only ever added to make porting easier anyway.
- 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
GtkBinLayoutso that it’s easier for subclasses to integrate with popovers from
- 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
mainbecause it fixed a number of oddities (crashes) occurring in PyGObject.
- Builder’s “omni-gutter”
GtkSourceGutterRendererwas 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
IdeDebuggerinterfaces 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
GtkPopoverwork you can actually display popovers and activate menu items.
- A long-standing plugin ordering issue has been fixed so that
gtk/menus.uiembedded 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.
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
GtkListViewwith 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.