diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2024-12-27 15:48:45 +0200 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2024-12-27 17:07:59 +0100 |
commit | 3642472bea67c6e0c35bee1e6567e1fe9d560e1a (patch) | |
tree | 52da00c2392e03098305e376b3c590098c44a93c /sw/inc | |
parent | 8b492a1f3057d2b6c3daed7405000d0270ea3dd9 (diff) |
merge SwSidebarItem and SwAnnotationItem classes
Because the separation is not doing useful.
Which reveals that SwAnnotationWin::ChangeSidebarItem was
doing some very dodgy object slicing when assigning
to mrSidebarItem.
Fix that by using a pointer in SwAnnotationWin instead.
Change-Id: I516dfaac7066d8f1effe351ef388c03dd1127fd7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179445
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
Diffstat (limited to 'sw/inc')
-rw-r--r-- | sw/inc/AnnotationWin.hxx | 8 | ||||
-rw-r--r-- | sw/inc/PostItMgr.hxx | 14 | ||||
-rw-r--r-- | sw/inc/postithelper.hxx | 48 |
3 files changed, 24 insertions, 46 deletions
diff --git a/sw/inc/AnnotationWin.hxx b/sw/inc/AnnotationWin.hxx index 0a91496bea86..9e5aaeba6aeb 100644 --- a/sw/inc/AnnotationWin.hxx +++ b/sw/inc/AnnotationWin.hxx @@ -61,7 +61,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow public: SwAnnotationWin( SwEditWin& rEditWin, SwPostItMgr& aMgr, - SwSidebarItem& rSidebarItem, + SwAnnotationItem& rSidebarItem, SwFormatField* aField ); virtual ~SwAnnotationWin() override; virtual void dispose() override; @@ -105,7 +105,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow void ResetAnchorRectChanged() { mbAnchorRectChanged = false; } const std::vector<basegfx::B2DRange>& GetAnnotationTextRanges() const { return maAnnotationTextRanges; } SwEditWin& EditWin(); - SwSidebarItem& GetSidebarItem() { return mrSidebarItem; } + SwAnnotationItem& GetSidebarItem() { return *mpSidebarItem; } OutlinerView* GetOutlinerView() { return mpOutlinerView.get();} const OutlinerView* GetOutlinerView() const { return mpOutlinerView.get();} @@ -175,7 +175,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow bool IsMouseOverSidebarWin() const { return mbMouseOver; } - void ChangeSidebarItem( SwSidebarItem const & rSidebarItem ); + void ChangeSidebarItem( SwAnnotationItem & rSidebarItem ); virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override; void DrawForPage(OutputDevice* pDev, const Point& rPos); @@ -276,7 +276,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow bool mbReadonly; bool mbIsFollow; - SwSidebarItem& mrSidebarItem; + SwAnnotationItem* mpSidebarItem; const SwFrame* mpAnchorFrame; SwFormatField* mpFormatField; diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx index 8c25f381641b..a7abeb9514f3 100644 --- a/sw/inc/PostItMgr.hxx +++ b/sw/inc/PostItMgr.hxx @@ -48,7 +48,7 @@ class SfxItemSet; class SvxSearchItem; namespace sw::annotation { class SwAnnotationWin; } namespace sw::sidebarwindows { class SwFrameSidebarWinContainer; } -class SwSidebarItem; +class SwAnnotationItem; class SwFrame; namespace vcl { class Window; } struct ImplSVEvent; @@ -64,7 +64,7 @@ struct SwPostItPageItem sw::sidebarwindows::SidebarPosition eSidebarPosition; tools::Long lOffset; SwRect mPageRect; - std::vector<SwSidebarItem*> mvSidebarItems; + std::vector<SwAnnotationItem*> mvSidebarItems; SwPostItPageItem(): bScrollbar(false), eSidebarPosition( sw::sidebarwindows::SidebarPosition::NONE ), lOffset(0) { } @@ -87,7 +87,7 @@ class SAL_DLLPUBLIC_RTTI SwPostItMgr final : public SfxListener, SwView* mpView; SwWrtShell* mpWrtShell; VclPtr<SwEditWin> mpEditWin; - std::vector<std::unique_ptr<SwSidebarItem>> mvPostItFields; + std::vector<std::unique_ptr<SwAnnotationItem>> mvPostItFields; std::vector<std::unique_ptr<SwPostItPageItem>> mPages; ImplSVEvent * mnEventId; bool mbWaitingForCalcRects; @@ -128,19 +128,19 @@ class SAL_DLLPUBLIC_RTTI SwPostItMgr final : public SfxListener, sw::annotation::SwAnnotationWin* GetSidebarWin(const SfxBroadcaster* pBroadcaster) const; - SwSidebarItem* InsertItem( SfxBroadcaster* pItem, bool bCheckExistence, bool bFocus); + SwAnnotationItem* InsertItem( SfxBroadcaster* pItem, bool bCheckExistence, bool bFocus); void RemoveItem( SfxBroadcaster* pBroadcast ); - VclPtr<sw::annotation::SwAnnotationWin> GetOrCreateAnnotationWindow(SwSidebarItem& rItem); + VclPtr<sw::annotation::SwAnnotationWin> GetOrCreateAnnotationWindow(SwAnnotationItem& rItem); public: SwPostItMgr(SwView* aDoc); virtual ~SwPostItMgr() override; - typedef std::vector< std::unique_ptr<SwSidebarItem> >::const_iterator const_iterator; + typedef std::vector< std::unique_ptr<SwAnnotationItem> >::const_iterator const_iterator; const_iterator begin() const { return mvPostItFields.begin(); } const_iterator end() const { return mvPostItFields.end(); } - const std::vector<std::unique_ptr<SwSidebarItem>>& GetPostItFields() { return mvPostItFields; } + const std::vector<std::unique_ptr<SwAnnotationItem>>& GetPostItFields() { return mvPostItFields; } void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; diff --git a/sw/inc/postithelper.hxx b/sw/inc/postithelper.hxx index 174e103231bd..30c9606a0d4d 100644 --- a/sw/inc/postithelper.hxx +++ b/sw/inc/postithelper.hxx @@ -94,63 +94,41 @@ namespace SwPostItHelper void ImportHTML(Outliner& rOutliner, const OUString& rHtml); } -class SAL_DLLPUBLIC_RTTI SwSidebarItem +class SwAnnotationItem final { public: VclPtr<sw::annotation::SwAnnotationWin> mpPostIt; bool mbShow; bool mbFocus; bool mbPendingLayout; - SwPostItHelper::SwLayoutStatus mLayoutStatus; SwLayoutInfo maLayoutInfo; - SwSidebarItem( const bool aFocus); - - virtual ~SwSidebarItem(); - - SwSidebarItem(SwSidebarItem const &) = default; - SwSidebarItem(SwSidebarItem &&) = default; - SwSidebarItem & operator =(SwSidebarItem const &) = default; - SwSidebarItem & operator =(SwSidebarItem &&) = default; - - virtual SwPosition GetAnchorPosition() const = 0; - virtual bool UseElement(SwRootFrame const&, IDocumentRedlineAccess const&) = 0; - virtual const SwFormatField& GetFormatField() const = 0; - virtual SwFormatField& GetFormatField() = 0; - virtual const SfxBroadcaster* GetBroadcaster() const = 0; - virtual VclPtr<sw::annotation::SwAnnotationWin> GetSidebarWindow( SwEditWin& rEditWin, - SwPostItMgr& aMgr) = 0; -}; - -class SwAnnotationItem final : public SwSidebarItem -{ -public: SwAnnotationItem( SwFormatField& rFormatField, - const bool aFocus) - : SwSidebarItem( aFocus ) - , mrFormatField( rFormatField ) - { - } + const bool aFocus); + virtual ~SwAnnotationItem(); + + SwAnnotationItem(SwAnnotationItem const &) = default; + SwAnnotationItem(SwAnnotationItem &&) = default; - virtual SwPosition GetAnchorPosition() const override; - virtual bool UseElement(SwRootFrame const&, IDocumentRedlineAccess const&) override; - virtual const SwFormatField& GetFormatField() const override + SwPosition GetAnchorPosition() const; + bool UseElement(SwRootFrame const&, IDocumentRedlineAccess const&); + const SwFormatField& GetFormatField() const { return mrFormatField; } - SwFormatField& GetFormatField() override + SwFormatField& GetFormatField() { return mrFormatField; } - virtual const SfxBroadcaster* GetBroadcaster() const override + const SfxBroadcaster* GetBroadcaster() const { return &mrFormatField; } - virtual VclPtr<sw::annotation::SwAnnotationWin> GetSidebarWindow( + VclPtr<sw::annotation::SwAnnotationWin> GetSidebarWindow( SwEditWin& rEditWin, - SwPostItMgr& aMgr ) override; + SwPostItMgr& aMgr ); private: SwFormatField& mrFormatField; |