2004-01-29 Kim Ho <kho@redhat.com>
authorKim Ho <kho@redhat.com>
Thu, 29 Jan 2004 14:34:31 +0000 (14:34 +0000)
committerKim Ho <kho@gcc.gnu.org>
Thu, 29 Jan 2004 14:34:31 +0000 (14:34 +0000)
        * gnu/java/awt/peer/gtk/GtkFramePeer.java
        (gtkLayoutSetVisible): New method
        (setMenuBar): Hide layout before setting MenuBar
        and reshow it after.
        * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
        (gtkLayoutSetVisible): Hide or show the Gtk Layout.

From-SVN: r76861

libjava/ChangeLog
libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c

index 8b1be41f7de1d579aca4b5309f0c6d8cc87e694a..4992cc14a7ab039e85fcfc90dc5346fde013441b 100644 (file)
@@ -1,3 +1,12 @@
+2004-01-29  Kim Ho  <kho@redhat.com>
+
+       * gnu/java/awt/peer/gtk/GtkFramePeer.java
+       (gtkLayoutSetVisible): New method
+       (setMenuBar): Hide layout before setting MenuBar
+       and reshow it after.
+       * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+       (gtkLayoutSetVisible): Hide or show the Gtk Layout.
+
 2004-01-28  Michael Koch  <konqueror@gmx.de>
 
        * gnu/java/lang/ClassHelper.java
index 83516d1b640813e8aba781cab6fe45acc6f65894..c542b63ad315e85f305efa0116e1ce9fbca55b25 100644 (file)
@@ -60,6 +60,7 @@ public class GtkFramePeer extends GtkWindowPeer
   native void setMenuBarPeer (MenuBarPeer bar);
   native void removeMenuBarPeer ();
   native void moveLayout (int offset);
+  native void gtkLayoutSetVisible (boolean vis);
 
   public void setMenuBar (MenuBar bar)
   {
@@ -67,16 +68,19 @@ public class GtkFramePeer extends GtkWindowPeer
     {    
       if (menuBar != null)
       {
+        gtkLayoutSetVisible(false);
         removeMenuBarPeer(); 
         menuBar = null;
         moveLayout(menuBarHeight);
         insets.top -= menuBarHeight;
         menuBarHeight = 0;      
         awtComponent.doLayout();
+        gtkLayoutSetVisible(true);
       }
     }
     else
     {
+      gtkLayoutSetVisible(false);
       int oldHeight = 0;
       if (menuBar != null)
       {
@@ -91,6 +95,7 @@ public class GtkFramePeer extends GtkWindowPeer
         moveLayout(oldHeight - menuBarHeight);
       insets.top += menuBarHeight;
       awtComponent.doLayout();
+      gtkLayoutSetVisible(true);
     }
   }
 
index fb82aed82f560df72a4c37827780f0325ca24b01..da1550fa8c71451213c9465d4563eb3ca92bf7fa 100644 (file)
@@ -491,7 +491,38 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_moveLayout
   gdk_threads_leave ();
 }
   
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible
+  (JNIEnv *env, jobject obj, jboolean vis)
+{
+  void* ptr;
+  GList* children;
+  GtkBox* vbox;
+  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));  
+  
+  if (vis)
+    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)