)]}'
{
  "commit": "97eacadd8dba0b0b3a47a9182ebbcbbf3c271cbb",
  "tree": "7f002e7bff6864bdb6cfdaba8ca56102ed0644d0",
  "parents": [
    "78052b8c6c8ce5f0be1c55a015cba4d83c8a6399"
  ],
  "author": {
    "name": "Matthew Kosarek",
    "email": "matt.kosarek@canonical.com",
    "time": "Fri Oct 09 13:00:10 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Oct 09 13:00:10 2026 +0000"
  },
  "message": "Implement satellite windows on Win32 (#192939)\n\nThis pull request implements satellite windows for Win32 :satellite:\n\n## What\u0027s new?\n\n- Moved `AlignOriginWithFrame` to `HostWindow`\n- Moved `GetInitialWindowSize` to `HostWindow`\n- Add WindowArchetype::kSatellite.\n- Add HostWindowSatellite, deriving from HostWindowSized. Fixed-size\nsatellites resolve their placement synchronously during construction so\nthe window is created at its target position; sized-to-content\nsatellites position from ApplyContentSize after the first frame. Both\npaths align the window frame, rather than the window rectangle, with the\npositioner\u0027s origin.\n- Add HostWindow::CreateSatelliteWindow\n- Propagate parent movement on `WM_WINDOWPOSCHANGED` to satellites in\norder to move them with their parent\n- Reject reparenting that would make a satellite its own ancestor\n- Implement SatelliteWindowControllerWin32 and its FFI bindings\n- Add satellite windows to the example application\n\n## How to test?\nRun the multiple windows example application and play with satellites\nthere :tada:\n\n## Pre-launch Checklist\n\n- [x] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [x] I read the [AI contribution guidelines] and understand my\nresponsibilities, or I am not using AI tools.\n- [x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [x] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [x] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\n- [x] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [x] All existing and new tests are passing.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d3b72bb1d92315f9f22836dfcb3d32dd8d3632a7",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/common/windowing.h",
      "new_id": "af21ba4545b0d59cad95694288b8c94a949283e1",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/common/windowing.h"
    },
    {
      "type": "modify",
      "old_id": "a6af78f4f44ac3143c4b77b7a23399286f8c06d5",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/BUILD.gn",
      "new_id": "60cee67b11e68e6534318651ea405accd11a07c7",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "d89b11085d286346c90b3d3877da19f8db2b9433",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window.cc",
      "new_id": "0313258f6f9828fcf73d5f179e8468d91436122b",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window.cc"
    },
    {
      "type": "modify",
      "old_id": "c31f7961892d84869cbc797b1c00f281e47a39db",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window.h",
      "new_id": "96b8d3699978274f90c0654fc5f6dee3cb1b84ca",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window.h"
    },
    {
      "type": "modify",
      "old_id": "b9b0a67f7d55bb9db59fcda06898cc4ee1164c7d",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window_dialog.cc",
      "new_id": "d071f0ec0934aab211b21875386364413780ab01",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_dialog.cc"
    },
    {
      "type": "modify",
      "old_id": "387338d962f8f1ffeb603fc651e6832066f119f6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window_popup.cc",
      "new_id": "6ffc9d0cd6cc1e6dd76b056496112856a66efdde",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_popup.cc"
    },
    {
      "type": "modify",
      "old_id": "02ccaad7e11f648ecbd5c93dcf58f20d7f88c24a",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window_regular.cc",
      "new_id": "55551831191d8eeeed060643c11a326fe6c63b34",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_regular.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8334bf8780dc0bf79e57ea451c5eed9433567606",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_satellite.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a25c71e1c9e6130fbd2cf4dbfaadc4c836d449be",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_satellite.h"
    },
    {
      "type": "modify",
      "old_id": "37bf89a6bbb2c1624b1f8c8706fcf10b5a5534f3",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window_sized.cc",
      "new_id": "ba99effcd7cdf929e33ed3562693ef30f0df1620",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_sized.cc"
    },
    {
      "type": "modify",
      "old_id": "4072baf8ec96b4faeb83e226623ff564ed583a47",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window_sized.h",
      "new_id": "0c5c862f9cab5677e4bd78b19150abdb777cc658",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_sized.h"
    },
    {
      "type": "modify",
      "old_id": "f02c73ec09db512af4ab882031bfe446895b0c25",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/host_window_tooltip.cc",
      "new_id": "65a71df91bf55234343621be4c83f93b83e37076",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/host_window_tooltip.cc"
    },
    {
      "type": "modify",
      "old_id": "75d86fd5f78c669a1964d6c9c75b154119413964",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/window_manager.cc",
      "new_id": "b569fe26339635dad181c666737509adad2c9946",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/window_manager.cc"
    },
    {
      "type": "modify",
      "old_id": "91a59b1c84d612efcc9f6329dd37417a9db21a94",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/window_manager.h",
      "new_id": "61220883b265296adc13dcb7169a3c589ae2e1a9",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/window_manager.h"
    },
    {
      "type": "modify",
      "old_id": "f8749c2306d90445ec81d1c3d8af5da67630bfd7",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/windows/window_manager_unittests.cc",
      "new_id": "3468a39b830101e2e936bc098c200401d8823415",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/windows/window_manager_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "40c023851e9c0ce3c02c95cc6992c0ed23c3ff49",
      "old_mode": 33188,
      "old_path": "examples/multiple_windows/lib/app/main_window.dart",
      "new_id": "6ea2b75101ce953ee030a341053a3ba113bf358e",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/main_window.dart"
    },
    {
      "type": "modify",
      "old_id": "7e481e778cd11a85e0d8e4e0bb02d7fc3651b5f9",
      "old_mode": 33188,
      "old_path": "examples/multiple_windows/lib/app/models.dart",
      "new_id": "173021d11cdbf1ed7a33a5f1826ebc861864a164",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/models.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d570db9569b9bf33a589470ac310cc42e701f9a6",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/satellite_window_content.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "59f008214a202f44d345b69bdea3cd69c72451dc",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/satellite_window_edit_dialog.dart"
    },
    {
      "type": "modify",
      "old_id": "2df4cbb401de0da7e36391cc3410b1b8daf7fa06",
      "old_mode": 33188,
      "old_path": "examples/multiple_windows/lib/app/window_content.dart",
      "new_id": "01951d9c5d24eec545e7ac473b540a4eed102b60",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/window_content.dart"
    },
    {
      "type": "modify",
      "old_id": "84f02d3699c66676cc8e9f06340e74dbaf8c63d3",
      "old_mode": 33188,
      "old_path": "examples/multiple_windows/lib/app/window_settings_dialog.dart",
      "new_id": "c1e24d51c07be558eec902ef975a2efb7d935a13",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/window_settings_dialog.dart"
    },
    {
      "type": "modify",
      "old_id": "fb7608aa181593cb261f61ed4bdbbe7e38169e13",
      "old_mode": 33188,
      "old_path": "examples/multiple_windows/test/multiple_windows_test.dart",
      "new_id": "67ebea732a1e53a04dbaadb16b8d994a4e54c6dd",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/test/multiple_windows_test.dart"
    },
    {
      "type": "modify",
      "old_id": "c72aa40fb60f98c6590dce174d53a334b3a249c5",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/_window_win32.dart",
      "new_id": "ad4794050f47d4fdab4a63d3c4ac9706c3626c39",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/_window_win32.dart"
    }
  ]
}
