Unverified Commit ca0ddbbc authored by stuartmorgan's avatar stuartmorgan Committed by GitHub

Add WindowProc delegation to Windows template (#64166)

This wires up the new WindowProc delegation system that allows plugins
to handle top-level window messages (e.g., to control resize behavior).

Fixes #53168
parent c98a64f5
#include "flutter_window.h" #include "flutter_window.h"
#include <optional>
#include "flutter/generated_plugin_registrant.h" #include "flutter/generated_plugin_registrant.h"
FlutterWindow::FlutterWindow(RunLoop* run_loop, FlutterWindow::FlutterWindow(RunLoop* run_loop,
...@@ -34,3 +36,19 @@ void FlutterWindow::OnDestroy() { ...@@ -34,3 +36,19 @@ void FlutterWindow::OnDestroy() {
Win32Window::OnDestroy(); Win32Window::OnDestroy();
} }
LRESULT
FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
WPARAM const wparam,
LPARAM const lparam) noexcept {
// Give Flutter, including plugins, an opporutunity to handle window messages.
if (flutter_controller_) {
std::optional<LRESULT> result =
flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
lparam);
if (result) {
return *result;
}
}
return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
}
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
#include <flutter/dart_project.h> #include <flutter/dart_project.h>
#include <flutter/flutter_view_controller.h> #include <flutter/flutter_view_controller.h>
#include <memory>
#include "run_loop.h" #include "run_loop.h"
#include "win32_window.h" #include "win32_window.h"
#include <memory>
// A window that does nothing but host a Flutter view. // A window that does nothing but host a Flutter view.
class FlutterWindow : public Win32Window { class FlutterWindow : public Win32Window {
public: public:
...@@ -22,6 +22,8 @@ class FlutterWindow : public Win32Window { ...@@ -22,6 +22,8 @@ class FlutterWindow : public Win32Window {
// Win32Window: // Win32Window:
bool OnCreate() override; bool OnCreate() override;
void OnDestroy() override; void OnDestroy() override;
LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
LPARAM const lparam) noexcept override;
private: private:
// The run loop driving events for this window. // The run loop driving events for this window.
......
...@@ -154,13 +154,6 @@ Win32Window::MessageHandler(HWND hwnd, ...@@ -154,13 +154,6 @@ Win32Window::MessageHandler(HWND hwnd,
UINT const message, UINT const message,
WPARAM const wparam, WPARAM const wparam,
LPARAM const lparam) noexcept { LPARAM const lparam) noexcept {
auto window =
reinterpret_cast<Win32Window*>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
if (window == nullptr) {
return 0;
}
switch (message) { switch (message) {
case WM_DESTROY: case WM_DESTROY:
window_handle_ = nullptr; window_handle_ = nullptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment