31#include <com/sun/star/awt/XTopWindow.hpp>
39using ::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 )
154 if ( bRemoveFrameData )
164 sal_uInt16 nChildCount = 0;
168 if (nChildCount == nNewPosition)
186 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild =
this;
191 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild =
this;
206 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild =
this;
226 if ( !aInvalidateRegion.
IsEmpty() )
230 pData->mpWindow =
this;
264 if (
mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap.get() !=
this )
296 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap =
this;
301 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap =
this;
306 mpWindowImpl->mpOverlapWindow->ImplSetClipFlagOverlapWindows();
318 pOverlapWindow =
this;
324 aStartData.
mpNext =
nullptr;
325 pCurData = &aStartData;
330 pCurData = pCurData->
mpNext.get();
331 pTempOverlapWindow = pTempOverlapWindow->
mpWindowImpl->mpOverlapWindow;
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();
384 if ( bReallyVisible )
391 while ( pOverlapWindow )
406 while ( pOverlapWindow )
411 pOverlapWindow->
Show(
false );
432 mpWindowImpl->mpBorderWindow->SetZOrder( pRefWindow, nFlags );
439 pRefWindow =
mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap;
441 pRefWindow =
mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild;
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)
475 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap =
this;
488 mpWindowImpl->mpParent->mpWindowImpl->mpFirstChild =
this;
513 mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap =
this;
526 mpWindowImpl->mpParent->mpWindowImpl->mpLastChild =
this;
542 bool bInitWinClipRegion =
mpWindowImpl->mbInitWinClipRegion;
552 if ( bInitWinClipRegion )
562 pWindow =
mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap;
569 if ( pWindow ==
this )
572 if ( aWinRect.
Overlaps( aCompRect ) )
581 if ( pWindow !=
this )
584 if ( aWinRect.
Overlaps( aCompRect ) )
600 mpWindowImpl->mpBorderWindow->EnableAlwaysOnTop( bEnable );
618 if(
mpWindowImpl->mpWinData->mnIsTopWindow == sal_uInt16(~0))
623 pThisWin->
mpWindowImpl->mpWinData->mnIsTopWindow = xTopWindow.is() ? 1 : 0;
635 while ( pTempWindow )
652 while ( pTempWindow )
674 if ( pWindow ==
this )
691 if ( pWindow ==
this )
701 if (
this == pWindow )
708 bool bBecameReallyInvisible =
mpWindowImpl->mbReallyVisible;
794 while ( pOverlapWindow )
798 pOverlapWindow = pNextOverlapWindow;
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;
857 if(
p != rList.end() )
883 pOldOverlapWindow =
nullptr;
887 if (
mpWindowImpl->mpOverlapWindow.get() != pNewOverlapWindow )
890 pOldOverlapWindow =
nullptr;
931 while ( pOverlapWindow )
935 pOverlapWindow = pNextOverlapWindow;
939 else if ( pOldOverlapWindow )
945 pOldOverlapWindow->
mpWindowImpl->mpLastFocusWindow =
nullptr;
948 while ( pOverlapWindow )
953 pOverlapWindow = pNextOverlapWindow;
971 if ( bFocusOverlapWin )
986 if( bChangeTaskPaneList )
1006 sal_uInt16 nChildCount = 0;
1022 sal_uInt16 nChildCount = 0;
1026 if ( nChild == nChildCount )
1070 return mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpOverlapWindow;
1073 return this->ImplGetWindow();
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 )
1126 if (
this == pWindow )
1134 while( pFrameWindow )
1143 pFrameWindow->
mpWindowImpl->mpFrame->SetParent( pParentFrame );
1145 pFrameWindow = pFrameWindow->
mpWindowImpl->mpFrameData->mpNextFrame;
static vcl::Window * GetFocusWindow()
Get the currently focused window.
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
virtual void ReleaseGraphics(bool bRelease=true)=0
Release the graphics device, and remove it from the graphics device list.
A SalFrame is a system window (e.g. an X11 window).
SAL_DLLPRIVATE bool ImplIsInTaskPaneList(vcl::Window *pWin)
TaskPaneList * GetTaskPaneList()
void AddWindow(vcl::Window *pWindow)
void RemoveWindow(vcl::Window *pWindow)
SAL_DLLPRIVATE bool ImplIsWindowOrChild(const vcl::Window *pWindow, bool bSystemWindow=false) const
bool IsReallyVisible() const
void SetZOrder(vcl::Window *pRefWindow, ZOrderFlags nFlags)
vcl::Window * GetParent() const
void EnableAlwaysOnTop(bool bEnable=true)
SAL_DLLPRIVATE void ImplStartToTop(ToTopFlags nFlags)
SAL_DLLPRIVATE vcl::Window * ImplFindWindow(const Point &rFramePos)
bool HasChildPathFocus(bool bSystemWindow=false) const
SAL_DLLPRIVATE bool ImplIsAccessibleCandidate() const
bool IsChild(const vcl::Window *pWindow) const
sal_uInt16 GetChildCount() const
WindowType GetType() const
SAL_DLLPRIVATE ::std::vector< VclPtr< vcl::Window > > & ImplGetOwnerDrawList()
SAL_DLLPRIVATE void ImplGenerateMouseMove()
SAL_DLLPRIVATE bool ImplIsOverlapWindow() const
SAL_DLLPRIVATE void ImplCalcToTop(ImplCalcToTopData *pPrevData)
vcl::Window * GetWindow(GetWindowType nType) const
SAL_DLLPRIVATE void ImplUpdateWindowPtr()
SAL_DLLPRIVATE bool ImplIsChild(const vcl::Window *pWindow, bool bSystemWindow=false) const
SAL_DLLPRIVATE void ImplHideAllOverlaps()
void reorderWithinParent(sal_uInt16 nNewPosition)
SAL_DLLPRIVATE void ImplCalcOverlapRegionOverlaps(const vcl::Region &rInterRegion, vcl::Region &rRegion) const
void SetParent(vcl::Window *pNewParent)
SAL_DLLPRIVATE void ImplInsertWindow(vcl::Window *pParent)
SAL_DLLPRIVATE bool ImplUpdatePos()
SAL_DLLPRIVATE void ImplUpdateSysObjPos()
static SAL_DLLPRIVATE void ImplCallFocusChangeActivate(vcl::Window *pNewOverlapWindow, vcl::Window *pOldOverlapWindow)
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
SAL_DLLPRIVATE bool ImplSetClipFlag(bool bSysObjOnlySmaller=false)
SAL_DLLPRIVATE void ImplUpdateWindowPtr(vcl::Window *pWindow)
SAL_DLLPRIVATE vcl::Window * ImplGetParent() const
SAL_DLLPRIVATE void ImplResetReallyVisible()
void ToTop(ToTopFlags nFlags=ToTopFlags::NONE)
SAL_DLLPRIVATE vcl::Window * ImplGetFirstOverlapWindow()
::OutputDevice const * GetOutDev() const
SAL_DLLPRIVATE void ImplRemoveWindow(bool bRemoveFrameData)
SAL_DLLPRIVATE void ImplToTop(ToTopFlags nFlags)
SAL_DLLPRIVATE vcl::Window * ImplGetTopmostFrameWindow()
virtual css::uno::Reference< css::awt::XWindowPeer > GetComponentInterface(bool bCreate=true)
SystemWindow * GetSystemWindow() const
bool IsAlwaysOnTopEnabled() const
SAL_DLLPRIVATE ImplWinData * ImplGetWinData() const
std::unique_ptr< WindowImpl > mpWindowImpl
bool IsSystemWindow() const
SAL_DLLPRIVATE void ImplFocusToTop(ToTopFlags nFlags, bool bReallyVisible)
virtual WindowHitTest ImplHitTest(const Point &rFramePos)
bool IsWindowOrChild(const vcl::Window *pWindow, bool bSystemWindow=false) const
SAL_DLLPRIVATE void ImplToBottomChild()
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
tools::Rectangle GetOutputRectPixel() const
css::uno::Reference< css::datatransfer::dnd::XDropTarget > GetDropTarget()
vcl::Window * ImplGetWindow() const
if this is a proxy return the client, otherwise itself
SAL_DLLPRIVATE void ImplShowAllOverlaps()
SAL_DLLPRIVATE vcl::Window * ImplGetClientWindow() const
vcl::Window * GetChild(sal_uInt16 nChild) const
bool IsAncestorOf(const vcl::Window &rWindow) const
SAL_DLLPRIVATE void ImplInvalidateFrameRegion(const vcl::Region *pRegion, InvalidateFlags nFlags)
SAL_DLLPRIVATE bool ImplIsRealParentPath(const vcl::Window *pWindow) const
SAL_DLLPRIVATE void ImplSetFrameParent(const vcl::Window *pParent)
SAL_DLLPRIVATE void ImplUpdateOverlapWindowPtr(bool bNewFrame)
#define SAL_WARN_IF(condition, area, stream)
std::unique_ptr< sal_Int32[]> pData
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
static SystemWindow * ImplGetLastSystemWindow(vcl::Window *pWin)
std::unique_ptr< vcl::Region > mpInvalidateRegion
std::unique_ptr< ImplCalcToTopData > mpNext
VclPtr< vcl::Window > mpWindow
ImplSVFrameData maFrameData
VclPtr< vcl::Window > mpFirstFrame
::std::list< VclPtr< vcl::Window > > maTopWindowChildren
ImplSVData * ImplGetSVData()
@ Children
The child windows are invalidated, too.
@ NoTransparent
The parent window is not invalidated.
WinBits const WB_OWNERDRAWDECORATION
WinBits const WB_SYSTEMFLOATWIN