compilerplugins/clang/vclwidgets.cxx | 33 +++++++++++++++++++-------------- include/vcl/lazydelete.hxx | 18 +++++++++--------- sc/source/ui/pagedlg/scuitphfedit.cxx | 2 +- sc/source/ui/pagedlg/tphfedit.cxx | 2 +- sw/inc/viewsh.hxx | 10 +++++----- sw/source/core/view/viewsh.cxx | 2 +- sw/source/uibase/inc/view.hxx | 16 ++++++++-------- sw/source/uibase/uiview/view.cxx | 7 ++++--- vcl/source/helper/lazydelete.cxx | 4 ++-- vcl/source/window/window.cxx | 4 ++-- 10 files changed, 52 insertions(+), 46 deletions(-)
New commits: commit 4eb16dab21e3e6f47e899060e28ccc515e47316f Author: Noel Grandin <n...@peralex.com> Date: Wed May 13 12:16:55 2015 +0200 wrap some static fields in VclPtr Change-Id: I2df0929d1b34b9ebf2d5d4c27321abdea072007a diff --git a/sc/source/ui/pagedlg/scuitphfedit.cxx b/sc/source/ui/pagedlg/scuitphfedit.cxx index f7063f8..6de4ed6 100644 --- a/sc/source/ui/pagedlg/scuitphfedit.cxx +++ b/sc/source/ui/pagedlg/scuitphfedit.cxx @@ -51,7 +51,7 @@ // STATIC DATA ----------------------------------------------------------- -static ScEditWindow* pActiveEdWnd = NULL; +static VclPtr<ScEditWindow> pActiveEdWnd = NULL; // class ScHFEditPage diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx index a01a89f..cb6d90b 100644 --- a/sc/source/ui/pagedlg/tphfedit.cxx +++ b/sc/source/ui/pagedlg/tphfedit.cxx @@ -48,7 +48,7 @@ #include <boost/scoped_ptr.hpp> // STATIC DATA ----------------------------------------------------------- -static ScEditWindow* pActiveEdWnd = NULL; +static VclPtr<ScEditWindow> pActiveEdWnd = NULL; ScEditWindow* GetScEditWindow () { diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx index fb1f9c7..fee06ba 100644 --- a/sw/inc/viewsh.hxx +++ b/sw/inc/viewsh.hxx @@ -187,8 +187,8 @@ class SW_DLLPUBLIC SwViewShell : public sw::Ring<SwViewShell> SAL_DLLPRIVATE void ImplApplyViewOptions( const SwViewOption &rOpt ); protected: - static ShellResource* mpShellRes; ///< Resources for the Shell. - static vcl::Window* mpCareWindow; ///< Avoid this window. + static ShellResource* mpShellRes; ///< Resources for the Shell. + static VclPtr<vcl::Window> mpCareWindow; ///< Avoid this window. SwRect maVisArea; ///< The modern version of VisArea. SwDoc *mpDoc; ///< The document; never 0. @@ -440,9 +440,9 @@ public: static ShellResource* GetShellRes(); static void SetCareWin( vcl::Window* pNew ); - static vcl::Window* GetCareWin(SwViewShell& rVSh) - { return mpCareWindow ? mpCareWindow : CareChildWin(rVSh); } - static vcl::Window* CareChildWin(SwViewShell& rVSh); + static vcl::Window* GetCareWin(SwViewShell& rVSh) + { return mpCareWindow ? mpCareWindow.get() : CareChildWin(rVSh); } + static vcl::Window* CareChildWin(SwViewShell& rVSh); inline SfxViewShell *GetSfxViewShell() { return mpSfxViewShell; } inline void SetSfxViewShell(SfxViewShell *pNew) { mpSfxViewShell = pNew; } diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx index c9b92fb..7d5495c 100644 --- a/sw/source/core/view/viewsh.cxx +++ b/sw/source/core/view/viewsh.cxx @@ -85,7 +85,7 @@ bool SwViewShell::mbLstAct = false; ShellResource *SwViewShell::mpShellRes = 0; -vcl::Window *SwViewShell::mpCareWindow = 0; +VclPtr<vcl::Window> SwViewShell::mpCareWindow = nullptr; BitmapEx* SwViewShell::mpErrorBmp = NULL; BitmapEx* SwViewShell::mpReplaceBmp = NULL; diff --git a/sw/source/uibase/inc/view.hxx b/sw/source/uibase/inc/view.hxx index 6f0cec2..c89d330 100644 --- a/sw/source/uibase/inc/view.hxx +++ b/sw/source/uibase/inc/view.hxx @@ -153,14 +153,14 @@ class SW_DLLPUBLIC SwView: public SfxViewShell friend class SwClipboardChangeListener; // search & replace - static SvxSearchDialog *m_pSrchDlg; - static SvxSearchItem *m_pSrchItem; - - static sal_uInt16 m_nInsertCtrlState; - static sal_uInt16 m_nWebInsertCtrlState; - static sal_uInt16 m_nInsertObjectCtrlState; - static sal_uInt16 m_nInsertFieldCtrlState; - static sal_uInt16 m_nMoveType; // for buttons below the scrollbar (viewmdi) + static VclPtr<SvxSearchDialog> m_pSrchDlg; + static SvxSearchItem *m_pSrchItem; + + static sal_uInt16 m_nInsertCtrlState; + static sal_uInt16 m_nWebInsertCtrlState; + static sal_uInt16 m_nInsertObjectCtrlState; + static sal_uInt16 m_nInsertFieldCtrlState; + static sal_uInt16 m_nMoveType; // for buttons below the scrollbar (viewmdi) static sal_Int32 m_nActMark; // current jump mark for unknown mark static bool m_bExtra; diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx index 5a15803..02c00d7 100644 --- a/sw/source/uibase/uiview/view.cxx +++ b/sw/source/uibase/uiview/view.cxx @@ -36,6 +36,7 @@ #include <sfx2/printer.hxx> #include <sfx2/app.hxx> #include <svx/ruler.hxx> +#include <svx/srchdlg.hxx> #include <editeng/protitem.hxx> #include <svx/fmshell.hxx> #include <svx/extrusionbar.hxx> @@ -135,9 +136,9 @@ bool SwView::m_bExtra = false; bool SwView::m_bFound = false; bool SwView::m_bJustOpened = false; -SvxSearchDialog* SwView::m_pSrchDlg = 0; -SearchAttrItemList* SwView::m_pSrchList = 0; -SearchAttrItemList* SwView::m_pReplList = 0; +VclPtr<SvxSearchDialog> SwView::m_pSrchDlg = nullptr; +SearchAttrItemList* SwView::m_pSrchList = 0; +SearchAttrItemList* SwView::m_pReplList = 0; inline SfxDispatcher &SwView::GetDispatcher() { commit 6850e9b855d3d367ae51111e48cbdb2c28000424 Author: Noel Grandin <n...@peralex.com> Date: Wed May 13 10:51:30 2015 +0200 first step towards removing LazyDeletor convert it from a template to a concrete class, since we only have one use-site for it anyway Change-Id: I7209243cc744c7ddb727d6136795d8628b91ff6f diff --git a/include/vcl/lazydelete.hxx b/include/vcl/lazydelete.hxx index ccefc62..2b746a8 100644 --- a/include/vcl/lazydelete.hxx +++ b/include/vcl/lazydelete.hxx @@ -22,6 +22,7 @@ #include <vcl/dllapi.h> #include <vcl/vclptr.hxx> +#include <vcl/window.hxx> #include <unordered_map> #include <vector> @@ -95,14 +96,13 @@ namespace vcl virtual ~LazyDeletorBase(); }; - template < typename T > class VCL_DLLPUBLIC LazyDeletor : public LazyDeletorBase { - static LazyDeletor< T >* s_pOneInstance; + static LazyDeletor* s_pOneInstance; struct DeleteObjectEntry { - VclPtr<T> m_pObject; + VclPtr<vcl::Window> m_pObject; bool m_bDeleted; DeleteObjectEntry() : @@ -110,7 +110,7 @@ namespace vcl m_bDeleted( false ) {} - DeleteObjectEntry( T* i_pObject ) : + DeleteObjectEntry( vcl::Window* i_pObject ) : m_pObject( i_pObject ), m_bDeleted( false ) {} @@ -123,7 +123,7 @@ namespace vcl /** strict weak ordering function to bring objects to be destroyed lazily in correct order, e.g. for Window objects children before parents */ - static bool is_less( T* left, T* right ); + static bool is_less( vcl::Window* left, vcl::Window* right ); LazyDeletor() { LazyDelete::addDeletor( this ); } virtual ~LazyDeletor() @@ -137,7 +137,7 @@ namespace vcl // do the actual work unsigned int nCount = m_aObjects.size(); - std::vector< VclPtr < T > > aRealDelete; + std::vector< VclPtr < vcl::Window > > aRealDelete; aRealDelete.reserve( nCount ); for( unsigned int i = 0; i < nCount; i++ ) { @@ -167,10 +167,10 @@ namespace vcl public: /** mark an object for lazy deletion */ - static void Delete( T* i_pObject ) + static void Delete( vcl::Window* i_pObject ) { if( s_pOneInstance == NULL ) - s_pOneInstance = new LazyDeletor<T>(); + s_pOneInstance = new LazyDeletor(); // is this object already in the list ? // if so mark it as not to be deleted; else insert it @@ -187,7 +187,7 @@ namespace vcl } /** unmark an object already marked for lazy deletion */ - static void Undelete( T* i_pObject ) + static void Undelete( vcl::Window* i_pObject ) { if( s_pOneInstance ) { diff --git a/vcl/source/helper/lazydelete.cxx b/vcl/source/helper/lazydelete.cxx index 2594ad4..3b79b5f 100644 --- a/vcl/source/helper/lazydelete.cxx +++ b/vcl/source/helper/lazydelete.cxx @@ -33,7 +33,7 @@ LazyDeletorBase::~LazyDeletorBase() } // instantiate instance pointer for LazyDeletor<Window> -template<> LazyDeletor<vcl::Window>* LazyDeletor<vcl::Window>::s_pOneInstance = NULL; +LazyDeletor* LazyDeletor::s_pOneInstance = NULL; // a list for all LazyeDeletor<T> singletons static std::vector< LazyDeletorBase* > lcl_aDeletors; @@ -54,7 +54,7 @@ void LazyDelete::flush() } // specialized is_less function for Window -template<> bool LazyDeletor<vcl::Window>::is_less( vcl::Window* left, vcl::Window* right ) +bool LazyDeletor::is_less( vcl::Window* left, vcl::Window* right ) { return left != right && right->IsChild( left, true ); } diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index 1b95b9a..4a589c3 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -578,7 +578,7 @@ void Window::dispose() Window::~Window() { // FIXME: we should kill all LazyDeletor usage. - vcl::LazyDeletor<vcl::Window>::Undelete( this ); + vcl::LazyDeletor::Undelete( this ); disposeOnce(); } @@ -1892,7 +1892,7 @@ void Window::doLazyDelete() Show( false ); SetParent( ImplGetDefaultWindow() ); } - vcl::LazyDeletor<vcl::Window>::Delete( this ); + vcl::LazyDeletor::Delete( this ); } KeyIndicatorState Window::GetIndicatorState() const commit 274c836cf82ce3929141e03a28cfb840f4c724cb Author: Noel Grandin <n...@peralex.com> Date: Tue May 12 13:30:32 2015 +0200 check for static fields that needs to be wrapped in VclPtr Change-Id: I6135cfd9aa70f90d58150733b6b48525e5c347c8 diff --git a/compilerplugins/clang/vclwidgets.cxx b/compilerplugins/clang/vclwidgets.cxx index a09f8db..22d722c 100644 --- a/compilerplugins/clang/vclwidgets.cxx +++ b/compilerplugins/clang/vclwidgets.cxx @@ -228,23 +228,10 @@ bool VCLWidgets::VisitVarDecl(const VarDecl * pVarDecl) { if (ignoreLocation(pVarDecl)) { return true; } - const RecordType *recordType = pVarDecl->getType()->getAs<RecordType>(); - if (recordType == nullptr) { - return true; - } - const CXXRecordDecl *recordDecl = dyn_cast<CXXRecordDecl>(recordType->getDecl()); - if (recordDecl == nullptr) { + if ( isa<ParmVarDecl>(pVarDecl) || pVarDecl->isLocalVarDecl() ) { return true; } - // check if this field is derived from Window - if (isDerivedFromWindow(recordDecl)) { - report( - DiagnosticsEngine::Warning, - "OutputDevice subclass allocated on stack, should be allocated via VclPtr or via *.", - pVarDecl->getLocation()) - << pVarDecl->getSourceRange(); - } if ( !startsWith(pVarDecl->getType().getAsString(), "std::vector<vcl::Window *>") && !startsWith(pVarDecl->getType().getAsString(), "std::map<vcl::Window *, Size>") && !startsWith(pVarDecl->getType().getAsString(), "std::map<vcl::Window *, class Size>") @@ -270,6 +257,24 @@ bool VCLWidgets::VisitVarDecl(const VarDecl * pVarDecl) { "OutputDevice subclass should be wrapped in VclPtr. " + pVarDecl->getType().getAsString(), pVarDecl->getLocation()) << pVarDecl->getSourceRange(); + return true; + } + + const RecordType *recordType = pVarDecl->getType()->getAs<RecordType>(); + if (recordType == nullptr) { + return true; + } + const CXXRecordDecl *recordDecl = dyn_cast<CXXRecordDecl>(recordType->getDecl()); + if (recordDecl == nullptr) { + return true; + } + // check if this field is derived from Window + if (isDerivedFromWindow(recordDecl)) { + report( + DiagnosticsEngine::Warning, + "OutputDevice subclass allocated on stack, should be allocated via VclPtr or via *.", + pVarDecl->getLocation()) + << pVarDecl->getSourceRange(); } return true; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits