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]

[PATCH] More List fixes


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

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