[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdenetwork/krfb/krfb
From: George Kiagiadakis <kiagiadakis.george () gmail ! com>
Date: 2010-11-10 17:49:01
Message-ID: 20101110174901.5A675AC8A5 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1195267 by gkiagia:
Refactor the events handling code.
M +4 -11 abstractconnectioncontroller.cpp
M +76 -94 events.cpp
M +20 -57 events.h
--- trunk/KDE/kdenetwork/krfb/krfb/abstractconnectioncontroller.cpp #1195266:1195267
@@ -21,18 +21,14 @@
*/
#include "abstractconnectioncontroller.h"
-
#include "abstractrfbserver.h"
#include "connectiondialog.h"
+#include "events.h"
#include <KDebug>
#include <string.h>
-// events.h includes Xlib.h, which must always be included after all Qt headers,
-// so this must always be the last #include.
-#include "events.h"
-
static void clientGoneHook(rfbClientPtr cl)
{
AbstractConnectionController *cc = static_cast<AbstractConnectionController *>(cl->clientData);
@@ -85,23 +81,20 @@
void AbstractConnectionController::handleKeyEvent(bool down, rfbKeySym keySym)
{
if (controlEnabled) {
- KeyboardEvent ev(down, keySym);
- ev.exec();
+ EventHandler::handleKeyboard(down, keySym);
}
}
void AbstractConnectionController::handlePointerEvent(int bm, int x, int y)
{
if (controlEnabled) {
- PointerEvent ev(bm, x, y);
- ev.exec();
+ EventHandler::handlePointer(bm, x, y);
}
}
void AbstractConnectionController::clipboardToServer(const QString &s)
{
- ClipboardEvent ev(this, s);
- ev.exec();
+ //TODO implement me
}
void AbstractConnectionController::setControlEnabled(bool enable)
--- trunk/KDE/kdenetwork/krfb/krfb/events.cpp #1195266:1195267
@@ -1,56 +1,81 @@
-/* This file is part of the KDE project
+/*
+ This file is part of the KDE project
+
+ Copyright (C) 2010 Collabora Ltd.
+ @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
- (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
+ Copyright (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
This program 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 program 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 program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#include "events.h"
-#include "abstractconnectioncontroller.h"
-
#include <QtGui/QApplication>
#include <QtGui/QX11Info>
+#include <QtGui/QDesktopWidget>
+#include <KGlobal>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
+enum {
+ LEFTSHIFT = 1,
+ RIGHTSHIFT = 2,
+ ALTGR = 4
+};
-Display *KeyboardEvent::dpy;
-signed char KeyboardEvent::modifiers[0x100];
-KeyCode KeyboardEvent::keycodes[0x100];
-KeyCode KeyboardEvent::leftShiftCode;
-KeyCode KeyboardEvent::rightShiftCode;
-KeyCode KeyboardEvent::altGrCode;
-const int KeyboardEvent::LEFTSHIFT = 1;
-const int KeyboardEvent::RIGHTSHIFT = 2;
-const int KeyboardEvent::ALTGR = 4;
-char KeyboardEvent::ModifierState;
-bool KeyboardEvent::initDone = false;
+class EventData
+{
+public:
+ EventData();
+ //keyboard
+ Display *dpy;
+ signed char modifiers[0x100];
+ KeyCode keycodes[0x100];
+ KeyCode leftShiftCode;
+ KeyCode rightShiftCode;
+ KeyCode altGrCode;
+ char modifierState;
-KeyboardEvent::KeyboardEvent(bool d, KeySym k)
- : down(d), keySym(k)
+ //mouse
+ int buttonMask;
+
+private:
+ void init();
+};
+
+K_GLOBAL_STATIC(EventData, data);
+
+EventData::EventData()
{
- initKeycodes();
+ init();
}
-void KeyboardEvent::initKeycodes()
+void EventData::init()
{
- if (initDone) {
- return;
- }
+ dpy = QX11Info::display();
+ buttonMask = 0;
- initDone = true;
+ //initialize keycodes
KeySym key, *keymap;
int i, j, minkey, maxkey, syms_per_keycode;
- dpy = QX11Info::display();
-
memset(modifiers, -1, sizeof(modifiers));
XDisplayKeycodes(dpy, &minkey, &maxkey);
@@ -79,48 +104,47 @@
XFree((char *)keymap);
}
-/* this function adjusts the modifiers according to mod (as from modifiers) and ModifierState */
-void KeyboardEvent::tweakModifiers(signed char mod, bool down)
+/* this function adjusts the modifiers according to mod (as from modifiers) and data->modifierState */
+static void tweakModifiers(signed char mod, bool down)
{
+ bool isShift = data->modifierState & (LEFTSHIFT | RIGHTSHIFT);
- bool isShift = ModifierState & (LEFTSHIFT | RIGHTSHIFT);
-
if (mod < 0) {
return;
}
if (isShift && mod != 1) {
- if (ModifierState & LEFTSHIFT) {
- XTestFakeKeyEvent(dpy, leftShiftCode,
+ if (data->modifierState & LEFTSHIFT) {
+ XTestFakeKeyEvent(data->dpy, data->leftShiftCode,
down, CurrentTime);
}
- if (ModifierState & RIGHTSHIFT) {
- XTestFakeKeyEvent(dpy, rightShiftCode,
+ if (data->modifierState & RIGHTSHIFT) {
+ XTestFakeKeyEvent(data->dpy, data->rightShiftCode,
down, CurrentTime);
}
}
if (!isShift && mod == 1) {
- XTestFakeKeyEvent(dpy, leftShiftCode,
+ XTestFakeKeyEvent(data->dpy, data->leftShiftCode,
down, CurrentTime);
}
- if ((ModifierState & ALTGR) && mod != 2) {
- XTestFakeKeyEvent(dpy, altGrCode,
+ if ((data->modifierState & ALTGR) && mod != 2) {
+ XTestFakeKeyEvent(data->dpy, data->altGrCode,
!down, CurrentTime);
}
- if (!(ModifierState & ALTGR) && mod == 2) {
- XTestFakeKeyEvent(dpy, altGrCode,
+ if (!(data->modifierState & ALTGR) && mod == 2) {
+ XTestFakeKeyEvent(data->dpy, data->altGrCode,
down, CurrentTime);
}
}
-void KeyboardEvent::exec()
+void EventHandler::handleKeyboard(bool down, rfbKeySym keySym)
{
#define ADJUSTMOD(sym,state) \
- if(keySym==sym) { if(down) ModifierState|=state; else ModifierState&=~state; }
+ if(keySym==sym) { if(down) data->modifierState|=state; else data->modifierState&=~state; }
ADJUSTMOD(XK_Shift_L, LEFTSHIFT);
ADJUSTMOD(XK_Shift_R, RIGHTSHIFT);
@@ -130,43 +154,29 @@
KeyCode k;
if (down) {
- tweakModifiers(modifiers[keySym], True);
+ tweakModifiers(data->modifiers[keySym], True);
}
- k = keycodes[keySym];
+ k = data->keycodes[keySym];
if (k != NoSymbol) {
- XTestFakeKeyEvent(dpy, k, down, CurrentTime);
+ XTestFakeKeyEvent(data->dpy, k, down, CurrentTime);
}
if (down) {
- tweakModifiers(modifiers[keySym], False);
+ tweakModifiers(data->modifiers[keySym], False);
}
} else {
- KeyCode k = XKeysymToKeycode(dpy, keySym);
+ KeyCode k = XKeysymToKeycode(data->dpy, keySym);
if (k != NoSymbol) {
- XTestFakeKeyEvent(dpy, k, down, CurrentTime);
+ XTestFakeKeyEvent(data->dpy, k, down, CurrentTime);
}
}
}
-bool PointerEvent::initialized = false;
-Display *PointerEvent::dpy;
-int PointerEvent::buttonMask = 0;
-
-PointerEvent::PointerEvent(int b, int _x, int _y)
- : button_mask(b), x(_x), y(_y)
+void EventHandler::handlePointer(int buttonMask, int x, int y)
{
- if (!initialized) {
- initialized = true;
- dpy = QX11Info::display();
- buttonMask = 0;
- }
-}
-
-void PointerEvent::exec()
-{
QDesktopWidget *desktopWidget = QApplication::desktop();
int screen = desktopWidget->screenNumber();
@@ -175,44 +185,16 @@
screen = 0;
}
- XTestFakeMotionEvent(dpy, screen, x, y, CurrentTime);
+ XTestFakeMotionEvent(data->dpy, screen, x, y, CurrentTime);
for (int i = 0; i < 5; i++) {
- if ((buttonMask&(1 << i)) != (button_mask&(1 << i))) {
- XTestFakeButtonEvent(dpy,
+ if ((data->buttonMask&(1 << i)) != (buttonMask&(1 << i))) {
+ XTestFakeButtonEvent(data->dpy,
i + 1,
- (button_mask&(1 << i)) ? True : False,
+ (buttonMask&(1 << i)) ? True : False,
CurrentTime);
}
}
- buttonMask = button_mask;
+ data->buttonMask = buttonMask;
}
-
-
-ClipboardEvent::ClipboardEvent(AbstractConnectionController *c, const QString &ctext)
- : controller(c), text(ctext)
-{
-}
-
-void ClipboardEvent::exec()
-{
-#if 0
-
- if ((controller->lastClipboardDirection == ConnectionController::LAST_SYNC_TO_CLIENT) &&
- (controller->lastClipboardText == text)) {
- return;
- }
-
- controller->lastClipboardDirection = ConnectionController::LAST_SYNC_TO_SERVER;
- controller->lastClipboardText = text;
-
- controller->clipboard->setText(text, QClipboard::Clipboard);
- controller->clipboard->setText(text, QClipboard::Selection);
-#endif
-}
-
-
-VNCEvent::~ VNCEvent()
-{
-}
--- trunk/KDE/kdenetwork/krfb/krfb/events.h #1195266:1195267
@@ -1,74 +1,37 @@
-/* This file is part of the KDE project
+/*
+ This file is part of the KDE project
+
+ Copyright (C) 2010 Collabora Ltd.
+ @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
- (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
+ Copyright (C) 2001-2003 by Tim Jansen <tim@tjansen.de>
This program 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 program 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 program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#ifndef EVENTS_H
#define EVENTS_H
-#include <QtCore/QEvent>
-#include <QtCore/QString>
-#include <QtGui/QDesktopWidget>
+#include "rfb.h"
-#include <X11/Xlib.h>
-
-class AbstractConnectionController;
-
-class QCursor;
-
-class VNCEvent
+class EventHandler
{
public:
- virtual void exec() = 0;
- virtual ~VNCEvent();
+ static void handleKeyboard(bool down, rfbKeySym key);
+ static void handlePointer(int buttonMask, int x, int y);
};
-class KeyboardEvent : public VNCEvent
-{
- bool down;
- KeySym keySym;
-
- static Display *dpy;
- static signed char modifiers[0x100];
- static KeyCode keycodes[0x100], leftShiftCode, rightShiftCode, altGrCode;
- static const int LEFTSHIFT;
- static const int RIGHTSHIFT;
- static const int ALTGR;
- static char ModifierState;
- static bool initDone;
-
- static void tweakModifiers(signed char mod, bool down);
-public:
- static void initKeycodes();
-
- KeyboardEvent(bool d, KeySym k);
- virtual void exec();
-};
-
-class PointerEvent : public VNCEvent
-{
- int button_mask, x, y;
-
- static bool initialized;
- static Display *dpy;
- static int buttonMask;
-public:
- PointerEvent(int b, int _x, int _y);
- virtual void exec();
-};
-
-class ClipboardEvent : public VNCEvent
-{
- AbstractConnectionController *controller;
- QString text;
-public:
- ClipboardEvent(AbstractConnectionController *c, const QString &text);
- virtual void exec();
-};
-
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic