OSDN Git Service

2004-01-26 Kim Ho <kho@redhat.com>
authorkho <kho@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Jan 2004 16:39:45 +0000 (16:39 +0000)
committerkho <kho@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 27 Jan 2004 16:39:45 +0000 (16:39 +0000)
        * gnu/java/awt/peer/gtk/GtkFramePeer.java (moveLayout): New
        method.
        (setMenuBar): Shift the Gtk layout up/down by the MenuBar
        height and let the Layout Managers readjust anything that
        needs to move.
        * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
        (moveLayout): New method. Shift everything in the Gtk
        layout in the Y direction by an offset.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76729 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 72c37c2..10467cd 100644 (file)
@@ -1,3 +1,14 @@
+2004-01-26  Kim Ho  <kho@redhat.com>
+
+       * gnu/java/awt/peer/gtk/GtkFramePeer.java (moveLayout): New
+       method.
+       (setMenuBar): Shift the Gtk layout up/down by the MenuBar
+       height and let the Layout Managers readjust anything that
+       needs to move.
+       * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
+       (moveLayout): New method. Shift everything in the Gtk
+       layout in the Y direction by an offset.
+
 2004-01-26  David Jee  <djee@redhat.com>
 
        * gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 3b69b02..0aa78fd 100644 (file)
@@ -59,24 +59,36 @@ public class GtkFramePeer extends GtkWindowPeer
 
   native void setMenuBarPeer (MenuBarPeer bar);
   native void removeMenuBarPeer (MenuBarPeer bar);
+  native void moveLayout (int offset);
 
   public void setMenuBar (MenuBar bar)
   {
-    if (bar == null && menuBar != null)
+    if (bar == null)
     {    
-      removeMenuBarPeer(menuBar); 
-      menuBar = null;
-      insets.top -= menuBarHeight;
-      menuBarHeight = 0;      
-      awtComponent.doLayout();
+      if (menuBar != null)
+      {
+        removeMenuBarPeer(menuBar); 
+        menuBar = null;
+        moveLayout(menuBarHeight);
+        insets.top -= menuBarHeight;
+        menuBarHeight = 0;      
+        awtComponent.doLayout();
+      }
     }
-    else if (bar != null)
+    else
     {
+      int oldHeight = 0;
       if (menuBar != null)
+      {
         removeMenuBarPeer(menuBar);
+        oldHeight = menuBarHeight;
+        insets.top -= menuBarHeight;
+      }
       menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
-      setMenuBarPeer(menuBar);      
+      setMenuBarPeer(menuBar);
       menuBarHeight = getMenuBarHeight (menuBar);
+      if (oldHeight != menuBarHeight)
+        moveLayout(oldHeight-menuBarHeight);
       insets.top += menuBarHeight;
       awtComponent.doLayout();
     }
index 610fc14..9703806 100644 (file)
@@ -433,6 +433,46 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
   return height;
 }
 
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkFramePeer_moveLayout
+  (JNIEnv *env, jobject obj, jint offset)
+{
+  void* ptr;
+  GList* children;
+  GtkBox* vbox;
+  GtkLayout* layout;
+  GtkWidget* widget;
+
+  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));  
+  children = gtk_container_get_children (GTK_CONTAINER (layout));
+  
+  while (children != NULL)
+  {
+    widget = children->data;
+    gtk_layout_move (layout, widget, widget->allocation.x,
+                     widget->allocation.y+offset);
+    children = children->next;
+  }
+  
+  gdk_threads_leave ();
+}
+  
+
 static void
 window_get_frame_extents (GtkWidget *window,
                           int *top, int *left, int *bottom, int *right)