Browse Source

fix: more scalable code by factorizing appindicator support

- introduce a currentPlatformSupportsAppIndicator() function determining
  if app indicators are supported here.
- handle undefined process.env.XDG_CURRENT_DESKTOP
- added some comments to ensure that the intents are clear
Thanks MarshallOfSound
Didier Roche 7 years ago
parent
commit
1c57c76496
1 changed files with 17 additions and 4 deletions
  1. 17 4
      lib/browser/init.js

+ 17 - 4
lib/browser/init.js

@@ -162,11 +162,24 @@ require('./api/protocol')
 // Set main startup script of the app.
 const mainStartupScript = packageJson.main || 'index.js'
 
+const KNOWN_XDG_DESKTOP_VALUES = ['Pantheon', 'Unity:Unity7', 'pop:GNOME']
+
+function currentPlatformSupportsAppIndicator() {
+  if (process.platform !== 'linux') return false
+  const currentDesktop = process.env.XDG_CURRENT_DESKTOP
+
+  if (!currentDesktop) return false
+  if (KNOWN_XDG_DESKTOP_VALUES.includes(currentDesktop)) return true
+  // ubuntu based or derived session (default ubuntu one, communitheme…) supports
+  // indicator too.
+  if (/ubuntu/ig.test(currentDesktop)) return true
+
+  return false
+}
+
 // Workaround for electron/electron#5050 and electron/electron#9046
-if (process.platform === 'linux') {
-  if (['Pantheon', 'Unity:Unity7', 'pop:GNOME'].includes(process.env.XDG_CURRENT_DESKTOP) || process.env.XDG_CURRENT_DESKTOP.includes('ubuntu')) {
-    process.env.XDG_CURRENT_DESKTOP = 'Unity'
-  }
+if (currentPlatformSupportsAppIndicator()) {
+  process.env.XDG_CURRENT_DESKTOP = 'Unity'
 }
 
 // Finally load app's main.js and transfer control to C++.