As you are probably aware by now, GNOME 40 will bring some big changes.
This is exciting, but these changes also means that some extensions will have to adjust to continue working in GNOME 40.
To help with that, this post provides a brief overview(!) of the most important changes.
You can join the #gnome-shell and #shell-extensions channels on IRC/Matrix for further questions, and the friendly folks of the extensions rebooted project provide helpful resources like a testing VM image as well as advice.
Overview
The overview was the focus of the GNOME 40 changes, so it is not surprising that it is also the place where adjustment is most likely to be needed.
OverviewControls
This is now the central place that controls the overall state and ties the various overview components together:
-
- dash (now horizontal and at the bottom, otherwise largely the same as before)
- window picker
- app grid
- workspace minimap (formerly known as workspace switcher)
- search controller (formerly known as view selector)
All those components have seen changes to their internals as well, so watch out for those if your extension modifies any of them.
Adjustments, adjustments, adjustments
Most state is now controlled by adjustments, so that transitions can either be animated or controlled by gestures:
-
- overview adjustment
controls the overall overview state, with the possible ControlsState valuesHIDDEN
,WINDOW_PICKER
andAPP_GRID
- fit-mode adjustment
controls how workspaces are displayed, namely whether centering on a single workspace (0) or fitting all workspaces in the available space (1) - workspace adjustment
controls which workspace is in view, that is the value corresponds to the active workspace (or an in-between value during transitions) - app grid adjustment
controls the scroll position of app grid pages - workspace state adjustment
controls whether window previews are shown floating (0) as outside the overview, or spread out according to the used layout strategy (1)
- overview adjustment
The first one is the most important one, driving both the overview transition and the fit-mode and workspace-state adjustments.
Backgrounds have moved into workspaces
This is a relatively minor change, but it affected two extensions I’m maintaining, so I decided it was worth mentioning after all.
Preferences
Extension preferences must use GTK4 now.
It is not possible to use both GTK3 and GTK4 from the same process, so we all have to take the plunge together; and as the process that opens preference dialogs was ported, now is an excellent time for that 🙂
The GTK documentation contains a migration guide that lists most of the changes that are required.
Porting a single preference dialog should be a lot easier than porting an entire application. At least that’s what I found when porting the gnome-shell-extensions and Fedora’s background-logo extensions, so hopefully it won’t be much more work for you.
Version validation
With all those changes, we expect more extensions to have compatibility issues than usual.
To protect against that, we are again doing version validation. That means unless the shell-version
field in an extension’s metainfo.json file includes “40”, it will be disabled and marked as out-of-date.
Apropos “version”: We are following the new GNOME version scheme, so if you do any version comparisons yourself, make sure to take the major version into account.
… and one more thing
We no longer put arrows in top bar menus.
There have been no significant changes to top bar menus this cycle, so if your extension just adds a menu or indicator, it is unlikely to break.
It will just look a bit foreign if you show an arrow next to your menu, so we recommend removing them.