diff --git a/python/jupyterlab_widgets/src/manager.ts b/python/jupyterlab_widgets/src/manager.ts index 355f00ab02..8c5fc9840f 100644 --- a/python/jupyterlab_widgets/src/manager.ts +++ b/python/jupyterlab_widgets/src/manager.ts @@ -112,6 +112,9 @@ export abstract class LabWidgetManager super.disconnect(); this._restoredStatus = false; } + get disconnected() { + return !this._restoredStatus; + } protected async _loadFromKernel(): Promise { if (!this.kernel) { @@ -471,6 +474,11 @@ export class KernelWidgetManager extends LabWidgetManager { } } + static existsWithActiveKenel(id: string) { + const widgetManager = Private.kernelWidgetManagers.get(id); + return !widgetManager?.disconnected; + } + _handleKernelStatusChange( sender: Kernel.IKernelConnection, status: Kernel.Status diff --git a/python/jupyterlab_widgets/src/plugin.ts b/python/jupyterlab_widgets/src/plugin.ts index 932d564338..e816c6f38b 100644 --- a/python/jupyterlab_widgets/src/plugin.ts +++ b/python/jupyterlab_widgets/src/plugin.ts @@ -25,6 +25,7 @@ import { DisposableDelegate } from '@lumino/disposable'; import { WidgetRenderer } from './renderer'; import { + KernelWidgetManager, LabWidgetManager, WIDGET_VIEW_MIMETYPE, WidgetManager, @@ -103,6 +104,22 @@ function activateWidgetExtension( const { commands } = app; const trans = (translator ?? nullTranslator).load('jupyterlab_widgets'); + app.serviceManager.kernels.runningChanged.connect((models) => { + for (const model of models.running()) { + if ( + model && + model.name === 'python3' && + model.execution_state !== 'starting' && + !KernelWidgetManager.existsWithActiveKenel(model.id) + ) { + const kernel = app.serviceManager.kernels.connectTo({ model: model }); + if (kernel.handleComms) { + new KernelWidgetManager(kernel); + } + } + } + }); + if (settingRegistry !== null) { settingRegistry .load(managerPlugin.id)