sw/source/uibase/uiview/view.cxx |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

New commits:
commit a586ce188086ff27b08b8a4de4672c07ddf8ed7c
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Wed Jan 3 08:10:47 2024 +0100
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Wed Jan 3 09:18:51 2024 +0100

    tdf#158532 sw: fix toolbar buttons remain disabled after pasting an image
    
    Pasting an image and then quickly switching to text selection resulted
    in e.g. the 'Insert Special Characters' toolbar button to remain
    disabled, which is incorrect.
    
    What happened is that the check in SwView::SelectShell() was poor, the
    intent in commit 31cb5b5538b9fd91dafb067ce961f2540555ad2b (sw: fix
    missing cache invalidation when switching between images, 2022-08-23)
    was to handle the case when we switch between images, but it also
    triggered for the case when we were switching from text to image.
    
    Once the condition is fixed, an additional problem was that while
    switching from text to image, m_nSelectionType is not yet updated, so
    use IsSelFrameMode() instead, this way both the old and the new
    use-cases work.
    
    A testcase that covers this would look something like this:
    
        createSwDoc();
        SwDocShell* pDocShell = getSwDocShell();
        SwView* pView = pDocShell->GetView();
    
        pView->InsertGraphic(createFileURL(u"test.jpg"), OUString(), 
/*bAsLink=*/false,
                             &GraphicFilter::GetGraphicFilter());
        dispatchCommand(mxComponent, ".uno:Escape", {});
    
        std::unique_ptr<SfxPoolItem> pItem;
        SfxItemState eState = 
pView->GetViewFrame().GetBindings().QueryState(SID_INSERT_DIAGRAM, pItem);
        CPPUNIT_ASSERT_EQUAL(SfxItemState::DEFAULT, eState);
    
    but for some reason that also passes without the fix, so probably this
    change is hard to test from cppunit with reasonable amount of effort.
    
    Change-Id: I16749455e093cecf17fa067d7ddf86cd007fd2d6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161579
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins

diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx
index c7cf01d4d8df..ac1c15e95e26 100644
--- a/sw/source/uibase/uiview/view.cxx
+++ b/sw/source/uibase/uiview/view.cxx
@@ -284,12 +284,13 @@ void SwView::SelectShell()
     // Determine if a different fly frame was selected.
     bool bUpdateFly = false;
     const SwFrameFormat* pCurFlyFormat = nullptr;
-    if (m_nSelectionType & SelectionType::Ole || m_nSelectionType & 
SelectionType::Graphic)
+    if (m_pWrtShell->IsSelFrameMode())
     {
         pCurFlyFormat = m_pWrtShell->GetFlyFrameFormat();
     }
-    if (pCurFlyFormat && pCurFlyFormat != m_pLastFlyFormat)
+    if (pCurFlyFormat && m_pLastFlyFormat && pCurFlyFormat != m_pLastFlyFormat)
     {
+        // Only do an explicit update when switching between flys.
         bUpdateFly = true;
     }
     m_pLastFlyFormat = pCurFlyFormat;

Reply via email to