Skip to content

Next version: GNOME Shell 51 - #145

Open
JumpLink wants to merge 2 commits into
mainfrom
v51.x.x
Open

Next version: GNOME Shell 51#145
JumpLink wants to merge 2 commits into
mainfrom
v51.x.x

Conversation

@JumpLink

@JumpLink JumpLink commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Like #92 (GNOME 50) and #76 (GNOME 49), this prepares the types for the next GNOME Shell release. Checked against gnome-shell at tag 51.beta.

Stacked on #144, which carries the @girs 4.3.0 bump and the Animation / BGSlideShow fix the new types need. Merge that one first and this diff shrinks to the GNOME 51 changes alone.

Key changes

  • Bump the GIR bindings to the GNOME 51 series. @girs/clutter-51, @girs/cogl-51, @girs/meta-51, @girs/mtk-51, @girs/shell-51, @girs/st-51.
  • Port Lightbox's RadialShaderEffect from Shell.GLSLEffect to Clutter.ShaderEffect, replacing vfunc_build_pipeline with vfunc_get_static_snippet(): Cogl.Snippet.
  • Bump the package version to 51.0.0-alpha.1.

The version jump is not +1 this cycle

Mutter kept mutter_api_version at the GNOME major minus 32 for five cycles, so GNOME 46 through 50 map to API 14 through 18. GNOME 51 realigns it with the GNOME major. Clutter, Cogl, Meta, MetaTest, Mtk, St and Shell go from 18 straight to 51, and API versions 19 through 50 will never exist. Source is meson.build at tag 51.beta.

scripts/update-girs.mjs leaves namespace renames alone on purpose, as its header says, since it only advances the version of keys that already exist. So this step is manual. Once merged, the weekly job keeps the -51 packages current by itself.

Shell.GLSLEffect is gone

GNOME 51 removed it. Upstream moved RadialShaderEffect onto Clutter.ShaderEffect and switched from building the snippet imperatively to the get_static_snippet vfunc, which Clutter calls once per subclass.

vfunc_get_static_snippet() {
    const snippet = Cogl.Snippet.new(Cogl.SnippetHook.FRAGMENT, VIGNETTE_DECLARATIONS, null);
    snippet.set_replace(VIGNETTE_CODE);
    return snippet;
}

The uniform setters moved from location integers to names in the same change, but they were never declared here, so nothing changes on that side. The two entries I verified against 51.beta now say @version 51.

Why bump the version here

#92 left this to a separate commit afterwards, 3644fd7. I would rather not repeat that. Keeping main at 50.0.4 while it ships the 51 bindings is worse than it looks, because the release job publishes with --tolerate-republish. A release dispatched against an unbumped version publishes nothing and still reports success. A prerelease version goes out under the next dist-tag, so latest stays on the GNOME 50 types until you decide otherwise.

Validation

build:types, prettier:check, validate:types, build:example and validate:example all pass locally against the -51 packages at 4.3.0.

Not in this PR

The shell's own API drift. GNOME 51 replaced a large number of vfunc_*_event overrides with Clutter.KeyController, ScrollController and gesture actions, which changes what 18 modules in this package declare. Compiling cannot catch it, because those vfuncs still exist on Clutter.Actor. That is #147, stacked on this one.

Heads up on the base branch

update-girs.yml recreates chore/update-girs from main and force-pushes it. The next scheduled run is Monday 06:00 UTC, and it will drop the fix commit currently sitting on that branch. Merging #144 before then avoids that.

Base automatically changed from chore/update-girs to main August 29, 2026 07:05
Mutter realigned its API version with the GNOME major in 51. The shared
namespaces jump from 18 straight to 51, so every dependency and import
moves from `@girs/*-18` to `@girs/*-51`. Versions 19 to 50 will never
exist.

  Clutter, Cogl, Meta, Mtk, Shell, St

GNOME 51 also dropped `Shell.GLSLEffect`. `Lightbox`'s
`RadialShaderEffect` now derives from `Clutter.ShaderEffect` and builds
its snippet in `vfunc_get_static_snippet` instead of
`vfunc_build_pipeline`, matching js/ui/lightbox.js at tag 51.beta.
The package version tracks the GNOME Shell it types, so main should not
keep saying 50.0.4 while shipping the 51 bindings.

It matters for the release job too. That job publishes with
`--tolerate-republish`, so dispatching a release against an unbumped
version is a no-op that still reports success. A prerelease version
publishes under the `next` dist-tag and leaves `latest` on the GNOME 50
types.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant