aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/Choice.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/Choice.java')
-rw-r--r--libjava/java/awt/Choice.java50
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;
}
/*************************************************************************/