Skip to content

Commit 11d15b3

Browse files
committed
feat: Add checkbox for enbale/disable figma-linux themes
1 parent ff598a6 commit 11d15b3

11 files changed

Lines changed: 95 additions & 16 deletions

File tree

@types/Common/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ interface SettingsInterface {
158158
enableColorSpaceSrgb: boolean;
159159
visibleNewProjectBtn: boolean;
160160
useZenity: boolean;
161+
disableThemes: boolean;
161162
panelHeight: number;
162163
saveLastOpenedTabs: boolean;
163164
exportDir: string;

@types/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ declare namespace Electron {
6565
channel: "enableColorSpaceSrgbWasChanged",
6666
listener: (event: IpcMainInvokeEvent, enabled: boolean) => void,
6767
): this;
68+
on(channel: "disableThemesChanged", listener: (event: IpcMainInvokeEvent, enabled: boolean) => void): this;
6869
on(channel: "updateFigmaUiScale", listener: (event: IpcMainInvokeEvent, scale: number) => void): this;
6970
on(channel: "updatePanelScale", listener: (event: IpcMainInvokeEvent, scale: number) => void): this;
7071
on(channel: "startAppAuth", listener: (event: IpcMainInvokeEvent, auth: { grantPath: string }) => void): this;
@@ -123,6 +124,7 @@ declare namespace Electron {
123124
listener: (event: IpcMainInvokeEvent, data: WebApi.CreateMultipleExtension) => Promise<void> | any,
124125
): void;
125126
handle(channel: "isDevToolsOpened", listener: (event: IpcMainInvokeEvent) => Promise<void> | any): void;
127+
handle(channel: "themesIsDisabled", listener: (event: IpcMainInvokeEvent) => Promise<void> | boolean): void;
126128
handle(
127129
channel: "writeFiles",
128130
listener: (event: IpcMainInvokeEvent, data: WebApi.WriteFiles) => Promise<void> | void,
@@ -185,6 +187,7 @@ declare namespace Electron {
185187
send(channel: "closeThemeCreatorView"): this;
186188
send(channel: "themeCreatorExportTheme", theme: Themes.Theme): this;
187189
send(channel: "enableColorSpaceSrgbWasChanged", enabled: boolean): this;
190+
send(channel: "disableThemesChanged", enabled: boolean): this;
188191
send(channel: "updateFigmaUiScale", scale: number): this;
189192
send(channel: "updatePanelScale", scale: number): this;
190193
send(channel: "log-debug", ...args: any[]): this;
@@ -211,6 +214,7 @@ declare namespace Electron {
211214
invoke(channel: "getLocalFileExtensionManifest", id: number): Promise<number[]>;
212215
invoke(channel: "getLocalFileExtensionSource", id: number): Promise<Extensions.ExtensionSource>;
213216
invoke(channel: "createMultipleNewLocalFileExtensions", data: WebApi.CreateMultipleExtension): Promise<any>;
217+
invoke(channel: "themesIsDisabled"): Promise<boolean>;
214218
invoke(channel: "isDevToolsOpened"): Promise<boolean>;
215219
invoke(channel: "writeFiles", data: WebApi.WriteFiles): Promise<void>;
216220
invoke(channel: "get-fonts"): Promise<FontsMap>;

src/constants/_defaultSettings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const DEFAULT_SETTINGS: SettingsInterface = {
1010
enableColorSpaceSrgb: false,
1111
visibleNewProjectBtn: true,
1212
useZenity: false,
13+
disableThemes: false,
1314
panelHeight: 40,
1415
saveLastOpenedTabs: true,
1516
exportDir: `${process.env.HOME}/Pictures/Figma`,

src/main/events/ipcMain.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ export const registerIpcMainHandlers = () => {
7878
return view.sender.isDevToolsOpened();
7979
});
8080

81+
E.ipcMain.handle("themesIsDisabled", async () => {
82+
return storage.get().app.disableThemes;
83+
});
84+
8185
listenToWebBindingPromise("openExtensionDirectory", async (webContents: E.WebContents, id: number) => {
8286
console.error("TODO");
8387
});

src/main/window/Tabs.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ export default class Tabs {
4040
tab.setBounds(rect);
4141
tab.webContents.loadURL(url);
4242
tab.webContents.on("dom-ready", () => {
43+
const disableThemes = storage.get().app.disableThemes;
44+
45+
if (disableThemes) {
46+
return;
47+
}
48+
4349
const currentThemeId = storage.get().theme.currentTheme;
4450
if (currentThemeId !== "0") {
4551
const wm = WindowManager.instance;

src/main/window/WindowManager.ts

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class WindowManager {
5858
private static _instance: WindowManager;
5959
private panelHeight = storage.get().app.panelHeight;
6060
private enableColorSpaceSrgbWasChanged = false;
61+
private disableThemesChanged = false;
6162
private figmaUserIDs: string[] = [];
6263

6364
private constructor() {
@@ -112,9 +113,11 @@ class WindowManager {
112113
this.updateThemes();
113114
});
114115

115-
getThemeById().then(theme => {
116-
this.currentTheme = theme;
117-
});
116+
if (!storage.get().app.disableThemes) {
117+
getThemeById().then(theme => {
118+
this.currentTheme = theme;
119+
});
120+
}
118121

119122
this.updatePanelScale(this.panelScale);
120123
}
@@ -356,7 +359,7 @@ class WindowManager {
356359
return;
357360
}
358361

359-
tab.view.webContents.session.setPermissionRequestHandler((webContents, permission, cb) => {
362+
tab.view.webContents.session.setPermissionRequestHandler((_, permission, cb) => {
360363
const id = dialogs.showMessageBoxSync({
361364
type: "question",
362365
title: "Figma",
@@ -383,16 +386,16 @@ class WindowManager {
383386

384387
this.mainWindow.webContents.send("setIsInVoiceCall", { id: tab.view.webContents.id, isInVoiceCall });
385388
});
386-
E.ipcMain.on("setWorkspaceName", (event, name) => {
389+
E.ipcMain.on("setWorkspaceName", (_, name) => {
387390
logger.info("The setWorkspaceName not implemented, workspaceName: ", name);
388391
});
389-
E.ipcMain.on("setFigjamEnabled", (event, enabled) => {
392+
E.ipcMain.on("setFigjamEnabled", (_, enabled) => {
390393
logger.info("The setFigjamEnabled not implemented, enabled: ", enabled);
391394
});
392-
E.ipcMain.on("receiveTabs", (event, tabs) => {
395+
E.ipcMain.on("receiveTabs", (_, tabs) => {
393396
this.tabs = tabs;
394397
});
395-
E.ipcMain.on("enableColorSpaceSrgbWasChanged", (event, enabled) => {
398+
E.ipcMain.on("enableColorSpaceSrgbWasChanged", (_, enabled) => {
396399
const previousValue = storage.get().app.enableColorSpaceSrgb;
397400

398401
if (enabled === previousValue) {
@@ -401,6 +404,15 @@ class WindowManager {
401404

402405
this.enableColorSpaceSrgbWasChanged = true;
403406
});
407+
E.ipcMain.on("disableThemesChanged", (_, enabled) => {
408+
const previousValue = storage.get().app.disableThemes;
409+
410+
if (enabled === previousValue) {
411+
return;
412+
}
413+
414+
this.disableThemesChanged = true;
415+
});
404416
E.ipcMain.on("closeSettingsView", () => {
405417
if (!this.settingsView) {
406418
return;
@@ -412,20 +424,38 @@ class WindowManager {
412424

413425
this.mainWindow.removeBrowserView(this.settingsView);
414426

427+
let id = 1;
415428
if (this.enableColorSpaceSrgbWasChanged) {
416-
const id = dialogs.showMessageBoxSync({
429+
id = dialogs.showMessageBoxSync({
417430
type: "question",
418431
title: "Figma",
419432
message: "Restart to Change Color Space?",
420433
detail: `Figma needs to be restarted to change the color space.`,
421434
textOkButton: "Restart",
422435
defaultFocusedButton: "Ok",
423436
});
437+
}
438+
if (this.disableThemesChanged) {
439+
let text = "Restart to disable themes?";
440+
const disableThemes = storage.get().app.disableThemes;
424441

425-
if (!id) {
426-
E.app.relaunch();
427-
E.app.quit();
442+
if (!disableThemes) {
443+
text = "Restart to enable themes?";
428444
}
445+
446+
id = dialogs.showMessageBoxSync({
447+
type: "question",
448+
title: "Figma",
449+
message: text,
450+
detail: `Figma needs to be restarted to change use of themes.`,
451+
textOkButton: "Restart",
452+
defaultFocusedButton: "Ok",
453+
});
454+
}
455+
456+
if (!id) {
457+
E.app.relaunch();
458+
E.app.quit();
429459
}
430460

431461
this.destroyView(this.settingsView);
@@ -453,6 +483,10 @@ class WindowManager {
453483
this.mainWindow.webContents.send("updateVisibleNewProjectBtn", visible);
454484
});
455485
E.ipcMain.on("themes-change", (_, theme) => {
486+
if (storage.get().app.disableThemes) {
487+
return;
488+
}
489+
456490
if (theme.id === Const.TEST_THEME_ID) {
457491
const testTheme = this.themes.find(t => t.id === theme.id);
458492

@@ -464,6 +498,10 @@ class WindowManager {
464498
this.changeTheme(theme);
465499
});
466500
E.ipcMain.on("set-default-theme", () => {
501+
if (storage.get().app.disableThemes) {
502+
return;
503+
}
504+
467505
this.changeTheme(Const.DEFAULT_THEME);
468506
});
469507
E.ipcMain.on("saveCreatorTheme", (_, theme) => {

src/middleware/ThemesManager.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ export class ThemesManager {
88
constructor() {
99
this.currentTheme = DEFAULT_THEME;
1010

11-
this.themeEvents();
11+
E.ipcRenderer.invoke("themesIsDisabled").then(disabled => {
12+
if (disabled) {
13+
return;
14+
}
15+
16+
this.themeEvents();
17+
});
1218
}
1319

1420
private themeEvents() {

src/middleware/webBinding.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -446,9 +446,13 @@ const init = (fileBrowser: boolean): void => {
446446
E.webFrame.executeJavaScript(`(${initWebApi.toString()})(${JSON.stringify(initWebOptions)})`);
447447

448448
document.addEventListener("DOMContentLoaded", () => {
449-
setTimeout(() => {
450-
themes.init();
451-
}, 10);
449+
E.ipcRenderer.invoke("themesIsDisabled").then(disabled => {
450+
if (!disabled) {
451+
setTimeout(() => {
452+
themes.init();
453+
}, 10);
454+
}
455+
});
452456
});
453457
};
454458

src/renderer/components/Settings/views/General/index.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ const GeneralBody: React.FunctionComponent<GeneralBodyProps> = props => {
6969
text="Use Zenity for Dialogs"
7070
onChange={props.settings.changeUseZenity}
7171
/>
72+
<CheckBox
73+
value={props.settings.settings.app.disableThemes}
74+
text="Disable themes"
75+
onChange={props.settings.changeDisableThemes}
76+
/>
7277
</div>
7378
<div></div>
7479
<div className="flex flex_column">

src/renderer/stores/Settings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ export class Settings {
6363

6464
this.useZenityChanged = true;
6565
};
66+
@action
67+
public changeDisableThemes = (value: boolean): void => {
68+
this.settings.app.disableThemes = value;
69+
70+
E.ipcRenderer.send("disableThemesChanged", value);
71+
};
6672

6773
@action
6874
public selectExportDir = async (): Promise<void> => {

0 commit comments

Comments
 (0)