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