@theia/core 1.53.0-next.4 → 1.53.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.
Files changed (689) hide show
  1. package/README.md +7 -7
  2. package/i18n/nls.cs.json +582 -552
  3. package/i18n/nls.de.json +582 -552
  4. package/i18n/nls.es.json +582 -552
  5. package/i18n/nls.fr.json +582 -552
  6. package/i18n/nls.hu.json +582 -552
  7. package/i18n/nls.it.json +582 -552
  8. package/i18n/nls.ja.json +582 -552
  9. package/i18n/nls.json +582 -552
  10. package/i18n/nls.ko.json +582 -0
  11. package/i18n/nls.pl.json +582 -552
  12. package/i18n/nls.pt-br.json +582 -552
  13. package/i18n/nls.ru.json +582 -552
  14. package/i18n/nls.tr.json +582 -0
  15. package/i18n/nls.zh-cn.json +582 -552
  16. package/i18n/nls.zh-tw.json +582 -0
  17. package/lib/browser/authentication-service.d.ts +15 -14
  18. package/lib/browser/authentication-service.d.ts.map +1 -1
  19. package/lib/browser/authentication-service.js +5 -5
  20. package/lib/browser/authentication-service.js.map +1 -1
  21. package/lib/browser/catalog.json +6889 -0
  22. package/lib/browser/common-frontend-contribution.js +3 -3
  23. package/lib/browser/common-styling-participants.js +166 -166
  24. package/lib/browser/context-key-service.d.ts +3 -2
  25. package/lib/browser/context-key-service.d.ts.map +1 -1
  26. package/lib/browser/context-key-service.js.map +1 -1
  27. package/lib/browser/core-preferences.d.ts.map +1 -1
  28. package/lib/browser/core-preferences.js +9 -0
  29. package/lib/browser/core-preferences.js.map +1 -1
  30. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  31. package/lib/browser/frontend-application-module.js.map +1 -1
  32. package/lib/browser/json-schema-store.d.ts +0 -3
  33. package/lib/browser/json-schema-store.d.ts.map +1 -1
  34. package/lib/browser/json-schema-store.js +2 -12
  35. package/lib/browser/json-schema-store.js.map +1 -1
  36. package/lib/browser/open-with-service.d.ts +13 -1
  37. package/lib/browser/open-with-service.d.ts.map +1 -1
  38. package/lib/browser/open-with-service.js +48 -9
  39. package/lib/browser/open-with-service.js.map +1 -1
  40. package/lib/browser/opener-service.d.ts +8 -0
  41. package/lib/browser/opener-service.d.ts.map +1 -1
  42. package/lib/browser/opener-service.js +18 -3
  43. package/lib/browser/opener-service.js.map +1 -1
  44. package/lib/browser/progress-location-service.spec.js +7 -7
  45. package/lib/browser/saveable-service.d.ts.map +1 -1
  46. package/lib/browser/saveable-service.js +6 -2
  47. package/lib/browser/saveable-service.js.map +1 -1
  48. package/lib/browser/saveable.d.ts +17 -1
  49. package/lib/browser/saveable.d.ts.map +1 -1
  50. package/lib/browser/saveable.js +62 -1
  51. package/lib/browser/saveable.js.map +1 -1
  52. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +5 -4
  53. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  54. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +2 -1
  55. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  56. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +6 -16
  57. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  58. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +12 -29
  59. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  60. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +43 -78
  61. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
  62. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +8 -39
  63. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
  64. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +10 -10
  65. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  66. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +43 -32
  67. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  68. package/lib/browser/storage-service.js +3 -3
  69. package/lib/browser/tree/tree.spec.js +75 -75
  70. package/lib/browser/view-container.d.ts +2 -2
  71. package/lib/browser/view-container.d.ts.map +1 -1
  72. package/lib/browser/view-container.js.map +1 -1
  73. package/lib/browser/widget-open-handler.d.ts +4 -1
  74. package/lib/browser/widget-open-handler.d.ts.map +1 -1
  75. package/lib/browser/widget-open-handler.js.map +1 -1
  76. package/lib/browser/widgets/extractable-widget.js +1 -1
  77. package/lib/browser/widgets/extractable-widget.js.map +1 -1
  78. package/lib/browser/widgets/index.d.ts +1 -0
  79. package/lib/browser/widgets/index.d.ts.map +1 -1
  80. package/lib/browser/widgets/index.js +1 -0
  81. package/lib/browser/widgets/index.js.map +1 -1
  82. package/lib/browser/widgets/split-widget.d.ts +45 -0
  83. package/lib/browser/widgets/split-widget.d.ts.map +1 -0
  84. package/lib/browser/widgets/split-widget.js +126 -0
  85. package/lib/browser/widgets/split-widget.js.map +1 -0
  86. package/lib/common/event.d.ts +2 -0
  87. package/lib/common/event.d.ts.map +1 -1
  88. package/lib/common/event.js +4 -0
  89. package/lib/common/event.js.map +1 -1
  90. package/lib/common/glob.d.ts +4 -4
  91. package/lib/common/json-schema.d.ts +2 -0
  92. package/lib/common/json-schema.d.ts.map +1 -1
  93. package/lib/common/menu/menu-types.d.ts.map +1 -1
  94. package/lib/common/menu/menu-types.js.map +1 -1
  95. package/lib/electron-browser/electron-uri-handler.d.ts +6 -0
  96. package/lib/electron-browser/electron-uri-handler.d.ts.map +1 -0
  97. package/lib/electron-browser/electron-uri-handler.js +49 -0
  98. package/lib/electron-browser/electron-uri-handler.js.map +1 -0
  99. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
  100. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  101. package/lib/electron-browser/menu/electron-main-menu-factory.js +6 -6
  102. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  103. package/lib/electron-browser/preload.d.ts.map +1 -1
  104. package/lib/electron-browser/preload.js +12 -0
  105. package/lib/electron-browser/preload.js.map +1 -1
  106. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  107. package/lib/electron-browser/window/electron-window-module.js +3 -0
  108. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  109. package/lib/electron-browser/window/external-app-open-handler.js +1 -1
  110. package/lib/electron-browser/window/external-app-open-handler.js.map +1 -1
  111. package/lib/electron-common/electron-api.d.ts +2 -0
  112. package/lib/electron-common/electron-api.d.ts.map +1 -1
  113. package/lib/electron-common/electron-api.js +2 -1
  114. package/lib/electron-common/electron-api.js.map +1 -1
  115. package/lib/electron-main/electron-api-main.d.ts +2 -0
  116. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  117. package/lib/electron-main/electron-api-main.js +27 -3
  118. package/lib/electron-main/electron-api-main.js.map +1 -1
  119. package/lib/electron-main/electron-main-application.d.ts +5 -3
  120. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  121. package/lib/electron-main/electron-main-application.js +57 -14
  122. package/lib/electron-main/electron-main-application.js.map +1 -1
  123. package/lib/electron-main/theia-electron-window.d.ts +1 -0
  124. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  125. package/lib/electron-main/theia-electron-window.js +3 -0
  126. package/lib/electron-main/theia-electron-window.js.map +1 -1
  127. package/lib/node/i18n/theia-localization-contribution.d.ts.map +1 -1
  128. package/lib/node/i18n/theia-localization-contribution.js +12 -8
  129. package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
  130. package/lib/node/process-utils.spec.js +8 -8
  131. package/package.json +10 -8
  132. package/shared/ajv/index.d.ts +2 -2
  133. package/shared/markdown-it.d.ts +2 -2
  134. package/shared/markdown-it.js +1 -1
  135. package/shared/reflect-metadata/index.d.ts +1 -1
  136. package/shared/reflect-metadata/index.js +1 -1
  137. package/shared/vscode-languageserver-types/index.d.ts +1 -1
  138. package/src/browser/about-dialog.tsx +137 -137
  139. package/src/browser/authentication-service.ts +467 -468
  140. package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
  141. package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
  142. package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
  143. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
  144. package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
  145. package/src/browser/breadcrumbs/index.ts +21 -21
  146. package/src/browser/browser-clipboard-service.ts +122 -122
  147. package/src/browser/browser.ts +239 -239
  148. package/src/browser/clipboard-service.ts +23 -23
  149. package/src/browser/color-application-contribution.ts +110 -110
  150. package/src/browser/color-registry.ts +60 -60
  151. package/src/browser/command-open-handler.ts +54 -54
  152. package/src/browser/common-frontend-contribution.ts +2680 -2680
  153. package/src/browser/common-styling-participants.ts +361 -361
  154. package/src/browser/connection-status-service.spec.ts +200 -200
  155. package/src/browser/connection-status-service.ts +216 -216
  156. package/src/browser/context-key-service.ts +142 -142
  157. package/src/browser/context-menu-renderer.ts +124 -124
  158. package/src/browser/core-preferences.ts +343 -334
  159. package/src/browser/credentials-service.ts +106 -106
  160. package/src/browser/decoration-style.ts +65 -65
  161. package/src/browser/decorations-service.ts +209 -209
  162. package/src/browser/dialogs/react-dialog.tsx +56 -56
  163. package/src/browser/dialogs.ts +534 -534
  164. package/src/browser/diff-uris.ts +117 -117
  165. package/src/browser/encoding-registry.ts +97 -97
  166. package/src/browser/endpoint.spec.ts +148 -148
  167. package/src/browser/endpoint.ts +136 -136
  168. package/src/browser/external-uri-service.ts +79 -79
  169. package/src/browser/file-icons-js.d.ts +20 -20
  170. package/src/browser/frontend-application-bindings.ts +62 -62
  171. package/src/browser/frontend-application-config-provider.spec.ts +45 -45
  172. package/src/browser/frontend-application-config-provider.ts +50 -50
  173. package/src/browser/frontend-application-contribution.ts +110 -110
  174. package/src/browser/frontend-application-module.ts +474 -475
  175. package/src/browser/frontend-application-state.ts +74 -74
  176. package/src/browser/frontend-application.ts +326 -326
  177. package/src/browser/hover-service.ts +218 -218
  178. package/src/browser/http-open-handler.ts +49 -49
  179. package/src/browser/i18n/i18n-frontend-module.ts +27 -27
  180. package/src/browser/i18n/language-quick-pick-service.ts +130 -130
  181. package/src/browser/icon-registry.ts +87 -87
  182. package/src/browser/icon-theme-contribution.ts +64 -64
  183. package/src/browser/icon-theme-service.ts +217 -217
  184. package/src/browser/icons/CollapseAll.svg +7 -7
  185. package/src/browser/icons/CollapseAll_inverse.svg +7 -7
  186. package/src/browser/icons/Refresh.svg +7 -7
  187. package/src/browser/icons/Refresh_inverse.svg +7 -7
  188. package/src/browser/icons/add-inverse.svg +4 -4
  189. package/src/browser/icons/add.svg +4 -4
  190. package/src/browser/icons/arrow-down-bright.svg +6 -6
  191. package/src/browser/icons/arrow-down-dark.svg +6 -6
  192. package/src/browser/icons/arrow-up-bright.svg +6 -6
  193. package/src/browser/icons/arrow-up-dark.svg +6 -6
  194. package/src/browser/icons/case-sensitive-dark.svg +16 -16
  195. package/src/browser/icons/case-sensitive.svg +16 -16
  196. package/src/browser/icons/chevron-right-dark.svg +5 -5
  197. package/src/browser/icons/chevron-right-light.svg +6 -6
  198. package/src/browser/icons/circle-bright.svg +7 -7
  199. package/src/browser/icons/circle-dark.svg +7 -7
  200. package/src/browser/icons/clear-search-results-dark.svg +7 -7
  201. package/src/browser/icons/clear-search-results.svg +7 -7
  202. package/src/browser/icons/close-all-bright.svg +7 -7
  203. package/src/browser/icons/close-all-dark.svg +7 -7
  204. package/src/browser/icons/close-bright.svg +7 -7
  205. package/src/browser/icons/close-dark.svg +7 -7
  206. package/src/browser/icons/collapse.svg +4 -4
  207. package/src/browser/icons/edit-json-dark.svg +6 -6
  208. package/src/browser/icons/edit-json.svg +6 -6
  209. package/src/browser/icons/expand.svg +4 -4
  210. package/src/browser/icons/loading-dark.svg +6 -6
  211. package/src/browser/icons/loading-light.svg +6 -6
  212. package/src/browser/icons/open-change-bright.svg +3 -3
  213. package/src/browser/icons/open-change-dark.svg +4 -4
  214. package/src/browser/icons/open-file-bright.svg +4 -4
  215. package/src/browser/icons/open-file-dark.svg +4 -4
  216. package/src/browser/icons/preview-bright.svg +3 -3
  217. package/src/browser/icons/preview-dark.svg +3 -3
  218. package/src/browser/icons/regex-dark.svg +10 -10
  219. package/src/browser/icons/regex.svg +10 -10
  220. package/src/browser/icons/remove-all-inverse.svg +4 -4
  221. package/src/browser/icons/remove-all.svg +4 -4
  222. package/src/browser/icons/replace-all-inverse.svg +13 -13
  223. package/src/browser/icons/replace-all.svg +13 -13
  224. package/src/browser/icons/replace-inverse.svg +15 -15
  225. package/src/browser/icons/replace.svg +15 -15
  226. package/src/browser/icons/whole-word-dark.svg +19 -19
  227. package/src/browser/icons/whole-word.svg +19 -19
  228. package/src/browser/index.ts +50 -50
  229. package/src/browser/json-schema-store.ts +118 -127
  230. package/src/browser/keybinding.spec.ts +554 -554
  231. package/src/browser/keybinding.ts +759 -759
  232. package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
  233. package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
  234. package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
  235. package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
  236. package/src/browser/keyboard/index.ts +20 -20
  237. package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
  238. package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
  239. package/src/browser/keyboard/keys.spec.ts +258 -258
  240. package/src/browser/keyboard/keys.ts +20 -20
  241. package/src/browser/keys.ts +21 -21
  242. package/src/browser/label-parser.spec.ts +165 -165
  243. package/src/browser/label-parser.ts +108 -108
  244. package/src/browser/label-provider.spec.ts +62 -62
  245. package/src/browser/label-provider.ts +385 -385
  246. package/src/browser/language-icon-provider.ts +55 -55
  247. package/src/browser/language-service.ts +77 -77
  248. package/src/browser/logger-frontend-module.ts +65 -65
  249. package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
  250. package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
  251. package/src/browser/menu/browser-menu-module.ts +28 -28
  252. package/src/browser/menu/browser-menu-plugin.ts +491 -491
  253. package/src/browser/menu/context-menu-context.ts +41 -41
  254. package/src/browser/messaging/connection-source.ts +26 -26
  255. package/src/browser/messaging/frontend-id-provider.ts +37 -37
  256. package/src/browser/messaging/index.ts +18 -18
  257. package/src/browser/messaging/messaging-frontend-module.ts +41 -41
  258. package/src/browser/messaging/service-connection-provider.ts +140 -140
  259. package/src/browser/messaging/ws-connection-provider.ts +49 -49
  260. package/src/browser/messaging/ws-connection-source.ts +230 -230
  261. package/src/browser/mime-service.ts +30 -30
  262. package/src/browser/navigatable-types.ts +81 -81
  263. package/src/browser/navigatable.ts +39 -39
  264. package/src/browser/open-with-service.ts +140 -93
  265. package/src/browser/opener-service.spec.ts +49 -49
  266. package/src/browser/opener-service.ts +169 -146
  267. package/src/browser/performance/frontend-stopwatch.ts +65 -65
  268. package/src/browser/performance/index.ts +18 -18
  269. package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
  270. package/src/browser/preferences/index.ts +23 -23
  271. package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
  272. package/src/browser/preferences/preference-configurations.ts +82 -82
  273. package/src/browser/preferences/preference-contribution.ts +436 -436
  274. package/src/browser/preferences/preference-language-override-service.ts +111 -111
  275. package/src/browser/preferences/preference-provider.spec.ts +36 -36
  276. package/src/browser/preferences/preference-provider.ts +277 -277
  277. package/src/browser/preferences/preference-proxy.spec.ts +367 -367
  278. package/src/browser/preferences/preference-proxy.ts +367 -367
  279. package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
  280. package/src/browser/preferences/preference-scope.ts +18 -18
  281. package/src/browser/preferences/preference-service.spec.ts +613 -613
  282. package/src/browser/preferences/preference-service.ts +594 -594
  283. package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
  284. package/src/browser/preferences/preference-validation-service.ts +358 -358
  285. package/src/browser/preferences/test/index.ts +19 -19
  286. package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
  287. package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
  288. package/src/browser/preferences/test/mock-preference-service.ts +63 -63
  289. package/src/browser/preload/i18n-preload-contribution.ts +50 -50
  290. package/src/browser/preload/os-preload-contribution.ts +37 -37
  291. package/src/browser/preload/preload-module.ts +45 -45
  292. package/src/browser/preload/preloader.ts +37 -37
  293. package/src/browser/preload/theme-preload-contribution.ts +31 -31
  294. package/src/browser/progress-bar-factory.ts +29 -29
  295. package/src/browser/progress-bar.ts +76 -76
  296. package/src/browser/progress-client.ts +53 -53
  297. package/src/browser/progress-location-service.spec.ts +50 -50
  298. package/src/browser/progress-location-service.ts +96 -96
  299. package/src/browser/progress-status-bar-item.ts +83 -83
  300. package/src/browser/quick-input/index.ts +23 -23
  301. package/src/browser/quick-input/quick-access.ts +75 -75
  302. package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
  303. package/src/browser/quick-input/quick-command-service.ts +246 -246
  304. package/src/browser/quick-input/quick-help-service.ts +87 -87
  305. package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
  306. package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
  307. package/src/browser/quick-input/quick-input-service.ts +17 -17
  308. package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
  309. package/src/browser/quick-input/quick-view-service.ts +83 -83
  310. package/src/browser/request/browser-request-module.ts +23 -23
  311. package/src/browser/request/browser-request-service.ts +172 -172
  312. package/src/browser/resource-context-key.ts +77 -77
  313. package/src/browser/saveable-service.ts +332 -328
  314. package/src/browser/saveable.ts +395 -327
  315. package/src/browser/secondary-window-handler.ts +211 -211
  316. package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
  317. package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
  318. package/src/browser/shell/application-shell.ts +2271 -2271
  319. package/src/browser/shell/current-widget-command-adapter.ts +57 -57
  320. package/src/browser/shell/index.ts +23 -23
  321. package/src/browser/shell/shell-layout-restorer.ts +399 -399
  322. package/src/browser/shell/side-panel-handler.ts +794 -794
  323. package/src/browser/shell/side-panel-toolbar.ts +111 -111
  324. package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
  325. package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
  326. package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
  327. package/src/browser/shell/split-panels.ts +191 -191
  328. package/src/browser/shell/tab-bar-decorator.ts +106 -106
  329. package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
  330. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
  331. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -256
  332. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -207
  333. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
  334. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -428
  335. package/src/browser/shell/tab-bars.spec.ts +63 -63
  336. package/src/browser/shell/tab-bars.ts +1468 -1468
  337. package/src/browser/shell/theia-dock-panel.ts +265 -265
  338. package/src/browser/shell/view-column-service.ts +125 -125
  339. package/src/browser/shell/view-contribution.ts +178 -178
  340. package/src/browser/source-tree/index.ts +19 -19
  341. package/src/browser/source-tree/source-tree-widget.tsx +107 -107
  342. package/src/browser/source-tree/source-tree.ts +146 -146
  343. package/src/browser/source-tree/tree-source.ts +73 -73
  344. package/src/browser/status-bar/index.ts +29 -29
  345. package/src/browser/status-bar/status-bar-types.ts +97 -97
  346. package/src/browser/status-bar/status-bar-view-model.ts +209 -209
  347. package/src/browser/status-bar/status-bar.tsx +189 -189
  348. package/src/browser/storage-service.spec.ts +76 -76
  349. package/src/browser/storage-service.ts +129 -129
  350. package/src/browser/style/about.css +36 -36
  351. package/src/browser/style/alert-messages.css +62 -62
  352. package/src/browser/style/ansi.css +88 -88
  353. package/src/browser/style/breadcrumbs.css +130 -130
  354. package/src/browser/style/dialog.css +126 -126
  355. package/src/browser/style/dockpanel.css +76 -76
  356. package/src/browser/style/hover-service.css +101 -101
  357. package/src/browser/style/icons.css +61 -61
  358. package/src/browser/style/index.css +353 -351
  359. package/src/browser/style/materialcolors.css +278 -278
  360. package/src/browser/style/menus.css +230 -230
  361. package/src/browser/style/notification.css +39 -39
  362. package/src/browser/style/os.css +87 -87
  363. package/src/browser/style/progress-bar.css +43 -43
  364. package/src/browser/style/quick-title-bar.css +45 -45
  365. package/src/browser/style/scrollbars.css +172 -172
  366. package/src/browser/style/search-box.css +123 -123
  367. package/src/browser/style/select-component.css +107 -107
  368. package/src/browser/style/sidepanel.css +367 -367
  369. package/src/browser/style/split-widget.css +38 -0
  370. package/src/browser/style/status-bar.css +127 -127
  371. package/src/browser/style/tabs.css +647 -658
  372. package/src/browser/style/tooltip.css +28 -28
  373. package/src/browser/style/tree-decorators.css +81 -81
  374. package/src/browser/style/tree.css +232 -232
  375. package/src/browser/style/view-container.css +187 -194
  376. package/src/browser/style/widget.css +19 -19
  377. package/src/browser/styling-service.ts +96 -96
  378. package/src/browser/supported-encodings.ts +262 -262
  379. package/src/browser/test/jsdom.ts +69 -69
  380. package/src/browser/test/mock-connection-status-service.ts +33 -33
  381. package/src/browser/test/mock-env-variables-server.ts +47 -47
  382. package/src/browser/test/mock-opener-service.ts +34 -34
  383. package/src/browser/test/mock-storage-service.ts +49 -49
  384. package/src/browser/theming.ts +206 -206
  385. package/src/browser/tooltip-service.tsx +96 -96
  386. package/src/browser/tree/fuzzy-search.spec.ts +99 -99
  387. package/src/browser/tree/fuzzy-search.ts +136 -136
  388. package/src/browser/tree/index.ts +29 -29
  389. package/src/browser/tree/search-box-debounce.ts +96 -96
  390. package/src/browser/tree/search-box.ts +355 -355
  391. package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
  392. package/src/browser/tree/test/mock-tree-model.ts +136 -136
  393. package/src/browser/tree/test/tree-test-container.ts +50 -50
  394. package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
  395. package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
  396. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
  397. package/src/browser/tree/tree-compression/index.ts +20 -20
  398. package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
  399. package/src/browser/tree/tree-compression/tree-compression.css +28 -28
  400. package/src/browser/tree/tree-consistency.spec.ts +105 -105
  401. package/src/browser/tree/tree-container.spec.ts +45 -45
  402. package/src/browser/tree/tree-container.ts +155 -155
  403. package/src/browser/tree/tree-decorator.spec.ts +162 -162
  404. package/src/browser/tree/tree-decorator.ts +238 -238
  405. package/src/browser/tree/tree-expansion.spec.ts +173 -173
  406. package/src/browser/tree/tree-expansion.ts +165 -165
  407. package/src/browser/tree/tree-focus-service.ts +55 -55
  408. package/src/browser/tree/tree-iterator.spec.ts +170 -170
  409. package/src/browser/tree/tree-iterator.ts +256 -256
  410. package/src/browser/tree/tree-label-provider.ts +40 -40
  411. package/src/browser/tree/tree-model.ts +562 -562
  412. package/src/browser/tree/tree-navigation.ts +58 -58
  413. package/src/browser/tree/tree-preference.ts +50 -50
  414. package/src/browser/tree/tree-search.ts +128 -128
  415. package/src/browser/tree/tree-selectable.spec.ts +152 -152
  416. package/src/browser/tree/tree-selection-impl.ts +176 -176
  417. package/src/browser/tree/tree-selection-state.spec.ts +462 -462
  418. package/src/browser/tree/tree-selection-state.ts +245 -245
  419. package/src/browser/tree/tree-selection.ts +159 -159
  420. package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
  421. package/src/browser/tree/tree-widget-selection.ts +45 -45
  422. package/src/browser/tree/tree-widget.tsx +1591 -1591
  423. package/src/browser/tree/tree.spec.ts +241 -241
  424. package/src/browser/tree/tree.ts +425 -425
  425. package/src/browser/undo-redo-handler.ts +85 -85
  426. package/src/browser/user-working-directory-provider.ts +77 -77
  427. package/src/browser/view-container.ts +1640 -1640
  428. package/src/browser/widget-decoration.ts +358 -358
  429. package/src/browser/widget-manager.spec.ts +102 -102
  430. package/src/browser/widget-manager.ts +318 -318
  431. package/src/browser/widget-open-handler.ts +168 -165
  432. package/src/browser/widgets/alert-message.tsx +56 -56
  433. package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
  434. package/src/browser/widgets/extractable-widget.ts +33 -33
  435. package/src/browser/widgets/index.ts +21 -20
  436. package/src/browser/widgets/previewable-widget.ts +31 -31
  437. package/src/browser/widgets/react-renderer.tsx +53 -53
  438. package/src/browser/widgets/react-widget.tsx +51 -51
  439. package/src/browser/widgets/select-component.tsx +367 -367
  440. package/src/browser/widgets/split-widget.ts +163 -0
  441. package/src/browser/widgets/widget.ts +406 -406
  442. package/src/browser/window/browser-window-module.ts +32 -32
  443. package/src/browser/window/default-secondary-window-service.ts +189 -189
  444. package/src/browser/window/default-window-service.spec.ts +78 -78
  445. package/src/browser/window/default-window-service.ts +171 -171
  446. package/src/browser/window/secondary-window-service.ts +39 -39
  447. package/src/browser/window/test/mock-window-service.ts +29 -29
  448. package/src/browser/window/window-service.ts +78 -78
  449. package/src/browser/window/window-title-service.ts +107 -107
  450. package/src/browser/window/window-title-updater.ts +95 -95
  451. package/src/browser/window-contribution.ts +64 -64
  452. package/src/browser-only/frontend-only-application-module.ts +116 -116
  453. package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
  454. package/src/browser-only/logger-frontend-only-module.ts +63 -63
  455. package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
  456. package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
  457. package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
  458. package/src/common/accessibility.ts +33 -33
  459. package/src/common/application-error.spec.ts +27 -27
  460. package/src/common/application-error.ts +76 -76
  461. package/src/common/application-protocol.ts +42 -42
  462. package/src/common/array-utils.ts +129 -129
  463. package/src/common/buffer.ts +228 -228
  464. package/src/common/cancellation.ts +163 -163
  465. package/src/common/char-code.ts +438 -438
  466. package/src/common/collections.ts +125 -125
  467. package/src/common/color.ts +103 -103
  468. package/src/common/command.spec.ts +208 -208
  469. package/src/common/command.ts +489 -489
  470. package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
  471. package/src/common/contribution-filter/contribution-filter.ts +64 -64
  472. package/src/common/contribution-filter/filter.ts +23 -23
  473. package/src/common/contribution-filter/index.ts +19 -19
  474. package/src/common/contribution-provider.ts +96 -96
  475. package/src/common/disposable.spec.ts +94 -94
  476. package/src/common/disposable.ts +188 -188
  477. package/src/common/encoding-service.ts +380 -380
  478. package/src/common/encodings.ts +24 -24
  479. package/src/common/env-variables/env-variables-protocol.ts +38 -38
  480. package/src/common/env-variables/index.ts +17 -17
  481. package/src/common/event.spec.ts +32 -32
  482. package/src/common/event.ts +493 -487
  483. package/src/common/file-uri.ts +61 -61
  484. package/src/common/frontend-application-state.ts +38 -38
  485. package/src/common/glob.ts +741 -741
  486. package/src/common/hash.ts +85 -85
  487. package/src/common/i18n/localization-server.ts +25 -25
  488. package/src/common/i18n/localization.ts +80 -80
  489. package/src/common/i18n/nls.metadata.json +34112 -34112
  490. package/src/common/index.ts +51 -51
  491. package/src/common/json-schema.ts +108 -106
  492. package/src/common/key-store.ts +26 -26
  493. package/src/common/keybinding.ts +152 -152
  494. package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
  495. package/src/common/keys.ts +694 -694
  496. package/src/common/label-protocol.ts +35 -35
  497. package/src/common/logger-protocol.ts +119 -119
  498. package/src/common/logger-watcher.ts +48 -48
  499. package/src/common/logger.spec.ts +46 -46
  500. package/src/common/logger.ts +389 -389
  501. package/src/common/lsp-types.ts +34 -34
  502. package/src/common/markdown-rendering/icon-utilities.ts +30 -30
  503. package/src/common/markdown-rendering/index.ts +18 -18
  504. package/src/common/markdown-rendering/markdown-string.ts +152 -152
  505. package/src/common/menu/action-menu-node.ts +65 -65
  506. package/src/common/menu/composite-menu-node.spec.ts +67 -67
  507. package/src/common/menu/composite-menu-node.ts +114 -114
  508. package/src/common/menu/index.ts +21 -21
  509. package/src/common/menu/menu-adapter.ts +103 -103
  510. package/src/common/menu/menu-model-registry.ts +374 -374
  511. package/src/common/menu/menu-types.ts +220 -219
  512. package/src/common/menu/menu.spec.ts +101 -101
  513. package/src/common/message-rpc/channel.spec.ts +88 -88
  514. package/src/common/message-rpc/channel.ts +300 -300
  515. package/src/common/message-rpc/index.ts +22 -22
  516. package/src/common/message-rpc/message-buffer.ts +105 -105
  517. package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
  518. package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
  519. package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
  520. package/src/common/message-rpc/rpc-protocol.ts +255 -255
  521. package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
  522. package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
  523. package/src/common/message-service-protocol.ts +148 -148
  524. package/src/common/message-service.ts +226 -226
  525. package/src/common/messaging/connection-error-handler.ts +73 -73
  526. package/src/common/messaging/connection-management.ts +43 -43
  527. package/src/common/messaging/handler.ts +26 -26
  528. package/src/common/messaging/index.ts +19 -19
  529. package/src/common/messaging/proxy-factory.spec.ts +108 -108
  530. package/src/common/messaging/proxy-factory.ts +336 -336
  531. package/src/common/messaging/socket-write-buffer.ts +52 -52
  532. package/src/common/messaging/web-socket-channel.ts +76 -76
  533. package/src/common/nls.ts +151 -151
  534. package/src/common/numbers.ts +21 -21
  535. package/src/common/objects.spec.ts +112 -112
  536. package/src/common/objects.ts +123 -123
  537. package/src/common/os.ts +82 -82
  538. package/src/common/path.spec.ts +415 -415
  539. package/src/common/path.ts +334 -334
  540. package/src/common/paths.ts +250 -250
  541. package/src/common/performance/index.ts +19 -19
  542. package/src/common/performance/measurement-protocol.ts +104 -104
  543. package/src/common/performance/measurement.ts +130 -130
  544. package/src/common/performance/stopwatch.ts +183 -183
  545. package/src/common/preferences/preference-schema.ts +101 -101
  546. package/src/common/preferences/preference-scope.spec.ts +48 -48
  547. package/src/common/preferences/preference-scope.ts +68 -68
  548. package/src/common/prioritizeable.ts +58 -58
  549. package/src/common/progress-service-protocol.ts +35 -35
  550. package/src/common/progress-service.ts +82 -82
  551. package/src/common/promise-util.spec.ts +102 -102
  552. package/src/common/promise-util.ts +143 -143
  553. package/src/common/quick-pick-service.ts +353 -353
  554. package/src/common/reference.spec.ts +145 -145
  555. package/src/common/reference.ts +230 -230
  556. package/src/common/resource.ts +430 -430
  557. package/src/common/selection-command-handler.ts +101 -101
  558. package/src/common/selection-service.spec.ts +43 -43
  559. package/src/common/selection-service.ts +49 -49
  560. package/src/common/selection.ts +50 -50
  561. package/src/common/severity.ts +111 -111
  562. package/src/common/stream.ts +718 -718
  563. package/src/common/strings.ts +231 -231
  564. package/src/common/telemetry.ts +45 -45
  565. package/src/common/ternary-search-tree.ts +417 -417
  566. package/src/common/test/expect.ts +34 -34
  567. package/src/common/test/mock-logger.ts +118 -118
  568. package/src/common/test/mock-menu.ts +35 -35
  569. package/src/common/test/mock-resource-provider.ts +33 -33
  570. package/src/common/theme.ts +68 -68
  571. package/src/common/types.spec.ts +86 -86
  572. package/src/common/types.ts +140 -140
  573. package/src/common/uri-command-handler.spec.ts +90 -90
  574. package/src/common/uri-command-handler.ts +148 -148
  575. package/src/common/uri.spec.ts +278 -278
  576. package/src/common/uri.ts +279 -279
  577. package/src/common/uuid.ts +45 -45
  578. package/src/common/version.ts +17 -17
  579. package/src/common/view-column.ts +33 -33
  580. package/src/common/window.ts +34 -34
  581. package/src/electron-browser/electron-clipboard-service.ts +32 -32
  582. package/src/electron-browser/electron-uri-handler.ts +42 -0
  583. package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
  584. package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
  585. package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
  586. package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -338
  587. package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
  588. package/src/electron-browser/menu/electron-menu-module.ts +40 -40
  589. package/src/electron-browser/menu/electron-menu-style.css +110 -110
  590. package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
  591. package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
  592. package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
  593. package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
  594. package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
  595. package/src/electron-browser/preload.ts +264 -249
  596. package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
  597. package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
  598. package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
  599. package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
  600. package/src/electron-browser/window/electron-window-module.ts +48 -45
  601. package/src/electron-browser/window/electron-window-preferences.ts +76 -76
  602. package/src/electron-browser/window/electron-window-service.ts +109 -109
  603. package/src/electron-browser/window/external-app-open-handler.ts +42 -42
  604. package/src/electron-common/electron-api.ts +157 -154
  605. package/src/electron-common/electron-main-window-service.ts +24 -24
  606. package/src/electron-common/electron-token.ts +27 -27
  607. package/src/electron-main/electron-api-main.ts +373 -347
  608. package/src/electron-main/electron-main-application-module.ts +65 -65
  609. package/src/electron-main/electron-main-application.ts +860 -818
  610. package/src/electron-main/electron-main-constants.ts +23 -23
  611. package/src/electron-main/electron-main-window-service-impl.ts +44 -44
  612. package/src/electron-main/electron-security-token-service.ts +36 -36
  613. package/src/electron-main/event-utils.ts +36 -36
  614. package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
  615. package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
  616. package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
  617. package/src/electron-main/theia-electron-window.ts +219 -214
  618. package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
  619. package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
  620. package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
  621. package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
  622. package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
  623. package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
  624. package/src/electron-node/request/electron-backend-request-module.ts +23 -23
  625. package/src/electron-node/request/electron-backend-request-service.ts +78 -78
  626. package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
  627. package/src/electron-node/token/electron-token-backend-module.ts +28 -28
  628. package/src/electron-node/token/electron-token-validator.ts +93 -93
  629. package/src/node/application-server.ts +59 -59
  630. package/src/node/backend-application-config-provider.spec.ts +29 -29
  631. package/src/node/backend-application-config-provider.ts +48 -48
  632. package/src/node/backend-application-module.ts +139 -139
  633. package/src/node/backend-application.ts +374 -374
  634. package/src/node/cli.spec.ts +94 -94
  635. package/src/node/cli.ts +63 -63
  636. package/src/node/console-logger-server.spec.ts +59 -59
  637. package/src/node/console-logger-server.ts +76 -76
  638. package/src/node/debug.ts +30 -30
  639. package/src/node/dynamic-require.ts +56 -56
  640. package/src/node/env-variables/env-variables-server.ts +123 -123
  641. package/src/node/env-variables/index.ts +17 -17
  642. package/src/node/environment-utils.spec.ts +92 -92
  643. package/src/node/environment-utils.ts +66 -66
  644. package/src/node/file-uri.spec.ts +76 -76
  645. package/src/node/filesystem-locking.ts +77 -77
  646. package/src/node/hosting/backend-application-hosts.ts +60 -60
  647. package/src/node/hosting/backend-hosting-module.ts +26 -26
  648. package/src/node/hosting/ws-origin-validator.ts +36 -36
  649. package/src/node/i18n/i18n-backend-module.ts +42 -42
  650. package/src/node/i18n/localization-contribution.ts +112 -112
  651. package/src/node/i18n/localization-provider.ts +125 -125
  652. package/src/node/i18n/localization-server.ts +52 -52
  653. package/src/node/i18n/theia-localization-contribution.ts +40 -36
  654. package/src/node/index.ts +22 -22
  655. package/src/node/key-store-server.ts +162 -162
  656. package/src/node/logger-backend-module.ts +88 -88
  657. package/src/node/logger-cli-contribution.spec.ts +245 -245
  658. package/src/node/logger-cli-contribution.ts +168 -168
  659. package/src/node/main.ts +33 -33
  660. package/src/node/messaging/binary-message-pipe.ts +168 -168
  661. package/src/node/messaging/connection-container-module.ts +96 -96
  662. package/src/node/messaging/default-messaging-service.ts +129 -129
  663. package/src/node/messaging/frontend-connection-service.ts +24 -24
  664. package/src/node/messaging/index.ts +19 -19
  665. package/src/node/messaging/ipc-bootstrap.ts +27 -27
  666. package/src/node/messaging/ipc-channel.ts +77 -77
  667. package/src/node/messaging/ipc-connection-provider.ts +107 -107
  668. package/src/node/messaging/ipc-protocol.ts +76 -76
  669. package/src/node/messaging/messaging-backend-module.ts +52 -52
  670. package/src/node/messaging/messaging-listeners.ts +52 -52
  671. package/src/node/messaging/messaging-service.ts +46 -46
  672. package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
  673. package/src/node/messaging/websocket-endpoint.ts +79 -79
  674. package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
  675. package/src/node/os-backend-provider.ts +25 -25
  676. package/src/node/performance/index.ts +18 -18
  677. package/src/node/performance/measurement-backend-bindings.ts +35 -35
  678. package/src/node/performance/node-stopwatch.ts +40 -40
  679. package/src/node/process-utils.spec.ts +48 -48
  680. package/src/node/process-utils.ts +102 -102
  681. package/src/node/remote/backend-remote-service.ts +25 -25
  682. package/src/node/remote/remote-cli-contribution.ts +34 -34
  683. package/src/node/remote/remote-copy-contribution.ts +45 -45
  684. package/src/node/request/backend-request-facade.ts +39 -39
  685. package/src/node/request/backend-request-module.ts +25 -25
  686. package/src/node/request/proxy-cli-contribution.ts +65 -65
  687. package/src/node/ws-request-validators.ts +56 -56
  688. package/src/typings/native-keymap.d.ts +108 -108
  689. package/i18n/nls.pt-pt.json +0 -552
@@ -1,347 +1,373 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2023 STMicroelectronics and others.
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import {
18
- ipcMain, BrowserWindow, Menu, MenuItemConstructorOptions, webContents, WebContents, session, shell, clipboard, IpcMainEvent
19
- } from '@theia/electron/shared/electron';
20
- import * as nativeKeymap from '@theia/electron/shared/native-keymap';
21
-
22
- import { inject, injectable } from 'inversify';
23
- import { FrontendApplicationState, StopReason } from '../common/frontend-application-state';
24
- import { ElectronSecurityToken } from '../electron-common/electron-token';
25
- import {
26
- CHANNEL_GET_SECURITY_TOKEN, CHANNEL_SET_MENU, MenuDto, CHANNEL_INVOKE_MENU, CHANNEL_FOCUS_WINDOW,
27
- CHANNEL_ATTACH_SECURITY_TOKEN, CHANNEL_OPEN_POPUP, CHANNEL_ON_CLOSE_POPUP, CHANNEL_CLOSE_POPUP,
28
- CHANNEL_GET_TITLE_STYLE_AT_STARTUP,
29
- CHANNEL_MINIMIZE,
30
- CHANNEL_MAXIMIZE,
31
- CHANNEL_UNMAXIMIZE,
32
- CHANNEL_CLOSE,
33
- CHANNEL_ON_WINDOW_EVENT,
34
- WindowEvent,
35
- CHANNEL_TOGGLE_DEVTOOLS,
36
- CHANNEL_SET_ZOOM_LEVEL,
37
- CHANNEL_GET_ZOOM_LEVEL,
38
- CHANNEL_IS_FULL_SCREENABLE,
39
- CHANNEL_REQUEST_CLOSE,
40
- CHANNEL_RESTART,
41
- CHANNEL_SET_TITLE_STYLE,
42
- CHANNEL_REQUEST_RELOAD,
43
- CHANNEL_APP_STATE_CHANGED,
44
- CHANNEL_SHOW_ITEM_IN_FOLDER,
45
- CHANNEL_READ_CLIPBOARD,
46
- CHANNEL_WRITE_CLIPBOARD,
47
- CHANNEL_IPC_CONNECTION,
48
- CHANNEL_IS_FULL_SCREEN,
49
- InternalMenuDto,
50
- CHANNEL_SET_MENU_BAR_VISIBLE,
51
- CHANNEL_TOGGLE_FULL_SCREEN,
52
- CHANNEL_IS_MAXIMIZED,
53
- CHANNEL_REQUEST_SECONDARY_CLOSE,
54
- CHANNEL_SET_BACKGROUND_COLOR,
55
- CHANNEL_WC_METADATA,
56
- CHANNEL_ABOUT_TO_CLOSE,
57
- CHANNEL_OPEN_WITH_SYSTEM_APP
58
- } from '../electron-common/electron-api';
59
- import { ElectronMainApplication, ElectronMainApplicationContribution } from './electron-main-application';
60
- import { Disposable, DisposableCollection, isOSX, MaybePromise } from '../common';
61
- import { createDisposableListener } from './event-utils';
62
-
63
- @injectable()
64
- export class TheiaMainApi implements ElectronMainApplicationContribution {
65
- @inject(ElectronSecurityToken)
66
- protected electronSecurityToken: ElectronSecurityToken;
67
-
68
- protected readonly openPopups = new Map<number, Menu>();
69
-
70
- onStart(application: ElectronMainApplication): MaybePromise<void> {
71
- ipcMain.on(CHANNEL_WC_METADATA, event => {
72
- event.returnValue = event.sender.id.toString();
73
- });
74
-
75
- // electron security token
76
- ipcMain.on(CHANNEL_GET_SECURITY_TOKEN, event => {
77
- event.returnValue = this.electronSecurityToken.value;
78
- });
79
-
80
- ipcMain.handle(CHANNEL_ATTACH_SECURITY_TOKEN, (event, endpoint) => session.defaultSession.cookies.set({
81
- url: endpoint,
82
- name: ElectronSecurityToken,
83
- value: JSON.stringify(this.electronSecurityToken),
84
- httpOnly: true,
85
- sameSite: 'no_restriction'
86
- }));
87
-
88
- // application menu
89
- ipcMain.on(CHANNEL_SET_MENU, (event, menuId: number, menu: MenuDto[]) => {
90
- let electronMenu: Menu | null;
91
- if (menu) {
92
- electronMenu = Menu.buildFromTemplate(this.fromMenuDto(event.sender, menuId, menu));
93
- } else {
94
- // eslint-disable-next-line no-null/no-null
95
- electronMenu = null;
96
- }
97
- if (isOSX) {
98
- Menu.setApplicationMenu(electronMenu);
99
- } else {
100
- BrowserWindow.fromWebContents(event.sender)?.setMenu(electronMenu);
101
- }
102
- });
103
-
104
- ipcMain.on(CHANNEL_SET_MENU_BAR_VISIBLE, (event, visible: boolean, windowName: string | undefined) => {
105
- let electronWindow;
106
- if (windowName) {
107
- electronWindow = BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName);
108
- } else {
109
- electronWindow = BrowserWindow.fromWebContents(event.sender);
110
- }
111
- if (electronWindow) {
112
- electronWindow.setMenuBarVisibility(visible);
113
- } else {
114
- console.warn(`There is no known secondary window '${windowName}'. Thus, the menu bar could not be made visible.`);
115
- }
116
- });
117
-
118
- // popup menu
119
- ipcMain.handle(CHANNEL_OPEN_POPUP, (event, menuId, menu, x, y, windowName?: string) => {
120
- const zoom = event.sender.getZoomFactor();
121
- // TODO: Remove the offset once Electron fixes https://github.com/electron/electron/issues/31641
122
- const offset = process.platform === 'win32' ? 0 : 2;
123
- // x and y values must be Ints or else there is a conversion error
124
- x = Math.round(x * zoom) + offset;
125
- y = Math.round(y * zoom) + offset;
126
- const popup = Menu.buildFromTemplate(this.fromMenuDto(event.sender, menuId, menu));
127
- this.openPopups.set(menuId, popup);
128
- let electronWindow: BrowserWindow | undefined;
129
- if (windowName) {
130
- electronWindow = BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName);
131
- } else {
132
- electronWindow = BrowserWindow.fromWebContents(event.sender) || undefined;
133
- }
134
- popup.popup({
135
- window: electronWindow,
136
- callback: () => {
137
- this.openPopups.delete(menuId);
138
- event.sender.send(CHANNEL_ON_CLOSE_POPUP, menuId);
139
- }
140
- });
141
- });
142
-
143
- ipcMain.handle(CHANNEL_CLOSE_POPUP, (event, handle) => {
144
- if (this.openPopups.has(handle)) {
145
- this.openPopups.get(handle)!.closePopup();
146
- }
147
- });
148
-
149
- // focus windows for secondary window support
150
- ipcMain.on(CHANNEL_FOCUS_WINDOW, (event, windowName) => {
151
- const electronWindow = windowName
152
- ? BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName)
153
- : BrowserWindow.fromWebContents(event.sender);
154
- if (electronWindow) {
155
- if (electronWindow.isMinimized()) {
156
- electronWindow.restore();
157
- }
158
- electronWindow.focus();
159
- } else {
160
- console.warn(`There is no known secondary window '${windowName}'. Thus, the window could not be focussed.`);
161
- }
162
- });
163
-
164
- ipcMain.on(CHANNEL_SHOW_ITEM_IN_FOLDER, (event, fsPath) => {
165
- shell.showItemInFolder(fsPath);
166
- });
167
-
168
- ipcMain.on(CHANNEL_OPEN_WITH_SYSTEM_APP, (event, fsPath) => {
169
- shell.openPath(fsPath);
170
- });
171
-
172
- ipcMain.handle(CHANNEL_GET_TITLE_STYLE_AT_STARTUP, event => application.getTitleBarStyleAtStartup(event.sender));
173
-
174
- ipcMain.on(CHANNEL_SET_TITLE_STYLE, (event, style) => application.setTitleBarStyle(event.sender, style));
175
-
176
- ipcMain.on(CHANNEL_SET_BACKGROUND_COLOR, (event, backgroundColor) => application.setBackgroundColor(event.sender, backgroundColor));
177
-
178
- ipcMain.on(CHANNEL_MINIMIZE, event => {
179
- BrowserWindow.fromWebContents(event.sender)?.minimize();
180
- });
181
-
182
- ipcMain.on(CHANNEL_IS_MAXIMIZED, event => {
183
- event.returnValue = BrowserWindow.fromWebContents(event.sender)?.isMaximized();
184
- });
185
-
186
- ipcMain.on(CHANNEL_MAXIMIZE, event => {
187
- BrowserWindow.fromWebContents(event.sender)?.maximize();
188
- });
189
-
190
- ipcMain.on(CHANNEL_UNMAXIMIZE, event => {
191
- BrowserWindow.fromWebContents(event.sender)?.unmaximize();
192
- });
193
-
194
- ipcMain.on(CHANNEL_CLOSE, event => {
195
- BrowserWindow.fromWebContents(event.sender)?.close();
196
- });
197
-
198
- ipcMain.on(CHANNEL_RESTART, event => {
199
- application.restart(event.sender);
200
- });
201
-
202
- ipcMain.on(CHANNEL_TOGGLE_DEVTOOLS, event => {
203
- event.sender.toggleDevTools();
204
- });
205
-
206
- ipcMain.on(CHANNEL_SET_ZOOM_LEVEL, (event, zoomLevel: number) => {
207
- event.sender.setZoomLevel(zoomLevel);
208
- });
209
-
210
- ipcMain.handle(CHANNEL_GET_ZOOM_LEVEL, event => event.sender.getZoomLevel());
211
-
212
- ipcMain.on(CHANNEL_TOGGLE_FULL_SCREEN, event => {
213
- const win = BrowserWindow.fromWebContents(event.sender);
214
- if (win) {
215
- win.setFullScreen(!win.isFullScreen());
216
- }
217
- });
218
- ipcMain.on(CHANNEL_IS_FULL_SCREENABLE, event => {
219
- event.returnValue = BrowserWindow.fromWebContents(event.sender)?.isFullScreenable();
220
- });
221
-
222
- ipcMain.on(CHANNEL_IS_FULL_SCREEN, event => {
223
- event.returnValue = BrowserWindow.fromWebContents(event.sender)?.isFullScreen();
224
- });
225
-
226
- ipcMain.on(CHANNEL_READ_CLIPBOARD, event => {
227
- event.returnValue = clipboard.readText();
228
- });
229
- ipcMain.on(CHANNEL_WRITE_CLIPBOARD, (event, text) => {
230
- clipboard.writeText(text);
231
- });
232
-
233
- nativeKeymap.onDidChangeKeyboardLayout(() => {
234
- const newLayout = {
235
- info: nativeKeymap.getCurrentKeyboardLayout(),
236
- mapping: nativeKeymap.getKeyMap()
237
- };
238
- for (const webContent of webContents.getAllWebContents()) {
239
- webContent.send('keyboardLayoutChanged', newLayout);
240
- }
241
- });
242
- }
243
-
244
- fromMenuDto(sender: WebContents, menuId: number, menuDto: InternalMenuDto[]): MenuItemConstructorOptions[] {
245
- return menuDto.map(dto => {
246
-
247
- const result: MenuItemConstructorOptions = {
248
- id: dto.id,
249
- label: dto.label,
250
- type: dto.type,
251
- checked: dto.checked,
252
- enabled: dto.enabled,
253
- visible: dto.visible,
254
- role: dto.role,
255
- accelerator: dto.accelerator
256
- };
257
- if (dto.submenu) {
258
- result.submenu = this.fromMenuDto(sender, menuId, dto.submenu);
259
- }
260
- if (dto.handlerId) {
261
- result.click = () => {
262
- sender.send(CHANNEL_INVOKE_MENU, menuId, dto.handlerId);
263
- };
264
- }
265
- return result;
266
- });
267
- }
268
- }
269
-
270
- let nextReplyChannel: number = 0;
271
-
272
- export namespace TheiaRendererAPI {
273
- export function sendWindowEvent(wc: WebContents, event: WindowEvent): void {
274
- wc.send(CHANNEL_ON_WINDOW_EVENT, event);
275
- }
276
-
277
- export function sendAboutToClose(wc: WebContents): Promise<void> {
278
- return new Promise<void>(resolve => {
279
- const channelNr = nextReplyChannel++;
280
- const replyChannel = `aboutToClose${channelNr}`;
281
- const l = createDisposableListener(ipcMain, replyChannel, e => {
282
- l.dispose();
283
- resolve();
284
- });
285
-
286
- wc.send(CHANNEL_ABOUT_TO_CLOSE, replyChannel);
287
- });
288
- }
289
-
290
- export function requestClose(wc: WebContents, stopReason: StopReason): Promise<boolean> {
291
- const channelNr = nextReplyChannel++;
292
- const confirmChannel = `confirm-${channelNr}`;
293
- const cancelChannel = `cancel-${channelNr}`;
294
- const disposables = new DisposableCollection();
295
-
296
- return new Promise<boolean>(resolve => {
297
- wc.send(CHANNEL_REQUEST_CLOSE, stopReason, confirmChannel, cancelChannel);
298
- createDisposableListener(ipcMain, confirmChannel, e => {
299
- resolve(true);
300
- }, disposables);
301
- createDisposableListener(ipcMain, cancelChannel, e => {
302
- resolve(false);
303
- }, disposables);
304
- }).finally(() => disposables.dispose());
305
- }
306
-
307
- export function requestSecondaryClose(mainWindow: WebContents, secondaryWindow: WebContents): Promise<boolean> {
308
- const channelNr = nextReplyChannel++;
309
- const confirmChannel = `confirm-${channelNr}`;
310
- const cancelChannel = `cancel-${channelNr}`;
311
- const disposables = new DisposableCollection();
312
-
313
- return new Promise<boolean>(resolve => {
314
- mainWindow.send(CHANNEL_REQUEST_SECONDARY_CLOSE, secondaryWindow.mainFrame.name, confirmChannel, cancelChannel);
315
- createDisposableListener(ipcMain, confirmChannel, e => {
316
- resolve(true);
317
- }, disposables);
318
- createDisposableListener(ipcMain, cancelChannel, e => {
319
- resolve(false);
320
- }, disposables);
321
- }).finally(() => disposables.dispose());
322
- }
323
-
324
- export function onRequestReload(wc: WebContents, handler: () => void): Disposable {
325
- return createWindowListener(wc, CHANNEL_REQUEST_RELOAD, handler);
326
- }
327
-
328
- export function onApplicationStateChanged(wc: WebContents, handler: (state: FrontendApplicationState) => void): Disposable {
329
- return createWindowListener(wc, CHANNEL_APP_STATE_CHANGED, state => handler(state as FrontendApplicationState));
330
- }
331
-
332
- export function onIpcData(handler: (sender: WebContents, data: Uint8Array) => void): Disposable {
333
- return createDisposableListener<IpcMainEvent>(ipcMain, CHANNEL_IPC_CONNECTION, (event, data) => handler(event.sender, data as Uint8Array));
334
- }
335
-
336
- export function sendData(wc: WebContents, data: Uint8Array): void {
337
- wc.send(CHANNEL_IPC_CONNECTION, data);
338
- }
339
-
340
- function createWindowListener(wc: WebContents, channel: string, handler: (...args: unknown[]) => unknown): Disposable {
341
- return createDisposableListener<IpcMainEvent>(ipcMain, channel, (event, ...args) => {
342
- if (wc.id === event.sender.id) {
343
- handler(...args);
344
- }
345
- });
346
- }
347
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2023 STMicroelectronics and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import {
18
+ ipcMain, BrowserWindow, Menu, MenuItemConstructorOptions, webContents, WebContents, session, shell, clipboard, IpcMainEvent
19
+ } from '@theia/electron/shared/electron';
20
+ import * as nativeKeymap from '@theia/electron/shared/native-keymap';
21
+
22
+ import { inject, injectable } from 'inversify';
23
+ import { FrontendApplicationState, StopReason } from '../common/frontend-application-state';
24
+ import { ElectronSecurityToken } from '../electron-common/electron-token';
25
+ import {
26
+ CHANNEL_GET_SECURITY_TOKEN, CHANNEL_SET_MENU, MenuDto, CHANNEL_INVOKE_MENU, CHANNEL_FOCUS_WINDOW,
27
+ CHANNEL_ATTACH_SECURITY_TOKEN, CHANNEL_OPEN_POPUP, CHANNEL_ON_CLOSE_POPUP, CHANNEL_CLOSE_POPUP,
28
+ CHANNEL_GET_TITLE_STYLE_AT_STARTUP,
29
+ CHANNEL_MINIMIZE,
30
+ CHANNEL_MAXIMIZE,
31
+ CHANNEL_UNMAXIMIZE,
32
+ CHANNEL_CLOSE,
33
+ CHANNEL_ON_WINDOW_EVENT,
34
+ WindowEvent,
35
+ CHANNEL_TOGGLE_DEVTOOLS,
36
+ CHANNEL_SET_ZOOM_LEVEL,
37
+ CHANNEL_GET_ZOOM_LEVEL,
38
+ CHANNEL_IS_FULL_SCREENABLE,
39
+ CHANNEL_REQUEST_CLOSE,
40
+ CHANNEL_RESTART,
41
+ CHANNEL_SET_TITLE_STYLE,
42
+ CHANNEL_REQUEST_RELOAD,
43
+ CHANNEL_APP_STATE_CHANGED,
44
+ CHANNEL_SHOW_ITEM_IN_FOLDER,
45
+ CHANNEL_READ_CLIPBOARD,
46
+ CHANNEL_WRITE_CLIPBOARD,
47
+ CHANNEL_IPC_CONNECTION,
48
+ CHANNEL_IS_FULL_SCREEN,
49
+ InternalMenuDto,
50
+ CHANNEL_SET_MENU_BAR_VISIBLE,
51
+ CHANNEL_TOGGLE_FULL_SCREEN,
52
+ CHANNEL_IS_MAXIMIZED,
53
+ CHANNEL_REQUEST_SECONDARY_CLOSE,
54
+ CHANNEL_SET_BACKGROUND_COLOR,
55
+ CHANNEL_WC_METADATA,
56
+ CHANNEL_ABOUT_TO_CLOSE,
57
+ CHANNEL_OPEN_WITH_SYSTEM_APP,
58
+ CHANNEL_OPEN_URL
59
+ } from '../electron-common/electron-api';
60
+ import { ElectronMainApplication, ElectronMainApplicationContribution } from './electron-main-application';
61
+ import { Disposable, DisposableCollection, isOSX, MaybePromise } from '../common';
62
+ import { createDisposableListener } from './event-utils';
63
+
64
+ @injectable()
65
+ export class TheiaMainApi implements ElectronMainApplicationContribution {
66
+ @inject(ElectronSecurityToken)
67
+ protected electronSecurityToken: ElectronSecurityToken;
68
+
69
+ protected readonly openPopups = new Map<number, Menu>();
70
+
71
+ onStart(application: ElectronMainApplication): MaybePromise<void> {
72
+ ipcMain.on(CHANNEL_WC_METADATA, event => {
73
+ event.returnValue = event.sender.id.toString();
74
+ });
75
+
76
+ // electron security token
77
+ ipcMain.on(CHANNEL_GET_SECURITY_TOKEN, event => {
78
+ event.returnValue = this.electronSecurityToken.value;
79
+ });
80
+
81
+ ipcMain.handle(CHANNEL_ATTACH_SECURITY_TOKEN, (event, endpoint) => session.defaultSession.cookies.set({
82
+ url: endpoint,
83
+ name: ElectronSecurityToken,
84
+ value: JSON.stringify(this.electronSecurityToken),
85
+ httpOnly: true,
86
+ sameSite: 'no_restriction'
87
+ }));
88
+
89
+ // application menu
90
+ ipcMain.on(CHANNEL_SET_MENU, (event, menuId: number, menu: MenuDto[]) => {
91
+ let electronMenu: Menu | null;
92
+ if (menu) {
93
+ electronMenu = Menu.buildFromTemplate(this.fromMenuDto(event.sender, menuId, menu));
94
+ } else {
95
+ // eslint-disable-next-line no-null/no-null
96
+ electronMenu = null;
97
+ }
98
+ if (isOSX) {
99
+ Menu.setApplicationMenu(electronMenu);
100
+ } else {
101
+ BrowserWindow.fromWebContents(event.sender)?.setMenu(electronMenu);
102
+ }
103
+ });
104
+
105
+ ipcMain.on(CHANNEL_SET_MENU_BAR_VISIBLE, (event, visible: boolean, windowName: string | undefined) => {
106
+ let electronWindow;
107
+ if (windowName) {
108
+ electronWindow = BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName);
109
+ } else {
110
+ electronWindow = BrowserWindow.fromWebContents(event.sender);
111
+ }
112
+ if (electronWindow) {
113
+ electronWindow.setMenuBarVisibility(visible);
114
+ } else {
115
+ console.warn(`There is no known secondary window '${windowName}'. Thus, the menu bar could not be made visible.`);
116
+ }
117
+ });
118
+
119
+ // popup menu
120
+ ipcMain.handle(CHANNEL_OPEN_POPUP, (event, menuId, menu, x, y, windowName?: string) => {
121
+ const zoom = event.sender.getZoomFactor();
122
+ // TODO: Remove the offset once Electron fixes https://github.com/electron/electron/issues/31641
123
+ const offset = process.platform === 'win32' ? 0 : 2;
124
+ // x and y values must be Ints or else there is a conversion error
125
+ x = Math.round(x * zoom) + offset;
126
+ y = Math.round(y * zoom) + offset;
127
+ const popup = Menu.buildFromTemplate(this.fromMenuDto(event.sender, menuId, menu));
128
+ this.openPopups.set(menuId, popup);
129
+ let electronWindow: BrowserWindow | undefined;
130
+ if (windowName) {
131
+ electronWindow = BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName);
132
+ } else {
133
+ electronWindow = BrowserWindow.fromWebContents(event.sender) || undefined;
134
+ }
135
+ popup.popup({
136
+ window: electronWindow,
137
+ callback: () => {
138
+ this.openPopups.delete(menuId);
139
+ event.sender.send(CHANNEL_ON_CLOSE_POPUP, menuId);
140
+ }
141
+ });
142
+ });
143
+
144
+ ipcMain.handle(CHANNEL_CLOSE_POPUP, (event, handle) => {
145
+ if (this.openPopups.has(handle)) {
146
+ this.openPopups.get(handle)!.closePopup();
147
+ }
148
+ });
149
+
150
+ // focus windows for secondary window support
151
+ ipcMain.on(CHANNEL_FOCUS_WINDOW, (event, windowName) => {
152
+ const electronWindow = windowName
153
+ ? BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName)
154
+ : BrowserWindow.fromWebContents(event.sender);
155
+ if (electronWindow) {
156
+ if (electronWindow.isMinimized()) {
157
+ electronWindow.restore();
158
+ }
159
+ electronWindow.focus();
160
+ } else {
161
+ console.warn(`There is no known secondary window '${windowName}'. Thus, the window could not be focussed.`);
162
+ }
163
+ });
164
+
165
+ ipcMain.on(CHANNEL_SHOW_ITEM_IN_FOLDER, (event, fsPath) => {
166
+ shell.showItemInFolder(fsPath);
167
+ });
168
+
169
+ ipcMain.on(CHANNEL_OPEN_WITH_SYSTEM_APP, (event, uri) => {
170
+ shell.openExternal(uri);
171
+ });
172
+
173
+ ipcMain.handle(CHANNEL_GET_TITLE_STYLE_AT_STARTUP, event => application.getTitleBarStyleAtStartup(event.sender));
174
+
175
+ ipcMain.on(CHANNEL_SET_TITLE_STYLE, (event, style) => application.setTitleBarStyle(event.sender, style));
176
+
177
+ ipcMain.on(CHANNEL_SET_BACKGROUND_COLOR, (event, backgroundColor) => application.setBackgroundColor(event.sender, backgroundColor));
178
+
179
+ ipcMain.on(CHANNEL_MINIMIZE, event => {
180
+ BrowserWindow.fromWebContents(event.sender)?.minimize();
181
+ });
182
+
183
+ ipcMain.on(CHANNEL_IS_MAXIMIZED, event => {
184
+ event.returnValue = BrowserWindow.fromWebContents(event.sender)?.isMaximized();
185
+ });
186
+
187
+ ipcMain.on(CHANNEL_MAXIMIZE, event => {
188
+ BrowserWindow.fromWebContents(event.sender)?.maximize();
189
+ });
190
+
191
+ ipcMain.on(CHANNEL_UNMAXIMIZE, event => {
192
+ BrowserWindow.fromWebContents(event.sender)?.unmaximize();
193
+ });
194
+
195
+ ipcMain.on(CHANNEL_CLOSE, event => {
196
+ BrowserWindow.fromWebContents(event.sender)?.close();
197
+ });
198
+
199
+ ipcMain.on(CHANNEL_RESTART, event => {
200
+ application.restart(event.sender);
201
+ });
202
+
203
+ ipcMain.on(CHANNEL_TOGGLE_DEVTOOLS, event => {
204
+ event.sender.toggleDevTools();
205
+ });
206
+
207
+ ipcMain.on(CHANNEL_SET_ZOOM_LEVEL, (event, zoomLevel: number) => {
208
+ event.sender.setZoomLevel(zoomLevel);
209
+ });
210
+
211
+ ipcMain.handle(CHANNEL_GET_ZOOM_LEVEL, event => event.sender.getZoomLevel());
212
+
213
+ ipcMain.on(CHANNEL_TOGGLE_FULL_SCREEN, event => {
214
+ const win = BrowserWindow.fromWebContents(event.sender);
215
+ if (win) {
216
+ win.setFullScreen(!win.isFullScreen());
217
+ }
218
+ });
219
+ ipcMain.on(CHANNEL_IS_FULL_SCREENABLE, event => {
220
+ event.returnValue = BrowserWindow.fromWebContents(event.sender)?.isFullScreenable();
221
+ });
222
+
223
+ ipcMain.on(CHANNEL_IS_FULL_SCREEN, event => {
224
+ event.returnValue = BrowserWindow.fromWebContents(event.sender)?.isFullScreen();
225
+ });
226
+
227
+ ipcMain.on(CHANNEL_READ_CLIPBOARD, event => {
228
+ event.returnValue = clipboard.readText();
229
+ });
230
+ ipcMain.on(CHANNEL_WRITE_CLIPBOARD, (event, text) => {
231
+ clipboard.writeText(text);
232
+ });
233
+
234
+ nativeKeymap.onDidChangeKeyboardLayout(() => {
235
+ const newLayout = {
236
+ info: nativeKeymap.getCurrentKeyboardLayout(),
237
+ mapping: nativeKeymap.getKeyMap()
238
+ };
239
+ for (const webContent of webContents.getAllWebContents()) {
240
+ webContent.send('keyboardLayoutChanged', newLayout);
241
+ }
242
+ });
243
+ }
244
+
245
+ private isASCI(accelerator: string | undefined): boolean {
246
+ if (typeof accelerator !== 'string') {
247
+ return false;
248
+ }
249
+ for (let i = 0; i < accelerator.length; i++) {
250
+ if (accelerator.charCodeAt(i) > 127) {
251
+ return false;
252
+ }
253
+ }
254
+ return true;
255
+ }
256
+
257
+ fromMenuDto(sender: WebContents, menuId: number, menuDto: InternalMenuDto[]): MenuItemConstructorOptions[] {
258
+ return menuDto.map(dto => {
259
+ const result: MenuItemConstructorOptions = {
260
+ id: dto.id,
261
+ label: dto.label,
262
+ type: dto.type,
263
+ checked: dto.checked,
264
+ enabled: dto.enabled,
265
+ visible: dto.visible,
266
+ role: dto.role,
267
+ accelerator: this.isASCI(dto.accelerator) ? dto.accelerator : undefined
268
+ };
269
+ if (dto.submenu) {
270
+ result.submenu = this.fromMenuDto(sender, menuId, dto.submenu);
271
+ }
272
+ if (dto.handlerId) {
273
+ result.click = () => {
274
+ sender.send(CHANNEL_INVOKE_MENU, menuId, dto.handlerId);
275
+ };
276
+ }
277
+ return result;
278
+ });
279
+ }
280
+ }
281
+
282
+ let nextReplyChannel: number = 0;
283
+
284
+ export namespace TheiaRendererAPI {
285
+ export function sendWindowEvent(wc: WebContents, event: WindowEvent): void {
286
+ wc.send(CHANNEL_ON_WINDOW_EVENT, event);
287
+ }
288
+
289
+ export function openUrl(wc: WebContents, url: string): Promise<boolean> {
290
+ return new Promise<boolean>(resolve => {
291
+ const channelNr = nextReplyChannel++;
292
+ const replyChannel = `openUrl${channelNr}`;
293
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
294
+ const l = createDisposableListener(ipcMain, replyChannel, (e, args: any[]) => {
295
+ l.dispose();
296
+ resolve(args[0]);
297
+ });
298
+
299
+ wc.send(CHANNEL_OPEN_URL, url, replyChannel);
300
+ });
301
+ }
302
+
303
+ export function sendAboutToClose(wc: WebContents): Promise<void> {
304
+ return new Promise<void>(resolve => {
305
+ const channelNr = nextReplyChannel++;
306
+ const replyChannel = `aboutToClose${channelNr}`;
307
+ const l = createDisposableListener(ipcMain, replyChannel, e => {
308
+ l.dispose();
309
+ resolve();
310
+ });
311
+
312
+ wc.send(CHANNEL_ABOUT_TO_CLOSE, replyChannel);
313
+ });
314
+ }
315
+
316
+ export function requestClose(wc: WebContents, stopReason: StopReason): Promise<boolean> {
317
+ const channelNr = nextReplyChannel++;
318
+ const confirmChannel = `confirm-${channelNr}`;
319
+ const cancelChannel = `cancel-${channelNr}`;
320
+ const disposables = new DisposableCollection();
321
+
322
+ return new Promise<boolean>(resolve => {
323
+ wc.send(CHANNEL_REQUEST_CLOSE, stopReason, confirmChannel, cancelChannel);
324
+ createDisposableListener(ipcMain, confirmChannel, e => {
325
+ resolve(true);
326
+ }, disposables);
327
+ createDisposableListener(ipcMain, cancelChannel, e => {
328
+ resolve(false);
329
+ }, disposables);
330
+ }).finally(() => disposables.dispose());
331
+ }
332
+
333
+ export function requestSecondaryClose(mainWindow: WebContents, secondaryWindow: WebContents): Promise<boolean> {
334
+ const channelNr = nextReplyChannel++;
335
+ const confirmChannel = `confirm-${channelNr}`;
336
+ const cancelChannel = `cancel-${channelNr}`;
337
+ const disposables = new DisposableCollection();
338
+
339
+ return new Promise<boolean>(resolve => {
340
+ mainWindow.send(CHANNEL_REQUEST_SECONDARY_CLOSE, secondaryWindow.mainFrame.name, confirmChannel, cancelChannel);
341
+ createDisposableListener(ipcMain, confirmChannel, e => {
342
+ resolve(true);
343
+ }, disposables);
344
+ createDisposableListener(ipcMain, cancelChannel, e => {
345
+ resolve(false);
346
+ }, disposables);
347
+ }).finally(() => disposables.dispose());
348
+ }
349
+
350
+ export function onRequestReload(wc: WebContents, handler: () => void): Disposable {
351
+ return createWindowListener(wc, CHANNEL_REQUEST_RELOAD, handler);
352
+ }
353
+
354
+ export function onApplicationStateChanged(wc: WebContents, handler: (state: FrontendApplicationState) => void): Disposable {
355
+ return createWindowListener(wc, CHANNEL_APP_STATE_CHANGED, state => handler(state as FrontendApplicationState));
356
+ }
357
+
358
+ export function onIpcData(handler: (sender: WebContents, data: Uint8Array) => void): Disposable {
359
+ return createDisposableListener<IpcMainEvent>(ipcMain, CHANNEL_IPC_CONNECTION, (event, data) => handler(event.sender, data as Uint8Array));
360
+ }
361
+
362
+ export function sendData(wc: WebContents, data: Uint8Array): void {
363
+ wc.send(CHANNEL_IPC_CONNECTION, data);
364
+ }
365
+
366
+ function createWindowListener(wc: WebContents, channel: string, handler: (...args: unknown[]) => unknown): Disposable {
367
+ return createDisposableListener<IpcMainEvent>(ipcMain, channel, (event, ...args) => {
368
+ if (wc.id === event.sender.id) {
369
+ handler(...args);
370
+ }
371
+ });
372
+ }
373
+ }