From 5dc9333bb6da93ebba4218be11bc4a6f9c2c0843 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 12 Oct 2020 11:24:08 +0000
Subject: [PATCH] DTG: Enable by default for Linux KDE and LXDE Hide option on
 /configservice if not supported

---
 .../i2p/router/web/ConfigServiceHandler.java  | 12 ++++-----
 .../i2p/router/web/RouterConsoleRunner.java   | 26 +++++++++++++++----
 2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
index b59870e301..3464f67838 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
@@ -1,5 +1,6 @@
 package net.i2p.router.web;
 
+import java.awt.SystemTray;
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
@@ -202,9 +203,9 @@ public class ConfigServiceHandler extends FormHandler {
      *  @since 0.9.26
      */
     public boolean shouldShowSystray() {
-        return !
-            (SystemVersion.isLinuxService() ||
-             (SystemVersion.isWindows() && _context.hasWrapper() && WrapperManager.isLaunchedAsService()));
+        return SystemTray.isSupported() &&
+               !SystemVersion.isService() &&
+               !(SystemVersion.isWindows() && _context.hasWrapper() && WrapperManager.isLaunchedAsService());
     }
 
     /**
@@ -213,10 +214,7 @@ public class ConfigServiceHandler extends FormHandler {
      *  @since 0.9.26
      */
     public boolean isSystrayEnabled() {
-        // default false for now, except on OSX and non-service windows
-        String sdtg = _context.getProperty(RouterConsoleRunner.PROP_DTG_ENABLED);
-        return Boolean.parseBoolean(sdtg) ||
-               (sdtg == null && (SystemVersion.isWindows() || SystemVersion.isMac()));
+        return RouterConsoleRunner.isSystrayEnabled(_context);
     }
 
     /**
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
index e2c12672b3..11c1952b3a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java
@@ -313,6 +313,26 @@ public class RouterConsoleRunner implements RouterApp {
         return Server.getVersion();
     }
 
+    /**
+     *  Package private for ConfigServiceHandler
+     *  @since 0.9.48 pulled out of startTrayApp
+     */
+    static boolean isSystrayEnabled(I2PAppContext _context) {
+            // default false except on OSX and non-service windows,
+            // and on Linux KDE and LXDE
+            // Xubuntu XFCE works but doesn't look very good
+            // Ubuntu Unity was far too buggy to enable
+            // Ubuntu GNOME does not work, SystemTray.isSupported() returns false
+            String xdg = System.getenv("XDG_CURRENT_DESKTOP");
+            boolean dflt = !SystemVersion.isService() &&
+                           (SystemVersion.isWindows() ||
+                            SystemVersion.isMac() ||
+                            //"XFCE".equals(xdg) ||
+                            "KDE".equals(xdg) ||
+                            "LXDE".equals(xdg));
+            return _context.getProperty(PROP_DTG_ENABLED, dflt);
+    }
+
     private void startTrayApp() {
         // if no permissions, don't even try
         // isLaunchedAsService() always returns true on Linux
@@ -323,11 +343,7 @@ public class RouterConsoleRunner implements RouterApp {
             return;
         }
         try {
-            // default false for now, except on OSX and non-service windows
-            String sdtg = _context.getProperty(PROP_DTG_ENABLED);
-            boolean desktopguiEnabled = Boolean.parseBoolean(sdtg) ||
-                                        (sdtg == null && (SystemVersion.isWindows() || SystemVersion.isMac()));
-            if (desktopguiEnabled) {
+            if (isSystrayEnabled(_context)) {
                 System.setProperty("java.awt.headless", "false");
                 net.i2p.desktopgui.Main dtg = new net.i2p.desktopgui.Main(_context, _mgr, null);    
                 dtg.startup();
-- 
GitLab