| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
No matter how carefully you choose your shortcut modifiers, there might
still be situations where you need to send those key combinations to
the server instead.
This commit adds a method for this by letting the <modifiers>+Space
combination temporarily bypass the keyboard shortcut logic and send
everything to the server (until all keys are released again).
|
|
|
|
|
|
|
|
| |
We want to be able to define more keyboard combinations that allows the
user to control the client instead of sending the keys to the server.
Instead of adding a never ending stream of random keys that just
confuses things, we'll define a set of modifiers that are the base for
all client control commands.
|
|
|
|
| |
We haven't used that information in a decade.
|
|
|
|
|
|
| |
We already had a field in the ServerParams structure, but we never
actually stored anything in it. Let's fix that so the cursor behaves
like other state we get from the server.
|
|
|
|
|
|
|
| |
Make it clearer what is protocol handling and what is just general
plumbing.
This is one step of several.
|
|\ |
|
| |
| |
| |
| |
| |
| | |
This adds the option to select which cursor should be used in the event the
server sends an invisible cursor. It also renames the DotWhenNoCursor config
option to AlwaysCursor.
|
|\ \ |
|
| | |
| | |
| | |
| | |
| | | |
Encapsulate all the platform specific magic around keyboard in to
specific classes, in order to keep the core code more readable.
|
| | |
| | |
| | |
| | |
| | |
| | | |
This is a general thing so move it in to the core library instead,
letting vncviewer focus on just translation of system events to VNC
ones.
|
| | |
| | |
| | |
| | |
| | | |
We might not always be able to map to an RFB key code, so let's use the
platform specific code to track which keys are pressed.
|
|/ /
| |
| |
| |
| |
| |
| |
| | |
This commit implements the pseudo-encoding ExtendedMouseButtons which
makes it possible to use the back/forward mouse buttons.
This commit contains work originally done by
PixelSmith <manny33@frontbuffer.com>.
|
|/
|
|
|
| |
This is a very limited bit field, so use an 8 bit type to clearly show
how many bits are available.
|
|
|
|
|
| |
Use the new "override" keyword to properly differentiate between new
virtual methods, and existing virtual methods being overridden.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We can get races with clipboard managers in the server that is very
confusing to the user.
When the clipboard changes locally, we tell the server to drop the old
clipboard (as it is now lost). But we don't send over the new clipboard
until we get focus again, in order to not leak more data than necessary.
This causes some clibpoard managers to take over ownership in order to
avoid an empty clipboard. And this takes precedence over the new client
clipboard as it happened later. Effectively reverting the clipboard the
user sees.
Avoid all of this by simply ignoring the server when we don't have
focus. This is likely what users expect anyway as they expect their
currently focused application to control the clipboard, not vncviewer in
the background.
|
|
|
|
|
| |
Avoid having our own custom stuff and instead use the modern, standard
types, for familiarity.
|
|
|
|
|
|
|
|
|
|
| |
The system steals keyboard events for certain system keyboard shortcuts,
e.g. Cmd+Tab. Unfortunately this isn't considered a focus loss, so we
don't realise we've lost a few keyboard events and can end up in a
confused state.
Fortunately it is possible to detect when this happens and reset the
keyboard state, just like we do when focus is lost.
|
|
|
|
|
|
|
|
|
|
| |
We have a timer after Ctrl is pressed in order to see if an Alt will
come right after. Ctrl + Alt is what windows sends for AltGr.
If a key other than Alt was pressed we knew that we could cancel this
timer, this commit extends that to mouse events too.
Since this detection breaks the true order of events we want to make
a decision as fast as possible.
|
|
|
|
|
|
|
|
| |
Not every mouse has three buttons e.g. laptops. Some OS might not
have support for middle mouse button emulation.
This commit adds emulation for middle mouse button when pressing both
left and right mouse button simultaneously.
|
|
|
|
|
| |
Change the internal clipboard API to use a request based model in
order to be prepared for more advanced clipboard transfers.
|
|
|
|
|
| |
We convert between UTF-8 and ISO 8859-1 (latin 1) in several places
so create some common routines for this.
|
|
|
|
|
|
| |
We now filter incoming data, which means we can start assuming the
clipboard data is always null terminated. This allows us to clean
up a lot of the internal handling.
|
|
|
|
|
|
| |
We should start by getting the remote end in sync with the actual
keyboard state. This would work randomly before depending on if we
got the first LED state message before or after we got focus.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
We don't want to surprise the user with unexpected clipboard changes
when vncviewer is in the background, and it is both wasteful and
possibly insecure to inform the server of every clipboard update
when the user isn't interacting with it.
|
| | |
|
| |
| |
| |
| |
| | |
Apply workaround for FLTK's bad focus handling so that we can let
Viewport handle LED synchronisation without help from DesktopWindow.
|
| |
| |
| |
| |
| | |
That way both incoming and outgoing clipboard are both in the same
place, making things clearer.
|
|/
|
|
|
|
| |
The handler is for incoming data and we should not be abusing that
class for the writer class. Do proper write prototypes for the
relevant functions.
|
|
|
|
|
|
| |
Try to properly detect the fake CtrlL+AltR sequence Windows sends
when pressing AltGr. This allows us to send more accurate key
events over to the server.
|
|
|
|
|
| |
Make sure it can map between the key codes of the local system
in to the key codes used by the protocol.
|
|
|
|
|
| |
The state might have changed when we didn't have focus. Get
everything back in sync once we're back in control.
|
| |
|
|
|
|
|
| |
This will allow us to use better formats that preserve the entire
alpha channel.
|
|
|
|
|
|
| |
Some platforms draw directly to the screen, which means that updates
will flicker if we draw multiple layers. Prevent this by first
composing the update on a hidden surface.
|
|
|
|
| |
This will allow us to render more things than just the framebuffer.
|
| |
|
|
|
|
|
|
|
|
|
| |
Done in preparation for multi-core decoding. Keeps the complexity
out of the other classes. This also moves ownership of the
framebuffer in to CConnection. It's the CConnection object that is
aware of the threads and how to synchronise with them. Therefore
the ownership of the framebuffer must also be there to make sure
it isn't deleted whilst threads are working.
|
|
|
|
| |
This means that we can remove a lot of conditionals and fallback code.
|
| |
|
|
|
|
|
| |
Boiler plate code to intercept system events from FLTK so that
we can generate proper keyboard messages.
|
|
|
|
|
| |
Remove the FLTK simple keyboard system and reorganise things in
preparation for a more direct approach.
|
|
|
|
|
|
|
| |
This avoid a lot of unnecessary middle men. This also pushes the
responsibility for pixel format conversion into the encoders and
decoders. The new bufferFromBuffer() is used for direct conversion,
rather than PixelTransformer/TransImageGetter.
|
|
|
|
|
| |
Clearly separates the read API from the write API
and also from actual implementation.
|
|
|
|
|
| |
This allows us to gracefully fall back to the FLTK code in case the
platform specific code cannot be used.
|
|
|
|
|
|
|
|
|
| |
Gets rid of a loooot of code and complexity.
Colour map clients are still supported through an
automatically generated map, but we lose the ability to
develop a client or server that uses colour maps
internally.
|
|
|
|
| |
Reduces header dependencies.
|
| |
|
| |
|
| |
|