Fix for Selection problem in Text Components

Olga Rodimina rodimina@redhat.com
Mon Dec 1 17:31:00 GMT 2003


Hi,

This patch fixes selection problem in Text Components.

With this patch, getSelectedText() will return "" if the text is not
selected, instead of throwing IndexOutOfBoundsException.


Olga.
-------------- next part --------------
? .snprj
? libjava.proj
? patch
? jni/patch
Index: ChangeLog
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/ChangeLog,v
retrieving revision 1.2384
diff -c -p -c -p -r1.2384 ChangeLog
*** ChangeLog	1 Dec 2003 14:32:24 -0000	1.2384
--- ChangeLog	1 Dec 2003 17:17:25 -0000
***************
*** 1,3 ****
--- 1,13 ----
+ 2003-12-01 Olga Rodimina <rodimina@redhat.com>
+ 
+ 	* java/awt/TextComponent.java:
+ 	(getSelectionStart): Updated javadocs.
+ 	(getSelectionEnd): Ditto.
+ 	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer:
+ 	(getSelectionStart): Changed to return caret position if no
+ 	text is selected
+ 	(getSelectionEnd): Ditto.
+ 
  2003-12-01  Michael Koch  <konqueror@gmx.de>
  
  	* gnu/java/net/natPlainSocketImplPosix.cc
Index: java/awt/TextComponent.java
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/java/awt/TextComponent.java,v
retrieving revision 1.9
diff -c -p -c -p -r1.9 TextComponent.java
*** java/awt/TextComponent.java	15 Feb 2003 09:21:55 -0000	1.9
--- java/awt/TextComponent.java	1 Dec 2003 17:17:26 -0000
*************** getSelectedText()
*** 163,169 ****
  
  /**
    * Returns the starting position of the selected text region.
!   * // FIXME: What is returned if there is no selected text?
    *
    * @return The starting position of the selected text region.
    */
--- 163,169 ----
  
  /**
    * Returns the starting position of the selected text region.
!   * If the text is not selected then caret position is returned. 
    *
    * @return The starting position of the selected text region.
    */
*************** setSelectionStart(int selectionStart)
*** 196,202 ****
  
  /**
    * Returns the ending position of the selected text region.
!   * // FIXME: What is returned if there is no selected text.
    *
    * @return The ending position of the selected text region.
    */
--- 196,202 ----
  
  /**
    * Returns the ending position of the selected text region.
!   * If the text is not selected, then caret position is returned 
    *
    * @return The ending position of the selected text region.
    */
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
===================================================================
RCS file: /cvsroot/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,v
retrieving revision 1.7
diff -c -p -c -p -r1.7 gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
*** jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c	8 Oct 2003 15:49:33 -0000	1.7
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c	1 Dec 2003 17:17:27 -0000
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 194,199 ****
--- 194,201 ----
    GtkTextIter start;
    GtkTextIter end;
    int starti, endi;
+   GtkTextMark *mark;
+   GtkTextIter iter;
  
    ptr = NSA_GET_PTR (env, obj);
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 204,209 ****
--- 206,213 ----
        editable = GTK_EDITABLE (ptr);
        if (gtk_editable_get_selection_bounds (editable, &starti, &endi))
  	pos = starti;
+       else
+         pos = gtk_editable_get_position (editable);
      }
    else
      {
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 221,226 ****
--- 225,236 ----
  	  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
  	  if (gtk_text_buffer_get_selection_bounds(buf, &start, &end))
  	    pos = gtk_text_iter_get_offset (&start);
+ 	  else 
+            {
+             mark = gtk_text_buffer_get_insert (buf);
+             gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
+             pos = gtk_text_iter_get_offset (&iter);
+            }  
  	}
      }
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 241,246 ****
--- 251,258 ----
    GtkTextIter start;
    GtkTextIter end;
    int starti, endi;
+   GtkTextMark *mark;
+   GtkTextIter iter;
  
    ptr = NSA_GET_PTR (env, obj);
  
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 251,256 ****
--- 263,270 ----
        editable = GTK_EDITABLE (ptr);
        if (gtk_editable_get_selection_bounds (editable, &starti, &endi))
  	pos = endi;
+       else
+         pos = gtk_editable_get_position (editable);
      }
    else
      {
*************** Java_gnu_java_awt_peer_gtk_GtkTextCompon
*** 268,273 ****
--- 282,293 ----
  	  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
  	  if (gtk_text_buffer_get_selection_bounds(buf, &start, &end))
  	    pos = gtk_text_iter_get_offset (&end);
+ 	  else 
+            {
+             mark = gtk_text_buffer_get_insert (buf);
+             gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
+             pos = gtk_text_iter_get_offset (&iter);
+            }    
  	}
      }
  


More information about the Java-patches mailing list