From 8a20bb52cf7c3a9f8de780b9409e501503f54148 Mon Sep 17 00:00:00 2001
From: ali asaria <aliasaria@users.noreply.github.com>
Date: Mon, 13 Jan 2025 11:54:53 -0500
Subject: [PATCH] remove transparency from the main app window -- can't get it
 to work well across os darkmode

---
 src/main/main.ts                              | 36 +++++++++++++++----
 src/main/preload.ts                           |  3 ++
 .../components/Nav/ColorSchemeToggle.tsx      | 12 +++++--
 src/renderer/components/Nav/Sidebar.tsx       |  2 +-
 src/renderer/styles.css                       |  8 +++++
 5 files changed, 50 insertions(+), 11 deletions(-)

diff --git a/src/main/main.ts b/src/main/main.ts
index 122c8746..68e4172f 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -200,18 +200,40 @@ const startListeningToServerLog = async () => {
   });
 };
 
-ipcMain.handle('dark-mode:toggle', () => {
-  if (nativeTheme.shouldUseDarkColors) {
-    nativeTheme.themeSource = 'light';
-  } else {
-    nativeTheme.themeSource = 'dark';
-  }
-  return nativeTheme.shouldUseDarkColors;
+/***********************
+ * DARK MODE stuff
+ ***********************/
+// Listn to nativeTheme update change from the OS:
+nativeTheme.on('updated', () => {
+  console.log('nativeTheme updated', nativeTheme.shouldUseDarkColors);
+  mainWindow?.webContents.send(
+    'dark-mode:updated',
+    nativeTheme.shouldUseDarkColors
+  );
 });
 
+// ipcMain.handle('dark-mode:toggle', () => {
+//   console.log('dark-mode:toggle');
+//   console.log(nativeTheme);
+//   if (nativeTheme.shouldUseDarkColors) {
+//     nativeTheme.themeSource = 'light';
+//   } else {
+//     nativeTheme.themeSource = 'dark';
+//   }
+//   return nativeTheme.shouldUseDarkColors;
+// });
+
+// ipcMain.handle('dark-mode:set', (_event, shouldUseDarkColors) => {
+//   console.log('dark-mode:set', shouldUseDarkColors);
+//   nativeTheme.themeSource = shouldUseDarkColors ? 'dark' : 'light';
+// });
+
 ipcMain.handle('dark-mode:system', () => {
   nativeTheme.themeSource = 'system';
 });
+/***********************
+ * DARK MODE stuff END
+ ***********************/
 
 startListeningToServerLog();
 
diff --git a/src/main/preload.ts b/src/main/preload.ts
index 73eed269..71e7d617 100644
--- a/src/main/preload.ts
+++ b/src/main/preload.ts
@@ -103,4 +103,7 @@ contextBridge.exposeInMainWorld('autoUpdater', {
 contextBridge.exposeInMainWorld('darkMode', {
   toggle: () => ipcRenderer.invoke('dark-mode:toggle'),
   system: () => ipcRenderer.invoke('dark-mode:system'),
+  setMode: (value) => ipcRenderer.invoke('dark-mode:set', value),
+  onUpdate: (callback) =>
+    ipcRenderer.on('dark-mode:updated', (_event, value) => callback(value)),
 });
diff --git a/src/renderer/components/Nav/ColorSchemeToggle.tsx b/src/renderer/components/Nav/ColorSchemeToggle.tsx
index d6fc21da..7d58dc34 100644
--- a/src/renderer/components/Nav/ColorSchemeToggle.tsx
+++ b/src/renderer/components/Nav/ColorSchemeToggle.tsx
@@ -1,17 +1,23 @@
 import { useColorScheme } from '@mui/joy/styles';
 import IconButton from '@mui/joy/IconButton';
 import { MoonIcon, SunIcon } from 'lucide-react';
+import { windowsStore } from 'process';
 
 export default function ColorSchemeToggle() {
   const { mode, setMode } = useColorScheme();
 
+  window.darkMode.onUpdate((isDarkMode) => {
+    console.log('Dark mode is now', isDarkMode ? 'on' : 'off');
+    // setMode(isDarkMode ? 'dark' : 'light');
+  });
+
   return (
     <IconButton
       variant="plain"
       onClick={async () => {
-        const isDarkMode = await window.darkMode.toggle();
-        console.log('Dark mode is now', isDarkMode ? 'on' : 'off');
-        setMode(isDarkMode ? 'dark' : 'light');
+        // const isDarkMode = await window.darkMode.toggle();
+        // console.log('Dark mode is now', isDarkMode ? 'on' : 'off');
+        setMode(mode == 'light' ? 'dark' : 'light');
       }}
     >
       {mode === 'light' ? <SunIcon /> : <MoonIcon />}
diff --git a/src/renderer/components/Nav/Sidebar.tsx b/src/renderer/components/Nav/Sidebar.tsx
index 8e8dd3a7..24014138 100644
--- a/src/renderer/components/Nav/Sidebar.tsx
+++ b/src/renderer/components/Nav/Sidebar.tsx
@@ -86,7 +86,7 @@ export default function Sidebar({
         gap: 1,
         userSelect: 'none',
         width: '100%',
-        backgroundColor: 'rgb(214,207,225,0.4)',
+        // opacity: 0.4,
         '& .lucide': {
           strokeWidth: '1.5px',
         },
diff --git a/src/renderer/styles.css b/src/renderer/styles.css
index 06598ff2..b16be2ac 100644
--- a/src/renderer/styles.css
+++ b/src/renderer/styles.css
@@ -126,6 +126,14 @@ spinning gradient border effect */
   border: none !important;
 }
 
+.MuiSheet-root.Sidebar {
+  background-color: rgb(214, 207, 225, 1.0),
+}
+
+html[data-joy-color-scheme='dark'] .MuiSheet-root.Sidebar {
+  background-color: rgb(54, 50, 59),
+}
+
 /* Color for sidebar disabled text */
 .FirstSidebar_Content .Mui-disabled {
   color: rgb(77, 64, 75) !important;
-- 
GitLab