This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[PATCH] More List fixes
- From: Fernando Nasser <fnasser at redhat dot com>
- To: GCJ Patches <java-patches at gcc dot gnu dot org>
- Date: Fri, 12 Dec 2003 15:37:09 -0500
- Subject: [PATCH] More List fixes
- Organization: Red Hat , Inc. - Toronto
Properly implementing replaceItem fixes several annoyances I was seeing in our
AWT List when compared to Sun's one.
2003-12-12 Fernando Nasser <fnasser@redhat.com>
* java/awt/List.java gnu/java/awt/peer/gtk/GtkListPeer.java
(replaceItem): Proper implementation.
* java/awt/peer/ListPeer.java: Add new method to interface.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
(Java_gnu_java_awt_peer_gtk_GtkListPeer_replaceItem): New function.
Implementation of replaceItem.
Index: java/awt/List.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/List.java,v
retrieving revision 1.15
diff -c -p -r1.15 List.java
*** java/awt/List.java 2 Dec 2003 16:19:28 -0000 1.15
--- java/awt/List.java 12 Dec 2003 20:29:20 -0000
*************** clear()
*** 647,654 ****
public synchronized void
replaceItem(String item, int index) throws IllegalArgumentException
{
! remove(index);
! addItem(item, index);
}
/*************************************************************************/
--- 647,663 ----
public synchronized void
replaceItem(String item, int index) throws IllegalArgumentException
{
! items.removeElementAt (index);
! if ((index == -1) || (index >= items.size()))
! items.addElement(item);
! else
! items.insertElementAt(item, index);
!
! if (peer != null)
! {
! ListPeer l = (ListPeer) peer;
! l.replaceItem (item, index);
! }
}
/*************************************************************************/
Index: gnu/java/awt/peer/gtk/GtkListPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java,v
retrieving revision 1.5
diff -c -p -r1.5 GtkListPeer.java
*** gnu/java/awt/peer/gtk/GtkListPeer.java 11 Dec 2003 13:50:50 -0000 1.5
--- gnu/java/awt/peer/gtk/GtkListPeer.java 12 Dec 2003 20:29:20 -0000
*************** public class GtkListPeer extends GtkComp
*** 81,86 ****
--- 81,87 ----
}
public native void delItems (int start, int end);
+ public native void replaceItem(String item, int index);
public native void deselect (int index);
public Dimension getMinimumSize (int rows)
*************** public class GtkListPeer extends GtkComp
*** 135,142 ****
if (!me.isConsumed ()
&& (me.getModifiers () & MouseEvent.BUTTON1_MASK) != 0
&& me.getClickCount() == 2)
! postActionEvent (((List)awtComponent).getSelectedItem (),
! me.getModifiers ());
}
if (e.getID () == KeyEvent.KEY_PRESSED)
--- 136,149 ----
if (!me.isConsumed ()
&& (me.getModifiers () & MouseEvent.BUTTON1_MASK) != 0
&& me.getClickCount() == 2)
! {
! String selectedItem = ((List)awtComponent).getSelectedItem ();
!
! /* Enter only generates an Action event if something is selected */
! if (selectedItem != null)
! postActionEvent (((List)awtComponent).getSelectedItem (),
! me.getModifiers ());
! }
}
if (e.getID () == KeyEvent.KEY_PRESSED)
Index: java/awt/peer/ListPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/peer/ListPeer.java,v
retrieving revision 1.6
diff -c -p -r1.6 ListPeer.java
*** java/awt/peer/ListPeer.java 11 Oct 2003 18:11:03 -0000 1.6
--- java/awt/peer/ListPeer.java 12 Dec 2003 20:29:20 -0000
*************** public interface ListPeer extends Compon
*** 46,51 ****
--- 46,52 ----
void addItem(String item, int index);
void clear();
void delItems(int start_index, int end_index);
+ void replaceItem(String item, int index);
void deselect(int index);
int[] getSelectedIndexes();
void makeVisible(int index);
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,v
retrieving revision 1.6
diff -c -p -r1.6 gnu_java_awt_peer_gtk_GtkListPeer.c
*** jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 11 Dec 2003 13:50:51 -0000 1.6
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 12 Dec 2003 20:29:20 -0000
*************** Java_gnu_java_awt_peer_gtk_GtkListPeer_a
*** 168,173 ****
--- 168,192 ----
(*env)->ReleaseStringUTFChars (env, text, str);
}
+ JNIEXPORT void JNICALL
+ Java_gnu_java_awt_peer_gtk_GtkListPeer_replaceItem
+ (JNIEnv *env, jobject obj, jstring item, jint index)
+ {
+ void *ptr;
+ GtkCList *list;
+ const gchar *str;
+
+ ptr = NSA_GET_PTR (env, obj);
+ str = (*env)->GetStringUTFChars (env, item, NULL);
+
+ gdk_threads_enter ();
+
+ list = CLIST_FROM_SW (ptr);
+
+ gtk_clist_set_text (list, index, 0, str);
+
+ gdk_threads_leave ();
+ }
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems