Xpra: Ticket #1622: Chrome/Chromium: Moving cursor away from the right click menu causes it to vanish

Tested with a Fedora 25 r16680 Server and Client:

NOTE: We've also seen it with our 2.1 builds.

The server was started with the following:

xpra start :13 --bind-tcp=0.0.0.0: --start-child=google-chrome

And the client attached with:

xpra attach tcp:ip

The repro steps are pretty simple:

This is where the tricky part shows up:

Outcome:

The right click menu disappears

Expected:

Right click menu doesn't disappear.

As a note:

If you get a right click menu that's "above" the cursor, it'll stick no matter how aggressively you cursor about. For some odd reason it only disappears if the menu is below the cursor. As crazy as this ticket sounds, it doesn't do this locally. Locally, Chrome keeps the right click menu up until it gets dismissed by another mouse click.


Some logs with -d mouse:

Right click menu dismissed just by mouse movements:

2017-08-11 09:43:56,227 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,228 raising WindowModel(0x1200001)
2017-08-11 09:43:56,228 move_pointer(3, (481, 632), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:56,228 xtest_fake_motion(-1, 481, 632)
2017-08-11 09:43:56,234 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,234 raising WindowModel(0x1200001)
2017-08-11 09:43:56,234 move_pointer(3, (490, 633), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:56,235 xtest_fake_motion(-1, 490, 633)
2017-08-11 09:43:56,242 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,242 raising WindowModel(0x1200001)
2017-08-11 09:43:56,242 move_pointer(3, (496, 634), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:56,242 xtest_fake_motion(-1, 496, 634)
2017-08-11 09:43:56,250 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,250 raising WindowModel(0x1200001)
2017-08-11 09:43:56,250 move_pointer(3, (499, 634), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:56,251 xtest_fake_motion(-1, 499, 634)
2017-08-11 09:43:56,261 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,261 raising WindowModel(0x1200001)
2017-08-11 09:43:56,261 move_pointer(3, (500, 635), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:56,261 xtest_fake_motion(-1, 500, 635)
2017-08-11 09:43:56,266 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,266 raising WindowModel(0x1200001)
2017-08-11 09:43:56,266 move_pointer(3, (501, 635), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:56,266 xtest_fake_motion(-1, 501, 635)
2017-08-11 09:43:56,274 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,355 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,703 process_button_action(Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244), ['button-action', 3, 3, True, (501, 635), (), ()])
2017-08-11 09:43:56,704 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,704 xtest_fake_button(3, True)
2017-08-11 09:43:56,842 process_button_action(Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244), ['button-action', 3, 3, False, (501, 635), (), (3,)])
2017-08-11 09:43:56,843 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:56,843 xtest_fake_button(3, False)
2017-08-11 09:43:58,533 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,534 raising WindowModel(0x1200001)
2017-08-11 09:43:58,534 move_pointer(3, (506, 632), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,534 xtest_fake_motion(-1, 506, 632)
2017-08-11 09:43:58,560 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,561 raising WindowModel(0x1200001)
2017-08-11 09:43:58,561 move_pointer(3, (517, 624), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,561 xtest_fake_motion(-1, 517, 624)
2017-08-11 09:43:58,568 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,568 raising WindowModel(0x1200001)
2017-08-11 09:43:58,568 move_pointer(3, (582, 589), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,568 xtest_fake_motion(-1, 582, 589)
2017-08-11 09:43:58,572 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,572 raising WindowModel(0x1200001)
2017-08-11 09:43:58,572 move_pointer(3, (608, 574), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,572 xtest_fake_motion(-1, 608, 574)
2017-08-11 09:43:58,580 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,580 raising WindowModel(0x1200001)
2017-08-11 09:43:58,580 move_pointer(3, (636, 560), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,580 xtest_fake_motion(-1, 636, 560)
2017-08-11 09:43:58,588 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,588 raising WindowModel(0x1200001)
2017-08-11 09:43:58,588 move_pointer(3, (663, 547), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,588 xtest_fake_motion(-1, 663, 547)
2017-08-11 09:43:58,596 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,596 raising WindowModel(0x1200001)
2017-08-11 09:43:58,596 move_pointer(3, (688, 536), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,596 xtest_fake_motion(-1, 688, 536)
2017-08-11 09:43:58,604 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,604 raising WindowModel(0x1200001)
2017-08-11 09:43:58,604 move_pointer(3, (712, 528), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,604 xtest_fake_motion(-1, 712, 528)
2017-08-11 09:43:58,612 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,612 raising WindowModel(0x1200001)
2017-08-11 09:43:58,612 move_pointer(3, (733, 522), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,613 xtest_fake_motion(-1, 733, 522)
2017-08-11 09:43:58,620 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,620 raising WindowModel(0x1200001)
2017-08-11 09:43:58,621 move_pointer(3, (750, 518), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,621 xtest_fake_motion(-1, 750, 518)
2017-08-11 09:43:58,628 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,628 raising WindowModel(0x1200001)
2017-08-11 09:43:58,628 move_pointer(3, (763, 515), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,628 xtest_fake_motion(-1, 763, 515)
2017-08-11 09:43:58,640 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,641 raising WindowModel(0x1200001)
2017-08-11 09:43:58,641 move_pointer(3, (772, 514), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,641 xtest_fake_motion(-1, 772, 514)
2017-08-11 09:43:58,644 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,644 raising WindowModel(0x1200001)
2017-08-11 09:43:58,644 move_pointer(3, (778, 514), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,644 xtest_fake_motion(-1, 778, 514)
2017-08-11 09:43:58,652 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,652 raising WindowModel(0x1200001)
2017-08-11 09:43:58,652 move_pointer(3, (780, 514), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,652 xtest_fake_motion(-1, 780, 514)
2017-08-11 09:43:58,660 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,660 raising WindowModel(0x1200001)
2017-08-11 09:43:58,660 move_pointer(3, (781, 514), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,660 xtest_fake_motion(-1, 781, 514)
2017-08-11 09:43:58,692 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:58,692 raising WindowModel(0x1200001)
2017-08-11 09:43:58,692 move_pointer(3, (781, 513), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:58,693 xtest_fake_motion(-1, 781, 513)
2017-08-11 09:43:59,378 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:59,378 raising WindowModel(0x1200001)
2017-08-11 09:43:59,379 move_pointer(3, (781, 505), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:59,379 xtest_fake_motion(-1, 781, 505)
2017-08-11 09:43:59,385 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:59,386 raising WindowModel(0x1200001)
2017-08-11 09:43:59,386 move_pointer(3, (778, 493), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:59,386 xtest_fake_motion(-1, 778, 493)
2017-08-11 09:43:59,393 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:59,393 raising WindowModel(0x1200001)
2017-08-11 09:43:59,393 move_pointer(3, (773, 479), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:59,393 xtest_fake_motion(-1, 773, 479)
2017-08-11 09:43:59,401 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:43:59,401 raising WindowModel(0x1200001)
2017-08-11 09:43:59,401 move_pointer(3, (767, 463), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:43:59,401 xtest_fake_motion(-1, 767, 463)

Not dismissed with mouse movements(menu appears above cursor):

2017-08-11 09:45:01,343 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,344 raising WindowModel(0x1200001)
2017-08-11 09:45:01,344 move_pointer(3, (475, 1246), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,344 xtest_fake_motion(-1, 475, 1246)
2017-08-11 09:45:01,349 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,350 raising WindowModel(0x1200001)
2017-08-11 09:45:01,350 move_pointer(3, (486, 1240), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,350 xtest_fake_motion(-1, 486, 1240)
2017-08-11 09:45:01,358 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,358 raising WindowModel(0x1200001)
2017-08-11 09:45:01,358 move_pointer(3, (499, 1233), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,358 xtest_fake_motion(-1, 499, 1233)
2017-08-11 09:45:01,365 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,365 raising WindowModel(0x1200001)
2017-08-11 09:45:01,365 move_pointer(3, (510, 1227), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,366 xtest_fake_motion(-1, 510, 1227)
2017-08-11 09:45:01,378 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,378 raising WindowModel(0x1200001)
2017-08-11 09:45:01,378 move_pointer(3, (522, 1221), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,378 xtest_fake_motion(-1, 522, 1221)
2017-08-11 09:45:01,381 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,381 raising WindowModel(0x1200001)
2017-08-11 09:45:01,382 move_pointer(3, (532, 1215), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,382 xtest_fake_motion(-1, 532, 1215)
2017-08-11 09:45:01,389 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,390 raising WindowModel(0x1200001)
2017-08-11 09:45:01,390 move_pointer(3, (541, 1211), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,390 xtest_fake_motion(-1, 541, 1211)
2017-08-11 09:45:01,397 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,397 raising WindowModel(0x1200001)
2017-08-11 09:45:01,397 move_pointer(3, (547, 1207), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,398 xtest_fake_motion(-1, 547, 1207)
2017-08-11 09:45:01,405 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,405 raising WindowModel(0x1200001)
2017-08-11 09:45:01,405 move_pointer(3, (551, 1205), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,406 xtest_fake_motion(-1, 551, 1205)
2017-08-11 09:45:01,415 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,415 raising WindowModel(0x1200001)
2017-08-11 09:45:01,415 move_pointer(3, (553, 1204), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,415 xtest_fake_motion(-1, 553, 1204)
2017-08-11 09:45:01,421 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:01,421 raising WindowModel(0x1200001)
2017-08-11 09:45:01,421 move_pointer(3, (554, 1204), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:01,421 xtest_fake_motion(-1, 554, 1204)
2017-08-11 09:45:02,078 process_button_action(Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244), ['button-action', 3, 3, True, (554, 1204), (), ()])
2017-08-11 09:45:02,078 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:02,078 xtest_fake_button(3, True)
2017-08-11 09:45:02,174 process_button_action(Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244), ['button-action', 3, 3, False, (554, 1204), (), (3,)])
2017-08-11 09:45:02,175 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:02,175 xtest_fake_button(3, False)
2017-08-11 09:45:03,610 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:03,611 raising WindowModel(0x1200001)
2017-08-11 09:45:03,611 move_pointer(3, (545, 1204), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:03,611 xtest_fake_motion(-1, 545, 1204)
2017-08-11 09:45:03,618 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:03,618 raising WindowModel(0x1200001)
2017-08-11 09:45:03,618 move_pointer(3, (532, 1206), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:03,618 xtest_fake_motion(-1, 532, 1206)
2017-08-11 09:45:03,628 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:03,628 raising WindowModel(0x1200001)
2017-08-11 09:45:03,628 move_pointer(3, (512, 1209), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:03,628 xtest_fake_motion(-1, 512, 1209)
2017-08-11 09:45:03,636 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:03,636 raising WindowModel(0x1200001)
2017-08-11 09:45:03,636 move_pointer(3, (486, 1212), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:03,636 xtest_fake_motion(-1, 486, 1212)
2017-08-11 09:45:04,278 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,279 raising WindowModel(0x1200001)
2017-08-11 09:45:04,279 move_pointer(3, (498, 1233), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,279 xtest_fake_motion(-1, 498, 1233)
2017-08-11 09:45:04,285 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,285 raising WindowModel(0x1200001)
2017-08-11 09:45:04,285 move_pointer(3, (555, 1231), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,285 xtest_fake_motion(-1, 555, 1231)
2017-08-11 09:45:04,293 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,294 raising WindowModel(0x1200001)
2017-08-11 09:45:04,294 move_pointer(3, (611, 1230), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,294 xtest_fake_motion(-1, 611, 1230)
2017-08-11 09:45:04,301 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,301 raising WindowModel(0x1200001)
2017-08-11 09:45:04,302 move_pointer(3, (668, 1228), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,302 xtest_fake_motion(-1, 668, 1228)
2017-08-11 09:45:04,313 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,313 raising WindowModel(0x1200001)
2017-08-11 09:45:04,313 move_pointer(3, (727, 1228), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,313 xtest_fake_motion(-1, 727, 1228)
2017-08-11 09:45:04,317 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,317 raising WindowModel(0x1200001)
2017-08-11 09:45:04,317 move_pointer(3, (784, 1229), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,317 xtest_fake_motion(-1, 784, 1229)
2017-08-11 09:45:04,325 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,325 raising WindowModel(0x1200001)
2017-08-11 09:45:04,325 move_pointer(3, (841, 1229), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,325 xtest_fake_motion(-1, 841, 1229)
2017-08-11 09:45:04,333 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,333 raising WindowModel(0x1200001)
2017-08-11 09:45:04,333 move_pointer(3, (893, 1230), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,333 xtest_fake_motion(-1, 893, 1230)
2017-08-11 09:45:04,341 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,341 raising WindowModel(0x1200001)
2017-08-11 09:45:04,341 move_pointer(3, (944, 1231), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,341 xtest_fake_motion(-1, 944, 1231)
2017-08-11 09:45:04,350 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,350 raising WindowModel(0x1200001)
2017-08-11 09:45:04,350 move_pointer(3, (991, 1234), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,350 xtest_fake_motion(-1, 991, 1234)
2017-08-11 09:45:04,357 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,357 raising WindowModel(0x1200001)
2017-08-11 09:45:04,357 move_pointer(3, (1033, 1236), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,357 xtest_fake_motion(-1, 1033, 1236)
2017-08-11 09:45:04,365 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,365 raising WindowModel(0x1200001)
2017-08-11 09:45:04,365 move_pointer(3, (1071, 1238), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,365 xtest_fake_motion(-1, 1071, 1238)
2017-08-11 09:45:04,373 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,373 raising WindowModel(0x1200001)
2017-08-11 09:45:04,373 move_pointer(3, (1105, 1238), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,373 xtest_fake_motion(-1, 1105, 1238)
2017-08-11 09:45:04,386 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,386 raising WindowModel(0x1200001)
2017-08-11 09:45:04,386 move_pointer(3, (1136, 1238), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,386 xtest_fake_motion(-1, 1136, 1238)
2017-08-11 09:45:04,389 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,389 raising WindowModel(0x1200001)
2017-08-11 09:45:04,389 move_pointer(3, (1161, 1237), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,389 xtest_fake_motion(-1, 1161, 1237)
2017-08-11 09:45:04,397 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,397 raising WindowModel(0x1200001)
2017-08-11 09:45:04,397 move_pointer(3, (1185, 1235), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,397 xtest_fake_motion(-1, 1185, 1235)
2017-08-11 09:45:04,407 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,407 raising WindowModel(0x1200001)
2017-08-11 09:45:04,407 move_pointer(3, (1205, 1233), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,407 xtest_fake_motion(-1, 1205, 1233)
2017-08-11 09:45:04,415 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,415 raising WindowModel(0x1200001)
2017-08-11 09:45:04,415 move_pointer(3, (1221, 1231), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,415 xtest_fake_motion(-1, 1221, 1231)
2017-08-11 09:45:04,423 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,424 raising WindowModel(0x1200001)
2017-08-11 09:45:04,424 move_pointer(3, (1234, 1231), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,424 xtest_fake_motion(-1, 1234, 1231)
2017-08-11 09:45:04,431 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,431 raising WindowModel(0x1200001)
2017-08-11 09:45:04,431 move_pointer(3, (1243, 1230), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,431 xtest_fake_motion(-1, 1243, 1230)
2017-08-11 09:45:04,439 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,439 raising WindowModel(0x1200001)
2017-08-11 09:45:04,439 move_pointer(3, (1249, 1230), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,439 xtest_fake_motion(-1, 1249, 1230)
2017-08-11 09:45:04,447 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,447 raising WindowModel(0x1200001)
2017-08-11 09:45:04,447 move_pointer(3, (1251, 1230), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,447 xtest_fake_motion(-1, 1251, 1230)
2017-08-11 09:45:04,753 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,753 raising WindowModel(0x1200001)
2017-08-11 09:45:04,753 move_pointer(3, (1248, 1232), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,754 xtest_fake_motion(-1, 1248, 1232)
2017-08-11 09:45:04,762 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,762 raising WindowModel(0x1200001)
2017-08-11 09:45:04,762 move_pointer(3, (1244, 1236), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,762 xtest_fake_motion(-1, 1244, 1236)
2017-08-11 09:45:04,767 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,768 raising WindowModel(0x1200001)
2017-08-11 09:45:04,768 move_pointer(3, (1238, 1241), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,768 xtest_fake_motion(-1, 1238, 1241)
2017-08-11 09:45:04,775 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,775 raising WindowModel(0x1200001)
2017-08-11 09:45:04,776 move_pointer(3, (1231, 1248), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,776 xtest_fake_motion(-1, 1231, 1248)
2017-08-11 09:45:04,786 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,786 raising WindowModel(0x1200001)
2017-08-11 09:45:04,787 move_pointer(3, (1222, 1259), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,787 xtest_fake_motion(-1, 1222, 1259)
2017-08-11 09:45:04,793 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,794 raising WindowModel(0x1200001)
2017-08-11 09:45:04,794 move_pointer(3, (1211, 1270), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,794 xtest_fake_motion(-1, 1211, 1270)
2017-08-11 09:45:04,801 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,801 raising WindowModel(0x1200001)
2017-08-11 09:45:04,802 move_pointer(3, (1199, 1285), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,802 xtest_fake_motion(-1, 1199, 1285)
2017-08-11 09:45:04,810 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,810 raising WindowModel(0x1200001)
2017-08-11 09:45:04,810 move_pointer(3, (1186, 1300), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,810 xtest_fake_motion(-1, 1186, 1300)
2017-08-11 09:45:04,817 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,818 raising WindowModel(0x1200001)
2017-08-11 09:45:04,818 move_pointer(3, (1174, 1314), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,818 xtest_fake_motion(-1, 1174, 1314)
2017-08-11 09:45:04,825 client X11ServerSource(1 : Protocol(tcp socket: 192.168.1.138:2200 <- 192.168.1.140:44244)): server window position: (475, 452), client window position: (475, 452, 1133, 886)
2017-08-11 09:45:04,826 raising WindowModel(0x1200001)
2017-08-11 09:45:04,826 move_pointer(3, (1162, 1327), -1) screen_no=-1, device=XTestPointerDevice
2017-08-11 09:45:04,826 xtest_fake_motion(-1, 1162, 1327)

In case these logs aren't helpful, let me know what debug flag you'd like me to repro this with - it's very easy to repro.



Tue, 29 Aug 2017 02:19:46 GMT - J. Max Mena:

According to Sergey, this problem started to appear around Chrome 56 versions. According to Sergey, it works in 54, but 56 is where it appears, 55 is too difficult to test.


Sun, 03 Sep 2017 10:22:06 GMT - Antoine Martin: owner changed

If I right click, hold the click and move away from the window, then the popup window doesn't get destroyed. It's only if I release the right click over the popup window then move away that the application decides to destroy it.

Using X11 events debugging with:

XPRA_X11_DEBUG_EVENTS="*,-PropertyNotify,-DamageNotify,-CursorNotify" xpra start ...

I see this sequence of events during the reproduction steps:

CreateNotify
MapNotify
ShapeNotify
ShapeNotify
ConfigureNotify
ConfigureNotify
UnmapNotify
UnmapNotify
EnterNotify
UnmapNotify
DestroyNotify

Looking at the "-d x11" log output in between the configure / shape notify and the unmap, I see:

Then immediately after this fake motion (1ms), the popup window is destroyed by the application. Skipping the window raise by modifying the code makes no difference, so I don't see anything here that we could be doing different.. We have to forward pointer motion and clicks!

I initially thought that this might be a grab issue (#139): the application could have been telling the X11 server to report pointer events on the popup window (and we can't forward this behaviour), but that doesn't seem to be the case.


On a hunch, and also because I had been testing this a lot lately (#1631), I tried with uinput (#1611) and to my amazement... the bug seems to go away! (I did see some pointer position issues, it takes a few clicks and motion events before things settle - but those issues belong in a different ticket) Why would the application even care where the motion events come from? (xtest vs fake device) Unless they really are different somehow. (uinput uses relative motion events, xtest is absolute)

@maxmylyn: this workaround may not be satisfactory for you, in which case you may want to look into the chromium code to figure out which change caused this regression.


Wed, 06 Sep 2017 20:57:19 GMT - J. Max Mena: status changed; resolution set

Somehow I'm not surprised that this on Google. To quote Sergey It's not the 1st time I'd like to order a shirt with the message "Google is doing some weird stuff".

The uinput workaround is fine for me mostly as another excuse to get us to switch to that input method as it will open up a lot of possibilities for us.

If any Google employee happens to read this:

Why?


Sat, 23 Jan 2021 05:29:21 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/1622