This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui] [PATCH] Fixes for PopupMenu
- From: David Jee <djee at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: 02 Apr 2004 10:58:22 -0500
- Subject: [gui] [PATCH] Fixes for PopupMenu
- Organization:
Hello,
I committed the following patch to the java-gui-branch. It fixes the
PopupMenu. PopupMenu now shows up and receives mouse and action events.
-David Jee
2004-04-02 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
(GtkMenuItemPeer): Only connect signals if this isn't a Menu peer.
* java/awt/Component.java
(add): Set the parent of the popup as this component.
* java/awt/PopupMenu.java
(addNotify): Create popup menu when peer is null.
(show): Call addNotify() if peer is null.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show): Set the button
argument for gtk_menu_popup() as zero. This causes the popup menu to
respond to any mouse button.
Index: gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,v
retrieving revision 1.3.16.1
diff -u -r1.3.16.1 GtkMenuItemPeer.java
--- gnu/java/awt/peer/gtk/GtkMenuItemPeer.java 26 Mar 2004 17:06:34 -0000 1.3.16.1
+++ gnu/java/awt/peer/gtk/GtkMenuItemPeer.java 2 Apr 2004 15:27:57 -0000
@@ -59,7 +59,7 @@
setEnabled (item.isEnabled ());
setParent (item);
- if (item.getParent() instanceof Menu)
+ if (item.getParent() instanceof Menu && ! (item instanceof Menu))
connectSignals();
}
Index: java/awt/Component.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Component.java,v
retrieving revision 1.37.2.6
diff -u -r1.37.2.6 Component.java
--- java/awt/Component.java 27 Feb 2004 19:43:40 -0000 1.37.2.6
+++ java/awt/Component.java 2 Apr 2004 15:28:00 -0000
@@ -3816,6 +3816,12 @@
if (popups == null)
popups = new Vector();
popups.add(popup);
+
+ if (popup.parent != null)
+ popup.parent.remove(popup);
+ popup.parent = this;
+ if (peer != null)
+ popup.addNotify();
}
/**
Index: java/awt/PopupMenu.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/PopupMenu.java,v
retrieving revision 1.7
diff -u -r1.7 PopupMenu.java
--- java/awt/PopupMenu.java 5 Jun 2003 19:58:39 -0000 1.7
+++ java/awt/PopupMenu.java 2 Apr 2004 15:28:00 -0000
@@ -105,7 +105,7 @@
public void
addNotify()
{
- if (peer != null)
+ if (peer == null)
peer = getToolkit ().createPopupMenu (this);
super.addNotify ();
}
@@ -123,6 +123,8 @@
public void
show(Component component, int x, int y)
{
+ if (getPeer() == null)
+ this.addNotify();
PopupMenuPeer pmp = (PopupMenuPeer)getPeer();
if (pmp != null)
{
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c,v
retrieving revision 1.2
diff -u -r1.2 gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c 8 Oct 2003 15:49:33 -0000 1.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c 2 Apr 2004 15:28:01 -0000
@@ -72,7 +72,7 @@
gdk_threads_enter ();
gtk_menu_popup (GTK_MENU (GTK_MENU_ITEM (ptr)->submenu),
- NULL, NULL, menu_pos, p, 3, time);
+ NULL, NULL, menu_pos, p, 0, time);
gdk_threads_leave ();
g_free (p);