-
Pl
chevron_right
Christian Hergert: Status Week 37
news.movim.eu / PlanetGnome • Yesterday - 18:44 • 7 minutes
VTE
-
Little back-and-forth on what we can do to improve a11y further with VTE. Prototype’d a way to extract hyperlinks and provide them into AccessibleText, however that is not the right place.
We really need an implementation of the at-spi hyperlink API in GTK so that VteTerminal may implement it.
-
Merged a number of a11y fixes provided by Lukáš Tyrychtr which fix some of my original a11y implementation to follow the at-spi expectations better.
Also added one of my own to fix a potential uint underrun when describing runs thanks to
long
touint
conversion.
Ptyxis
-
Got a report of a bit of undesirable behavior when closing a window where close-able tabs are closed before showing the the special close dialog.
It’s all more complex than I wish it was, because there are multiple ways we can enter that flow. Additionally, the asynchronous nature of closing tabs makes that state a bit “split brain” as it exists now. We may want to implement a “session” object to manage this stuff all in one place going forward.
-
When showing multiple tabs the “visual bell” background did not cover the entire headerbar. Quick CSS fix that.
-
Sebastian Wick needed a terminal with the Terminal Intents implemented so I took a crack at implementing that in Ptyxis. That allowed forward-progress on implementing the GLib side of things.
Doing so found a couple of things we want to address in the upcoming FreeDesktop terminal intent “standard” and thankfully they’ve been moving that forward (including the Ptyxis-side).
Libpeas
-
libpeas distro packaging was failing on the testsuite for Lua due to LGI not supporting girepository-2.0. Libpeas 2.x doesn’t use girepository at runtime, so this is relegated to the testsuite.
For now, I’ve just disabled the Lua tests since they can’t possibly work due to that girepository usage.
Some months back I provided patches for LGI to support girepository-2.0 but the project seems unmaintained and therefore hard for anyone to really say “yes merge this”.
You can find some more information from Victoria Lacroix at https://www.vtrlx.ca/posts/2025/lgi-fork/
Builder
-
They don’t get much testing during development so we had a small build regression on i686.
-
Spent a bunch of time on what will hopefully become Builder 50. This is a major rewrite on top of Foundry, Foundry-Gtk, and what will become Foundry-Adw in the 1.1 release of Foundry.
It is hard to describe how remarkably small this will make Builder as a project compared to previous versions. So much complexity in the Builder code-base was in response to all the async/finish flows required to keep things smooth. But now that we have libdex and libfoundry, it’s just so easy to implement that sort of magic.
Libdex
-
Sebastian Wick had some great ideas on integrating libdex with gdbus-codegen. Discussed a few different ways we could go forward to make something ergonomic. It would be nice to implement both consuming as proxies and providing as skeletons with futures.
Libpanel
-
I noticed that the bottom corner buttons in Builder were not aligning with the external rounded corners of the window. That was fallout from a previous cleanup so fixed that up before release.
Template-GLib
-
Thanks to early testing by distributors we found an issue in the testsuite which was exercising GObject Introspection integration. It broke on 32-bit because the
gsize
parameters are different and I never implemented auto-casting of integers of different sizes.So if you did a call like
GLib.utf8_substring(str, i64(3), i64(-1))
and were on 32-bit that would fail since theoffset
/length
parameters areglong
which is sized differently.The quick fix that will still allow for errors to propagate was to implement auto up/down casting of numbers so long as they will fit in the destination type. Otherwise, you’ll fail the cast operation and errors propagate as necessary.
This fix landed shortly before 3.38.0 but was tested on numerous architectures before release.
Foundry
-
Learned that even command-line tools get appdata now days so I went ahead and implemented that for the
foundry
CLI tool. -
We now dynamically link
foundry
binary. Originally I had plans to statically link it so that we can send it to a remote system and run it as a bridge. Since we aren’t there yet anyway, it doesn’t make sense to enforce that and/or make distributions patch it out. -
FoundryBuildManager
got a:busy
property which makes it much easier to implement UI like Builder has where you show a build button or a stop button based on status.It also got a new
stop()
method/GAction
for that too. This is a lot harder than it looks because you need to plumb through a cancellable to all of the build pipeline API which is going to be awaiting the first future of[cancellable, some_op]
.Was extremely happy to see it work on the first try which means I’ve done something right in the libdex design.
-
Once I did the above, adding a
rebuild
action and method was quite easy. We have all the necessary plumbing to either call an action or await a method future and get the same result. -
A last minute API was added to create a
producer
from aconsumer
PTY fd. Hopefully using this new nomenclature is not so confusing for people used to ancient PTY terminology which I know is extremely confusing to begin with. But we gotta move past those antiquated terms (which I wont repeat here) as they are both morally wrong and technically inaccurate. -
The
FoundryFileManager
can now automatically discover content-type when provided a filename. This vastly simplifies API usage when you have one-or-the-other to get a symbolic icon. Since we override many icons from the system, that is just a necessary abstraction. -
FoundrySearchResult
got an:icon
property which means it’s basically usable to search UI now. Though there are not manyFoundrySearchProvider
s yet as they will land for 1.1. -
A new
context.file-manager-show
GAction
is provided which allows you to pass auri
as a"s"
-typedGVariant
. I feel stupid for not doing this a decade ago in Builder and quite frankly, it should probably just exist in GTK. -
Libpanel/Builder has this nice “Action Muxer” API for years now and that is exported in Foundry too so we can use it in libfoundry-gtk and libfoundry-adw. It’s extremely handy when the built-in action support in GTK is not enough.
-
Foundry has a SQLite database of extended attributes on URIs when the underlying file-system does not support extended attributes. I made a little boo-boo there so made that to actually work.
-
Talked to dmalcom about supporting
SARIF
in Foundry for GNOME 50. They (the GCC project) would really like to see more consumers of it and Foundry is an obvious place to put that.It doesn’t look terribly difficult and it should allow us to drop the whole “regex parsing of PTY content” if done right.
Foundry-Gtk
-
Fixed palette parsing and color application to VteTerminal.
-
Imported all the Ptyxis terminal palettes which can now be represented as a
FoundryTerminalPaletteSet
andFoundryTerminalPalette
.Ultimately, what this means is if you link against libfoundry and libfoundry-gtk you could functionally create your own Ptyxis replacement in very little code (assuming you don’t use an agent on the host OS like Ptyxis does).
Just use the
FoundrySdk
as your container abstraction (which you can query usingFoundrySdkManager
) andFoundryTerminal
withFoundryTerminalPaletteSet
. -
You can now list/find available palettes with a
GListModel
API in the form offoundry_terminal_list_palette_sets()
andfoundry_terminal_find_palette_set()
. Each set has an easy light/dark property you can use based on your needs. -
The file-search plugin now properly implements the
load()
vfunc for search results so you can implement preview/opening in apps.
Foundry-Adw
-
A ton of work on the workspace, page, and panel APIs for 1.1. I’m really trying to find a way to re-use this across a number of applications such as Builder, Drafting, Sysprof, and more.
Releases
-
gnome-text-editor 49.0
-
gtksourceview 5.18.0
-
sysprof 49.0
-
gnome-builder 49.0
-
ptyxis 49.0
-
libdex 1.0.0
-
foundry 1.0.0
-
libpanel 1.10.2
-
template-glib 3.38.0
-
d-spy 49.0 (thanks to Jordan for the 49.1 w/ CI fixed)
-
gom 0.5.4
-
libpeas 2.2.0
-
manuals 49.0
Other
-
Team coffee hour, shared some battle wounds of trying to use AI for a pahole wrapper which fixed all my class structs to be cacheline aligned. Was just faster to write the damn code.