Fix for wxTextCtrl::GetSelection for singel line controls in GTK2 mode
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22692 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1185,28 +1185,42 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
|
||||
{
|
||||
wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
|
||||
|
||||
gint from, to;
|
||||
gint from = -1;
|
||||
gint to = -1;
|
||||
bool haveSelection = FALSE;
|
||||
|
||||
#ifdef __WXGTK20__
|
||||
if (m_windowStyle & wxTE_MULTILINE)
|
||||
{
|
||||
GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (m_text));
|
||||
GtkTextIter ifrom, ito;
|
||||
if (!gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito))
|
||||
#else
|
||||
if ( !(GTK_EDITABLE(m_text)->has_selection) )
|
||||
#endif
|
||||
if ( gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito) )
|
||||
{
|
||||
from =
|
||||
to = GetInsertionPoint();
|
||||
}
|
||||
else // got selection
|
||||
{
|
||||
#ifdef __WXGTK20__
|
||||
haveSelection = TRUE;
|
||||
from = gtk_text_iter_get_offset(&ifrom);
|
||||
to = gtk_text_iter_get_offset(&ito);
|
||||
#else
|
||||
}
|
||||
}
|
||||
else // not multi-line
|
||||
{
|
||||
if ( gtk_editable_get_selection_bounds( GTK_EDITABLE(m_text),
|
||||
&from, &to) )
|
||||
{
|
||||
haveSelection = TRUE;
|
||||
}
|
||||
}
|
||||
#else // not GTK2
|
||||
if ( (GTK_EDITABLE(m_text)->has_selection) )
|
||||
{
|
||||
haveSelection = TRUE;
|
||||
from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
|
||||
to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (! haveSelection )
|
||||
from = to = GetInsertionPoint();
|
||||
|
||||
if ( from > to )
|
||||
{
|
||||
// exchange them to be compatible with wxMSW
|
||||
@@ -1214,7 +1228,6 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
|
||||
from = to;
|
||||
to = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
if ( fromOut )
|
||||
*fromOut = from;
|
||||
@@ -1222,6 +1235,7 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
|
||||
*toOut = to;
|
||||
}
|
||||
|
||||
|
||||
bool wxTextCtrl::IsEditable() const
|
||||
{
|
||||
wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
|
||||
|
@@ -1185,28 +1185,42 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
|
||||
{
|
||||
wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
|
||||
|
||||
gint from, to;
|
||||
gint from = -1;
|
||||
gint to = -1;
|
||||
bool haveSelection = FALSE;
|
||||
|
||||
#ifdef __WXGTK20__
|
||||
if (m_windowStyle & wxTE_MULTILINE)
|
||||
{
|
||||
GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (m_text));
|
||||
GtkTextIter ifrom, ito;
|
||||
if (!gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito))
|
||||
#else
|
||||
if ( !(GTK_EDITABLE(m_text)->has_selection) )
|
||||
#endif
|
||||
if ( gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito) )
|
||||
{
|
||||
from =
|
||||
to = GetInsertionPoint();
|
||||
}
|
||||
else // got selection
|
||||
{
|
||||
#ifdef __WXGTK20__
|
||||
haveSelection = TRUE;
|
||||
from = gtk_text_iter_get_offset(&ifrom);
|
||||
to = gtk_text_iter_get_offset(&ito);
|
||||
#else
|
||||
}
|
||||
}
|
||||
else // not multi-line
|
||||
{
|
||||
if ( gtk_editable_get_selection_bounds( GTK_EDITABLE(m_text),
|
||||
&from, &to) )
|
||||
{
|
||||
haveSelection = TRUE;
|
||||
}
|
||||
}
|
||||
#else // not GTK2
|
||||
if ( (GTK_EDITABLE(m_text)->has_selection) )
|
||||
{
|
||||
haveSelection = TRUE;
|
||||
from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
|
||||
to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (! haveSelection )
|
||||
from = to = GetInsertionPoint();
|
||||
|
||||
if ( from > to )
|
||||
{
|
||||
// exchange them to be compatible with wxMSW
|
||||
@@ -1214,7 +1228,6 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
|
||||
from = to;
|
||||
to = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
if ( fromOut )
|
||||
*fromOut = from;
|
||||
@@ -1222,6 +1235,7 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
|
||||
*toOut = to;
|
||||
}
|
||||
|
||||
|
||||
bool wxTextCtrl::IsEditable() const
|
||||
{
|
||||
wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
|
||||
|
Reference in New Issue
Block a user