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:
parent
33354c718f
commit
38c6293f4f
21
data/default-apps/app-grid.txt
Normal file
21
data/default-apps/app-grid.txt
Normal 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
|
6
data/default-apps/dash.txt
Normal file
6
data/default-apps/dash.txt
Normal 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
|
17
data/default-apps/utilities-folder.txt
Normal file
17
data/default-apps/utilities-folder.txt
Normal 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
|
@ -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',
|
||||
|
@ -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>
|
||||
|
@ -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@;
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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
40
meson/generate-app-list.py
Executable 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)
|
Loading…
x
Reference in New Issue
Block a user