diff options
author | Juergen Funk <juergen.funk_ml@cib.de> | 2015-12-14 22:42:25 +0100 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2015-12-15 06:26:31 +0000 |
commit | 8a86d673140febc39be2044d2feb7c28fd307aa0 (patch) | |
tree | bce3d2a5327f04729b28b13e9fb2da09802cf1a9 | |
parent | 014633f83e44ae8ba33087b6f38e8e253e281969 (diff) |
tdf#96119 Cannot select item with mouse in any combobox / drop down menu
this commit has make the problem, the removing of the SALEVENT_MOUSEACTIVATE
commit dd351dd728687cffe432ce0ec9367ceb80e097fb
Author: Noel Grandin <noel@peralex.com>
Date: Tue Nov 24 08:50:39 2015 +0200
loplugin:unusedfields in vcl/
and remove the unused SALEVENT_MOUSEACTIVATE stuff
Without of there, when click in the opened list-box it send first the
"PreNotify" with "MouseNotifyEvent::LOSEFOCUS" and that close the listbox.
After that, it send the mouse-event to a closed window, that is the reason
why the Listbox not get the mouse-click.
With this patch, first send the mouse-click and then the "PreNotify"
Change-Id: I5a09b1524335434f043d22bc71f7e38559fb1c0b
Reviewed-on: https://gerrit.libreoffice.org/20708
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
-rw-r--r-- | vcl/inc/salwtype.hxx | 9 | ||||
-rw-r--r-- | vcl/source/window/winproc.cxx | 3 | ||||
-rw-r--r-- | vcl/win/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/window/salframe.cxx b/vcl/win/window/salframe.cxx index 763d4430e5b4..4b873a96ec74 100644 --- a/vcl/win/window/salframe.cxx +++ b/vcl/win/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: |