mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
replace ActionToolbarAppListener with ComponentTreeWatcher
A better fix for IDEA-323550 that does not involve a single-client topic and a dedicated listener interface. GitOrigin-RevId: c2652417110618e43f6f80863bf16bf555860217
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5daf13be28
commit
2f4d825f20
-10
@@ -40,7 +40,6 @@ import com.intellij.util.concurrency.EdtScheduledExecutorService;
|
||||
import com.intellij.util.concurrency.ThreadingAssertions;
|
||||
import com.intellij.util.concurrency.annotations.RequiresEdt;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.messages.Topic;
|
||||
import com.intellij.util.ui.*;
|
||||
import com.intellij.util.ui.update.UiNotifyConnector;
|
||||
import org.intellij.lang.annotations.MagicConstant;
|
||||
@@ -72,14 +71,6 @@ import java.util.function.Supplier;
|
||||
public class ActionToolbarImpl extends JPanel implements ActionToolbar, QuickActionProvider, AlphaAnimated {
|
||||
private static final Logger LOG = Logger.getInstance(ActionToolbarImpl.class);
|
||||
|
||||
@Topic.AppLevel
|
||||
public static final Topic<ActionToolbarAppListener> TOPIC = new Topic<>(ActionToolbarAppListener.class, Topic.BroadcastDirection.NONE);
|
||||
|
||||
public interface ActionToolbarAppListener {
|
||||
default void toolbarAdded(@NotNull ActionToolbar toolbar) {
|
||||
}
|
||||
}
|
||||
|
||||
private static final Set<ActionToolbarImpl> ourToolbars = new LinkedHashSet<>();
|
||||
private static final String RIGHT_ALIGN_KEY = "RIGHT_ALIGN";
|
||||
|
||||
@@ -351,7 +342,6 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar, QuickAct
|
||||
ourToolbars.add(this);
|
||||
|
||||
updateActionsOnAdd();
|
||||
ApplicationManager.getApplication().getMessageBus().syncPublisher(TOPIC).toolbarAdded(this);
|
||||
}
|
||||
|
||||
protected void updateActionsOnAdd() {
|
||||
|
||||
@@ -17,10 +17,7 @@ import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.actionSystem.ex.ActionUtil
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButton
|
||||
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl
|
||||
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.ActionToolbarAppListener
|
||||
import com.intellij.openapi.actionSystem.impl.FusAwareAction
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.ModalityState
|
||||
import com.intellij.openapi.diagnostic.debug
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
@@ -38,7 +35,7 @@ import com.intellij.toolWindow.InternalDecoratorImpl
|
||||
import com.intellij.toolWindow.ToolWindowEventSource
|
||||
import com.intellij.toolWindow.ToolWindowProperty
|
||||
import com.intellij.ui.ClientProperty
|
||||
import com.intellij.ui.ComponentUtil
|
||||
import com.intellij.ui.ComponentTreeWatcher
|
||||
import com.intellij.ui.LayeredIcon
|
||||
import com.intellij.ui.UIBundle
|
||||
import com.intellij.ui.content.Content
|
||||
@@ -49,6 +46,7 @@ import com.intellij.ui.content.impl.ContentImpl
|
||||
import com.intellij.ui.content.impl.ContentManagerImpl
|
||||
import com.intellij.ui.content.tabs.TabbedContentAction
|
||||
import com.intellij.ui.scale.JBUIScale
|
||||
import com.intellij.util.ArrayUtil
|
||||
import com.intellij.util.Consumer
|
||||
import com.intellij.util.ModalityUiUtil
|
||||
import com.intellij.util.SingleAlarm
|
||||
@@ -204,18 +202,14 @@ internal class ToolWindowImpl(val toolWindowManager: ToolWindowManagerImpl,
|
||||
onMovedOrResized()
|
||||
}
|
||||
})
|
||||
|
||||
ApplicationManager.getApplication().messageBus.connect(disposable).subscribe(
|
||||
ActionToolbarImpl.TOPIC,
|
||||
object : ActionToolbarAppListener {
|
||||
override fun toolbarAdded(toolbar: ActionToolbar) {
|
||||
// Check if it's our toolbar to avoid traversing the whole hierarchy every time a toolbar is added somewhere.
|
||||
if (ComponentUtil.getParentOfType(InternalDecoratorImpl::class.java, toolbar.component) == decorator) {
|
||||
updateToolbarsVisibility()
|
||||
}
|
||||
object : ComponentTreeWatcher(ArrayUtil.EMPTY_CLASS_ARRAY) {
|
||||
override fun processComponent(component: Component) {
|
||||
if (component is ActionToolbar) {
|
||||
updateToolbarsVisibility()
|
||||
}
|
||||
}
|
||||
)
|
||||
override fun unprocessComponent(component: Component) = Unit
|
||||
}.register(decorator)
|
||||
|
||||
toolWindowFocusWatcher = ToolWindowFocusWatcher(toolWindow = this, component = decorator)
|
||||
contentManager.addContentManagerListener(object : ContentManagerListener {
|
||||
|
||||
Reference in New Issue
Block a user