diff options
author | Dmitri Trembovetski <[email protected]> | 2009-05-26 21:24:24 +0000 |
---|---|---|
committer | Dmitri Trembovetski <[email protected]> | 2009-05-26 21:24:24 +0000 |
commit | 90c95605aa73985289600ad1f70d5ae29e69dcfc (patch) | |
tree | bf50ee60a5a6792eca4ba86b7124a8430e4a86e2 /src/newt/classes | |
parent | 6aaddcca9dcefd240eb616e58ecffc1371d8f19b (diff) |
Newt: implemented simple Window focus management (focusGained/focusLost/requestFocus for Window). Currently only implemented on Windows.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JOGL_2_SANDBOX@1916 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/newt/classes')
5 files changed, 48 insertions, 4 deletions
diff --git a/src/newt/classes/com/sun/javafx/newt/Window.java b/src/newt/classes/com/sun/javafx/newt/Window.java index 29d4b6195..d649b53a4 100755 --- a/src/newt/classes/com/sun/javafx/newt/Window.java +++ b/src/newt/classes/com/sun/javafx/newt/Window.java @@ -221,7 +221,8 @@ public abstract class Window implements NativeWindow return undecorated; } - + public void requestFocus() { + } // // NativeWindow impl @@ -551,7 +552,7 @@ public abstract class Window implements NativeWindow private ArrayList keyListeners = new ArrayList(); protected void sendKeyEvent(int eventType, int modifiers, int keyCode, char keyChar) { - KeyEvent e = new KeyEvent(true, eventType, this, System.currentTimeMillis(), + KeyEvent e = new KeyEvent(true, eventType, this, System.currentTimeMillis(), modifiers, keyCode, keyChar); if(DEBUG_KEY_EVENT) { System.out.println("sendKeyEvent: "+e); @@ -627,8 +628,16 @@ public abstract class Window implements NativeWindow case WindowEvent.EVENT_WINDOW_DESTROY_NOTIFY: l.windowDestroyNotify(e); break; + case WindowEvent.EVENT_WINDOW_GAINED_FOCUS: + l.windowGainedFocus(e); + break; + case WindowEvent.EVENT_WINDOW_LOST_FOCUS: + l.windowLostFocus(e); + break; default: - throw new NativeWindowException("Unexpected window event type " + e.getEventType()); + throw + new NativeWindowException("Unexpected window event type " + + e.getEventType()); } } } diff --git a/src/newt/classes/com/sun/javafx/newt/WindowEvent.java b/src/newt/classes/com/sun/javafx/newt/WindowEvent.java index a502e912c..634672f32 100644 --- a/src/newt/classes/com/sun/javafx/newt/WindowEvent.java +++ b/src/newt/classes/com/sun/javafx/newt/WindowEvent.java @@ -36,7 +36,9 @@ package com.sun.javafx.newt; public class WindowEvent extends Event { public static final int EVENT_WINDOW_RESIZED = 100; public static final int EVENT_WINDOW_MOVED = 101; - public static final int EVENT_WINDOW_DESTROY_NOTIFY = 102; + public static final int EVENT_WINDOW_DESTROY_NOTIFY = 102; + public static final int EVENT_WINDOW_GAINED_FOCUS = 103; + public static final int EVENT_WINDOW_LOST_FOCUS = 104; public WindowEvent(int eventType, Window source, long when) { this(false, eventType, source, when); @@ -51,6 +53,8 @@ public class WindowEvent extends Event { case EVENT_WINDOW_RESIZED: return "WINDOW_RESIZED"; case EVENT_WINDOW_MOVED: return "WINDOW_MOVED"; case EVENT_WINDOW_DESTROY_NOTIFY: return "EVENT_WINDOW_DESTROY_NOTIFY"; + case EVENT_WINDOW_GAINED_FOCUS: return "EVENT_WINDOW_GAINED_FOCUS"; + case EVENT_WINDOW_LOST_FOCUS: return "EVENT_WINDOW_LOST_FOCUS"; default: return "unknown (" + type + ")"; } } diff --git a/src/newt/classes/com/sun/javafx/newt/WindowListener.java b/src/newt/classes/com/sun/javafx/newt/WindowListener.java index e8423cbcc..81624fa75 100644 --- a/src/newt/classes/com/sun/javafx/newt/WindowListener.java +++ b/src/newt/classes/com/sun/javafx/newt/WindowListener.java @@ -37,4 +37,6 @@ public interface WindowListener extends EventListener { public void windowResized(WindowEvent e); public void windowMoved(WindowEvent e); public void windowDestroyNotify(WindowEvent e); + public void windowGainedFocus(WindowEvent e); + public void windowLostFocus(WindowEvent e); } diff --git a/src/newt/classes/com/sun/javafx/newt/opengl/GLWindow.java b/src/newt/classes/com/sun/javafx/newt/opengl/GLWindow.java index 196396857..8f7c309f8 100644 --- a/src/newt/classes/com/sun/javafx/newt/opengl/GLWindow.java +++ b/src/newt/classes/com/sun/javafx/newt/opengl/GLWindow.java @@ -83,6 +83,12 @@ public class GLWindow extends Window implements GLAutoDrawable { public void windowMoved(WindowEvent e) { } + public void windowGainedFocus(WindowEvent e) { + } + + public void windowLostFocus(WindowEvent e) { + } + public void windowDestroyNotify(WindowEvent e) { sendDispose = true; } diff --git a/src/newt/classes/com/sun/javafx/newt/windows/WindowsWindow.java b/src/newt/classes/com/sun/javafx/newt/windows/WindowsWindow.java index 2073c5d1b..6c7d8ab56 100755 --- a/src/newt/classes/com/sun/javafx/newt/windows/WindowsWindow.java +++ b/src/newt/classes/com/sun/javafx/newt/windows/WindowsWindow.java @@ -134,6 +134,14 @@ public class WindowsWindow extends Window { } // @Override + public void requestFocus() { + super.requestFocus(); + if (windowHandle != 0L) { + requestFocus(windowHandle); + } + } + + // @Override public void setTitle(String title) { if (title == null) { title = ""; @@ -188,6 +196,7 @@ public class WindowsWindow extends Window { private native boolean setFullScreen0(long windowHandle, boolean fullscreen); private static native void setPosition(long windowHandle, int x, int y); private static native void setTitle(long windowHandle, String title); + private static native void requestFocus(long windowHandle); private void sizeChanged(int newWidth, int newHeight) { width = newWidth; @@ -200,4 +209,18 @@ public class WindowsWindow extends Window { y = newY; sendWindowEvent(WindowEvent.EVENT_WINDOW_MOVED); } + + /** + * + * @param focusOwner if focusGained is true, focusOwner is the previous + * focus owner, if focusGained is false, focusOwner is the new focus owner + * @param focusGained + */ + private void focusChanged(long focusOwner, boolean focusGained) { + if (focusGained) { + sendWindowEvent(WindowEvent.EVENT_WINDOW_GAINED_FOCUS); + } else { + sendWindowEvent(WindowEvent.EVENT_WINDOW_LOST_FOCUS); + } + } } |