BEGIN_EVENT_TABLE(wxWindowOS2, wxWindowBase)
EVT_ERASE_BACKGROUND(wxWindowOS2::OnEraseBackground)
EVT_SYS_COLOUR_CHANGED(wxWindowOS2::OnSysColourChanged)
- EVT_INIT_DIALOG(wxWindowOS2::OnInitDialog)
EVT_IDLE(wxWindowOS2::OnIdle)
EVT_SET_FOCUS(wxWindowOS2::OnSetFocus)
END_EVENT_TABLE()
wxWindowBase::SetFocusFromKbd();
} // end of wxWindowOS2::SetFocus
-wxWindow* wxWindowBase::FindFocus()
+wxWindow* wxWindowBase::DoFindFocus()
{
HWND hWnd = ::WinQueryFocus(HWND_DESKTOP);
return wxFindWinFromHandle((WXHWND)hWnd);
}
return NULL;
-} // wxWindowBase::FindFocus
+} // wxWindowBase::DoFindFocus
bool wxWindowOS2::Enable(
bool bEnable
{
RECTL vRect;
+ ::WinQueryWindowRect(GetHwnd(), &vRect);
+ int height = vRect.yTop;
if (pRect)
{
vRect.xLeft = pRect->x;
- vRect.yTop = pRect->y + pRect->height;
+ vRect.yTop = height - pRect->y;
vRect.xRight = pRect->x + pRect->width;
- vRect.yBottom = pRect->y;
- }
- else
- {
- ::WinQueryWindowRect(GetHwnd(), &vRect);
+ vRect.yBottom = vRect.yTop - pRect->height;
}
nDy *= -1; // flip the sign of Dy as OS/2 is opposite Windows.
::WinScrollWindow( GetHwnd()
,(LONG)nDy
,&vRect
,&vRect
- ,NULLHANDLE
+ ,NULL
,NULL
,SW_SCROLLCHILDREN | SW_INVALIDATERGN
);
- Refresh();
} // end of wxWindowOS2::ScrollWindow
// ---------------------------------------------------------------------------
} // end of wxWindowMSW::MSWGetStyle
//
-// Make a Windows extended style from the given wxWindows window style
+// Make a Windows extended style from the given wxWidgets window style
//
WXDWORD wxWindowOS2::MakeExtendedStyle(
long lStyle
if (pRect)
{
RECTL vOs2Rect;
+ int height;
+ ::WinQueryWindowRect(GetHwnd(), &vOs2Rect);
+ height = vOs2Rect.yTop;
vOs2Rect.xLeft = pRect->x;
- vOs2Rect.yBottom = pRect->y;
+ vOs2Rect.yTop = height - pRect->y;
vOs2Rect.xRight = pRect->x + pRect->width;
- vOs2Rect.yTop = pRect->y + pRect->height;
+ vOs2Rect.yBottom = vOs2Rect.yTop - pRect->height;
::WinInvalidateRect(hWnd, &vOs2Rect, bEraseBack);
}
pMenu->SetInvokingWindow(this);
pMenu->UpdateUI();
-
- DoClientToScreen( &nX
- ,&nY
- );
+
+ if ( nX == -1 && nY == -1 )
+ {
+ wxPoint mouse = wxGetMousePosition();
+ nX = mouse.x; nY = mouse.y;
+ }
+ else
+ {
+ DoClientToScreen( &nX
+ ,&nY
+ );
+ }
wxCurrentPopupMenu = pMenu;
::WinPopupMenu( hWndParent
} // end of wxWindowOS2::UnpackMenuSelect
// ---------------------------------------------------------------------------
-// Main wxWindows window proc and the window proc for wxWindow
+// Main wxWidgets window proc and the window proc for wxWindow
// ---------------------------------------------------------------------------
//
break;
}
//
- // Simulate a WM_COMMAND here, as wxWindows expects all control
+ // Simulate a WM_COMMAND here, as wxWidgets expects all control
// button clicks to generate WM_COMMAND msgs, not WM_CONTROL
//
if (pWin->IsKindOf(CLASSINFO(wxRadioBox)))
break;
}
//
- // Simulate a WM_COMMAND here, as wxWindows expects all control
+ // Simulate a WM_COMMAND here, as wxWidgets expects all control
// button clicks to generate WM_COMMAND msgs, not WM_CONTROL
//
if (pWin->IsKindOf(CLASSINFO(wxListBox)))
);
vDc.SetHPS(pMeasureStruct->hps);
//
- // Load the wxWindows Pallete and set to RGB mode
+ // Load the wxWidgets Pallete and set to RGB mode
//
if (!::GpiCreateLogColorTable( pMeasureStruct->hps
,0L
return FALSE;
}
+ // Get all the rectangles from the region, convert the individual
+ // rectangles to "the other" coordinate system and reassemble a
+ // region from the rectangles, to be feed into m_updateRegion.
+ //
+ // FIXME: This is a bad hack since OS/2 API specifies that rectangles
+ // passed into GpiSetRegion must not have Bottom > Top,
+ // however, at first sight, it _seems_ to work nonetheless.
+ //
+ RGNRECT vRgnData;
+ PRECTL pUpdateRects = NULL;
+ vRgnData.ulDirection = RECTDIR_LFRT_TOPBOT;
+ if (::GpiQueryRegionRects( hPS // Pres space
+ ,hRgn // Handle of region to query
+ ,NULL // Return all RECTs
+ ,&vRgnData // Will contain number or RECTs in region
+ ,NULL // NULL to return number of RECTs
+ ))
+ {
+ pUpdateRects = new RECTL[vRgnData.crcReturned];
+ vRgnData.crc = vRgnData.crcReturned;
+ vRgnData.ircStart = 1;
+ if (::GpiQueryRegionRects( hPS // Pres space of source
+ ,hRgn // Handle of source region
+ ,NULL // Return all RECTs
+ ,&vRgnData // Operations set to return rects
+ ,pUpdateRects // Will contain the actual RECTS
+ ))
+ {
+ int height;
+ RECT vRect;
+ ::WinQueryWindowRect(GetHwnd(), &vRect);
+ height = vRect.yTop;
+
+ for(size_t i = 0; i < vRgnData.crc; i++)
+ {
+ int rectHeight;
+ rectHeight = pUpdateRects[i].yTop - pUpdateRects[i].yBottom;
+ pUpdateRects[i].yTop = height - pUpdateRects[i].yTop;
+ pUpdateRects[i].yBottom = pUpdateRects[i].yTop + rectHeight;
+ }
+ ::GpiSetRegion(hPS, hRgn, vRgnData.crc, pUpdateRects);
+ delete [] pUpdateRects;
+ }
+ }
+
m_updateRegion = wxRegion(hRgn, hPS);
vEvent.SetEventObject(this);
int nHeight;
DoGetSize(0, &nHeight);
rEvent.m_x = nX;
- // Convert to wxWindows standard coordinate system!
+ // Convert to wxWidgets standard coordinate system!
rEvent.m_y = nHeight - nY;
rEvent.m_shiftDown = ((uFlags & KC_SHIFT) != 0);
rEvent.m_controlDown = ((uFlags & KC_CTRL) != 0);
,vSwp.y - nDiff
,vSwp.cx
,vSwp.cy
- ,SWP_MOVE | SWP_SHOW | SWP_ZORDER
+ ,SWP_MOVE
);
::WinQueryWindowPos(GetHwndOf(pWin), pWin->GetSwp());
if (pWin->IsKindOf(CLASSINFO(wxRadioBox)))
//
// Getting the Y position for a window, like a control, is a real
// pain. There are three sitatuions we must deal with in determining
-// the OS2 to wxWindows Y coordinate.
+// the OS2 to wxWidgets Y coordinate.
//
// 1) The controls are created in a dialog.
// This is the easiest since a dialog is created with its original
// Beginning of user defined messages
case 0x1000: return "WM_USER";
- // wxWindows user defined types
+ // wxWidgets user defined types
// listview
// case 0x1000 + 0: return "LVM_GETBKCOLOR";