xref: /aoo4110/main/sfx2/source/appl/appquit.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sfx2.hxx"
26*b1cdbd2cSJim Jagielski #include <basic/basmgr.hxx>
27*b1cdbd2cSJim Jagielski #include <basic/sbstar.hxx>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <svl/svdde.hxx>
30*b1cdbd2cSJim Jagielski #ifndef _MSGBOX_HXX //autogen
31*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
32*b1cdbd2cSJim Jagielski #endif
33*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #include <unotools/saveopt.hxx>
36*b1cdbd2cSJim Jagielski #include <unotools/misccfg.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #ifndef GCC
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #include "app.hrc"
42*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/evntconf.hxx>
44*b1cdbd2cSJim Jagielski #include <sfx2/unoctitm.hxx>
45*b1cdbd2cSJim Jagielski #include "appdata.hxx"
46*b1cdbd2cSJim Jagielski #include <sfx2/viewsh.hxx>
47*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
48*b1cdbd2cSJim Jagielski #include <sfx2/printer.hxx>
49*b1cdbd2cSJim Jagielski #include "arrdecl.hxx"
50*b1cdbd2cSJim Jagielski #include "sfx2/sfxresid.hxx"
51*b1cdbd2cSJim Jagielski #include <sfx2/event.hxx>
52*b1cdbd2cSJim Jagielski #include <sfx2/mnumgr.hxx>
53*b1cdbd2cSJim Jagielski #include <sfx2/templdlg.hxx>
54*b1cdbd2cSJim Jagielski #include <sfx2/msgpool.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
56*b1cdbd2cSJim Jagielski #include "sfxtypes.hxx"
57*b1cdbd2cSJim Jagielski #include "sfxlocal.hrc"
58*b1cdbd2cSJim Jagielski #include <sfx2/fcontnr.hxx>
59*b1cdbd2cSJim Jagielski #include "nochaos.hxx"
60*b1cdbd2cSJim Jagielski #include <sfx2/appuno.hxx>
61*b1cdbd2cSJim Jagielski #include <sfx2/doctempl.hxx>
62*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
63*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
64*b1cdbd2cSJim Jagielski #include <sfx2/docfac.hxx>
65*b1cdbd2cSJim Jagielski #include "appbaslib.hxx"
66*b1cdbd2cSJim Jagielski #include <basic/basicmanagerrepository.hxx>
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski using ::basic::BasicManagerRepository;
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski //===================================================================
QueryExit_Impl()71*b1cdbd2cSJim Jagielski sal_Bool SfxApplication::QueryExit_Impl()
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski 	sal_Bool bQuit = sal_True;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 	// will trotzdem noch jemand, den man nicht abschiessen kann, die App haben?
76*b1cdbd2cSJim Jagielski     if ( !bQuit )
77*b1cdbd2cSJim Jagielski 	{
78*b1cdbd2cSJim Jagielski 		// nicht wirklich beenden, nur minimieren
79*b1cdbd2cSJim Jagielski         InfoBox aInfoBox( NULL, SfxResId(MSG_CANT_QUIT) );
80*b1cdbd2cSJim Jagielski 		aInfoBox.Execute();
81*b1cdbd2cSJim Jagielski 		DBG_TRACE( "QueryExit => FALSE (in use)" );
82*b1cdbd2cSJim Jagielski 		return sal_False;
83*b1cdbd2cSJim Jagielski 	}
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 	return sal_True;
86*b1cdbd2cSJim Jagielski }
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
89*b1cdbd2cSJim Jagielski 
Deinitialize()90*b1cdbd2cSJim Jagielski void SfxApplication::Deinitialize()
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski     if ( pAppData_Impl->bDowning )
93*b1cdbd2cSJim Jagielski         return;
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 	StarBASIC::Stop();
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 	// ggf. BASIC speichern
98*b1cdbd2cSJim Jagielski     BasicManager* pBasMgr = BasicManagerRepository::getApplicationBasicManager( false );
99*b1cdbd2cSJim Jagielski     if ( pBasMgr && pBasMgr->IsModified() )
100*b1cdbd2cSJim Jagielski         SaveBasicManager();
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski     SaveBasicAndDialogContainer();
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski     pAppData_Impl->bDowning = sal_True; // wegen Timer aus DecAliveCount und QueryExit
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski     DELETEZ( pAppData_Impl->pTemplates );
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski     // By definition there shouldn't be any open view frames when we reach
109*b1cdbd2cSJim Jagielski     // this method. Therefore this call makes no sense and is the source of
110*b1cdbd2cSJim Jagielski     // some stack traces, which we don't understand.
111*b1cdbd2cSJim Jagielski     // For more information see:
112*b1cdbd2cSJim Jagielski     // #123501#
113*b1cdbd2cSJim Jagielski 	//SetViewFrame(0);
114*b1cdbd2cSJim Jagielski     pAppData_Impl->bDowning = sal_False;
115*b1cdbd2cSJim Jagielski 	DBG_ASSERT( !SfxViewFrame::GetFirst(),
116*b1cdbd2cSJim Jagielski 				"existing SfxViewFrame after Execute" );
117*b1cdbd2cSJim Jagielski 	DBG_ASSERT( !SfxObjectShell::GetFirst(),
118*b1cdbd2cSJim Jagielski 				"existing SfxObjectShell after Execute" );
119*b1cdbd2cSJim Jagielski     pAppData_Impl->pAppDispat->Pop( *this, SFX_SHELL_POP_UNTIL );
120*b1cdbd2cSJim Jagielski     pAppData_Impl->pAppDispat->Flush();
121*b1cdbd2cSJim Jagielski     pAppData_Impl->bDowning = sal_True;
122*b1cdbd2cSJim Jagielski     pAppData_Impl->pAppDispat->DoDeactivate_Impl( sal_True, NULL );
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	// call derived application-exit
125*b1cdbd2cSJim Jagielski 	Exit();
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski     // Controller u."a. freigeben
128*b1cdbd2cSJim Jagielski     // dabei sollten auch restliche Komponenten ( Beamer! ) verschwinden
129*b1cdbd2cSJim Jagielski     BasicManagerRepository::resetApplicationBasicManager();
130*b1cdbd2cSJim Jagielski     pAppData_Impl->pBasicManager->reset( NULL );
131*b1cdbd2cSJim Jagielski         // this will also delete pBasMgr
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski     DBG_ASSERT( pAppData_Impl->pViewFrame == 0, "active foreign ViewFrame" );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski     delete[] pAppData_Impl->pInterfaces, pAppData_Impl->pInterfaces = 0;
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 	// free administration managers
138*b1cdbd2cSJim Jagielski     DELETEZ(pAppData_Impl->pAppDispat);
139*b1cdbd2cSJim Jagielski 	SfxResId::DeleteResMgr();
140*b1cdbd2cSJim Jagielski     DELETEZ(pAppData_Impl->pOfaResMgr);
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 	// ab hier d"urfen keine SvObjects mehr existieren
143*b1cdbd2cSJim Jagielski     DELETEZ(pAppData_Impl->pMatcher);
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pSlotPool);
146*b1cdbd2cSJim Jagielski 	DELETEX(pAppData_Impl->pFactArr);
147*b1cdbd2cSJim Jagielski 	DELETEX(pAppData_Impl->pInitLinkList);
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pTbxCtrlFac);
150*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pStbCtrlFac);
151*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pMenuCtrlFac);
152*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pViewFrames);
153*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pViewShells);
154*b1cdbd2cSJim Jagielski     DELETEX(pAppData_Impl->pObjShells);
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     //TODO/CLEANTUP
157*b1cdbd2cSJim Jagielski     //ReleaseArgs could be used instead!
158*b1cdbd2cSJim Jagielski /* This leak is intended !
159*b1cdbd2cSJim Jagielski    Otherwise the TestTool cant use .uno:QuitApp ...
160*b1cdbd2cSJim Jagielski    because every destructed ItemSet work's on an already
161*b1cdbd2cSJim Jagielski    released pool pointer .-)
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 	NoChaos::ReleaseItemPool();
164*b1cdbd2cSJim Jagielski */
165*b1cdbd2cSJim Jagielski 	pAppData_Impl->pPool = NULL;
166*b1cdbd2cSJim Jagielski     DELETEZ(pAppData_Impl->pBasicResMgr);
167*b1cdbd2cSJim Jagielski     DELETEZ(pAppData_Impl->pSvtResMgr);
168*b1cdbd2cSJim Jagielski }
169