// Destructor
wxWindow::~wxWindow()
{
+ // deleting a window while it is shown invalidates the region
+ if ( IsShown() ) {
+ wxWindow* iter = this ;
+ while( iter ) {
+ if ( iter->m_macWindowData )
+ {
+ Refresh() ;
+ break ;
+ }
+ iter = iter->GetParent() ;
+
+ }
+ }
+
m_isBeingDeleted = TRUE;
if ( s_lastMouseWindow == this )
bool wxWindow::SetCursor(const wxCursor& cursor)
{
- if ( !wxWindowBase::SetCursor(cursor) )
- {
- // no change
+ if (m_cursor == cursor)
return FALSE;
- }
+
+ if (wxNullCursor == cursor)
+ {
+ if ( ! wxWindowBase::SetCursor( *wxSTANDARD_CURSOR ) )
+ return FALSE ;
+ }
+ else
+ {
+ if ( ! wxWindowBase::SetCursor( cursor ) )
+ return FALSE ;
+ }
wxASSERT_MSG( m_cursor.Ok(),
wxT("cursor must be valid after call to the base version"));
{
if ( mouseWin == this && !wxIsBusy() )
{
- cursor.MacInstall() ;
+ m_cursor.MacInstall() ;
}
}
if ( focus.Ok() )
{
Rect clientrect = { 0 , 0 , m_height , m_width } ;
- ClipRect( &clientrect ) ;
+ // ClipRect( &clientrect ) ;
InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
}
}
if ( focus.Ok() )
{
Rect clientrect = { 0 , 0 , m_height , m_width } ;
- ClipRect( &clientrect ) ;
+ // ClipRect( &clientrect ) ;
InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
}
}
MacRepositionScrollBars() ;
if ( doMove )
{
- wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
+ wxPoint point(m_x, m_y);
+ wxMoveEvent event(point, m_windowId);
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event) ;
}
if ( doResize )
{
- MacRepositionScrollBars() ;
- wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
- event.SetEventObject(this);
- GetEventHandler()->ProcessEvent(event);
+ MacRepositionScrollBars() ;
+ wxSize size(m_width, m_height);
+ wxSizeEvent event(size, m_windowId);
+ event.SetEventObject(this);
+ GetEventHandler()->ProcessEvent(event);
}
}
}
UMASelectWindow( m_macWindowData->m_macWindow ) ;
// no need to generate events here, they will get them triggered by macos
// actually they should be , but apparently they are not
- wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
+ wxSize size(m_width, m_height);
+ wxSizeEvent event(size, m_windowId);
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
}
}
MacSuperShown( show ) ;
Refresh() ;
- if(m_macWindowData)
- MacUpdateImmediately() ;
return TRUE;
}
void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
{
+// if ( !IsShown() )
+// return ;
+
wxMacDrawingHelper focus( this ) ;
if ( focus.Ok() )
{
Rect clientrect = { 0 , 0 , m_height , m_width } ;
- ClipRect( &clientrect ) ;
+ // ClipRect( &clientrect ) ;
if ( rect )
{
UMACreateRootControl( m_macWindowData->m_macWindow , &m_macWindowData->m_macRootControl ) ;
m_macWindowData->m_macFocus = NULL ;
+ m_macWindowData->m_macHasReceivedFirstActivate = true ;
}
void wxWindow::MacPaint( wxPaintEvent &event )
{
if ( !m_hScrollBar->IsShown() )
m_hScrollBar->Show(true) ;
- m_hScrollBar->SetScrollbar( pos , thumbVisible , range , refresh ) ;
+ m_hScrollBar->SetScrollbar( pos , thumbVisible , range , thumbVisible , refresh ) ;
}
}
}
{
if ( !m_vScrollBar->IsShown() )
m_vScrollBar->Show(true) ;
- m_vScrollBar->SetScrollbar( pos , thumbVisible , range , refresh ) ;
+ m_vScrollBar->SetScrollbar( pos , thumbVisible , range , thumbVisible , refresh ) ;
}
}
}
// Raise the window to the top of the Z order
void wxWindow::Raise()
{
- // TODO
+ if ( m_macWindowData )
+ {
+ UMABringToFront( m_macWindowData->m_macWindow ) ;
+ }
}
// Lower the window to the bottom of the Z order
void wxWindow::Lower()
{
- // TODO
+ if ( m_macWindowData )
+ {
+ UMASendBehind( m_macWindowData->m_macWindow , NULL ) ;
+ }
}
void wxWindow::DoSetClientSize(int width, int height)
else
event.SetEventType(wxEVT_LEFT_DCLICK ) ;
}
+ lastWhen = 0 ;
+ }
+ else
+ {
+ lastWhen = ev->when ;
}
- lastWhen = ev->when ;
lastWhere = localwhere ;
}
}
void wxWindow::MacActivate( EventRecord *ev , bool inIsActivating )
{
+ if ( !m_macWindowData->m_macHasReceivedFirstActivate )
+ m_macWindowData->m_macHasReceivedFirstActivate = true ;
+
wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating , m_windowId);
event.m_timeStamp = ev->when ;
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
+ Refresh(false) ;
UMAHighlightAndActivateWindow( m_macWindowData->m_macWindow , inIsActivating ) ;
+// MacUpdateImmediately() ;
}
void wxWindow::MacRedraw( RgnHandle updatergn , long time)
RGBBackColor( &m_backgroundColour.GetPixel()) ;
}
// subtract all non transparent children from updatergn
-
+
RgnHandle childarea = NewRgn() ;
for (wxNode *node = GetChildren().First(); node; node = node->Next())
{
// eventually test for transparent windows
if ( child->GetMacRootWindow() == window && child->IsShown() )
{
- SetRectRgn( childarea , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ;
- DiffRgn( ownUpdateRgn , childarea , ownUpdateRgn ) ;
+ if ( child->GetBackgroundColour() != m_backgroundColour && !child->IsKindOf( CLASSINFO( wxControl ) ) && ((wxControl*)child)->GetMacControl() )
+ {
+ SetRectRgn( childarea , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ;
+ DiffRgn( ownUpdateRgn , childarea , ownUpdateRgn ) ;
+ }
}
}
DisposeRgn( childarea ) ;
if ( GetParent() && m_backgroundColour != GetParent()->GetBackgroundColour() )
eraseBackground = true ;
- SetClip( updatergn ) ;
+ SetClip( ownUpdateRgn ) ;
if ( m_macEraseOnRedraw ) {
if ( eraseBackground )
{
GetPortVisibleRegion( GetWindowPort( window ), region );
// if windowshade gives incompatibility , take the follwing out
- if ( !EmptyRgn( region ) )
+ if ( !EmptyRgn( region ) && win->m_macWindowData->m_macHasReceivedFirstActivate )
{
win->MacRedraw( region , wxTheApp->sm_lastMessageTime ) ;
}
GetPortVisibleRegion( GetWindowPort( window ), region );
// if windowshade gives incompatibility , take the follwing out
- if ( !EmptyRgn( region ) )
+ if ( !EmptyRgn( region ) && win->m_macWindowData->m_macHasReceivedFirstActivate )
{
MacRedraw( region , ev->when ) ;
}