X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ab7f0034828cfc121014b3e1e29bba583fb6d832..dc5d118e65603773263040afdf2c97633869e4ca:/src/gtk/textctrl.cpp diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index 0e408c532b..10a90eaad7 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -461,6 +461,25 @@ au_check_range(GtkTextIter *s, //----------------------------------------------------------------------------- extern "C" { + +// Normal version used for detecting IME input and generating appropriate +// events for it. +void +wx_insert_text_callback(GtkTextBuffer* buffer, + GtkTextIter* WXUNUSED(end), + gchar *text, + gint WXUNUSED(len), + wxTextCtrl *win) +{ + if ( win->GTKOnInsertText(text) ) + { + // If we already handled the new text insertion, don't do it again. + g_signal_stop_emission_by_name (buffer, "insert_text"); + } +} + + +// And an "after" version used for detecting URLs in the text. static void au_insert_text_callback(GtkTextBuffer * WXUNUSED(buffer), GtkTextIter *end, @@ -610,7 +629,7 @@ void wxTextCtrl::Init() m_anonymousMarkList = NULL; } -wxTextCtrl::~wxTextCtrl() wxNOEXCEPT +wxTextCtrl::~wxTextCtrl() { if (m_text) GTKDisconnect(m_text); @@ -787,12 +806,19 @@ bool wxTextCtrl::Create( wxWindow *parent, gtk_text_buffer_get_end_iter(m_buffer, &end); au_check_range(&start, &end); } + + // Also connect a normal (not "after") signal handler for checking for + // the IME-generated input. + g_signal_connect(m_buffer, "insert_text", + G_CALLBACK(wx_insert_text_callback), this); } else // single line { // do the right thing with Enter presses depending on whether we have // wxTE_PROCESS_ENTER or not GTKSetActivatesDefault(); + + GTKConnectInsertTextSignal(GTK_ENTRY(m_text)); } @@ -815,6 +841,30 @@ GtkEntry *wxTextCtrl::GetEntry() const return GTK_ENTRY(m_text); } +int wxTextCtrl::GTKIMFilterKeypress(GdkEventKey* event) const +{ +#if GTK_CHECK_VERSION(2, 22, 0) + if ( gtk_check_version(2, 12, 0) == 0 ) + { + if ( IsSingleLine() ) + { + return wxTextEntry::GTKIMFilterKeypress(event); + } + else + { + return gtk_text_view_im_context_filter_keypress( + GTK_TEXT_VIEW(m_text), + event + ); + } + } +#else // GTK+ < 2.22 + wxUnusedVar(event); +#endif // GTK+ 2.22+ + + return FALSE; +} + // ---------------------------------------------------------------------------- // flags handling // ---------------------------------------------------------------------------- @@ -1291,26 +1341,6 @@ bool wxTextCtrl::Enable( bool enable ) return true; } -// wxGTK-specific: called recursively by Enable, -// to give widgets an opportunity to correct their colours after they -// have been changed by Enable -void wxTextCtrl::OnEnabled(bool WXUNUSED(enable)) -{ - // If we have a custom background colour, we use this colour in both - // disabled and enabled mode, or we end up with a different colour under the - // text. - wxColour oldColour = GetBackgroundColour(); - if (oldColour.IsOk()) - { - // Need to set twice or it'll optimize the useful stuff out - if (oldColour == * wxWHITE) - SetBackgroundColour(*wxBLACK); - else - SetBackgroundColour(*wxWHITE); - SetBackgroundColour(oldColour); - } -} - void wxTextCtrl::MarkDirty() { m_modified = true; @@ -1588,7 +1618,7 @@ void wxTextCtrl::OnChar( wxKeyEvent &key_event ) { if ( HasFlag(wxTE_PROCESS_ENTER) ) { - wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); + wxCommandEvent event(wxEVT_TEXT_ENTER, m_windowId); event.SetEventObject(this); event.SetString(GetValue()); if ( HandleWindowEvent(event) ) @@ -2009,7 +2039,7 @@ bool wxTextCtrl::GTKProcessEvent(wxEvent& event) const wxVisualAttributes wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true); + return GetDefaultAttributesFromGTKWidget(gtk_entry_new(), true); } #endif // wxUSE_TEXTCTRL