10DWORD GetWindowStyleForDialog(std::optional<HWND>
const& owner_window) {
11 DWORD window_style = WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME;
14 window_style |= WS_MINIMIZEBOX | WS_SYSMENU;
20DWORD GetExtendedWindowStyleForDialog(std::optional<HWND>
const& owner_window) {
21 DWORD extended_window_style = WS_EX_DLGMODALFRAME;
25 if (GetWindowLongPtr(*owner_window, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) {
26 extended_window_style |= WS_EX_TOOLWINDOW;
29 return extended_window_style;
40 std::optional<HWND>
const& owner_window)
45 GetWindowStyleForDialog(owner_window),
46 GetExtendedWindowStyleForDialog(owner_window),
48 GetInitialRect(
engine, preferred_size, constraints, owner_window),
52 if (owner_window ==
nullptr) {
53 if (HMENU hMenu = GetSystemMenu(hwnd, FALSE)) {
54 EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
58 if (owner_window !=
nullptr) {
66 std::optional<HWND>
const& owner_window) {
67 auto const window_style = GetWindowStyleForDialog(owner_window);
68 auto const extended_window_style =
69 GetExtendedWindowStyleForDialog(owner_window);
70 std::optional<Size>
const window_size =
72 *
engine->windows_proc_table(),
76 extended_window_style, owner_window);
77 Point window_origin = {CW_USEDEFAULT, CW_USEDEFAULT};
78 if (owner_window && window_size.has_value()) {
81 DwmGetWindowAttribute(*owner_window, DWMWA_EXTENDED_FRAME_BOUNDS, &frame,
83 window_origin = {(frame.left + frame.right - window_size->width()) * 0.5,
84 (frame.top + frame.bottom - window_size->height()) * 0.5};
87 return {window_origin,
88 window_size ? *window_size :
Size{CW_USEDEFAULT, CW_USEDEFAULT}};
105 if (LOWORD(wparam) != WA_INACTIVE) {
108 if (!IsWindowEnabled(hwnd)) {
111 SetActiveWindow(enabled_descendant->GetWindowHandle());
124void HostWindowDialog::UpdateModalState() {
136 std::optional<FlutterEngineDisplayId> display_id) {}
HostWindowDialog(WindowManager *window_manager, FlutterWindowsEngine *engine, const WindowSizeRequest &preferred_size, const BoxConstraints &constraints, LPCWSTR title, std::optional< HWND > const &owner_window)
bool GetFullscreen() const override
void SetFullscreen(bool fullscreen, std::optional< FlutterEngineDisplayId > display_id) override
LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) override
HostWindow * GetOwnerWindow() const
void UpdateModalStateLayer()
static void FocusRootViewOf(HostWindow *window)
virtual LRESULT HandleMessage(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
static std::optional< Size > GetWindowSizeForClientSize(WindowsProcTable const &win32, Size const &client_size, std::optional< Size > smallest, std::optional< Size > biggest, DWORD window_style, DWORD extended_window_style, std::optional< HWND > const &owner_hwnd)
HostWindow * FindFirstEnabledDescendant() const
G_BEGIN_DECLS GBytes * message
double preferred_view_height
double preferred_view_width