@theia/core 1.65.0-next.6 → 1.65.1

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.
Files changed (440) hide show
  1. package/README.md +6 -6
  2. package/i18n/nls.cs.json +117 -15
  3. package/i18n/nls.de.json +117 -15
  4. package/i18n/nls.es.json +117 -15
  5. package/i18n/nls.fr.json +117 -15
  6. package/i18n/nls.hu.json +117 -15
  7. package/i18n/nls.it.json +117 -15
  8. package/i18n/nls.ja.json +117 -15
  9. package/i18n/nls.json +121 -19
  10. package/i18n/nls.ko.json +117 -15
  11. package/i18n/nls.pl.json +117 -15
  12. package/i18n/nls.pt-br.json +117 -15
  13. package/i18n/nls.ru.json +117 -15
  14. package/i18n/nls.tr.json +117 -15
  15. package/i18n/nls.zh-cn.json +117 -15
  16. package/i18n/nls.zh-tw.json +117 -15
  17. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts +1 -1
  18. package/lib/browser/breadcrumbs/breadcrumbs-renderer.d.ts.map +1 -1
  19. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js +1 -1
  20. package/lib/browser/breadcrumbs/breadcrumbs-renderer.js.map +1 -1
  21. package/lib/browser/catalog.json +227 -32
  22. package/lib/browser/common-frontend-contribution.d.ts +2 -3
  23. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  24. package/lib/browser/common-frontend-contribution.js +3 -4
  25. package/lib/browser/common-frontend-contribution.js.map +1 -1
  26. package/lib/browser/dialogs/react-dialog.d.ts.map +1 -1
  27. package/lib/browser/dialogs/react-dialog.js +1 -0
  28. package/lib/browser/dialogs/react-dialog.js.map +1 -1
  29. package/lib/browser/encoding-registry.d.ts +1 -1
  30. package/lib/browser/encoding-registry.d.ts.map +1 -1
  31. package/lib/browser/encoding-registry.js +1 -1
  32. package/lib/browser/encoding-registry.js.map +1 -1
  33. package/lib/browser/frontend-application-bindings.d.ts.map +1 -1
  34. package/lib/browser/frontend-application-bindings.js +10 -17
  35. package/lib/browser/frontend-application-bindings.js.map +1 -1
  36. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  37. package/lib/browser/frontend-application-module.js +10 -6
  38. package/lib/browser/frontend-application-module.js.map +1 -1
  39. package/lib/browser/frontend-application.d.ts +1 -1
  40. package/lib/browser/frontend-application.d.ts.map +1 -1
  41. package/lib/browser/frontend-application.js +1 -1
  42. package/lib/browser/frontend-application.js.map +1 -1
  43. package/lib/browser/hover-service.d.ts +1 -2
  44. package/lib/browser/hover-service.d.ts.map +1 -1
  45. package/lib/browser/hover-service.js +1 -2
  46. package/lib/browser/hover-service.js.map +1 -1
  47. package/lib/browser/icon-theme-service.d.ts +3 -2
  48. package/lib/browser/icon-theme-service.d.ts.map +1 -1
  49. package/lib/browser/icon-theme-service.js +4 -3
  50. package/lib/browser/icon-theme-service.js.map +1 -1
  51. package/lib/browser/index.d.ts +0 -1
  52. package/lib/browser/index.d.ts.map +1 -1
  53. package/lib/browser/index.js +0 -1
  54. package/lib/browser/index.js.map +1 -1
  55. package/lib/browser/json-schema-store.d.ts +2 -0
  56. package/lib/browser/json-schema-store.d.ts.map +1 -1
  57. package/lib/browser/json-schema-store.js +10 -3
  58. package/lib/browser/json-schema-store.js.map +1 -1
  59. package/lib/browser/keybinding.d.ts +1 -1
  60. package/lib/browser/keybinding.d.ts.map +1 -1
  61. package/lib/browser/keybinding.js +1 -1
  62. package/lib/browser/keybinding.js.map +1 -1
  63. package/lib/browser/keybinding.spec.js +1 -1
  64. package/lib/browser/keybinding.spec.js.map +1 -1
  65. package/lib/browser/menu/browser-menu-plugin.d.ts +3 -3
  66. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  67. package/lib/browser/menu/browser-menu-plugin.js +4 -5
  68. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  69. package/lib/browser/open-with-service.d.ts +1 -1
  70. package/lib/browser/open-with-service.d.ts.map +1 -1
  71. package/lib/browser/open-with-service.js +3 -3
  72. package/lib/browser/open-with-service.js.map +1 -1
  73. package/lib/browser/opener-service.d.ts +1 -2
  74. package/lib/browser/opener-service.d.ts.map +1 -1
  75. package/lib/browser/opener-service.js.map +1 -1
  76. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts +6 -0
  77. package/lib/browser/preferences/frontend-config-preference-contributions.d.ts.map +1 -0
  78. package/lib/browser/preferences/frontend-config-preference-contributions.js +60 -0
  79. package/lib/browser/preferences/frontend-config-preference-contributions.js.map +1 -0
  80. package/lib/browser/preferences/index.d.ts +0 -5
  81. package/lib/browser/preferences/index.d.ts.map +1 -1
  82. package/lib/browser/preferences/index.js +0 -5
  83. package/lib/browser/preferences/index.js.map +1 -1
  84. package/lib/browser/preferences/preference-contribution.d.ts +0 -96
  85. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  86. package/lib/browser/preferences/preference-contribution.js +14 -355
  87. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  88. package/lib/browser/preferences/preference-proxy.spec.js +25 -17
  89. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  90. package/lib/browser/preferences/preference-schema-provider.spec.js +21 -34
  91. package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
  92. package/lib/browser/preferences/preference-service.spec.js +57 -80
  93. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  94. package/lib/browser/preferences/preference-validation-service.d.ts +24 -26
  95. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  96. package/lib/browser/preferences/preference-validation-service.js +40 -20
  97. package/lib/browser/preferences/preference-validation-service.js.map +1 -1
  98. package/lib/browser/preferences/preference-validation-service.spec.js +10 -6
  99. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  100. package/lib/browser/preferences/test/mock-preference-provider.d.ts +2 -3
  101. package/lib/browser/preferences/test/mock-preference-provider.d.ts.map +1 -1
  102. package/lib/browser/preferences/test/mock-preference-provider.js +5 -7
  103. package/lib/browser/preferences/test/mock-preference-provider.js.map +1 -1
  104. package/lib/browser/preferences/test/mock-preference-proxy.d.ts.map +1 -1
  105. package/lib/browser/preferences/test/mock-preference-proxy.js.map +1 -1
  106. package/lib/browser/preferences/test/mock-preference-service.d.ts +1 -4
  107. package/lib/browser/preferences/test/mock-preference-service.d.ts.map +1 -1
  108. package/lib/browser/preferences/test/mock-preference-service.js.map +1 -1
  109. package/lib/browser/quick-input/quick-command-service.d.ts +1 -1
  110. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  111. package/lib/browser/quick-input/quick-command-service.js +1 -1
  112. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  113. package/lib/browser/request/browser-request-service.d.ts +1 -1
  114. package/lib/browser/request/browser-request-service.d.ts.map +1 -1
  115. package/lib/browser/request/browser-request-service.js +2 -2
  116. package/lib/browser/request/browser-request-service.js.map +1 -1
  117. package/lib/browser/saveable.d.ts +9 -0
  118. package/lib/browser/saveable.d.ts.map +1 -1
  119. package/lib/browser/saveable.js.map +1 -1
  120. package/lib/browser/secondary-window-handler.d.ts +21 -9
  121. package/lib/browser/secondary-window-handler.d.ts.map +1 -1
  122. package/lib/browser/secondary-window-handler.js +162 -21
  123. package/lib/browser/secondary-window-handler.js.map +1 -1
  124. package/lib/browser/shell/application-shell.d.ts +7 -2
  125. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  126. package/lib/browser/shell/application-shell.js +27 -10
  127. package/lib/browser/shell/application-shell.js.map +1 -1
  128. package/lib/browser/shell/shell-layout-restorer.d.ts +13 -0
  129. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  130. package/lib/browser/shell/shell-layout-restorer.js +8 -1
  131. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  132. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +30 -16
  133. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  134. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +116 -33
  135. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  136. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  137. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +8 -3
  138. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  139. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +1 -1
  140. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  141. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +2 -2
  142. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
  143. package/lib/browser/shell/tab-bars.d.ts +1 -1
  144. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  145. package/lib/browser/shell/theia-dock-panel.d.ts +19 -2
  146. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  147. package/lib/browser/shell/theia-dock-panel.js +82 -0
  148. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  149. package/lib/browser/status-bar/status-bar.d.ts +1 -1
  150. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  151. package/lib/browser/status-bar/status-bar.js +3 -2
  152. package/lib/browser/status-bar/status-bar.js.map +1 -1
  153. package/lib/browser/theming.d.ts +5 -4
  154. package/lib/browser/theming.d.ts.map +1 -1
  155. package/lib/browser/theming.js +7 -6
  156. package/lib/browser/theming.js.map +1 -1
  157. package/lib/browser/tooltip-service.d.ts +1 -1
  158. package/lib/browser/tooltip-service.d.ts.map +1 -1
  159. package/lib/browser/tooltip-service.js +1 -1
  160. package/lib/browser/tooltip-service.js.map +1 -1
  161. package/lib/browser/tree/index.d.ts +0 -1
  162. package/lib/browser/tree/index.d.ts.map +1 -1
  163. package/lib/browser/tree/index.js +0 -1
  164. package/lib/browser/tree/index.js.map +1 -1
  165. package/lib/browser/tree/tree-widget.d.ts +2 -2
  166. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  167. package/lib/browser/tree/tree-widget.js +5 -4
  168. package/lib/browser/tree/tree-widget.js.map +1 -1
  169. package/lib/browser/view-container.d.ts.map +1 -1
  170. package/lib/browser/view-container.js +2 -2
  171. package/lib/browser/view-container.js.map +1 -1
  172. package/lib/browser/widgets/extractable-widget.d.ts +3 -0
  173. package/lib/browser/widgets/extractable-widget.d.ts.map +1 -1
  174. package/lib/browser/widgets/extractable-widget.js.map +1 -1
  175. package/lib/browser/widgets/widget.js +4 -4
  176. package/lib/browser/widgets/widget.js.map +1 -1
  177. package/lib/browser/window/default-secondary-window-service.d.ts +10 -5
  178. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  179. package/lib/browser/window/default-secondary-window-service.js +53 -13
  180. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  181. package/lib/browser/window/default-window-service.d.ts +1 -1
  182. package/lib/browser/window/default-window-service.d.ts.map +1 -1
  183. package/lib/browser/window/default-window-service.js +1 -1
  184. package/lib/browser/window/default-window-service.js.map +1 -1
  185. package/lib/browser/window/default-window-service.spec.js +1 -1
  186. package/lib/browser/window/default-window-service.spec.js.map +1 -1
  187. package/lib/browser/window/secondary-window-service.d.ts +15 -2
  188. package/lib/browser/window/secondary-window-service.d.ts.map +1 -1
  189. package/lib/browser/window/secondary-window-service.js +12 -1
  190. package/lib/browser/window/secondary-window-service.js.map +1 -1
  191. package/lib/browser/window/window-title-service.d.ts +1 -1
  192. package/lib/browser/window/window-title-service.d.ts.map +1 -1
  193. package/lib/browser/window/window-title-service.js +1 -1
  194. package/lib/browser/window/window-title-service.js.map +1 -1
  195. package/lib/{browser → common}/core-preferences.d.ts +2 -1
  196. package/lib/common/core-preferences.d.ts.map +1 -0
  197. package/lib/{browser → common}/core-preferences.js +17 -18
  198. package/lib/common/core-preferences.js.map +1 -0
  199. package/lib/common/index.d.ts +4 -0
  200. package/lib/common/index.d.ts.map +1 -1
  201. package/lib/common/index.js +4 -0
  202. package/lib/common/index.js.map +1 -1
  203. package/lib/common/inversify-utils.d.ts +31 -0
  204. package/lib/common/inversify-utils.d.ts.map +1 -0
  205. package/lib/common/inversify-utils.js +60 -0
  206. package/lib/common/inversify-utils.js.map +1 -0
  207. package/lib/common/json-schema.d.ts +1 -0
  208. package/lib/common/json-schema.d.ts.map +1 -1
  209. package/lib/common/menu/menu-types.d.ts +1 -0
  210. package/lib/common/menu/menu-types.d.ts.map +1 -1
  211. package/lib/common/menu/menu-types.js.map +1 -1
  212. package/lib/common/preferences/defaults-preference-provider.d.ts +21 -0
  213. package/lib/common/preferences/defaults-preference-provider.d.ts.map +1 -0
  214. package/lib/common/preferences/defaults-preference-provider.js +99 -0
  215. package/lib/common/preferences/defaults-preference-provider.js.map +1 -0
  216. package/lib/common/preferences/index.d.ts +12 -0
  217. package/lib/common/preferences/index.d.ts.map +1 -0
  218. package/lib/common/preferences/index.js +30 -0
  219. package/lib/common/preferences/index.js.map +1 -0
  220. package/lib/{browser → common}/preferences/injectable-preference-proxy.d.ts +1 -1
  221. package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -0
  222. package/lib/{browser → common}/preferences/injectable-preference-proxy.js +2 -2
  223. package/lib/common/preferences/injectable-preference-proxy.js.map +1 -0
  224. package/lib/common/preferences/preference-configurations.d.ts.map +1 -0
  225. package/lib/common/preferences/preference-configurations.js.map +1 -0
  226. package/lib/{browser → common}/preferences/preference-language-override-service.d.ts +4 -13
  227. package/lib/common/preferences/preference-language-override-service.d.ts.map +1 -0
  228. package/lib/{browser → common}/preferences/preference-language-override-service.js +14 -30
  229. package/lib/common/preferences/preference-language-override-service.js.map +1 -0
  230. package/lib/common/preferences/preference-provider-impl.d.ts +52 -0
  231. package/lib/common/preferences/preference-provider-impl.d.ts.map +1 -0
  232. package/lib/{browser/preferences/preference-provider.js → common/preferences/preference-provider-impl.js} +23 -95
  233. package/lib/common/preferences/preference-provider-impl.js.map +1 -0
  234. package/lib/{browser → common}/preferences/preference-provider.d.ts +34 -59
  235. package/lib/common/preferences/preference-provider.d.ts.map +1 -0
  236. package/lib/common/preferences/preference-provider.js +71 -0
  237. package/lib/common/preferences/preference-provider.js.map +1 -0
  238. package/lib/common/preferences/preference-provider.spec.d.ts.map +1 -0
  239. package/lib/{browser → common}/preferences/preference-provider.spec.js +4 -4
  240. package/lib/common/preferences/preference-provider.spec.js.map +1 -0
  241. package/lib/{browser → common}/preferences/preference-proxy.d.ts +2 -2
  242. package/lib/common/preferences/preference-proxy.d.ts.map +1 -0
  243. package/lib/{browser → common}/preferences/preference-proxy.js +10 -10
  244. package/lib/common/preferences/preference-proxy.js.map +1 -0
  245. package/lib/common/preferences/preference-schema-service.d.ts +55 -0
  246. package/lib/common/preferences/preference-schema-service.d.ts.map +1 -0
  247. package/lib/common/preferences/preference-schema-service.js +402 -0
  248. package/lib/common/preferences/preference-schema-service.js.map +1 -0
  249. package/lib/common/preferences/preference-schema.d.ts +145 -43
  250. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  251. package/lib/common/preferences/preference-schema.js +3 -41
  252. package/lib/common/preferences/preference-schema.js.map +1 -1
  253. package/lib/common/preferences/preference-scope.d.ts +4 -1
  254. package/lib/common/preferences/preference-scope.d.ts.map +1 -1
  255. package/lib/common/preferences/preference-scope.js +5 -14
  256. package/lib/common/preferences/preference-scope.js.map +1 -1
  257. package/lib/{browser → common}/preferences/preference-service.d.ts +9 -10
  258. package/lib/common/preferences/preference-service.d.ts.map +1 -0
  259. package/lib/{browser → common}/preferences/preference-service.js +68 -58
  260. package/lib/common/preferences/preference-service.js.map +1 -0
  261. package/lib/common/stream.d.ts +9 -0
  262. package/lib/common/stream.d.ts.map +1 -1
  263. package/lib/common/stream.js +93 -2
  264. package/lib/common/stream.js.map +1 -1
  265. package/lib/common/supported-encodings.d.ts.map +1 -0
  266. package/lib/common/supported-encodings.js.map +1 -0
  267. package/lib/{browser/tree → common}/tree-preference.d.ts +1 -1
  268. package/lib/common/tree-preference.d.ts.map +1 -0
  269. package/lib/{browser/tree → common}/tree-preference.js +3 -5
  270. package/lib/common/tree-preference.js.map +1 -0
  271. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +2 -1
  272. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  273. package/lib/electron-browser/menu/electron-context-menu-renderer.js +2 -1
  274. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  275. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -2
  276. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  277. package/lib/electron-browser/menu/electron-main-menu-factory.js +11 -10
  278. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  279. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +2 -2
  280. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  281. package/lib/electron-browser/menu/electron-menu-contribution.js +6 -6
  282. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  283. package/lib/electron-browser/preload.d.ts.map +1 -1
  284. package/lib/electron-browser/preload.js +3 -0
  285. package/lib/electron-browser/preload.js.map +1 -1
  286. package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
  287. package/lib/electron-browser/window/electron-secondary-window-service.js +5 -4
  288. package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
  289. package/lib/electron-browser/window/electron-window-module.js +1 -1
  290. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  291. package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
  292. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  293. package/lib/electron-browser/window/electron-window-service.js +1 -1
  294. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  295. package/lib/electron-common/electron-api.d.ts +2 -0
  296. package/lib/electron-common/electron-api.d.ts.map +1 -1
  297. package/lib/electron-common/electron-api.js +2 -1
  298. package/lib/electron-common/electron-api.js.map +1 -1
  299. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.d.ts +2 -1
  300. package/lib/electron-common/electron-window-preferences.d.ts.map +1 -0
  301. package/lib/{electron-browser/window → electron-common}/electron-window-preferences.js +7 -7
  302. package/lib/electron-common/electron-window-preferences.js.map +1 -0
  303. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  304. package/lib/electron-main/electron-api-main.js +9 -0
  305. package/lib/electron-main/electron-api-main.js.map +1 -1
  306. package/lib/electron-node/window/electron-window-module.d.ts +4 -0
  307. package/lib/electron-node/window/electron-window-module.d.ts.map +1 -0
  308. package/lib/{browser/preferences/preference-scope.js → electron-node/window/electron-window-module.js} +7 -5
  309. package/lib/electron-node/window/electron-window-module.js.map +1 -0
  310. package/lib/node/backend-application-module.d.ts.map +1 -1
  311. package/lib/node/backend-application-module.js +13 -0
  312. package/lib/node/backend-application-module.js.map +1 -1
  313. package/lib/node/backend-application.js +1 -1
  314. package/lib/node/logger-cli-contribution.d.ts +7 -1
  315. package/lib/node/logger-cli-contribution.d.ts.map +1 -1
  316. package/lib/node/logger-cli-contribution.js +22 -10
  317. package/lib/node/logger-cli-contribution.js.map +1 -1
  318. package/lib/node/logger-cli-contribution.spec.js +13 -2
  319. package/lib/node/logger-cli-contribution.spec.js.map +1 -1
  320. package/package.json +8 -7
  321. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +1 -1
  322. package/src/browser/common-frontend-contribution.ts +2 -3
  323. package/src/browser/dialogs/react-dialog.tsx +1 -0
  324. package/src/browser/encoding-registry.ts +1 -1
  325. package/src/browser/frontend-application-bindings.ts +8 -13
  326. package/src/browser/frontend-application-module.ts +13 -6
  327. package/src/browser/frontend-application.ts +1 -1
  328. package/src/browser/hover-service.ts +1 -2
  329. package/src/browser/icon-theme-service.ts +3 -2
  330. package/src/browser/index.ts +0 -1
  331. package/src/browser/json-schema-store.ts +9 -1
  332. package/src/browser/keybinding.spec.ts +1 -1
  333. package/src/browser/keybinding.ts +1 -1
  334. package/src/browser/menu/browser-menu-plugin.ts +7 -7
  335. package/src/browser/open-with-service.ts +1 -1
  336. package/src/browser/opener-service.ts +1 -2
  337. package/src/browser/preferences/frontend-config-preference-contributions.ts +52 -0
  338. package/src/browser/preferences/index.ts +0 -5
  339. package/src/browser/preferences/preference-contribution.ts +16 -398
  340. package/src/browser/preferences/preference-proxy.spec.ts +27 -17
  341. package/src/browser/preferences/preference-schema-provider.spec.ts +25 -37
  342. package/src/browser/preferences/preference-service.spec.ts +32 -56
  343. package/src/browser/preferences/preference-validation-service.spec.ts +27 -19
  344. package/src/browser/preferences/preference-validation-service.ts +60 -41
  345. package/src/browser/preferences/test/mock-preference-provider.ts +2 -5
  346. package/src/browser/preferences/test/mock-preference-proxy.ts +1 -2
  347. package/src/browser/preferences/test/mock-preference-service.ts +1 -4
  348. package/src/browser/quick-input/quick-command-service.ts +1 -1
  349. package/src/browser/request/browser-request-service.ts +4 -4
  350. package/src/browser/saveable.ts +8 -0
  351. package/src/browser/secondary-window-handler.ts +189 -29
  352. package/src/browser/shell/application-shell.ts +36 -13
  353. package/src/browser/shell/shell-layout-restorer.ts +15 -0
  354. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +139 -40
  355. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +12 -6
  356. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +2 -2
  357. package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +2 -2
  358. package/src/browser/shell/tab-bars.ts +1 -1
  359. package/src/browser/shell/theia-dock-panel.ts +101 -2
  360. package/src/browser/status-bar/status-bar.tsx +3 -2
  361. package/src/browser/style/dockpanel.css +7 -0
  362. package/src/browser/theming.ts +7 -6
  363. package/src/browser/tooltip-service.tsx +1 -1
  364. package/src/browser/tree/index.ts +0 -1
  365. package/src/browser/tree/tree-widget.tsx +6 -5
  366. package/src/browser/view-container.ts +5 -5
  367. package/src/browser/widgets/extractable-widget.ts +3 -0
  368. package/src/browser/widgets/widget.ts +4 -4
  369. package/src/browser/window/default-secondary-window-service.ts +54 -17
  370. package/src/browser/window/default-window-service.spec.ts +1 -1
  371. package/src/browser/window/default-window-service.ts +1 -1
  372. package/src/browser/window/secondary-window-service.ts +23 -2
  373. package/src/browser/window/window-title-service.ts +1 -1
  374. package/src/{browser → common}/core-preferences.ts +16 -17
  375. package/src/common/index.ts +4 -0
  376. package/src/common/inversify-utils.ts +63 -0
  377. package/src/common/json-schema.ts +1 -0
  378. package/src/common/menu/menu-types.ts +2 -0
  379. package/src/common/preferences/defaults-preference-provider.ts +91 -0
  380. package/src/common/preferences/index.ts +27 -0
  381. package/src/{browser → common}/preferences/injectable-preference-proxy.ts +3 -3
  382. package/src/{browser → common}/preferences/preference-language-override-service.ts +12 -29
  383. package/src/common/preferences/preference-provider-impl.ts +165 -0
  384. package/src/{browser → common}/preferences/preference-provider.spec.ts +6 -5
  385. package/src/common/preferences/preference-provider.ts +164 -0
  386. package/src/{browser → common}/preferences/preference-proxy.ts +15 -14
  387. package/src/common/preferences/preference-schema-service.ts +434 -0
  388. package/src/common/preferences/preference-schema.ts +156 -64
  389. package/src/common/preferences/preference-scope.ts +5 -13
  390. package/src/{browser → common}/preferences/preference-service.ts +76 -63
  391. package/src/common/stream.ts +102 -1
  392. package/src/{browser/tree → common}/tree-preference.ts +2 -4
  393. package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -1
  394. package/src/electron-browser/menu/electron-main-menu-factory.ts +13 -11
  395. package/src/electron-browser/menu/electron-menu-contribution.ts +9 -6
  396. package/src/electron-browser/preload.ts +4 -1
  397. package/src/electron-browser/window/electron-secondary-window-service.ts +7 -4
  398. package/src/electron-browser/window/electron-window-module.ts +1 -1
  399. package/src/electron-browser/window/electron-window-service.ts +1 -1
  400. package/src/electron-common/electron-api.ts +2 -0
  401. package/src/{electron-browser/window → electron-common}/electron-window-preferences.ts +6 -6
  402. package/src/electron-main/electron-api-main.ts +11 -1
  403. package/src/{browser/preferences/preference-scope.ts → electron-node/window/electron-window-module.ts} +7 -3
  404. package/src/node/backend-application-module.ts +28 -1
  405. package/src/node/backend-application.ts +1 -1
  406. package/src/node/logger-cli-contribution.spec.ts +17 -2
  407. package/src/node/logger-cli-contribution.ts +18 -3
  408. package/lib/browser/core-preferences.d.ts.map +0 -1
  409. package/lib/browser/core-preferences.js.map +0 -1
  410. package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +0 -1
  411. package/lib/browser/preferences/injectable-preference-proxy.js.map +0 -1
  412. package/lib/browser/preferences/preference-configurations.d.ts.map +0 -1
  413. package/lib/browser/preferences/preference-configurations.js.map +0 -1
  414. package/lib/browser/preferences/preference-language-override-service.d.ts.map +0 -1
  415. package/lib/browser/preferences/preference-language-override-service.js.map +0 -1
  416. package/lib/browser/preferences/preference-provider.d.ts.map +0 -1
  417. package/lib/browser/preferences/preference-provider.js.map +0 -1
  418. package/lib/browser/preferences/preference-provider.spec.d.ts.map +0 -1
  419. package/lib/browser/preferences/preference-provider.spec.js.map +0 -1
  420. package/lib/browser/preferences/preference-proxy.d.ts.map +0 -1
  421. package/lib/browser/preferences/preference-proxy.js.map +0 -1
  422. package/lib/browser/preferences/preference-scope.d.ts +0 -3
  423. package/lib/browser/preferences/preference-scope.d.ts.map +0 -1
  424. package/lib/browser/preferences/preference-scope.js.map +0 -1
  425. package/lib/browser/preferences/preference-service.d.ts.map +0 -1
  426. package/lib/browser/preferences/preference-service.js.map +0 -1
  427. package/lib/browser/supported-encodings.d.ts.map +0 -1
  428. package/lib/browser/supported-encodings.js.map +0 -1
  429. package/lib/browser/tree/tree-preference.d.ts.map +0 -1
  430. package/lib/browser/tree/tree-preference.js.map +0 -1
  431. package/lib/electron-browser/window/electron-window-preferences.d.ts.map +0 -1
  432. package/lib/electron-browser/window/electron-window-preferences.js.map +0 -1
  433. package/src/browser/preferences/preference-provider.ts +0 -277
  434. /package/lib/{browser → common}/preferences/preference-configurations.d.ts +0 -0
  435. /package/lib/{browser → common}/preferences/preference-configurations.js +0 -0
  436. /package/lib/{browser → common}/preferences/preference-provider.spec.d.ts +0 -0
  437. /package/lib/{browser → common}/supported-encodings.d.ts +0 -0
  438. /package/lib/{browser → common}/supported-encodings.js +0 -0
  439. /package/src/{browser → common}/preferences/preference-configurations.ts +0 -0
  440. /package/src/{browser → common}/supported-encodings.ts +0 -0
@@ -16,26 +16,68 @@
16
16
 
17
17
  import debounce = require('lodash.debounce');
18
18
  import { inject, injectable } from 'inversify';
19
- import { BoxLayout, BoxPanel, ExtractableWidget, Widget } from './widgets';
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
- /** Widget to be contained directly in a secondary window. */
27
- class SecondaryWindowRootWidget extends Widget {
27
+ /** Widgets to be contained inside a DockPanel in the secondary window. */
28
+ class SecondaryWindowDockPanelWidget extends SecondaryWindowRootWidget {
28
29
 
29
- constructor() {
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.layout = new BoxLayout();
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
- (this.layout as BoxLayout).addWidget(widget);
36
- BoxPanel.setStretch(widget, 1);
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: ExtractableWidget[] = [];
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
- const rootWidget = new SecondaryWindowRootWidget();
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
- rootWidget.addWidget(widget);
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
- this.secondaryWindowService.focus(trackedWidget.secondaryWindow!);
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 trackedWidget;
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: ExtractableWidget, win: Window): void {
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: ExtractableWidget, win: Window): void {
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
  }
@@ -35,12 +35,12 @@ import { TabBarToolbarRegistry, TabBarToolbarFactory } from './tab-bar-toolbar';
35
35
  import { ContextKeyService } from '../context-key-service';
36
36
  import { Emitter } from '../../common/event';
37
37
  import { waitForRevealed, waitForClosed, PINNED_CLASS, UnsafeWidgetUtilities } from '../widgets';
38
- import { CorePreferences } from '../core-preferences';
38
+ import { CorePreferences } from '../../common/core-preferences';
39
39
  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
- /** At the moment, widgets are only moved to this area (i.e. a secondary window) by moving them from one of the other areas. */
994
- throw new Error('Widgets cannot be added directly to a secondary window');
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
  }
@@ -1399,22 +1417,23 @@ export class ApplicationShell extends Widget {
1399
1417
  this.toDisposeOnActivationCheck.push(Disposable.create(() => widget.disposed.disconnect(onDispose)));
1400
1418
 
1401
1419
  let start = 0;
1402
- const step: FrameRequestCallback = timestamp => {
1420
+ const step: FrameRequestCallback = () => {
1403
1421
  const activeElement = widget.node.ownerDocument.activeElement;
1404
1422
  if (activeElement && widget.node.contains(activeElement)) {
1405
1423
  return;
1406
1424
  }
1425
+ const now = Date.now();
1407
1426
  if (!start) {
1408
- start = timestamp;
1427
+ start = now;
1409
1428
  }
1410
- const delta = timestamp - start;
1429
+ const delta = now - start;
1411
1430
  if (delta < this.activationTimeout) {
1412
- request = window.requestAnimationFrame(step);
1431
+ request = setTimeout(step, 0);
1413
1432
  } else {
1414
1433
  console.warn(`Widget was activated, but did not accept focus after ${this.activationTimeout}ms: ${widget.id}`);
1415
1434
  }
1416
1435
  };
1417
- let request = window.requestAnimationFrame(step);
1436
+ let request = setTimeout(step, 0);
1418
1437
  this.toDisposeOnActivationCheck.push(Disposable.create(() => window.cancelAnimationFrame(request)));
1419
1438
  }
1420
1439
 
@@ -1846,7 +1865,7 @@ export class ApplicationShell extends Widget {
1846
1865
  case 'right':
1847
1866
  return this.rightPanelHandler.tabBar;
1848
1867
  case 'secondaryWindow':
1849
- // Secondary windows don't have a tab bar
1868
+ // there may be multiple secondary windows, so we can't return a single tabbar here
1850
1869
  return undefined;
1851
1870
  default:
1852
1871
  throw new Error('Illegal argument: ' + widgetOrArea);
@@ -1873,6 +1892,10 @@ export class ApplicationShell extends Widget {
1873
1892
  if (ArrayExt.firstIndexOf(rightPanelTabBar.titles, widgetTitle) > -1) {
1874
1893
  return rightPanelTabBar;
1875
1894
  }
1895
+ const secondaryWindowTabBar = this.secondaryWindowHandler.getTabBarFor(widget);
1896
+ if (secondaryWindowTabBar) {
1897
+ return secondaryWindowTabBar;
1898
+ }
1876
1899
  return undefined;
1877
1900
  }
1878
1901
 
@@ -111,6 +111,19 @@ export interface ApplicationShellLayoutMigration {
111
111
  onWillInflateWidget?(desc: WidgetDescription, context: ApplicationShellLayoutMigrationContext): MaybePromise<WidgetDescription | undefined>;
112
112
  }
113
113
 
114
+ export const ShellLayoutTransformer = Symbol('ShellLayoutTransformer');
115
+ /**
116
+ * This contribution point allows arbitrary modifications to the shell layout
117
+ * data when it is restored.
118
+ */
119
+ export interface ShellLayoutTransformer {
120
+ /**
121
+ * Modifies the shell layout data before it is restored.
122
+ * @param layoutData
123
+ */
124
+ transformLayoutOnRestore(layoutData: ApplicationShell.LayoutData): void;
125
+ }
126
+
114
127
  export const RESET_LAYOUT = Command.toLocalizedCommand({
115
128
  id: 'reset.layout',
116
129
  category: CommonCommands.VIEW_CATEGORY,
@@ -124,6 +137,7 @@ export class ShellLayoutRestorer implements CommandContribution {
124
137
  protected shouldStoreLayout: boolean = true;
125
138
 
126
139
  @inject(ContributionProvider) @named(ApplicationShellLayoutMigration) protected readonly migrations: ContributionProvider<ApplicationShellLayoutMigration>;
140
+ @inject(ContributionProvider) @named(ShellLayoutTransformer) protected readonly transformations: ContributionProvider<ShellLayoutTransformer>;
127
141
  @inject(WindowService) protected readonly windowService: WindowService;
128
142
  @inject(ThemeService) protected readonly themeService: ThemeService;
129
143
 
@@ -172,6 +186,7 @@ export class ShellLayoutRestorer implements CommandContribution {
172
186
  return false;
173
187
  }
174
188
  const layoutData = await this.inflate(serializedLayoutData);
189
+ this.transformations.getContributions().forEach(transformation => transformation.transformLayoutOnRestore(layoutData));
175
190
  await app.shell.setLayoutData(layoutData);
176
191
  this.logger.info('<<< The layout has been successfully restored.');
177
192
  return true;