compilerplugins/clang/badstatics.cxx | 3 --- include/sfx2/viewsh.hxx | 1 + sfx2/source/view/lokhelper.cxx | 29 ++++++----------------------- sfx2/source/view/viewimp.hxx | 2 ++ sfx2/source/view/viewsh.cxx | 9 +++++++++ 5 files changed, 18 insertions(+), 26 deletions(-)
New commits: commit 389d4d414291879b9097658080e405a06dc0c1fc Author: Miklos Vajna <[email protected]> Date: Fri Jul 29 11:47:22 2016 +0200 sfx2: introduce SfxViewShell::GetViewShellId() This is quite similar to SwFrame::GetFrameId(), i.e. it assigns a numeric identifier to each instance to help debugging, as those identifiers are stable accross runs. Change-Id: I9cc57e316435f0284a1d481a956a703be859d67e Reviewed-on: https://gerrit.libreoffice.org/27669 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins <[email protected]> diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx index 7f09dbc..12e6b93 100644 --- a/compilerplugins/clang/badstatics.cxx +++ b/compilerplugins/clang/badstatics.cxx @@ -150,9 +150,6 @@ public: // ScAddInAsync* keys if that set is not empty at exit || name == "g_aWindowList" //vcl/unx/gtk/a11y/atkutil.cxx, asserted empty at exit - || name=="aViewMap" - // sfx2/source/view/lokhelper.cxx, not owning, leaked by - // (mis-)design ) // these variables appear unproblematic { return true; diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx index a665913..f6e5777 100644 --- a/include/sfx2/viewsh.hxx +++ b/include/sfx2/viewsh.hxx @@ -334,6 +334,7 @@ public: /// See lok::Document::getPart(). virtual int getPart() const; virtual void dumpAsXml(struct _xmlTextWriter* pWriter) const; + sal_uInt32 GetViewShellId() const; }; diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx index 09d78cf..856a007 100644 --- a/sfx2/source/view/lokhelper.cxx +++ b/sfx2/source/view/lokhelper.cxx @@ -17,42 +17,24 @@ #include <shellimpl.hxx> -namespace -{ - -/// Assigns a view ID to a view shell. -int shellToView(SfxViewShell* pViewShell) -{ - // Deleted view shells are not removed from this map, so view IDs are not - // reused when deleting, then creating a view. - static std::map<SfxViewShell*, int> aViewMap; - auto it = aViewMap.find(pViewShell); - if (it != aViewMap.end()) - return it->second; - - int nViewId = aViewMap.size(); - aViewMap[pViewShell] = nViewId; - return nViewId; -} -} - int SfxLokHelper::createView() { SfxViewFrame* pViewFrame = SfxViewFrame::GetFirst(); SfxRequest aRequest(pViewFrame, SID_NEWWINDOW); pViewFrame->ExecView_Impl(aRequest); - return shellToView(SfxViewShell::Current()); + return SfxViewShell::Current()->GetViewShellId(); } void SfxLokHelper::destroyView(int nId) { + unsigned nViewShellId = nId; SfxViewShellArr_Impl& rViewArr = SfxGetpApp()->GetViewShells_Impl(); for (std::size_t i = 0; i < rViewArr.size(); ++i) { SfxViewShell* pViewShell = rViewArr[i]; - if (shellToView(pViewShell) == nId) + if (pViewShell->GetViewShellId() == nViewShellId) { SfxViewFrame* pViewFrame = pViewShell->GetViewFrame(); SfxRequest aRequest(pViewFrame, SID_CLOSEWIN); @@ -64,12 +46,13 @@ void SfxLokHelper::destroyView(int nId) void SfxLokHelper::setView(int nId) { + unsigned nViewShellId = nId; SfxViewShellArr_Impl& rViewArr = SfxGetpApp()->GetViewShells_Impl(); for (std::size_t i = 0; i < rViewArr.size(); ++i) { SfxViewShell* pViewShell = rViewArr[i]; - if (shellToView(pViewShell) == nId) + if (pViewShell->GetViewShellId() == nViewShellId) { if (pViewShell == SfxViewShell::Current()) return; @@ -86,7 +69,7 @@ int SfxLokHelper::getView(SfxViewShell* pViewShell) { if (!pViewShell) pViewShell = SfxViewShell::Current(); - return shellToView(pViewShell); + return pViewShell->GetViewShellId(); } std::size_t SfxLokHelper::getViews() diff --git a/sfx2/source/view/viewimp.hxx b/sfx2/source/view/viewimp.hxx index fa3e680..95fdf82 100644 --- a/sfx2/source/view/viewimp.hxx +++ b/sfx2/source/view/viewimp.hxx @@ -62,6 +62,8 @@ struct SfxViewShell_Impl void* m_pLibreOfficeKitViewData; /// Set if we are in the middle of a tiled search. bool m_bTiledSearching; + static sal_uInt32 m_nLastViewShellId; + const sal_uInt32 m_nViewShellId; explicit SfxViewShell_Impl(SfxViewShellFlags const nFlags); ~SfxViewShell_Impl(); diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 2108633..6ffd253 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -238,6 +238,8 @@ public: size_t size() const { return maData.size(); } }; +sal_uInt32 SfxViewShell_Impl::m_nLastViewShellId = 0; + SfxViewShell_Impl::SfxViewShell_Impl(SfxViewShellFlags const nFlags) : aInterceptorContainer( aMutex ) , m_bControllerSet(false) @@ -252,6 +254,7 @@ SfxViewShell_Impl::SfxViewShell_Impl(SfxViewShellFlags const nFlags) , m_pLibreOfficeKitViewCallback(nullptr) , m_pLibreOfficeKitViewData(nullptr) , m_bTiledSearching(false) +, m_nViewShellId(SfxViewShell_Impl::m_nLastViewShellId++) {} SfxViewShell_Impl::~SfxViewShell_Impl() @@ -1502,10 +1505,16 @@ int SfxViewShell::getPart() const return 0; } +sal_uInt32 SfxViewShell::GetViewShellId() const +{ + return pImpl->m_nViewShellId; +} + void SfxViewShell::dumpAsXml(xmlTextWriterPtr pWriter) const { xmlTextWriterStartElement(pWriter, BAD_CAST("sfxViewShell")); xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this); + xmlTextWriterWriteAttribute(pWriter, BAD_CAST("id"), BAD_CAST(OString::number(GetViewShellId()).getStr())); xmlTextWriterEndElement(pWriter); } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
