diff options
author | Kim Ho <kho@redhat.com> | 2004-01-27 21:03:44 +0000 |
---|---|---|
committer | Kim Ho <kho@redhat.com> | 2004-01-27 21:03:44 +0000 |
commit | 07609edfddd3304ed532a947219ea3ce41d770b6 (patch) | |
tree | e0cdfcb24f51725b8f07b3ad7ead85147fc5f394 /native | |
parent | e2f40606e903d99ebcb48e040bc521bf38cb75e2 (diff) | |
download | classpath-07609edfddd3304ed532a947219ea3ce41d770b6.tar.gz |
2004-01-16 Kim Ho <kho@redhat.com>
* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight): Added
MenuBarPeer parameter.
(removeMenuBarPeer): New native method.
(setMenuBar): Call remove if menu bar is null. Adjust insets
appropriately.
(postSizeAllocateEvent): New method. Called when menu bar size is
allocated. Adjust insets and redo layout.
(GtkFramePeer): Set menu bar during frame creation.
(postConfigureEvent): Adjust position and size to accomodate
menu bar.
* java/awt/Frame.java (setMenuBar): addNotify to create menu bar.
* java/awt/Menu.java (addSeparator): Use peer's addSeparator.
(addNotify): Create the peer if it doesn't exist and call addNotify
for the menu's items.
* java/awt/MenuBar.java (addNotify): Create this menu bar's menus.
* java/awt/MenuItem.java (addNotify): Create the peer if it
doesn't exist.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(removeMenuBarPeer): New method. Remove menu bar on the current
frame.
(setMenuBarPeer): Add the menu bar to the current frame and the
callback for size-allocate events on the menu bar.
(getMenuBarHeight): Add menu bar parameter.
(menubar_resize_cb): New callback method for postSizeAllocate events.
Diffstat (limited to 'native')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c | 84 |
1 files changed, 62 insertions, 22 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c index 826982ebf..9f00bd94c 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c @@ -72,6 +72,8 @@ static jint window_get_new_state (GtkWidget *widget); static gboolean window_property_changed_cb (GtkWidget *widget, GdkEventProperty *event, jobject peer); +static void menubar_resize_cb (GtkWidget *widget, GtkAllocation *alloc, + jobject peer); /* * Make a new window. @@ -371,45 +373,61 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds } JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer +Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer (JNIEnv *env, jobject obj, jobject menubar) { - void *wptr, *mptr; - GtkBox *box; + void *wptr; + GtkWidget *box; + GtkWidget *mptr; - if (!menubar) return; + wptr = NSA_GET_PTR (env, obj); + mptr = NSA_GET_PTR (env, menubar); + + gdk_threads_enter (); + box = GTK_BIN (wptr)->child; + gtk_container_remove (GTK_CONTAINER (box), GTK_WIDGET (mptr)); + + gdk_threads_leave(); +} + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer + (JNIEnv *env, jobject obj, jobject menubar) +{ + void *wptr; + GtkWidget *mptr; + GtkWidget *box; + jobject *gref = NSA_GET_GLOBAL_REF (env, obj); + wptr = NSA_GET_PTR (env, obj); mptr = NSA_GET_PTR (env, menubar); + + gdk_threads_enter (); - if (!mptr) return; /* this case should remove a menu */ + g_signal_connect (G_OBJECT (mptr), "size-allocate", + G_CALLBACK (menubar_resize_cb), *gref); + box = GTK_BIN (wptr)->child; + gtk_box_pack_start (GTK_BOX (box), mptr, 0, 0, 0); + + gtk_widget_show (mptr); - gdk_threads_enter (); - box = GTK_BOX (GTK_BIN (wptr)->child); - gtk_box_pack_start (box, GTK_WIDGET (mptr), 0, 0, 0); + gdk_threads_leave (); } JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight - (JNIEnv *env, jobject obj) + (JNIEnv *env, jobject obj, jobject menubar) { - void *ptr; - GList *children; - jint height = 0; - - ptr = NSA_GET_PTR (env, obj); + GtkWidget *ptr; + jint height; + + ptr = NSA_GET_PTR (env, menubar); gdk_threads_enter (); - children = gtk_container_children (GTK_CONTAINER (GTK_BIN (ptr)->child)); - if (g_list_length (children) == 2) - { - GtkWidget *menubar = GTK_WIDGET (children->data); - height = menubar->allocation.height; - - } + height = ptr->allocation.height; gdk_threads_leave (); - return height; } @@ -711,3 +729,25 @@ window_property_changed_cb (GtkWidget *widget __attribute__((unused)), return FALSE; } + +static void menubar_resize_cb (GtkWidget *widget, GtkAllocation *alloc, + jobject peer) +{ + static int id_set = 0; + static jmethodID postSizeAllocateEventID; + + if (!id_set) + { + jclass gtkframepeer = (*gdk_env)->FindClass (gdk_env, + "gnu/java/awt/peer/gtk/GtkFramePeer"); + postSizeAllocateEventID = (*gdk_env)->GetMethodID (gdk_env, + gtkframepeer, + "postSizeAllocateEvent", + "()V"); + id_set = 1; + } + gdk_threads_leave(); + (*gdk_env)->CallVoidMethod (gdk_env, peer, + postSizeAllocateEventID); + gdk_threads_enter(); +} |