position the popup on the correct screen (see #10462) [backport of r58592 and r58598 from trunk]
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@61466 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -34,6 +34,7 @@
|
|||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#endif //WX_PRECOMP
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/display.h"
|
||||||
#include "wx/recguard.h"
|
#include "wx/recguard.h"
|
||||||
|
|
||||||
#ifdef __WXUNIVERSAL__
|
#ifdef __WXUNIVERSAL__
|
||||||
@@ -134,13 +135,31 @@ bool wxPopupWindowBase::Create(wxWindow* WXUNUSED(parent), int WXUNUSED(flags))
|
|||||||
void wxPopupWindowBase::Position(const wxPoint& ptOrigin,
|
void wxPopupWindowBase::Position(const wxPoint& ptOrigin,
|
||||||
const wxSize& size)
|
const wxSize& size)
|
||||||
{
|
{
|
||||||
wxSize sizeScreen = wxGetDisplaySize(),
|
// determine the position and size of the screen we clamp the popup to
|
||||||
sizeSelf = GetSize();
|
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
|
// is there enough space to put the popup below the window (where we put it
|
||||||
// by default)?
|
// by default)?
|
||||||
wxCoord y = ptOrigin.y + size.y;
|
wxCoord y = ptOrigin.y + size.y;
|
||||||
if ( y + sizeSelf.y > sizeScreen.y )
|
if ( y + sizeSelf.y > posScreen.y + sizeScreen.y )
|
||||||
{
|
{
|
||||||
// check if there is enough space above
|
// check if there is enough space above
|
||||||
if ( ptOrigin.y > sizeSelf.y )
|
if ( ptOrigin.y > sizeSelf.y )
|
||||||
@@ -164,7 +183,7 @@ void wxPopupWindowBase::Position(const wxPoint& ptOrigin,
|
|||||||
x += size.x;
|
x += size.x;
|
||||||
|
|
||||||
|
|
||||||
if ( x + sizeSelf.x > sizeScreen.x )
|
if ( x + sizeSelf.x > posScreen.x + sizeScreen.x )
|
||||||
{
|
{
|
||||||
// check if there is enough space to the left
|
// check if there is enough space to the left
|
||||||
if ( ptOrigin.x > sizeSelf.x )
|
if ( ptOrigin.x > sizeSelf.x )
|
||||||
|
Reference in New Issue
Block a user