Rebased ref, commits from common ancestor:
commit d9db9167ec711bfef14542851bc0060306abf771
Author:     Vasily Melenchuk <vasily.melenc...@cib.de>
AuthorDate: Wed Oct 25 22:26:14 2023 +0300
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Sun Dec 10 21:57:11 2023 +0100

    vcl: use Windows FlshWindow() feature
    
    For improving UX of LibreOffice it will be great to bring attention
    to it's windows without hard window switch.
    
    For example, if dialog window is opening slowly and user did switch
    to another application this could be a signal to user that there
    are some updates in LO window.
    
    Change-Id: I6ca6706d2dda8902aea273ebe6e318ec9bf4beda

diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index d23b34e397dd..1c55dea078b5 100644
--- a/include/vcl/window.hxx
+++ b/include/vcl/window.hxx
@@ -1215,6 +1215,9 @@ public:
     /// Same as MouseMove(), but coordinates are in logic unit. used for LOK
     virtual void LogicMouseMove(const MouseEvent&) {};
 
+
+    virtual void FlashWindow() const {};
+
     /** @name Accessibility
      */
     ///@{
diff --git a/vcl/inc/brdwin.hxx b/vcl/inc/brdwin.hxx
index 0510006fa3ea..057415ce4a7c 100644
--- a/vcl/inc/brdwin.hxx
+++ b/vcl/inc/brdwin.hxx
@@ -171,6 +171,8 @@ public:
     tools::Rectangle               GetMenuRect() const;
 
     virtual Size            GetOptimalSize() const override;
+
+    virtual void FlashWindow() const override;
 };
 
 struct ImplBorderFrameData
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
index 4b540d61ca0e..74d4946eb262 100644
--- a/vcl/inc/salframe.hxx
+++ b/vcl/inc/salframe.hxx
@@ -208,6 +208,8 @@ public:
 
     virtual void            Beep() = 0;
 
+    virtual void            FlashWindow() const {};
+
     // returns system data (most prominent: window handle)
     virtual const SystemEnvData*
                             GetSystemData() const = 0;
diff --git a/vcl/inc/win/salframe.h b/vcl/inc/win/salframe.h
index 25c6819bb7e2..f7bf988de410 100644
--- a/vcl/inc/win/salframe.h
+++ b/vcl/inc/win/salframe.h
@@ -126,6 +126,7 @@ public:
     virtual LanguageType        GetInputLanguage() override;
     virtual void                UpdateSettings( AllSettings& rSettings ) 
override;
     virtual void                Beep() override;
+    virtual void                FlashWindow() const override;
     virtual const SystemEnvData*    GetSystemData() const override;
     virtual SalPointerState     GetPointerState() override;
     virtual KeyIndicatorState   GetIndicatorState() override;
diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx
index 1b436b544700..329dd96f7535 100644
--- a/vcl/source/window/brdwin.cxx
+++ b/vcl/source/window/brdwin.cxx
@@ -21,6 +21,7 @@
 #include <svdata.hxx>
 #include <brdwin.hxx>
 #include <window.h>
+#include <salframe.hxx>
 
 #include <vcl/textrectinfo.hxx>
 #include <vcl/event.hxx>
@@ -2070,4 +2071,18 @@ 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->mpFrame->FlashWindow();
+    }
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 9a5a6cde533b..b44749d3236b 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -2277,6 +2277,11 @@ void Window::Show(bool bVisible, ShowFlags nFlags)
                 ImplFocusToTop( ToTopFlags::NONE, false );
             }
 
+            if (!HasFocus() && GetParent()) {
+                SAL_WARN("vcl", "yeah, flashing");
+                GetParent()->FlashWindow();
+            }
+
             // adjust mpWindowImpl->mbReallyVisible
             bRealVisibilityChanged = !mpWindowImpl->mbReallyVisible;
             ImplSetReallyVisible();
diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index ab6db6aa41b3..5e85a0d86f40 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -2843,6 +2843,25 @@ void WinSalFrame::Beep()
     MessageBeep( 0 );
 }
 
+void WinSalFrame::FlashWindow() const
+{
+    if (GetForegroundWindow() != mhWnd)
+    {
+        /*FLASHWINFO flash = {
+            sizeof(FLASHWINFO),
+            mhWnd,
+            FLASHW_ALL, // dwFlags
+            10,         // uCount
+            0           // dwTimeout
+        };
+        ::FlashWindowEx(&flash);*/
+        ::FlashWindow(mhWnd, TRUE);
+        SAL_WARN("vcl", "superflash!");
+    }
+    /*else
+        ::FlashWindow(mhWnd, 1);*/
+}
+
 SalFrame::SalPointerState WinSalFrame::GetPointerState()
 {
     SalPointerState aState;
commit 5a0fb95789651c05774cdc566eeda0d3151a811c
Author:     Noel Grandin <n...@peralex.com>
AuthorDate: Wed Feb 3 15:19:20 2021 +0200
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Sun Dec 10 21:52:45 2023 +0100

    tdf#140014 calc crash on COUNTIF
    
    regression from jumbo-sheets work
    
    Change-Id: I207cf3cc4c6d295688936ea3b672b32f9c09d89a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110349
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index ed55445d0558..efbd720c249d 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -1460,6 +1460,8 @@ ScCountIfCellIterator::ScCountIfCellIterator(ScDocument* 
pDocument, const ScInte
     mrContext( rContext ),
     nTab( nTable)
 {
+    maParam.nCol1 = 
pDoc->maTabs[nTable]->ClampToAllocatedColumns(maParam.nCol1);
+    maParam.nCol2 = 
pDoc->maTabs[nTable]->ClampToAllocatedColumns(maParam.nCol2);
     nCol = maParam.nCol1;
     nRow = maParam.nRow1;
 }

Reply via email to