@theia/core 1.65.0-next.47 → 1.65.0-next.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/catalog.json +33 -5
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +5 -1
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/secondary-window-handler.d.ts +21 -9
- package/lib/browser/secondary-window-handler.d.ts.map +1 -1
- package/lib/browser/secondary-window-handler.js +162 -21
- package/lib/browser/secondary-window-handler.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +6 -1
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +20 -4
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/theia-dock-panel.d.ts +17 -1
- package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.js +76 -0
- package/lib/browser/shell/theia-dock-panel.js.map +1 -1
- package/lib/browser/widgets/extractable-widget.d.ts +3 -0
- package/lib/browser/widgets/extractable-widget.d.ts.map +1 -1
- package/lib/browser/widgets/extractable-widget.js.map +1 -1
- package/lib/browser/window/default-secondary-window-service.d.ts +9 -3
- package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-secondary-window-service.js +52 -11
- package/lib/browser/window/default-secondary-window-service.js.map +1 -1
- package/lib/browser/window/secondary-window-service.d.ts +15 -2
- package/lib/browser/window/secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/secondary-window-service.js +12 -1
- package/lib/browser/window/secondary-window-service.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +3 -0
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-secondary-window-service.js +5 -4
- package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
- package/lib/electron-common/electron-api.d.ts +2 -0
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js +2 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +9 -0
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/node/logger-cli-contribution.d.ts +7 -1
- package/lib/node/logger-cli-contribution.d.ts.map +1 -1
- package/lib/node/logger-cli-contribution.js +22 -10
- package/lib/node/logger-cli-contribution.js.map +1 -1
- package/lib/node/logger-cli-contribution.spec.js +13 -2
- package/lib/node/logger-cli-contribution.spec.js.map +1 -1
- package/package.json +4 -4
- package/src/browser/frontend-application-module.ts +5 -1
- package/src/browser/secondary-window-handler.ts +189 -29
- package/src/browser/shell/application-shell.ts +29 -7
- package/src/browser/shell/theia-dock-panel.ts +93 -1
- package/src/browser/style/dockpanel.css +7 -0
- package/src/browser/widgets/extractable-widget.ts +3 -0
- package/src/browser/window/default-secondary-window-service.ts +53 -15
- package/src/browser/window/secondary-window-service.ts +23 -2
- package/src/electron-browser/preload.ts +4 -1
- package/src/electron-browser/window/electron-secondary-window-service.ts +7 -4
- package/src/electron-common/electron-api.ts +2 -0
- package/src/electron-main/electron-api-main.ts +11 -1
- package/src/node/logger-cli-contribution.spec.ts +17 -2
- package/src/node/logger-cli-contribution.ts +18 -3
|
@@ -23,20 +23,13 @@ const fs = require("fs-extra");
|
|
|
23
23
|
const watcher_1 = require("@parcel/watcher");
|
|
24
24
|
const event_1 = require("../common/event");
|
|
25
25
|
const path = require("path");
|
|
26
|
+
const common_1 = require("../common");
|
|
26
27
|
/**
|
|
27
28
|
* Parses command line switches related to log levels, then watches the log
|
|
28
29
|
* levels file (if specified) for changes. This is the source of truth for
|
|
29
30
|
* what the log level per logger should be.
|
|
30
31
|
*/
|
|
31
32
|
let LogLevelCliContribution = class LogLevelCliContribution {
|
|
32
|
-
constructor() {
|
|
33
|
-
this._logLevels = {};
|
|
34
|
-
/**
|
|
35
|
-
* Log level to use for loggers not specified in `logLevels`.
|
|
36
|
-
*/
|
|
37
|
-
this._defaultLogLevel = logger_1.LogLevel.INFO;
|
|
38
|
-
this.logConfigChangedEvent = new event_1.Emitter();
|
|
39
|
-
}
|
|
40
33
|
get defaultLogLevel() {
|
|
41
34
|
return this._defaultLogLevel;
|
|
42
35
|
}
|
|
@@ -46,6 +39,17 @@ let LogLevelCliContribution = class LogLevelCliContribution {
|
|
|
46
39
|
get logFile() {
|
|
47
40
|
return this._logFile;
|
|
48
41
|
}
|
|
42
|
+
constructor() {
|
|
43
|
+
this._logLevels = {};
|
|
44
|
+
this.asyncSubscriptions = [];
|
|
45
|
+
this.toDispose = new common_1.DisposableCollection();
|
|
46
|
+
/**
|
|
47
|
+
* Log level to use for loggers not specified in `logLevels`.
|
|
48
|
+
*/
|
|
49
|
+
this._defaultLogLevel = logger_1.LogLevel.INFO;
|
|
50
|
+
this.logConfigChangedEvent = new event_1.Emitter();
|
|
51
|
+
this.toDispose.push(this.logConfigChangedEvent);
|
|
52
|
+
}
|
|
49
53
|
configure(conf) {
|
|
50
54
|
conf.option('log-level', {
|
|
51
55
|
description: 'Sets the default log level',
|
|
@@ -110,7 +114,7 @@ let LogLevelCliContribution = class LogLevelCliContribution {
|
|
|
110
114
|
}
|
|
111
115
|
async watchLogConfigFile(filename) {
|
|
112
116
|
const dir = path.dirname(filename);
|
|
113
|
-
await (0, watcher_1.subscribe)(dir, async (err, events) => {
|
|
117
|
+
const subscription = await (0, watcher_1.subscribe)(dir, async (err, events) => {
|
|
114
118
|
if (err) {
|
|
115
119
|
console.log(`Error during log file watching ${filename}: ${err}`);
|
|
116
120
|
return;
|
|
@@ -132,6 +136,13 @@ let LogLevelCliContribution = class LogLevelCliContribution {
|
|
|
132
136
|
console.error(`Error reading log config file ${filename}: ${e}`);
|
|
133
137
|
}
|
|
134
138
|
});
|
|
139
|
+
this.asyncSubscriptions.push(subscription);
|
|
140
|
+
}
|
|
141
|
+
async dispose() {
|
|
142
|
+
for (const sub of this.asyncSubscriptions) {
|
|
143
|
+
sub.unsubscribe();
|
|
144
|
+
}
|
|
145
|
+
this.toDispose.dispose();
|
|
135
146
|
}
|
|
136
147
|
async slurpLogConfigFile(filename) {
|
|
137
148
|
try {
|
|
@@ -182,6 +193,7 @@ let LogLevelCliContribution = class LogLevelCliContribution {
|
|
|
182
193
|
};
|
|
183
194
|
exports.LogLevelCliContribution = LogLevelCliContribution;
|
|
184
195
|
exports.LogLevelCliContribution = LogLevelCliContribution = tslib_1.__decorate([
|
|
185
|
-
(0, inversify_1.injectable)()
|
|
196
|
+
(0, inversify_1.injectable)(),
|
|
197
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
186
198
|
], LogLevelCliContribution);
|
|
187
199
|
//# sourceMappingURL=logger-cli-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger-cli-contribution.js","sourceRoot":"","sources":["../../src/node/logger-cli-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAGhF,yCAAuC;AACvC,6CAA4C;AAE5C,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"logger-cli-contribution.js","sourceRoot":"","sources":["../../src/node/logger-cli-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAGhF,yCAAuC;AACvC,6CAA4C;AAE5C,+BAA+B;AAC/B,6CAA+D;AAC/D,2CAAiD;AACjD,6BAA6B;AAC7B,sCAA6D;AAO7D;;;;GAIG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAehC,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;QAzBU,eAAU,GAAc,EAAE,CAAC;QAC3B,uBAAkB,GAAwB,EAAE,CAAC;QAC7C,cAAS,GAAG,IAAI,6BAAoB,EAAE,CAAC;QAEjD;;WAEG;QACO,qBAAgB,GAAa,iBAAQ,CAAC,IAAI,CAAC;QAI3C,0BAAqB,GAAkB,IAAI,eAAO,EAAQ,CAAC;QAejE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,CAAC,IAAgB;QACtB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACrB,WAAW,EAAE,4BAA4B;YACzC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9C,KAAK,EAAE,CAAC;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACtB,WAAW,EAAE,uEAAuE;YACpF,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,CAAC;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACpB,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,CAAC;SACX,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAqB;QACpC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAW,EAAE,yCAAyC,CAAC,CAAC;QAC5H,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,QAAQ,GAAW,IAAI,CAAC,YAAY,CAAW,CAAC;YACpD,IAAI,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAElC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,iCAAiC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAW,CAAC;YAC1C,IAAI,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;wBACxB,uDAAuD;wBACvD,MAAM,WAAW,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;wBACrF,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBAC3C,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACL,kDAAkD;gBACtD,CAAC;gBACD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACL,CAAC;QAED,qFAAqF;QACrF,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,MAAM,IAAA,mBAAS,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;YAC5D,IAAI,GAAG,EAAE,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;gBAClE,OAAO;YACX,CAAC;YACD,IAAI,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC1B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;4BACjB,KAAK,QAAQ,CAAC;4BACd,KAAK,QAAQ;gCACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gCACxC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCAC3C,MAAM;wBACd,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,iCAAiC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO;QACT,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxC,GAAG,CAAC,WAAW,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QAC/C,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEjC,IAAI,kBAAkB,GAAa,iBAAQ,CAAC,IAAI,CAAC;YAEjD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;gBACzB,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,gCAAgC,QAAQ,EAAE,CAAC,CAAC;YACnH,CAAC;YAED,MAAM,YAAY,GAAgC,EAAE,CAAC;YAErD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;oBACjC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,gCAAgC,MAAM,OAAO,QAAQ,EAAE,CAAC,CAAC;gBACtH,CAAC;YACL,CAAC;YAED,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;YAC3C,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;YAE/B,OAAO,CAAC,GAAG,CAAC,yCAAyC,QAAQ,GAAG,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;IAED,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,UAAkB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;IACL,CAAC;IAED;;OAEG;IACO,kBAAkB,CAAC,QAAgB,EAAE,gBAAwB;QACnE,MAAM,KAAK,GAAG,iBAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,MAAM,QAAQ,IAAI,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ,CAAA;AA5LY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,sBAAU,GAAE;;GACA,uBAAuB,CA4LnC"}
|
|
@@ -23,13 +23,22 @@ const inversify_1 = require("inversify");
|
|
|
23
23
|
const logger_1 = require("../common/logger");
|
|
24
24
|
const logger_cli_contribution_1 = require("./logger-cli-contribution");
|
|
25
25
|
const sinon = require("sinon");
|
|
26
|
+
const common_1 = require("../common");
|
|
26
27
|
// Allow creating temporary files, but remove them when we are done.
|
|
27
28
|
const track = temp.track();
|
|
28
29
|
let cli;
|
|
29
30
|
let consoleErrorSpy;
|
|
31
|
+
let container;
|
|
32
|
+
let toDisposeAfter;
|
|
30
33
|
describe('log-level-cli-contribution', () => {
|
|
34
|
+
before(() => {
|
|
35
|
+
toDisposeAfter = new common_1.DisposableCollection(common_1.Disposable.create(() => track.cleanupSync()));
|
|
36
|
+
});
|
|
37
|
+
after(() => {
|
|
38
|
+
toDisposeAfter.dispose();
|
|
39
|
+
});
|
|
31
40
|
beforeEach(() => {
|
|
32
|
-
|
|
41
|
+
container = new inversify_1.Container();
|
|
33
42
|
const module = new inversify_1.ContainerModule(bind => {
|
|
34
43
|
bind(logger_cli_contribution_1.LogLevelCliContribution).toSelf().inSingletonScope();
|
|
35
44
|
});
|
|
@@ -39,8 +48,10 @@ describe('log-level-cli-contribution', () => {
|
|
|
39
48
|
cli.configure(yargs);
|
|
40
49
|
consoleErrorSpy = sinon.spy(console, 'error');
|
|
41
50
|
});
|
|
42
|
-
afterEach(() => {
|
|
51
|
+
afterEach(async () => {
|
|
43
52
|
consoleErrorSpy.restore();
|
|
53
|
+
await cli.dispose();
|
|
54
|
+
container.unload();
|
|
44
55
|
});
|
|
45
56
|
it('should use --log-level flag', async () => {
|
|
46
57
|
const args = yargs.parse(['--log-level=debug']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger-cli-contribution.spec.js","sourceRoot":"","sources":["../../src/node/logger-cli-contribution.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,+BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B,yBAAyB;AACzB,yCAAuD;AACvD,6CAA4C;AAC5C,uEAAoE;AACpE,+BAA+B;
|
|
1
|
+
{"version":3,"file":"logger-cli-contribution.spec.js","sourceRoot":"","sources":["../../src/node/logger-cli-contribution.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/core",
|
|
3
|
-
"version": "1.65.0-next.
|
|
3
|
+
"version": "1.65.0-next.55+d141c3601",
|
|
4
4
|
"description": "Theia is a cloud & desktop IDE framework implemented in TypeScript.",
|
|
5
5
|
"main": "lib/common/index.js",
|
|
6
6
|
"typings": "lib/common/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"@lumino/virtualdom": "^2.0.2",
|
|
18
18
|
"@lumino/widgets": "2.5.0",
|
|
19
19
|
"@parcel/watcher": "^2.5.0",
|
|
20
|
-
"@theia/application-package": "1.65.0-next.
|
|
21
|
-
"@theia/request": "1.65.0-next.
|
|
20
|
+
"@theia/application-package": "1.65.0-next.55+d141c3601",
|
|
21
|
+
"@theia/request": "1.65.0-next.55+d141c3601",
|
|
22
22
|
"@types/body-parser": "^1.16.4",
|
|
23
23
|
"@types/express": "^4.17.21",
|
|
24
24
|
"@types/fs-extra": "^4.0.2",
|
|
@@ -216,5 +216,5 @@
|
|
|
216
216
|
"nyc": {
|
|
217
217
|
"extends": "../../configs/nyc.json"
|
|
218
218
|
},
|
|
219
|
-
"gitHead": "
|
|
219
|
+
"gitHead": "d141c3601e8c3d9cd254468790fed3566aa23305"
|
|
220
220
|
}
|
|
@@ -192,7 +192,11 @@ export const frontendApplicationModule = new ContainerModule((bind, _unbind, _is
|
|
|
192
192
|
return container.get(TabBarToolbar);
|
|
193
193
|
});
|
|
194
194
|
|
|
195
|
-
bind(DockPanelRendererFactory).toFactory(context => () =>
|
|
195
|
+
bind(DockPanelRendererFactory).toFactory<DockPanelRenderer, [(Document | ShadowRoot)?]>(context => (document?: Document | ShadowRoot) => {
|
|
196
|
+
const renderer = context.container.get(DockPanelRenderer);
|
|
197
|
+
renderer.document = document;
|
|
198
|
+
return renderer;
|
|
199
|
+
});
|
|
196
200
|
bind(DockPanelRenderer).toSelf();
|
|
197
201
|
bind(TabBarRendererFactory).toFactory(({ container }) => () => {
|
|
198
202
|
const contextMenuRenderer = container.get(ContextMenuRenderer);
|
|
@@ -16,26 +16,68 @@
|
|
|
16
16
|
|
|
17
17
|
import debounce = require('lodash.debounce');
|
|
18
18
|
import { inject, injectable } from 'inversify';
|
|
19
|
-
import { BoxLayout,
|
|
19
|
+
import { BoxLayout, ExtractableWidget, TabBar, Widget } from './widgets';
|
|
20
20
|
import { MessageService } from '../common/message-service';
|
|
21
|
-
import { ApplicationShell } from './shell/application-shell';
|
|
21
|
+
import { ApplicationShell, DockPanelRenderer, MAIN_AREA_CLASS, MAIN_BOTTOM_AREA_CLASS } from './shell/application-shell';
|
|
22
22
|
import { Emitter } from '../common/event';
|
|
23
|
-
import { SecondaryWindowService } from './window/secondary-window-service';
|
|
23
|
+
import { isSecondaryWindow, SecondaryWindowRootWidget, SecondaryWindowService } from './window/secondary-window-service';
|
|
24
24
|
import { KeybindingRegistry } from './keybinding';
|
|
25
|
+
import { MAIN_AREA_ID, TheiaDockPanel } from './shell/theia-dock-panel';
|
|
25
26
|
|
|
26
|
-
/**
|
|
27
|
-
class
|
|
27
|
+
/** Widgets to be contained inside a DockPanel in the secondary window. */
|
|
28
|
+
class SecondaryWindowDockPanelWidget extends SecondaryWindowRootWidget {
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
protected _widgets: Widget[] = [];
|
|
31
|
+
protected dockPanel: TheiaDockPanel;
|
|
32
|
+
|
|
33
|
+
constructor(
|
|
34
|
+
dockPanelFactory: TheiaDockPanel.Factory,
|
|
35
|
+
dockPanelRendererFactory: (document?: Document | ShadowRoot) => DockPanelRenderer,
|
|
36
|
+
closeHandler: (sender: TabBar<Widget>, args: TabBar.ITabCloseRequestedArgs<Widget>) => boolean,
|
|
37
|
+
secondaryWindow: Window
|
|
38
|
+
) {
|
|
30
39
|
super();
|
|
31
|
-
this.
|
|
40
|
+
this.secondaryWindow = secondaryWindow;
|
|
41
|
+
const boxLayout = new BoxLayout();
|
|
42
|
+
|
|
43
|
+
// reuse same tab bar classes and dock panel id as main window to inherit styling
|
|
44
|
+
const renderer = dockPanelRendererFactory(secondaryWindow.document);
|
|
45
|
+
renderer.tabBarClasses.push(MAIN_BOTTOM_AREA_CLASS);
|
|
46
|
+
renderer.tabBarClasses.push(MAIN_AREA_CLASS);
|
|
47
|
+
this.dockPanel = dockPanelFactory({
|
|
48
|
+
disableDragAndDrop: true,
|
|
49
|
+
closeHandler,
|
|
50
|
+
mode: 'multiple-document',
|
|
51
|
+
renderer,
|
|
52
|
+
});
|
|
53
|
+
this.dockPanel.id = MAIN_AREA_ID;
|
|
54
|
+
BoxLayout.setStretch(this.dockPanel, 1);
|
|
55
|
+
boxLayout.addWidget(this.dockPanel);
|
|
56
|
+
this.layout = boxLayout;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
override get widgets(): ReadonlyArray<Widget> {
|
|
60
|
+
return this._widgets;
|
|
32
61
|
}
|
|
33
62
|
|
|
34
|
-
addWidget(widget: Widget): void {
|
|
35
|
-
|
|
36
|
-
|
|
63
|
+
addWidget(widget: Widget, disposeCallback: () => void, options?: TheiaDockPanel.AddOptions): void {
|
|
64
|
+
this._widgets.push(widget);
|
|
65
|
+
this.dockPanel.addWidget(widget, options);
|
|
66
|
+
|
|
67
|
+
widget.disposed.connect(() => {
|
|
68
|
+
const index = this._widgets.indexOf(widget);
|
|
69
|
+
if (index > -1) {
|
|
70
|
+
this._widgets.splice(index, 1);
|
|
71
|
+
}
|
|
72
|
+
disposeCallback();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
this.dockPanel.activateWidget(widget);
|
|
37
76
|
}
|
|
38
77
|
|
|
78
|
+
override getTabBar(widget: Widget): TabBar<Widget> | undefined {
|
|
79
|
+
return this.dockPanel.findTabBar(widget.title);
|
|
80
|
+
}
|
|
39
81
|
}
|
|
40
82
|
|
|
41
83
|
/**
|
|
@@ -49,13 +91,18 @@ class SecondaryWindowRootWidget extends Widget {
|
|
|
49
91
|
@injectable()
|
|
50
92
|
export class SecondaryWindowHandler {
|
|
51
93
|
/** List of widgets in secondary windows. */
|
|
52
|
-
protected readonly _widgets:
|
|
94
|
+
protected readonly _widgets: Widget[] = [];
|
|
53
95
|
|
|
54
96
|
protected applicationShell: ApplicationShell;
|
|
55
97
|
|
|
98
|
+
protected dockPanelRendererFactory: (document?: Document | ShadowRoot) => DockPanelRenderer;
|
|
99
|
+
|
|
56
100
|
@inject(KeybindingRegistry)
|
|
57
101
|
protected keybindings: KeybindingRegistry;
|
|
58
102
|
|
|
103
|
+
@inject(TheiaDockPanel.Factory)
|
|
104
|
+
protected dockPanelFactory: TheiaDockPanel.Factory;
|
|
105
|
+
|
|
59
106
|
protected readonly onWillAddWidgetEmitter = new Emitter<[Widget, Window]>();
|
|
60
107
|
/** Subscribe to get notified when a widget is added to this handler, i.e. the widget was moved to an secondary window . */
|
|
61
108
|
readonly onWillAddWidget = this.onWillAddWidgetEmitter.event;
|
|
@@ -89,13 +136,17 @@ export class SecondaryWindowHandler {
|
|
|
89
136
|
* Does nothing if this service has already been initialized.
|
|
90
137
|
*
|
|
91
138
|
* @param shell The `ApplicationShell` that widgets will be moved out from.
|
|
139
|
+
* @param dockPanelRendererFactory A factory function to create a `DockPanelRenderer` for use in secondary windows.
|
|
92
140
|
*/
|
|
93
|
-
init(shell: ApplicationShell): void {
|
|
141
|
+
init(shell: ApplicationShell, dockPanelRendererFactory: (document?: Document | ShadowRoot) => DockPanelRenderer): void {
|
|
94
142
|
if (this.applicationShell) {
|
|
95
143
|
// Already initialized
|
|
96
144
|
return;
|
|
97
145
|
}
|
|
98
146
|
this.applicationShell = shell;
|
|
147
|
+
this.dockPanelRendererFactory = dockPanelRendererFactory;
|
|
148
|
+
|
|
149
|
+
this.secondaryWindowService.beforeWidgetRestore(([widget, window]) => this.removeWidget(widget, window));
|
|
99
150
|
}
|
|
100
151
|
|
|
101
152
|
/**
|
|
@@ -138,25 +189,24 @@ export class SecondaryWindowHandler {
|
|
|
138
189
|
this.onWillAddWidgetEmitter.fire([widget, newWindow]);
|
|
139
190
|
|
|
140
191
|
widget.secondaryWindow = newWindow;
|
|
141
|
-
|
|
192
|
+
widget.previousArea = this.applicationShell.getAreaFor(widget);
|
|
193
|
+
const rootWidget: SecondaryWindowRootWidget = new SecondaryWindowDockPanelWidget(this.dockPanelFactory, this.dockPanelRendererFactory, this.onTabCloseRequested,
|
|
194
|
+
newWindow);
|
|
195
|
+
rootWidget.defaultRestoreArea = widget.previousArea;
|
|
142
196
|
rootWidget.addClass('secondary-widget-root');
|
|
143
197
|
rootWidget.addClass('monaco-workbench'); // needed for compatility with VSCode styles
|
|
144
198
|
Widget.attach(rootWidget, element);
|
|
145
|
-
|
|
199
|
+
if (isSecondaryWindow(newWindow)) {
|
|
200
|
+
newWindow.rootWidget = rootWidget;
|
|
201
|
+
}
|
|
202
|
+
rootWidget.addWidget(widget, () => {
|
|
203
|
+
this.onWidgetRemove(widget, newWindow, rootWidget);
|
|
204
|
+
});
|
|
146
205
|
widget.show();
|
|
147
206
|
widget.update();
|
|
148
207
|
|
|
149
208
|
this.addWidget(widget, newWindow);
|
|
150
209
|
|
|
151
|
-
// Close the window if the widget is disposed, e.g. by a command closing all widgets.
|
|
152
|
-
widget.disposed.connect(() => {
|
|
153
|
-
this.onWillRemoveWidgetEmitter.fire([widget, newWindow]);
|
|
154
|
-
this.removeWidget(widget, newWindow);
|
|
155
|
-
if (!newWindow.closed) {
|
|
156
|
-
newWindow.close();
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
|
|
160
210
|
// debounce to avoid rapid updates while resizing the secondary window
|
|
161
211
|
const updateWidget = debounce(() => {
|
|
162
212
|
rootWidget.update();
|
|
@@ -168,13 +218,60 @@ export class SecondaryWindowHandler {
|
|
|
168
218
|
});
|
|
169
219
|
}
|
|
170
220
|
|
|
221
|
+
private onWidgetRemove(widget: Widget, newWindow: Window, rootWidget: SecondaryWindowRootWidget): void {
|
|
222
|
+
// Close the window if the widget is disposed, e.g. by a command closing all widgets.
|
|
223
|
+
this.onWillRemoveWidgetEmitter.fire([widget, newWindow]);
|
|
224
|
+
this.removeWidget(widget, newWindow);
|
|
225
|
+
if (!newWindow.closed && rootWidget.widgets.length === 0) {
|
|
226
|
+
// no remaining widgets in window -> close the window
|
|
227
|
+
newWindow.close();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
addWidgetToSecondaryWindow(widget: Widget, secondaryWindow: Window, options?: TheiaDockPanel.AddOptions): void {
|
|
233
|
+
const rootWidget = isSecondaryWindow(secondaryWindow) ? secondaryWindow.rootWidget : undefined;
|
|
234
|
+
if (!rootWidget) {
|
|
235
|
+
console.error('Given secondary window no known root.');
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// we allow to add any widget to an existing secondary window unless it is marked as not extractable or is already extracted
|
|
240
|
+
if (ExtractableWidget.is(widget)) {
|
|
241
|
+
if (!widget.isExtractable) {
|
|
242
|
+
console.error('Widget is not extractable.', widget.id);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (widget.secondaryWindow !== undefined) {
|
|
246
|
+
console.error('Widget is extracted already.', widget.id);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
widget.secondaryWindow = secondaryWindow;
|
|
250
|
+
widget.previousArea = this.applicationShell.getAreaFor(widget);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
rootWidget.addWidget(widget, () => {
|
|
254
|
+
this.onWidgetRemove(widget, secondaryWindow, rootWidget);
|
|
255
|
+
}, options);
|
|
256
|
+
widget.show();
|
|
257
|
+
widget.update();
|
|
258
|
+
this.addWidget(widget, secondaryWindow);
|
|
259
|
+
widget.activate();
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
onTabCloseRequested(_sender: TabBar<Widget>, _args: TabBar.ITabCloseRequestedArgs<Widget>): boolean {
|
|
263
|
+
// return false to keep default behavior
|
|
264
|
+
// override this method if you want to move tabs back instead of closing them
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
|
|
171
268
|
/**
|
|
172
269
|
* If the given widget is tracked by this handler, activate it and focus its secondary window.
|
|
173
270
|
*
|
|
174
271
|
* @param widgetId The widget to activate specified by its id
|
|
175
272
|
* @returns The activated `ExtractableWidget` or `undefined` if the given widget id is unknown to this handler.
|
|
176
273
|
*/
|
|
177
|
-
activateWidget(widgetId: string): ExtractableWidget | undefined {
|
|
274
|
+
activateWidget(widgetId: string): ExtractableWidget | Widget | undefined {
|
|
178
275
|
const trackedWidget = this.revealWidget(widgetId);
|
|
179
276
|
trackedWidget?.activate();
|
|
180
277
|
return trackedWidget;
|
|
@@ -186,30 +283,93 @@ export class SecondaryWindowHandler {
|
|
|
186
283
|
* @param widgetId The widget to reveal specified by its id
|
|
187
284
|
* @returns The revealed `ExtractableWidget` or `undefined` if the given widget id is unknown to this handler.
|
|
188
285
|
*/
|
|
189
|
-
revealWidget(widgetId: string): ExtractableWidget | undefined {
|
|
286
|
+
revealWidget(widgetId: string): ExtractableWidget | Widget | undefined {
|
|
190
287
|
const trackedWidget = this._widgets.find(w => w.id === widgetId);
|
|
191
288
|
if (trackedWidget && this.getFocusedWindow()) {
|
|
192
|
-
|
|
289
|
+
if (ExtractableWidget.is(trackedWidget)) {
|
|
290
|
+
this.secondaryWindowService.focus(trackedWidget.secondaryWindow!);
|
|
291
|
+
return trackedWidget;
|
|
292
|
+
} else {
|
|
293
|
+
const window = extractSecondaryWindow(trackedWidget);
|
|
294
|
+
if (window) {
|
|
295
|
+
this.secondaryWindowService.focus(window);
|
|
296
|
+
return trackedWidget;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
193
299
|
}
|
|
194
|
-
return
|
|
300
|
+
return undefined;
|
|
195
301
|
}
|
|
196
302
|
|
|
197
303
|
getFocusedWindow(): Window | undefined {
|
|
198
304
|
return window.document.hasFocus() ? window : this.secondaryWindowService.getWindows().find(candidate => candidate.document.hasFocus());
|
|
199
305
|
}
|
|
200
306
|
|
|
201
|
-
protected addWidget(widget:
|
|
307
|
+
protected addWidget(widget: Widget, win: Window): void {
|
|
202
308
|
if (!this._widgets.includes(widget)) {
|
|
203
309
|
this._widgets.push(widget);
|
|
204
310
|
this.onDidAddWidgetEmitter.fire([widget, win]);
|
|
205
311
|
}
|
|
206
312
|
}
|
|
207
313
|
|
|
208
|
-
protected removeWidget(widget:
|
|
314
|
+
protected removeWidget(widget: Widget, win: Window): void {
|
|
209
315
|
const index = this._widgets.indexOf(widget);
|
|
210
316
|
if (index > -1) {
|
|
211
317
|
this._widgets.splice(index, 1);
|
|
212
318
|
this.onDidRemoveWidgetEmitter.fire([widget, win]);
|
|
213
319
|
}
|
|
214
320
|
}
|
|
321
|
+
|
|
322
|
+
getTabBarFor(widget: Widget): TabBar<Widget> | undefined {
|
|
323
|
+
const secondaryWindowRootWidget = extractSecondaryWindowRootWidget(widget);
|
|
324
|
+
if (secondaryWindowRootWidget && secondaryWindowRootWidget.getTabBar) {
|
|
325
|
+
return secondaryWindowRootWidget.getTabBar(widget);
|
|
326
|
+
}
|
|
327
|
+
return undefined;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
export function getDefaultRestoreArea(window: Window): ApplicationShell.Area | undefined {
|
|
333
|
+
if (isSecondaryWindow(window) && window.rootWidget !== undefined) {
|
|
334
|
+
return window.rootWidget.defaultRestoreArea;
|
|
335
|
+
}
|
|
336
|
+
return undefined;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export function getAllWidgetsFromSecondaryWindow(window: Window): ReadonlyArray<Widget> | undefined {
|
|
340
|
+
if (isSecondaryWindow(window) && window.rootWidget !== undefined) {
|
|
341
|
+
return window.rootWidget.widgets;
|
|
342
|
+
}
|
|
343
|
+
return undefined;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export function extractSecondaryWindowRootWidget(widget: Widget | undefined | null): SecondaryWindowRootWidget | undefined {
|
|
347
|
+
if (!widget) {
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
// check two levels of parent hierarchy, usually a root widget would have nested layout widget
|
|
351
|
+
if (widget.parent instanceof SecondaryWindowRootWidget) {
|
|
352
|
+
return widget.parent;
|
|
353
|
+
}
|
|
354
|
+
if (widget.parent?.parent instanceof SecondaryWindowRootWidget) {
|
|
355
|
+
return widget.parent.parent;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
export function extractSecondaryWindow(widget: Widget | undefined | null): Window | undefined {
|
|
360
|
+
if (!widget) {
|
|
361
|
+
return undefined;
|
|
362
|
+
}
|
|
363
|
+
if (ExtractableWidget.is(widget)) {
|
|
364
|
+
return widget.secondaryWindow;
|
|
365
|
+
}
|
|
366
|
+
if (widget instanceof SecondaryWindowRootWidget) {
|
|
367
|
+
return widget.secondaryWindow;
|
|
368
|
+
}
|
|
369
|
+
const secondaryWindowRootWidget = extractSecondaryWindowRootWidget(widget);
|
|
370
|
+
if (secondaryWindowRootWidget) {
|
|
371
|
+
return secondaryWindowRootWidget.secondaryWindow;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
return undefined;
|
|
215
375
|
}
|
|
@@ -40,7 +40,7 @@ import { BreadcrumbsRendererFactory } from '../breadcrumbs/breadcrumbs-renderer'
|
|
|
40
40
|
import { Deferred } from '../../common/promise-util';
|
|
41
41
|
import { SaveableService } from '../saveable-service';
|
|
42
42
|
import { nls } from '../../common/nls';
|
|
43
|
-
import { SecondaryWindowHandler } from '../secondary-window-handler';
|
|
43
|
+
import { extractSecondaryWindow, SecondaryWindowHandler } from '../secondary-window-handler';
|
|
44
44
|
import URI from '../../common/uri';
|
|
45
45
|
import { OpenerService } from '../opener-service';
|
|
46
46
|
import { PreviewableWidget } from '../widgets/previewable-widget';
|
|
@@ -78,7 +78,7 @@ export const applicationShellLayoutVersion: ApplicationShellLayoutVersion = 5.0;
|
|
|
78
78
|
export const ApplicationShellOptions = Symbol('ApplicationShellOptions');
|
|
79
79
|
export const DockPanelRendererFactory = Symbol('DockPanelRendererFactory');
|
|
80
80
|
export interface DockPanelRendererFactory {
|
|
81
|
-
(): DockPanelRenderer
|
|
81
|
+
(document?: Document | ShadowRoot): DockPanelRenderer
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
/**
|
|
@@ -88,6 +88,12 @@ export interface DockPanelRendererFactory {
|
|
|
88
88
|
export class DockPanelRenderer implements DockLayout.IRenderer {
|
|
89
89
|
readonly tabBarClasses: string[] = [];
|
|
90
90
|
|
|
91
|
+
/**
|
|
92
|
+
* In case of DockPanels rendered in secondary windows, will be set
|
|
93
|
+
* to the document of that window
|
|
94
|
+
*/
|
|
95
|
+
document?: Document | ShadowRoot;
|
|
96
|
+
|
|
91
97
|
private readonly onDidCreateTabBarEmitter = new Emitter<TabBar<Widget>>();
|
|
92
98
|
|
|
93
99
|
constructor(
|
|
@@ -95,7 +101,7 @@ export class DockPanelRenderer implements DockLayout.IRenderer {
|
|
|
95
101
|
@inject(TabBarToolbarRegistry) protected readonly tabBarToolbarRegistry: TabBarToolbarRegistry,
|
|
96
102
|
@inject(TabBarToolbarFactory) protected readonly tabBarToolbarFactory: TabBarToolbarFactory,
|
|
97
103
|
@inject(BreadcrumbsRendererFactory) protected readonly breadcrumbsRendererFactory: BreadcrumbsRendererFactory,
|
|
98
|
-
@inject(CorePreferences) protected readonly corePreferences: CorePreferences
|
|
104
|
+
@inject(CorePreferences) protected readonly corePreferences: CorePreferences,
|
|
99
105
|
) { }
|
|
100
106
|
|
|
101
107
|
get onDidCreateTabBar(): CommonEvent<TabBar<Widget>> {
|
|
@@ -120,6 +126,7 @@ export class DockPanelRenderer implements DockLayout.IRenderer {
|
|
|
120
126
|
this.tabBarToolbarFactory,
|
|
121
127
|
this.breadcrumbsRendererFactory,
|
|
122
128
|
{
|
|
129
|
+
document: this.document,
|
|
123
130
|
renderer
|
|
124
131
|
},
|
|
125
132
|
{
|
|
@@ -366,7 +373,7 @@ export class ApplicationShell extends Widget {
|
|
|
366
373
|
this.rightPanelHandler.dockPanel.widgetAdded.connect((_, widget) => this.fireDidAddWidget(widget));
|
|
367
374
|
this.rightPanelHandler.dockPanel.widgetRemoved.connect((_, widget) => this.fireDidRemoveWidget(widget));
|
|
368
375
|
|
|
369
|
-
this.secondaryWindowHandler.init(this);
|
|
376
|
+
this.secondaryWindowHandler.init(this, this.dockPanelRendererFactory);
|
|
370
377
|
this.secondaryWindowHandler.onDidAddWidget(([widget, window]) => this.fireDidAddWidget(widget));
|
|
371
378
|
this.secondaryWindowHandler.onDidRemoveWidget(([widget, window]) => this.fireDidRemoveWidget(widget));
|
|
372
379
|
|
|
@@ -990,8 +997,19 @@ export class ApplicationShell extends Widget {
|
|
|
990
997
|
this.rightPanelHandler.addWidget(widget, sidePanelOptions);
|
|
991
998
|
break;
|
|
992
999
|
case 'secondaryWindow':
|
|
993
|
-
|
|
994
|
-
|
|
1000
|
+
const secondaryWindow = extractSecondaryWindow(addOptions.ref);
|
|
1001
|
+
if (secondaryWindow) {
|
|
1002
|
+
this.secondaryWindowHandler.addWidgetToSecondaryWindow(widget, secondaryWindow, addOptions);
|
|
1003
|
+
} else {
|
|
1004
|
+
// Fall back to adding widgets to the main area. This is preferred to throwing an error, because toolbar actions on secondary windows/commands
|
|
1005
|
+
// may e.g. open further editors, e.g. a markdown preview.
|
|
1006
|
+
this.mainPanel.addWidget(widget, {
|
|
1007
|
+
...addOptions,
|
|
1008
|
+
ref: undefined
|
|
1009
|
+
});
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
break;
|
|
995
1013
|
default:
|
|
996
1014
|
throw new Error('Unexpected area: ' + options?.area);
|
|
997
1015
|
}
|
|
@@ -1847,7 +1865,7 @@ export class ApplicationShell extends Widget {
|
|
|
1847
1865
|
case 'right':
|
|
1848
1866
|
return this.rightPanelHandler.tabBar;
|
|
1849
1867
|
case 'secondaryWindow':
|
|
1850
|
-
//
|
|
1868
|
+
// there may be multiple secondary windows, so we can't return a single tabbar here
|
|
1851
1869
|
return undefined;
|
|
1852
1870
|
default:
|
|
1853
1871
|
throw new Error('Illegal argument: ' + widgetOrArea);
|
|
@@ -1874,6 +1892,10 @@ export class ApplicationShell extends Widget {
|
|
|
1874
1892
|
if (ArrayExt.firstIndexOf(rightPanelTabBar.titles, widgetTitle) > -1) {
|
|
1875
1893
|
return rightPanelTabBar;
|
|
1876
1894
|
}
|
|
1895
|
+
const secondaryWindowTabBar = this.secondaryWindowHandler.getTabBarFor(widget);
|
|
1896
|
+
if (secondaryWindowTabBar) {
|
|
1897
|
+
return secondaryWindowTabBar;
|
|
1898
|
+
}
|
|
1877
1899
|
return undefined;
|
|
1878
1900
|
}
|
|
1879
1901
|
|