#ifndef WX_PRECOMP
#include "wx/dcclient.h"
+ #include "wx/nonownedwnd.h"
#endif
#include "wx/caret.h"
if ( gs_mouseCapture == this )
ReleaseMouse();
-#warning "FIXME: what to do with gs_activeFrame here and elsewhere?"
-#if 0
- if (gs_activeFrame == this)
- {
- gs_activeFrame = NULL;
- // activate next frame in Z-order:
- if ( m_wnd->prev )
- {
- wxWindowDFB *win = (wxWindowDFB*)m_wnd->prev->userData;
- win->SetFocus();
- }
- else if ( m_wnd->next )
- {
- wxWindowDFB *win = (wxWindowDFB*)m_wnd->next->userData;
- win->SetFocus();
- }
- }
-#endif
-
if ( gs_focusedWindow == this )
DFBKillFocus();
gs_focusedWindow = this;
- if ( IsShownOnScreen() )
+ if ( IsShownOnScreen() &&
+ (!oldFocusedWindow || oldFocusedWindow->GetTLW() != m_tlw) )
{
m_tlw->SetDfbFocus();
}
// are hidden; when the TLW becomes visible, it will set the focus
// to use from wxTLW::Show()
- #warning "FIXME: implement in terms of DWET_{GOT,LOST}FOCUS"
- #warning "FIXME: keep this or not? not, think multiapp core"
-#if 0
- wxWindowDFB *active = wxGetTopLevelParent((wxWindow*)this);
- if ( !(m_windowStyle & wxPOPUP_WINDOW) && active != gs_activeFrame )
- {
- if ( gs_activeFrame )
- {
- wxActivateEvent event(wxEVT_ACTIVATE, false, gs_activeFrame->GetId());
- event.SetEventObject(gs_activeFrame);
- gs_activeFrame->GetEventHandler()->ProcessEvent(event);
- }
-
- gs_activeFrame = active;
- wxActivateEvent event(wxEVT_ACTIVATE, true, gs_activeFrame->GetId());
- event.SetEventObject(gs_activeFrame);
- gs_activeFrame->GetEventHandler()->ProcessEvent(event);
- }
-#endif
-
// notify the parent keeping track of focus for the kbd navigation
// purposes that we got it
wxChildFocusEvent eventFocus((wxWindow*)this);
// parent area at the place of this window (if hiding):
DoRefreshWindow();
-#warning "FIXME: all of this must be implemented for DFB"
-#if 0
- DFB_wmShowWindow(m_wnd, show);
-
- if (!show && gs_activeFrame == this)
- {
- // activate next frame in Z-order:
- if ( m_wnd->prev )
- {
- wxWindowDFB *win = (wxWindowDFB*)m_wnd->prev->userData;
- win->SetFocus();
- }
- else if ( m_wnd->next )
- {
- wxWindowDFB *win = (wxWindowDFB*)m_wnd->next->userData;
- win->SetFocus();
- }
- else
- {
- gs_activeFrame = NULL;
- }
- }
-#endif
-
return true;
}
{
// queue both former and new position of the window for repainting:
wxWindow *parent = GetParent();
+
+ // only refresh the visible parts:
+ if ( !CanBeOutsideClientArea() )
+ {
+ wxRect parentClient(parent->GetClientSize());
+ oldpos.Intersect(parentClient);
+ newpos.Intersect(parentClient);
+ }
+
parent->RefreshRect(oldpos);
parent->RefreshRect(newpos);
}
r.Offset(GetPosition());
r.Offset(parent->GetClientAreaOrigin());
+ // normal windows cannot extend out of its parent's client area, so don't
+ // refresh any hidden parts:
+ if ( !CanBeOutsideClientArea() )
+ r.Intersect(parent->GetClientRect());
+
parent->DoRefreshRect(r);
}
m_updateRegion.Clear();
+ // client area portion of 'rect':
+ wxRect rectClientOnly(rect);
+ rectClientOnly.Intersect(clientRect);
+
// paint the children:
wxPoint origin = GetClientAreaOrigin();
wxWindowList& children = GetChildren();
// compute child's area to repaint
wxRect childrect(child->GetRect());
childrect.Offset(origin);
- childrect.Intersect(rect);
+
+ if ( child->CanBeOutsideClientArea() )
+ childrect.Intersect(rect);
+ else
+ childrect.Intersect(rectClientOnly);
+
if ( childrect.IsEmpty() )
continue;
for ( wxDfbOverlaysList::const_iterator i = m_overlays->begin();
i != m_overlays->end(); ++i )
{
- wxOverlayImpl *overlay = *i;
+ // FIXME: the cast is necessary for STL build where the iterator
+ // (incorrectly) returns void* and not wxOverlayImpl*
+ wxOverlayImpl *overlay = (wxOverlayImpl*) *i;
wxRect orectOrig(overlay->GetRect());
wxRect orect(orectOrig);