summaryrefslogtreecommitdiffstats
path: root/src/gui/embedded/qwindowsystem_qws.h
diff options
context:
space:
mode:
authorQt by Nokia <qt-info@nokia.com>2011-04-27 12:05:43 +0200
committeraxis <qt-info@nokia.com>2011-04-27 12:05:43 +0200
commit38be0d13830efd2d98281c645c3a60afe05ffece (patch)
tree6ea73f3ec77f7d153333779883e8120f82820abe /src/gui/embedded/qwindowsystem_qws.h
Initial import from the monolithic Qt.
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
Diffstat (limited to 'src/gui/embedded/qwindowsystem_qws.h')
-rw-r--r--src/gui/embedded/qwindowsystem_qws.h508
1 files changed, 508 insertions, 0 deletions
diff --git a/src/gui/embedded/qwindowsystem_qws.h b/src/gui/embedded/qwindowsystem_qws.h
new file mode 100644
index 0000000000..65e1683d38
--- /dev/null
+++ b/src/gui/embedded/qwindowsystem_qws.h
@@ -0,0 +1,508 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSYSTEM_QWS_H
+#define QWINDOWSYSTEM_QWS_H
+
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmap.h>
+#include <QtCore/qdatetime.h>
+#include <QtCore/qlist.h>
+
+#include <QtGui/qwsevent_qws.h>
+#include <QtGui/qkbd_qws.h>
+#include <QtGui/qregion.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+struct QWSWindowPrivate;
+class QWSCursor;
+class QWSClient;
+class QWSRegionManager;
+class QBrush;
+class QVariant;
+class QInputMethodEvent;
+class QWSInputMethod;
+class QWSBackingStore;
+class QWSWindowSurface;
+
+#ifdef QT3_SUPPORT
+class QImage;
+class QColor;
+#endif
+
+class QWSInternalWindowInfo
+{
+public:
+ int winid;
+ unsigned int clientid;
+ QString name; // Corresponds to QObject name of top-level widget
+};
+
+
+class Q_GUI_EXPORT QWSScreenSaver
+{
+public:
+ virtual ~QWSScreenSaver();
+ virtual void restore()=0;
+ virtual bool save(int level)=0;
+};
+
+
+class Q_GUI_EXPORT QWSWindow
+{
+ friend class QWSServer;
+ friend class QWSServerPrivate;
+
+public:
+ QWSWindow(int i, QWSClient* client);
+ ~QWSWindow();
+
+ int winId() const { return id; }
+ const QString &name() const { return rgnName; }
+ const QString &caption() const { return rgnCaption; }
+ QWSClient* client() const { return c; }
+ const QRegion &requestedRegion() const { return requested_region; }
+ QRegion allocatedRegion() const;
+ QRegion paintedRegion() const;
+ bool isVisible() const { return !requested_region.isEmpty(); }
+ bool isPartiallyObscured() const { return requested_region != allocatedRegion(); }
+ bool isFullyObscured() const { return allocatedRegion().isEmpty(); }
+
+ enum State { NoState, Hidden, Showing, Visible, Hiding, Raising, Lowering, Moving, ChangingGeometry, Destroyed };
+ State state() const;
+ Qt::WindowFlags windowFlags() const;
+ QRegion dirtyOnScreen() const;
+
+ void raise();
+ void lower();
+ void show();
+ void hide();
+ void setActiveWindow();
+
+ bool isOpaque() const {return opaque && _opacity == 255;}
+ uint opacity() const { return _opacity; }
+
+ QWSWindowSurface* windowSurface() const { return surface; }
+
+private:
+ bool hidden() const { return requested_region.isEmpty(); }
+ bool forClient(const QWSClient* cl) const { return cl==c; }
+
+ void setName(const QString &n);
+ void setCaption(const QString &c);
+
+ void focus(bool get);
+ int focusPriority() const { return last_focus_time; }
+ void operation(QWSWindowOperationEvent::Operation o);
+ void shuttingDown() { last_focus_time=0; }
+
+#ifdef QT_QWS_CLIENTBLIT
+ QRegion directPaintRegion() const;
+ inline void setDirectPaintRegion(const QRegion &topmost);
+#endif
+ inline void setAllocatedRegion(const QRegion &region);
+
+ void createSurface(const QString &key, const QByteArray &data);
+
+#ifndef QT_NO_QWSEMBEDWIDGET
+ void startEmbed(QWSWindow *window);
+ void stopEmbed(QWSWindow *window);
+#endif
+
+private:
+ int id;
+ QString rgnName;
+ QString rgnCaption;
+ bool modified;
+ bool onTop;
+ QWSClient* c;
+ QRegion requested_region;
+ QRegion exposed;
+ int last_focus_time;
+ QWSWindowSurface *surface;
+ uint _opacity;
+ bool opaque;
+ QWSWindowPrivate *d;
+#ifdef QT3_SUPPORT
+ inline QT3_SUPPORT QRegion requested() const { return requested_region; }
+// inline QT3_SUPPORT QRegion allocation() const { return allocated_region; }
+#endif
+};
+
+
+#ifndef QT_NO_SOUND
+class QWSSoundServer;
+#ifdef QT_USE_OLD_QWS_SOUND
+class QWSSoundServerData;
+
+class Q_GUI_EXPORT QWSSoundServer : public QObject {
+ Q_OBJECT
+public:
+ QWSSoundServer(QObject* parent);
+ ~QWSSoundServer();
+ void playFile(const QString& filename);
+private Q_SLOTS:
+ void feedDevice(int fd);
+private:
+ QWSSoundServerData* d;
+};
+#endif
+#endif
+
+
+/*********************************************************************
+ *
+ * Class: QWSServer
+ *
+ *********************************************************************/
+
+class QWSMouseHandler;
+struct QWSCommandStruct;
+class QWSServerPrivate;
+class QWSServer;
+
+extern Q_GUI_EXPORT QWSServer *qwsServer;
+
+class Q_GUI_EXPORT QWSServer : public QObject
+{
+ friend class QCopChannel;
+ friend class QWSMouseHandler;
+ friend class QWSWindow;
+ friend class QWSDisplay;
+ friend class QWSInputMethod;
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QWSServer)
+public:
+ explicit QWSServer(int flags = 0, QObject *parent=0);
+#ifdef QT3_SUPPORT
+ QT3_SUPPORT_CONSTRUCTOR QWSServer(int flags, QObject *parent, const char *name);
+#endif
+ ~QWSServer();
+ enum ServerFlags { DisableKeyboard = 0x01,
+ DisableMouse = 0x02 };
+
+ static void sendKeyEvent(int unicode, int keycode, Qt::KeyboardModifiers modifiers,
+ bool isPress, bool autoRepeat);
+#ifndef QT_NO_QWS_KEYBOARD
+ static void processKeyEvent(int unicode, int keycode, Qt::KeyboardModifiers modifiers,
+ bool isPress, bool autoRepeat);
+#endif
+
+ static QWSServer* instance() { return qwsServer; }
+
+#ifndef QT_NO_QWS_INPUTMETHODS
+#ifdef QT3_SUPPORT
+ enum IMState { IMCompose, IMEnd, IMStart = IMCompose };
+#endif
+ enum IMMouse { MousePress, MouseRelease, MouseMove, MouseOutside }; //MouseMove reserved but not used
+ void sendIMEvent(const QInputMethodEvent*);
+ void sendIMQuery(int property);
+#endif
+
+#ifndef QT_NO_QWS_KEYBOARD
+ class KeyboardFilter
+ {
+ public:
+ virtual ~KeyboardFilter() {}
+ virtual bool filter(int unicode, int keycode, int modifiers,
+ bool isPress, bool autoRepeat)=0;
+ };
+ static void addKeyboardFilter(KeyboardFilter *f);
+ static void removeKeyboardFilter();
+#endif
+
+#ifndef QT_NO_QWS_INPUTMETHODS
+ static void setCurrentInputMethod(QWSInputMethod *im);
+ static void resetInputMethod();
+#endif
+
+ static void setDefaultMouse(const char *);
+ static void setDefaultKeyboard(const char *);
+ static void setMaxWindowRect(const QRect&);
+ static void sendMouseEvent(const QPoint& pos, int state, int wheel = 0);
+
+ static void setBackground(const QBrush &);
+#ifdef QT3_SUPPORT
+ static QT3_SUPPORT void setDesktopBackground(const QImage &img);
+ static QT3_SUPPORT void setDesktopBackground(const QColor &);
+#endif
+ static QWSMouseHandler *mouseHandler();
+ static const QList<QWSMouseHandler*>& mouseHandlers();
+ static void setMouseHandler(QWSMouseHandler*);
+#ifndef QT_NO_QWS_KEYBOARD
+ static QWSKeyboardHandler* keyboardHandler();
+ static void setKeyboardHandler(QWSKeyboardHandler* kh);
+#endif
+ QWSWindow *windowAt(const QPoint& pos);
+
+ const QList<QWSWindow*> &clientWindows();
+
+ void openMouse();
+ void closeMouse();
+ void suspendMouse();
+ void resumeMouse();
+#ifndef QT_NO_QWS_KEYBOARD
+ void openKeyboard();
+ void closeKeyboard();
+#endif
+
+ static void setScreenSaver(QWSScreenSaver*);
+ static void setScreenSaverIntervals(int* ms);
+ static void setScreenSaverInterval(int);
+ static void setScreenSaverBlockLevel(int);
+ static bool screenSaverActive();
+ static void screenSaverActivate(bool);
+
+ // the following are internal.
+ void refresh();
+ void refresh(QRegion &);
+
+ void enablePainting(bool);
+ static void processEventQueue();
+ static QList<QWSInternalWindowInfo*> * windowList();
+
+ void sendPropertyNotifyEvent(int property, int state);
+
+ static QPoint mousePosition;
+
+ static void startup(int flags);
+ static void closedown();
+
+ static void beginDisplayReconfigure();
+ static void endDisplayReconfigure();
+
+#ifndef QT_NO_QWS_CURSOR
+ static void setCursorVisible(bool);
+ static bool isCursorVisible();
+#endif
+
+ const QBrush &backgroundBrush() const;
+
+ enum WindowEvent { Create=0x0001, Destroy=0x0002, Hide=0x0004, Show=0x0008,
+ Raise=0x0010, Lower=0x0020, Geometry=0x0040, Active = 0x0080,
+ Name=0x0100 };
+
+Q_SIGNALS:
+ void windowEvent(QWSWindow *w, QWSServer::WindowEvent e);
+
+#ifndef QT_NO_COP
+ void newChannel(const QString& channel);
+ void removedChannel(const QString& channel);
+
+#endif
+#ifndef QT_NO_QWS_INPUTMETHODS
+ void markedText(const QString &);
+#endif
+
+protected:
+ void timerEvent(QTimerEvent *e);
+
+private:
+ friend class QApplicationPrivate;
+ void updateWindowRegions() const;
+
+#ifdef QT3_SUPPORT
+#ifndef QT_NO_QWS_KEYBOARD
+ static inline QT3_SUPPORT void setKeyboardFilter(QWSServer::KeyboardFilter *f)
+ { if (f) addKeyboardFilter(f); else removeKeyboardFilter(); }
+#endif
+#endif
+
+private:
+#ifndef QT_NO_QWS_MULTIPROCESS
+ Q_PRIVATE_SLOT(d_func(), void _q_clientClosed())
+ Q_PRIVATE_SLOT(d_func(), void _q_doClient())
+ Q_PRIVATE_SLOT(d_func(), void _q_deleteWindowsLater())
+#endif
+
+ Q_PRIVATE_SLOT(d_func(), void _q_screenSaverWake())
+ Q_PRIVATE_SLOT(d_func(), void _q_screenSaverSleep())
+ Q_PRIVATE_SLOT(d_func(), void _q_screenSaverTimeout())
+
+#ifndef QT_NO_QWS_MULTIPROCESS
+ Q_PRIVATE_SLOT(d_func(), void _q_newConnection())
+#endif
+};
+
+#ifndef QT_NO_QWS_INPUTMETHODS
+class Q_GUI_EXPORT QWSInputMethod : public QObject
+{
+ Q_OBJECT
+public:
+ QWSInputMethod();
+ virtual ~QWSInputMethod();
+
+ enum UpdateType {Update, FocusIn, FocusOut, Reset, Destroyed};
+
+ virtual bool filter(int unicode, int keycode, int modifiers,
+ bool isPress, bool autoRepeat);
+
+ virtual bool filter(const QPoint &, int state, int wheel);
+
+ virtual void reset();
+ virtual void updateHandler(int type);
+ virtual void mouseHandler(int pos, int state);
+ virtual void queryResponse(int property, const QVariant&);
+
+protected:
+ uint setInputResolution(bool isHigh);
+ uint inputResolutionShift() const;
+ // needed for required transform
+ void sendMouseEvent(const QPoint &pos, int state, int wheel);
+
+ void sendEvent(const QInputMethodEvent*);
+ void sendPreeditString(const QString &preeditString, int cursorPosition, int selectionLength = 0);
+ void sendCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0);
+ void sendQuery(int property);
+
+#ifdef QT3_SUPPORT
+ inline void sendIMEvent(QWSServer::IMState, const QString& txt, int cpos, int selLen = 0);
+#endif
+private:
+ bool mIResolution;
+};
+
+inline void QWSInputMethod::sendEvent(const QInputMethodEvent *ime)
+{
+ qwsServer->sendIMEvent(ime);
+}
+#ifdef QT3_SUPPORT
+inline void QWSInputMethod::sendIMEvent(QWSServer::IMState state, const QString& txt, int cpos, int selLen)
+{
+ if (state == QWSServer::IMCompose) sendPreeditString(txt, cpos, selLen); else sendCommitString(txt);
+}
+#endif
+
+inline void QWSInputMethod::sendQuery(int property)
+{
+ qwsServer->sendIMQuery(property);
+}
+
+// mouse events not inline as involve transformations.
+#endif // QT_NO_QWS_INPUTMETHODS
+
+
+
+/*********************************************************************
+ *
+ * Class: QWSClient
+ *
+ *********************************************************************/
+
+struct QWSMouseEvent;
+
+typedef QMap<int, QWSCursor*> QWSCursorMap;
+
+class QWSClientPrivate;
+class QWSCommand;
+class QWSConvertSelectionCommand;
+
+class Q_GUI_EXPORT QWSClient : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QWSClient)
+public:
+ QWSClient(QObject* parent, QWS_SOCK_BASE *, int id);
+ ~QWSClient();
+
+ int socket() const;
+
+ void setIdentity(const QString&);
+ QString identity() const { return id; }
+
+ void sendEvent(QWSEvent* event);
+ void sendConnectedEvent(const char *display_spec);
+ void sendMaxWindowRectEvent(const QRect &rect);
+ void sendPropertyNotifyEvent(int property, int state);
+ void sendPropertyReplyEvent(int property, int len, const char *data);
+ void sendSelectionClearEvent(int windowid);
+ void sendSelectionRequestEvent(QWSConvertSelectionCommand *cmd, int windowid);
+#ifndef QT_QWS_CLIENTBLIT
+ void sendRegionEvent(int winid, QRegion rgn, int type);
+#else
+ void sendRegionEvent(int winid, QRegion rgn, int type, int id = 0);
+#endif
+#ifndef QT_NO_QWSEMBEDWIDGET
+ void sendEmbedEvent(int winid, QWSEmbedEvent::Type type,
+ const QRegion &region = QRegion());
+#endif
+ QWSCommand* readMoreCommand();
+
+ int clientId() const { return cid; }
+
+ QWSCursorMap cursors; // cursors defined by this client
+Q_SIGNALS:
+ void connectionClosed();
+ void readyRead();
+private Q_SLOTS:
+ void closeHandler();
+ void errorHandler();
+
+private:
+#ifndef QT_NO_QWS_MULTIPROCESS
+ friend class QWSWindow;
+ void removeUnbufferedSurface();
+ void addUnbufferedSurface();
+#endif
+
+private:
+ int socketDescriptor;
+#ifndef QT_NO_QWS_MULTIPROCESS
+ QWSSocket *csocket;
+#endif
+ QWSCommand* command;
+ uint isClosed : 1;
+ QString id;
+ int cid;
+
+ friend class QWSServerPrivate;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QWINDOWSYSTEM_QWS_H