//-----------------------------------------------------------------------------
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,
m_anonymousMarkList = NULL;
}
-wxTextCtrl::~wxTextCtrl() wxNOEXCEPT
+wxTextCtrl::~wxTextCtrl()
{
if (m_text)
GTKDisconnect(m_text);
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));
}
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
// ----------------------------------------------------------------------------
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;
{
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) )
wxVisualAttributes
wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
{
- return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true);
+ return GetDefaultAttributesFromGTKWidget(gtk_entry_new(), true);
}
#endif // wxUSE_TEXTCTRL