xpra icon
Bug tracker and wiki

Opened 4 years ago

Closed 4 years ago

Last modified 3 years ago

#980 closed defect (fixed)

unable to click in window after a new display is connected

Reported by: alas Owned by: alas
Priority: blocker Milestone: 0.16
Component: server Version: 0.15.x
Keywords: Cc:

Description

Testing with 0.15.5 r10308 osx client against 0.15.4 r10209 fedora 21 server... and also reproduced with 0.16.0 r10380 osx client against 0.16.0 r10508 fedora 21 server.

I started a gedit application from an xterm (obviously also reproducible with all browsers).

I typed something into the doc, then clicked the "+" button to open a new doc and typed something-else into it.

I then plug in a second display configured to be "left" (and above) the original display... requiring, I assume, a "re-location" of the application in order to keep it on the same display as before, despite the changes of the overall desktop layout.

When I then mouse to the original tab/doc (the one I typed something into) and click on it, the application is non-responsive ... and I can't use the mouse to switch between tabs as expected.

(Note - with browsers that behave in cooperation with the WM, if I move the application to the left-more display, then the tabs become responsive again... but gedit and google-chrome are not behaving, so I can't move them around the desktop... which is a separate issue, but I thought I would note it here.)

I'll attach xpra-info from before the adding of the second display, and after.

Attachments (17)

ticket980_multi-tab-issue_pre-info.txt (110.2 KB) - added by alas 4 years ago.
info for multi-tab gedit application before adding second display
ticket980_multi-tab-issue_post-info.txt (110.1 KB) - added by alas 4 years ago.
info for multi-tab gedit application after adding second display
ticket980_display-configuration-screenshot.png (6.2 KB) - added by alas 4 years ago.
shot of display configuration
xpra-ticket-980_windows-client-display-arrangement.PNG (30.3 KB) - added by alas 4 years ago.
screenshot of windows display layout, big 4K is initial display, little upper left display added as second
ticket980_pre-second-display.PNG (1.6 MB) - added by alas 4 years ago.
edited to maybe fit screenshot of 4k display and application locations before adding second display
ticket980_post-second-display.PNG (1.4 MB) - added by alas 4 years ago.
screenshot, edited for size, of 4k display applications layout after adding second little display to left
ticket980_r10607-fixes_info-pre-second-display.txt (140.8 KB) - added by alas 4 years ago.
xpra info pre-attaching of second display
System.txt (10.4 KB) - added by alas 4 years ago.
bug tool system info for session, before adding second display (should be same for after?)
ticket980_r10607-fixes_info-post-second-display.txt (139.2 KB) - added by alas 4 years ago.
xpra info after adding second display left of original 4k, position of applications appear to have changed
Xorg._13.log (36.4 KB) - added by alas 4 years ago.
Xorg server log after attachment of second display (presumably still relevant even though initial guesses of causes was probably wrong?)
ticket980_re-open_pre-randr.txt (3.2 KB) - added by alas 4 years ago.
xrandr output, previous to adding second display
ticket980_re-open_post-randr.txt (3.2 KB) - added by alas 4 years ago.
xrandr output, post adding second display
xpra-ticket980_d-geometry-window-moving-window-to-other-monitor.txt (10.3 KB) - added by alas 4 years ago.
client logs, attach second monitor (layout as in comment:2), then move to new display
xpra-ticket980_windows-10655_comment6-setup_d-geometry-window_using-left-monitor-as-primary_add-right_move-window-to-right2.txt (62.3 KB) - added by alas 4 years ago.
title about says it all…
ticket980_both-displays-screenshot.png (247.1 KB) - added by alas 4 years ago.
screenshot of entire two display desktop, left is secondary monitor (#2)
ticket980_display-layout-two-monitors_1920x1080_and_2560x1440.PNG (79.5 KB) - added by alas 4 years ago.
control panel's notion of layout, left is left in screenshot, right is primary
clamp-window-position.patch (1.2 KB) - added by Antoine Martin 4 years ago.
prevents windows from being moved off-screen

Change History (48)

Changed 4 years ago by alas

info for multi-tab gedit application before adding second display

Changed 4 years ago by alas

info for multi-tab gedit application after adding second display

comment:1 Changed 4 years ago by alas

Display output (server side with 0.15.4) from initial connection and then once the second display is added:

2015-09-08 17:14:51,704 server virtual display now set to 1680x1050
2015-09-08 17:14:51,705 received updated display dimensions
2015-09-08 17:14:51,705 client root window size is 1680x1050 with 1 displays:
2015-09-08 17:14:51,706   'schadenfreude.local' (592x370 mm - DPI: 72x72)
2015-09-08 17:14:51,706     monitor 1
2015-09-08 17:14:51,723 DPI set to 72 x 72
2015-09-08 17:14:51,726 sent updated screen size to 1 clients: 1680x1050 (max 8192x4096)
2015-09-08 17:15:37,621 server virtual display now set to 3000x2560 (best match for 2960x2490)
2015-09-08 17:15:37,622 received updated display dimensions
2015-09-08 17:15:37,622 client root window size is 2960x2490 with 1 displays:
2015-09-08 17:15:37,622   'schadenfreude.local' (1044x878 mm - DPI: 72x72)
2015-09-08 17:15:37,622     monitor 1 1680x1050 at 1280x1440 (592x370 mm - DPI: 72x72)
2015-09-08 17:15:37,622     monitor 2 2560x1440 (903x508 mm - DPI: 72x72)
2015-09-08 17:15:37,626 DPI set to 72 x 72
2015-09-08 17:15:37,631 sent updated screen size to 1 clients: 3000x2560 (max 8192x4096)

Will also add a screenshot of the display configuration (the larger top-left is the one I add as a second display).

Changed 4 years ago by alas

shot of display configuration

comment:2 Changed 4 years ago by alas

shot of display configuration

comment:3 Changed 4 years ago by Antoine Martin

Owner: changed from Antoine Martin to alas
  • does this really have anything to do with tabs? I very much doubt it: applications are only pixels as far as xpra is concerned. Which applications are affected and which ones aren't? (there may be a pattern there)
  • "new display is connected which resets the 0x0 relative location of the application" - from the log you posted, this does not reset the relative location of the window since the monitor that was added ("monitor 2") is below and to the right (all window coordinates are relative to the top left corner)
  • libfakeXinerama - what makes you think that this is relevant? Have you tried running with --libfakeXinerama=no?
  • the gedit window seems to be located at 0x0 (according to the xpra info provided) - is this correct?
  • can you include a screenshot taken using "xpra screenshot" of before and after?
  • provide xdpyinfo and xrandr command output, the Xorg server log file
  • is this a regression? (are any older branches immune to this?)
  • is this only occurring on osx or also on win32 and Linux?
  • does moving the window a little bit help? (or resizing it slightly)
  • what is the version of your dummy driver package? is it the latest patched version?

Could be related to #349 and #728, see also #601.

FYI: I don't have the hardware to test multiple monitors from my win32 and osx systems yet..

Last edited 4 years ago by Antoine Martin (previous) (diff)

comment:4 Changed 4 years ago by Antoine Martin

Assuming that the problem is to do with a missing notification from the OS that the window's coordinates have changed - r10572 allows us to force all windows to be re-initialized after every desktop geometry change:

XPRA_MONITOR_CHANGE_REINIT=1 xpra attach ...

If that fixes the problem we can make it the default for the platforms affected (I doubt X11 is).

Last edited 4 years ago by Antoine Martin (previous) (diff)

comment:5 Changed 4 years ago by alas

Setting XPRA_MONITOR_CHANGE_REINIT=1 xpra attach ... with 0.16.0 r10607 windows client and fedora 21 server - after adding a second display the applications with "tabs" (firefox with 3 tabs, gedit with 2 unsaved documents arranged in a tab-like pattern of display) the "tabs" are still clickable/navigable as expected.

However, it looks like all the start-child and start-child spawned windows are shifting left as I add a new display which is configured to be left of the initial display.

I'll attach screen shots and a shot of the control center display layout. (The tiny display to the left is the one being added as a second display - and likewise, in the above layout, the large display at top and slightly left-er is the second display that was added.)

I'll also attach new xpra info from before and after, as well as a number of the bug report items. Note, however, that the screenshots taken by the bug report tool came out as 1 kb .txt files with the word width as their sole contents.

Just in case it is useful, here's the layout infor from the win32 client for the initial connection (well, for one of the iterations in which it re-init'd to one display):

2015-09-10 16:10:36,579 screen size change: will reinit the windows
2015-09-10 16:12:09,306 sending updated screen size to server: 3840x2160 with 1 screens
2015-09-10 16:12:09,306   Default (1016x571 mm - DPI: 96x96) workarea: 3840x2120
2015-09-10 16:12:09,306     DISPLAY1 (621x341 mm - DPI: 157x160)
2015-09-10 16:12:09,306 screen size change: will reinit the windows

And, upon re-connecting the second display yet again:

2015-09-10 16:19:34,377 sending updated screen size to server: 5120x2160 with 1 screens
2015-09-10 16:19:34,377   Default (1354x571 mm - DPI: 96x96)
2015-09-10 16:19:34,377     DISPLAY1 3840x2160 at 1280x0 (621x341 mm - DPI: 157x160) workarea: 5120x2160
2015-09-10 16:19:34,377     DISPLAY2 1280x720 (597x336 mm - DPI: 54x54) workarea: 5120x2160
2015-09-10 16:19:34,391 screen size change: will reinit the windows
  • Just for my own info, I tried running with --libfakeXinerama=no, but got an error message, both server and client side, when I tried: no such option: --libfakeXinerama
  • I'll also include a Xorg.:13.log - which I think is the one you were asking about, grabbed shortly after attaching a second display with the same windows set up (but technically from a different session).

Changed 4 years ago by alas

screenshot of windows display layout, big 4K is initial display, little upper left display added as second

Changed 4 years ago by alas

edited to maybe fit screenshot of 4k display and application locations before adding second display

Changed 4 years ago by alas

screenshot, edited for size, of 4k display applications layout after adding second little display to left

Changed 4 years ago by alas

xpra info pre-attaching of second display

Changed 4 years ago by alas

Attachment: System.txt added

bug tool system info for session, before adding second display (should be same for after?)

Changed 4 years ago by alas

xpra info after adding second display left of original 4k, position of applications appear to have changed

Changed 4 years ago by alas

Attachment: Xorg._13.log added

Xorg server log after attachment of second display (presumably still relevant even though initial guesses of causes was probably wrong?)

comment:6 Changed 4 years ago by alas

Quick reference shot for layout of this pass (our osx 0.16 build had some issues, so I had to test with slightly different setup than originally shown in ticket):

screenshot of windows display layout, big 4K is initial display, little upper left display added as second

comment:7 Changed 4 years ago by Antoine Martin

$ xpra -h | grep xinerama
    --fake-xinerama=yes|no
                        Setup fake xinerama support for the session. Default:

comment:8 Changed 4 years ago by Antoine Martin

Summary: Applications with multiple "tabs" become unable to click between them when a new display is connected which resets the 0x0 relative location of the application via libfakeXineramaunable to click in window after a new display is connected

Editing the ticket title and summarizing some information missing from the latest comments:

  • this has nothing to do with tabs - the confusion stemmed from keyboard focus vs click events, which are completely different things: if the window is misplaced it may still receive keyboard events (which do not rely on its position, only its focus state - so an xterm will still "work") but it may not get the mouse events (highlighting text in the xterm won't work)
  • this is most likely not a regression (which usually one of the very first things to check)
  • occurs on both osx and win32, but not on X11
  • the environment variable fixes the mouse problem, the window is moved to a new location

The better fix done in r10608 (suitable for 0.15.x branch and actually smaller than r10572) is to force the window to tell the server about its new relative location.
Tested with virtualbox and this seems to work for me.

Note: because of the way we process screen change events, there will be a delay of 1 second between the time we are notified of the change in geometry and the time we send the new window location to the server.
Any mouse events received during that time will still land in the wrong location. I don't think this is a huge problem or worth the extra coding effort.
This goes up to 5 seconds when this change happens after a suspend + resume cycle (but usually this leads to a dropped connection anyway).

@afarr:

  • comment:1 seems wrong to me, I don't think this should trigger the bug if the monitor is added to the bottom right? this should only cause problems if the monitor is added to the top or left, am I right? (pun intended)
  • if this works, please re-assign to me for backporting to v0.14.x and v0.15.x (the fix is client-side only)
  • if this does not work, please include -d geometry client log (new debug log switch in 0.16 added specifically for window geometry issues)
Last edited 4 years ago by Antoine Martin (previous) (diff)

comment:9 Changed 4 years ago by Antoine Martin

Priority: majorblocker

PS: I want to release a stable update asap (to include the fix for the embarrassing security issue r10598), so I have fast tracked this backport: r10612 applies it to both v0.14.x and v0.15.x.
Please confirm that all branches are fixed.

PS2: when a display is added or removed, I see a very noticeable OS message in the client output: unexpected message: WM_MOVE (msdn docs: WM_MOVE message). r10614 catches this event and triggers the same code as the screen-size-change handler, so it should be redundant but avoids the warning.
@afarr: You must not be looking at the client console output? and also not using one of the key new features of 0.15: remote logging (#786). This means missing out on many important issues that will only show up in the log output, ouch. I can spend weeks at a time improving the logging and error reporting, but if you don't even look at it, that is time completely wasted.

Last edited 4 years ago by Antoine Martin (previous) (diff)

comment:10 Changed 4 years ago by alas

Tested with 0.16.0 r10624 client against 0.16.0 r10621 fedora 21 client.

  • OSX fix works as expected.
  • The Windows client, however, still has applications that are not responsive to mouse clicks if display layout is changed after initial connection (tried to test by setting up second display to righ of the main display, placing the application on the main/left display, then disconnecting second display... same mouse/cursor non interactiveness manifests).

I am using windows 8.1 (and osx 10.9) to test with... in neither case am I seeing unexpected message: WM_MOVE in console output, neither before nor after connecting/disconnecting a second display. Are you perhaps using a different windows (maybe 10?). I have also switched my old default screen background, which used to give a host of unexpected messages... was that perhaps happening in the middle of your tests?

This is the output I get with the windows 0.16.0 r10624 client with -d geometry:

C:\Program Files (x86)\Xpra>xpra_cmd.exe attach tcp:10.0.32.147:2200 -d geometry
2015-09-11 14:32:25,326 xpra gtk2 client version 0.16.0-r10624
2015-09-11 14:32:26,091 OpenGL_accelerate module loaded
2015-09-11 14:32:26,207  detected keyboard: layout=us
2015-09-11 14:32:26,207  desktop size is 3840x2160 with 1 screen(s):
2015-09-11 14:32:26,209   Default (1016x571 mm - DPI: 96x96) workarea: 3840x2120
2015-09-11 14:32:26,209     DISPLAY1 (621x341 mm - DPI: 157x160)
2015-09-11 14:32:26,344 server: Linux Fedora 21 Twenty One, Xpra version 0.16.0-r10621
2015-09-11 14:32:26,375 Attached to tcp:10.0.32.147:2200 (press Control-C to detach)

2015-09-11 14:32:26,469 ['configure-window', 1, 8, 44, 499, 316, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 1, (2186, 375), ['mod2']]
2015-09-11 14:32:26,469 map-window for wid=1 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:32:26,469 ['configure-window', 1, 8, 44, 499, 316, {'screen': 0}, 0, {}, False, 1, (2186, 375), ['mod2']]
2015-09-11 14:32:26,469 ['configure-window', 2, 8, 44, 1147, 849, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 2, (2186, 375), ['mod2']]
2015-09-11 14:32:26,469 map-window for wid=2 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:32:26,469 ['configure-window', 2, 8, 44, 1147, 849, {'screen': 0}, 0, {}, False, 2, (2186, 375), ['mod2']]
2015-09-11 14:32:26,469 ['configure-window', 3, 530, 567, 1150, 851, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 3, (2186, 375), ['mod2']]
2015-09-11 14:32:26,469 map-window for wid=3 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:32:26,469 ['configure-window', 3, 530, 567, 1150, 851, {'screen': 0}, 0, {}, False, 3, (2186, 375), ['mod2']]
2015-09-11 14:32:27,578 sound-sink using audio codec: MPEG 1 Audio, Layer 3 (MP3)
2015-09-11 14:32:41,460 sending updated screen size to server: 5120x2160 with 1 screens
2015-09-11 14:32:41,460   Default (1354x571 mm - DPI: 96x96) workarea: 5120x2120
2015-09-11 14:32:41,460     DISPLAY1 3840x2160 at 1280x0 (621x341 mm - DPI: 157x160) workarea: 5120x2120
2015-09-11 14:32:41,460     DISPLAY2 1280x720 (597x336 mm - DPI: 54x54) workarea: 5120x2120

With r10607:

C:\Program Files (x86)\Xpra>xpra_cmd.exe attach tcp:10.0.32.147:2200 -d geometry
2015-09-11 14:46:45,838 xpra gtk2 client version 0.16.0-r10607
2015-09-11 14:46:46,805 OpenGL_accelerate module loaded
2015-09-11 14:46:46,914  detected keyboard: layout=us
2015-09-11 14:46:46,914  desktop size is 3840x2160 with 1 screen(s):
2015-09-11 14:46:46,914   Default (1016x571 mm - DPI: 96x96) workarea: 3840x2120
2015-09-11 14:46:46,914     DISPLAY1 (621x341 mm - DPI: 157x160)
2015-09-11 14:46:47,102 server: Linux Fedora 21 Twenty One, Xpra version 0.16.0-r10621
2015-09-11 14:46:47,134 Attached to tcp:10.0.32.147:2200 (press Control-C to detach)

2015-09-11 14:46:47,227 ['configure-window', 1, 8, 382, 499, 316, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV4
44P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 1, (1920, 1080), ['mod2']]
2015-09-11 14:46:47,227 map-window for wid=1 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:46:47,227 ['configure-window', 1, 8, 382, 499, 316, {'screen': 0}, 0, {}, False, 1, (1920, 1080), ['mod2']]
2015-09-11 14:46:47,227 map-window for wid=2 with client props={'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P
', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:46:47,227 ['configure-window', 2, 8, 31, 1147, 849, {'screen': 0}, 0, {}, False, 2, (1920, 1080), ['mod2']]
2015-09-11 14:46:47,227 ['configure-window', 3, 1288, 545, 1150, 851, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', '
YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 3, (1920, 1080), ['mod2']]
2015-09-11 14:46:47,227 map-window for wid=3 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:46:47,227 ['configure-window', 3, 1288, 545, 1150, 851, {'screen': 0}, 0, {}, False, 3, (1920, 1080), ['mod2']]
2015-09-11 14:46:48,197 sound-sink using audio codec: MPEG 1 Audio, Layer 3 (MP3)
2015-09-11 14:46:59,092 sending updated screen size to server: 5120x2160 with 1 screens
2015-09-11 14:46:59,092   Default (1354x571 mm - DPI: 96x96) workarea: 5120x2128
2015-09-11 14:46:59,092     DISPLAY1 3840x2160 at 1280x0 (621x341 mm - DPI: 157x160) workarea: 5120x2128
2015-09-11 14:46:59,092     DISPLAY2 1280x720 (597x336 mm - DPI: 54x54) workarea: 5120x2128
2015-09-11 14:47:15,690 sending updated screen size to server: 3840x2160 with 1 screens
2015-09-11 14:47:15,690   Default (1016x571 mm - DPI: 96x96) workarea: 3840x2120
2015-09-11 14:47:15,690     DISPLAY1 (621x341 mm - DPI: 157x160)

With r10556:

C:\Program Files (x86)\Xpra>xpra_cmd.exe attach tcp:10.0.32.147:2200 -d geometry
2015-09-11 14:50:02,372 xpra gtk2 client version 0.16.0-r10556
2015-09-11 14:50:03,430 OpenGL_accelerate module loaded
2015-09-11 14:50:03,555  detected keyboard: layout=us
2015-09-11 14:50:03,555  desktop size is 3840x2160 with 1 screen(s):
2015-09-11 14:50:03,555   Default (1016x571 mm - DPI: 96x96) workarea: 3840x2120
2015-09-11 14:50:03,555     DISPLAY1 (621x341 mm - DPI: 157x160)
2015-09-11 14:50:03,677 server: Linux Fedora 21 Twenty One, Xpra version 0.16.0-r10621
2015-09-11 14:50:03,684 Attached to tcp:10.0.32.147:2200 (press Control-C to detach)

2015-09-11 14:50:03,763 ['configure-window', 1, 8, 382, 499, 316, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV4
44P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 1, (1723, 508), ['mod2']]
2015-09-11 14:50:03,763 map-window for wid=1 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:50:03,763 ['configure-window', 1, 8, 382, 499, 316, {'screen': 0}, 0, {}, False, 1, (1723, 508), ['mod2']]
2015-09-11 14:50:03,779 map-window for wid=2 with client props={'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P
', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:50:03,779 ['configure-window', 2, 8, 31, 1147, 849, {'screen': 0}, 0, {}, False, 2, (1723, 508), ['mod2']]
2015-09-11 14:50:03,779 ['configure-window', 3, 1288, 545, 1150, 851, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', '
YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 3, (1723, 508), ['mod2']]
2015-09-11 14:50:03,779 map-window for wid=3 with client props={}, state={'frame': (8, 8, 31, 8)}
2015-09-11 14:50:03,779 ['configure-window', 3, 1288, 545, 1150, 851, {'screen': 0}, 0, {}, False, 3, (1723, 508), ['mod2']]
2015-09-11 14:50:04,779 sound-sink using audio codec: MPEG 1 Audio, Layer 3 (MP3)
2015-09-11 14:50:15,727 sending updated screen size to server: 5120x2160 with 1 screens
2015-09-11 14:50:15,730   Default (1354x571 mm - DPI: 96x96)
2015-09-11 14:50:15,732     DISPLAY1 3840x2160 at 1280x0 (621x341 mm - DPI: 157x160) workarea: 5120x2160
2015-09-11 14:50:15,733     DISPLAY2 1280x720 (597x336 mm - DPI: 54x54) workarea: 5120x2160

These are all with the previously shown windows display configuration.

I will post more with the earlier branch tests when I get a chance.

comment:11 Changed 4 years ago by alas

Tested with windows and osx 0.14.30 r10624 clients against 0.14.30 r10624 fedora 21 server.

The applications were non-responsive to mouse clicks after a second display was added, becoming responsive again after the new display was again removed.

Obviously, the -d geometry flag didn't produce any output, but I did see some interesting gtk warnings with the window client (not sure if it was just about the build or something related to the r10624...):

C:\Program Files (x86)\Xpra>xpra_cmd.exe attach tcp:10.0.32.147:2200 -d geometry
2015-09-11 17:11:31,855 xpra client version 0.14.30
2015-09-11 17:11:32,321 OpenGL_accelerate module loaded
2015-09-11 17:11:32,321 Using accelerated ArrayDatatype
2015-09-11 17:11:32,430 detected keyboard: layout=us
2015-09-11 17:11:32,430 desktop size is 3840x2160 with 1 screen(s):
2015-09-11 17:11:32,430   '1\WinSta-Default' (1016x571 mm)
2015-09-11 17:11:32,430     DISPLAY1 (621x341 mm)
2015-09-11 17:11:32,632 server: Linux Fedora 21 Twenty One, Xpra version 0.14.30 (r10624)
2015-09-11 17:11:32,710 Attached to tcp:10.0.32.147:2200 (press Control-C to detach)

2015-09-11 17:11:34,349 using audio codec: MPEG 1 Audio, Layer 3 (MP3)
2015-09-11 17:13:11,233 sending updated screen size to server: 5120x2160 with 1 screens
2015-09-11 17:13:11,233   '1\WinSta-Default' (1354x571 mm)
2015-09-11 17:13:11,233     DISPLAY1 3840x2160 at 1280x0 (621x341 mm)
2015-09-11 17:13:11,233     DISPLAY2 1280x720 (597x336 mm)
2015-09-11 17:14:00,167 received console event CTRL_C
C:\Program Files (x86)\Xpra\library.zip\xpra\client\gtk2\client.py:527: GtkWarning: gdk_window_set_group not implemented
C:\Program Files (x86)\Xpra\library.zip\xpra\client\gtk_base\gtk_client_window_base.py:196: GtkWarning: gdk_window_set_group not implemented

The OSX client had no interesting output.

  • Also worth noting, after moving the application window on the display, the windows client became responsive to mouse/cursor clicks - but the OSX client remained non-responsive. (Also no sign of anything interesting or different between the two on server console output.)

comment:12 Changed 4 years ago by Antoine Martin

in neither case am I seeing unexpected message: WM_MOVE in console output


As per comment:9: r10614 catches this event and triggers the same code as the screen-size-change handler, so it should be redundant but avoids the warning.
You should be able to see it with -d win32. I see it reliably with XP and win7.


I did see some interesting gtk warnings with the window client
GtkWarning: gdk_window_set_group not implemented


See ticket:799#comment:12. Now backported to v0.14.x in r10629.


The Windows client, however, still has applications that are not responsive to mouse clicks


Are you sure that your environment is clean?
I don't see how it is possible to detect the screen change and not get new configure events sent. I have tested again every version, and I get the configure packets every time. (easy to spot with -d geometry on the server)

As of r10630, you can get more diagnostics with -d screen,geometry client side too.

comment:13 Changed 4 years ago by alas

Owner: changed from alas to Antoine Martin

Well, I am now completely confused.

I double checked, and I am still not seeing WM_MOVE, though with -d win32 I am seeing a whole lot of WM_DISPLAYCHANGE, WM_WINDOWPOSCHANGING, etc.

What's really baffling though, is that using the same client and the same server, it looks like the application windows now ARE respecting mouse/cursor click events.

Maybe my environment was dirtier than I thought (the only cleaning I did was to finally do a windows update that the machine was nagging about for... over a week?).

I've just gone through it half a dozen times... and it worked everytime. Looks like 0.16.0 r10624 client side and 0.16.0 r10621 server side was sufficient after all.

I'll pass this back to you to shake your head over, and then close.

(Also confirmed working with 0.15.6 r10632 win client v. 0.15.6 r10639 fedora 21 server, and 0.14.30 r10632 server and windows client.)

comment:14 Changed 4 years ago by Antoine Martin

Resolution: fixed
Status: newclosed

WM_DISPLAYCHANGE is already caught by GTK for us, so not going to bother with it.

Closing.

comment:15 Changed 4 years ago by alas

Resolution: fixed
Status: closedreopened

Ok, looks like I either have more gremlins in my systems, or my head.

Testing again I'm seeing this issue isn't fixed with OSX in either the 0.15 or 0.16 branches. (I could swear it was...)

Testing with 0.16.0 r10655 osx client against 0.16.0 r10624 fedora 21 server.

Got the following client side with -d geometry (connect, click on firefox window, add display, osx config listed well above, then click on firefox window some more):

2015-09-17 20:04:40,128 xpra gtk2 client version 0.16.0-r10655
2015-09-17 20:04:40,915 Warning: libvpx ABI version 5 is too old:
2015-09-17 20:04:40,915  disabling YUV444P support with VP9
2015-09-17 20:04:41,310 OpenGL_accelerate module loaded
2015-09-17 20:04:41,589  using default keyboard settings
2015-09-17 20:04:41,896  desktop size is 1680x1050 with 1 screen(s):
2015-09-17 20:04:41,897   schadenfreude.local (592x370 mm - DPI: 72x72)
2015-09-17 20:04:41,897     monitor 1
2015-09-17 20:04:42,038 server: Linux Fedora 21 Twenty One, Xpra version 0.16.0-r10624
2015-09-17 20:04:42,045 no UI watcher available, cannot watch for clipboard events
2015-09-17 20:04:42,055 Attached to tcp:10.0.32.136:2200 (press Control-C to detach)

2015-09-17 20:04:42,165 ['configure-window', 1, 1181, 730, 499, 316, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 1, (45, 269), ['mod2']]
2015-09-17 20:04:42,166 ['configure-window', 1, 1181, 730, 499, 316, {}, 0, {}, False, 1, (45, 269), ['mod2']]
2015-09-17 20:04:42,168 map-window for wid=1 with client props={}, state={'frame': (0, 0, 22, 0)}
2015-09-17 20:04:42,168 ['configure-window', 2, 1181, 730, 499, 316, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 2, (45, 269), ['mod2']]
2015-09-17 20:04:42,169 ['configure-window', 2, 1181, 730, 499, 316, {}, 0, {}, False, 2, (45, 269), ['mod2']]
2015-09-17 20:04:42,169 map-window for wid=2 with client props={}, state={'frame': (0, 0, 22, 0)}
2015-09-17 20:04:42,170 ['configure-window', 3, 460, 214, 1220, 832, {'screen': 0, 'encoding.transparency': False, 'encodings.rgb_formats': ['YUV420P', 'YUV422P', 'YUV444P', 'GBRP', 'BGRA', 'BGRX', 'RGBA', 'RGBX', 'RGB', 'BGR']}, 0, {}, False, 3, (45, 269), ['mod2']]
2015-09-17 20:04:42,170 ['configure-window', 3, 460, 214, 1220, 832, {}, 0, {}, False, 3, (45, 269), ['mod2']]
2015-09-17 20:04:42,171 map-window for wid=3 with client props={}, state={'frame': (0, 0, 22, 0)}
2015-09-17 20:04:42,804 sound-sink using audio codec: MPEG 1 Audio, Layer 3 (MP3)[0m
2015-09-17 20:04:48,272 ['configure-window', 3, 190, 186, 1220, 832, {'screen': 0}, 0, {}, False, 3, (585, 173), ['mod2']]
2015-09-17 20:04:48,629 ['configure-window', 3, 195, 186, 1220, 832, {'screen': 0}, 0, {}, False, 3, (590, 173), ['mod2']]
2015-09-17 20:04:52,367 ['configure-window', 3, -15, 109, 1220, 832, {'screen': 0}, 0, {}, False, 3, (380, 96), ['mod2']]
2015-09-17 20:04:53,588 ['configure-window', 3, 122, 66, 1220, 832, {'screen': 0}, 0, {}, False, 3, (518, 54), ['mod2']]
2015-09-17 20:04:53,890 ['configure-window', 3, 124, 60, 1220, 832, {'screen': 0}, 0, {}, False, 3, (520, 48), ['mod2']]
2015-09-17 20:04:54,203 ['configure-window', 3, 127, 67, 1220, 832, {'screen': 0}, 0, {}, False, 3, (522, 54), ['mod2']]
2015-09-17 20:04:54,831 ['configure-window', 3, 127, 68, 1220, 832, {'screen': 0}, 0, {}, False, 3, (522, 55), ['mod2']]
2015-09-17 20:05:14,627 ['configure-window', 3, 321, 380, 1220, 832, {'screen': 0}, 0, {}, False, 3, (933, 366), ['mod2']]
2015-09-17 20:05:15,371 ['configure-window', 3, 43, 621, 1220, 832, {'screen': 0}, 0, {}, False, 3, (654, 607), ['mod2']]
2015-09-17 20:05:15,868 ['configure-window', 3, 94, 1007, 1220, 832, {'screen': 0}, 0, {}, False, 3, (706, 993), ['mod2']]
2015-09-17 20:05:16,654 ['configure-window', 3, 150, 661, 1220, 832, {'screen': 0}, 0, {}, False, 3, (762, 646), ['mod2']]
2015-09-17 20:05:17,333 ['configure-window', 3, 176, 338, 1220, 832, {'screen': 0}, 0, {}, False, 3, (788, 324), ['mod2']]
2015-09-17 20:05:18,161 ['configure-window', 3, 150, 183, 1220, 832, {'screen': 0}, 0, {}, False, 3, (762, 169), ['mod2']]
2015-09-17 20:05:19,133 ['configure-window', 3, 61, 82, 1220, 832, {'screen': 0}, 0, {}, False, 3, (673, 68), ['mod2']]
2015-09-17 20:05:25,334 ['configure-window', 2, 1200, 556, 499, 316, {'screen': 0}, 0, {}, False, 2, (1318, 549), ['mod1', 'mod2']]
2015-09-17 20:05:25,892 ['configure-window', 2, 1172, 518, 499, 316, {'screen': 0}, 0, {}, False, 2, (1291, 512), ['mod1', 'mod2']]
2015-09-17 20:06:01,744 sending updated screen size to server: 2960x2490 with 1 screens
2015-09-17 20:06:01,744   schadenfreude.local (1044x878 mm - DPI: 72x72)
2015-09-17 20:06:01,744     monitor 1 1680x1050 at 1280x1440 (592x370 mm - DPI: 72x72)
2015-09-17 20:06:01,745     monitor 2 2560x1440 (903x508 mm - DPI: 72x72)
2015-09-17 20:06:01,745 screen size change: will reinit the windows
2015-09-17 20:06:01,745 ['configure-window', 1, 2461, 2170, 499, 316, {'screen': 0}, 0, {}, False, 3, (1892, 1528), ['mod1', 'mod2']]
2015-09-17 20:06:01,745 ['configure-window', 2, 2452, 1958, 499, 316, {'screen': 0}, 0, {}, False, 3, (1892, 1528), ['mod1', 'mod2']]
2015-09-17 20:06:01,745 ['configure-window', 3, 1341, 1522, 1220, 832, {'screen': 0}, 0, {}, False, 3, (1892, 1528), ['mod1', 'mod2']]

The xrandr output seems to be somewhat long columns of numbers apt to clutter the ticket, so I'll just attach a pre- (from before the second display is connected) and a post- (from after, surprisingly enough).

Behavior was the same with 0.15.6 r10632.

Changed 4 years ago by alas

xrandr output, previous to adding second display

Changed 4 years ago by alas

xrandr output, post adding second display

comment:16 Changed 4 years ago by Antoine Martin

Owner: changed from Antoine Martin to alas
Status: reopenednew

Where was monitor 2 supposed to be added relative to monitor 1? Is this supposed to be the same layout as comment:2 with monitor 2 on top?

sending updated screen size to server: 2960x2490 with 1 screens
  schadenfreude.local (1044x878 mm - DPI: 72x72)
    monitor 1 1680x1050 at 1280x1440 (592x370 mm - DPI: 72x72)
    monitor 2 2560x1440 (903x508 mm - DPI: 72x72)

This says monitor 1 is now below and to the right of monitor 2, starting half way across. (it starts at 1280x1440)

The total screen size also looks that way: the width is 2960=1280+1680, the height is 2490=1050+1440. At least that's consistent.

This would definitely cause problems if we later send mouse coordinates that are based on the monitors NOT actually being arranged that way.

I assume the window you use for testing is number 3?
It is reported as being located at 1341x1522, which is exactly where it was before (61x82) if you shift it by 1280x1440.
Which looks right - assuming the monitor size and position detection is correct.

The xrandr output also looks correct.

Does moving or resizing the window fix things?
Does focusing the window in/out help? (there are some known focus issues with GTK on osx)


no UI watcher available, cannot watch for clipboard events

Fixed in r10664.

Last edited 4 years ago by Antoine Martin (previous) (diff)

comment:17 Changed 4 years ago by alas

You were exactly correct, the setup from comment:2. The lower & right-er display is the laptop main display, the upper-er and left-er is an external display that I am connecting/disconnecting. Since I am spawning two xterms as start-childs, I am presuming that window 3 would be the one I'm testing with.

Moving the window does not help, unless I move the window all the way to the other display - at which point the window interacts with the mouse/cursor as expected. Resizing also doesn't help.

Neitherwise does focusing in/out/in/out help... nor mixing in focus changes between various of my three xpra windows (xterms v. firefox v. other xterms).

Double checked all of the above on 0.15.6 r10632 as well.

Just on the off chance there might be something interesting, I'll attach a client log (0.15.6 r10632) with -d geometry,window that includes not only the connection of the new display, but also then moving the window to the new display, at which point the mouse/cursor interactions work again as expected.

Changed 4 years ago by alas

client logs, attach second monitor (layout as in comment:2), then move to new display

comment:18 Changed 4 years ago by alas

Well... turns out that the windows fix is also not-so-fixed, if I reverse the display set up and repeat my tests from before.

Using the setup from comment:6 (with 0.16.0 r10655 win client) - if I connect with only the left-most (tiny) display and only after initiating the session, connect the 4k display on the right, then the mouse clicks are not registered on the windows, resizing doesn't help, and neither does shifting focus in/out.

Interestingly, when I do the test that way, upon connecting the significantly larger display right of the original display, the application windows all "jump" to the newly connected display, in addition to becoming non-responsive to the mouse/cursor.

If I then move the windows back to the tiny right-most display, then the mouse/cursor clicks work as expected.

(Likewise, as long as I'm just connecting/disconnecting the left-most display, the mouse/cursor clicks work as expected no matter how many connections/disconnections occur.)

I grabbed similar client-side logs to the above... -d geometry,window from connection, adding the second display (at which point the windows all "jump" to the added right-most display), clicking on the windows, then moving the windows back to the "original" right-most display (where the clicks again work as expected). Attaching.

comment:19 Changed 4 years ago by Antoine Martin

I don't think this is the source of the problem there is an obvious error in your log, which should have been highlighted in red:

Traceback (most recent call last):
88	  File "xpra\client\ui_client_base.pyc", line 800, in do_process_screen_size_change
89	  File "xpra\client\gtk_base\gtk_client_window_base.pyc", line 861, in send_configure
90	  File "xpra\client\gtk_base\gtk_client_window_base.pyc", line 870, in process_configure_event
91	AssertionError

This one is fixed in r10670.

But I fear that the only solution may be to do a full window re-init (same as when we toggle opengl on or off, or when up/down scaling): r10671.
If that finally fixes, it will need to be backported to v0.15.x

comment:20 Changed 4 years ago by alas

Tested with 0.16.0 r10673 windows client against 0.16.0 r10624 fedroa 21 server.

comment:6 layout, using the left-most monitor as initial, and then adding the right-most (4K) after starting session. Doesn't seem to be behaving any differently.

Were my guesses of -d geometry,window something that I should run again? Would some other flags (client or server side) be of more use? (Do I need a more up to date server? As I was taking notes I realized that's mildly old.)

comment:21 Changed 4 years ago by alas

Owner: changed from alas to Antoine Martin

Assigning to you antoine.

comment:22 Changed 4 years ago by Antoine Martin

Owner: changed from Antoine Martin to alas

I've done extensive testing using a Fedora 22 server running xpra 0.16.0-r11083, with a Windows 7 x86_64 running the same version.
I am testing using a simple xterm and dragging the mouse to see if the mouse click and motion events land in the right place. (until proven otherwise, which applications is used makes no difference at all - and this one is simple). xev is also quite useful for testing as it shows the mouse events in both relative and absolute coordinates.

I have tried adding and removing the extra monitor:

  • to the left and to the right
  • assigning/enabling it via the control panel settings and simply unplugging it and plugging it back in

I have not had a single instance where the mouse events did not get recorded in the correct location.

For debugging (please include both before and after the screen layout changes):

  • find the simplest / easiest test case to reproduce the bug - for example: do I need a 4k monitor? (my win32 system does not have one - I would have to put a new graphics card in it)
  • GTK_info.exe and Native_GUI.exe output, and look for changes that look out of place (setting XPRA_WIN32_DEBUG=1 shows even more information)
  • client output (and turn off #976 "desktop-scaling" to make it easier to parse)
  • try "sync-xvfb" (#988) and/or "xpra screenshot"
Last edited 4 years ago by Antoine Martin (previous) (diff)

comment:23 Changed 4 years ago by alas

This bug is really... bugging me now.

Tried to get repro steps for OSX client (0.16.0 r11077) against a 0.16.0 r11031 fedora 21 server. I failed. It seems to be solved completely on osx.

Trying on windows (0.16.0 r11074 against the same server as above) - I had almost given up, but then I seem to have stumbled across it.

The secret to repro isn't a 4K monitor, it's the need to connect to the xpra session with a primary monitor disconnected - and after the xpra session has been started, then you have to connect the primary monitor. (Yes, you read that correctly, at this point, as long as a user isn't disconnecting & reconnecting a designated primary monitor on a windows client system, I can't find any repro for this bug.)

That said...

  • Start with a two monitor windows system (I used a 1920x1080 & 2560x1440).
  • Disconnect the monitor set as "primary" (on my windows 8.1, it's the one with the strange icon overlay on the display page of the control center (Control Panel\Appearance and Personalization\Display\Screen Resolution)).
  • Start (or reconnect to) an xpra session with an application with buttons of some sort that can be interacted with by the mouse, besides just general window focus (gedit works well, it has a button to open new tabs).
  • Re-connect the "primary" monitor (the applications may jump around the window upon re-init/re-draw).
  • Use the mouse to try to click on a button of the application.

GTK_info.exe doesn't have anything that looks glaringly different between to before and after of re-connecting the primary monitor (though, oddly, in both cases there's just a "screen[0]" and in both case the "screen[0].primary_monitor" value is "0" (posting the both, in case there's something... ran everything with XPRA_WIN32_DEBUG=1)).

  • Initial GTK_info.exe, only secondary display connected:
    GTK Version:
    * cairo                                            : 1.8.10
    * gdk                                              : 2.24.0
    * glib                                             : 2.28.8
    * gobject                                          : 2.28.3
    * gtk                                              : 2.24.10
    * pango                                            : 1.29.4
    * pyglib                                           : 2.28.3
    * pygtk                                            : 2.24.0
    Display:
    * clipboard_persistence                            : False
    * composite                                        : False
    * cursor_alpha                                     : True
    * cursor_color                                     : True
    * default_cursor_size                              : 32
    * devices                                          : 1
    * devices[0]                                       : Core Pointer
    * maximal_cursor_size                              : (32, 32)
    * name                                             : 1\WinSta0\Default
    * pointer                                          : (1026, 813)
    * pointer_is_grabbed                               : False
    * screen[0].height                                 : 1080
    * screen[0].height_mm                              : 285
    * screen[0].monitor[0].height                      : 1080
    * screen[0].monitor[0].height_mm                   : 340
    * screen[0].monitor[0].plug_name                   : \\.\DISPLAY1
    * screen[0].monitor[0].width                       : 1920
    * screen[0].monitor[0].width_mm                    : 600
    * screen[0].monitor[0].x                           : 0
    * screen[0].monitor[0].y                           : 0
    * screen[0].monitors                               : 1
    * screen[0].name                                   : 1\WinSta0\Default
    * screen[0].primary_monitor                        : 0
    * screen[0].resolution                             : -1
    * screen[0].rgb.bits_per_rgb                       : 42
    * screen[0].rgb.byte_order                         : LSB
    * screen[0].rgb.colormap_size                      : 256
    * screen[0].rgb.depth                              : 24
    * screen[0].rgb.visual_type                        : TRUE_COLOR
    * screen[0].system_visual.bits_per_rgb             : 42
    * screen[0].system_visual.byte_order               : LSB
    * screen[0].system_visual.colormap_size            : 256
    * screen[0].system_visual.depth                    : 24
    * screen[0].system_visual.visual_type              : TRUE_COLOR
    * screen[0].visuals                                : 1
    * screen[0].width                                  : 1920
    * screen[0].width_mm                               : 508
    * screens                                          : 1
    * selection_notification                           : True
    * shapes                                           : True
    
  • After re-connecting primary display:
    GTK Version:
    * cairo                                            : 1.8.10
    * gdk                                              : 2.24.0
    * glib                                             : 2.28.8
    * gobject                                          : 2.28.3
    * gtk                                              : 2.24.10
    * pango                                            : 1.29.4
    * pyglib                                           : 2.28.3
    * pygtk                                            : 2.24.0
    Display:
    * clipboard_persistence                            : False
    * composite                                        : False
    * cursor_alpha                                     : True
    * cursor_color                                     : True
    * default_cursor_size                              : 32
    * devices                                          : 1
    * devices[0]                                       : Core Pointer
    * maximal_cursor_size                              : (32, 32)
    * name                                             : 1\WinSta0\Default
    * pointer                                          : (3201, 875)
    * pointer_is_grabbed                               : False
    * screen[0].height                                 : 1440
    * screen[0].height_mm                              : 381
    * screen[0].monitor[0].height                      : 1440
    * screen[0].monitor[0].height_mm                   : 336
    * screen[0].monitor[0].plug_name                   : \\.\DISPLAY1
    * screen[0].monitor[0].width                       : 2560
    * screen[0].monitor[0].width_mm                    : 597
    * screen[0].monitor[0].x                           : 1920
    * screen[0].monitor[0].y                           : 0
    * screen[0].monitor[1].height                      : 1080
    * screen[0].monitor[1].height_mm                   : 340
    * screen[0].monitor[1].plug_name                   : \\.\DISPLAY2
    * screen[0].monitor[1].width                       : 1920
    * screen[0].monitor[1].width_mm                    : 600
    * screen[0].monitor[1].x                           : 0
    * screen[0].monitor[1].y                           : 0
    * screen[0].monitors                               : 2
    * screen[0].name                                   : 1\WinSta0\Default
    * screen[0].primary_monitor                        : 0
    * screen[0].resolution                             : -1
    * screen[0].rgb.bits_per_rgb                       : 42
    * screen[0].rgb.byte_order                         : LSB
    * screen[0].rgb.colormap_size                      : 256
    * screen[0].rgb.depth                              : 24
    * screen[0].rgb.visual_type                        : TRUE_COLOR
    * screen[0].system_visual.bits_per_rgb             : 42
    * screen[0].system_visual.byte_order               : LSB
    * screen[0].system_visual.colormap_size            : 256
    * screen[0].system_visual.depth                    : 24
    * screen[0].system_visual.visual_type              : TRUE_COLOR
    * screen[0].visuals                                : 1
    * screen[0].width                                  : 4480
    * screen[0].width_mm                               : 1185
    * screens                                          : 1
    * selection_notification                           : True
    * shapes                                           : True
    

NativeGUI_info.exe looks virtually the same before and after, except for a difference of 1 in vertical-refresh, and the differences in the workareas:

  • With primary display disconnected:
    * antialias.contrast               : 1200
    * antialias.enabled                : True
    * antialias.hinting                : True
    * antialias.orientation            : RGB
    * antialias.type                   : ClearType
    * cursor_size                      : 32
    * desktop_names                    : []
    * desktops                         : 1
    * double_click.distance            : (4, 4)
    * double_click.time                : 500
    * dpi.x                            : 96
    * dpi.y                            : 96
    * fixed_cursor_size                : (32, 32)
    * icon_size                        : 16
    * native_notifiers                 : ['Win32_Notifier']
    * native_system_trays              : ['Win32Tray']
    * native_tray_menu_helpers         : []
    * native_trays                     : ['Win32Tray']
    * system_bell                      : system_bell
    * vertical-refresh                 : 60
    * window_frame.border              : 1
    * window_frame.caption             : 23
    * window_frame.fixed               : (3, 3)
    * window_frame.frame               : (8, 8, 31, 8)
    * window_frame.menu-bar            : 20
    * window_frame.minimum             : (140, 39)
    * window_frame.normal              : (8, 8)
    * window_frame.offset              : (8, 31)
    * workarea                         : (0, 0, 1920, 1040)
    * workareas                        : [(0, 0, 1920, 1040)]
    
  • After re-connecting primary display:
* antialias.contrast               : 1200
* antialias.enabled                : True
* antialias.hinting                : True
* antialias.orientation            : RGB
* antialias.type                   : ClearType
* cursor_size                      : 32
* desktop_names                    : []
* desktops                         : 1
* double_click.distance            : (4, 4)
* double_click.time                : 500
* dpi.x                            : 96
* dpi.y                            : 96
* fixed_cursor_size                : (32, 32)
* icon_size                        : 16
* native_notifiers                 : ['Win32_Notifier']
* native_system_trays              : ['Win32Tray']
* native_tray_menu_helpers         : []
* native_trays                     : ['Win32Tray']
* system_bell                      : system_bell
* vertical-refresh                 : 59
* window_frame.border              : 1
* window_frame.caption             : 23
* window_frame.fixed               : (3, 3)
* window_frame.frame               : (8, 8, 31, 8)
* window_frame.menu-bar            : 20
* window_frame.minimum             : (140, 39)
* window_frame.normal              : (8, 8)
* window_frame.offset              : (8, 31)
* workarea                         : (0, 0, 4480, 1400)
* workareas                        : [(0, 0, 2560, 1400), (0, 0, 1920, 1040)]
  • And, the client input which, unsurprisingly, I don't see anything glaring in:
C:\Program Files (x86)\Xpra>xpra_cmd.exe attach tcp:10.0.32.136:2200 --desktop-scaling=off
2015-10-30 14:10:36,256 SetProcessDPIAware()=1
2015-10-30 14:10:36,256 SetProcessDPIAwareness(1) failed: function 'SetProcessDPIAwareness' not found
2015-10-30 14:10:36,256  (not available on MS Windows before version 8
2015-10-30 14:10:36,334 Xpra gtk2 client version 0.16.0-r11074
2015-10-30 14:10:36,334  running on Microsoft Windows 8
2015-10-30 14:10:37,164 OpenGL_accelerate module loaded
2015-10-30 14:10:37,178 OpenGL enabled with Intel(R) HD Graphics 4000
2015-10-30 14:10:37,256 LoadImage(C:\Program Files (x86)\Xpra\icons\xpra.ico) using image type=ICON
2015-10-30 14:10:37,256 LoadImage(C:\Program Files (x86)\Xpra\icons\xpra.ico)=-739303107
2015-10-30 14:10:37,273 calling win32api.SetConsoleCtrlHandler(<bound method ClientExtras.handle_console_event of <xpra.platform.win32.gui.ClientExtras object at 0x0
489F710>>, True)
2015-10-30 14:10:37,273 detect_win32_session_events() hwnd=4720846
2015-10-30 14:10:37,273 Win32EventListener create with hwnd=4720846
2015-10-30 14:10:37,273  detected keyboard: layout=us
2015-10-30 14:10:37,273 get_workareas() GetMonitorInfo(<PyHANDLE:1909639>)={'Device': '\\\\.\\DISPLAY1', 'Work': (0, 0, 1920, 1040), 'Flags': 1, 'Monitor': (0, 0, 19
20, 1080)}
2015-10-30 14:10:37,273 get_workareas()=[(0, 0, 1920, 1040)]
2015-10-30 14:10:37,273 get_workarea() absolute total monitor area: (0, 0, 1920, 1080)
2015-10-30 14:10:37,273  total monitor dimensions: (1920, 1080)
2015-10-30 14:10:37,273  desktop size is 1920x1080 with 1 screen(s):
2015-10-30 14:10:37,273   Default (508x285 mm - DPI: 96x96) workarea: 1920x1040
2015-10-30 14:10:37,273     DISPLAY1 (600x340 mm - DPI: 81x80)
2015-10-30 14:10:37,273 get_vrefresh()=60
2015-10-30 14:10:37,289 callbacks for event WM_DWMNCRENDERINGCHANGED: None
2015-10-30 14:10:37,289 WM_DWMNCRENDERINGCHANGED: 1 / 0
2015-10-30 14:10:37,460 Xpra X11 server version 0.16.0-r11031
2015-10-30 14:10:37,460  running on Linux Fedora 21 Twenty One
2015-10-30 14:10:37,476 Attached to tcp:10.0.32.136:2200 (press Control-C to detach)

2015-10-30 14:10:37,476 LoadImage(C:\Program Files (x86)\Xpra\icons\xpra.ico) using image type=ICON
2015-10-30 14:10:37,476 LoadImage(C:\Program Files (x86)\Xpra\icons\xpra.ico)=-1005051397
2015-10-30 14:10:37,476 do_set_icon(-1005051397)
2015-10-30 14:10:37,492 add_window_hooks(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None))) WINDOW_HOOKS=True, GROUP_LEADER=True, UNDECORATED_STYLE=True,
 MAX_SIZE_HINT=True, GEOMETRY=True
2015-10-30 14:10:37,492 add_window_hooks(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None))) gdk window=<gtk.gdk.Window object at 0x48d5c60 (GdkWindow at
0x38b2370)>, hwnd=0x3b010c
2015-10-30 14:10:37,492 win32 hooks: propsys=<module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:10:37,492 hooked group leader override using <module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:10:37,492 fixup_window_style() unchanged style 0x6cf0000 on window 0x3b010c
2015-10-30 14:10:37,492 Win32Hooks: window frame size is 8x8
2015-10-30 14:10:37,492 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x048E5170>>
}
2015-10-30 14:10:37,506 add_window_hooks(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None))) added hooks for hwnd 0x3b010c: <xpra.platform.win32.window_ho
oks.Win32Hooks object at 0x048E5170>
2015-10-30 14:10:37,506 apply_maxsize_hints(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:10:37,506 apply_geometry_hints({'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width
': 25, 'base_height': 4})
2015-10-30 14:10:37,506 apply_maxsize_hints(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:10:37,506 win32 hooks: set_group(0x62088e)
2015-10-30 14:10:37,506 win32 hooks: calling <built-in method SetValue of PyIPropertyStore object at 0x01F40804>((IID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'), 5),
<PyPROPVARIANT object at 0x0470F320>)
2015-10-30 14:10:37,506 callbacks for event WM_ACTIVATEAPP: [<bound method ClientExtras.activateapp of <xpra.platform.win32.gui.ClientExtras object at 0x0489F710>>]
2015-10-30 14:10:37,506 WM_ACTIVATEAPP: 1/5832 client=gtk2.client
2015-10-30 14:10:37,506 fixup_window_style() unchanged style 0x6cf0000 on window 0x3b010c
2015-10-30 14:10:37,523 add_window_hooks(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None))) WINDOW_HOOKS=True, GROUP_LEADER=True, UNDECORATED_STYLE=True,
 MAX_SIZE_HINT=True, GEOMETRY=True
2015-10-30 14:10:37,523 add_window_hooks(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None))) gdk window=<gtk.gdk.Window object at 0x48e85d0 (GdkWindow at
0x38b24d0)>, hwnd=0x600b36
2015-10-30 14:10:37,523 win32 hooks: propsys=<module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:10:37,523 hooked group leader override using <module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:10:37,523 fixup_window_style() unchanged style 0x6cf0000 on window 0x600b36
2015-10-30 14:10:37,523 Win32Hooks: window frame size is 8x8
2015-10-30 14:10:37,523 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x04883CD0>>
}
2015-10-30 14:10:37,523 add_window_hooks(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None))) added hooks for hwnd 0x600b36: <xpra.platform.win32.window_ho
oks.Win32Hooks object at 0x04883CD0>
2015-10-30 14:10:37,523 apply_maxsize_hints(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:10:37,523 apply_geometry_hints({'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width
': 25, 'base_height': 4})
2015-10-30 14:10:37,523 apply_maxsize_hints(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:10:37,523 win32 hooks: set_group(0x62088e)
2015-10-30 14:10:37,523 win32 hooks: calling <built-in method SetValue of PyIPropertyStore object at 0x01F40804>((IID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'), 5),
<PyPROPVARIANT object at 0x0470F460>)
2015-10-30 14:10:37,539 add_window_hooks(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None))) WINDOW_HOOKS=True, GROUP_LEADER=True, UNDECORATED_STYLE=Tru
e, MAX_SIZE_HINT=True, GEOMETRY=True
2015-10-30 14:10:37,539 add_window_hooks(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None))) gdk window=<gtk.gdk.Window object at 0x48e8bc0 (GdkWindow a
t 0x38b26e0)>, hwnd=0x15e0942
2015-10-30 14:10:37,539 win32 hooks: propsys=<module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:10:37,539 hooked group leader override using <module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:10:37,539 fixup_window_style() unchanged style 0x6cf0000 on window 0x15e0942
2015-10-30 14:10:37,539 Win32Hooks: window frame size is 8x8
2015-10-30 14:10:37,539 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x048E5210>>
}
2015-10-30 14:10:37,539 add_window_hooks(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None))) added hooks for hwnd 0x15e0942: <xpra.platform.win32.window
_hooks.Win32Hooks object at 0x048E5210>
2015-10-30 14:10:37,539 apply_maxsize_hints(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None)), {'max_width': 4096, 'min_height': 199, 'base_width': 0,
'max_height': 4096, 'min_width': 581, 'base_height': 0}) found max: 4096x4096
2015-10-30 14:10:37,539 apply_geometry_hints({'max_width': 4096, 'min_height': 199, 'base_width': 0, 'max_height': 4096, 'min_width': 581, 'base_height': 0})
2015-10-30 14:10:37,539 apply_maxsize_hints(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None)), {'max_width': 4096, 'min_height': 199, 'base_width': 0,
'max_height': 4096, 'min_width': 581, 'base_height': 0}) found max: 4096x4096
2015-10-30 14:10:37,539 win32 hooks: set_group(0x9b00e2)
2015-10-30 14:10:37,539 win32 hooks: calling <built-in method SetValue of PyIPropertyStore object at 0x01F406E4>((IID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'), 5),
<PyPROPVARIANT object at 0x0470F230>)
2015-10-30 14:10:37,553 LoadImage(C:\Program Files (x86)\Xpra\icons\clipboard.ico) using image type=ICON
2015-10-30 14:10:37,553 LoadImage(C:\Program Files (x86)\Xpra\icons\clipboard.ico)=-1506472631
2015-10-30 14:10:37,553 do_set_icon(-1506472631)
2015-10-30 14:10:37,553 after_window_state_updated()
2015-10-30 14:10:37,553 fixup_window_style() unchanged style 0x16cf0000 on window 0x3b010c
2015-10-30 14:10:37,569 after_window_state_updated()
2015-10-30 14:10:37,569 fixup_window_style() unchanged style 0x16cf0000 on window 0x600b36
2015-10-30 14:10:37,569 after_window_state_updated()
2015-10-30 14:10:37,569 fixup_window_style() unchanged style 0x16cf0000 on window 0x15e0942
2015-10-30 14:10:37,694 LoadImage(C:\Program Files (x86)\Xpra\icons\xpra.ico) using image type=ICON
2015-10-30 14:10:37,694 LoadImage(C:\Program Files (x86)\Xpra\icons\xpra.ico)=-1029037519
2015-10-30 14:10:37,694 do_set_icon(-1029037519)
2015-10-30 14:10:38,444 sound-sink using audio codec: MPEG 1 Audio, Layer 3 (MP3)
2015-10-30 14:11:12,697 callbacks for event WM_DISPLAYCHANGE: None
2015-10-30 14:11:12,697 WM_DISPLAYCHANGE: 32 / 94374400
2015-10-30 14:11:12,713 on_getminmaxinfo(22939970, 36, 0, 1633064) max_size=(4096, 4096), frame=8x8, minmaxinfo size=4112x4135
2015-10-30 14:11:12,713 on_getminmaxinfo(6294326, 36, 0, 1633064) max_size=(4093, 4086), frame=8x8, minmaxinfo size=4109x4125
2015-10-30 14:11:12,713 on_getminmaxinfo(3866892, 36, 0, 1633064) max_size=(4093, 4086), frame=8x8, minmaxinfo size=4109x4125
2015-10-30 14:11:12,713 callbacks for event WM_WINDOWPOSCHANGING: None
2015-10-30 14:11:12,713 WM_WINDOWPOSCHANGING: 0 / 1635832
2015-10-30 14:11:12,747 callbacks for event WM_GETMINMAXINFO: None
2015-10-30 14:11:12,747 WM_GETMINMAXINFO: 0 / 1633728
2015-10-30 14:11:12,750 callbacks for event WM_WINDOWPOSCHANGED: None
2015-10-30 14:11:12,750 WM_WINDOWPOSCHANGED: 0 / 1635832
2015-10-30 14:11:12,752 callbacks for event WM_MOVE: [<bound method ClientExtras.wm_move of <xpra.platform.win32.gui.ClientExtras object at 0x0489F710>>]
2015-10-30 14:11:12,753 WM_MOVE: 0/10420360 client=gtk2.client
2015-10-30 14:11:13,526 get_workareas() GetMonitorInfo(<PyHANDLE:155067071>)={'Device': '\\\\.\\DISPLAY1', 'Work': (0, 0, 2560, 1440), 'Flags': 1, 'Monitor': (0, 0,
2560, 1440)}
2015-10-30 14:11:13,526 get_workareas() GetMonitorInfo(<PyHANDLE:1975175>)={'Device': '\\\\.\\DISPLAY2', 'Work': (-1920, 0, 0, 1080), 'Flags': 0, 'Monitor': (-1920,
0, 0, 1080)}
2015-10-30 14:11:13,526 get_workareas()=[(0, 0, 2560, 1440), (0, 0, 1920, 1080)]
2015-10-30 14:11:13,526 get_workarea() absolute total monitor area: (-1920, 0, 2560, 1440)
2015-10-30 14:11:13,526  total monitor dimensions: (4480, 1440)
2015-10-30 14:11:13,542 sending updated screen size to server: 4480x1440 with 1 screens
2015-10-30 14:11:13,542   Default (1185x381 mm - DPI: 96x96)
2015-10-30 14:11:13,558     DISPLAY1 2560x1440 at 1920x0 (597x336 mm - DPI: 108x108) workarea: 2560x1440
2015-10-30 14:11:13,558     DISPLAY2 1920x1080 (600x340 mm - DPI: 81x80) workarea: 1920x1080
2015-10-30 14:11:13,558 screen size change: will reinit the windows
2015-10-30 14:11:13,605 remove_window_hooks(GLClientWindow(1 : None)) found <xpra.platform.win32.window_hooks.Win32Hooks object at 0x048E5170>
2015-10-30 14:11:13,605 cleanup()
2015-10-30 14:11:13,704 add_window_hooks(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None))) WINDOW_HOOKS=True, GROUP_LEADER=True, UNDECORATED_STYLE=True,
 MAX_SIZE_HINT=True, GEOMETRY=True
2015-10-30 14:11:13,720 add_window_hooks(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None))) gdk window=<gtk.gdk.Window object at 0x49088a0 (GdkWindow at
0x38b28f0)>, hwnd=0x3c010c
2015-10-30 14:11:13,720 win32 hooks: propsys=<module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:11:13,720 hooked group leader override using <module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:11:13,736 fixup_window_style() unchanged style 0x6cf0000 on window 0x3c010c
2015-10-30 14:11:13,736 Win32Hooks: window frame size is 8x8
2015-10-30 14:11:13,736 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x047A20F0>>
}
2015-10-30 14:11:13,736 add_window_hooks(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None))) added hooks for hwnd 0x3c010c: <xpra.platform.win32.window_ho
oks.Win32Hooks object at 0x047A20F0>
2015-10-30 14:11:13,736 apply_maxsize_hints(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:11:13,736 apply_geometry_hints({'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width
': 25, 'base_height': 4})
2015-10-30 14:11:13,736 apply_maxsize_hints(GLClientWindow(1 : gtk2.GLWindowBacking(1, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:11:13,736 win32 hooks: set_group(0x62088e)
2015-10-30 14:11:13,736 win32 hooks: calling <built-in method SetValue of PyIPropertyStore object at 0x01F40B04>((IID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'), 5),
<PyPROPVARIANT object at 0x0470F0C8>)
2015-10-30 14:11:13,815 remove_window_hooks(GLClientWindow(2 : None)) found <xpra.platform.win32.window_hooks.Win32Hooks object at 0x04883CD0>
2015-10-30 14:11:13,815 cleanup()
2015-10-30 14:11:13,877 add_window_hooks(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None))) WINDOW_HOOKS=True, GROUP_LEADER=True, UNDECORATED_STYLE=True,
 MAX_SIZE_HINT=True, GEOMETRY=True
2015-10-30 14:11:13,877 add_window_hooks(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None))) gdk window=<gtk.gdk.Window object at 0x48fa648 (GdkWindow at
0x38b2a50)>, hwnd=0x610b36
2015-10-30 14:11:13,877 win32 hooks: propsys=<module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:11:13,877 hooked group leader override using <module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:11:13,877 fixup_window_style() unchanged style 0x6cf0000 on window 0x610b36
2015-10-30 14:11:13,877 Win32Hooks: window frame size is 8x8
2015-10-30 14:11:13,877 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x048E5290>>
}
2015-10-30 14:11:13,877 add_window_hooks(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None))) added hooks for hwnd 0x610b36: <xpra.platform.win32.window_ho
oks.Win32Hooks object at 0x048E5290>
2015-10-30 14:11:13,892 apply_maxsize_hints(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:11:13,892 apply_geometry_hints({'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width
': 25, 'base_height': 4})
2015-10-30 14:11:13,892 apply_maxsize_hints(GLClientWindow(2 : gtk2.GLWindowBacking(2, (499, 316), None)), {'width_inc': 6, 'height_inc': 13, 'max_width': 4093, 'min
_height': 17, 'base_width': 19, 'max_height': 4086, 'min_width': 25, 'base_height': 4}) found max: 4093x4086
2015-10-30 14:11:13,892 win32 hooks: set_group(0x62088e)
2015-10-30 14:11:13,892 win32 hooks: calling <built-in method SetValue of PyIPropertyStore object at 0x01F408F4>((IID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'), 5),
<PyPROPVARIANT object at 0x0470F0A0>)
2015-10-30 14:11:13,990 remove_window_hooks(GLClientWindow(22 : None)) found <xpra.platform.win32.window_hooks.Win32Hooks object at 0x048E5210>
2015-10-30 14:11:13,990 cleanup()
2015-10-30 14:11:14,038 add_window_hooks(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None))) WINDOW_HOOKS=True, GROUP_LEADER=True, UNDECORATED_STYLE=Tru
e, MAX_SIZE_HINT=True, GEOMETRY=True
2015-10-30 14:11:14,038 add_window_hooks(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None))) gdk window=<gtk.gdk.Window object at 0x4908bc0 (GdkWindow a
t 0x38b2bb0)>, hwnd=0xad0882
2015-10-30 14:11:14,053 win32 hooks: propsys=<module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:11:14,053 hooked group leader override using <module 'win32com.propsys.propsys' from 'C:\Program Files (x86)\Xpra\win32com.propsys.propsys.pyd'>
2015-10-30 14:11:14,053 fixup_window_style() unchanged style 0x6cf0000 on window 0xad0882
2015-10-30 14:11:14,053 Win32Hooks: window frame size is 8x8
2015-10-30 14:11:14,069 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x04904550>>
}
2015-10-30 14:11:14,069 add_window_hooks(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None))) added hooks for hwnd 0xad0882: <xpra.platform.win32.window_
hooks.Win32Hooks object at 0x04904550>
2015-10-30 14:11:14,069 apply_maxsize_hints(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None)), {'max_width': 4096, 'min_height': 199, 'base_width': 0,
'max_height': 4096, 'min_width': 581, 'base_height': 0}) found max: 4096x4096
2015-10-30 14:11:14,085 apply_geometry_hints({'max_width': 4096, 'min_height': 199, 'base_width': 0, 'max_height': 4096, 'min_width': 581, 'base_height': 0})
2015-10-30 14:11:14,085 apply_maxsize_hints(GLClientWindow(22 : gtk2.GLWindowBacking(22, (900, 700), None)), {'max_width': 4096, 'min_height': 199, 'base_width': 0,
'max_height': 4096, 'min_width': 581, 'base_height': 0}) found max: 4096x4096
2015-10-30 14:11:14,101 win32 hooks: set_group(0x9b00e2)
2015-10-30 14:11:14,101 win32 hooks: calling <built-in method SetValue of PyIPropertyStore object at 0x01F40B94>((IID('{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}'), 5),
<PyPROPVARIANT object at 0x0470F078>)
2015-10-30 14:11:14,190 after_window_state_updated()
2015-10-30 14:11:14,190 fixup_window_style() unchanged style 0x16cf0000 on window 0x3c010c
2015-10-30 14:11:14,237 after_window_state_updated()
2015-10-30 14:11:14,237 fixup_window_style() unchanged style 0x16cf0000 on window 0x610b36
2015-10-30 14:11:14,253 after_window_state_updated()
2015-10-30 14:11:14,269 fixup_window_style() unchanged style 0x16cf0000 on window 0xad0882
2015-10-30 14:11:14,269 callbacks for event WM_WINDOWPOSCHANGING: None
2015-10-30 14:11:14,269 WM_WINDOWPOSCHANGING: 0 / 1635832
2015-10-30 14:11:14,285 callbacks for event WM_GETMINMAXINFO: None
2015-10-30 14:11:14,285 WM_GETMINMAXINFO: 0 / 1633728
2015-10-30 14:11:14,285 callbacks for event WM_WININICHANGE: None
2015-10-30 14:11:14,285 WM_WININICHANGE: 24 / 582872
2015-10-30 14:11:14,315 callbacks for event WM_WINDOWPOSCHANGING: None
2015-10-30 14:11:14,315 WM_WINDOWPOSCHANGING: 0 / 1635832
2015-10-30 14:11:14,315 callbacks for event WM_GETMINMAXINFO: None
2015-10-30 14:11:14,315 WM_GETMINMAXINFO: 0 / 1633728
2015-10-30 14:11:14,315 callbacks for event WM_WININICHANGE: None
2015-10-30 14:11:14,332 WM_WININICHANGE: 47 / 0
2015-10-30 14:11:14,339 callbacks for event WM_WININICHANGE: None
2015-10-30 14:11:14,341 WM_WININICHANGE: 47 / 0
2015-10-30 14:11:14,344 on_getminmaxinfo(11339906, 36, 0, 1633064) max_size=(4096, 4096), frame=8x8, minmaxinfo size=4112x4135
2015-10-30 14:11:14,346 on_getminmaxinfo(6359862, 36, 0, 1633064) max_size=(4093, 4086), frame=8x8, minmaxinfo size=4109x4125
2015-10-30 14:11:14,351 on_getminmaxinfo(3932428, 36, 0, 1633064) max_size=(4093, 4086), frame=8x8, minmaxinfo size=4109x4125
2015-10-30 14:11:14,352 callbacks for event WM_WINDOWPOSCHANGING: None
2015-10-30 14:11:14,354 WM_WINDOWPOSCHANGING: 0 / 1635832
2015-10-30 14:11:14,365 callbacks for event WM_GETMINMAXINFO: None
2015-10-30 14:11:14,368 WM_GETMINMAXINFO: 0 / 1633728
2015-10-30 14:11:14,385 callbacks for event WM_WININICHANGE: None
2015-10-30 14:11:14,385 WM_WININICHANGE: 47 / 0
2015-10-30 14:11:14,385 on_getminmaxinfo(11339906, 36, 0, 1633064) max_size=(4096, 4096), frame=8x8, minmaxinfo size=4112x4135
2015-10-30 14:11:14,385 on_getminmaxinfo(6359862, 36, 0, 1633064) max_size=(4093, 4086), frame=8x8, minmaxinfo size=4109x4125
2015-10-30 14:11:14,401 on_getminmaxinfo(3932428, 36, 0, 1633064) max_size=(4093, 4086), frame=8x8, minmaxinfo size=4109x4125
2015-10-30 14:11:14,401 callbacks for event WM_WINDOWPOSCHANGING: None
2015-10-30 14:11:14,417 WM_WINDOWPOSCHANGING: 0 / 1635832
2015-10-30 14:11:14,417 callbacks for event WM_GETMINMAXINFO: None
2015-10-30 14:11:14,417 WM_GETMINMAXINFO: 0 / 1633728
2015-10-30 14:11:14,433 callbacks for event WM_WININICHANGE: None
2015-10-30 14:11:14,433 WM_WININICHANGE: 47 / 0
2015-10-30 14:11:14,448 callbacks for event WM_WININICHANGE: None
2015-10-30 14:11:14,448 WM_WININICHANGE: 24 / 582872
2015-10-30 14:11:14,871 callbacks for event WM_DEVICECHANGE: None
2015-10-30 14:11:14,871 WM_DEVICECHANGE: 7 / 0
2015-10-30 14:11:14,871 callbacks for event WM_DEVICECHANGE: None
2015-10-30 14:11:14,871 WM_DEVICECHANGE: 7 / 0
2015-10-30 14:11:15,105 callbacks for event WM_DEVICECHANGE: None
2015-10-30 14:11:15,121 WM_DEVICECHANGE: 7 / 0
2015-10-30 14:11:30,920 callbacks for event WM_ACTIVATEAPP: [<bound method ClientExtras.activateapp of <xpra.platform.win32.gui.ClientExtras object at 0x0489F710>>]
2015-10-30 14:11:30,920 WM_ACTIVATEAPP: 0/1604 client=gtk2.client
2015-10-30 14:11:30,920 fixup_window_style() unchanged style 0x16cf0000 on window 0x3c010c
2015-10-30 14:11:30,920 fixup_window_style() unchanged style 0x16cf0000 on window 0x610b36
2015-10-30 14:11:30,920 fixup_window_style() unchanged style 0x16cf0000 on window 0xad0882

I'll attach the screenshot to show the displays' desktops as well as a screenshot of the display layout (the display on the left in the screenshot is the one on the left in the layout screenshot, i.e. display 2... and the one on the right is the primary as indicated by the strange icon in the layout screenshot).

Last edited 4 years ago by Antoine Martin (previous) (diff)

Changed 4 years ago by alas

screenshot of entire two display desktop, left is secondary monitor (#2)

Changed 4 years ago by alas

control panel's notion of layout, left is left in screenshot, right is primary

comment:24 Changed 4 years ago by Antoine Martin

The secret to repro isn't a 4K monitor, it's the need to connect to the xpra session with a primary monitor disconnected - and after the xpra session has been started, then you have to connect the primary monitor. (Yes, you read that correctly, at this point, as long as a user isn't disconnecting & reconnecting a designated primary monitor on a windows client system, I can't find any repro for this bug.)


Still no problem here with win7. Maybe this issue is Windows 8 / 8.1 specific?
r11106 makes some minor improvements to the debug output.

Please see comment:22

  • try "sync-xvfb" and/or "xpra screenshot"
  • why use gedit? using xterm is a lot easier: double click selects the text under the cursor - and try with a single xterm and nothing else
  • does xev show anything of interest? Does it even trigger events when moving the mouse around?
  • run xpra info | grep geometry=, does it look like the window is in the correct location?
  • does toggling opengl off then on again fix things?
  • does running the client with XPRA_WIN32_WINDOW_HOOKS=0 help?

The only events we see after re-initializing the windows are:

  • WM_DEVICECHANGE with an identifier value of DBT_DEVNODES_CHANGED - toggling opengl will tell us if we are re-initializing the windows too early
  • WM_WININICHANGE - unlikely to be directly relevant here, I don't see any such events here unless I modify system settings myself
  • WM_WINDOWPOSCHANGING is normally followed by a WM_WINDOWPOSCHANGED - so maybe the window move is intercepted somewhere, preventing is from seeing the new window position? (see disabling window hooks above)
  • WM_GETMINMAXINFO which we use to handle to implement #263 on win32, though in this case we also receive one in our generic event handler (as above for window hooks)
  • WM_ACTIVATEAPP which we use for managing focus and fixing the window style - unlikely to be relevant

comment:25 Changed 4 years ago by Antoine Martin

Owner: changed from alas to Antoine Martin
Status: newassigned

Spoke too soon, I can reproduce it now if the primary monitor starts disconnected and configured to appear on the right of the other monitor only. (which was mentioned previously in this ticket, but not in the steps given in comment:23)


  • enabling "sync-xvfb" and using a screenshot tool shows the window in the correct location, "xpra screenshot" trims the unused desktop space so it is a lot less useful for debugging this issue
  • as expected, an xterm is sufficient to test for the bug
  • xev shows no motion or click events, even if it is started and mapped on to the screen after we re-connect the session! (despite having the correct geometry server side)
  • the window geometry does get adjusted to the new location with my ~1080p displays:
    $ xpra info | grep -e "window.*\.geometry="
    window[1].geometry=(1957, 785, 541, 238)
    
  • mouse events are captured and sent to the server using the correct position:
    move_pointer(1, (2143, 818))
    
  • but the X11 server sees the motion events on the world window 0x40001e instead of the client window or its corral window?:
    motion event: <X11:MotionNotify {'delivered_to': '0x40001e', 'send_event': 0, 'subwindow': None, \
        'x_root': 1919, 'type': 6, 'window': '0x40001e', 'is_hint': 0, \
        'y_root': 818, 'state': 16, 'time': 12089278L, \
        'y': 818, 'x': 1919, 'serial': '0xa0a8', 'root': '0x44', 'display': ':10', 'same_screen': 1}>
    
  • toggling opengl does not help
  • running with sharing enabled, the other client can interact with the window just fine, wherever it is.. and moving it around allows it to be used by the messed up client if it then moves it a little - or you can even move the window on the secondary client to exactly where it is in the primary client, and then clicks will work!
Last edited 4 years ago by Antoine Martin (previous) (diff)

Changed 4 years ago by Antoine Martin

Attachment: clamp-window-position.patch added

prevents windows from being moved off-screen

comment:26 Changed 4 years ago by Antoine Martin

Owner: changed from Antoine Martin to alas
Status: assignednew

What seems be happening here is that the window is moved to its new location (shifted to the right as the new monitor is inserted to the left) before we have had a chance to update the virtual display's size. (which takes a while, and we delay it a little bit more to ensure we only do it only once, as various things get updated in turns, all triggering a new message).

The window ends up being off-screen and moving it back on-screen later is not enough to make it interactive again - maybe something gets wedged in GTK?

r11114 fixes that for trunk (r11115 should not be strictly necessary) by clamping the window to the maximum size of the root window (the current size of the virtual display). Backported to v0.15.x in r11116. (may backport to v0.14.x later)

A more elegant solution would be to delay all window configuration events until we know that the server's virtual screen is up to date, but this would be much harder to implement.

@afarr: please test both branches and let me know if you can still break it.

comment:27 Changed 4 years ago by alas

Tested with 0.16.0 r11118, against a fedora 21 0.16.0 r11118, and it worked despite my best efforts (to be fair, the doubtful cases have become rather narrow).

Will have to bother mr. smo for a 0.15 client...

comment:28 Changed 4 years ago by alas

Hmm.. tested with windows 0.15.8 r11122 against 0.15.8 r11099 fedora 21 server... and alas, the fix didn't take.

Disconnected my primary display, started the session, connected the primary display. Neither a gedit nor a chromium window started from an xterm before the connection of the primary display, nor any started after the connection was at all responsive to mouse clicks. I couldn't resize or move or even minimize in an attempt to make the window responsive.

The 0.15.8 r11122 osx client does work as expected/hoped though - even when disconnecting the display that the menu bar is assigned to (apparently the osx equivalent to setting a "primary" display).


Digging in with the windows 0.15.8 client a bit...

  • Toggling opengl on/off has no effect on the mouse receptiveness of the windows.
  • xev shows me a black rectangle in the top left of the window (which is resizable, unlike most once this is triggered)... clicking mouse around either display produces no effect at all.
  • --sync-xvfb... well, oops, no such option for 0.15.8.
  • xpra info | grep geometry= ... yes, the monitors look like they're in the right locations (I don't see anything in the full info to determine locations for windows... just their size).
  • XPRA_WIN32_WINDOW_HOOKS=0 ... no help, alas.

Sounds like you can repro... but I've run out of ideas of things to try to speed process further for you with the 0.15.8 ...

comment:29 Changed 4 years ago by Antoine Martin

Hmm.. tested with windows 0.15.8 r11122 against 0.15.8 r11099 fedora 21 server... and alas, the fix didn't take.


As per comment:26, the fix is in r11116, server-side.
(you can figure out that the change is server side by following the link to the changeset and looking at the name of the file(s) changed, that's often enough to figure it out)

comment:30 Changed 4 years ago by alas

Resolution: fixed
Status: newclosed

Yes... good point about the versions. Had a hiccup in my auto-build process and didn't spot my versioning had failed me.

Apologies.

Sorted it out, and with that same 0.15.8 r11122 windows client against a more reasonable 0.15.8 r11145 fedora 21 server - all worked as expected/hoped.

I think we're out of corner cases.

I'll close this for now... though if you decide to backport to 0.14.x then I suppose a quick re-opening will be called for.

comment:31 Changed 3 years ago by Antoine Martin

Somewhat related:

Note: See TracTickets for help on using tickets.