<Swing Dev> [7] Review request for 7123767 Wrong tooltip location in Multi-Monitor configurations

Vladislav Karnaukhov Vladislav.Karnaukhov at oracle.com
Mon Aug 27 12:59:17 UTC 2012


Hi Pavel, all,

please find new webrev here: 
http://cr.openjdk.java.net/~vkarnauk/7123767/webrev.02/
Please see my comments inline.

Regards,
- Vlad

On 8/17/2012 9:10 PM, Pavel Porvatov wrote:
> Hi Vladislav,
>
> I have several comments about the fix:
>
> 1. javax.swing.ToolTipManager#showTipWindow: I think toFind variable 
> should be initialized in if(preferredLocation != null) { ....} else 
> {...} block. It looks more logical and code will be more compact 
> (adjustedPreferredLocation can be removed at all, I think)
Agreed. I've re-worked this piece.

>
> 2. Could you please explain why you are using union of all rectangles 
> in the getDrawingRect method? In case two monitors are aligned on a 
> diagonal totalRect will contain areas that are not covered by screen 
> devices and popups can be placed incorrectly.
Agreed again. I've re-designed getDrawingRect() function and placed 
additional condition into showTipWindow() function; now every situation 
should be handled correctly.

Automated test was added, please see the webrev.

Regards,
- Vlad

>
> Regards, Pavel
>
>> Hello,
>>
>> please review the fix for 7123767: Wrong tooltip location in 
>> Multi-Monitor configurations
>>
>> jdk7 webrev: http://cr.openjdk.java.net/~vkarnauk/7123767/webrev.00/
>> test source: http://cr.openjdk.java.net/~vkarnauk/7123767/test/
>> bug description: 
>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7123767
>>
>> This is also a customer escalated issue in jdk6.
>>
>> On multi-monitor configurations Component.getLocationOnScreen() may 
>> return negative values. Additionally, ToolTipManager.showTipWindow() 
>> method calculates tip window location from Component' 
>> getLocationOnScreen() return data and draws tip window using the same 
>> GraphicsConfiguration instance as component's top-left corner, which 
>> again can be of negative value. When component is stretched across 
>> multiple screen devices, this may lead to a situation when it's 
>> tooltip is drawn on wrong monitor.
>>
>> To fix this we should count all GraphicsConfiguration instances and 
>> determine correct screen device to draw on. We should also take into 
>> account that:
>> 1) tip window preferred location could be set
>> 2) preferred location could be greater than total virtual bounds of 
>> all monitors. To make tip window visible in such case we move it to 
>> the corresponding corner of total virtual bounds
>> 3) exact order of monitors (left-to-right and top-to-bottom) is unknown
>>
>> I run jtreg against ToolTipManager tests and all tests passed (I run 
>> it several times with different monitor configurations). I also 
>> tested the fix with custom test program (please see the link 
>> provided) with 4 possible monitor configurations (left-to-right, 
>> right-to-left, top-to-bottom and bottom-to-top) and saw no issues.
>>
>> I added no new automated test(s) because this at least would require 
>> multiple monitors to run.
>>
>> Regards,
>> - Vlad
>





More information about the swing-dev mailing list