31 #include <com/sun/star/awt/XTopWindow.hpp>
39 using ::com::sun::star::awt::XTopWindow;
43 std::unique_ptr<ImplCalcToTopData>
mpNext;
91 pFirstOverlapParent->
mpWindowImpl->mpFirstOverlap =
this;
119 if (
mpWindowImpl->mpFrameData->mpFirstOverlap.get() == this )
124 while ( pTempWin->mpWindowImpl->mpNextOverlap.get() != this )
125 pTempWin = pTempWin->mpWindowImpl->mpNextOverlap;
126 pTempWin->mpWindowImpl->mpNextOverlap =
mpWindowImpl->mpNextOverlap;
154 if ( bRemoveFrameData )
164 sal_uInt16 nChildCount = 0;
168 if (nChildCount == nNewPosition)
177 ImplRemoveWindow(
false);
181 mpWindowImpl->mpNext = pSource;
186 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild =
this;
188 if (mpWindowImpl->mpPrev)
189 mpWindowImpl->mpPrev->mpWindowImpl->mpNext =
this;
191 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild =
this;
194 void Window::ImplToBottomChild()
196 if ( ImplIsOverlapWindow() || mpWindowImpl->mbReallyVisible || (mpWindowImpl->mpParent->mpWindowImpl->mpLastChild.get() ==
this) )
200 if ( mpWindowImpl->mpPrev )
201 mpWindowImpl->mpPrev->mpWindowImpl->mpNext = mpWindowImpl->mpNext;
203 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild = mpWindowImpl->mpNext;
204 mpWindowImpl->mpNext->mpWindowImpl->mpPrev = mpWindowImpl->mpPrev;
205 mpWindowImpl->mpPrev = mpWindowImpl->mpParent->mpWindowImpl->mpLastChild;
206 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild =
this;
207 mpWindowImpl->mpPrev->mpWindowImpl->mpNext =
this;
208 mpWindowImpl->mpNext =
nullptr;
213 SAL_WARN_IF( !ImplIsOverlapWindow(),
"vcl",
"Window::ImplCalcToTop(): Is not an OverlapWindow" );
215 if ( mpWindowImpl->mbFrame )
218 if ( !IsReallyVisible() )
224 ImplCalcOverlapRegionOverlaps( aRegion, aInvalidateRegion );
226 if ( !aInvalidateRegion.
IsEmpty() )
229 pPrevData->
mpNext.reset(pData);
237 SAL_WARN_IF( !ImplIsOverlapWindow(),
"vcl",
"Window::ImplToTop(): Is not an OverlapWindow" );
239 if ( mpWindowImpl->mbFrame )
243 if ( !mpWindowImpl->mpFrameData->mbHasFocus &&
244 !mpWindowImpl->mpFrameData->mbSysObjFocus &&
245 !mpWindowImpl->mpFrameData->mbInSysObjFocusHdl &&
246 !mpWindowImpl->mpFrameData->mbInSysObjToTopHdl )
249 if( !ImplGetClientWindow() || !(ImplGetClientWindow()->GetStyle() &
WB_SYSTEMFLOATWIN) )
258 mpWindowImpl->mpFrame->ToTop( nSysFlags );
264 if ( mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap.get() != this )
267 mpWindowImpl->mpPrev->mpWindowImpl->mpNext = mpWindowImpl->mpNext;
268 if ( mpWindowImpl->mpNext )
269 mpWindowImpl->mpNext->mpWindowImpl->mpPrev = mpWindowImpl->mpPrev;
271 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap = mpWindowImpl->mpPrev;
274 bool bOnTop = IsAlwaysOnTopEnabled();
287 mpWindowImpl->mpNext = pNextWin;
295 mpWindowImpl->mpPrev = mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap;
296 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap =
this;
298 if ( mpWindowImpl->mpPrev )
299 mpWindowImpl->mpPrev->mpWindowImpl->mpNext =
this;
301 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap =
this;
304 if ( IsReallyVisible() )
306 mpWindowImpl->mpOverlapWindow->ImplSetClipFlagOverlapWindows();
317 if ( ImplIsOverlapWindow() )
318 pOverlapWindow =
this;
320 pOverlapWindow = mpWindowImpl->mpOverlapWindow;
324 aStartData.
mpNext =
nullptr;
325 pCurData = &aStartData;
330 pCurData = pCurData->
mpNext.get();
331 pTempOverlapWindow = pTempOverlapWindow->
mpWindowImpl->mpOverlapWindow;
335 pTempOverlapWindow = mpWindowImpl->mpFirstOverlap;
336 while ( pTempOverlapWindow )
340 pCurData = pCurData->
mpNext.get();
341 pTempOverlapWindow = pTempOverlapWindow->
mpWindowImpl->mpNext;
345 pTempOverlapWindow = pOverlapWindow;
349 pTempOverlapWindow = pTempOverlapWindow->
mpWindowImpl->mpOverlapWindow;
353 pCurData = aStartData.
mpNext.get();
357 pCurData = pCurData->
mpNext.get();
361 void Window::ImplFocusToTop(
ToTopFlags nFlags,
bool bReallyVisible )
384 if ( bReallyVisible )
385 ImplGenerateMouseMove();
388 void Window::ImplShowAllOverlaps()
390 vcl::Window* pOverlapWindow = mpWindowImpl->mpFirstOverlap;
391 while ( pOverlapWindow )
403 void Window::ImplHideAllOverlaps()
405 vcl::Window* pOverlapWindow = mpWindowImpl->mpFirstOverlap;
406 while ( pOverlapWindow )
411 pOverlapWindow->
Show(
false );
423 ImplStartToTop( nFlags );
424 ImplFocusToTop( nFlags, IsReallyVisible() );
430 if ( mpWindowImpl->mpBorderWindow )
432 mpWindowImpl->mpBorderWindow->SetZOrder( pRefWindow, nFlags );
438 if ( ImplIsOverlapWindow() )
439 pRefWindow = mpWindowImpl->mpOverlapWindow->
mpWindowImpl->mpFirstOverlap;
441 pRefWindow = mpWindowImpl->mpParent->
mpWindowImpl->mpFirstChild;
446 if ( ImplIsOverlapWindow() )
447 pRefWindow = mpWindowImpl->mpOverlapWindow->
mpWindowImpl->mpLastOverlap;
449 pRefWindow = mpWindowImpl->mpParent->
mpWindowImpl->mpLastChild;
453 while ( pRefWindow && pRefWindow->
mpWindowImpl->mpBorderWindow )
455 if (!pRefWindow || pRefWindow ==
this || mpWindowImpl->mbFrame)
458 SAL_WARN_IF( pRefWindow->
mpWindowImpl->mpParent != mpWindowImpl->mpParent,
"vcl",
"Window::SetZOrder() - pRefWindow has other parent" );
464 if ( ImplIsOverlapWindow() )
466 if ( mpWindowImpl->mpPrev )
467 mpWindowImpl->mpPrev->mpWindowImpl->mpNext = mpWindowImpl->mpNext;
469 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap = mpWindowImpl->mpNext;
470 if ( mpWindowImpl->mpNext )
471 mpWindowImpl->mpNext->mpWindowImpl->mpPrev = mpWindowImpl->mpPrev;
473 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap = mpWindowImpl->mpPrev;
475 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap =
this;
479 if ( mpWindowImpl->mpPrev )
480 mpWindowImpl->mpPrev->mpWindowImpl->mpNext = mpWindowImpl->mpNext;
482 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild = mpWindowImpl->mpNext;
483 if ( mpWindowImpl->mpNext )
484 mpWindowImpl->mpNext->mpWindowImpl->mpPrev = mpWindowImpl->mpPrev;
486 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild = mpWindowImpl->mpPrev;
488 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild =
this;
491 mpWindowImpl->mpPrev = pRefWindow->
mpWindowImpl->mpPrev;
492 mpWindowImpl->mpNext = pRefWindow;
493 if ( mpWindowImpl->mpPrev )
495 mpWindowImpl->mpNext->mpWindowImpl->mpPrev =
this;
502 if ( ImplIsOverlapWindow() )
504 if ( mpWindowImpl->mpPrev )
505 mpWindowImpl->mpPrev->mpWindowImpl->mpNext = mpWindowImpl->mpNext;
507 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap = mpWindowImpl->mpNext;
508 if ( mpWindowImpl->mpNext )
509 mpWindowImpl->mpNext->mpWindowImpl->mpPrev = mpWindowImpl->mpPrev;
511 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap = mpWindowImpl->mpPrev;
513 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap =
this;
517 if ( mpWindowImpl->mpPrev )
518 mpWindowImpl->mpPrev->mpWindowImpl->mpNext = mpWindowImpl->mpNext;
520 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild = mpWindowImpl->mpNext;
521 if ( mpWindowImpl->mpNext )
522 mpWindowImpl->mpNext->mpWindowImpl->mpPrev = mpWindowImpl->mpPrev;
524 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild = mpWindowImpl->mpPrev;
526 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild =
this;
529 mpWindowImpl->mpPrev = pRefWindow;
530 mpWindowImpl->mpNext = pRefWindow->
mpWindowImpl->mpNext;
531 if ( mpWindowImpl->mpNext )
532 mpWindowImpl->mpNext->mpWindowImpl->mpPrev =
this;
533 mpWindowImpl->mpPrev->mpWindowImpl->mpNext =
this;
536 if ( !IsReallyVisible() )
539 if ( !mpWindowImpl->mbInitWinClipRegion && mpWindowImpl->maWinClipRegion.IsEmpty() )
542 bool bInitWinClipRegion = mpWindowImpl->mbInitWinClipRegion;
552 if ( bInitWinClipRegion )
559 if ( ImplIsOverlapWindow() )
561 if ( mpWindowImpl->mpOverlapWindow )
562 pWindow = mpWindowImpl->mpOverlapWindow->
mpWindowImpl->mpFirstOverlap;
569 if ( pWindow ==
this )
572 if ( aWinRect.
IsOver( aCompRect ) )
581 if ( pWindow !=
this )
584 if ( aWinRect.
IsOver( aCompRect ) )
594 void Window::EnableAlwaysOnTop(
bool bEnable )
597 mpWindowImpl->mbAlwaysOnTop = bEnable;
599 if ( mpWindowImpl->mpBorderWindow )
600 mpWindowImpl->mpBorderWindow->EnableAlwaysOnTop( bEnable );
601 else if ( bEnable && IsReallyVisible() )
604 if ( mpWindowImpl->mbFrame )
605 mpWindowImpl->mpFrame->SetAlwaysOnTop( bEnable );
608 bool Window::IsTopWindow()
const
610 if ( !mpWindowImpl || mpWindowImpl->mbInDispose )
614 if( !mpWindowImpl->mbFrame && (!mpWindowImpl->mpBorderWindow || !mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame ) )
618 if( mpWindowImpl->mpWinData->mnIsTopWindow == sal_uInt16(~0))
623 pThisWin->
mpWindowImpl->mpWinData->mnIsTopWindow = xTopWindow.is() ? 1 : 0;
625 return mpWindowImpl->mpWinData->mnIsTopWindow == 1;
634 pTempWindow = mpWindowImpl->mpFirstOverlap;
635 while ( pTempWindow )
644 if ( !mpWindowImpl->mbVisible )
651 pTempWindow = mpWindowImpl->mpFirstChild;
652 while ( pTempWindow )
669 bool Window::ImplIsRealParentPath(
const vcl::Window* pWindow )
const
674 if ( pWindow ==
this )
682 bool Window::ImplIsChild(
const vcl::Window* pWindow,
bool bSystemWindow )
const
691 if ( pWindow ==
this )
699 bool Window::ImplIsWindowOrChild(
const vcl::Window* pWindow,
bool bSystemWindow )
const
701 if (
this == pWindow )
703 return ImplIsChild( pWindow, bSystemWindow );
706 void Window::ImplResetReallyVisible()
708 bool bBecameReallyInvisible = mpWindowImpl->mbReallyVisible;
711 mpWindowImpl->mbReallyVisible =
false;
712 mpWindowImpl->mbReallyShown =
false;
717 if( bBecameReallyInvisible && ImplIsAccessibleCandidate() )
722 vcl::Window* pWindow = mpWindowImpl->mpFirstOverlap;
730 pWindow = mpWindowImpl->mpFirstChild;
741 if ( mpWindowImpl->mpFrameWindow != pWindow->
mpWindowImpl->mpFrameWindow )
748 mpWindowImpl->mpFrameData = pWindow->
mpWindowImpl->mpFrameData;
749 if (mpWindowImpl->mpFrame != pWindow->
mpWindowImpl->mpFrame)
752 if (mpWindowImpl->mpSysObj)
753 mpWindowImpl->mpSysObj->Reparent(mpWindowImpl->mpFrame);
755 mpWindowImpl->mpFrameWindow = pWindow->
mpWindowImpl->mpFrameWindow;
757 mpWindowImpl->mpOverlapWindow = pWindow;
759 mpWindowImpl->mpOverlapWindow = pWindow->
mpWindowImpl->mpOverlapWindow;
764 pChild->ImplUpdateWindowPtr( pWindow );
765 pChild = pChild->mpWindowImpl->mpNext;
769 void Window::ImplUpdateWindowPtr()
779 void Window::ImplUpdateOverlapWindowPtr(
bool bNewFrame )
783 ImplRemoveWindow( bNewFrame );
784 vcl::Window* pRealParent = mpWindowImpl->mpRealParent;
785 ImplInsertWindow( ImplGetParent() );
786 mpWindowImpl->mpRealParent = pRealParent;
787 ImplUpdateWindowPtr();
788 if ( ImplUpdatePos() )
789 ImplUpdateSysObjPos();
793 vcl::Window* pOverlapWindow = mpWindowImpl->mpFirstOverlap;
794 while ( pOverlapWindow )
798 pOverlapWindow = pNextOverlapWindow;
825 pSysWin = static_cast<SystemWindow*>(pMyParent);
833 SAL_WARN_IF( !pNewParent,
"vcl",
"Window::SetParent(): pParent == NULL" );
834 SAL_WARN_IF( pNewParent ==
this,
"vcl",
"someone tried to reparent a window to itself" );
836 if( !pNewParent || pNewParent ==
this )
842 bool bChangeTaskPaneList =
false;
846 if( pNewSysWin && pNewSysWin != pSysWin )
848 bChangeTaskPaneList =
true;
855 ::std::vector< VclPtr<vcl::Window> >& rList = ImplGetOwnerDrawList();
857 if(
p != rList.end() )
861 ImplSetFrameParent( pNewParent );
863 if ( mpWindowImpl->mpBorderWindow )
865 mpWindowImpl->mpRealParent = pNewParent;
866 mpWindowImpl->mpBorderWindow->
SetParent( pNewParent );
870 if ( mpWindowImpl->mpParent.get() == pNewParent )
873 if ( mpWindowImpl->mbFrame )
874 mpWindowImpl->mpFrame->SetParent( pNewParent->
mpWindowImpl->mpFrame );
882 if ( ImplIsOverlapWindow() )
883 pOldOverlapWindow =
nullptr;
887 if ( mpWindowImpl->mpOverlapWindow.get() != pNewOverlapWindow )
888 pOldOverlapWindow = mpWindowImpl->mpOverlapWindow;
890 pOldOverlapWindow =
nullptr;
894 bool bFocusOverlapWin = HasChildPathFocus(
true );
895 bool bFocusWin = HasChildPathFocus();
896 bool bNewFrame = pNewParent->
mpWindowImpl->mpFrameWindow != mpWindowImpl->mpFrameWindow;
899 if ( mpWindowImpl->mpFrameData->mpFocusWin )
901 if ( IsWindowOrChild( mpWindowImpl->mpFrameData->mpFocusWin ) )
902 mpWindowImpl->mpFrameData->mpFocusWin =
nullptr;
904 if ( mpWindowImpl->mpFrameData->mpMouseMoveWin )
906 if ( IsWindowOrChild( mpWindowImpl->mpFrameData->mpMouseMoveWin ) )
907 mpWindowImpl->mpFrameData->mpMouseMoveWin =
nullptr;
909 if ( mpWindowImpl->mpFrameData->mpMouseDownWin )
911 if ( IsWindowOrChild( mpWindowImpl->mpFrameData->mpMouseDownWin ) )
912 mpWindowImpl->mpFrameData->mpMouseDownWin =
nullptr;
915 ImplRemoveWindow( bNewFrame );
916 ImplInsertWindow( pNewParent );
919 ImplUpdateWindowPtr();
920 if ( ImplUpdatePos() )
921 ImplUpdateSysObjPos();
926 if ( ImplIsOverlapWindow() )
930 vcl::Window* pOverlapWindow = mpWindowImpl->mpFirstOverlap;
931 while ( pOverlapWindow )
935 pOverlapWindow = pNextOverlapWindow;
939 else if ( pOldOverlapWindow )
944 IsWindowOrChild( pOldOverlapWindow->
mpWindowImpl->mpLastFocusWindow )) )
945 pOldOverlapWindow->
mpWindowImpl->mpLastFocusWindow =
nullptr;
948 while ( pOverlapWindow )
951 if ( ImplIsRealParentPath( pOverlapWindow->
ImplGetWindow() ) )
953 pOverlapWindow = pNextOverlapWindow;
957 if ( HasChildPathFocus(
true ) )
958 ImplCallFocusChangeActivate( pNewOverlapWindow, pOldOverlapWindow );
964 if ( (GetType() == WindowType::BORDERWINDOW) &&
965 (ImplGetWindow()->GetType() == WindowType::FLOATINGWINDOW) )
966 static_cast<ImplBorderWindow*
>(
this)->SetDisplayActive( mpWindowImpl->mpFrameData->mbHasFocus );
971 if ( bFocusOverlapWin )
974 if ( !mpWindowImpl->mpFrameData->mbHasFocus )
986 if( bChangeTaskPaneList )
990 ImplGetOwnerDrawList().emplace_back(
this );
998 return ImplIsRealParentPath(&rWindow);
1001 sal_uInt16 Window::GetChildCount()
const
1006 sal_uInt16 nChildCount = 0;
1022 sal_uInt16 nChildCount = 0;
1026 if ( nChild == nChildCount )
1043 return mpWindowImpl->mpRealParent;
1046 return mpWindowImpl->mpFirstChild;
1049 return mpWindowImpl->mpLastChild;
1052 return mpWindowImpl->mpPrev;
1055 return mpWindowImpl->mpNext;
1058 return mpWindowImpl->mpFirstOverlap;
1061 if ( ImplIsOverlapWindow() )
1064 return mpWindowImpl->mpOverlapWindow;
1067 if ( ImplIsOverlapWindow() )
1068 return mpWindowImpl->mpOverlapWindow;
1070 return mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpOverlapWindow;
1073 return this->ImplGetWindow();
1076 return ImplGetParent();
1079 return mpWindowImpl->mpFrameWindow;
1082 if ( mpWindowImpl->mpBorderWindow )
1087 return ImplGetWinData()->maTopWindowChildren.empty() ?
nullptr : (*ImplGetWinData()->maTopWindowChildren.begin()).
get();
1091 if ( !mpWindowImpl->mpRealParent )
1093 const ::std::list< VclPtr<vcl::Window> >& rTopWindows( mpWindowImpl->mpRealParent->ImplGetWinData()->maTopWindowChildren );
1094 ::std::list< VclPtr<vcl::Window> >::const_iterator myPos =
1095 ::std::find( rTopWindows.begin(), rTopWindows.end(), this );
1096 if ( ( myPos == rTopWindows.end() ) || ( ++myPos == rTopWindows.end() ) )
1115 if ( pWindow ==
this )
1123 bool Window::IsWindowOrChild(
const vcl::Window* pWindow,
bool bSystemWindow )
const
1126 if (
this == pWindow )
1128 return ImplIsChild( pWindow, bSystemWindow );
1134 while( pFrameWindow )
1138 if( ImplIsRealParentPath( pFrameWindow ) )
1141 SAL_WARN_IF( !mpWindowImpl->mpFrame,
"vcl",
"no frame" );
1143 pFrameWindow->
mpWindowImpl->mpFrame->SetParent( pParentFrame );
1145 pFrameWindow = pFrameWindow->
mpWindowImpl->mpFrameData->mpNextFrame;
SAL_DLLPRIVATE vcl::Window * ImplFindWindow(const Point &rFramePos)
The child windows are invalidated, too.
vcl::Window * ImplGetWindow() const
if this is a proxy return the client, otherwise itself
SAL_DLLPRIVATE void ImplUpdateWindowPtr(vcl::Window *pWindow)
std::unique_ptr< ContentProperties > pData
VclPtr< vcl::Window > mpWindow
SAL_DLLPRIVATE void ImplToTop(ToTopFlags nFlags)
SAL_DLLPRIVATE void ImplInsertWindow(vcl::Window *pParent)
bool HasChildPathFocus(bool bSystemWindow=false) const
SAL_DLLPRIVATE void ImplInvalidateFrameRegion(const vcl::Region *pRegion, InvalidateFlags nFlags)
SAL_DLLPRIVATE bool ImplIsOverlapWindow() const
WinBits const WB_OWNERDRAWDECORATION
virtual css::uno::Reference< css::awt::XWindowPeer > GetComponentInterface(bool bCreate=true)
void reorderWithinParent(vcl::Window &rWindow, sal_uInt16 nNewPosition)
std::unique_ptr< vcl::Region > mpInvalidateRegion
SAL_DLLPRIVATE void ImplRemoveWindow(bool bRemoveFrameData)
WinBits const WB_SYSTEMFLOATWIN
bool IsAlwaysOnTopEnabled() const
ImplSVData * ImplGetSVData()
bool IsSystemWindow() const
void SetParent(vcl::Window *pNewParent)
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
std::unique_ptr< WindowImpl > mpWindowImpl
SAL_DLLPRIVATE vcl::Window * ImplGetParent() const
static SystemWindow * ImplGetLastSystemWindow(vcl::Window *pWin)
vcl::Window * GetParent() const
SAL_DLLPRIVATE vcl::Window * ImplGetTopmostFrameWindow()
SAL_DLLPRIVATE vcl::Window * ImplGetFirstOverlapWindow()
A SalFrame is a system window (e.g. an X11 window).
static vcl::Window * GetFocusWindow()
Get the currently focused window.
SAL_DLLPRIVATE bool ImplIsInTaskPaneList(vcl::Window *pWin)
virtual void ReleaseGraphics(bool bRelease=true)=0
Release the graphics device, and remove it from the graphics device list.
std::unique_ptr< ImplCalcToTopData > mpNext
SAL_DLLPRIVATE void ImplUpdateOverlapWindowPtr(bool bNewFrame)
SAL_DLLPRIVATE void ImplCalcToTop(ImplCalcToTopData *pPrevData)
#define SAL_WARN_IF(condition, area, stream)
tools::Rectangle GetOutputRectPixel() const
ImplSVFrameData maFrameData
SAL_DLLPRIVATE void ImplResetReallyVisible()
void RemoveWindow(vcl::Window *pWindow)
VclPtr< vcl::Window > mpFirstFrame
void AddWindow(vcl::Window *pWindow)
TaskPaneList * GetTaskPaneList()
if(!pCandidateA->getEnd().equal(pCandidateB->getStart()))
The parent window is not invalidated.
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)