LCOV - code coverage report
Current view: top level - libreoffice/vcl/source/window - syswin.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 308 563 54.7 %
Date: 2012-12-17 Functions: 20 41 48.8 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10