diff options
author | Sven Gothel <[email protected]> | 2023-09-29 00:08:23 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-09-29 00:08:23 +0200 |
commit | a0e6d5883de009d4649d011633090d7660fa229a (patch) | |
tree | 36d090007ea5c44aba06ea7ebafc7a1dad277941 /src/newt/native/X11Display.c | |
parent | c5fde40428937c08486226e9d4488a0ca1a00377 (diff) |
Bug 1431: Fix NewtCanvasAWT resize on X11, broken since commit ad38d1559854985b1131e5b6c7274a392b5bc265
Commit ad38d1559854985b1131e5b6c7274a392b5bc265 introduced XTranslateCoordinates(..) to savely validate
the client-space window position against the parent (root).
Totally missing in this change was the NEWT child window case
since it always used the root-window as the destination.
This change tracks the parent-window (valid parent Window or NULL)
within the JavaWindow struct and either uses the parent-window
if available or the root-window for XTranslateCoordinates(..).
This results in the proper client-space position.
Validated against
- TestGearsES2NewtCanvasAWT
- TestBug1431NewtCanvasAWT
on Debian 12 w/ Java17.
Diffstat (limited to 'src/newt/native/X11Display.c')
-rw-r--r-- | src/newt/native/X11Display.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/newt/native/X11Display.c b/src/newt/native/X11Display.c index 8457e4b63..a2fba9b7f 100644 --- a/src/newt/native/X11Display.c +++ b/src/newt/native/X11Display.c @@ -1,5 +1,5 @@ /** - * Copyright 2011 JogAmp Community. All rights reserved. + * Copyright 2011-2023 JogAmp Community. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: @@ -764,11 +764,14 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_x11_DisplayDriver_DispatchMessage Window winRoot, winTopParent; Bool translated = False; if( 0 != NewtWindows_getRootAndParent(dpy, evt.xconfigure.window, &winRoot, &winTopParent) ) { + DBG_PRINT( "X11: event . ConfigureNotify call %p (root %p, top %p)\n", + (void*)evt.xconfigure.window, (void*)winRoot, (void*)winTopParent); int x_return=-1, y_return=-1; + Window winDest = ( winTopParent == jw->parentWindow ) ? winTopParent : winRoot; Window child; - if( True == XTranslateCoordinates(dpy, evt.xconfigure.window, winRoot, 0, 0, &x_return, &y_return, &child) ) { - DBG_PRINT( "X11: event . ConfigureNotify call %p POS (Xtrans) %d/%d -> %d/%d\n", - (void*)evt.xconfigure.window, x_pos, y_pos, x_return, y_return); + if( True == XTranslateCoordinates(dpy, evt.xconfigure.window, winDest, 0, 0, &x_return, &y_return, &child) ) { + DBG_PRINT( "X11: event . ConfigureNotify call %p of dest %p POS (Xtrans) %d/%d -> %d/%d (child %p)\n", + (void*)evt.xconfigure.window, winDest, x_pos, y_pos, x_return, y_return, child); x_pos = x_return; y_pos = y_return; translated = True; |