qwsevent_qws.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:13k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.
  23. **
  24. ** Qt for Windows(R) Licensees
  25. ** As a special exception, Nokia, as the sole copyright holder for Qt
  26. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  27. ** right for the Qt/Eclipse Integration to link to functionality
  28. ** provided by Qt Designer and its related libraries.
  29. **
  30. ** If you are unsure which license is appropriate for your use, please
  31. ** contact the sales department at qt-sales@nokia.com.
  32. **
  33. ****************************************************************************/
  34. #ifndef QWSEVENT_QWS_H
  35. #define QWSEVENT_QWS_H
  36. #include <QtGui/qwsutils_qws.h>
  37. #include <QtGui/qwsprotocolitem_qws.h>
  38. #include <QtCore/qrect.h>
  39. #include <QtGui/qregion.h>
  40. #include <QtCore/qvector.h>
  41. QT_BEGIN_HEADER
  42. QT_BEGIN_NAMESPACE
  43. QT_MODULE(Gui)
  44. struct QWSMouseEvent;
  45. struct QWSEvent : QWSProtocolItem {
  46.     QWSEvent(int t, int len, char *ptr) : QWSProtocolItem(t,len,ptr) {}
  47.     enum Type {
  48.         NoEvent,
  49.         Connected,
  50.         Mouse,
  51.         Focus,
  52.         Key,
  53.         Region,
  54.         Creation,
  55.         PropertyNotify,
  56.         PropertyReply,
  57.         SelectionClear,
  58.         SelectionRequest,
  59.         SelectionNotify,
  60.         MaxWindowRect,
  61.         QCopMessage,
  62.         WindowOperation,
  63.         IMEvent,
  64.         IMQuery,
  65.         IMInit,
  66.         Embed,
  67.         Font,
  68.         ScreenTransformation,
  69.         NEvent
  70.     };
  71.     QWSMouseEvent *asMouse()
  72.         { return type == Mouse ? reinterpret_cast<QWSMouseEvent*>(this) : 0; }
  73.     int window() { return *(reinterpret_cast<int*>(simpleDataPtr)); }
  74.     int window() const { return *(reinterpret_cast<int*>(simpleDataPtr)); }
  75.     static QWSEvent *factory(int type);
  76. };
  77. //All events must start with windowID
  78. struct QWSConnectedEvent : QWSEvent {
  79.     QWSConnectedEvent()
  80.         : QWSEvent(QWSEvent::Connected, sizeof(simpleData),
  81.                 reinterpret_cast<char*>(&simpleData)) {}
  82.     void setData(const char *d, int len, bool allocateMem = true) {
  83.         QWSEvent::setData(d, len, allocateMem);
  84.         display = reinterpret_cast<char*>(rawDataPtr);
  85.     }
  86.     struct SimpleData {
  87.         int window;
  88.         int len;
  89.         int clientId;
  90.         int servershmid;
  91.     } simpleData;
  92.     char *display;
  93. };
  94. struct QWSMaxWindowRectEvent : QWSEvent {
  95.     QWSMaxWindowRectEvent()
  96.         : QWSEvent(MaxWindowRect, sizeof(simpleData), reinterpret_cast<char*>(&simpleData)) { }
  97.     struct SimpleData {
  98.         int window;
  99.         QRect rect;
  100.     } simpleData;
  101. };
  102. struct QWSMouseEvent : QWSEvent {
  103.     QWSMouseEvent()
  104.         : QWSEvent(QWSEvent::Mouse, sizeof(simpleData),
  105.                 reinterpret_cast<char*>(&simpleData)) {}
  106.     struct SimpleData {
  107.         int window;
  108.         int x_root, y_root, state, delta;
  109.         int time; // milliseconds
  110.     } simpleData;
  111. };
  112. struct QWSFocusEvent : QWSEvent {
  113.     QWSFocusEvent()
  114.         : QWSEvent(QWSEvent::Focus, sizeof(simpleData), reinterpret_cast<char*>(&simpleData))
  115.         { memset(reinterpret_cast<char*>(&simpleData),0,sizeof(simpleData)); }
  116.     struct SimpleData {
  117.         int window;
  118.         uint get_focus:1;
  119.     } simpleData;
  120. };
  121. struct QWSKeyEvent: QWSEvent {
  122.     QWSKeyEvent()
  123.         : QWSEvent(QWSEvent::Key, sizeof(simpleData),
  124.               reinterpret_cast<char*>(&simpleData)) {}
  125.     struct SimpleData {
  126.         int window;
  127.         uint keycode;
  128.         Qt::KeyboardModifiers modifiers;
  129.         ushort unicode;
  130.         uint is_press:1;
  131.         uint is_auto_repeat:1;
  132.     } simpleData;
  133. };
  134. struct QWSCreationEvent : QWSEvent {
  135.     QWSCreationEvent()
  136.         : QWSEvent(QWSEvent::Creation, sizeof(simpleData),
  137.               reinterpret_cast<char*>(&simpleData)) {}
  138.     struct SimpleData {
  139.         int objectid;
  140.         int count;
  141.     } simpleData;
  142. };
  143. #ifndef QT_NO_QWS_PROPERTIES
  144. struct QWSPropertyNotifyEvent : QWSEvent {
  145.     QWSPropertyNotifyEvent()
  146.         : QWSEvent(QWSEvent::PropertyNotify, sizeof(simpleData),
  147.               reinterpret_cast<char*>(&simpleData)) {}
  148.     enum State {
  149.         PropertyNewValue,
  150.         PropertyDeleted
  151.     };
  152.     struct SimpleData {
  153.         int window;
  154.         int property;
  155.         int state;
  156.     } simpleData;
  157. };
  158. #endif
  159. struct QWSSelectionClearEvent : QWSEvent {
  160.     QWSSelectionClearEvent()
  161.         : QWSEvent(QWSEvent::SelectionClear, sizeof(simpleData),
  162.               reinterpret_cast<char*>(&simpleData)) {}
  163.     struct SimpleData {
  164.         int window;
  165.     } simpleData;
  166. };
  167. struct QWSSelectionRequestEvent : QWSEvent {
  168.     QWSSelectionRequestEvent()
  169.         : QWSEvent(QWSEvent::SelectionRequest, sizeof(simpleData),
  170.               reinterpret_cast<char*>(&simpleData)) {}
  171.     struct SimpleData {
  172.         int window;
  173.         int requestor; // window which wants the selection
  174.         int property; // property on requestor into which the selection should be stored, normally QWSProperty::PropSelection
  175.         int mimeTypes; // Value is stored in the property mimeType on the requestor window. This value may contain
  176.         // multiple mimeTypes separated by ;; where the order reflects the priority
  177.     } simpleData;
  178. };
  179. struct QWSSelectionNotifyEvent : QWSEvent {
  180.     QWSSelectionNotifyEvent()
  181.         : QWSEvent(QWSEvent::SelectionNotify, sizeof(simpleData),
  182.               reinterpret_cast<char*>(&simpleData)) {}
  183.     struct SimpleData {
  184.         int window;
  185.         int requestor; // the window which wanted the selection and to which this event is sent
  186.         int property; // property of requestor in which the data of the selection is stored
  187.         int mimeType; // a property on the requestor in which the mime type in which the selection is, is stored
  188.     } simpleData;
  189. };
  190. //complex events:
  191. struct QWSRegionEvent : QWSEvent {
  192.     QWSRegionEvent()
  193.         : QWSEvent(QWSEvent::Region, sizeof(simpleData),
  194.                 reinterpret_cast<char*>(&simpleData))
  195.         { memset(reinterpret_cast<char*>(&simpleData),0,sizeof(simpleData)); }
  196.     void setData(const char *d, int len, bool allocateMem = true) {
  197.         QWSEvent::setData(d, len, allocateMem);
  198.         rectangles = reinterpret_cast<QRect*>(rawDataPtr);
  199.     }
  200.     void setData(int winId, const QRegion &region, uint type) {
  201.         const QVector<QRect> rects = region.rects();
  202.         setData(reinterpret_cast<const char*>(rects.constData()),
  203.             rects.size() * sizeof(QRect));
  204.         simpleData.window = winId;
  205.         simpleData.nrectangles = rects.size();
  206.         simpleData.type = type;
  207. #ifdef QT_QWS_CLIENTBLIT
  208.         simpleData.id = 0;
  209. #endif
  210.     }
  211.     enum Type {Allocation, Request
  212. #ifdef QT_QWS_CLIENTBLIT
  213.         , DirectPaint
  214. #endif
  215.     };
  216.     struct SimpleData {
  217.         int window;
  218.         int nrectangles;
  219. #ifdef QT_QWS_CLIENTBLIT
  220.         int id;
  221. #endif
  222.         uint type:8;
  223.     } simpleData;
  224.     QRect *rectangles;
  225. };
  226. #ifndef QT_NO_QWSEMBEDWIDGET
  227. struct QWSEmbedEvent : QWSEvent
  228. {
  229.     QWSEmbedEvent() : QWSEvent(QWSEvent::Embed, sizeof(simpleData),
  230.                                reinterpret_cast<char*>(&simpleData))
  231.     {}
  232.     enum Type { StartEmbed = 1, StopEmbed = 2, Region = 4 };
  233.     void setData(const char *d, int len, bool allocateMem = true) {
  234.         QWSEvent::setData(d, len, allocateMem);
  235.         region.setRects(reinterpret_cast<const QRect *>(rawDataPtr),
  236.                         simpleData.nrectangles);
  237.     }
  238.     void setData(int winId, Type type, const QRegion &reg = QRegion()) {
  239.         simpleData.window = winId;
  240.         simpleData.nrectangles = reg.rects().size();
  241.         simpleData.type = type;
  242.         region = reg;
  243.         const QVector<QRect> rects = reg.rects();
  244.         QWSEvent::setData(reinterpret_cast<const char*>(rects.data()),
  245.                           rects.size() * sizeof(QRect));
  246.     }
  247.     struct SimpleData {
  248.         int window;
  249.         int nrectangles;
  250.         Type type;
  251.     } simpleData;
  252.     QRegion region;
  253. };
  254. #endif // QT_NO_QWSEMBEDWIDGET
  255. #ifndef QT_NO_QWS_PROPERTIES
  256. struct QWSPropertyReplyEvent : QWSEvent {
  257.     QWSPropertyReplyEvent()
  258.         : QWSEvent(QWSEvent::PropertyReply, sizeof(simpleData),
  259.                 reinterpret_cast<char*>(&simpleData)) {}
  260.     void setData(const char *d, int len, bool allocateMem = true) {
  261.         QWSEvent::setData(d, len, allocateMem);
  262.         data = reinterpret_cast<char*>(rawDataPtr);
  263.     }
  264.     struct SimpleData {
  265.         int window;
  266.         int property;
  267.         int len;
  268.     } simpleData;
  269.     char *data;
  270. };
  271. #endif //QT_NO_QWS_PROPERTIES
  272. #ifndef QT_NO_COP
  273. struct QWSQCopMessageEvent : QWSEvent {
  274.     QWSQCopMessageEvent()
  275.         : QWSEvent(QWSEvent::QCopMessage, sizeof(simpleData),
  276.                 reinterpret_cast<char*>(&simpleData))
  277.         { memset(reinterpret_cast<char*>(&simpleData),0,sizeof(simpleData)); }
  278.     void setData(const char *d, int len, bool allocateMem = true) {
  279.         QWSEvent::setData(d, len, allocateMem);
  280.         char* p = rawDataPtr;
  281. channel = QByteArray(p, simpleData.lchannel);
  282.         p += simpleData.lchannel;
  283.         message = QByteArray(p, simpleData.lmessage);
  284.         p += simpleData.lmessage;
  285.         data = QByteArray(p, simpleData.ldata);
  286.     }
  287.     void setDataDirect(const char *d, int len) {
  288.         QWSEvent::setData(d, len, false);
  289.         deleteRaw = true;
  290.     }
  291.     struct SimpleData {
  292.         bool is_response;
  293.         int lchannel;
  294.         int lmessage;
  295.         int ldata;
  296.     } simpleData;
  297.     QByteArray channel;
  298.     QByteArray message;
  299.     QByteArray data;
  300. };
  301. #endif
  302. struct QWSWindowOperationEvent : QWSEvent {
  303.     QWSWindowOperationEvent()
  304.         : QWSEvent(WindowOperation, sizeof(simpleData), reinterpret_cast<char*>(&simpleData)) { }
  305.     enum Operation { Show, Hide, ShowMaximized, ShowNormal, ShowMinimized, Close };
  306.     struct SimpleData {
  307.         int window;
  308.         Operation op;
  309.     } simpleData;
  310. };
  311. #ifndef QT_NO_QWS_INPUTMETHODS
  312. struct QWSIMEvent : QWSEvent {
  313.     QWSIMEvent()
  314.         : QWSEvent(IMEvent, sizeof(simpleData), reinterpret_cast<char*>(&simpleData))
  315.    { memset(reinterpret_cast<char*>(&simpleData),0,sizeof(simpleData)); }
  316.     struct SimpleData {
  317.         int window;
  318.         int replaceFrom;
  319.         int replaceLength;
  320.     } simpleData;
  321.     void setData(const char *d, int len, bool allocateMem = true) {
  322.         QWSEvent::setData(d, len, allocateMem);
  323.         streamingData = QByteArray::fromRawData(rawDataPtr, len);
  324.     }
  325.     QByteArray streamingData;
  326. };
  327. struct QWSIMInitEvent : QWSEvent {
  328.     QWSIMInitEvent()
  329.         : QWSEvent(IMInit, sizeof(simpleData), reinterpret_cast<char*>(&simpleData))
  330.    { memset(reinterpret_cast<char*>(&simpleData),0,sizeof(simpleData)); }
  331.     struct SimpleData {
  332.         int window;
  333.         int existence;
  334.     } simpleData;
  335.     void setData(const char *d, int len, bool allocateMem = true) {
  336.         QWSEvent::setData(d, len, allocateMem);
  337.         streamingData = QByteArray::fromRawData(rawDataPtr, len);
  338.     }
  339.     QByteArray streamingData;
  340. };
  341. struct QWSIMQueryEvent : QWSEvent {
  342.     QWSIMQueryEvent()
  343.         : QWSEvent(QWSEvent::IMQuery, sizeof(simpleData),
  344.               reinterpret_cast<char*>(&simpleData)) {}
  345.     struct SimpleData {
  346.         int window;
  347.         int property;
  348.     } simpleData;
  349. };
  350. #endif
  351. struct QWSFontEvent : QWSEvent {
  352.     QWSFontEvent()
  353.         : QWSEvent(QWSEvent::Font, sizeof(simpleData),
  354.                 reinterpret_cast<char*>(&simpleData)) {}
  355.     enum EventType {
  356.         FontRemoved
  357.     };
  358.     void setData(const char *d, int len, bool allocateMem = true) {
  359.         QWSEvent::setData(d, len, allocateMem);
  360.         fontName = QByteArray::fromRawData(rawDataPtr, len);
  361.     }
  362.     struct SimpleData {
  363.         uchar type;
  364.     } simpleData;
  365.     QByteArray fontName;
  366. };
  367. struct QWSScreenTransformationEvent : QWSEvent {
  368.     QWSScreenTransformationEvent()
  369.         : QWSEvent(QWSEvent::ScreenTransformation, sizeof(simpleData),
  370.                    reinterpret_cast<char*>(&simpleData)) {}
  371.     struct SimpleData {
  372.         int screen;
  373.         int transformation;
  374.     } simpleData;
  375. };
  376. QT_END_NAMESPACE
  377. QT_END_HEADER
  378. #endif // QWSEVENT_QWS_H