RAIL Local Move/Resize

Local move/resize features are RAIL options designed to optimize bandwidth in certain situations where RAIL windows are moved or resized by the user. A RAIL client indicates to the RAIL server whether it supports local move/resize through the Client Capabilities PDU (section, sent after the Virtual Channel handshake sequence. RAIL servers do not have to explicitly report move/size support to the client.

RAIL local move/resize operation

Figure 3: RAIL local move/resize operation

Local move/resize is based on the following logic:

  1. When the server detects that a window is beginning to be moved or resized, it sends a Server Min Max Info PDU (section to the client with the window extents. This is followed by a Server Move/Size Start PDU (section

  2. If the client supports local move/resize, it injects a mouse button-down at the position indicated by the move/size PDU (if the move/size was initiated via mouse) or posts a command to the window (if the move/size was initiated via keyboard) to initiate move/resize of the window by the local window manager.

  3. At the same time, the client lets the local Window Manager handle all keyboard and mouse events for the RAIL window, instead of redirecting to the server, to ensure that the move/size is entirely happening locally.

  4. Finally, when the user is done with the move/resize, the local RAIL window receives this notification and forwards a mouse button-up to the server to end move/size on the server. For keyboard-based moves and all resize operations, the client also sends a Client Window Move PDU (section to the server to inform the server of the window's new position and size. (For mouse-based moves, the mouse button-up is sufficient to inform the window's final position).

  5. When the server detects that move/size has ended, it sends a Server Move/Size End PDU (section with the final window position and size. The client can adjust its local RAIL window if necessary using this information.