// Created: 13.05.02
// RCS-ID: $Id$
// Copyright: (c) 2002 Dave Webster <dwebster@bhmi.com>
-// License: wxWindows license
+// License: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#ifndef WX_PRECOMP
#endif //WX_PRECOMP
+#if wxUSE_POPUPWIN
#include "wx/popupwin.h"
-wxWindowList wxPopupWindow::m_svShownPopups;
-
// ============================================================================
// implementation
// ============================================================================
-bool wxPopupWindow::Create(
- wxWindow* pParent
-, int nFlags
-)
+bool wxPopupWindow::Create( wxWindow* pParent,
+ int nFlags )
{
return wxPopupWindowBase::Create(pParent) &&
wxWindow::Create( pParent
);
} // end of wxPopupWindow::Create
-void wxPopupWindow::DoGetPosition(
- int* pnX
-, int* pnY
-) const
+void wxPopupWindow::DoGetPosition( int* pnX,
+ int* pnY ) const
{
//
// The position of a "top level" window such as this should be in
GetParent()->ClientToScreen(pnX, pnY);
} // end of wxPopupWindow::DoGetPosition
-WXDWORD wxPopupWindow::OS2GetStyle(
- long lFlags
-, WXDWORD* dwExstyle
-) const
-{
- WXDWORD dwStyle = wxWindow::OS2GetStyle( lFlags & wxBORDER_MASK
- ,dwExstyle
- );
-
- return dwStyle;
-} // end of wxPopupWindow::OS2GetStyle
-
-bool wxPopupWindow::Show(
- bool bShow
-)
+WXHWND wxPopupWindow::OS2GetParent() const
{
- SWP vSwp;
+ // we must be a child of the desktop to be able to extend beyond the parent
+ // window client area (like the comboboxes drop downs do)
//
- // Skip wxWindow::Show() which calls wxBringWindowToTop(): this results in
- // activating the popup window and stealing the atcivation from our parent
- // which means that the parent frame becomes deactivated when opening a
- // combobox, for example -- definitely not what we want
- //
- if (!wxWindowBase::Show(bShow))
- return FALSE;
-
- if (bShow)
- {
- m_svShownPopups.Append(this);
- }
- else // remove from the shown list
- {
- m_svShownPopups.DeleteObject(this);
- }
- ::WinQueryWindowPos(GetHwnd(), &vSwp);
+ return (WXHWND)HWND_DESKTOP;
+} // end of wxPopupWindow::OS2GetParent
- if (bShow)
- {
- ::WinSetWindowPos( GetHwnd()
- ,HWND_TOP
- ,vSwp.x
- ,vSwp.y
- ,vSwp.cx
- ,vSwp.cy
- ,SWP_DEACTIVATE | SWP_SHOW | SWP_ZORDER
- );
- }
- else
- {
- ::WinSetWindowPos( GetHwnd()
- ,HWND_BOTTOM
- ,vSwp.x
- ,vSwp.y
- ,vSwp.cx
- ,vSwp.cy
- ,SWP_HIDE | SWP_ZORDER
- );
- }
- return TRUE;
-} // end of wxPopupWindow::Show
-
-/* static */
-wxPopupWindow* wxPopupWindow::FindPopupFor(
- wxWindow* pWinParent
-)
+WXDWORD wxPopupWindow::OS2GetStyle( long lFlags,
+ WXDWORD* dwExstyle ) const
{
- //
- // Find a popup with the given parent in the linked list of all shown
- // popups
- //
- for ( wxWindowList::Node *node = m_svShownPopups.GetFirst();
- node;
- node = node->GetNext() )
- {
- wxWindow* pWin = node->GetData();
-
- if (pWin->GetParent() == pWinParent )
- return (wxPopupWindow *)pWin;
- }
- return NULL;
-} // end of wxPopupWindow::FindPopupFor
+ WXDWORD dwStyle = wxWindow::OS2GetStyle( lFlags & wxBORDER_MASK
+ ,dwExstyle
+ );
+ return dwStyle;
+} // end of wxPopupWindow::OS2GetStyle
+#endif