From 9154a136d5e1d79a4be2cf012e4a815fdc6df3ff Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sat, 14 Apr 2007 10:19:26 +0000 Subject: [PATCH] fixing the shrinking embedded controls git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45451 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/toolbar.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 88c664f9bc..8e35a2c831 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -607,6 +607,7 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, item = (ControlToolbarItem*) malloc(sizeof(ControlToolbarItem)) ; item->toolbarItem = toolbarItem ; + item->lastValidSize = wxSize(-1,-1); item->viewRef = NULL ; SetEventParameter( inEvent, kEventParamHIObjectInstance, typeVoidPtr, sizeof( void * ), &item ); @@ -681,16 +682,21 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, wxWindow* wxwindow = wxFindControlFromMacControl(object->viewRef ) ; if ( wxwindow ) { - wxSize sz = wxwindow->GetSize() ; - sz.x -= wxwindow->MacGetLeftBorderSize() + wxwindow->MacGetRightBorderSize(); - sz.y -= wxwindow->MacGetTopBorderSize() + wxwindow->MacGetBottomBorderSize(); - // during toolbar layout the native window sometimes gets negative sizes - // so we always keep the last valid size here, to make sure we survive the - // shuffle ... - if ( sz.x > 0 && sz.y > 0 ) - object->lastValidSize = sz ; - else - sz = object->lastValidSize ; + // during toolbar layout the native window sometimes gets negative sizes, + // sometimes it just gets shrunk behind our back, so in order to avoid + // ever shrinking more, once a valid size is captured, we keep it + + wxSize sz = object->lastValidSize; + if ( sz.x <= 0 || sz.y <= 0 ) + { + sz = wxwindow->GetSize() ; + sz.x -= wxwindow->MacGetLeftBorderSize() + wxwindow->MacGetRightBorderSize(); + sz.y -= wxwindow->MacGetTopBorderSize() + wxwindow->MacGetBottomBorderSize(); + if ( sz.x > 0 && sz.y > 0 ) + object->lastValidSize = sz ; + else + sz = wxSize(0,0) ; + } HISize min, max; min.width = max.width = sz.x ; -- 2.45.2