diff options
| author | Roman Kennke <roman@kennke.org> | 2006-10-18 22:09:15 +0000 |
|---|---|---|
| committer | Roman Kennke <roman@kennke.org> | 2006-10-18 22:09:15 +0000 |
| commit | 3fb3b2dca64325b1e95376b22ee8b16dfdfafa6d (patch) | |
| tree | 7f7959c0a20ae250b9a1ad8c8bfa4e3c897d5bee /gnu/java/awt/peer/gtk | |
| parent | ed77968e223e822b5375f3e866abf2b998149faa (diff) | |
| download | classpath-3fb3b2dca64325b1e95376b22ee8b16dfdfafa6d.tar.gz | |
2006-10-18 Roman Kennke <kennke@aicas.com>
PR 27091
* gnu/java/awt/peer/gtk/GtkFramePeer.java
(maximize): New native method.
(unmaximize): New native method.
(iconify): New native method.
(deiconify): New native method.
(getState): Implemented.
(setState): Implemented.
* gnu/java/awt/peer/gtk/GtkWindowPeer.java
(oldState): Rename to windowState and made protected, so that
the FramePeer can access it.
(postWindowEvent): Handle state change events more gently and
correctly.
* java/awt/Frame.java
(getState): Fetch state from getExtendedState().
(setExtendedState): Update the peer. Check if the state change
is actually supported.
(getExtendedState): Update the state from the peer.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
(maximize): New method.
(unmaximize): New method.
(iconify): New method.
(deiconify): New method.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(AWT_FRAME_NORMAL): New macro.
(AWT_FRAME_ICONIFIED): New macro.
(AWT_FRAME_MAXIMIZED_BOTH): New macro.
(window_window_state_cb): Rewritten to handle window state changes
more gently (mostly on the java side of the world).
* include/gnu_java_awt_peer_gtk_GtkFramePeer.h: Regenerated.
Diffstat (limited to 'gnu/java/awt/peer/gtk')
| -rw-r--r-- | gnu/java/awt/peer/gtk/GtkFramePeer.java | 22 | ||||
| -rw-r--r-- | gnu/java/awt/peer/gtk/GtkToolkit.java | 8 | ||||
| -rw-r--r-- | gnu/java/awt/peer/gtk/GtkWindowPeer.java | 23 |
3 files changed, 46 insertions, 7 deletions
diff --git a/gnu/java/awt/peer/gtk/GtkFramePeer.java b/gnu/java/awt/peer/gtk/GtkFramePeer.java index bb6f8b3bb..d113e92f5 100644 --- a/gnu/java/awt/peer/gtk/GtkFramePeer.java +++ b/gnu/java/awt/peer/gtk/GtkFramePeer.java @@ -57,6 +57,11 @@ public class GtkFramePeer extends GtkWindowPeer native void removeMenuBarPeer (); native void gtkFixedSetVisible (boolean visible); + private native void maximize(); + private native void unmaximize(); + private native void iconify(); + private native void deiconify(); + int getMenuBarHeight () { return menuBar == null ? 0 : getMenuBarHeight (menuBar); @@ -199,12 +204,25 @@ public class GtkFramePeer extends GtkWindowPeer public int getState () { - return 0; + return windowState; } public void setState (int state) { - + switch (state) + { + case Frame.NORMAL: + if ((windowState & Frame.ICONIFIED) != 0) + deiconify(); + if ((windowState & Frame.MAXIMIZED_BOTH) != 0) + unmaximize(); + break; + case Frame.ICONIFIED: + iconify(); + break; + case Frame.MAXIMIZED_BOTH: + maximize(); + } } public void setMaximizedBounds (Rectangle r) diff --git a/gnu/java/awt/peer/gtk/GtkToolkit.java b/gnu/java/awt/peer/gtk/GtkToolkit.java index 3f87ca6e6..d2721b43f 100644 --- a/gnu/java/awt/peer/gtk/GtkToolkit.java +++ b/gnu/java/awt/peer/gtk/GtkToolkit.java @@ -664,6 +664,14 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit return new GtkMouseInfoPeer(); } + public boolean isFrameStateSupported(int state) + { + // GTK supports ICONFIED, NORMAL and MAXIMIZE_BOTH, but + // not (yet?) MAXIMIZE_VERT and MAXIMIZE_HORIZ. + return state == Frame.NORMAL || state == Frame.ICONIFIED + || state == Frame.MAXIMIZED_BOTH; + } + public native int getMouseNumberOfButtons(); } // class GtkToolkit diff --git a/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/gnu/java/awt/peer/gtk/GtkWindowPeer.java index 84e967602..1abc5ca84 100644 --- a/gnu/java/awt/peer/gtk/GtkWindowPeer.java +++ b/gnu/java/awt/peer/gtk/GtkWindowPeer.java @@ -64,7 +64,7 @@ public class GtkWindowPeer extends GtkContainerPeer protected static final int GDK_WINDOW_TYPE_HINT_DOCK = 6; protected static final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7; - private int oldState = Frame.NORMAL; + protected int windowState = Frame.NORMAL; // Cached awt window component location, width and height. private int x, y, width, height; @@ -284,11 +284,24 @@ public class GtkWindowPeer extends GtkContainerPeer { if (id == WindowEvent.WINDOW_STATE_CHANGED) { - if (oldState != newState) + if (windowState != newState) { - q().postEvent (new WindowEvent ((Window) awtComponent, id, opposite, - oldState, newState)); - oldState = newState; + // Post old styleWindowEvent with WINDOW_ICONIFIED or + // WINDOW_DEICONIFIED if appropriate. + if ((windowState & Frame.ICONIFIED) != 0 + && (newState & Frame.ICONIFIED) == 0) + q().postEvent(new WindowEvent((Window) awtComponent, + WindowEvent.WINDOW_DEICONIFIED, + opposite, 0, 0)); + else if ((windowState & Frame.ICONIFIED) == 0 + && (newState & Frame.ICONIFIED) != 0) + q().postEvent(new WindowEvent((Window) awtComponent, + WindowEvent.WINDOW_ICONIFIED, + opposite, 0, 0)); + // Post new-style WindowStateEvent. + q().postEvent (new WindowEvent ((Window) awtComponent, id, + opposite, windowState, newState)); + windowState = newState; } } else |
