Improve setting wxSTCPopupWindow size

DoSetSize needs to accept absolute size, because other code can call it.
This commit is contained in:
Maarten Bent
2020-06-01 15:56:15 +02:00
parent 83a98e1a3c
commit 54e0521fd7
2 changed files with 13 additions and 13 deletions

View File

@@ -1906,7 +1906,6 @@ void Window::SetPositionRelative(PRectangle rc, Window relativeTo) {
if (position.y + height > displayRect.GetBottom())
position.y = displayRect.GetBottom() - height;
position = relativeWin->ScreenToClient(position);
wxWindow *window = GETWIN(wid);
window->SetSize(position.x, position.y, width, height);
}
@@ -2219,7 +2218,9 @@ PRectangle Window::GetMonitorRect(Point pt) {
#endif // __WXOSX_COCOA__
wxSTCPopupWindow::wxSTCPopupWindow(wxWindow* parent)
:wxSTCPopupBase(parent), m_lastKnownPosition(wxDefaultPosition)
: wxSTCPopupBase(parent)
, m_relPos(wxDefaultPosition)
, m_absPos(wxDefaultPosition)
{
#if !wxSTC_POPUP_IS_CUSTOM
Bind(wxEVT_SET_FOCUS, &wxSTCPopupWindow::OnFocus, this);
@@ -2270,22 +2271,20 @@ bool wxSTCPopupWindow::AcceptsFocus() const
void wxSTCPopupWindow::DoSetSize(int x, int y, int width, int height, int flags)
{
m_lastKnownPosition = wxPoint(x, y);
wxPoint pos(x, y);
if ( pos.IsFullySpecified() && !m_relPos.IsFullySpecified() )
{
m_relPos = GetParent()->ScreenToClient(pos);
}
// convert coords to screen coords since we're a top-level window
if (x != wxDefaultCoord)
GetParent()->ClientToScreen(&x, NULL);
m_absPos = GetParent()->ClientToScreen(m_relPos);
if (y != wxDefaultCoord)
GetParent()->ClientToScreen(NULL, &y);
wxSTCPopupBase::DoSetSize(x, y, width, height, flags);
wxSTCPopupBase::DoSetSize(m_absPos.x, m_absPos.y, width, height, flags);
}
void wxSTCPopupWindow::OnParentMove(wxMoveEvent& event)
{
if ( m_lastKnownPosition.IsFullySpecified() )
SetPosition(m_lastKnownPosition);
SetPosition(m_absPos);
event.Skip();
}

View File

@@ -150,7 +150,8 @@ protected:
#endif
private:
wxPoint m_lastKnownPosition;
wxPoint m_relPos;
wxPoint m_absPos;
wxWindow* m_tlw;
};