gtk_text_iter_get_line(start) );
gtk_text_iter_forward_line(¶_end);
- wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXALIGNMENT", start, end);
+ wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXALIGNMENT", ¶_start, ¶_end);
GtkJustification align;
switch (attr.GetAlignment())
gtk_text_iter_get_line(start) );
gtk_text_iter_forward_line(¶_end);
- wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXINDENT", start, end);
+ wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXINDENT", ¶_start, ¶_end);
// Convert indent from 1/10th of a mm into pixels
float factor =
gtk_text_iter_get_line(start) );
gtk_text_iter_forward_line(¶_end);
- wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXTABS", start, end);
+ wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXTABS", ¶_start, ¶_end);
const wxArrayInt& tabs = attr.GetTabs();
- wxString tagname = _T("WXTABS");
+ wxString tagname = wxT("WXTABS");
g_snprintf(buf, sizeof(buf), "WXTABS");
for (size_t i = 0; i < tabs.GetCount(); i++)
- tagname += wxString::Format(_T(" %d"), tabs[i]);
+ tagname += wxString::Format(wxT(" %d"), tabs[i]);
const wxWX2MBbuf buftag = tagname.utf8_str();
}
}
+//-----------------------------------------------------------------------------
+// "populate_popup" from text control and "unmap" from its poup menu
+//-----------------------------------------------------------------------------
+
+extern "C" {
+static void
+gtk_textctrl_popup_unmap( GtkMenu *WXUNUSED(menu), wxTextCtrl* win )
+{
+ win->GTKEnableFocusOutEvent();
+}
+}
+
+extern "C" {
+static void
+gtk_textctrl_populate_popup( GtkEntry *WXUNUSED(entry), GtkMenu *menu, wxTextCtrl *win )
+{
+ win->GTKDisableFocusOutEvent();
+
+ g_signal_connect (menu, "unmap", G_CALLBACK (gtk_textctrl_popup_unmap), win );
+}
+}
//-----------------------------------------------------------------------------
// "changed"
extern "C" {
static void
-gtk_text_changed_callback( GtkWidget * WXUNUSED(widget), wxTextCtrl *win )
+gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxTextCtrl *win )
{
if ( win->IgnoreTextUpdate() )
return;
GTKSetWrapMode();
- GtkScrolledWindowSetBorder(m_widget, style);
+ GTKScrolledWindowSetBorder(m_widget, style);
gtk_widget_add_events( GTK_WIDGET(m_text), GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK );
G_CALLBACK (gtk_text_changed_callback), this);
}
+ // Catch to disable focus out handling
+ g_signal_connect (m_text, "populate_popup",
+ G_CALLBACK (gtk_textctrl_populate_popup),
+ this);
+
if (!value.empty())
{
SetValue( value );
return GTK_EDITABLE(m_text);
}
+GtkEntry *wxTextCtrl::GetEntry() const
+{
+ return GTK_ENTRY(m_text);
+}
+
// ----------------------------------------------------------------------------
// flags handling
// ----------------------------------------------------------------------------
}
gtk_widget_set_sensitive( m_text, enable );
+ SetCursor(enable ? wxCursor(wxCURSOR_IBEAM) : wxCursor());
return true;
}
gtk_text_buffer_get_iter_at_offset( m_buffer, &fromi, from );
gtk_text_buffer_get_iter_at_offset( m_buffer, &toi, to );
- gtk_text_buffer_place_cursor( m_buffer, &toi );
- gtk_text_buffer_move_mark_by_name( m_buffer, "selection_bound", &fromi );
+ gtk_text_buffer_select_range( m_buffer, &fromi, &toi );
}
else // single line
{
//
// TODO: it can be implemented much more efficiently for GTK2
wxASSERT_MSG( IsMultiLine(),
- _T("shouldn't be called for single line controls") );
+ wxT("shouldn't be called for single line controls") );
wxString value = GetValue();
if ( !value.empty() )
gint l = gtk_text_buffer_get_char_count( m_buffer );
wxCHECK_MSG( start >= 0 && end <= l, false,
- _T("invalid range in wxTextCtrl::SetStyle") );
+ wxT("invalid range in wxTextCtrl::SetStyle") );
GtkTextIter starti, endi;
gtk_text_buffer_get_iter_at_offset( m_buffer, &starti, start );