mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-12-25 16:18:53 +01:00
25b8e64adb
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
102 lines
2.7 KiB
C++
102 lines
2.7 KiB
C++
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
|
|
* Copyright 2011-2015 Pierre Ossman for Cendio AB
|
|
*
|
|
* This is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This software is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
* USA.
|
|
*/
|
|
#ifndef __VNCEXTINIT_H__
|
|
#define __VNCEXTINIT_H__
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <sys/select.h>
|
|
|
|
// Only from C++
|
|
#ifdef __cplusplus
|
|
namespace rfb { class StringParameter; };
|
|
|
|
extern rfb::StringParameter httpDir;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// vncExt.c
|
|
extern int vncNoClipboard;
|
|
|
|
void vncAddExtension(void);
|
|
|
|
int vncNotifyQueryConnect(void);
|
|
|
|
// vncExtInit.cc
|
|
extern void* vncFbptr[];
|
|
extern int vncFbstride[];
|
|
|
|
extern int vncInetdSock;
|
|
|
|
void vncExtensionInit(void);
|
|
void vncExtensionClose(void);
|
|
|
|
void vncHandleSocketEvent(int fd, int scrIdx, int read, int write);
|
|
void vncCallBlockHandlers(int* timeout);
|
|
|
|
int vncGetAvoidShiftNumLock(void);
|
|
|
|
int vncGetSetPrimary(void);
|
|
int vncGetSendPrimary(void);
|
|
|
|
void vncUpdateDesktopName(void);
|
|
|
|
void vncServerCutText(const char *text, size_t len);
|
|
|
|
int vncConnectClient(const char *addr);
|
|
|
|
void vncGetQueryConnect(uint32_t *opaqueId, const char**username,
|
|
const char **address, int *timeout);
|
|
void vncApproveConnection(uint32_t opaqueId, int approve);
|
|
|
|
void vncBell(void);
|
|
|
|
void vncSetLEDState(unsigned long leds);
|
|
|
|
// Must match rfb::ShortRect in common/rfb/Region.h, and BoxRec in the
|
|
// Xorg source.
|
|
struct UpdateRect {
|
|
short x1, y1, x2, y2;
|
|
};
|
|
|
|
void vncAddChanged(int scrIdx, const struct UpdateRect *extents,
|
|
int nRects, const struct UpdateRect *rects);
|
|
void vncAddCopied(int scrIdx, const struct UpdateRect *extents,
|
|
int nRects, const struct UpdateRect *rects,
|
|
int dx, int dy);
|
|
|
|
void vncSetCursor(int width, int height, int hotX, int hotY,
|
|
const unsigned char *rgbaData);
|
|
void vncSetCursorPos(int scrIdx, int x, int y);
|
|
|
|
void vncPreScreenResize(int scrIdx);
|
|
void vncPostScreenResize(int scrIdx, int success, int width, int height);
|
|
void vncRefreshScreenLayout(int scrIdx);
|
|
|
|
int vncOverrideParam(const char *nameAndValue);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|