diff options
author | Thomas Fitzsimmons <fitzsim@redhat.com> | 2005-08-17 04:24:37 +0000 |
---|---|---|
committer | Thomas Fitzsimmons <fitzsim@redhat.com> | 2005-08-17 04:24:37 +0000 |
commit | d84e5ed2569a3365b2e41877ca7cb4232441756e (patch) | |
tree | f90f6ecb3b6f408e7d67cd692d2f6eb0ffd0b16b | |
parent | 0d8c01f5da69a440c49ab9ff5eeb227d53520645 (diff) | |
download | classpath-d84e5ed2569a3365b2e41877ca7cb4232441756e.tar.gz |
2005-08-17 Thomas Fitzsimmons <fitzsim@redhat.com>
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(setBoundsCallbackID): Remove variable.
(cp_gtk_window_init_jni): Don't initialize setBoundsCallbackID.
(setBoundsCallback): Remove method.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
(setMenuBarPeer): Check if menubar is NULL.
(setMenuBarWidth): Likewise.
* java/awt/Window.java (dispatchEventImpl): Validate upon
receiving a COMPONENT_RESIZED event.
(setBoundsCallback): Remove method.
* include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Regenerate.
* gnu/java/awt/peer/gtk/GtkWindowPeer.java (setBoundsCallback):
Remove method declaration.
(postConfigureEvent): Separate handling of resizes and moves.
Call setSize and post COMPONENT_RESIZED event.
* gnu/java/awt/peer/gtk/GtkFramePeer.java (postConfigureEvent):
Separate handling of resizes and moves. Call setSize and post
COMPONENT_RESIZED event.
* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
(setComponentBounds): Call setSize and post COMPONENT_RESIZED
event.
* gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating):
Remove field.
-rw-r--r-- | ChangeLog | 26 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkContainerPeer.java | 4 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkFileDialogPeer.java | 14 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkFramePeer.java | 35 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkWindowPeer.java | 23 | ||||
-rw-r--r-- | include/gnu_java_awt_peer_gtk_GtkWindowPeer.h | 1 | ||||
-rw-r--r-- | java/awt/Window.java | 40 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c | 29 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 19 |
9 files changed, 81 insertions, 110 deletions
@@ -1,3 +1,29 @@ +2005-08-17 Thomas Fitzsimmons <fitzsim@redhat.com> + + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c + (setBoundsCallbackID): Remove variable. + (cp_gtk_window_init_jni): Don't initialize setBoundsCallbackID. + (setBoundsCallback): Remove method. + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c + (setMenuBarPeer): Check if menubar is NULL. + (setMenuBarWidth): Likewise. + * java/awt/Window.java (dispatchEventImpl): Validate upon + receiving a COMPONENT_RESIZED event. + (setBoundsCallback): Remove method. + * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Regenerate. + * gnu/java/awt/peer/gtk/GtkWindowPeer.java (setBoundsCallback): + Remove method declaration. + (postConfigureEvent): Separate handling of resizes and moves. + Call setSize and post COMPONENT_RESIZED event. + * gnu/java/awt/peer/gtk/GtkFramePeer.java (postConfigureEvent): + Separate handling of resizes and moves. Call setSize and post + COMPONENT_RESIZED event. + * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java + (setComponentBounds): Call setSize and post COMPONENT_RESIZED + event. + * gnu/java/awt/peer/gtk/GtkContainerPeer.java (isValidating): + Remove field. + 2005-08-15 Dalibor Topic <robilad@kaffe.org> * configure.ac: Added option to enable building qt peers. diff --git a/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/gnu/java/awt/peer/gtk/GtkContainerPeer.java index c2865f70f..466aaeae9 100644 --- a/gnu/java/awt/peer/gtk/GtkContainerPeer.java +++ b/gnu/java/awt/peer/gtk/GtkContainerPeer.java @@ -52,7 +52,6 @@ public class GtkContainerPeer extends GtkComponentPeer implements ContainerPeer { Container c; - boolean isValidating; public GtkContainerPeer(Container c) { @@ -62,7 +61,6 @@ public class GtkContainerPeer extends GtkComponentPeer public void beginValidate () { - isValidating = true; } public void endValidate () @@ -90,8 +88,6 @@ public class GtkContainerPeer extends GtkComponentPeer if (!(awtComponent instanceof Window)) setParentAndBounds (); } - - isValidating = false; } public Insets getInsets() diff --git a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java index bd1f0775a..603222605 100644 --- a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java +++ b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java @@ -42,6 +42,7 @@ import java.awt.Dialog; import java.awt.FileDialog; import java.awt.Graphics; import java.awt.Window; +import java.awt.event.ComponentEvent; import java.awt.peer.FileDialogPeer; import java.io.File; import java.io.FilenameFilter; @@ -87,10 +88,15 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer { int[] dims = new int[2]; gtkWidgetGetPreferredDimensions (dims); - ((GtkFileDialogPeer) this).setBoundsCallback ((Window) awtComponent, - awtComponent.getX (), - awtComponent.getY (), - dims[0], dims[1]); + + if (dims[0] != awtComponent.getWidth() + || dims[1] != awtComponent.getHeight()) + { + awtComponent.setSize(dims[0], dims[1]); + ComponentEvent e = new ComponentEvent(awtComponent, + ComponentEvent.COMPONENT_RESIZED); + q().postEvent(e); + } } super.setComponentBounds (); } diff --git a/gnu/java/awt/peer/gtk/GtkFramePeer.java b/gnu/java/awt/peer/gtk/GtkFramePeer.java index b242d66ad..8def405d2 100644 --- a/gnu/java/awt/peer/gtk/GtkFramePeer.java +++ b/gnu/java/awt/peer/gtk/GtkFramePeer.java @@ -44,6 +44,7 @@ import java.awt.Image; import java.awt.MenuBar; import java.awt.Rectangle; import java.awt.Window; +import java.awt.event.ComponentEvent; import java.awt.event.PaintEvent; import java.awt.image.ColorModel; import java.awt.peer.FramePeer; @@ -192,31 +193,25 @@ public class GtkFramePeer extends GtkWindowPeer protected void postConfigureEvent (int x, int y, int width, int height) { - int frame_x = x - insets.left; - // Since insets.top includes the MenuBar height, we need to add back - // the MenuBar height to the frame's y position. - // If no MenuBar exists in this frame, the MenuBar height will be 0. - int frame_y = y - insets.top + menuBarHeight; int frame_width = width + insets.left + insets.right; - // Ditto as above. Since insets.top already includes the MenuBar's height, - // we need to subtract the MenuBar's height from the top inset. + // Since insets.top already includes the MenuBar's height, we need + // to subtract the MenuBar's height from the top inset. int frame_height = height + insets.top + insets.bottom - menuBarHeight; - if (frame_x != awtComponent.getX() - || frame_y != awtComponent.getY() - || frame_width != awtComponent.getWidth() + + if (frame_width != awtComponent.getWidth() || frame_height != awtComponent.getHeight()) - { - if (frame_width != awtComponent.getWidth() && menuBar != null - && width > 0) - setMenuBarWidth (menuBar, width); + awtComponent.setSize(frame_width, frame_height); - setBoundsCallback ((Window) awtComponent, - frame_x, - frame_y, - frame_width, - frame_height); + int frame_x = x - insets.left; + // Likewise, since insets.top includes the MenuBar height, we need + // to add back the MenuBar height to the frame's y position. If + // no MenuBar exists in this frame, the MenuBar height will be 0. + int frame_y = y - insets.top + menuBarHeight; - awtComponent.validate(); + if (frame_x != awtComponent.getX() + || frame_y != awtComponent.getY()) + { + // awtComponent.setLocation(frame_x, frame_y); } } diff --git a/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/gnu/java/awt/peer/gtk/GtkWindowPeer.java index 71e05a87d..32e4cee44 100644 --- a/gnu/java/awt/peer/gtk/GtkWindowPeer.java +++ b/gnu/java/awt/peer/gtk/GtkWindowPeer.java @@ -41,6 +41,7 @@ package gnu.java.awt.peer.gtk; import java.awt.Component; import java.awt.Frame; import java.awt.Window; +import java.awt.event.ComponentEvent; import java.awt.event.WindowEvent; import java.awt.peer.WindowPeer; @@ -140,10 +141,6 @@ public class GtkWindowPeer extends GtkContainerPeer gtkWindowSetResizable (resizable); } - native void setBoundsCallback (Window window, - int x, int y, - int width, int height); - protected void postInsetsChangedEvent (int top, int left, int bottom, int right) { @@ -155,20 +152,20 @@ public class GtkWindowPeer extends GtkContainerPeer protected void postConfigureEvent (int x, int y, int width, int height) { - int frame_x = x - insets.left; - int frame_y = y - insets.top; int frame_width = width + insets.left + insets.right; int frame_height = height + insets.top + insets.bottom; - if (frame_x != awtComponent.getX() - || frame_y != awtComponent.getY() - || frame_width != awtComponent.getWidth() + if (frame_width != awtComponent.getWidth() || frame_height != awtComponent.getHeight()) - { - setBoundsCallback ((Window) awtComponent, - frame_x, frame_y, frame_width, frame_height); + awtComponent.setSize(frame_width, frame_height); - awtComponent.validate(); + int frame_x = x - insets.left; + int frame_y = y - insets.top; + + if (frame_x != awtComponent.getX() + || frame_y != awtComponent.getY()) + { + // awtComponent.setLocation(frame_x, frame_y); } } diff --git a/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h b/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h index 56fa79c27..5d3f132ea 100644 --- a/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h +++ b/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h @@ -20,7 +20,6 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv * JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, jobject); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds (JNIEnv *env, jobject, jint, jint, jint, jint); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize (JNIEnv *env, jobject, jint, jint); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback (JNIEnv *env, jobject, jobject, jint, jint, jint, jint); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible (JNIEnv *env, jobject, jboolean); #undef gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_NORMAL #define gnu_java_awt_peer_gtk_GtkWindowPeer_GDK_WINDOW_TYPE_HINT_NORMAL 0L diff --git a/java/awt/Window.java b/java/awt/Window.java index e26c4e32f..343590bdd 100644 --- a/java/awt/Window.java +++ b/java/awt/Window.java @@ -619,6 +619,8 @@ public class Window extends Container implements Accessible || windowStateListener != null || (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0)) processEvent(e); + else if (e.id == ComponentEvent.COMPONENT_RESIZED) + validate (); else super.dispatchEventImpl(e); } @@ -1070,44 +1072,6 @@ public class Window extends Container implements Accessible this.focusableWindowState = focusableWindowState; } - // setBoundsCallback is needed so that when a user moves a window, - // the Window's location can be updated without calling the peer's - // setBounds method. When a user moves a window the peer window's - // location is updated automatically and the windowing system sends - // a message back to the application informing it of its updated - // dimensions. We must update the AWT Window class with these new - // dimensions. But we don't want to call the peer's setBounds - // method, because the peer's dimensions have already been updated. - // (Under X, having this method prevents Configure event loops when - // moving windows: Component.setBounds -> peer.setBounds -> - // postConfigureEvent -> Component.setBounds -> ... In some cases - // Configure event loops cause windows to jitter back and forth - // continuously). - void setBoundsCallback (int x, int y, int w, int h) - { - if (this.x == x && this.y == y && width == w && height == h) - return; - invalidate(); - boolean resized = width != w || height != h; - boolean moved = this.x != x || this.y != y; - this.x = x; - this.y = y; - width = w; - height = h; - if (resized && isShowing ()) - { - ComponentEvent ce = - new ComponentEvent(this, ComponentEvent.COMPONENT_RESIZED); - getToolkit().getSystemEventQueue().postEvent(ce); - } - if (moved && isShowing ()) - { - ComponentEvent ce = - new ComponentEvent(this, ComponentEvent.COMPONENT_MOVED); - getToolkit().getSystemEventQueue().postEvent(ce); - } - } - /** * Generate a unique name for this window. * diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c index 41dfcea67..5b99598e5 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c @@ -85,11 +85,15 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); - mptr = NSA_GET_PTR (env, menubar); - fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data; - gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0); - gtk_widget_show (mptr); + if (menubar) + { + mptr = NSA_GET_PTR (env, menubar); + + fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data; + gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0); + gtk_widget_show (mptr); + } gdk_threads_leave (); } @@ -121,15 +125,18 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth gdk_threads_enter (); - ptr = NSA_GET_PTR (env, menubar); + if (menubar) + { + ptr = NSA_GET_PTR (env, menubar); - /* Get the menubar's natural size request. */ - gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1); - gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req); + /* Get the menubar's natural size request. */ + gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1); + gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req); - /* Set the menubar's size request to width by natural_req.height. */ - gtk_widget_set_size_request (GTK_WIDGET (ptr), - width, natural_req.height); + /* Set the menubar's size request to width by natural_req.height. */ + gtk_widget_set_size_request (GTK_WIDGET (ptr), + width, natural_req.height); + } gdk_threads_leave (); } diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index 650d9b603..3f607edd6 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -260,20 +260,12 @@ static jmethodID postConfigureEventID; static jmethodID postInsetsChangedEventID; static jmethodID windowGetWidthID; static jmethodID windowGetHeightID; -static jmethodID setBoundsCallbackID; void cp_gtk_window_init_jni (void) { - jclass window; jclass gtkwindowpeer; - window = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), "java/awt/Window"); - - setBoundsCallbackID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), window, - "setBoundsCallback", - "(IIII)V"); - gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), "gnu/java/awt/peer/gtk/GtkWindowPeer"); @@ -1349,17 +1341,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, } JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback - (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jobject window, jint x, jint y, jint width, jint height) -{ - /* Circumvent package-private access to call Window's - setBoundsCallback method. */ - (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), window, setBoundsCallbackID, - x, y, width, height); -} - -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize (JNIEnv *env, jobject obj, jint width, jint height) { |