This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] More AWT menu fixes
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 09 Sep 2004 16:06:30 -0400
- Subject: [gui][PATCH] More AWT menu fixes
Hi,
I committed this to java-gui-branch. It fixes some more menu problems.
Tom
2004-09-09 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkFramePeer.java (setMenuBar): Set menu
bar's width.
* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java (nativeSetHelpMenu):
Add FIXME comment.
(addHelpMenu): Elide call to nativeSetHelpMenu.
* java/awt/Menu.java (isTearOff): Rename to tearOff.
(menuSerializedDataVersion): Initialize to 1.
(separatorLabel): Mark transient.
(insert(MenuItem,int)): Implement.
* java/awt/MenuBar.java (setHelpMenu): Call getPeer to retrieve
peer.
(countMenus): Count help menu.
* java/awt/MenuComponent.java (nameExplicitlySet, newEventsOnly,
accessibleContext): Add fields.
* java/awt/MenuItem.java: Remove event mask FIXME.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
(gtkWidgetModifyFont): Only set font if label is non-NULL.
(setLabel): Don't treat "-" specially.
Index: gnu/java/awt/peer/gtk/GtkFramePeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java,v
retrieving revision 1.17.2.8
diff -u -r1.17.2.8 GtkFramePeer.java
--- gnu/java/awt/peer/gtk/GtkFramePeer.java 8 Sep 2004 02:09:09 -0000 1.17.2.8
+++ gnu/java/awt/peer/gtk/GtkFramePeer.java 9 Sep 2004 20:01:22 -0000
@@ -87,6 +87,9 @@
gtkFixedSetVisible (false);
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
setMenuBarPeer (menuBar);
+ int menuBarWidth =
+ awtComponent.getWidth () - insets.left - insets.right;
+ setMenuBarWidth (menuBar, menuBarWidth);
menuBarHeight = getMenuBarHeight ();
insets.top += menuBarHeight;
awtComponent.validate ();
@@ -98,8 +101,11 @@
gtkFixedSetVisible (false);
removeMenuBarPeer();
int oldHeight = menuBarHeight;
+ int menuBarWidth =
+ awtComponent.getWidth () - insets.left - insets.right;
menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
setMenuBarPeer (menuBar);
+ setMenuBarWidth (menuBar, menuBarWidth);
menuBarHeight = getMenuBarHeight ();
if (oldHeight != menuBarHeight)
{
Index: gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,v
retrieving revision 1.2.18.2
diff -u -r1.2.18.2 GtkMenuBarPeer.java
--- gnu/java/awt/peer/gtk/GtkMenuBarPeer.java 8 Sep 2004 02:09:09 -0000 1.2.18.2
+++ gnu/java/awt/peer/gtk/GtkMenuBarPeer.java 9 Sep 2004 20:01:22 -0000
@@ -66,12 +66,14 @@
mc.setFont (new Font ("Dialog", Font.PLAIN, 12));
}
+ // 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);
- /* In Gnome, help menus are no longer right flushed. */
public void addHelpMenu (Menu menu)
{
- nativeSetHelpMenu((MenuPeer) menu.getPeer());
+ // nativeSetHelpMenu((MenuPeer) menu.getPeer());
}
native public void delMenu (int index);
Index: java/awt/Menu.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Menu.java,v
retrieving revision 1.16.2.1
diff -u -r1.16.2.1 Menu.java
--- java/awt/Menu.java 26 Mar 2004 19:21:54 -0000 1.16.2.1
+++ java/awt/Menu.java 9 Sep 2004 20:01:22 -0000
@@ -72,17 +72,20 @@
/**
* @serial Flag indicating whether or not this menu is a tear off
*/
-private boolean isTearOff;
+private boolean tearOff;
/**
* @serial Indicates whether or not this is a help menu.
*/
private boolean isHelpMenu;
-// From the serialization spec. FIXME: what should it be?
-private int menuSerializedDataVersion;
+ /*
+ * @serial Unused in this implementation, but present in Sun's
+ * serialization spec. Value obtained via reflection.
+ */
+ private int menuSerializedDataVersion = 1;
-static final String separatorLabel = "-";
+static final transient String separatorLabel = "-";
/*************************************************************************/
@@ -134,7 +137,7 @@
{
super(label);
- this.isTearOff = isTearOff;
+ tearOff = isTearOff;
if (label.equals("Help"))
isHelpMenu = true;
@@ -158,7 +161,7 @@
public boolean
isTearOff()
{
- return(isTearOff);
+ return(tearOff);
}
/*************************************************************************/
@@ -251,8 +254,6 @@
* @param item The menu item to add.
* @param index The index of the menu item.
*
- * XXX: FIXME
- *
* @exception IllegalArgumentException If the index is less than zero.
* @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
*/
@@ -262,12 +263,26 @@
if (index < 0)
throw new IllegalArgumentException("Index is less than zero");
- items.insertElementAt(item, index);
+ MenuPeer peer = (MenuPeer) getPeer();
+ if (peer == null)
+ return;
- MenuPeer mp = (MenuPeer)getPeer();
- // FIXME: Need to add a peer method here.
-// if (mp != null)
-// mp.insertItem(item, index);
+ int count = getItemCount ();
+
+ if (index >= count)
+ peer.addItem (item);
+ else
+ {
+ for (int i = count - 1; i >= index; i--)
+ peer.delItem (i);
+
+ peer.addItem (item);
+
+ for (int i = index; i < count; i++)
+ peer.addItem ((MenuItem) items.elementAt (i));
+ }
+
+ items.insertElementAt(item, index);
}
/*************************************************************************/
@@ -305,8 +320,6 @@
*
* @param index The index at which to insert a separator bar.
*
- * XXX: FIXME
- *
* @exception IllegalArgumentException If the index is less than zero.
* @exception ArrayIndexOutOfBoundsException If the index is otherwise invalid.
*/
@@ -339,7 +352,7 @@
/**
* Removes the specifed item from the menu. If the specified component
- * does not exist, this method does nothing. // FIXME: Right?
+ * does not exist, this method does nothing.
*
* @param item The component to remove.
*/
@@ -415,7 +428,7 @@
public String
paramString()
{
- return (",isTearOff=" + isTearOff + ",isHelpMenu=" + isHelpMenu
+ return (",tearOff=" + tearOff + ",isHelpMenu=" + isHelpMenu
+ super.paramString());
}
Index: java/awt/MenuBar.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/MenuBar.java,v
retrieving revision 1.13.2.1
diff -u -r1.13.2.1 MenuBar.java
--- java/awt/MenuBar.java 24 Aug 2004 15:16:50 -0000 1.13.2.1
+++ java/awt/MenuBar.java 9 Sep 2004 20:01:22 -0000
@@ -134,11 +134,11 @@
menu.parent.remove (menu);
menu.parent = this;
+ MenuBarPeer peer = (MenuBarPeer) getPeer ();
if (peer != null)
{
menu.addNotify();
- MenuBarPeer mp = (MenuBarPeer) peer;
- mp.addHelpMenu (menu);
+ peer.addHelpMenu (menu);
}
}
@@ -233,8 +233,7 @@
public int
countMenus()
{
- // FIXME: How does the help menu fit in here?
- return menus.size ();
+ return menus.size () + (getHelpMenu () == null ? 0 : 1);
}
/*************************************************************************/
Index: java/awt/MenuComponent.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/MenuComponent.java,v
retrieving revision 1.13.8.1
diff -u -r1.13.8.1 MenuComponent.java
--- java/awt/MenuComponent.java 8 Sep 2004 02:09:11 -0000 1.13.8.1
+++ java/awt/MenuComponent.java 9 Sep 2004 20:01:22 -0000
@@ -40,6 +40,7 @@
import java.awt.peer.MenuComponentPeer;
import java.io.Serializable;
+import javax.accessibility.AccessibleContext;
// FIXME: Java 1.0 event model unimplemented
@@ -64,15 +65,28 @@
* Instance Variables
*/
- // FIXME: missing serialized fields `nameExplicitlySet',
- // `newEventsOnly', and `accessibleContext'.
-
// The font for this component
private Font font;
// The name of the component
private String name;
+ /*
+ * @serial true if the name has been explicitly set
+ */
+ private boolean nameExplicitlySet;
+
+ /*
+ * @serial Unused in this implementation but present in Sun's
+ * serialization spec.
+ */
+ private boolean newEventsOnly;
+
+ /*
+ * @serial a menu component's accessible context
+ */
+ private AccessibleContext accessibleContext;
+
// The parent of this component
transient MenuContainer parent;
Index: java/awt/MenuItem.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/MenuItem.java,v
retrieving revision 1.16.2.3
diff -u -r1.16.2.3 MenuItem.java
--- java/awt/MenuItem.java 24 Aug 2004 17:54:00 -0000 1.16.2.3
+++ java/awt/MenuItem.java 9 Sep 2004 20:01:22 -0000
@@ -54,8 +54,6 @@
implements Serializable
{
-// FIXME: The enabled event mask is not used at this time.
-
/*
* Static Variables
*/
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,v
retrieving revision 1.4.8.3
diff -u -r1.4.8.3 gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c 8 Sep 2004 02:09:12 -0000 1.4.8.3
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c 9 Sep 2004 20:01:22 -0000
@@ -54,8 +54,9 @@
str = (*env)->GetStringUTFChars (env, label, NULL);
gdk_threads_enter ();
-
- if (strcmp (str, "-") == 0) /* "-" signals that we need a separator */
+
+ /* "-" signals that we need a separator. */
+ if (strcmp (str, "-") == 0)
widget = gtk_menu_item_new ();
else
widget = gtk_menu_item_new_with_label (str);
@@ -102,18 +103,21 @@
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 (label)
+ {
+ 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_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);
+ if (style & AWT_STYLE_ITALIC)
+ pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
- gtk_widget_modify_font (GTK_WIDGET(label), font_desc);
+ gtk_widget_modify_font (GTK_WIDGET(label), font_desc);
- pango_font_description_free (font_desc);
+ pango_font_description_free (font_desc);
+ }
gdk_threads_leave();
@@ -137,6 +141,7 @@
{
void *ptr;
const char *str;
+ GtkAccelLabel *accel_label;
ptr = NSA_GET_PTR (env, obj);
@@ -144,15 +149,10 @@
gdk_threads_enter ();
- if (strcmp (str, "-") == 0) /* "-" signals that we need a separator */
- gtk_container_remove (GTK_CONTAINER (ptr), GTK_BIN (ptr)->child);
- else
- {
- GtkAccelLabel *accel_label = GTK_ACCEL_LABEL (GTK_BIN (ptr)->child);
+ accel_label = GTK_ACCEL_LABEL (GTK_BIN (ptr)->child);
- gtk_label_set_text (GTK_LABEL (accel_label), str);
- gtk_accel_label_refetch (accel_label);
- }
+ gtk_label_set_text (GTK_LABEL (accel_label), str);
+ gtk_accel_label_refetch (accel_label);
gdk_threads_leave ();
@@ -165,4 +165,3 @@
(*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
postMenuActionEventID);
}
-