Skip to content

Commit 1cf0e15

Browse files
authored
Handle currentWidget in KernelWidgetTracker (#206)
* Fix handling of current notebook widget * improve handling of initial currentWidget
1 parent 0fadc0b commit 1cf0e15

File tree

4 files changed

+33
-17
lines changed

4 files changed

+33
-17
lines changed

packages/labextension/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ const kernelUsagePlugin: JupyterFrontEndPlugin<void> = {
172172
});
173173

174174
panel = new KernelUsagePanel({
175-
currentChanged: tracker.currentChanged,
176-
trans: trans,
175+
tracker,
176+
trans,
177177
});
178178
shell.add(panel, 'right', { rank: 200 });
179179
}

packages/labextension/src/panel.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import { Message } from '@lumino/messaging';
2-
import { ISignal } from '@lumino/signaling';
32
import { TranslationBundle } from '@jupyterlab/translation';
43
import { StackedPanel } from '@lumino/widgets';
54
import { LabIcon } from '@jupyterlab/ui-components';
65
import { KernelUsageWidget } from './widget';
7-
import { IWidgetWithSession } from './types';
86
import { KernelWidgetTracker } from './tracker';
97

108
import tachometer from '../style/tachometer.svg';
@@ -13,7 +11,7 @@ const PANEL_CLASS = 'jp-KernelUsage-view';
1311

1412
export class KernelUsagePanel extends StackedPanel {
1513
constructor(props: {
16-
currentChanged: ISignal<KernelWidgetTracker, IWidgetWithSession | null>;
14+
tracker: KernelWidgetTracker;
1715
trans: TranslationBundle;
1816
}) {
1917
super();
@@ -27,7 +25,7 @@ export class KernelUsagePanel extends StackedPanel {
2725
this.title.closable = true;
2826

2927
const widget = new KernelUsageWidget({
30-
currentChanged: props.currentChanged,
28+
tracker: props.tracker,
3129
panel: this,
3230
trans: props.trans,
3331
});

packages/labextension/src/tracker.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,33 @@ export class KernelWidgetTracker {
1616
const widget = update.newValue;
1717
if (widget && hasKernelSession(widget)) {
1818
this._currentChanged.emit(widget);
19+
this._currentWidget = widget;
1920
} else {
2021
this._currentChanged.emit(null);
22+
this._currentWidget = null;
2123
}
2224
});
2325
} else {
2426
notebookTracker.currentChanged.connect((_, widget) => {
2527
this._currentChanged.emit(widget);
28+
this._currentWidget = widget;
2629
});
2730
if (consoleTracker) {
2831
consoleTracker.currentChanged.connect((_, widget) => {
2932
this._currentChanged.emit(widget);
33+
this._currentWidget = widget;
3034
});
3135
}
3236
}
37+
// handle an existing current widget in case the KernelWidgetTracker
38+
// is created a bit later, or if there is already a Notebook widget available
39+
// on page load like in Notebook 7.
40+
if (labShell?.currentWidget && hasKernelSession(labShell?.currentWidget)) {
41+
this._currentWidget = labShell.currentWidget;
42+
} else {
43+
this._currentWidget =
44+
notebookTracker.currentWidget ?? consoleTracker?.currentWidget ?? null;
45+
}
3346
}
3447

3548
/**
@@ -44,10 +57,16 @@ export class KernelWidgetTracker {
4457
return this._currentChanged;
4558
}
4659

60+
get currentWidget(): IWidgetWithSession | null {
61+
return this._currentWidget;
62+
}
63+
4764
private _currentChanged: Signal<
4865
KernelWidgetTracker,
4966
IWidgetWithSession | null
5067
>;
68+
69+
private _currentWidget: IWidgetWithSession | null = null;
5170
}
5271

5372
/**

packages/labextension/src/widget.tsx

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import React, { useRef, useState, useEffect } from 'react';
2-
import { ISignal } from '@lumino/signaling';
32
import { ReactWidget, ISessionContext } from '@jupyterlab/apputils';
43
import { IChangedArgs } from '@jupyterlab/coreutils';
54
import { Kernel } from '@jupyterlab/services';
@@ -123,7 +122,7 @@ const BlankReason = (props: {
123122
};
124123

125124
const KernelUsage = (props: {
126-
currentChanged: ISignal<KernelWidgetTracker, IWidgetWithSession | null>;
125+
tracker: KernelWidgetTracker;
127126
panel: KernelUsagePanel;
128127
trans: TranslationBundle;
129128
}) => {
@@ -234,9 +233,12 @@ const KernelUsage = (props: {
234233
}
235234
}
236235
};
237-
props.currentChanged.connect(notebookChangeCallback);
236+
props.tracker.currentChanged.connect(notebookChangeCallback);
237+
if (props.tracker.currentWidget) {
238+
notebookChangeCallback(props.tracker, props.tracker.currentWidget);
239+
}
238240
return () => {
239-
props.currentChanged.disconnect(notebookChangeCallback);
241+
props.tracker.currentChanged.disconnect(notebookChangeCallback);
240242
// In the ideal world we would disconnect kernelChangeCallback from
241243
// last panel here, but this can lead to a race condition. Instead,
242244
// we make sure there is ever only one callback active by holding
@@ -368,19 +370,16 @@ const KernelUsage = (props: {
368370
};
369371

370372
export class KernelUsageWidget extends ReactWidget {
371-
private _currentChanged: ISignal<
372-
KernelWidgetTracker,
373-
IWidgetWithSession | null
374-
>;
373+
private _tracker: KernelWidgetTracker;
375374
private _panel: KernelUsagePanel;
376375
private _trans: TranslationBundle;
377376
constructor(props: {
378-
currentChanged: ISignal<KernelWidgetTracker, IWidgetWithSession | null>;
377+
tracker: KernelWidgetTracker;
379378
panel: KernelUsagePanel;
380379
trans: TranslationBundle;
381380
}) {
382381
super();
383-
this._currentChanged = props.currentChanged;
382+
this._tracker = props.tracker;
384383
this._panel = props.panel;
385384
this._trans = props.trans;
386385
this.addClass(KERNEL_USAGE_CLASS);
@@ -389,7 +388,7 @@ export class KernelUsageWidget extends ReactWidget {
389388
protected render(): React.ReactElement<any> {
390389
return (
391390
<KernelUsage
392-
currentChanged={this._currentChanged}
391+
tracker={this._tracker}
393392
panel={this._panel}
394393
trans={this._trans}
395394
/>

0 commit comments

Comments
 (0)