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.
Clear xfi->pressed_keys when window loses focus.
This would prevent a held alt key from putting the app into fullscreen if the
users sends ctrl+enter when the app regains focus.
_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>
This switch will prompt username, password, domain and connection
host if not specified at the command line.
Signed-off-by: Rex Tsai <chihchun@kalug.linux.org.tw>
This will make sure we get an appropriate error message in case of memory allocation error, and not just a "Segmentation Fault"
Added some validation on xzalloc return in serial_tty_new to properly deallocate resources when an error occurs.
The values in @msdn{ms892480} seems to be what is used in TS_KEYBOARD_EVENT @msdn{cc240584}.
All the "XT Scan Code Translation Libraries" has been checked and integrated.
Only the Korean has been skipped. It is clearly something completely different
from everything else. The Japanese is just an extension of the US keyboard like
the others.
This also introduces a slightly more high-level convenience function for
sending key events. The existing function where an RDP protocol flag field has
to be encoded by the caller is very lowlevel ... and a bad fit for fastpath
input. That could use a refactoring.
There was not check if the pixformat supplied in the XShmCreateImage function
was actually supported by the X-Video extension. Also reduced the amount of
xf_tsmf_is_format_supported calls in xf_process_tsmf_video_frame_event.
o the decoded argb buffer can be reused to enhance performance
o pass width, height and bpp through nsc_process_message() call
o rename nsc_context_destroy to nsc_context_free and make it actually free the context
EBX (or RBX on x86_64) is used for the PIC base address.
The current cpuid inline assembly only saved ebx which is fine
under i386 but only half of the fun on x86_64.
Todo:
- Windows client: wf_Pointer_SetNull and wf_Pointer_SetDefault are just skeletons like all the other wf_Pointer functions.
- DirectFB client: only df_Pointer_SetNull is implemented and tested
To check if something should be en- or disabled WITH_XXX
should be used and not XXX_FOUND.
If XXX_FOUND is used and something gets disabled afterwards (by setting
WITH_XXX to OFF) it will be compiled in as long as XXX_FOUND is found in
cmake's cache file. So disabling a feature, or option, without
clearing the CMakeCache.txt might result in builds with unwanted
configuration.
Currently in Remote App mode we have no option to interact with the
remote desktop host before the first RAIL window is created.
In many situations this interaction possibility is absolutely required.
One example is that screen which gets displayed if another user is logged on.
It requires clicking a button in pre-RAIL mode so that the currently logged
on user gets notified to confirm or deny the connection.
Another example is the option to log on graphically (e.g. for hosts that
don't support NLA) without predefined credentials.
Also if the administrator sets the "User must change password at next logon"
option there is currently no way to do this in TS Remote App mode.
This change basically lets xfreerdp create the main window in Remote App mode
like in a normal session and xfi->remote_app is not set to true initially.
As soon as the rail exec result event or the first rail window creation
request is received (whatever comes first) the main window gets destroyed and
xfi->remote_app is set to true.
The second change is to disconnect immediately if the rail exec result event
reports an error, e.g. if the specified app cannot be found or if it is not
in the list of allowed applications.
This fixes FreeRDP github issue #143 and issue #308.
I'm aware that this is not the most elegant solution but it is definitely an
improvement and probably good enough for 1.0.
A nicer solution would be hiding the main window and only displaying it if
no rail exec result or rail window creation event is received after a certain
timeout ...
Moving the osMajorType and osMinorType settings to the client so that the
client can set a real os type constant. This will give a more useful hint
to the server.
fixes crash on MacOS X and systems without WM.
some of the other XInternAtom calls should probably be changed to
False, but they don't appear to cause crashes
If fullscreen==true then settings->width and settings->height are
calculated in xf_monitor.c based on the vscreen->area which is in
turn calculated using xinerama functions.
Thus if xinerama is not used this will result in width=height=1.
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.
- clients will need this to present the offscreen to the display
in the correct state in order to avoid flickering and artefacts
and to do frame acknowledgement.
- added empty callback to xfreerdp.
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.
It turns out none of this was necessary. X will handle windows placed partially off-screen and draw them correctly, just as it does for windows dragged partially off the screen to the left. Removing this function fixed a number of drawing issues including tool tips being incorrectly drawn and windows not being drawn correctly after they'd been placed partially off-screen to the right.
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.
There is a function wich do not correctly set XSetFunction to GXcopy, but
I did not find which one.
So Reset to GXcopy after each modification, it's a bit overkill but it's
prevent black square on screen.
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.