diff options
-rw-r--r-- | vcl/inc/salwtype.hxx | 9 | ||||
-rw-r--r-- | vcl/source/window/winproc.cxx | 3 | ||||
-rw-r--r-- | vcl/win/source/window/salframe.cxx | 29 |
3 files changed, 40 insertions, 1 deletions
diff --git a/vcl/inc/salwtype.hxx b/vcl/inc/salwtype.hxx index da5126c43d38..222c8c85a54a 100644 --- a/vcl/inc/salwtype.hxx +++ b/vcl/inc/salwtype.hxx @@ -53,7 +53,7 @@ enum class InputContextFlags; #define SALEVENT_FONTCHANGED ((sal_uInt16)18) #define SALEVENT_WHEELMOUSE ((sal_uInt16)21) #define SALEVENT_USEREVENT ((sal_uInt16)22) -// unused +#define SALEVENT_MOUSEACTIVATE ((sal_uInt16)23) #define SALEVENT_EXTTEXTINPUT ((sal_uInt16)24) #define SALEVENT_ENDEXTTEXTINPUT ((sal_uInt16)25) #define SALEVENT_EXTTEXTINPUTPOS ((sal_uInt16)26) @@ -161,6 +161,13 @@ struct SalWheelMouseEvent {} }; +// MOUSEACTIVATE +struct SalMouseActivateEvent +{ + long mnX; // X-Position (Pixel, TopLeft-Output) + long mnY; // Y-Position (Pixel, TopLeft-Output) +}; + // EXTTEXTINPUT struct SalExtTextInputEvent { diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index 6e9f5bb0c76a..ef4cb769e18e 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -2437,6 +2437,9 @@ bool ImplWindowFrameProc( vcl::Window* _pWindow, SalFrame* /*pFrame*/, bRet = ImplHandleSalMouseButtonUp( pWindow, &aSalMouseEvent ); } break; + case SALEVENT_MOUSEACTIVATE: + bRet = false; + break; case SALEVENT_KEYINPUT: { SalKeyEvent const * pKeyEvt = static_cast<SalKeyEvent const *>(pEvent); diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx index 763d4430e5b4..4b873a96ec74 100644 --- a/vcl/win/source/window/salframe.cxx +++ b/vcl/win/source/window/salframe.cxx @@ -3183,6 +3183,24 @@ static long ImplHandleMouseMsg( HWND hWnd, UINT nMsg, return nRet; } +static long ImplHandleMouseActivateMsg( HWND hWnd ) +{ + WinSalFrame* pFrame = GetWindowPtr( hWnd ); + if ( !pFrame ) + return 0; + + if ( pFrame->mbFloatWin ) + return TRUE; + + SalMouseActivateEvent aMouseActivateEvt; + POINT aPt; + GetCursorPos( &aPt ); + ScreenToClient( hWnd, &aPt ); + aMouseActivateEvt.mnX = aPt.x; + aMouseActivateEvt.mnY = aPt.y; + return pFrame->CallCallback( SALEVENT_MOUSEACTIVATE, &aMouseActivateEvt ); +} + static long ImplHandleWheelMsg( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { DBG_ASSERT( nMsg == WM_MOUSEWHEEL || @@ -5515,6 +5533,17 @@ LRESULT CALLBACK SalFrameWndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lP break; case WM_MOUSEACTIVATE: + if ( LOWORD( lParam ) == HTCLIENT ) + { + ImplSalYieldMutexAcquireWithWait(); + nRet = ImplHandleMouseActivateMsg( hWnd ); + ImplSalYieldMutexRelease(); + if ( nRet ) + { + nRet = MA_NOACTIVATE; + rDef = FALSE; + } + } break; case WM_KEYDOWN: |