| // 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. |
| |
| #ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_WIN32_WINDOW_PROC_DELEGATE_MANAGER_H_ |
| #define FLUTTER_SHELL_PLATFORM_WINDOWS_WIN32_WINDOW_PROC_DELEGATE_MANAGER_H_ |
| |
| #include <Windows.h> |
| |
| #include <map> |
| #include <optional> |
| |
| #include "flutter/fml/macros.h" |
| #include "flutter/shell/platform/windows/public/flutter_windows.h" |
| |
| namespace flutter { |
| |
| // Handles registration, unregistration, and dispatching for WindowProc |
| // delegation. |
| class WindowProcDelegateManager { |
| public: |
| explicit WindowProcDelegateManager(); |
| ~WindowProcDelegateManager(); |
| |
| // Adds |delegate| as a delegate to be called for |OnTopLevelWindowProc|. |
| // |
| // Multiple calls with the same |delegate| will replace the previous |
| // registration, even if |user_data| is different. |
| void RegisterTopLevelWindowProcDelegate( |
| FlutterDesktopWindowProcCallback delegate, |
| void* user_data); |
| |
| // Unregisters |delegate| as a delate for |OnTopLevelWindowProc|. |
| void UnregisterTopLevelWindowProcDelegate( |
| FlutterDesktopWindowProcCallback delegate); |
| |
| // Calls any registered WindowProc delegates. |
| // |
| // If a result is returned, then the message was handled in such a way that |
| // further handling should not be done. |
| std::optional<LRESULT> OnTopLevelWindowProc(HWND hwnd, |
| UINT message, |
| WPARAM wparam, |
| LPARAM lparam); |
| |
| private: |
| std::map<FlutterDesktopWindowProcCallback, void*> |
| top_level_window_proc_handlers_; |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(WindowProcDelegateManager); |
| }; |
| |
| } // namespace flutter |
| |
| #endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WIN32_WINDOW_PROC_DELEGATE_MANAGER_H_ |