//-----------------------------------------------------------------------------
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,
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) )
if ( IsSingleLine() )
{
- // default height
- tsize.y = GTKGetPreferredSize(m_widget).y;
- // Add the margins we have previously set, but only the horizontal border
- // as vertical one has been taken account at GTKGetPreferredSize().
- // Also get other GTK+ margins.
- tsize.IncBy( GTKGetEntryMargins(GetEntry()).x, 0);
+ if ( HasFlag(wxBORDER_NONE) )
+ {
+ tsize.y = cHeight;
+#ifdef __WXGTK3__
+ tsize.IncBy(9, 0);
+#else
+ tsize.IncBy(4, 0);
+#endif // GTK3
+ }
+ else
+ {
+ // default height
+ tsize.y = GTKGetPreferredSize(m_widget).y;
+ // Add the margins we have previously set, but only the horizontal border
+ // as vertical one has been taken account at GTKGetPreferredSize().
+ // Also get other GTK+ margins.
+ tsize.IncBy( GTKGetEntryMargins(GetEntry()).x, 0);
+ }
}
//multiline
tsize.y = cHeight;
if ( ylen <= 0 )
{
- tsize.y = cHeight * wxMax(wxMin(GetNumberOfLines(), 10), 2);
+ tsize.y = 1 + cHeight * wxMax(wxMin(GetNumberOfLines(), 10), 2);
// add space for horizontal scrollbar
if ( m_scrollBar[0] && (m_windowStyle & wxHSCROLL) )
tsize.IncBy(0, GTKGetPreferredSize(GTK_WIDGET(m_scrollBar[0])).y + 3);
}
- // hardcode borders, margins, etc
- tsize.IncBy(5, 5);
+ if ( !HasFlag(wxBORDER_NONE) )
+ {
+ // hardcode borders, margins, etc
+ tsize.IncBy(5, 4);
+ }
}
- // Perhaps the user wants something different from CharHeight
+ // Perhaps the user wants something different from CharHeight, or ylen
+ // is used as the height of a multiline text.
if ( ylen > 0 )
tsize.IncBy(0, ylen - cHeight);
wxVisualAttributes
wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
{
- return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true);
+ return GetDefaultAttributesFromGTKWidget(gtk_entry_new(), true);
}
#endif // wxUSE_TEXTCTRL