GtkButtonPeer.java (handleEvent): Remove modality check.
authorThomas Fitzsimmons <fitzsim@redhat.com>
Thu, 9 Oct 2003 00:26:29 +0000 (00:26 +0000)
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>
Thu, 9 Oct 2003 00:26:29 +0000 (00:26 +0000)
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.

From-SVN: r72252

libjava/ChangeLog
libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java
libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java
libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java
libjava/java/awt/Window.java
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
libjava/jni/gtk-peer/gtkpeer.h

index 322cbf28e9224d150c247c2a5f39c0530e3bfd99..54d8dbc050aa4f0075320d3cf01ccc87193e4dc0 100644 (file)
@@ -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.
index 1b057507b02d615c0db78dadd547af0c558a5b75..0801f9c6ec0ec4b1eed9919bc16bb78f617901d9 100644 (file)
@@ -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 ()
index e7b047ea2e2b9d3b320ca6f414b707e954beccf6..551d05ded8fd2d01e2440e8915d608306733aead 100644 (file)
@@ -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 ()
index b44a02d13dbe2a7096c7b51278bd7b3e360b4cbd..ce5aa71e573bcd3fcee9b604875ebb1d7cb932b7 100644 (file)
@@ -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 ()
index be615042524d4c6819ce9aa54fecea57fbe6f563..8875913d4fce598c32f41ecf0899d3f6e3d253c4 100644 (file)
@@ -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);
+  }
 }
index 3554bf5e581a610650fab367a8b95e65d9ab0e3d..ad4aec7064957987ee38c48dfba809e827c483c6 100644 (file)
@@ -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();
   }
 
index b6a172d7ab885bdb64950cdd9b5218962ccf2f6f..563492a3627522867b86ccee252c302e2a43ca9a 100644 (file)
@@ -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);
index d936a598734cc1600e064d27f66901c77412857b..79d7f7d55b2a11dbbeae16a46be6ae6c193d4810 100644 (file)
@@ -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 ();
 }
 
 /*
index 0674b3ac36c784f02c2b4f228a8ccf4ac3d4e312..3cac71835b75f154971f38cb86c436566bd87b75 100644 (file)
@@ -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);
-      
-}
-
index b76de30a4417f0cf2bdfd0436acf13b8409dbb28..879f0b0b457777ce5b008ef547ac2410e8421fe4 100644 (file)
@@ -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);