diff --git a/headers/os/interface/View.h b/headers/os/interface/View.h index 42e7d5e402..8418f03e21 100644 --- a/headers/os/interface/View.h +++ b/headers/os/interface/View.h @@ -554,6 +554,7 @@ public: void EnableLayoutInvalidation(); void DisableLayoutInvalidation(); + bool IsLayoutInvalidationDisabled(); bool IsLayoutValid() const; void ResetLayoutInvalidation(); diff --git a/src/kits/interface/Layout.cpp b/src/kits/interface/Layout.cpp index 6b873726e7..ded10e2023 100644 --- a/src/kits/interface/Layout.cpp +++ b/src/kits/interface/Layout.cpp @@ -301,6 +301,8 @@ BLayout::InvalidateLayout(bool children) // printf("BLayout(%p)::InvalidateLayout(%i) : state %x, disabled %li\n", // this, children, (unsigned int)fState, fInvalidationDisabled); + if (fTarget && fTarget->IsLayoutInvalidationDisabled()) + return; if (fInvalidationDisabled > 0 || (fState & B_LAYOUT_INVALIDATION_ILLEGAL) != 0) { return; diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp index 5078f2fc3c..87fa465557 100644 --- a/src/kits/interface/View.cpp +++ b/src/kits/interface/View.cpp @@ -4744,6 +4744,15 @@ BView::DisableLayoutInvalidation() } +bool +BView::IsLayoutInvalidationDisabled() +{ + if (fLayoutData->fLayoutInvalidationDisabled > 0) + return true; + return false; +} + + bool BView::IsLayoutValid() const {