Hide linux tray icon setting on environments without tray icon

This commit is contained in:
Bernd Schoolmann 2024-06-14 17:51:08 +02:00
parent e3b425069c
commit e96e648262
No known key found for this signature in database
4 changed files with 86 additions and 61 deletions

View File

@ -266,70 +266,72 @@
</button>
</h2>
<ng-container *ngIf="showAppPreferences">
<div class="form-group">
<div class="checkbox">
<label for="enableTray">
<input
id="enableTray"
type="checkbox"
aria-describedby="enableTrayHelp"
formControlName="enableTray"
(change)="saveTray()"
/>
{{ enableTrayText }}
</label>
<ng-container *ngIf="isTrayAvailable">
<div class="form-group">
<div class="checkbox">
<label for="enableTray">
<input
id="enableTray"
type="checkbox"
aria-describedby="enableTrayHelp"
formControlName="enableTray"
(change)="saveTray()"
/>
{{ enableTrayText }}
</label>
</div>
<small id="enableTrayHelp" class="help-block">{{ enableTrayDescText }}</small>
</div>
<small id="enableTrayHelp" class="help-block">{{ enableTrayDescText }}</small>
</div>
<div class="form-group" *ngIf="showMinToTray">
<div class="checkbox">
<label for="enableMinToTray">
<input
id="enableMinToTray"
type="checkbox"
aria-describedby="enableMinToTrayHelp"
formControlName="enableMinToTray"
(change)="saveMinToTray()"
/>
{{ enableMinToTrayText }}
</label>
<div class="form-group" *ngIf="showMinToTray">
<div class="checkbox">
<label for="enableMinToTray">
<input
id="enableMinToTray"
type="checkbox"
aria-describedby="enableMinToTrayHelp"
formControlName="enableMinToTray"
(change)="saveMinToTray()"
/>
{{ enableMinToTrayText }}
</label>
</div>
<small id="enableMinToTrayHelp" class="help-block">{{
enableMinToTrayDescText
}}</small>
</div>
<small id="enableMinToTrayHelp" class="help-block">{{
enableMinToTrayDescText
}}</small>
</div>
<div class="form-group">
<div class="checkbox">
<label for="enableCloseToTray">
<input
id="enableCloseToTray"
type="checkbox"
aria-describedby="enableCloseToTrayHelp"
formControlName="enableCloseToTray"
(change)="saveCloseToTray()"
/>
{{ enableCloseToTrayText }}
</label>
<div class="form-group">
<div class="checkbox">
<label for="enableCloseToTray">
<input
id="enableCloseToTray"
type="checkbox"
aria-describedby="enableCloseToTrayHelp"
formControlName="enableCloseToTray"
(change)="saveCloseToTray()"
/>
{{ enableCloseToTrayText }}
</label>
</div>
<small id="enableCloseToTrayHelp" class="help-block">{{
enableCloseToTrayDescText
}}</small>
</div>
<small id="enableCloseToTrayHelp" class="help-block">{{
enableCloseToTrayDescText
}}</small>
</div>
<div class="form-group">
<div class="checkbox">
<label for="startToTray">
<input
id="startToTray"
type="checkbox"
aria-describedby="startToTrayHelp"
formControlName="startToTray"
(change)="saveStartToTray()"
/>
{{ startToTrayText }}
</label>
<div class="form-group">
<div class="checkbox">
<label for="startToTray">
<input
id="startToTray"
type="checkbox"
aria-describedby="startToTrayHelp"
formControlName="startToTray"
(change)="saveStartToTray()"
/>
{{ startToTrayText }}
</label>
</div>
<small id="startToTrayHelp" class="help-block">{{ startToTrayDescText }}</small>
</div>
<small id="startToTrayHelp" class="help-block">{{ startToTrayDescText }}</small>
</div>
</ng-container>
<div class="form-group">
<div class="checkbox">
<label for="openAtLogin">

View File

@ -45,6 +45,7 @@ export class SettingsComponent implements OnInit {
// For use in template
protected readonly VaultTimeoutAction = VaultTimeoutAction;
isTrayAvailable = true;
showMinToTray = false;
vaultTimeoutOptions: VaultTimeoutOption[];
localeOptions: any[];
@ -215,6 +216,7 @@ export class SettingsComponent implements OnInit {
}
async ngOnInit() {
this.isTrayAvailable = await ipc.platform.tray.isTrayAvailable();
this.userHasMasterPassword = await this.userVerificationService.hasMasterPassword();
this.isWindows = (await this.platformUtilsService.getDevice()) === DeviceType.WindowsDesktop;

View File

@ -1,6 +1,14 @@
import * as path from "path";
import { app, BrowserWindow, Menu, MenuItemConstructorOptions, nativeImage, Tray } from "electron";
import {
app,
BrowserWindow,
ipcMain,
Menu,
MenuItemConstructorOptions,
nativeImage,
Tray,
} from "electron";
import { firstValueFrom } from "rxjs";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
@ -59,6 +67,10 @@ export class TrayMain {
if (await firstValueFrom(this.desktopSettingsService.trayEnabled$)) {
this.showTray();
}
ipcMain.handle("tray.isTrayAvailable", async (event) => {
return this.isTrayAvailable();
});
}
setupWindowListeners(win: BrowserWindow) {
@ -195,4 +207,8 @@ export class TrayMain {
this.windowMain.win.close();
}
}
private isTrayAvailable() {
return this.tray != null;
}
}

View File

@ -59,6 +59,10 @@ const clipboard = {
write: (message: ClipboardWriteMessage) => ipcRenderer.invoke("clipboard.write", message),
};
const tray = {
isTrayAvailable: (): Promise<boolean> => ipcRenderer.invoke("tray.isTrayAvailable"),
};
const nativeMessaging = {
sendReply: (message: EncryptedMessageResponse | UnencryptedMessageResponse) => {
ipcRenderer.send("nativeMessagingReply", message);
@ -148,6 +152,7 @@ export default {
passwords,
biometric,
clipboard,
tray,
nativeMessaging,
crypto,
};