LCOV - code coverage report
Current view: top level - vcl/source/window - winproc.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 153 1227 12.5 %
Date: 2012-08-25 Functions: 11 51 21.6 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 135 1735 7.8 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : 
      30                 :            : #include <tools/debug.hxx>
      31                 :            : #include <tools/time.hxx>
      32                 :            : 
      33                 :            : #include <unotools/localedatawrapper.hxx>
      34                 :            : 
      35                 :            : #include <vcl/i18nhelp.hxx>
      36                 :            : #include <vcl/unohelp.hxx>
      37                 :            : #include <vcl/timer.hxx>
      38                 :            : #include <vcl/event.hxx>
      39                 :            : #include <vcl/settings.hxx>
      40                 :            : #include <vcl/svapp.hxx>
      41                 :            : #include <vcl/cursor.hxx>
      42                 :            : #include <vcl/wrkwin.hxx>
      43                 :            : #include <vcl/floatwin.hxx>
      44                 :            : #include <vcl/dialog.hxx>
      45                 :            : #include <vcl/help.hxx>
      46                 :            : #include <vcl/dockwin.hxx>
      47                 :            : #include <vcl/menu.hxx>
      48                 :            : 
      49                 :            : #include <svdata.hxx>
      50                 :            : #include <dbggui.hxx>
      51                 :            : #include <salwtype.hxx>
      52                 :            : #include <salframe.hxx>
      53                 :            : #include <accmgr.hxx>
      54                 :            : #include <print.h>
      55                 :            : #include <window.h>
      56                 :            : #include <helpwin.hxx>
      57                 :            : #include <brdwin.hxx>
      58                 :            : #include <salgdi.hxx>
      59                 :            : #include <dndlcon.hxx>
      60                 :            : 
      61                 :            : #include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
      62                 :            : #include <com/sun/star/awt/MouseEvent.hpp>
      63                 :            : 
      64                 :            : #if OSL_DEBUG_LEVEL > 1
      65                 :            : char dbgbuffer[1024];
      66                 :            : #ifndef WNT
      67                 :            : #include <stdio.h>
      68                 :            : #define MyOutputDebugString(s) (fprintf(stderr, s ))
      69                 :            : #else
      70                 :            : extern void MyOutputDebugString( char *s);
      71                 :            : #endif
      72                 :            : #endif
      73                 :            : 
      74                 :            : 
      75                 :            : // =======================================================================
      76                 :            : 
      77                 :            : #define IMPL_MIN_NEEDSYSWIN         49
      78                 :            : 
      79                 :            : // =======================================================================
      80                 :            : 
      81                 :      15977 : long ImplCallPreNotify( NotifyEvent& rEvt )
      82                 :            : {
      83                 :      15977 :     long nRet = Application::CallEventHooks( rEvt );
      84         [ +  - ]:      15977 :     if ( !nRet )
      85                 :      15977 :         nRet = rEvt.GetWindow()->PreNotify( rEvt );
      86                 :      15977 :     return nRet;
      87                 :            : }
      88                 :            : 
      89                 :            : // =======================================================================
      90                 :            : 
      91                 :          0 : long ImplCallEvent( NotifyEvent& rEvt )
      92                 :            : {
      93                 :          0 :     long nRet = ImplCallPreNotify( rEvt );
      94         [ #  # ]:          0 :     if ( !nRet )
      95                 :            :     {
      96                 :          0 :         Window* pWindow = rEvt.GetWindow();
      97   [ #  #  #  #  :          0 :         switch ( rEvt.GetType() )
             #  #  #  #  
                      # ]
      98                 :            :         {
      99                 :            :             case EVENT_MOUSEBUTTONDOWN:
     100                 :          0 :                 pWindow->MouseButtonDown( *rEvt.GetMouseEvent() );
     101                 :          0 :                 break;
     102                 :            :             case EVENT_MOUSEBUTTONUP:
     103                 :          0 :                 pWindow->MouseButtonUp( *rEvt.GetMouseEvent() );
     104                 :          0 :                 break;
     105                 :            :             case EVENT_MOUSEMOVE:
     106                 :          0 :                 pWindow->MouseMove( *rEvt.GetMouseEvent() );
     107                 :          0 :                 break;
     108                 :            :             case EVENT_KEYINPUT:
     109                 :          0 :                 pWindow->KeyInput( *rEvt.GetKeyEvent() );
     110                 :          0 :                 break;
     111                 :            :             case EVENT_KEYUP:
     112                 :          0 :                 pWindow->KeyUp( *rEvt.GetKeyEvent() );
     113                 :          0 :                 break;
     114                 :            :             case EVENT_GETFOCUS:
     115                 :          0 :                 pWindow->GetFocus();
     116                 :          0 :                 break;
     117                 :            :             case EVENT_LOSEFOCUS:
     118                 :          0 :                 pWindow->LoseFocus();
     119                 :          0 :                 break;
     120                 :            :             case EVENT_COMMAND:
     121                 :          0 :                 pWindow->Command( *rEvt.GetCommandEvent() );
     122                 :          0 :                 break;
     123                 :            :         }
     124                 :            :     }
     125                 :            : 
     126                 :          0 :     return nRet;
     127                 :            : }
     128                 :            : 
     129                 :            : // =======================================================================
     130                 :            : 
     131                 :          0 : static sal_Bool ImplHandleMouseFloatMode( Window* pChild, const Point& rMousePos,
     132                 :            :                                       sal_uInt16 nCode, sal_uInt16 nSVEvent,
     133                 :            :                                       sal_Bool bMouseLeave )
     134                 :            : {
     135                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
     136                 :            : 
     137   [ #  #  #  # ]:          0 :     if ( pSVData->maWinData.mpFirstFloat && !pSVData->maWinData.mpCaptureWin &&
         [ #  # ][ #  # ]
     138                 :          0 :          !pSVData->maWinData.mpFirstFloat->ImplIsFloatPopupModeWindow( pChild ) )
     139                 :            :     {
     140                 :            :         /*
     141                 :            :          *  #93895# since floats are system windows, coordinates have
     142                 :            :          *  to be converted to float relative for the hittest
     143                 :            :          */
     144                 :          0 :         sal_uInt16          nHitTest = IMPL_FLOATWIN_HITTEST_OUTSIDE;
     145         [ #  # ]:          0 :         FloatingWindow* pFloat = pSVData->maWinData.mpFirstFloat->ImplFloatHitTest( pChild, rMousePos, nHitTest );
     146                 :            :         FloatingWindow* pLastLevelFloat;
     147                 :            :         sal_uLong           nPopupFlags;
     148         [ #  # ]:          0 :         if ( nSVEvent == EVENT_MOUSEMOVE )
     149                 :            :         {
     150         [ #  # ]:          0 :             if ( bMouseLeave )
     151                 :          0 :                 return sal_True;
     152                 :            : 
     153 [ #  # ][ #  # ]:          0 :             if ( !pFloat || (nHitTest & IMPL_FLOATWIN_HITTEST_RECT) )
     154                 :            :             {
     155 [ #  # ][ #  # ]:          0 :                 if ( pSVData->maHelpData.mpHelpWin && !pSVData->maHelpData.mbKeyboardHelp )
     156         [ #  # ]:          0 :                     ImplDestroyHelpWindow( true );
     157 [ #  # ][ #  # ]:          0 :                 pChild->ImplGetFrame()->SetPointer( POINTER_ARROW );
     158                 :          0 :                 return sal_True;
     159                 :            :             }
     160                 :            :         }
     161                 :            :         else
     162                 :            :         {
     163         [ #  # ]:          0 :             if ( nCode & MOUSE_LEFT )
     164                 :            :             {
     165         [ #  # ]:          0 :                 if ( nSVEvent == EVENT_MOUSEBUTTONDOWN )
     166                 :            :                 {
     167         [ #  # ]:          0 :                     if ( !pFloat )
     168                 :            :                     {
     169         [ #  # ]:          0 :                         pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
     170                 :          0 :                         nPopupFlags = pLastLevelFloat->GetPopupModeFlags();
     171         [ #  # ]:          0 :                         pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
     172                 :            : // Erstmal ausgebaut als Hack fuer Bug 53378
     173                 :            : //                        if ( nPopupFlags & FLOATWIN_POPUPMODE_PATHMOUSECANCELCLICK )
     174                 :            : //                            return sal_False;
     175                 :            : //                        else
     176                 :          0 :                             return sal_True;
     177                 :            :                     }
     178         [ #  # ]:          0 :                     else if ( nHitTest & IMPL_FLOATWIN_HITTEST_RECT )
     179                 :            :                     {
     180         [ #  # ]:          0 :                         if ( !(pFloat->GetPopupModeFlags() & FLOATWIN_POPUPMODE_NOMOUSERECTCLOSE) )
     181                 :          0 :                             pFloat->ImplSetMouseDown();
     182                 :          0 :                         return sal_True;
     183                 :            :                     }
     184                 :            :                 }
     185                 :            :                 else
     186                 :            :                 {
     187         [ #  # ]:          0 :                     if ( pFloat )
     188                 :            :                     {
     189         [ #  # ]:          0 :                         if ( nHitTest & IMPL_FLOATWIN_HITTEST_RECT )
     190                 :            :                         {
     191         [ #  # ]:          0 :                             if ( pFloat->ImplIsMouseDown() )
     192         [ #  # ]:          0 :                                 pFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
     193                 :          0 :                             return sal_True;
     194                 :            :                         }
     195                 :            :                     }
     196                 :            :                     else
     197                 :            :                     {
     198         [ #  # ]:          0 :                         pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
     199                 :          0 :                         nPopupFlags = pLastLevelFloat->GetPopupModeFlags();
     200         [ #  # ]:          0 :                         if ( !(nPopupFlags & FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE) )
     201                 :            :                         {
     202         [ #  # ]:          0 :                             pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
     203                 :          0 :                             return sal_True;
     204                 :            :                         }
     205                 :            :                     }
     206                 :            :                 }
     207                 :            :             }
     208                 :            :             else
     209                 :            :             {
     210         [ #  # ]:          0 :                 if ( !pFloat )
     211                 :            :                 {
     212         [ #  # ]:          0 :                     pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
     213                 :          0 :                     nPopupFlags = pLastLevelFloat->GetPopupModeFlags();
     214         [ #  # ]:          0 :                     if ( nPopupFlags & FLOATWIN_POPUPMODE_ALLMOUSEBUTTONCLOSE )
     215                 :            :                     {
     216 [ #  # ][ #  # ]:          0 :                         if ( (nPopupFlags & FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE) &&
     217                 :            :                              (nSVEvent == EVENT_MOUSEBUTTONUP) )
     218                 :          0 :                             return sal_True;
     219         [ #  # ]:          0 :                         pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
     220         [ #  # ]:          0 :                         if ( nPopupFlags & FLOATWIN_POPUPMODE_PATHMOUSECANCELCLICK )
     221                 :          0 :                             return sal_False;
     222                 :            :                         else
     223                 :          0 :                             return sal_True;
     224                 :            :                     }
     225                 :            :                     else
     226                 :          0 :                         return sal_True;
     227                 :            :                 }
     228                 :            :             }
     229                 :            :         }
     230                 :            :     }
     231                 :            : 
     232                 :          0 :     return sal_False;
     233                 :            : }
     234                 :            : 
     235                 :            : // -----------------------------------------------------------------------
     236                 :            : 
     237                 :          0 : static void ImplHandleMouseHelpRequest( Window* pChild, const Point& rMousePos )
     238                 :            : {
     239                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
     240         [ #  # ]:          0 :     if ( !pSVData->maHelpData.mpHelpWin ||
           [ #  #  #  # ]
     241                 :          0 :          !( pSVData->maHelpData.mpHelpWin->IsWindowOrChild( pChild ) ||
     242         [ #  # ]:          0 :            pChild->IsWindowOrChild( pSVData->maHelpData.mpHelpWin ) ) )
     243                 :            :     {
     244                 :          0 :         sal_uInt16 nHelpMode = 0;
     245         [ #  # ]:          0 :         if ( pSVData->maHelpData.mbQuickHelp )
     246                 :          0 :             nHelpMode = HELPMODE_QUICK;
     247         [ #  # ]:          0 :         if ( pSVData->maHelpData.mbBalloonHelp )
     248                 :          0 :             nHelpMode |= HELPMODE_BALLOON;
     249         [ #  # ]:          0 :         if ( nHelpMode )
     250                 :            :         {
     251 [ #  # ][ #  # ]:          0 :             if ( pChild->IsInputEnabled() && ! pChild->IsInModalMode() )
                 [ #  # ]
     252                 :            :             {
     253         [ #  # ]:          0 :                 HelpEvent aHelpEvent( rMousePos, nHelpMode );
     254                 :          0 :                 pSVData->maHelpData.mbRequestingHelp = sal_True;
     255         [ #  # ]:          0 :                 pChild->RequestHelp( aHelpEvent );
     256                 :          0 :                 pSVData->maHelpData.mbRequestingHelp = sal_False;
     257                 :            :             }
     258                 :            :             // #104172# do not kill keyboard activated tooltips
     259 [ #  # ][ #  # ]:          0 :             else if ( pSVData->maHelpData.mpHelpWin && !pSVData->maHelpData.mbKeyboardHelp)
     260                 :            :             {
     261                 :          0 :                 ImplDestroyHelpWindow( true );
     262                 :            :             }
     263                 :            :         }
     264                 :            :     }
     265                 :          0 : }
     266                 :            : 
     267                 :            : // -----------------------------------------------------------------------
     268                 :            : 
     269                 :          0 : static void ImplSetMousePointer( Window* pChild )
     270                 :            : {
     271                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
     272         [ #  # ]:          0 :     if ( pSVData->maHelpData.mbExtHelpMode )
     273                 :          0 :         pChild->ImplGetFrame()->SetPointer( POINTER_HELP );
     274                 :            :     else
     275                 :          0 :         pChild->ImplGetFrame()->SetPointer( pChild->ImplGetMousePointer() );
     276                 :          0 : }
     277                 :            : 
     278                 :            : // -----------------------------------------------------------------------
     279                 :            : 
     280                 :          0 : static sal_Bool ImplCallCommand( Window* pChild, sal_uInt16 nEvt, void* pData = NULL,
     281                 :            :                              sal_Bool bMouse = sal_False, Point* pPos = NULL )
     282                 :            : {
     283                 :          0 :     Point aPos;
     284         [ #  # ]:          0 :     if ( pPos )
     285                 :          0 :         aPos = *pPos;
     286                 :            :     else
     287                 :            :     {
     288         [ #  # ]:          0 :         if( bMouse )
     289         [ #  # ]:          0 :             aPos = pChild->GetPointerPosPixel();
     290                 :            :         else
     291                 :            :         {
     292                 :            :             // simulate mouseposition at center of window
     293                 :          0 :             Size aSize( pChild->GetOutputSizePixel() );
     294                 :          0 :             aPos = Point( aSize.getWidth()/2, aSize.getHeight()/2 );
     295                 :            :         }
     296                 :            :     }
     297                 :            : 
     298         [ #  # ]:          0 :     CommandEvent    aCEvt( aPos, nEvt, bMouse, pData );
     299         [ #  # ]:          0 :     NotifyEvent     aNCmdEvt( EVENT_COMMAND, pChild, &aCEvt );
     300         [ #  # ]:          0 :     ImplDelData     aDelData( pChild );
     301         [ #  # ]:          0 :     sal_Bool            bPreNotify = (ImplCallPreNotify( aNCmdEvt ) != 0);
     302         [ #  # ]:          0 :     if ( aDelData.IsDead() )
     303                 :          0 :         return sal_False;
     304         [ #  # ]:          0 :     if ( !bPreNotify )
     305                 :            :     {
     306                 :          0 :         pChild->ImplGetWindowImpl()->mbCommand = sal_False;
     307         [ #  # ]:          0 :         pChild->Command( aCEvt );
     308                 :            : 
     309         [ #  # ]:          0 :         if( aDelData.IsDead() )
     310                 :          0 :             return sal_False;
     311         [ #  # ]:          0 :         pChild->ImplNotifyKeyMouseCommandEventListeners( aNCmdEvt );
     312         [ #  # ]:          0 :         if ( aDelData.IsDead() )
     313                 :          0 :             return sal_False;
     314         [ #  # ]:          0 :         if ( pChild->ImplGetWindowImpl()->mbCommand )
     315                 :          0 :             return sal_True;
     316                 :            :     }
     317                 :            : 
     318         [ #  # ]:          0 :     return sal_False;
     319                 :            : }
     320                 :            : 
     321                 :            : // -----------------------------------------------------------------------
     322                 :            : 
     323                 :            : /*  #i34277# delayed context menu activation;
     324                 :            : *   necessary if there already was a popup menu running.
     325                 :            : */
     326                 :            : 
     327                 :          0 : struct ContextMenuEvent
     328                 :            : {
     329                 :            :     Window*         pWindow;
     330                 :            :     ImplDelData     aDelData;
     331                 :            :     Point           aChildPos;
     332                 :            : };
     333                 :            : 
     334                 :          0 : static long ContextMenuEventLink( void* pCEvent, void* )
     335                 :            : {
     336                 :          0 :     ContextMenuEvent* pEv = (ContextMenuEvent*)pCEvent;
     337                 :            : 
     338         [ #  # ]:          0 :     if( ! pEv->aDelData.IsDead() )
     339                 :            :     {
     340                 :          0 :         pEv->pWindow->ImplRemoveDel( &pEv->aDelData );
     341                 :          0 :         ImplCallCommand( pEv->pWindow, COMMAND_CONTEXTMENU, NULL, sal_True, &pEv->aChildPos );
     342                 :            :     }
     343         [ #  # ]:          0 :     delete pEv;
     344                 :            : 
     345                 :          0 :     return 0;
     346                 :            : }
     347                 :            : 
     348                 :          0 : long ImplHandleMouseEvent( Window* pWindow, sal_uInt16 nSVEvent, sal_Bool bMouseLeave,
     349                 :            :                            long nX, long nY, sal_uLong nMsgTime,
     350                 :            :                            sal_uInt16 nCode, sal_uInt16 nMode )
     351                 :            : {
     352         [ #  # ]:          0 :     ImplSVData* pSVData = ImplGetSVData();
     353                 :          0 :     Point       aMousePos( nX, nY );
     354                 :            :     Window*     pChild;
     355                 :            :     long        nRet;
     356                 :            :     sal_uInt16      nClicks;
     357         [ #  # ]:          0 :     ImplFrameData* pWinFrameData = pWindow->ImplGetFrameData();
     358                 :          0 :     sal_uInt16      nOldCode = pWinFrameData->mnMouseCode;
     359                 :            : 
     360                 :            :     // we need a mousemove event, befor we get a mousebuttondown or a
     361                 :            :     // mousebuttonup event
     362 [ #  # ][ #  # ]:          0 :     if ( (nSVEvent == EVENT_MOUSEBUTTONDOWN) ||
     363                 :            :          (nSVEvent == EVENT_MOUSEBUTTONUP) )
     364                 :            :     {
     365 [ #  # ][ #  # ]:          0 :         if ( (nSVEvent == EVENT_MOUSEBUTTONUP) && pSVData->maHelpData.mbExtHelpMode )
     366         [ #  # ]:          0 :             Help::EndExtHelp();
     367         [ #  # ]:          0 :         if ( pSVData->maHelpData.mpHelpWin )
     368                 :            :         {
     369 [ #  # ][ #  # ]:          0 :             if( pWindow->ImplGetWindow() == pSVData->maHelpData.mpHelpWin )
     370                 :            :             {
     371         [ #  # ]:          0 :                 ImplDestroyHelpWindow( false );
     372                 :          0 :                 return 1; // pWindow is dead now - avoid crash!
     373                 :            :             }
     374                 :            :             else
     375         [ #  # ]:          0 :                 ImplDestroyHelpWindow( true );
     376                 :            :         }
     377                 :            : 
     378 [ #  # ][ #  # ]:          0 :         if ( (pWinFrameData->mnLastMouseX != nX) ||
     379                 :            :              (pWinFrameData->mnLastMouseY != nY) )
     380                 :            :         {
     381         [ #  # ]:          0 :             ImplHandleMouseEvent( pWindow, EVENT_MOUSEMOVE, sal_False, nX, nY, nMsgTime, nCode, nMode );
     382                 :            :         }
     383                 :            :     }
     384                 :            : 
     385                 :            :     // update frame data
     386                 :          0 :     pWinFrameData->mnBeforeLastMouseX = pWinFrameData->mnLastMouseX;
     387                 :          0 :     pWinFrameData->mnBeforeLastMouseY = pWinFrameData->mnLastMouseY;
     388                 :          0 :     pWinFrameData->mnLastMouseX = nX;
     389                 :          0 :     pWinFrameData->mnLastMouseY = nY;
     390                 :          0 :     pWinFrameData->mnMouseCode  = nCode;
     391                 :          0 :     pWinFrameData->mnMouseMode  = nMode & ~(MOUSE_SYNTHETIC | MOUSE_MODIFIERCHANGED);
     392         [ #  # ]:          0 :     if ( bMouseLeave )
     393                 :            :     {
     394                 :          0 :         pWinFrameData->mbMouseIn = sal_False;
     395 [ #  # ][ #  # ]:          0 :         if ( pSVData->maHelpData.mpHelpWin && !pSVData->maHelpData.mbKeyboardHelp )
     396                 :            :         {
     397         [ #  # ]:          0 :             ImplDelData aDelData( pWindow );
     398                 :            : 
     399         [ #  # ]:          0 :             ImplDestroyHelpWindow( true );
     400                 :            : 
     401         [ #  # ]:          0 :             if ( aDelData.IsDead() )
     402 [ #  # ][ #  # ]:          0 :                 return 1; // pWindow is dead now - avoid crash! (#122045#)
     403                 :            :         }
     404                 :            :     }
     405                 :            :     else
     406                 :          0 :         pWinFrameData->mbMouseIn = sal_True;
     407                 :            : 
     408                 :            :     DBG_ASSERT( !pSVData->maWinData.mpTrackWin ||
     409                 :            :                 (pSVData->maWinData.mpTrackWin == pSVData->maWinData.mpCaptureWin),
     410                 :            :                 "ImplHandleMouseEvent: TrackWin != CaptureWin" );
     411                 :            : 
     412                 :            :     // AutoScrollMode
     413 [ #  # ][ #  # ]:          0 :     if ( pSVData->maWinData.mpAutoScrollWin && (nSVEvent == EVENT_MOUSEBUTTONDOWN) )
     414                 :            :     {
     415         [ #  # ]:          0 :         pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
     416                 :          0 :         return 1;
     417                 :            :     }
     418                 :            : 
     419                 :            :     // find mouse window
     420         [ #  # ]:          0 :     if ( pSVData->maWinData.mpCaptureWin )
     421                 :            :     {
     422                 :          0 :         pChild = pSVData->maWinData.mpCaptureWin;
     423                 :            : 
     424                 :            :         DBG_ASSERT( pWindow == pChild->ImplGetFrameWindow(),
     425                 :            :                     "ImplHandleMouseEvent: mouse event is not sent to capture window" );
     426                 :            : 
     427                 :            :         // java client cannot capture mouse correctly
     428 [ #  # ][ #  # ]:          0 :         if ( pWindow != pChild->ImplGetFrameWindow() )
     429                 :          0 :             return 0;
     430                 :            : 
     431         [ #  # ]:          0 :         if ( bMouseLeave )
     432                 :          0 :             return 0;
     433                 :            :     }
     434                 :            :     else
     435                 :            :     {
     436         [ #  # ]:          0 :         if ( bMouseLeave )
     437                 :          0 :             pChild = NULL;
     438                 :            :         else
     439         [ #  # ]:          0 :             pChild = pWindow->ImplFindWindow( aMousePos );
     440                 :            :     }
     441                 :            : 
     442                 :            :     // test this because mouse events are buffered in the remote version
     443                 :            :     // and size may not be in sync
     444 [ #  # ][ #  # ]:          0 :     if ( !pChild && !bMouseLeave )
     445                 :          0 :         return 0;
     446                 :            : 
     447                 :            :     // execute a few tests and catch the message or implement the status
     448         [ #  # ]:          0 :     if ( pChild )
     449                 :            :     {
     450 [ #  # ][ #  # ]:          0 :         if( pChild->ImplIsAntiparallel() )
     451                 :            :         {
     452                 :            :             // - RTL - re-mirror frame pos at pChild
     453         [ #  # ]:          0 :             pChild->ImplReMirror( aMousePos );
     454                 :            :         }
     455                 :            :         // no mouse messages to system object windows ?
     456                 :            :         // !!!KA: Is it OK to comment this out? !!!
     457                 :            : //        if ( pChild->ImplGetWindowImpl()->mpSysObj )
     458                 :            : //            return 0;
     459                 :            : 
     460                 :            :         // no mouse messages to disabled windows
     461                 :            :         // #106845# if the window was disabed during capturing we have to pass the mouse events to release capturing
     462 [ #  # ][ #  # ]:          0 :         if ( pSVData->maWinData.mpCaptureWin != pChild && (!pChild->IsEnabled() || !pChild->IsInputEnabled() || pChild->IsInModalMode() ) )
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     463                 :            :         {
     464         [ #  # ]:          0 :             ImplHandleMouseFloatMode( pChild, aMousePos, nCode, nSVEvent, bMouseLeave );
     465         [ #  # ]:          0 :             if ( nSVEvent == EVENT_MOUSEMOVE )
     466                 :            :             {
     467         [ #  # ]:          0 :                 ImplHandleMouseHelpRequest( pChild, aMousePos );
     468         [ #  # ]:          0 :                 if( pWinFrameData->mpMouseMoveWin != pChild )
     469                 :          0 :                     nMode |= MOUSE_ENTERWINDOW;
     470                 :            :             }
     471                 :            : 
     472                 :            :             // Call the hook also, if Window is disabled
     473         [ #  # ]:          0 :             Point aChildPos = pChild->ImplFrameToOutput( aMousePos );
     474         [ #  # ]:          0 :             MouseEvent aMEvt( aChildPos, pWinFrameData->mnClickCount, nMode, nCode, nCode );
     475         [ #  # ]:          0 :             NotifyEvent aNEvt( nSVEvent, pChild, &aMEvt );
     476         [ #  # ]:          0 :             Application::CallEventHooks( aNEvt );
     477                 :            : 
     478 [ #  # ][ #  # ]:          0 :             if( pChild->IsCallHandlersOnInputDisabled() )
     479                 :            :             {
     480                 :          0 :                 pWinFrameData->mpMouseMoveWin = pChild;
     481         [ #  # ]:          0 :                 pChild->ImplNotifyKeyMouseCommandEventListeners( aNEvt );
     482                 :            :             }
     483                 :            : 
     484         [ #  # ]:          0 :             if ( nSVEvent == EVENT_MOUSEBUTTONDOWN )
     485                 :          0 :                 return 1;
     486                 :            :             else
     487                 :            :             {
     488                 :            :                 // Set normal MousePointer for disabled windows
     489         [ #  # ]:          0 :                 if ( nSVEvent == EVENT_MOUSEMOVE )
     490         [ #  # ]:          0 :                     ImplSetMousePointer( pChild );
     491                 :            : 
     492                 :          0 :                 return 0;
     493                 :            :             }
     494                 :            :         }
     495                 :            : 
     496                 :            :         // End ExtTextInput-Mode, if the user click in the same TopLevel Window
     497 [ #  # ][ #  # ]:          0 :         if ( pSVData->maWinData.mpExtTextInputWin &&
                 [ #  # ]
     498                 :            :              ((nSVEvent == EVENT_MOUSEBUTTONDOWN) ||
     499                 :            :               (nSVEvent == EVENT_MOUSEBUTTONUP)) )
     500         [ #  # ]:          0 :             pSVData->maWinData.mpExtTextInputWin->EndExtTextInput( EXTTEXTINPUT_END_COMPLETE );
     501                 :            :     }
     502                 :            : 
     503                 :            :     // determine mouse event data
     504         [ #  # ]:          0 :     if ( nSVEvent == EVENT_MOUSEMOVE )
     505                 :            :     {
     506                 :            :         // check if MouseMove belongs to same window and if the
     507                 :            :         // status did not change
     508         [ #  # ]:          0 :         if ( pChild )
     509                 :            :         {
     510         [ #  # ]:          0 :             Point aChildMousePos = pChild->ImplFrameToOutput( aMousePos );
     511 [ #  # ][ #  #  :          0 :             if ( !bMouseLeave &&
             #  #  #  # ]
         [ #  # ][ #  # ]
     512                 :            :                  (pChild == pWinFrameData->mpMouseMoveWin) &&
     513                 :          0 :                  (aChildMousePos.X() == pWinFrameData->mnLastMouseWinX) &&
     514                 :          0 :                  (aChildMousePos.Y() == pWinFrameData->mnLastMouseWinY) &&
     515                 :            :                  (nOldCode == pWinFrameData->mnMouseCode) )
     516                 :            :             {
     517                 :            :                 // set mouse pointer anew, as it could have changed
     518                 :            :                 // due to the mode switch
     519         [ #  # ]:          0 :                 ImplSetMousePointer( pChild );
     520                 :          0 :                 return 0;
     521                 :            :             }
     522                 :            : 
     523                 :          0 :             pWinFrameData->mnLastMouseWinX = aChildMousePos.X();
     524                 :          0 :             pWinFrameData->mnLastMouseWinY = aChildMousePos.Y();
     525                 :            :         }
     526                 :            : 
     527                 :            :         // mouse click
     528                 :          0 :         nClicks = pWinFrameData->mnClickCount;
     529                 :            : 
     530                 :            :         // call Start-Drag handler if required
     531                 :            :         // Warning: should be called before Move, as otherwise during
     532                 :            :         // fast mouse movements the applications move to the selection state
     533                 :          0 :         Window* pMouseDownWin = pWinFrameData->mpMouseDownWin;
     534         [ #  # ]:          0 :         if ( pMouseDownWin )
     535                 :            :         {
     536                 :            :             // check for matching StartDrag mode. We only compare
     537                 :            :             // the status of the mouse buttons, such that e. g. Mod1 can
     538                 :            :             // change immediately to the copy mode
     539                 :          0 :             const MouseSettings& rMSettings = pMouseDownWin->GetSettings().GetMouseSettings();
     540         [ #  # ]:          0 :             if ( (nCode & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)) ==
     541                 :          0 :                  (rMSettings.GetStartDragCode() & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)) )
     542                 :            :             {
     543 [ #  # ][ #  # ]:          0 :                 if ( !pMouseDownWin->ImplGetFrameData()->mbStartDragCalled )
     544                 :            :                 {
     545                 :          0 :                     long nDragW  = rMSettings.GetStartDragWidth();
     546                 :          0 :                     long nDragH  = rMSettings.GetStartDragWidth();
     547                 :            :                     //long nMouseX = nX;
     548                 :            :                     //long nMouseY = nY;
     549                 :          0 :                     long nMouseX = aMousePos.X(); // #106074# use the possibly re-mirrored coordinates (RTL) ! nX,nY are unmodified !
     550                 :          0 :                     long nMouseY = aMousePos.Y();
     551 [ #  # ][ #  # ]:          0 :                     if ( !(((nMouseX-nDragW) <= pMouseDownWin->ImplGetFrameData()->mnFirstMouseX) &&
         [ #  # ][ #  # ]
     552 [ #  # ][ #  # ]:          0 :                            ((nMouseX+nDragW) >= pMouseDownWin->ImplGetFrameData()->mnFirstMouseX)) ||
     553         [ #  # ]:          0 :                          !(((nMouseY-nDragH) <= pMouseDownWin->ImplGetFrameData()->mnFirstMouseY) &&
     554 [ #  # ][ #  # ]:          0 :                            ((nMouseY+nDragH) >= pMouseDownWin->ImplGetFrameData()->mnFirstMouseY)) )
     555                 :            :                     {
     556         [ #  # ]:          0 :                         pMouseDownWin->ImplGetFrameData()->mbStartDragCalled  = sal_True;
     557                 :            : 
     558                 :            :                         // Check if drag source provides it's own recognizer
     559 [ #  # ][ #  # ]:          0 :                         if( pMouseDownWin->ImplGetFrameData()->mbInternalDragGestureRecognizer )
     560                 :            :                         {
     561                 :            :                             // query DropTarget from child window
     562                 :            :                             ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureRecognizer > xDragGestureRecognizer =
     563                 :          0 :                                 ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragGestureRecognizer > ( pMouseDownWin->ImplGetWindowImpl()->mxDNDListenerContainer,
     564         [ #  # ]:          0 :                                     ::com::sun::star::uno::UNO_QUERY );
     565                 :            : 
     566         [ #  # ]:          0 :                             if( xDragGestureRecognizer.is() )
     567                 :            :                             {
     568                 :            :                                 // retrieve mouse position relative to mouse down window
     569                 :            :                                 Point relLoc = pMouseDownWin->ImplFrameToOutput( Point(
     570         [ #  # ]:          0 :                                     pMouseDownWin->ImplGetFrameData()->mnFirstMouseX,
     571 [ #  # ][ #  # ]:          0 :                                     pMouseDownWin->ImplGetFrameData()->mnFirstMouseY ) );
     572                 :            : 
     573                 :            :                                 // create a uno mouse event out of the available data
     574                 :            :                                 ::com::sun::star::awt::MouseEvent aMouseEvent(
     575                 :            :                                     static_cast < ::com::sun::star::uno::XInterface * > ( 0 ),
     576                 :            : #ifdef MACOSX
     577                 :            :                     nCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_MOD3),
     578                 :            : #else
     579                 :            :                                     nCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2),
     580                 :            : #endif
     581                 :            :                                     nCode & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE),
     582                 :            :                                     nMouseX,
     583                 :            :                                     nMouseY,
     584                 :            :                                     nClicks,
     585 [ #  # ][ #  # ]:          0 :                                     sal_False );
     586                 :            : 
     587         [ #  # ]:          0 :                                 sal_uLong nCount = Application::ReleaseSolarMutex();
     588                 :            : 
     589                 :            :                                 // FIXME: where do I get Action from ?
     590         [ #  # ]:          0 :                                 ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragSource > xDragSource = pMouseDownWin->GetDragSource();
     591                 :            : 
     592         [ #  # ]:          0 :                                 if( xDragSource.is() )
     593                 :            :                                 {
     594         [ #  # ]:          0 :                                     static_cast < DNDListenerContainer * > ( xDragGestureRecognizer.get() )->fireDragGestureEvent( 0,
     595 [ #  # ][ #  # ]:          0 :                                         relLoc.X(), relLoc.Y(), xDragSource, ::com::sun::star::uno::makeAny( aMouseEvent ) );
                 [ #  # ]
     596                 :            :                                 }
     597                 :            : 
     598 [ #  # ][ #  # ]:          0 :                                 Application::AcquireSolarMutex( nCount );
     599                 :          0 :                             }
     600                 :            :                         }
     601                 :            :                     }
     602                 :            :                 }
     603                 :            :             }
     604                 :            :             else
     605         [ #  # ]:          0 :                 pMouseDownWin->ImplGetFrameData()->mbStartDragCalled  = sal_True;
     606                 :            :         }
     607                 :            : 
     608                 :            :         // test for mouseleave and mouseenter
     609                 :          0 :         Window* pMouseMoveWin = pWinFrameData->mpMouseMoveWin;
     610         [ #  # ]:          0 :         if ( pChild != pMouseMoveWin )
     611                 :            :         {
     612         [ #  # ]:          0 :             if ( pMouseMoveWin )
     613                 :            :             {
     614         [ #  # ]:          0 :                 Point       aLeaveMousePos = pMouseMoveWin->ImplFrameToOutput( aMousePos );
     615         [ #  # ]:          0 :                 MouseEvent  aMLeaveEvt( aLeaveMousePos, nClicks, nMode | MOUSE_LEAVEWINDOW, nCode, nCode );
     616         [ #  # ]:          0 :                 NotifyEvent aNLeaveEvt( EVENT_MOUSEMOVE, pMouseMoveWin, &aMLeaveEvt );
     617         [ #  # ]:          0 :                 ImplDelData aDelData;
     618         [ #  # ]:          0 :                 ImplDelData aDelData2;
     619                 :          0 :                 pWinFrameData->mbInMouseMove = sal_True;
     620         [ #  # ]:          0 :                 pMouseMoveWin->ImplGetWinData()->mbMouseOver = sal_False;
     621         [ #  # ]:          0 :                 pMouseMoveWin->ImplAddDel( &aDelData );
     622                 :            : 
     623                 :            :                 // A MouseLeave can destroy this window
     624         [ #  # ]:          0 :                 if ( pChild )
     625         [ #  # ]:          0 :                     pChild->ImplAddDel( &aDelData2 );
     626 [ #  # ][ #  # ]:          0 :                 if ( !ImplCallPreNotify( aNLeaveEvt ) )
     627                 :            :                 {
     628         [ #  # ]:          0 :                     pMouseMoveWin->MouseMove( aMLeaveEvt );
     629                 :            :                     // #82968#
     630         [ #  # ]:          0 :                     if( !aDelData.IsDead() )
     631         [ #  # ]:          0 :                         aNLeaveEvt.GetWindow()->ImplNotifyKeyMouseCommandEventListeners( aNLeaveEvt );
     632                 :            :                 }
     633                 :            : 
     634                 :          0 :                 pWinFrameData->mpMouseMoveWin = NULL;
     635                 :          0 :                 pWinFrameData->mbInMouseMove = sal_False;
     636                 :            : 
     637         [ #  # ]:          0 :                 if ( pChild )
     638                 :            :                 {
     639         [ #  # ]:          0 :                     if ( aDelData2.IsDead() )
     640                 :          0 :                         pChild = NULL;
     641                 :            :                     else
     642         [ #  # ]:          0 :                         pChild->ImplRemoveDel( &aDelData2 );
     643                 :            :                 }
     644         [ #  # ]:          0 :                 if ( aDelData.IsDead() )
     645                 :          0 :                     return 1;
     646 [ #  # ][ #  # ]:          0 :                 pMouseMoveWin->ImplRemoveDel( &aDelData );
         [ #  # ][ #  # ]
                 [ #  # ]
     647                 :            :             }
     648                 :            : 
     649                 :          0 :             nMode |= MOUSE_ENTERWINDOW;
     650                 :            :         }
     651                 :          0 :         pWinFrameData->mpMouseMoveWin = pChild;
     652         [ #  # ]:          0 :         if( pChild )
     653         [ #  # ]:          0 :             pChild->ImplGetWinData()->mbMouseOver = sal_True;
     654                 :            : 
     655                 :            :         // MouseLeave
     656         [ #  # ]:          0 :         if ( !pChild )
     657                 :          0 :             return 0;
     658                 :            :     }
     659                 :            :     else
     660                 :            :     {
     661                 :            :         // mouse click
     662         [ #  # ]:          0 :         if ( nSVEvent == EVENT_MOUSEBUTTONDOWN )
     663                 :            :         {
     664                 :          0 :             const MouseSettings& rMSettings = pChild->GetSettings().GetMouseSettings();
     665                 :          0 :             sal_uLong   nDblClkTime = rMSettings.GetDoubleClickTime();
     666                 :          0 :             long    nDblClkW    = rMSettings.GetDoubleClickWidth();
     667                 :          0 :             long    nDblClkH    = rMSettings.GetDoubleClickHeight();
     668                 :            :             //long    nMouseX     = nX;
     669                 :            :             //long    nMouseY     = nY;
     670                 :          0 :             long nMouseX = aMousePos.X();   // #106074# use the possibly re-mirrored coordinates (RTL) ! nX,nY are unmodified !
     671                 :          0 :             long nMouseY = aMousePos.Y();
     672                 :            : 
     673 [ #  # ][ #  # ]:          0 :             if ( (pChild == pChild->ImplGetFrameData()->mpMouseDownWin) &&
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     674         [ #  # ]:          0 :                  (nCode == pChild->ImplGetFrameData()->mnFirstMouseCode) &&
     675         [ #  # ]:          0 :                  ((nMsgTime-pChild->ImplGetFrameData()->mnMouseDownTime) < nDblClkTime) &&
     676         [ #  # ]:          0 :                  ((nMouseX-nDblClkW) <= pChild->ImplGetFrameData()->mnFirstMouseX) &&
     677         [ #  # ]:          0 :                  ((nMouseX+nDblClkW) >= pChild->ImplGetFrameData()->mnFirstMouseX) &&
     678         [ #  # ]:          0 :                  ((nMouseY-nDblClkH) <= pChild->ImplGetFrameData()->mnFirstMouseY) &&
     679         [ #  # ]:          0 :                  ((nMouseY+nDblClkH) >= pChild->ImplGetFrameData()->mnFirstMouseY) )
     680                 :            :             {
     681         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mnClickCount++;
     682         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mbStartDragCalled  = sal_True;
     683                 :            :             }
     684                 :            :             else
     685                 :            :             {
     686         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mpMouseDownWin     = pChild;
     687         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mnClickCount       = 1;
     688         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mnFirstMouseX      = nMouseX;
     689         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mnFirstMouseY      = nMouseY;
     690         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mnFirstMouseCode   = nCode;
     691         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mbStartDragCalled  = !((nCode & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)) ==
     692                 :          0 :                                                             (rMSettings.GetStartDragCode() & (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)));
     693                 :            :             }
     694         [ #  # ]:          0 :             pChild->ImplGetFrameData()->mnMouseDownTime = nMsgTime;
     695                 :            :         }
     696         [ #  # ]:          0 :         nClicks = pChild->ImplGetFrameData()->mnClickCount;
     697                 :            : 
     698         [ #  # ]:          0 :         pSVData->maAppData.mnLastInputTime = Time::GetSystemTicks();
     699                 :            :     }
     700                 :            : 
     701                 :            :     DBG_ASSERT( pChild, "ImplHandleMouseEvent: pChild == NULL" );
     702                 :            : 
     703                 :            :     // create mouse event
     704         [ #  # ]:          0 :     Point aChildPos = pChild->ImplFrameToOutput( aMousePos );
     705         [ #  # ]:          0 :     MouseEvent aMEvt( aChildPos, nClicks, nMode, nCode, nCode );
     706                 :            : 
     707                 :            :     // tracking window gets the mouse events
     708         [ #  # ]:          0 :     if ( pSVData->maWinData.mpTrackWin )
     709                 :          0 :         pChild = pSVData->maWinData.mpTrackWin;
     710                 :            : 
     711                 :            :     // handle FloatingMode
     712 [ #  # ][ #  # ]:          0 :     if ( !pSVData->maWinData.mpTrackWin && pSVData->maWinData.mpFirstFloat )
     713                 :            :     {
     714         [ #  # ]:          0 :         ImplDelData aDelData;
     715         [ #  # ]:          0 :         pChild->ImplAddDel( &aDelData );
     716 [ #  # ][ #  # ]:          0 :         if ( ImplHandleMouseFloatMode( pChild, aMousePos, nCode, nSVEvent, bMouseLeave ) )
     717                 :            :         {
     718         [ #  # ]:          0 :             if ( !aDelData.IsDead() )
     719                 :            :             {
     720         [ #  # ]:          0 :                 pChild->ImplRemoveDel( &aDelData );
     721         [ #  # ]:          0 :                 pChild->ImplGetFrameData()->mbStartDragCalled = sal_True;
     722                 :            :             }
     723                 :          0 :             return 1;
     724                 :            :         }
     725                 :            :         else
     726 [ #  # ][ #  # ]:          0 :             pChild->ImplRemoveDel( &aDelData );
                 [ #  # ]
     727                 :            :     }
     728                 :            : 
     729                 :            :     // call handler
     730                 :          0 :     sal_Bool bDrag = sal_False;
     731                 :          0 :     sal_Bool bCallHelpRequest = sal_True;
     732                 :            :     DBG_ASSERT( pChild, "ImplHandleMouseEvent: pChild is NULL" );
     733                 :            : 
     734         [ #  # ]:          0 :     ImplDelData aDelData;
     735         [ #  # ]:          0 :     NotifyEvent aNEvt( nSVEvent, pChild, &aMEvt );
     736         [ #  # ]:          0 :     pChild->ImplAddDel( &aDelData );
     737         [ #  # ]:          0 :     if ( nSVEvent == EVENT_MOUSEMOVE )
     738         [ #  # ]:          0 :         pChild->ImplGetFrameData()->mbInMouseMove = sal_True;
     739                 :            : 
     740                 :            :     // bring window into foreground on mouseclick
     741         [ #  # ]:          0 :     if ( nSVEvent == EVENT_MOUSEBUTTONDOWN )
     742                 :            :     {
     743 [ #  # ][ #  # ]:          0 :         if( !pSVData->maWinData.mpFirstFloat && // totop for floating windows in popup would change the focus and would close them immediately
                 [ #  # ]
     744 [ #  # ][ #  # ]:          0 :             !(pChild->ImplGetFrameWindow()->GetStyle() & WB_OWNERDRAWDECORATION) )    // ownerdrawdecorated windows must never grab focus
     745         [ #  # ]:          0 :             pChild->ToTop();
     746         [ #  # ]:          0 :         if ( aDelData.IsDead() )
     747                 :          0 :             return 1;
     748                 :            :     }
     749                 :            : 
     750 [ #  # ][ #  # ]:          0 :     if ( ImplCallPreNotify( aNEvt ) || aDelData.IsDead() )
         [ #  # ][ #  # ]
     751                 :          0 :         nRet = 1;
     752                 :            :     else
     753                 :            :     {
     754                 :          0 :         nRet = 0;
     755         [ #  # ]:          0 :         if ( nSVEvent == EVENT_MOUSEMOVE )
     756                 :            :         {
     757         [ #  # ]:          0 :             if ( pSVData->maWinData.mpTrackWin )
     758                 :            :             {
     759         [ #  # ]:          0 :                 TrackingEvent aTEvt( aMEvt );
     760         [ #  # ]:          0 :                 pChild->Tracking( aTEvt );
     761         [ #  # ]:          0 :                 if ( !aDelData.IsDead() )
     762                 :            :                 {
     763                 :            :                     // When ScrollRepeat, we restart the timer
     764 [ #  # ][ #  # ]:          0 :                     if ( pSVData->maWinData.mpTrackTimer &&
     765                 :            :                          (pSVData->maWinData.mnTrackFlags & STARTTRACK_SCROLLREPEAT) )
     766         [ #  # ]:          0 :                         pSVData->maWinData.mpTrackTimer->Start();
     767                 :            :                 }
     768                 :          0 :                 bCallHelpRequest = sal_False;
     769                 :          0 :                 nRet = 1;
     770                 :            :             }
     771                 :            :             else
     772                 :            :             {
     773                 :            :                 // Auto-ToTop
     774   [ #  #  #  # ]:          0 :                 if ( !pSVData->maWinData.mpCaptureWin &&
                 [ #  # ]
     775                 :          0 :                      (pChild->GetSettings().GetMouseSettings().GetOptions() & MOUSE_OPTION_AUTOFOCUS) )
     776         [ #  # ]:          0 :                     pChild->ToTop( TOTOP_NOGRABFOCUS );
     777                 :            : 
     778         [ #  # ]:          0 :                 if( aDelData.IsDead() )
     779                 :          0 :                     bCallHelpRequest = sal_False;
     780                 :            :                 else
     781                 :            :                 {
     782                 :            :                     // if the MouseMove handler changes the help window's visibility
     783                 :            :                     // the HelpRequest handler should not be called anymore
     784                 :          0 :                     Window* pOldHelpTextWin = pSVData->maHelpData.mpHelpWin;
     785                 :          0 :                     pChild->ImplGetWindowImpl()->mbMouseMove = sal_False;
     786         [ #  # ]:          0 :                     pChild->MouseMove( aMEvt );
     787         [ #  # ]:          0 :                     if ( pOldHelpTextWin != pSVData->maHelpData.mpHelpWin )
     788                 :          0 :                         bCallHelpRequest = sal_False;
     789                 :            :                 }
     790                 :            :             }
     791                 :            :         }
     792         [ #  # ]:          0 :         else if ( nSVEvent == EVENT_MOUSEBUTTONDOWN )
     793                 :            :         {
     794 [ #  # ][ #  # ]:          0 :             if ( pSVData->maWinData.mpTrackWin &&
     795                 :          0 :                  !(pSVData->maWinData.mnTrackFlags & STARTTRACK_MOUSEBUTTONDOWN) )
     796                 :          0 :                 nRet = 1;
     797                 :            :             else
     798                 :            :             {
     799                 :          0 :                 pChild->ImplGetWindowImpl()->mbMouseButtonDown = sal_False;
     800         [ #  # ]:          0 :                 pChild->MouseButtonDown( aMEvt );
     801                 :            :             }
     802                 :            :         }
     803                 :            :         else
     804                 :            :         {
     805         [ #  # ]:          0 :             if ( pSVData->maWinData.mpTrackWin )
     806                 :            :             {
     807         [ #  # ]:          0 :                 pChild->EndTracking();
     808                 :          0 :                 nRet = 1;
     809                 :            :             }
     810                 :            :             else
     811                 :            :             {
     812                 :          0 :                 pChild->ImplGetWindowImpl()->mbMouseButtonUp = sal_False;
     813         [ #  # ]:          0 :                 pChild->MouseButtonUp( aMEvt );
     814                 :            :             }
     815                 :            :         }
     816                 :            : 
     817                 :            :         // #82968#
     818         [ #  # ]:          0 :         if ( !aDelData.IsDead() )
     819         [ #  # ]:          0 :             aNEvt.GetWindow()->ImplNotifyKeyMouseCommandEventListeners( aNEvt );
     820                 :            :     }
     821                 :            : 
     822         [ #  # ]:          0 :     if ( aDelData.IsDead() )
     823                 :          0 :         return 1;
     824                 :            : 
     825                 :            : 
     826         [ #  # ]:          0 :     if ( nSVEvent == EVENT_MOUSEMOVE )
     827                 :          0 :         pChild->ImplGetWindowImpl()->mpFrameData->mbInMouseMove = sal_False;
     828                 :            : 
     829         [ #  # ]:          0 :     if ( nSVEvent == EVENT_MOUSEMOVE )
     830                 :            :     {
     831 [ #  # ][ #  # ]:          0 :         if ( bCallHelpRequest && !pSVData->maHelpData.mbKeyboardHelp )
     832 [ #  # ][ #  # ]:          0 :             ImplHandleMouseHelpRequest( pChild, pChild->OutputToScreenPixel( aMEvt.GetPosPixel() ) );
     833                 :          0 :         nRet = 1;
     834                 :            :     }
     835         [ #  # ]:          0 :     else if ( !nRet )
     836                 :            :     {
     837         [ #  # ]:          0 :         if ( nSVEvent == EVENT_MOUSEBUTTONDOWN )
     838                 :            :         {
     839         [ #  # ]:          0 :             if ( !pChild->ImplGetWindowImpl()->mbMouseButtonDown )
     840                 :          0 :                 nRet = 1;
     841                 :            :         }
     842                 :            :         else
     843                 :            :         {
     844         [ #  # ]:          0 :             if ( !pChild->ImplGetWindowImpl()->mbMouseButtonUp )
     845                 :          0 :                 nRet = 1;
     846                 :            :         }
     847                 :            :     }
     848                 :            : 
     849         [ #  # ]:          0 :     pChild->ImplRemoveDel( &aDelData );
     850                 :            : 
     851         [ #  # ]:          0 :     if ( nSVEvent == EVENT_MOUSEMOVE )
     852                 :            :     {
     853                 :            :         // set new mouse pointer
     854         [ #  # ]:          0 :         if ( !bMouseLeave )
     855         [ #  # ]:          0 :             ImplSetMousePointer( pChild );
     856                 :            :     }
     857 [ #  # ][ #  # ]:          0 :     else if ( (nSVEvent == EVENT_MOUSEBUTTONDOWN) || (nSVEvent == EVENT_MOUSEBUTTONUP) )
     858                 :            :     {
     859         [ #  # ]:          0 :         if ( !bDrag )
     860                 :            :         {
     861                 :            :             // Command-Events
     862 [ #  # ][ #  # ]:          0 :             if ( /*(nRet == 0) &&*/ (nClicks == 1) && (nSVEvent == EVENT_MOUSEBUTTONDOWN) &&
                 [ #  # ]
     863                 :            :                  (nCode == MOUSE_MIDDLE) )
     864                 :            :             {
     865                 :          0 :                 sal_uInt16 nMiddleAction = pChild->GetSettings().GetMouseSettings().GetMiddleButtonAction();
     866         [ #  # ]:          0 :                 if ( nMiddleAction == MOUSE_MIDDLE_AUTOSCROLL )
     867         [ #  # ]:          0 :                     nRet = !ImplCallCommand( pChild, COMMAND_STARTAUTOSCROLL, NULL, sal_True, &aChildPos );
     868         [ #  # ]:          0 :                 else if ( nMiddleAction == MOUSE_MIDDLE_PASTESELECTION )
     869         [ #  # ]:          0 :                     nRet = !ImplCallCommand( pChild, COMMAND_PASTESELECTION, NULL, sal_True, &aChildPos );
     870                 :            :             }
     871                 :            :             else
     872                 :            :             {
     873                 :            :                 // ContextMenu
     874                 :          0 :                 const MouseSettings& rMSettings = pChild->GetSettings().GetMouseSettings();
     875         [ #  # ]:          0 :                 if ( (nCode == rMSettings.GetContextMenuCode()) &&
           [ #  #  #  # ]
     876                 :          0 :                      (nClicks == rMSettings.GetContextMenuClicks()) )
     877                 :            :                 {
     878                 :            :                     sal_Bool bContextMenu;
     879         [ #  # ]:          0 :                     if ( rMSettings.GetContextMenuDown() )
     880                 :          0 :                         bContextMenu = (nSVEvent == EVENT_MOUSEBUTTONDOWN);
     881                 :            :                     else
     882                 :          0 :                         bContextMenu = (nSVEvent == EVENT_MOUSEBUTTONUP);
     883         [ #  # ]:          0 :                     if ( bContextMenu )
     884                 :            :                     {
     885         [ #  # ]:          0 :                         if( pSVData->maAppData.mpActivePopupMenu )
     886                 :            :                         {
     887                 :            :                             /*  #i34277# there already is a context menu open
     888                 :            :                             *   that was probably just closed with EndPopupMode.
     889                 :            :                             *   We need to give the eventual corresponding
     890                 :            :                             *   PopupMenu::Execute a chance to end properly.
     891                 :            :                             *   Therefore delay context menu command and
     892                 :            :                             *   issue only after popping one frame of the
     893                 :            :                             *   Yield stack.
     894                 :            :                             */
     895 [ #  # ][ #  # ]:          0 :                             ContextMenuEvent* pEv = new ContextMenuEvent;
     896                 :          0 :                             pEv->pWindow = pChild;
     897                 :          0 :                             pEv->aChildPos = aChildPos;
     898         [ #  # ]:          0 :                             pChild->ImplAddDel( &pEv->aDelData );
     899 [ #  # ][ #  # ]:          0 :                             Application::PostUserEvent( Link( pEv, ContextMenuEventLink ) );
     900                 :            :                         }
     901                 :            :                         else
     902         [ #  # ]:          0 :                             nRet = ! ImplCallCommand( pChild, COMMAND_CONTEXTMENU, NULL, sal_True, &aChildPos );
     903                 :            :                     }
     904                 :            :                 }
     905                 :            :             }
     906                 :            :         }
     907                 :            :     }
     908                 :            : 
     909         [ #  # ]:          0 :     return nRet;
     910                 :            : }
     911                 :            : 
     912                 :            : // -----------------------------------------------------------------------
     913                 :            : 
     914                 :          0 : static Window* ImplGetKeyInputWindow( Window* pWindow )
     915                 :            : {
     916                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
     917                 :            : 
     918                 :            :     // determine last input time
     919                 :          0 :     pSVData->maAppData.mnLastInputTime = Time::GetSystemTicks();
     920                 :            : 
     921                 :            :     // #127104# workaround for destroyed windows
     922         [ #  # ]:          0 :     if( pWindow->ImplGetWindowImpl() == NULL )
     923                 :          0 :         return 0;
     924                 :            : 
     925                 :            :     // find window - is every time the window which has currently the
     926                 :            :     // focus or the last time the focus.
     927                 :            :     // the first floating window always has the focus
     928                 :          0 :     Window* pChild = pSVData->maWinData.mpFirstFloat;
     929 [ #  # ][ #  # ]:          0 :     if( !pChild || ( pChild->ImplGetWindowImpl()->mbFloatWin && !((FloatingWindow *)pChild)->GrabsFocus() ) )
         [ #  # ][ #  # ]
     930                 :          0 :         pChild = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
     931                 :            :     else
     932                 :            :     {
     933                 :            :         // allow floaters to forward keyinput to some member
     934                 :          0 :         pChild = pChild->GetPreferredKeyInputWindow();
     935                 :            :     }
     936                 :            : 
     937                 :            :     // no child - than no input
     938         [ #  # ]:          0 :     if ( !pChild )
     939                 :          0 :         return 0;
     940                 :            : 
     941                 :            :     // We call also KeyInput if we haven't the focus, because on Unix
     942                 :            :     // system this is often the case when a Lookup Choise Window has
     943                 :            :     // the focus - because this windows send the KeyInput directly to
     944                 :            :     // the window without resetting the focus
     945                 :            :     DBG_ASSERTWARNING( pChild == pSVData->maWinData.mpFocusWin,
     946                 :            :                        "ImplHandleKey: Keyboard-Input is sent to a frame without focus" );
     947                 :            : 
     948                 :            :     // no keyinput to disabled windows
     949 [ #  # ][ #  # ]:          0 :     if ( !pChild->IsEnabled() || !pChild->IsInputEnabled() || pChild->IsInModalMode() )
         [ #  # ][ #  # ]
     950                 :          0 :         return 0;
     951                 :            : 
     952                 :          0 :     return pChild;
     953                 :            : }
     954                 :            : 
     955                 :            : // -----------------------------------------------------------------------
     956                 :            : 
     957                 :          0 : static long ImplHandleKey( Window* pWindow, sal_uInt16 nSVEvent,
     958                 :            :                            sal_uInt16 nKeyCode, sal_uInt16 nCharCode, sal_uInt16 nRepeat, sal_Bool bForward )
     959                 :            : {
     960         [ #  # ]:          0 :     ImplSVData* pSVData = ImplGetSVData();
     961                 :          0 :     KeyCode     aKeyCode( nKeyCode, nKeyCode );
     962                 :          0 :     sal_uInt16      nEvCode = aKeyCode.GetCode();
     963                 :            : 
     964                 :            :     // allow application key listeners to remove the key event
     965                 :            :     // but make sure we're not forwarding external KeyEvents, (ie where bForward is sal_False)
     966                 :            :     // becasue those are coming back from the listener itself and MUST be processed
     967         [ #  # ]:          0 :     KeyEvent aKeyEvent( (xub_Unicode)nCharCode, aKeyCode, nRepeat );
     968         [ #  # ]:          0 :     if( bForward )
     969                 :            :     {
     970                 :            :         sal_uInt16 nVCLEvent;
     971      [ #  #  # ]:          0 :         switch( nSVEvent )
     972                 :            :         {
     973                 :            :             case EVENT_KEYINPUT:
     974                 :          0 :                 nVCLEvent = VCLEVENT_WINDOW_KEYINPUT;
     975                 :          0 :                 break;
     976                 :            :             case EVENT_KEYUP:
     977                 :          0 :                 nVCLEvent = VCLEVENT_WINDOW_KEYUP;
     978                 :          0 :                 break;
     979                 :            :             default:
     980                 :          0 :                 nVCLEvent = 0;
     981                 :          0 :                 break;
     982                 :            :         }
     983 [ #  # ][ #  # ]:          0 :         if( nVCLEvent && pSVData->mpApp->HandleKey( nVCLEvent, pWindow, &aKeyEvent ) )
         [ #  # ][ #  # ]
     984                 :          0 :             return 1;
     985                 :            :     }
     986                 :            : 
     987                 :            :     // #i1820# use locale specific decimal separator
     988         [ #  # ]:          0 :     if( nEvCode == KEY_DECIMAL )
     989                 :            :     {
     990 [ #  # ][ #  # ]:          0 :         if( Application::GetSettings().GetMiscSettings().GetEnableLocalizedDecimalSep() )
                 [ #  # ]
     991                 :            :         {
     992 [ #  # ][ #  # ]:          0 :             String aSep( pWindow->GetSettings().GetLocaleDataWrapper().getNumDecimalSep() );
                 [ #  # ]
     993         [ #  # ]:          0 :             nCharCode = (sal_uInt16) aSep.GetChar(0);
     994                 :            :         }
     995                 :            :     }
     996                 :            : 
     997 [ #  # ][ #  # ]:          0 :     sal_Bool bCtrlF6 = (aKeyCode.GetCode() == KEY_F6) && aKeyCode.IsMod1();
     998                 :            : 
     999                 :            :     // determine last input time
    1000         [ #  # ]:          0 :     pSVData->maAppData.mnLastInputTime = Time::GetSystemTicks();
    1001                 :            : 
    1002                 :            :     // handle tracking window
    1003         [ #  # ]:          0 :     if ( nSVEvent == EVENT_KEYINPUT )
    1004                 :            :     {
    1005                 :            : #ifdef DBG_UTIL
    1006                 :            :         // #105224# use Ctrl-Alt-Shift-D, Ctrl-Shift-D must be useable by app
    1007                 :            :         if ( aKeyCode.IsShift() && aKeyCode.IsMod1() && (aKeyCode.IsMod2() || aKeyCode.IsMod3()) && (aKeyCode.GetCode() == KEY_D) )
    1008                 :            :         {
    1009                 :            :             DBGGUI_START();
    1010                 :            :             return 1;
    1011                 :            :         }
    1012                 :            : #endif
    1013                 :            : 
    1014         [ #  # ]:          0 :         if ( pSVData->maHelpData.mbExtHelpMode )
    1015                 :            :         {
    1016         [ #  # ]:          0 :             Help::EndExtHelp();
    1017         [ #  # ]:          0 :             if ( nEvCode == KEY_ESCAPE )
    1018                 :          0 :                 return 1;
    1019                 :            :         }
    1020         [ #  # ]:          0 :         if ( pSVData->maHelpData.mpHelpWin )
    1021         [ #  # ]:          0 :             ImplDestroyHelpWindow( false );
    1022                 :            : 
    1023                 :            :         // AutoScrollMode
    1024         [ #  # ]:          0 :         if ( pSVData->maWinData.mpAutoScrollWin )
    1025                 :            :         {
    1026         [ #  # ]:          0 :             pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
    1027         [ #  # ]:          0 :             if ( nEvCode == KEY_ESCAPE )
    1028                 :          0 :                 return 1;
    1029                 :            :         }
    1030                 :            : 
    1031         [ #  # ]:          0 :         if ( pSVData->maWinData.mpTrackWin )
    1032                 :            :         {
    1033                 :          0 :             sal_uInt16 nOrigCode = aKeyCode.GetCode();
    1034                 :            : 
    1035 [ #  # ][ #  # ]:          0 :             if ( (nOrigCode == KEY_ESCAPE) && !(pSVData->maWinData.mnTrackFlags & STARTTRACK_NOKEYCANCEL) )
    1036                 :            :             {
    1037         [ #  # ]:          0 :                 pSVData->maWinData.mpTrackWin->EndTracking( ENDTRACK_CANCEL | ENDTRACK_KEY );
    1038         [ #  # ]:          0 :                 if ( pSVData->maWinData.mpFirstFloat )
    1039                 :            :                 {
    1040         [ #  # ]:          0 :                     FloatingWindow* pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
    1041         [ #  # ]:          0 :                     if ( !(pLastLevelFloat->GetPopupModeFlags() & FLOATWIN_POPUPMODE_NOKEYCLOSE) )
    1042                 :            :                     {
    1043                 :          0 :                         sal_uInt16 nEscCode = aKeyCode.GetCode();
    1044                 :            : 
    1045         [ #  # ]:          0 :                         if ( nEscCode == KEY_ESCAPE )
    1046         [ #  # ]:          0 :                             pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
    1047                 :            :                     }
    1048                 :            :                 }
    1049                 :          0 :                 return 1;
    1050                 :            :             }
    1051         [ #  # ]:          0 :             else if ( nOrigCode == KEY_RETURN )
    1052                 :            :             {
    1053         [ #  # ]:          0 :                 pSVData->maWinData.mpTrackWin->EndTracking( ENDTRACK_KEY );
    1054                 :          0 :                 return 1;
    1055                 :            :             }
    1056         [ #  # ]:          0 :             else if ( !(pSVData->maWinData.mnTrackFlags & STARTTRACK_KEYINPUT) )
    1057                 :          0 :                 return 1;
    1058                 :            :         }
    1059                 :            : 
    1060                 :            :         // handle FloatingMode
    1061         [ #  # ]:          0 :         if ( pSVData->maWinData.mpFirstFloat )
    1062                 :            :         {
    1063         [ #  # ]:          0 :             FloatingWindow* pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
    1064         [ #  # ]:          0 :             if ( !(pLastLevelFloat->GetPopupModeFlags() & FLOATWIN_POPUPMODE_NOKEYCLOSE) )
    1065                 :            :             {
    1066                 :          0 :                 sal_uInt16 nCode = aKeyCode.GetCode();
    1067                 :            : 
    1068 [ #  # ][ #  # ]:          0 :                 if ( (nCode == KEY_ESCAPE) || bCtrlF6)
    1069                 :            :                 {
    1070         [ #  # ]:          0 :                     pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
    1071         [ #  # ]:          0 :                     if( !bCtrlF6 )
    1072                 :          0 :                         return 1;
    1073                 :            :                 }
    1074                 :            :             }
    1075                 :            :         }
    1076                 :            : 
    1077                 :            :         // test for accel
    1078         [ #  # ]:          0 :         if ( pSVData->maAppData.mpAccelMgr )
    1079                 :            :         {
    1080 [ #  # ][ #  # ]:          0 :             if ( pSVData->maAppData.mpAccelMgr->IsAccelKey( aKeyCode, nRepeat ) )
    1081                 :          0 :                 return 1;
    1082                 :            :         }
    1083                 :            :     }
    1084                 :            : 
    1085                 :            :     // find window
    1086         [ #  # ]:          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    1087         [ #  # ]:          0 :     if ( !pChild )
    1088                 :          0 :         return 0;
    1089                 :            : 
    1090                 :            :     // --- RTL --- mirror cursor keys
    1091 [ #  # ][ #  # ]:          0 :     if( (aKeyCode.GetCode() == KEY_LEFT || aKeyCode.GetCode() == KEY_RIGHT) &&
           [ #  #  #  # ]
                 [ #  # ]
    1092         [ #  # ]:          0 :       pChild->ImplHasMirroredGraphics() && pChild->IsRTLEnabled() )
    1093 [ #  # ][ #  # ]:          0 :         aKeyCode = KeyCode( aKeyCode.GetCode() == KEY_LEFT ? KEY_RIGHT : KEY_LEFT, aKeyCode.GetModifier() );
    1094                 :            : 
    1095                 :            :     // call handler
    1096         [ #  # ]:          0 :     ImplDelData aDelData;
    1097         [ #  # ]:          0 :     pChild->ImplAddDel( &aDelData );
    1098                 :            : 
    1099         [ #  # ]:          0 :     KeyEvent    aKeyEvt( (xub_Unicode)nCharCode, aKeyCode, nRepeat );
    1100         [ #  # ]:          0 :     NotifyEvent aNotifyEvt( nSVEvent, pChild, &aKeyEvt );
    1101         [ #  # ]:          0 :     sal_Bool        bKeyPreNotify = (ImplCallPreNotify( aNotifyEvt ) != 0);
    1102                 :          0 :     long        nRet = 1;
    1103                 :            : 
    1104 [ #  # ][ #  # ]:          0 :     if ( !bKeyPreNotify && !aDelData.IsDead() )
                 [ #  # ]
    1105                 :            :     {
    1106         [ #  # ]:          0 :         if ( nSVEvent == EVENT_KEYINPUT )
    1107                 :            :         {
    1108                 :          0 :             pChild->ImplGetWindowImpl()->mbKeyInput = sal_False;
    1109         [ #  # ]:          0 :             pChild->KeyInput( aKeyEvt );
    1110                 :            :         }
    1111                 :            :         else
    1112                 :            :         {
    1113                 :          0 :             pChild->ImplGetWindowImpl()->mbKeyUp = sal_False;
    1114         [ #  # ]:          0 :             pChild->KeyUp( aKeyEvt );
    1115                 :            :         }
    1116                 :            :         // #82968#
    1117         [ #  # ]:          0 :         if( !aDelData.IsDead() )
    1118         [ #  # ]:          0 :             aNotifyEvt.GetWindow()->ImplNotifyKeyMouseCommandEventListeners( aNotifyEvt );
    1119                 :            :     }
    1120                 :            : 
    1121         [ #  # ]:          0 :     if ( aDelData.IsDead() )
    1122                 :          0 :         return 1;
    1123                 :            : 
    1124         [ #  # ]:          0 :     pChild->ImplRemoveDel( &aDelData );
    1125                 :            : 
    1126         [ #  # ]:          0 :     if ( nSVEvent == EVENT_KEYINPUT )
    1127                 :            :     {
    1128 [ #  # ][ #  # ]:          0 :         if ( !bKeyPreNotify && pChild->ImplGetWindowImpl()->mbKeyInput )
                 [ #  # ]
    1129                 :            :         {
    1130                 :          0 :             sal_uInt16 nCode = aKeyCode.GetCode();
    1131                 :            : 
    1132                 :            :             // #101999# is focus in or below toolbox
    1133                 :          0 :             sal_Bool bToolboxFocus=sal_False;
    1134 [ #  # ][ #  # ]:          0 :             if( (nCode == KEY_F1) && aKeyCode.IsShift() )
                 [ #  # ]
    1135                 :            :             {
    1136                 :          0 :                 Window *pWin = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
    1137         [ #  # ]:          0 :                 while( pWin )
    1138                 :            :                 {
    1139         [ #  # ]:          0 :                     if( pWin->ImplGetWindowImpl()->mbToolBox )
    1140                 :            :                     {
    1141                 :          0 :                         bToolboxFocus = sal_True;
    1142                 :          0 :                         break;
    1143                 :            :                     }
    1144                 :            :                     else
    1145         [ #  # ]:          0 :                         pWin = pWin->GetParent();
    1146                 :            :                 }
    1147                 :            :             }
    1148                 :            : 
    1149                 :            :             // ContextMenu
    1150 [ #  # ][ #  # ]:          0 :             if ( (nCode == KEY_CONTEXTMENU) || ((nCode == KEY_F10) && aKeyCode.IsShift() && !aKeyCode.IsMod1() && !aKeyCode.IsMod2() ) )
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    1151         [ #  # ]:          0 :                 nRet = !ImplCallCommand( pChild, COMMAND_CONTEXTMENU, NULL, sal_False );
    1152 [ #  # ][ #  # ]:          0 :             else if ( ( (nCode == KEY_F2) && aKeyCode.IsShift() ) || ( (nCode == KEY_F1) && aKeyCode.IsMod1() ) ||
         [ #  # ][ #  # ]
           [ #  #  #  # ]
         [ #  # ][ #  # ]
    1153                 :            :                 // #101999# no active help when focus in toolbox, simulate BallonHelp instead
    1154                 :          0 :                 ( (nCode == KEY_F1) && aKeyCode.IsShift() && bToolboxFocus ) )
    1155                 :            :             {
    1156                 :            :                 // TipHelp via Keyboard (Shift-F2 or Ctrl-F1)
    1157                 :            :                 // simulate mouseposition at center of window
    1158                 :            : 
    1159         [ #  # ]:          0 :                 Size aSize = pChild->GetOutputSize();
    1160                 :          0 :                 Point aPos = Point( aSize.getWidth()/2, aSize.getHeight()/2 );
    1161         [ #  # ]:          0 :                 aPos = pChild->OutputToScreenPixel( aPos );
    1162                 :            : 
    1163         [ #  # ]:          0 :                 HelpEvent aHelpEvent( aPos, HELPMODE_BALLOON );
    1164                 :          0 :                 aHelpEvent.SetKeyboardActivated( sal_True );
    1165                 :          0 :                 pSVData->maHelpData.mbSetKeyboardHelp = sal_True;
    1166         [ #  # ]:          0 :                 pChild->RequestHelp( aHelpEvent );
    1167                 :          0 :                 pSVData->maHelpData.mbSetKeyboardHelp = sal_False;
    1168                 :            :             }
    1169 [ #  # ][ #  # ]:          0 :             else if ( (nCode == KEY_F1) || (nCode == KEY_HELP) )
    1170                 :            :             {
    1171         [ #  # ]:          0 :                 if ( !aKeyCode.GetModifier() )
    1172                 :            :                 {
    1173         [ #  # ]:          0 :                     if ( pSVData->maHelpData.mbContextHelp )
    1174                 :            :                     {
    1175 [ #  # ][ #  # ]:          0 :                         Point       aMousePos = pChild->OutputToScreenPixel( pChild->GetPointerPosPixel() );
    1176         [ #  # ]:          0 :                         HelpEvent   aHelpEvent( aMousePos, HELPMODE_CONTEXT );
    1177         [ #  # ]:          0 :                         pChild->RequestHelp( aHelpEvent );
    1178                 :            :                     }
    1179                 :            :                     else
    1180                 :          0 :                         nRet = 0;
    1181                 :            :                 }
    1182         [ #  # ]:          0 :                 else if ( aKeyCode.IsShift() )
    1183                 :            :                 {
    1184         [ #  # ]:          0 :                     if ( pSVData->maHelpData.mbExtHelp )
    1185         [ #  # ]:          0 :                         Help::StartExtHelp();
    1186                 :            :                     else
    1187                 :          0 :                         nRet = 0;
    1188                 :          0 :                 }
    1189                 :            :             }
    1190                 :            :             else
    1191                 :            :             {
    1192 [ #  # ][ #  # ]:          0 :                 if ( ImplCallHotKey( aKeyCode ) )
    1193                 :          0 :                     nRet = 1;
    1194                 :            :                 else
    1195                 :          0 :                     nRet = 0;
    1196                 :            :             }
    1197                 :            :         }
    1198                 :            :     }
    1199                 :            :     else
    1200                 :            :     {
    1201 [ #  # ][ #  # ]:          0 :         if ( !bKeyPreNotify && pChild->ImplGetWindowImpl()->mbKeyUp )
                 [ #  # ]
    1202                 :          0 :             nRet = 0;
    1203                 :            :     }
    1204                 :            : 
    1205                 :            :     // #105591# send keyinput to parent if we are a floating window and the key was not pocessed yet
    1206 [ #  # ][ #  # ]:          0 :     if( !nRet && pWindow->ImplGetWindowImpl()->mbFloatWin && pWindow->GetParent() && (pWindow->ImplGetWindowImpl()->mpFrame != pWindow->GetParent()->ImplGetWindowImpl()->mpFrame) )
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    1207                 :            :     {
    1208         [ #  # ]:          0 :         pChild = pWindow->GetParent();
    1209                 :            : 
    1210                 :            :         // call handler
    1211         [ #  # ]:          0 :         ImplDelData aChildDelData( pChild );
    1212         [ #  # ]:          0 :         KeyEvent    aKEvt( (xub_Unicode)nCharCode, aKeyCode, nRepeat );
    1213         [ #  # ]:          0 :         NotifyEvent aNEvt( nSVEvent, pChild, &aKEvt );
    1214         [ #  # ]:          0 :         sal_Bool        bPreNotify = (ImplCallPreNotify( aNEvt ) != 0);
    1215         [ #  # ]:          0 :         if ( aChildDelData.IsDead() )
    1216                 :          0 :             return 1;
    1217                 :            : 
    1218         [ #  # ]:          0 :         if ( !bPreNotify )
    1219                 :            :         {
    1220         [ #  # ]:          0 :             if ( nSVEvent == EVENT_KEYINPUT )
    1221                 :            :             {
    1222                 :          0 :                 pChild->ImplGetWindowImpl()->mbKeyInput = sal_False;
    1223         [ #  # ]:          0 :                 pChild->KeyInput( aKEvt );
    1224                 :            :             }
    1225                 :            :             else
    1226                 :            :             {
    1227                 :          0 :                 pChild->ImplGetWindowImpl()->mbKeyUp = sal_False;
    1228         [ #  # ]:          0 :                 pChild->KeyUp( aKEvt );
    1229                 :            :             }
    1230                 :            :             // #82968#
    1231         [ #  # ]:          0 :             if( !aChildDelData.IsDead() )
    1232         [ #  # ]:          0 :                 aNEvt.GetWindow()->ImplNotifyKeyMouseCommandEventListeners( aNEvt );
    1233         [ #  # ]:          0 :             if ( aChildDelData.IsDead() )
    1234                 :          0 :                 return 1;
    1235                 :            :         }
    1236                 :            : 
    1237 [ #  # ][ #  # ]:          0 :         if( bPreNotify || !pChild->ImplGetWindowImpl()->mbKeyInput )
                 [ #  # ]
    1238 [ #  # ][ #  # ]:          0 :             nRet = 1;
    1239                 :            :     }
    1240                 :            : 
    1241         [ #  # ]:          0 :     return nRet;
    1242                 :            : }
    1243                 :            : 
    1244                 :            : // -----------------------------------------------------------------------
    1245                 :            : 
    1246                 :          0 : static long ImplHandleExtTextInput( Window* pWindow,
    1247                 :            :                                     const XubString& rText,
    1248                 :            :                                     const sal_uInt16* pTextAttr,
    1249                 :            :                                     sal_uLong nCursorPos, sal_uInt16 nCursorFlags )
    1250                 :            : {
    1251         [ #  # ]:          0 :     ImplSVData* pSVData = ImplGetSVData();
    1252                 :          0 :     Window*     pChild = NULL;
    1253                 :            : 
    1254                 :          0 :     int nTries = 200;
    1255         [ #  # ]:          0 :     while( nTries-- )
    1256                 :            :     {
    1257                 :          0 :         pChild = pSVData->maWinData.mpExtTextInputWin;
    1258         [ #  # ]:          0 :         if ( !pChild )
    1259                 :            :         {
    1260         [ #  # ]:          0 :             pChild = ImplGetKeyInputWindow( pWindow );
    1261         [ #  # ]:          0 :             if ( !pChild )
    1262                 :          0 :                 return 0;
    1263                 :            :         }
    1264         [ #  # ]:          0 :         if( !pChild->ImplGetWindowImpl()->mpFrameData->mnFocusId )
    1265                 :          0 :             break;
    1266         [ #  # ]:          0 :         Application::Yield();
    1267                 :            :     }
    1268                 :            : 
    1269                 :            :     // If it is the first ExtTextInput call, we inform the information
    1270                 :            :     // and allocate the data, which we must store in this mode
    1271         [ #  # ]:          0 :     ImplWinData* pWinData = pChild->ImplGetWinData();
    1272         [ #  # ]:          0 :     if ( !pChild->ImplGetWindowImpl()->mbExtTextInput )
    1273                 :            :     {
    1274                 :          0 :         pChild->ImplGetWindowImpl()->mbExtTextInput = sal_True;
    1275         [ #  # ]:          0 :         if ( !pWinData->mpExtOldText )
    1276 [ #  # ][ #  # ]:          0 :             pWinData->mpExtOldText = new UniString;
    1277                 :            :         else
    1278         [ #  # ]:          0 :             pWinData->mpExtOldText->Erase();
    1279         [ #  # ]:          0 :         if ( pWinData->mpExtOldAttrAry )
    1280                 :            :         {
    1281         [ #  # ]:          0 :             delete [] pWinData->mpExtOldAttrAry;
    1282                 :          0 :             pWinData->mpExtOldAttrAry = NULL;
    1283                 :            :         }
    1284                 :          0 :         pSVData->maWinData.mpExtTextInputWin = pChild;
    1285         [ #  # ]:          0 :         ImplCallCommand( pChild, COMMAND_STARTEXTTEXTINPUT );
    1286                 :            :     }
    1287                 :            : 
    1288                 :            :     // be aware of being recursively called in StartExtTextInput
    1289         [ #  # ]:          0 :     if ( !pChild->ImplGetWindowImpl()->mbExtTextInput )
    1290                 :          0 :         return 0;
    1291                 :            : 
    1292                 :            :     // Test for changes
    1293                 :          0 :     sal_Bool        bOnlyCursor = sal_False;
    1294                 :          0 :     xub_StrLen  nMinLen = Min( pWinData->mpExtOldText->Len(), rText.Len() );
    1295                 :          0 :     xub_StrLen  nDeltaStart = 0;
    1296         [ #  # ]:          0 :     while ( nDeltaStart < nMinLen )
    1297                 :            :     {
    1298         [ #  # ]:          0 :         if ( pWinData->mpExtOldText->GetChar( nDeltaStart ) != rText.GetChar( nDeltaStart ) )
    1299                 :          0 :             break;
    1300                 :          0 :         nDeltaStart++;
    1301                 :            :     }
    1302 [ #  # ][ #  # ]:          0 :     if ( pWinData->mpExtOldAttrAry || pTextAttr )
    1303                 :            :     {
    1304 [ #  # ][ #  # ]:          0 :         if ( !pWinData->mpExtOldAttrAry || !pTextAttr )
    1305                 :          0 :             nDeltaStart = 0;
    1306                 :            :         else
    1307                 :            :         {
    1308                 :          0 :             xub_StrLen i = 0;
    1309         [ #  # ]:          0 :             while ( i < nDeltaStart )
    1310                 :            :             {
    1311         [ #  # ]:          0 :                 if ( pWinData->mpExtOldAttrAry[i] != pTextAttr[i] )
    1312                 :            :                 {
    1313                 :          0 :                     nDeltaStart = i;
    1314                 :          0 :                     break;
    1315                 :            :                 }
    1316                 :          0 :                 i++;
    1317                 :            :             }
    1318                 :            :         }
    1319                 :            :     }
    1320   [ #  #  #  # ]:          0 :     if ( (nDeltaStart >= nMinLen) &&
                 [ #  # ]
    1321                 :          0 :          (pWinData->mpExtOldText->Len() == rText.Len()) )
    1322                 :          0 :         bOnlyCursor = sal_True;
    1323                 :            : 
    1324                 :            :     // Call Event and store the information
    1325                 :            :     CommandExtTextInputData aData( rText, pTextAttr,
    1326                 :            :                                    (xub_StrLen)nCursorPos, nCursorFlags,
    1327                 :          0 :                                    nDeltaStart, pWinData->mpExtOldText->Len(),
    1328         [ #  # ]:          0 :                                    bOnlyCursor );
    1329         [ #  # ]:          0 :     *pWinData->mpExtOldText = rText;
    1330         [ #  # ]:          0 :     if ( pWinData->mpExtOldAttrAry )
    1331                 :            :     {
    1332         [ #  # ]:          0 :         delete [] pWinData->mpExtOldAttrAry;
    1333                 :          0 :         pWinData->mpExtOldAttrAry = NULL;
    1334                 :            :     }
    1335         [ #  # ]:          0 :     if ( pTextAttr )
    1336                 :            :     {
    1337         [ #  # ]:          0 :         pWinData->mpExtOldAttrAry = new sal_uInt16[rText.Len()];
    1338                 :          0 :         memcpy( pWinData->mpExtOldAttrAry, pTextAttr, rText.Len()*sizeof( sal_uInt16 ) );
    1339                 :            :     }
    1340 [ #  # ][ #  # ]:          0 :     return !ImplCallCommand( pChild, COMMAND_EXTTEXTINPUT, &aData );
    1341                 :            : }
    1342                 :            : 
    1343                 :            : // -----------------------------------------------------------------------
    1344                 :            : 
    1345                 :          0 : static long ImplHandleEndExtTextInput( Window* /* pWindow */ )
    1346                 :            : {
    1347                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
    1348                 :          0 :     Window*     pChild = pSVData->maWinData.mpExtTextInputWin;
    1349                 :          0 :     long        nRet = 0;
    1350                 :            : 
    1351         [ #  # ]:          0 :     if ( pChild )
    1352                 :            :     {
    1353                 :          0 :         pChild->ImplGetWindowImpl()->mbExtTextInput = sal_False;
    1354                 :          0 :         pSVData->maWinData.mpExtTextInputWin = NULL;
    1355                 :          0 :         ImplWinData* pWinData = pChild->ImplGetWinData();
    1356         [ #  # ]:          0 :         if ( pWinData->mpExtOldText )
    1357                 :            :         {
    1358         [ #  # ]:          0 :             delete pWinData->mpExtOldText;
    1359                 :          0 :             pWinData->mpExtOldText = NULL;
    1360                 :            :         }
    1361         [ #  # ]:          0 :         if ( pWinData->mpExtOldAttrAry )
    1362                 :            :         {
    1363         [ #  # ]:          0 :             delete [] pWinData->mpExtOldAttrAry;
    1364                 :          0 :             pWinData->mpExtOldAttrAry = NULL;
    1365                 :            :         }
    1366                 :          0 :         nRet = !ImplCallCommand( pChild, COMMAND_ENDEXTTEXTINPUT );
    1367                 :            :     }
    1368                 :            : 
    1369                 :          0 :     return nRet;
    1370                 :            : }
    1371                 :            : 
    1372                 :            : // -----------------------------------------------------------------------
    1373                 :            : 
    1374                 :          0 : static void ImplHandleExtTextInputPos( Window* pWindow,
    1375                 :            :                                        Rectangle& rRect, long& rInputWidth,
    1376                 :            :                                        bool * pVertical )
    1377                 :            : {
    1378                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
    1379                 :          0 :     Window*     pChild = pSVData->maWinData.mpExtTextInputWin;
    1380                 :            : 
    1381         [ #  # ]:          0 :     if ( !pChild )
    1382                 :          0 :         pChild = ImplGetKeyInputWindow( pWindow );
    1383                 :            :     else
    1384                 :            :     {
    1385                 :            :         // Test, if the Window is related to the frame
    1386         [ #  # ]:          0 :         if ( !pWindow->ImplIsWindowOrChild( pChild ) )
    1387                 :          0 :             pChild = ImplGetKeyInputWindow( pWindow );
    1388                 :            :     }
    1389                 :            : 
    1390         [ #  # ]:          0 :     if ( pChild )
    1391                 :            :     {
    1392                 :          0 :         ImplCallCommand( pChild, COMMAND_CURSORPOS );
    1393                 :          0 :         const Rectangle* pRect = pChild->GetCursorRect();
    1394         [ #  # ]:          0 :         if ( pRect )
    1395                 :          0 :             rRect = pChild->ImplLogicToDevicePixel( *pRect );
    1396                 :            :         else
    1397                 :            :         {
    1398                 :          0 :             Cursor* pCursor = pChild->GetCursor();
    1399         [ #  # ]:          0 :             if ( pCursor )
    1400                 :            :             {
    1401         [ #  # ]:          0 :                 Point aPos = pChild->ImplLogicToDevicePixel( pCursor->GetPos() );
    1402         [ #  # ]:          0 :                 Size aSize = pChild->LogicToPixel( pCursor->GetSize() );
    1403         [ #  # ]:          0 :                 if ( !aSize.Width() )
    1404                 :          0 :                     aSize.Width() = pChild->GetSettings().GetStyleSettings().GetCursorSize();
    1405         [ #  # ]:          0 :                 rRect = Rectangle( aPos, aSize );
    1406                 :            :             }
    1407                 :            :             else
    1408         [ #  # ]:          0 :                 rRect = Rectangle( Point( pChild->GetOutOffXPixel(), pChild->GetOutOffYPixel() ), Size() );
    1409                 :            :         }
    1410                 :          0 :         rInputWidth = pChild->ImplLogicWidthToDevicePixel( pChild->GetCursorExtTextInputWidth() );
    1411         [ #  # ]:          0 :         if ( !rInputWidth )
    1412                 :          0 :             rInputWidth = rRect.GetWidth();
    1413                 :            :     }
    1414         [ #  # ]:          0 :     if (pVertical != 0)
    1415                 :            :         *pVertical
    1416 [ #  # ][ #  # ]:          0 :             = pChild != 0 && pChild->GetInputContext().GetFont().IsVertical();
    1417                 :          0 : }
    1418                 :            : 
    1419                 :            : // -----------------------------------------------------------------------
    1420                 :            : 
    1421                 :          0 : static long ImplHandleInputContextChange( Window* pWindow, LanguageType eNewLang )
    1422                 :            : {
    1423         [ #  # ]:          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    1424         [ #  # ]:          0 :     CommandInputContextData aData( eNewLang );
    1425         [ #  # ]:          0 :     return !ImplCallCommand( pChild, COMMAND_INPUTCONTEXTCHANGE, &aData );
    1426                 :            : }
    1427                 :            : 
    1428                 :            : // -----------------------------------------------------------------------
    1429                 :            : 
    1430                 :          0 : static sal_Bool ImplCallWheelCommand( Window* pWindow, const Point& rPos,
    1431                 :            :                                   const CommandWheelData* pWheelData )
    1432                 :            : {
    1433         [ #  # ]:          0 :     Point               aCmdMousePos = pWindow->ImplFrameToOutput( rPos );
    1434         [ #  # ]:          0 :     CommandEvent        aCEvt( aCmdMousePos, COMMAND_WHEEL, sal_True, pWheelData );
    1435         [ #  # ]:          0 :     NotifyEvent         aNCmdEvt( EVENT_COMMAND, pWindow, &aCEvt );
    1436         [ #  # ]:          0 :     ImplDelData         aDelData( pWindow );
    1437         [ #  # ]:          0 :     sal_Bool                bPreNotify = (ImplCallPreNotify( aNCmdEvt ) != 0);
    1438         [ #  # ]:          0 :     if ( aDelData.IsDead() )
    1439                 :          0 :         return sal_False;
    1440         [ #  # ]:          0 :     if ( !bPreNotify )
    1441                 :            :     {
    1442                 :          0 :         pWindow->ImplGetWindowImpl()->mbCommand = sal_False;
    1443         [ #  # ]:          0 :         pWindow->Command( aCEvt );
    1444         [ #  # ]:          0 :         if ( aDelData.IsDead() )
    1445                 :          0 :             return sal_False;
    1446         [ #  # ]:          0 :         if ( pWindow->ImplGetWindowImpl()->mbCommand )
    1447                 :          0 :             return sal_True;
    1448                 :            :     }
    1449         [ #  # ]:          0 :     return sal_False;
    1450                 :            : }
    1451                 :            : 
    1452                 :            : // -----------------------------------------------------------------------
    1453                 :            : 
    1454                 :          0 : static long ImplHandleWheelEvent( Window* pWindow, const SalWheelMouseEvent& rEvt )
    1455                 :            : {
    1456         [ #  # ]:          0 :     ImplDelData aDogTag( pWindow );
    1457                 :            : 
    1458         [ #  # ]:          0 :     ImplSVData* pSVData = ImplGetSVData();
    1459         [ #  # ]:          0 :     if ( pSVData->maWinData.mpAutoScrollWin )
    1460         [ #  # ]:          0 :         pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
    1461         [ #  # ]:          0 :     if ( pSVData->maHelpData.mpHelpWin )
    1462         [ #  # ]:          0 :         ImplDestroyHelpWindow( true );
    1463         [ #  # ]:          0 :     if( aDogTag.IsDead() )
    1464                 :          0 :         return 0;
    1465                 :            : 
    1466                 :            :     sal_uInt16 nMode;
    1467                 :          0 :     sal_uInt16 nCode = rEvt.mnCode;
    1468                 :          0 :     bool bHorz = rEvt.mbHorz;
    1469                 :          0 :     bool bPixel = rEvt.mbDeltaIsPixel;
    1470         [ #  # ]:          0 :     if ( nCode & KEY_MOD1 )
    1471                 :          0 :         nMode = COMMAND_WHEEL_ZOOM;
    1472         [ #  # ]:          0 :     else if ( nCode & KEY_MOD2 )
    1473                 :          0 :         nMode = COMMAND_WHEEL_DATAZOOM;
    1474                 :            :     else
    1475                 :            :     {
    1476                 :          0 :         nMode = COMMAND_WHEEL_SCROLL;
    1477                 :            :         // #i85450# interpret shift-wheel as horizontal wheel action
    1478         [ #  # ]:          0 :         if( (nCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_MOD3)) == KEY_SHIFT )
    1479                 :          0 :             bHorz = true;
    1480                 :            :     }
    1481                 :            : 
    1482         [ #  # ]:          0 :     CommandWheelData    aWheelData( rEvt.mnDelta, rEvt.mnNotchDelta, rEvt.mnScrollLines, nMode, nCode, bHorz, bPixel );
    1483                 :          0 :     Point               aMousePos( rEvt.mnX, rEvt.mnY );
    1484                 :          0 :     sal_Bool                bRet = sal_True;
    1485                 :            : 
    1486                 :            :     // first check any floating window ( eg. drop down listboxes)
    1487                 :          0 :     bool bIsFloat = false;
    1488                 :          0 :     Window *pMouseWindow = NULL;
    1489 [ #  # ][ #  # ]:          0 :     if ( pSVData->maWinData.mpFirstFloat && !pSVData->maWinData.mpCaptureWin &&
         [ #  # ][ #  # ]
    1490         [ #  # ]:          0 :          !pSVData->maWinData.mpFirstFloat->ImplIsFloatPopupModeWindow( pWindow ) )
    1491                 :            :     {
    1492                 :          0 :         sal_uInt16 nHitTest = IMPL_FLOATWIN_HITTEST_OUTSIDE;
    1493         [ #  # ]:          0 :         pMouseWindow = pSVData->maWinData.mpFirstFloat->ImplFloatHitTest( pWindow, aMousePos, nHitTest );
    1494                 :            :     }
    1495                 :            :     // then try the window directly beneath the mouse
    1496         [ #  # ]:          0 :     if( !pMouseWindow )
    1497         [ #  # ]:          0 :         pMouseWindow = pWindow->ImplFindWindow( aMousePos );
    1498                 :            :     else
    1499                 :            :     {
    1500                 :            :         // transform coordinates to float window frame coordinates
    1501                 :            :         pMouseWindow = pMouseWindow->ImplFindWindow(
    1502                 :            :                  pMouseWindow->OutputToScreenPixel(
    1503                 :            :                   pMouseWindow->AbsoluteScreenToOutputPixel(
    1504                 :            :                    pWindow->OutputToAbsoluteScreenPixel(
    1505 [ #  # ][ #  # ]:          0 :                     pWindow->ScreenToOutputPixel( aMousePos ) ) ) ) );
         [ #  # ][ #  # ]
                 [ #  # ]
    1506                 :          0 :         bIsFloat = true;
    1507                 :            :     }
    1508                 :            : 
    1509 [ #  # ][ #  # ]:          0 :     if ( pMouseWindow &&
         [ #  # ][ #  # ]
                 [ #  # ]
    1510 [ #  # ][ #  # ]:          0 :          pMouseWindow->IsEnabled() && pMouseWindow->IsInputEnabled() && ! pMouseWindow->IsInModalMode() )
                 [ #  # ]
    1511                 :            :     {
    1512                 :            :         // transform coordinates to float window frame coordinates
    1513                 :            :         Point aRelMousePos( pMouseWindow->OutputToScreenPixel(
    1514                 :            :                              pMouseWindow->AbsoluteScreenToOutputPixel(
    1515                 :            :                               pWindow->OutputToAbsoluteScreenPixel(
    1516 [ #  # ][ #  # ]:          0 :                                pWindow->ScreenToOutputPixel( aMousePos ) ) ) ) );
         [ #  # ][ #  # ]
    1517         [ #  # ]:          0 :         bRet = ImplCallWheelCommand( pMouseWindow, aRelMousePos, &aWheelData );
    1518                 :            :     }
    1519                 :            : 
    1520                 :            :     // if the commad was not handled try the focus window
    1521         [ #  # ]:          0 :     if ( bRet )
    1522                 :            :     {
    1523                 :          0 :         Window* pFocusWindow = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
    1524 [ #  # ][ #  # ]:          0 :         if ( pFocusWindow && (pFocusWindow != pMouseWindow) &&
                 [ #  # ]
    1525                 :            :              (pFocusWindow == pSVData->maWinData.mpFocusWin) )
    1526                 :            :         {
    1527                 :            :             // no wheel-messages to disabled windows
    1528 [ #  # ][ #  # ]:          0 :             if ( pFocusWindow->IsEnabled() && pFocusWindow->IsInputEnabled() && ! pFocusWindow->IsInModalMode() )
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    1529                 :            :             {
    1530                 :            :                 // transform coordinates to focus window frame coordinates
    1531                 :            :                 Point aRelMousePos( pFocusWindow->OutputToScreenPixel(
    1532                 :            :                                      pFocusWindow->AbsoluteScreenToOutputPixel(
    1533                 :            :                                       pWindow->OutputToAbsoluteScreenPixel(
    1534 [ #  # ][ #  # ]:          0 :                                        pWindow->ScreenToOutputPixel( aMousePos ) ) ) ) );
         [ #  # ][ #  # ]
    1535         [ #  # ]:          0 :                 bRet = ImplCallWheelCommand( pFocusWindow, aRelMousePos, &aWheelData );
    1536                 :            :             }
    1537                 :            :         }
    1538                 :            :     }
    1539                 :            : 
    1540                 :            :     // close floaters
    1541 [ #  # ][ #  # ]:          0 :     if( ! bIsFloat && pSVData->maWinData.mpFirstFloat )
    1542                 :            :     {
    1543         [ #  # ]:          0 :         FloatingWindow* pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
    1544         [ #  # ]:          0 :         if( pLastLevelFloat )
    1545                 :            :         {
    1546                 :          0 :             sal_uLong nPopupFlags = pLastLevelFloat->GetPopupModeFlags();
    1547         [ #  # ]:          0 :             if ( nPopupFlags & FLOATWIN_POPUPMODE_ALLMOUSEBUTTONCLOSE )
    1548                 :            :             {
    1549         [ #  # ]:          0 :                 pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
    1550                 :            :             }
    1551                 :            :         }
    1552                 :            :     }
    1553                 :            : 
    1554         [ #  # ]:          0 :     return !bRet;
    1555                 :            : }
    1556                 :            : 
    1557                 :            : // -----------------------------------------------------------------------
    1558                 :            : #define IMPL_PAINT_CHECKRTL         ((sal_uInt16)0x0020)
    1559                 :            : 
    1560                 :       1618 : static void ImplHandlePaint( Window* pWindow, const Rectangle& rBoundRect, bool bImmediateUpdate )
    1561                 :            : {
    1562                 :            :     // give up background save when sytem paints arrive
    1563                 :       1618 :     Window* pSaveBackWin = pWindow->ImplGetWindowImpl()->mpFrameData->mpFirstBackWin;
    1564         [ -  + ]:       1618 :     while ( pSaveBackWin )
    1565                 :            :     {
    1566                 :          0 :         Window* pNext = pSaveBackWin->ImplGetWindowImpl()->mpOverlapData->mpNextBackWin;
    1567                 :            :         Rectangle aRect( Point( pSaveBackWin->GetOutOffXPixel(), pSaveBackWin->GetOutOffYPixel() ),
    1568         [ #  # ]:          0 :                          Size( pSaveBackWin->GetOutputWidthPixel(), pSaveBackWin->GetOutputHeightPixel() ) );
    1569 [ #  # ][ #  # ]:          0 :         if ( aRect.IsOver( rBoundRect ) )
    1570         [ #  # ]:          0 :             pSaveBackWin->ImplDeleteOverlapBackground();
    1571                 :          0 :         pSaveBackWin = pNext;
    1572                 :            :     }
    1573                 :            : 
    1574                 :            :     // system paint events must be checked for re-mirroring
    1575                 :       1618 :     pWindow->ImplGetWindowImpl()->mnPaintFlags |= IMPL_PAINT_CHECKRTL;
    1576                 :            : 
    1577                 :            :     // trigger paint for all windows that live in the new paint region
    1578         [ +  - ]:       1618 :     Region aRegion( rBoundRect );
    1579         [ +  - ]:       1618 :     pWindow->ImplInvalidateOverlapFrameRegion( aRegion );
    1580         [ -  + ]:       1618 :     if( bImmediateUpdate )
    1581                 :            :     {
    1582                 :            :         // #i87663# trigger possible pending resize notifications
    1583                 :            :         // (GetSizePixel does that for us)
    1584         [ #  # ]:          0 :         pWindow->GetSizePixel();
    1585                 :            :         // force drawing inmmediately
    1586         [ #  # ]:          0 :         pWindow->Update();
    1587         [ +  - ]:       1618 :     }
    1588                 :       1618 : }
    1589                 :            : 
    1590                 :            : // -----------------------------------------------------------------------
    1591                 :            : 
    1592                 :       3749 : static void KillOwnPopups( Window* pWindow )
    1593                 :            : {
    1594                 :       3749 :     ImplSVData* pSVData = ImplGetSVData();
    1595                 :       3749 :     Window *pParent = pWindow->ImplGetWindowImpl()->mpFrameWindow;
    1596                 :       3749 :     Window *pChild = pSVData->maWinData.mpFirstFloat;
    1597 [ #  # ][ -  + ]:       3749 :     if ( pChild && pParent->ImplIsWindowOrChild( pChild, sal_True ) )
                 [ -  + ]
    1598                 :            :     {
    1599         [ #  # ]:          0 :         if ( !(pSVData->maWinData.mpFirstFloat->GetPopupModeFlags() & FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE) )
    1600                 :          0 :             pSVData->maWinData.mpFirstFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
    1601                 :            :     }
    1602                 :       3749 : }
    1603                 :            : 
    1604                 :            : // -----------------------------------------------------------------------
    1605                 :            : 
    1606                 :       8732 : void ImplHandleResize( Window* pWindow, long nNewWidth, long nNewHeight )
    1607                 :            : {
    1608         [ +  + ]:       8732 :     if( pWindow->GetStyle() & (WB_MOVEABLE|WB_SIZEABLE) )
    1609                 :            :     {
    1610                 :       3749 :         KillOwnPopups( pWindow );
    1611         [ +  - ]:       3749 :         if( pWindow->ImplGetWindow() != ImplGetSVData()->maHelpData.mpHelpWin )
    1612                 :       3749 :             ImplDestroyHelpWindow( true );
    1613                 :            :     }
    1614                 :            : 
    1615         [ +  + ]:       8847 :     if (
           [ -  +  +  + ]
                 [ +  + ]
    1616                 :            :          (nNewWidth > 0 && nNewHeight > 0) ||
    1617                 :        115 :          pWindow->ImplGetWindow()->ImplGetWindowImpl()->mbAllResize
    1618                 :            :        )
    1619                 :            :     {
    1620 [ +  + ][ +  + ]:       8630 :         if ( (nNewWidth != pWindow->GetOutputWidthPixel()) || (nNewHeight != pWindow->GetOutputHeightPixel()) )
                 [ +  + ]
    1621                 :            :         {
    1622                 :       6015 :             pWindow->mnOutWidth  = nNewWidth;
    1623                 :       6015 :             pWindow->mnOutHeight = nNewHeight;
    1624                 :       6015 :             pWindow->ImplGetWindowImpl()->mbWaitSystemResize = sal_False;
    1625         [ +  + ]:       6015 :             if ( pWindow->IsReallyVisible() )
    1626                 :         97 :                 pWindow->ImplSetClipFlag();
    1627 [ +  + ][ +  +  :      14261 :             if ( pWindow->IsVisible() || pWindow->ImplGetWindow()->ImplGetWindowImpl()->mbAllResize ||
             +  -  +  + ]
                 [ +  + ]
    1628                 :       8246 :                 ( pWindow->ImplGetWindowImpl()->mbFrame && pWindow->ImplGetWindowImpl()->mpClientWindow ) )   // propagate resize for system border windows
    1629                 :            :             {
    1630                 :       6013 :                 bool bStartTimer = true;
    1631                 :            :                 // use resize buffering for user resizes
    1632                 :            :                 // ownerdraw decorated windows and floating windows can be resized immediately (i.e. synchronously)
    1633 [ +  - ][ +  +  :       9517 :                 if( pWindow->ImplGetWindowImpl()->mbFrame && (pWindow->GetStyle() & WB_SIZEABLE)
             +  -  +  - ]
                 [ +  + ]
    1634                 :       1752 :                     && !(pWindow->GetStyle() & WB_OWNERDRAWDECORATION)  // synchronous resize for ownerdraw decorated windows (toolbars)
    1635                 :       1752 :                     && !pWindow->ImplGetWindowImpl()->mbFloatWin )             // synchronous resize for floating windows, #i43799#
    1636                 :            :                 {
    1637         [ +  - ]:       1752 :                     if( pWindow->ImplGetWindowImpl()->mpClientWindow )
    1638                 :            :                     {
    1639                 :            :                         // #i42750# presentation wants to be informed about resize
    1640                 :            :                         // as early as possible
    1641         [ -  + ]:       1752 :                         WorkWindow* pWorkWindow = dynamic_cast<WorkWindow*>(pWindow->ImplGetWindowImpl()->mpClientWindow);
    1642 [ +  - ][ -  + ]:       1752 :                         if( ! pWorkWindow || pWorkWindow->IsPresentationMode() )
                 [ -  + ]
    1643                 :          0 :                             bStartTimer = false;
    1644                 :            :                     }
    1645                 :            :                     else
    1646                 :            :                     {
    1647         [ #  # ]:          0 :                         WorkWindow* pWorkWindow = dynamic_cast<WorkWindow*>(pWindow);
    1648 [ #  # ][ #  # ]:          0 :                         if( ! pWorkWindow || pWorkWindow->IsPresentationMode() )
                 [ #  # ]
    1649                 :          0 :                             bStartTimer = false;
    1650                 :            :                     }
    1651                 :            :                 }
    1652                 :            :                 else
    1653                 :       4261 :                     bStartTimer = false;
    1654                 :            : 
    1655         [ +  + ]:       6013 :                 if( bStartTimer )
    1656                 :       1752 :                     pWindow->ImplGetWindowImpl()->mpFrameData->maResizeTimer.Start();
    1657                 :            :                 else
    1658                 :       4261 :                     pWindow->ImplCallResize(); // otherwise menus cannot be positioned
    1659                 :            :             }
    1660                 :            :             else
    1661                 :          2 :                 pWindow->ImplGetWindowImpl()->mbCallResize = sal_True;
    1662                 :            :         }
    1663                 :            :     }
    1664                 :            : 
    1665                 :       8732 :     pWindow->ImplGetWindowImpl()->mpFrameData->mbNeedSysWindow = (nNewWidth < IMPL_MIN_NEEDSYSWIN) ||
    1666 [ +  + ][ +  + ]:       8732 :                                             (nNewHeight < IMPL_MIN_NEEDSYSWIN);
    1667 [ +  + ][ -  + ]:       8732 :     sal_Bool bMinimized = (nNewWidth <= 0) || (nNewHeight <= 0);
    1668         [ +  + ]:       8732 :     if( bMinimized != pWindow->ImplGetWindowImpl()->mpFrameData->mbMinimized )
    1669                 :        157 :         pWindow->ImplGetWindowImpl()->mpFrameWindow->ImplNotifyIconifiedState( bMinimized );
    1670                 :       8732 :     pWindow->ImplGetWindowImpl()->mpFrameData->mbMinimized = bMinimized;
    1671                 :       8732 : }
    1672                 :            : 
    1673                 :            : // -----------------------------------------------------------------------
    1674                 :            : 
    1675                 :          0 : static void ImplHandleMove( Window* pWindow )
    1676                 :            : {
    1677 [ #  # ][ #  # ]:          0 :     if( pWindow->ImplGetWindowImpl()->mbFrame && pWindow->ImplIsFloatingWindow() && pWindow->IsReallyVisible() )
         [ #  # ][ #  # ]
    1678                 :            :     {
    1679                 :          0 :         static_cast<FloatingWindow*>(pWindow)->EndPopupMode( FLOATWIN_POPUPMODEEND_TEAROFF );
    1680                 :          0 :         pWindow->ImplCallMove();
    1681                 :            :     }
    1682                 :            : 
    1683         [ #  # ]:          0 :     if( pWindow->GetStyle() & (WB_MOVEABLE|WB_SIZEABLE) )
    1684                 :            :     {
    1685                 :          0 :         KillOwnPopups( pWindow );
    1686         [ #  # ]:          0 :         if( pWindow->ImplGetWindow() != ImplGetSVData()->maHelpData.mpHelpWin )
    1687                 :          0 :             ImplDestroyHelpWindow( true );
    1688                 :            :     }
    1689                 :            : 
    1690         [ #  # ]:          0 :     if ( pWindow->IsVisible() )
    1691                 :          0 :         pWindow->ImplCallMove();
    1692                 :            :     else
    1693                 :          0 :         pWindow->ImplGetWindowImpl()->mbCallMove = sal_True; // make sure the framepos will be updated on the next Show()
    1694                 :            : 
    1695 [ #  # ][ #  # ]:          0 :     if ( pWindow->ImplGetWindowImpl()->mbFrame && pWindow->ImplGetWindowImpl()->mpClientWindow )
                 [ #  # ]
    1696                 :          0 :         pWindow->ImplGetWindowImpl()->mpClientWindow->ImplCallMove();   // notify client to update geometry
    1697                 :            : 
    1698                 :          0 : }
    1699                 :            : 
    1700                 :            : // -----------------------------------------------------------------------
    1701                 :            : 
    1702                 :          0 : static void ImplHandleMoveResize( Window* pWindow, long nNewWidth, long nNewHeight )
    1703                 :            : {
    1704                 :          0 :     ImplHandleMove( pWindow );
    1705                 :          0 :     ImplHandleResize( pWindow, nNewWidth, nNewHeight );
    1706                 :          0 : }
    1707                 :            : 
    1708                 :            : // -----------------------------------------------------------------------
    1709                 :            : 
    1710                 :       1700 : static void ImplActivateFloatingWindows( Window* pWindow, sal_Bool bActive )
    1711                 :            : {
    1712                 :            :     // First check all overlapping windows
    1713                 :       1700 :     Window* pTempWindow = pWindow->ImplGetWindowImpl()->mpFirstOverlap;
    1714         [ -  + ]:       1700 :     while ( pTempWindow )
    1715                 :            :     {
    1716         [ #  # ]:          0 :         if ( !pTempWindow->GetActivateMode() )
    1717                 :            :         {
    1718   [ #  #  #  # ]:          0 :             if ( (pTempWindow->GetType() == WINDOW_BORDERWINDOW) &&
                 [ #  # ]
    1719                 :          0 :                  (pTempWindow->ImplGetWindow()->GetType() == WINDOW_FLOATINGWINDOW) )
    1720                 :          0 :                 ((ImplBorderWindow*)pTempWindow)->SetDisplayActive( bActive );
    1721                 :            :         }
    1722                 :            : 
    1723                 :          0 :         ImplActivateFloatingWindows( pTempWindow, bActive );
    1724                 :          0 :         pTempWindow = pTempWindow->ImplGetWindowImpl()->mpNext;
    1725                 :            :     }
    1726                 :       1700 : }
    1727                 :            : 
    1728                 :            : 
    1729                 :            : // -----------------------------------------------------------------------
    1730                 :            : 
    1731                 :       1739 : IMPL_LINK_NOARG(Window, ImplAsyncFocusHdl)
    1732                 :            : {
    1733                 :       1739 :     ImplGetWindowImpl()->mpFrameData->mnFocusId = 0;
    1734                 :            : 
    1735                 :            :     // If the status has been preserved, because we got back the focus
    1736                 :            :     // in the meantime, we do nothing
    1737 [ -  + ][ +  + ]:       1739 :     sal_Bool bHasFocus = ImplGetWindowImpl()->mpFrameData->mbHasFocus || ImplGetWindowImpl()->mpFrameData->mbSysObjFocus;
    1738                 :            : 
    1739                 :            :     // next execute the delayed functions
    1740         [ +  + ]:       1739 :     if ( bHasFocus )
    1741                 :            :     {
    1742                 :            :         // redraw all floating windows inactive
    1743         [ +  + ]:       1594 :         if ( ImplGetWindowImpl()->mpFrameData->mbStartFocusState != bHasFocus )
    1744                 :       1557 :             ImplActivateFloatingWindows( this, bHasFocus );
    1745                 :            : 
    1746         [ +  - ]:       1594 :         if ( ImplGetWindowImpl()->mpFrameData->mpFocusWin )
    1747                 :            :         {
    1748                 :       1594 :             sal_Bool bHandled = sal_False;
    1749   [ +  -  +  - ]:       3188 :             if ( ImplGetWindowImpl()->mpFrameData->mpFocusWin->IsInputEnabled() &&
                 [ +  - ]
    1750                 :       1594 :                  ! ImplGetWindowImpl()->mpFrameData->mpFocusWin->IsInModalMode() )
    1751                 :            :             {
    1752         [ +  - ]:       1594 :                 if ( ImplGetWindowImpl()->mpFrameData->mpFocusWin->IsEnabled() )
    1753                 :            :                 {
    1754                 :       1594 :                     ImplGetWindowImpl()->mpFrameData->mpFocusWin->GrabFocus();
    1755                 :       1594 :                     bHandled = sal_True;
    1756                 :            :                 }
    1757         [ #  # ]:          0 :                 else if( ImplGetWindowImpl()->mpFrameData->mpFocusWin->ImplHasDlgCtrl() )
    1758                 :            :                 {
    1759                 :            :                 // #109094# if the focus is restored to a disabled dialog control (was disabled meanwhile)
    1760                 :            :                 // try to move it to the next control
    1761                 :          0 :                     ImplGetWindowImpl()->mpFrameData->mpFocusWin->ImplDlgCtrlNextWindow();
    1762                 :          0 :                     bHandled = sal_True;
    1763                 :            :                 }
    1764                 :            :             }
    1765         [ -  + ]:       1594 :             if ( !bHandled )
    1766                 :            :             {
    1767                 :          0 :                 ImplSVData* pSVData = ImplGetSVData();
    1768                 :          0 :                 Window*     pTopLevelWindow = ImplGetWindowImpl()->mpFrameData->mpFocusWin->ImplGetFirstOverlapWindow();
    1769 [ #  # ][ #  # ]:          0 :                 if ( ( ! pTopLevelWindow->IsInputEnabled() || pTopLevelWindow->IsInModalMode() )
         [ #  # ][ #  # ]
    1770                 :            :                      && pSVData->maWinData.mpLastExecuteDlg )
    1771                 :          0 :                     pSVData->maWinData.mpLastExecuteDlg->ToTop( TOTOP_RESTOREWHENMIN | TOTOP_GRABFOCUSONLY);
    1772                 :            :                 else
    1773                 :          0 :                     pTopLevelWindow->GrabFocus();
    1774                 :            :             }
    1775                 :            :         }
    1776                 :            :         else
    1777                 :          0 :             GrabFocus();
    1778                 :            :     }
    1779                 :            :     else
    1780                 :            :     {
    1781                 :        145 :         Window* pFocusWin = ImplGetWindowImpl()->mpFrameData->mpFocusWin;
    1782         [ +  - ]:        145 :         if ( pFocusWin )
    1783                 :            :         {
    1784                 :        145 :             ImplSVData* pSVData = ImplGetSVData();
    1785                 :            : 
    1786         [ +  + ]:        145 :             if ( pSVData->maWinData.mpFocusWin == pFocusWin )
    1787                 :            :             {
    1788                 :            :                 // FocusWindow umsetzen
    1789                 :        143 :                 Window* pOverlapWindow = pFocusWin->ImplGetFirstOverlapWindow();
    1790                 :        143 :                 pOverlapWindow->ImplGetWindowImpl()->mpLastFocusWindow = pFocusWin;
    1791                 :        143 :                 pSVData->maWinData.mpFocusWin = NULL;
    1792                 :            : 
    1793         [ +  + ]:        143 :                 if ( pFocusWin->ImplGetWindowImpl()->mpCursor )
    1794                 :        113 :                     pFocusWin->ImplGetWindowImpl()->mpCursor->ImplHide();
    1795                 :            : 
    1796                 :            :                 // Deaktivate rufen
    1797                 :        143 :                 Window* pOldFocusWindow = pFocusWin;
    1798         [ +  - ]:        143 :                 if ( pOldFocusWindow )
    1799                 :            :                 {
    1800                 :        143 :                     Window* pOldOverlapWindow = pOldFocusWindow->ImplGetFirstOverlapWindow();
    1801                 :        143 :                     Window* pOldRealWindow = pOldOverlapWindow->ImplGetWindow();
    1802                 :            : 
    1803                 :        143 :                     pOldOverlapWindow->ImplGetWindowImpl()->mbActive = sal_False;
    1804                 :        143 :                     pOldOverlapWindow->Deactivate();
    1805         [ +  - ]:        143 :                     if ( pOldRealWindow != pOldOverlapWindow )
    1806                 :            :                     {
    1807                 :        143 :                         pOldRealWindow->ImplGetWindowImpl()->mbActive = sal_False;
    1808                 :        143 :                         pOldRealWindow->Deactivate();
    1809                 :            :                     }
    1810                 :            :                 }
    1811                 :            : 
    1812                 :            :                 // TrackingMode is ended in ImplHandleLoseFocus
    1813                 :            :                 // To avoid problems with the Unix IME
    1814                 :            :                 // pFocusWin->EndExtTextInput( EXTTEXTINPUT_END_COMPLETE );
    1815                 :            : 
    1816                 :            :                 // XXX #102010# hack for accessibility: do not close the menu,
    1817                 :            :                 // even after focus lost
    1818 [ +  + ][ +  - ]:        143 :                 static const char* pEnv = getenv("SAL_FLOATWIN_NOAPPFOCUSCLOSE");
    1819 [ -  + ][ #  # ]:        143 :                 if( !(pEnv && *pEnv) )
    1820                 :            :                 {
    1821         [ +  - ]:        143 :                     NotifyEvent aNEvt( EVENT_LOSEFOCUS, pFocusWin );
    1822 [ +  - ][ +  - ]:        143 :                     if ( !ImplCallPreNotify( aNEvt ) )
    1823         [ +  - ]:        143 :                         pFocusWin->LoseFocus();
    1824         [ +  - ]:        143 :                     pFocusWin->ImplCallDeactivateListeners( NULL );
    1825 [ +  - ][ +  - ]:        143 :                     GetpApp()->FocusChanged();
    1826                 :            :                 }
    1827                 :            :                 // XXX
    1828                 :            :             }
    1829                 :            :         }
    1830                 :            : 
    1831                 :            :         // Redraw all floating window inactive
    1832         [ +  + ]:        145 :         if ( ImplGetWindowImpl()->mpFrameData->mbStartFocusState != bHasFocus )
    1833                 :        143 :             ImplActivateFloatingWindows( this, bHasFocus );
    1834                 :            :     }
    1835                 :            : 
    1836                 :       1739 :     return 0;
    1837                 :            : }
    1838                 :            : 
    1839                 :            : // -----------------------------------------------------------------------
    1840                 :            : 
    1841                 :       4729 : static void ImplHandleGetFocus( Window* pWindow )
    1842                 :            : {
    1843                 :       4729 :     pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus = sal_True;
    1844                 :            : 
    1845                 :            : 
    1846                 :            :     // execute Focus-Events after a delay, such that SystemChildWindows
    1847                 :            :     // do not blink when they receive focus
    1848         [ +  + ]:       4729 :     if ( !pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId )
    1849                 :            :     {
    1850                 :       1566 :         pWindow->ImplGetWindowImpl()->mpFrameData->mbStartFocusState = !pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus;
    1851         [ +  - ]:       1566 :         Application::PostUserEvent( pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId, LINK( pWindow, Window, ImplAsyncFocusHdl ) );
    1852                 :       1566 :         Window* pFocusWin = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
    1853 [ +  + ][ +  + ]:       1566 :         if ( pFocusWin && pFocusWin->ImplGetWindowImpl()->mpCursor )
                 [ +  - ]
    1854                 :         11 :             pFocusWin->ImplGetWindowImpl()->mpCursor->ImplShow();
    1855                 :            :     }
    1856                 :       4729 : }
    1857                 :            : 
    1858                 :            : // -----------------------------------------------------------------------
    1859                 :            : 
    1860                 :       3308 : static void ImplHandleLoseFocus( Window* pWindow )
    1861                 :            : {
    1862                 :       3308 :     ImplSVData* pSVData = ImplGetSVData();
    1863                 :            : 
    1864                 :            :     // Abort the autoscroll if the frame loses focus
    1865         [ -  + ]:       3308 :     if ( pSVData->maWinData.mpAutoScrollWin )
    1866                 :          0 :         pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
    1867                 :            : 
    1868                 :            :     // Abort tracking if the frame loses focus
    1869         [ -  + ]:       3308 :     if ( pSVData->maWinData.mpTrackWin )
    1870                 :            :     {
    1871         [ #  # ]:          0 :         if ( pSVData->maWinData.mpTrackWin->ImplGetWindowImpl()->mpFrameWindow == pWindow )
    1872                 :          0 :             pSVData->maWinData.mpTrackWin->EndTracking( ENDTRACK_CANCEL );
    1873                 :            :     }
    1874                 :            : 
    1875                 :            :     // here we always terminate the popupmode, also when NOFOCUSCLOSE
    1876                 :            :     // is set, such that we do not show windows during the switch
    1877         [ -  + ]:       3308 :     if ( pSVData->maWinData.mpFirstFloat )
    1878                 :            :     {
    1879         [ #  # ]:          0 :         if ( !(pSVData->maWinData.mpFirstFloat->GetPopupModeFlags() & FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE) )
    1880                 :          0 :             pSVData->maWinData.mpFirstFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
    1881                 :            :     }
    1882                 :            : 
    1883                 :       3308 :     pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus = sal_False;
    1884                 :            : 
    1885                 :            :     // execute Focus-Events after a delay, such that SystemChildWindows
    1886                 :            :     // do not flicker when they receive focus
    1887         [ +  + ]:       3308 :     if ( !pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId )
    1888                 :            :     {
    1889                 :        180 :         pWindow->ImplGetWindowImpl()->mpFrameData->mbStartFocusState = !pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus;
    1890         [ +  - ]:        180 :         Application::PostUserEvent( pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId, LINK( pWindow, Window, ImplAsyncFocusHdl ) );
    1891                 :            :     }
    1892                 :            : 
    1893                 :       3308 :     Window* pFocusWin = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
    1894 [ +  + ][ +  + ]:       3308 :     if ( pFocusWin && pFocusWin->ImplGetWindowImpl()->mpCursor )
                 [ +  - ]
    1895                 :        175 :         pFocusWin->ImplGetWindowImpl()->mpCursor->ImplHide();
    1896                 :       3308 : }
    1897                 :            : 
    1898                 :            : // -----------------------------------------------------------------------
    1899                 :          0 : struct DelayedCloseEvent
    1900                 :            : {
    1901                 :            :     Window*         pWindow;
    1902                 :            :     ImplDelData     aDelData;
    1903                 :            : };
    1904                 :            : 
    1905                 :          0 : static long DelayedCloseEventLink( void* pCEvent, void* )
    1906                 :            : {
    1907                 :          0 :     DelayedCloseEvent* pEv = (DelayedCloseEvent*)pCEvent;
    1908                 :            : 
    1909         [ #  # ]:          0 :     if( ! pEv->aDelData.IsDead() )
    1910                 :            :     {
    1911                 :          0 :         pEv->pWindow->ImplRemoveDel( &pEv->aDelData );
    1912                 :            :         // dispatch to correct window type
    1913         [ #  # ]:          0 :         if( pEv->pWindow->IsSystemWindow() )
    1914                 :          0 :             ((SystemWindow*)pEv->pWindow)->Close();
    1915         [ #  # ]:          0 :         else if( pEv->pWindow->ImplIsDockingWindow() )
    1916                 :          0 :             ((DockingWindow*)pEv->pWindow)->Close();
    1917                 :            :     }
    1918         [ #  # ]:          0 :     delete pEv;
    1919                 :            : 
    1920                 :          0 :     return 0;
    1921                 :            : }
    1922                 :            : 
    1923                 :          0 : void ImplHandleClose( Window* pWindow )
    1924                 :            : {
    1925                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
    1926                 :            : 
    1927                 :          0 :     bool bWasPopup = false;
    1928         [ #  # ]:          0 :     if( pWindow->ImplIsFloatingWindow() &&
           [ #  #  #  # ]
    1929                 :          0 :         static_cast<FloatingWindow*>(pWindow)->ImplIsInPrivatePopupMode() )
    1930                 :            :     {
    1931                 :          0 :         bWasPopup = true;
    1932                 :            :     }
    1933                 :            : 
    1934                 :            :     // on Close stop all floating modes and end popups
    1935         [ #  # ]:          0 :     if ( pSVData->maWinData.mpFirstFloat )
    1936                 :            :     {
    1937                 :            :         FloatingWindow* pLastLevelFloat;
    1938                 :          0 :         pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
    1939                 :          0 :         pLastLevelFloat->EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL | FLOATWIN_POPUPMODEEND_CLOSEALL );
    1940                 :            :     }
    1941         [ #  # ]:          0 :     if ( pSVData->maHelpData.mbExtHelpMode )
    1942                 :          0 :         Help::EndExtHelp();
    1943         [ #  # ]:          0 :     if ( pSVData->maHelpData.mpHelpWin )
    1944                 :          0 :         ImplDestroyHelpWindow( false );
    1945                 :            :     // AutoScrollMode
    1946         [ #  # ]:          0 :     if ( pSVData->maWinData.mpAutoScrollWin )
    1947                 :          0 :         pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
    1948                 :            : 
    1949         [ #  # ]:          0 :     if ( pSVData->maWinData.mpTrackWin )
    1950                 :          0 :         pSVData->maWinData.mpTrackWin->EndTracking( ENDTRACK_CANCEL | ENDTRACK_KEY );
    1951                 :            : 
    1952         [ #  # ]:          0 :     if (bWasPopup)
    1953                 :          0 :         return;
    1954                 :            : 
    1955                 :          0 :     Window *pWin = pWindow->ImplGetWindow();
    1956         [ #  # ]:          0 :     SystemWindow* pSysWin = dynamic_cast<SystemWindow*>(pWin);
    1957         [ #  # ]:          0 :     if (pSysWin)
    1958                 :            :     {
    1959                 :            :         // See if the custom close handler is set.
    1960                 :          0 :         const Link& rLink = pSysWin->GetCloseHdl();
    1961         [ #  # ]:          0 :         if (rLink.IsSet())
    1962                 :            :         {
    1963                 :          0 :             rLink.Call(pSysWin);
    1964                 :          0 :             return;
    1965                 :            :         }
    1966                 :            :     }
    1967                 :            : 
    1968                 :            :     // check whether close is allowed
    1969 [ #  # ][ #  # ]:          0 :     if ( pWin->IsEnabled() && pWin->IsInputEnabled() && !pWin->IsInModalMode() )
         [ #  # ][ #  # ]
    1970                 :            :     {
    1971         [ #  # ]:          0 :         DelayedCloseEvent* pEv = new DelayedCloseEvent;
    1972                 :          0 :         pEv->pWindow = pWin;
    1973                 :          0 :         pWin->ImplAddDel( &pEv->aDelData );
    1974         [ #  # ]:          0 :         Application::PostUserEvent( Link( pEv, DelayedCloseEventLink ) );
    1975                 :            :     }
    1976                 :            : }
    1977                 :            : 
    1978                 :            : // -----------------------------------------------------------------------
    1979                 :            : 
    1980                 :      25115 : static void ImplHandleUserEvent( ImplSVEvent* pSVEvent )
    1981                 :            : {
    1982         [ +  - ]:      25115 :     if ( pSVEvent )
    1983                 :            :     {
    1984 [ +  + ][ +  - ]:      25115 :         if ( pSVEvent->mbCall && !pSVEvent->maDelData.IsDead() )
                 [ +  + ]
    1985                 :            :         {
    1986         [ +  + ]:      21046 :             if ( pSVEvent->mpWindow )
    1987                 :            :             {
    1988                 :         26 :                 pSVEvent->mpWindow->ImplRemoveDel( &(pSVEvent->maDelData) );
    1989         [ +  - ]:         26 :                 if ( pSVEvent->mpLink )
    1990                 :         26 :                     pSVEvent->mpLink->Call( pSVEvent->mpData );
    1991                 :            :                 else
    1992                 :          0 :                     pSVEvent->mpWindow->UserEvent( pSVEvent->mnEvent, pSVEvent->mpData );
    1993                 :            :             }
    1994                 :            :             else
    1995                 :            :             {
    1996         [ +  - ]:      21020 :                 if ( pSVEvent->mpLink )
    1997                 :      21020 :                     pSVEvent->mpLink->Call( pSVEvent->mpData );
    1998                 :            :                 else
    1999                 :          0 :                     GetpApp()->UserEvent( pSVEvent->mnEvent, pSVEvent->mpData );
    2000                 :            :             }
    2001                 :            :         }
    2002                 :            : 
    2003                 :      25115 :         delete pSVEvent->mpLink;
    2004         [ +  - ]:      25115 :         delete pSVEvent;
    2005                 :            :     }
    2006                 :      25115 : }
    2007                 :            : 
    2008                 :            : // =======================================================================
    2009                 :            : 
    2010                 :          0 : static sal_uInt16 ImplGetMouseMoveMode( SalMouseEvent* pEvent )
    2011                 :            : {
    2012                 :          0 :     sal_uInt16 nMode = 0;
    2013         [ #  # ]:          0 :     if ( !pEvent->mnCode )
    2014                 :          0 :         nMode |= MOUSE_SIMPLEMOVE;
    2015 [ #  # ][ #  # ]:          0 :     if ( (pEvent->mnCode & MOUSE_LEFT) && !(pEvent->mnCode & KEY_MOD1) )
    2016                 :          0 :         nMode |= MOUSE_DRAGMOVE;
    2017 [ #  # ][ #  # ]:          0 :     if ( (pEvent->mnCode & MOUSE_LEFT) && (pEvent->mnCode & KEY_MOD1) )
    2018                 :          0 :         nMode |= MOUSE_DRAGCOPY;
    2019                 :          0 :     return nMode;
    2020                 :            : }
    2021                 :            : 
    2022                 :            : // -----------------------------------------------------------------------
    2023                 :            : 
    2024                 :          0 : static sal_uInt16 ImplGetMouseButtonMode( SalMouseEvent* pEvent )
    2025                 :            : {
    2026                 :          0 :     sal_uInt16 nMode = 0;
    2027         [ #  # ]:          0 :     if ( pEvent->mnButton == MOUSE_LEFT )
    2028                 :          0 :         nMode |= MOUSE_SIMPLECLICK;
    2029 [ #  # ][ #  # ]:          0 :     if ( (pEvent->mnButton == MOUSE_LEFT) && !(pEvent->mnCode & (MOUSE_MIDDLE | MOUSE_RIGHT)) )
    2030                 :          0 :         nMode |= MOUSE_SELECT;
    2031 [ #  # ][ #  # ]:          0 :     if ( (pEvent->mnButton == MOUSE_LEFT) && (pEvent->mnCode & KEY_MOD1) &&
                 [ #  # ]
    2032                 :          0 :          !(pEvent->mnCode & (MOUSE_MIDDLE | MOUSE_RIGHT | KEY_SHIFT)) )
    2033                 :          0 :         nMode |= MOUSE_MULTISELECT;
    2034 [ #  # ][ #  # ]:          0 :     if ( (pEvent->mnButton == MOUSE_LEFT) && (pEvent->mnCode & KEY_SHIFT) &&
                 [ #  # ]
    2035                 :          0 :          !(pEvent->mnCode & (MOUSE_MIDDLE | MOUSE_RIGHT | KEY_MOD1)) )
    2036                 :          0 :         nMode |= MOUSE_RANGESELECT;
    2037                 :          0 :     return nMode;
    2038                 :            : }
    2039                 :            : 
    2040                 :            : // -----------------------------------------------------------------------
    2041                 :            : 
    2042                 :          0 : inline long ImplHandleSalMouseLeave( Window* pWindow, SalMouseEvent* pEvent )
    2043                 :            : {
    2044                 :            :     return ImplHandleMouseEvent( pWindow, EVENT_MOUSEMOVE, sal_True,
    2045                 :            :                                  pEvent->mnX, pEvent->mnY,
    2046                 :            :                                  pEvent->mnTime, pEvent->mnCode,
    2047                 :          0 :                                  ImplGetMouseMoveMode( pEvent ) );
    2048                 :            : }
    2049                 :            : 
    2050                 :            : // -----------------------------------------------------------------------
    2051                 :            : 
    2052                 :          0 : inline long ImplHandleSalMouseMove( Window* pWindow, SalMouseEvent* pEvent )
    2053                 :            : {
    2054                 :            :     return ImplHandleMouseEvent( pWindow, EVENT_MOUSEMOVE, sal_False,
    2055                 :            :                                  pEvent->mnX, pEvent->mnY,
    2056                 :            :                                  pEvent->mnTime, pEvent->mnCode,
    2057                 :          0 :                                  ImplGetMouseMoveMode( pEvent ) );
    2058                 :            : }
    2059                 :            : 
    2060                 :            : // -----------------------------------------------------------------------
    2061                 :            : 
    2062                 :          0 : inline long ImplHandleSalMouseButtonDown( Window* pWindow, SalMouseEvent* pEvent )
    2063                 :            : {
    2064                 :            :     return ImplHandleMouseEvent( pWindow, EVENT_MOUSEBUTTONDOWN, sal_False,
    2065                 :            :                                  pEvent->mnX, pEvent->mnY,
    2066                 :            :                                  pEvent->mnTime,
    2067                 :            : #ifdef MACOSX
    2068                 :            :                  pEvent->mnButton | (pEvent->mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_MOD3)),
    2069                 :            : #else
    2070                 :            :                                  pEvent->mnButton | (pEvent->mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)),
    2071                 :            : #endif
    2072                 :          0 :                                  ImplGetMouseButtonMode( pEvent ) );
    2073                 :            : }
    2074                 :            : 
    2075                 :            : // -----------------------------------------------------------------------
    2076                 :            : 
    2077                 :          0 : inline long ImplHandleSalMouseButtonUp( Window* pWindow, SalMouseEvent* pEvent )
    2078                 :            : {
    2079                 :            :     return ImplHandleMouseEvent( pWindow, EVENT_MOUSEBUTTONUP, sal_False,
    2080                 :            :                                  pEvent->mnX, pEvent->mnY,
    2081                 :            :                                  pEvent->mnTime,
    2082                 :            : #ifdef MACOSX
    2083                 :            :                  pEvent->mnButton | (pEvent->mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_MOD3)),
    2084                 :            : #else
    2085                 :            :                                  pEvent->mnButton | (pEvent->mnCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2)),
    2086                 :            : #endif
    2087                 :          0 :                                  ImplGetMouseButtonMode( pEvent ) );
    2088                 :            : }
    2089                 :            : 
    2090                 :            : // -----------------------------------------------------------------------
    2091                 :            : 
    2092                 :          0 : static long ImplHandleSalMouseActivate( Window* /*pWindow*/, SalMouseActivateEvent* /*pEvent*/ )
    2093                 :            : {
    2094                 :          0 :     return sal_False;
    2095                 :            : }
    2096                 :            : 
    2097                 :            : // -----------------------------------------------------------------------
    2098                 :            : 
    2099                 :          0 : static long ImplHandleMenuEvent( Window* pWindow, SalMenuEvent* pEvent, sal_uInt16 nEvent )
    2100                 :            : {
    2101                 :            :     // Find SystemWindow and its Menubar and let it dispatch the command
    2102                 :          0 :     long nRet = 0;
    2103                 :          0 :     Window *pWin = pWindow->ImplGetWindowImpl()->mpFirstChild;
    2104         [ #  # ]:          0 :     while ( pWin )
    2105                 :            :     {
    2106         [ #  # ]:          0 :         if ( pWin->ImplGetWindowImpl()->mbSysWin )
    2107                 :          0 :             break;
    2108                 :          0 :         pWin = pWin->ImplGetWindowImpl()->mpNext;
    2109                 :            :     }
    2110         [ #  # ]:          0 :     if( pWin )
    2111                 :            :     {
    2112                 :          0 :         MenuBar *pMenuBar = ((SystemWindow*) pWin)->GetMenuBar();
    2113         [ #  # ]:          0 :         if( pMenuBar )
    2114                 :            :         {
    2115   [ #  #  #  #  :          0 :             switch( nEvent )
                   #  # ]
    2116                 :            :             {
    2117                 :            :                 case SALEVENT_MENUACTIVATE:
    2118         [ #  # ]:          0 :                     nRet = pMenuBar->HandleMenuActivateEvent( (Menu*) pEvent->mpMenu ) ? 1 : 0;
    2119                 :          0 :                     break;
    2120                 :            :                 case SALEVENT_MENUDEACTIVATE:
    2121         [ #  # ]:          0 :                     nRet = pMenuBar->HandleMenuDeActivateEvent( (Menu*) pEvent->mpMenu ) ? 1 : 0;
    2122                 :          0 :                     break;
    2123                 :            :                 case SALEVENT_MENUHIGHLIGHT:
    2124         [ #  # ]:          0 :                     nRet = pMenuBar->HandleMenuHighlightEvent( (Menu*) pEvent->mpMenu, pEvent->mnId ) ? 1 : 0;
    2125                 :          0 :                     break;
    2126                 :            :                 case SALEVENT_MENUBUTTONCOMMAND:
    2127         [ #  # ]:          0 :                     nRet = pMenuBar->HandleMenuButtonEvent( (Menu*) pEvent->mpMenu, pEvent->mnId ) ? 1 : 0;
    2128                 :          0 :                     break;
    2129                 :            :                 case SALEVENT_MENUCOMMAND:
    2130         [ #  # ]:          0 :                     nRet = pMenuBar->HandleMenuCommandEvent( (Menu*) pEvent->mpMenu, pEvent->mnId ) ? 1 : 0;
    2131                 :          0 :                     break;
    2132                 :            :                 default:
    2133                 :          0 :                     break;
    2134                 :            :             }
    2135                 :            :         }
    2136                 :            :     }
    2137                 :          0 :     return nRet;
    2138                 :            : }
    2139                 :            : 
    2140                 :            : // -----------------------------------------------------------------------
    2141                 :            : 
    2142                 :          0 : static void ImplHandleSalKeyMod( Window* pWindow, SalKeyModEvent* pEvent )
    2143                 :            : {
    2144                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
    2145                 :          0 :     Window* pTrackWin = pSVData->maWinData.mpTrackWin;
    2146         [ #  # ]:          0 :     if ( pTrackWin )
    2147                 :          0 :         pWindow = pTrackWin;
    2148                 :            : #ifdef MACOSX
    2149                 :            :     sal_uInt16 nOldCode = pWindow->ImplGetWindowImpl()->mpFrameData->mnMouseCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_MOD3);
    2150                 :            : #else
    2151                 :          0 :     sal_uInt16 nOldCode = pWindow->ImplGetWindowImpl()->mpFrameData->mnMouseCode & (KEY_SHIFT | KEY_MOD1 | KEY_MOD2);
    2152                 :            : #endif
    2153                 :          0 :     sal_uInt16 nNewCode = pEvent->mnCode;
    2154         [ #  # ]:          0 :     if ( nOldCode != nNewCode )
    2155                 :            :     {
    2156                 :            : #ifdef MACOSX
    2157                 :            :     nNewCode |= pWindow->ImplGetWindowImpl()->mpFrameData->mnMouseCode & ~(KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_MOD3);
    2158                 :            : #else
    2159                 :          0 :         nNewCode |= pWindow->ImplGetWindowImpl()->mpFrameData->mnMouseCode & ~(KEY_SHIFT | KEY_MOD1 | KEY_MOD2);
    2160                 :            : #endif
    2161                 :          0 :         pWindow->ImplGetWindowImpl()->mpFrameWindow->ImplCallMouseMove( nNewCode, sal_True );
    2162                 :            :     }
    2163                 :            : 
    2164                 :            :     // #105224# send commandevent to allow special treatment of Ctrl-LeftShift/Ctrl-RightShift etc.
    2165                 :            : 
    2166                 :            :     // find window
    2167                 :          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    2168         [ #  # ]:          0 :     if ( !pChild )
    2169                 :          0 :         return;
    2170                 :            : 
    2171                 :            :     // send modkey events only if useful data is available
    2172         [ #  # ]:          0 :     if( pEvent->mnModKeyCode != 0 )
    2173                 :            :     {
    2174         [ #  # ]:          0 :         CommandModKeyData data( pEvent->mnModKeyCode );
    2175         [ #  # ]:          0 :         ImplCallCommand( pChild, COMMAND_MODKEYCHANGE, &data );
    2176                 :            :     }
    2177                 :            : }
    2178                 :            : 
    2179                 :            : // -----------------------------------------------------------------------
    2180                 :            : 
    2181                 :          0 : static void ImplHandleInputLanguageChange( Window* pWindow )
    2182                 :            : {
    2183                 :            :     // find window
    2184                 :          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    2185         [ #  # ]:          0 :     if ( !pChild )
    2186                 :          0 :         return;
    2187                 :            : 
    2188                 :          0 :     ImplCallCommand( pChild, COMMAND_INPUTLANGUAGECHANGE );
    2189                 :            : }
    2190                 :            : 
    2191                 :            : // -----------------------------------------------------------------------
    2192                 :            : 
    2193                 :          0 : static void ImplHandleSalSettings( Window* pWindow, sal_uInt16 nEvent )
    2194                 :            : {
    2195                 :            :     // Application Notification werden nur fuer das erste Window ausgeloest
    2196                 :          0 :     ImplSVData* pSVData = ImplGetSVData();
    2197         [ #  # ]:          0 :     if ( pWindow != pSVData->maWinData.mpFirstFrame )
    2198                 :          0 :         return;
    2199                 :            : 
    2200                 :          0 :     Application* pApp = GetpApp();
    2201         [ #  # ]:          0 :     if ( !pApp )
    2202                 :          0 :         return;
    2203                 :            : 
    2204         [ #  # ]:          0 :     if ( nEvent == SALEVENT_SETTINGSCHANGED )
    2205                 :            :     {
    2206 [ #  # ][ #  # ]:          0 :         AllSettings aSettings = pApp->GetSettings();
    2207         [ #  # ]:          0 :         pApp->MergeSystemSettings( aSettings );
    2208         [ #  # ]:          0 :         pApp->SystemSettingsChanging( aSettings, pWindow );
    2209 [ #  # ][ #  # ]:          0 :         pApp->SetSettings( aSettings );
    2210                 :            :     }
    2211                 :            :     else
    2212                 :            :     {
    2213                 :            :         sal_uInt16 nType;
    2214   [ #  #  #  #  :          0 :         switch ( nEvent )
                #  #  # ]
    2215                 :            :         {
    2216                 :            :             case SALEVENT_VOLUMECHANGED:
    2217                 :          0 :                 nType = 0;
    2218                 :          0 :                 break;
    2219                 :            :             case SALEVENT_PRINTERCHANGED:
    2220                 :          0 :                 ImplDeletePrnQueueList();
    2221                 :          0 :                 nType = DATACHANGED_PRINTER;
    2222                 :          0 :                 break;
    2223                 :            :             case SALEVENT_DISPLAYCHANGED:
    2224                 :          0 :                 nType = DATACHANGED_DISPLAY;
    2225                 :          0 :                 break;
    2226                 :            :             case SALEVENT_FONTCHANGED:
    2227                 :          0 :                 OutputDevice::ImplUpdateAllFontData( sal_True );
    2228                 :          0 :                 nType = DATACHANGED_FONTS;
    2229                 :          0 :                 break;
    2230                 :            :             case SALEVENT_DATETIMECHANGED:
    2231                 :          0 :                 nType = DATACHANGED_DATETIME;
    2232                 :          0 :                 break;
    2233                 :            :             case SALEVENT_KEYBOARDCHANGED:
    2234                 :          0 :                 nType = 0;
    2235                 :          0 :                 break;
    2236                 :            :             default:
    2237                 :          0 :                 nType = 0;
    2238                 :          0 :                 break;
    2239                 :            :         }
    2240                 :            : 
    2241         [ #  # ]:          0 :         if ( nType )
    2242                 :            :         {
    2243         [ #  # ]:          0 :             DataChangedEvent aDCEvt( nType );
    2244         [ #  # ]:          0 :             pApp->DataChanged( aDCEvt );
    2245         [ #  # ]:          0 :             pApp->NotifyAllWindows( aDCEvt );
    2246                 :            :         }
    2247                 :            :     }
    2248                 :            : }
    2249                 :            : 
    2250                 :            : // -----------------------------------------------------------------------
    2251                 :            : 
    2252                 :          0 : static void ImplHandleSalExtTextInputPos( Window* pWindow, SalExtTextInputPosEvent* pEvt )
    2253                 :            : {
    2254         [ #  # ]:          0 :     Rectangle aCursorRect;
    2255         [ #  # ]:          0 :     ImplHandleExtTextInputPos( pWindow, aCursorRect, pEvt->mnExtWidth, &pEvt->mbVertical );
    2256 [ #  # ][ #  # ]:          0 :     if ( aCursorRect.IsEmpty() )
    2257                 :            :     {
    2258                 :          0 :         pEvt->mnX       = -1;
    2259                 :          0 :         pEvt->mnY       = -1;
    2260                 :          0 :         pEvt->mnWidth   = -1;
    2261                 :          0 :         pEvt->mnHeight  = -1;
    2262                 :            :     }
    2263                 :            :     else
    2264                 :            :     {
    2265                 :          0 :         pEvt->mnX       = aCursorRect.Left();
    2266                 :          0 :         pEvt->mnY       = aCursorRect.Top();
    2267         [ #  # ]:          0 :         pEvt->mnWidth   = aCursorRect.GetWidth();
    2268         [ #  # ]:          0 :         pEvt->mnHeight  = aCursorRect.GetHeight();
    2269                 :            :     }
    2270                 :          0 : }
    2271                 :            : 
    2272                 :            : // -----------------------------------------------------------------------
    2273                 :            : 
    2274                 :          0 : static long ImplHandleShowDialog( Window* pWindow, int nDialogId )
    2275                 :            : {
    2276         [ #  # ]:          0 :     if( ! pWindow )
    2277                 :          0 :         return sal_False;
    2278                 :            : 
    2279 [ #  # ][ #  # ]:          0 :     if( pWindow->GetType() == WINDOW_BORDERWINDOW )
    2280                 :            :     {
    2281         [ #  # ]:          0 :         Window* pWrkWin = pWindow->GetWindow( WINDOW_CLIENT );
    2282         [ #  # ]:          0 :         if( pWrkWin )
    2283                 :          0 :             pWindow = pWrkWin;
    2284                 :            :     }
    2285                 :          0 :     CommandDialogData aCmdData( nDialogId );
    2286         [ #  # ]:          0 :     return ImplCallCommand( pWindow, COMMAND_SHOWDIALOG, &aCmdData );
    2287                 :            : }
    2288                 :            : 
    2289                 :            : // -----------------------------------------------------------------------
    2290                 :            : 
    2291                 :          0 : static void ImplHandleSurroundingTextRequest( Window *pWindow,
    2292                 :            :                           XubString& rText,
    2293                 :            :                           Selection &rSelRange )
    2294                 :            : {
    2295                 :          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    2296                 :            : 
    2297         [ #  # ]:          0 :     if ( !pChild )
    2298                 :            :     {
    2299                 :          0 :     rText = XubString::EmptyString();
    2300                 :          0 :     rSelRange.setMin( 0 );
    2301                 :          0 :     rSelRange.setMax( 0 );
    2302                 :            :     }
    2303                 :            :     else
    2304                 :            :     {
    2305                 :            : 
    2306 [ #  # ][ #  # ]:          0 :     rText = pChild->GetSurroundingText();
    2307         [ #  # ]:          0 :     Selection aSel = pChild->GetSurroundingTextSelection();
    2308                 :          0 :     rSelRange.setMin( aSel.Min() );
    2309                 :          0 :     rSelRange.setMax( aSel.Max() );
    2310                 :            :     }
    2311                 :          0 : }
    2312                 :            : 
    2313                 :            : // -----------------------------------------------------------------------
    2314                 :            : 
    2315                 :          0 : static void ImplHandleSalSurroundingTextRequest( Window *pWindow,
    2316                 :            :                          SalSurroundingTextRequestEvent *pEvt )
    2317                 :            : {
    2318                 :          0 :     Selection aSelRange;
    2319         [ #  # ]:          0 :     ImplHandleSurroundingTextRequest( pWindow, pEvt->maText, aSelRange );
    2320                 :            : 
    2321                 :          0 :     aSelRange.Justify();
    2322                 :            : 
    2323         [ #  # ]:          0 :     if( aSelRange.Min() < 0 )
    2324                 :          0 :         pEvt->mnStart = 0;
    2325         [ #  # ]:          0 :     else if( aSelRange.Min() > pEvt->maText.Len() )
    2326                 :          0 :         pEvt->mnStart = pEvt->maText.Len();
    2327                 :            :     else
    2328                 :          0 :         pEvt->mnStart = aSelRange.Min();
    2329                 :            : 
    2330         [ #  # ]:          0 :     if( aSelRange.Max() < 0 )
    2331                 :          0 :         pEvt->mnStart = 0;
    2332         [ #  # ]:          0 :     else if( aSelRange.Max() > pEvt->maText.Len() )
    2333                 :          0 :         pEvt->mnEnd = pEvt->maText.Len();
    2334                 :            :     else
    2335                 :          0 :         pEvt->mnEnd = aSelRange.Max();
    2336                 :          0 : }
    2337                 :            : 
    2338                 :            : // -----------------------------------------------------------------------
    2339                 :            : 
    2340                 :          0 : static void ImplHandleSurroundingTextSelectionChange( Window *pWindow,
    2341                 :            :                               sal_uLong nStart,
    2342                 :            :                               sal_uLong nEnd )
    2343                 :            : {
    2344                 :          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    2345         [ #  # ]:          0 :     if( pChild )
    2346                 :            :     {
    2347         [ #  # ]:          0 :         CommandSelectionChangeData data( nStart, nEnd );
    2348         [ #  # ]:          0 :         ImplCallCommand( pChild, COMMAND_SELECTIONCHANGE, &data );
    2349                 :            :     }
    2350                 :          0 : }
    2351                 :            : 
    2352                 :            : // -----------------------------------------------------------------------
    2353                 :            : 
    2354                 :          0 : static void ImplHandleStartReconversion( Window *pWindow )
    2355                 :            : {
    2356                 :          0 :     Window* pChild = ImplGetKeyInputWindow( pWindow );
    2357         [ #  # ]:          0 :     if( pChild )
    2358                 :          0 :     ImplCallCommand( pChild, COMMAND_PREPARERECONVERSION );
    2359                 :          0 : }
    2360                 :            : 
    2361                 :            : // -----------------------------------------------------------------------
    2362                 :            : 
    2363                 :      36465 : long ImplWindowFrameProc( Window* pWindow, SalFrame* /*pFrame*/,
    2364                 :            :                           sal_uInt16 nEvent, const void* pEvent )
    2365                 :            : {
    2366                 :            :     DBG_TESTSOLARMUTEX();
    2367                 :            : 
    2368                 :      36465 :     long nRet = 0;
    2369                 :            : 
    2370                 :            :     // #119709# for some unknown reason it is possible to receive events (in this case key events)
    2371                 :            :     // although the corresponding VCL window must have been destroyed already
    2372                 :            :     // at least ImplGetWindowImpl() was NULL in these cases, so check this here
    2373         [ -  + ]:      36465 :     if( pWindow->ImplGetWindowImpl() == NULL )
    2374                 :          0 :         return 0;
    2375                 :            : 
    2376   [ -  -  -  -  :      36465 :     switch ( nEvent )
          -  -  -  -  -  
          -  -  -  -  -  
          -  -  +  -  +  
          -  -  +  +  -  
          -  -  +  -  -  
          -  -  -  -  -  
                   -  - ]
    2377                 :            :     {
    2378                 :            :         case SALEVENT_MOUSEMOVE:
    2379                 :          0 :             nRet = ImplHandleSalMouseMove( pWindow, (SalMouseEvent*)pEvent );
    2380                 :          0 :             break;
    2381                 :            :         case SALEVENT_EXTERNALMOUSEMOVE:
    2382                 :            :         {
    2383                 :          0 :             MouseEvent*     pMouseEvt = (MouseEvent*) pEvent;
    2384                 :            :             SalMouseEvent   aSalMouseEvent;
    2385                 :            : 
    2386         [ #  # ]:          0 :             aSalMouseEvent.mnTime = Time::GetSystemTicks();
    2387                 :          0 :             aSalMouseEvent.mnX = pMouseEvt->GetPosPixel().X();
    2388                 :          0 :             aSalMouseEvent.mnY = pMouseEvt->GetPosPixel().Y();
    2389                 :          0 :             aSalMouseEvent.mnButton = 0;
    2390                 :          0 :             aSalMouseEvent.mnCode = pMouseEvt->GetButtons() | pMouseEvt->GetModifier();
    2391                 :            : 
    2392         [ #  # ]:          0 :             nRet = ImplHandleSalMouseMove( pWindow, &aSalMouseEvent );
    2393                 :            :         }
    2394                 :          0 :         break;
    2395                 :            :         case SALEVENT_MOUSELEAVE:
    2396                 :          0 :             nRet = ImplHandleSalMouseLeave( pWindow, (SalMouseEvent*)pEvent );
    2397                 :          0 :             break;
    2398                 :            :         case SALEVENT_MOUSEBUTTONDOWN:
    2399                 :          0 :             nRet = ImplHandleSalMouseButtonDown( pWindow, (SalMouseEvent*)pEvent );
    2400                 :          0 :             break;
    2401                 :            :         case SALEVENT_EXTERNALMOUSEBUTTONDOWN:
    2402                 :            :         {
    2403                 :          0 :             MouseEvent*     pMouseEvt = (MouseEvent*) pEvent;
    2404                 :            :             SalMouseEvent   aSalMouseEvent;
    2405                 :            : 
    2406         [ #  # ]:          0 :             aSalMouseEvent.mnTime = Time::GetSystemTicks();
    2407                 :          0 :             aSalMouseEvent.mnX = pMouseEvt->GetPosPixel().X();
    2408                 :          0 :             aSalMouseEvent.mnY = pMouseEvt->GetPosPixel().Y();
    2409                 :          0 :             aSalMouseEvent.mnButton = pMouseEvt->GetButtons();
    2410                 :          0 :             aSalMouseEvent.mnCode = pMouseEvt->GetButtons() | pMouseEvt->GetModifier();
    2411                 :            : 
    2412         [ #  # ]:          0 :             nRet = ImplHandleSalMouseButtonDown( pWindow, &aSalMouseEvent );
    2413                 :            :         }
    2414                 :          0 :         break;
    2415                 :            :         case SALEVENT_MOUSEBUTTONUP:
    2416                 :          0 :             nRet = ImplHandleSalMouseButtonUp( pWindow, (SalMouseEvent*)pEvent );
    2417                 :          0 :             break;
    2418                 :            :         case SALEVENT_EXTERNALMOUSEBUTTONUP:
    2419                 :            :         {
    2420                 :          0 :             MouseEvent*     pMouseEvt = (MouseEvent*) pEvent;
    2421                 :            :             SalMouseEvent   aSalMouseEvent;
    2422                 :            : 
    2423         [ #  # ]:          0 :             aSalMouseEvent.mnTime = Time::GetSystemTicks();
    2424                 :          0 :             aSalMouseEvent.mnX = pMouseEvt->GetPosPixel().X();
    2425                 :          0 :             aSalMouseEvent.mnY = pMouseEvt->GetPosPixel().Y();
    2426                 :          0 :             aSalMouseEvent.mnButton = pMouseEvt->GetButtons();
    2427                 :          0 :             aSalMouseEvent.mnCode = pMouseEvt->GetButtons() | pMouseEvt->GetModifier();
    2428                 :            : 
    2429         [ #  # ]:          0 :             nRet = ImplHandleSalMouseButtonUp( pWindow, &aSalMouseEvent );
    2430                 :            :         }
    2431                 :          0 :         break;
    2432                 :            :         case SALEVENT_MOUSEACTIVATE:
    2433                 :          0 :             nRet = ImplHandleSalMouseActivate( pWindow, (SalMouseActivateEvent*)pEvent );
    2434                 :          0 :             break;
    2435                 :            :         case SALEVENT_KEYINPUT:
    2436                 :            :             {
    2437                 :          0 :             SalKeyEvent* pKeyEvt = (SalKeyEvent*)pEvent;
    2438                 :            :             nRet = ImplHandleKey( pWindow, EVENT_KEYINPUT,
    2439                 :          0 :                 pKeyEvt->mnCode, pKeyEvt->mnCharCode, pKeyEvt->mnRepeat, sal_True );
    2440                 :            :             }
    2441                 :          0 :             break;
    2442                 :            :         case SALEVENT_EXTERNALKEYINPUT:
    2443                 :            :             {
    2444                 :          0 :             KeyEvent* pKeyEvt = (KeyEvent*) pEvent;
    2445                 :            :             nRet = ImplHandleKey( pWindow, EVENT_KEYINPUT,
    2446                 :          0 :                 pKeyEvt->GetKeyCode().GetFullCode(), pKeyEvt->GetCharCode(), pKeyEvt->GetRepeat(), sal_False );
    2447                 :            :             }
    2448                 :          0 :             break;
    2449                 :            :         case SALEVENT_KEYUP:
    2450                 :            :             {
    2451                 :          0 :             SalKeyEvent* pKeyEvt = (SalKeyEvent*)pEvent;
    2452                 :            :             nRet = ImplHandleKey( pWindow, EVENT_KEYUP,
    2453                 :          0 :                 pKeyEvt->mnCode, pKeyEvt->mnCharCode, pKeyEvt->mnRepeat, sal_True );
    2454                 :            :             }
    2455                 :          0 :             break;
    2456                 :            :         case SALEVENT_EXTERNALKEYUP:
    2457                 :            :             {
    2458                 :          0 :             KeyEvent* pKeyEvt = (KeyEvent*) pEvent;
    2459                 :            :             nRet = ImplHandleKey( pWindow, EVENT_KEYUP,
    2460                 :          0 :                 pKeyEvt->GetKeyCode().GetFullCode(), pKeyEvt->GetCharCode(), pKeyEvt->GetRepeat(), sal_False );
    2461                 :            :             }
    2462                 :          0 :             break;
    2463                 :            :         case SALEVENT_KEYMODCHANGE:
    2464                 :          0 :             ImplHandleSalKeyMod( pWindow, (SalKeyModEvent*)pEvent );
    2465                 :          0 :             break;
    2466                 :            : 
    2467                 :            :         case SALEVENT_INPUTLANGUAGECHANGE:
    2468                 :          0 :             ImplHandleInputLanguageChange( pWindow );
    2469                 :          0 :             break;
    2470                 :            : 
    2471                 :            :         case SALEVENT_MENUACTIVATE:
    2472                 :            :         case SALEVENT_MENUDEACTIVATE:
    2473                 :            :         case SALEVENT_MENUHIGHLIGHT:
    2474                 :            :         case SALEVENT_MENUCOMMAND:
    2475                 :            :         case SALEVENT_MENUBUTTONCOMMAND:
    2476                 :          0 :             nRet = ImplHandleMenuEvent( pWindow, (SalMenuEvent*)pEvent, nEvent );
    2477                 :          0 :             break;
    2478                 :            : 
    2479                 :            :         case SALEVENT_WHEELMOUSE:
    2480                 :          0 :             nRet = ImplHandleWheelEvent( pWindow, *(const SalWheelMouseEvent*)pEvent);
    2481                 :          0 :             break;
    2482                 :            : 
    2483                 :            :         case SALEVENT_PAINT:
    2484                 :            :             {
    2485                 :       1618 :             SalPaintEvent* pPaintEvt = (SalPaintEvent*)pEvent;
    2486                 :            : 
    2487 [ +  - ][ +  - ]:       1618 :             if( Application::GetSettings().GetLayoutRTL() )
                 [ -  + ]
    2488                 :            :             {
    2489                 :            :                 // --- RTL --- (mirror paint rect)
    2490                 :          0 :                 SalFrame* pSalFrame = pWindow->ImplGetWindowImpl()->mpFrame;
    2491                 :          0 :                 pPaintEvt->mnBoundX = pSalFrame->maGeometry.nWidth-pPaintEvt->mnBoundWidth-pPaintEvt->mnBoundX;
    2492                 :            :             }
    2493                 :            : 
    2494                 :            :             Rectangle aBoundRect( Point( pPaintEvt->mnBoundX, pPaintEvt->mnBoundY ),
    2495         [ +  - ]:       1618 :                                   Size( pPaintEvt->mnBoundWidth, pPaintEvt->mnBoundHeight ) );
    2496         [ +  - ]:       1618 :             ImplHandlePaint( pWindow, aBoundRect, pPaintEvt->mbImmediateUpdate );
    2497                 :            :             }
    2498                 :       1618 :             break;
    2499                 :            : 
    2500                 :            :         case SALEVENT_MOVE:
    2501                 :          0 :             ImplHandleMove( pWindow );
    2502                 :          0 :             break;
    2503                 :            : 
    2504                 :            :         case SALEVENT_RESIZE:
    2505                 :            :             {
    2506                 :            :             long nNewWidth;
    2507                 :            :             long nNewHeight;
    2508         [ +  - ]:       1695 :             pWindow->ImplGetWindowImpl()->mpFrame->GetClientSize( nNewWidth, nNewHeight );
    2509         [ +  - ]:       1695 :             ImplHandleResize( pWindow, nNewWidth, nNewHeight );
    2510                 :            :             }
    2511                 :       1695 :             break;
    2512                 :            : 
    2513                 :            :         case SALEVENT_MOVERESIZE:
    2514                 :            :             {
    2515         [ #  # ]:          0 :             SalFrameGeometry g = pWindow->ImplGetWindowImpl()->mpFrame->GetGeometry();
    2516         [ #  # ]:          0 :             ImplHandleMoveResize( pWindow, g.nWidth, g.nHeight );
    2517                 :            :             }
    2518                 :          0 :             break;
    2519                 :            : 
    2520                 :            :         case SALEVENT_CLOSEPOPUPS:
    2521                 :            :             {
    2522                 :          0 :             KillOwnPopups( pWindow );
    2523                 :            :             }
    2524                 :          0 :             break;
    2525                 :            : 
    2526                 :            :         case SALEVENT_GETFOCUS:
    2527                 :       4729 :             ImplHandleGetFocus( pWindow );
    2528                 :       4729 :             break;
    2529                 :            :         case SALEVENT_LOSEFOCUS:
    2530                 :       3308 :             ImplHandleLoseFocus( pWindow );
    2531                 :       3308 :             break;
    2532                 :            : 
    2533                 :            :         case SALEVENT_CLOSE:
    2534                 :          0 :             ImplHandleClose( pWindow );
    2535                 :          0 :             break;
    2536                 :            : 
    2537                 :            :         case SALEVENT_SHUTDOWN:
    2538                 :            :             {
    2539                 :            :                 static bool bInQueryExit = false;
    2540         [ #  # ]:          0 :                 if( !bInQueryExit )
    2541                 :            :                 {
    2542                 :          0 :                     bInQueryExit = true;
    2543         [ #  # ]:          0 :                     if ( GetpApp()->QueryExit() )
    2544                 :            :                     {
    2545                 :            :                         // Message-Schleife beenden
    2546                 :          0 :                         Application::Quit();
    2547                 :          0 :                         return sal_False;
    2548                 :            :                     }
    2549                 :            :                     else
    2550                 :            :                     {
    2551                 :          0 :                         bInQueryExit = false;
    2552                 :          0 :                         return sal_True;
    2553                 :            :                     }
    2554                 :            :                 }
    2555                 :          0 :                 return sal_False;
    2556                 :            :             }
    2557                 :            : 
    2558                 :            :         case SALEVENT_SETTINGSCHANGED:
    2559                 :            :         case SALEVENT_VOLUMECHANGED:
    2560                 :            :         case SALEVENT_PRINTERCHANGED:
    2561                 :            :         case SALEVENT_DISPLAYCHANGED:
    2562                 :            :         case SALEVENT_FONTCHANGED:
    2563                 :            :         case SALEVENT_DATETIMECHANGED:
    2564                 :            :         case SALEVENT_KEYBOARDCHANGED:
    2565                 :          0 :             ImplHandleSalSettings( pWindow, nEvent );
    2566                 :          0 :             break;
    2567                 :            : 
    2568                 :            :         case SALEVENT_USEREVENT:
    2569                 :      25115 :             ImplHandleUserEvent( (ImplSVEvent*)pEvent );
    2570                 :      25115 :             break;
    2571                 :            : 
    2572                 :            :         case SALEVENT_EXTTEXTINPUT:
    2573                 :            :             {
    2574                 :          0 :             SalExtTextInputEvent* pEvt = (SalExtTextInputEvent*)pEvent;
    2575                 :            :             nRet = ImplHandleExtTextInput( pWindow,
    2576                 :            :                                            pEvt->maText, pEvt->mpTextAttr,
    2577                 :          0 :                                            pEvt->mnCursorPos, pEvt->mnCursorFlags );
    2578                 :            :             }
    2579                 :          0 :             break;
    2580                 :            :         case SALEVENT_ENDEXTTEXTINPUT:
    2581                 :          0 :             nRet = ImplHandleEndExtTextInput( pWindow );
    2582                 :          0 :             break;
    2583                 :            :         case SALEVENT_EXTTEXTINPUTPOS:
    2584                 :          0 :             ImplHandleSalExtTextInputPos( pWindow, (SalExtTextInputPosEvent*)pEvent );
    2585                 :          0 :             break;
    2586                 :            :         case SALEVENT_INPUTCONTEXTCHANGE:
    2587                 :          0 :             nRet = ImplHandleInputContextChange( pWindow, ((SalInputContextChangeEvent*)pEvent)->meLanguage );
    2588                 :          0 :             break;
    2589                 :            :         case SALEVENT_SHOWDIALOG:
    2590                 :            :             {
    2591                 :          0 :                 int nDialogID = static_cast<int>(reinterpret_cast<sal_IntPtr>(pEvent));
    2592                 :          0 :                 nRet = ImplHandleShowDialog( pWindow, nDialogID );
    2593                 :            :             }
    2594                 :          0 :             break;
    2595                 :            :         case SALEVENT_SURROUNDINGTEXTREQUEST:
    2596                 :          0 :             ImplHandleSalSurroundingTextRequest( pWindow, (SalSurroundingTextRequestEvent*)pEvent );
    2597                 :          0 :             break;
    2598                 :            :         case SALEVENT_SURROUNDINGTEXTSELECTIONCHANGE:
    2599                 :            :         {
    2600                 :            :             SalSurroundingTextSelectionChangeEvent* pEvt
    2601                 :          0 :              = (SalSurroundingTextSelectionChangeEvent*)pEvent;
    2602                 :            :             ImplHandleSurroundingTextSelectionChange( pWindow,
    2603                 :            :                               pEvt->mnStart,
    2604                 :          0 :                               pEvt->mnEnd );
    2605                 :            :         }
    2606                 :            :         case SALEVENT_STARTRECONVERSION:
    2607                 :          0 :             ImplHandleStartReconversion( pWindow );
    2608                 :          0 :             break;
    2609                 :            : #ifdef DBG_UTIL
    2610                 :            :         default:
    2611                 :            :             OSL_TRACE( "ImplWindowFrameProc(): unknown event (%lu)", (sal_uLong)nEvent );
    2612                 :            :             break;
    2613                 :            : #endif
    2614                 :            :     }
    2615                 :            : 
    2616                 :      36465 :     return nRet;
    2617                 :            : }
    2618                 :            : 
    2619                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10