wxMenu* wxCurrentPopupMenu = NULL;
#endif // wxUSE_MENUS_NATIVE
-wxList* wxWinHandleList = NULL;
-
// ---------------------------------------------------------------------------
// private functions
// ---------------------------------------------------------------------------
}
#endif // wxUSE_CONTROLS
- wxWindowList::Node* pCurrent = GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator current = GetChildren().GetFirst();
- while (pCurrent)
+ while (current)
{
- wxWindow* pChildWin = pCurrent->GetData();
+ wxWindow* pChildWin = current->GetData();
wxWindow* pWnd = pChildWin->FindItem(lId);
if (pWnd)
return pWnd;
- pCurrent = pCurrent->GetNext();
+ current = current->GetNext();
}
return(NULL);
} // end of wxWindowOS2::FindItem
, bool bControlOnly
) const
{
- wxWindowList::Node* pCurrent = GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator current = GetChildren().GetFirst();
- while (pCurrent)
+ while (current)
{
- wxWindow* pParent = pCurrent->GetData();
+ wxWindow* pParent = current->GetData();
//
// Do a recursive search.
#endif // wxUSE_CONTROLS
)
{
- wxWindow* pItem = pCurrent->GetData();
+ wxWindow* pItem = current->GetData();
if (pItem->GetHWND() == hWnd)
return(pItem);
return(pItem);
}
}
- pCurrent = pCurrent->GetNext();
+ current = current->GetNext();
}
return(NULL);
} // end of wxWindowOS2::FindItemByHWND
if (IsTopLevel())
return TRUE;
- wxWindowList::Node* pNode = GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
- while (pNode)
+ while (node)
{
- wxWindow* pChild = pNode->GetData();
+ wxWindow* pChild = node->GetData();
if (bEnable)
{
m_pChildrenDisabled->Append(pChild);
}
}
- pNode = pNode->GetNext();
+ node = node->GetNext();
}
if (bEnable && m_pChildrenDisabled)
{
RECTL vRect;
wxWindow* pParent = GetParent();
+ /* Due to OS/2's inverted coordinate system, changing the height
+ of a window requires repositioning all it's children, e.g. if
+ you want a child of height 100 to be at the top left corner of
+ the parent you need to position the lower left corner of the
+ child at (0, (height of parent - 100)), so, obviously, if the
+ height of the parent changes, the child needs to be repositioned. */
+ int nHeightDelta;
+ GetSize(0, &nHeightDelta);
+ nHeightDelta = nHeight - nHeightDelta;
+
if (pParent && !IsKindOf(CLASSINFO(wxDialog)))
{
int nOS2Height = GetOS2ParentHeight(pParent);
MoveChildren(nYDiff);
::WinQueryWindowPos(GetHwnd(), &m_vWinSwp);
}
+ MoveChildren(nHeightDelta);
} // end of wxWindowOS2::DoMoveWindow
//
return mResult;
} // end of wxWindowOS2::OS2WindowProc
+// ----------------------------------------------------------------------------
+// wxWindow <-> HWND map
+// ----------------------------------------------------------------------------
+
+wxWinHashTable *wxWinHandleHash = NULL;
+
wxWindow* wxFindWinFromHandle(
WXHWND hWnd
)
{
- wxNode* pNode = wxWinHandleList->Find((long)hWnd);
-
- if (!pNode)
- return NULL;
- return (wxWindow *)pNode->GetData();
+ return (wxWindow *)wxWinHandleHash->Get((long)hWnd);
} // end of wxFindWinFromHandle
void wxAssociateWinWithHandle(
}
else if (!pOldWin)
{
- wxWinHandleList->Append( (long)hWnd
- ,pWin
- );
+ wxWinHandleHash->Put( (long)hWnd
+ ,(wxWindow *)pWin
+ );
}
} // end of wxAssociateWinWithHandle
wxWindowOS2* pWin
)
{
- wxWinHandleList->DeleteObject(pWin);
+ wxWinHandleHash->Delete((long)pWin->GetHWND());
} // end of wxRemoveHandleAssociation
//
wxSysColourChangedEvent& rEvent
)
{
- wxWindowListNode* pNode = GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
- while (pNode)
+ while (node)
{
//
// Only propagate to non-top-level windows
//
- wxWindow* pWin = (wxWindow *)pNode->GetData();
+ wxWindow* pWin = (wxWindow *)node->GetData();
if (pWin->GetParent())
{
rEvent.m_eventObject = pWin;
pWin->GetEventHandler()->ProcessEvent(vEvent);
}
- pNode = pNode->GetNext();
+ node = node->GetNext();
}
} // end of wxWindowOS2::OnSysColourChanged
{
SWP vSwp;
- for (wxWindowList::Node* pNode = GetChildren().GetFirst();
- pNode;
- pNode = pNode->GetNext())
+ for (wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext())
{
- wxWindow* pWin = pNode->GetData();
+ wxWindow* pWin = node->GetData();
::WinQueryWindowPos( GetHwndOf(pWin)
,&vSwp
if (pWinUnderMouse)
{
- wxWindowList::Node* pCurrent = pWinUnderMouse->GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator current = pWinUnderMouse->GetChildren().GetFirst();
wxWindow* pGrandChild = NULL;
RECTL vRect;
POINTL vPoint2;
//
// Find a child window mouse might be under
//
- while (pCurrent)
+ while (current)
{
- wxWindow* pChild = pCurrent->GetData();
+ wxWindow* pChild = current->GetData();
vPoint2.x = vPoint.x;
vPoint2.y = vPoint.y;
if (pChild->IsTopLevel())
{
POINTL vPoint3;
- wxWindowList::Node* pCurrent2 =pChild->GetChildren().GetFirst();
+ wxWindowList::compatibility_iterator current2 =pChild->GetChildren().GetFirst();
- while (pCurrent2)
+ while (current2)
{
- wxWindow* pGrandChild = pCurrent2->GetData();
+ wxWindow* pGrandChild = current2->GetData();
vPoint3.x = vPoint2.x;
vPoint3.y = vPoint2.y;
pWinUnderMouse = pGrandChild;
break;
}
- pCurrent2 = pCurrent2->GetNext();
+ current2 = current2->GetNext();
}
if (pGrandChild)
break;
if (rcVisible && rcEnabled)
break;
}
- pCurrent = pCurrent->GetNext();
+ current = current->GetNext();
}
}
}