xref: /aoo4110/main/sw/source/ui/app/swwait.cxx (revision b1cdbd2c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 #include <swwait.hxx>
28 #include <docsh.hxx>
29 
30 #include <sfx2/viewfrm.hxx>
31 #include <sfx2/dispatch.hxx>
32 #include <vcl/window.hxx>
33 
34 
SwWait(SwDocShell & rDocShell,const bool bLockUnlockDispatcher)35 SwWait::SwWait(
36     SwDocShell &rDocShell,
37     const bool bLockUnlockDispatcher )
38     : mrDoc ( rDocShell )
39     , mbLockUnlockDispatcher( bLockUnlockDispatcher )
40     , mpLockedDispatchers()
41 {
42 	EnterWaitAndLockDispatcher();
43 }
44 
~SwWait()45 SwWait::~SwWait()
46 {
47 	LeaveWaitAndUnlockDispatcher();
48 }
49 
EnterWaitAndLockDispatcher()50 void SwWait::EnterWaitAndLockDispatcher()
51 {
52     SfxViewFrame *pFrame = SfxViewFrame::GetFirst( &mrDoc, sal_False );
53     while ( pFrame )
54     {
55         pFrame->GetWindow().EnterWait();
56         if ( mbLockUnlockDispatcher )
57         {
58             // do not look already locked dispatchers
59             SfxDispatcher* pDispatcher = pFrame->GetDispatcher();
60             if ( !pDispatcher->IsLocked() )
61             {
62                 pDispatcher->Lock( sal_True );
63                 mpLockedDispatchers.insert( pDispatcher );
64             }
65         }
66 
67         pFrame = SfxViewFrame::GetNext( *pFrame, &mrDoc, sal_False );
68     }
69 }
70 
LeaveWaitAndUnlockDispatcher()71 void SwWait::LeaveWaitAndUnlockDispatcher()
72 {
73     SfxViewFrame *pFrame = SfxViewFrame::GetFirst( &mrDoc, sal_False );
74     while ( pFrame )
75     {
76         pFrame->GetWindow().LeaveWait();
77         if ( mbLockUnlockDispatcher )
78         {
79             // only unlock dispatchers which had been locked
80             SfxDispatcher* pDispatcher = pFrame->GetDispatcher();
81             if ( mpLockedDispatchers.find( pDispatcher ) != mpLockedDispatchers.end() )
82             {
83                 mpLockedDispatchers.erase( pDispatcher );
84                 pDispatcher->Lock( sal_False );
85             }
86         }
87 
88         pFrame = SfxViewFrame::GetNext( *pFrame, &mrDoc, sal_False );
89     }
90 }
91 
92 
93