Kaydet (Commit) bc99f1ce authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Ensure ResMgr outlives Resources

üst 4762788e
......@@ -62,6 +62,7 @@ $(eval $(call gb_Library_add_exception_objects,forui,\
formula/source/ui/dlg/FormulaHelper \
formula/source/ui/dlg/funcpage \
formula/source/ui/dlg/funcutl \
formula/source/ui/dlg/omoduleclient \
formula/source/ui/dlg/parawin \
formula/source/ui/dlg/structpg \
formula/source/ui/resource/ModuleHelper \
......
......@@ -40,6 +40,7 @@ $(eval $(call gb_Package_add_file,formula_inc,inc/formula/funcutl.hxx,funcutl.hx
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/grammar.hxx,grammar.hxx))
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/IControlReferenceHandler.hxx,IControlReferenceHandler.hxx))
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/IFunctionDescription.hxx,IFunctionDescription.hxx))
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/omoduleclient.hxx,omoduleclient.hxx))
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/opcode.hxx,opcode.hxx))
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/tokenarray.hxx,tokenarray.hxx))
$(eval $(call gb_Package_add_file,formula_inc,inc/formula/token.hxx,token.hxx))
......
......@@ -32,6 +32,7 @@
#include <sfx2/basedlgs.hxx>
#include <memory>
#include "formula/formuladllapi.h"
#include "formula/omoduleclient.hxx"
namespace formula
{
......@@ -87,7 +88,13 @@ protected:
void Update(const String& _sExp);
};
class FORMULA_DLLPUBLIC FormulaDlg : public SfxModelessDialog
class FORMULA_DLLPUBLIC FormulaDlg:
private OModuleClient, public SfxModelessDialog
// order of base classes is important, as OModuleClient controls the
// lifecycle of the ResMgr passed into SfxModelessDialog (via
// formula::ModuleRes), and at least with DBG_UTIL calling TestRes in
// ~Resource, the ResMgr must outlive the Resource (from which
// SfxModelessDialog ultimately derives)
{
friend class FormulaDlg_Impl;
public:
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef INCLUDED_FORMULA_MODULECLIENT_HXX
#define INCLUDED_FORMULA_MODULECLIENT_HXX
#include "sal/config.h"
#include "boost/noncopyable.hpp"
#include "formula/formuladllapi.h"
namespace formula {
/** Base class for objects which use any global module-specific ressources.
*/
class FORMULA_DLLPUBLIC OModuleClient: private boost::noncopyable
{
public:
OModuleClient();
~OModuleClient();
};
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -154,7 +154,6 @@ namespace formula
DECL_LINK(FuncSelHdl, void *);
DECL_LINK(StructSelHdl, void *);
public:
OModuleClient m_aModuleClient;
mutable uno::Reference< sheet::XFormulaOpCodeMapper> m_xOpCodeMapper;
uno::Sequence< sheet::FormulaToken > m_aTokenList;
::std::auto_ptr<FormulaTokenArray> m_pTokenArray;
......
......@@ -41,7 +41,7 @@
#include <boost/shared_ptr.hpp>
#include <vector>
#include "ModuleHelper.hxx"
#include "formula/omoduleclient.hxx"
//============================================================================
namespace formula
{
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include "sal/config.h"
#include "formula/omoduleclient.hxx"
#include "ModuleHelper.hxx"
formula::OModuleClient::OModuleClient() {
OModule::registerClient();
}
formula::OModuleClient::~OModuleClient() {
OModule::revokeClient();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -39,8 +39,8 @@
#include <vector>
#include "formula/funcutl.hxx"
#include "formula/omoduleclient.hxx"
#include "ControlHelper.hxx"
#include "ModuleHelper.hxx"
namespace formula
{
......
......@@ -37,7 +37,7 @@
#include <vcl/tabctrl.hxx>
#include <svtools/svtreebx.hxx>
#include "formula/IFunctionDescription.hxx"
#include "ModuleHelper.hxx"
#include "formula/omoduleclient.hxx"
//============================================================================
......
......@@ -39,6 +39,7 @@ namespace formula
//=========================================================================
//= OModule
//=========================================================================
class OModuleClient;
class OModuleImpl;
class FORMULA_DLLPUBLIC OModule
{
......@@ -69,18 +70,6 @@ namespace formula
static void ensureImpl();
};
//=========================================================================
//= OModuleClient
//=========================================================================
/** base class for objects which uses any global module-specific ressources
*/
class FORMULA_DLLPUBLIC OModuleClient
{
public:
OModuleClient() { OModule::registerClient(); }
~OModuleClient() { OModule::revokeClient(); }
};
//=========================================================================
//= ModuleRes
//=========================================================================
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment