blob: 53bf7081b73de98e3dc68cba530d375a5cf89a53 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sfx2.hxx"
#include <basic/basmgr.hxx>
#include <basic/sbstar.hxx>
#include <svl/svdde.hxx>
#ifndef _MSGBOX_HXX //autogen
#include <vcl/msgbox.hxx>
#endif
#include <svl/eitem.hxx>
#include <unotools/saveopt.hxx>
#include <unotools/misccfg.hxx>
#ifndef GCC
#endif
#include "app.hrc"
#include <sfx2/app.hxx>
#include <sfx2/evntconf.hxx>
#include <sfx2/unoctitm.hxx>
#include "appdata.hxx"
#include <sfx2/viewsh.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/printer.hxx>
#include "arrdecl.hxx"
#include "sfx2/sfxresid.hxx"
#include <sfx2/event.hxx>
#include <sfx2/mnumgr.hxx>
#include <sfx2/templdlg.hxx>
#include <sfx2/msgpool.hxx>
#include <sfx2/docfile.hxx>
#include "sfxtypes.hxx"
#include "sfxlocal.hrc"
#include <sfx2/fcontnr.hxx>
#include "nochaos.hxx"
#include <sfx2/appuno.hxx>
#include <sfx2/doctempl.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/docfac.hxx>
#include "appbaslib.hxx"
#include <basic/basicmanagerrepository.hxx>
using ::basic::BasicManagerRepository;
//===================================================================
sal_Bool SfxApplication::QueryExit_Impl()
{
sal_Bool bQuit = sal_True;
// will trotzdem noch jemand, den man nicht abschiessen kann, die App haben?
if ( !bQuit )
{
// nicht wirklich beenden, nur minimieren
InfoBox aInfoBox( NULL, SfxResId(MSG_CANT_QUIT) );
aInfoBox.Execute();
DBG_TRACE( "QueryExit => FALSE (in use)" );
return sal_False;
}
return sal_True;
}
//-------------------------------------------------------------------------
void SfxApplication::Deinitialize()
{
if ( pAppData_Impl->bDowning )
return;
StarBASIC::Stop();
// ggf. BASIC speichern
BasicManager* pBasMgr = BasicManagerRepository::getApplicationBasicManager( false );
if ( pBasMgr && pBasMgr->IsModified() )
SaveBasicManager();
SaveBasicAndDialogContainer();
pAppData_Impl->bDowning = sal_True; // wegen Timer aus DecAliveCount und QueryExit
DELETEZ( pAppData_Impl->pTemplates );
// By definition there shouldn't be any open view frames when we reach
// this method. Therefore this call makes no sense and is the source of
// some stack traces, which we don't understand.
// For more information see:
// #123501#
//SetViewFrame(0);
pAppData_Impl->bDowning = sal_False;
DBG_ASSERT( !SfxViewFrame::GetFirst(),
"existing SfxViewFrame after Execute" );
DBG_ASSERT( !SfxObjectShell::GetFirst(),
"existing SfxObjectShell after Execute" );
pAppData_Impl->pAppDispat->Pop( *this, SFX_SHELL_POP_UNTIL );
pAppData_Impl->pAppDispat->Flush();
pAppData_Impl->bDowning = sal_True;
pAppData_Impl->pAppDispat->DoDeactivate_Impl( sal_True, NULL );
// call derived application-exit
Exit();
// Controller u."a. freigeben
// dabei sollten auch restliche Komponenten ( Beamer! ) verschwinden
BasicManagerRepository::resetApplicationBasicManager();
pAppData_Impl->pBasicManager->reset( NULL );
// this will also delete pBasMgr
DBG_ASSERT( pAppData_Impl->pViewFrame == 0, "active foreign ViewFrame" );
delete[] pAppData_Impl->pInterfaces, pAppData_Impl->pInterfaces = 0;
// free administration managers
DELETEZ(pAppData_Impl->pAppDispat);
SfxResId::DeleteResMgr();
DELETEZ(pAppData_Impl->pOfaResMgr);
// ab hier d"urfen keine SvObjects mehr existieren
DELETEZ(pAppData_Impl->pMatcher);
DELETEX(pAppData_Impl->pSlotPool);
DELETEX(pAppData_Impl->pFactArr);
DELETEX(pAppData_Impl->pInitLinkList);
DELETEX(pAppData_Impl->pTbxCtrlFac);
DELETEX(pAppData_Impl->pStbCtrlFac);
DELETEX(pAppData_Impl->pMenuCtrlFac);
DELETEX(pAppData_Impl->pViewFrames);
DELETEX(pAppData_Impl->pViewShells);
DELETEX(pAppData_Impl->pObjShells);
//TODO/CLEANTUP
//ReleaseArgs could be used instead!
/* This leak is intended !
Otherwise the TestTool cant use .uno:QuitApp ...
because every destructed ItemSet work's on an already
released pool pointer .-)
NoChaos::ReleaseItemPool();
*/
pAppData_Impl->pPool = NULL;
DELETEZ(pAppData_Impl->pBasicResMgr);
DELETEZ(pAppData_Impl->pSvtResMgr);
}