├── .editorconfig ├── .gitattributes ├── .gitignore ├── .gitlab-ci.yml ├── .gitlab-ci ├── build-toolbox-image.sh ├── check-potfiles.sh ├── checkout-mutter.sh ├── commit-rules.yml ├── download-coverity-tarball.sh ├── eslint-coding-style.sh ├── install-gnomeos-sysext-dependencies.sh └── install-meson-project.sh ├── .gitlab └── issue_templates │ ├── Bug.md │ └── Feature.md ├── .jscheckignore ├── COPYING ├── NEWS ├── README.md ├── build-aux ├── check-version.py ├── generate-app-list.py └── generate-stylesheets.py ├── config.h.meson ├── data ├── 00_org.gnome.shell.gschema.override ├── 50-gnome-shell-launchers.xml ├── 50-gnome-shell-screenshots.xml ├── 50-gnome-shell-system.xml ├── README.osk-layouts ├── X-GNOME-Shell-System.directory.desktop.in ├── X-GNOME-Shell-Utilities.directory.desktop.in ├── cldr2json │ ├── README.md │ ├── cldr2json.py │ └── test │ │ ├── __init__.py │ │ ├── data │ │ ├── fr-t-k0-android.xml │ │ └── fr.json │ │ └── test_cldr2json.py ├── dbus-interfaces │ ├── meson.build │ ├── net.hadess.SwitcherooControl.xml │ ├── net.reactivated.Fprint.Device.xml │ ├── net.reactivated.Fprint.Manager.xml │ ├── org.Gtk.MountOperationHandler.xml │ ├── org.freedesktop.Application.xml │ ├── org.freedesktop.DBus.xml │ ├── org.freedesktop.GeoClue2.Agent.xml │ ├── org.freedesktop.GeoClue2.Manager.xml │ ├── org.freedesktop.ModemManager.Modem.Cdma.xml │ ├── org.freedesktop.ModemManager.Modem.Gsm.Network.xml │ ├── org.freedesktop.ModemManager1.Modem.Modem3gpp.xml │ ├── org.freedesktop.ModemManager1.Modem.ModemCdma.xml │ ├── org.freedesktop.ModemManager1.Modem.xml │ ├── org.freedesktop.Notifications.xml │ ├── org.freedesktop.PackageKit.Offline.xml │ ├── org.freedesktop.UPower.Device.xml │ ├── org.freedesktop.UPower.PowerProfiles.xml │ ├── org.freedesktop.UPower.xml │ ├── org.freedesktop.background.Monitor.xml │ ├── org.freedesktop.bolt1.Device.xml │ ├── org.freedesktop.bolt1.Manager.xml │ ├── org.freedesktop.impl.portal.Access.xml │ ├── org.freedesktop.impl.portal.PermissionStore.xml │ ├── org.freedesktop.impl.portal.Request.xml │ ├── org.freedesktop.login1.Manager.xml │ ├── org.freedesktop.login1.Session.xml │ ├── org.freedesktop.login1.User.xml │ ├── org.freedesktop.realmd.Provider.xml │ ├── org.freedesktop.realmd.Realm.xml │ ├── org.freedesktop.realmd.Service.xml │ ├── org.gnome.Mutter.ScreenCast.xml │ ├── org.gnome.ScreenSaver.xml │ ├── org.gnome.SessionManager.EndSessionDialog.xml │ ├── org.gnome.SessionManager.Inhibitor.xml │ ├── org.gnome.SessionManager.Presence.xml │ ├── org.gnome.SessionManager.xml │ ├── org.gnome.SettingsDaemon.Color.xml │ ├── org.gnome.SettingsDaemon.Power.Keyboard.xml │ ├── org.gnome.SettingsDaemon.Rfkill.xml │ ├── org.gnome.Shell.AudioDeviceSelection.xml │ ├── org.gnome.Shell.Brightness.xml │ ├── org.gnome.Shell.CalendarServer.xml │ ├── org.gnome.Shell.ClocksIntegration.xml │ ├── org.gnome.Shell.Extensions.xml │ ├── org.gnome.Shell.HotplugSniffer.xml │ ├── org.gnome.Shell.Introspect.xml │ ├── org.gnome.Shell.PadOsd.xml │ ├── org.gnome.Shell.PerfHelper.xml │ ├── org.gnome.Shell.PortalHelper.xml │ ├── org.gnome.Shell.ScreenTime.xml │ ├── org.gnome.Shell.Screencast.xml │ ├── org.gnome.Shell.Screenshot.xml │ ├── org.gnome.Shell.Wacom.PadOsd.xml │ ├── org.gnome.Shell.WeatherIntegration.xml │ ├── org.gnome.Shell.xml │ ├── org.gnome.ShellSearchProvider.xml │ ├── org.gnome.ShellSearchProvider2.xml │ ├── org.gtk.Notifications.xml │ ├── org.mpris.MediaPlayer2.Player.xml │ └── org.mpris.MediaPlayer2.xml ├── default-apps │ ├── app-grid.txt │ ├── dash.txt │ ├── system-folder.txt │ └── utilities-folder.txt ├── emoji.json ├── gnome-shell-dbus-interfaces.gresource.xml ├── gnome-shell-icons.gresource.xml ├── gnome-shell-osk-layouts.gresource.xml ├── gnome-shell-theme.gresource.xml ├── icons │ ├── hicolor │ │ ├── scalable │ │ │ └── apps │ │ │ │ ├── org.gnome.Shell.CaptivePortal.svg │ │ │ │ └── org.gnome.Shell.Extensions.svg │ │ └── symbolic │ │ │ └── apps │ │ │ ├── org.gnome.Shell.CaptivePortal-symbolic.svg │ │ │ └── org.gnome.Shell.Extensions-symbolic.svg │ ├── meson.build │ └── scalable │ │ ├── actions │ │ ├── accessibility-bounce-keys-symbolic.svg │ │ ├── accessibility-high-contrast-symbolic.svg │ │ ├── accessibility-keyboard-keys-symbolic.svg │ │ ├── accessibility-large-text-symbolic.svg │ │ ├── accessibility-menu-symbolic.svg │ │ ├── accessibility-mouse-keys-symbolic.svg │ │ ├── accessibility-screen-reader-symbolic.svg │ │ ├── accessibility-slow-keys-symbolic.svg │ │ ├── accessibility-sticky-keys-symbolic.svg │ │ ├── accessibility-visual-alerts-symbolic.svg │ │ ├── accessibility-zoom-symbolic.svg │ │ ├── carousel-arrow-next-symbolic.svg │ │ ├── carousel-arrow-previous-symbolic.svg │ │ ├── cog-wheel-symbolic.svg │ │ ├── color-pick.svg │ │ ├── dark-mode-symbolic.svg │ │ ├── group-collapse-symbolic.svg │ │ ├── notification-expand-symbolic.svg │ │ ├── ornament-check-symbolic.svg │ │ ├── ornament-dot-checked-symbolic.svg │ │ ├── ornament-dot-unchecked-symbolic.svg │ │ ├── pointer-double-click-symbolic.svg │ │ ├── pointer-drag-symbolic.svg │ │ ├── pointer-primary-click-symbolic.svg │ │ ├── pointer-secondary-click-symbolic.svg │ │ ├── preview-close-symbolic.svg │ │ ├── record-screen-symbolic.svg │ │ ├── screencast-recorded-symbolic.svg │ │ ├── screencast-stop-symbolic.svg │ │ ├── screenshooter-symbolic.svg │ │ ├── screenshot-recorded-symbolic.svg │ │ ├── screenshot-ui-area-symbolic.svg │ │ ├── screenshot-ui-display-symbolic.svg │ │ ├── screenshot-ui-show-pointer-symbolic.svg │ │ ├── screenshot-ui-window-symbolic.svg │ │ ├── shell-display-built-in-only-symbolic.svg │ │ ├── shell-display-extend-all-symbolic.svg │ │ ├── shell-display-external-only-symbolic.svg │ │ ├── shell-display-mirror-symbolic.svg │ │ ├── shell-focus-app-grid-symbolic.svg │ │ ├── shell-focus-dash-symbolic-rtl.svg │ │ ├── shell-focus-dash-symbolic.svg │ │ ├── shell-focus-desktop-symbolic-rtl.svg │ │ ├── shell-focus-desktop-symbolic.svg │ │ ├── shell-focus-search-symbolic.svg │ │ ├── shell-focus-top-bar-symbolic-rtl.svg │ │ ├── shell-focus-top-bar-symbolic.svg │ │ └── shell-focus-windows-symbolic.svg │ │ └── status │ │ ├── background-app-ghost-symbolic.svg │ │ ├── check-symbolic.svg │ │ ├── keyboard-brightness-high-symbolic.svg │ │ ├── keyboard-brightness-medium-symbolic.svg │ │ ├── keyboard-brightness-off-symbolic.svg │ │ ├── message-indicator-symbolic.svg │ │ ├── no-notifications-symbolic.svg │ │ ├── osk-caps-lock-symbolic.svg │ │ ├── osk-delete-symbolic.svg │ │ ├── osk-emoji-picker-symbolic.svg │ │ ├── osk-enter-symbolic.svg │ │ ├── osk-hide-symbolic.svg │ │ ├── osk-layout-symbolic.svg │ │ ├── osk-shift-symbolic.svg │ │ ├── osk-zwnj-symbolic.svg │ │ ├── screen-privacy-disabled-symbolic.svg │ │ ├── screen-privacy-symbolic.svg │ │ ├── switch-off-symbolic.svg │ │ ├── switch-on-symbolic.svg │ │ └── wellbeing-symbolic.svg ├── meson.build ├── org.gnome.Shell-disable-extensions.service ├── org.gnome.Shell-symbolic.Source.svg ├── org.gnome.Shell.Extensions.desktop.in ├── org.gnome.Shell.PortalHelper.desktop.in ├── org.gnome.Shell.PortalHelper.service.in ├── org.gnome.Shell.target.in ├── org.gnome.Shell@wayland.service.in ├── org.gnome.Shell@x11.service.in ├── org.gnome.shell.gschema.xml.in ├── osk-layouts │ ├── am.json │ ├── ara.json │ ├── at-extended.json │ ├── at.json │ ├── be.json │ ├── bg.json │ ├── by.json │ ├── ca.json │ ├── ch+fr.json │ ├── ch.json │ ├── cz.json │ ├── de-extended.json │ ├── de.json │ ├── digits.json │ ├── dk.json │ ├── ee.json │ ├── email.json │ ├── epo.json │ ├── es+cat.json │ ├── es.json │ ├── fi.json │ ├── fr.json │ ├── ge.json │ ├── gr.json │ ├── hr.json │ ├── hu.json │ ├── id.json │ ├── il.json │ ├── in+bolnagri.json │ ├── in+mal.json │ ├── ir.json │ ├── is.json │ ├── it.json │ ├── ke.json │ ├── kg.json │ ├── kh.json │ ├── kr.json │ ├── la.json │ ├── latam.json │ ├── lt.json │ ├── lv.json │ ├── mk.json │ ├── mn.json │ ├── my.json │ ├── nl.json │ ├── no.json │ ├── number.json │ ├── ph.json │ ├── phone.json │ ├── pl.json │ ├── pt.json │ ├── ro.json │ ├── rs.json │ ├── ru.json │ ├── se.json │ ├── si.json │ ├── sk.json │ ├── th.json │ ├── tr.json │ ├── ua.json │ ├── uk.json │ ├── url.json │ ├── us-extended.json │ ├── us.json │ ├── vn.json │ ├── za-extended.json │ └── za.json ├── perf-background.xml.in ├── theme │ ├── README.md │ ├── calendar-today-light.svg │ ├── calendar-today.svg │ ├── dash-placeholder.svg │ ├── gnome-shell-dark.scss │ ├── gnome-shell-high-contrast.scss │ ├── gnome-shell-light.scss │ ├── gnome-shell-sass │ │ ├── COPYING │ │ ├── NEWS │ │ ├── README.md │ │ ├── _colors.scss │ │ ├── _common.scss │ │ ├── _default-colors.scss │ │ ├── _drawing.scss │ │ ├── _high-contrast-colors.scss │ │ ├── _palette.scss │ │ ├── _widgets.scss │ │ ├── gnome-shell-sass.doap │ │ └── widgets │ │ │ ├── _a11y.scss │ │ │ ├── _app-grid.scss │ │ │ ├── _base.scss │ │ │ ├── _buttons.scss │ │ │ ├── _calendar.scss │ │ │ ├── _check-box.scss │ │ │ ├── _corner-ripple.scss │ │ │ ├── _dash.scss │ │ │ ├── _dialogs.scss │ │ │ ├── _entries.scss │ │ │ ├── _ibus-popup.scss │ │ │ ├── _keyboard.scss │ │ │ ├── _login-lock.scss │ │ │ ├── _looking-glass.scss │ │ │ ├── _message-list.scss │ │ │ ├── _misc.scss │ │ │ ├── _notifications.scss │ │ │ ├── _osd.scss │ │ │ ├── _overview.scss │ │ │ ├── _panel.scss │ │ │ ├── _popovers.scss │ │ │ ├── _quick-settings.scss │ │ │ ├── _screenshot.scss │ │ │ ├── _scrollbars.scss │ │ │ ├── _search-entry.scss │ │ │ ├── _search-results.scss │ │ │ ├── _slider.scss │ │ │ ├── _switcher-popup.scss │ │ │ ├── _switches.scss │ │ │ ├── _window-picker.scss │ │ │ ├── _workspace-switcher.scss │ │ │ └── _workspace-thumbnails.scss │ ├── gnome-shell-start.svg │ ├── meson.build │ ├── pad-osd.css │ ├── running-indicator.svg │ └── workspace-placeholder.svg └── update-osk-layouts.sh ├── docs ├── building-and-running.md ├── c-coding-style.md ├── commit-messages.md ├── debugging.md ├── js-coding-style.md ├── looking-glass.md ├── newcomers-contribution-guide.md └── reference │ ├── meson.build │ ├── shell │ ├── meson.build │ ├── shell.toml.in │ └── urlmap.js │ └── st │ ├── meson.build │ ├── st.toml.in │ └── urlmap.js ├── eslint.config.js ├── gnome-shell.doap ├── js ├── dbusServices │ ├── dbus-service.in │ ├── dbus-service.service.in │ ├── dbusService.js │ ├── extensions │ │ ├── extensionPrefsDialog.js │ │ ├── extensionsService.js │ │ ├── main.js │ │ └── ui │ │ │ └── extension-error-page.ui │ ├── meson.build │ ├── notifications │ │ ├── main.js │ │ └── notificationDaemon.js │ ├── org.gnome.ScreenSaver.src.gresource.xml │ ├── org.gnome.Shell.Extensions.src.gresource.xml │ ├── org.gnome.Shell.Notifications.src.gresource.xml │ ├── org.gnome.Shell.Screencast.src.gresource.xml │ ├── screencast │ │ ├── main.js │ │ └── screencastService.js │ └── screensaver │ │ ├── main.js │ │ └── screenSaverService.js ├── extensions │ ├── extension.js │ ├── prefs.js │ └── sharedInternals.js ├── gdm │ ├── authList.js │ ├── authPrompt.js │ ├── batch.js │ ├── credentialManager.js │ ├── loginDialog.js │ ├── oVirt.js │ ├── realmd.js │ ├── util.js │ └── vmware.js ├── js-resources.gresource.xml ├── meson.build ├── misc │ ├── animationUtils.js │ ├── breakManager.js │ ├── brightnessManager.js │ ├── config.js.in │ ├── dateUtils.js │ ├── dbusErrors.js │ ├── dbusUtils.js │ ├── dependencies.js │ ├── errorUtils.js │ ├── extensionUtils.js │ ├── fileUtils.js │ ├── gnomeSession.js │ ├── history.js │ ├── ibusManager.js │ ├── inputMethod.js │ ├── introspect.js │ ├── jsParse.js │ ├── keyboardManager.js │ ├── loginManager.js │ ├── meson.build │ ├── modemManager.js │ ├── objectManager.js │ ├── params.js │ ├── parentalControlsManager.js │ ├── permissionStore.js │ ├── signalTracker.js │ ├── signals.js │ ├── smartcardManager.js │ ├── systemActions.js │ ├── timeLimitsManager.js │ ├── util.js │ └── weather.js ├── portal-resources.gresource.xml ├── portalHelper │ └── main.js └── ui │ ├── accessDialog.js │ ├── altTab.js │ ├── animation.js │ ├── appDisplay.js │ ├── appFavorites.js │ ├── appMenu.js │ ├── audioDeviceSelection.js │ ├── background.js │ ├── backgroundMenu.js │ ├── barLevel.js │ ├── boxpointer.js │ ├── calendar.js │ ├── checkBox.js │ ├── closeDialog.js │ ├── components.js │ ├── components │ ├── automountManager.js │ ├── autorunManager.js │ ├── keyring.js │ ├── networkAgent.js │ └── polkitAgent.js │ ├── ctrlAltTab.js │ ├── dash.js │ ├── dateMenu.js │ ├── dialog.js │ ├── dnd.js │ ├── endSessionDialog.js │ ├── environment.js │ ├── extensionDownloader.js │ ├── extensionSystem.js │ ├── focusCaretTracker.js │ ├── grabHelper.js │ ├── ibusCandidatePopup.js │ ├── iconGrid.js │ ├── inhibitShortcutsDialog.js │ ├── init.js │ ├── kbdA11yDialog.js │ ├── keyboard.js │ ├── layout.js │ ├── lightbox.js │ ├── listModes.js │ ├── locatePointer.js │ ├── lookingGlass.js │ ├── magnifier.js │ ├── main.js │ ├── messageList.js │ ├── messageTray.js │ ├── modalDialog.js │ ├── mpris.js │ ├── notificationDaemon.js │ ├── osdMonitorLabeler.js │ ├── osdWindow.js │ ├── overview.js │ ├── overviewControls.js │ ├── padOsd.js │ ├── pageIndicators.js │ ├── panel.js │ ├── panelMenu.js │ ├── pointerA11yTimeout.js │ ├── pointerWatcher.js │ ├── popupMenu.js │ ├── quickSettings.js │ ├── remoteSearch.js │ ├── ripples.js │ ├── runDialog.js │ ├── screenShield.js │ ├── screenshot.js │ ├── scripting.js │ ├── search.js │ ├── searchController.js │ ├── sessionMode.js │ ├── shellDBus.js │ ├── shellEntry.js │ ├── shellMountOperation.js │ ├── slider.js │ ├── status │ ├── accessibility.js │ ├── autoRotate.js │ ├── backgroundApps.js │ ├── backlight.js │ ├── bluetooth.js │ ├── brightness.js │ ├── camera.js │ ├── darkMode.js │ ├── doNotDisturb.js │ ├── dwellClick.js │ ├── keyboard.js │ ├── location.js │ ├── network.js │ ├── nightLight.js │ ├── powerProfiles.js │ ├── remoteAccess.js │ ├── rfkill.js │ ├── system.js │ ├── thunderbolt.js │ └── volume.js │ ├── swipeTracker.js │ ├── switchMonitor.js │ ├── switcherPopup.js │ ├── unlockDialog.js │ ├── userWidget.js │ ├── welcomeDialog.js │ ├── windowAttentionHandler.js │ ├── windowManager.js │ ├── windowMenu.js │ ├── windowPreview.js │ ├── workspace.js │ ├── workspaceAnimation.js │ ├── workspaceSwitcherPopup.js │ ├── workspaceThumbnail.js │ ├── workspacesView.js │ └── xdndHandler.js ├── man ├── gnome-shell.rst └── meson.build ├── meson.build ├── meson.options ├── po ├── LINGUAS ├── POTFILES.in ├── POTFILES.skip ├── ab.po ├── af.po ├── an.po ├── ar.po ├── as.po ├── ast.po ├── be.po ├── be@latin.po ├── bg.po ├── bn.po ├── bn_IN.po ├── bs.po ├── ca.po ├── ca@valencia.po ├── ckb.po ├── cs.po ├── da.po ├── de.po ├── el.po ├── en_GB.po ├── eo.po ├── es.po ├── et.po ├── eu.po ├── fa.po ├── fi.po ├── fo.po ├── fr.po ├── fur.po ├── fy.po ├── ga.po ├── gd.po ├── gl.po ├── gu.po ├── he.po ├── hi.po ├── hr.po ├── hu.po ├── ia.po ├── id.po ├── ie.po ├── is.po ├── it.po ├── ja.po ├── ka.po ├── kab.po ├── kk.po ├── km.po ├── kn.po ├── ko.po ├── ku.po ├── ky.po ├── lt.po ├── lv.po ├── meson.build ├── mjw.po ├── mk.po ├── ml.po ├── mr.po ├── ms.po ├── nb.po ├── ne.po ├── nl.po ├── nn.po ├── oc.po ├── or.po ├── os.po ├── pa.po ├── pl.po ├── pt.po ├── pt_BR.po ├── ro.po ├── ru.po ├── si.po ├── sk.po ├── sl.po ├── sr.po ├── sr@latin.po ├── sv.po ├── ta.po ├── te.po ├── tg.po ├── th.po ├── tr.po ├── ug.po ├── uk.po ├── uz.po ├── uz@cyrillic.po ├── vi.po ├── zh_CN.po ├── zh_HK.po └── zh_TW.po ├── src ├── calendar-server │ ├── README │ ├── calendar-debug.h │ ├── calendar-sources.c │ ├── calendar-sources.h │ ├── gnome-shell-calendar-server.c │ ├── meson.build │ └── org.gnome.Shell.CalendarServer.service.in ├── data-to-c.py ├── gnome-shell-extension-tool.in ├── gnome-shell-plugin.c ├── gnome-shell-portal-helper.c ├── gnome-shell-test-tool.in ├── gtkactionmuxer.c ├── gtkactionmuxer.h ├── gtkactionobservable.c ├── gtkactionobservable.h ├── gtkactionobserver.c ├── gtkactionobserver.h ├── hotplug-sniffer │ ├── hotplug-mimetypes.h │ ├── hotplug-sniffer.c │ ├── meson.build │ ├── org.gnome.Shell.HotplugSniffer.service.in │ ├── shell-mime-sniffer.c │ └── shell-mime-sniffer.h ├── main.c ├── meson.build ├── org.gtk.Application.xml ├── run-js-test.c ├── shell-action-modes.h ├── shell-app-cache-private.h ├── shell-app-cache.c ├── shell-app-private.h ├── shell-app-system-private.h ├── shell-app-system.c ├── shell-app-system.h ├── shell-app-usage.c ├── shell-app-usage.h ├── shell-app.c ├── shell-app.h ├── shell-blur-effect.c ├── shell-blur-effect.h ├── shell-camera-monitor.c ├── shell-camera-monitor.h ├── shell-edge-drag-gesture.c ├── shell-edge-drag-gesture.h ├── shell-global-private.h ├── shell-global.c ├── shell-global.h ├── shell-glsl-effect.c ├── shell-glsl-effect.h ├── shell-invert-lightness-effect.c ├── shell-invert-lightness-effect.h ├── shell-keyring-prompt.c ├── shell-keyring-prompt.h ├── shell-mount-operation.c ├── shell-mount-operation.h ├── shell-network-agent.c ├── shell-network-agent.h ├── shell-perf-helper.c ├── shell-perf-log.c ├── shell-perf-log.h ├── shell-polkit-authentication-agent.c ├── shell-polkit-authentication-agent.h ├── shell-screenshot.c ├── shell-screenshot.h ├── shell-secure-text-buffer.c ├── shell-secure-text-buffer.h ├── shell-square-bin.c ├── shell-square-bin.h ├── shell-stack.c ├── shell-stack.h ├── shell-time-change-source.c ├── shell-time-change-source.h ├── shell-tray-icon-private.h ├── shell-tray-icon.c ├── shell-tray-icon.h ├── shell-tray-manager.c ├── shell-tray-manager.h ├── shell-util.c ├── shell-util.h ├── shell-window-preview-layout.c ├── shell-window-preview-layout.h ├── shell-window-preview.c ├── shell-window-preview.h ├── shell-window-tracker-private.h ├── shell-window-tracker.c ├── shell-window-tracker.h ├── shell-wm-private.h ├── shell-wm.c ├── shell-wm.h ├── shell-workspace-background.c ├── shell-workspace-background.h ├── st │ ├── croco │ │ ├── cr-additional-sel.c │ │ ├── cr-additional-sel.h │ │ ├── cr-attr-sel.c │ │ ├── cr-attr-sel.h │ │ ├── cr-cascade.c │ │ ├── cr-cascade.h │ │ ├── cr-declaration.c │ │ ├── cr-declaration.h │ │ ├── cr-doc-handler.c │ │ ├── cr-doc-handler.h │ │ ├── cr-enc-handler.c │ │ ├── cr-enc-handler.h │ │ ├── cr-fonts.c │ │ ├── cr-fonts.h │ │ ├── cr-input.c │ │ ├── cr-input.h │ │ ├── cr-num.c │ │ ├── cr-num.h │ │ ├── cr-om-parser.c │ │ ├── cr-om-parser.h │ │ ├── cr-parser.c │ │ ├── cr-parser.h │ │ ├── cr-parsing-location.c │ │ ├── cr-parsing-location.h │ │ ├── cr-prop-list.c │ │ ├── cr-prop-list.h │ │ ├── cr-pseudo.c │ │ ├── cr-pseudo.h │ │ ├── cr-rgb.c │ │ ├── cr-rgb.h │ │ ├── cr-selector.c │ │ ├── cr-selector.h │ │ ├── cr-simple-sel.c │ │ ├── cr-simple-sel.h │ │ ├── cr-statement.c │ │ ├── cr-statement.h │ │ ├── cr-string.c │ │ ├── cr-string.h │ │ ├── cr-stylesheet.c │ │ ├── cr-stylesheet.h │ │ ├── cr-term.c │ │ ├── cr-term.h │ │ ├── cr-tknzr.c │ │ ├── cr-tknzr.h │ │ ├── cr-token.c │ │ ├── cr-token.h │ │ ├── cr-utils.c │ │ ├── cr-utils.h │ │ ├── libcroco-config.h │ │ └── libcroco.h │ ├── meson.build │ ├── st-adjustment.c │ ├── st-adjustment.h │ ├── st-bin.c │ ├── st-bin.h │ ├── st-border-image.c │ ├── st-border-image.h │ ├── st-box-layout.c │ ├── st-box-layout.h │ ├── st-button.c │ ├── st-button.h │ ├── st-clipboard.c │ ├── st-clipboard.h │ ├── st-dnd-start-gesture.c │ ├── st-dnd-start-gesture.h │ ├── st-drawing-area.c │ ├── st-drawing-area.h │ ├── st-entry.c │ ├── st-entry.h │ ├── st-focus-manager.c │ ├── st-focus-manager.h │ ├── st-generic-accessible.c │ ├── st-generic-accessible.h │ ├── st-icon-cache.c │ ├── st-icon-cache.h │ ├── st-icon-colors.c │ ├── st-icon-colors.h │ ├── st-icon-theme.c │ ├── st-icon-theme.h │ ├── st-icon.c │ ├── st-icon.h │ ├── st-image-content-private.h │ ├── st-image-content.c │ ├── st-image-content.h │ ├── st-label.c │ ├── st-label.h │ ├── st-password-entry.c │ ├── st-password-entry.h │ ├── st-private.c │ ├── st-private.h │ ├── st-scroll-bar.c │ ├── st-scroll-bar.h │ ├── st-scroll-view-fade.c │ ├── st-scroll-view-fade.glsl │ ├── st-scroll-view-fade.h │ ├── st-scroll-view-private.h │ ├── st-scroll-view.c │ ├── st-scroll-view.h │ ├── st-scrollable.c │ ├── st-scrollable.h │ ├── st-settings.c │ ├── st-settings.h │ ├── st-shadow.c │ ├── st-shadow.h │ ├── st-spinner-content.c │ ├── st-spinner-content.h │ ├── st-texture-cache.c │ ├── st-texture-cache.h │ ├── st-theme-context.c │ ├── st-theme-context.h │ ├── st-theme-node-drawing.c │ ├── st-theme-node-private.h │ ├── st-theme-node-transition.c │ ├── st-theme-node-transition.h │ ├── st-theme-node.c │ ├── st-theme-node.h │ ├── st-theme-private.h │ ├── st-theme.c │ ├── st-theme.h │ ├── st-types.h │ ├── st-viewport.c │ ├── st-viewport.h │ ├── st-widget-accessible.h │ ├── st-widget.c │ ├── st-widget.h │ ├── st.h.in │ ├── test-theme.c │ └── test-theme.css └── tray │ ├── meson.build │ ├── na-tray-child.c │ ├── na-tray-child.h │ ├── na-tray-manager.c │ ├── na-tray-manager.h │ ├── na-xembed.c │ └── na-xembed.h ├── subprojects ├── extensions-app │ ├── COPYING │ ├── README.md │ ├── build-aux │ │ ├── flatpak │ │ │ └── org.gnome.Extensions.json │ │ └── meson │ │ │ └── check-version.py │ ├── data │ │ ├── css │ │ │ └── style.css │ │ ├── dbus-interfaces │ │ │ └── org.gnome.Shell.Extensions.xml │ │ ├── icons │ │ │ ├── hicolor │ │ │ │ ├── scalable │ │ │ │ │ └── apps │ │ │ │ │ │ ├── org.gnome.Extensions.Devel.svg │ │ │ │ │ │ └── org.gnome.Extensions.svg │ │ │ │ └── symbolic │ │ │ │ │ └── apps │ │ │ │ │ └── org.gnome.Extensions-symbolic.svg │ │ │ ├── meson.build │ │ │ └── scalable │ │ │ │ └── actions │ │ │ │ ├── info-outline-symbolic.svg │ │ │ │ ├── remove-symbolic.svg │ │ │ │ ├── settings-symbolic.svg │ │ │ │ └── website-symbolic.svg │ │ ├── meson.build │ │ ├── metainfo │ │ │ ├── extensions-main.png │ │ │ ├── extensions-search.png │ │ │ ├── extensions-update.png │ │ │ ├── meson.build │ │ │ └── org.gnome.Extensions.metainfo.xml.in │ │ ├── org.gnome.Extensions.data.gresource.xml.in │ │ ├── org.gnome.Extensions.desktop.in.in │ │ ├── org.gnome.Extensions.gschema.xml │ │ ├── org.gnome.Extensions.service.in │ │ └── ui │ │ │ ├── extension-row.ui │ │ │ ├── extensions-window.ui │ │ │ └── shortcuts-dialog.ui │ ├── generate-translations.sh │ ├── js │ │ ├── extensionManager.js │ │ ├── extensionRow.js │ │ ├── extensionsWindow.js │ │ ├── gnome-extensions-app.in │ │ ├── main.js │ │ ├── meson.build │ │ ├── misc │ │ │ ├── config.js.in │ │ │ └── meson.build │ │ ├── org.gnome.Extensions.in │ │ └── org.gnome.Extensions.src.gresource.xml.in │ ├── logo.png │ ├── meson.build │ ├── meson_options.txt │ ├── po │ │ ├── .gitignore │ │ ├── LINGUAS │ │ └── meson.build │ └── subprojects │ │ └── libshew.wrap ├── extensions-tool │ ├── COPYING │ ├── README.md │ ├── completion │ │ └── bash │ │ │ └── gnome-extensions │ ├── generate-translations.sh │ ├── man │ │ ├── gnome-extensions.rst │ │ └── meson.build │ ├── meson.build │ ├── meson_options.txt │ ├── po │ │ ├── .gitignore │ │ ├── LINGUAS │ │ └── meson.build │ └── src │ │ ├── command-create.c │ │ ├── command-disable.c │ │ ├── command-enable.c │ │ ├── command-info.c │ │ ├── command-install.c │ │ ├── command-list.c │ │ ├── command-pack.c │ │ ├── command-prefs.c │ │ ├── command-reset.c │ │ ├── command-uninstall.c │ │ ├── command-upload.c │ │ ├── commands.h │ │ ├── common.h │ │ ├── gnome-extensions-tool.gresource.xml │ │ ├── main.c │ │ ├── meson.build │ │ └── templates │ │ ├── 00-plain.desktop.in │ │ ├── indicator.desktop.in │ │ ├── indicator │ │ ├── extension.js │ │ └── stylesheet.css │ │ ├── meson.build │ │ ├── plain │ │ ├── extension.js │ │ └── stylesheet.css │ │ ├── prefs.js │ │ ├── quick-settings.desktop.in │ │ └── quick-settings │ │ ├── extension.js │ │ └── stylesheet.css ├── gi-docgen.wrap ├── gvc.wrap ├── jasmine-gjs.wrap └── libshew.wrap ├── tests ├── data │ └── background.png ├── dbusmock-templates │ └── accounts_service.py ├── gnome-shell-dbus-runner.py.in ├── gnomeshell_dbusrunner.py ├── meson.build ├── shell │ ├── basic.js │ ├── closeWithActiveWindows.js │ ├── core.js │ ├── fittsy.js │ ├── headlessStart.js │ └── hwtest.js └── unit │ ├── breakManager.js │ ├── errorUtils.js │ ├── extensionUtils.js │ ├── fileUtils.js │ ├── fixtures │ ├── datadirs │ │ ├── home │ │ │ └── gnome-shell │ │ │ │ └── collect-datadirs │ │ │ │ └── file │ │ └── system │ │ │ └── gnome-shell │ │ │ └── collect-datadirs │ │ │ └── file │ └── extensions │ │ ├── empty │ │ └── .gitignore │ │ ├── invalid-shell-version1 │ │ └── metadata.json │ │ ├── invalid-shell-version2 │ │ └── metadata.json │ │ ├── invalid-uuid │ │ └── metadata.json │ │ ├── invalid │ │ └── metadata.json │ │ ├── missing-description │ │ └── metadata.json │ │ ├── missing-name │ │ └── metadata.json │ │ ├── missing-shell-version │ │ └── metadata.json │ │ ├── missing-uuid │ │ └── metadata.json │ │ ├── valid │ │ └── metadata.json │ │ └── wrong-uuid │ │ └── metadata.json │ ├── highlighter.js │ ├── injectionManager.js │ ├── insertSorted.js │ ├── jsParse.js │ ├── markup.js │ ├── params.js │ ├── signalTracker.js │ ├── timeLimitsManager.js │ ├── url.js │ └── versionCompare.js └── tools ├── eslint.config.js ├── package-lock.json ├── package.json ├── run-eslint.sh ├── shell-lg.sh └── toolbox ├── README.md ├── create-toolbox.sh ├── meson-build.sh ├── meson-test.sh ├── run-gnome-shell.sh └── toolbox-sysext-install.sh /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | 7 | indent_style = space 8 | trim_trailing_whitespace = true 9 | 10 | [*.js] 11 | indent_size = 4 12 | 13 | [*.[ch]] 14 | indent_size = 2 15 | 16 | [*.gresource.xml] 17 | indent_size = 2 18 | 19 | [*.ui] 20 | indent_size = 2 21 | 22 | [meson.build] 23 | indent_size = 2 24 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: No rights reserved 2 | # SPDX-License-Identifier: CC0-1.0 3 | 4 | package-lock.json -diff 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | data/.osk-layout-workbench 2 | po/gnome-shell.pot 3 | subprojects/gvc 4 | subprojects/jasmine-gjs 5 | subprojects/libshew 6 | *~ 7 | *.patch 8 | *.sw? 9 | .buildconfig 10 | .eslintcache 11 | .vscode 12 | node_modules 13 | -------------------------------------------------------------------------------- /.gitlab-ci/check-potfiles.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | srcdirs="src subprojects/extensions-tool" 4 | uidirs="js subprojects/extensions-app" 5 | desktopdirs="data subprojects/extensions-app/ subprojects/extensions-tool" 6 | 7 | # find source files that contain gettext keywords 8 | files=$(grep -lR --include='*.c' '\(gettext\|[^I_)]_\)(' $srcdirs) 9 | 10 | # find ui files that contain translatable string 11 | files="$files "$(grep -lRi --include='*.ui' 'translatable="[ty1]' $uidirs) 12 | 13 | # find .desktop files 14 | files="$files "$(find $desktopdirs -name '*.desktop*') 15 | 16 | # filter out excluded files 17 | if [ -f po/POTFILES.skip ]; then 18 | files=$(for f in $files; do ! grep -q ^$f po/POTFILES.skip && echo $f; done) 19 | fi 20 | 21 | # find those that aren't listed in POTFILES.in 22 | missing=$(for f in $files; do ! grep -q ^$f po/POTFILES.in && echo $f; done) 23 | 24 | if [ ${#missing} -eq 0 ]; then 25 | exit 0 26 | fi 27 | 28 | cat >&2 <&2 35 | done 36 | echo >&2 37 | 38 | exit 1 39 | -------------------------------------------------------------------------------- /.gitlab-ci/commit-rules.yml: -------------------------------------------------------------------------------- 1 | patterns: 2 | deny: 3 | - regex: '^(st-|St)' 4 | message: Commit message subject should not be prefixed with 'st-' or 'St', use 'st/' instead 5 | where: subject 6 | - regex: '^[^:]+: [a-z]' 7 | message: "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'" 8 | where: subject 9 | - regex: '^\S*\.(js|c|h):' 10 | message: Commit message subject prefix should not include .c, .h etc. 11 | where: subject 12 | - regex: '([^.]\.|[:,;])\s*$' 13 | message: Commit message subject should not end with punctuation 14 | where: subject 15 | - regex: '^[Cc]lose[sd]?:?\s*#[0-9]+' 16 | message: Closes instructions must be a full link 17 | - regex: '^[Ff]ix(e[sd]?)?:?\s*(#[0-9]+|https://)' 18 | message: \"Fixes\" should be used with commits, use \"Closes\" for issues 19 | -------------------------------------------------------------------------------- /.gitlab-ci/download-coverity-tarball.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | # We need a coverity token to fetch the tarball 4 | if [ -x $COVERITY_TOKEN ] 5 | then 6 | echo "No coverity token. Run this job from a protected branch." 7 | exit -1 8 | fi 9 | 10 | mkdir -p coverity 11 | 12 | # Download and check MD5 first 13 | curl https://scan.coverity.com/download/linux64 \ 14 | --data "token=$COVERITY_TOKEN&project=GNOME+Shell&md5=1" \ 15 | --output /tmp/coverity_tool.md5 16 | 17 | diff /tmp/coverity_tool.md5 coverity/coverity_tool.md5 >/dev/null 2>&1 18 | 19 | if [ $? -eq 0 -a -d coverity/cov-analysis* ] 20 | then 21 | echo "Coverity tarball is up-to-date" 22 | exit 0 23 | fi 24 | 25 | # Download and extract coverity tarball 26 | curl https://scan.coverity.com/download/linux64 \ 27 | --data "token=$COVERITY_TOKEN&project=GNOME+Shell" \ 28 | --output /tmp/coverity_tool.tgz 29 | 30 | rm -rf ./coverity/cov-analysis* 31 | 32 | tar zxf /tmp/coverity_tool.tgz -C coverity/ 33 | if [ $? -eq 0 ] 34 | then 35 | mv /tmp/coverity_tool.md5 coverity/ 36 | fi 37 | 38 | rm /tmp/coverity_tool.tgz 39 | -------------------------------------------------------------------------------- /.gitlab-ci/install-gnomeos-sysext-dependencies.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script ensures that all dependencies required to build and run 4 | # a GNOME Shell system extension are present in: 5 | # 6 | # The building environment, by installing these dependencies to the container. 7 | # The running environment, by bundling these dependencies with the extension. 8 | # 9 | 10 | set -e 11 | 12 | # Install dependencies to $SYSEXT_DEST_DIR to bundle these with the extension. 13 | 14 | SYSEXT_DEST_DIR="$(realpath $1)" 15 | 16 | # Ensure that we're building against (and bundling) the right mutter branch 17 | # and its dependencies: 18 | 19 | SCRIPT_DIR="$(dirname $0)" 20 | 21 | $SCRIPT_DIR/checkout-mutter.sh 22 | ./mutter/.gitlab-ci/install-gnomeos-sysext-dependencies.sh $SYSEXT_DEST_DIR 23 | 24 | meson setup mutter/build mutter --prefix=/usr --libdir="lib/$(gcc -print-multiarch)" 25 | meson compile -C mutter/build 26 | meson install -C mutter/build --destdir $SYSEXT_DEST_DIR 27 | 28 | sudo meson install -C mutter/build 29 | 30 | # Ensure that any other dependency missing in GNOME OS is installed and bundled 31 | # here as it was done with mutter: 32 | -------------------------------------------------------------------------------- /.gitlab/issue_templates/Feature.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | ### Feature summary 7 | 8 | 12 | 13 | ### How would you like it to work 14 | 15 | 19 | 20 | ### Relevant links, screenshots, screencasts etc. 21 | 22 | 27 | 28 | 29 | 30 | /label ~"1. Feature" 31 | -------------------------------------------------------------------------------- /.jscheckignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/.jscheckignore -------------------------------------------------------------------------------- /build-aux/check-version.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os, sys 4 | from pathlib import Path 5 | from xml.etree.ElementTree import ElementTree 6 | import argparse 7 | 8 | def check_version(version, file, type='news'): 9 | if type == 'news': 10 | line = file.open().readline() 11 | ok = line.startswith(version) 12 | print("{}: {}".format(file, "OK" if ok else "FAILED")) 13 | if not ok: 14 | raise Exception("{} does not start with {}".format(file, version)) 15 | elif type == 'metainfo': 16 | query = './releases/release[@version="{}"]'.format(version) 17 | ok = ElementTree(file=file).find(query) is not None 18 | print("{}: {}".format(file, "OK" if ok else "FAILED")) 19 | if not ok: 20 | raise Exception("{} does not contain release {}".format(file, version)) 21 | else: 22 | raise Exception('Not implemented') 23 | 24 | parser = argparse.ArgumentParser(description='Check release version information.') 25 | parser.add_argument('--type', choices=['metainfo','news'], default='news') 26 | parser.add_argument('version', help='the version to check for') 27 | parser.add_argument('files', nargs='+', help='files to check') 28 | args = parser.parse_args() 29 | 30 | distroot = os.environ.get('MESON_DIST_ROOT', './') 31 | 32 | try: 33 | for file in args.files: 34 | check_version(args.version, Path(distroot, file), args.type) 35 | except: 36 | sys.exit(1) 37 | -------------------------------------------------------------------------------- /build-aux/generate-app-list.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | 5 | def read_app_ids(path) -> str: 6 | ids = [] 7 | with open(path, "r") as file: 8 | for line in file: 9 | # strip comments 10 | line, _, _ = line.partition('#'); 11 | line = line.strip() 12 | if len(line) > 0: 13 | ids.append(line) 14 | return ids 15 | 16 | def print_as_array(ids): 17 | mapped_ids = list(map(lambda i: f" '{i}'", ids)) 18 | print('[') 19 | print(',\n'.join(mapped_ids)) 20 | print(']') 21 | 22 | def print_as_pages(ids): 23 | mapped_ids = [] 24 | for i, id in enumerate(ids): 25 | mapped_ids.append(f" '{id}': <{{'position': <{i}>}}>") 26 | 27 | print('[{') 28 | print(',\n'.join(mapped_ids)) 29 | print('}]') 30 | 31 | parser = argparse.ArgumentParser() 32 | parser.add_argument('--pages', action='store_true') 33 | parser.add_argument('file') 34 | args = parser.parse_args() 35 | 36 | ids = read_app_ids(args.file) 37 | if args.pages: 38 | print_as_pages(ids) 39 | else: 40 | print_as_array(ids) 41 | -------------------------------------------------------------------------------- /build-aux/generate-stylesheets.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | from pathlib import PurePath 5 | import subprocess 6 | 7 | stylesheets = [ 8 | 'data/theme/gnome-shell-high-contrast.css', 9 | 'data/theme/gnome-shell-dark.css', 10 | 'data/theme/gnome-shell-light.css' 11 | ] 12 | 13 | sourceroot = os.environ.get('MESON_SOURCE_ROOT') 14 | distroot = os.environ.get('MESON_DIST_ROOT') 15 | 16 | for stylesheet in stylesheets: 17 | stylesheet_path = PurePath(stylesheet) 18 | src = PurePath(sourceroot, stylesheet_path.with_suffix('.scss')) 19 | dst = PurePath(distroot, stylesheet_path) 20 | subprocess.run(['sassc', '-a', src, dst], check=True) 21 | -------------------------------------------------------------------------------- /config.h.meson: -------------------------------------------------------------------------------- 1 | /* The prefix for our gettext translation domains. */ 2 | #mesondefine GETTEXT_PACKAGE 3 | 4 | /* Version number of package */ 5 | #mesondefine VERSION 6 | 7 | /* Version number of package */ 8 | #mesondefine PACKAGE_VERSION 9 | 10 | /* Define to 1 if you have the `fdwalk' function. */ 11 | #mesondefine HAVE_FDWALK 12 | 13 | /* Define to 1 if you have the `mallinfo' function. */ 14 | #mesondefine HAVE_MALLINFO 15 | 16 | /* Define to 1 if you have the `mallinfo2' function. */ 17 | #mesondefine HAVE_MALLINFO2 18 | 19 | /* Define to 1 fi you have the header file. */ 20 | #mesondefine HAVE_SYS_RESOURCE_H 21 | 22 | /* Define if we have NetworkManager */ 23 | #mesondefine HAVE_NETWORKMANAGER 24 | 25 | /* Define if we have Pipewire */ 26 | #mesondefine HAVE_PIPEWIRE 27 | 28 | /* Define if we have systemd */ 29 | #mesondefine HAVE_SYSTEMD 30 | 31 | /* Define if _NL_TIME_FIRST_WEEKDATE is available */ 32 | #mesondefine HAVE__NL_TIME_FIRST_WEEKDAY 33 | 34 | /* Define if fdwalk is available in libc */ 35 | #mesondefine HAVE_FDWALK 36 | 37 | /* Define if polkit defines autocleanup functions */ 38 | #mesondefine HAVE_POLKIT_AUTOCLEANUP 39 | 40 | /* Define to 1 if the and header file exist. */ 41 | #mesondefine HAVE_EXE_INTROSPECTION 42 | 43 | /* Whether GNOME Shell is built with X11 support */ 44 | #mesondefine HAVE_X11 45 | 46 | /* Whether GNOME Shell is built with X11 clients support */ 47 | #mesondefine HAVE_X11_CLIENT 48 | -------------------------------------------------------------------------------- /data/00_org.gnome.shell.gschema.override: -------------------------------------------------------------------------------- 1 | [org.gnome.mutter:GNOME] 2 | attach-modal-dialogs=true 3 | edge-tiling=true 4 | dynamic-workspaces=true 5 | workspaces-only-on-primary=true 6 | focus-change-on-pointer-rest=true 7 | -------------------------------------------------------------------------------- /data/50-gnome-shell-screenshots.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 10 | 11 | 13 | 14 | 16 | 17 | 19 | 20 | -------------------------------------------------------------------------------- /data/50-gnome-shell-system.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 10 | 11 | 13 | 14 | 16 | 17 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /data/X-GNOME-Shell-System.directory.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=System 3 | Type=Directory 4 | -------------------------------------------------------------------------------- /data/X-GNOME-Shell-Utilities.directory.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Utilities 3 | Type=Directory 4 | -------------------------------------------------------------------------------- /data/cldr2json/README.md: -------------------------------------------------------------------------------- 1 | cldr2json 2 | ========= 3 | 4 | This script converts Unicode CLDR android keyboard layouts to JSON usable by 5 | GNOME Shell. 6 | 7 | CLDR keyboard layouts can be found at 8 | 9 | 10 | 11 | Usage 12 | ===== 13 | 14 | ./cldr2json 15 | 16 | example: 17 | 18 | ./cldr2json cldr/keyboards/android/ json_layouts/ 19 | 20 | 21 | Keyboard layout mapping 22 | ======================= 23 | 24 | Unicode CLDR layout identifiers are language codes, while XKB layout 25 | identifiers are... something else. The mapping between the two currently uses 26 | heuristic based on the layout descriptions, in this order: 27 | 28 | - if the CLDR layout description matches an XKB layout description, chose its 29 | XKB identifier 30 | - if one word of the CLDR layout description matches an XKB layout 31 | description, chose its XKB identifier 32 | - if the CLDR layout description matches one word of an XKB layout description, 33 | chose its XKB identifier 34 | 35 | That doesn't always work. For instance it fails for "en" language, that should 36 | match "us" XKB identifier. For such cases, there is a mapping in 37 | LOCALE_TO_XKB_OVERRIDES at the top of the script. If you discover a weird 38 | mapping of if you get a "failed to find XKB mapping for " warning then 39 | please consider adding an override there. 40 | 41 | -------------------------------------------------------------------------------- /data/cldr2json/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/data/cldr2json/test/__init__.py -------------------------------------------------------------------------------- /data/dbus-interfaces/meson.build: -------------------------------------------------------------------------------- 1 | dbus_interfaces = [ 2 | 'org.gnome.Shell.Brightness.xml', 3 | 'org.gnome.Shell.Extensions.xml', 4 | 'org.gnome.Shell.Introspect.xml', 5 | 'org.gnome.Shell.PadOsd.xml', 6 | 'org.gnome.Shell.Screencast.xml', 7 | 'org.gnome.Shell.Screenshot.xml', 8 | 'org.gnome.Shell.ScreenTime.xml', 9 | 'org.gnome.ShellSearchProvider.xml', 10 | 'org.gnome.ShellSearchProvider2.xml' 11 | ] 12 | install_data(dbus_interfaces, install_dir: ifacedir) 13 | -------------------------------------------------------------------------------- /data/dbus-interfaces/net.reactivated.Fprint.Manager.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.Application.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.DBus.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.GeoClue2.Agent.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.GeoClue2.Manager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Cdma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.ModemManager.Modem.Gsm.Network.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.ModemCdma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.ModemManager1.Modem.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.Notifications.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.PackageKit.Offline.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.UPower.Device.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.UPower.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.bolt1.Device.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.bolt1.Manager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.impl.portal.Access.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.impl.portal.Request.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.login1.Manager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.login1.Session.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.login1.User.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.realmd.Provider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.realmd.Realm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.freedesktop.realmd.Service.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.ScreenSaver.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SessionManager.EndSessionDialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SessionManager.Inhibitor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SessionManager.Presence.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SessionManager.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SettingsDaemon.Color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SettingsDaemon.Power.Keyboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.SettingsDaemon.Rfkill.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.AudioDeviceSelection.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.Brightness.xml: -------------------------------------------------------------------------------- 1 | 4 | 7 | 8 | 9 | 15 | 16 | 17 | 23 | 24 | 25 | 26 | 27 | 34 | 35 | 36 | 37 | 38 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.CalendarServer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.ClocksIntegration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.HotplugSniffer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.PadOsd.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 12 | 13 | 14 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.PerfHelper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.PortalHelper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.ScreenTime.xml: -------------------------------------------------------------------------------- 1 | 4 | 8 | 9 | 10 | 16 | 17 | 18 | 27 | 28 | 29 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.Wacom.PadOsd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gnome.Shell.WeatherIntegration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.gtk.Notifications.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.mpris.MediaPlayer2.Player.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/dbus-interfaces/org.mpris.MediaPlayer2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/default-apps/app-grid.txt: -------------------------------------------------------------------------------- 1 | org.gnome.Geary.desktop 2 | org.gnome.Contacts.desktop 3 | org.gnome.Weather.desktop 4 | org.gnome.clocks.desktop 5 | org.gnome.Maps.desktop 6 | org.gnome.Music.desktop 7 | org.gnome.SimpleScan.desktop 8 | org.gnome.Settings.desktop 9 | org.gnome.Boxes.desktop 10 | org.gnome.Showtime.desktop 11 | org.gnome.Snapshot.desktop 12 | org.gnome.Characters.desktop 13 | Utilities # folder 14 | System # folder 15 | org.gnome.Console.desktop 16 | org.gnome.Tour.desktop 17 | org.gnome.Yelp.desktop 18 | -------------------------------------------------------------------------------- /data/default-apps/dash.txt: -------------------------------------------------------------------------------- 1 | org.gnome.Epiphany.desktop 2 | org.gnome.Calendar.desktop 3 | org.gnome.Nautilus.desktop 4 | org.gnome.Software.desktop 5 | org.gnome.TextEditor.desktop 6 | org.gnome.Calculator.desktop 7 | -------------------------------------------------------------------------------- /data/default-apps/system-folder.txt: -------------------------------------------------------------------------------- 1 | # Sorted by name as shown in menus, not filename 2 | nm-connection-editor.desktop # Advanced Network Configuration 3 | org.gnome.DejaDup.desktop # Backups 4 | org.gnome.baobab.desktop # Disk Usage Analyzer 5 | org.gnome.DiskUtility.desktop # Disks 6 | org.gnome.Logs.desktop # Logs 7 | org.freedesktop.MalcontentControl.desktop # Parental Controls 8 | org.freedesktop.GnomeAbrt.desktop # Problem Reporting 9 | org.gnome.Sysprof.desktop # Sysprof 10 | org.gnome.SystemMonitor.desktop # System Monitor 11 | org.gnome.tweaks.desktop # Tweaks 12 | -------------------------------------------------------------------------------- /data/default-apps/utilities-folder.txt: -------------------------------------------------------------------------------- 1 | # Sorted by name as shown in menus, not filename 2 | org.gnome.Decibels.desktop # Audio Player 3 | org.gnome.Connections.desktop # Connections 4 | org.gnome.Papers.desktop # Document Viewer 5 | org.gnome.FileRoller.desktop # File Roller 6 | org.gnome.font-viewer.desktop # Fonts 7 | org.gnome.Loupe.desktop # Image Viewer 8 | org.gnome.Seahorse.desktop # Passwords and Keys 9 | -------------------------------------------------------------------------------- /data/gnome-shell-theme.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | calendar-today.svg 5 | calendar-today-light.svg 6 | gnome-shell-dark.css 7 | gnome-shell-light.css 8 | gnome-shell-high-contrast.css 9 | gnome-shell-start.svg 10 | pad-osd.css 11 | workspace-placeholder.svg 12 | 13 | 14 | -------------------------------------------------------------------------------- /data/icons/hicolor/symbolic/apps/org.gnome.Shell.CaptivePortal-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/icons/meson.build: -------------------------------------------------------------------------------- 1 | excluded_icons=[] 2 | if not have_portal_helper 3 | excluded_icons += [ 4 | 'scalable/apps/org.gnome.Shell.CaptivePortal.svg', 5 | 'symbolic/apps/org.gnome.Shell.CaptivePortal-symbolic.svg', 6 | ] 7 | endif 8 | install_subdir('hicolor', 9 | install_dir: icondir, exclude_files: excluded_icons) 10 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/accessibility-high-contrast-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/accessibility-large-text-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/accessibility-menu-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/accessibility-screen-reader-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/accessibility-zoom-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/carousel-arrow-next-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/dark-mode-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/notification-expand-symbolic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/ornament-check-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/ornament-dot-checked-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/ornament-dot-unchecked-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/pointer-double-click-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/pointer-primary-click-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/pointer-secondary-click-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/preview-close-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/screencast-recorded-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/screencast-stop-symbolic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/screenshot-recorded-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/screenshot-ui-display-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/screenshot-ui-window-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-display-mirror-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-app-grid-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-dash-symbolic-rtl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-dash-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-desktop-symbolic-rtl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-desktop-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-search-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-top-bar-symbolic-rtl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-top-bar-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/icons/scalable/actions/shell-focus-windows-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/background-app-ghost-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/check-symbolic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/icons/scalable/status/keyboard-brightness-high-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/icons/scalable/status/keyboard-brightness-medium-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /data/icons/scalable/status/keyboard-brightness-off-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/icons/scalable/status/message-indicator-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/no-notifications-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/osk-caps-lock-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/osk-delete-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/osk-emoji-picker-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/osk-enter-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/osk-shift-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/osk-zwnj-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/screen-privacy-disabled-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/icons/scalable/status/screen-privacy-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /data/org.gnome.Shell-disable-extensions.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Disable GNOME Shell extensions after failure 3 | # Note that this unit must not conflict with anything, and must 4 | # be able to run in parallel with the gnome-session-shutdown.target. 5 | DefaultDependencies=no 6 | 7 | # We want to disable extensions only if gnome-shell has flagged the extensions 8 | # to be a likely cause of trouble. 9 | ConditionPathExists=%t/gnome-shell-disable-extensions 10 | 11 | [Service] 12 | Type=simple 13 | # Disable extensions 14 | ExecStart=gsettings set org.gnome.shell disable-user-extensions true 15 | Restart=no 16 | -------------------------------------------------------------------------------- /data/org.gnome.Shell.Extensions.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | # Keep in sync with subprojects/extensions-app 4 | Name=Extensions 5 | # Translators: Do NOT translate or transliterate this text (this is an icon file name)! 6 | Icon=org.gnome.Shell.Extensions 7 | # Never launch this, just provide name+icon to portal dialog 8 | Exec=false 9 | OnlyShowIn=GNOME; 10 | NoDisplay=true 11 | -------------------------------------------------------------------------------- /data/org.gnome.Shell.PortalHelper.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Network Login 3 | Type=Application 4 | Exec=gapplication launch org.gnome.Shell.PortalHelper 5 | DBusActivatable=true 6 | NoDisplay=true 7 | # Translators: Do NOT translate or transliterate this text (this is an icon file name)! 8 | Icon=org.gnome.Shell.CaptivePortal 9 | StartupNotify=true 10 | OnlyShowIn=GNOME; 11 | -------------------------------------------------------------------------------- /data/org.gnome.Shell.PortalHelper.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=org.gnome.Shell.PortalHelper 3 | Exec=@libexecdir@/gnome-shell-portal-helper 4 | -------------------------------------------------------------------------------- /data/org.gnome.Shell.target.in: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=GNOME Shell 3 | DefaultDependencies=no 4 | 5 | Requisite=gnome-session-initialized.target 6 | PartOf=gnome-session-initialized.target 7 | Before=gnome-session-initialized.target 8 | 9 | Wants=@SUPPORTED_SESSIONS@ -------------------------------------------------------------------------------- /data/org.gnome.Shell@wayland.service.in: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=GNOME Shell on Wayland 3 | # On wayland, force a session shutdown 4 | OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target 5 | OnFailureJobMode=replace-irreversibly 6 | CollectMode=inactive-or-failed 7 | RefuseManualStart=on 8 | RefuseManualStop=on 9 | 10 | After=gnome-session-manager.target 11 | 12 | Requisite=gnome-session-initialized.target 13 | PartOf=gnome-session-initialized.target 14 | Before=gnome-session-initialized.target 15 | 16 | ConditionEnvironment=XDG_SESSION_TYPE=%I 17 | 18 | [Service] 19 | Slice=session.slice 20 | Type=notify 21 | ExecStart=@bindir@/gnome-shell 22 | # Exit code 1 means we are probably *not* dealing with an extension failure 23 | SuccessExitStatus=1 24 | 25 | # unset some environment variables that were set by the shell and won't work now that the shell is gone 26 | ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY' 27 | 28 | # On wayland we cannot restart 29 | Restart=no 30 | # Kill any stubborn child processes after this long 31 | TimeoutStopSec=5 32 | 33 | # Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early 34 | OOMScoreAdjust=-1000 35 | -------------------------------------------------------------------------------- /data/org.gnome.Shell@x11.service.in: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=GNOME Shell on X11 3 | # On X11, try to show the GNOME Session Failed screen 4 | OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-failed.target 5 | OnFailureJobMode=replace 6 | CollectMode=inactive-or-failed 7 | RefuseManualStart=on 8 | RefuseManualStop=on 9 | 10 | After=gnome-session-manager.target 11 | 12 | Requisite=gnome-session-initialized.target 13 | PartOf=gnome-session-initialized.target 14 | Before=gnome-session-initialized.target 15 | 16 | ConditionEnvironment=XDG_SESSION_TYPE=%I 17 | 18 | # Limit startup frequency more than the default 19 | StartLimitIntervalSec=15s 20 | StartLimitBurst=3 21 | 22 | [Service] 23 | Slice=session.slice 24 | Type=notify 25 | ExecStart=@bindir@/gnome-shell 26 | # Exit code 1 means we are probably *not* dealing with an extension failure 27 | SuccessExitStatus=1 28 | 29 | # On X11 we do not need to unset any variables 30 | 31 | # On X11 we want to restart on-success (Alt+F2 + r) and on-failure. 32 | Restart=always 33 | # Do not wait before restarting the shell 34 | RestartSec=0ms 35 | # Kill any stubborn child processes after this long 36 | TimeoutStopSec=5 37 | 38 | # Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early 39 | OOMScoreAdjust=-1000 40 | -------------------------------------------------------------------------------- /data/perf-background.xml.in: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 1990 11 | 1 12 | 1 13 | 0 14 | 00 15 | 00 16 | 17 | 18 | 19 | 20 | 1261440000.0 21 | @datadir@/backgrounds/gnome/adwaita-morning.jpg 22 | @datadir@/backgrounds/gnome/adwaita-day.jpg 23 | 24 | 25 | 26 | 27 | 60 28 | /usr/share/backgrounds/gnome/Sandstone.jpg 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /data/theme/calendar-today-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/theme/calendar-today.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-dark.scss: -------------------------------------------------------------------------------- 1 | $variant: 'dark'; 2 | $contrast: 'normal'; 3 | 4 | @import "gnome-shell-sass/_colors"; //use gtk colors 5 | @import "gnome-shell-sass/_drawing"; 6 | @import "gnome-shell-sass/_common"; 7 | @import "gnome-shell-sass/_widgets"; 8 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-high-contrast.scss: -------------------------------------------------------------------------------- 1 | $variant: 'dark'; 2 | $contrast: "high"; 3 | 4 | @import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors 5 | @import "gnome-shell-sass/_drawing"; 6 | @import "gnome-shell-sass/_common"; 7 | @import "gnome-shell-sass/_widgets"; 8 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-light.scss: -------------------------------------------------------------------------------- 1 | $variant: 'light'; 2 | $contrast: 'normal'; 3 | 4 | @import "gnome-shell-sass/_colors"; //use gtk colors 5 | @import "gnome-shell-sass/_drawing"; 6 | @import "gnome-shell-sass/_common"; 7 | @import "gnome-shell-sass/_widgets"; 8 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/NEWS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/data/theme/gnome-shell-sass/NEWS -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/README.md: -------------------------------------------------------------------------------- 1 | # GNOME Shell Sass 2 | GNOME Shell Sass is a project intended to allow the sharing of the 3 | theme sources in sass between gnome-shell and other projects like 4 | gnome-shell-extensions. 5 | 6 | Any changes should be done in the [GNOME Shell subtree][shell-subtree] 7 | and not the stand-alone [gnome-shell-sass repository][sass-repo]. They 8 | will then be synchronized periodically before releases. 9 | 10 | ## License 11 | GNOME Shell Sass is distributed under the terms of the GNU General Public 12 | License, version 2 or later. See the [COPYING][license] file for details. 13 | 14 | [shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/HEAD/data/theme/gnome-shell-sass 15 | [sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass 16 | [license]: COPYING 17 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/_palette.scss: -------------------------------------------------------------------------------- 1 | //GNOME Color Palette 2 | $blue_1: #99c1f1; 3 | $blue_2: #62a0ea; 4 | $blue_3: #3584e4; 5 | $blue_4: #1c71d8; 6 | $blue_5: #1a5fb4; 7 | $green_1: #8ff0a4; 8 | $green_2: #57e389; 9 | $green_3: #33d17a; 10 | $green_4: #2ec27e; 11 | $green_5: #26a269; 12 | $yellow_1: #f9f06b; 13 | $yellow_2: #f8e45c; 14 | $yellow_3: #f6d32d; 15 | $yellow_4: #f5c211; 16 | $yellow_5: #e5a50a; 17 | $orange_1: #ffbe6f; 18 | $orange_2: #ffa348; 19 | $orange_3: #ff7800; 20 | $orange_4: #e66100; 21 | $orange_5: #c64600; 22 | $red_1: #f66151; 23 | $red_2: #ed333b; 24 | $red_3: #e01b24; 25 | $red_4: #c01c28; 26 | $red_5: #a51d2d; 27 | $purple_1: #dc8add; 28 | $purple_2: #c061cb; 29 | $purple_3: #9141ac; 30 | $purple_4: #813d9c; 31 | $purple_5: #613583; 32 | $brown_1: #cdab8f; 33 | $brown_2: #b5835a; 34 | $brown_3: #986a44; 35 | $brown_4: #865e3c; 36 | $brown_5: #63452c; 37 | $light_1: #ffffff; 38 | $light_2: #f6f5f4; 39 | $light_3: #deddda; 40 | $light_4: #c0bfbc; 41 | $light_5: #9a9996; 42 | $dark_1: #77767b; 43 | $dark_2: #5e5c64; 44 | $dark_3: #3d3846; 45 | $dark_4: #241f31; 46 | $dark_5: #000000; -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_a11y.scss: -------------------------------------------------------------------------------- 1 | // Pointer location 2 | .ripple-pointer-location { 3 | width: $ripple_size; 4 | height: $ripple_size; 5 | border-radius: $ripple_size * 0.5; // radius equals the size of the box to give us the curve 6 | background-color: st-lighten(st-transparentize(-st-accent-color, 0.7), 30%); 7 | box-shadow: 0 0 2px 2px st-lighten(-st-accent-color, 20%); 8 | } 9 | 10 | // Pointer accessibility notifications 11 | .pie-timer { 12 | width: 60px; 13 | height: 60px; 14 | -pie-border-width: 3px; 15 | -pie-border-color: -st-accent-color; 16 | -pie-background-color: st-lighten(st-transparentize(-st-accent-color, 0.7), 40%); 17 | } 18 | 19 | // Screen zoom/Magnifier 20 | .magnifier-zoom-region { 21 | border: 2px solid -st-accent-color; 22 | 23 | &.full-screen { border-width: 0; } 24 | } 25 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_base.scss: -------------------------------------------------------------------------------- 1 | // Links 2 | .shell-link { 3 | color: $link_color; 4 | 5 | &:hover { 6 | color: st-lighten($link_color, 10%); 7 | } 8 | } 9 | 10 | // Outline for low res icons 11 | .lowres-icon { 12 | icon-shadow: 0 1px 2px rgba(black, 0.2); 13 | } 14 | 15 | // Dropshadow for large icons 16 | .icon-dropshadow { 17 | icon-shadow: 0 2px 4px rgba(black, 0.4); 18 | 19 | @if $contrast == 'high' { 20 | icon-shadow: none; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_buttons.scss: -------------------------------------------------------------------------------- 1 | /* Buttons */ 2 | 3 | .button { 4 | @extend %button; 5 | // uses scalable value since it's a text element 6 | min-height: to_em(22px); 7 | 8 | // default style 9 | &.default { 10 | @extend %default_button; 11 | } 12 | // flat style 13 | &.flat { 14 | @extend %flat_button; 15 | } 16 | } 17 | 18 | .icon-button { 19 | @extend %button; 20 | 21 | border-radius: $forced_circular_radius; // is circular 22 | padding: $scaled_padding * 2; 23 | min-height: $scalable_icon_size; 24 | 25 | StIcon { 26 | icon-size: $scalable_icon_size; 27 | -st-icon-style: symbolic; 28 | } 29 | 30 | // default style 31 | &.default { 32 | @extend %default_button; 33 | } 34 | 35 | // flat style 36 | &.flat { 37 | @extend %flat_button; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_check-box.scss: -------------------------------------------------------------------------------- 1 | /* Check Boxes */ 2 | 3 | .check-box { 4 | StBoxLayout { spacing: .8em; } 5 | 6 | StBin { 7 | border-radius: 7px; 8 | padding: 2px; 9 | } 10 | 11 | &:focus StBin { 12 | // Trick due to St limitations. It needs a background to draw a box-shadow 13 | background-color: rgba(0, 0, 0, 0.01); 14 | box-shadow: inset 0 0 0 2px st-transparentize(-st-accent-color, .65); 15 | } 16 | 17 | StIcon { 18 | icon-size: 14px; 19 | padding: 1px; 20 | 21 | color: transparent; 22 | border-radius: 6px; 23 | border: 2px solid transparentize(if($variant == 'light', black, white), .85); 24 | } 25 | 26 | &:hover StIcon { 27 | border-color: transparentize(if($variant == 'light', black, white), .8); 28 | } 29 | 30 | &:active StIcon { 31 | border-color: transparentize(if($variant == 'light', black, white), .7); 32 | } 33 | 34 | &:checked StIcon { 35 | background-color: -st-accent-color; 36 | color: -st-accent-fg-color; 37 | border-color: transparent; 38 | } 39 | 40 | &:checked:hover StIcon { 41 | background-color: st-lighten(-st-accent-color, 5%); 42 | color: st-lighten(-st-accent-fg-color, 5%); 43 | } 44 | 45 | &:checked:active StIcon { 46 | background-color: st-darken(-st-accent-color, 7%); 47 | color: st-darken(-st-accent-fg-color, 7%); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_corner-ripple.scss: -------------------------------------------------------------------------------- 1 | /* Activities Ripple */ 2 | 3 | $ripple_size: 50px; 4 | 5 | .ripple-box { 6 | background-color: rgba(255,255,255,0.2); 7 | box-shadow: 0 0 2px 2px rgba(255,255,255,0.2); 8 | // plus + 2px for the border (box-shadow) 9 | width: $ripple_size + 2px; 10 | height: $ripple_size + 2px; 11 | border-radius: 0 0 $ripple_size + 2px 0; // radius equals the size of the box to give us the curve 12 | 13 | // just a simple change to the border radius position 14 | &:rtl { border-radius: 0 0 0 $ripple_size + 2px; } 15 | } 16 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_entries.scss: -------------------------------------------------------------------------------- 1 | /* Entries */ 2 | 3 | StEntry { 4 | @extend %entry; 5 | 6 | StIcon.capslock-warning { 7 | icon-size: $scalable_icon_size; 8 | warning-color: $warning_color; 9 | padding: 0 $base_margin; 10 | } 11 | 12 | StIcon.peek-password { 13 | icon-size: $scalable_icon_size; 14 | padding: 0 $base_margin; 15 | } 16 | 17 | StLabel.hint-text { 18 | margin-left: $base_margin * 0.5; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_ibus-popup.scss: -------------------------------------------------------------------------------- 1 | // IBus Candidate Popup 2 | 3 | .candidate-popup-boxpointer { 4 | @extend .popup-menu-boxpointer; 5 | } 6 | 7 | .candidate-popup-content { 8 | padding: $base_padding; 9 | spacing: $base_padding; 10 | border-radius: $base_padding * 2; 11 | @extend .popup-menu-content; 12 | } 13 | 14 | .candidate-index { 15 | padding: 0; 16 | padding-right: $base_padding; 17 | color: $insensitive_fg_color; 18 | } 19 | 20 | .candidate-box { 21 | padding: $base_padding $base_padding * 2 $base_padding $base_padding * 2; 22 | border-radius: $base_border_radius; 23 | &:selected { background-color: -st-accent-color; color: -st-accent-fg-color; } 24 | &:hover { background-color: $hover_bg_color; color: $hover_fg_color; } 25 | } 26 | 27 | .candidate-page-button-box { 28 | height: 2em; 29 | .vertical & { padding-top: $base_padding * 2; } 30 | .horizontal & { padding-left: $base_padding * 2; } 31 | } 32 | 33 | .candidate-page-button { 34 | padding: $base_padding; 35 | 36 | & StIcon { icon-size: $base_icon_size; } 37 | } 38 | 39 | .candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0;box-shadow: none;} 40 | .candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px;box-shadow: none;} 41 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_misc.scss: -------------------------------------------------------------------------------- 1 | // Rubberband for select-area screenshots 2 | .select-area-rubberband { 3 | background-color: st-transparentize(-st-accent-color,0.7); 4 | border: 1px solid -st-accent-color; 5 | } 6 | 7 | // User icon 8 | .user-icon { 9 | background-size: contain; 10 | border-radius: $forced_circular_radius; 11 | icon-size: $base_icon_size * 4; 12 | 13 | background-color: transparentize($fg_color,0.95); 14 | color: $fg_color; 15 | 16 | & StIcon { 17 | padding: $base_padding * 2; 18 | } 19 | 20 | &.user-avatar { 21 | box-shadow:inset 0 0 0 1px transparentize($fg_color, 0.9); 22 | 23 | @if $contrast == 'high' { 24 | @include draw_hc_inset(); 25 | } 26 | } 27 | } 28 | 29 | .lightbox { background-color: black; } 30 | .flashspot { background-color: white; } 31 | 32 | // Hidden 33 | .hidden { color: transparent;} 34 | 35 | // Caps-lock warning 36 | .caps-lock-warning-label { 37 | text-align: center; 38 | padding-bottom: 8px; 39 | @extend %caption; 40 | color: $warning_color; 41 | } 42 | 43 | /* Workspace animation */ 44 | 45 | .workspace-animation { 46 | background-color: $system_bg_color; 47 | } 48 | 49 | /* Tiled window previews */ 50 | .tile-preview { 51 | background-color: st-transparentize(-st-accent-color,0.5); 52 | border: 1px solid -st-accent-color; 53 | } 54 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_notifications.scss: -------------------------------------------------------------------------------- 1 | /* Notifications & Message Tray */ 2 | 3 | $notification_banner_height: 64px; 4 | $notification_banner_width: 34em; 5 | 6 | // Banner notifications 7 | .notification-banner { 8 | min-height: $notification_banner_height; 9 | width: $notification_banner_width; 10 | box-shadow: 0 2px 4px 2px $shadow_color; 11 | border-radius: $modal_radius; 12 | margin: $base_margin; 13 | 14 | @if $contrast == 'high' { 15 | @include draw_hc_inset(); 16 | } 17 | } 18 | 19 | .notification-buttons-bin { 20 | spacing: 0; 21 | } 22 | 23 | .notification-button { 24 | @extend %notification_button; 25 | } 26 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_overview.scss: -------------------------------------------------------------------------------- 1 | /* OVERVIEW */ 2 | 3 | .secondary-monitor-workspaces { 4 | spacing: $base_padding * 2; 5 | } 6 | 7 | #overviewGroup { 8 | background-color: $system_base_color; 9 | } 10 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_scrollbars.scss: -------------------------------------------------------------------------------- 1 | /* Scrollbars */ 2 | 3 | StScrollView { 4 | &.vfade { -st-vfade-offset: 68px; } 5 | &.hfade { -st-hfade-offset: 68px; } 6 | } 7 | 8 | StScrollBar { 9 | padding: 0; 10 | 11 | StScrollView & { 12 | min-width: 8px; 13 | min-height: 8px; 14 | } 15 | 16 | StBin#trough { 17 | border-radius: 0; 18 | background-color: transparent; 19 | } 20 | 21 | > .vhandle, > .hhandle { 22 | border-radius: 8px; 23 | background-color: mix($fg_color, $bg_color, 30%); 24 | border: 3px solid transparent; //would be nice to margin or at least to transparent 25 | transition: 500ms all ease; 26 | &:hover {background-color: mix($fg_color, $bg_color, 50%);} 27 | &:active {background-color: mix($fg_color, $bg_color, 40%);} 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_search-entry.scss: -------------------------------------------------------------------------------- 1 | // Search entry 2 | .search-entry { 3 | border-radius: $forced_circular_radius; 4 | margin-top: $base_padding * 2; 5 | margin-bottom: $base_padding; 6 | width: 24em; 7 | 8 | @extend %system_entry; 9 | 10 | .search-entry-icon { 11 | icon-size: $scalable_icon_size; 12 | margin-top: 2px; // center vertically 13 | padding: 0 $base_margin; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_slider.scss: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | 3 | $slider_size: $scalable_icon_size; 4 | 5 | .slider { 6 | color: if($variant == 'light', $fg_color, darken($fg_color, 9%)); 7 | 8 | // slider trough 9 | -barlevel-height: 4px; 10 | -barlevel-background-color: transparentize($fg_color, 0.9); 11 | // fill style 12 | -barlevel-active-background-color: -st-accent-color; 13 | // overfill style (red in this case) 14 | -barlevel-overdrive-color: $destructive_color; 15 | -barlevel-overdrive-separator-width:1px; 16 | // slider handler 17 | -slider-handle-radius: $slider_size * 0.5; // half the size of the size 18 | 19 | // hc style 20 | @if $contrast == 'high' { 21 | -barlevel-background-color: transparentize($fg_color, 0.6); 22 | } 23 | 24 | &:hover { 25 | color: if($variant == 'light', lighten($fg_color, 7%), $fg_color); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_workspace-switcher.scss: -------------------------------------------------------------------------------- 1 | /* Workspace Switcher */ 2 | 3 | $ws_indicator_height: 32px; 4 | $ws_dot_active: $ws_indicator_height / 3; 5 | $ws_dot_inactive: $ws_indicator_height / 6; 6 | 7 | .workspace-switcher { 8 | @extend %osd_panel; 9 | margin-bottom: 4em; 10 | spacing: $base_padding * 2; 11 | padding: $base_padding * 2 $base_padding * 3; 12 | } 13 | 14 | .ws-switcher-indicator { 15 | background-color: transparentize($osd_fg_color,0.5); 16 | padding: $ws_dot_inactive / 2; 17 | margin: ($ws_indicator_height - $ws_dot_inactive) / 2; 18 | border-radius: $ws_indicator_height; 19 | 20 | &:active { 21 | background-color: $osd_fg_color; 22 | padding: $ws_dot_active / 2; 23 | margin: ($ws_indicator_height - $ws_dot_active) / 2; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /data/theme/gnome-shell-sass/widgets/_workspace-thumbnails.scss: -------------------------------------------------------------------------------- 1 | /* Workspace pager */ 2 | 3 | // thumbnails in overview 4 | .workspace-thumbnails { 5 | visible-width: 32px; //amount visible before hover 6 | spacing: $base_padding; 7 | padding: $base_padding; 8 | 9 | .workspace-thumbnail { 10 | color: $system_fg_color; 11 | background-color: lighten($system_bg_color, 10%); 12 | border-radius: $base_border_radius * 0.5; 13 | border: 1px solid transparent; 14 | 15 | @if $contrast == 'high' { 16 | border-color: $hc_inset_color; 17 | } 18 | } 19 | 20 | // drag and drop indicator 21 | .placeholder { 22 | background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg"); 23 | background-size: contain; 24 | width: 18px; 25 | } 26 | } 27 | 28 | // selected indicator 29 | .workspace-thumbnail-indicator { 30 | border: 3px solid -st-accent-color; 31 | border-radius: $base_border_radius; 32 | } 33 | -------------------------------------------------------------------------------- /data/theme/pad-osd.css: -------------------------------------------------------------------------------- 1 | .Leader { 2 | stroke-width: .5 !important; 3 | stroke: #535353; 4 | fill: none !important; 5 | } 6 | 7 | .Button { 8 | stroke-width: .25; 9 | stroke: #ededed; 10 | fill: #ededed; 11 | } 12 | 13 | .Ring { 14 | stroke-width: .5 !important; 15 | stroke: #535353 !important; 16 | fill: none !important; 17 | } 18 | 19 | .Label { 20 | stroke: none !important; 21 | stroke-width: .1 !important; 22 | fill: transparent !important; 23 | } 24 | 25 | .TouchStrip, .TouchRing { 26 | stroke-width: .1 !important; 27 | stroke: #ededed !important; 28 | fill: #535353 !important; 29 | } 30 | -------------------------------------------------------------------------------- /data/update-osk-layouts.sh: -------------------------------------------------------------------------------- 1 | #!/bin/env bash 2 | 3 | CLDR_LAYOUTS_TARBALL="http://www.unicode.org/Public/cldr/latest/keyboards.zip" 4 | 5 | WORKDIR=".osk-layout-workbench" 6 | CLDR2JSON="cldr2json/cldr2json.py" 7 | SRCDIR="$WORKDIR/keyboards/android" 8 | DESTDIR="osk-layouts" 9 | GRESOURCE_FILE="gnome-shell-osk-layouts.gresource.xml" 10 | TMP_GRESOURCE_FILE=".$GRESOURCE_FILE.tmp" 11 | 12 | cd `dirname $0` 13 | 14 | # Ensure work/dest dirs 15 | rm -rf $WORKDIR 16 | mkdir -p $WORKDIR 17 | mkdir -p "osk-layouts" 18 | 19 | # Download stuff on the work dir 20 | pushd $WORKDIR 21 | gio copy $CLDR_LAYOUTS_TARBALL . 22 | unzip keyboards.zip 23 | popd 24 | 25 | # Transform to JSON files 26 | $CLDR2JSON $SRCDIR $DESTDIR 27 | 28 | # Generate new gresources xml file 29 | cat >$TMP_GRESOURCE_FILE < 31 | 32 | 33 | EOF 34 | 35 | for f in $DESTDIR/*.json 36 | do 37 | echo " $(basename $f)" >>$TMP_GRESOURCE_FILE 38 | done 39 | 40 | cat >>$TMP_GRESOURCE_FILE <emoji.json 42 | 43 | 44 | EOF 45 | 46 | # Rewrite old gresources xml 47 | mv $TMP_GRESOURCE_FILE $GRESOURCE_FILE 48 | -------------------------------------------------------------------------------- /docs/reference/meson.build: -------------------------------------------------------------------------------- 1 | gidocgen = find_program('gi-docgen', required: get_option('gtk_doc')) 2 | 3 | doc_conf = configuration_data() 4 | doc_conf.set('MUTTER_API_VERSION', mutter_api_version) 5 | 6 | gi_docgen_common_args = [ 7 | '--quiet', 8 | '--no-namespace-dir', 9 | ] 10 | 11 | if get_option('werror') 12 | gi_docgen_common_args += ['--fatal-warnings'] 13 | endif 14 | 15 | docs_dir = datadir / 'doc' 16 | 17 | subdir('shell') 18 | subdir('st') 19 | -------------------------------------------------------------------------------- /docs/reference/shell/meson.build: -------------------------------------------------------------------------------- 1 | shell_toml = configure_file( 2 | input: 'shell.toml.in', 3 | output: 'shell.toml', 4 | configuration: doc_conf 5 | ) 6 | 7 | custom_target('shell-doc', 8 | input: [shell_toml, libshell_gir[0]], 9 | output: 'shell', 10 | command: [ 11 | gidocgen, 12 | 'generate', 13 | gi_docgen_common_args, 14 | '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src'), 15 | '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src/st'), 16 | '--add-include-path=@0@'.format(mutter_dep.get_variable('girdir')), 17 | '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../subprojects/gvc'), 18 | '--config=@INPUT0@', 19 | '--output-dir=@OUTPUT@', 20 | '--content-dir=@0@'.format(meson.current_source_dir()), 21 | '@INPUT1@', 22 | ], 23 | install: true, 24 | install_dir: docs_dir, 25 | ) 26 | -------------------------------------------------------------------------------- /docs/reference/shell/shell.toml.in: -------------------------------------------------------------------------------- 1 | [library] 2 | namespace = "Shell" 3 | version = "@MUTTER_API_VERSION@" 4 | browse_url = "https://gitlab.gnome.org/GNOME/gnome-shell/" 5 | repository_url = "https://gitlab.gnome.org/GNOME/gnome-shell.git" 6 | website_url = "https://www.gnome.org" 7 | license = "GPL-2.0-or-later" 8 | description = "Shell" 9 | dependencies = ["GObject-2.0", "Gio-2.0", "Meta-@MUTTER_API_VERSION@", "Clutter-@MUTTER_API_VERSION@"] 10 | devhelp = true 11 | search_index = true 12 | 13 | [dependencies."GObject-2.0"] 14 | name = "GObject" 15 | description = "The base type system library" 16 | docs_url = "https://docs.gtk.org/gobject" 17 | 18 | [dependencies."Gio-2.0"] 19 | name = "Gio" 20 | description = "GObject Interfaces and Objects, Networking, IPC, and I/O" 21 | docs_url = "https://docs.gtk.org/gio" 22 | 23 | [dependencies."Meta-@MUTTER_API_VERSION@"] 24 | name = "Meta" 25 | description = "The mutter display server, window manager and compositor library" 26 | docs_url = "https://mutter.gnome.org/meta/" 27 | 28 | [dependencies."Clutter-@MUTTER_API_VERSION@"] 29 | name = "Clutter" 30 | description = "An OpenGL based 'interactive canvas' library" 31 | docs_url = "https://mutter.gnome.org/clutter/" 32 | 33 | [theme] 34 | name = "basic" 35 | show_index_summary = true 36 | 37 | [source-location] 38 | base_url = "https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/HEAD/" 39 | 40 | [extra] 41 | urlmap_file = "urlmap.js" 42 | -------------------------------------------------------------------------------- /docs/reference/shell/urlmap.js: -------------------------------------------------------------------------------- 1 | baseURLs = [ 2 | [ 'GLib', 'https://docs.gtk.org/glib/' ], 3 | [ 'GObject', 'https://docs.gtk.org/gobject/' ], 4 | [ 'Gio', 'https://docs.gtk.org/gio/' ], 5 | [ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ], 6 | [ 'Meta', 'https://mutter.gnome.org/meta/' ], 7 | [ 'Mtk', 'https://mutter.gnome.org/mtk/' ], 8 | [ 'Cogl', 'https://mutter.gnome.org/cogl/' ], 9 | [ 'Clutter', 'https://mutter.gnome.org/clutter/' ], 10 | [ 'St', 'https://gnome.pages.gitlab.gnome.org/gnome-shell/st/' ], 11 | ] 12 | -------------------------------------------------------------------------------- /docs/reference/st/meson.build: -------------------------------------------------------------------------------- 1 | st_toml = configure_file( 2 | input: 'st.toml.in', 3 | output: 'st.toml', 4 | configuration: doc_conf 5 | ) 6 | 7 | custom_target('st-doc', 8 | input: [st_toml, libst_gir[0]], 9 | output: 'st', 10 | command: [ 11 | gidocgen, 12 | 'generate', 13 | gi_docgen_common_args, 14 | '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src'), 15 | '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../src/st'), 16 | '--add-include-path=@0@'.format(mutter_dep.get_variable('girdir')), 17 | '--config=@INPUT0@', 18 | '--output-dir=@OUTPUT@', 19 | '--content-dir=@0@'.format(meson.current_source_dir()), 20 | '@INPUT1@', 21 | ], 22 | install: true, 23 | install_dir: docs_dir, 24 | ) 25 | -------------------------------------------------------------------------------- /docs/reference/st/st.toml.in: -------------------------------------------------------------------------------- 1 | [library] 2 | namespace = "St" 3 | version = "@MUTTER_API_VERSION@" 4 | browse_url = "https://gitlab.gnome.org/GNOME/gnome-shell/" 5 | repository_url = "https://gitlab.gnome.org/GNOME/gnome-shell.git" 6 | website_url = "https://www.gnome.org" 7 | license = "LGPL-2.0-or-later" 8 | description = "Shell Toolkit" 9 | dependencies = ["GObject-2.0", "Gio-2.0", "Clutter-@MUTTER_API_VERSION@"] 10 | devhelp = true 11 | search_index = true 12 | 13 | [dependencies."GObject-2.0"] 14 | name = "GObject" 15 | description = "The base type system library" 16 | docs_url = "https://docs.gtk.org/gobject" 17 | 18 | [dependencies."Gio-2.0"] 19 | name = "Gio" 20 | description = "GObject Interfaces and Objects, Networking, IPC, and I/O" 21 | docs_url = "https://docs.gtk.org/gio" 22 | 23 | [dependencies."Clutter-@MUTTER_API_VERSION@"] 24 | name = "Clutter" 25 | description = "An OpenGL based 'interactive canvas' library" 26 | docs_url = "https://mutter.gnome.org/clutter/" 27 | 28 | [theme] 29 | name = "basic" 30 | show_index_summary = true 31 | 32 | [source-location] 33 | base_url = "https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/HEAD/" 34 | 35 | [extra] 36 | urlmap_file = "urlmap.js" 37 | -------------------------------------------------------------------------------- /docs/reference/st/urlmap.js: -------------------------------------------------------------------------------- 1 | baseURLs = [ 2 | [ 'GLib', 'https://docs.gtk.org/glib/' ], 3 | [ 'GObject', 'https://docs.gtk.org/gobject/' ], 4 | [ 'Gio', 'https://docs.gtk.org/gio/' ], 5 | [ 'Pango', 'https://docs.gtk.org/pango/' ], 6 | [ 'GdkPixbuf', 'https://docs.gtk.org/gdk-pixbuf/' ], 7 | [ 'Clutter', 'https://mutter.gnome.org/clutter/' ], 8 | [ 'Cogl', 'https://mutter.gnome.org/cogl/' ], 9 | [ 'Meta', 'https://mutter.gnome.org/meta/' ], 10 | ] 11 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | tools/eslint.config.js -------------------------------------------------------------------------------- /js/dbusServices/dbus-service.in: -------------------------------------------------------------------------------- 1 | import {programInvocationName, programArgs} from 'system'; 2 | 3 | imports.package.init({ 4 | name: '@PACKAGE_NAME@', 5 | prefix: '@prefix@', 6 | libdir: '@libdir@', 7 | }); 8 | const {main} = await import(`${imports.package.moduledir}/main.js`); 9 | await main([programInvocationName, ...programArgs]); 10 | -------------------------------------------------------------------------------- /js/dbusServices/dbus-service.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=@service@ 3 | Exec=@gjs@ -m @pkgdatadir@/@service@ 4 | -------------------------------------------------------------------------------- /js/dbusServices/extensions/main.js: -------------------------------------------------------------------------------- 1 | import Adw from 'gi://Adw?version=1'; 2 | import GObject from 'gi://GObject'; 3 | const pkg = imports.package; 4 | 5 | import {DBusService} from './dbusService.js'; 6 | import {ExtensionsService} from './extensionsService.js'; 7 | 8 | /** @returns {void} */ 9 | export async function main() { 10 | Adw.init(); 11 | pkg.initFormat(); 12 | 13 | GObject.gtypeNameBasedOnJSPath = true; 14 | 15 | const service = new DBusService( 16 | 'org.gnome.Shell.Extensions', 17 | new ExtensionsService()); 18 | await service.runAsync(); 19 | } 20 | -------------------------------------------------------------------------------- /js/dbusServices/meson.build: -------------------------------------------------------------------------------- 1 | launcherconf = configuration_data() 2 | launcherconf.set('PACKAGE_NAME', meson.project_name()) 3 | launcherconf.set('prefix', prefix) 4 | launcherconf.set('libdir', libdir) 5 | 6 | dbus_services = { 7 | 'org.gnome.Shell.Extensions': 'extensions', 8 | 'org.gnome.Shell.Notifications': 'notifications', 9 | 'org.gnome.Shell.Screencast': 'screencast', 10 | 'org.gnome.ScreenSaver': 'screensaver', 11 | } 12 | 13 | config_dir = '@0@/..'.format(meson.current_build_dir()) 14 | 15 | foreach service, dir : dbus_services 16 | configure_file( 17 | input: 'dbus-service.in', 18 | output: service, 19 | configuration: launcherconf, 20 | install_dir: pkgdatadir, 21 | ) 22 | 23 | serviceconf = configuration_data() 24 | serviceconf.set('service', service) 25 | serviceconf.set('gjs', gjs.full_path()) 26 | serviceconf.set('pkgdatadir', pkgdatadir) 27 | 28 | configure_file( 29 | input: 'dbus-service.service.in', 30 | output: service + '.service', 31 | configuration: serviceconf, 32 | install_dir: servicedir 33 | ) 34 | 35 | gnome.compile_resources( 36 | service + '.src', 37 | service + '.src.gresource.xml', 38 | dependencies: [config_js], 39 | source_dir: ['.', '..', dir, config_dir], 40 | gresource_bundle: true, 41 | install: true, 42 | install_dir: pkgdatadir 43 | ) 44 | endforeach 45 | -------------------------------------------------------------------------------- /js/dbusServices/notifications/main.js: -------------------------------------------------------------------------------- 1 | import {DBusService} from './dbusService.js'; 2 | import {NotificationDaemon} from './notificationDaemon.js'; 3 | 4 | /** @returns {void} */ 5 | export async function main() { 6 | const service = new DBusService( 7 | 'org.gnome.Shell.Notifications', 8 | new NotificationDaemon()); 9 | await service.runAsync(); 10 | } 11 | -------------------------------------------------------------------------------- /js/dbusServices/org.gnome.ScreenSaver.src.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | main.js 5 | screenSaverService.js 6 | dbusService.js 7 | 8 | misc/config.js 9 | misc/dbusErrors.js 10 | misc/dbusUtils.js 11 | 12 | 13 | -------------------------------------------------------------------------------- /js/dbusServices/org.gnome.Shell.Extensions.src.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | main.js 5 | extensionsService.js 6 | extensionPrefsDialog.js 7 | dbusService.js 8 | 9 | extensions/sharedInternals.js 10 | extensions/prefs.js 11 | 12 | misc/config.js 13 | misc/errorUtils.js 14 | misc/extensionUtils.js 15 | misc/dbusErrors.js 16 | misc/dbusUtils.js 17 | misc/params.js 18 | 19 | 20 | 21 | ui/extension-error-page.ui 22 | 23 | 24 | -------------------------------------------------------------------------------- /js/dbusServices/org.gnome.Shell.Notifications.src.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | main.js 5 | notificationDaemon.js 6 | dbusService.js 7 | 8 | misc/config.js 9 | misc/dbusErrors.js 10 | misc/dbusUtils.js 11 | 12 | 13 | -------------------------------------------------------------------------------- /js/dbusServices/org.gnome.Shell.Screencast.src.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | main.js 5 | screencastService.js 6 | dbusService.js 7 | 8 | misc/config.js 9 | misc/dbusUtils.js 10 | misc/dbusErrors.js 11 | misc/signals.js 12 | misc/signalTracker.js 13 | 14 | 15 | -------------------------------------------------------------------------------- /js/dbusServices/screencast/main.js: -------------------------------------------------------------------------------- 1 | import {DBusService} from './dbusService.js'; 2 | import {ScreencastService} from './screencastService.js'; 3 | 4 | /** @returns {void} */ 5 | export async function main() { 6 | if (!ScreencastService.canScreencast()) 7 | return; 8 | 9 | const service = new DBusService( 10 | 'org.gnome.Shell.Screencast', 11 | new ScreencastService()); 12 | await service.runAsync(); 13 | } 14 | -------------------------------------------------------------------------------- /js/dbusServices/screensaver/main.js: -------------------------------------------------------------------------------- 1 | import {DBusService} from './dbusService.js'; 2 | import {ScreenSaverService} from './screenSaverService.js'; 3 | 4 | /** @returns {void} */ 5 | export async function main() { 6 | const service = new DBusService( 7 | 'org.gnome.ScreenSaver', 8 | new ScreenSaverService()); 9 | await service.runAsync(); 10 | } 11 | -------------------------------------------------------------------------------- /js/gdm/credentialManager.js: -------------------------------------------------------------------------------- 1 | import * as Signals from '../misc/signals.js'; 2 | 3 | export class CredentialManager extends Signals.EventEmitter { 4 | constructor(service) { 5 | super(); 6 | 7 | this._token = null; 8 | this._service = service; 9 | } 10 | 11 | get token() { 12 | return this._token; 13 | } 14 | 15 | set token(t) { 16 | this._token = t; 17 | if (this._token) 18 | this.emit('user-authenticated', this._token); 19 | } 20 | 21 | get service() { 22 | return this._service; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /js/meson.build: -------------------------------------------------------------------------------- 1 | subdir('misc') 2 | subdir('dbusServices') 3 | 4 | js_resources = gnome.compile_resources( 5 | 'js-resources', 'js-resources.gresource.xml', 6 | source_dir: ['.', meson.current_build_dir()], 7 | c_name: 'shell_js_resources', 8 | dependencies: [config_js] 9 | ) 10 | 11 | if have_portal_helper 12 | portal_resources = gnome.compile_resources( 13 | 'portal-resources', 'portal-resources.gresource.xml', 14 | source_dir: ['.', meson.current_build_dir()], 15 | c_name: 'portal_js_resources', 16 | dependencies: [config_js] 17 | ) 18 | endif 19 | -------------------------------------------------------------------------------- /js/misc/config.js.in: -------------------------------------------------------------------------------- 1 | const pkg = imports.package; 2 | 3 | /* The name of this package (not localized) */ 4 | export const PACKAGE_NAME = '@PACKAGE_NAME@'; 5 | /* The version of this package */ 6 | export const PACKAGE_VERSION = '@PACKAGE_VERSION@'; 7 | /* 1 if networkmanager is available, 0 otherwise */ 8 | export const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@; 9 | /* 1 if portal helper is enabled, 0 otherwise */ 10 | export const HAVE_PORTAL_HELPER = @HAVE_PORTAL_HELPER@; 11 | /* gettext package */ 12 | export const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@'; 13 | /* locale dir */ 14 | export const LOCALEDIR = '@datadir@/locale'; 15 | /* other standard directories */ 16 | export const LIBEXECDIR = '@libexecdir@'; 17 | export const PKGDATADIR = '@datadir@/@PACKAGE_NAME@'; 18 | /* g-i package versions */ 19 | export const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'; 20 | 21 | export const HAVE_BLUETOOTH = pkg.checkSymbol('GnomeBluetooth', '3.0', 22 | 'Client.default_adapter_state'); 23 | 24 | export const UTILITIES_FOLDER_APPS = @UTILS_FOLDER_APPS@; 25 | export const SYSTEM_FOLDER_APPS = @SYSTEM_FOLDER_APPS@; 26 | -------------------------------------------------------------------------------- /js/misc/meson.build: -------------------------------------------------------------------------------- 1 | jsconf = configuration_data() 2 | jsconf.set('PACKAGE_NAME', meson.project_name()) 3 | jsconf.set('PACKAGE_VERSION', meson.project_version()) 4 | jsconf.set('GETTEXT_PACKAGE', meson.project_name()) 5 | jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version) 6 | jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager) 7 | jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper) 8 | jsconf.set('UTILS_FOLDER_APPS', run_command( 9 | generate_app_list, '../../data/default-apps/utilities-folder.txt', 10 | check: true, 11 | ).stdout()) 12 | jsconf.set('SYSTEM_FOLDER_APPS', run_command( 13 | generate_app_list, '../../data/default-apps/system-folder.txt', 14 | check: true, 15 | ).stdout()) 16 | jsconf.set('datadir', datadir) 17 | jsconf.set('libexecdir', libexecdir) 18 | 19 | config_js = configure_file( 20 | input: 'config.js.in', 21 | output: 'config.js', 22 | configuration: jsconf 23 | ) 24 | -------------------------------------------------------------------------------- /js/misc/params.js: -------------------------------------------------------------------------------- 1 | /** 2 | * parse: 3 | * 4 | * @param {*} params caller-provided parameter object, or %null 5 | * @param {*} defaults provided defaults object 6 | * @param {boolean} [allowExtras] whether or not to allow properties not in `default` 7 | * 8 | * @summary Examines `params` and fills in default values from `defaults` for 9 | * any properties in `default` that don't appear in `params`. If 10 | * `allowExtras` is not %true, it will throw an error if `params` 11 | * contains any properties that aren't in `defaults`. 12 | * 13 | * If `params` is %null, this returns the values from `defaults`. 14 | * 15 | * @returns a new object, containing the merged parameters from 16 | * `params` and `defaults` 17 | */ 18 | export function parse(params = {}, defaults, allowExtras) { 19 | if (!allowExtras) { 20 | for (const prop in params) { 21 | if (!(prop in defaults)) 22 | throw new Error(`Unrecognized parameter "${prop}"`); 23 | } 24 | } 25 | 26 | return {...defaults, ...params}; 27 | } 28 | -------------------------------------------------------------------------------- /js/misc/permissionStore.js: -------------------------------------------------------------------------------- 1 | import Gio from 'gi://Gio'; 2 | 3 | import {loadInterfaceXML} from './fileUtils.js'; 4 | 5 | const PermissionStoreIface = loadInterfaceXML('org.freedesktop.impl.portal.PermissionStore'); 6 | const PermissionStoreProxy = Gio.DBusProxy.makeProxyWrapper(PermissionStoreIface); 7 | 8 | /** 9 | * @param {Function} initCallback 10 | * @param {Gio.Cancellable} cancellable 11 | * @returns {Gio.DBusProxy} 12 | */ 13 | export function PermissionStore(initCallback, cancellable) { 14 | return new PermissionStoreProxy(Gio.DBus.session, 15 | 'org.freedesktop.impl.portal.PermissionStore', 16 | '/org/freedesktop/impl/portal/PermissionStore', 17 | initCallback, cancellable); 18 | } 19 | -------------------------------------------------------------------------------- /js/misc/signals.js: -------------------------------------------------------------------------------- 1 | import * as SignalTracker from './signalTracker.js'; 2 | 3 | const Signals = imports.signals; 4 | 5 | export class EventEmitter { 6 | connectObject(...args) { 7 | return SignalTracker.connectObject(this, ...args); 8 | } 9 | 10 | disconnectObject(...args) { 11 | return SignalTracker.disconnectObject(this, ...args); 12 | } 13 | 14 | connect_object(...args) { 15 | return this.connectObject(...args); 16 | } 17 | 18 | disconnect_object(...args) { 19 | return this.disconnectObject(...args); 20 | } 21 | } 22 | 23 | Signals.addSignalMethods(EventEmitter.prototype); 24 | -------------------------------------------------------------------------------- /js/portal-resources.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | portalHelper/main.js 5 | 6 | misc/config.js 7 | misc/dbusUtils.js 8 | misc/fileUtils.js 9 | 10 | 11 | -------------------------------------------------------------------------------- /js/ui/init.js: -------------------------------------------------------------------------------- 1 | import GLib from 'gi://GLib'; 2 | import Gio from 'gi://Gio'; 3 | 4 | import './environment.js'; 5 | import {formatError} from '../misc/errorUtils.js'; 6 | 7 | // Run the Mutter main loop after 8 | // GJS finishes resolving this module. 9 | imports._promiseNative.setMainLoopHook(() => { 10 | // Queue starting the shell 11 | GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { 12 | import('./main.js').then(main => main.start()).catch(e => { 13 | const error = new GLib.Error( 14 | Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED, formatError(e)); 15 | global.context.terminate_with_error(error); 16 | }); 17 | return GLib.SOURCE_REMOVE; 18 | }); 19 | 20 | // Run the meta context's main loop 21 | global.context.run_main_loop(); 22 | }); 23 | -------------------------------------------------------------------------------- /js/ui/listModes.js: -------------------------------------------------------------------------------- 1 | import './environment.js'; 2 | 3 | import {listModes} from './sessionMode.js'; 4 | 5 | listModes(); 6 | -------------------------------------------------------------------------------- /js/ui/locatePointer.js: -------------------------------------------------------------------------------- 1 | import Gio from 'gi://Gio'; 2 | import * as Ripples from './ripples.js'; 3 | import * as Main from './main.js'; 4 | 5 | const LOCATE_POINTER_KEY = 'locate-pointer'; 6 | const LOCATE_POINTER_SCHEMA = 'org.gnome.desktop.interface'; 7 | 8 | export class LocatePointer { 9 | constructor() { 10 | this._settings = new Gio.Settings({schema_id: LOCATE_POINTER_SCHEMA}); 11 | this._settings.connect(`changed::${LOCATE_POINTER_KEY}`, () => this._syncEnabled()); 12 | this._syncEnabled(); 13 | } 14 | 15 | _syncEnabled() { 16 | const enabled = this._settings.get_boolean(LOCATE_POINTER_KEY); 17 | if (enabled === !!this._ripples) 18 | return; 19 | 20 | if (enabled) { 21 | this._ripples = new Ripples.Ripples(0.5, 0.5, 'ripple-pointer-location', true); 22 | this._ripples.addTo(Main.uiGroup); 23 | } else { 24 | this._ripples.destroy(); 25 | this._ripples = null; 26 | } 27 | } 28 | 29 | show() { 30 | if (!this._ripples) 31 | return; 32 | 33 | const [x, y] = global.get_pointer(); 34 | this._ripples.playAnimation(x, y); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /js/ui/status/camera.js: -------------------------------------------------------------------------------- 1 | import GObject from 'gi://GObject'; 2 | import Shell from 'gi://Shell'; 3 | 4 | import {SystemIndicator} from '../quickSettings.js'; 5 | 6 | export const Indicator = GObject.registerClass( 7 | class Indicator extends SystemIndicator { 8 | constructor() { 9 | super(); 10 | 11 | this._indicator = this._addIndicator(); 12 | this._indicator.icon_name = 'camera-web-symbolic'; 13 | this._indicator.add_style_class_name('privacy-indicator'); 14 | 15 | this._cameraMonitor = new Shell.CameraMonitor(); 16 | this._cameraMonitor.bind_property('cameras-in-use', this._indicator, 17 | 'visible', GObject.BindingFlags.SYNC_CREATE); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /js/ui/status/doNotDisturb.js: -------------------------------------------------------------------------------- 1 | import Gio from 'gi://Gio'; 2 | import GObject from 'gi://GObject'; 3 | 4 | import {QuickToggle, SystemIndicator} from '../quickSettings.js'; 5 | 6 | const DoNotDisturbToggle = GObject.registerClass( 7 | class DoNotDisturbToggle extends QuickToggle { 8 | constructor() { 9 | super({ 10 | title: _('Do Not Disturb'), 11 | iconName: 'notifications-disabled-symbolic', 12 | toggleMode: true, 13 | }); 14 | 15 | this._settings = new Gio.Settings({ 16 | schema_id: 'org.gnome.desktop.notifications', 17 | }); 18 | this._settings.bind('show-banners', 19 | this, 'checked', 20 | Gio.SettingsBindFlags.INVERT_BOOLEAN); 21 | } 22 | }); 23 | 24 | export const Indicator = GObject.registerClass( 25 | class Indicator extends SystemIndicator { 26 | constructor() { 27 | super(); 28 | this._indicator = this._addIndicator(); 29 | this._indicator.icon_name = 'notifications-disabled-symbolic'; 30 | 31 | const toggle = new DoNotDisturbToggle(); 32 | toggle.bind_property('checked', 33 | this._indicator, 'visible', 34 | GObject.BindingFlags.SYNC_CREATE); 35 | 36 | this.quickSettingsItems.push(toggle); 37 | } 38 | }); 39 | 40 | -------------------------------------------------------------------------------- /man/meson.build: -------------------------------------------------------------------------------- 1 | custom_target('man page', 2 | input: 'gnome-shell.rst', 3 | output: 'gnome-shell.1', 4 | command: [rst2man, '--syntax-highlight=none', '@INPUT@'], 5 | capture: true, 6 | install_dir: mandir + '/man1', 7 | install: true 8 | ) 9 | -------------------------------------------------------------------------------- /meson.options: -------------------------------------------------------------------------------- 1 | option('camera_monitor', 2 | type: 'boolean', 3 | value: true, 4 | description: 'Enable the camera monitor' 5 | ) 6 | 7 | option('extensions_tool', 8 | type: 'boolean', 9 | value: true, 10 | description: 'Build gnome-extensions CLI tool' 11 | ) 12 | 13 | option('extensions_app', 14 | type: 'boolean', 15 | value: true, 16 | description: 'Build gnome-extensions GUI application' 17 | ) 18 | 19 | option('gtk_doc', 20 | type: 'boolean', 21 | value: false, 22 | description: 'Build API reference' 23 | ) 24 | 25 | option('man', 26 | type: 'boolean', 27 | value: true, 28 | description: 'Generate man pages' 29 | ) 30 | 31 | option('tests', 32 | type: 'boolean', 33 | value: true, 34 | description: 'Enable tests' 35 | ) 36 | 37 | option('networkmanager', 38 | type: 'boolean', 39 | value: true, 40 | description: 'Enable NetworkManager support' 41 | ) 42 | 43 | option('portal_helper', 44 | type: 'boolean', 45 | value: true, 46 | description: 'Enable build-in network portal login' 47 | ) 48 | 49 | option('systemd', 50 | type: 'boolean', 51 | value: true, 52 | description: 'Enable systemd integration' 53 | ) 54 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | ab 2 | af 3 | an 4 | ar 5 | as 6 | ast 7 | be 8 | be@latin 9 | bg 10 | bn 11 | bn_IN 12 | bs 13 | ca 14 | ca@valencia 15 | ckb 16 | cs 17 | da 18 | de 19 | el 20 | en_GB 21 | eo 22 | es 23 | et 24 | eu 25 | fa 26 | fi 27 | fo 28 | fr 29 | fur 30 | fy 31 | ga 32 | gd 33 | gl 34 | gu 35 | he 36 | hi 37 | hr 38 | hu 39 | ia 40 | id 41 | ie 42 | is 43 | it 44 | ja 45 | ka 46 | kab 47 | kk 48 | km 49 | kn 50 | ko 51 | ku 52 | ky 53 | lt 54 | lv 55 | mjw 56 | mk 57 | ml 58 | mr 59 | ms 60 | nb 61 | ne 62 | nl 63 | nn 64 | oc 65 | or 66 | os 67 | pa 68 | pl 69 | pt 70 | pt_BR 71 | ro 72 | ru 73 | si 74 | sk 75 | sl 76 | sr 77 | sr@latin 78 | sv 79 | ta 80 | te 81 | tg 82 | th 83 | tr 84 | ug 85 | uk 86 | uz 87 | uz@cyrillic 88 | vi 89 | zh_CN 90 | zh_HK 91 | zh_TW 92 | -------------------------------------------------------------------------------- /po/POTFILES.skip: -------------------------------------------------------------------------------- 1 | data/org.gnome.Shell@wayland.service.in 2 | data/org.gnome.Shell@x11.service.in 3 | js/ui/init.js 4 | subprojects/extensions-tool/src/templates/indicator/extension.js 5 | subprojects/extensions-tool/src/templates/prefs.js 6 | subprojects/extensions-tool/src/templates/quick-settings/extension.js 7 | -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext(meson.project_name(), preset: 'glib') 2 | -------------------------------------------------------------------------------- /src/calendar-server/README: -------------------------------------------------------------------------------- 1 | Please keep in sync with gnome-panel. 2 | -------------------------------------------------------------------------------- /src/calendar-server/meson.build: -------------------------------------------------------------------------------- 1 | calendar_sources = [ 2 | 'gnome-shell-calendar-server.c', 3 | 'calendar-debug.h', 4 | 'calendar-sources.c', 5 | 'calendar-sources.h' 6 | ] 7 | 8 | calendar_server = executable('gnome-shell-calendar-server', calendar_sources, 9 | dependencies: [ecal_dep, eds_dep, gio_dep], 10 | include_directories: include_directories('..', '../..'), 11 | c_args: [ 12 | '-DPREFIX="@0@"'.format(prefix), 13 | '-DLIBDIR="@0@"'.format(libdir), 14 | '-DDATADIR="@0@"'.format(datadir), 15 | '-DG_LOG_DOMAIN="ShellCalendarServer"' 16 | ], 17 | install_dir: libexecdir, 18 | install: true 19 | ) 20 | 21 | service_file = 'org.gnome.Shell.CalendarServer.service' 22 | 23 | configure_file( 24 | input: service_file + '.in', 25 | output: service_file, 26 | configuration: service_data, 27 | install_dir: servicedir 28 | ) 29 | -------------------------------------------------------------------------------- /src/calendar-server/org.gnome.Shell.CalendarServer.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=org.gnome.Shell.CalendarServer 3 | Exec=@libexecdir@/gnome-shell-calendar-server 4 | -------------------------------------------------------------------------------- /src/data-to-c.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright © 2024 Red Hat, Inc 4 | # 5 | # This library is free software; you can redistribute it and/or 6 | # modify it under the terms of the GNU Lesser General Public 7 | # License as published by the Free Software Foundation; either 8 | # version 2 of the licence, or (at your option) any later version. 9 | # 10 | # This library is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | # Lesser General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Lesser General Public 16 | # License along with this library; if not, see . 17 | # 18 | # Author: Alberto Ruiz 19 | 20 | import sys 21 | 22 | if len(sys.argv) != 3: 23 | print(f"Usage: {sys.argv[0]} ", file=sys.stderr) 24 | sys.exit(1) 25 | 26 | with open(sys.argv[1], "rb") as srcfile: 27 | print(f'const char {sys.argv[2]}[] = "', end="") 28 | while (val := srcfile.read(1)): 29 | print(f"\\x{val.hex()}", end="") 30 | print('";') 31 | -------------------------------------------------------------------------------- /src/gnome-shell-portal-helper.c: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | 3 | #include "config.h" 4 | 5 | #include 6 | #include 7 | 8 | int 9 | main (int argc, char *argv[]) 10 | { 11 | const char *search_path[] = { "resource:///org/gnome/shell", NULL }; 12 | GError *error = NULL; 13 | GjsContext *context; 14 | uint8_t status; 15 | 16 | bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); 17 | bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); 18 | textdomain (GETTEXT_PACKAGE); 19 | 20 | context = g_object_new (GJS_TYPE_CONTEXT, 21 | "program-name", *argv, 22 | "search-path", search_path, 23 | NULL); 24 | 25 | gjs_context_set_argv(context, argc - 1, (const char**)argv + 1); 26 | 27 | if (!gjs_context_eval_module_file (context, 28 | "resource:///org/gnome/shell/portalHelper/main.js", 29 | &status, 30 | &error)) 31 | { 32 | g_message ("Execution of main.js threw exception: %s", error->message); 33 | g_error_free (error); 34 | g_object_unref (context); 35 | 36 | return status; 37 | } 38 | 39 | g_object_unref (context); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /src/hotplug-sniffer/meson.build: -------------------------------------------------------------------------------- 1 | hotplug_sources = [ 2 | 'hotplug-mimetypes.h', 3 | 'shell-mime-sniffer.h', 4 | 'shell-mime-sniffer.c', 5 | 'hotplug-sniffer.c' 6 | ] 7 | 8 | executable('gnome-shell-hotplug-sniffer', hotplug_sources, 9 | dependencies: [gio_dep, gdk_pixbuf_dep], 10 | include_directories: include_directories('../..'), 11 | install_dir: libexecdir, 12 | install: true 13 | ) 14 | 15 | service_file = 'org.gnome.Shell.HotplugSniffer.service' 16 | 17 | configure_file( 18 | input: service_file + '.in', 19 | output: service_file, 20 | configuration: service_data, 21 | install_dir: servicedir 22 | ) 23 | -------------------------------------------------------------------------------- /src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=org.gnome.Shell.HotplugSniffer 3 | Exec=@libexecdir@/gnome-shell-hotplug-sniffer 4 | -------------------------------------------------------------------------------- /src/org.gtk.Application.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/shell-app-cache-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | 3 | #pragma once 4 | 5 | #include 6 | #include 7 | 8 | #define SHELL_TYPE_APP_CACHE (shell_app_cache_get_type()) 9 | 10 | G_DECLARE_FINAL_TYPE (ShellAppCache, shell_app_cache, SHELL, APP_CACHE, GObject) 11 | 12 | ShellAppCache *shell_app_cache_get_default (void); 13 | GList *shell_app_cache_get_all (ShellAppCache *cache); 14 | GDesktopAppInfo *shell_app_cache_get_info (ShellAppCache *cache, 15 | const char *id); 16 | char *shell_app_cache_translate_folder (ShellAppCache *cache, 17 | const char *name); 18 | -------------------------------------------------------------------------------- /src/shell-app-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "shell-app.h" 5 | #include "shell-app-system.h" 6 | 7 | G_BEGIN_DECLS 8 | 9 | ShellApp* _shell_app_new_for_window (MetaWindow *window); 10 | 11 | ShellApp* _shell_app_new (GDesktopAppInfo *info); 12 | 13 | void _shell_app_set_app_info (ShellApp *app, GDesktopAppInfo *info); 14 | 15 | void _shell_app_handle_startup_sequence (ShellApp *app, MetaStartupSequence *sequence); 16 | 17 | void _shell_app_add_window (ShellApp *app, MetaWindow *window); 18 | 19 | void _shell_app_remove_window (ShellApp *app, MetaWindow *window); 20 | 21 | G_END_DECLS 22 | -------------------------------------------------------------------------------- /src/shell-app-system-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "shell-app-system.h" 5 | 6 | void _shell_app_system_notify_app_state_changed (ShellAppSystem *self, ShellApp *app); 7 | -------------------------------------------------------------------------------- /src/shell-app-usage.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "shell-app.h" 5 | #include "shell-window-tracker.h" 6 | 7 | G_BEGIN_DECLS 8 | 9 | #define SHELL_TYPE_APP_USAGE (shell_app_usage_get_type ()) 10 | G_DECLARE_FINAL_TYPE (ShellAppUsage, shell_app_usage, 11 | SHELL, APP_USAGE, GObject) 12 | 13 | ShellAppUsage* shell_app_usage_get_default(void); 14 | 15 | GSList *shell_app_usage_get_most_used (ShellAppUsage *usage); 16 | int shell_app_usage_compare (ShellAppUsage *self, 17 | const char *id_a, 18 | const char *id_b); 19 | 20 | G_END_DECLS 21 | -------------------------------------------------------------------------------- /src/shell-camera-monitor.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Shell camera monitor 3 | * 4 | * Copyright (C) 2023 Collabora Ltd. 5 | * 6 | * This program is free software; you can redistribute it and/or 7 | * modify it under the terms of the GNU General Public License as 8 | * published by the Free Software Foundation; either version 2 of the 9 | * License, or (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 19 | * 02111-1307, USA. 20 | */ 21 | 22 | #pragma once 23 | 24 | #include 25 | 26 | G_BEGIN_DECLS 27 | 28 | #define SHELL_TYPE_CAMERA_MONITOR (shell_camera_monitor_get_type ()) 29 | G_DECLARE_FINAL_TYPE (ShellCameraMonitor, shell_camera_monitor, 30 | SHELL, CAMERA_MONITOR, GObject) 31 | 32 | gboolean shell_camera_monitor_get_cameras_in_use (ShellCameraMonitor *monitor); 33 | 34 | G_END_DECLS 35 | -------------------------------------------------------------------------------- /src/shell-edge-drag-gesture.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2025 Jonas Dreßler 3 | * 4 | * This library is free software; you can redistribute it and/or 5 | * modify it under the terms of the GNU Lesser General Public 6 | * License as published by the Free Software Foundation; either 7 | * version 2 of the License, or (at your option) any later version. 8 | * 9 | * This library is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | * Lesser General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU Lesser General Public 15 | * License along with this library. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | G_BEGIN_DECLS 21 | 22 | #include 23 | #include 24 | 25 | #define SHELL_TYPE_EDGE_DRAG_GESTURE (shell_edge_drag_gesture_get_type ()) 26 | G_DECLARE_FINAL_TYPE (ShellEdgeDragGesture, shell_edge_drag_gesture, 27 | SHELL, EDGE_DRAG_GESTURE, ClutterGesture) 28 | 29 | void shell_edge_drag_gesture_set_side (ShellEdgeDragGesture *self, 30 | StSide side); 31 | 32 | StSide shell_edge_drag_gesture_get_side (ShellEdgeDragGesture *self); 33 | 34 | G_END_DECLS 35 | -------------------------------------------------------------------------------- /src/shell-global-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "shell-global.h" 5 | 6 | #include 7 | 8 | #include "shell-app-cache-private.h" 9 | 10 | void _shell_global_init (const char *first_property_name, 11 | ...); 12 | void _shell_global_set_plugin (ShellGlobal *global, 13 | MetaPlugin *plugin); 14 | 15 | void _shell_global_destroy_gjs_context (ShellGlobal *global); 16 | 17 | GjsContext *_shell_global_get_gjs_context (ShellGlobal *global); 18 | 19 | ShellAppCache * shell_global_get_app_cache (ShellGlobal *global); 20 | 21 | void _shell_global_locate_pointer (ShellGlobal *global); 22 | 23 | void _shell_global_notify_shutdown (ShellGlobal *global); 24 | -------------------------------------------------------------------------------- /src/shell-square-bin.c: -------------------------------------------------------------------------------- 1 | #include "config.h" 2 | 3 | #include "shell-square-bin.h" 4 | 5 | struct _ShellSquareBin 6 | { 7 | /*< private >*/ 8 | StBin parent_instance; 9 | }; 10 | 11 | G_DEFINE_TYPE (ShellSquareBin, shell_square_bin, ST_TYPE_BIN); 12 | 13 | static void 14 | shell_square_bin_get_preferred_width (ClutterActor *actor, 15 | float for_height, 16 | float *min_width_p, 17 | float *natural_width_p) 18 | { 19 | float min_width, nat_width; 20 | 21 | /* Return the actual height to keep the squared aspect */ 22 | clutter_actor_get_preferred_height (actor, -1, 23 | &min_width, &nat_width); 24 | 25 | if (min_width_p) 26 | *min_width_p = min_width; 27 | 28 | if (natural_width_p) 29 | *natural_width_p = nat_width; 30 | } 31 | 32 | static void 33 | shell_square_bin_init (ShellSquareBin *self) 34 | { 35 | } 36 | 37 | static void 38 | shell_square_bin_class_init (ShellSquareBinClass *klass) 39 | { 40 | ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); 41 | 42 | actor_class->get_preferred_width = shell_square_bin_get_preferred_width; 43 | } 44 | -------------------------------------------------------------------------------- /src/shell-square-bin.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | 4 | #include 5 | 6 | G_BEGIN_DECLS 7 | 8 | #define SHELL_TYPE_SQUARE_BIN (shell_square_bin_get_type ()) 9 | G_DECLARE_FINAL_TYPE (ShellSquareBin, shell_square_bin, SHELL, SquareBin, StBin) 10 | 11 | G_END_DECLS 12 | -------------------------------------------------------------------------------- /src/shell-stack.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "st.h" 5 | 6 | #define SHELL_TYPE_STACK (shell_stack_get_type ()) 7 | G_DECLARE_FINAL_TYPE (ShellStack, shell_stack, SHELL, STACK, StWidget) 8 | -------------------------------------------------------------------------------- /src/shell-time-change-source.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 GNOME Foundation, Inc. 3 | * 4 | * SPDX-License-Identifier: LGPL-2.1-or-later 5 | * 6 | * This library is free software; you can redistribute it and/or 7 | * modify it under the terms of the GNU Lesser General Public 8 | * License as published by the Free Software Foundation; either 9 | * version 2.1 of the License, or (at your option) any later version. 10 | * 11 | * This library is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | * Lesser General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General 17 | * Public License along with this library; if not, see . 18 | * 19 | * Author: Philip Withnall 20 | */ 21 | 22 | #ifndef __SHELL_TIME_CHANGE_SOURCE_H__ 23 | #define __SHELL_TIME_CHANGE_SOURCE_H__ 24 | 25 | #include 26 | 27 | G_BEGIN_DECLS 28 | 29 | GSource *shell_time_change_source_new (GError **error); 30 | 31 | G_END_DECLS 32 | 33 | #endif /* __SHELL_TIME_CHANGE_SOURCE_H__ */ 34 | -------------------------------------------------------------------------------- /src/shell-tray-icon-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "shell-tray-icon.h" 5 | 6 | #include "na-tray-child.h" 7 | 8 | ClutterActor * shell_tray_icon_new (NaTrayChild *tray_child); 9 | -------------------------------------------------------------------------------- /src/shell-tray-icon.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include 5 | 6 | #define SHELL_TYPE_TRAY_ICON (shell_tray_icon_get_type ()) 7 | G_DECLARE_FINAL_TYPE (ShellTrayIcon, shell_tray_icon, 8 | SHELL, TRAY_ICON, ClutterClone) 9 | 10 | pid_t shell_tray_icon_get_pid (ShellTrayIcon *icon); 11 | const char * shell_tray_icon_get_title (ShellTrayIcon *icon); 12 | const char * shell_tray_icon_get_wm_class (ShellTrayIcon *icon); 13 | 14 | void shell_tray_icon_click (ShellTrayIcon *icon, 15 | ClutterEvent *event); 16 | -------------------------------------------------------------------------------- /src/shell-tray-manager.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | 3 | #pragma once 4 | 5 | #include 6 | #include "st.h" 7 | 8 | G_BEGIN_DECLS 9 | 10 | #define SHELL_TYPE_TRAY_MANAGER (shell_tray_manager_get_type ()) 11 | G_DECLARE_FINAL_TYPE (ShellTrayManager, shell_tray_manager, 12 | SHELL, TRAY_MANAGER, GObject) 13 | 14 | ShellTrayManager *shell_tray_manager_new (void); 15 | void shell_tray_manager_manage_screen (ShellTrayManager *manager, 16 | StWidget *theme_widget); 17 | void shell_tray_manager_unmanage_screen (ShellTrayManager *manager); 18 | 19 | CoglColor * shell_tray_manager_get_bg_color (ShellTrayManager *manager); 20 | 21 | G_END_DECLS 22 | -------------------------------------------------------------------------------- /src/shell-window-preview-layout.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | G_BEGIN_DECLS 4 | 5 | #include 6 | 7 | #define SHELL_TYPE_WINDOW_PREVIEW_LAYOUT (shell_window_preview_layout_get_type ()) 8 | G_DECLARE_FINAL_TYPE (ShellWindowPreviewLayout, shell_window_preview_layout, 9 | SHELL, WINDOW_PREVIEW_LAYOUT, ClutterLayoutManager) 10 | 11 | typedef struct _ShellWindowPreviewLayout ShellWindowPreviewLayout; 12 | typedef struct _ShellWindowPreviewLayoutPrivate ShellWindowPreviewLayoutPrivate; 13 | 14 | struct _ShellWindowPreviewLayout 15 | { 16 | /*< private >*/ 17 | ClutterLayoutManager parent; 18 | 19 | ShellWindowPreviewLayoutPrivate *priv; 20 | }; 21 | 22 | ClutterActorBox * shell_window_preview_layout_get_bounding_box (ShellWindowPreviewLayout *self); 23 | 24 | ClutterActor * shell_window_preview_layout_add_window (ShellWindowPreviewLayout *self, 25 | MetaWindow *window); 26 | 27 | void shell_window_preview_layout_remove_window (ShellWindowPreviewLayout *self, 28 | MetaWindow *window); 29 | 30 | GList * shell_window_preview_layout_get_windows (ShellWindowPreviewLayout *self); 31 | 32 | G_END_DECLS 33 | -------------------------------------------------------------------------------- /src/shell-window-preview.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | G_BEGIN_DECLS 6 | 7 | #define SHELL_TYPE_WINDOW_PREVIEW (shell_window_preview_get_type ()) 8 | G_DECLARE_FINAL_TYPE (ShellWindowPreview, shell_window_preview, 9 | SHELL, WINDOW_PREVIEW, StWidget) 10 | 11 | ClutterActor * shell_window_preview_get_window_container (ShellWindowPreview *preview); 12 | 13 | G_END_DECLS 14 | -------------------------------------------------------------------------------- /src/shell-window-tracker-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include "shell-window-tracker.h" 5 | 6 | void _shell_window_tracker_add_child_process_app (ShellWindowTracker *tracker, 7 | GPid pid, 8 | ShellApp *app); 9 | -------------------------------------------------------------------------------- /src/shell-window-tracker.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include "shell-app.h" 10 | #include "shell-app-system.h" 11 | 12 | G_BEGIN_DECLS 13 | 14 | #define SHELL_TYPE_WINDOW_TRACKER (shell_window_tracker_get_type ()) 15 | G_DECLARE_FINAL_TYPE (ShellWindowTracker, shell_window_tracker, 16 | SHELL, WINDOW_TRACKER, GObject) 17 | 18 | ShellWindowTracker* shell_window_tracker_get_default(void); 19 | 20 | ShellApp *shell_window_tracker_get_window_app (ShellWindowTracker *tracker, MetaWindow *metawin); 21 | 22 | ShellApp *shell_window_tracker_get_app_from_pid (ShellWindowTracker *tracker, int pid); 23 | 24 | ShellApp *shell_window_tracker_get_focus_app (ShellWindowTracker *tracker); 25 | 26 | GSList *shell_window_tracker_get_startup_sequences (ShellWindowTracker *tracker); 27 | 28 | G_END_DECLS 29 | -------------------------------------------------------------------------------- /src/shell-wm.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include 5 | #include 6 | 7 | G_BEGIN_DECLS 8 | 9 | #define SHELL_TYPE_WM (shell_wm_get_type ()) 10 | G_DECLARE_FINAL_TYPE (ShellWM, shell_wm, SHELL, WM, GObject) 11 | 12 | ShellWM *shell_wm_new (MetaPlugin *plugin); 13 | 14 | void shell_wm_completed_minimize (ShellWM *wm, 15 | MetaWindowActor *actor); 16 | void shell_wm_completed_unminimize (ShellWM *wm, 17 | MetaWindowActor *actor); 18 | void shell_wm_completed_size_change (ShellWM *wm, 19 | MetaWindowActor *actor); 20 | void shell_wm_completed_map (ShellWM *wm, 21 | MetaWindowActor *actor); 22 | void shell_wm_completed_destroy (ShellWM *wm, 23 | MetaWindowActor *actor); 24 | void shell_wm_completed_switch_workspace (ShellWM *wm); 25 | 26 | void shell_wm_complete_display_change (ShellWM *wm, 27 | gboolean ok); 28 | 29 | G_END_DECLS 30 | -------------------------------------------------------------------------------- /src/shell-workspace-background.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | G_BEGIN_DECLS 6 | 7 | #define SHELL_TYPE_WORKSPACE_BACKGROUND (shell_workspace_background_get_type ()) 8 | G_DECLARE_FINAL_TYPE (ShellWorkspaceBackground, shell_workspace_background, 9 | SHELL, WORKSPACE_BACKGROUND, StWidget) 10 | 11 | int shell_workspace_background_get_monitor_index (ShellWorkspaceBackground *bg); 12 | 13 | double shell_workspace_background_get_state_adjustment_value (ShellWorkspaceBackground *bg); 14 | void shell_workspace_background_set_state_adjustment_value (ShellWorkspaceBackground *bg, 15 | double value); 16 | 17 | G_END_DECLS 18 | -------------------------------------------------------------------------------- /src/st/croco/libcroco-config.h: -------------------------------------------------------------------------------- 1 | #ifndef LIBCROCO_VERSION_NUMBER 2 | #define LIBCROCO_VERSION_NUMBER 612 3 | #endif 4 | 5 | #ifndef LIBCROCO_VERSION 6 | #define LIBCROCO_VERSION "0.6.12" 7 | #endif 8 | 9 | #ifndef G_DISABLE_CHECKS 10 | #if 0 11 | #define G_DISABLE_CHECKS 0 12 | #endif 13 | #endif 14 | -------------------------------------------------------------------------------- /src/st/croco/libcroco.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of The Croco Library 3 | * 4 | * Copyright (C) 2002-2003 Dodji Seketeli 5 | * 6 | * This program is free software; you can redistribute it and/or 7 | * modify it under the terms of version 2.1 of the GNU Lesser General Public 8 | * License as published by the Free Software Foundation. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 18 | * USA 19 | */ 20 | 21 | #pragma once 22 | 23 | #include "libcroco-config.h" 24 | 25 | #include "cr-utils.h" 26 | #include "cr-pseudo.h" 27 | #include "cr-term.h" 28 | #include "cr-attr-sel.h" 29 | #include "cr-simple-sel.h" 30 | #include "cr-selector.h" 31 | #include "cr-enc-handler.h" 32 | #include "cr-doc-handler.h" 33 | #include "cr-input.h" 34 | #include "cr-parser.h" 35 | #include "cr-statement.h" 36 | #include "cr-stylesheet.h" 37 | #include "cr-om-parser.h" 38 | #include "cr-prop-list.h" 39 | #include "cr-string.h" 40 | -------------------------------------------------------------------------------- /src/st/st-icon-colors.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | #pragma once 3 | 4 | #include 5 | 6 | G_BEGIN_DECLS 7 | 8 | #define ST_TYPE_ICON_COLORS (st_icon_colors_get_type ()) 9 | 10 | typedef struct _StIconColors StIconColors; 11 | 12 | /** 13 | * StIconColors: 14 | * @foreground: foreground color 15 | * @warning: color indicating a warning state 16 | * @error: color indicating an error state 17 | * @success: color indicating a successful operation 18 | * 19 | * The #StIconColors structure encapsulates colors for colorizing a symbolic 20 | * icon. 21 | */ 22 | struct _StIconColors { 23 | CoglColor foreground; 24 | CoglColor warning; 25 | CoglColor error; 26 | CoglColor success; 27 | }; 28 | 29 | GType st_icon_colors_get_type (void) G_GNUC_CONST; 30 | 31 | StIconColors *st_icon_colors_new (void); 32 | StIconColors *st_icon_colors_ref (StIconColors *colors); 33 | void st_icon_colors_unref (StIconColors *colors); 34 | StIconColors *st_icon_colors_copy (StIconColors *colors); 35 | gboolean st_icon_colors_equal (StIconColors *colors, 36 | StIconColors *other); 37 | 38 | G_END_DECLS 39 | -------------------------------------------------------------------------------- /src/st/st-image-content-private.h: -------------------------------------------------------------------------------- 1 | /* 2 | * st-image-content-private.h: Private StImageContent methods 3 | * 4 | * Copyright 2024 Red Hat, Inc. 5 | * 6 | * This program is free software; you can redistribute it and/or modify it 7 | * under the terms and conditions of the GNU Lesser General Public License, 8 | * version 2.1, as published by the Free Software Foundation. 9 | * 10 | * This program is distributed in the hope it will be useful, but WITHOUT ANY 11 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 12 | * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 13 | * more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #pragma once 20 | 21 | #include "st-image-content.h" 22 | 23 | G_BEGIN_DECLS 24 | 25 | void st_image_content_set_is_symbolic (StImageContent *content, 26 | gboolean is_symbolic); 27 | 28 | gboolean st_image_content_get_is_symbolic (StImageContent *content); 29 | 30 | G_END_DECLS 31 | -------------------------------------------------------------------------------- /src/st/st-scroll-view-private.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | /* 3 | * st-scroll-view-private.h: Private StSrollView methods 4 | * 5 | * Copyright 2023 Red Hat, Inc. 6 | * 7 | * This program is free software; you can redistribute it and/or modify it 8 | * under the terms and conditions of the GNU Lesser General Public License, 9 | * version 2.1, as published by the Free Software Foundation. 10 | * 11 | * This program is distributed in the hope it will be useful, but WITHOUT ANY 12 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 13 | * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 14 | * more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | #pragma once 21 | 22 | #include "st-scroll-view.h" 23 | 24 | G_BEGIN_DECLS 25 | 26 | void st_scroll_view_get_bar_offsets (StScrollView *scroll_view, 27 | float *hoffset, 28 | float *voffset); 29 | 30 | G_END_DECLS 31 | -------------------------------------------------------------------------------- /src/st/st-spinner-content.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Red Hat 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as 6 | * published by the Free Software Foundation, either version 2.1 of 7 | * the License, or (at your option) any later version. 8 | * 9 | * This program is distributed in the hope it will be useful, but WITHOUT ANY 10 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 11 | * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 12 | * more details. 13 | * 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #pragma once 19 | 20 | #include 21 | #include 22 | 23 | #define ST_TYPE_SPINNER_CONTENT (st_spinner_content_get_type ()) 24 | G_DECLARE_FINAL_TYPE (StSpinnerContent, st_spinner_content, 25 | ST, SPINNER_CONTENT, GObject) 26 | 27 | ClutterContent *st_spinner_content_new (void); 28 | -------------------------------------------------------------------------------- /src/st/st-types.h: -------------------------------------------------------------------------------- 1 | /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 | /* 3 | * Copyright 2009 Intel Corporation. 4 | * 5 | * This program is free software; you can redistribute it and/or modify it 6 | * under the terms and conditions of the GNU Lesser General Public License, 7 | * version 2.1, as published by the Free Software Foundation. 8 | * 9 | * This program is distributed in the hope it will be useful, but WITHOUT ANY 10 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 11 | * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 12 | * more details. 13 | * 14 | * You should have received a copy of the GNU Lesser General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | #if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION) 19 | #error "Only can be included directly.h" 20 | #endif 21 | 22 | #pragma once 23 | 24 | #include 25 | #include 26 | 27 | G_BEGIN_DECLS 28 | 29 | typedef enum { 30 | ST_BACKGROUND_SIZE_AUTO, 31 | ST_BACKGROUND_SIZE_CONTAIN, 32 | ST_BACKGROUND_SIZE_COVER, 33 | ST_BACKGROUND_SIZE_FIXED 34 | } StBackgroundSize; 35 | 36 | G_END_DECLS 37 | -------------------------------------------------------------------------------- /src/st/st.h.in: -------------------------------------------------------------------------------- 1 | #define ST_H_INSIDE 1 2 | @includes@ 3 | #undef ST_H_INSIDE 4 | -------------------------------------------------------------------------------- /src/tray/meson.build: -------------------------------------------------------------------------------- 1 | tray_sources = [ 2 | 'na-tray-child.c', 3 | 'na-tray-child.h', 4 | 'na-tray-manager.c', 5 | 'na-tray-manager.h', 6 | 'na-xembed.c', 7 | 'na-xembed.h' 8 | ] 9 | 10 | libtray = static_library('tray', tray_sources, 11 | c_args: ['-DG_LOG_DOMAIN="notification_area"'], 12 | dependencies: [mutter_dep, mtk_dep, xfixes_dep, xext_dep], 13 | include_directories: conf_inc 14 | ) 15 | -------------------------------------------------------------------------------- /subprojects/extensions-app/build-aux/flatpak/org.gnome.Extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "app-id": "org.gnome.Extensions.Devel", 3 | "runtime": "org.gnome.Platform", 4 | "runtime-version": "master", 5 | "sdk": "org.gnome.Sdk", 6 | "command": "gnome-extensions-app", 7 | "tags": ["nightly"], 8 | "finish-args": [ 9 | "--share=ipc", "--socket=fallback-x11", 10 | "--socket=wayland", 11 | "--device=dri", 12 | "--talk-name=org.gnome.SessionManager", 13 | "--talk-name=org.gnome.Shell.Extensions" 14 | ], 15 | "build-options": { 16 | "cflags": "-O2 -g" 17 | }, 18 | "modules": [ 19 | { 20 | "name": "gnome-extensions-app", 21 | "buildsystem": "meson", 22 | "builddir": true, 23 | "subdir": "subprojects/extensions-app", 24 | "config-opts": ["-Dprofile=development"], 25 | "sources": [ 26 | { 27 | "type": "dir", 28 | "path": "../../../.." 29 | }, 30 | { 31 | "type": "git", 32 | "url": "https://gitlab.gnome.org/GNOME/libshew.git", 33 | "dest": "subprojects/extensions-app/subprojects/libshew", 34 | "branch": "main" 35 | }, 36 | { 37 | "type": "shell", 38 | "commands": [ 39 | "subprojects/extensions-app/generate-translations.sh" 40 | ] 41 | } 42 | ] 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /subprojects/extensions-app/build-aux/meson/check-version.py: -------------------------------------------------------------------------------- 1 | ../../../../build-aux/check-version.py -------------------------------------------------------------------------------- /subprojects/extensions-app/data/css/style.css: -------------------------------------------------------------------------------- 1 | .details-popover contents { 2 | padding: 12px; 3 | } 4 | 5 | .details-popover .information { 6 | border-spacing: 6px; 7 | } 8 | 9 | .details-popover .actions { 10 | margin-top: 6px; 11 | border-spacing: 12px; 12 | } 13 | 14 | .details-popover .actions button { 15 | padding: 12px; 16 | } 17 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/dbus-interfaces/org.gnome.Shell.Extensions.xml: -------------------------------------------------------------------------------- 1 | ../../../../data/dbus-interfaces/org.gnome.Shell.Extensions.xml -------------------------------------------------------------------------------- /subprojects/extensions-app/data/icons/meson.build: -------------------------------------------------------------------------------- 1 | install_subdir('hicolor', install_dir: icondir) 2 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/icons/scalable/actions/info-outline-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/icons/scalable/actions/remove-symbolic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/metainfo/extensions-main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/subprojects/extensions-app/data/metainfo/extensions-main.png -------------------------------------------------------------------------------- /subprojects/extensions-app/data/metainfo/extensions-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/subprojects/extensions-app/data/metainfo/extensions-search.png -------------------------------------------------------------------------------- /subprojects/extensions-app/data/metainfo/extensions-update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/subprojects/extensions-app/data/metainfo/extensions-update.png -------------------------------------------------------------------------------- /subprojects/extensions-app/data/metainfo/meson.build: -------------------------------------------------------------------------------- 1 | metainfoconf = configuration_data() 2 | metainfoconf.set('app_id', app_id) 3 | metainfoconf.set('package_name', package_name) 4 | 5 | metainfo = i18n.merge_file( 6 | input: configure_file( 7 | input: base_id + '.metainfo.xml.in', 8 | output: app_id + '.metainfo.xml.in', 9 | configuration: metainfoconf, 10 | ), 11 | output: '@BASENAME@', 12 | po_dir: po_dir, 13 | install: true, 14 | install_dir: metainfodir 15 | ) 16 | 17 | # Validate Appdata 18 | if (appstreamcli.found()) 19 | test('Validating metainfo', 20 | appstreamcli, 21 | args: ['validate', '--no-net', metainfo], 22 | workdir: meson.current_build_dir() 23 | ) 24 | endif 25 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/org.gnome.Extensions.data.gresource.xml.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | css/style.css 5 | 6 | icons/scalable/actions/info-outline-symbolic.svg 7 | icons/scalable/actions/remove-symbolic.svg 8 | icons/scalable/actions/settings-symbolic.svg 9 | icons/scalable/actions/website-symbolic.svg 10 | 11 | ui/shortcuts-dialog.ui 12 | 13 | 14 | 15 | dbus-interfaces/org.gnome.Shell.Extensions.xml 16 | metainfo/@app_id@.metainfo.xml 17 | 18 | ui/extension-row.ui 19 | ui/extensions-window.ui 20 | 21 | 22 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=Extensions 4 | # Translators: Do NOT translate or transliterate this text (this is an icon file name)! 5 | Icon=@app_id@ 6 | Comment=Configure GNOME Shell Extensions 7 | Exec=@bindir@/@prgname@ 8 | DBusActivatable=true 9 | Categories=GNOME;GTK;Utility; 10 | OnlyShowIn=GNOME; 11 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/org.gnome.Extensions.gschema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 800 6 | Window width 7 | 8 | 9 | 500 10 | Window height 11 | 12 | 13 | false 14 | Window maximized 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /subprojects/extensions-app/data/org.gnome.Extensions.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=@app_id@ 3 | Exec=@bindir@/@prgname@ --gapplication-service 4 | -------------------------------------------------------------------------------- /subprojects/extensions-app/generate-translations.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | cd $(dirname $0) 4 | 5 | sed -e '/subprojects\/extensions-app/!d' \ 6 | -e 's:subprojects/extensions-app/::' ../../po/POTFILES.in > po/POTFILES.in 7 | 8 | for l in $( 2 | 3 | 4 | extensionManager.js 5 | extensionRow.js 6 | extensionsWindow.js 7 | main.js 8 | 9 | misc/config.js 10 | misc/extensionUtils.js 11 | 12 | 13 | -------------------------------------------------------------------------------- /subprojects/extensions-app/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/subprojects/extensions-app/logo.png -------------------------------------------------------------------------------- /subprojects/extensions-app/meson_options.txt: -------------------------------------------------------------------------------- 1 | option('package_name', 2 | type: 'string', 3 | description: 'The gettext domain name', 4 | ) 5 | option('profile', 6 | type: 'combo', 7 | choices: [ 8 | 'default', 9 | 'development' 10 | ], 11 | value: 'default' 12 | ) 13 | -------------------------------------------------------------------------------- /subprojects/extensions-app/po/.gitignore: -------------------------------------------------------------------------------- 1 | *.po 2 | *.pot 3 | POTFILES.in 4 | -------------------------------------------------------------------------------- /subprojects/extensions-app/po/LINGUAS: -------------------------------------------------------------------------------- 1 | ../../../po/LINGUAS -------------------------------------------------------------------------------- /subprojects/extensions-app/po/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext(package_name, preset: 'glib') 2 | -------------------------------------------------------------------------------- /subprojects/extensions-app/subprojects/libshew.wrap: -------------------------------------------------------------------------------- 1 | [wrap-git] 2 | url=https://gitlab.gnome.org/GNOME/libshew.git 3 | revision=ed782477cb5164320ae4f731d49bc5d475ab2a52 4 | depth=1 5 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/README.md: -------------------------------------------------------------------------------- 1 | # gnome-extensions-tool 2 | gnome-extensions-tool is a command line utility for managing 3 | GNOME Shell extensions. It is usually built as part of gnome-shell, 4 | but can be used as a stand-alone project as well (for example to 5 | create an extension bundle as part of continuous integration). 6 | 7 | Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. 8 | 9 | ## Building 10 | Before the project can be built stand-alone, the po directory has 11 | to be populated with translations (from gnome-shell). 12 | 13 | To do that, simply run the included script: 14 | ```sh 15 | $ ./generate-translations.sh 16 | ``` 17 | 18 | ## License 19 | gnome-extensions-tool is distributed under the terms of the GNU General Public 20 | License, version 3 or later. See the [COPYING][license] file for details. 21 | 22 | [bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell/issues 23 | [license]: COPYING 24 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/generate-translations.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | cd $(dirname $0) 4 | 5 | sed -e '/subprojects\/extensions-tool/!d' \ 6 | -e 's:subprojects/extensions-tool/::' ../../po/POTFILES.in > po/POTFILES.in 7 | 8 | for l in $( 2 | 3 | 4 | templates/00-plain.desktop 5 | templates/indicator.desktop 6 | templates/indicator/extension.js 7 | templates/indicator/stylesheet.css 8 | templates/plain/extension.js 9 | templates/plain/stylesheet.css 10 | templates/prefs.js 11 | templates/quick-settings.desktop 12 | templates/quick-settings/extension.js 13 | templates/quick-settings/stylesheet.css 14 | 15 | 16 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/meson.build: -------------------------------------------------------------------------------- 1 | config_h = configuration_data() 2 | config_h.set_quoted('GETTEXT_PACKAGE', package_name) 3 | config_h.set_quoted('VERSION', meson.project_version()) 4 | config_h.set_quoted('LOCALEDIR', localedir) 5 | config_h.set('HAVE_BIND_TEXTDOMAIN_CODESET', cc.has_function('bind_textdomain_codeset')) 6 | configure_file( 7 | output: 'config.h', 8 | configuration: config_h, 9 | ) 10 | 11 | sources = [ 12 | 'command-create.c', 13 | 'command-disable.c', 14 | 'command-enable.c', 15 | 'command-info.c', 16 | 'command-install.c', 17 | 'command-list.c', 18 | 'command-pack.c', 19 | 'command-prefs.c', 20 | 'command-reset.c', 21 | 'command-uninstall.c', 22 | 'command-upload.c', 23 | 'main.c' 24 | ] 25 | 26 | subdir('templates') 27 | 28 | resources = gnome.compile_resources('resources', 29 | 'gnome-extensions-tool.gresource.xml', 30 | source_dir: ['.', meson.current_build_dir()], 31 | dependencies: template_deps, 32 | ) 33 | 34 | executable('gnome-extensions', 35 | sources, resources, 36 | dependencies: [gio_dep, gio_unix_dep, autoar_dep, json_dep, soup_dep], 37 | install: true 38 | ) 39 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/00-plain.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=Plain 4 | Comment=An empty extension 5 | Path=plain 6 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/indicator.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=Indicator 4 | Comment=Add an icon to the top bar 5 | Path=indicator 6 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/indicator/stylesheet.css: -------------------------------------------------------------------------------- 1 | /* Add your custom extension styling here */ 2 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/meson.build: -------------------------------------------------------------------------------- 1 | template_metas = [ 2 | '00-plain.desktop', 3 | 'indicator.desktop', 4 | 'quick-settings.desktop', 5 | ] 6 | template_deps = [] 7 | foreach template : template_metas 8 | template_deps += i18n.merge_file( 9 | input: template + '.in', 10 | output: template, 11 | po_dir: po_dir, 12 | type: 'desktop', 13 | ) 14 | endforeach 15 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/plain/extension.js: -------------------------------------------------------------------------------- 1 | /* extension.js 2 | * 3 | * This program is free software: you can redistribute it and/or modify 4 | * it under the terms of the GNU General Public License as published by 5 | * the Free Software Foundation, either version 2 of the License, or 6 | * (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | * SPDX-License-Identifier: GPL-2.0-or-later 17 | */ 18 | import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; 19 | 20 | export default class PlainExampleExtension extends Extension { 21 | enable() { 22 | } 23 | 24 | disable() { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/plain/stylesheet.css: -------------------------------------------------------------------------------- 1 | /* Add your custom extension styling here */ 2 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/quick-settings.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=Quick Settings Item 4 | Comment=Add an item to quick settings 5 | Path=quick-settings 6 | -------------------------------------------------------------------------------- /subprojects/extensions-tool/src/templates/quick-settings/stylesheet.css: -------------------------------------------------------------------------------- 1 | /* Add your custom extension styling here */ 2 | -------------------------------------------------------------------------------- /subprojects/gi-docgen.wrap: -------------------------------------------------------------------------------- 1 | [wrap-git] 2 | directory=gi-docgen 3 | url=https://gitlab.gnome.org/GNOME/gi-docgen.git 4 | push-url=ssh://git@gitlab.gnome.org:GNOME/gi-docgen.git 5 | revision=main 6 | depth=1 7 | 8 | [provide] 9 | program_names = gi-docgen 10 | -------------------------------------------------------------------------------- /subprojects/gvc.wrap: -------------------------------------------------------------------------------- 1 | [wrap-git] 2 | directory=gvc 3 | url=https://gitlab.gnome.org/GNOME/libgnome-volume-control.git 4 | push-url=ssh://git@gitlab.gnome.org:GNOME/libgnome-volume-control.git 5 | revision=5f9768a2eac29c1ed56f1fbb449a77a3523683b6 6 | depth=1 7 | -------------------------------------------------------------------------------- /subprojects/jasmine-gjs.wrap: -------------------------------------------------------------------------------- 1 | [wrap-git] 2 | directory=jasmine-gjs 3 | url=https://github.com/ptomato/jasmine-gjs.git 4 | revision=856465dddbd92e82e574891e1ebc79e17d7b708a 5 | 6 | [provide] 7 | program_names = jasmine 8 | -------------------------------------------------------------------------------- /subprojects/libshew.wrap: -------------------------------------------------------------------------------- 1 | [wrap-git] 2 | url=https://gitlab.gnome.org/GNOME/libshew.git 3 | revision=ed782477cb5164320ae4f731d49bc5d475ab2a52 4 | depth=1 5 | -------------------------------------------------------------------------------- /tests/data/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/tests/data/background.png -------------------------------------------------------------------------------- /tests/gnome-shell-dbus-runner.py.in: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys 4 | 5 | sys.path.insert(1, '@MUTTER_TEST_PKGDATADIR@') 6 | sys.path.insert(2, '@SRCDIR@') 7 | 8 | from mutter_dbusrunner import meta_run 9 | from gnomeshell_dbusrunner import GnomeShellDBusRunner 10 | 11 | if __name__ == '__main__': 12 | result = meta_run(GnomeShellDBusRunner) 13 | sys.exit(result) 14 | -------------------------------------------------------------------------------- /tests/shell/closeWithActiveWindows.js: -------------------------------------------------------------------------------- 1 | /* eslint camelcase: ["error", { properties: "never", allow: ["^script_", "^malloc", "^glx", "^clutter"] }] */ 2 | 3 | import Clutter from 'gi://Clutter'; 4 | 5 | import * as Main from 'resource:///org/gnome/shell/ui/main.js'; 6 | import * as Scripting from 'resource:///org/gnome/shell/ui/scripting.js'; 7 | 8 | /** Run test. */ 9 | export async function run() { 10 | /* Make created windows remain visible during exit. */ 11 | await Scripting.disableHelperAutoExit(); 12 | 13 | const seat = global.stage.context.get_backend().get_default_seat(); 14 | const virtualDevice_ = 15 | seat.create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); 16 | 17 | Main.overview.hide(); 18 | await Scripting.waitLeisure(); 19 | await Scripting.sleep(1000); 20 | 21 | await Scripting.createTestWindow({ 22 | width: 640, 23 | height: 480, 24 | textInput: true, 25 | }); 26 | 27 | await Scripting.waitTestWindows(); 28 | await Scripting.waitLeisure(); 29 | await Scripting.sleep(1000); 30 | } 31 | -------------------------------------------------------------------------------- /tests/unit/fixtures/datadirs/home/gnome-shell/collect-datadirs/file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/tests/unit/fixtures/datadirs/home/gnome-shell/collect-datadirs/file -------------------------------------------------------------------------------- /tests/unit/fixtures/datadirs/system/gnome-shell/collect-datadirs/file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/tests/unit/fixtures/datadirs/system/gnome-shell/collect-datadirs/file -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/empty/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/tests/unit/fixtures/extensions/empty/.gitignore -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/invalid-shell-version1/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "invalid-shell-version1", 3 | "name": "Some Name", 4 | "description": "Some Description", 5 | "shell-version": "45" 6 | } 7 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/invalid-shell-version2/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "invalid-shell-version2", 3 | "name": "Some Name", 4 | "description": "Some Description", 5 | "shell-version": [ 6 | 45, 7 | 46 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/invalid-uuid/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": {}, 3 | "name": "Some Name", 4 | "description": "Some Description", 5 | "shell-version": [ 6 | "45", 7 | "46" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/invalid/metadata.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GNOME/gnome-shell/9d904a804e73c97a1ecde406f395cd77a53f10e7/tests/unit/fixtures/extensions/invalid/metadata.json -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/missing-description/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "missing-description", 3 | "name": "Some Name", 4 | "shell-version": [ 5 | "45", 6 | "46" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/missing-name/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "missing-name", 3 | "description": "Some Description", 4 | "shell-version": [ 5 | "45", 6 | "46" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/missing-shell-version/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "missing-shell-version", 3 | "name": "Some Name", 4 | "description": "Some Description" 5 | } 6 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/missing-uuid/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Some Name", 3 | "description": "Some Description", 4 | "shell-version": [ 5 | "45", 6 | "46" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/valid/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "valid", 3 | "name": "Some Name", 4 | "description": "Some Description", 5 | "shell-version": [ 6 | "45", 7 | "46" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /tests/unit/fixtures/extensions/wrong-uuid/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "uuid": "some-uuid", 3 | "name": "Some Name", 4 | "description": "Some Description", 5 | "shell-version": [ 6 | "45", 7 | "46" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /tests/unit/params.js: -------------------------------------------------------------------------------- 1 | import * as Params from 'resource:///org/gnome/shell/misc/params.js'; 2 | 3 | describe('Params.parse()', () => { 4 | const defaults = { 5 | foo: 'This is a test', 6 | bar: null, 7 | baz: 42, 8 | }; 9 | 10 | it('applies default values', () => { 11 | expect(Params.parse(null, defaults)).toEqual(defaults); 12 | }); 13 | 14 | it('applies provided params', () => { 15 | expect(Params.parse({bar: 23}, defaults)) 16 | .toEqual({foo: 'This is a test', bar: 23, baz: 42}); 17 | }); 18 | 19 | it('does not allow extra args by default', () => { 20 | expect(() => Params.parse({extraArg: 'quz'}, defaults)).toThrow(); 21 | }); 22 | 23 | it('does allow extra args when requested', () => { 24 | expect(Params.parse({extraArg: 'quz'}, defaults, true)) 25 | .toEqual({foo: 'This is a test', bar: null, baz: 42, extraArg: 'quz'}); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /tools/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gnome-shell-dev-scripts", 3 | "version": "1.0.0", 4 | "license": "MIT OR LGPL-3.0-or-later", 5 | "type": "module", 6 | "private": true, 7 | "scripts": { 8 | "lint": "cd .. && ci-run-eslint" 9 | }, 10 | "dependencies": { 11 | "ci-run-eslint": "git+https://gitlab.gnome.org/World/javascript/ci-run-eslint.git#179fcc1f095d2b579ffe454505946bcad7f6a230", 12 | "eslint-config-gnome": "git+https://gitlab.gnome.org/World/javascript/eslint-config-gnome.git#c479d059e8d9ea99c3b53c2ea43abf7fdb05eb51" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tools/run-eslint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # SPDX-License-Identifier: MIT OR LGPL-3.0-or-later 3 | # SPDX-FileCopyrightText: 2020 Philip Chimento 4 | # SPDX-FileCopyrightText: 2025 Florian Müllner 5 | 6 | srcdir=$(dirname -- "$0") 7 | 8 | cd $srcdir 9 | [ ! -d node_modules ] && npm clean-install 10 | # Link in project root to make imports work properly 11 | [ ! -e ../node_modules ] && ln -s $srcdir/node_modules ../node_modules 12 | npm run lint -- "$@" 13 | --------------------------------------------------------------------------------