#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 */
gtk_widget_show(hscrollbar);
}
- /* we create the vertical scrollbar on demand */
- m_vScrollbar = (GtkWidget*) NULL;
-
+ /* 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;
}