data: Generate dash/app-grid defaults from text files

Defining default apps as serialized GVariants isn't very human-friendly,
which likely contributes to the fact that the lists are in parts horribly
outdated (Books! Cheese! Screenshot! gedit!).

Instead, generate the lists at build time from simple text files, which
should be much easier to update.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3632>
This commit is contained in:
Florian Müllner 2025-02-07 15:01:48 +01:00 committed by Marge Bot
parent 33354c718f
commit 38c6293f4f
10 changed files with 106 additions and 43 deletions

View File

@ -0,0 +1,21 @@
org.gnome.Geary.desktop
org.gnome.Contacts.desktop
org.gnome.Weather.desktop
org.gnome.clocks.desktop
org.gnome.Maps.desktop
org.gnome.Books.desktop
org.gnome.Photos.desktop
org.gnome.Totem.desktop
org.gnome.Calculator.desktop
org.gnome.gedit.desktop
simple-scan.desktop
org.gnome.Settings.desktop
org.gnome.SystemMonitor.desktop
org.gnome.Boxes.desktop
org.gnome.Terminal.desktop
Utilities # folder
org.gnome.Characters.desktop
yelp.desktop
org.gnome.Screenshot.desktop
org.gnome.Cheese.desktop
org.gnome.font-viewer.desktop

View File

@ -0,0 +1,6 @@
org.gnome.Epiphany.desktop
org.gnome.Calendar.desktop
org.gnome.Music.desktop
gnome.Nautilus.desktop
org.gnome.Software.desktop
org.gnome.TextEditor.desktop

View File

@ -0,0 +1,17 @@
# Sorted by name as shown in menus, not filename
nm-connection-editor.desktop # Advanced Network Configuration
org.gnome.DejaDup.desktop # Backups
org.gnome.Characters.desktop # Characters
org.gnome.Connections.desktop # Connections
org.gnome.DiskUtility.desktop # Disks
org.gnome.baobab.desktop # Disk Usage Analyzer
org.gnome.Evince.desktop # Document Viewer
org.gnome.FileRoller.desktop # File Roller
org.gnome.font-viewer.desktop # Fonts
org.gnome.Loupe.desktop # Image Viewer
org.gnome.Logs.desktop # Logs
org.freedesktop.MalcontentControl.desktop # Parental Controls
org.gnome.seahorse.Application.desktop # Passwords and Keys
org.freedesktop.GnomeAbrt.desktop # Problem Reporting
org.gnome.tweaks.desktop # Tweaks
org.gnome.Usage.desktop # Usage

View File

@ -100,6 +100,14 @@ install_data(keybinding_files, install_dir: keysdir)
schemaconf = configuration_data()
schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
schemaconf.set('DASH_APPS', run_command(
generate_app_list, 'default-apps/dash.txt',
check: true,
).stdout())
schemaconf.set('APP_GRID_APPS', run_command(
generate_app_list, '--pages', 'default-apps/app-grid.txt',
check: true,
).stdout())
schema = configure_file(
input: 'org.gnome.shell.gschema.xml.in',
output: 'org.gnome.shell.gschema.xml',

View File

@ -61,7 +61,9 @@
</description>
</key>
<key name="favorite-apps" type="as">
<default>[ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop']</default>
<default>
@DASH_APPS@
</default>
<summary>List of desktop file IDs for favorite applications</summary>
<description>
The applications corresponding to these identifiers
@ -118,29 +120,7 @@
</key>
<key name="app-picker-layout" type="aa{sv}">
<default><![CDATA[
[{
'org.gnome.Geary.desktop': <{'position': <0>}>,
'org.gnome.Contacts.desktop': <{'position': <1>}>,
'org.gnome.Weather.desktop': <{'position': <2>}>,
'org.gnome.clocks.desktop': <{'position': <3>}>,
'org.gnome.Maps.desktop': <{'position': <4>}>,
'org.gnome.Books.desktop': <{'position': <5>}>,
'org.gnome.Photos.desktop': <{'position': <6>}>,
'org.gnome.Totem.desktop': <{'position': <7>}>,
'org.gnome.Calculator.desktop': <{'position': <8>}>,
'org.gnome.gedit.desktop': <{'position': <9>}>,
'simple-scan.desktop': <{'position': <10>}>,
'org.gnome.Settings.desktop': <{'position': <11>}>,
'org.gnome.SystemMonitor.desktop': <{'position': <12>}>,
'org.gnome.Boxes.desktop': <{'position': <13>}>,
'org.gnome.Terminal.desktop': <{'position': <14>}>,
'Utilities': <{'position': <15>}>,
'org.gnome.Characters.desktop': <{'position': <16>}>,
'yelp.desktop': <{'position': <17>}>,
'org.gnome.Screenshot.desktop': <{'position': <18>}>,
'org.gnome.Cheese.desktop': <{'position': <19>}>,
'org.gnome.font-viewer.desktop': <{'position': <20>}>
}]
@APP_GRID_APPS@
]]></default>
<summary>Layout of the app picker</summary>
<description>

View File

@ -20,3 +20,5 @@ export const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@';
export const HAVE_BLUETOOTH = pkg.checkSymbol('GnomeBluetooth', '3.0',
'Client.default_adapter_state');
export const UTILITIES_FOLDER_APPS = @UTILS_FOLDER_APPS@;

View File

@ -5,6 +5,10 @@ jsconf.set('GETTEXT_PACKAGE', meson.project_name())
jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper)
jsconf.set('UTILS_FOLDER_APPS', run_command(
generate_app_list, '../../data/default-apps/utilities-folder.txt',
check: true,
).stdout())
jsconf.set('datadir', datadir)
jsconf.set('libexecdir', libexecdir)

View File

@ -24,6 +24,8 @@ import * as SystemActions from '../misc/systemActions.js';
import * as Main from './main.js';
import {UTILITIES_FOLDER_APPS} from '../misc/config.js';
const MENU_POPUP_TIMEOUT = 600;
const POPDOWN_DIALOG_TIMEOUT = 500;
@ -59,25 +61,7 @@ const DIALOG_SHADE_HIGHLIGHT = new Cogl.Color({red: 0, green: 0, blue: 0, alpha:
const DEFAULT_FOLDERS = {
'Utilities': {
name: 'X-GNOME-Shell-Utilities.directory',
apps: [
// Sorted by name as shown in menus, not filename
'nm-connection-editor.desktop', // Advanced Network Configuration
'org.gnome.DejaDup.desktop', // Backups
'org.gnome.Characters.desktop', // Characters
'org.gnome.Connections.desktop', // Connections
'org.gnome.DiskUtility.desktop', // Disks
'org.gnome.baobab.desktop', // Disk Usage Analyzer
'org.gnome.Evince.desktop', // Document Viewer
'org.gnome.FileRoller.desktop', // File Roller
'org.gnome.font-viewer.desktop', // Fonts
'org.gnome.Loupe.desktop', // Image Viewer
'org.gnome.Logs.desktop', // Logs
'org.freedesktop.MalcontentControl.desktop', // Parental Controls
'org.gnome.seahorse.Application.desktop', // Passwords and Keys
'org.freedesktop.GnomeAbrt.desktop', // Problem Reporting
'org.gnome.tweaks.desktop', // Tweaks
'org.gnome.Usage.desktop', // Usage
],
apps: UTILITIES_FOLDER_APPS,
},
'YaST': {
name: 'suse-yast.directory',

View File

@ -142,6 +142,7 @@ endif
mutter_typelibdir = mutter_dep.get_variable('typelibdir')
python = find_program('python3')
gjs = find_program('gjs')
generate_app_list = find_program('meson/generate-app-list.py')
cc = meson.get_compiler('c')

40
meson/generate-app-list.py Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env python3
import argparse
def read_app_ids(path) -> str:
ids = []
with open(path, "r") as file:
for line in file:
# strip comments
line, _, _ = line.partition('#');
line = line.strip()
if len(line) > 0:
ids.append(line)
return ids
def print_as_array(ids):
mapped_ids = list(map(lambda i: f" '{i}'", ids))
print('[')
print(',\n'.join(mapped_ids))
print(']')
def print_as_pages(ids):
mapped_ids = []
for i, id in enumerate(ids):
mapped_ids.append(f" '{id}': <{{'position': <{i}>}}>")
print('[{')
print(',\n'.join(mapped_ids))
print('}]')
parser = argparse.ArgumentParser()
parser.add_argument('--pages', action='store_true')
parser.add_argument('file')
args = parser.parse_args()
ids = read_app_ids(args.file)
if args.pages:
print_as_pages(ids)
else:
print_as_array(ids)