diff options
-rw-r--r-- | libjava/ChangeLog | 30 | ||||
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java | 3 | ||||
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java | 12 | ||||
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java | 8 | ||||
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java | 42 | ||||
-rw-r--r-- | libjava/java/awt/Window.java | 34 | ||||
-rw-r--r-- | libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c | 79 | ||||
-rw-r--r-- | libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c | 3 | ||||
-rw-r--r-- | libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 82 | ||||
-rw-r--r-- | libjava/jni/gtk-peer/gtkpeer.h | 11 |
10 files changed, 183 insertions, 121 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 322cbf28e92..54d8dbc050a 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,35 @@ 2003-10-08 Thomas Fitzsimmons <fitzsim@redhat.com> + * gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove + modality check. + * gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets): + Initialize insets to use latest insets. + * gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise. + * gnu/java/awt/peer/gtk/GtkWindowPeer.java (latestInsets): New + field. + (postConfigureEvent): Update latestInsets field when insets + change. Remove call to setSize. Move validate call outside of + if blocks. + (setVisible): Call setBounds before showing window. + (nativeSetVisible): New native method. + * java/awt/Window.java (show): Show visible owned windows. + (hide): Hide visible owned windows. + * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c + (awt_event_handler): Implement modality using GTK grabs. + * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c + (global_gtk_window_group): New global variable. + (gtkInit): Initialize global_gtk_window_group. + * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create): + Clamp width and height values to at least 1. Add this window to + the global GTK window group. + (setVisible): Rename to nativeSetVisible. + (setup_window): Remove function. + (setSize): Clamp width and height values to at least 1. + (nativeSetBounds): Likewise. + (gdk_window_get_root_geometry): Remove function. + * jni/gtk-peer/gtkpeer.h: Remove gdk_window_get_root_geometry + and setup_window declarations. Declare global_gtk_window_group. + * gnu/java/awt/peer/gtk/GtkButtonPeer.java, jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (gtkSetFont): Handle BOLD and ITALIC style specifiers. diff --git a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java index 1b057507b02..0801f9c6ec0 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java @@ -66,8 +66,7 @@ public class GtkButtonPeer extends GtkComponentPeer public void handleEvent (AWTEvent e) { - if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled () - && !modalHasGrab ()) + if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ()) { MouseEvent me = (MouseEvent) e; if (!me.isConsumed () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java index e7b047ea2e2..551d05ded8f 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java @@ -54,11 +54,13 @@ public class GtkDialogPeer extends GtkWindowPeer void initializeInsets () { - // Unfortunately, X does not provide a clean way to calculate the - // dimensions of a dialog's borders before it has been displayed. - // So we guess and then fix the dimensions upon receipt of the - // first configure event. - insets = new Insets (20, 6, 6, 6); + synchronized (latestInsets) + { + insets = new Insets (latestInsets.top, + latestInsets.left, + latestInsets.bottom, + latestInsets.right); + } } void create () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java index b44a02d13db..ce5aa71e573 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java @@ -76,7 +76,13 @@ public class GtkFramePeer extends GtkWindowPeer // dimensions of a frame's borders before it has been displayed. // So we guess and then fix the dimensions upon receipt of the // first configure event. - insets = new Insets (20, 6, 6, 6); + synchronized (latestInsets) + { + insets = new Insets (latestInsets.top, + latestInsets.left, + latestInsets.bottom, + latestInsets.right); + } } void create () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java index be615042524..8875913d4fc 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java @@ -56,6 +56,15 @@ public class GtkWindowPeer extends GtkContainerPeer static protected final int GDK_WINDOW_TYPE_HINT_DOCK = 6; static protected final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7; + // Unfortunately, X does not provide a clean way to calculate the + // dimensions of a window's borders before it has been displayed. + // So when creating the application's first window we guess the + // border dimensions. Then if need be for that window, we fix the + // dimensions upon receipt of the first configure event. Windows + // created after the first one will use the latest inset values + // received in postConfigureEvent. + static Insets latestInsets = new Insets (20, 6, 6, 6); + native void create (int type, boolean decorated, int width, int height, GtkWindowPeer parent); @@ -109,18 +118,19 @@ public class GtkWindowPeer extends GtkContainerPeer set ("title", title); } + native void setSize (int width, int height); + public void setResizable (boolean resizable) { // Call setSize; otherwise when resizable is changed from true to // false the window will shrink to the dimensions it had before it // was resizable. setSize (awtComponent.getWidth() - insets.left - insets.right, - awtComponent.getHeight() - insets.top - insets.bottom); + awtComponent.getHeight() - insets.top - insets.bottom); set ("allow_shrink", resizable); set ("allow_grow", resizable); } - native void setSize (int width, int height); native void setBoundsCallback (Window window, int x, int y, int width, int height); @@ -159,7 +169,13 @@ public class GtkWindowPeer extends GtkContainerPeer insets.bottom = bottom; insets.right = right; - awtComponent.validate(); + synchronized (latestInsets) + { + latestInsets.top = top; + latestInsets.left = left; + latestInsets.bottom = bottom; + latestInsets.right = right; + } } else { @@ -178,15 +194,21 @@ public class GtkWindowPeer extends GtkContainerPeer frame_y, frame_width, frame_height); - - if (frame_width != awtComponent.getWidth() - || frame_height != awtComponent.getHeight()) - setSize (width, height); - - awtComponent.validate(); } } + awtComponent.validate(); } - native public void setVisible (boolean b); + native void nativeSetVisible (boolean b); + public void setVisible (boolean b) + { + // Prevent the window manager from automatically placing this + // window when it is shown. + if (b) + setBounds (awtComponent.getX(), + awtComponent.getY(), + awtComponent.getWidth(), + awtComponent.getHeight()); + nativeSetVisible (b); + } } diff --git a/libjava/java/awt/Window.java b/libjava/java/awt/Window.java index 3554bf5e581..ad4aec70649 100644 --- a/libjava/java/awt/Window.java +++ b/libjava/java/awt/Window.java @@ -209,7 +209,8 @@ public class Window extends Container implements Accessible } /** - * Makes this window visible and brings it to the front. + * Shows on-screen this window and any of its owned windows for whom + * isVisible returns true. */ public void show() { @@ -218,6 +219,26 @@ public class Window extends Container implements Accessible if (peer == null) addNotify(); + // Show visible owned windows. + synchronized (ownedWindows) + { + Iterator e = ownedWindows.iterator(); + while(e.hasNext()) + { + Window w = (Window)(((Reference) e.next()).get()); + if (w != null) + { + if (w.isVisible()) + w.getPeer().setVisible(true); + } + else + // Remove null weak reference from ownedWindows. + // Unfortunately this can't be done in the Window's + // finalize method because there is no way to guarantee + // synchronous access to ownedWindows there. + e.remove(); + } + } validate(); super.show(); toFront(); @@ -225,6 +246,7 @@ public class Window extends Container implements Accessible public void hide() { + // Hide visible owned windows. synchronized (ownedWindows) { Iterator e = ownedWindows.iterator(); @@ -232,16 +254,14 @@ public class Window extends Container implements Accessible { Window w = (Window)(((Reference) e.next()).get()); if (w != null) - w.hide(); + { + if (w.isVisible() && w.getPeer() != null) + w.getPeer().setVisible(false); + } else - // Remove null weak reference from ownedWindows. - // Unfortunately this can't be done in the Window's - // finalize method because there is no way to guarantee - // synchronous access to ownedWindows there. e.remove(); } } - super.hide(); } diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c index b6a172d7ab8..563492a3627 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c @@ -813,7 +813,7 @@ generates_key_typed_event (GdkEvent *event, GtkWidget *source) void awt_event_handler (GdkEvent *event) { - jobject *obj_ptr; + jobject *event_obj_ptr; static guint32 button_click_time = 0; static GdkWindow *button_window = NULL; static guint button_number = -1; @@ -865,12 +865,49 @@ awt_event_handler (GdkEvent *event) NULL, NULL, NULL, - (guchar **)&obj_ptr)) + (guchar **)&event_obj_ptr)) { + GtkWidget *event_widget; + GtkWidget *grab_widget; + jobject *grab_obj_ptr = NULL; + void *ptr; + + /* Implement modality using GTK grabs. */ + g_assert (global_gtk_window_group); + if (global_gtk_window_group->grabs) + { + grab_widget = global_gtk_window_group->grabs->data; + g_assert (grab_widget); + + gdk_property_get (grab_widget->window, + gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE), + gdk_atom_intern ("CARDINAL", FALSE), + 0, + sizeof (jobject), + FALSE, + NULL, + NULL, + NULL, + (guchar **)&grab_obj_ptr); + + ptr = NSA_GET_PTR (gdk_env, *event_obj_ptr); + event_widget = GTK_WIDGET(ptr); + + if (GTK_WIDGET_IS_SENSITIVE (event_widget) && + gtk_widget_is_ancestor (event_widget, grab_widget)) + { + g_free (grab_obj_ptr); + + grab_obj_ptr = event_obj_ptr; + } + } + else + grab_obj_ptr = event_obj_ptr; + switch (event->type) { case GDK_BUTTON_PRESS: - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID, AWT_MOUSE_PRESSED, (jlong)event->button.time, state_to_awt_mods (event->button.state) | @@ -902,7 +939,8 @@ awt_event_handler (GdkEvent *event) /* if (--grab_counter == 0) gdk_pointer_ungrab (event->button.time); */ - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, + postMouseEventID, AWT_MOUSE_RELEASED, (jlong)event->button.time, state_to_awt_mods (event->button.state) | @@ -918,7 +956,8 @@ awt_event_handler (GdkEvent *event) && event->button.y >= 0 && event->button.x <= width && event->button.y <= height) - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, + postMouseEventID, AWT_MOUSE_CLICKED, (jlong)event->button.time, state_to_awt_mods (event->button.state) | @@ -930,7 +969,7 @@ awt_event_handler (GdkEvent *event) } break; case GDK_MOTION_NOTIFY: - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID, AWT_MOUSE_MOVED, (jlong)event->motion.time, state_to_awt_mods (event->motion.state), @@ -944,7 +983,8 @@ awt_event_handler (GdkEvent *event) | GDK_BUTTON4_MASK | GDK_BUTTON5_MASK)) { - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, + postMouseEventID, AWT_MOUSE_DRAGGED, (jlong)event->motion.time, state_to_awt_mods (event->motion.state), @@ -954,7 +994,7 @@ awt_event_handler (GdkEvent *event) } break; case GDK_ENTER_NOTIFY: - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID, AWT_MOUSE_ENTERED, (jlong)event->crossing.time, state_to_awt_mods (event->crossing.state), @@ -964,7 +1004,8 @@ awt_event_handler (GdkEvent *event) break; case GDK_LEAVE_NOTIFY: if (event->crossing.mode == GDK_CROSSING_NORMAL) - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, + postMouseEventID, AWT_MOUSE_EXITED, (jlong)event->crossing.time, state_to_awt_mods (event->crossing.state), @@ -1005,7 +1046,7 @@ awt_event_handler (GdkEvent *event) bottom = r.height - h - y; right = r.width - w - x; - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, + (*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr, postConfigureEventID, (jint) event->configure.x, (jint) event->configure.y, @@ -1021,7 +1062,7 @@ awt_event_handler (GdkEvent *event) break; case GDK_EXPOSE: { - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, + (*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr, postExposeEventID, (jint)event->expose.area.x, (jint)event->expose.area.y, @@ -1066,9 +1107,9 @@ awt_event_handler (GdkEvent *event) NULL, NULL, NULL, - (guchar **)&obj_ptr); + (guchar **)&grab_obj_ptr); - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postKeyEventID, (jint) AWT_KEY_PRESSED, (jlong) event->key.time, @@ -1078,11 +1119,11 @@ awt_event_handler (GdkEvent *event) keysym_to_awt_keylocation (event)); if (generates_key_typed_event (event, window->focus_widget)) - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postKeyEventID, (jint) AWT_KEY_TYPED, (jlong) event->key.time, - state_to_awt_mods (event->key.state), + state_to_awt_mods (event->key.state), VK_UNDEFINED, keyevent_to_awt_keychar (event), AWT_KEY_LOCATION_UNKNOWN); @@ -1121,9 +1162,9 @@ awt_event_handler (GdkEvent *event) NULL, NULL, NULL, - (guchar **)&obj_ptr); + (guchar **)&grab_obj_ptr); - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, + (*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postKeyEventID, (jint) AWT_KEY_RELEASED, (jlong) event->key.time, @@ -1135,7 +1176,7 @@ awt_event_handler (GdkEvent *event) } break; case GDK_FOCUS_CHANGE: - (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, + (*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr, postFocusEventID, (jint) (event->focus_change.in) ? AWT_FOCUS_GAINED : AWT_FOCUS_LOST, @@ -1144,7 +1185,7 @@ awt_event_handler (GdkEvent *event) default: break; } - g_free (obj_ptr); + g_free (event_obj_ptr); } gtk_main_do_event (event); diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c index d936a598734..79d7f7d55b2 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c @@ -63,6 +63,8 @@ JNIEnv *gdk_env; JavaVM *gdk_vm; #endif +GtkWindowGroup *global_gtk_window_group; + /* * Call gtk_init. It is very important that this happen before any other * gtk calls. @@ -179,6 +181,7 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz) postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer, "postTextEvent", "()V"); + global_gtk_window_group = gtk_window_group_new (); } /* diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index 0674b3ac36c..3cac71835b7 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -60,6 +60,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create window_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = GTK_WINDOW (window_widget); + // Avoid GTK runtime assertion failures. + width = (width < 1) ? 1 : width; + height = (height < 1) ? 1 : height; + gtk_window_set_default_size (window, width, height); /* We must set this window's size requisition. Otherwise when a @@ -80,6 +84,8 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create gtk_window_set_type_hint (window, type); + gtk_window_group_add_window (global_gtk_window_group, window); + vbox = gtk_vbox_new (0, 0); layout = gtk_layout_new (NULL, NULL); gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0); @@ -93,7 +99,7 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create NSA_SET_PTR (env, obj, window_widget); } -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisible +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible (JNIEnv *env, jobject obj, jboolean visible) { void *ptr; @@ -149,32 +155,6 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks gdk_threads_leave (); } -void -setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width, - jint height, jboolean visible) -{ - GtkWidget *layout, *vbox; - - gdk_threads_enter(); - gtk_window_set_policy (GTK_WINDOW (window), 1, 1, 0); - gtk_widget_set_usize (window, width, height); - - vbox = gtk_vbox_new (0, 0); - layout = gtk_layout_new (NULL, NULL); - gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_realize (layout); - connect_awt_hook (env, obj, 1, GTK_LAYOUT(layout)->bin_window); - gtk_widget_show (layout); - gtk_widget_show (vbox); - - gtk_widget_realize (window); - - connect_awt_hook (env, obj, 1, window->window); - set_visible (window, visible); - gdk_threads_leave (); -} - /* * Set a frame's title */ @@ -250,6 +230,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize { void *ptr = NSA_GET_PTR (env, obj); + // Avoid GTK runtime assertion failures. + width = (width < 1) ? 1 : width; + height = (height < 1) ? 1 : height; + gdk_threads_enter (); gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height); gdk_threads_leave (); @@ -261,6 +245,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds { void *ptr = NSA_GET_PTR (env, obj); + // Avoid GTK runtime assertion failures. + width = (width < 1) ? 1 : width; + height = (height < 1) ? 1 : height; + gdk_threads_enter (); gtk_window_move (GTK_WINDOW(ptr), x, y); /* Need to change the widget's request size. */ @@ -314,43 +302,3 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight return height; } - - -void -gdk_window_get_root_geometry (GdkWindow *window, - gint *x, - gint *y, - gint *width, - gint *height, - gint *border, - gint *depth) -{ - GdkWindow *private; - - g_return_if_fail (window != NULL); - - private = (GdkWindow*) window; - if (x) - *x = 0; - if (y) - *y = 0; - if (width) - *width = 0; - if (height) - *height = 0; - if (border) - *border = 0; - if (depth) - *depth = 0; - - if (GDK_WINDOW_DESTROYED (private)) - return; - - private = gdk_window_get_toplevel (private); - if (GDK_WINDOW_DESTROYED(private)) - return; - - gdk_window_get_geometry (private, x, y, width, height, depth); - -} - diff --git a/libjava/jni/gtk-peer/gtkpeer.h b/libjava/jni/gtk-peer/gtkpeer.h index b76de30a441..879f0b0b457 100644 --- a/libjava/jni/gtk-peer/gtkpeer.h +++ b/libjava/jni/gtk-peer/gtkpeer.h @@ -369,14 +369,7 @@ extern jclass gdkColor; extern jmethodID gdkColorID; extern JNIEnv *gdk_env; -void -gdk_window_get_root_geometry (GdkWindow *window, - gint *x, - gint *y, - gint *width, - gint *height, - gint *border, - gint *depth); +extern GtkWindowGroup *global_gtk_window_group; void awt_event_handler (GdkEvent *event); @@ -385,8 +378,6 @@ void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...); void set_visible (GtkWidget *widget, jboolean visible); void set_parent (GtkWidget *widget, GtkContainer *parent); GtkLayout *find_gtk_layout (GtkWidget *parent); -void setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width, - jint height, jboolean visible); jint keyevent_state_to_awt_mods (GdkEvent *event); |