weisJ / auto-dark-mode

IDEA plugin to automatically apply system theme settings on macOS and Windows.

Home Page:https://plugins.jetbrains.com/plugin/14076-auto-dark-mode

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Updating LAF causes issues down the road

binarynoise opened this issue · comments

Occurs on every startup, but changing still works. Maybe too early?

java.lang.NullPointerException
	at com.intellij.openapi.wm.impl.IdeRootPane.updateStatusBarVisibility(IdeRootPane.kt:387)
	at com.intellij.openapi.wm.impl.IdeRootPane.uiSettingsChanged(IdeRootPane.kt:452)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at com.intellij.util.EventDispatcher.dispatchVoidMethod(EventDispatcher.java:120)
	at com.intellij.util.EventDispatcher.lambda$createMulticaster$1(EventDispatcher.java:85)
	at jdk.proxy2/jdk.proxy2.$Proxy25.uiSettingsChanged(Unknown Source)
	at com.intellij.ide.ui.UISettings.fireUISettingsChanged(UISettings.kt:672)
	at com.intellij.ide.ui.laf.LafManagerImpl.setLookAndFeelImpl(LafManagerImpl.kt:539)
	at com.intellij.ide.ui.laf.LafManagerImpl.setCurrentLookAndFeel(LafManagerImpl.kt:516)
	at com.intellij.ide.ui.LafManager.setCurrentLookAndFeel(LafManager.java:40)
	at com.intellij.ide.actions.QuickChangeLookAndFeel.switchLafAndUpdateUI(QuickChangeLookAndFeel.java:102)
	at com.intellij.ide.actions.QuickChangeLookAndFeel.switchLafAndUpdateUI(QuickChangeLookAndFeel.java:93)
	at com.github.weisj.darkmode.AutoDarkMode.updateLaf(AutoDarkMode.kt:108)
	at com.github.weisj.darkmode.AutoDarkMode.access$updateLaf(AutoDarkMode.kt:43)
	at com.github.weisj.darkmode.AutoDarkMode$themeChanged$1.invoke(AutoDarkMode.kt:87)
	at com.github.weisj.darkmode.AutoDarkMode$themeChanged$1.invoke(AutoDarkMode.kt:83)
	at com.github.weisj.darkmode.AutoDarkMode.scheduleRequest$lambda$1(AutoDarkMode.kt:120)
	at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:249)
	at com.intellij.util.Alarm$Request.runSafely(Alarm.java:365)
	at com.intellij.util.Alarm$Request.run(Alarm.java:354)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:209)
	at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:21)
	at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:191)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:831)
	at com.intellij.openapi.application.impl.ApplicationImpl$3.run(ApplicationImpl.java:456)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:79)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:122)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:41)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:788)
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:739)
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:731)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:758)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:667)
	at com.intellij.ide.IdeEventQueue._dispatchEvent$lambda$7(IdeEventQueue.kt:571)
	at com.intellij.openapi.application.impl.ApplicationImpl.withoutImplicitRead(ApplicationImpl.java:1446)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:571)
	at com.intellij.ide.IdeEventQueue.access$_dispatchEvent(IdeEventQueue.kt:68)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:349)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1$1.compute(IdeEventQueue.kt:348)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:787)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:348)
	at com.intellij.ide.IdeEventQueue$dispatchEvent$processEventRunnable$1$1.invoke(IdeEventQueue.kt:343)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$1(IdeEventQueue.kt:995)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:995)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$4(IdeEventQueue.kt:343)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:831)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:385)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

What version of IntelliJ are you using. What plugin version do you have?

I’m not sure there is a mechanism to reliably defer the LaF change to a point where I can be sure it is safe to do so. Notably the LaF change is already invoked in a deferred manner, for which IntelliJ itself should decide when it is safe to execute.