From 24d2b4f5ba8ceffe55e7520a233ba6b3046aa27e Mon Sep 17 00:00:00 2001 From: Ryan Norton Date: Sun, 7 Nov 2004 00:48:37 +0000 Subject: [PATCH] fix for [ 1020924 ] wx.Display.IsPrimary is wrong git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30327 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/display.h | 4 ++-- include/wx/msw/display.h | 2 ++ src/msw/display.cpp | 26 +++++++++++++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/include/wx/display.h b/include/wx/display.h index c080a21e2e..b85a04471c 100644 --- a/include/wx/display.h +++ b/include/wx/display.h @@ -67,8 +67,8 @@ public: // name may be empty virtual wxString GetName() const = 0; - // display 0 is always the primary display - bool IsPrimary() const { return m_index == 0; } + // display 0 is usually the primary display + virtual bool IsPrimary() const { return m_index == 0; } // enumerate all video modes supported by this display matching the given diff --git a/include/wx/msw/display.h b/include/wx/msw/display.h index 598326e87a..b34635e90d 100644 --- a/include/wx/msw/display.h +++ b/include/wx/msw/display.h @@ -38,6 +38,8 @@ public: virtual wxVideoMode GetCurrentMode() const; virtual bool ChangeMode(const wxVideoMode& mode = wxVideoMode()); + virtual bool IsPrimary() const; + private: // get the display name to use with EnumDisplaySettings() wxString GetNameForEnumSettings() const; diff --git a/src/msw/display.cpp b/src/msw/display.cpp index ba43859eda..2933da9ef7 100644 --- a/src/msw/display.cpp +++ b/src/msw/display.cpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // Name: display.cpp // Purpose: MSW Implementation of wxDisplay class -// Author: Royce Mitchell III +// Author: Royce Mitchell III, Ryan Norton // Modified by: VZ (resolutions enumeration/change support, DirectDraw, ...) // Created: 06/21/02 // RCS-ID: $Id$ @@ -544,6 +544,30 @@ wxString wxDisplay::GetNameForEnumSettings() const return name; } +// ---------------------------------------------------------------------------- +// determine if this is the primary display +// ---------------------------------------------------------------------------- + +bool wxDisplay::IsPrimary() const +{ + wxDisplayInfo& dpyInfo = (*gs_displays)[m_index]; + + MONITORINFOEX monInfo; + wxZeroMemory(monInfo); + monInfo.cbSize = sizeof(monInfo); + + // NB: Cast from MONITORINFOEX* to MONITORINFO* is done because + // Mingw headers - unlike the ones from Microsoft's Platform SDK - + // don't derive the former from the latter in C++ mode and so + // the pointer's type is not converted implicitly. + if ( !::GetMonitorInfo(dpyInfo.m_hmon, (LPMONITORINFO)&monInfo) ) + { + wxLogLastError(_T("GetMonitorInfo")); + } + + return (monInfo.dwFlags & MONITORINFOF_PRIMARY) == MONITORINFOF_PRIMARY; +} + // ---------------------------------------------------------------------------- // video modes enumeration // ----------------------------------------------------------------------------