From 61053de43be7f3fdfbba72544af6b3c27abb721a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 30 Mar 2007 12:14:23 +0000 Subject: [PATCH] don't call gtk_label_set_line_wrap() from DoGetBestSize() as this results in an infinite resizing loop when the control is inside a GTK+ widget doing its own layout (such as wxToolBar) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45131 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 3 +++ src/gtk/stattext.cpp | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index e3f0d309f9..b4178c01a5 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -123,9 +123,12 @@ wxMSW: - Don't lose combobox text when it's opened and closed (Kolya Kosenko) - Corrected GetChecked() for events from checkable menu items (smanders) - Fixed popup menus under Windows NT 4 +- Fixed bug in wxThread::Wait() in console applications introduced in 2.8.3 +- Compilation fixed with WXWIN_COMPATIBILITY_2_6==0 wxGTK: +- Fix infinite loop when adding a wxStaticText control to a toolbar - Fix wxNO_BORDER style for wxRadioBox (David Hart) diff --git a/src/gtk/stattext.cpp b/src/gtk/stattext.cpp index 6fe31c64c6..67eec8eef5 100644 --- a/src/gtk/stattext.cpp +++ b/src/gtk/stattext.cpp @@ -178,8 +178,11 @@ wxSize wxStaticText::DoGetBestSize() const // Do not return any arbitrary default value... wxASSERT_MSG( m_widget, wxT("wxStaticText::DoGetBestSize called before creation") ); - // GetBestSize is supposed to return unwrapped size - gtk_label_set_line_wrap( GTK_LABEL(m_widget), FALSE ); + // GetBestSize is supposed to return unwrapped size but calling + // gtk_label_set_line_wrap() from here is a bad idea as it queues another + // size request by calling gtk_widget_queue_resize() and we end up in + // infinite loop sometimes (notably when the control is in a toolbar) + GTK_LABEL(m_widget)->wrap = FALSE; GtkRequisition req; req.width = -1; @@ -187,7 +190,7 @@ wxSize wxStaticText::DoGetBestSize() const (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (m_widget, &req ); - gtk_label_set_line_wrap( GTK_LABEL(m_widget), TRUE ); + GTK_LABEL(m_widget)->wrap = TRUE; // restore old value // Adding 1 to width to workaround GTK sometimes wrapping the text needlessly return wxSize (req.width+1, req.height); -- 2.45.2