Commit Graph

486 Commits

Author SHA1 Message Date
Thiago Macieira
83da3e5eda Change a QList of pointers to QVector
QList of pointers is optimum, but QVector should provide the same
performance (we aren't using the beginning-of-list feature that QList
has and QVector doesn't).

But since we're using QVector elsewhere, this should be better.

Change-Id: I39cc61d0d59846ab8c23ffff14241c6715e2eb00
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-12-29 12:31:38 +00:00
Marc Mutz
050b682412 QDBusIntegrator: fix quadratic behavior
Calling QVector::erase(it) in a loop consitutes quadratic
behavior (O(N) function called O(N) times).

Fix by using std::remove_if(), which is linear.

Change-Id: I39c11231d604bc2d9506427bc3411b71d71b5569
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-12-27 14:25:40 +00:00
Marc Mutz
43d1e61ade [docs] Fix assocated -> associated
Change-Id: Ia828db7bb71b874b19a610439e156687f273290f
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-12-15 07:54:40 +00:00
Marc Mutz
51089a5742 Use Q_UNLIKELY for every qFatal()/qCritical()
If, after checking a condition, we issue a qFatal()
or a qCritical(), by definition that check is
unlikely to be true.

Tell the compiler so it can move the error handling
code out of the normal code path to increase the
effective icache size.

Moved conditional code around where possible so that
we could always use Q_UNLIKELY, instead of having to
revert to Q_LIKELY here and there.

In some cases, simplified the expressions newly wrapped
in Q_UNLIKELY as a drive-by.

Change-Id: I67537d62b04bc6977d69254690c5ebbdf98bfd6d
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-11-29 22:59:17 +00:00
Liang Qi
790aef362f Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
	.qmake.conf
	configure
	src/corelib/global/qglobal.h
	src/tools/qdoc/node.cpp
	src/tools/qdoc/qdocdatabase.cpp
	tests/auto/corelib/io/qsettings/tst_qsettings.cpp
	tools/configure/configureapp.cpp

Change-Id: I66028ae5e441a06b73ee85ba72a03a3af3e8593f
2015-10-23 14:45:03 +02:00
Topi Reinio
d159fe199f Doc: Update examplesinstallpath to include the repository name
The examplesinstallpath variable in .qdocconf files defines the path
under QT_INSTALL_EXAMPLES where examples are found.

To match the way examples are packaged in Qt 5.6, prefix each
install path with the repository name.

Task-number: QTBUG-48736
Change-Id: I6a35c94fdacaad21cd044411aba02027b9019300
Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
2015-10-21 09:50:16 +00:00
Thiago Macieira
c401506ffc QDBusServer: Fix uninitialized member
If you used the QString constructor overload and passed an empty
address, the d pointer would remain uninitialized.

Found by Coverity, CID 11724.

Change-Id: I42e7ef1a481840699a8dffff1407ead3ee703d6e
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-10-15 16:20:35 +00:00
Thiago Macieira
7dc0f42e78 QDBusConnection: Remove unused members
I can't find any use, ever, of them.

Change-Id: I42e7ef1a481840699a8dffff1407eb1a93b128a8
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-10-15 16:20:32 +00:00
Thiago Macieira
34966bc84f QDBusPendingCall: Remove unused member
We set it to the number of types that the call expects to receive, but
we never used it anywhere else.

Change-Id: I42e7ef1a481840699a8dffff1407eb520b5844d8
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-10-15 16:20:30 +00:00
Liang Qi
4456984da7 Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
	tests/auto/corelib/io/qfile/tst_qfile.cpp
	tests/auto/corelib/io/qprocess/tst_qprocess.cpp
	tests/auto/corelib/tools/qversionnumber/qversionnumber.pro

Change-Id: Ia93ce500349d96a2fbf0b4a37b73f088cc505c6e
2015-10-14 15:45:35 +02:00
Olivier Goffart
a3a7d485fa Fix crash in QMetaProperty::write for custom types and conversion
if t >= QMetaType::User, we would not return false nor call convert.
We would then pass a pointer to whatever is in the QVariant to the
qt_metacall that is expecting a pointer to an object of a different type.

Since we have custom converters, we can call QVarent::convert even for
custom types anyway.

[ChangeLog][QtCore] Fixed crash when setting a QVariant of a different
type to a property of a custom type. Attempt to do a conversion instead.

Task-number: QTBUG-40644
Change-Id: Ib6fbd7e7ddcf25c5ee247ea04177e079f6d7de35
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
2015-10-09 07:59:07 +00:00
Lars Knoll
60b17b0231 Fix documentation of new method
Change-Id: I7accaac765f5514b67279b640de7f98c8042c35a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-10-08 07:05:33 +00:00
Nico Vertriest
d49169ae89 Doc: replace \target with \keyword if at start of page
A \target whose purpose is to link to the top of a
page (and not to a section within a page) works better
as a \keyword, because \target generates a
new html anchor which, in this case, is not tied to
any title element on the page.
A \keyword links to the page itself, as expected.

Task-number: QTBUG-48482
Change-Id: I957551edd0eb7e665358d04b37dab41e2686b851
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-10-02 10:15:27 +00:00
Sérgio Martins
fed6c094bf dbus: Port to new connect syntax
Any connect requiring a lambda to be ported or function casts were not touched

Change-Id: I1718121986ba6632b5754efa631f7b599358e186
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-10-01 21:30:15 +00:00
Thiago Macieira
906d92bde4 Fix missing "We mean it" in qtbase private headers
Change-Id: I42e7ef1a481840699a8dffff1408dfd4fd9c8e32
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-10-01 21:09:05 +00:00
Thiago Macieira
58d9b42c03 Fix deadlock on disconnectNotify() called from ~QObject
Normally, disconnectNotify() is called at the end of QObject::disconnect
and all the locks have been dropped. That is not the case for the
QObject destructor, so we need to deal with the fact that it there may
be some locks held.

I didn't catch this issue during testing because it depends on the
pointer addresses of the object being destroyed and that of the
QDBusAbstractInterface sender object, as we use one global, non-
recursive mutex pool. For the same reason, this patch is not testable.

The fix is simple: we don't need to remove the relay rules immediately.
It's ok for them to happen later, since the worst case scenario is that
we'll receive a few more signals than we have objects to deliver them
to. If that happens, we'll do a little more work than we have to. But in
the normal case, the amount of work is the same and we get the benefit
of returning more quickly from the destructor. What's more, if the
QDBusAbstractInterface object also gets destroyed, the events are
deleted and QDBusConnectionPrivate will clean everything up.

Task-number: QTBUG-48410
Change-Id: I42e7ef1a481840699a8dffff1406b789ba5217b3
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-09-25 07:45:06 +00:00
Thiago Macieira
c61aaa28df QtDBus: update debugging info (QDBUS_DEBUG=1)
Change-Id: I9a75ad8521ae4e5cbbe5ffff13d1a740643ec22e
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-24 16:55:14 +00:00
Thiago Macieira
8888eae0d3 Merge two more QDBusConnectionPrivate members into a union
QDBusConnectionPrivate can only be a client or a server, not both, so
the DBusServer and DBusConnection pointers can be shared, like the
QDBusConnectionInterface and QDBusServer pointers in the other anonymous
union.

Change-Id: I9a75ad8521ae4e5cbbe5ffff13d1baa8ab83c42f
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:09:01 +00:00
Thiago Macieira
e94f512b1e Make sure we don't deadlock when connecting signals
This commit moves the code that finishes the signal-slot connection into
the QtDBus auxiliary thread. That is necessary because we're holding the
lock for writing while making blocking calls. The auxiliary thread might
be waiting for us to release that lock while processing some previous
message.

Change-Id: Iee8cbc07c4434ce9b560ffff13d0521b94a51833
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:57 +00:00
Thiago Macieira
e15e5b1d37 Bypass connectSignal() for receiving the NameOwnerChanged signal
This is an optimization but is required. Instead of going through the
entire (dis)connectSignal() stack to add/remove matching rules for the
NameOwnerChanged bus signal and call into our serviceOwnerChangedNoLock
slot, create a static hook that will match the signal and simply add/
remove the rules as needed.

The required part is that this avoids a recursion into connectSignal().
The next commit will move this code to the QtDBus manager thread and we
won't be able to call connectSignal() from there (it would create a
deadlock).

Change-Id: Iee8cbc07c4434ce9b560ffff13d074ce90ad02d4
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:55 +00:00
Thiago Macieira
cc5ab92cd9 Make QDBusConnectionPrivate::getNameOwnerNoCache work in our thread
In two commits, we will attempt to call this function from the manager
thread, so we need to be sure this function works from there. Right now,
it would deadlock in QDBusPendingCallPrivate::waitForFinished(), inside
QDBusConnectionPrivate::sendWithReply().

The solution is simple: expand sendWithReply to the sendWithReplyAsync
function it calls anyway, but tell the internal DBusPendingCall to
finish before we call waitForFinished().

Change-Id: Iee8cbc07c4434ce9b560ffff13d0749013d771ab
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:54 +00:00
Thiago Macieira
d8148edb23 Use the new QDBusConnectionPrivate::shouldWatchService function
That function was added in the previous commit, so deduplicate the code
from QDBusAbstractInterfacePrivate::initOwnerTracking().

Change-Id: Iee8cbc07c4434ce9b560ffff13d06f1d9fb0cde5
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:51 +00:00
Thiago Macieira
f744aece9d QDBusServiceWatcher: Move the logic to QDBusConnectionPrivate
With kdbus, we won't have a regular signal, but instead a special
message. So keep the logic of what to do in QDBusConnectionPrivate.

The #ifdef is to make sure the bootstrapped qdbuscpp2xml continues to
build in cross-compilation environments.

Change-Id: Iee8cbc07c4434ce9b560ffff13d06f0d9904cb6d
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:50 +00:00
Thiago Macieira
186d881440 Remove the event callbacks in QDBusConnectionPrivate
They were used when we called the libdbus-1 message-sending functions
from any thread, which meant that the callbacks could be triggered on
any thread. Since we moved the message-sending to one thread only (the
manager's thread), there's no need for the event fallback anymore.

Since they're also always[*] running on an aux thread, there's no point
in checking for the presence of a QCoreApplication instance anymore. I
don't think there has been a need for this for many years, as the event
dispatcher has been decoupled from QCoreApplication for a long time.

[*] exception: the callbacks are first called in the thread that invoked
QDBusConnection::connectTo{Bus,Peer}, before we've done the
moveToThread.

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b73758c798d6b0
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:48 +00:00
Thiago Macieira
68964b1023 Merge two Q_GLOBAL_STATICS into another and solve memory leak
The two global statics for the session and system buses aren't necessary
if they can't outlive the global static for QDBusConnectionManager
anyway. So merge them there. The extra mutex is necessary because the
QDBusConnection::connectToBus function will lock the regular mutex.

This solves a potential memory leak at exit as a side-effect. Before
this change, the session and system QDBusConnection object got destroyed
in the main thread during global destruction, so it had to post an event
to the QDBusConnectionManager thread to finish the destruction of the
private. However, QCoreApplication is already gone by this point, so the
QEvent::DeferredDelete event never got delivered.

After this commit, there's no global static to destroy the
QDBusConnection (there is no QDBusConnection holding a reference), so
the object gets destroyed in QDBusConnectionManager::run()'s cleanup
code.

Change-Id: I9a75ad8521ae4e5cbbe5ffff13d1b967ee1a7a7e
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:47 +00:00
Thiago Macieira
ea01d7784a And move the creation of connections to the thread
Now we know that all timers and socket notifiers get created only in the
QDBusConnectionManager thread.

Incidentally, this reduced code duplication.

Change-Id: I27eaacb532114dd188c4ffff13d5075a8d2efb0b
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:45 +00:00
Thiago Macieira
5d41a4aa5a And move the sending of other types of D-Bus messages to the thread
With this, we now know that all messages sent are sent from the same
thread. This simplifies greatly the handling of the socket.

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b73758087344ed
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:43 +00:00
Thiago Macieira
df7064c151 Move the sending of the D-Bus messages with reply to the thread
This is intended to simply the handling of the socket in the
future. Now, we know that all calls to send_with_reply are placed only
from the manager's thread.

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b737575c231927
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:41 +00:00
Thiago Macieira
6734c50a9e Remove superfluous code in QDBusConnectionPrivate::sendWithReply
No need to check for the local loop if that's the first thing
QDBusConnectionPrivate::sendWithReplyAsync will do. The side effect is
that this now allocates memory for the QDBusPendingCallPrivate object,
but loopback messages aren't that common to be worth the special casing.

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b73756ab802ba2
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:39 +00:00
Thiago Macieira
42858a9e88 Simplify some code in QDBusConnectionPrivate::sendWithReplyAsync
They're pretty much the same, clearly a copy & paste. Instead, merge the
two codepaths so that we don't run the risk of applying a change in one
part and forgetting the other.

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b737560f6753be
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:38 +00:00
Thiago Macieira
c2049f67e4 Use a dedicated thread for handling incoming libdbus-1 events
Each application will have one thread dedicated for this, for all
QDBusConnections. I wouldn't mind sharing such a thread with other uses
in Qt, provided none of them ever block (the QProcessManager thread
comes to mind, but it's going away soon).

The cost associated with this change in this commit is so far rather
minimal. All incoming D-Bus calls need to be handled after an event is
posted anyway, to avoid deadlocking on reentering libdbus-1 functions
that acquire locks still held. The cost is the one more thread running
and the cost of synchronizing them when an event is posted.

The benefits far outweigh that cost: no longer will we have problems of
QtDBus failing to run if the main system or session connections are used
before QCoreApplication is run. Moreover, events can be received and
handled in aux threads even if the main thread is blocked on some
operation.

Note: this commit may not be testable (tst_qdbusconnection may fail)

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b737556ccd11a8
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:36 +00:00
Thiago Macieira
939b7c630d Implement the blocking QtDBus call in terms of the non-blocking one
This simplifies the code a little by having a single code path. More
importantly, we no longer need to call the evil function
dbus_connection_send_with_reply_and_block. That function acquires a lock
on the socket transport inside libdbus-1, which means all threads need
to wait until the one call gets unblocked before they can continue.

To do that, this commit reimplements the QDBus::Block part of
QDBusConnectionPrivate::sendWithReply by reusing the existing call to
sendWithReplyAsync() and then doing a blocking-wait with
QDBusPendingCallPrivate::waitForFinished().

By using (Q)DBusPendingCall and the threaded connection approach (next
commit), now we never block on the socket. That also means the code to
call dbus_pending_call_block() is no longer necessary and the
waitForFinished() function itself can be considerably simplified.

As a side-effect of no longer blocking, a number of pre-existing race
conditions that used to be hidden showed up.

Note: this commit deadlocks without the threading (next commits).

Task-number: QTBUG-43585
Change-Id: Ic5d393bfd36e48a193fcffff13b73754954a3f7d
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:34 +00:00
Thiago Macieira
edaf7c30d4 Make QDBusConnectionPrivate::send return bool
It used to return the sent message's serial ID, but we never used that.
So simply use boolean instead.

Change-Id: Ic5d393bfd36e48a193fcffff13b73753ccf47759
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Albert Astals Cid <aacid@kde.org>
2015-09-15 02:08:32 +00:00
Thiago Macieira
9af53bfc81 Use a signal for updating the dispatch status
The cost of connecting a signal may be a bit high, but it's comparable
to looking up the invokable method. However, QMetaMethod::invoke has a
higher cost than a signal-slot emission -- though in any case they're
both dwarfed by the cost of allocating the QMetaCallEvent and the
posting of it.

This is much more readable, though.

Change-Id: Iccecbecbe6288fb3b6d16578fdff3f203b6db29c
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Albert Astals Cid <aacid@kde.org>
2015-09-15 02:08:31 +00:00
Thiago Macieira
1996bd4a01 Use QDBusConnectionPrivate* when QDBusServer receives a new connection
This is because the socket activity will move to a different thread;
QDBusConnectionPrivate* can be queued, QDBusConnection can't easily.

Change-Id: I82722016018b7fcfb246cda6043469fadbfd987d
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:29 +00:00
Thiago Macieira
2bcc913a7f Use QDBusServiceWatcher in QDBusAbstractInterface to track the owner
Instead of connecting to the "NameOwnerChanged" signal. This has better
performance, is simpler to implement and is future-proof: when we switch
to kdbus, there won't be a "NameOwnerChanged" signal to connect to. On
the drawback side, this will use slightly more memory.

Change-Id: I5801b8027949f041309567a493000fe7de9bf227
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Albert Astals Cid <aacid@kde.org>
2015-09-15 02:08:27 +00:00
Thiago Macieira
2e12f6e63d Fix deadlock if the last reference is dropped during delivery
We increase the reference count of the connection during delivery of an
incoming message, so it's possible that the corresponding deref will
drop the last reference to the connection: another thread may have
called disconnectFromBus/Peer. However, during destruction we try to
drain the incoming socket queue, so we need to acquire the dispatch lock
again.

The solution is to always use deleteLater(), which means the
deleteYourself() function is unnecessary.

Change-Id: I27eaacb532114dd188c4ffff13d507039fcf7b6a
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-09-15 02:08:26 +00:00
Thiago Macieira
3997321199 Remove Q_DECLARE_TYPEINFO that causes a build error
ICC doesn't like it
qdbusintrospection_p.h(162): error: explicit specialization of class "QTypeInfo<QDBusIntrospection::Argument>" must precede its first use

It's used by the QVector in the same class

Change-Id: I7de033f80b0e4431b7f1ffff13f958971617b657
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-08-22 22:26:16 +00:00
Timur Pocheptsov
5bfac9d653 Merge "Merge remote-tracking branch 'origin/5.5' into dev" into refs/staging/dev 2015-08-09 07:06:52 +00:00
Frederik Gladhorn
77da617dc8 Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	doc/global/qt-cpp-defines.qdocconf
	src/3rdparty/forkfd/forkfd.c
	src/corelib/codecs/qtextcodec.cpp
	src/corelib/kernel/qmetatype.cpp
	src/corelib/tools/qset.qdoc
	src/gui/accessible/qaccessible.cpp
	src/gui/image/qpixmapcache.cpp
	src/opengl/qgl.cpp
	src/tools/qdoc/generator.cpp
	src/widgets/kernel/qwidget.cpp
	tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp

Change-Id: I4fbe1fa756a54c6843aa75f4ef70a1069ba7b085
2015-08-06 10:54:01 +02:00
Thiago Macieira
fd57ec5c5f QDBusError: Disable function that isn't used in bootstrapped builds
Change-Id: Id3d5c7bf4d4c45069621ffff13f7b73144537d81
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-08-06 07:34:20 +00:00
Nico Vertriest
e6ddae07e1 Doc:added doc to undocumented functions
Task-number: QTBUG-36985
Change-Id: Ic358682b276d67ef804f727bcf14191718613469
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-07-22 13:47:23 +00:00
Marc Mutz
49f7281d36 Mark QDBus{ObjectPath,Signature,Variant} shared-come-qt6
The compiler-generated move operations are ok.

Change-Id: Ida994b52e3ee6ce75afd50133e61488b94464eee
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-19 18:13:37 +00:00
Marc Mutz
a1ef018d9c QDBusVariant: add ctor taking QVariant&&
Change-Id: Ia25c4bd6294955b0e8ea5ecc0c62719423542e84
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-19 10:33:43 +00:00
Marc Mutz
94c24fad59 QDBusConnection: declare as shared-come-Qt6
Requires adding member-swap and (at least in my copy) move operations.

Change-Id: I1b638a81e4a41f467e69e352806524039e7b9f27
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-19 10:33:23 +00:00
Marc Mutz
f79dee6844 Add missing Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::ConnectionCapabilities)
Change-Id: I659ccc00129d20bbae08b277a291d81c6ede80be
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-19 10:33:18 +00:00
Marc Mutz
15a5035671 QDBusMessage: declare as shared-come-Qt6
Requires adding member-swap and (at least in my copy) move assignment.

Since the type does not contain a d == nullptr state,
a move constructor isn't yet possible.

Change-Id: Iad6939fa30f214591eab1fdf30a2cf1423ffb32a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-18 13:33:04 +00:00
Marc Mutz
84769bbbce QDBusError: declare as shared-come-Qt6
Requires adding member-swap and (at least in my copy) move operations.

Change-Id: I4284484b1f520eb2d9036b993a5b5b70aaea0af9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-18 13:32:59 +00:00
Marc Mutz
188a8a7f1d QDBusArgument: declare as shared-come-Qt6
Requires adding member-swap and (at least in my copy) move operations.

Change-Id: I0b32c387809c972203c94677616fe0a52143ec3b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-18 13:32:53 +00:00
Marc Mutz
d660c4c8bf QDBusObjectPath: add ctor taking QString&&
The new constructor cannot be marked nothrow, because it calls
non-nothrow doCheck();

Change-Id: I4e5b33c58125091644573ed84e715c7fa946ae09
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-18 06:20:10 +00:00
Marc Mutz
1251273232 QDBusSignature: add ctor taking QString&&
The new constructor cannot be marked nothrow, because it calls
non-nothrow doCheck();

Change-Id: I732fac7a07d46a3ff3be0e4e56de72dd19090737
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-18 06:20:05 +00:00
Marc Mutz
98eef668e6 Mark QDBusSlotCache{,::Data} shared
The compiler-generated move operations are ok.

Change-Id: Iec0fed49d52ace5ca7dae2c7ee53d717a283f15a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-18 06:19:54 +00:00
Marc Mutz
e4fa9a1fcd QDBusObjectPath / QDBusSignature: add missing =0 on qHash seed argument
Change-Id: I68396e319d9204f7e1e9ef8562ffefa7db565057
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-07-10 17:31:33 +00:00
Marc Mutz
32a5026f36 QtDBus: replace some inefficient QLists with QVector
QDBusIntrospection::Argument and the QPair are larger than a void*, so holding
them in QLists is needlessly inefficient. Worse, the code could come to depend
on the fragile property of (inefficient) QLists that references to elements
therein never are invalidated.

Fix by marking the types movable, if not already done, and holding them in
QVector instead.

Change-Id: I1cf88287cc3a1d87e1fcd5061ed8d6d19d2f0722
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-10 12:21:02 +00:00
Marc Mutz
f7544e8478 QtDBus: mark QDBusAdaptorConnector::AdaptorData as primitive
It is held in QVector.

Change-Id: I56e95f9a3a64d3e79914098873a382d233754fa3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-08 12:30:55 +00:00
Marc Mutz
641de5ab50 QDBusConnection: fix misleading placement of Q_DECLARE_FLAGS
Was placed under an unrelated enum. Move it to the
correct one.

Change-Id: I0cf1ffc678c4cffae16660acde95183d5ebcad03
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-07-08 11:22:28 +00:00
Ulf Hermann
2839e8d010 dbus: allow dbus_shutdown() on QT_NO_LIBRARY && QT_LINKED_LIBDBUS
If you statically link in a dbus library you'll have dbus_shutdown()
available.

Change-Id: Ieeded63838423a14a5530a4edb0ea46dc9b58d18
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-07-06 14:15:53 +00:00
Marc Mutz
3e2953e05a QtDBus: mark some types as movable come Qt 6
Marking them movable now would make QLists of these types BiC.

Change-Id: I7ae06aec596b349ee05e48f24a077af743450669
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-07-06 11:32:51 +00:00
Marc Mutz
f9bcaeb808 QtDBus: Use Q_NULLPTR instead of 0 in all public headers
This is in preparation of adding -Wzero-as-null-pointer-constant (or similar)
to the headers check.

Task-number: QTBUG-45291
Change-Id: If258b503c5ce335ecc22a5176d3e2b21aa7a278a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-07-04 06:03:29 +00:00
Liang Qi
0aa2d318b1 Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	src/corelib/global/qglobal.cpp
	src/corelib/global/qglobal.h
	src/corelib/global/qsysinfo.h
	src/corelib/global/qsystemdetection.h
	src/corelib/kernel/qobjectdefs.h
	src/plugins/plugins.pro
	tests/auto/widgets/itemviews/qlistview/qlistview.pro

Change-Id: Ib55aa79d707c4c1453fb9d697f6cf92211ed665c
2015-07-01 11:05:26 +02:00
Marc Mutz
bc1804fa72 QtDBus: make all Q_DECLARE_SHARED types nothrow move-assignable
Change-Id: I5b04fb44b632a0bbb290199fc092b3ffd8289650
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-06-30 10:57:27 +00:00
Thiago Macieira
3de7a966f1 Fix warning with MSVC 2013
warning C4100: 'name' : unreferenced formal parameter

This is despite the new Q_ASSERT "using" its expression even in release
mode.

Change-Id: Ieebfc4ab72a6493eaa68ffff13ead0574dd78627
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-06-26 06:49:38 +00:00
Sérgio Martins
a4d3af9614 dbus: Use QList::reserve(), reduces reallocations.
Change-Id: I5d60220c4d3014067a45a3d3553f0523c9fc7c74
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-06-23 12:46:36 +00:00
Marc Mutz
9f1646b0d9 qDBusRealAddTimeout(): don't create a QList just to check it's empty
Instead of QHash::keys(value).isEmpty(), use QHash::key(value, 0) == 0
(0 is used a failure indicator three lines down, so it should not be
a key in the hash table).

Change-Id: I75cc4f7f7540dc5c51a7b8e3add09a0ec6a75e05
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-06-17 07:09:52 +00:00
Ulf Hermann
d7e2e943a2 Fix conditions for disabling dbus dynamic symbol lookup
We cannot do this if no library support is present. Incidentally that's
the case when bootstrapping, but you can also set the flag manually.

Change-Id: I51e167176d0839af5858122630ef623a1c69a106
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-06-16 06:31:42 +00:00
Oswald Buddenhagen
d32f47b703 fix usage of wince scope
Fix style issues along the way.

Change-Id: Ic6a6de28e198eb0b14c198b802e78845703909b9
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-06-05 10:29:10 +00:00
Simon Hausmann
e2f66f9215 Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	src/corelib/global/qnamespace.qdoc
	src/corelib/io/qwindowspipereader.cpp
	src/corelib/io/qwindowspipereader_p.h
	src/corelib/statemachine/qstatemachine.cpp
	src/corelib/statemachine/qstatemachine_p.h
	src/plugins/platforms/xcb/qxcbconnection.h
	tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
	tests/auto/tools/qmake/tst_qmake.cpp
	tests/manual/touch/main.cpp

Change-Id: I917d694890e79ee3da7d65134b5b085e23e0dd62
2015-06-03 10:23:56 +02:00
Thiago Macieira
bd1f5b268a Make sure we don't call dbus_connection_can_send_type on too old libdbus
This function was introduced alongside the support for Unix file
descriptors, so it's a good indicator of whether Unix FDs are
supported. Ever since dbus_minimal_p.h, however, DBUS_TYPE_UNIX_FD may
be defined even if the system libs don't support it.

In order to fix this issue, I had to fix what was apparently a merge
conflict resolution mistake and remove the #ifdef around the test. Doing
the latter is a good idea due to moc being unable to find <dbus/dbus.h>.

This was tested with both linked and dynamically-loaded libdbus-1.

Task-number: QTBUG-46199
Change-Id: I66a35ce5f88941f29aa6ffff13dfb4b5438613a3
Reviewed-by: Jani Vähäkangas <jani.vahakangas@theqtcompany.com>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-05-26 07:20:35 +00:00
Nico Vertriest
a4848142b4 Doc: added doc for non-documented functions
Task-number: QTBUG-36985
Change-Id: I85f58c2877d83b98bf3427cbb0f567575803524f
Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-05-18 08:01:37 +00:00
Liang Qi
aed5a71683 Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	src/corelib/statemachine/qstatemachine.cpp
	src/corelib/statemachine/qstatemachine_p.h
	src/gui/painting/qdrawhelper.cpp
	src/plugins/platforms/xcb/qxcbnativeinterface.cpp
	src/plugins/platforms/xcb/qxcbwindow.cpp
	src/plugins/platforms/xcb/qxcbwindow.h
	src/testlib/qtestblacklist.cpp
	src/tools/qdoc/node.cpp
	src/tools/qdoc/node.h
	tests/auto/gui/painting/qcolor/tst_qcolor.cpp

Change-Id: I6c78b7b162001712d5774293f501b06b4ff32684
2015-04-22 09:25:54 +02:00
Marc Mutz
1b5f29e28a Remove <qhash.h> where it's not used
To avoid source-incompatibilites, wrap in QT_DEPRECATED_SINCE(5, 5)
in public headers.

Change-Id: I6117e8a6b11200d2f1a0a94a0e87d5c27538218e
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-04-20 07:41:34 +00:00
Marc Mutz
103086e379 Replace <qhash.h> with <qhashfunctions.h> where applicable
To avoid source-incompatibilites, wrap in QT_DEPRECATED_SINCE(5, 5)
in public headers.

Change-Id: Ic3398f4f330e15a3b55065858add26b90fd70e6c
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-04-20 07:41:27 +00:00
Thiago Macieira
d370878aa0 Fix undefined behavior: accessing an object after destruction
QDBusConnectionPrivate keeps a pointer to a QDBusConnectionInterface,
which in turn holds a reference back to that QDBusConnectionPrivate.
During the interface object's destruction, the QDBusAbstractInterface's
destructor checks if the interface is still valid. That access is
undefined behavior, but has so far been benign in all our uses since
the memory had not yet been freed (just destroyed) and the reference
count went from 0 to -1.

To be on the safe side, we destroy now the QDBusConnectionInterface
object while the Private is still valid. It will bring the reference
count down from 0 to a negative number, but won't cause any other
effects.

Change-Id: I9a75ad8521ae4e5cbbe5ffff13d1b80057e13809
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-04-15 00:21:57 +00:00
Thiago Macieira
2bcbe227bd Fix crashes on shutdown when the D-Bus spy list has been destroyed
The QDBusConnection spy hook is most often created after the
QDBusConnectionManager global, which means it will get destroyed before.
That means we'll almost surely going to get a null pointer dereference
if we handle the socket close to shutdown.

Change-Id: I27eaacb532114dd188c4ffff13d4c9dc865b8c02
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-04-15 00:07:05 +00:00
Liang Qi
0e6ee136c9 Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	src/testlib/qtestblacklist.cpp
	src/widgets/accessible/qaccessiblewidgets.cpp

Change-Id: If032adb9296428f62384ed835dbf41ee7a0b886c
2015-04-01 09:10:26 +02:00
Thiago Macieira
26edd5a3b1 Use QStringLiteral where applicable in QtDBus
Move to qdbusutil_p.h the string constants that are used often and in
multiple places; use QStringLiteral in qdbusintegrator.cpp for the
strings that are used often.

Change-Id: I8e1325b9ba015bda91bf01c42175d8032ea32f62
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-03-31 06:50:42 +00:00
Friedemann Kleint
3203ac3f4e Use QDebugStateSaver to restore space setting in stream operators.
Returning dbg.space() breaks formatting on streams that already
have nospace() set.

Change-Id: I55e38b018679a67eb40be6b4664505483a3a7d8e
Reviewed-by: David Faure <david.faure@kdab.com>
2015-03-30 12:59:58 +00:00
Robert Griebl
c885efb3cd Skip non-exported slots early when creating a XML interface description.
This will prevent unnecessary warnings about unknown types for signals
or slots that are not even exported to the D-Bus.

Change-Id: Iecda5beca5ebe6665a193245fe1c2578156f6abe
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-03-25 10:11:51 +00:00
Robert Griebl
91feefd7d9 Export the symbols of libdbus-1 when loading it at runtime.
This allows applications that need additional symbols from the library to
easily obtain them without needing to replicate the library open logic
from qdbus_symbols.cpp.

Change-Id: Ic65ef6684637fbcd1c9f4fe1dc7a57f0624b61a8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-03-25 10:11:43 +00:00
Simon Hausmann
198606f6db Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	src/plugins/platforms/xcb/qxcbnativeinterface.cpp
	src/plugins/platforms/xcb/qxcbnativeinterface.h

Change-Id: I31b38ba439b9341d51a01c0fd54bea33f7410076
2015-03-16 10:31:07 +01:00
Alberto Mardegan
748abf9347 Add QDBusMessage::createTargetedSignal()
The QDBusMessage::createSignal() static method doesn't take a parameter
for specifying the destination service of the signal. While this is not
a widely used feature, it can be useful to avoid waking up all connected
clients when the service knows what are the clients which are interested
in the signal.

This commit adds a QDBusMessage::createTargetedSignal() method which
also takes the destination service as its first parameter.

Change-Id: I9fdca53673a6944c39c93c1efd69a9d02859684e
Task-number: QTBUG-44704
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-03-14 19:01:49 +00:00
Thiago Macieira
ff807df6c9 QtDBus: Fix const correctness in old style casts
Found with GCC's -Wcast-qual.

Change-Id: Ia0aac2f09e9245339951ffff13c9468642b2db83
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2015-03-11 01:50:21 +00:00
Friedemann Kleint
691198eaf2 Fix various qdoc-warnings.
qtbase/src/corelib/doc/src/containers.qdoc:28: warning: Can't link to 'QList:end()'
qtbase/src/corelib/kernel/qmetaobject.cpp:2680: warning: Cannot find 'fromType(...)' in '\fn' QMetaEnum QMetaEnum::fromType() const
qtbase/src/corelib/kernel/qmetatype.cpp:1117: warning: Cannot find 'qMetaTypeTypeImpl(...)' in '\fn' int qMetaTypeTypeImpl(const char *typeName)
qtbase/src/corelib/plugin/qplugin.qdoc:48: warning: Cannot find file to quote from: 'plugins/interfaces.h'

Change-Id: Ie613253211e16ec616ccb70c24c625a9d5352d1b
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-02-25 11:36:51 +00:00
Friedemann Kleint
f5846130de Remove documentation of QDBusIntrospection::Object::introspection.
qtbase/src/dbus/qdbusintrospection.cpp:269: warning: Cannot find 'QDBusIntrospection::Object::introspection' specified with '\variable' in any header file

Change-Id: I7c5d207842235752ebe38f45b7eee7f8fc00127d
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-25 11:36:38 +00:00
Jani Heikkinen
2b75c156b6 Updated BSD licensed file headers
Change-Id: I6441ff931dbd33b698d762e6f6784898f3f60fe7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-02-15 07:41:17 +00:00
Kevron Rees
0eec8c86b6 QDBusConnection::registorObject with interface
Currently QDBus relies on a key in QMetaClassInfo to understand the DBus interface name.
This patch allows QDBus to also use a specified interface name in the registerObject call
instead of relying on QMetaClassInfo that might not be there (if the QObject was created
in QML or Javascript for example).

Change-Id: Ie02b2c67e7deb07f43e35eb166c11833fcbf38f3
Task-number: QTBUG-44074
Reviewed-by: Kevron Rees <kevron.m.rees@intel.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-15 02:17:53 +00:00
Konstantin Ritt
651329adb5 Pass params of shareable type by const-ref rather than by value
Instead of leaving a note for Qt6 and then forget to do
the actual change once again, change APIs now inside
QT_VERSION >= QT_VERSION_CHECK(6,0,0) blocks.

Change-Id: Ifa769904e304358a9c2accfd6c9f86eeb342f9dc
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-02-13 16:29:25 +00:00
Jani Heikkinen
83a5694dc2 Update copyright headers
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.

Outdated header.LGPL removed (use header.LGPL21 instead)

Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)

Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination

Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
2015-02-11 06:49:51 +00:00
Frederik Gladhorn
b6191b16d4 Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
	src/corelib/global/global.pri
	src/corelib/global/qcompilerdetection.h
	src/corelib/global/qglobal.h
	src/corelib/tools/qdatetime.cpp
	src/plugins/platforms/xcb/qxcbscreen.h
	src/plugins/platforms/xcb/qxcbwindow.h
	src/widgets/dialogs/qcolordialog.cpp
	src/widgets/dialogs/qcolordialog_p.h
	tools/configure/configureapp.cpp

Change-Id: Ie9d6e9df13e570da0a90a67745a0d05f46c532af
2015-01-21 11:10:14 +01:00
Holger Hans Peter Freyther
98008efcf8 Fix assignment within a Q_ASSERT
This was introduced in 3b844c16e0
and doesn't seem to be right.

Change-Id: I1c6a9445996650566d44f223651dd0c855619a88
Fixes: Coverity CID 21589
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2015-01-16 03:11:52 +01:00
Nico Vertriest
34ce66cd89 Doc: link issue D-Bus Viewer
Moved doc D-Bus Viewer from qdbusviewer.cpp to qtdbus-index.qdoc
Doc moved from qttools to qtbase
Task-number: QTBUG-43537
Change-Id: I718781a8f5029f64fea0f2be241b4d584cc8bfce
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-01-12 13:44:24 +01:00
Thiago Macieira
fb16664893 Fix memory leaks with QDBusServer
Two serious mistakes:
 - we need to call dbus_server_free_data_slot as many times as we call
   dbus_server_allocate_data_slot
 - we need to delete the d pointer...

The changes to the unit tests are simply to cause the used peer
connections to be removed so they don't show up in valgrind.

Change-Id: I9fd1ada5503db9ba481806c09116874ee81f450d
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-11 03:39:40 +01:00
Thiago Macieira
b25cfdce46 Fix compilation with MSVC 2010
2013 and 2015 compile this fine. I didn't test 2012. I wouldn't have
fixed if the objective weren't to enable QtDBus by default on all
architectures: since it is, we can't have Qt fail to compile from
sources on MSVC 2010.

qdbus_symbols.cpp(92) : fatal error C1001: An internal error has
occurred in the compiler

Change-Id: I42b930bc37c4e478a66725d83c8a73836fbf567c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2015-01-09 18:15:50 +01:00
Thiago Macieira
5c4390cc4b Remove unused QDBusMessage::timeout member
It's been there forever, but never used. The timeout is set during the
actual call.

I moved QDBusMessage::type only for padding purposes.

Change-Id: I41dd638ac423078be642077dbf17439d15b5d405
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-06 19:41:47 +01:00
Thiago Macieira
171644cb47 Make QDBusMessage store its own message type
Instead of the libdbus-1 constants. Though they're exactly the same
because they are based on the protocol wire format, so this is
technically a no-op change.

Change-Id: Ia2c638c4b508497ca693afd9c76e60ba9245f5e7
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-06 19:41:43 +01:00
Thiago Macieira
2e2cf8a549 Remove the old QDBusConnection::sender functionality
This has been deprecated since QDBusContext was introduced (Qt 4.3). So
it's time to remove the functionality.

[ChangeLog][Important Behavior Change] QDBusConnection::sender()
(deprecated since Qt 4.3) has changed to always return an invalid
QDBusConnection. To know what connection the incoming call was received
from, use QDBusContext.

Change-Id: I355efb82c14e54ed718c8f892d8267e727b19118
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-06 19:41:36 +01:00
Thiago Macieira
32cbb363b9 Cosmetic debugging difference for QDBusConnection
This makes the output slightly easier to read.

Change-Id: I590b9abcb0263ae5f0580391b42e179c47569a8a
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-06 19:40:41 +01:00
Thiago Macieira
1991647af1 Add a simple way of tracing calls to libdbus-1
Very useful to track memory leaks and other silly stuff going wrong.

Requires C++11, but since it isn't enabled by default, it's not a
problem. ALso, only works with "runtime" dbus -- for linked, use
ltrace(1) instead.

Change-Id: Iccb18516cfb729b2b1bf9ee592df4a1adefeb3b7
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-06 19:39:45 +01:00
Thiago Macieira
cf4b413fa4 Make QtDBus unit tests compile with runtime dbus-1 too
There's a change in Qt 5.4.0 that makes Qt compile with its own set of
D-Bus headers, which means QT_CFLAGS_DBUS may be empty. Thus, we can't
compile or link if we're using the actual libdbus-1 API to build the
test.

This commit makes these unit tests use the same dynamic loading
mechanism.

Change-Id: I56b2a7320086ef88793f6552cb54ca6224010451
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2015-01-06 18:16:32 +01:00
Thiago Macieira
624ee454ec Make QDBusConnection and QDBusServer return an error on default objects
The error of "Not connected".

This incidentally solves a crash when QDBusServer().lastError() is
called but libdbus-1 couldn't be found.

Change-Id: Id93f447d00c0aa6660d4528c4bbce5998d9186a8
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-01-06 17:37:00 +01:00
Frederik Gladhorn
aaff94c2df Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
	src/corelib/tools/qbytearray.cpp
	src/gui/kernel/qplatformsystemtrayicon.cpp
	src/gui/kernel/qplatformsystemtrayicon.h
	src/plugins/platforms/xcb/xcb-plugin.pro

Change-Id: I00355d3908b678af8a61c38f9e814a63df808c79
2014-12-29 16:37:38 +01:00
Thiago Macieira
2302d386c7 Include qobjectdefs.h for Q_GADGET
Change-Id: Ie1bf2393757978775596a542732c62e3f3014f82
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2014-12-29 09:08:00 +01:00
Nico Vertriest
a8714548d1 Doc: corrected broken links qtbase
Task-number: QTBUG-43115
Change-Id: Ib441326083294a6d59d75510142b1481f7b0bc35
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
Reviewed-by: Martin Smith <martin.smith@digia.com>
2014-12-23 10:55:45 +01:00
Thiago Macieira
2e4b1a8334 Remove Q_NO_USING_KEYWORD
There's a lot of code now requiring it. Any compiler that doesn't
support the keyword is too old for Qt now. The last time anyone asked
about this macro was for QTBUG-27393 and we don't know which compiler
that was.

As a necessity, this patch contains a reversal of
a0c3a57aed

[ChangeLog][Compiler Specific Changes] Qt 5.5 now unconditionally uses
the "using" keyword. Compilers that do not support this keyword are
deprecated and will not be able to build Qt. Previous versions of Qt may
or may not compile, as no testing was done to ensure it worked.

Change-Id: Ief042f34aba555a095d1f342a0ee7ee9feadf42d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
2014-12-20 07:38:17 +01:00
Thiago Macieira
7b6ab50c68 Remove the hardcoding of Unix socket paths for QtDBus
This allows the tests to be run on Windows too by using TCP socket
connections instead of requiring Unix sockets. The tests shouldn't have
hardcoded the path, which came from QDBusServer anyway. Now the tests
simply defer to QDBusServer.

This is a slight behavior change for Windows, but not one that should
matter since anyone who was using the default constructor resulted in a
QDBusServer that failed to listen.

[ChangeLog][QtDBus][QDBusServer] Fixed a bug that made QDBusServer's
default constructor try to bind to a Unix socket on non-Unix systems.
Now QDBusServer will attempt to bind to a TCP socket instead.

Change-Id: I2a126019671c2d90257e739ed3aff7938d1fe946
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-12-20 07:36:42 +01:00
Thiago Macieira
cfab934186 Fix loading of the dbus-1 DLL built by MinGW on Windows
QLibrary does not append the version suffix on Windows by itself, since
there's no established practice on how to do this. The MinGW builds of
dbus-1 call it "libdbus-1-3.dll", so we need append the suffix
ourselves.

Unfortunately, other names like "dbus-1.dll" have been seen in the wild,
so we need to try both basenames (Windows doesn't prepend the "lib"
prefix). Both basenames work on Unix, so give "libdbus-1" on Unix since
that will result in one fewer stat.

Change-Id: I92506df5fd30c7674216568406bf86b25bf646b8
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-12-20 07:36:20 +01:00
Simon Hausmann
015002fec9 Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
	doc/global/template/style/online.css
	mkspecs/android-g++/qmake.conf

Change-Id: Ib39ea7bd42f5ae12e82a3bc59a66787a16bdfc61
2014-12-10 07:58:06 +01:00
Simon Hausmann
7644faa881 Merge remote-tracking branch 'origin/5.4.0' into 5.4
Change-Id: I0cd11cbe95693b78450ea81a0187760f4a6a8b5f
2014-12-05 11:53:33 +01:00
Aaron McCarthy
9501fef5da Fix DBus signature generation for complex types.
When generating the DBus signature of a registered custom type the
marshaller appends the signatures of the map entries and array items
after the map/array causing an invalid DBus signature to be generated.
This happens because beginArray() and beginMap() output the full
signature of the data.

Fixed by suppressing changes to the signature within
beginArray()/endArray() and beginMap()/endMap() blocks.

Change-Id: Icaf23b2fe58a3e1f575b81e4a100f02684f68452
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-12-04 05:40:30 +01:00
Thiago Macieira
5d8baf9056 Change misleading error message in QDBusReply
"no signature" is misleading and even led me to re-check the code to see
if it meant that the reply failed and no signature could be obtained.
Saying that the signature was obtained but is empty is better.

Change-Id: I1381cf53b334798125d36db0934105d15b63b84f
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2014-12-04 00:41:06 +01:00
Olivier Goffart
5180f32c5a Add Q_DECL_OVERRIDE in the src subdirectory
Done automatically with clang-modernize on linux

(But does not add Q_DECL_OVERRIDE to the function that are marked
 as inline because it a compilation error with MSVC2010)

Change-Id: I2196ee26e3e6fe20816834ecea5ea389eeab3171
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-12-03 09:57:11 +01:00
Thiago Macieira
a2da88712f Make QtDBus compile without libdbus-1 headers, if dlopening
Most of QtDBus already needs very little from libdus-1, so create an
extra header containing the minimum API we actually need.

One large advantage of this solution is that now QtDBus can always be
enabled, even if the system doesn't have libdbus-1 installed. This is
interesting on OS X, where libdbus-1 is often installed by Homebrew or
MacPorts, which may include extra libraries we don't want in our
packaging.

Change-Id: I1b397121ec12eeca333ef778cf8e1c7b64d6b223
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-12-01 20:03:33 +01:00
Albert Astals Cid
e4eb9bfbf7 Break after handling the read/write
The loop is there because watchers may have two Watcher for the same
fd, one for read and one for write, but after we're processed the
correct one we don't need to keep looping.

This fixes a crash since it's possible that while in processing
q_dbus_watch_handle we get a watch added/remove this invalidating
the iterator and crashing

Change-Id: Icb61deae272d2f237a4c616fae598404d419af90
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-11-28 09:06:14 +01:00
Frederik Gladhorn
34aba4724f Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
	src/corelib/io/qiodevice.cpp
	src/plugins/bearer/linux_common/qofonoservice_linux.cpp
	src/plugins/bearer/linux_common/qofonoservice_linux_p.h
	src/plugins/platforms/android/qandroidplatformtheme.cpp
	src/tools/bootstrap/bootstrap.pro
	src/widgets/styles/qmacstyle_mac.mm

Change-Id: Ia02aab6c4598ce74e9c30bb4666d5e2ef000f99b
2014-11-24 13:39:13 +01:00
Matt Fischer
cd2ac1e2e5 Don't send reply messages for non-method calls in QDBusMessage
QDBusMessage is intended to avoid sending reply messages unless
the message is a method call without the NO_REPLY_EXPECTED flag set.
However, since messages which are not method calls will never have
this flag set, the code will currently cause all non-method call
messages to expect a reply.  This patch changes the code to examine
the message type, and to only check for the flag in cases where the
message is a method call.

Change-Id: Ic5bb00df69d3cfb38f60bf6bfd8463fb28cf2c99
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-11-22 00:29:16 +01:00
Jędrzej Nowacki
801c532636 Update dbus to use new QMetaType::registerNormalizedType signature
Change-Id: I5d755f383d8cd226a25bd495f6854c0db9719a51
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-11-17 14:54:09 +01:00
Oswald Buddenhagen
d7a5dc0cfd Merge remote-tracking branch 'origin/5.3' into 5.4.0
Conflicts:
	src/plugins/platforms/xcb/qxcbwindow.cpp

Change-Id: Iad9ef6bf7d6111efba8232a7d9b46bb9974912f5
2014-11-10 11:39:35 +01:00
Thiago Macieira
73a1e8c60d Partially revert "Fix a deadlock introduced by the race condition fix"
The commit was 9361be58f47ec256bf920c378479a02501219c1f (2008-11-17),
referring to the race condition fix that was applied in commit
d47c05b1889bb4f06203bbc65f4660b8d0128954 (2008-10-08). The fix for the
deadlock reintroduced the race condition and the commit message noted
it.

The workaround is no longer necessary since we've fixed the original race
condition differently now (see the previous two commits).

Task-number: QTBUG-42189
Change-Id: I5a83249597a83c4d4caa2ae57964ad3cc61c1d70
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2014-11-05 10:46:22 +01:00
Thiago Macieira
eb99c28861 QDBusConnection: Merge the dispatch and the watch-and-timeout locks
We don't need two anymore because they now protect the same thing: the
state of the DBusConnection. The difference existed when it was possible
for two threads to access the DBusConnection at the same time: one doing
dispatching and one doing something else. Unfortunately, even though
DBusConnection supports this, QtDBus doesn't.

From d47c05b1889bb4f06203bbc65f4660b8d0128954 (2008-10-08):
   Details:  if we're removing a timer or a watcher from our list,
   there's a race condition: one thread (not the QDBusConnection thread)
   could be asking for the removal (which causes an event to be sent),
   then deletes the pointer. In the meantime, QDBusConnection will
   process the timers and socket notifiers and could end up calling
   lidbus-1 with deleted pointers.

That commit fixed the race condition but introduced a deadlock.

Task-number: QTBUG-42189
Change-Id: I034038f763cbad3a67398909defd31a23c27c965
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2014-11-05 10:46:19 +01:00
Thiago Macieira
6a2bdc4ee2 Always lock the DBus dispatcher before dbus_connection_send*
We lock it before dbus_connection_send_with_reply (the async version) in
QDBusConnectionPrivate::sendWithReplyAsync. We weren't locking it before
send_with_reply_and_block and we apparently should. The locking around
the dbus_connection_send function might not be necessary, but let's do
it to be safe.

The lock now needs to be recursive because we may be inside
QDBusConnectionPrivate::doDispatch.

Task-number: QTBUG-42189
Change-Id: I7b6b350909359817ea8b3f9c693bced042c9779a
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
2014-11-05 10:46:10 +01:00
Marc Mutz
f93870ed44 QtDBus: use qEnvironmentVariableIntValue()
It doesn't allocate memory, so cannot throw and is a lot faster
than qgetenv().

Change-Id: Ib0c0f903531a3a656919e87df8065a9c6c7a666c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-10-17 09:51:11 +02:00
Nico Vertriest
54853c5f66 Doc: Use title case in section1 titles
Using Python script title-cased.py

Task-number: QTBUG-41250
Change-Id: I00d3d7a0b30db7304a7904efd6d63abd9a7b493b
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2014-09-30 13:52:51 +02:00
Matti Paaso
974c210835 Update license headers and add new license files
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3
- Removed LICENSE.GPL

Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2
Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
2014-09-24 12:26:19 +02:00
Thiago Macieira
4e6ebabb30 Replace the const QString global static with a QStringLiteral
It was originally created to avoid allocating memory for the QString at
every turn, but we have QStringLiteral for that today. It has also
served a very good run by catching qatomic.h implementations that had
bad cv qualifications.

Change-Id: Id6d952b8cce363015ec2611d346b4cccedecf137
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
2014-08-13 09:07:38 +02:00
Robin Burchell
972a653a86 QtDBus: Warn if blocking calls take too long.
Blocking DBus calls have the potential to totally wreck user interactivity at
best (actions taking too long) and make things appear completely broken at worst
(the default timeout is 30 seconds, which is a huge amount of time, especially
if you get unfortunate and have a repeated blocking call).

Provide a warning when a call is found that takes too long, based on some preset
durations (200ms for the main thread, 500ms for other threads on the basis that
the main thread is generally more important).

Also provide configuration knobs for these environment variables, in miliseconds:
setting them to 0 will warn on all blocking DBus calls. Setting them to -1 (the
default, on release builds) will disable the warning.

[ChangeLog][QtDBus] Blocking calls that take a long time will now generate a
warning. The time taken may be tuned using the environment variables
Q_DBUS_BLOCKING_CALL_MAIN_THREAD_WARNING_MS and
Q_DBUS_BLOCKING_CALL_OTHER_THREAD_WARNING_MS. The value represents (in
milliseconds) how long before a blocking call is warned on. A value below zero
disables the warning, a value of zero will warn on all blocking calls.

Change-Id: I0ab4c34aa01670a154d794d9f2694b3235e789db
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-07-25 04:01:03 +02:00
Frederik Gladhorn
a09a8d509a Merge remote-tracking branch 'origin/5.3' into dev
Conflicts:
	mkspecs/qnx-x86-qcc/qplatformdefs.h
	src/corelib/global/qglobal.h
	src/network/socket/qnativesocketengine_winrt.cpp
	src/plugins/platforms/android/androidjniaccessibility.cpp
	src/plugins/platforms/windows/qwindowswindow.cpp

Manually adjusted:
	mkspecs/qnx-armle-v7-qcc/qplatformdefs.h
	to include 9ce697f2d5

Thanks goes to Sergio for the qnx mkspecs adjustments.

Change-Id: I53b1fd6bc5bc884e5ee2c2b84975f58171a1cb8e
2014-07-01 16:25:19 +02:00
Frederik Gladhorn
bd20b30bf8 Merge remote-tracking branch 'origin/stable' into 5.3
Change-Id: I7462840d15583ead82e86fcf5c84659b909e8c4e
2014-06-25 10:22:20 +02:00
David Faure
7a4dcbaabf QDBus: fix data race on isDebugging bool
Change-Id: Id0b8bf8dac570abfc6c8768bd4264650ae0c199b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-06-21 10:39:46 +02:00
Thiago Macieira
acd0dae3f4 Fix data race in accessing QDBusConnectionPrivate::serviceNames
The trick of creating a copy is not thread-safe. I'd known this since
the moment I wrote that code, but thought "what could go wrong?".

Task-number: QTBUG-39285
Change-Id: If521d4a649c06e6a34926687e85623aa25cb4c35
Reviewed-by: David Faure <david.faure@kdab.com>
2014-06-15 23:04:28 +02:00
Jakub Adam
ab68958213 Use correct signal name when disconnecting "NameOwnerChanged"
A disconnectSignal() call with a wrong signal name caused that hook
wasn't found and thus kept in QDBusConnectionPrivate::signalHooks
forever.

Change-Id: Id7cda225be7580529fc835b377636226abb229f9
Reviewed-by: Aaron McCarthy <mccarthy.aaron@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-06-08 17:00:27 +02:00
Jerome Pasion
3e38944118 doc: Updated Qt D-Bus Examples.
-transferred group page from qtdoc repository
-added description in example pages
-set the example documentation to use the standard Qt thumbnail
-added an entry in the help index for the example page

Change-Id: I9d5747bc329b5ecc15acd2eb3139696931166c6f
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2014-05-28 16:52:04 +02:00
Stephen Kelly
a420c6e838 CMake: Include the CMakeParseArguments module for dbus macros.
The cmake_parse_arguments macro is used already in the file. The
module happens to already be included via Qt5CoreMacros, so the
existing code is not currently a problem.  Add the include to
comply with 'include what you use' and to ensure that it continues
to work even if Qt5CoreMacros is changed in the future.

Change-Id: I7369261bce9d0e58488e584ef0743e33e9f9ec9e
Reviewed-by: Volker Krause <volker.krause@kdab.com>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
2014-04-16 15:21:50 +02:00
Friedemann Kleint
3ed2ec1487 Fix some documentation errors.
Correct links and fix typos, remove obsolete documentation,
fix some snippets, mark some classes as internal.

Change-Id: I9a3266605f060783413d32740057a57a820c8929
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
2014-03-24 16:42:02 +01:00
Nico Vertriest
267eab3f39 Doc: correction link, example and parameter issues qtbase
Moved codecs folder to qtbase/examples
Corrected quote in dropsite.qdoc
Replaced snippet statement by include statement
Added doc for undocumented parameters

Task-number: QTBUG-34749

Change-Id: If4de95b8d39e5680fd0f63f8d2b6685a4b0a8052
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2014-03-10 16:02:19 +01:00
Thiago Macieira
0aba7fbb58 Always initialize integer types in D-Bus demarshalling
If you tried to demarshall in a write-only QDBusArgument, the class
would print a warning, but will continue running nonetheless. So instead
just initialize everything, despite the warning.

qdbusargument.cpp:1138:30: error: ‘d’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
qdbusargument.cpp:1165:33: error: ‘s’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
qdbusargument.cpp:1301:15: error: ‘y’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
etc.

Change-Id: I6d713b4a7b7639e31f3b39bb488ad3ed3ab3fa4a
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
2014-03-06 12:21:14 +01:00
Thiago Macieira
8b54cfff82 Make D-Bus types without a matching Qt one prettier in qdbus
Print "QMap<QString,QString>" for "a{ss}" and print a nicer expansion of
other types.

Change-Id: I0a7a2ecf8f0a62bd97931f3c129cd4cb4f471ef1
Reviewed-by: Lorn Potter <lorn.potter@jollamobile.com>
2014-02-22 04:38:56 +01:00
Marc Mutz
391a6627cd QDBus: replace arg-chain with multi-arg
The arguments are all strings, so multi-arg is available without
other changes to the code. Even though insertion of a format placeholder
can be ruled out in the present case, multi-arg should be faster than
a 3-chain of arg() calls.

Change-Id: I8d030227e1bd30c56f1062a0c9dbbaae0143885f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-02-14 00:34:25 +01:00
Marc Mutz
f530942fe4 QDBus: avoid relocations
Instead of using Q_STRINGTABLE, use a switch/if construct
to be able to share the string data for "write" and "readwrite".

Change-Id: Ia1c7b8a0f13a809372de2e5a956978dc2d569e92
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-02-14 00:34:25 +01:00
Frederik Gladhorn
a1fe728fa5 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/gui/kernel/qguiapplication.cpp
	src/plugins/platforms/android/androidjnimain.cpp
	src/plugins/platforms/android/qandroidplatformintegration.cpp
	src/plugins/platforms/android/qandroidplatformintegration.h
	src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
	src/plugins/platforms/cocoa/qcocoawindow.h
	src/plugins/platforms/cocoa/qcocoawindow.mm
	src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
	src/sql/doc/src/sql-driver.qdoc
	src/widgets/widgets/qtoolbararealayout.cpp

Change-Id: Ifd7e58760c3cb6bd8a7d1dd32ef83b7ec190d41e
2014-02-07 13:07:25 +01:00
Thiago Macieira
15f8bc1f6e Also register complex D-Bus types when running under qdbus
When running inside qdbus, we generate the meta objects a little
differently. Previously, for unknown types we'd simply have a -1 as the
type ID in the meta object, but this doesn't work in Qt 5 (has
apparently never worked). So simply register a type with the metatype
system and let QMetaObject do its thing.

[ChangeLog][qdbus]Fixed a bug that caused the qdbus tool to crash
when trying to display remote interfaces that had complex types
without a matching base Qt type.

Task-number: QTBUG-36524
Change-Id: Ifef65b340dc89d3295ed6ef00f2dcc60849ecb02
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
2014-01-31 00:15:51 +01:00
Roland Winklmeier
419a1f53d5 Add method to QDBusServer to allow anonymous client connections.
This change adds a new method to QDBusServer to allow anonymous
connections. This is part of the DBus API and was not yet possible
to use with QDBusServer. It is set in the newConnection callback
when a new client tries to connect.
Anonymous connections are enabled by default in DBus but not allowed
by default.

[ChangeLog][QtDBus][QDBusServer] Added method to QDBusServer to allow
anonymous client connections, even if the connecting client is not
authenticated as a user.

Change-Id: I984c9e634101ecd2e67bb25c8d12bb1071836fd3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-15 14:15:22 +01:00
Oswald Buddenhagen
882bf3475c expand tabs and related whitespace fixes in *.{cpp,h,qdoc}
the diff -w for this commit is empty.

Started-by: Thiago Macieira <thiago.macieira@intel.com>
Change-Id: I77bb84e71c63ce75e0709e5b94bee18e3ce6ab9e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-13 22:46:50 +01:00
Matt Broadstone
86fa8b4fb8 Added PropertiesChanged signal to dbus introspection data
QtDBus adheres to the org.freedesktop.DBus.Properties
interface, however there is no current way to include the
PropertiesChanged signal in exposed introspection data.
This change adds that signal to the introspection data,
whether the adaptor uses the signal or not is up to the user.

[ChangeLog][QtDBus][Important Behavior Changes]
QtDBus adaptors now include the PropertiesChanged signal in introspection data

Change-Id: Iee26528b59b30696689a79fb692f93859b42bb49
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-09 22:34:54 +01:00
Simon Hausmann
b5ab7ee0d7 Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Id13badc270db98806048753fd7fb658aa17f1ede
2014-01-03 14:30:21 +01:00
Simon Hausmann
c2e2e0151e Fix crashes when calling into qdbus interfaces from QML
The meta-call convention for reading properties differs between Qml and QDBus.
QML expects only to provide a pointer to the return value in args[0].  That is
also how the metacall was originally introduced in Qt 4. QDBus also expects
that the caller allocates a QVariant and provides a pointer to it in a[2], in
addition to a[1] being a pointer to an int that is used to report where the
return value can be found (in where a[0] points to or the variant in a[1]) -
this is useful to report errors when reading the property by clearing the
variant.

For performance reasons, QML avoids the creation of a QVariant when reading
properties. As however QDBus expects it, a crash occurs.

This patch changes the QDBus metacall implementation to not rely on the caller
to provide a QVariant.

Task-number: QTBUG-15052
Change-Id: I2f2c5b3ef2c1d93cc72eee1fa32a95d299a104c0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-02 16:15:10 +01:00
Robin Burchell
82edcd4e12 Don't leak pending call objects when peer disconnects
Unlike in regular connection to DBus server, we don't get pending call
notifies when a peer drops the connection in peer-to-peer mode.

Thus, we need to keep track of pending calls in such cases and get rid of
them in ~QDBusConnectionPrivate().

Change-Id: I83e20db0bc7b2ebf509c7fdb1382ffc7d0ede9d3
Done-with: Kalle Vahlman <kalle.vahlman@movial.com>
Reviewed-by: Daniele E. Domenichelli <daniele.domenichelli@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-12-30 23:20:40 +01:00
Simon Hausmann
105d10dea9 Fix quadratic behavior in QMetaObjectBuilder when writing string table
QHash::key() is O(n) and we're calling it n times. That can make repeated
calls to the meta object builder very slow, as for example QQmlPropertyMap
when inserting properties repeatedly.

Fortunately this is easy to fix, as the value in the hash map is also the
index, so we can simply iterate over the hash once. With the exception of
the class name, which we have to treat specially to ensure that it is always
the first entry in the string table.

Task-number: QTBUG-32720
Change-Id: Ic954c45c454107feee83216131f601cc69d4c63b
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-12-06 18:18:44 +01:00
Jerome Pasion
4533cc9944 Doc: Adding mark-up to boolean default values.
Default values should have mark-up to denote that they are code.
This commit changes:
-"property is true" to "property is \c true".
-"Returns true" to "Returns \c true".
-"property is false" to "property is \c false".
-"returns true" to "returns \c true".
-"returns false" to "returns \c false".

src/3rdparty and non-documentation instances were ignored.

Task-number: QTBUG-33360
Change-Id: Ie87eaa57af947caa1230602b61c5c46292a4cf4e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-10-08 00:46:27 +02:00
Michael Krasnyk
bdfbc9e493 qdbusxml2cpp: Fix annotation value in an introspection string generator
Unescaped annotation value causes for harmless values in an XML file, for instance,
'value=\"QList&lt;uint&gt;\"' a DBus exception, like
dbus.exceptions.IntrospectionParserException: Error parsing introspect data

Task-number: QTBUG-26668

Change-Id: Ie1eb519aec5228da0591d62c3aa5b6dec5790eb9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2013-09-27 10:29:18 +02:00
Frederik Gladhorn
b751fcf32a Fix some doc errors.
Change-Id: Ib874d7e9671d9cee75fe41f4dac5d0de7b09245e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-09-21 17:04:41 +02:00