From 5efa76401ef16e8708ed5c3944e0918f738065d9 Mon Sep 17 00:00:00 2001 From: Kim Ho Date: Thu, 29 Jan 2004 14:34:31 +0000 Subject: [PATCH] 2004-01-29 Kim Ho * 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 | 9 ++++++ .../gnu/java/awt/peer/gtk/GtkFramePeer.java | 5 +++ .../gnu_java_awt_peer_gtk_GtkWindowPeer.c | 31 +++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 8b1be41f7de..4992cc14a7a 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +2004-01-29 Kim Ho + + * 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 * gnu/java/lang/ClassHelper.java diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java index 83516d1b640..c542b63ad31 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java @@ -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); } } 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 fb82aed82f5..da1550fa8c7 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 @@ -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) -- 2.30.2