+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
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();
}
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)