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

Pavel Porvatov pavel.porvatov at oracle.com
Fri Aug 17 17:10:25 UTC 2012


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)

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.

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