This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] some peer fixes
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Tue, 22 Jun 2004 23:51:22 -0400
- Subject: [gui][PATCH] some peer fixes
Hi,
I committed this patch to java-gui-branch. It simplifies the
GtkComponentPeer and GtkWindowPeer classes.
Tom
2004-06-22 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(GtkComponentPeer): Remove temporary try/catch block.
(setVisible): Call show and hide.
(show): Make native.
(hide): Likewise.
(getArgs): Don't add "visible" argument.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(property_notify_predicate): Return Bool instead of int.
(find_layout): New function.
(connectJObject): Call find_layout.
(connectSignals): Likewise.
(moveLayout): Likewise.
(gtkLayoutSetVisible): Likewise.
Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v
retrieving revision 1.16.2.11
diff -u -r1.16.2.11 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java 27 May 2004 18:12:14 -0000 1.16.2.11
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 23 Jun 2004 03:44:18 -0000
@@ -115,27 +115,25 @@
this.awtComponent = awtComponent;
insets = new Insets (0, 0, 0, 0);
- /* temporary try/catch block until all peers use this creation method */
- try {
- create ();
+ create ();
- GtkArgList args = new GtkArgList ();
- getArgs (awtComponent, args);
- args.setArgs (this);
-
- connectJObject ();
- connectSignals ();
-
- if (awtComponent.getForeground () != null)
- setForeground (awtComponent.getForeground ());
- if (awtComponent.getBackground () != null)
- setBackground (awtComponent.getBackground ());
- if (awtComponent.getFont() != null)
- setFont(awtComponent.getFont());
-
- setCursor (awtComponent.getCursor ());
- if (this instanceof GtkFileDialogPeer && awtComponent.getHeight() == 0
- && awtComponent.getWidth() == 0)
+ GtkArgList args = new GtkArgList ();
+ getArgs (awtComponent, args);
+ args.setArgs (this);
+
+ connectJObject ();
+ connectSignals ();
+
+ if (awtComponent.getForeground () != null)
+ setForeground (awtComponent.getForeground ());
+ if (awtComponent.getBackground () != null)
+ setBackground (awtComponent.getBackground ());
+ if (awtComponent.getFont() != null)
+ setFont(awtComponent.getFont());
+
+ setCursor (awtComponent.getCursor ());
+ if (this instanceof GtkFileDialogPeer && awtComponent.getHeight() == 0
+ && awtComponent.getWidth() == 0)
{
int[] dims = new int[2];
gtkWidgetGetDimensions(dims);
@@ -145,9 +143,8 @@
dims[0], dims[1]);
}
- Rectangle bounds = awtComponent.getBounds ();
- setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
- } catch (RuntimeException ex) { ; }
+ Rectangle bounds = awtComponent.getBounds ();
+ setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
}
public int checkImage (Image image, int width, int height,
@@ -157,7 +154,7 @@
return i.checkImage ();
}
- public Image createImage (ImageProducer producer)
+ public Image createImage (ImageProducer producer)
{
return new GtkImage (producer, null);
}
@@ -449,18 +446,14 @@
public void setVisible (boolean b)
{
- set ("visible", b);
- }
-
- public void hide ()
- {
- setVisible (false);
+ if (b)
+ show ();
+ else
+ hide ();
}
- public void show ()
- {
- setVisible (true);
- }
+ public native void hide ();
+ public native void show ();
protected void postMouseEvent(int id, long when, int mods, int x, int y,
int clickCount, boolean popupTrigger)
@@ -514,7 +507,6 @@
public void getArgs (Component component, GtkArgList args)
{
- args.add ("visible", component.isVisible ());
args.add ("sensitive", component.isEnabled ());
ComponentPeer p;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.15.2.14
diff -u -r1.15.2.14 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 15 Jun 2004 03:43:36 -0000 1.15.2.14
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 23 Jun 2004 03:44:19 -0000
@@ -885,13 +885,30 @@
(*env)->ReleaseStringUTFChars (env, name, font_name);
}
-void
-set_visible (GtkWidget *widget, jboolean visible)
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show
+ (JNIEnv *env, jobject obj)
{
- if (visible)
- gtk_widget_show (widget);
- else
- gtk_widget_hide (widget);
+ void *ptr;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter();
+ gtk_widget_show (GTK_WIDGET (ptr));
+ gdk_threads_leave();
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide
+ (JNIEnv *env, jobject obj)
+{
+ void *ptr;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter();
+ gtk_widget_hide (GTK_WIDGET (ptr));
+ gdk_threads_leave();
}
GtkLayout *
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,v
retrieving revision 1.24.2.5
diff -u -r1.24.2.5 gnu_java_awt_peer_gtk_GtkWindowPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 26 May 2004 15:53:57 -0000 1.24.2.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 23 Jun 2004 03:44:19 -0000
@@ -54,9 +54,11 @@
static void request_frame_extents (GtkWidget *window);
-static int property_notify_predicate (Display *xdisplay,
- XEvent *event,
- XPointer window_id);
+static Bool property_notify_predicate (Display *display,
+ XEvent *xevent,
+ XPointer arg);
+
+static GtkLayout *find_layout (GtkWindow *window);
static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
jobject peer);
@@ -74,10 +76,6 @@
GdkEventProperty *event,
jobject peer);
-/*
- * Make a new window.
- */
-
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
(JNIEnv *env, jobject obj, jint type, jboolean decorated,
@@ -180,29 +178,17 @@
(JNIEnv *env, jobject obj)
{
void *ptr;
- GtkWidget* vbox, *layout;
- GList* children;
+ GtkLayout *layout;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
- children = gtk_container_get_children(GTK_CONTAINER(ptr));
- vbox = children->data;
- g_assert (GTK_IS_VBOX(vbox));
-
- children = gtk_container_get_children(GTK_CONTAINER(vbox));
- do
- {
- layout = children->data;
- children = children->next;
- }
- while (!GTK_IS_LAYOUT (layout) && children != NULL);
- g_assert (GTK_IS_LAYOUT(layout));
+ layout = find_layout (GTK_WINDOW (ptr));
- gtk_widget_realize (layout);
+ gtk_widget_realize (GTK_WIDGET (layout));
- connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);
+ connect_awt_hook (env, obj, 1, layout->bin_window);
gtk_widget_realize (ptr);
@@ -215,32 +201,23 @@
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
(JNIEnv *env, jobject obj)
{
- void *ptr = NSA_GET_PTR (env, obj);
- jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
- GtkWidget* vbox, *layout;
- GList* children;
- g_assert (gref);
+ void *ptr;
+ jobject *gref;
+ GtkLayout *layout;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gref = NSA_GET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
gtk_widget_realize (ptr);
/* Receive events from the GtkLayout too */
- children = gtk_container_get_children(GTK_CONTAINER(ptr));
- vbox = children->data;
- g_assert (GTK_IS_VBOX (vbox));
+ layout = find_layout (GTK_WINDOW (ptr));
- children = gtk_container_get_children(GTK_CONTAINER(vbox));
- do
- {
- layout = children->data;
- children = children->next;
- }
- while (!GTK_IS_LAYOUT (layout) && children != NULL);
- g_assert (GTK_IS_LAYOUT (layout));
-
- g_signal_connect (GTK_OBJECT (layout), "event",
- G_CALLBACK (pre_event_handler), *gref);
+ g_signal_connect (G_OBJECT (layout), "event",
+ G_CALLBACK (pre_event_handler), *gref);
/* Connect signals for window event support. */
g_signal_connect (G_OBJECT (ptr), "delete-event",
@@ -470,7 +447,6 @@
{
void* ptr;
GList* children;
- GtkBox* vbox;
GtkLayout* layout;
GtkWidget* widget;
@@ -478,18 +454,8 @@
gdk_threads_enter ();
- children = gtk_container_get_children (GTK_CONTAINER (ptr));
- vbox = children->data;
- g_assert (GTK_IS_VBOX (vbox));
+ layout = find_layout (GTK_WINDOW (ptr));
- children = gtk_container_get_children (GTK_CONTAINER (vbox));
- do
- {
- layout = children->data;
- children = children->next;
- }
- while (!GTK_IS_LAYOUT (layout) && children != NULL);
- g_assert (GTK_IS_LAYOUT (layout));
children = gtk_container_get_children (GTK_CONTAINER (layout));
while (children != NULL)
@@ -505,36 +471,25 @@
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible
- (JNIEnv *env, jobject obj, jboolean vis)
+ (JNIEnv *env, jobject obj, jboolean visible)
{
- void* ptr;
- GList* children;
- GtkBox* vbox;
- GtkLayout* layout;
+ void *ptr;
+ GtkLayout *layout;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
- children = gtk_container_get_children (GTK_CONTAINER (ptr));
- vbox = children->data;
- g_assert (GTK_IS_VBOX (vbox));
+ layout = find_layout (GTK_WINDOW (ptr));
- children = gtk_container_get_children (GTK_CONTAINER (vbox));
- do
- {
- layout = children->data;
- children = children->next;
- }
- while (!GTK_IS_LAYOUT (layout) && children != NULL);
- g_assert (GTK_IS_LAYOUT (layout));
-
- if (vis)
+ if (visible)
gtk_widget_show (GTK_WIDGET (layout));
else
gtk_widget_hide (GTK_WIDGET (layout));
+
gdk_threads_leave ();
}
+
static void
window_get_frame_extents (GtkWidget *window,
int *top, int *left, int *bottom, int *right)
@@ -626,7 +581,7 @@
}
}
-static int
+static Bool
property_notify_predicate (Display *xdisplay __attribute__((unused)),
XEvent *event,
XPointer window_id)
@@ -636,9 +591,9 @@
if (event->xany.type == PropertyNotify
&& event->xany.window == *window
&& event->xproperty.atom == extents_atom)
- return True;
-
- return False;
+ return True;
+ else
+ return False;
}
static void
@@ -830,3 +785,26 @@
return FALSE;
}
+
+static GtkLayout *
+find_layout (GtkWindow *window)
+{
+ GList* children;
+ GtkBox* vbox;
+ GtkLayout* layout;
+
+ children = gtk_container_get_children (GTK_CONTAINER (window));
+ vbox = children->data;
+ g_assert (GTK_IS_VBOX (vbox));
+
+ children = gtk_container_get_children (GTK_CONTAINER (vbox));
+ do
+ {
+ layout = children->data;
+ children = children->next;
+ }
+ while (!GTK_IS_LAYOUT (layout) && children != NULL);
+ g_assert (GTK_IS_LAYOUT (layout));
+
+ return layout;
+}