This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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);
 }
-

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]