summaryrefslogtreecommitdiffhomepage
path: root/gui/src/main/user-interface.ts
diff options
context:
space:
mode:
Diffstat (limited to 'gui/src/main/user-interface.ts')
-rw-r--r--gui/src/main/user-interface.ts14
1 files changed, 14 insertions, 0 deletions
diff --git a/gui/src/main/user-interface.ts b/gui/src/main/user-interface.ts
index 88922f3f75..78af002c58 100644
--- a/gui/src/main/user-interface.ts
+++ b/gui/src/main/user-interface.ts
@@ -1,6 +1,8 @@
+import { exec } from 'child_process';
import { app, BrowserWindow, dialog, Menu, nativeImage, screen, Tray } from 'electron';
import path from 'path';
import { sprintf } from 'sprintf-js';
+import { promisify } from 'util';
import { closeToExpiry, hasExpired } from '../shared/account-expiry';
import { connectEnabled, disconnectEnabled, reconnectEnabled } from '../shared/connect-helper';
@@ -20,6 +22,8 @@ import { isMacOs11OrNewer } from './platform-version';
import TrayIconController, { TrayIconType } from './tray-icon-controller';
import WindowController, { WindowControllerDelegate } from './window-controller';
+const execAsync = promisify(exec);
+
export interface UserInterfaceDelegate {
cancelPendingNotifications(): void;
resetTunnelStateAnnouncements(): void;
@@ -69,6 +73,16 @@ export default class UserInterface implements WindowControllerDelegate {
this.browsingFiles = false;
return response;
});
+
+ IpcMainEventChannel.app.handleShowLaunchDaemonSettings(async () => {
+ try {
+ await execAsync(
+ 'open -W x-apple.systempreferences:com.apple.LoginItems-Settings.extension',
+ );
+ } catch (error) {
+ log.error(`Failed to open launch daemon settings: ${error}`);
+ }
+ });
}
public createTrayIconController(