diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/MacToolbarFrameHeader.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/MacToolbarFrameHeader.kt index 0968e2586fdb..f092507a8239 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/MacToolbarFrameHeader.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/MacToolbarFrameHeader.kt @@ -62,6 +62,7 @@ internal class MacToolbarFrameHeader(private val frame: JFrame, private fun createToolBar(): MainToolbar { val toolbar = MainToolbar() + toolbar.layoutCallBack = { updateCustomDecorationHitTestSpots() } toolbar.isOpaque = false toolbar.addComponentListener(object: ComponentAdapter() { override fun componentResized(e: ComponentEvent?) { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/toolbar/ToolbarFrameHeader.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/toolbar/ToolbarFrameHeader.kt index 7ec00abfc449..12666edddd8f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/toolbar/ToolbarFrameHeader.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/customFrameDecorations/header/toolbar/ToolbarFrameHeader.kt @@ -118,6 +118,7 @@ internal class ToolbarFrameHeader(frame: JFrame, ideMenu: IdeMenuBar) : FrameHea removeToolbar() val toolbar = MainToolbar() + toolbar.layoutCallBack = { updateCustomDecorationHitTestSpots() } toolbar.init(toolbarActionGroups) toolbar.isOpaque = false toolbar.addComponentListener(contentResizeListener) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/headertoolbar/MainToolbar.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/headertoolbar/MainToolbar.kt index 5b01ab27dbb6..29194fe5be8a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/headertoolbar/MainToolbar.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/headertoolbar/MainToolbar.kt @@ -31,9 +31,12 @@ import javax.swing.JComponent import javax.swing.JPanel internal class MainToolbar: JPanel(HorizontalLayout(10)) { + private val disposable = Disposer.newDisposable() private val mainMenuButton: MainMenuButton? + var layoutCallBack : LayoutCallBack? = null + init { background = JBUI.CurrentTheme.CustomFrameDecorations.mainToolbarBackground(true) isOpaque = true @@ -94,7 +97,7 @@ internal class MainToolbar: JPanel(HorizontalLayout(10)) { } private fun createActionBar(group: ActionGroup): JComponent { - val toolbar = MyActionToolbarImpl(group = group) + val toolbar = MyActionToolbarImpl(group, layoutCallBack) toolbar.setActionButtonBorder(JBUI.Borders.empty(mainToolbarButtonInsets())) toolbar.setCustomButtonLook(HeaderToolbarButtonLook()) @@ -108,7 +111,9 @@ internal class MainToolbar: JPanel(HorizontalLayout(10)) { } } -private class MyActionToolbarImpl(group: ActionGroup) : ActionToolbarImpl(ActionPlaces.MAIN_TOOLBAR, group, true) { +typealias LayoutCallBack = () -> Unit + +private class MyActionToolbarImpl(group: ActionGroup, val layoutCallBack: LayoutCallBack?) : ActionToolbarImpl(ActionPlaces.MAIN_TOOLBAR, group, true) { init { updateFont() @@ -119,6 +124,11 @@ private class MyActionToolbarImpl(group: ActionGroup) : ActionToolbarImpl(Action for (i in 0 until bounds.size) fitRectangle(bounds[i], getComponent(i)) } + override fun doLayout() { + super.doLayout() + layoutCallBack?.invoke() + } + private fun fitRectangle(rect: Rectangle, cmp: Component) { val minSize = ActionToolbar.experimentalToolbarMinimumButtonSize() if (!isSeparator(cmp)) rect.width = Integer.max(rect.width, minSize.width)