this series introduces very basic seamless (aka unity aka coherence, ...) mode
support for spice-gtk and both Windows and Linux vdagent.
Many other rival companies have already added this feature to their products,
therefore it might be the right time to cover it too...
Agent sends list of visible areas/change in visible area whenever a window
is created, moved or closed/hidden. The client then masks out the areas
that shoud not be visible accordingly.
The spice-gtk and linux agent implementation is heavily based on older work
from Ondřej Holý and Lukáš Venhoda, so big shout-out for them.
I merged the initial commits in spice-gtk and fixed some minor issues.
You can have a look at the original version here, if you wish to,
on branch "seamless-mode":
linux vdagent: git://people.freedesktop.org/~lvenhoda/vd_agent
Further progress can be tracked on my Github,
again branch "seamless-mode" (might not be always stable):
linux vdagent: https://github.com/jjanku/linux-vd_agent.git
win32 vdagent: https://github.com/jjanku/win32-vd_agent.git
If everything goes well, you should hopefully see output similar to this:
(windows leaving traces have been fixed since then)
Has been tested on:
Fedora 25 with Gnome, Win7, Win8.1, Win10; all with basic preinstalled programs
(there seem to be some extra windows that pass the filter on Win8.1,
other versions should work just fine)
spice-gtk: commit ba87ba2: removes drawing function that was in the original
implementation and I found it redundant, it works fine without it for me.
If you have any problems with transparency, delete this commit and
give it another try, otherwise it shall be merged with the initial commit.
LIMITATIONS & FUTURE PLANS:
- window integration could be better (currently one window that stays on top),
maybe create some dummy windows that would control the actual windows on
remote system? not sure really, any ideas?
- multi monitor/workspace support
- launching programs: currently no way for linux, Start menu on Windows
- drag & drop (started some research for Win, see below if you're interested)
- clicking through: gdk_window_input_shape_combine_region() is not supported
on Win, gdk_window_shape_combine_region() might do the trick
(as it does on some linux systems), not tested though
- Wayland support?
- windows in Gnome have no border/shadow, they blend into the background,
maybe we should draw shadows/borders for them in spice-gtk? (low priority)
- Windows: switch to in-context event hooks? (low priority)
- any suggestions are welcomed :) The points above should be discussed.
DRAG & DROP for Win:
Quick search has revealed three potential solutions so far
(I haven't tested any of them):
 Send WM_DROPFILES
- seems simple and straightforward, but outdated and not very well supported,
probably not the way to go
 Register IDropSource and simulate mouse movement
+ no hassle with finding the correct window user wanted to drop files into
- might result in poor user experience because of the mouse simulation
- DoDragDrop() blocks calling thread until the drop is finished
 Find the window for drag&drop ourselves,
inject a DLL into the process that owns the given window,
get IDropTarget and call Drop()
+ completely in background
- need to find the correct window
Has anyone tried something like that? Any help/suggestions would be appreciated.
Spice-devel mailing list