Skip to content

Conversation

@matt335672
Copy link
Member

@matt335672 matt335672 commented Oct 8, 2025

Fixes #3618

There are two main parts to this:-

  1. The resize_queue is only enabled when the module is loaded. Resize requests received up to this point are queued rather than being discarded.
  2. A particular optimisation is applied to resize requests received from the client over the "Microsoft::Windows::RDS::DisplayControl" dynamic channel by way of a DISPLAYCONTROL_MONITOR_LAYOUT_PDU; If the resize request queued immediately before the incoming one is also from a DISPLAYCONTROL_MONITOR_LAYOUT_PDU the previously received request is simply removed from the queue.

Testing was performed with an XFCE session running glxgears. The client was xfreerdp which is capable of sending a stream of closely-spaced DISPLAYCONTROL_MONITOR_LAYOUT_PDUs. Queued requests were dropped, but the final size was always correct.

Add a source tag for all the resize_queue items, so we can make
some decisions about queue optimisations.
The wait_obj calls (mostly) ignore objects with a value of zero. This
is codified, so that user code can explicitly make use of this.
Processing of the resize queue is delayed until we've connected to a
session, as the login screen is currently unable to cope with these
requests.
If we're adding a new client request to the queue, and the item
immediately before it is also a client request which is not yet actioned,
we can remove the previous item, as it has been superceded.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Resolution/workarea regression from 0.9.24-4 to 0.10.x

1 participant