diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSessionListener.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSessionListener.java index 5a004902132b..32714bde804e 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSessionListener.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSessionListener.java @@ -32,6 +32,11 @@ public interface XDebugSessionListener extends EventListener { default void settingsChanged() { } + + @ApiStatus.Internal + default void settingsChangedFromFrontend() { + settingsChanged(); + } default void breakpointsMuted(boolean muted) { } diff --git a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebugSessionApi.kt b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebugSessionApi.kt index 07e844bac709..cca802f388b8 100644 --- a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebugSessionApi.kt +++ b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebugSessionApi.kt @@ -176,7 +176,7 @@ internal class BackendXDebugSessionApi : XDebugSessionApi { override suspend fun triggerUpdate(sessionId: XDebugSessionId) { val session = sessionId.findValue() ?: return withContext(Dispatchers.EDT) { - session.rebuildViews() + session.frontendUpdate() } } diff --git a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebuggerManagerApi.kt b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebuggerManagerApi.kt index 36f3641a0a65..c1fc9d356e03 100644 --- a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebuggerManagerApi.kt +++ b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/BackendXDebuggerManagerApi.kt @@ -155,6 +155,10 @@ internal class BackendXDebuggerManagerApi : XDebuggerManagerApi { rawEvents.trySend { XDebuggerSessionEvent.SettingsChanged } } + override fun settingsChangedFromFrontend() { + // Ignore changes from the frontend side, they're already handled in FrontendXDebuggerSession + } + override fun breakpointsMuted(muted: Boolean) { rawEvents.trySend { XDebuggerSessionEvent.BreakpointsMuted(muted) } } diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt index 3e713bce8d8d..f1f80408366c 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/FrontendXDebuggerSession.kt @@ -447,7 +447,9 @@ class FrontendXDebuggerSession private constructor( } override fun rebuildViews() { - cs.launch { + cs.launch(Dispatchers.EDT) { + // trigger optimistically + eventsDispatcher.multicaster.settingsChanged() XDebugSessionApi.getInstance().triggerUpdate(id) } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.kt index 19d4b8a81951..8d5cc5f2a925 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.kt @@ -304,6 +304,10 @@ class XDebugSessionImpl @JvmOverloads constructor( myDispatcher.getMulticaster().settingsChanged() } + fun frontendUpdate() { + myDispatcher.getMulticaster().settingsChangedFromFrontend() + } + override fun getRunProfile(): RunProfile? { return if (this.executionEnvironment != null) executionEnvironment.runProfile else null }