xref: /AOO41X/main/vcl/source/window/syswin.cxx (revision 9f62ea84a806e17e6f2bbff75724a7257a0eb5d9)
1*9f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*9f62ea84SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*9f62ea84SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*9f62ea84SAndrew Rist  * distributed with this work for additional information
6*9f62ea84SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*9f62ea84SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*9f62ea84SAndrew Rist  * "License"); you may not use this file except in compliance
9*9f62ea84SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*9f62ea84SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*9f62ea84SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*9f62ea84SAndrew Rist  * software distributed under the License is distributed on an
15*9f62ea84SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9f62ea84SAndrew Rist  * KIND, either express or implied.  See the License for the
17*9f62ea84SAndrew Rist  * specific language governing permissions and limitations
18*9f62ea84SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*9f62ea84SAndrew Rist  *************************************************************/
21*9f62ea84SAndrew Rist 
22*9f62ea84SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_vcl.hxx"
26cdf0e10cSrcweir #include <tools/debug.hxx>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <vcl/svapp.hxx>
29cdf0e10cSrcweir #include <vcl/menu.hxx>
30cdf0e10cSrcweir #include <vcl/sound.hxx>
31cdf0e10cSrcweir #include <vcl/svapp.hxx>
32cdf0e10cSrcweir #include <vcl/event.hxx>
33cdf0e10cSrcweir #include <vcl/syswin.hxx>
34cdf0e10cSrcweir #include <vcl/taskpanelist.hxx>
35cdf0e10cSrcweir #include <vcl/unowrap.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include <salframe.hxx>
38cdf0e10cSrcweir #include <svdata.hxx>
39cdf0e10cSrcweir #include <brdwin.hxx>
40cdf0e10cSrcweir #include <window.h>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir using namespace ::com::sun::star::uno;
43cdf0e10cSrcweir using namespace ::com::sun::star::lang;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir // =======================================================================
46cdf0e10cSrcweir class SystemWindow::ImplData
47cdf0e10cSrcweir {
48cdf0e10cSrcweir public:
49cdf0e10cSrcweir     ImplData();
50cdf0e10cSrcweir     ~ImplData();
51cdf0e10cSrcweir 
52cdf0e10cSrcweir     TaskPaneList*   mpTaskPaneList;
53cdf0e10cSrcweir     Size            maMaxOutSize;
54cdf0e10cSrcweir     rtl::OUString   maRepresentedURL;
55cdf0e10cSrcweir };
56cdf0e10cSrcweir 
ImplData()57cdf0e10cSrcweir SystemWindow::ImplData::ImplData()
58cdf0e10cSrcweir {
59cdf0e10cSrcweir     mpTaskPaneList = NULL;
60cdf0e10cSrcweir     maMaxOutSize = Size( SHRT_MAX, SHRT_MAX );
61cdf0e10cSrcweir }
62cdf0e10cSrcweir 
~ImplData()63cdf0e10cSrcweir SystemWindow::ImplData::~ImplData()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir     if( mpTaskPaneList )
66cdf0e10cSrcweir         delete mpTaskPaneList;
67cdf0e10cSrcweir }
68cdf0e10cSrcweir 
69cdf0e10cSrcweir // =======================================================================
70cdf0e10cSrcweir 
SystemWindow(WindowType nType)71cdf0e10cSrcweir SystemWindow::SystemWindow( WindowType nType ) :
72cdf0e10cSrcweir     Window( nType )
73cdf0e10cSrcweir {
74cdf0e10cSrcweir     mpImplData          = new ImplData;
75cdf0e10cSrcweir     mpWindowImpl->mbSysWin            = sal_True;
76cdf0e10cSrcweir     mpWindowImpl->mnActivateMode      = ACTIVATE_MODE_GRABFOCUS;
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     mpMenuBar           = NULL;
79cdf0e10cSrcweir     mbPined             = sal_False;
80cdf0e10cSrcweir     mbRollUp            = sal_False;
81cdf0e10cSrcweir     mbRollFunc          = sal_False;
82cdf0e10cSrcweir     mbDockBtn           = sal_False;
83cdf0e10cSrcweir     mbHideBtn           = sal_False;
84cdf0e10cSrcweir     mbSysChild          = sal_False;
85cdf0e10cSrcweir     mnMenuBarMode       = MENUBAR_MODE_NORMAL;
86cdf0e10cSrcweir     mnIcon              = 0;
87cdf0e10cSrcweir }
88cdf0e10cSrcweir 
~SystemWindow()89cdf0e10cSrcweir SystemWindow::~SystemWindow()
90cdf0e10cSrcweir {
91cdf0e10cSrcweir     delete mpImplData;
92cdf0e10cSrcweir     mpImplData = NULL;
93cdf0e10cSrcweir }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir // -----------------------------------------------------------------------
96cdf0e10cSrcweir 
Notify(NotifyEvent & rNEvt)97cdf0e10cSrcweir long SystemWindow::Notify( NotifyEvent& rNEvt )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir     // capture KeyEvents for menu handling
100cdf0e10cSrcweir     if ( rNEvt.GetType() == EVENT_KEYINPUT )
101cdf0e10cSrcweir     {
102cdf0e10cSrcweir         MenuBar* pMBar = mpMenuBar;
103cdf0e10cSrcweir         if ( !pMBar && ( GetType() == WINDOW_FLOATINGWINDOW ) )
104cdf0e10cSrcweir         {
105cdf0e10cSrcweir             Window* pWin = ImplGetFrameWindow()->ImplGetWindow();
106cdf0e10cSrcweir             if( pWin && pWin->IsSystemWindow() )
107cdf0e10cSrcweir                 pMBar = ((SystemWindow*)pWin)->GetMenuBar();
108cdf0e10cSrcweir         }
109cdf0e10cSrcweir         if ( pMBar && pMBar->ImplHandleKeyEvent( *rNEvt.GetKeyEvent(), sal_False ) )
110cdf0e10cSrcweir             return sal_True;
111cdf0e10cSrcweir     }
112cdf0e10cSrcweir 
113cdf0e10cSrcweir     return Window::Notify( rNEvt );
114cdf0e10cSrcweir }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir // -----------------------------------------------------------------------
117cdf0e10cSrcweir 
PreNotify(NotifyEvent & rNEvt)118cdf0e10cSrcweir long SystemWindow::PreNotify( NotifyEvent& rNEvt )
119cdf0e10cSrcweir {
120cdf0e10cSrcweir     // capture KeyEvents for taskpane cycling
121cdf0e10cSrcweir     if ( rNEvt.GetType() == EVENT_KEYINPUT )
122cdf0e10cSrcweir     {
123cdf0e10cSrcweir         if( rNEvt.GetKeyEvent()->GetKeyCode().GetCode() == KEY_F6 &&
124cdf0e10cSrcweir             rNEvt.GetKeyEvent()->GetKeyCode().IsMod1() &&
125cdf0e10cSrcweir            !rNEvt.GetKeyEvent()->GetKeyCode().IsShift() )
126cdf0e10cSrcweir         {
127cdf0e10cSrcweir             // Ctrl-F6 goes directly to the document
128cdf0e10cSrcweir 			GrabFocusToDocument();
129cdf0e10cSrcweir 			return sal_True;
130cdf0e10cSrcweir         }
131cdf0e10cSrcweir         else
132cdf0e10cSrcweir         {
133cdf0e10cSrcweir             TaskPaneList *pTList = mpImplData->mpTaskPaneList;
134cdf0e10cSrcweir             if( !pTList && ( GetType() == WINDOW_FLOATINGWINDOW ) )
135cdf0e10cSrcweir             {
136cdf0e10cSrcweir                 Window* pWin = ImplGetFrameWindow()->ImplGetWindow();
137cdf0e10cSrcweir                 if( pWin && pWin->IsSystemWindow() )
138cdf0e10cSrcweir                     pTList = ((SystemWindow*)pWin)->mpImplData->mpTaskPaneList;
139cdf0e10cSrcweir             }
140cdf0e10cSrcweir             if( !pTList )
141cdf0e10cSrcweir             {
142cdf0e10cSrcweir                 // search topmost system window which is the one to handle dialog/toolbar cycling
143cdf0e10cSrcweir                 SystemWindow *pSysWin = this;
144cdf0e10cSrcweir                 Window *pWin = this;
145cdf0e10cSrcweir                 while( pWin )
146cdf0e10cSrcweir                 {
147cdf0e10cSrcweir                     pWin = pWin->GetParent();
148cdf0e10cSrcweir                     if( pWin && pWin->IsSystemWindow() )
149cdf0e10cSrcweir                         pSysWin = (SystemWindow*) pWin;
150cdf0e10cSrcweir                 }
151cdf0e10cSrcweir                 pTList = pSysWin->mpImplData->mpTaskPaneList;
152cdf0e10cSrcweir             }
153cdf0e10cSrcweir 		    if( pTList && pTList->HandleKeyEvent( *rNEvt.GetKeyEvent() ) )
154cdf0e10cSrcweir 			    return sal_True;
155cdf0e10cSrcweir         }
156cdf0e10cSrcweir 	}
157cdf0e10cSrcweir     return Window::PreNotify( rNEvt );
158cdf0e10cSrcweir }
159cdf0e10cSrcweir 
160cdf0e10cSrcweir // -----------------------------------------------------------------------
161cdf0e10cSrcweir 
GetTaskPaneList()162cdf0e10cSrcweir TaskPaneList* SystemWindow::GetTaskPaneList()
163cdf0e10cSrcweir {
164cdf0e10cSrcweir 	if( mpImplData->mpTaskPaneList )
165cdf0e10cSrcweir 		return mpImplData->mpTaskPaneList ;
166cdf0e10cSrcweir 	else
167cdf0e10cSrcweir 	{
168cdf0e10cSrcweir 		mpImplData->mpTaskPaneList = new TaskPaneList();
169cdf0e10cSrcweir         MenuBar* pMBar = mpMenuBar;
170cdf0e10cSrcweir         if ( !pMBar && ( GetType() == WINDOW_FLOATINGWINDOW ) )
171cdf0e10cSrcweir         {
172cdf0e10cSrcweir             Window* pWin = ImplGetFrameWindow()->ImplGetWindow();
173cdf0e10cSrcweir             if ( pWin && pWin->IsSystemWindow() )
174cdf0e10cSrcweir                 pMBar = ((SystemWindow*)pWin)->GetMenuBar();
175cdf0e10cSrcweir         }
176cdf0e10cSrcweir 		if( pMBar )
177cdf0e10cSrcweir 			mpImplData->mpTaskPaneList->AddWindow( pMBar->ImplGetWindow() );
178cdf0e10cSrcweir 		return mpImplData->mpTaskPaneList;
179cdf0e10cSrcweir 	}
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir // -----------------------------------------------------------------------
183cdf0e10cSrcweir 
Close()184cdf0e10cSrcweir sal_Bool SystemWindow::Close()
185cdf0e10cSrcweir {
186cdf0e10cSrcweir     ImplDelData aDelData;
187cdf0e10cSrcweir     ImplAddDel( &aDelData );
188cdf0e10cSrcweir     ImplCallEventListeners( VCLEVENT_WINDOW_CLOSE );
189cdf0e10cSrcweir     if ( aDelData.IsDelete() )
190cdf0e10cSrcweir         return sal_False;
191cdf0e10cSrcweir     ImplRemoveDel( &aDelData );
192cdf0e10cSrcweir 
193cdf0e10cSrcweir     if ( mpWindowImpl->mxWindowPeer.is() && IsCreatedWithToolkit() )
194cdf0e10cSrcweir         return sal_False;
195cdf0e10cSrcweir 
196cdf0e10cSrcweir     // Is Window not closeable, ignore close
197cdf0e10cSrcweir     Window*     pBorderWin = ImplGetBorderWindow();
198cdf0e10cSrcweir     WinBits     nStyle;
199cdf0e10cSrcweir     if ( pBorderWin )
200cdf0e10cSrcweir         nStyle = pBorderWin->GetStyle();
201cdf0e10cSrcweir     else
202cdf0e10cSrcweir         nStyle = GetStyle();
203cdf0e10cSrcweir     if ( !(nStyle & WB_CLOSEABLE) )
204cdf0e10cSrcweir     {
205cdf0e10cSrcweir         Sound::Beep( SOUND_DISABLE, this );
206cdf0e10cSrcweir         return sal_False;
207cdf0e10cSrcweir     }
208cdf0e10cSrcweir 
209cdf0e10cSrcweir     Hide();
210cdf0e10cSrcweir 
211cdf0e10cSrcweir     return sal_True;
212cdf0e10cSrcweir }
213cdf0e10cSrcweir 
214cdf0e10cSrcweir // -----------------------------------------------------------------------
215cdf0e10cSrcweir 
TitleButtonClick(sal_uInt16)216cdf0e10cSrcweir void SystemWindow::TitleButtonClick( sal_uInt16 )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir // -----------------------------------------------------------------------
221cdf0e10cSrcweir 
Pin()222cdf0e10cSrcweir void SystemWindow::Pin()
223cdf0e10cSrcweir {
224cdf0e10cSrcweir }
225cdf0e10cSrcweir 
226cdf0e10cSrcweir // -----------------------------------------------------------------------
227cdf0e10cSrcweir 
Roll()228cdf0e10cSrcweir void SystemWindow::Roll()
229cdf0e10cSrcweir {
230cdf0e10cSrcweir }
231cdf0e10cSrcweir 
232cdf0e10cSrcweir // -----------------------------------------------------------------------
233cdf0e10cSrcweir 
Resizing(Size &)234cdf0e10cSrcweir void SystemWindow::Resizing( Size& )
235cdf0e10cSrcweir {
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
238cdf0e10cSrcweir // -----------------------------------------------------------------------
239cdf0e10cSrcweir 
SetZLevel(sal_uInt8 nLevel)240cdf0e10cSrcweir void SystemWindow::SetZLevel( sal_uInt8 nLevel )
241cdf0e10cSrcweir {
242cdf0e10cSrcweir     Window* pWindow = this;
243cdf0e10cSrcweir     while ( pWindow->mpWindowImpl->mpBorderWindow )
244cdf0e10cSrcweir         pWindow = pWindow->mpWindowImpl->mpBorderWindow;
245cdf0e10cSrcweir     if ( pWindow->mpWindowImpl->mbOverlapWin && !pWindow->mpWindowImpl->mbFrame )
246cdf0e10cSrcweir     {
247cdf0e10cSrcweir         sal_uInt8 nOldLevel = pWindow->mpWindowImpl->mpOverlapData->mnTopLevel;
248cdf0e10cSrcweir         pWindow->mpWindowImpl->mpOverlapData->mnTopLevel = nLevel;
249cdf0e10cSrcweir         // Wenn der neue Level groesser als der alte ist, schieben
250cdf0e10cSrcweir         // wir das Fenster nach hinten
251cdf0e10cSrcweir         if ( !IsReallyVisible() && (nLevel > nOldLevel) && pWindow->mpWindowImpl->mpNext )
252cdf0e10cSrcweir         {
253cdf0e10cSrcweir             // Fenster aus der Liste entfernen
254cdf0e10cSrcweir             if ( pWindow->mpWindowImpl->mpPrev )
255cdf0e10cSrcweir                 pWindow->mpWindowImpl->mpPrev->mpWindowImpl->mpNext = pWindow->mpWindowImpl->mpNext;
256cdf0e10cSrcweir             else
257cdf0e10cSrcweir                 pWindow->mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap = pWindow->mpWindowImpl->mpNext;
258cdf0e10cSrcweir             pWindow->mpWindowImpl->mpNext->mpWindowImpl->mpPrev = pWindow->mpWindowImpl->mpPrev;
259cdf0e10cSrcweir             pWindow->mpWindowImpl->mpNext = NULL;
260cdf0e10cSrcweir             // und Fenster wieder in die Liste am Ende eintragen
261cdf0e10cSrcweir             pWindow->mpWindowImpl->mpPrev = pWindow->mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap;
262cdf0e10cSrcweir             pWindow->mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpLastOverlap = pWindow;
263cdf0e10cSrcweir             pWindow->mpWindowImpl->mpPrev->mpWindowImpl->mpNext = pWindow;
264cdf0e10cSrcweir         }
265cdf0e10cSrcweir     }
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
268cdf0e10cSrcweir // -----------------------------------------------------------------------
269cdf0e10cSrcweir 
SetRepresentedURL(const rtl::OUString & i_rURL)270cdf0e10cSrcweir void SystemWindow::SetRepresentedURL( const rtl::OUString& i_rURL )
271cdf0e10cSrcweir {
272cdf0e10cSrcweir     bool bChanged = (i_rURL != mpImplData->maRepresentedURL);
273cdf0e10cSrcweir     mpImplData->maRepresentedURL = i_rURL;
274cdf0e10cSrcweir     if ( !mbSysChild && bChanged )
275cdf0e10cSrcweir     {
276cdf0e10cSrcweir         const Window* pWindow = this;
277cdf0e10cSrcweir         while ( pWindow->mpWindowImpl->mpBorderWindow )
278cdf0e10cSrcweir             pWindow = pWindow->mpWindowImpl->mpBorderWindow;
279cdf0e10cSrcweir 
280cdf0e10cSrcweir         if ( pWindow->mpWindowImpl->mbFrame )
281cdf0e10cSrcweir             pWindow->mpWindowImpl->mpFrame->SetRepresentedURL( i_rURL );
282cdf0e10cSrcweir     }
283cdf0e10cSrcweir }
284cdf0e10cSrcweir // -----------------------------------------------------------------------
285cdf0e10cSrcweir 
GetRepresentedURL() const286cdf0e10cSrcweir const rtl::OUString& SystemWindow::GetRepresentedURL() const
287cdf0e10cSrcweir {
288cdf0e10cSrcweir     return mpImplData->maRepresentedURL;
289cdf0e10cSrcweir }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir // -----------------------------------------------------------------------
292cdf0e10cSrcweir 
SetIcon(sal_uInt16 nIcon)293cdf0e10cSrcweir void SystemWindow::SetIcon( sal_uInt16 nIcon )
294cdf0e10cSrcweir {
295cdf0e10cSrcweir     if ( mnIcon == nIcon )
296cdf0e10cSrcweir         return;
297cdf0e10cSrcweir 
298cdf0e10cSrcweir     mnIcon = nIcon;
299cdf0e10cSrcweir 
300cdf0e10cSrcweir     if ( !mbSysChild )
301cdf0e10cSrcweir     {
302cdf0e10cSrcweir         const Window* pWindow = this;
303cdf0e10cSrcweir         while ( pWindow->mpWindowImpl->mpBorderWindow )
304cdf0e10cSrcweir             pWindow = pWindow->mpWindowImpl->mpBorderWindow;
305cdf0e10cSrcweir 
306cdf0e10cSrcweir         if ( pWindow->mpWindowImpl->mbFrame )
307cdf0e10cSrcweir             pWindow->mpWindowImpl->mpFrame->SetIcon( nIcon );
308cdf0e10cSrcweir     }
309cdf0e10cSrcweir }
310cdf0e10cSrcweir 
311cdf0e10cSrcweir // -----------------------------------------------------------------------
312cdf0e10cSrcweir 
GetZLevel() const313cdf0e10cSrcweir sal_uInt8 SystemWindow::GetZLevel() const
314cdf0e10cSrcweir {
315cdf0e10cSrcweir     const Window* pWindow = this;
316cdf0e10cSrcweir     while ( pWindow->mpWindowImpl->mpBorderWindow )
317cdf0e10cSrcweir         pWindow = pWindow->mpWindowImpl->mpBorderWindow;
318cdf0e10cSrcweir     if ( pWindow->mpWindowImpl->mpOverlapData )
319cdf0e10cSrcweir         return pWindow->mpWindowImpl->mpOverlapData->mnTopLevel;
320cdf0e10cSrcweir     else
321cdf0e10cSrcweir         return sal_False;
322cdf0e10cSrcweir }
323cdf0e10cSrcweir 
324cdf0e10cSrcweir // -----------------------------------------------------------------------
325cdf0e10cSrcweir 
EnableSaveBackground(sal_Bool bSave)326cdf0e10cSrcweir void SystemWindow::EnableSaveBackground( sal_Bool bSave )
327cdf0e10cSrcweir {
328cdf0e10cSrcweir     if( ImplGetSVData()->maWinData.mbNoSaveBackground )
329cdf0e10cSrcweir         bSave = false;
330cdf0e10cSrcweir 
331cdf0e10cSrcweir     Window* pWindow = this;
332cdf0e10cSrcweir     while ( pWindow->mpWindowImpl->mpBorderWindow )
333cdf0e10cSrcweir         pWindow = pWindow->mpWindowImpl->mpBorderWindow;
334cdf0e10cSrcweir     if ( pWindow->mpWindowImpl->mbOverlapWin && !pWindow->mpWindowImpl->mbFrame )
335cdf0e10cSrcweir     {
336cdf0e10cSrcweir         pWindow->mpWindowImpl->mpOverlapData->mbSaveBack = bSave;
337cdf0e10cSrcweir         if ( !bSave )
338cdf0e10cSrcweir             pWindow->ImplDeleteOverlapBackground();
339cdf0e10cSrcweir     }
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
342cdf0e10cSrcweir // -----------------------------------------------------------------------
343cdf0e10cSrcweir 
IsSaveBackgroundEnabled() const344cdf0e10cSrcweir sal_Bool SystemWindow::IsSaveBackgroundEnabled() const
345cdf0e10cSrcweir {
346cdf0e10cSrcweir     const Window* pWindow = this;
347cdf0e10cSrcweir     while ( pWindow->mpWindowImpl->mpBorderWindow )
348cdf0e10cSrcweir         pWindow = pWindow->mpWindowImpl->mpBorderWindow;
349cdf0e10cSrcweir     if ( pWindow->mpWindowImpl->mpOverlapData )
350cdf0e10cSrcweir         return pWindow->mpWindowImpl->mpOverlapData->mbSaveBack;
351cdf0e10cSrcweir     else
352cdf0e10cSrcweir         return sal_False;
353cdf0e10cSrcweir }
354cdf0e10cSrcweir 
355cdf0e10cSrcweir // -----------------------------------------------------------------------
356cdf0e10cSrcweir 
ShowTitleButton(sal_uInt16 nButton,sal_Bool bVisible)357cdf0e10cSrcweir void SystemWindow::ShowTitleButton( sal_uInt16 nButton, sal_Bool bVisible )
358cdf0e10cSrcweir {
359cdf0e10cSrcweir     if ( nButton == TITLE_BUTTON_DOCKING )
360cdf0e10cSrcweir     {
361cdf0e10cSrcweir         if ( mbDockBtn != bVisible )
362cdf0e10cSrcweir         {
363cdf0e10cSrcweir             mbDockBtn = bVisible;
364cdf0e10cSrcweir             if ( mpWindowImpl->mpBorderWindow )
365cdf0e10cSrcweir                 ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetDockButton( bVisible );
366cdf0e10cSrcweir         }
367cdf0e10cSrcweir     }
368cdf0e10cSrcweir     else if ( nButton == TITLE_BUTTON_HIDE )
369cdf0e10cSrcweir     {
370cdf0e10cSrcweir         if ( mbHideBtn != bVisible )
371cdf0e10cSrcweir         {
372cdf0e10cSrcweir             mbHideBtn = bVisible;
373cdf0e10cSrcweir             if ( mpWindowImpl->mpBorderWindow )
374cdf0e10cSrcweir                 ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetHideButton( bVisible );
375cdf0e10cSrcweir         }
376cdf0e10cSrcweir     }
377cdf0e10cSrcweir     else if ( nButton == TITLE_BUTTON_MENU )
378cdf0e10cSrcweir     {
379cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow )
380cdf0e10cSrcweir             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMenuButton( bVisible );
381cdf0e10cSrcweir     }
382cdf0e10cSrcweir     else
383cdf0e10cSrcweir         return;
384cdf0e10cSrcweir }
385cdf0e10cSrcweir 
386cdf0e10cSrcweir // -----------------------------------------------------------------------
387cdf0e10cSrcweir 
IsTitleButtonVisible(sal_uInt16 nButton) const388cdf0e10cSrcweir sal_Bool SystemWindow::IsTitleButtonVisible( sal_uInt16 nButton ) const
389cdf0e10cSrcweir {
390cdf0e10cSrcweir     if ( nButton == TITLE_BUTTON_DOCKING )
391cdf0e10cSrcweir         return mbDockBtn;
392cdf0e10cSrcweir     else /* if ( nButton == TITLE_BUTTON_HIDE ) */
393cdf0e10cSrcweir         return mbHideBtn;
394cdf0e10cSrcweir }
395cdf0e10cSrcweir 
396cdf0e10cSrcweir // -----------------------------------------------------------------------
397cdf0e10cSrcweir 
SetPin(sal_Bool bPin)398cdf0e10cSrcweir void SystemWindow::SetPin( sal_Bool bPin )
399cdf0e10cSrcweir {
400cdf0e10cSrcweir     if ( bPin != mbPined )
401cdf0e10cSrcweir     {
402cdf0e10cSrcweir         mbPined = bPin;
403cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow )
404cdf0e10cSrcweir             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetPin( bPin );
405cdf0e10cSrcweir     }
406cdf0e10cSrcweir }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir // -----------------------------------------------------------------------
409cdf0e10cSrcweir 
RollUp()410cdf0e10cSrcweir void SystemWindow::RollUp()
411cdf0e10cSrcweir {
412cdf0e10cSrcweir     if ( !mbRollUp )
413cdf0e10cSrcweir     {
414cdf0e10cSrcweir         maOrgSize = GetOutputSizePixel();
415cdf0e10cSrcweir         mbRollFunc = sal_True;
416cdf0e10cSrcweir         Size aSize = maRollUpOutSize;
417cdf0e10cSrcweir         if ( !aSize.Width() )
418cdf0e10cSrcweir             aSize.Width() = GetOutputSizePixel().Width();
419cdf0e10cSrcweir         mbRollUp = sal_True;
420cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow )
421cdf0e10cSrcweir             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetRollUp( sal_True, aSize );
422cdf0e10cSrcweir         else
423cdf0e10cSrcweir             SetOutputSizePixel( aSize );
424cdf0e10cSrcweir         mbRollFunc = sal_False;
425cdf0e10cSrcweir     }
426cdf0e10cSrcweir }
427cdf0e10cSrcweir 
428cdf0e10cSrcweir // -----------------------------------------------------------------------
429cdf0e10cSrcweir 
RollDown()430cdf0e10cSrcweir void SystemWindow::RollDown()
431cdf0e10cSrcweir {
432cdf0e10cSrcweir     if ( mbRollUp )
433cdf0e10cSrcweir     {
434cdf0e10cSrcweir         mbRollUp = sal_False;
435cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow )
436cdf0e10cSrcweir             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetRollUp( sal_False, maOrgSize );
437cdf0e10cSrcweir         else
438cdf0e10cSrcweir             SetOutputSizePixel( maOrgSize );
439cdf0e10cSrcweir     }
440cdf0e10cSrcweir }
441cdf0e10cSrcweir 
442cdf0e10cSrcweir // -----------------------------------------------------------------------
443cdf0e10cSrcweir 
SetMinOutputSizePixel(const Size & rSize)444cdf0e10cSrcweir void SystemWindow::SetMinOutputSizePixel( const Size& rSize )
445cdf0e10cSrcweir {
446cdf0e10cSrcweir     maMinOutSize = rSize;
447cdf0e10cSrcweir     if ( mpWindowImpl->mpBorderWindow )
448cdf0e10cSrcweir     {
449cdf0e10cSrcweir         ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMinOutputSize( rSize.Width(), rSize.Height() );
450cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame )
451cdf0e10cSrcweir             mpWindowImpl->mpBorderWindow->mpWindowImpl->mpFrame->SetMinClientSize( rSize.Width(), rSize.Height() );
452cdf0e10cSrcweir     }
453cdf0e10cSrcweir     else if ( mpWindowImpl->mbFrame )
454cdf0e10cSrcweir         mpWindowImpl->mpFrame->SetMinClientSize( rSize.Width(), rSize.Height() );
455cdf0e10cSrcweir }
456cdf0e10cSrcweir 
457cdf0e10cSrcweir // -----------------------------------------------------------------------
458cdf0e10cSrcweir 
SetMaxOutputSizePixel(const Size & rSize)459cdf0e10cSrcweir void SystemWindow::SetMaxOutputSizePixel( const Size& rSize )
460cdf0e10cSrcweir {
461cdf0e10cSrcweir     Size aSize( rSize );
462cdf0e10cSrcweir     if( aSize.Width() > SHRT_MAX || aSize.Width() <= 0 )
463cdf0e10cSrcweir         aSize.Width() = SHRT_MAX;
464cdf0e10cSrcweir     if( aSize.Height() > SHRT_MAX || aSize.Height() <= 0 )
465cdf0e10cSrcweir         aSize.Height() = SHRT_MAX;
466cdf0e10cSrcweir 
467cdf0e10cSrcweir     mpImplData->maMaxOutSize = aSize;
468cdf0e10cSrcweir     if ( mpWindowImpl->mpBorderWindow )
469cdf0e10cSrcweir     {
470cdf0e10cSrcweir         ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMaxOutputSize( aSize.Width(), aSize.Height() );
471cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame )
472cdf0e10cSrcweir             mpWindowImpl->mpBorderWindow->mpWindowImpl->mpFrame->SetMaxClientSize( aSize.Width(), aSize.Height() );
473cdf0e10cSrcweir     }
474cdf0e10cSrcweir     else if ( mpWindowImpl->mbFrame )
475cdf0e10cSrcweir         mpWindowImpl->mpFrame->SetMaxClientSize( aSize.Width(), aSize.Height() );
476cdf0e10cSrcweir }
477cdf0e10cSrcweir 
GetMaxOutputSizePixel() const478cdf0e10cSrcweir const Size& SystemWindow::GetMaxOutputSizePixel() const
479cdf0e10cSrcweir {
480cdf0e10cSrcweir     return mpImplData->maMaxOutSize;
481cdf0e10cSrcweir }
482cdf0e10cSrcweir // -----------------------------------------------------------------------
483cdf0e10cSrcweir 
GetResizeOutputSizePixel() const484cdf0e10cSrcweir Size SystemWindow::GetResizeOutputSizePixel() const
485cdf0e10cSrcweir {
486cdf0e10cSrcweir     Size aSize = GetOutputSizePixel();
487cdf0e10cSrcweir     if ( aSize.Width() < maMinOutSize.Width() )
488cdf0e10cSrcweir         aSize.Width() = maMinOutSize.Width();
489cdf0e10cSrcweir     if ( aSize.Height() < maMinOutSize.Height() )
490cdf0e10cSrcweir         aSize.Height() = maMinOutSize.Height();
491cdf0e10cSrcweir     return aSize;
492cdf0e10cSrcweir }
493cdf0e10cSrcweir 
494cdf0e10cSrcweir // -----------------------------------------------------------------------
495cdf0e10cSrcweir 
ImplWindowStateFromStr(WindowStateData & rData,const ByteString & rStr)496cdf0e10cSrcweir static void ImplWindowStateFromStr( WindowStateData& rData, const ByteString& rStr )
497cdf0e10cSrcweir {
498cdf0e10cSrcweir     sal_uLong       nValidMask  = 0;
499cdf0e10cSrcweir     xub_StrLen  nIndex      = 0;
500cdf0e10cSrcweir     ByteString  aTokenStr;
501cdf0e10cSrcweir 
502cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ',', nIndex );
503cdf0e10cSrcweir     if ( aTokenStr.Len() )
504cdf0e10cSrcweir     {
505cdf0e10cSrcweir         rData.SetX( aTokenStr.ToInt32() );
506cdf0e10cSrcweir         if( rData.GetX() > -16384 && rData.GetX() < 16384 )
507cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_X;
508cdf0e10cSrcweir         else
509cdf0e10cSrcweir             rData.SetX( 0 );
510cdf0e10cSrcweir     }
511cdf0e10cSrcweir     else
512cdf0e10cSrcweir         rData.SetX( 0 );
513cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ',', nIndex );
514cdf0e10cSrcweir     if ( aTokenStr.Len() )
515cdf0e10cSrcweir     {
516cdf0e10cSrcweir         rData.SetY( aTokenStr.ToInt32() );
517cdf0e10cSrcweir         if( rData.GetY() > -16384 && rData.GetY() < 16384 )
518cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_Y;
519cdf0e10cSrcweir         else
520cdf0e10cSrcweir             rData.SetY( 0 );
521cdf0e10cSrcweir     }
522cdf0e10cSrcweir     else
523cdf0e10cSrcweir         rData.SetY( 0 );
524cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ',', nIndex );
525cdf0e10cSrcweir     if ( aTokenStr.Len() )
526cdf0e10cSrcweir     {
527cdf0e10cSrcweir         rData.SetWidth( aTokenStr.ToInt32() );
528cdf0e10cSrcweir         if( rData.GetWidth() > 0 && rData.GetWidth() < 16384 )
529cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_WIDTH;
530cdf0e10cSrcweir         else
531cdf0e10cSrcweir             rData.SetWidth( 0 );
532cdf0e10cSrcweir     }
533cdf0e10cSrcweir     else
534cdf0e10cSrcweir         rData.SetWidth( 0 );
535cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ';', nIndex );
536cdf0e10cSrcweir     if ( aTokenStr.Len() )
537cdf0e10cSrcweir     {
538cdf0e10cSrcweir         rData.SetHeight( aTokenStr.ToInt32() );
539cdf0e10cSrcweir         if( rData.GetHeight() > 0 && rData.GetHeight() < 16384 )
540cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_HEIGHT;
541cdf0e10cSrcweir         else
542cdf0e10cSrcweir             rData.SetHeight( 0 );
543cdf0e10cSrcweir     }
544cdf0e10cSrcweir     else
545cdf0e10cSrcweir         rData.SetHeight( 0 );
546cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ';', nIndex );
547cdf0e10cSrcweir     if ( aTokenStr.Len() )
548cdf0e10cSrcweir     {
549cdf0e10cSrcweir         // #94144# allow Minimize again, should be masked out when read from configuration
550cdf0e10cSrcweir         // 91625 - ignore Minimize
551cdf0e10cSrcweir         sal_uLong nState = (sal_uLong)aTokenStr.ToInt32();
552cdf0e10cSrcweir         //nState &= ~(WINDOWSTATE_STATE_MINIMIZED);
553cdf0e10cSrcweir         rData.SetState( nState );
554cdf0e10cSrcweir         nValidMask |= WINDOWSTATE_MASK_STATE;
555cdf0e10cSrcweir     }
556cdf0e10cSrcweir     else
557cdf0e10cSrcweir         rData.SetState( 0 );
558cdf0e10cSrcweir 
559cdf0e10cSrcweir     // read maximized pos/size
560cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ',', nIndex );
561cdf0e10cSrcweir     if ( aTokenStr.Len() )
562cdf0e10cSrcweir     {
563cdf0e10cSrcweir         rData.SetMaximizedX( aTokenStr.ToInt32() );
564cdf0e10cSrcweir         if( rData.GetMaximizedX() > -16384 && rData.GetMaximizedX() < 16384 )
565cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_X;
566cdf0e10cSrcweir         else
567cdf0e10cSrcweir             rData.SetMaximizedX( 0 );
568cdf0e10cSrcweir     }
569cdf0e10cSrcweir     else
570cdf0e10cSrcweir         rData.SetMaximizedX( 0 );
571cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ',', nIndex );
572cdf0e10cSrcweir     if ( aTokenStr.Len() )
573cdf0e10cSrcweir     {
574cdf0e10cSrcweir         rData.SetMaximizedY( aTokenStr.ToInt32() );
575cdf0e10cSrcweir         if( rData.GetMaximizedY() > -16384 && rData.GetMaximizedY() < 16384 )
576cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_Y;
577cdf0e10cSrcweir         else
578cdf0e10cSrcweir             rData.SetMaximizedY( 0 );
579cdf0e10cSrcweir     }
580cdf0e10cSrcweir     else
581cdf0e10cSrcweir         rData.SetMaximizedY( 0 );
582cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ',', nIndex );
583cdf0e10cSrcweir     if ( aTokenStr.Len() )
584cdf0e10cSrcweir     {
585cdf0e10cSrcweir         rData.SetMaximizedWidth( aTokenStr.ToInt32() );
586cdf0e10cSrcweir         if( rData.GetMaximizedWidth() > 0 && rData.GetMaximizedWidth() < 16384 )
587cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_WIDTH;
588cdf0e10cSrcweir         else
589cdf0e10cSrcweir             rData.SetMaximizedWidth( 0 );
590cdf0e10cSrcweir     }
591cdf0e10cSrcweir     else
592cdf0e10cSrcweir         rData.SetMaximizedWidth( 0 );
593cdf0e10cSrcweir     aTokenStr = rStr.GetToken( 0, ';', nIndex );
594cdf0e10cSrcweir     if ( aTokenStr.Len() )
595cdf0e10cSrcweir     {
596cdf0e10cSrcweir         rData.SetMaximizedHeight( aTokenStr.ToInt32() );
597cdf0e10cSrcweir         if( rData.GetMaximizedHeight() > 0 && rData.GetMaximizedHeight() < 16384 )
598cdf0e10cSrcweir             nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_HEIGHT;
599cdf0e10cSrcweir         else
600cdf0e10cSrcweir             rData.SetMaximizedHeight( 0 );
601cdf0e10cSrcweir     }
602cdf0e10cSrcweir     else
603cdf0e10cSrcweir         rData.SetMaximizedHeight( 0 );
604cdf0e10cSrcweir 
605cdf0e10cSrcweir     // mark valid fields
606cdf0e10cSrcweir     rData.SetMask( nValidMask );
607cdf0e10cSrcweir }
608cdf0e10cSrcweir 
609cdf0e10cSrcweir // -----------------------------------------------------------------------
610cdf0e10cSrcweir 
ImplWindowStateToStr(const WindowStateData & rData,ByteString & rStr)611cdf0e10cSrcweir static void ImplWindowStateToStr( const WindowStateData& rData, ByteString& rStr )
612cdf0e10cSrcweir {
613cdf0e10cSrcweir     sal_uLong nValidMask = rData.GetMask();
614cdf0e10cSrcweir     if ( !nValidMask )
615cdf0e10cSrcweir         return;
616cdf0e10cSrcweir 
617cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_X )
618cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetX() ) );
619cdf0e10cSrcweir     rStr.Append( ',' );
620cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_Y )
621cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetY() ) );
622cdf0e10cSrcweir     rStr.Append( ',' );
623cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_WIDTH )
624cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetWidth() ) );
625cdf0e10cSrcweir     rStr.Append( ',' );
626cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_HEIGHT )
627cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetHeight() ) );
628cdf0e10cSrcweir     rStr.Append( ';' );
629cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_STATE )
630cdf0e10cSrcweir     {
631cdf0e10cSrcweir         // #94144# allow Minimize again, should be masked out when read from configuration
632cdf0e10cSrcweir         // 91625 - ignore Minimize
633cdf0e10cSrcweir         sal_uLong nState = rData.GetState();
634cdf0e10cSrcweir         //nState &= ~(WINDOWSTATE_STATE_MINIMIZED);
635cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( (long)nState ) );
636cdf0e10cSrcweir     }
637cdf0e10cSrcweir     rStr.Append( ';' );
638cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_MAXIMIZED_X )
639cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetMaximizedX() ) );
640cdf0e10cSrcweir     rStr.Append( ',' );
641cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_MAXIMIZED_Y )
642cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetMaximizedY() ) );
643cdf0e10cSrcweir     rStr.Append( ',' );
644cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_MAXIMIZED_WIDTH )
645cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetMaximizedWidth() ) );
646cdf0e10cSrcweir     rStr.Append( ',' );
647cdf0e10cSrcweir     if ( nValidMask & WINDOWSTATE_MASK_MAXIMIZED_HEIGHT )
648cdf0e10cSrcweir         rStr.Append( ByteString::CreateFromInt32( rData.GetMaximizedHeight() ) );
649cdf0e10cSrcweir     rStr.Append( ';' );
650cdf0e10cSrcweir }
651cdf0e10cSrcweir 
652cdf0e10cSrcweir // -----------------------------------------------------------------------
653cdf0e10cSrcweir 
ImplMoveToScreen(long & io_rX,long & io_rY,long i_nWidth,long i_nHeight,Window * i_pConfigureWin)654cdf0e10cSrcweir void SystemWindow::ImplMoveToScreen( long& io_rX, long& io_rY, long i_nWidth, long i_nHeight, Window* i_pConfigureWin )
655cdf0e10cSrcweir {
656cdf0e10cSrcweir     Rectangle aScreenRect;
657cdf0e10cSrcweir     if( Application::IsMultiDisplay() )
658cdf0e10cSrcweir     {
659cdf0e10cSrcweir         aScreenRect = Application::GetScreenPosSizePixel( GetScreenNumber() );
660cdf0e10cSrcweir     }
661cdf0e10cSrcweir     else
662cdf0e10cSrcweir     {
663cdf0e10cSrcweir         aScreenRect = Application::GetScreenPosSizePixel( 0 );
664cdf0e10cSrcweir         for( unsigned int i = 1; i < Application::GetScreenCount(); i++ )
665cdf0e10cSrcweir             aScreenRect.Union( Application::GetScreenPosSizePixel( i ) );
666cdf0e10cSrcweir     }
667cdf0e10cSrcweir     // unfortunately most of the time width and height are not really known
668cdf0e10cSrcweir     if( i_nWidth < 1 )
669cdf0e10cSrcweir         i_nWidth = 50;
670cdf0e10cSrcweir     if( i_nHeight < 1 )
671cdf0e10cSrcweir         i_nHeight = 50;
672cdf0e10cSrcweir 
673cdf0e10cSrcweir     // check left border
674cdf0e10cSrcweir     bool bMove = false;
675cdf0e10cSrcweir     if( io_rX + i_nWidth < aScreenRect.Left() )
676cdf0e10cSrcweir     {
677cdf0e10cSrcweir         bMove = true;
678cdf0e10cSrcweir         io_rX = aScreenRect.Left();
679cdf0e10cSrcweir     }
680cdf0e10cSrcweir     // check right border
681cdf0e10cSrcweir     if( io_rX > aScreenRect.Right() - i_nWidth )
682cdf0e10cSrcweir     {
683cdf0e10cSrcweir         bMove = true;
684cdf0e10cSrcweir         io_rX = aScreenRect.Right() - i_nWidth;
685cdf0e10cSrcweir     }
686cdf0e10cSrcweir     // check top border
687cdf0e10cSrcweir     if( io_rY + i_nHeight < aScreenRect.Top() )
688cdf0e10cSrcweir     {
689cdf0e10cSrcweir         bMove = true;
690cdf0e10cSrcweir         io_rY = aScreenRect.Top();
691cdf0e10cSrcweir     }
692cdf0e10cSrcweir     // check bottom border
693cdf0e10cSrcweir     if( io_rY > aScreenRect.Bottom() - i_nHeight )
694cdf0e10cSrcweir     {
695cdf0e10cSrcweir         bMove = true;
696cdf0e10cSrcweir         io_rY = aScreenRect.Bottom() - i_nHeight;
697cdf0e10cSrcweir     }
698cdf0e10cSrcweir     Window* pParent = i_pConfigureWin->GetParent();
699cdf0e10cSrcweir     if( bMove && pParent )
700cdf0e10cSrcweir     {
701cdf0e10cSrcweir         // calculate absolute screen pos here, since that is what is contained in WindowState
702cdf0e10cSrcweir         Point aParentAbsPos( pParent->OutputToAbsoluteScreenPixel( Point(0,0) ) );
703cdf0e10cSrcweir         Size aParentSizePixel( pParent->GetOutputSizePixel() );
704cdf0e10cSrcweir         Point aPos( (aParentSizePixel.Width() - i_nWidth) / 2,
705cdf0e10cSrcweir                     (aParentSizePixel.Height() - i_nHeight) / 2 );
706cdf0e10cSrcweir         io_rX = aParentAbsPos.X() + aPos.X();
707cdf0e10cSrcweir         io_rY = aParentAbsPos.Y() + aPos.Y();
708cdf0e10cSrcweir     }
709cdf0e10cSrcweir }
710cdf0e10cSrcweir 
SetWindowStateData(const WindowStateData & rData)711cdf0e10cSrcweir void SystemWindow::SetWindowStateData( const WindowStateData& rData )
712cdf0e10cSrcweir {
713cdf0e10cSrcweir     sal_uLong nValidMask = rData.GetMask();
714cdf0e10cSrcweir     if ( !nValidMask )
715cdf0e10cSrcweir         return;
716cdf0e10cSrcweir 
717cdf0e10cSrcweir     if ( mbSysChild )
718cdf0e10cSrcweir         return;
719cdf0e10cSrcweir 
720cdf0e10cSrcweir     Window* pWindow = this;
721cdf0e10cSrcweir     while ( pWindow->mpWindowImpl->mpBorderWindow )
722cdf0e10cSrcweir         pWindow = pWindow->mpWindowImpl->mpBorderWindow;
723cdf0e10cSrcweir 
724cdf0e10cSrcweir     if ( pWindow->mpWindowImpl->mbFrame )
725cdf0e10cSrcweir     {
726cdf0e10cSrcweir         sal_uLong           nState      = rData.GetState();
727cdf0e10cSrcweir         SalFrameState   aState;
728cdf0e10cSrcweir         aState.mnMask               = rData.GetMask();
729cdf0e10cSrcweir         aState.mnX                  = rData.GetX();
730cdf0e10cSrcweir         aState.mnY                  = rData.GetY();
731cdf0e10cSrcweir         aState.mnWidth              = rData.GetWidth();
732cdf0e10cSrcweir         aState.mnHeight             = rData.GetHeight();
733cdf0e10cSrcweir 
734cdf0e10cSrcweir         if( rData.GetMask() & (WINDOWSTATE_MASK_WIDTH|WINDOWSTATE_MASK_HEIGHT) )
735cdf0e10cSrcweir         {
736cdf0e10cSrcweir             // #i43799# adjust window state sizes if a minimial output size was set
737cdf0e10cSrcweir             // otherwise the frame and the client might get different sizes
738cdf0e10cSrcweir             if( maMinOutSize.Width() > aState.mnWidth )
739cdf0e10cSrcweir                 aState.mnWidth = maMinOutSize.Width();
740cdf0e10cSrcweir             if( maMinOutSize.Height() > aState.mnHeight )
741cdf0e10cSrcweir                 aState.mnHeight = maMinOutSize.Height();
742cdf0e10cSrcweir         }
743cdf0e10cSrcweir 
744cdf0e10cSrcweir         aState.mnMaximizedX         = rData.GetMaximizedX();
745cdf0e10cSrcweir         aState.mnMaximizedY         = rData.GetMaximizedY();
746cdf0e10cSrcweir         aState.mnMaximizedWidth     = rData.GetMaximizedWidth();
747cdf0e10cSrcweir         aState.mnMaximizedHeight    = rData.GetMaximizedHeight();
748cdf0e10cSrcweir         // #94144# allow Minimize again, should be masked out when read from configuration
749cdf0e10cSrcweir         // 91625 - ignore Minimize
750cdf0e10cSrcweir         //nState &= ~(WINDOWSTATE_STATE_MINIMIZED);
751cdf0e10cSrcweir         aState.mnState  = nState & SAL_FRAMESTATE_SYSTEMMASK;
752cdf0e10cSrcweir 
753cdf0e10cSrcweir         // normalize window positions onto screen
754cdf0e10cSrcweir         ImplMoveToScreen( aState.mnX, aState.mnY, aState.mnWidth, aState.mnHeight, pWindow );
755cdf0e10cSrcweir         ImplMoveToScreen( aState.mnMaximizedX, aState.mnMaximizedY, aState.mnMaximizedWidth, aState.mnMaximizedHeight, pWindow );
756cdf0e10cSrcweir 
757cdf0e10cSrcweir         // #96568# avoid having multiple frames at the same screen location
758cdf0e10cSrcweir         //  do the check only if not maximized
759cdf0e10cSrcweir         if( !((rData.GetMask() & WINDOWSTATE_MASK_STATE) && (nState & WINDOWSTATE_STATE_MAXIMIZED)) )
760cdf0e10cSrcweir             if( rData.GetMask() & (WINDOWSTATE_MASK_POS|WINDOWSTATE_MASK_WIDTH|WINDOWSTATE_MASK_HEIGHT) )
761cdf0e10cSrcweir             {
762cdf0e10cSrcweir                 Rectangle aDesktop = GetDesktopRectPixel();
763cdf0e10cSrcweir                 ImplSVData *pSVData = ImplGetSVData();
764cdf0e10cSrcweir                 Window *pWin = pSVData->maWinData.mpFirstFrame;
765cdf0e10cSrcweir                 sal_Bool bWrapped = sal_False;
766cdf0e10cSrcweir                 while( pWin )
767cdf0e10cSrcweir                 {
768cdf0e10cSrcweir                     if( !pWin->ImplIsRealParentPath( this ) && ( pWin != this ) &&
769cdf0e10cSrcweir                         pWin->ImplGetWindow()->IsTopWindow() && pWin->mpWindowImpl->mbReallyVisible )
770cdf0e10cSrcweir                     {
771cdf0e10cSrcweir                         SalFrameGeometry g = pWin->mpWindowImpl->mpFrame->GetGeometry();
772cdf0e10cSrcweir                         if( abs(g.nX-aState.mnX) < 2 && abs(g.nY-aState.mnY) < 5 )
773cdf0e10cSrcweir                         {
774cdf0e10cSrcweir                             long displacement = g.nTopDecoration ? g.nTopDecoration : 20;
775cdf0e10cSrcweir                             if( (unsigned long) (aState.mnX + displacement + aState.mnWidth + g.nRightDecoration) > (unsigned long) aDesktop.nRight ||
776cdf0e10cSrcweir                                 (unsigned long) (aState.mnY + displacement + aState.mnHeight + g.nBottomDecoration) > (unsigned long) aDesktop.nBottom )
777cdf0e10cSrcweir                             {
778cdf0e10cSrcweir                                 // displacing would leave screen
779cdf0e10cSrcweir                                 aState.mnX = g.nLeftDecoration ? g.nLeftDecoration : 10; // should result in (0,0)
780cdf0e10cSrcweir                                 aState.mnY = displacement;
781cdf0e10cSrcweir                                 if( bWrapped ||
782cdf0e10cSrcweir                                     (unsigned long) (aState.mnX + displacement + aState.mnWidth + g.nRightDecoration) > (unsigned long) aDesktop.nRight ||
783cdf0e10cSrcweir                                     (unsigned long) (aState.mnY + displacement + aState.mnHeight + g.nBottomDecoration) > (unsigned long) aDesktop.nBottom )
784cdf0e10cSrcweir                                     break;  // further displacement not possible -> break
785cdf0e10cSrcweir                                 // avoid endless testing
786cdf0e10cSrcweir                                 bWrapped = sal_True;
787cdf0e10cSrcweir                             }
788cdf0e10cSrcweir                             else
789cdf0e10cSrcweir                             {
790cdf0e10cSrcweir                                 // displace
791cdf0e10cSrcweir                                 aState.mnX += displacement;
792cdf0e10cSrcweir                                 aState.mnY += displacement;
793cdf0e10cSrcweir                             }
794cdf0e10cSrcweir                         pWin = pSVData->maWinData.mpFirstFrame; // check new pos again
795cdf0e10cSrcweir                         }
796cdf0e10cSrcweir                     }
797cdf0e10cSrcweir                     pWin = pWin->mpWindowImpl->mpFrameData->mpNextFrame;
798cdf0e10cSrcweir                 }
799cdf0e10cSrcweir             }
800cdf0e10cSrcweir 
801cdf0e10cSrcweir         mpWindowImpl->mpFrame->SetWindowState( &aState );
802cdf0e10cSrcweir 
803cdf0e10cSrcweir         // do a synchronous resize for layout reasons
804cdf0e10cSrcweir         //  but use rData only when the window is not to be maximized (#i38089#)
805cdf0e10cSrcweir         //  otherwise we have no useful size information
806cdf0e10cSrcweir         if( (rData.GetMask() & WINDOWSTATE_MASK_STATE) && (nState & WINDOWSTATE_STATE_MAXIMIZED) )
807cdf0e10cSrcweir         {
808cdf0e10cSrcweir             // query maximized size from frame
809cdf0e10cSrcweir             SalFrameGeometry aGeometry = mpWindowImpl->mpFrame->GetGeometry();
810cdf0e10cSrcweir 
811cdf0e10cSrcweir             // but use it only if it is different from the restore size (rData)
812cdf0e10cSrcweir             // as currently only on windows the exact size of a maximized window
813cdf0e10cSrcweir             //  can be computed without actually showing the window
814cdf0e10cSrcweir             if( aGeometry.nWidth != rData.GetWidth() || aGeometry.nHeight != rData.GetHeight() )
815cdf0e10cSrcweir                 ImplHandleResize( pWindow, aGeometry.nWidth, aGeometry.nHeight );
816cdf0e10cSrcweir         }
817cdf0e10cSrcweir         else
818cdf0e10cSrcweir             if( rData.GetMask() & (WINDOWSTATE_MASK_WIDTH|WINDOWSTATE_MASK_HEIGHT) )
819cdf0e10cSrcweir                 ImplHandleResize( pWindow, aState.mnWidth, aState.mnHeight );   // #i43799# use aState and not rData, see above
820cdf0e10cSrcweir     }
821cdf0e10cSrcweir     else
822cdf0e10cSrcweir     {
823cdf0e10cSrcweir         sal_uInt16 nPosSize = 0;
824cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_X )
825cdf0e10cSrcweir             nPosSize |= WINDOW_POSSIZE_X;
826cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_Y )
827cdf0e10cSrcweir             nPosSize |= WINDOW_POSSIZE_Y;
828cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_WIDTH )
829cdf0e10cSrcweir             nPosSize |= WINDOW_POSSIZE_WIDTH;
830cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_HEIGHT )
831cdf0e10cSrcweir             nPosSize |= WINDOW_POSSIZE_HEIGHT;
832cdf0e10cSrcweir 
833cdf0e10cSrcweir         if( IsRollUp() )
834cdf0e10cSrcweir             RollDown();
835cdf0e10cSrcweir 
836cdf0e10cSrcweir         long nX			= rData.GetX();
837cdf0e10cSrcweir         long nY			= rData.GetY();
838cdf0e10cSrcweir         long nWidth		= rData.GetWidth();
839cdf0e10cSrcweir         long nHeight	= rData.GetHeight();
840cdf0e10cSrcweir         const SalFrameGeometry& rGeom = pWindow->mpWindowImpl->mpFrame->GetGeometry();
841cdf0e10cSrcweir         if( nX < 0 )
842cdf0e10cSrcweir             nX = 0;
843cdf0e10cSrcweir         if( nX + nWidth > (long) rGeom.nWidth )
844cdf0e10cSrcweir             nX = rGeom.nWidth - nWidth;
845cdf0e10cSrcweir         if( nY < 0 )
846cdf0e10cSrcweir             nY = 0;
847cdf0e10cSrcweir         if( nY + nHeight > (long) rGeom.nHeight )
848cdf0e10cSrcweir             nY = rGeom.nHeight - nHeight;
849cdf0e10cSrcweir         SetPosSizePixel( nX, nY, nWidth, nHeight, nPosSize );
850cdf0e10cSrcweir         maOrgSize = Size( nWidth, nHeight );
851cdf0e10cSrcweir 
852cdf0e10cSrcweir         // 91625 - ignore Minimize
853cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_STATE )
854cdf0e10cSrcweir         {
855cdf0e10cSrcweir             sal_uLong nState = rData.GetState();
856cdf0e10cSrcweir             if ( nState & WINDOWSTATE_STATE_ROLLUP )
857cdf0e10cSrcweir                 RollUp();
858cdf0e10cSrcweir             else
859cdf0e10cSrcweir                 RollDown();
860cdf0e10cSrcweir         }
861cdf0e10cSrcweir     }
862cdf0e10cSrcweir }
863cdf0e10cSrcweir 
864cdf0e10cSrcweir // -----------------------------------------------------------------------
865cdf0e10cSrcweir 
GetWindowStateData(WindowStateData & rData) const866cdf0e10cSrcweir void SystemWindow::GetWindowStateData( WindowStateData& rData ) const
867cdf0e10cSrcweir {
868cdf0e10cSrcweir     sal_uLong nValidMask = rData.GetMask();
869cdf0e10cSrcweir     if ( !nValidMask )
870cdf0e10cSrcweir         return;
871cdf0e10cSrcweir 
872cdf0e10cSrcweir     if ( mbSysChild )
873cdf0e10cSrcweir         return;
874cdf0e10cSrcweir 
875cdf0e10cSrcweir     const Window* pWindow = this;
876cdf0e10cSrcweir     while ( pWindow->mpWindowImpl->mpBorderWindow )
877cdf0e10cSrcweir         pWindow = pWindow->mpWindowImpl->mpBorderWindow;
878cdf0e10cSrcweir 
879cdf0e10cSrcweir     if ( pWindow->mpWindowImpl->mbFrame )
880cdf0e10cSrcweir     {
881cdf0e10cSrcweir         SalFrameState aState;
882cdf0e10cSrcweir         aState.mnMask = 0xFFFFFFFF;
883cdf0e10cSrcweir         if ( mpWindowImpl->mpFrame->GetWindowState( &aState ) )
884cdf0e10cSrcweir         {
885cdf0e10cSrcweir             if ( nValidMask & WINDOWSTATE_MASK_X )
886cdf0e10cSrcweir                 rData.SetX( aState.mnX );
887cdf0e10cSrcweir             if ( nValidMask & WINDOWSTATE_MASK_Y )
888cdf0e10cSrcweir                 rData.SetY( aState.mnY );
889cdf0e10cSrcweir             if ( nValidMask & WINDOWSTATE_MASK_WIDTH )
890cdf0e10cSrcweir                 rData.SetWidth( aState.mnWidth );
891cdf0e10cSrcweir             if ( nValidMask & WINDOWSTATE_MASK_HEIGHT )
892cdf0e10cSrcweir                 rData.SetHeight( aState.mnHeight );
893cdf0e10cSrcweir             if ( aState.mnMask & SAL_FRAMESTATE_MASK_MAXIMIZED_X )
894cdf0e10cSrcweir             {
895cdf0e10cSrcweir                 rData.SetMaximizedX( aState.mnMaximizedX );
896cdf0e10cSrcweir                 nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_X;
897cdf0e10cSrcweir             }
898cdf0e10cSrcweir             if ( aState.mnMask & SAL_FRAMESTATE_MASK_MAXIMIZED_Y )
899cdf0e10cSrcweir             {
900cdf0e10cSrcweir                 rData.SetMaximizedY( aState.mnMaximizedY );
901cdf0e10cSrcweir                 nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_Y;
902cdf0e10cSrcweir             }
903cdf0e10cSrcweir             if ( aState.mnMask & SAL_FRAMESTATE_MASK_MAXIMIZED_WIDTH )
904cdf0e10cSrcweir             {
905cdf0e10cSrcweir                 rData.SetMaximizedWidth( aState.mnMaximizedWidth );
906cdf0e10cSrcweir                 nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_WIDTH;
907cdf0e10cSrcweir             }
908cdf0e10cSrcweir             if ( aState.mnMask & SAL_FRAMESTATE_MASK_MAXIMIZED_HEIGHT )
909cdf0e10cSrcweir             {
910cdf0e10cSrcweir                 rData.SetMaximizedHeight( aState.mnMaximizedHeight );
911cdf0e10cSrcweir                 nValidMask |= WINDOWSTATE_MASK_MAXIMIZED_HEIGHT;
912cdf0e10cSrcweir             }
913cdf0e10cSrcweir             if ( nValidMask & WINDOWSTATE_MASK_STATE )
914cdf0e10cSrcweir             {
915cdf0e10cSrcweir                 // #94144# allow Minimize again, should be masked out when read from configuration
916cdf0e10cSrcweir                 // 91625 - ignore Minimize
917cdf0e10cSrcweir 				if ( !(nValidMask&WINDOWSTATE_MASK_MINIMIZED) )
918cdf0e10cSrcweir                 	aState.mnState &= ~(WINDOWSTATE_STATE_MINIMIZED);
919cdf0e10cSrcweir                 rData.SetState( aState.mnState );
920cdf0e10cSrcweir             }
921cdf0e10cSrcweir             rData.SetMask( nValidMask );
922cdf0e10cSrcweir         }
923cdf0e10cSrcweir         else
924cdf0e10cSrcweir             rData.SetMask( 0 );
925cdf0e10cSrcweir     }
926cdf0e10cSrcweir     else
927cdf0e10cSrcweir     {
928cdf0e10cSrcweir         Point   aPos = GetPosPixel();
929cdf0e10cSrcweir         Size    aSize = GetSizePixel();
930cdf0e10cSrcweir         sal_uLong   nState = 0;
931cdf0e10cSrcweir 
932cdf0e10cSrcweir         if ( IsRollUp() )
933cdf0e10cSrcweir         {
934cdf0e10cSrcweir             aSize.Height() += maOrgSize.Height();
935cdf0e10cSrcweir             nState |= WINDOWSTATE_STATE_ROLLUP;
936cdf0e10cSrcweir         }
937cdf0e10cSrcweir 
938cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_X )
939cdf0e10cSrcweir             rData.SetX( aPos.X() );
940cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_Y )
941cdf0e10cSrcweir             rData.SetY( aPos.Y() );
942cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_WIDTH )
943cdf0e10cSrcweir             rData.SetWidth( aSize.Width() );
944cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_HEIGHT )
945cdf0e10cSrcweir             rData.SetHeight( aSize.Height() );
946cdf0e10cSrcweir         if ( nValidMask & WINDOWSTATE_MASK_STATE )
947cdf0e10cSrcweir             rData.SetState( nState );
948cdf0e10cSrcweir     }
949cdf0e10cSrcweir }
950cdf0e10cSrcweir 
951cdf0e10cSrcweir // -----------------------------------------------------------------------
952cdf0e10cSrcweir 
SetWindowState(const ByteString & rStr)953cdf0e10cSrcweir void SystemWindow::SetWindowState( const ByteString& rStr )
954cdf0e10cSrcweir {
955cdf0e10cSrcweir     if ( !rStr.Len() )
956cdf0e10cSrcweir         return;
957cdf0e10cSrcweir 
958cdf0e10cSrcweir     WindowStateData aData;
959cdf0e10cSrcweir     ImplWindowStateFromStr( aData, rStr );
960cdf0e10cSrcweir     SetWindowStateData( aData );
961cdf0e10cSrcweir }
962cdf0e10cSrcweir 
963cdf0e10cSrcweir // -----------------------------------------------------------------------
964cdf0e10cSrcweir 
GetWindowState(sal_uLong nMask) const965cdf0e10cSrcweir ByteString SystemWindow::GetWindowState( sal_uLong nMask ) const
966cdf0e10cSrcweir {
967cdf0e10cSrcweir     WindowStateData aData;
968cdf0e10cSrcweir     aData.SetMask( nMask );
969cdf0e10cSrcweir     GetWindowStateData( aData );
970cdf0e10cSrcweir 
971cdf0e10cSrcweir     ByteString aStr;
972cdf0e10cSrcweir     ImplWindowStateToStr( aData, aStr );
973cdf0e10cSrcweir     return aStr;
974cdf0e10cSrcweir }
975cdf0e10cSrcweir 
976cdf0e10cSrcweir // -----------------------------------------------------------------------
977cdf0e10cSrcweir 
SetMenuBar(MenuBar * pMenuBar)978cdf0e10cSrcweir void SystemWindow::SetMenuBar( MenuBar* pMenuBar )
979cdf0e10cSrcweir {
980cdf0e10cSrcweir     if ( mpMenuBar != pMenuBar )
981cdf0e10cSrcweir     {
982cdf0e10cSrcweir         MenuBar* pOldMenuBar = mpMenuBar;
983cdf0e10cSrcweir         Window*  pOldWindow = NULL;
984cdf0e10cSrcweir         Window*  pNewWindow=NULL;
985cdf0e10cSrcweir         mpMenuBar = pMenuBar;
986cdf0e10cSrcweir 
987cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow && (mpWindowImpl->mpBorderWindow->GetType() == WINDOW_BORDERWINDOW) )
988cdf0e10cSrcweir         {
989cdf0e10cSrcweir             if ( pOldMenuBar )
990cdf0e10cSrcweir                 pOldWindow = pOldMenuBar->ImplGetWindow();
991cdf0e10cSrcweir             else
992cdf0e10cSrcweir                 pOldWindow = NULL;
993cdf0e10cSrcweir 			if ( pOldWindow )
994cdf0e10cSrcweir 			{
995cdf0e10cSrcweir 				ImplCallEventListeners( VCLEVENT_WINDOW_MENUBARREMOVED, (void*) pOldMenuBar );
996cdf0e10cSrcweir 				pOldWindow->SetAccessible( ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >() );
997cdf0e10cSrcweir 			}
998cdf0e10cSrcweir             if ( pMenuBar )
999cdf0e10cSrcweir             {
1000cdf0e10cSrcweir                 DBG_ASSERT( !pMenuBar->pWindow, "SystemWindow::SetMenuBar() - MenuBars can only set in one SystemWindow at time" );
1001cdf0e10cSrcweir                 ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMenuBarWindow( pNewWindow = MenuBar::ImplCreate( mpWindowImpl->mpBorderWindow, pOldWindow, pMenuBar ) );
1002cdf0e10cSrcweir 				ImplCallEventListeners( VCLEVENT_WINDOW_MENUBARADDED, (void*) pMenuBar );
1003cdf0e10cSrcweir 			}
1004cdf0e10cSrcweir             else
1005cdf0e10cSrcweir                 ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMenuBarWindow( NULL );
1006cdf0e10cSrcweir             ImplToBottomChild();
1007cdf0e10cSrcweir             if ( pOldMenuBar )
1008cdf0e10cSrcweir             {
1009cdf0e10cSrcweir                 sal_Bool bDelete = (pMenuBar == 0) ? sal_True : sal_False;
1010cdf0e10cSrcweir                 if( bDelete && pOldWindow )
1011cdf0e10cSrcweir                 {
1012cdf0e10cSrcweir                     if( mpImplData->mpTaskPaneList )
1013cdf0e10cSrcweir                         mpImplData->mpTaskPaneList->RemoveWindow( pOldWindow );
1014cdf0e10cSrcweir                 }
1015cdf0e10cSrcweir                 MenuBar::ImplDestroy( pOldMenuBar, bDelete );
1016cdf0e10cSrcweir                 if( bDelete )
1017cdf0e10cSrcweir                     pOldWindow = NULL;  // will be deleted in MenuBar::ImplDestroy,
1018cdf0e10cSrcweir             }
1019cdf0e10cSrcweir 
1020cdf0e10cSrcweir         }
1021cdf0e10cSrcweir         else
1022cdf0e10cSrcweir         {
1023cdf0e10cSrcweir             if( pMenuBar )
1024cdf0e10cSrcweir                 pNewWindow = pMenuBar->ImplGetWindow();
1025cdf0e10cSrcweir             if( pOldMenuBar )
1026cdf0e10cSrcweir                 pOldWindow = pOldMenuBar->ImplGetWindow();
1027cdf0e10cSrcweir         }
1028cdf0e10cSrcweir 
1029cdf0e10cSrcweir         // update taskpane list to make menubar accessible
1030cdf0e10cSrcweir         if( mpImplData->mpTaskPaneList )
1031cdf0e10cSrcweir         {
1032cdf0e10cSrcweir             if( pOldWindow )
1033cdf0e10cSrcweir                 mpImplData->mpTaskPaneList->RemoveWindow( pOldWindow );
1034cdf0e10cSrcweir             if( pNewWindow )
1035cdf0e10cSrcweir                 mpImplData->mpTaskPaneList->AddWindow( pNewWindow );
1036cdf0e10cSrcweir         }
1037cdf0e10cSrcweir     }
1038cdf0e10cSrcweir }
1039cdf0e10cSrcweir 
1040cdf0e10cSrcweir // -----------------------------------------------------------------------
1041cdf0e10cSrcweir 
SetMenuBarMode(sal_uInt16 nMode)1042cdf0e10cSrcweir void SystemWindow::SetMenuBarMode( sal_uInt16 nMode )
1043cdf0e10cSrcweir {
1044cdf0e10cSrcweir     if ( mnMenuBarMode != nMode )
1045cdf0e10cSrcweir     {
1046cdf0e10cSrcweir         mnMenuBarMode = nMode;
1047cdf0e10cSrcweir         if ( mpWindowImpl->mpBorderWindow && (mpWindowImpl->mpBorderWindow->GetType() == WINDOW_BORDERWINDOW) )
1048cdf0e10cSrcweir         {
1049cdf0e10cSrcweir             if ( nMode == MENUBAR_MODE_HIDE )
1050cdf0e10cSrcweir                 ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMenuBarMode( sal_True );
1051cdf0e10cSrcweir             else
1052cdf0e10cSrcweir                 ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->SetMenuBarMode( sal_False );
1053cdf0e10cSrcweir         }
1054cdf0e10cSrcweir     }
1055cdf0e10cSrcweir }
1056cdf0e10cSrcweir 
1057cdf0e10cSrcweir // -----------------------------------------------------------------------
1058cdf0e10cSrcweir 
ImplIsInTaskPaneList(Window * pWin)1059cdf0e10cSrcweir sal_Bool SystemWindow::ImplIsInTaskPaneList( Window* pWin )
1060cdf0e10cSrcweir {
1061cdf0e10cSrcweir     if( mpImplData && mpImplData->mpTaskPaneList )
1062cdf0e10cSrcweir         return mpImplData->mpTaskPaneList->IsInList( pWin );
1063cdf0e10cSrcweir     return sal_False;
1064cdf0e10cSrcweir }
1065cdf0e10cSrcweir 
1066cdf0e10cSrcweir // -----------------------------------------------------------------------
1067cdf0e10cSrcweir 
GetScreenNumber() const1068cdf0e10cSrcweir unsigned int SystemWindow::GetScreenNumber() const
1069cdf0e10cSrcweir {
1070cdf0e10cSrcweir     return mpWindowImpl->mpFrame->maGeometry.nScreenNumber;
1071cdf0e10cSrcweir }
1072cdf0e10cSrcweir 
1073cdf0e10cSrcweir // -----------------------------------------------------------------------
1074cdf0e10cSrcweir 
SetScreenNumber(unsigned int nScreen)1075cdf0e10cSrcweir void SystemWindow::SetScreenNumber( unsigned int nScreen)
1076cdf0e10cSrcweir {
1077cdf0e10cSrcweir     mpWindowImpl->mpFrame->SetScreenNumber( nScreen );
1078cdf0e10cSrcweir }
1079