summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/inc/salwtype.hxx9
-rw-r--r--vcl/source/window/winproc.cxx3
-rw-r--r--vcl/win/source/window/salframe.cxx29
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: