Xpra: Ticket #1098: When connecting with "unusual" desktop-scaling options, xterms are not respecting horizontal resizings

Running a 0.17.0 r11729 fedora 23 server, with either a 0.17.0 r11738 win32 client or a 0.17.0 r11715 osx client... when I use unusual desktop-scaling values (for instance --desktop-scaling=1.34,1.57) then any time I resize the x-axis of an xterm, the xterm "automatically un-resizes" back to its initial size. (Resizing on y-axis behaves as expected, however).

Re-testing with default desktop-scaling, I can't reproduce.

Testing with desktop-scaling=1.37 (with the same for x and y axis) it is also easy to reproduce.

Testing with desktop-scaling=1.3 it is harder to reproduce, but very much reproducible (oddly, by making the xterm smaller).

Looks like this is probably related to #976.

I managed to capture a relatively short clip of server-side logs with -d metadata, at a point where I'm resizing to bigger, and then the server promptly begins resizing smaller-ward again.

2016-01-25 10:37:35,272 get(tray, False) returning default value=False
2016-01-25 10:37:35,272 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,272 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:35,272 set_window_state: changes=[]
2016-01-25 10:37:35,272 window state changes: []
2016-01-25 10:37:35,273 updateprop(geometry, (2132, 38, 655, 316)) previous value=(2132, 38, 649, 316)
2016-01-25 10:37:35,273 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,273 get(tray, False) returning default value=False
2016-01-25 10:37:35,274 window client properties updates: {'screen': 0}
2016-01-25 10:37:35,276 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,276 get(tray, False) returning default value=False
2016-01-25 10:37:35,276 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,276 get(tray, False) returning default value=False
2016-01-25 10:37:35,296 get(tray, False) returning default value=False
2016-01-25 10:37:35,296 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,296 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:35,296 set_window_state: changes=[]
2016-01-25 10:37:35,296 window state changes: []
2016-01-25 10:37:35,296 updateprop(geometry, (2132, 38, 667, 316)) previous value=(2132, 38, 655, 316)
2016-01-25 10:37:35,297 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,297 get(tray, False) returning default value=False
2016-01-25 10:37:35,298 window client properties updates: {'screen': 0}
2016-01-25 10:37:35,299 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,300 get(tray, False) returning default value=False
2016-01-25 10:37:35,331 get(tray, False) returning default value=False
2016-01-25 10:37:35,331 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,331 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:35,331 set_window_state: changes=[]
2016-01-25 10:37:35,331 window state changes: []
2016-01-25 10:37:35,332 updateprop(geometry, (2132, 38, 673, 316)) previous value=(2132, 38, 667, 316)
2016-01-25 10:37:35,332 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,332 get(tray, False) returning default value=False
2016-01-25 10:37:35,333 window client properties updates: {'screen': 0}
2016-01-25 10:37:35,335 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,335 get(tray, False) returning default value=False
2016-01-25 10:37:35,686 get(tray, False) returning default value=False
2016-01-25 10:37:35,687 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,687 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:35,687 set_window_state: changes=[]
2016-01-25 10:37:35,687 window state changes: []
2016-01-25 10:37:35,688 updateprop(geometry, (2132, 38, 667, 316)) previous value=(2132, 38, 673, 316)
2016-01-25 10:37:35,688 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,688 get(tray, False) returning default value=False
2016-01-25 10:37:35,690 window client properties updates: {'screen': 0}
2016-01-25 10:37:35,693 get(override-redirect, False) returning default value=False
2016-01-25 10:37:35,693 get(tray, False) returning default value=False
2016-01-25 10:37:36,045 get(tray, False) returning default value=False
2016-01-25 10:37:36,045 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,046 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:36,046 set_window_state: changes=[]
2016-01-25 10:37:36,046 window state changes: []
2016-01-25 10:37:36,047 updateprop(geometry, (2132, 38, 661, 316)) previous value=(2132, 38, 667, 316)
2016-01-25 10:37:36,048 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,048 get(tray, False) returning default value=False
2016-01-25 10:37:36,053 window client properties updates: {'screen': 0}
2016-01-25 10:37:36,056 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,056 get(tray, False) returning default value=False
2016-01-25 10:37:36,329 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,330 get(tray, False) returning default value=False
2016-01-25 10:37:36,404 get(tray, False) returning default value=False
2016-01-25 10:37:36,404 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,405 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:36,405 set_window_state: changes=[]
2016-01-25 10:37:36,405 window state changes: []
2016-01-25 10:37:36,406 updateprop(geometry, (2132, 38, 655, 316)) previous value=(2132, 38, 661, 316)
2016-01-25 10:37:36,406 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,407 get(tray, False) returning default value=False
2016-01-25 10:37:36,409 window client properties updates: {'screen': 0}
2016-01-25 10:37:36,412 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,413 get(tray, False) returning default value=False
2016-01-25 10:37:36,761 get(tray, False) returning default value=False
2016-01-25 10:37:36,761 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,761 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:36,761 set_window_state: changes=[]
2016-01-25 10:37:36,761 window state changes: []
2016-01-25 10:37:36,761 updateprop(geometry, (2132, 38, 649, 316)) previous value=(2132, 38, 655, 316)
2016-01-25 10:37:36,762 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,762 get(tray, False) returning default value=False
2016-01-25 10:37:36,764 window client properties updates: {'screen': 0}
2016-01-25 10:37:36,765 get(override-redirect, False) returning default value=False
2016-01-25 10:37:36,765 get(tray, False) returning default value=False
2016-01-25 10:37:37,119 get(tray, False) returning default value=False
2016-01-25 10:37:37,119 get(override-redirect, False) returning default value=False
2016-01-25 10:37:37,119 set_window_state(2, WindowModel(0x800022), {})
2016-01-25 10:37:37,119 set_window_state: changes=[]
2016-01-25 10:37:37,120 window state changes: []
2016-01-25 10:37:37,120 updateprop(geometry, (2132, 38, 643, 316)) previous value=(2132, 38, 649, 316)
2016-01-25 10:37:37,120 get(override-redirect, False) returning default value=False
2016-01-25 10:37:37,120 get(tray, False) returning default value=False
2016-01-25 10:37:37,122 window client properties updates: {'screen': 0}
2016-01-25 10:37:37,123 get(override-redirect, False) returning default value=False
2016-01-25 10:37:37,123 get(tray, False) returning default value=False


Sun, 10 Apr 2016 06:35:27 GMT - Antoine Martin: status changed

There are also rounding issues, mostly visible when using xterm. This could be solved by using per-window scaling values, so that the window is scaled to the exact client side window size.


Fri, 21 Oct 2016 11:47:30 GMT - Antoine Martin: owner, status changed

Related to #1327. Should be fixed in r14248: the window will not honour the size increments and it will be padded instead.

A better solution would be to implement our own window size tracking function so that we can implement our own scaling-aware logic. This will have to do for now.


Mon, 26 Dec 2016 09:17:35 GMT - Antoine Martin: status changed; resolution set

Not heard back, closing.


Sat, 23 Jan 2021 05:14:55 GMT - migration script:

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