summaryrefslogtreecommitdiff
path: root/libjava/java/awt/Choice.java
diff options
context:
space:
mode:
authorFernando Nasser <fnasser@redhat.com>2003-12-23 19:24:00 +0000
committerFernando Nasser <fnasser@gcc.gnu.org>2003-12-23 19:24:00 +0000
commitbaba70d019dcf4ce9cbd6544465b25154eaed5e0 (patch)
tree29c9440c1526ef9518e40450118087067dad5e4d /libjava/java/awt/Choice.java
parent459ac19fa525d64829e364d549814deb09854c2a (diff)
downloadgcc-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.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;
}
/*************************************************************************/