1. Linked Window Manager Maximize/Minimize and Restore operations to those from the Server Rail Window so that they are in sync
2. Enable things like "CTRL-ALT-DELETE" and "WindowsKey-L" to show the full desktop window again since the desktop is not actively monitored since
this was still trying to draw to the rail window without updating the size of the window to accomodate the full workspace area.
3. Changed local window coordinates to be based on the visibileOffsetX/Y- while moving server window based on WindowOffsetX/Y. I have seen various issues regarding this when trying to use a maximized window where this is a disconnect between local window coordinates and remote window coordinates. This change clears these things up.
4. Commented the XShapeCombineRectangles calls - this can cause issues where the entire window is not visible and it does not currently play well with the changes from #3. The gain here is greater than the loss.
5. Draw the initial workspace correctly when running across multiple monitors. The correct size was always used, but the window was only starting on the current monitor and thus could draw the window off of the viewable area.
Known Issues:
Although the changes for #2 worked well in the stable branch that I developed from - the desktop window shown once the rail windows are destroyed does not respond to input unless I minimize/restore the window. Once the window starts responding to input - you can hit cancel to close the desktop window and return to your rail windows again(or launch task manager, etc.). This is still a big step in the right direction as xfreerdp is now correctly acting when the rail server stops Actively Monitoring the desktop.
XShapeCombineRectangles needs to be revisited, most windows applications will give you a rectangular window anyways.
_NET_WM_PID is used by some window managers to map the window
and the XDG desktop files. This patch sets _NET_WM_PID for this
purpose.
Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu@canonical.com>
Complete implementation for initiating RAIL local move support, however, this is still disabled until a method is found to tell when local moves complete on the X server.
Pointer updates are part of the base RDP protocol MS-RDPBCGR specification and do not include window information like those from the RAIL specification MS-RDPERP do. To make pointer updates work, we need to keep track of which window has focus and then apply pointer updates to that window. This appears to be easy to do, just watch for X11 EnterNotify events and update the window field of the main RDP structure. I had some concerns that a window might receive an old pointer update for some other window due to network latencies, however, the RDP server seems to always send down new pointer updates whenver a window takes focus.
Added -lrt which is a required library for the sem_*() functions
Fixed xf_window.c to not return null for zero-width windows - rather coerce values to be valid as was already being done for height and width. This fixes intermittent crashs on Solars and Linux.
xf_GetWindowProperty should return False if the specified property does not exist.
It is not sufficient to simply check for the return value of XGetWindowProperty.
XGetWindowProperty also returns Success if the specified property does not exist.
However, it will return "None" to the actual_type_return parameter in that case.
This change fixes several crashes with some (exotic) window managers.