<AWT Dev> [8] Review request for 7171412: awt Choice doesn't fire ItemStateChange when selecting item after select() call - approved

Tim English tim_english at hotmail.com
Mon Oct 8 05:39:26 PDT 2012

I just saw your earlier email as well. I apologize that I do not have an automated test. I did review the ".2" change and I am glad that you all went with the better fix by eliminating the duplicate/triplicate state.  Thank you for keeping me in the loop directly as I have not been keeping up with the digests.
Thought in hindsight... maybe the original enhancement request should have just been rejected. If the user keeps picking the same item from the list, they are probably expecting the software to do something! It is possible for an event listener to check against previous state and ignore extra messages(work around possible), it is NOT possible for an event listener to react to an event that is NEVER fired (no work around, must redesign UI).
> BTW, native Choice controls fire event always on all platforms.
Similar reasoning might lie behind why the native platforms choose to always fire: more flexibility to the developer.
Another possiblity would be to add a new control state to the Choice control [ set/isFireAlreadySelected() ] and/or the selection Event  [ isAlreadySelected() ].  Default state for isFireAlreadySelecteded() defaults to true to retain compatibility for older JVMs.  User requesting the original enhacement could set this to false to silence the repeated selection methods. 
Note that the original enhancement requester could have created a Choice subclass to solve the duplicate firing result. (pseudo code)
class SingleFireChoice extends Choice {
    Listeners singleFirelisteners;
    addSingleFireListener(Listener onlyWantsToKnowIfChanged);
    ... code to filter out duplicate selects

I normally consider that the behavior between radio groups and choice lists should operate on the same rules. (Just 2 different views of the same information) I wonder if radio groups fire an extra message if you keep clicking the same radio button over and over again? It might be an interesting experiment.
I just happened to run an old Java utility that I wrote in 2000.  I had not run it since Java7 has been released.
It is still using an old 1.4 runtime, and as I was running it, I realized that it will NOT work with the Java 7 JVM since it performs an operation when a choice item is selected. The user might want to perform the same operation repeatedly via the choice on different inputs.
Basic test case that will now fail in the application is 
1. enter some text in TextArea "left"
2. enter some text in TextArea "right"
3. select an operation from the choice (left difference, right difference, symmetric difference, union, intersection)
4. review result in TextArea "result"
5. change the text in "left" or "right" or both of the areas
6. select the SAME operation again from the choice.
    In J6 and lower, it will perform the operation on the new inputs.
    In J7, nothing will happen and there is no way to know that the user has attempted something.

For step 6 to work in Java7 even after the patch for 7171412, I will have to switch to a different item and then switch back to the desired item. 
For upgrading the application to work reasonably with Java7 I will need to add a separate "evaluate" button to "fire" the choice or else change the choice items into individual buttons. 
Thanks for looking into this.  With all the recent press on the security items recently, I wasn't sure when someone would get a chance to look into it. (My Personal Rant about security: Why do people allow untrusted sites to run active X or applets in the first place? duh?)
I thank you all for your work on this,
Tim English

> Date: Thu, 4 Oct 2012 13:33:59 +0400
> From: oleg.pekhovskiy at oracle.com
> To: denis.fokin at oracle.com
> CC: artem.ananiev at oracle.com; awt-dev at openjdk.java.net; tim_english at hotmail.com
> Subject: Re: [8] Review request for 7171412: awt Choice doesn't fire ItemStateChange when selecting item after select() call - approved
> Hi Denis,
> there are behavior differences for Choice across the platforms.
> on Windows - if we choose the same item twice ItemStateChange is not 
> fired twice but for other platform it is so.
> There is a separate issue about that 7159935, so all platform should 
> behave like Windows does.
> BTW, native Choice controls fire event always on all platforms.
> Thanks,
> Oleg
> 10/3/2012 5:47 PM, Denis S. Fokin wrote:
> > Hi Oleg,
> >
> > the fix looks good. It was interesting to verify the functionality on 
> > Linux. On my Ubuntu everything works properly.
> >
> > Thank you,
> > Denis.
> >
> > On 10/2/2012 6:48 PM, Artem Ananiev wrote:
> >> Hi, Oleg,
> >>
> >> the new version looks fine.
> >>
> >> Thanks,
> >>
> >> Artem
> >>
> >> On 10/2/2012 4:30 PM, Oleg Pekhovskiy wrote:
> >>> Hi Artem,
> >>>
> >>> thank you for the review, I made changes you proposed there:
> >>> http://cr.openjdk.java.net/~bagiras/8/7171412.2
> >>>
> >>> Please tell if everything is ok.
> >>>
> >>> Thanks,
> >>> Oleg
> >>>
> >>> 10/1/2012 2:23 PM, Artem Ananiev wrote:
> >>>> Hi, Oleg,
> >>>>
> >>>> (adding Tim to copy)
> >>>>
> >>>> the fix looks fine. Could you please make selectedIndexID just a
> >>>> static variable in awt_Choice.cpp instead of AwtChoice member?
> >>>>
> >>>> Thanks,
> >>>>
> >>>> Artem
> >>>>
> >>>> On 10/1/2012 2:09 PM, Oleg Pekhovskiy wrote:
> >>>>> Hi!
> >>>>>
> >>>>> Please review the fix for CR:
> >>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7171412
> >>>>>
> >>>>> Webrev:
> >>>>> http://cr.openjdk.java.net/~bagiras/8/7171412.1/
> >>>>>
> >>>>> I left the idea of the fix CR 6770017 but refused of using doubling
> >>>>> native variable for storing previously selected index
> >>>>> (that also caused the problem described in the current issue).
> >>>>>
> >>>>> Thanks,
> >>>>> Oleg
> >>>
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20121008/f6bb0731/attachment.html 

More information about the awt-dev mailing list