diff --git a/change/react-native-windows-537a723b-a3c7-48fe-aec0-c53ca7d201e3.json b/change/react-native-windows-537a723b-a3c7-48fe-aec0-c53ca7d201e3.json new file mode 100644 index 00000000000..b72988b6450 --- /dev/null +++ b/change/react-native-windows-537a723b-a3c7-48fe-aec0-c53ca7d201e3.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "added check for double click on textInput component view connecting it to WM_LBUTTONDBLCLK", + "packageName": "react-native-windows", + "email": "email not defined", + "dependentChangeType": "none" +} diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp index 9d60a279238..f1759883eef 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp @@ -621,6 +621,19 @@ WPARAM PointerRoutedEventArgsToMouseWParam( return wParam; } +bool WindowsTextInputComponentView::IsDoubleClick() { + using namespace std::chrono; + + auto now = steady_clock::now(); + auto duration = duration_cast(now - m_lastClickTime).count(); + + const int DOUBLE_CLICK_TIME_MS = ::GetDoubleClickTime(); + + m_lastClickTime = now; + + return (duration < DOUBLE_CLICK_TIME_MS); +} + void WindowsTextInputComponentView::OnPointerPressed( const winrt::Microsoft::ReactNative::Composition::Input::PointerRoutedEventArgs &args) noexcept { UINT msg = 0; @@ -637,7 +650,11 @@ void WindowsTextInputComponentView::OnPointerPressed( if (pp.PointerDeviceType() == winrt::Microsoft::ReactNative::Composition::Input::PointerDeviceType::Mouse) { switch (pp.Properties().PointerUpdateKind()) { case winrt::Microsoft::ReactNative::Composition::Input::PointerUpdateKind::LeftButtonPressed: - msg = WM_LBUTTONDOWN; + if (IsDoubleClick()) { + msg = WM_LBUTTONDBLCLK; + } else { + msg = WM_LBUTTONDOWN; + } break; case winrt::Microsoft::ReactNative::Composition::Input::PointerUpdateKind::MiddleButtonPressed: msg = WM_MBUTTONDOWN; diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h b/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h index 46601c73a52..72c38144398 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h @@ -70,6 +70,7 @@ struct WindowsTextInputComponentView std::optional getAccessiblityValue() noexcept override; void setAcccessiblityValue(std::string &&value) noexcept override; bool getAcccessiblityIsReadOnly() noexcept override; + bool IsDoubleClick(); WindowsTextInputComponentView( const winrt::Microsoft::ReactNative::Composition::Experimental::ICompositionContext &compContext, @@ -140,6 +141,7 @@ struct WindowsTextInputComponentView DWORD m_propBitsMask{0}; DWORD m_propBits{0}; HCURSOR m_hcursor{nullptr}; + std::chrono::steady_clock::time_point m_lastClickTime{}; std::vector m_submitKeyEvents; };