Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v retrieving revision 1.31 diff -u -r1.31 GtkButtonPeer.java --- gnu/java/awt/peer/gtk/GtkButtonPeer.java 22 Sep 2004 11:03:09 -0000 1.31 +++ gnu/java/awt/peer/gtk/GtkButtonPeer.java 22 Sep 2004 11:37:50 -0000 @@ -54,7 +54,7 @@ public native void connectSignals (); - native void gtkWidgetSetFont (String name, int style, int size); + native void gtkWidgetModifyFont (String name, int style, int size); native void gtkSetLabel (String label); native void gtkWidgetSetForeground (int red, int green, int blue); native void gtkActivate (); Index: gnu/java/awt/peer/gtk/GtkFramePeer.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkFramePeer.java,v retrieving revision 1.28 diff -u -r1.28 GtkFramePeer.java --- gnu/java/awt/peer/gtk/GtkFramePeer.java 22 Sep 2004 11:19:49 -0000 1.28 +++ gnu/java/awt/peer/gtk/GtkFramePeer.java 22 Sep 2004 11:37:50 -0000 @@ -58,16 +58,16 @@ private int menuBarHeight; private MenuBarPeer menuBar; native int getMenuBarHeight (MenuBarPeer bar); + native void setMenuBarWidth (MenuBarPeer bar, int width); + native void setMenuBarPeer (MenuBarPeer bar); + native void removeMenuBarPeer (); + native void gtkFixedSetVisible (boolean visible); int getMenuBarHeight () { return menuBar == null ? 0 : getMenuBarHeight (menuBar); } - native void setMenuBarPeer (MenuBarPeer bar); - native void removeMenuBarPeer (); - native void gtkFixedSetVisible (boolean visible); - public void setMenuBar (MenuBar bar) { if (bar == null && menuBar != null) @@ -112,6 +112,9 @@ public void setBounds (int x, int y, int width, int height) { + if (menuBar != null) + setMenuBarWidth (menuBar, width - insets.left - insets.right); + nativeSetBounds (x, y, width - insets.left - insets.right, height - insets.top - insets.bottom @@ -216,15 +219,19 @@ || frame_width != awtComponent.getWidth() || frame_height != awtComponent.getHeight()) { + if (frame_width != awtComponent.getWidth() && menuBar != null) + setMenuBarWidth (menuBar, width); + setBoundsCallback ((Window) awtComponent, frame_x, frame_y, frame_width, frame_height); } + awtComponent.validate(); } - + protected void postMouseEvent(int id, long when, int mods, int x, int y, int clickCount, boolean popupTrigger) { Index: gnu/java/awt/peer/gtk/GtkMenuBarPeer.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,v retrieving revision 1.5 diff -u -r1.5 GtkMenuBarPeer.java --- gnu/java/awt/peer/gtk/GtkMenuBarPeer.java 9 Jul 2003 10:25:34 -0000 1.5 +++ gnu/java/awt/peer/gtk/GtkMenuBarPeer.java 22 Sep 2004 11:37:50 -0000 @@ -38,8 +38,10 @@ package gnu.java.awt.peer.gtk; +import java.awt.Font; import java.awt.Menu; import java.awt.MenuBar; +import java.awt.MenuComponent; import java.awt.peer.MenuBarPeer; import java.awt.peer.MenuPeer; @@ -53,7 +55,15 @@ public GtkMenuBarPeer (MenuBar target) { super (target); - create (); + } + + void setFont () + { + MenuComponent mc = (MenuComponent) awtWidget; + Font f = mc.getFont (); + + if (f == null) + mc.setFont (new Font ("Dialog", Font.PLAIN, 12)); } /* In Gnome, help menus are no longer right flushed. */ Index: gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,v retrieving revision 1.7 diff -u -r1.7 GtkMenuComponentPeer.java --- gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java 22 Sep 2004 11:03:09 -0000 1.7 +++ gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java 22 Sep 2004 11:37:50 -0000 @@ -45,18 +45,20 @@ public class GtkMenuComponentPeer extends GtkGenericPeer implements MenuComponentPeer { + void create () + { + throw new RuntimeException (); + } + + void setFont () + { + } + public GtkMenuComponentPeer (Object awtWidget) { super (awtWidget); - MenuComponent mc = ((MenuComponent) awtWidget); - Font f = mc.getFont (); - if (f == null) - { - mc.setFont (new Font ("Dialog", Font.PLAIN, 12)); - gtkWidgetModifyFont("Dialog", Font.PLAIN, 12); - } - else - gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize()); + create (); + setFont (); } public native void dispose(); Index: gnu/java/awt/peer/gtk/GtkMenuItemPeer.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,v retrieving revision 1.10 diff -u -r1.10 GtkMenuItemPeer.java --- gnu/java/awt/peer/gtk/GtkMenuItemPeer.java 17 Apr 2004 23:24:46 -0000 1.10 +++ gnu/java/awt/peer/gtk/GtkMenuItemPeer.java 22 Sep 2004 11:37:50 -0000 @@ -38,9 +38,11 @@ package gnu.java.awt.peer.gtk; +import java.awt.Font; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; +import java.awt.MenuComponent; import java.awt.peer.MenuItemPeer; import java.awt.peer.MenuComponentPeer; import java.awt.peer.MenuBarPeer; @@ -50,12 +52,17 @@ implements MenuItemPeer { native void create (String label); - public native void connectSignals (); + native void connectSignals (); + native void gtkWidgetModifyFont (String name, int style, int size); + + void create () + { + create (((MenuItem) awtWidget).getLabel()); + } public GtkMenuItemPeer (MenuItem item) { super (item); - create (item.getLabel ()); setEnabled (item.isEnabled ()); setParent (item); @@ -63,6 +70,21 @@ connectSignals(); } + void setFont () + { + MenuComponent mc = ((MenuComponent) awtWidget); + Font f = mc.getFont (); + + if (f == null) + { + MenuComponent parent = (MenuComponent) mc.getParent (); + Font pf = parent.getFont (); + gtkWidgetModifyFont (pf.getName (), pf.getStyle (), pf.getSize ()); + } + else + gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize()); + } + void setParent (MenuItem item) { // add ourself differently, based on what type of parent we have Index: java/awt/CheckboxMenuItem.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/CheckboxMenuItem.java,v retrieving revision 1.12 diff -u -r1.12 CheckboxMenuItem.java --- java/awt/CheckboxMenuItem.java 3 Jun 2003 16:40:37 -0000 1.12 +++ java/awt/CheckboxMenuItem.java 22 Sep 2004 11:37:50 -0000 @@ -198,12 +198,9 @@ public synchronized void addNotify() { - if (peer != null) - { - // This choice of toolkit seems unsatisfying, but I'm not sure - // what else to do. - peer = getToolkit().createCheckboxMenuItem(this); - } + if (peer == null) + peer = getToolkit().createCheckboxMenuItem(this); + super.addNotify (); } Index: java/awt/Container.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/Container.java,v retrieving revision 1.40 diff -u -r1.40 Container.java --- java/awt/Container.java 22 Sep 2004 11:03:10 -0000 1.40 +++ java/awt/Container.java 22 Sep 2004 11:37:51 -0000 @@ -572,8 +572,8 @@ } /* children will call invalidate() when they are layed out. It - is therefore imporant that valid is not set to true - before after the children has been layed out. */ + is therefore important that valid is not set to true + until after the children have been layed out. */ valid = true; if (cPeer != null) Index: java/awt/MenuComponent.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/MenuComponent.java,v retrieving revision 1.16 diff -u -r1.16 MenuComponent.java --- java/awt/MenuComponent.java 11 Sep 2004 12:22:02 -0000 1.16 +++ java/awt/MenuComponent.java 22 Sep 2004 11:37:51 -0000 @@ -195,7 +195,13 @@ public Font getFont() { - return(font); + if (font != null) + return font; + + if (parent != null) + return parent.getFont (); + + return null; } /*************************************************************************/ Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c,v retrieving revision 1.7 diff -u -r1.7 gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c 30 Apr 2004 11:05:16 -0000 1.7 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c 22 Sep 2004 11:37:51 -0000 @@ -46,7 +46,6 @@ GtkWidget *widget; const char *str; - /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL); @@ -54,7 +53,6 @@ gdk_threads_enter (); widget = gtk_check_menu_item_new_with_label (str); - gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (widget), 1); gtk_widget_show (widget); gdk_threads_leave (); Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c,v retrieving revision 1.1 diff -u -r1.1 gnu_java_awt_peer_gtk_GtkFramePeer.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c 22 Sep 2004 11:03:10 -0000 1.1 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c 22 Sep 2004 11:37:51 -0000 @@ -113,6 +113,28 @@ } JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth + (JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar, jint width) +{ + GtkWidget *ptr; + GtkRequisition natural_req; + + ptr = NSA_GET_PTR (env, menubar); + + gdk_threads_enter (); + + /* Get the menubar's natural size request. */ + gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1); + gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req); + + /* Set the menubar's size request to width by natural_req.height. */ + gtk_widget_set_size_request (GTK_WIDGET (ptr), + width, natural_req.height); + + gdk_threads_leave (); +} + +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkFixedSetVisible (JNIEnv *env, jobject obj, jboolean visible) { Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,v retrieving revision 1.7 diff -u -r1.7 gnu_java_awt_peer_gtk_GtkMenuBarPeer.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c 17 Apr 2004 23:24:47 -0000 1.7 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c 22 Sep 2004 11:37:51 -0000 @@ -44,7 +44,6 @@ { GtkWidget *widget; - /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); gdk_threads_enter (); Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,v retrieving revision 1.8 diff -u -r1.8 gnu_java_awt_peer_gtk_GtkMenuItemPeer.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c 17 Apr 2004 23:24:47 -0000 1.8 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c 22 Sep 2004 11:37:51 -0000 @@ -49,7 +49,6 @@ GtkWidget *widget; const char *str; - /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL); @@ -86,6 +85,41 @@ gdk_threads_leave (); } +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_gtkWidgetModifyFont + (JNIEnv *env, jobject obj, jstring name, jint style, jint size) +{ + const char *font_name; + void *ptr; + GtkWidget *label; + PangoFontDescription *font_desc; + + ptr = NSA_GET_PTR (env, obj); + + font_name = (*env)->GetStringUTFChars (env, name, NULL); + + gdk_threads_enter(); + + label = gtk_bin_get_child (GTK_BIN (ptr)); + + font_desc = pango_font_description_from_string (font_name); + pango_font_description_set_size (font_desc, size * dpi_conversion_factor); + + if (style & AWT_STYLE_BOLD) + pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD); + + if (style & AWT_STYLE_ITALIC) + pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE); + + gtk_widget_modify_font (GTK_WIDGET(label), font_desc); + + pango_font_description_free (font_desc); + + gdk_threads_leave(); + + (*env)->ReleaseStringUTFChars (env, name, font_name); +} + JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setLabel (JNIEnv *env, jobject obj, jstring label) { Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,v retrieving revision 1.14 diff -u -r1.14 gnu_java_awt_peer_gtk_GtkMenuPeer.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c 31 Jul 2004 16:31:35 -0000 1.14 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c 22 Sep 2004 11:37:51 -0000 @@ -73,7 +73,6 @@ GtkWidget *menu_title, *menu, *toplevel; const char *str; - /* Create global reference and save it for future use */ NSA_SET_GLOBAL_REF (env, obj); str = (*env)->GetStringUTFChars (env, label, NULL);