blob: b2aae25958a16ec2ddc9683687a1e926e8d19631 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/windows/window_proc_delegate_manager.h"
#include "flutter/shell/platform/embedder/embedder.h"
namespace flutter {
WindowProcDelegateManager::WindowProcDelegateManager() = default;
WindowProcDelegateManager::~WindowProcDelegateManager() = default;
void WindowProcDelegateManager::RegisterTopLevelWindowProcDelegate(
FlutterDesktopWindowProcCallback delegate,
void* user_data) {
top_level_window_proc_handlers_[delegate] = user_data;
}
void WindowProcDelegateManager::UnregisterTopLevelWindowProcDelegate(
FlutterDesktopWindowProcCallback delegate) {
top_level_window_proc_handlers_.erase(delegate);
}
std::optional<LRESULT> WindowProcDelegateManager::OnTopLevelWindowProc(
HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam) {
std::optional<LRESULT> result;
for (const auto& [handler, user_data] : top_level_window_proc_handlers_) {
LPARAM handler_result;
// Stop as soon as any delegate indicates that it has handled the message.
if (handler(hwnd, message, wparam, lparam, user_data, &handler_result)) {
result = handler_result;
break;
}
}
return result;
}
} // namespace flutter