summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2005-08-17 04:24:37 +0000
committerThomas Fitzsimmons <fitzsim@redhat.com>2005-08-17 04:24:37 +0000
commitd84e5ed2569a3365b2e41877ca7cb4232441756e (patch)
treef90f6ecb3b6f408e7d67cd692d2f6eb0ffd0b16b
parent0d8c01f5da69a440c49ab9ff5eeb227d53520645 (diff)
downloadclasspath-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--ChangeLog26
-rw-r--r--gnu/java/awt/peer/gtk/GtkContainerPeer.java4
-rw-r--r--gnu/java/awt/peer/gtk/GtkFileDialogPeer.java14
-rw-r--r--gnu/java/awt/peer/gtk/GtkFramePeer.java35
-rw-r--r--gnu/java/awt/peer/gtk/GtkWindowPeer.java23
-rw-r--r--include/gnu_java_awt_peer_gtk_GtkWindowPeer.h1
-rw-r--r--java/awt/Window.java40
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c29
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c19
9 files changed, 81 insertions, 110 deletions
diff --git a/ChangeLog b/ChangeLog
index c5c3836f1..08b5a6e87 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
{