position the popup on the correct screen (see #10462)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58592 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
1f0539a4a2
commit
2ac51e161d
@ -34,6 +34,7 @@
|
||||
#include "wx/log.h"
|
||||
#endif //WX_PRECOMP
|
||||
|
||||
#include "wx/display.h"
|
||||
#include "wx/recguard.h"
|
||||
|
||||
#ifdef __WXUNIVERSAL__
|
||||
@ -134,8 +135,26 @@ bool wxPopupWindowBase::Create(wxWindow* WXUNUSED(parent), int WXUNUSED(flags))
|
||||
void wxPopupWindowBase::Position(const wxPoint& ptOrigin,
|
||||
const wxSize& size)
|
||||
{
|
||||
wxSize sizeScreen = wxGetDisplaySize(),
|
||||
sizeSelf = GetSize();
|
||||
// determine the position and size of the screen we clamp the popup to
|
||||
wxPoint posScreen;
|
||||
wxSize sizeScreen;
|
||||
|
||||
const int displayNum = wxDisplay::GetFromPoint(ptOrigin);
|
||||
if ( displayNum != wxNOT_FOUND )
|
||||
{
|
||||
const wxRect rectScreen = wxDisplay(displayNum).GetGeometry();
|
||||
posScreen = rectScreen.GetPosition();
|
||||
sizeScreen = rectScreen.GetSize();
|
||||
}
|
||||
else // outside of any display?
|
||||
{
|
||||
// just use the primary one then
|
||||
posScreen = wxPoint(0, 0);
|
||||
sizeScreen = wxGetDisplaySize();
|
||||
}
|
||||
|
||||
|
||||
const wxSize sizeSelf = GetSize();
|
||||
|
||||
// is there enough space to put the popup below the window (where we put it
|
||||
// by default)?
|
||||
@ -153,7 +172,7 @@ void wxPopupWindowBase::Position(const wxPoint& ptOrigin,
|
||||
|
||||
// now check left/right too
|
||||
wxCoord x = ptOrigin.x;
|
||||
|
||||
|
||||
if ( wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft )
|
||||
{
|
||||
// shift the window to the left instead of the right.
|
||||
@ -163,7 +182,7 @@ void wxPopupWindowBase::Position(const wxPoint& ptOrigin,
|
||||
else
|
||||
x += size.x;
|
||||
|
||||
|
||||
|
||||
if ( x + sizeSelf.x > sizeScreen.x )
|
||||
{
|
||||
// check if there is enough space to the left
|
||||
|
Loading…
Reference in New Issue
Block a user