試したところ思ったより単純なコードになりました。afterInvokeがきっちり環境設定を閉じた後実行されるためです。
次のコードのgetColorThemeを,環境設定メニューのすべてのMenuItemのafterInvokeイベントで実行することで実現できました。
The code became simpler than I expected when I tried it. Because afterInvoke is executed exactly after closing the preferences.
I was able to achieve by executing getColorTheme on the afterInvoke event of all menu items in the preferences menu.
/**
* Returns color theme name from brightness number
* @param {Number} brightness 0.0-1.0
* @returns { 'darkest'|'dark'|'light'|'lightest' }
*/
export const brightnessToColorTheme = (brightness) => {
let res = 'light' ;
if(brightness <= 0) {
res = 'darkest' ;
} else if( (0 < brightness) && (brightness <= 0.5) ) {
res = 'dark' ;
} else if( (0.5 < brightness) && (brightness < 1.0) ) {
res = 'light' ;
} else if(brightness === 1.0) {
res = 'lightest' ;
}
return res ;
} ;
/**
* Get uiBrightnessPreference and return color theme name
* @return { 'darkest'|'dark'|'light'|'lightest' }
*/
export const getColorTheme = () => {
const res = brightnessToColorTheme(app.generalPreferences.uiBrightnessPreference) ;
return res ;
} ;