<Swing Dev> [9] JDK-8049069 : JButton incorrect behaviour on button release
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Thu Apr 14 16:41:34 UTC 2016
+1
On 14.04.16 11:53, Alexander Scherbatiy wrote:
>
> The fix looks good to me.
>
> Thanks,
> Alexandr.
>
> On 14/04/16 10:44, Ajit Ghaisas wrote:
>> Thanks Alex for the good suggestion to have a private method to avoid
>> code repetition.
>>
>> I have modified the code accordingly. Please review the updated webrev.
>> http://cr.openjdk.java.net/~aghaisas/8049069/webrev.02/
>>
>> Regards,
>> Ajit
>>
>> -----Original Message-----
>> From: Alexander Scherbatiy
>> Sent: Thursday, April 14, 2016 1:00 AM
>> To: Ajit Ghaisas; Sergey Bylokhov; swing-dev at openjdk.java.net
>> Subject: Re: <Swing Dev> [9] JDK-8049069 : JButton incorrect behaviour
>> on button release
>>
>>
>> There is the same code which is repeated in three methods. Is it
>> possible to add a private method which takes button, button mask, and
>> event as parameters and returns true if the mouse event specifies the
>> given button? It would be possible to reuse it in public methods.
>>
>> Thanks,
>> Alexandr.
>>
>> On 13/04/16 17:08, Ajit Ghaisas wrote:
>>> Hi,
>>>
>>> Thanks for the review.
>>> Your questioning lead me to think about correcting the
>>> SwingUtilities isXXXMouseButton() methods.
>>> It is possible to identify under which mouse state these
>>> methods are invoked using the MouseEvent parameter.
>>> Please review the updated webrev.
>>> http://cr.openjdk.java.net/~aghaisas/8049069/webrev.01/
>>>
>>> With this fix, I have verified tests mentioned under :
>>> JDK-7146377, JDK-7088744 and JDK-8049069. All of them passed.
>>>
>>> Regards,
>>> Ajit
>>>
>>> -----Original Message-----
>>> From: Alexander Scherbatiy
>>> Sent: Tuesday, March 29, 2016 6:56 PM
>>> To: Ajit Ghaisas; Sergey Bylokhov; swing-dev at openjdk.java.net; Rajeev
>>> Chamyal
>>> Subject: Re: <Swing Dev> [9] JDK-8049069 : JButton incorrect behaviour
>>> on button release
>>>
>>> On 28/03/16 15:43, Ajit Ghaisas wrote:
>>>> Hi,
>>>> In JDK-6u115, this bug is not reproducible.
>>>> Fix for JDK-7088744 did not break the JButton behavior.
>>>> This bug is regression due to changes done to SwingUtilities
>>>> as a fix of JDK-7146377.
>>>>
>>>> After reading comments on JBS for JDK-7146377, I realized
>>>> that the modification was done to support left mouse drag.
>>>> Ideally, it should have been done using a new public method
>>>> such as isLeftMouseButtonDown() and using it in test/client code.
>>>> In this case, we will need to add isMiddleMouseButtonDown()
>>>> and isRightMouseButtonDown() methods as well.
>>>> Modifying existing APIs as well as introducing new public APIs
>>>> raises a risk of forced test/client code modifications. (This is the
>>>> reason why I have chosen option 2 as mentioned below)
>>> The SwingUtilities.isLeftMouseButton() method used not only in
>>> JButton listener but in other places too.
>>> Could you check some component like JSpinner with proper L&F
>>> that it does not have the same issue described in 8049069.
>>>
>>> It is possible just to add one internal method
>>> isLeftMouseButtonDown() to the sun.swing.SwingUtilities2 class first.
>>> Will it be enough to fix these two issues 8049069 and 7146377?
>>>
>>> Thanks,
>>> Alexandr.
>>>> I have fixed the JDK-8049069 in BasicButtonListener.java as
>>>> there is no need to use swingUtilities methods in mousePressed() and
>>>> mouseReleased() methods.
>>>>
>>>> Regards,
>>>> Ajit
>>>>
>>>> -----Original Message-----
>>>> From: Sergey Bylokhov
>>>> Sent: Friday, March 25, 2016 3:33 AM
>>>> To: Ajit Ghaisas; swing-dev at openjdk.java.net; Alexander Scherbatiy;
>>>> Rajeev Chamyal
>>>> Subject: Re: <Swing Dev> [9] JDK-8049069 : JButton incorrect
>>>> behaviour on button release
>>>>
>>>> Hi, Ajit.
>>>> Is this bug a regression of JDK-7088744 or JDK-8049069, or it works
>>>> this way in jdk6 as well?
>>>> I guess the code in jdk6 was something like this:
>>>> public static boolean isLeftMouseButton(MouseEvent anEvent) {
>>>> return ((anEvent.getModifiers() &
>>>> InputEvent.BUTTON1_MASK) != 0);
>>>> }
>>>>
>>>> On 24.03.16 12:55, Ajit Ghaisas wrote:
>>>>> Hi,
>>>>>
>>>>> Bug : https://bugs.openjdk.java.net/browse/JDK-8049069
>>>>>
>>>>> Issue : A JButton which is pressed using left mouse button gets
>>>>> released if right mouse button is pressed and released.
>>>>>
>>>>> Root cause :
>>>>> ---------------
>>>>> In file BasicButtonListener.java, mousePressed() and
>>>>> mouseReleased() methods check whether the event is from left mouse
>>>>> button.
>>>>> This check is done using ---- if
>>>>> (SwingUtilities.isLeftMouseButton(e)
>>>>> ) This method returns true if left mouse button is down OR event is
>>>>> from left mouse button.
>>>>> SwingUtilities.isLeftMouseButton() returns true if it is called for
>>>>> right mouse event while holding left button down. This causes
>>>>> mouseReleased() method to release pressed JButton.
>>>>>
>>>>>
>>>>> Alternatives considered :
>>>>> -----------------------------
>>>>> 1. Modifying SwingUtilities.isLeftMouseButton() method to only test
>>>>> for whether the event is from left mouse button only 2. Modifying
>>>>> mousePressed() and mouseReleased() methods to check for whether the
>>>>> event is from left mouse button using argument passed to them.
>>>>>
>>>>> Option 1 will break the code wherever
>>>>> SwingUtilities.isLeftMouseButton() is used to test for left mouse
>>>>> button down.
>>>>> File history revealed that the mouse button down condition is added
>>>>> to fix another bug.
>>>>>
>>>>> Hence, option 2 is chosen as it is safe and intuitive.
>>>>> I have also added a test. It passes on Windows, Linux and Mac.
>>>>> Test mentioned in comment on the bug also passed.
>>>>>
>>>>> Please review the webrev :
>>>>>
>>>>> http://cr.openjdk.java.net/~aghaisas/8049069/webrev.00/
>>>>>
>>>>> Regards,
>>>>> Ajit
>>>>>
>>>> --
>>>> Best regards, Sergey.
>
--
Best regards, Sergey.
More information about the swing-dev
mailing list