diff options
Diffstat (limited to 'src/plugins/platforms/vnc/qvncscreen.cpp')
-rw-r--r-- | src/plugins/platforms/vnc/qvncscreen.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp index 29b5dda77d..b2ed898dcc 100644 --- a/src/plugins/platforms/vnc/qvncscreen.cpp +++ b/src/plugins/platforms/vnc/qvncscreen.cpp @@ -40,6 +40,7 @@ #include "qvncscreen.h" #include "qvnc_p.h" #include <QtPlatformSupport/private/qfbwindow_p.h> +#include <QtPlatformSupport/private/qfbcursor_p.h> #include <QtGui/QPainter> @@ -55,6 +56,8 @@ QVncScreen::QVncScreen(const QStringList &args) QVncScreen::~QVncScreen() { + if (clientCursor) + delete clientCursor; } bool QVncScreen::initialize() @@ -67,7 +70,7 @@ bool QVncScreen::initialize() QFbScreen::initializeCompositor(); QT_VNC_DEBUG() << "QVncScreen::init" << geometry(); - mCursor = new QFbCursor(this); + disableClientCursor(); switch (depth()) { case 32: @@ -104,6 +107,27 @@ QRegion QVncScreen::doRedraw() return touched; } +void QVncScreen::enableClientCursor() +{ + delete mCursor; + mCursor = 0; + clientCursor = new QVncClientCursor(vncServer); +} + +void QVncScreen::disableClientCursor() +{ + if (vncServer && clientCursor) { + delete clientCursor; + clientCursor = 0; + } + mCursor = new QFbCursor(this); +} + +QPlatformCursor *QVncScreen::cursor() const +{ + return mCursor ? static_cast<QPlatformCursor *>(mCursor) : static_cast<QPlatformCursor *>(clientCursor); +} + // grabWindow() grabs "from the screen" not from the backingstores. // In linuxfb's case it will also include the mouse cursor. QPixmap QVncScreen::grabWindow(WId wid, int x, int y, int width, int height) const |