Sticky Revision: |
Moving seamlessrdp trunk to correct location.
Do not send icon updates on WM_SETICON if window is not visible. Prevents warnings at client side.
Ignore cmd.exe during enumeration.
Corrected is_menu, so that menus works with Seamonkey as well.
Cleaner solution for the problem with menus disappearing on SetForegroundWindow.
Applied patch: [ 1715358 ] seamlessrdp window close
Minor optimization: no need to fetch styles if gotoing end.
Applied patch: [ 1715359 ] seamlessrdp topmost windows (slightly modified). Requires support in rdesktop.
Ran indent-all
Yet another try at get_parent. The previous implementation incorrectly returned -1 for many transient windows, which made them transient for the root window rather than the application window at the X11 side. With this implementation, the transient test case in seamlessrdp-channel.txt passes.
Re-worked the logic for determining which windows to ignore (all but toplevel ones). Also, rewrote get_parent to use a simpler and documented approach. A side effect of these changes is that combobox windows are now correctly handled as top-level windows and thus can appear outside application windows.
Add support for transferring window icons.
Add some simple reference counting for vchannel_open()/close() as it might be done multple times as seamlessrdp.dll hooks into seamlessrdpshell.exe.
Use a polled system to detect when clients reconnect. This way we can support Windows 2000 as well.
Send a destroy group command when a process is killed off.
Don't send STATE for hidden windows.
Detect when another desktop is activated and tell the connected client.
Restore SPI_SETFOREGROUNDLOCKTIMEOUT upon reconnect.
Since the user can start new processes, it's insufficient to monitor just the process we started ourselves. Instead, we get a list of processes running when we start up (to be able to exclude system processes) and terminate the session once no non-system processes are running.
Avoid %p since it's implementation defined.
SetActiveWindow() only does what we want when the window is owned by the same process as the currently active. SetForegroundWindow() does what we want under all circumstances.
Also check window owner since it fall into our definition of "parent".
Building a ZIP file with resulting binaries.
Support for window groups and modal windows.
Restructure ACK:s of POSITION a bit since Windows can ignore some requests.
Send an ACK for all client commands.
Add serial numbers to protocol.
Handle z order changes properly by waiting until the reordering is complete and then examining the result.
Also store hwnd when doing blocking to make things a bit more fool proof.
Break loops caused by STATE.
Encapsulate ZCHANGE and FOCUS requests into safe wrappers to avoid loops. Setting focus also needed a hack because it killed off menus.
Remove some commented code that never should have been checked in.
Handle FOCUS. We need to do this via an extra message because a process is only allowed to focus its own windows.
Acidentally implemented the USC-4 algorithm instead of the USC-2 one.
Restore system parameters info on reconnect as they get reset.
Send a HELLO when starting up and when a client reconnects.
Prevent moves we do ourself from generating a POSITION. We do this by storing the coordinate we're moving to in a shared variable. Since SetWindowPos is synchronous, we know that the variable will have valid data when the hook is called.
Fix unicode title for enumeration.
Get window titles in unicode and send them over the channel in UTF-8. This also meant that we had to catch WM_SETTEXT after it was handled (so that we can use GetWindowTextW()).
Change window creation so that POSITION is sent before STATE (as required by the protocol). Also remove unnecessary z order comment.
Use strtoul on window id:s to be able to handle the full range.
Let characters outside the ascii range through.
ran indent-all
Need to catch SW_RESTORE as well.
Change format to const char* to kill off some warnings.
Add filtering of dangerous characters in strings that are part of the protocol.
Support client invoked POSITION and ZCHANGE.
Change state when requested by the client.
Windows can have popups without a parent. Indicate this by setting the parent to -1.
Avoid sending position updates for minimized windows.
Add some more SW_ defines that we need to handle.
Catch WM_SETTEXT so that we follow changes to the window title.
show can have values we're not interested in, so we need to abort here.
Make sure we send a TITLE and STATE when a window is created.
Add the new parent argument to the CREATE command.
Move title info out of the STATE command.
Disable screen saver since its nothing but trouble.
Removed the version numbers from SeamlessRDP commands
Rename hookdll.dll to seamlessrdp.dll.
Avoid sending messages for windows that aren't visible.
Microsoft's docs say that WS_CHILD and WS_POPUP is an illegal combination, but they exist nonetheless. The resulting window is as if WS_CHILD wasn't set.
Catch WM_MOVE and WM_SIZE.
Remove handling of WM_WINDOWPOSCHANGING and move that into WM_WINDOWPOSCHANGED since the former isn't always sent.
More cleanup and reorganisation.
indentation fix.
Readd forcing immediate updates when resizing windows since it was lost in the cleanup.
Implement the SYNC command. Enumerates all windows and sends over their information.
Basic infrastructure for retrieving commands in the server.
Put virtual channel handling into a separate file since both the DLL and the main program will use it.
Minor tweak of the Makefile to make sure we don't get a console. Also fixed the clean target to whine a little less.
Big cleanup and reindentation of the code.
Use C instead of C++ since we don't depend on any C++ features anyway.
Refactor the hook dll loading so that we can remove hook.* and all C++ code.
Make WriteToChannel() a variable argument function. Cleans up the code a lot. Also add a newline implicitly in the function. It is unsupported to call it multiple times for one line anyway (because of locking).
Add a named mutex so that all hooks will write atomically into the virtual channel.
Run indent-all on the server source.
Change strategy to catch WM_WINDOWPOSCHANGED instead as that seems to work better.
Added MinGW makefile
Mark DllMain as extern "C".
Use lowercase version of cchannel.h, for MinGW compatibility.
Use correct case for HookDll/hook.h, for compliance with MinGW.
When CreateProcess fails, print the requested cmdline.
Changed channel name to seamrdp
Changed channel name to seamlessrdp
Reporting size/position changes in response to WM_WINDOWPOSCHANGED, instead of WM_SIZING/WM_MOVING. This is more reliable.
Do not send WM_CREATE messages for windows with negative sizes.
Do a SPI_SETDRAGFULLWINDOWS, to make sure we use DragFullWindows. (The RDP setting is not always effective.)
POSITION1 should be terminated by newline.
Better names for global hook variables. Removed unnecessary hooked variables.
Removed cbt from lots of variables, where it doesn't belong. Disabling hook of CbtProc.
WM_CREATE now sends SETSTATE1 and POSITION1.
Moved calls to WriteToChannel; now calling directly as we have our string. Also, make sure result from snprintf is null terminated.
Moved usage of ChannelIsOpen into WriteToChannel.
Got rid of unnecessary buffer variables.
Fixed compiler warnings: Removed unused variables. Using %p for converting HWND to hex. Implemented SETSTATE1.
Implemented DESTROY1.
Only handle WM_SIZING/WM_MOVING for visible, toplevel windows. Implemented CREATE1.
Removed the cases for HCBT_MOVESIZE and HCBT_SETFOCUS.
Added a function for sending debug printouts to the other end. Re-implemented the code on WM_SIZING/WM_MOVING: Now generating messages according to the new protocol. Do not catch WM_WINDOWPOSCHANGED; WM_WINDOWPOSCHANGING is enough. In response, generate a ZCHANGE1 messages according to the new protocol.
Added hack to silence WM_WINDOWPOSCHANGED for the language bar and the Office XP speech/handwriting recognition.
Removed handling of WM_WINDOWPOSCHANGING.
Added temporary stubs for WM_CREATE and WM_DESTROY.
Imported changes from nxclipper-1.5.0-9
Indenting with the CVS version of astyle
Added proper copyright headers
Indenting with astyle instead of indent
Link server exe with /MT, just like the other parts: get rid of dependency of msvcr71.dll.
Fixed indentation, by running indent-all.
Should have UNIX LF linebreaks, when running CVS from UNIX.
Resource file is still called clipper.rc.
Never use precompiled headers, since it's not possible to build from a network drive, then.
Renamed TSWinSender -> ServerExe
clipper renamed to seamlessrdpshell
WTS Window Clipper -> seamlessrdp
Added .cvsignore:s
Renamed solution to seamlessrdp.sln. Converted filenames to lowercase.
Converted solution to VC7.1
Imported CodeProject tswindowclipper source.
ViewVC Help | |
Powered by ViewVC 1.1.26 |