summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--framework/source/loadenv/loadenv.cxx8
-rw-r--r--include/vcl/ctrl.hxx2
-rw-r--r--include/vcl/window.hxx4
-rw-r--r--vcl/inc/brdwin.hxx2
-rw-r--r--vcl/source/window/brdwin.cxx12
-rw-r--r--vcl/source/window/stacking.cxx4
-rw-r--r--vcl/source/window/window.cxx18
-rw-r--r--vcl/source/window/window3.cxx9
8 files changed, 31 insertions, 28 deletions
diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index 40b9917064ee..299b0fcd5ba4 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -1596,11 +1596,11 @@ void LoadEnv::impl_reactForLoadingState()
css::uno::Reference< css::awt::XWindow > xWindow = m_xTargetFrame->getContainerWindow();
bool bHidden = m_lMediaDescriptor.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_HIDDEN, false);
bool bMinimized = m_lMediaDescriptor.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_MINIMIZED, false);
+ VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow(xWindow);
if (bMinimized)
{
SolarMutexGuard aSolarGuard;
- VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow(xWindow);
// check for system window is necessary to guarantee correct pointer cast!
if (pWindow && pWindow->IsSystemWindow())
static_cast<WorkWindow*>(pWindow.get())->Minimize();
@@ -1612,6 +1612,9 @@ void LoadEnv::impl_reactForLoadingState()
impl_makeFrameWindowVisible(xWindow, !m_bFocusedAndToFront && shouldFocusAndToFront());
}
+ if (pWindow)
+ pWindow->FlashWindow();
+
// Note: Only if an existing property "FrameName" is given by this media descriptor,
// it should be used. Otherwise we should do nothing. May be the outside code has already
// set a frame name on the target!
@@ -1700,8 +1703,7 @@ bool LoadEnv::shouldFocusAndToFront() const
{
bool const preview(
m_lMediaDescriptor.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_PREVIEW, false));
- return !preview
- && officecfg::Office::Common::View::NewDocumentHandling::ForceFocusAndToFront::get();
+ return !preview;
}
// static
diff --git a/include/vcl/ctrl.hxx b/include/vcl/ctrl.hxx
index 3f838aba1a70..4e61822abf7a 100644
--- a/include/vcl/ctrl.hxx
+++ b/include/vcl/ctrl.hxx
@@ -230,6 +230,8 @@ public:
/// Notify the LOK client about an invalidated area.
virtual void LogicInvalidate( const tools::Rectangle* pRectangle ) override;
+
+ virtual void FlashWindow() const override {};
};
#endif // INCLUDED_VCL_CTRL_HXX
diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index c71c0891c572..c78c214a5b60 100644
--- a/include/vcl/window.hxx
+++ b/include/vcl/window.hxx
@@ -694,7 +694,7 @@ private:
// retrieves the list of owner draw decorated windows for this window hierarchy
SAL_DLLPRIVATE ::std::vector<VclPtr<vcl::Window> >& ImplGetOwnerDrawList();
- SAL_DLLPRIVATE vcl::Window* ImplGetTopmostFrameWindow();
+ SAL_DLLPRIVATE vcl::Window* ImplGetTopmostFrameWindow() const;
SAL_DLLPRIVATE bool ImplStopDnd();
SAL_DLLPRIVATE void ImplStartDnd();
@@ -1119,7 +1119,7 @@ public:
/// Dumps itself and potentially its children to a property tree, to be written easily to JSON.
virtual void DumpAsPropertyTree(tools::JsonWriter&);
-
+ /// Use OS specific way to bring user attention to current window
virtual void FlashWindow() const;
/** @name Accessibility
diff --git a/vcl/inc/brdwin.hxx b/vcl/inc/brdwin.hxx
index dbaa52ed02b2..f9c8a8edb894 100644
--- a/vcl/inc/brdwin.hxx
+++ b/vcl/inc/brdwin.hxx
@@ -169,8 +169,6 @@ public:
tools::Rectangle GetMenuRect() const;
virtual Size GetOptimalSize() const override;
-
- virtual void FlashWindow() const override;
};
struct ImplBorderFrameData
diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx
index 677da2047d1b..fb7c3a1b2db4 100644
--- a/vcl/source/window/brdwin.cxx
+++ b/vcl/source/window/brdwin.cxx
@@ -2001,16 +2001,4 @@ void ImplBorderWindow::queue_resize(StateChangedType eReason)
vcl::Window::queue_resize(eReason);
}
-void ImplBorderWindow::FlashWindow() const
-{
- // We are showing top level window without focus received. Let's flash it
- // Use OS features to bring user attention to this window: find topmost one and FlashWindow
- vcl::Window* pMyParent = mpWindowImpl->mpParent;
- while (pMyParent && pMyParent->mpWindowImpl && pMyParent->mpWindowImpl->mpParent)
- pMyParent = pMyParent->mpWindowImpl->mpParent;
-
- if (pMyParent && pMyParent->mpWindowImpl)
- pMyParent->mpWindowImpl->mpFrame->FlashWindow();
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/stacking.cxx b/vcl/source/window/stacking.cxx
index d3c73916425a..84b4efadc27b 100644
--- a/vcl/source/window/stacking.cxx
+++ b/vcl/source/window/stacking.cxx
@@ -47,9 +47,9 @@ struct ImplCalcToTopData
namespace vcl {
-vcl::Window* Window::ImplGetTopmostFrameWindow()
+vcl::Window* Window::ImplGetTopmostFrameWindow() const
{
- vcl::Window *pTopmostParent = this;
+ const vcl::Window *pTopmostParent = this;
while( pTopmostParent->ImplGetParent() )
pTopmostParent = pTopmostParent->ImplGetParent();
return pTopmostParent->mpWindowImpl->mpFrameWindow;
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 3cb43a8a4a05..8411888fe9ee 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -2316,14 +2316,20 @@ void Window::Show(bool bVisible, ShowFlags nFlags)
// If it is a SystemWindow it automatically pops up on top of
// all other windows if needed.
- if ( ImplIsOverlapWindow() && !(nFlags & ShowFlags::NoActivate) )
+ if (ImplIsOverlapWindow())
{
- ImplStartToTop(( nFlags & ShowFlags::ForegroundTask ) ? ToTopFlags::ForegroundTask : ToTopFlags::NONE );
- ImplFocusToTop( ToTopFlags::NONE, false );
- }
+ if (!(nFlags & ShowFlags::NoActivate))
+ {
+ ImplStartToTop((nFlags & ShowFlags::ForegroundTask) ? ToTopFlags::ForegroundTask
+ : ToTopFlags::NONE);
+ ImplFocusToTop(ToTopFlags::NONE, false);
- if (!HasFocus() && GetParent()) {
- GetParent()->FlashWindow();
+ if (!(nFlags & ShowFlags::ForegroundTask))
+ {
+ // Inform user about window if we did not popup it at foreground
+ FlashWindow();
+ }
+ }
}
// adjust mpWindowImpl->mbReallyVisible
diff --git a/vcl/source/window/window3.cxx b/vcl/source/window/window3.cxx
index 44b3d4642850..002c892f592c 100644
--- a/vcl/source/window/window3.cxx
+++ b/vcl/source/window/window3.cxx
@@ -20,6 +20,7 @@
#include <vcl/window.hxx>
#include <window.h>
#include <vcl/cursor.hxx>
+#include <salframe.hxx>
namespace vcl
{
@@ -215,7 +216,13 @@ Color Window::GetBackgroundColor() const { return GetOutDev()->GetBackgroundColo
void Window::EnableRTL(bool bEnable) { GetOutDev()->EnableRTL(bEnable); }
-void Window::FlashWindow() const {}
+void Window::FlashWindow() const
+{
+ vcl::Window* pMyParent = ImplGetTopmostFrameWindow();
+
+ if (pMyParent && pMyParent->mpWindowImpl)
+ pMyParent->mpWindowImpl->mpFrame->FlashWindow();
+}
} /* namespace vcl */