Age | Commit message (Collapse) | Author | Files | Lines |
|
Currently, a SetClipboardData failure is followed by useless wait for timeout
(VD_CLIPBOARD_TIMEOUT_MS).
In addition, we remove the clipboard open-empty-set-close retry, which became
irrelevant with the current on_clipboard_request().
|
|
|
|
currently:
-handling client disconnect during clipboard data trasfer is buggy
-agent also timeouts on large paste from client (>10sec)
therfore:
-reduce VD_CLIPBOARD_TIMEOUT_MS to 3sec from previous clipboard chunk
-remove _clipboard_event and use _control_event(CONTROL_CLIPBOARD) instead
-use _clipboard_tick for clipboard timeout, updated on each clipboard chunk
-use cleanup_in_msg() to reset incoming message state
rhbz#833835
|
|
|
|
|
|
|
|
User Interface Privilege Isolation is usually used only for specific windows of
system security applications (anti-viruses etc.), so with this patch mouse will
be irresponsive for these windows but keep working for the rest. A complete
solution might be switching to server mouse mode while the agent is still active.
|
|
This is only part of the message corruption solution.
The other part is fixing virtio-serial / spice-qemu-char throttling code.
-replace write_[lock/unlock/completion] calls with [new/enqueue]_message
-remove clipboard specific _out_msg_* class members
-remove ugly loop - while (a->_out_msg && a->write_clipboard());
-add _message_mutex for message queue
-fix pending_write race using _write_mutex
-TODO: enqueue large message without dividing it to chunks in advance
rhbz #846427
|
|
|
|
Waiting for a Windows event will not last if it is already set.
For example, the client may send clipboard_release() messages
while we are not waiting in on_clipboard_request(), and this will
SetEvent(clipboard_event)
The following clipboard request will thus not wait for the data,
resulting in an empty clipboard & paste for the guest application.
We could say there is fundamentally a race as there is no obvious
way to know if a received message is related to the current request,
but by reseting the event before waiting for new events to come, we
at least clear the past events.
|
|
When resizing desktop to best match, the agent fails to update
it's current mode width/height and then incorrectly report
different total_width/total_height than real screen dimensions,
then scaling input incorrectly results in mouse cursor offset.
https://bugzilla.redhat.com/show_bug.cgi?id=823019
|
|
Use QXL_ESCAPE_SET_CUSTOM_DISPLAY to update custom mode,
and switch to it.
|
|
Thanks Paolo for the suggestion:
http://lists.freedesktop.org/archives/spice-devel/2012-May/009291.html
|
|
This patch wasn't sent for review, and wasn't meant to be pushed
as part of the mingw series
This reverts commit 63541ea6ac722d332966f28e1779e4d668244fcb.
|
|
The convention in vdagent codebase seems to put a space before
the opening parenthesis in initialization list, this commit fixes
2 inconsistencies related to that.
|
|
mingw does not support it.
|
|
VDAgent::_mouse_x and VDAgent::_mouse_y are both signed but are
always assigned values from VDAgentMouseState which are unsigned.
gcc warns about this so change them to unsigned values.
|
|
If we use char * instead of const char *, mingw gets confused when
calling the constructor with a const char *: it tries to convert it
to a mutable string through a std::string conversion and outputs
a warning.
|
|
This confuses the deque implementation of gcc which uses std::min
std::max and causes compile failure.
|
|
DWORD is an unsigned long, but it's assigned -1 in various places.
mingw warns when comparing a DWORD value against -1. This commit
casts the -1 to DWORD to avoid the warning.
|
|
mingw warns about using a variable before it's initialized, but
it's a false alarm. Initialize it to 0 to avoid the warning.
|
|
gcc complains about mixed use of signed/unsigned otherwise
|
|
|
|
|
|
linux systems need it in lower-case, Windows systems shouldn't
care.
|
|
|
|
Most of them are caused by not using %lu to print a DWORD (which
is an unsigned long).
|
|
On any change of the display settings, driven by client message or guest user,
normalize all display positions to non-negative coordinates, and update total
width and height of the virtual desktop. The bug was due to wrong handling of
(non-primary) displays positioned on negative coordinates.
Primary monitor is always located (in windows) in (0,0). When a secondary
monitor is positioned above/to the left of the primary, it will have negative
coordinate. This can be the case when guest display settings are changed either
manually on the guest, or due to a message (auto-conf VD_AGENT_MONITORS_CONFIG)
from the client to the agent.
In VDAgent::handle_mouse_event(), mouse event is generated by scaling the
received (x,y, display_id) to normalized absolute coordinates (0..0xffff) on
the entire virtual desktop which contains all the displays. Keeping negative
display coordinates, as received from the client, was mistakenly handled and
generated wrong (sometimes even negative) coordinates.
|
|
-use event queue for agent stop & desktop switch
-exit gracefully on session end
|
|
|
|
|
|
instead of SPICE_COMMON_DIR, which is an old and confusing name,
due to the common directory in spice git repo.
|
|
-don't fail to start when no qxl driver installed
-if qxls found use them, otherwise just use enumerated non-mirror devices
-currently qxl/non-qxl multimon mix is not supported
|
|
similar handling as linux agent
|
|
-currently png & bmp
-using wspice libs cximage.lib & png.lib
-jpg & tiff will follow
|
|
This reverts commit 349e6a5bf8804b25c3af6e1f439122a7cc269cc2 which breaks vsdervice on Windows 7
|
|
|
|
Instead of keeping a flag, we simply check wether the new owner is usor not
|
|
Given that all clipboard handling is async, it is possible to for
example receive a request for clipboard data from the client
while the agent no longer owns the clipboard (ie a
VD_AGENT_CLIPBOARD_RELEASE message is in transit to the client).
Thus it is necessary to keep track of our notion of clipboard ownership
and check received clipboard messages (both from other apps on the client
machine and from the agent) to see if they match our notion and if not
drop, or in case were a counter message is expected nack the clipboard
message.(citing hansg)
clean ups: capability checks, return values
|
|
by data with a none type
Currently we send a VD_AGENT_CLIPBOARD_RELEASE when we receive a
VD_AGENT_CLIPBOARD_REQUEST with a type which we do not support. This is not
correct, as this means given up clipboard ownership while we may be able
to answer requests with different types. The correct response is to
nack the request by sending a VD_AGENT_CLIPBOARD (data) message with a type
of VD_AGENT_CLIPBOARD_NONE.(citing hansg)
|
|
will wait until png comes in
|
|
cleanup, rename change -> grab, render->request
|
|
-enable the clipboard support
-support the GRAB/REQUEST/DATA/RELEASE verbs in both ways.
-pasting clipboard data is now "only-by-demand" from both sides (client and agent), whose behavior is symmetric.
-client and agent don't read or send the contents of the clipboard unnecessarily (e.g. copy, internal paste, repeating paste, focus change)
-bonus (no cost): support image cut & paste, currently only with win client
|
|
-remove deprecated Detect64BitPortabilityProblems
-add setupapi.lib to AdditionalDependencies in x64
|
|
|
|
|
|
smoothing)
The configuration is received from Spice client.
The main usage of this option is for disabling display features in order to accelerate Spice performance over limited network connections.
|
|
-add CLIPBOARD_ENABLED ifdefs in the agent for disabling clipboard support
-currently supports text only (UTF8)
|
|
-add VDAgent::dispatch_message()
-in VDAgent::read_completion() handle multi-chunk msgs
-fix chunk size bug in VDService::handle_pipe_data()
-add size to VDPipeMessage
|
|
* mutex.h inlined into common/vdcommon.h
* vdagent.h renamed to spice/vd_agent.h
|