diff --git a/include/wx/event.h b/include/wx/event.h index 223502421d..744263bba4 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -817,22 +817,7 @@ class WXDLLEXPORT wxKeyEvent : public wxEvent { public: wxKeyEvent(wxEventType keyType = wxEVT_NULL); - wxKeyEvent(const wxKeyEvent& evt) : wxEvent(evt) - { - m_x = evt.m_x; - m_y = evt.m_y; - - m_keyCode = evt.m_keyCode; - - m_controlDown = evt.m_controlDown; - m_shiftDown = evt.m_shiftDown; - m_altDown = evt.m_altDown; - m_metaDown = evt.m_metaDown; - m_scanCode = evt.m_scanCode; - m_rawCode = evt.m_rawCode; - m_rawFlags = evt.m_rawFlags; - } - + wxKeyEvent(const wxKeyEvent& evt); // Find state of shift/control keys bool ControlDown() const { return m_controlDown; } @@ -914,8 +899,14 @@ public: bool m_metaDown; bool m_scanCode; - // these fields contain the platform-specific information about the pressed - // key +#if wxUSE_UNICODE + // This contains the full Unicode character + // in a character events in Unicode mode + wxChar m_uniChar; +#endif + + // these fields contain the platform-specific information about + // key that was pressed wxUint32 m_rawCode; wxUint32 m_rawFlags; diff --git a/samples/erase/erase.cpp b/samples/erase/erase.cpp index c5eab3433a..307035e068 100644 --- a/samples/erase/erase.cpp +++ b/samples/erase/erase.cpp @@ -181,6 +181,15 @@ MyCanvas::MyCanvas( MyFrame *parent ) void MyCanvas::OnChar( wxKeyEvent &event ) { +#if wxUSE_UNICODE + if (event.m_uniChar) + { + m_text += event.m_uniChar; + Refresh(); + return; + } +#endif + // some test cases switch (event.m_keyCode) { @@ -192,7 +201,6 @@ void MyCanvas::OnChar( wxKeyEvent &event ) default: m_text += event.m_keyCode; break; } - Refresh(); } void MyCanvas::OnPaint( wxPaintEvent &event ) diff --git a/src/common/event.cpp b/src/common/event.cpp index d4cc3c54d4..6e578317e2 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -545,9 +545,32 @@ wxKeyEvent::wxKeyEvent(wxEventType type) m_altDown = FALSE; m_keyCode = 0; m_scanCode = 0; +#if wxUSE_UNICODE + m_uniChar = 0; +#endif } +wxKeyEvent::wxKeyEvent(const wxKeyEvent& evt) + : wxEvent(evt) +{ + m_x = evt.m_x; + m_y = evt.m_y; + m_keyCode = evt.m_keyCode; + + m_controlDown = evt.m_controlDown; + m_shiftDown = evt.m_shiftDown; + m_altDown = evt.m_altDown; + m_metaDown = evt.m_metaDown; + m_scanCode = evt.m_scanCode; + m_rawCode = evt.m_rawCode; + m_rawFlags = evt.m_rawFlags; + +#if wxUSE_UNICODE + m_uniChar = evt.m_uniChar; +#endif +} + wxWindowCreateEvent::wxWindowCreateEvent(wxWindow *win) { SetEventType(wxEVT_CREATE); diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 199fef91a8..034346acbb 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1356,8 +1356,11 @@ static void gtk_wxwindow_commit_cb (GtkIMContext *context, wxKeyEvent event( wxEVT_KEY_DOWN ); // I wonder how well keyval represents a Unicode char - gunichar ch = g_utf8_get_char( str ); - event.m_keyCode = ch; + event.m_uniChar = g_utf8_get_char( str ); + + // Backward compatible for ISO-8859 + if (event.m_uniChar < 256) + event.m_keyCode = event.m_uniChar; if (!ret) { diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 199fef91a8..034346acbb 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -1356,8 +1356,11 @@ static void gtk_wxwindow_commit_cb (GtkIMContext *context, wxKeyEvent event( wxEVT_KEY_DOWN ); // I wonder how well keyval represents a Unicode char - gunichar ch = g_utf8_get_char( str ); - event.m_keyCode = ch; + event.m_uniChar = g_utf8_get_char( str ); + + // Backward compatible for ISO-8859 + if (event.m_uniChar < 256) + event.m_keyCode = event.m_uniChar; if (!ret) {