clipboard.ts 1.2 KB

123456789101112131415161718192021222324252627
  1. import { IPC_MESSAGES } from '@electron/internal/common/ipc-messages';
  2. // eslint-disable-next-line no-restricted-imports
  3. import type * as ipcRendererUtilsModule from '@electron/internal/renderer/ipc-renderer-internal-utils';
  4. const clipboard = process._linkedBinding('electron_common_clipboard');
  5. if (process.type === 'renderer') {
  6. const ipcRendererUtils = require('@electron/internal/renderer/ipc-renderer-internal-utils') as typeof ipcRendererUtilsModule;
  7. const makeRemoteMethod = function (method: keyof Electron.Clipboard): any {
  8. return (...args: any[]) => ipcRendererUtils.invokeSync(IPC_MESSAGES.BROWSER_CLIPBOARD_SYNC, method, ...args);
  9. };
  10. if (process.platform === 'linux') {
  11. // On Linux we could not access clipboard in renderer process.
  12. for (const method of Object.keys(clipboard) as (keyof Electron.Clipboard)[]) {
  13. clipboard[method] = makeRemoteMethod(method);
  14. }
  15. } else if (process.platform === 'darwin') {
  16. // Read/write to find pasteboard over IPC since only main process is notified of changes
  17. clipboard.readFindText = makeRemoteMethod('readFindText');
  18. clipboard.writeFindText = makeRemoteMethod('writeFindText');
  19. }
  20. }
  21. export default clipboard;