)]}'
{
  "commit": "97c11cf89a60ae7ed7b7597716d07c04602ba16c",
  "tree": "fab009a51b06f7977f4a544f57cd9fce5aaedd67",
  "parents": [
    "a2bd0045b5a77d471254e1a54379510a08380bb8"
  ],
  "author": {
    "name": "Matthew Kosarek",
    "email": "matt.kosarek@canonical.com",
    "time": "Fri Sep 26 09:37:02 2025 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Sep 26 13:37:02 2025 +0000"
  },
  "message": "Implement Regular Windows for the win32 framework + add an example application for regular windows (#173715)\n\n## What\u0027s new?\n- Implement and test `_window_win32.dart`, the Win32 implementation of\n`_window.dart` :tada:\n- Wrote a bunch of tests in `window_win32_test.dart` which uses a mock\nAPI barrier to mock the native Win32 layer\n- Update `BaseWindowController` to extend `ChangeNotifier` and use it to\ninform the `WindowScope` of when things change\n- Made `RegularWindowController.empty()` a non-internal constructor, as\nit is needed by implementations\n- Added a _large_ example application for windowing where users can test\nout different windowing concepts and see how they work!\n\nTo test, simply run the tests or try out the example app!\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 [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 documentation (doc comments with `///`).\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": "b1ec9d5418e4288a2d56fa12c75070e93bafb6be",
      "old_mode": 33188,
      "old_path": ".ci.yaml",
      "new_id": "7cb993fb3c0f6ba272e49895658101d7c7b09c87",
      "new_mode": 33188,
      "new_path": ".ci.yaml"
    },
    {
      "type": "modify",
      "old_id": "c8dfc6a57762d359b1b180e813e5b691adab050d",
      "old_mode": 33188,
      "old_path": "TESTOWNERS",
      "new_id": "77b58aa7ae6d69340789ef6209fb5044801c5e35",
      "new_mode": 33188,
      "new_path": "TESTOWNERS"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d682f2f4648e6f32f5f1dbdcbdecc57f3e45947f",
      "new_mode": 33188,
      "new_path": "dev/devicelab/bin/tasks/windowing_test_windows.dart"
    },
    {
      "type": "modify",
      "old_id": "bae536b35146881f8101f7957a1aad9386f8077a",
      "old_mode": 33188,
      "old_path": "dev/devicelab/lib/tasks/integration_tests.dart",
      "new_id": "f95b9311a3913b2fda60a4ee3910a80dd59b35f8",
      "new_mode": 33188,
      "new_path": "dev/devicelab/lib/tasks/integration_tests.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3820a95c65c3e5983cc66d481e2e68706a750090",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/.gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "873e7828de70391a63f767daf828b82276acbf73",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/.metadata"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c2808e44c089d4fb167e904fa01f4ac0c3c86a9a",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f16eeada921c79be466e432e9fad6c45f9ef7f64",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/analysis_options.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5ef97c973fc5261ab6d77fa1776a2298bffa7293",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/lib/main.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b05793ba8dd4021e828cd63d02b06d7bf4b84cec",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/pubspec.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "872f36024765302492af599343440bd6483bfd3c",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/test_driver/main_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d492d0d98c8fdc9f93ad2543bb4f531803e9df72",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/.gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4e85c1d42ac53db5bf094c43a5a282a11238ae41",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "903f4899d6fced0eb941e159f7322b21b320c40c",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/flutter/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "394917c053a04daa76d8b94f0a02db0bd99e1034",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "88669f87b35864082699861e29c5bec250df6b98",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/Runner.rc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "252aa267868b66dcc0805718bf85d561f027feb6",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/flutter_window.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bbc5836c018a235235e8094ab411d98e1c5443fa",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/flutter_window.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5621ff154d8814c9639ce85184cf05548c07345c",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/main.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c245ff19cb5805345a3d3265122298cb01b9d71f",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/resource.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "153653e8d67f81b901d28257a65908f3278e058d",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/runner.exe.manifest"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "02f43627405c4a6bf01f3f2c7d4500b679570dc2",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/utils.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "54414c989ba716f78f3640e5407dd8ac74284aef",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/utils.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "14a183d7eaa272a6faf6cc8811639b68142331fa",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/win32_window.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bb93e8879162ee652a0af7e428d938ad027ddcd7",
      "new_mode": 33188,
      "new_path": "dev/integration_tests/windowing_test/windows/runner/win32_window.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "79c113f9b50178eefaedb999950fa206eaf6d645",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/.gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c9660e951c9227471de8c9d469eeecd8353d3b38",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/.metadata"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "23c3d3182ecab9618585cccbdefac6299005245f",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0d2902135caece481a035652d88970c80e29cc7e",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/analysis_options.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c33e1d12e48deff0c9828fb9ec722a1620a9e208",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/main_window.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2465c21545d0e57e6bbb8a2698563173f48029d7",
      "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": "150c1cc0975ef8e228de006bf19d82f2938272b2",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/regular_window_content.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7a5a16f125f90078edfb72a65c15a6a0087acedd",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/regular_window_edit_dialog.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f5e2212ffc044e439fa5234b3e0090b0bbbd04e6",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/rotated_wire_cube.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "72ea7fd59907594ec89296949b90686f028fcbec",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/window_content.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4e31dfc1696a3e3408ba4282982e35515b530829",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/app/window_settings_dialog.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b8a9d1ec6871c075a233cdc58489372444a06e46",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/lib/main.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2cd9b81776581c948f1dd777b428167f6d68e647",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/pubspec.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d492d0d98c8fdc9f93ad2543bb4f531803e9df72",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/.gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a3413e93bae62cf51a3901f25e4105112254ae7e",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a71c6e2c5e4f312b29e453b5c1fcaf26adb05e05",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/flutter/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "697f43451ac08eb42c08d2048ab15d10f2ccadb8",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d9d3832510220d30aef49ae62cd9e0fa326f7645",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/Runner.rc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "11a76c8ceffa27f66303173569c0c1819e66fd73",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/main.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "69cacf3cead962a5dfce4095fdad731773893e83",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/resource.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "153653e8d67f81b901d28257a65908f3278e058d",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/runner.exe.manifest"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6abcd650420706858d2bff4ec04d4fbd993b4652",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/utils.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "54414c989ba716f78f3640e5407dd8ac74284aef",
      "new_mode": 33188,
      "new_path": "examples/multiple_windows/windows/runner/utils.h"
    },
    {
      "type": "modify",
      "old_id": "283d43bf6edef02e90508c3344b509aeada90b52",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/foundation/_features.dart",
      "new_id": "f9a6aca9624030fec7b30a8a7117a9ae5fd64544",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/foundation/_features.dart"
    },
    {
      "type": "modify",
      "old_id": "9aa703a83e86dee56c6b62e135dfa8e82d9abeca",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/_window.dart",
      "new_id": "5540b8ef6b82701627eef2204380b3e9736f9d44",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/_window.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "071a58b1741e98cc7648052dde606a25097a5c87",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/_window_io.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "da3ddc73d87bde0451b7550d0fd16cb1c9ab73a1",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/_window_web.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1d6a81c3ccfe7e2f934a8b2748aa1db1895f64e4",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/_window_win32.dart"
    },
    {
      "type": "modify",
      "old_id": "61e80300aad3c70f6e7772ad6572524c6cc32478",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/binding.dart",
      "new_id": "4152d0fd91dfab30a163b9d762d1dae640abbaa9",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/binding.dart"
    },
    {
      "type": "modify",
      "old_id": "aec8eef1ca5103a06d8ff04d85b38c783b068495",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/widgets/windowing_test.dart",
      "new_id": "ca8995bed2da114d0500638cc0ffc0254bed6f7e",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/widgets/windowing_test.dart"
    },
    {
      "type": "modify",
      "old_id": "514894229475e106cd17caf1f2f18f6770d1c965",
      "old_mode": 33188,
      "old_path": "packages/flutter_test/lib/src/window.dart",
      "new_id": "78e7af53eb5dc81cf69999f6d77c713b809846fb",
      "new_mode": 33188,
      "new_path": "packages/flutter_test/lib/src/window.dart"
    }
  ]
}
