summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java
diff options
context:
space:
mode:
authorfnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-05 21:18:06 +0000
committerfnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-05 21:18:06 +0000
commit70c2647f1e8cbb06cc8004c651344ab09281a8c4 (patch)
tree3b896cc9aa5303dfe9b469323979c8ef4746d208 /libjava/gnu/java
parentc7ed85c9040308feec4bb428ddc6657a6d0c068e (diff)
downloadppe42-gcc-70c2647f1e8cbb06cc8004c651344ab09281a8c4.tar.gz
ppe42-gcc-70c2647f1e8cbb06cc8004c651344ab09281a8c4.zip
2004-01-05 Fernando Nasser <fnasser@redhat.com>
* java/awt/Choice.java (add): Leave posting of ItemEvents to peer. (insert): Ditto. (remove): Ditto. Also, Check for valid argument. (removeAll): Use peer interface method. * gnu/java/awt/peer/gtk/GtkChoicePeer.java (nativeAdd): New name for native add function. (nativeRemove): New name for native remove function. (getHistory): New native function. (constructor): Generate ItemEvent. (add): Ditto, if selection is changed. (remove): Ditto, ditto. (removeAll): Add implementation. (handleEvent): Remove. Dead code. (choicePostItemEvent): Add comment. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Add comments. (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Rename to... (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd): New name. Add comments and fix condition to change selection. (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Rename to... (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove): New name. Add remove all capability. (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_getHistory): New function. (item_activate): Add cast to remove compiler warning. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75443 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java65
1 files changed, 50 insertions, 15 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
index 7e5579b3bc7..a03a410508c 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkChoicePeer.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
+import java.awt.AWTEvent;
import java.awt.Choice;
import java.awt.event.ItemEvent;
import java.awt.peer.ChoicePeer;
@@ -45,8 +46,6 @@ import java.awt.peer.ChoicePeer;
public class GtkChoicePeer extends GtkComponentPeer
implements ChoicePeer
{
- native void create ();
-
public GtkChoicePeer (Choice c)
{
super (c);
@@ -59,35 +58,71 @@ public class GtkChoicePeer extends GtkComponentPeer
items[i] = c.getItem (i);
append (items);
+
+ // Must set our state before notifying listeners
+ ((Choice) awtComponent).select (c.getItem (0));
+ postItemEvent (c.getItem (0), ItemEvent.SELECTED);
}
}
+ native void create ();
+
native void append (String items[]);
+ native int getHistory ();
+ native void nativeAdd (String item, int index);
+ native void nativeRemove (int index);
- native public void add (String item, int index);
- native public void remove (int index);
native public void select (int position);
- public void removeAll () { }
-
- public void addItem (String item, int position)
+ public void add (String item, int index)
{
- add (item, position);
+ int before = getHistory();
+
+ nativeAdd (item, index);
+
+ /* Generate an ItemEvent if we added the first one or
+ if we inserted at or before the currently selected item. */
+ if ((before < 0) || (before >= index))
+ {
+ // Must set our state before notifying listeners
+ ((Choice) awtComponent).select (((Choice) awtComponent).getItem (0));
+ postItemEvent (((Choice) awtComponent).getItem (0), ItemEvent.SELECTED);
+ }
+ }
+
+ public void remove (int index)
+ {
+ int before = getHistory();
+ int after;
+
+ nativeRemove (index);
+ after = getHistory();
+
+ /* Generate an ItemEvent if we are removing the currently selected item
+ and there are at least one item left. */
+ if ((before == index) && (after >= 0))
+ {
+ // Must set our state before notifying listeners
+ ((Choice) awtComponent).select (((Choice) awtComponent).getItem (0));
+ postItemEvent (((Choice) awtComponent).getItem (0), ItemEvent.SELECTED);
+ }
+ }
+
+ public void removeAll ()
+ {
+ nativeRemove (-1);
}
- /*
- public void handleEvent (AWTEvent event)
+ public void addItem (String item, int position)
{
- if (event instanceof ItemEvent)
- ((Choice) awtComponent).select ((String) ((ItemEvent)event).getItem ());
- super.handleEvent (event);
+ add (item, position);
}
- */
protected void choicePostItemEvent (String label, int stateChange)
{
+ // Must set our state before notifying listeners
if (stateChange == ItemEvent.SELECTED)
((Choice) awtComponent).select (label);
- super.postItemEvent (label, stateChange);
+ postItemEvent (label, stateChange);
}
}
OpenPOWER on IntegriCloud