diff --git a/data/default-apps/app-grid.txt b/data/default-apps/app-grid.txt new file mode 100644 index 000000000..d78ed165e --- /dev/null +++ b/data/default-apps/app-grid.txt @@ -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 diff --git a/data/default-apps/dash.txt b/data/default-apps/dash.txt new file mode 100644 index 000000000..2a8e8bcd0 --- /dev/null +++ b/data/default-apps/dash.txt @@ -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 diff --git a/data/default-apps/utilities-folder.txt b/data/default-apps/utilities-folder.txt new file mode 100644 index 000000000..616997775 --- /dev/null +++ b/data/default-apps/utilities-folder.txt @@ -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 diff --git a/data/meson.build b/data/meson.build index c8f82bd75..338ea7053 100644 --- a/data/meson.build +++ b/data/meson.build @@ -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', diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in index 3cd37692a..b1c2534f9 100644 --- a/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in @@ -61,7 +61,9 @@ - [ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop'] + + @DASH_APPS@ + List of desktop file IDs for favorite applications The applications corresponding to these identifiers @@ -118,29 +120,7 @@ }>, - '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@ ]]> Layout of the app picker diff --git a/js/misc/config.js.in b/js/misc/config.js.in index a5069e438..6485d614f 100644 --- a/js/misc/config.js.in +++ b/js/misc/config.js.in @@ -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@; diff --git a/js/misc/meson.build b/js/misc/meson.build index 5fc8ca433..4b137ef3e 100644 --- a/js/misc/meson.build +++ b/js/misc/meson.build @@ -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) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 6f07b94cd..9801b7134 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -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', diff --git a/meson.build b/meson.build index ff3197410..4d7bc4c9c 100644 --- a/meson.build +++ b/meson.build @@ -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') diff --git a/meson/generate-app-list.py b/meson/generate-app-list.py new file mode 100755 index 000000000..067c36967 --- /dev/null +++ b/meson/generate-app-list.py @@ -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)