diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 3fa7ffe748..99a0e70d54 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -531,15 +531,6 @@ void BBLTopbar::OnFullScreen(wxAuiToolBarEvent& event) m_frame->Restore(); } else { - wxDisplay display(this); - auto size = display.GetClientArea().GetSize(); -#ifdef __WXMSW__ - HWND hWnd = m_frame->GetHandle(); - RECT borderThickness; - SetRectEmpty(&borderThickness); - AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); - m_frame->SetMaxSize(size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}); -#endif // __WXMSW__ m_normalRect = m_frame->GetRect(); m_frame->Maximize(); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index c8dad01b4a..8be514ecf7 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -396,29 +396,20 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ sizer->SetSizeHints(this); #ifdef WIN32 - auto setMaxSize = [this]() { - wxDisplay display(this); - auto size = display.GetClientArea().GetSize(); - HWND hWnd = GetHandle(); - RECT borderThickness; - SetRectEmpty(&borderThickness); - AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); - SetMaxSize(size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}); - }; - this->Bind(wxEVT_DPI_CHANGED, [setMaxSize](auto & e) { - setMaxSize(); - e.Skip(); - }); - setMaxSize(); - // SetMaximize already position window at left/top corner, even if Windows Task Bar is at left side. - // Not known why, but fix it here + // SetMaximize causes the window to overlap the taskbar, due to the fact this window has wxMAXIMIZE_BOX off + // https://forums.wxwidgets.org/viewtopic.php?t=50634 + // Fix it here this->Bind(wxEVT_MAXIMIZE, [this](auto &e) { wxDisplay display(this); - auto pos = display.GetClientArea().GetPosition(); + auto size = display.GetClientArea().GetSize(); + auto pos = display.GetClientArea().GetPosition(); HWND hWnd = GetHandle(); RECT borderThickness; SetRectEmpty(&borderThickness); AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); + const auto max_size = size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}; + const auto current_size = GetSize(); + SetSize({std::min(max_size.x, current_size.x), std::min(max_size.y, current_size.y)}); Move(pos + wxPoint{borderThickness.left, borderThickness.top}); e.Skip(); });