libbluray | branch: master | hpi1 <[email protected]> | Tue Apr 9 12:09:58 2013 +0300| [dfbcca6804570bef8b3440ac9eac5776de122d72] | committer: hpi1
Splitted unrelated functions from BDRootWindow > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=dfbcca6804570bef8b3440ac9eac5776de122d72 --- .../bdj/java-j2me/java/awt/BDToolkit.java | 2 +- .../bdj/java-j2se/java/awt/BDToolkit.java | 2 +- src/libbluray/bdj/java/java/awt/BDJHelper.java | 90 ++++++++++++++++++++ src/libbluray/bdj/java/java/awt/BDRootWindow.java | 58 ------------- .../bdj/java/org/dvb/event/EventManager.java | 5 +- .../bdj/java/org/videolan/BDJXletContext.java | 2 +- 6 files changed, 96 insertions(+), 63 deletions(-) diff --git a/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java b/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java index 6102bce..b5698c4 100644 --- a/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java +++ b/src/libbluray/bdj/java-j2me/java/awt/BDToolkit.java @@ -59,7 +59,7 @@ public class BDToolkit extends Toolkit { public void dispose() { if (eventQueue != null) { - BDRootWindow.stopEventQueue(eventQueue); + BDJHelper.stopEventQueue(eventQueue); eventQueue = null; } cachedImages = null; diff --git a/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java b/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java index 4455fc2..27fb0f3 100644 --- a/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java +++ b/src/libbluray/bdj/java-j2se/java/awt/BDToolkit.java @@ -61,7 +61,7 @@ public class BDToolkit extends Toolkit implements KeyboardFocusManagerPeerProvid public void dispose() { if (eventQueue != null) { - BDRootWindow.stopEventQueue(eventQueue); + BDJHelper.stopEventQueue(eventQueue); eventQueue = null; } BDKeyboardFocusManagerPeer.shutdown(); diff --git a/src/libbluray/bdj/java/java/awt/BDJHelper.java b/src/libbluray/bdj/java/java/awt/BDJHelper.java new file mode 100644 index 0000000..1b194a9 --- /dev/null +++ b/src/libbluray/bdj/java/java/awt/BDJHelper.java @@ -0,0 +1,90 @@ + /* + * This file is part of libbluray + * Copyright (C) 2012 Libbluray + * Copyright (C) 2013 Petri Hintukainen <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +package java.awt; + +import java.awt.event.InvocationEvent; +import java.awt.event.KeyEvent; + +public class BDJHelper { + + public static EventDispatchThread getEventDispatchThread(EventQueue eq) { + if (eq != null) { + return eq.getDispatchThread(); + } + return null; + } + + public static void stopEventQueue(EventQueue eq) { + EventDispatchThread t = eq.getDispatchThread(); + if (t != null && t.isAlive()) { + + final long DISPOSAL_TIMEOUT = 5000; + final Object notificationLock = new Object(); + Runnable runnable = new Runnable() { public void run() { + synchronized(notificationLock) { + notificationLock.notifyAll(); + } + } }; + + synchronized (notificationLock) { + eq.postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), runnable)); + try { + notificationLock.wait(DISPOSAL_TIMEOUT); + } catch (InterruptedException e) { + } + } + + t.stopDispatching(); + if (t.isAlive()) { + t.interrupt(); + } + + try { + t.join(1000); + } catch (InterruptedException e) { + } + if (t.isAlive()) { + org.videolan.Logger.getLogger("BDRootWindow").error("stopEventQueue() failed for " + t); + org.videolan.PortingHelper.stopThread(t); + } + } + } + + public static void postKeyEvent(int id, int modifiers, int keyCode) { + Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner(); + if (focusOwner != null) { + long when = System.currentTimeMillis(); + KeyEvent event; + try { + if (id == KeyEvent.KEY_TYPED) + event = new KeyEvent(focusOwner, id, when, modifiers, KeyEvent.VK_UNDEFINED, (char)keyCode); + else + event = new KeyEvent(focusOwner, id, when, modifiers, keyCode, KeyEvent.CHAR_UNDEFINED); + BDToolkit.getEventQueue(focusOwner).postEvent(event); + return; + } catch (Throwable e) { + org.videolan.Logger.getLogger("BDJHelper").error("postKeyEvent failed: " + e); + } + } else { + org.videolan.Logger.getLogger("BDJHelper").error("*** KEY event dropped ***"); + } + } +} diff --git a/src/libbluray/bdj/java/java/awt/BDRootWindow.java b/src/libbluray/bdj/java/java/awt/BDRootWindow.java index 4ceb78f..78b1441 100644 --- a/src/libbluray/bdj/java/java/awt/BDRootWindow.java +++ b/src/libbluray/bdj/java/java/awt/BDRootWindow.java @@ -19,8 +19,6 @@ package java.awt; -import java.awt.event.InvocationEvent; -import java.awt.event.KeyEvent; import java.util.Arrays; import java.util.Timer; import java.util.TimerTask; @@ -67,62 +65,6 @@ public class BDRootWindow extends Frame { return null; } - public static void stopEventQueue(EventQueue eq) { - EventDispatchThread t = eq.getDispatchThread(); - if (t != null && t.isAlive()) { - - final long DISPOSAL_TIMEOUT = 5000; - final Object notificationLock = new Object(); - Runnable runnable = new Runnable() { public void run() { - synchronized(notificationLock) { - notificationLock.notifyAll(); - } - } }; - - synchronized (notificationLock) { - eq.postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), runnable)); - try { - notificationLock.wait(DISPOSAL_TIMEOUT); - } catch (InterruptedException e) { - } - } - - t.stopDispatching(); - if (t.isAlive()) { - t.interrupt(); - } - - try { - t.join(1000); - } catch (InterruptedException e) { - } - if (t.isAlive()) { - org.videolan.Logger.getLogger("BDRootWindow").error("stopEventQueue() failed for " + t); - org.videolan.PortingHelper.stopThread(t); - } - } - } - - public void postKeyEvent(int id, int modifiers, int keyCode) { - Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner(); - if (focusOwner != null) { - long when = System.currentTimeMillis(); - KeyEvent event; - try { - if (id == KeyEvent.KEY_TYPED) - event = new KeyEvent(focusOwner, id, when, modifiers, KeyEvent.VK_UNDEFINED, (char)keyCode); - else - event = new KeyEvent(focusOwner, id, when, modifiers, keyCode, KeyEvent.CHAR_UNDEFINED); - BDToolkit.getEventQueue(focusOwner).postEvent(event); - return; - } catch (Throwable e) { - System.err.println(" *** " + e + ""); - } - } else { - org.videolan.Logger.getLogger("BDRootWindow").error("*** KEY event dropped ***"); - } - } - public void notifyChanged() { if (!isVisible()) { org.videolan.Logger.getLogger("BDRootWindow").error("sync(): not visible"); diff --git a/src/libbluray/bdj/java/org/dvb/event/EventManager.java b/src/libbluray/bdj/java/org/dvb/event/EventManager.java index 5390eb2..a1312b2 100644 --- a/src/libbluray/bdj/java/org/dvb/event/EventManager.java +++ b/src/libbluray/bdj/java/org/dvb/event/EventManager.java @@ -19,6 +19,7 @@ package org.dvb.event; +import java.awt.BDJHelper; import java.util.Iterator; import java.util.LinkedList; @@ -140,7 +141,7 @@ public class EventManager implements ResourceServer { (evt.getCode() == keyCode) && (evt.getType() == type)) { - GUIManager.getInstance().postKeyEvent(type, modifiers, keyCode); + BDJHelper.postKeyEvent(type, modifiers, keyCode); return; } } @@ -163,7 +164,7 @@ public class EventManager implements ResourceServer { } } - GUIManager.getInstance().postKeyEvent(type, modifiers, keyCode); + BDJHelper.postKeyEvent(type, modifiers, keyCode); for (Iterator it = sharedUserEventListener.iterator(); it.hasNext(); ) { UserEventItem item = (UserEventItem)it.next(); diff --git a/src/libbluray/bdj/java/org/videolan/BDJXletContext.java b/src/libbluray/bdj/java/org/videolan/BDJXletContext.java index 9290a49..952c785 100644 --- a/src/libbluray/bdj/java/org/videolan/BDJXletContext.java +++ b/src/libbluray/bdj/java/org/videolan/BDJXletContext.java @@ -138,7 +138,7 @@ public class BDJXletContext implements javax.tv.xlet.XletContext, javax.microedi EventQueue eq = eventQueue; eventQueue = null; if (eq != null) { - GUIManager.stopEventQueue(eq); + java.awt.BDJHelper.stopEventQueue(eq); } } _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
