summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2006-02-20 09:15:02 +0000
committerMark Wielaard <mark@klomp.org>2006-02-20 09:15:02 +0000
commitc77c2ec6551c2f2a71dc67ada0ca734f3326e38f (patch)
tree34f9604ce02ef6aa122505b841cd3a252802a510
parent95bd57d4bff6cd6ab6e16038e3cdfeacd5842ba9 (diff)
downloadclasspath-c77c2ec6551c2f2a71dc67ada0ca734f3326e38f.tar.gz
* java/awt/Menu.java (add(MenuItem)): Use item.getParent() to get
parent field. (insert): Likewise. (addNotify): Add the item after addNotifying it. * java/awt/MenuBar.java (setHelpMenu): Only call removeNotify() when there is a peer. Use getParent() and setParent() to manipulate parent field. (add(Menu)): Use getParent() and setParent() to manipulate parent field. Call addNotify() and addMenu() when there is a peer. (remove(int)): Call removeNotify() and delMenu() when there is a peer. (addNotify): Use getPeer()/setPeer(). Call addMenu() and addHelpMenu() when there is a peer. * gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): Document. (GtkMenuComponentPeer): Document. Take MenuComponent as argument. (setFont): Call setFont(Font). (setFont(Font)): Document. Only set font when not null. * gnu/java/awt/peer/gtk/GtkMenuItemPeer.java (create): Document. Made protected. (connectSignals): Likewise. (GtkMenuItemPeer): Document. Don't try to add item. Always call connectSignals(). * gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java (create): Make protected. (postMenuActionEvent): Document. * gnu/java/awt/peer/gtk/GtkMenuPeer.java (create): Document. Made protected. (addItem): Document. Made private. (addTearOff): Made private. (connectSignals): New protected overridden method. (GtkMenuPeer): Correctly cast setupAccelGroup() arguments. * gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (hasHelpMenu): New field. (create): Document. (addMenu): Made private, take GtkMenuPeer as argument and document. (GtkMenuBarPeer): Document. (nativeSetHelpMenu): Removed. (addHelpMenu): Implement. (delMenu): Document. (addMenu): Implement. * gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java (setParent): Removed. * include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: Regenerated. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c (Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu): Removed.
-rw-r--r--ChangeLog47
-rw-r--r--gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java9
-rw-r--r--gnu/java/awt/peer/gtk/GtkMenuBarPeer.java68
-rw-r--r--gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java33
-rw-r--r--gnu/java/awt/peer/gtk/GtkMenuItemPeer.java72
-rw-r--r--gnu/java/awt/peer/gtk/GtkMenuPeer.java32
-rw-r--r--gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java7
-rw-r--r--include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h1
-rw-r--r--java/awt/Menu.java21
-rw-r--r--java/awt/MenuBar.java63
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c28
11 files changed, 253 insertions, 128 deletions
diff --git a/ChangeLog b/ChangeLog
index 85183e580..c44b78824 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,49 @@
+2006-02-20 Mark Wielaard <mark@klomp.org>
+
+ * java/awt/Menu.java (add(MenuItem)): Use item.getParent() to get
+ parent field.
+ (insert): Likewise.
+ (addNotify): Add the item after addNotifying it.
+ * java/awt/MenuBar.java (setHelpMenu): Only call removeNotify() when
+ there is a peer. Use getParent() and setParent() to manipulate parent
+ field.
+ (add(Menu)): Use getParent() and setParent() to manipulate parent
+ field. Call addNotify() and addMenu() when there is a peer.
+ (remove(int)): Call removeNotify() and delMenu() when there is a peer.
+ (addNotify): Use getPeer()/setPeer(). Call addMenu() and addHelpMenu()
+ when there is a peer.
+ * gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java (create): Document.
+ (GtkMenuComponentPeer): Document. Take MenuComponent as argument.
+ (setFont): Call setFont(Font).
+ (setFont(Font)): Document. Only set font when not null.
+ * gnu/java/awt/peer/gtk/GtkMenuItemPeer.java (create): Document. Made
+ protected.
+ (connectSignals): Likewise.
+ (GtkMenuItemPeer): Document. Don't try to add item. Always call
+ connectSignals().
+ * gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java (create): Make
+ protected.
+ (postMenuActionEvent): Document.
+ * gnu/java/awt/peer/gtk/GtkMenuPeer.java (create): Document. Made
+ protected.
+ (addItem): Document. Made private.
+ (addTearOff): Made private.
+ (connectSignals): New protected overridden method.
+ (GtkMenuPeer): Correctly cast setupAccelGroup() arguments.
+ * gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (hasHelpMenu): New field.
+ (create): Document.
+ (addMenu): Made private, take GtkMenuPeer as argument and document.
+ (GtkMenuBarPeer): Document.
+ (nativeSetHelpMenu): Removed.
+ (addHelpMenu): Implement.
+ (delMenu): Document.
+ (addMenu): Implement.
+ * gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java (setParent): Removed.
+ * include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h: Regenerated.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+ (Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu):
+ Removed.
+
2006-02-20 Audrius Meskauskas <AudriusA@Bioinformatics.org>
* gnu/java/rmi/server/RMIObjectInputStream.java (resolveProxyClass):
@@ -684,7 +730,6 @@
(Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create):
gtk_plug_new() returns a GtkWindow.
->>>>>>> 1.6413
2006-02-15 David Gilbert <david.gilbert@object-refinery.com>
* javax/swing/SpinnerNumberModel.java
diff --git a/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java b/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
index 01a6e3102..be9247e8d 100644
--- a/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java
@@ -1,5 +1,5 @@
/* GtkCheckboxMenuItemPeer.java -- Implements CheckboxMenuItemPeer with GTK+
- Copyright (C) 1999, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,7 @@ import java.awt.peer.CheckboxMenuItemPeer;
public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
implements CheckboxMenuItemPeer
{
- native void create (String label);
+ protected native void create (String label);
public GtkCheckboxMenuItemPeer (CheckboxMenuItem menu)
{
@@ -56,6 +56,11 @@ public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
public native void setState(boolean t);
+ /**
+ * Called from the signal handler of the gtk widget. Posts a
+ * ItemEvent to indicate a state changed, then calls super to post
+ * an ActionEvent.
+ */
protected void postMenuActionEvent ()
{
CheckboxMenuItem item = (CheckboxMenuItem)awtWidget;
diff --git a/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java b/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
index 13debbf5c..d203b437f 100644
--- a/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
@@ -48,29 +48,69 @@ import java.awt.peer.MenuPeer;
public class GtkMenuBarPeer extends GtkMenuComponentPeer
implements MenuBarPeer
{
-
- protected native void create ();
- native void addMenu (MenuPeer menu);
-
- public GtkMenuBarPeer (MenuBar target)
+ /** Whether we already have an help menu set on this peer. */
+ private boolean hasHelpMenu;
+
+ /**
+ * Creates the gtk+ widget for this peer and puts it in the nsa
+ * table. Called from the (super class) constructor.
+ */
+ protected native void create();
+
+ /**
+ * Adds a new GtkMenuPeer to the end of the GtkMenuBarPeer.
+ */
+ private native void addMenu(GtkMenuPeer menu);
+
+ /**
+ * Creates a new GtkMenuBarPeer associated with the given MenuBar.
+ */
+ public GtkMenuBarPeer(MenuBar menubar)
{
- super (target);
+ super(menubar);
}
- // FIXME: remove this method or replace it with one that does
- // something useful.
- /* In Gnome, help menus are no longer right flushed. */
- native void nativeSetHelpMenu(MenuPeer menuPeer);
-
+ /**
+ * Adds a help menu to this MenuBar. Gnome styleguides say the help
+ * menu is just the last item in the menubar (they are NOT right
+ * justified).
+ */
public void addHelpMenu (Menu menu)
{
- // nativeSetHelpMenu((MenuPeer) menu.getPeer());
+ if (hasHelpMenu)
+ {
+ // Remove the (help) menu, which is after all the other items.
+ delMenu(((MenuBar) awtWidget).getMenuCount());
+ hasHelpMenu = false;
+ }
+
+ if (menu != null)
+ {
+ addMenu(menu);
+ hasHelpMenu = true;
+ }
}
+ /**
+ * Deletes the menu at (zero-based) index from this GtkMenuBar.
+ */
public native void delMenu(int index);
- public void addMenu (Menu m)
+ /**
+ * Adds the GtkMenuPeer associated with the Menu to this
+ * GtkMenuBarPeer. Makes sure that any help menus keep the last menu
+ * on the bar.
+ */
+ public void addMenu(Menu m)
{
- // FIXME: implement
+ // Make sure the help menu is the last one.
+ if (hasHelpMenu)
+ {
+ addHelpMenu(null);
+ addMenu((GtkMenuPeer) m.getPeer());
+ addHelpMenu(((MenuBar) awtWidget).getHelpMenu());
+ }
+ else
+ addMenu((GtkMenuPeer) m.getPeer());
}
}
diff --git a/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java b/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
index a2b993b60..55b95a18d 100644
--- a/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
@@ -46,6 +46,10 @@ import java.awt.peer.MenuComponentPeer;
public abstract class GtkMenuComponentPeer extends GtkGenericPeer
implements MenuComponentPeer
{
+ /**
+ * Creates the associated gtk+ widget and stores it in the nsa table
+ * for this peer. Called by the constructor.
+ */
protected abstract void create ();
/**
@@ -55,7 +59,7 @@ public abstract class GtkMenuComponentPeer extends GtkGenericPeer
private void setFont()
{
MenuComponent mc = ((MenuComponent) awtWidget);
- Font f = mc.getFont ();
+ Font f = mc.getFont();
if (f == null)
{
@@ -64,17 +68,21 @@ public abstract class GtkMenuComponentPeer extends GtkGenericPeer
if (parent instanceof MenuComponent)
f = parent.getFont ();
}
- if (f != null)
- {
- gtkWidgetModifyFont(f);
- }
+
+ setFont(f);
}
- public GtkMenuComponentPeer (Object awtWidget)
+ /**
+ * Will call the abstract <code>create()</code> that needs to be
+ * overridden by subclasses, to create the MenuComponent. It will
+ * then correctly setup the font for the component based on the
+ * component and/or its containing parent component.
+ */
+ public GtkMenuComponentPeer(MenuComponent component)
{
- super (awtWidget);
- create ();
- setFont ();
+ super(component);
+ create();
+ setFont();
}
/**
@@ -84,8 +92,13 @@ public abstract class GtkMenuComponentPeer extends GtkGenericPeer
*/
public native void dispose();
+ /**
+ * Sets the font for this particular MenuComponent only (not any
+ * containing items, if any).
+ */
public void setFont(Font font)
{
- gtkWidgetModifyFont(font);
+ if (font != null)
+ gtkWidgetModifyFont(font);
}
}
diff --git a/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java b/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
index 3d6738ba0..251bab233 100644
--- a/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
@@ -49,59 +49,71 @@ import java.awt.peer.MenuPeer;
public class GtkMenuItemPeer extends GtkMenuComponentPeer
implements MenuItemPeer
{
- native void create (String label);
- native void connectSignals ();
+ /**
+ * Creates the associated gtk+ widget and stores it in the nsa table
+ * for this peer. Called by the create() method with the label name
+ * of the associated MenuItem. Needs to be overridden my subclasses
+ * that want to create a different gtk+ widget.
+ */
+ protected native void create (String label);
+
+ /**
+ * Called from constructor to enable signals from an item. If a
+ * subclass needs different (or no) signals connected this method
+ * should be overridden.
+ */
+ protected native void connectSignals ();
/**
* Overridden to set font on menu item label.
*/
protected native void gtkWidgetModifyFont(String name, int style, int size);
+ /**
+ * Creates the associated gtk+ widget and stores it in the nsa table
+ * for this peer. Called by the (super class) constructor.
+ * Overridden to get the label if the assiociated MenuItem and to
+ * call create(String).
+ */
protected void create()
{
create (((MenuItem) awtWidget).getLabel());
}
- public GtkMenuItemPeer (MenuItem item)
- {
- super (item);
- setEnabled (item.isEnabled ());
- setParent (item);
-
- if (item.getParent() instanceof Menu && ! (item instanceof Menu))
- connectSignals();
- }
-
- void setParent (MenuItem item)
+ /**
+ * Creates a new GtkMenuItemPeer associated with the given MenuItem.
+ * It will call create(), setFont(), setEnabled() and
+ * connectSignals() in that order.
+ */
+ public GtkMenuItemPeer(MenuItem item)
{
- // add ourself differently, based on what type of parent we have
- // yes, the typecasting here is nasty.
- Object parent = item.getParent ();
- if (parent instanceof MenuBar)
- {
- ((GtkMenuBarPeer)((MenuBar)parent).getPeer ()).addMenu ((MenuPeer) this);
- }
- else // parent instanceof Menu
- {
- ((GtkMenuPeer)((Menu)parent).getPeer ()).addItem (this,
- item.getShortcut ());
- }
+ super(item);
+ setEnabled (item.isEnabled());
+ connectSignals();
}
- public void disable ()
+ /**
+ * Calls setEnabled(false).
+ */
+ public void disable()
{
- setEnabled (false);
+ setEnabled(false);
}
- public void enable ()
+ /**
+ * Calls setEnabled(true).
+ */
+ public void enable()
{
- setEnabled (true);
+ setEnabled(true);
}
public native void setEnabled(boolean b);
-
public native void setLabel(String label);
+ /**
+ * Callback setup through connectSignals().
+ */
protected void postMenuActionEvent ()
{
postActionEvent (((MenuItem)awtWidget).getActionCommand (), 0);
diff --git a/gnu/java/awt/peer/gtk/GtkMenuPeer.java b/gnu/java/awt/peer/gtk/GtkMenuPeer.java
index fabcf1f09..1d581c1a1 100644
--- a/gnu/java/awt/peer/gtk/GtkMenuPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkMenuPeer.java
@@ -1,5 +1,5 @@
/* GtkMenuPeer.java -- Implements MenuPeer with GTK+
- Copyright (C) 1999, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,10 +49,28 @@ import java.awt.peer.MenuPeer;
public class GtkMenuPeer extends GtkMenuItemPeer
implements MenuPeer
{
- native void create (String label);
- native void addItem (MenuItemPeer item, int key, boolean shiftModifier);
+ /**
+ * Creates the associated gtk+ widget and stores it in the nsa table
+ * for this peer. Called by the create() method with the label name
+ * of the associated MenuItem. Overridden to greate a Menu widget.
+ */
+ protected native void create (String label);
+
+ private native void addItem(MenuItemPeer item, int key,
+ boolean shiftModifier);
+
+ /** XXX - Document this and the override in GtkPopupMenuPeer. */
native void setupAccelGroup (GtkGenericPeer container);
- native void addTearOff ();
+
+ private native void addTearOff ();
+
+ /**
+ * Overridden to not connect any signals.
+ */
+ protected void connectSignals()
+ {
+ // No signals to connect.
+ }
public GtkMenuPeer (Menu menu)
{
@@ -63,11 +81,11 @@ public class GtkMenuPeer extends GtkMenuItemPeer
MenuContainer parent = menu.getParent ();
if (parent instanceof Menu)
- setupAccelGroup ((GtkGenericPeer)((Menu)parent).getPeer ());
+ setupAccelGroup ((GtkMenuPeer)((Menu)parent).getPeer ());
else if (parent instanceof Component)
- setupAccelGroup ((GtkGenericPeer)((Component)parent).getPeer ());
+ setupAccelGroup ((GtkComponentPeer)((Component)parent).getPeer ());
else
- setupAccelGroup (null);
+ setupAccelGroup (null); // XXX, should we warn about unknown parent?
}
public void addItem (MenuItem item)
diff --git a/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java b/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
index d14c16dd7..525a910bc 100644
--- a/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java
@@ -1,5 +1,5 @@
/* GtkPopupMenuPeer.java -- Implements PopupMenuPeer with GTK+
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -55,11 +55,6 @@ public class GtkPopupMenuPeer extends GtkMenuPeer
native void setupAccelGroup (GtkGenericPeer container);
- void setParent (MenuItem item)
- {
- // we don't need to "add" ourselves to our parent
- }
-
native void show (int x, int y, long time);
public void show (Component origin, int x, int y)
{
diff --git a/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h b/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
index 6d855be66..61a4641e6 100644
--- a/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
+++ b/include/gnu_java_awt_peer_gtk_GtkMenuBarPeer.h
@@ -12,7 +12,6 @@ extern "C"
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu (JNIEnv *env, jobject, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu (JNIEnv *env, jobject, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu (JNIEnv *env, jobject, jint);
#ifdef __cplusplus
diff --git a/java/awt/Menu.java b/java/awt/Menu.java
index 0b307f967..6daec72cf 100644
--- a/java/awt/Menu.java
+++ b/java/awt/Menu.java
@@ -220,8 +220,9 @@ getItem(int index)
public MenuItem
add(MenuItem item)
{
- if (item.parent != null)
- item.parent.remove(item);
+ MenuContainer parent = item.getParent();
+ if (parent != null)
+ parent.remove(item);
items.addElement(item);
item.setParent(this);
@@ -272,8 +273,9 @@ insert(MenuItem item, int index)
add(item);
else
{
- if (item.parent != null)
- item.parent.remove(item);
+ MenuContainer parent = item.getParent();
+ if (parent != null)
+ parent.remove(item);
items.insertElementAt(item, index);
item.setParent(this);
@@ -403,14 +405,21 @@ removeAll()
public void
addNotify()
{
+ MenuPeer peer = (MenuPeer) getPeer();
if (peer == null)
- peer = getToolkit().createMenu(this);
+ {
+ peer = getToolkit().createMenu(this);
+ setPeer(peer);
+ }
+
Enumeration e = items.elements();
while (e.hasMoreElements())
{
MenuItem mi = (MenuItem)e.nextElement();
mi.addNotify();
- }
+ peer.addItem(mi);
+ }
+
super.addNotify ();
}
diff --git a/java/awt/MenuBar.java b/java/awt/MenuBar.java
index 2c83389c7..3c6b91564 100644
--- a/java/awt/MenuBar.java
+++ b/java/awt/MenuBar.java
@@ -101,18 +101,21 @@ public class MenuBar extends MenuComponent
*/
public synchronized void setHelpMenu(Menu menu)
{
+ MenuBarPeer myPeer = (MenuBarPeer) getPeer ();
+
if (helpMenu != null)
{
- helpMenu.removeNotify();
- helpMenu.parent = null;
+ if (myPeer != null)
+ helpMenu.removeNotify();
+ helpMenu.setParent(null);
}
helpMenu = menu;
- if (menu.parent != null)
- menu.parent.remove(menu);
- menu.parent = this;
+ MenuContainer parent = menu.getParent();
+ if (parent != null)
+ parent.remove(menu);
+ menu.setParent(this);
- MenuBarPeer myPeer = (MenuBarPeer) getPeer ();
if (myPeer != null)
{
menu.addNotify();
@@ -131,15 +134,20 @@ public class MenuBar extends MenuComponent
*/
public synchronized Menu add(Menu menu)
{
- if (menu.parent != null)
- menu.parent.remove(menu);
+ MenuBarPeer myPeer = (MenuBarPeer) getPeer ();
- menu.parent = this;
- menus.addElement(menu);
+ MenuContainer parent = menu.getParent();
+ if (parent != null)
+ parent.remove(menu);
- if (peer != null)
- menu.addNotify();
+ menus.addElement(menu);
+ menu.setParent(this);
+ if (myPeer != null)
+ {
+ menu.addNotify();
+ myPeer.addMenu(menu);
+ }
return menu;
}
@@ -150,16 +158,16 @@ public class MenuBar extends MenuComponent
*/
public synchronized void remove(int index)
{
- Menu m = (Menu) menus.get(index);
- menus.remove(index);
- m.removeNotify();
- m.parent = null;
+ Menu m = (Menu) menus.remove(index);
+ MenuBarPeer mp = (MenuBarPeer) getPeer();
- if (peer != null)
- {
- MenuBarPeer mp = (MenuBarPeer) peer;
- mp.delMenu(index);
- }
+ if (mp != null)
+ m.removeNotify();
+
+ m.setParent(null);
+
+ if (mp != null)
+ mp.delMenu(index);
}
/**
@@ -218,18 +226,25 @@ public class MenuBar extends MenuComponent
*/
public void addNotify()
{
- if (getPeer() == null)
- setPeer(getToolkit().createMenuBar(this));
+ MenuBarPeer peer = (MenuBarPeer) getPeer();
+ if (peer == null)
+ {
+ peer = getToolkit().createMenuBar(this);
+ setPeer(peer);
+ }
+
Enumeration e = menus.elements();
while (e.hasMoreElements())
{
Menu mi = (Menu)e.nextElement();
mi.addNotify();
+ peer.addMenu(mi);
}
+
if (helpMenu != null)
{
helpMenu.addNotify();
- ((MenuBarPeer) peer).addHelpMenu(helpMenu);
+ peer.addHelpMenu(helpMenu);
}
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
index a5c0074c0..1a21126a8 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
@@ -1,5 +1,5 @@
/* gtkmenubarpeer.c -- Native implementation of GtkMenuBarPeer
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -74,32 +74,6 @@ Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_nativeSetHelpMenu
- (JNIEnv *env, jobject obj, jobject menupeer)
-{
- static void *helpmenu;
- void *mbar, *menu;
- GList *list;
-
- gdk_threads_enter ();
-
- mbar = NSA_GET_PTR (env, obj);
- menu = NSA_GET_PTR (env, menupeer);
-
- if (helpmenu != NULL)
- {
- list = gtk_container_get_children (GTK_CONTAINER (mbar));
- while (list != NULL && list->data != helpmenu)
- list = list->next;
- if (list != NULL && list->data == helpmenu)
- gtk_container_remove (GTK_CONTAINER (mbar), GTK_WIDGET (list->data));
- }
- helpmenu = menu;
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_delMenu
(JNIEnv *env, jobject obj, jint index)
{