From e2cf30aa1c330e5f2f7954c3938a58a1a95f221e Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sat, 15 Mar 2008 12:28:03 +0000 Subject: [PATCH] wxMSW: generate wxClipboardTextEvent from wxTextCtrl with wxTE_RICH style too git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52546 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/textctrl.h | 2 ++ interface/event.h | 5 ++--- src/msw/textctrl.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/include/wx/msw/textctrl.h b/include/wx/msw/textctrl.h index f4119aa3eb..c1f9cbed89 100644 --- a/include/wx/msw/textctrl.h +++ b/include/wx/msw/textctrl.h @@ -256,6 +256,8 @@ private: // the simple EDIT controls virtual WXHWND GetEditHWND() const { return m_hWnd; } + void OnKeyDown(wxKeyEvent& event); + DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS_NO_COPY(wxTextCtrl) diff --git a/interface/event.h b/interface/event.h index beca799b22..4f200e3947 100644 --- a/interface/event.h +++ b/interface/event.h @@ -676,9 +676,8 @@ public: @endEventTable @note - These events are currently only generated by wxComboBox and under Windows - and wxTextCtrl under Windows and GTK and are not generated for the text - controls with wxTE_RICH style under Windows. + These events are currently only generated by wxTextCtrl under GTK+. They + are generated by all controls under Windows. @library{wxcore} @category{events} diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 5007bc1d84..780b1f89e7 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -248,6 +248,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxTextCtrlBase) BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase) EVT_CHAR(wxTextCtrl::OnChar) + EVT_KEY_DOWN(wxTextCtrl::OnKeyDown) EVT_DROP_FILES(wxTextCtrl::OnDropFiles) #if wxUSE_RICHEDIT @@ -1846,6 +1847,35 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) event.Skip(); } +void wxTextCtrl::OnKeyDown(wxKeyEvent& event) +{ + // richedit control doesn't send WM_PASTE, WM_CUT and WM_COPY messages + // when Ctrl-V, X or C is pressed and this prevents wxClipboardTextEvent + // from working. So we work around it by intercepting these shortcuts + // ourselves and emitting clipboard events (which richedit will handle, + // so everything works as before, including pasting of rich text): + if ( event.GetModifiers() == wxMOD_CONTROL && IsRich() ) + { + switch ( event.GetKeyCode() ) + { + case 'C': + Copy(); + return; + case 'X': + Cut(); + return; + case 'V': + Paste(); + return; + default: + break; + } + } + + // no, we didn't process it + event.Skip(); +} + WXLRESULT wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { WXLRESULT lRc = wxTextCtrlBase::MSWWindowProc(nMsg, wParam, lParam); -- 2.45.2