libbluray | branch: master | hpi1 <[email protected]> | Sat Mar 30 00:27:35 2013 +0200| [5a1535455d55ce252bcf32bf6682765e9757f0c2] | committer: hpi1
Added shutdown to BDToolkit and BDKeyboardFocusManagerPeer > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=5a1535455d55ce252bcf32bf6682765e9757f0c2 --- .../bdj/java-j2me/java/awt/BDToolkit.java | 17 +++++++- .../bdj/java-j2se/java/awt/BDToolkit.java | 18 +++++++- .../java/awt/peer/BDKeyboardFocusManagerPeer.java | 45 ++++++++++++++------ src/libbluray/bdj/java/org/videolan/Libbluray.java | 2 + 4 files changed, 68 insertions(+), 14 deletions(-) diff --git a/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java b/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java index 5e74d3e..c439fad 100644 --- a/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java +++ b/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java @@ -35,7 +35,7 @@ import sun.awt.image.URLImageSource; import org.videolan.BDJXletContext; import org.videolan.Logger; -class BDToolkit extends Toolkit { +public class BDToolkit extends Toolkit { private EventQueue eventQueue = new EventQueue(); private BDGraphicsEnvironment localEnv = new BDGraphicsEnvironment(); private BDGraphicsConfiguration defaultGC = (BDGraphicsConfiguration)localEnv.getDefaultScreenDevice().getDefaultConfiguration(); @@ -48,6 +48,21 @@ class BDToolkit extends Toolkit { /* nothing to do */ } + public static void shutdown() { + Toolkit toolkit = getDefaultToolkit(); + if (toolkit instanceof BDToolkit) { + ((BDToolkit)toolkit).dispose(); + } + } + + public void dispose() { + if (eventQueue != null) { + eventQueue.getDispatchThread().stopDispatching(); + eventQueue = null; + } + cachedImages = null; + } + public Dimension getScreenSize() { Rectangle dims = defaultGC.getBounds(); return new Dimension(dims.width, dims.height); diff --git a/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java b/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java index dba8074..fecec43 100644 --- a/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java +++ b/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java @@ -50,6 +50,21 @@ public class BDToolkit extends Toolkit implements KeyboardFocusManagerPeerProvid public BDToolkit () { } + public static void shutdown() { + Toolkit toolkit = getDefaultToolkit(); + if (toolkit instanceof BDToolkit) { + ((BDToolkit)toolkit).dispose(); + } + } + + public void dispose() { + if (eventQueue != null) { + eventQueue.getDispatchThread().stopDispatching(); + eventQueue = null; + } + BDKeyboardFocusManagerPeer.shutdown(); + } + public static void setFocusedWindow(Window window) { /* hook KeyboardFocusManagerPeer (not doing this leads to crash) */ BDKeyboardFocusManagerPeer.init(window); @@ -57,7 +72,7 @@ public class BDToolkit extends Toolkit implements KeyboardFocusManagerPeerProvid public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager kfm) { - return BDKeyboardFocusManagerPeer.init(kfm); + return BDKeyboardFocusManagerPeer.getInstance(); } public Dimension getScreenSize() { @@ -94,6 +109,7 @@ public class BDToolkit extends Toolkit implements KeyboardFocusManagerPeerProvid } public void sync() { + org.videolan.GUIManager.getInstance().sync(); } static void clearCache(BDImage image) { diff --git a/src/libbluray/bdj/java-j2se/java/awt/peer/BDKeyboardFocusManagerPeer.java b/src/libbluray/bdj/java-j2se/java/awt/peer/BDKeyboardFocusManagerPeer.java index 9edc938..76ef4a8 100644 --- a/src/libbluray/bdj/java-j2se/java/awt/peer/BDKeyboardFocusManagerPeer.java +++ b/src/libbluray/bdj/java-j2se/java/awt/peer/BDKeyboardFocusManagerPeer.java @@ -25,17 +25,37 @@ import java.awt.Window; import java.lang.reflect.Field; public class BDKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer { - private Component focusOwner; - private Window window; /* used in java 6 only */ + private static boolean java7 = false; + static BDKeyboardFocusManagerPeer instance = null; - private static KeyboardFocusManager kfm = null; /* used in java 7 only */ + /* used in java 7 only */ + public static KeyboardFocusManagerPeer getInstance() { + java7 = true; + + if (instance == null) + instance = new BDKeyboardFocusManagerPeer(); + return instance; + } + + public static void shutdown() + { + if (instance != null) { + instance.dispose(); + instance = null; + } + } public static void init(Window window) { /* running in java 7 ? */ - if (kfm != null) + if (java7 == true) return; + if (instance == null) + instance = new BDKeyboardFocusManagerPeer(); + instance.focusOwner = null; + instance.window = window; + /* replace default keyboard focus manager peer */ Field kbPeer; try { @@ -51,21 +71,22 @@ public class BDKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer { } try { kbPeer.set(KeyboardFocusManager.getCurrentKeyboardFocusManager(), - new BDKeyboardFocusManagerPeer(window)); + instance); } catch (java.lang.IllegalAccessException e) { throw new Error("java.awt.KeyboardFocusManager.peer not accessible:" + e); } } - /* used in java 7 only */ - public static KeyboardFocusManagerPeer init(KeyboardFocusManager _kfm) { - kfm = _kfm; - return new BDKeyboardFocusManagerPeer(null); - } + private Component focusOwner = null; + private Window window = null; /* used in java 6 only */ - private BDKeyboardFocusManagerPeer(Window w) { - window = w; + public void dispose() + { focusOwner = null; + window = null; + } + + private BDKeyboardFocusManagerPeer() { } public void clearGlobalFocusOwner(Window w) { diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index 7b88a36..4ec7134 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -19,6 +19,7 @@ package org.videolan; +import java.awt.BDToolkit; import java.awt.event.KeyEvent; import java.util.Vector; @@ -127,6 +128,7 @@ public class Libbluray { MountManager.unmountAll(); org.havi.ui.HSceneFactory.shutdown(); GUIManager.shutdown(); + BDToolkit.shutdown(); } catch (Throwable e) { e.printStackTrace(); } _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
