First - sorry for cross posting - but it is of interest to both wxPerl and Padre lists.

Around August 2009 ( so after wxWidgets 2.8.10 ) the following changeset was applied to wxWidgets 2.8 branch.

http://trac.wxwidgets.org/changeset/62816/wxWidgets/branches/WX_2_8_BRANCH/src/aui/auibook.cpp

It is a partial backport from trunk I think.

The part currently causing problems is:

if (m_tabs->IsFrozen() || m_tabs->GetParent()->IsFrozen())
    return;

Padre (as an example) uses Wx::WindowUpdateLocker on the top level frame to compress window updates and avoid some flicker.

The issue is that on Windows, Wx::WindowUpdateLocker calls ->Freeze on the top level frame and all of its children. That is because on Windows, the system call used with Freeze does not prevent child windows updating.

On GTK, the system call used with Freeze does prevent child windows updating - and so wxWidgets does not call ->Freeze on child windows.

The net effect is that on MS Windows, wxAuiNotebook does not update as expected because the code exits as child windows have IsFrozen set at the wxWidgets level - but on GTK updates happen as expected - wxAuiNotebook instances do not have IsFrozen set at wxWidgets level.

I think that this means wxAuiNotebook is broken in 2.8.11 / 2.8.12 so will propose a change on wxWidgets trac.

Even if this change is accepted, wxWidgets 2.8.13 will be some way off.

Should we incorporate a patch into Alien::wxWidgets ?

I think as a general rule, patching wxWidgets other than to allow compilation is a bad idea.

Patching to fix this particular issue on 2.8.12 also has problems - similar changes are in the 2.9/trunk branch so it is a change that needs to be worked with eventually - however, new Freeze and Thaw methods are implemented in the wxAUI objects in 2.9/trunk which I'd assume provide a way of working with this change.

But - it seems wrong to have the Padre folks struggling for a workaround to a change in wxWidgets that I'm fairly sure needs removing in the 2.8 branch.

Everyone's thoughts - to patch or not to patch ? Final decision would be Mattia's of course as it is not a regular step to patch wxWidgets.

Regards

Mark

Reply via email to