#include "gtk/gtk.h"
#include "gdk/gdkkeysyms.h"
+//-----------------------------------------------------------------------------
+// idle system
+//-----------------------------------------------------------------------------
+
+extern void wxapp_install_idle_handler();
+extern bool g_isIdle;
+
//-----------------------------------------------------------------------------
// data
//-----------------------------------------------------------------------------
static void
gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
+ if (g_isIdle) wxapp_install_idle_handler();
+
if (!win->m_hasVMT) return;
win->SetModified();
static void
gtk_scrollbar_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
- if (!win->m_hasVMT) return;
-
+ if (g_isIdle) wxapp_install_idle_handler();
+
win->CalculateScrollbar();
+
+ if (!win->m_hasVMT) return;
}
//-----------------------------------------------------------------------------
m_vScrollbarVisible = FALSE;
bool multi_line = (style & wxTE_MULTILINE) != 0;
- if ( multi_line )
+ if (multi_line)
{
/* a multi-line edit control: create a vertical scrollbar by default and
horizontal if requested */
(GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
0, 0);
+ /* always wrap words */
+ gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
+
/* put the horizontal scrollbar in the lower left hand corner */
if (bHasHScrollbar)
{
GTK_FILL,
0, 0);
gtk_widget_show(hscrollbar);
- }
-
- /* we create the vertical scrollbar on demand */
- m_vScrollbar = (GtkWidget*) NULL;
+#if (GTK_MINOR_VERSION > 0)
+ /* don't wrap lines, otherwise we wouldn't need the scrollbar */
+ gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
+#endif
+ }
+
+ /* finally, put the vertical scrollbar in the upper right corner */
+ m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
+ GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
+
+ gtk_table_attach(GTK_TABLE(m_widget), m_vScrollbar, 1, 2, 0, 1,
+ GTK_FILL,
+ (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
+ 0, 0);
}
else
{
PostCreation();
if (multi_line)
- {
- gtk_widget_realize(m_text);
gtk_widget_show(m_text);
- }
/* we want to be notified about text changes */
gtk_signal_connect( GTK_OBJECT(m_text), "changed",
GTK_SIGNAL_FUNC(gtk_text_changed_callback), (gpointer)this);
+ if (multi_line)
+ {
+ gtk_signal_connect(GTK_OBJECT(GTK_TEXT(m_text)->vadj), "changed",
+ (GtkSignalFunc) gtk_scrollbar_changed_callback, (gpointer) this );
+ }
+
if (!value.IsEmpty())
{
gint tmp = 0;
Show( TRUE );
- if (multi_line)
- {
- gtk_signal_connect(GTK_OBJECT(GTK_TEXT(m_text)->vadj), "changed",
- (GtkSignalFunc) gtk_scrollbar_changed_callback, (gpointer) this );
- }
-
return TRUE;
}
{
if (!m_vScrollbarVisible)
{
- if (!m_vScrollbar)
- {
- /* finally, put the vertical scrollbar in the upper right corner */
- m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
- GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
-
- gtk_table_attach(GTK_TABLE(m_widget), m_vScrollbar, 1, 2, 0, 1,
- GTK_FILL,
- (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
- 0, 0);
- }
-
gtk_widget_show( m_vScrollbar );
m_vScrollbarVisible = TRUE;
}
else
{
- tmp = gtk_entry_get_text( GTK_ENTRY(m_text) );
+ tmp = wxString(gtk_entry_get_text( GTK_ENTRY(m_text) ),*wxConv_current);
}
return tmp;
}
wxCHECK_RET( m_text != NULL, _T("invalid text ctrl") );
wxControl::SetBackgroundColour( colour );
+
+ if (!m_widget->window) return;
wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
if (sysbg.Red() == colour.Red() &&
if (m_windowStyle & wxTE_MULTILINE)
{
GdkWindow *window = GTK_TEXT(m_text)->text_area;
+ if (!window) return;
m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
gdk_window_set_background( window, m_backgroundColour.GetColor() );
gdk_window_clear( window );