]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
GtkDialogPeer.java (create()): Create a top-level GTK window.
authorThomas Fitzsimmons <fitzsim@redhat.com>
Fri, 19 Sep 2003 19:27:59 +0000 (19:27 +0000)
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>
Fri, 19 Sep 2003 19:27:59 +0000 (19:27 +0000)
2003-09-19  Thomas Fitzsimmons  <fitzsim@redhat.com>

* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create()): Create a
top-level GTK window.
(getArgs): Add "title" property.
* gnu/java/awt/peer/gtk/GtkWindowPeer.java (setResizable): Use
"allow_shrink" and "allow_grow" properties.
* java/awt/Dialog.java: Initialize resizable to true and change
comments accordingly.  Initialize visible to false in
constructors.
* java/awt/Frame.java (dispose): Remove method.
* java/awt/Window.java (ownedWindows): New field.
(Window(Window,GraphicsConfiguration)): Add a weak reference to
owner's ownedWindows vector.
(finalize): Remove method.
(hide): Hide owned windows.
(dispose): Dispose of owned windows.
(getOwnedWindows): Implement.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Remove
unused GtkArg code.
(set(String,boolean)): Clamp gboolean parameter to g_object_set
to TRUE or FALSE.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(create): Set window's size requisition.
(connectHooks): Fix indentation.
(setResizable): Remove function.
(static setBounds): Likewise.
(setBounds): Replace call to setBounds with GTK size requisition
and resize calls.

From-SVN: r71585

libjava/ChangeLog
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/Dialog.java
libjava/java/awt/Frame.java
libjava/java/awt/Window.java
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c

index dee9617a4f981204f39b3738d20142e1a2b90b20..7954a43ebc397fb7580bb3901580d3baa5bfcbdd 100644 (file)
@@ -1,3 +1,33 @@
+2003-09-19  Thomas Fitzsimmons  <fitzsim@redhat.com>
+
+       * gnu/java/awt/peer/gtk/GtkDialogPeer.java (create()): Create a
+       top-level GTK window.
+       (getArgs): Add "title" property.
+       * gnu/java/awt/peer/gtk/GtkWindowPeer.java (setResizable): Use
+       "allow_shrink" and "allow_grow" properties.
+       * java/awt/Dialog.java: Initialize resizable to true and change
+       comments accordingly.  Initialize visible to false in
+       constructors.
+       * java/awt/Frame.java (dispose): Remove method.
+       * java/awt/Window.java (ownedWindows): New field.
+       (Window(Window,GraphicsConfiguration)): Add a weak reference to
+       owner's ownedWindows vector.
+       (finalize): Remove method.
+       (hide): Hide owned windows.
+       (dispose): Dispose of owned windows.
+       (getOwnedWindows): Implement.
+       * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Remove
+       unused GtkArg code.
+       (set(String,boolean)): Clamp gboolean parameter to g_object_set
+       to TRUE or FALSE.
+       * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+       (create): Set window's size requisition.
+       (connectHooks): Fix indentation.
+       (setResizable): Remove function.
+       (static setBounds): Likewise.
+       (setBounds): Replace call to setBounds with GTK size requisition
+       and resize calls.
+
 2003-09-19  Mohan Embar  <gnustuff@thisiscool.com>
 
        * win32-threads.cc: (ensure_interrupt_event_initialized) New
index b5ea4b0158fc2d9397af30f2062bda08963713ee..8c0f5ee510f95134a0273a93d4ae798938266e8d 100644 (file)
@@ -53,7 +53,7 @@ public class GtkDialogPeer extends GtkWindowPeer
 
   void create ()
   {
-    create (GTK_WINDOW_POPUP,
+    create (GTK_WINDOW_TOPLEVEL,
            awtComponent.getWidth(),
            awtComponent.getHeight());
   }
@@ -64,6 +64,7 @@ public class GtkDialogPeer extends GtkWindowPeer
 
     Dialog dialog = (Dialog) component;
 
+    args.add ("title", dialog.getTitle ());
     args.add ("modal", dialog.isModal ());
     args.add ("allow_shrink", dialog.isResizable ());
     args.add ("allow_grow", dialog.isResizable ());
index 2f598cb84daed7e27b29c5dfc6b6a275950d8c63..043c08276db69b252b29337723f3af3c28416b7a 100644 (file)
@@ -84,6 +84,7 @@ public class GtkFramePeer extends GtkWindowPeer
     args.add ("allow_shrink", frame.isResizable ());
     args.add ("allow_grow", frame.isResizable ());
   }
+
   public void setIconImage (Image image) 
   {
       /* TODO: Waiting on Toolkit Image routines */
index 7451947b7db0fbaf61fa3178e121acefbf143223..08b2bf67e90d2fe62eb7ef80026fe7201053c205 100644 (file)
@@ -53,7 +53,9 @@ public class GtkWindowPeer extends GtkContainerPeer
 
   void create (int type)
   {
-    create (type, awtComponent.getWidth(), awtComponent.getHeight());
+    create (type,
+           awtComponent.getWidth(),
+           awtComponent.getHeight());
   }
 
   void create ()
@@ -75,7 +77,7 @@ public class GtkWindowPeer extends GtkContainerPeer
     args.add ("visible", component.isVisible ());
     args.add ("sensitive", component.isEnabled ());
   }
-  
+
   native public void toBack ();
   native public void toFront ();
 
@@ -86,7 +88,11 @@ public class GtkWindowPeer extends GtkContainerPeer
     set ("title", title);
   }
 
-  native public void setResizable (boolean r);
+  public void setResizable (boolean resizable)
+  {
+    set ("allow_shrink", resizable);
+    set ("allow_grow", resizable);
+  }
 
   protected void postConfigureEvent (int x, int y, int width, int height,
                                     int top, int left, int bottom, int right)
index aba409812aa4d6d299e897adadc8690af3603420..eee8361146a09aca19ca3a032af4c6703c0e3456 100644 (file)
@@ -70,7 +70,7 @@ private boolean modal;
 /**
   * @serial Indicates whether or not this dialog box is resizable.
   */
-private boolean resizable;
+private boolean resizable = true;
 
 /**
   * @serial The title string for this dialog box, which can be
@@ -91,7 +91,7 @@ private String title;
 
 /**
   * Initializes a new instance of <code>Dialog</code> with the specified
-  * parent, that is not resizable and not modal, and which has no title.
+  * parent, that is resizable and not modal, and which has no title.
   *
   * @param parent The parent frame of this dialog box.
   *
@@ -109,7 +109,7 @@ Dialog(Frame parent)
 
 /**
   * Initializes a new instance of <code>Dialog</code> with the specified
-  * parent and modality, that is not resizable and which has no title.
+  * parent and modality, that is resizable and which has no title.
   *
   * @param parent The parent frame of this dialog box.
   * @param modal <true> if this dialog box is modal, <code>false</code>
@@ -129,7 +129,7 @@ Dialog(Frame parent, boolean modal)
 
 /**
   * Initializes a new instance of <code>Dialog</code> with the specified
-  * parent, that is not resizable and not modal, and which has the specified
+  * parent, that is resizable and not modal, and which has the specified
   * title.
   *
   * @param parent The parent frame of this dialog box.
@@ -149,7 +149,7 @@ Dialog(Frame parent, String title)
 
 /**
   * Initializes a new instance of <code>Dialog</code> with the specified,
-  * parent, title, and modality, that is not resizable.
+  * parent, title, and modality, that is resizable.
   *
   * @param parent The parent frame of this dialog box.
   * @param title The title string for this dialog box.
@@ -168,7 +168,7 @@ Dialog(Frame parent, String title, boolean modal)
 /**
  * Initializes a new instance of <code>Dialog</code> with the specified,
  * parent, title, modality and <code>GraphicsConfiguration</code>,
- * that is not resizable.
+ * that is resizable.
  *
  * @param parent The parent frame of this dialog box.
  * @param title The title string for this dialog box.
@@ -189,14 +189,14 @@ Dialog (Frame parent, String title, boolean modal, GraphicsConfiguration gc)
 
   this.title = title;
   this.modal = modal;
-  resizable = false;
+  visible = false;
 
   setLayout(new BorderLayout());
 }
 
 /**
  * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, that is not resizable.
+ * parent, that is resizable.
  *
  * @exception IllegalArgumentException If parent is null. This exception is
  * always thrown when GraphicsEnvironment.isHeadless() returns true.
@@ -211,7 +211,7 @@ Dialog (Dialog owner)
 
 /**
  * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent and title, that is not resizable.
+ * parent and title, that is resizable.
  *
  * @exception IllegalArgumentException If parent is null. This exception is
  * always thrown when GraphicsEnvironment.isHeadless() returns true.
@@ -226,7 +226,7 @@ Dialog (Dialog owner, String title)
 
 /**
  * Initializes a new instance of <code>Dialog</code> with the specified,
- * parent, title and modality, that is not resizable.
+ * parent, title and modality, that is resizable.
  *
  * @exception IllegalArgumentException If parent is null. This exception is
  * always thrown when GraphicsEnvironment.isHeadless() returns true.
@@ -242,7 +242,7 @@ Dialog (Dialog owner, String title, boolean modal)
 /**
  * Initializes a new instance of <code>Dialog</code> with the specified,
  * parent, title, modality and <code>GraphicsConfiguration</code>,
- * that is not resizable.
+ * that is resizable.
  *
  * @exception IllegalArgumentException If parent is null, the
  * GraphicsConfiguration is not a screen device or
@@ -255,10 +255,10 @@ Dialog (Dialog parent, String title, boolean modal, GraphicsConfiguration gc)
 {
   super (parent, parent.getGraphicsConfiguration ());
   
-  this.modal = modal;
   this.title = title;
-  resizable = false;
-  
+  this.modal = modal;
+  visible = false;
+
   setLayout (new BorderLayout ());
 }
 
index 1df98322ce7c6bd93d222023f630ebca67965ba9..b6a34272449c38b74d0dd3003a4c49d0d8c636f9 100644 (file)
@@ -437,25 +437,6 @@ addNotify()
 
 /*************************************************************************/
 
-/**
-  * Destroys any resources associated with this frame.  This includes
-  * all components in the frame and all owned toplevel windows.
-  */
-public void
-dispose()
-{
-  Enumeration e = ownedWindows.elements();
-  while(e.hasMoreElements())
-    {
-      Window w = (Window)e.nextElement();
-      w.dispose();
-    }
-
-  super.dispose();
-}
-
-/*************************************************************************/
-
 /**
   * Returns a debugging string describing this window.
   *
@@ -472,8 +453,6 @@ getFrames()
 {
   //Frame[] array = new Frames[frames.size()];
   //return frames.toArray(array);
-    
-    // see finalize() comment
   String msg = "FIXME: can't be implemented without weak references";
   throw new UnsupportedOperationException(msg);
 }
index 2f625aa6d81451e9ccf299e23ed80f64c4a36837..9f102751230c94d059744303e725f50737480314 100644 (file)
@@ -43,9 +43,13 @@ import java.awt.event.WindowFocusListener;
 import java.awt.event.WindowListener;
 import java.awt.event.WindowStateListener;
 import java.awt.peer.WindowPeer;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+import java.util.Iterator;
 import java.util.EventListener;
 import java.util.Locale;
 import java.util.ResourceBundle;
+import java.util.Vector;
 import javax.accessibility.Accessible;
 import javax.accessibility.AccessibleContext;
 
@@ -69,6 +73,9 @@ public class Window extends Container implements Accessible
   /** @since 1.4 */
   private boolean focusableWindowState = true;
 
+  // A list of other top-level windows owned by this window.
+  private transient Vector ownedWindows = new Vector();
+
   private transient WindowListener windowListener;
   private transient WindowFocusListener windowFocusListener;
   private transient WindowStateListener windowStateListener;
@@ -139,11 +146,13 @@ public class Window extends Container implements Accessible
     if (owner == null)
       throw new IllegalArgumentException ("owner must not be null");
 
-    this.parent = owner;
-    
-    // FIXME: add to owner's "owned window" list
-    //owner.owned.add(this); // this should be a weak reference
-    
+    parent = owner;
+
+    synchronized (owner.ownedWindows)
+      {
+        owner.ownedWindows.add(new WeakReference(this));
+      }
+
     // FIXME: make this text visible in the window.
     SecurityManager s = System.getSecurityManager();
     if (s != null && ! s.checkTopLevelWindow(this))
@@ -170,18 +179,6 @@ public class Window extends Container implements Accessible
     return super.getGraphicsConfigurationImpl();
   }
 
-  /**
-   * Disposes of the input methods and context, and removes the WeakReference
-   * which formerly pointed to this Window from the parent's owned Window list.
-   *
-   * @exception Throwable The Exception raised by this method.
-   */
-  protected void finalize() throws Throwable
-  {
-    // FIXME: remove from owner's "owned window" list (Weak References)
-    super.finalize();
-  }
-
   /**
    * Creates the native peer for this window.
    */
@@ -227,7 +224,23 @@ public class Window extends Container implements Accessible
 
   public void hide()
   {
-    // FIXME: call hide() on any "owned" children here.
+    synchronized (ownedWindows)
+      {
+       Iterator e = ownedWindows.iterator();
+       while(e.hasNext())
+         {
+           Window w = (Window)(((Reference) e.next()).get());
+           if (w != null)
+             w.hide();
+           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();
   }
 
@@ -239,15 +252,26 @@ public class Window extends Container implements Accessible
   }
 
   /**
-   * Called to free any resource associated with this window.
+   * Destroys any resources associated with this window.  This includes
+   * all components in the window and all owned top-level windows.
    */
   public void dispose()
   {
     hide();
 
-    Window[] list = getOwnedWindows();
-    for (int i=0; i<list.length; i++)
-      list[i].dispose();
+    synchronized (ownedWindows)
+      {
+       Iterator e = ownedWindows.iterator();
+       while(e.hasNext())
+         {
+           Window w = (Window)(((Reference) e.next()).get());
+           if (w != null)
+             w.dispose();
+           else
+             // Remove null weak reference from ownedWindows.
+             e.remove();
+         }
+      }
 
     for (int i = 0; i < ncomponents; ++i)
       component[i].removeNotify();
@@ -340,9 +364,33 @@ public class Window extends Container implements Accessible
   /** @since 1.2 */
   public Window[] getOwnedWindows()
   {
-    // FIXME: return array containing all the windows this window currently 
-    // owns.
-    return new Window[0];
+    Window [] trimmedList;
+    synchronized (ownedWindows)
+      {
+       // Windows with non-null weak references in ownedWindows.
+       Window [] validList = new Window [ownedWindows.size()];
+
+       Iterator e = ownedWindows.iterator();
+       int numValid = 0;
+       while (e.hasNext())
+         {
+           Window w = (Window)(((Reference) e.next()).get());
+           if (w != null)
+             validList[numValid++] = w;
+           else
+             // Remove null weak reference from ownedWindows.
+             e.remove();
+         }
+
+       if (numValid != validList.length)
+         {
+           trimmedList = new Window [numValid];
+           System.arraycopy (validList, 0, trimmedList, 0, numValid);
+         }
+       else
+         trimmedList = validList;
+      }
+    return trimmedList;
   }
 
   /**
index 46cd64fca1bf4063e088620dfb4b9610aaafd506..ed94b7d753928ff929ccc2e2682997bb368ca77a 100644 (file)
@@ -494,15 +494,11 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_S
   const char *name;
   const char *value;
   void *ptr;
-  GtkArg arg;
 
   ptr = NSA_GET_PTR (env, obj);
   name = (*env)->GetStringUTFChars (env, jname, NULL);
   value = (*env)->GetStringUTFChars (env, jvalue, NULL);
 
-  arg.type = GTK_TYPE_STRING;
-  arg.name = (char *) name;
-  GTK_VALUE_STRING (arg) = (char *) value;
   gdk_threads_enter();
   g_object_set(ptr, name, value, NULL);
   gdk_threads_leave();
@@ -512,20 +508,20 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_S
 }
 
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Z
-  (JNIEnv *env, jobject obj, jstring jname, jboolean value)
+  (JNIEnv *env, jobject obj, jstring jname, jboolean jvalue)
 {
   const char *name;
+  gboolean value;
   void *ptr;
-  GtkArg arg;
 
   ptr = NSA_GET_PTR (env, obj);
-  name = (*env)->GetStringUTFChars (env, jname, NULL);
 
-  arg.type = GTK_TYPE_BOOL;
-  arg.name = (char *) name;
-  GTK_VALUE_BOOL (arg) = value;
+  name = (*env)->GetStringUTFChars (env, jname, NULL);
+  /* Apparently a jboolean can have a value greater than 1.  gboolean
+     variables may only contain the value TRUE or FALSE. */
+  value = jvalue ? TRUE : FALSE;
 
-  gdk_threads_enter();                          
+  gdk_threads_enter();
   g_object_set(ptr, name, value, NULL);
   gdk_threads_leave();
 
@@ -537,15 +533,10 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la
 {
   const char *name;
   void *ptr;
-  GtkArg arg;
 
   ptr = NSA_GET_PTR (env, obj);
   name = (*env)->GetStringUTFChars (env, jname, NULL);
 
-  arg.type = GTK_TYPE_INT;
-  arg.name = (char *) name;
-  GTK_VALUE_INT (arg) = value;
-  
   gdk_threads_enter();                          
   g_object_set(ptr, name, value, NULL);
   gdk_threads_leave();
@@ -558,15 +549,10 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la
 {
   const char *name;
   void *ptr;
-  GtkArg arg;
 
   ptr = NSA_GET_PTR (env, obj);
   name = (*env)->GetStringUTFChars (env, jname, NULL);
 
-  arg.type = GTK_TYPE_FLOAT;
-  arg.name = (char *) name;
-  GTK_VALUE_FLOAT (arg) = value;
-  
   gdk_threads_enter();                          
   g_object_set(ptr, name, value, NULL);
   gdk_threads_leave();
@@ -580,7 +566,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_O
 {
   const char *name;
   void *ptr1, *ptr2;
-  GtkArg arg;
 
   ptr1 = NSA_GET_PTR (env, obj1);
   ptr2 = NSA_GET_PTR (env, obj2);
@@ -598,10 +583,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_O
       return;
     }
 
-  arg.type = GTK_TYPE_OBJECT;
-  arg.name = (char *) name;
-  GTK_VALUE_OBJECT (arg) = GTK_OBJECT (ptr2);
-  
   gdk_threads_enter();                          
   g_object_set(ptr1, name, ptr2, NULL);
   gdk_threads_leave();
index 35f7a20f66ab6be3989505354ed3fa358fa67d2f..982a5cb605202509d515847555c12ff0851e3eed 100644 (file)
@@ -42,8 +42,6 @@ exception statement from your version. */
 #include <gdk/gdkprivate.h>
 #include <gdk/gdkx.h>
 
-static void setBounds (GtkWidget *, jint, jint, jint, jint);
-
 /*
  * Make a new window (any type)
  */
@@ -60,6 +58,13 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
 
   gtk_window_set_default_size (GTK_WINDOW(window), width, height);
 
+  /* We must set this window's size requisition.  Otherwise when a
+     resize is queued (when gtk_widget_queue_resize is called) the
+     window will snap to its default requisition of 0x0.  If we omit
+     this call, Frames and Dialogs shrink to degenerate 1x1 windows
+     when their resizable property changes. */
+  gtk_widget_set_size_request (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);
@@ -88,6 +93,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisible
     gtk_widget_hide (GTK_WIDGET (ptr));
 
   XFlush (GDK_DISPLAY ());
+
   gdk_threads_leave ();
 }
 
@@ -102,20 +108,20 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
 
   gdk_threads_enter ();
 
-   children = gtk_container_get_children(GTK_CONTAINER(ptr));
-   vbox = children->data;
+  children = gtk_container_get_children(GTK_CONTAINER(ptr));
+  vbox = children->data;
 
-   if(!GTK_IS_VBOX(vbox))
-     {
-       printf("*** this is not a vbox\n");
-     }
-   children = gtk_container_get_children(GTK_CONTAINER(vbox));
-   layout = children->data;
+  if(!GTK_IS_VBOX(vbox))
+    {
+      printf("*** this is not a vbox\n");
+    }
+  children = gtk_container_get_children(GTK_CONTAINER(vbox));
+  layout = children->data;
 
-   if(!GTK_IS_LAYOUT(layout))
-     {
+  if(!GTK_IS_LAYOUT(layout))
+    {
       printf("*** widget is not a layout ***");
-     }
+    }
 
   gtk_widget_realize (layout);
 
@@ -176,24 +182,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setTitle
   (*env)->ReleaseStringUTFChars (env, title, str);
 }
 
-/*
- * Set a window's resizing policy
- */
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setResizable
-  (JNIEnv *env, jobject obj, jboolean resize)
-{
-  void *ptr;
-  
-  ptr = NSA_GET_PTR (env, obj);
-  
-  gdk_threads_enter ();
-  gtk_window_set_policy (GTK_WINDOW (ptr), resize, resize, 0);
-  gdk_threads_leave ();
-}
-
-
 /*
  * Lower the z-level of a window. 
  */
@@ -230,12 +218,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env,
   gdk_threads_leave ();
 }
 
-static void
-setBounds (GtkWidget *widget, jint x, jint y, jint width, jint height)
-{
-  gtk_window_resize (GTK_WINDOW(widget), width, height);
-}
-
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBounds
   (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
 {
@@ -247,7 +229,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBounds
   gdk_threads_enter ();
 
   widget = GTK_WIDGET (ptr);
-  setBounds (widget, x, y, width, height);
+  gtk_widget_set_size_request (widget, width, height);
+  gtk_window_resize (GTK_WINDOW(widget), width, height);
 
   gdk_threads_leave ();
 }
@@ -306,7 +289,7 @@ gdk_window_get_root_geometry (GdkWindow *window,
                              gint      *depth)
 {
   GdkWindow *private;
-  
+
   g_return_if_fail (window != NULL);
   
   private = (GdkWindow*) window;