diff options
author | fnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-23 19:24:00 +0000 |
---|---|---|
committer | fnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-23 19:24:00 +0000 |
commit | f0ce15ebf84b835f13c2e05165766be2ae6f3aa5 (patch) | |
tree | 29c9440c1526ef9518e40450118087067dad5e4d /libjava/java | |
parent | e35ccc0b2a898be7f50ffe5244e97df56b66da52 (diff) | |
download | ppe42-gcc-f0ce15ebf84b835f13c2e05165766be2ae6f3aa5.tar.gz ppe42-gcc-f0ce15ebf84b835f13c2e05165766be2ae6f3aa5.zip |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74979 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/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; } /*************************************************************************/ |