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
This commit is contained in:
Fernando Nasser
2003-12-23 19:24:00 +00:00
committed by Fernando Nasser
parent 459ac19fa5
commit baba70d019
6 changed files with 120 additions and 29 deletions
+45 -5
View File
@@ -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)
{
// Always remove 0.
remove(0);
cp.select (0);
selectedIndex = 0; // Just to keep consistent
}
for (int i = (count - 1); i >= 0; i--)
{
// Always remove the last to avoid generation of ItemEvents.
pItems.removeElementAt(i);
if (cp != null)
cp.remove (i);
}
selectedIndex = -1;
}
/*************************************************************************/