diff --git a/app/common/typed-ipc.ts b/app/common/typed-ipc.ts index a16cc1bb6..ef39bf88c 100644 --- a/app/common/typed-ipc.ts +++ b/app/common/typed-ipc.ts @@ -83,6 +83,7 @@ export interface RendererMessage { "update-realm-icon": (serverURL: string, iconURL: string) => void; "update-realm-name": (serveRURL: string, realmName: string) => void; "webview-reload": () => void; + "exit-settings": () => void; zoomActualSize: () => void; zoomIn: () => void; zoomOut: () => void; diff --git a/app/renderer/css/preference.css b/app/renderer/css/preference.css index 6e943b3de..2f8eb8d50 100644 --- a/app/renderer/css/preference.css +++ b/app/renderer/css/preference.css @@ -86,6 +86,17 @@ td:nth-child(odd) { text-rendering: optimizeLegibility; } +.exit-sign { + float: right; + position: relative; + top: 1px; + margin-left: 3px; + font-size: 2rem; + line-height: 1; + font-weight: 600; + cursor: pointer; +} + #content { display: flex; height: 100%; diff --git a/app/renderer/js/main.ts b/app/renderer/js/main.ts index 5eb73a67f..89c9398a7 100644 --- a/app/renderer/js/main.ts +++ b/app/renderer/js/main.ts @@ -927,6 +927,22 @@ class ServerManagerView { }); } + ipcRenderer.on("exit-settings", () => { + let lastActiveServerTabIndex = -1; + + for (const tab of this.tabs) { + if (tab.props.role === "server") { + lastActiveServerTabIndex = tab.props.tabIndex; + } + } + + console.log(typeof this.tabs[lastActiveServerTabIndex]); + if (lastActiveServerTabIndex >= 0) { + console.log("Tab to be focussed"); + this.tabs[lastActiveServerTabIndex].webview.focus(); + } + }); + ipcRenderer.on( "permission-request", ( diff --git a/app/renderer/js/pages/preference/base-section.ts b/app/renderer/js/pages/preference/base-section.ts index da19d1667..6ff489a06 100644 --- a/app/renderer/js/pages/preference/base-section.ts +++ b/app/renderer/js/pages/preference/base-section.ts @@ -81,3 +81,10 @@ export function generateSelectHTML( export function reloadApp(): void { ipcRenderer.send("forward-message", "reload-viewer"); } + +export function exitSettings(): void { + const exitButton = document.querySelector(".exit-sign")!; + exitButton.addEventListener("click", async () => { + ipcRenderer.send("forward-message", "exit-settings"); + }); +} diff --git a/app/renderer/js/pages/preference/connected-org-section.ts b/app/renderer/js/pages/preference/connected-org-section.ts index 0acc99f2d..dd7b1a983 100644 --- a/app/renderer/js/pages/preference/connected-org-section.ts +++ b/app/renderer/js/pages/preference/connected-org-section.ts @@ -3,7 +3,7 @@ import * as t from "../../../../common/translation-util"; import {ipcRenderer} from "../../typed-ipc-renderer"; import * as DomainUtil from "../../utils/domain-util"; -import {reloadApp} from "./base-section"; +import {exitSettings, reloadApp} from "./base-section"; import {initFindAccounts} from "./find-accounts"; import {initServerInfoForm} from "./server-info-form"; @@ -17,6 +17,7 @@ export function initConnectedOrgSection(props: ConnectedOrgSectionProps): void { const servers = DomainUtil.getDomains(); props.$root.innerHTML = html`
+ ×
${t.__("Connected organizations")}
${t.__("All the connected orgnizations will appear here.")} @@ -32,6 +33,8 @@ export function initConnectedOrgSection(props: ConnectedOrgSectionProps): void {
`.html; + exitSettings(); + const $serverInfoContainer = document.querySelector( "#server-info-container", )!; diff --git a/app/renderer/js/pages/preference/general-section.ts b/app/renderer/js/pages/preference/general-section.ts index 61e320985..40e5dd3c5 100644 --- a/app/renderer/js/pages/preference/general-section.ts +++ b/app/renderer/js/pages/preference/general-section.ts @@ -14,7 +14,11 @@ import * as t from "../../../../common/translation-util"; import supportedLocales from "../../../../translations/supported-locales.json"; import {ipcRenderer} from "../../typed-ipc-renderer"; -import {generateSelectHTML, generateSettingOption} from "./base-section"; +import { + exitSettings, + generateSelectHTML, + generateSettingOption, +} from "./base-section"; const {app, dialog, session} = remote; const currentBrowserWindow = remote.getCurrentWindow(); @@ -26,6 +30,7 @@ interface GeneralSectionProps { export function initGeneralSection(props: GeneralSectionProps): void { props.$root.innerHTML = html`
+ ×
${t.__("Appearance")}
@@ -211,6 +216,7 @@ export function initGeneralSection(props: GeneralSectionProps): void {
`.html; + exitSettings(); updateTrayOption(); updateBadgeOption(); updateSilentOption(); diff --git a/app/renderer/js/pages/preference/network-section.ts b/app/renderer/js/pages/preference/network-section.ts index f4dad5b09..c6b3d1518 100644 --- a/app/renderer/js/pages/preference/network-section.ts +++ b/app/renderer/js/pages/preference/network-section.ts @@ -3,7 +3,7 @@ import {html} from "../../../../common/html"; import * as t from "../../../../common/translation-util"; import {ipcRenderer} from "../../typed-ipc-renderer"; -import {generateSettingOption} from "./base-section"; +import {exitSettings, generateSettingOption} from "./base-section"; interface NetworkSectionProps { $root: Element; @@ -12,6 +12,7 @@ interface NetworkSectionProps { export function initNetworkSection(props: NetworkSectionProps): void { props.$root.innerHTML = html`
+ ×
${t.__("Proxy")}
@@ -55,6 +56,8 @@ export function initNetworkSection(props: NetworkSectionProps): void {
`.html; + exitSettings(); + const $proxyPAC: HTMLInputElement = document.querySelector( "#proxy-pac-option .setting-input-value", )!; diff --git a/app/renderer/js/pages/preference/shortcuts-section.ts b/app/renderer/js/pages/preference/shortcuts-section.ts index e7b3c9e9a..3256a6025 100644 --- a/app/renderer/js/pages/preference/shortcuts-section.ts +++ b/app/renderer/js/pages/preference/shortcuts-section.ts @@ -2,6 +2,8 @@ import {html} from "../../../../common/html"; import * as t from "../../../../common/translation-util"; import * as LinkUtil from "../../utils/link-util"; +import {exitSettings} from "./base-section"; + interface ShortcutsSectionProps { $root: Element; } @@ -12,6 +14,7 @@ export function initShortcutsSection(props: ShortcutsSectionProps): void { props.$root.innerHTML = html`
+ ×

settings${t.__("Tip")}: `.html; + exitSettings(); + const link = "https://zulip.com/help/keyboard-shortcuts"; const externalCreateNewOrgElement = document.querySelector("#open-hotkeys-link")!;