}
}
-//-----------------------------------------------------------------------------
-// "expose_event" from scrolled window and textview
-//-----------------------------------------------------------------------------
-
-extern "C" {
-static gboolean
-gtk_text_exposed_callback( GtkWidget * WXUNUSED(widget),
- GdkEventExpose * WXUNUSED(event),
- wxTextCtrl * WXUNUSED(win) )
-{
- return TRUE;
-}
-}
-
-
//-----------------------------------------------------------------------------
// wxTextCtrl
//-----------------------------------------------------------------------------
return;
}
+ if (value.IsEmpty())
+ {
+ if ( !(flags & SetValue_SendEvent) )
+ EnableTextChangedEvents(false);
+
+ gtk_text_buffer_set_text( m_buffer, "", 0 );
+
+ if ( !(flags & SetValue_SendEvent) )
+ EnableTextChangedEvents(true);
+
+ return;
+ }
+
+#ifdef wxUSE_UNICODE
+ const wxCharBuffer buffer(value.utf8_str());
+#else
wxFontEncoding enc = m_defaultStyle.HasFont()
? m_defaultStyle.GetFont().GetEncoding()
: wxFONTENCODING_SYSTEM;
wxLogWarning(_("Failed to set text in the text control."));
return;
}
+#endif
if ( !(flags & SetValue_SendEvent) )
{
return;
}
+#ifdef wxUSE_UNICODE
+ const wxCharBuffer buffer(text.utf8_str());
+#else
// check if we have a specific style for the current position
wxFontEncoding enc = wxFONTENCODING_SYSTEM;
wxTextAttr style;
wxLogWarning(_("Failed to insert text in the control."));
return;
}
+#endif
// First remove the selection if there is one
// TODO: Is there an easier GTK specific way to do this?
{
wxCHECK_RET(m_text != NULL, wxT("invalid text ctrl"));
+ wxWindow::DoFreeze();
+
if ( HasFlag(wxTE_MULTILINE) )
{
- // freeze textview updates and remove buffer
- g_signal_connect (m_text, "expose_event",
- G_CALLBACK (gtk_text_exposed_callback), this);
- g_signal_connect (m_widget, "expose_event",
- G_CALLBACK (gtk_text_exposed_callback), this);
- gtk_widget_set_sensitive(m_widget, false);
+ GTKFreezeWidget(m_text);
+
+ // removing buffer dramatically speeds up insertion:
g_object_ref(m_buffer);
GtkTextBuffer* buf_new = gtk_text_buffer_new(NULL);
GtkTextMark* mark = GTK_TEXT_VIEW(m_text)->first_para_mark;
{
if ( HasFlag(wxTE_MULTILINE) )
{
- // Reattach buffer and thaw textview updates
+ // reattach buffer:
gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), m_buffer);
g_object_unref(m_buffer);
- gtk_widget_set_sensitive(m_widget, true);
- g_signal_handlers_disconnect_by_func (m_widget,
- (gpointer) gtk_text_exposed_callback, this);
- g_signal_handlers_disconnect_by_func (m_text,
- (gpointer) gtk_text_exposed_callback, this);
+
if (m_showPositionOnThaw != NULL)
{
gtk_text_view_scroll_mark_onscreen(
GTK_TEXT_VIEW(m_text), m_showPositionOnThaw);
m_showPositionOnThaw = NULL;
}
+
+ // and thaw the window
+ GTKThawWidget(m_text);
}
+
+ wxWindow::DoThaw();
}
// ----------------------------------------------------------------------------