summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Funk <juergen.funk_ml@cib.de>2015-12-14 22:42:25 +0100
committerNoel Grandin <noelgrandin@gmail.com>2015-12-15 06:26:31 +0000
commit8a86d673140febc39be2044d2feb7c28fd307aa0 (patch)
treebce3d2a5327f04729b28b13e9fb2da09802cf1a9
parent014633f83e44ae8ba33087b6f38e8e253e281969 (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.hxx9
-rw-r--r--vcl/source/window/winproc.cxx3
-rw-r--r--vcl/win/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/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: