From d0707882ba2a730f392d68ac88868118f6187b6f Mon Sep 17 00:00:00 2001 From: Leandro Rodrigues Date: Tue, 28 Jul 2026 15:29:19 -0300 Subject: [PATCH 1/3] feat: polish dock behavior and extension review readiness Introduce configurable dock motion profiles with isolated animation state, press feedback, and integration coverage for catalog and transform behavior. Keep Picture-in-Picture windows above normal windows and visible across workspaces while excluding them from dock smart reveal, including the cross-monitor focus case where PiP previously caused the dock to reappear. Expand Capture Tools with movable annotations, deterministic toolbar placement, and stronger unit and Shell integration coverage. Separate production and development extension entry points, modularize Just recipes, verify package contents, and keep developer-only tooling out of the production archive. Harden lifecycle cleanup across Shell modules, document accepted EGO analyzer findings, align metadata and documentation, and add policy checks for GNOME Extensions review readiness. Validated with type checking, linting, formatting, Shexli, 184 unit tests, 22 GNOME Shell integration tests, and production/development package inspections. --- .github/workflows/ci.yml | 15 +- .just/package.just | 78 ++++ .just/test.just | 37 ++ .just/toolbox.just | 65 +++ .just/translation.just | 56 +++ .just/vagrant.just | 27 ++ AGENTS.md | 74 +++- ARCHITECTURE.md | 6 +- CONTRIBUTING.md | 25 +- CREDITS.md | 7 + Containerfile | 1 + EGO_REVIEW.md | 60 +++ README.md | 4 + data/po/pt_BR.po | 4 +- ....shell.extensions.aurora-shell.gschema.xml | 17 +- justfile | 235 +++------- metadata.json | 2 +- package.json | 2 +- sass.config.ts | 22 +- scripts/check-packages.ts | 63 +++ scripts/run-shell-tests.sh | 9 +- scripts/run-vagrant-gnome-shell.sh | 1 + src/capture/annotationModel.ts | 148 ++++++- src/capture/captureTools.ts | 69 +-- src/capture/toolbarPlacement.ts | 110 +++++ src/clipboard/clipboardItem.ts | 8 +- src/core/extensionBase.ts | 52 +++ src/core/lifecycleScope.ts | 10 +- src/desktop/trayIcons/trayContainer.ts | 30 +- src/desktop/trayIcons/trayIcons.ts | 76 ++-- src/device/device.ts | 24 +- src/dock/dock.manifest.ts | 17 + src/dock/dock.ts | 67 ++- src/dock/externalStorageIcon.ts | 113 +++-- src/dock/hotArea.ts | 18 +- src/dock/intellihide.ts | 29 +- src/dock/intellihideState.ts | 31 +- src/dock/motion/catalog.ts | 140 ++++++ src/dock/motion/dashMotionIntegration.ts | 80 ++++ src/dock/motion/easing.ts | 20 + src/dock/motion/iconMotionController.ts | 419 ++++++++++++++++++ src/dock/motion/motionSurface.ts | 198 +++++++++ src/dock/motion/pressInteraction.ts | 50 +++ src/dock/motion/transforms.ts | 194 ++++++++ src/dock/trashIcon.ts | 40 +- src/extension.dev.ts | 40 ++ src/extension.ts | 89 +--- src/panel/auroraMenu.ts | 2 +- src/panel/bluetoothMenu/bluetoothMenu.ts | 2 +- .../meetingClock/calendarServerBackend.ts | 10 +- src/panel/clock/meetingClock/meetingClock.ts | 25 +- src/panel/clock/weatherClock/weatherClock.ts | 21 +- src/panel/volumeMixer/mixerList.ts | 13 +- src/panel/volumeMixer/streamSlider.ts | 2 +- src/patches/appSearchTooltip.ts | 33 +- src/patches/iconWeave.ts | 75 ++-- src/patches/pipOnTop.manifest.ts | 2 +- src/patches/pipOnTop.ts | 165 ++++--- src/patches/pipWindowPolicy.ts | 42 ++ src/patches/velaVpnQuickSettings.ts | 4 +- src/patches/xwaylandIndicator.ts | 2 +- src/privacy/dndOnShare.ts | 2 +- src/privacy/privacyPanel.ts | 4 +- src/shared/ui/dash.ts | 59 ++- src/styles/stylesheet-dark.scss | 13 +- src/styles/stylesheet-light.scss | 13 +- src/theme/themeChanger.ts | 22 +- tests/shell/auroraCaptureTools.js | 54 ++- tests/shell/auroraDock.js | 144 +++++- tests/unit/annotationModel.test.ts | 73 ++- tests/unit/dockMotionCatalog.test.ts | 60 +++ tests/unit/dockMotionPressInteraction.test.ts | 59 +++ tests/unit/dockMotionTransforms.test.ts | 109 +++++ tests/unit/egoPolicy.test.ts | 76 ++++ tests/unit/intellihideState.test.ts | 87 +++- tests/unit/pipWindowPolicy.test.ts | 89 ++++ tests/unit/registry.test.ts | 4 +- tests/unit/toolbarPlacement.test.ts | 99 +++++ 78 files changed, 3499 insertions(+), 748 deletions(-) create mode 100644 .just/package.just create mode 100644 .just/test.just create mode 100644 .just/toolbox.just create mode 100644 .just/translation.just create mode 100644 .just/vagrant.just create mode 100644 EGO_REVIEW.md create mode 100644 scripts/check-packages.ts create mode 100644 src/capture/toolbarPlacement.ts create mode 100644 src/core/extensionBase.ts create mode 100644 src/dock/motion/catalog.ts create mode 100644 src/dock/motion/dashMotionIntegration.ts create mode 100644 src/dock/motion/easing.ts create mode 100644 src/dock/motion/iconMotionController.ts create mode 100644 src/dock/motion/motionSurface.ts create mode 100644 src/dock/motion/pressInteraction.ts create mode 100644 src/dock/motion/transforms.ts create mode 100644 src/extension.dev.ts create mode 100644 src/patches/pipWindowPolicy.ts create mode 100644 tests/unit/dockMotionCatalog.test.ts create mode 100644 tests/unit/dockMotionPressInteraction.test.ts create mode 100644 tests/unit/dockMotionTransforms.test.ts create mode 100644 tests/unit/egoPolicy.test.ts create mode 100644 tests/unit/pipWindowPolicy.test.ts create mode 100644 tests/unit/toolbarPlacement.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b18c3aa..92b60f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -108,7 +108,7 @@ jobs: run: just deps - name: Run unit tests - run: just unit-test + run: just test unit build: name: Build @@ -127,14 +127,16 @@ jobs: - name: Install dependencies run: just deps - - name: Build extension package - run: just package + - name: Build and inspect extension packages + run: just package check - - name: Upload extension zip + - name: Upload extension zips uses: actions/upload-artifact@v7 with: name: extension-zip - path: dist/target/aurora-shell@luminusos.github.io.shell-extension.zip + path: | + dist/target/aurora-shell@luminusos.github.io.shell-extension.zip + dist/target/aurora-shell@luminusos.github.io.development.shell-extension.zip retention-days: 1 integration-tests: @@ -190,3 +192,6 @@ jobs: "$XDG_SESSION_ID" seat0 "$(id -u)" "$(id -un)" true bash scripts/run-shell-tests.sh \ dist/target/aurora-shell@luminusos.github.io.shell-extension.zip + AURORA_DEVTOOLS=1 bash scripts/run-shell-tests.sh \ + dist/target/aurora-shell@luminusos.github.io.development.shell-extension.zip \ + tests/shell/auroraDevTool.js diff --git a/.just/package.just b/.just/package.just new file mode 100644 index 0000000..fcaa32e --- /dev/null +++ b/.just/package.just @@ -0,0 +1,78 @@ +uuid := "aurora-shell@luminusos.github.io" + +# Build the production ZIP. +default: production + +# Build the production ZIP. +production: _build _production + +# Build the DevTool-enabled ZIP. +development: _build _development + +# Build and inspect both ZIPs. +[no-cd] +check: _build _production _development + yarn tsx scripts/check-packages.ts + +[no-cd] +_build: + just build + +[no-cd] +_production: + #!/usr/bin/env bash + set -e + mkdir -p dist/target + cd dist + + extra_sources=() + while IFS= read -r source; do + case "$source" in + dev|extension.dev.js|extension.js|metadata.json|schemas|target) continue ;; + esac + extra_sources+=("--extra-source=$source") + done < <(find . -mindepth 1 -maxdepth 1 -printf '%P\n' | sort) + + gnome-extensions pack . \ + --force \ + --out-dir=target \ + "${extra_sources[@]}" \ + --schema=schemas/org.gnome.shell.extensions.aurora-shell.gschema.xml + + echo "Production package ready." + +[no-cd] +_development: + #!/usr/bin/env bash + set -e + work="$(mktemp -d)" + stage="$work/stage" + target="$work/target" + trap 'rm -rf "$work"' EXIT + + mkdir -p "$stage" "$target" dist/target + cp -a dist/. "$stage/" + rm -rf "$stage/target" + cp "$stage/extension.dev.js" "$stage/extension.js" + cp "$stage/dev/stylesheet.css" "$stage/stylesheet.css" + cp "$stage/dev/stylesheet-light.css" "$stage/stylesheet-light.css" + cp "$stage/dev/stylesheet-dark.css" "$stage/stylesheet-dark.css" + + extra_sources=() + while IFS= read -r source; do + case "$source" in + extension.dev.js|extension.js|metadata.json|schemas|target) continue ;; + esac + extra_sources+=("--extra-source=$source") + done < <(find "$stage" -mindepth 1 -maxdepth 1 -printf '%P\n' | sort) + + gnome-extensions pack "$stage" \ + --force \ + --out-dir="$target" \ + "${extra_sources[@]}" \ + --schema="$stage/schemas/org.gnome.shell.extensions.aurora-shell.gschema.xml" + mv \ + "$target/{{ uuid }}.shell-extension.zip" \ + "dist/target/{{ uuid }}.development.shell-extension.zip" + + echo "Development package ready." diff --git a/.just/test.just b/.just/test.just new file mode 100644 index 0000000..19c7531 --- /dev/null +++ b/.just/test.just @@ -0,0 +1,37 @@ +uuid := "aurora-shell@luminusos.github.io" +production_zip := "dist/target/" + uuid + ".shell-extension.zip" +development_zip := "dist/target/" + uuid + ".development.shell-extension.zip" + +# List the available test commands. +default: + @just --list test + +# Run unit tests. +[no-cd] +unit: + yarn test:unit + +# Run unit tests with coverage. +[no-cd] +coverage: + yarn test:unit:coverage + +# Run one GNOME Shell integration test. +[no-cd] +shell script: + just package production + bash scripts/run-shell-tests.sh {{ production_zip }} {{ script }} + +# Run every production GNOME Shell integration test. +[no-cd] +all: + just package production + bash scripts/run-shell-tests.sh {{ production_zip }} + +# Run the DevTool integration test. +[no-cd] +dev: + just package development + AURORA_DEVTOOLS=1 bash scripts/run-shell-tests.sh \ + {{ development_zip }} \ + tests/shell/auroraDevTool.js diff --git a/.just/toolbox.just b/.just/toolbox.just new file mode 100644 index 0000000..91541e7 --- /dev/null +++ b/.just/toolbox.just @@ -0,0 +1,65 @@ +toolbox_name := env_var_or_default("AURORA_TOOLBOX_NAME", "aurora-shell-devel") +uuid := "aurora-shell@luminusos.github.io" +production_zip := "dist/target/" + uuid + ".shell-extension.zip" +development_zip := "dist/target/" + uuid + ".development.shell-extension.zip" + +# List the available toolbox commands. +default: + @just --list toolbox + +# Create the Fedora development toolbox. +[no-cd] +create: + #!/usr/bin/env bash + set -e + if [ -n "${AURORA_TOOLBOX_IMAGE:-}" ]; then + image="$AURORA_TOOLBOX_IMAGE" + else + image="$(bash scripts/ci-image-name.sh)" + podman build -f Containerfile -t "$image" . + fi + + echo "Creating toolbox '{{ toolbox_name }}' from '$image'..." + toolbox create --image "$image" {{ toolbox_name }} + +# Launch GNOME Shell inside the toolbox. +[no-cd] +run: + bash scripts/run-gnome-shell.sh {{ toolbox_name }} + +# Remove the development toolbox. +[no-cd] +remove: + toolbox rm --force {{ toolbox_name }} + @echo "Removed toolbox '{{ toolbox_name }}'." + +# Run a test inside the toolbox: `test