From 0065cb259ad781c4c4a686234535eaac7c272aeb Mon Sep 17 00:00:00 2001 From: nathan Date: Thu, 22 Jan 2015 03:24:18 +0100 Subject: [PATCH] Fixed issue with GTK enter/leave thread and the main loop --- .../util/tray/linux/AppIndicatorTray.java | 25 +------------------ .../util/tray/linux/GtkSystemTray.java | 24 +----------------- 2 files changed, 2 insertions(+), 47 deletions(-) diff --git a/src/dorkbox/util/tray/linux/AppIndicatorTray.java b/src/dorkbox/util/tray/linux/AppIndicatorTray.java index fa7081f..01a6eb0 100644 --- a/src/dorkbox/util/tray/linux/AppIndicatorTray.java +++ b/src/dorkbox/util/tray/linux/AppIndicatorTray.java @@ -19,14 +19,12 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.CountDownLatch; import com.sun.jna.Pointer; import dorkbox.util.jna.linux.AppIndicator; import dorkbox.util.jna.linux.Gobject; import dorkbox.util.jna.linux.Gtk; -import dorkbox.util.jna.linux.GtkSupport; import dorkbox.util.tray.SystemTray; import dorkbox.util.tray.SystemTrayMenuAction; @@ -40,13 +38,10 @@ import dorkbox.util.tray.SystemTrayMenuAction; * Lantern: https://github.com/getlantern/lantern/ Apache 2.0 License Copyright 2010 Brave New Software Project, Inc. */ public class AppIndicatorTray extends SystemTray { - private static final boolean useSWT = GtkSupport.usesSwtMainLoop; - private static final AppIndicator libappindicator = AppIndicator.INSTANCE; private static final Gobject libgobject = Gobject.INSTANCE; private static final Gtk libgtk = Gtk.INSTANCE; - private final CountDownLatch blockUntilStarted = new CountDownLatch(1); private final Map menuEntries = new HashMap(2); private volatile AppIndicator.AppIndicatorInstanceStruct appIndicator; @@ -101,25 +96,7 @@ public class AppIndicatorTray extends SystemTray { libgtk.gdk_threads_leave(); - if (!useSWT) { - Thread gtkUpdateThread = new Thread() { - @Override - public void run() { - // notify our main thread to continue - AppIndicatorTray.this.blockUntilStarted.countDown(); - libgtk.gtk_main(); - } - }; - gtkUpdateThread.setName("GTK event loop"); - gtkUpdateThread.start(); - } - - // we CANNOT continue until the GTK thread has started! (ignored if SWT is used) - try { - this.blockUntilStarted.await(); - this.active = true; - } catch (InterruptedException ignored) { - } + this.active = true; } @Override diff --git a/src/dorkbox/util/tray/linux/GtkSystemTray.java b/src/dorkbox/util/tray/linux/GtkSystemTray.java index 448a8e8..6c98361 100644 --- a/src/dorkbox/util/tray/linux/GtkSystemTray.java +++ b/src/dorkbox/util/tray/linux/GtkSystemTray.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.CountDownLatch; import javax.swing.JMenuItem; @@ -32,7 +31,6 @@ import dorkbox.util.SwingUtil; import dorkbox.util.jna.linux.Gobject; import dorkbox.util.jna.linux.Gtk; import dorkbox.util.jna.linux.Gtk.GdkEventButton; -import dorkbox.util.jna.linux.GtkSupport; import dorkbox.util.tray.SystemTray; import dorkbox.util.tray.SystemTrayMenuAction; import dorkbox.util.tray.SystemTrayMenuPopup; @@ -43,11 +41,9 @@ import dorkbox.util.tray.SystemTrayMenuPopup; * This is the "old" way to do it, and does not work with some desktop environments. */ public class GtkSystemTray extends SystemTray { - private static final boolean useSWT = GtkSupport.usesSwtMainLoop; private static final Gobject libgobject = Gobject.INSTANCE; private static final Gtk libgtk = Gtk.INSTANCE; - private final CountDownLatch blockUntilStarted = new CountDownLatch(1); private final Map menuEntries = new HashMap(2); private volatile SystemTrayMenuPopup jmenu; @@ -122,25 +118,7 @@ public class GtkSystemTray extends SystemTray { } }); - if (!useSWT) { - Thread gtkUpdateThread = new Thread() { - @Override - public void run() { - // notify our main thread to continue - GtkSystemTray.this.blockUntilStarted.countDown(); - libgtk.gtk_main(); - } - }; - gtkUpdateThread.setName("GTK event loop"); - gtkUpdateThread.start(); - } - - // we CANNOT continue until the GTK thread has started! (ignored if SWT is used) - try { - this.blockUntilStarted.await(); - this.active = true; - } catch (InterruptedException ignored) { - } + this.active = true; } @Override