https://bugs.kde.org/show_bug.cgi?id=471286

Arjen Hiemstra <ahiems...@heimr.nl> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED
      Latest Commit|                            |https://invent.kde.org/fram
                   |                            |eworks/kirigami/-/commit/04
                   |                            |b0ccabcbf51eb08883671a6f62f
                   |                            |2564a6cc12e

--- Comment #3 from Arjen Hiemstra <ahiems...@heimr.nl> ---
Git commit 04b0ccabcbf51eb08883671a6f62f2564a6cc12e by Arjen Hiemstra.
Committed on 26/06/2023 at 10:07.
Pushed by ahiemstra into branch 'master'.

toolbarlayout: Buffer calls to calculateImplicitSize()

`calculateImplicitSize()` is called by ToolBarLayoutDelegate to update
the implicit size after the delegate knows what its actual size is.
However, since it needs the delegates to determine the size, it will
call `createDelegates()` to update the list of delegates. This works
fine if the delegate is properly async, unfortunately in some cases Qt
will force the delegate creation into sync mode as there is no async
incubation controller. This then creates an infinite recursion as
ToolBarLayout does not yet know that the delegate exists and tries to
create a new one.

To avoid that, we can change implicit size calculation to be a part of
the layout process, only recalculating it when actually needed. Any
explicit calls to recalculate the implicit size will instead invalidate
the implicit size and call `polish()`. This makes relayouting calls
avoid the loop while ensuring layouting has the most up to date
information about delegate sizes.

M  +24   -16   src/toolbarlayout.cpp

https://invent.kde.org/frameworks/kirigami/-/commit/04b0ccabcbf51eb08883671a6f62f2564a6cc12e

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to