diff options
author | Fernando Nasser <fnasser@redhat.com> | 2003-12-23 19:24:00 +0000 |
---|---|---|
committer | Fernando Nasser <fnasser@gcc.gnu.org> | 2003-12-23 19:24:00 +0000 |
commit | baba70d019dcf4ce9cbd6544465b25154eaed5e0 (patch) | |
tree | 29c9440c1526ef9518e40450118087067dad5e4d /libjava/java/awt/Choice.java | |
parent | 459ac19fa525d64829e364d549814deb09854c2a (diff) | |
download | gcc-baba70d019dcf4ce9cbd6544465b25154eaed5e0.tar.gz |
GtkChoicePeer.java (postItemEvent): Rename to...
2003-12-22 Fernando Nasser <fnasser@redhat.com>
* gnu/java/awt/peer/gtk/GtkChoicePeer.java (postItemEvent): Rename to... (choicePostItemEvent): Change signature to more specific String object.
* java/awt/Choice.java (add): Generate ItemEvent for the first item
added.
(insert): Generate ItemEvent if insertion caused
selection to change.
(remove): Generate ItemEvent if removal cause selection to change.
(removeAll): Change algorithm to prevent generation of ItemEvents.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
(connect_choice_item_selectable_hook): Change argument type.
Fix argument value.
Make sure resources are feed by registering callback.
(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Adjust call to the
above function.
(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Ditto.
(item_activate): Ditto.
(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Destroy removed
menuitem.
(item_removed): New function. Free resources.
* jni/gtk-peer/gtkpeer.h (item_event_hook_info): Change member type and
name.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Obtain MethodID for
choicePostItemEvent.
From-SVN: r74979
Diffstat (limited to 'libjava/java/awt/Choice.java')
-rw-r--r-- | libjava/java/awt/Choice.java | 50 |
1 files changed, 45 insertions, 5 deletions
diff --git a/libjava/java/awt/Choice.java b/libjava/java/awt/Choice.java index 0b5e3d61dad..863888c5b37 100644 --- a/libjava/java/awt/Choice.java +++ b/libjava/java/awt/Choice.java @@ -171,7 +171,15 @@ add(String item) } if (i == 0) - select (0); + { + selectedIndex = 0; + // We must generate an ItemEvent here + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent ( + new ItemEvent ((ItemSelectable)this, + ItemEvent.ITEM_STATE_CHANGED, + getItem(0), + ItemEvent.SELECTED)); + } } /*************************************************************************/ @@ -223,7 +231,15 @@ insert(String item, int index) } if (getItemCount () == 1 || selectedIndex >= index) + { select (0); + // We must generate an ItemEvent here + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent ( + new ItemEvent ((ItemSelectable)this, + ItemEvent.ITEM_STATE_CHANGED, + getItem(0), + ItemEvent.SELECTED)); + } } /*************************************************************************/ @@ -265,8 +281,16 @@ remove(int index) cp.remove (index); } - if (index == selectedIndex) + if ((index == selectedIndex) && (getItemCount() > 0)) + { select (0); + // We must generate an ItemEvent here + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent ( + new ItemEvent ((ItemSelectable)this, + ItemEvent.ITEM_STATE_CHANGED, + getItem(0), + ItemEvent.SELECTED)); + } else if (selectedIndex > index) --selectedIndex; } @@ -281,11 +305,27 @@ removeAll() { int count = getItemCount(); - for (int i = 0; i < count; i++) + if (count <= 0) + return; + + ChoicePeer cp = (ChoicePeer) peer; + + // Select the first item to prevent an spurious ItemEvent to be generated + if (cp != null) + { + cp.select (0); + selectedIndex = 0; // Just to keep consistent + } + + for (int i = (count - 1); i >= 0; i--) { - // Always remove 0. - remove(0); + // Always remove the last to avoid generation of ItemEvents. + pItems.removeElementAt(i); + if (cp != null) + cp.remove (i); } + + selectedIndex = -1; } /*************************************************************************/ |