Hi Alexander,
thank you for the review!
1. The problem is that I didn't find that root window ALWAYS starts with
0, 0 in X11 docs.
Could you please point such statement out to avoid uncertainty?
2. Checking insets against screen width and height can fail too. Example:
1st screen (0, 0, 1024, 768) - x, y, width, height
2nd screen (1024, 0, 1920, 1080)
Struts for the 2nd screen could be (1074, 0, 20, 0) - left, right, top,
bottom.
So left strut 1075 fits in 1920 but should be 50 as inset.
PS: Just curious: you said that screen (1000, 50, 1000, 1000) is a valid
case.
Is it valid for testing environment? As I see screens are left-top aligned.
It means that if two screens are located from left to right, they both
have y == 0 regardless of their height.
Usually insets are much less than dimensions of a screen and so strut
minus screen edge should be less
than summary dimension of neighbor screens.
Please, correct me if I'm wrong.
Thanks,
Oleg
04.02.2014 15:28, Alexander Zvegintsev wrote:
Hi Oleg,
I am just curious about adding rootBounds.x and rootBounds.y, it looks
redundant to me.
Is there a case when a root window have coordinates with non-zero values?
MultiScreenInsetsTest.java:
62 if ((bounds.x != 0 && insets.left >= bounds.x)
63 || (bounds.y != 0 && insets.top >= bounds.y)) {
This check will fail for screen with
[x=1000,y=50,width=1000,height=1000] bounds and top inset 100,
but it is a valid case.
I think we should check insets against screen width and height:
if (insets.left >= bounds.width
|| insets.right >= bounds.width
|| insets.top >= bounds.height
|| insets.bottom >= bounds.height) {
Otherwise fix looks good to me.
Thanks,
Alexander.
On 02/04/2014 10:26 AM, Oleg Pekhovskiy wrote:
Hi All,
please review the second version of fix:
http://cr.openjdk.java.net/~bagiras/8020443.2/
It turned out that struts must be checked and corrected from all sides
to become the proper screen insets.
Thanks,
Oleg
On 01/21/2014 06:31 PM, Oleg Pekhovskiy wrote:
Hi all,
please review the fix
http://cr.openjdk.java.net/~bagiras/8020443.1/
for
https://bugs.openjdk.java.net/browse/JDK-8020443
Referring to the standards, we must calculate insets the special way
for Xinerama:
http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
_NET_WM_STRUT_PARTIAL
"The start and end values associated with each strut allow areas to
be reserved which do not span the entire width or height of the
screen. Struts MUST be specified in root window coordinates, that
is, they are /not/ relative to the edges of any view port or
Xinerama monitor."
So the fix checks if the insets have absolute values and if so makes
them relative to each screen.
The issue occurred when the Frame was created with the location by
default.
Thanks,
Oleg