SystemWindow* GetTopMostParentSystemWindow(const vcl::Window& rWindow)
{ // ->manually search topmost system window // required because their might be another system window between this and the top window
vcl::Window* pWindow = rWindow.GetParent();
SystemWindow* pTopMostSysWin = nullptr; while ( pWindow )
{ if ( pWindow->IsSystemWindow() )
pTopMostSysWin = static_cast<SystemWindow*>(pWindow);
pWindow = pWindow->GetParent();
} return pTopMostSysWin;
}
class ToolbarPopupStatusListener : public svt::FrameStatusListener
{ public:
ToolbarPopupStatusListener( const css::uno::Reference< css::frame::XFrame >& xFrame,
WeldToolbarPopup& rToolbarPopup );
void ToolbarPopupContainer::setPopover(std::unique_ptr<WeldToolbarPopup> xPopup)
{
m_xPopup = std::move(xPopup); // move the WeldToolbarPopup contents into this toolbar so on-demand contents can appear inside a preexisting gtk popover // because the arrow for the popover is only enabled if there's a popover set
m_xPopup->getTopLevel()->move(m_xPopup->getContainer(), m_xContainer.get());
// in online LoseFocus event is fired due to this line and popup is closed // when first time opened any popup from not focused sidebar if (!comphelper::LibreOfficeKit::isActive())
m_xPopup->GrabFocus();
}
void ToolbarPopupContainer::unsetPopover()
{ if (!m_xPopup) return;
m_xContainer->move(m_xPopup->getContainer(), m_xPopup->getTopLevel());
m_xPopup.reset();
}
// move the WeldToolbarPopup contents into this interim toolbar so welded contents can appear as a dropdown in an unwelded toolbar
m_xPopup->getTopLevel()->move(m_xPopup->getContainer(), m_xContainer.get());
}
void InterimToolbarPopup::GetFocus()
{
DropdownDockingWindow::GetFocus(); if (!m_xPopup) return;
m_xPopup->GrabFocus();
}
void InterimToolbarPopup::dispose()
{ if (SystemWindow* pWindow = GetTopMostParentSystemWindow(*this))
pWindow->GetTaskPaneList()->RemoveWindow(this);
// if we have focus when disposed, pick the document window as destination // for focus rather than let it go to an arbitrary windows if (HasFocus())
{ if (auto xWindow = m_xFrame->getContainerWindow())
xWindow->setFocus();
} // move the contents back where it belongs
m_xContainer->move(m_xPopup->getContainer(), m_xPopup->getTopLevel());
m_xPopup.reset();
m_xContainer.reset();
m_xBuilder.reset();
m_xFrame.clear();
DropdownDockingWindow::dispose();
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.1Bemerkung:
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.