summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2020-07-15 13:01:33 +0200
committerAndras Timar <andras.timar@collabora.com>2020-07-22 16:08:06 +0200
commit48a216cd16b306f4d2d7edc374ceb4670d177db8 (patch)
tree6d5e75256bff4c2e2ed22d84a70fe873b39b7055
parent26fdcd6dfc995a8273cedccee074a7674a1899e2 (diff)
lok: sc: Desktop: Function wizard isn't properly async
Open another view of the same spreadsheet when the function dialog is open. Note how the document in the new view can't be edited. This patch avoids to have a view locked after creation when in an other view the formula dialog is open. See also commit 009d275. Change-Id: Ie51f414c4ad83ef20526d10be3251e174158096c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98823 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Andras Timar <andras.timar@collabora.com>
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx39
-rw-r--r--sc/source/ui/view/tabvwshc.cxx9
2 files changed, 45 insertions, 3 deletions
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index fda5ced604d3..625f506bfe50 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -109,6 +109,7 @@ public:
void testSheetGeometryDataInvariance();
void testSheetGeometryDataCorrectness();
void testDeleteCellMultilineContent();
+ void testFunctionDlg();
CPPUNIT_TEST_SUITE(ScTiledRenderingTest);
CPPUNIT_TEST(testRowColumnHeaders);
@@ -153,6 +154,7 @@ public:
CPPUNIT_TEST(testSheetGeometryDataInvariance);
CPPUNIT_TEST(testSheetGeometryDataCorrectness);
CPPUNIT_TEST(testDeleteCellMultilineContent);
+ CPPUNIT_TEST(testFunctionDlg);
CPPUNIT_TEST_SUITE_END();
private:
@@ -1645,6 +1647,43 @@ void ScTiledRenderingTest::testFilterDlg()
SfxViewShell::Current()->registerLibreOfficeKitViewCallback(nullptr, nullptr);
}
+void ScTiledRenderingTest::testFunctionDlg()
+{
+ comphelper::LibreOfficeKit::setActive();
+
+ createDoc("empty.ods");
+
+ // view #1
+ SfxViewShell* pView1 = SfxViewShell::Current();
+ int nView1 = SfxLokHelper::getView();
+ {
+ pView1->GetViewFrame()->GetDispatcher()->Execute(SID_OPENDLG_FUNCTION,
+ SfxCallMode::SLOT|SfxCallMode::RECORD);
+ }
+ Scheduler::ProcessEventsToIdle();
+ SfxChildWindow* pRefWindow = pView1->GetViewFrame()->GetChildWindow(SID_OPENDLG_FUNCTION);
+ CPPUNIT_ASSERT(pRefWindow);
+
+ // view #2
+ int nView2 = SfxLokHelper::createView();
+ SfxViewShell* pView2 = SfxViewShell::Current();
+ CPPUNIT_ASSERT(pView1 != pView2);
+
+ // check loking
+ CPPUNIT_ASSERT_EQUAL(true, pView1->GetViewFrame()->GetDispatcher()->IsLocked());
+ CPPUNIT_ASSERT_EQUAL(false, pView2->GetViewFrame()->GetDispatcher()->IsLocked());
+
+ SfxLokHelper::setView(nView1);
+ pRefWindow->GetController()->response(RET_CANCEL);
+
+ CPPUNIT_ASSERT_EQUAL(false, pView1->GetViewFrame()->GetDispatcher()->IsLocked());
+ CPPUNIT_ASSERT_EQUAL(false, pView2->GetViewFrame()->GetDispatcher()->IsLocked());
+
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(nullptr, nullptr);
+ SfxLokHelper::setView(nView2);
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(nullptr, nullptr);
+}
+
void ScTiledRenderingTest::testVbaRangeCopyPaste()
{
comphelper::LibreOfficeKit::setActive();
diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
index a37f77a986f3..3a22fee7e924 100644
--- a/sc/source/ui/view/tabvwshc.cxx
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -120,10 +120,13 @@ std::unique_ptr<SfxModelessDialogController> ScTabViewShell::CreateRefDialogCont
if ( nCurRefDlgId != nSlotId )
{
- // the dialog has been opened in a different view
- // -> lock the dispatcher for this view (modal mode)
+ if (!(comphelper::LibreOfficeKit::isActive() && nSlotId == SID_OPENDLG_FUNCTION))
+ {
+ // the dialog has been opened in a different view
+ // -> lock the dispatcher for this view (modal mode)
- GetViewData().GetDispatcher().Lock( true ); // lock is reset when closing dialog
+ GetViewData().GetDispatcher().Lock( true ); // lock is reset when closing dialog
+ }
return nullptr;
}