1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the QtDBus module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Digia. For licensing terms and
14** conditions see http://qt.digia.com/licensing. For further information
15** use the contact form at http://qt.digia.com/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 2.1 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 2.1 requirements
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24**
25** In addition, as a special exception, Digia gives you certain additional
26** rights. These rights are described in the Digia Qt LGPL Exception
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28**
29** GNU General Public License Usage
30** Alternatively, this file may be used under the terms of the GNU
31** General Public License version 3.0 as published by the Free Software
32** Foundation and appearing in the file LICENSE.GPL included in the
33** packaging of this file. Please review the following information to
34** ensure the GNU General Public License version 3.0 requirements will be
35** met: http://www.gnu.org/copyleft/gpl.html.
36**
37**
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42//
43// W A R N I N G
44// -------------
45//
46// This file is not part of the public API. This header file may
47// change from version to version without notice, or even be
48// removed.
49//
50// We mean it.
51//
52//
53
54#ifndef QDBUSINTEGRATOR_P_H
55#define QDBUSINTEGRATOR_P_H
56
57#include "qdbus_symbols_p.h"
58
59#include "qcoreevent.h"
60#include "qeventloop.h"
61#include "qhash.h"
62#include "qobject.h"
63#include "private/qobject_p.h"
64#include "qlist.h"
65#include "qpointer.h"
66#include "qsemaphore.h"
67
68#include "qdbusconnection.h"
69#include "qdbusmessage.h"
70#include "qdbusconnection_p.h"
71
72#ifndef QT_NO_DBUS
73
74QT_BEGIN_NAMESPACE
75
76class QDBusConnectionPrivate;
77
78// Really private structs used by qdbusintegrator.cpp
79// Things that aren't used by any other file
80
81struct QDBusSlotCache
82{
83 struct Data
84 {
85 int flags;
86 int slotIdx;
87 QList<int> metaTypes;
88 };
89 typedef QMultiHash<QString, Data> Hash;
90 Hash hash;
91};
92
93class QDBusCallDeliveryEvent: public QMetaCallEvent
94{
95public:
96 QDBusCallDeliveryEvent(const QDBusConnection &c, int id, QObject *sender,
97 const QDBusMessage &msg, const QList<int> &types, int f = 0)
98 : QMetaCallEvent(0, id, 0, sender, -1), connection(c), message(msg), metaTypes(types), flags(f)
99 { }
100
101 void placeMetaCall(QObject *object)
102 {
103 QDBusConnectionPrivate::d(connection)->deliverCall(object, flags, message, metaTypes, id());
104 }
105
106private:
107 QDBusConnection connection; // just for refcounting
108 QDBusMessage message;
109 QList<int> metaTypes;
110 int flags;
111};
112
113class QDBusActivateObjectEvent: public QMetaCallEvent
114{
115public:
116 QDBusActivateObjectEvent(const QDBusConnection &c, QObject *sender,
117 const QDBusConnectionPrivate::ObjectTreeNode &n,
118 int p, const QDBusMessage &m, QSemaphore *s = 0)
119 : QMetaCallEvent(0, -1, 0, sender, -1, 0, 0, 0, s), connection(c), node(n),
120 pathStartPos(p), message(m), handled(false)
121 { }
122 ~QDBusActivateObjectEvent();
123
124 void placeMetaCall(QObject *);
125
126private:
127 QDBusConnection connection; // just for refcounting
128 QDBusConnectionPrivate::ObjectTreeNode node;
129 int pathStartPos;
130 QDBusMessage message;
131 bool handled;
132};
133
134class QDBusConnectionCallbackEvent : public QEvent
135{
136public:
137 QDBusConnectionCallbackEvent()
138 : QEvent(User), subtype(Subtype(0))
139 { }
140
141 DBusWatch *watch;
142 union {
143 int timerId;
144 int fd;
145 };
146 int extra;
147
148 enum Subtype {
149 AddTimeout = 0,
150 KillTimer,
151 AddWatch,
152 //RemoveWatch,
153 ToggleWatch
154 } subtype;
155};
156
157QT_END_NAMESPACE
158
159Q_DECLARE_METATYPE(QDBusSlotCache)
160
161#endif // QT_NO_DBUS
162#endif
163