| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
These are more reliably as they are called once the decision has been
made as to how to display the cursor. The other hooks are sensitive to
the order of extensions, which means that we can overlook cursor changes
done by other extensions (e.g. hiding it).
|
|
|
|
|
|
| |
Some paths indicate a hidden cursor using NullCursor, and some (most)
use a valid cursor that just has no contents. Make sure we can handle
both cases.
|
| |
|
|
|
|
|
|
|
|
|
| |
Windows aren't always directly shown, e.g. when the desktop is
composited. We should not be sending screen updates for these as the
framebuffer didn't actually change.
In the case of CopyWindow, we're even sending the wrong screen data,
which is how this bug was discovered.
|
|
|
|
|
| |
Although unlikely, there might be other parts of the X server that are
also interested in this call. Make sure we propagate things on properly.
|
|
|
|
|
|
| |
Xvnc was originally based on Xvfb, but it's just confusing to keep the
names. So change all prefix to "vnc" instead to clearly mark things as
part of TigerVNC.
|
|
|
|
|
|
| |
With the 1.20.x releases there has been features and API changes even on
patch level versions, so we need to update our macros to handle these as
well.
|
|
|
|
|
| |
RENDER has been mandatory since xorg-server 1.9, so remove these
checks.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change adds support for the VMware Mouse Position
pseudo-encoding[1], which is used to notify VNC clients when X11 clients
call `XWarpPointer()`[2]. This function is called by SDL (and other
similar libraries) when they detect that the server does not support
native relative motion, like some RFB clients.
With this, RFB clients can choose to adjust the local cursor position
under certain circumstances to match what the server has set. For
instance, if pointer lock has been enabled on the client's machine and
the cursor is not being drawn locally, the local position of the cursor
is irrelevant, so the RFB client can use what the server sends as the
canonical absolute position of the cursor. This ultimately enables the
possibility of games (especially FPS games) to behave how users expect
(if the clients implement the corresponding change).
Part of: #619
1: https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#vmware-cursor-position-pseudo-encoding
2: https://tronche.com/gui/x/xlib/input/XWarpPointer.html
3: https://hg.libsdl.org/SDL/file/28e3b60e2131/src/events/SDL_mouse.c#l804
|
|
|
|
| |
Might as well make these explicit so the cost is apparent.
|
|
|
|
|
| |
It creates an invalid region if given an empty rect. Fortunately
RegionInitBoxes() handles that just fine, so use that instead.
|
|
|
|
|
| |
We no longer support such old X servers so start using the current
functions.
|
|
|
|
|
|
| |
It seems like many of the X11 operations can end up with no pixels
actually changing. So instead of discovering and adding workarounds for
each individually we'll just check very region added if it's empty.
|
|
|
|
|
| |
We now require at least 1.16, so remove all code that handled older
versions than that.
|
|
|
|
|
|
| |
We get a whole bunch of very tiny areas, which is very inefficient to
deal with. Instead create a rectangle around every "list" of connected
glyphs (usually each line).
|
|
|
|
|
| |
RANDR is mandatory since Xorg 1.7, which is the oldest version we
support.
|
|
|
|
|
| |
TriFan and TriStrip were added in 1.12, so we need to have that code
conditional to support older versions of Xorg.
|
|
|
|
| |
We had overlooked a few so we didn't track all screen changes properly.
|
| |
|
|
|
|
|
|
| |
The functions might change so we need to also make sure we grab
the updated value after each call. Clean up the code to use the
same style as the rest of the Xorg code.
|
| |
|
|
|
|
|
| |
Pointer are global, not screen specific. Hence so is also the cursor
sprite.
|
|
|
|
|
|
| |
The check for visible drawables didn't account for compositing
which can place a window off-screen. Put all of these checks in
a common place and make sure it detects things properly.
|
| |
|
| |
|
|
|
|
|
| |
REGION_INIT() does not handle an empty or invalid BoxRec, so this
method makes sure we don't feed bad rects further in to the process.
|
|
|
|
| |
They should never have been global symbols to begin with.
|
|
|
|
|
| |
It's been in the Xorg code base for ages. Any version that lacks it is
too old for the rest of our code to work anyway.
|
| |
|
|
The internal Xorg headers are very incompatible with C++ and we've had
to resort to all kinds of hacks in order to include them in our C++
code. This approach isn't really viable long term so restructure things
so that we have a glue layer written in C that bridges the Xorg core
with the RFB classes.
|