diff --git a/src/dorkbox/systemTray/linux/GtkEntryItem.java b/src/dorkbox/systemTray/linux/GtkEntryItem.java
index 88cd85e..f556ba0 100644
--- a/src/dorkbox/systemTray/linux/GtkEntryItem.java
+++ b/src/dorkbox/systemTray/linux/GtkEntryItem.java
@@ -41,7 +41,7 @@ class GtkEntryItem extends GtkEntry implements GCallback {
// The mnemonic will ONLY show-up once a menu entry is selected. IT WILL NOT show up before then!
// AppIndicators will only show if you use the keyboard to navigate
- // GtkStatusIndicator will show on mouse+keyboard movement
+ // GtkStatusIconTray will show on mouse+keyboard movement
private volatile char mnemonicKey = 0;
/**
diff --git a/src/dorkbox/systemTray/linux/GtkEntryStatus.java b/src/dorkbox/systemTray/linux/GtkEntryStatus.java
index b785a3d..b0b5a9a 100644
--- a/src/dorkbox/systemTray/linux/GtkEntryStatus.java
+++ b/src/dorkbox/systemTray/linux/GtkEntryStatus.java
@@ -19,7 +19,7 @@ import dorkbox.systemTray.SystemTrayMenuAction;
import dorkbox.systemTray.linux.jna.Gtk;
// you might wonder WHY this extends MenuEntryItem -- the reason is that an AppIndicator "status" will be offset from everyone else,
-// where a GtkStatusIndicator + SwingTray will have everything lined up. (with or without icons). This is to normalize how it looks
+// where a GtkStatusIconTray + SwingTray will have everything lined up. (with or without icons). This is to normalize how it looks
class GtkEntryStatus extends GtkEntryItem {
/**
diff --git a/src/dorkbox/systemTray/linux/GtkMenu.java b/src/dorkbox/systemTray/linux/GtkMenu.java
index 24a6a27..0a41f5d 100644
--- a/src/dorkbox/systemTray/linux/GtkMenu.java
+++ b/src/dorkbox/systemTray/linux/GtkMenu.java
@@ -71,6 +71,7 @@ class GtkMenu extends Menu {
/**
* Necessary to guarantee all updates occur on the dispatch thread
*/
+ @Override
protected
void dispatchAndWait(final Runnable runnable) {
final CountDownLatch countDownLatch = new CountDownLatch(1);
diff --git a/src/dorkbox/systemTray/swing/GtkStatusIconTray.java b/src/dorkbox/systemTray/swing/GtkStatusIconTray.java
new file mode 100644
index 0000000..4aeface
--- /dev/null
+++ b/src/dorkbox/systemTray/swing/GtkStatusIconTray.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright 2014 dorkbox, llc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dorkbox.systemTray.swing;
+
+import static dorkbox.systemTray.SystemTray.TIMEOUT;
+
+import java.awt.Dimension;
+import java.awt.MouseInfo;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.swing.JPopupMenu;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+
+import dorkbox.systemTray.MenuEntry;
+import dorkbox.systemTray.SystemTray;
+import dorkbox.systemTray.linux.jna.GEventCallback;
+import dorkbox.systemTray.linux.jna.GdkEventButton;
+import dorkbox.systemTray.linux.jna.Gobject;
+import dorkbox.systemTray.linux.jna.Gtk;
+import dorkbox.systemTray.util.ImageUtils;
+import dorkbox.util.ScreenUtil;
+
+/**
+ * Class for handling all system tray interactions via GTK.
+ *
+ * This is the "old" way to do it, and does not work with some desktop environments. This is a hybrid class, because we want to show the
+ * swing menu popup INSTEAD of GTK menu popups. The "golden standard" is our swing menu popup, since we have 100% control over it.
+ */
+public
+class GtkStatusIconTray extends SwingMenu {
+ private volatile Pointer trayIcon;
+
+ // http://code.metager.de/source/xref/gnome/Platform/gtk%2B/gtk/deprecated/gtkstatusicon.c
+ // https://github.com/djdeath/glib/blob/master/gobject/gobject.c
+
+ // have to save these in a field to prevent GC on the objects (since they go out-of-scope from java)
+ private final List