tdf#134688 run error dialog async and keep the events in the one event loop

instead of a sub loop which helps to not lose the mouse release where
the dialog was shown on the mouse press

Change-Id: If0baf15e85aff7a28ca058e2626b58802d0dad08
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98451
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sc/source/ui/inc/tabview.hxx b/sc/source/ui/inc/tabview.hxx
index a46c766..794e10f 100644
--- a/sc/source/ui/inc/tabview.hxx
+++ b/sc/source/ui/inc/tabview.hxx
@@ -137,6 +137,8 @@ private:
    FuPoor*             pDrawActual;
    FuPoor*             pDrawOld;

    std::shared_ptr<weld::MessageDialog> m_xMessageBox;

    std::array<VclPtr<ScGridWindow>, 4> pGridWin;
    std::array<VclPtr<ScColBar>, 2> pColBar;
    std::array<VclPtr<ScRowBar>, 2> pRowBar;
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx
index 97e5dd9..450c512 100644
--- a/sc/source/ui/view/tabview2.cxx
+++ b/sc/source/ui/view/tabview2.cxx
@@ -1431,13 +1431,15 @@ void ScTabView::ErrorMessage(const char* pGlobStrId)
        }
    }

    std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(pParent,
                                                  VclMessageType::Info, VclButtonsType::Ok,
                                                  ScResId(pGlobStrId)));
    xInfoBox->run();

    if (bFocus)
        pParent->grab_focus();
    m_xMessageBox.reset(Application::CreateMessageDialog(pParent,
                                                         VclMessageType::Info, VclButtonsType::Ok,
                                                         ScResId(pGlobStrId)));
    weld::Window* pGrabOnClose = bFocus ? pParent : nullptr;
    m_xMessageBox->runAsync(m_xMessageBox, [this, pGrabOnClose](sal_Int32 /*nResult*/) {
        m_xMessageBox.reset();
        if (pGrabOnClose)
            pGrabOnClose->grab_focus();
    });
}

void ScTabView::UpdatePageBreakData( bool bForcePaint )