diff options
Diffstat (limited to 'src')
229 files changed, 2176 insertions, 1448 deletions
diff --git a/src/concurrent/qtconcurrentfilterkernel.h b/src/concurrent/qtconcurrentfilterkernel.h index 1e875e3d38..bd474fc0c9 100644 --- a/src/concurrent/qtconcurrentfilterkernel.h +++ b/src/concurrent/qtconcurrentfilterkernel.h @@ -96,7 +96,7 @@ public: reducer(OrderedReduce) { } - bool runIteration(typename Sequence::const_iterator it, int index, T *) + bool runIteration(typename Sequence::const_iterator it, int index, T *) override { IntermediateResults<typename Sequence::value_type> results; results.begin = index; @@ -109,7 +109,7 @@ public: return false; } - bool runIterations(typename Sequence::const_iterator sequenceBeginIterator, int begin, int end, T *) + bool runIterations(typename Sequence::const_iterator sequenceBeginIterator, int begin, int end, T *) override { IntermediateResults<typename Sequence::value_type> results; results.begin = begin; @@ -129,18 +129,18 @@ public: return false; } - void finish() + void finish() override { reducer.finish(reduce, reducedResult); sequence = reducedResult; } - inline bool shouldThrottleThread() + inline bool shouldThrottleThread() override { return IterateKernelType::shouldThrottleThread() || reducer.shouldThrottle(); } - inline bool shouldStartThread() + inline bool shouldStartThread() override { return IterateKernelType::shouldStartThread() && reducer.shouldStartThread(); } @@ -183,7 +183,7 @@ public: { } #endif - bool runIteration(Iterator it, int index, ReducedResultType *) + bool runIteration(Iterator it, int index, ReducedResultType *) override { IntermediateResults<typename qValueType<Iterator>::value_type> results; results.begin = index; @@ -196,7 +196,7 @@ public: return false; } - bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *) + bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *) override { IntermediateResults<typename qValueType<Iterator>::value_type> results; results.begin = begin; @@ -215,24 +215,24 @@ public: return false; } - void finish() + void finish() override { reducer.finish(reduce, reducedResult); } - inline bool shouldThrottleThread() + inline bool shouldThrottleThread() override { return IterateKernelType::shouldThrottleThread() || reducer.shouldThrottle(); } - inline bool shouldStartThread() + inline bool shouldStartThread() override { return IterateKernelType::shouldStartThread() && reducer.shouldStartThread(); } typedef ReducedResultType ReturnType; typedef ReducedResultType ResultType; - ReducedResultType *result() + ReducedResultType *result() override { return &reducedResult; } @@ -255,14 +255,14 @@ public: : IterateKernelType(begin, end), keep(_keep) { } - void start() + void start() override { if (this->futureInterface) this->futureInterface->setFilterMode(true); IterateKernelType::start(); } - bool runIteration(Iterator it, int index, T *) + bool runIteration(Iterator it, int index, T *) override { if (keep(*it)) this->reportResult(&(*it), index); @@ -271,7 +271,7 @@ public: return false; } - bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *) + bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *) override { const int count = end - begin; IntermediateResults<typename qValueType<Iterator>::value_type> results; diff --git a/src/concurrent/qtconcurrentiteratekernel.h b/src/concurrent/qtconcurrentiteratekernel.h index b4360abd26..dbd000e8ba 100644 --- a/src/concurrent/qtconcurrentiteratekernel.h +++ b/src/concurrent/qtconcurrentiteratekernel.h @@ -197,14 +197,14 @@ public: virtual bool runIterations(Iterator _begin, int beginIndex, int endIndex, T *results) { Q_UNUSED(_begin); Q_UNUSED(beginIndex); Q_UNUSED(endIndex); Q_UNUSED(results); return false; } - void start() + void start() override { progressReportingEnabled = this->isProgressReportingEnabled(); if (progressReportingEnabled && iterationCount > 0) this->setProgressRange(0, iterationCount); } - bool shouldStartThread() + bool shouldStartThread() override { if (forIteration) return (currentIndex.load() < iterationCount) && !this->shouldThrottleThread(); @@ -212,7 +212,7 @@ public: return (iteratorThreads.load() == 0); } - ThreadFunctionResult threadFunction() + ThreadFunctionResult threadFunction() override { if (forIteration) return this->forThreadFunction(); diff --git a/src/concurrent/qtconcurrentmapkernel.h b/src/concurrent/qtconcurrentmapkernel.h index ad5ef93684..fa162f7c34 100644 --- a/src/concurrent/qtconcurrentmapkernel.h +++ b/src/concurrent/qtconcurrentmapkernel.h @@ -64,13 +64,13 @@ public: : IterateKernel<Iterator, void>(begin, end), map(_map) { } - bool runIteration(Iterator it, int, void *) + bool runIteration(Iterator it, int, void *) override { map(*it); return false; } - bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, void *) + bool runIterations(Iterator sequenceBeginIterator, int beginIndex, int endIndex, void *) override { Iterator it = sequenceBeginIterator; std::advance(it, beginIndex); @@ -108,7 +108,7 @@ public: : reducedResult(initialValue), map(_map), reduce(_reduce) { } - bool runIteration(Iterator it, int index, ReducedResultType *) + bool runIteration(Iterator it, int index, ReducedResultType *) override { IntermediateResults<typename MapFunctor::result_type> results; results.begin = index; @@ -119,7 +119,7 @@ public: return false; } - bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *) + bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *) override { IntermediateResults<typename MapFunctor::result_type> results; results.begin = begin; @@ -137,23 +137,23 @@ public: return false; } - void finish() + void finish() override { reducer.finish(reduce, reducedResult); } - bool shouldThrottleThread() + bool shouldThrottleThread() override { return IterateKernel<Iterator, ReducedResultType>::shouldThrottleThread() || reducer.shouldThrottle(); } - bool shouldStartThread() + bool shouldStartThread() override { return IterateKernel<Iterator, ReducedResultType>::shouldStartThread() && reducer.shouldStartThread(); } typedef ReducedResultType ResultType; - ReducedResultType *result() + ReducedResultType *result() override { return &reducedResult; } @@ -171,13 +171,13 @@ public: MappedEachKernel(Iterator begin, Iterator end, MapFunctor _map) : IterateKernel<Iterator, T>(begin, end), map(_map) { } - bool runIteration(Iterator it, int, T *result) + bool runIteration(Iterator it, int, T *result) override { *result = map(*it); return true; } - bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *results) + bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *results) override { Iterator it = sequenceBeginIterator; @@ -216,7 +216,7 @@ struct SequenceHolder1 : public Base Sequence sequence; - void finish() + void finish() override { Base::finish(); // Clear the sequence to make sure all temporaries are destroyed diff --git a/src/concurrent/qtconcurrentreducekernel.h b/src/concurrent/qtconcurrentreducekernel.h index 2cbf30dffb..c5003a2a0e 100644 --- a/src/concurrent/qtconcurrentreducekernel.h +++ b/src/concurrent/qtconcurrentreducekernel.h @@ -230,7 +230,7 @@ struct SequenceHolder2 : public Base Sequence sequence; - void finish() + void finish() override { Base::finish(); // Clear the sequence to make sure all temporaries are destroyed diff --git a/src/concurrent/qtconcurrentrunbase.h b/src/concurrent/qtconcurrentrunbase.h index 734fd54f70..303838b73e 100644 --- a/src/concurrent/qtconcurrentrunbase.h +++ b/src/concurrent/qtconcurrentrunbase.h @@ -88,7 +88,7 @@ public: return theFuture; } - void run() {} + void run() override {} virtual void runFunctor() = 0; }; @@ -96,7 +96,7 @@ template <typename T> class RunFunctionTask : public RunFunctionTaskBase<T> { public: - void run() + void run() override { if (this->isCanceled()) { this->reportFinished(); @@ -124,7 +124,7 @@ template <> class RunFunctionTask<void> : public RunFunctionTaskBase<void> { public: - void run() + void run() override { if (this->isCanceled()) { this->reportFinished(); diff --git a/src/concurrent/qtconcurrentstoredfunctioncall.h b/src/concurrent/qtconcurrentstoredfunctioncall.h index 0afce17f74..750ece1ef1 100644 --- a/src/concurrent/qtconcurrentstoredfunctioncall.h +++ b/src/concurrent/qtconcurrentstoredfunctioncall.h @@ -57,7 +57,7 @@ struct StoredFunctorCall0: public RunFunctionTask<T> { inline StoredFunctorCall0(FunctionPointer _function) : function(_function) {} - void runFunctor() { this->result = function(); } + void runFunctor() override { this->result = function(); } FunctionPointer function; }; @@ -67,7 +67,7 @@ struct StoredFunctorCall0<void, FunctionPointer>: public RunFunctionTask<void> { inline StoredFunctorCall0(FunctionPointer _function) : function(_function) {} - void runFunctor() { function(); } + void runFunctor() override { function(); } FunctionPointer function; }; @@ -77,7 +77,7 @@ struct StoredFunctorPointerCall0: public RunFunctionTask<T> { inline StoredFunctorPointerCall0(FunctionPointer * _function) : function(_function) {} - void runFunctor() { this->result =(*function)(); } + void runFunctor() override { this->result =(*function)(); } FunctionPointer * function; }; @@ -87,7 +87,7 @@ struct VoidStoredFunctorPointerCall0: public RunFunctionTask<T> { inline VoidStoredFunctorPointerCall0(FunctionPointer * _function) : function(_function) {} - void runFunctor() {(*function)(); } + void runFunctor() override { (*function)(); } FunctionPointer * function; }; @@ -106,7 +106,7 @@ public: StoredMemberFunctionCall0(T (Class::*_fn)() , const Class &_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(); } @@ -122,7 +122,7 @@ public: VoidStoredMemberFunctionCall0(T (Class::*_fn)() , const Class &_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { (object.*fn)(); } @@ -145,7 +145,7 @@ public: StoredConstMemberFunctionCall0(T (Class::*_fn)() const, const Class &_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(); } @@ -161,7 +161,7 @@ public: VoidStoredConstMemberFunctionCall0(T (Class::*_fn)() const, const Class &_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { (object.*fn)(); } @@ -184,7 +184,7 @@ public: StoredMemberFunctionPointerCall0(T (Class::*_fn)() , Class *_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(); } @@ -200,7 +200,7 @@ public: VoidStoredMemberFunctionPointerCall0(T (Class::*_fn)() , Class *_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { (object->*fn)(); } @@ -223,7 +223,7 @@ public: StoredConstMemberFunctionPointerCall0(T (Class::*_fn)() const, Class const *_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(); } @@ -239,7 +239,7 @@ public: VoidStoredConstMemberFunctionPointerCall0(T (Class::*_fn)() const, Class const *_object) : fn(_fn), object(_object){ } - void runFunctor() + void runFunctor() override { (object->*fn)(); } @@ -260,7 +260,7 @@ struct StoredFunctorCall1: public RunFunctionTask<T> { inline StoredFunctorCall1(FunctionPointer _function, const Arg1 &_arg1) : function(_function), arg1(_arg1) {} - void runFunctor() { this->result = function(arg1); } + void runFunctor() override { this->result = function(arg1); } FunctionPointer function; Arg1 arg1; }; @@ -270,7 +270,7 @@ struct StoredFunctorCall1<void, FunctionPointer, Arg1>: public RunFunctionTask<v { inline StoredFunctorCall1(FunctionPointer _function, const Arg1 &_arg1) : function(_function), arg1(_arg1) {} - void runFunctor() { function(arg1); } + void runFunctor() override { function(arg1); } FunctionPointer function; Arg1 arg1; }; @@ -280,7 +280,7 @@ struct StoredFunctorPointerCall1: public RunFunctionTask<T> { inline StoredFunctorPointerCall1(FunctionPointer * _function, const Arg1 &_arg1) : function(_function), arg1(_arg1) {} - void runFunctor() { this->result =(*function)(arg1); } + void runFunctor() override { this->result =(*function)(arg1); } FunctionPointer * function; Arg1 arg1; }; @@ -290,7 +290,7 @@ struct VoidStoredFunctorPointerCall1: public RunFunctionTask<T> { inline VoidStoredFunctorPointerCall1(FunctionPointer * _function, const Arg1 &_arg1) : function(_function), arg1(_arg1) {} - void runFunctor() {(*function)(arg1); } + void runFunctor() override { (*function)(arg1); } FunctionPointer * function; Arg1 arg1; }; @@ -309,7 +309,7 @@ public: StoredMemberFunctionCall1(T (Class::*_fn)(Param1) , const Class &_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1); } @@ -325,7 +325,7 @@ public: VoidStoredMemberFunctionCall1(T (Class::*_fn)(Param1) , const Class &_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1); } @@ -348,7 +348,7 @@ public: StoredConstMemberFunctionCall1(T (Class::*_fn)(Param1) const, const Class &_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1); } @@ -364,7 +364,7 @@ public: VoidStoredConstMemberFunctionCall1(T (Class::*_fn)(Param1) const, const Class &_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1); } @@ -387,7 +387,7 @@ public: StoredMemberFunctionPointerCall1(T (Class::*_fn)(Param1) , Class *_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1); } @@ -403,7 +403,7 @@ public: VoidStoredMemberFunctionPointerCall1(T (Class::*_fn)(Param1) , Class *_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1); } @@ -426,7 +426,7 @@ public: StoredConstMemberFunctionPointerCall1(T (Class::*_fn)(Param1) const, Class const *_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1); } @@ -442,7 +442,7 @@ public: VoidStoredConstMemberFunctionPointerCall1(T (Class::*_fn)(Param1) const, Class const *_object, const Arg1 &_arg1) : fn(_fn), object(_object), arg1(_arg1){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1); } @@ -463,7 +463,7 @@ struct StoredFunctorCall2: public RunFunctionTask<T> { inline StoredFunctorCall2(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2) : function(_function), arg1(_arg1), arg2(_arg2) {} - void runFunctor() { this->result = function(arg1, arg2); } + void runFunctor() override { this->result = function(arg1, arg2); } FunctionPointer function; Arg1 arg1; Arg2 arg2; }; @@ -473,7 +473,7 @@ struct StoredFunctorCall2<void, FunctionPointer, Arg1, Arg2>: public RunFunction { inline StoredFunctorCall2(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2) : function(_function), arg1(_arg1), arg2(_arg2) {} - void runFunctor() { function(arg1, arg2); } + void runFunctor() override { function(arg1, arg2); } FunctionPointer function; Arg1 arg1; Arg2 arg2; }; @@ -483,7 +483,7 @@ struct StoredFunctorPointerCall2: public RunFunctionTask<T> { inline StoredFunctorPointerCall2(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2) : function(_function), arg1(_arg1), arg2(_arg2) {} - void runFunctor() { this->result =(*function)(arg1, arg2); } + void runFunctor() override { this->result =(*function)(arg1, arg2); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; }; @@ -493,7 +493,7 @@ struct VoidStoredFunctorPointerCall2: public RunFunctionTask<T> { inline VoidStoredFunctorPointerCall2(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2) : function(_function), arg1(_arg1), arg2(_arg2) {} - void runFunctor() {(*function)(arg1, arg2); } + void runFunctor() override { (*function)(arg1, arg2); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; }; @@ -512,7 +512,7 @@ public: StoredMemberFunctionCall2(T (Class::*_fn)(Param1, Param2) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2); } @@ -528,7 +528,7 @@ public: VoidStoredMemberFunctionCall2(T (Class::*_fn)(Param1, Param2) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2); } @@ -551,7 +551,7 @@ public: StoredConstMemberFunctionCall2(T (Class::*_fn)(Param1, Param2) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2); } @@ -567,7 +567,7 @@ public: VoidStoredConstMemberFunctionCall2(T (Class::*_fn)(Param1, Param2) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2); } @@ -590,7 +590,7 @@ public: StoredMemberFunctionPointerCall2(T (Class::*_fn)(Param1, Param2) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2); } @@ -606,7 +606,7 @@ public: VoidStoredMemberFunctionPointerCall2(T (Class::*_fn)(Param1, Param2) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2); } @@ -629,7 +629,7 @@ public: StoredConstMemberFunctionPointerCall2(T (Class::*_fn)(Param1, Param2) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2); } @@ -645,7 +645,7 @@ public: VoidStoredConstMemberFunctionPointerCall2(T (Class::*_fn)(Param1, Param2) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2); } @@ -666,7 +666,7 @@ struct StoredFunctorCall3: public RunFunctionTask<T> { inline StoredFunctorCall3(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {} - void runFunctor() { this->result = function(arg1, arg2, arg3); } + void runFunctor() override { this->result = function(arg1, arg2, arg3); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; }; @@ -676,7 +676,7 @@ struct StoredFunctorCall3<void, FunctionPointer, Arg1, Arg2, Arg3>: public RunFu { inline StoredFunctorCall3(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {} - void runFunctor() { function(arg1, arg2, arg3); } + void runFunctor() override { function(arg1, arg2, arg3); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; }; @@ -686,7 +686,7 @@ struct StoredFunctorPointerCall3: public RunFunctionTask<T> { inline StoredFunctorPointerCall3(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {} - void runFunctor() { this->result =(*function)(arg1, arg2, arg3); } + void runFunctor() override { this->result =(*function)(arg1, arg2, arg3); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; Arg3 arg3; }; @@ -696,7 +696,7 @@ struct VoidStoredFunctorPointerCall3: public RunFunctionTask<T> { inline VoidStoredFunctorPointerCall3(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {} - void runFunctor() {(*function)(arg1, arg2, arg3); } + void runFunctor() override { (*function)(arg1, arg2, arg3); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; Arg3 arg3; }; @@ -715,7 +715,7 @@ public: StoredMemberFunctionCall3(T (Class::*_fn)(Param1, Param2, Param3) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2, arg3); } @@ -731,7 +731,7 @@ public: VoidStoredMemberFunctionCall3(T (Class::*_fn)(Param1, Param2, Param3) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2, arg3); } @@ -754,7 +754,7 @@ public: StoredConstMemberFunctionCall3(T (Class::*_fn)(Param1, Param2, Param3) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2, arg3); } @@ -770,7 +770,7 @@ public: VoidStoredConstMemberFunctionCall3(T (Class::*_fn)(Param1, Param2, Param3) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2, arg3); } @@ -793,7 +793,7 @@ public: StoredMemberFunctionPointerCall3(T (Class::*_fn)(Param1, Param2, Param3) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2, arg3); } @@ -809,7 +809,7 @@ public: VoidStoredMemberFunctionPointerCall3(T (Class::*_fn)(Param1, Param2, Param3) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2, arg3); } @@ -832,7 +832,7 @@ public: StoredConstMemberFunctionPointerCall3(T (Class::*_fn)(Param1, Param2, Param3) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2, arg3); } @@ -848,7 +848,7 @@ public: VoidStoredConstMemberFunctionPointerCall3(T (Class::*_fn)(Param1, Param2, Param3) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2, arg3); } @@ -869,7 +869,7 @@ struct StoredFunctorCall4: public RunFunctionTask<T> { inline StoredFunctorCall4(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {} - void runFunctor() { this->result = function(arg1, arg2, arg3, arg4); } + void runFunctor() override { this->result = function(arg1, arg2, arg3, arg4); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; }; @@ -879,7 +879,7 @@ struct StoredFunctorCall4<void, FunctionPointer, Arg1, Arg2, Arg3, Arg4>: public { inline StoredFunctorCall4(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {} - void runFunctor() { function(arg1, arg2, arg3, arg4); } + void runFunctor() override { function(arg1, arg2, arg3, arg4); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; }; @@ -889,7 +889,7 @@ struct StoredFunctorPointerCall4: public RunFunctionTask<T> { inline StoredFunctorPointerCall4(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {} - void runFunctor() { this->result =(*function)(arg1, arg2, arg3, arg4); } + void runFunctor() override { this->result =(*function)(arg1, arg2, arg3, arg4); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; }; @@ -899,7 +899,7 @@ struct VoidStoredFunctorPointerCall4: public RunFunctionTask<T> { inline VoidStoredFunctorPointerCall4(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {} - void runFunctor() {(*function)(arg1, arg2, arg3, arg4); } + void runFunctor() override { (*function)(arg1, arg2, arg3, arg4); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; }; @@ -918,7 +918,7 @@ public: StoredMemberFunctionCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2, arg3, arg4); } @@ -934,7 +934,7 @@ public: VoidStoredMemberFunctionCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2, arg3, arg4); } @@ -957,7 +957,7 @@ public: StoredConstMemberFunctionCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2, arg3, arg4); } @@ -973,7 +973,7 @@ public: VoidStoredConstMemberFunctionCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2, arg3, arg4); } @@ -996,7 +996,7 @@ public: StoredMemberFunctionPointerCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2, arg3, arg4); } @@ -1012,7 +1012,7 @@ public: VoidStoredMemberFunctionPointerCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2, arg3, arg4); } @@ -1035,7 +1035,7 @@ public: StoredConstMemberFunctionPointerCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2, arg3, arg4); } @@ -1051,7 +1051,7 @@ public: VoidStoredConstMemberFunctionPointerCall4(T (Class::*_fn)(Param1, Param2, Param3, Param4) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2, arg3, arg4); } @@ -1072,7 +1072,7 @@ struct StoredFunctorCall5: public RunFunctionTask<T> { inline StoredFunctorCall5(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {} - void runFunctor() { this->result = function(arg1, arg2, arg3, arg4, arg5); } + void runFunctor() override { this->result = function(arg1, arg2, arg3, arg4, arg5); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5; }; @@ -1082,7 +1082,7 @@ struct StoredFunctorCall5<void, FunctionPointer, Arg1, Arg2, Arg3, Arg4, Arg5>: { inline StoredFunctorCall5(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {} - void runFunctor() { function(arg1, arg2, arg3, arg4, arg5); } + void runFunctor() override { function(arg1, arg2, arg3, arg4, arg5); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5; }; @@ -1092,7 +1092,7 @@ struct StoredFunctorPointerCall5: public RunFunctionTask<T> { inline StoredFunctorPointerCall5(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {} - void runFunctor() { this->result =(*function)(arg1, arg2, arg3, arg4, arg5); } + void runFunctor() override { this->result =(*function)(arg1, arg2, arg3, arg4, arg5); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5; }; @@ -1102,7 +1102,7 @@ struct VoidStoredFunctorPointerCall5: public RunFunctionTask<T> { inline VoidStoredFunctorPointerCall5(FunctionPointer * _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {} - void runFunctor() {(*function)(arg1, arg2, arg3, arg4, arg5); } + void runFunctor() override {(*function)(arg1, arg2, arg3, arg4, arg5); } FunctionPointer * function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5; }; @@ -1121,7 +1121,7 @@ public: StoredMemberFunctionCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1137,7 +1137,7 @@ public: VoidStoredMemberFunctionCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) , const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1160,7 +1160,7 @@ public: StoredConstMemberFunctionCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { this->result = (object.*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1176,7 +1176,7 @@ public: VoidStoredConstMemberFunctionCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) const, const Class &_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { (object.*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1199,7 +1199,7 @@ public: StoredMemberFunctionPointerCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1215,7 +1215,7 @@ public: VoidStoredMemberFunctionPointerCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) , Class *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1238,7 +1238,7 @@ public: StoredConstMemberFunctionPointerCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { this->result = (object->*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1254,7 +1254,7 @@ public: VoidStoredConstMemberFunctionPointerCall5(T (Class::*_fn)(Param1, Param2, Param3, Param4, Param5) const, Class const *_object, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : fn(_fn), object(_object), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5){ } - void runFunctor() + void runFunctor() override { (object->*fn)(arg1, arg2, arg3, arg4, arg5); } @@ -1276,7 +1276,7 @@ class StoredFunctorCall : public RunFunctionTask<T> { public: StoredFunctorCall(const Functor &f) : functor(f) { } - void runFunctor() + void runFunctor() override { this->result = functor(); } @@ -1288,7 +1288,7 @@ class StoredFunctorCall<void, Functor> : public RunFunctionTask<void> { public: StoredFunctorCall(const Functor &f) : functor(f) { } - void runFunctor() + void runFunctor() override { functor(); } diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 0c9036aadf..aed3532024 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -58,7 +58,7 @@ #if !defined(QT_BOOTSTRAPPED) # include "qtsciicodec_p.h" # include "qisciicodec_p.h" -#if defined(QT_USE_ICU) +#if QT_CONFIG(icu) #include "qicucodec_p.h" #else #if QT_CONFIG(iconv) @@ -79,7 +79,7 @@ # endif // !Q_OS_INTEGRITY #endif // !QT_NO_BIG_CODECS -#endif // QT_USE_ICU +#endif // icu #endif // QT_BOOTSTRAPPED #include "qmutex.h" @@ -99,7 +99,7 @@ typedef QList<QByteArray>::ConstIterator ByteArrayListConstIt; Q_GLOBAL_STATIC_WITH_ARGS(QMutex, textCodecsMutex, (QMutex::Recursive)); QMutex *qTextCodecsMutex() { return textCodecsMutex(); } -#if !defined(QT_USE_ICU) +#if !QT_CONFIG(icu) static char qtolower(char c) { if (c >= 'A' && c <= 'Z') return c + 0x20; return c; } static bool qisalnum(char c) @@ -306,7 +306,7 @@ static void setup() } #else static void setup() {} -#endif // QT_USE_ICU +#endif // icu /*! \enum QTextCodec::ConversionFlag @@ -519,7 +519,7 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name) return 0; setup(); -#ifndef QT_USE_ICU +#if !QT_CONFIG(icu) QTextCodecCache *cache = &globalData->codecCache; QTextCodec *codec; if (cache) { @@ -586,7 +586,7 @@ QTextCodec* QTextCodec::codecForMib(int mib) } } -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) return QIcuCodec::codecForMibUnlocked(mib); #else return 0; @@ -618,7 +618,7 @@ QList<QByteArray> QTextCodec::availableCodecs() codecs += (*it)->aliases(); } -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) codecs += QIcuCodec::availableCodecs(); #endif @@ -634,7 +634,7 @@ QList<QByteArray> QTextCodec::availableCodecs() */ QList<int> QTextCodec::availableMibs() { -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) return QIcuCodec::availableMibs(); #else QMutexLocker locker(textCodecsMutex()); @@ -688,7 +688,7 @@ QTextCodec* QTextCodec::codecForLocale() QTextCodec *codec = globalData->codecForLocale.loadAcquire(); if (!codec) { -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) textCodecsMutex()->lock(); codec = QIcuCodec::defaultCodecUnlocked(); textCodecsMutex()->unlock(); diff --git a/src/corelib/configure.json b/src/corelib/configure.json index 0d1954c3a8..c170b38977 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -289,7 +289,7 @@ "label": "journald", "autoDetect": false, "condition": "libs.journald", - "output": [ "privateConfig" ] + "output": [ "privateFeature" ] }, "std-atomic64": { "label": "64 bit atomic operations", @@ -355,22 +355,16 @@ "condition": "features.statemachine", "output": [ "publicFeature" ] }, - "sharedmemory": { - "label": "Enable QSharedMemory", - "condition": "config.android || config.win32 || tests.ipc_sysv || tests.ipc_posix", - "output": [ { "type": "define", "negative": true, "name": "QT_NO_SHAREDMEMORY" } ] - }, "slog2": { "label": "slog2", "condition": "libs.slog2", - "emitIf": "config.qnx", - "output": [ "privateConfig" ] + "output": [ "privateFeature" ] }, "syslog": { "label": "syslog", "autoDetect": false, "condition": "tests.syslog", - "output": [ "privateConfig" ] + "output": [ "privateFeature" ] }, "threadsafe-cloexec": { "label": "Threadsafe pipe creation", @@ -396,7 +390,9 @@ "label": "QSharedMemory", "purpose": "Provides access to a shared memory segment.", "section": "Kernel", - "condition": "!config.vxworks", + "condition": [ + "config.android || config.win32 || (!config.vxworks && (tests.ipc_sysv || tests.ipc_posix))" + ], "output": [ "publicFeature", "feature" ] }, "systemsemaphore": { diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.cpp index d222ca32a7..b84cf0ae2d 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.cpp @@ -52,7 +52,7 @@ class MyXcbEventFilter : public QAbstractNativeEventFilter { public: - virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE + bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override { if (eventType == "xcb_generic_event_t") { xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message); diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.h b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.h index 6666bc56c5..9734f99d50 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.h +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qabstractnativeeventfilter.h @@ -44,6 +44,6 @@ class MyCocoaEventFilter : public QAbstractNativeEventFilter { public: - bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE; + bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override; }; //! [0] diff --git a/src/corelib/doc/snippets/code/src_corelib_thread_qthread.cpp b/src/corelib/doc/snippets/code/src_corelib_thread_qthread.cpp index a621109c0d..7c687a0430 100644 --- a/src/corelib/doc/snippets/code/src_corelib_thread_qthread.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_thread_qthread.cpp @@ -55,7 +55,7 @@ class MyObject; class WorkerThread : public QThread { Q_OBJECT - void run() Q_DECL_OVERRIDE { + void run() override { QString result; /* ... here is the expensive or blocking operation ... */ emit resultReady(result); diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index f74662b464..36655ca1dd 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -47,19 +47,11 @@ if(linux*|hurd*):!cross_compile:!static:!*-armcc* { DEFINES += ELF_INTERPRETER=\\\"$$system(LC_ALL=C readelf -l /bin/ls | perl -n -e \'$$prog\')\\\" } -slog2 { +qtConfig(slog2): \ LIBS_PRIVATE += -lslog2 - DEFINES += QT_USE_SLOG2 -} -journald { +qtConfig(journald): \ QMAKE_USE_PRIVATE += journald - DEFINES += QT_USE_JOURNALD -} - -syslog { - DEFINES += QT_USE_SYSLOG -} gcc:ltcg { versiontagging_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS) $(INCPATH) diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h index 4629a57485..d0e45478cc 100644 --- a/src/corelib/global/qconfig-bootstrapped.h +++ b/src/corelib/global/qconfig-bootstrapped.h @@ -69,10 +69,14 @@ #define QT_CRYPTOGRAPHICHASH_ONLY_SHA1 #define QT_NO_DATASTREAM #define QT_FEATURE_iconv -1 +#define QT_FEATURE_icu -1 +#define QT_FEATURE_journald -1 #define QT_NO_LIBRARY #define QT_FEATURE_library -1 #define QT_NO_QOBJECT #define QT_NO_SYSTEMLOCALE +#define QT_FEATURE_slog2 -1 +#define QT_FEATURE_syslog -1 #define QT_NO_THREAD #define QT_FEATURE_timezone -1 #define QT_FEATURE_topleveldomain -1 diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 27fe10a79e..87ee75fa45 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -41,15 +41,18 @@ #include "qdir.h" #include "qstringlist.h" #include "qfile.h" +#include "qtemporaryfile.h" #include "qsettings.h" #include "qlibraryinfo.h" #include "qscopedpointer.h" #ifdef QT_BUILD_QMAKE QT_BEGIN_NAMESPACE +extern QString qmake_absoluteLocation(); extern QString qmake_libraryInfoFile(); QT_END_NAMESPACE #else +# include "qconfig.cpp" # include "qcoreapplication.h" #endif @@ -57,7 +60,6 @@ QT_END_NAMESPACE # include "private/qcore_mac_p.h" #endif -#include "qconfig.cpp" #include "archdetect.cpp" QT_BEGIN_NAMESPACE @@ -70,9 +72,16 @@ struct QLibrarySettings { QLibrarySettings(); void load(); +#ifdef QT_BUILD_QMAKE + void loadBuiltinValues(QSettings *config); +#endif QScopedPointer<QSettings> settings; #ifdef QT_BUILD_QMAKE + QString builtinValues[QLibraryInfo::LastHostPath + 1]; +# ifndef Q_OS_WIN + QString builtinSettingsPath; +# endif bool haveDevicePaths; bool haveEffectiveSourcePaths; bool haveEffectivePaths; @@ -88,6 +97,11 @@ class QLibraryInfoPrivate public: static QSettings *findConfiguration(); #ifdef QT_BUILD_QMAKE + static void reload() + { + if (qt_library_settings.exists()) + qt_library_settings->load(); + } static bool haveGroup(QLibraryInfo::PathGroup group) { QLibrarySettings *ls = qt_library_settings(); @@ -99,6 +113,25 @@ public: ? ls->haveDevicePaths : ls->havePaths) : false; } + static bool sysrootify() + { + // This is actually bogus, as it does not consider post-configure settings. + QLibrarySettings *ls = qt_library_settings(); + return ls ? (!ls->builtinValues[QLibraryInfo::SysrootPath].isEmpty() + && ls->builtinValues[QLibraryInfo::ExtPrefixPath].isEmpty()) : false; + } + static QString builtinValue(int loc) + { + QLibrarySettings *ls = qt_library_settings(); + return ls ? ls->builtinValues[loc] : QString(); + } +# ifndef Q_OS_WIN + static QString builtinSettingsPath() + { + QLibrarySettings *ls = qt_library_settings(); + return ls ? ls->builtinSettingsPath : QString(); + } +# endif #endif static QSettings *configuration() { @@ -122,6 +155,20 @@ QLibrarySettings::QLibrarySettings() load(); } +#ifdef QT_BUILD_QMAKE +static QByteArray qtconfSeparator() +{ +# ifdef Q_OS_WIN + QByteArray header = QByteArrayLiteral("\r\n===========================================================\r\n"); +# else + QByteArray header = QByteArrayLiteral("\n===========================================================\n"); +# endif + QByteArray content = QByteArrayLiteral("==================== qt.conf beginning ===================="); + // Assemble from pieces to avoid that the string appears in a raw executable + return header + content + header; +} +#endif + void QLibrarySettings::load() { // If we get any settings here, those won't change when the application shows up. @@ -159,6 +206,27 @@ void QLibrarySettings::load() havePaths = false; #endif } + +#ifdef QT_BUILD_QMAKE + // Try to use an embedded qt.conf appended to the QMake executable. + QFile qmakeFile(qmake_absoluteLocation()); + if (!qmakeFile.open(QIODevice::ReadOnly)) + return; + qmakeFile.seek(qmakeFile.size() - 10000); + QByteArray tail = qmakeFile.read(10000); + QByteArray separator = qtconfSeparator(); + int qtconfOffset = tail.lastIndexOf(separator); + if (qtconfOffset < 0) + return; + tail.remove(0, qtconfOffset + separator.size()); + // If QSettings had a c'tor taking a QIODevice, we'd pass a QBuffer ... + QTemporaryFile tmpFile; + tmpFile.open(); + tmpFile.write(tail); + tmpFile.close(); + QSettings builtinSettings(tmpFile.fileName(), QSettings::IniFormat); + loadBuiltinValues(&builtinSettings); +#endif } QSettings *QLibraryInfoPrivate::findConfiguration() @@ -420,10 +488,30 @@ static const struct { { "HostData", "." }, { "TargetSpec", "" }, { "HostSpec", "" }, + { "ExtPrefix", "" }, { "HostPrefix", "" }, #endif }; +#ifdef QT_BUILD_QMAKE +void QLibrarySettings::loadBuiltinValues(QSettings *config) +{ + config->beginGroup(QLatin1String("Paths")); + for (int i = 0; i <= QLibraryInfo::LastHostPath; i++) + builtinValues[i] = config->value(QLatin1String(qtConfEntries[i].key), + QLatin1String(qtConfEntries[i].value)).toString(); +# ifndef Q_OS_WIN + builtinSettingsPath = config->value(QLatin1String("Settings")).toString(); +# endif + config->endGroup(); +} + +void QLibraryInfo::reload() +{ + QLibraryInfoPrivate::reload(); +} +#endif + /*! Returns the location specified by \a loc. */ @@ -434,7 +522,7 @@ QLibraryInfo::location(LibraryLocation loc) QString ret = rawLocation(loc, FinalPaths); // Automatically prepend the sysroot to target paths - if ((loc < SysrootPath || loc > LastHostPath) && QT_CONFIGURE_SYSROOTIFY_PREFIX) { + if ((loc < SysrootPath || loc > LastHostPath) && QLibraryInfoPrivate::sysrootify()) { QString sysroot = rawLocation(SysrootPath, FinalPaths); if (!sysroot.isEmpty() && ret.length() > 2 && ret.at(1) == QLatin1Char(':') && (ret.at(2) == QLatin1Char('/') || ret.at(2) == QLatin1Char('\\'))) @@ -528,28 +616,32 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group) #endif // QT_NO_SETTINGS if (!fromConf) { +#ifdef QT_BUILD_QMAKE + if ((unsigned)loc <= (unsigned)LastHostPath) { + if (loc == PrefixPath && group != DevicePaths) + ret = QLibraryInfoPrivate::builtinValue(ExtPrefixPath); + else + ret = QLibraryInfoPrivate::builtinValue(loc); +# ifndef Q_OS_WIN // On Windows we use the registry + } else if (loc == SettingsPath) { + ret = QLibraryInfoPrivate::builtinSettingsPath(); +# endif + } +#else // QT_BUILD_QMAKE const char * volatile path = 0; if (loc == PrefixPath) { - path = -#ifdef QT_BUILD_QMAKE - (group != DevicePaths) ? - QT_CONFIGURE_EXT_PREFIX_PATH : -#endif - QT_CONFIGURE_PREFIX_PATH; + path = QT_CONFIGURE_PREFIX_PATH; } else if (unsigned(loc) <= sizeof(qt_configure_str_offsets)/sizeof(qt_configure_str_offsets[0])) { path = qt_configure_strs + qt_configure_str_offsets[loc - 1]; #ifndef Q_OS_WIN // On Windows we use the registry } else if (loc == SettingsPath) { path = QT_CONFIGURE_SETTINGS_PATH; #endif -#ifdef QT_BUILD_QMAKE - } else if (loc == HostPrefixPath) { - path = QT_CONFIGURE_HOST_PREFIX_PATH; -#endif } if (path) ret = QString::fromLocal8Bit(path); +#endif } #ifdef QT_BUILD_QMAKE diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h index 55be706382..9d794ce1da 100644 --- a/src/corelib/global/qlibraryinfo.h +++ b/src/corelib/global/qlibraryinfo.h @@ -96,6 +96,7 @@ public: HostDataPath, TargetSpecPath, HostSpecPath, + ExtPrefixPath, HostPrefixPath, LastHostPath = HostPrefixPath, #endif @@ -105,6 +106,7 @@ public: #ifdef QT_BUILD_QMAKE enum PathGroup { FinalPaths, EffectivePaths, EffectiveSourcePaths, DevicePaths }; static QString rawLocation(LibraryLocation, PathGroup); + static void reload(); #endif static QStringList platformPluginArguments(const QString &platformName); diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index 6984097b70..6b90a47388 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +#include "qglobal_p.h" #include "qlogging.h" #include "qlist.h" #include "qbytearray.h" @@ -59,7 +60,7 @@ #ifdef Q_OS_WIN #include <qt_windows.h> #endif -#ifdef QT_USE_SLOG2 +#if QT_CONFIG(slog2) #include <slog2.h> #endif @@ -67,12 +68,12 @@ #include <android/log.h> #endif -#if defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED) +#if QT_CONFIG(journald) # define SD_JOURNAL_SUPPRESS_LOCATION # include <systemd/sd-journal.h> # include <syslog.h> #endif -#if defined(QT_USE_SYSLOG) && !defined(QT_BOOTSTRAPPED) +#if QT_CONFIG(syslog) # include <syslog.h> #endif #ifdef Q_OS_UNIX @@ -93,7 +94,7 @@ # endif #endif -#if defined(QT_USE_SLOG2) +#if QT_CONFIG(slog2) extern char *__progname; #endif @@ -1285,7 +1286,7 @@ static QString formatBacktraceForLogMessage(const QMessagePattern::BacktracePara } #endif // QLOGGING_HAVE_BACKTRACE && !QT_BOOTSTRAPPED -#if defined(QT_USE_SLOG2) +#if QT_CONFIG(slog2) #ifndef QT_LOG_CODE #define QT_LOG_CODE 9000 #endif @@ -1334,7 +1335,7 @@ static void slog2_default_handler(QtMsgType msgType, const char *message) //writes to the slog2 buffer slog2c(NULL, QT_LOG_CODE, severity, message); } -#endif // QT_USE_SLOG2 +#endif // slog2 Q_GLOBAL_STATIC(QMessagePattern, qMessagePattern) @@ -1483,7 +1484,7 @@ static QBasicAtomicPointer<void (QtMsgType, const char*)> msgHandler = Q_BASIC_A // pointer to QtMessageHandler debug handler (with context) static QBasicAtomicPointer<void (QtMsgType, const QMessageLogContext &, const QString &)> messageHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMessageHandler); -#if defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED) +#if QT_CONFIG(journald) static void systemd_default_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &message) @@ -1517,7 +1518,7 @@ static void systemd_default_message_handler(QtMsgType type, } #endif -#ifdef QT_USE_SYSLOG +#if QT_CONFIG(syslog) static void syslog_default_message_handler(QtMsgType type, const char *message) { int priority = LOG_INFO; // Informational @@ -1581,14 +1582,14 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con logMessage.append(QLatin1Char('\n')); OutputDebugString(reinterpret_cast<const wchar_t *>(logMessage.utf16())); return; -#elif defined(QT_USE_SLOG2) +#elif QT_CONFIG(slog2) logMessage.append(QLatin1Char('\n')); slog2_default_handler(type, logMessage.toLocal8Bit().constData()); return; -#elif defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED) +#elif QT_CONFIG(journald) systemd_default_message_handler(type, context, logMessage); return; -#elif defined(QT_USE_SYSLOG) && !defined(QT_BOOTSTRAPPED) +#elif QT_CONFIG(syslog) syslog_default_message_handler(type, logMessage.toUtf8().constData()); return; #elif defined(Q_OS_ANDROID) diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 91953ebf26..437f774547 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -80,6 +80,40 @@ static QString driveSpec(const QString &path) } #endif +enum { +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) + OSSupportsUncPaths = true +#else + OSSupportsUncPaths = false +#endif +}; + +// Return the length of the root part of an absolute path, for use by cleanPath(), cd(). +static int rootLength(const QString &name, bool allowUncPaths) +{ + const int len = name.length(); + // starts with double slash + if (allowUncPaths && name.startsWith(QLatin1String("//"))) { + // Server name '//server/path' is part of the prefix. + const int nextSlash = name.indexOf(QLatin1Char('/'), 2); + return nextSlash >= 0 ? nextSlash + 1 : len; + } +#if defined(Q_OS_WINRT) + const QString rootPath = QDir::rootPath(); // rootPath contains the trailing slash + if (name.startsWith(rootPath, Qt::CaseInsensitive)) + return rootPath.size(); +#endif // Q_OS_WINRT +#if defined(Q_OS_WIN) + if (len >= 2 && name.at(1) == QLatin1Char(':')) { + // Handle a possible drive letter + return len > 2 && name.at(2) == QLatin1Char('/') ? 3 : 2; + } +#endif + if (name.at(0) == QLatin1Char('/')) + return 1; + return 0; +} + //************* QDirPrivate QDirPrivate::QDirPrivate(const QString &path, const QStringList &nameFilters_, QDir::SortFlags sort_, QDir::Filters filters_) : QSharedData() @@ -859,6 +893,8 @@ QString QDir::fromNativeSeparators(const QString &pathName) return pathName; } +static QString qt_cleanPath(const QString &path, bool *ok = nullptr); + /*! Changes the QDir's directory to \a dirName. @@ -879,32 +915,18 @@ bool QDir::cd(const QString &dirName) return true; QString newPath; if (isAbsolutePath(dirName)) { - newPath = cleanPath(dirName); + newPath = qt_cleanPath(dirName); } else { - if (isRoot()) - newPath = d->dirEntry.filePath(); - else - newPath = d->dirEntry.filePath() % QLatin1Char('/'); + newPath = d->dirEntry.filePath(); + if (!newPath.endsWith(QLatin1Char('/'))) + newPath += QLatin1Char('/'); newPath += dirName; if (dirName.indexOf(QLatin1Char('/')) >= 0 || dirName == QLatin1String("..") || d->dirEntry.filePath() == QLatin1String(".")) { - newPath = cleanPath(newPath); -#if defined (Q_OS_UNIX) - //After cleanPath() if path is "/.." or starts with "/../" it means trying to cd above root. - if (newPath.startsWith(QLatin1String("/../")) || newPath == QLatin1String("/..")) -#elif defined (Q_OS_WINRT) - const QString rootPath = QDir::rootPath(); - if (newPath.size() < rootPath.size() && rootPath.startsWith(newPath)) -#else - /* - cleanPath() already took care of replacing '\' with '/'. - We can't use startsWith here because the letter of the drive is unknown. - After cleanPath() if path is "[A-Z]:/.." or starts with "[A-Z]:/../" it means trying to cd above root. - */ - - if (newPath.midRef(1, 4) == QLatin1String(":/..") && (newPath.length() == 5 || newPath.at(5) == QLatin1Char('/'))) -#endif + bool ok; + newPath = qt_cleanPath(newPath, &ok); + if (!ok) return false; /* If newPath starts with .., we convert it to absolute to @@ -2051,10 +2073,14 @@ bool QDir::match(const QString &filter, const QString &fileName) This method is shared with QUrl, so it doesn't deal with QDir::separator(), nor does it remove the trailing slash, if any. */ -Q_AUTOTEST_EXPORT QString qt_normalizePathSegments(const QString &name, bool allowUncPaths) +Q_AUTOTEST_EXPORT QString qt_normalizePathSegments(const QString &name, bool allowUncPaths, + bool *ok = nullptr) { const int len = name.length(); + if (ok) + *ok = false; + if (len == 0) return name; @@ -2066,19 +2092,7 @@ Q_AUTOTEST_EXPORT QString qt_normalizePathSegments(const QString &name, bool all const QChar *prefix = p; int up = 0; - int prefixLength = 0; - - if (allowUncPaths && len >= 2 && p[1].unicode() == '/' && p[0].unicode() == '/') { - // starts with double slash - prefixLength = 2; -#ifdef Q_OS_WIN - } else if (len >= 2 && p[1].unicode() == ':') { - // remember the drive letter - prefixLength = (len > 2 && p[2].unicode() == '/') ? 3 : 2; -#endif - } else if (p[0].unicode() == '/') { - prefixLength = 1; - } + const int prefixLength = rootLength(name, allowUncPaths); p += prefixLength; i -= prefixLength; @@ -2131,6 +2145,10 @@ Q_AUTOTEST_EXPORT QString qt_normalizePathSegments(const QString &name, bool all --up; } + // Indicate failure when ".." are left over for an absolute path. + if (ok) + *ok = prefixLength == 0 || up == 0; + // add remaining '..' while (up) { if (used != len && out[used].unicode() != '/') // is not empty and there isn't already a '/' @@ -2168,32 +2186,16 @@ Q_AUTOTEST_EXPORT QString qt_normalizePathSegments(const QString &name, bool all return ret; } -/*! - Returns \a path with directory separators normalized (converted to "/") and - redundant ones removed, and "."s and ".."s resolved (as far as possible). - - Symbolic links are kept. This function does not return the - canonical path, but rather the simplest version of the input. - For example, "./local" becomes "local", "local/../bin" becomes - "bin" and "/local/usr/../bin" becomes "/local/bin". - - \sa absolutePath(), canonicalPath() -*/ -QString QDir::cleanPath(const QString &path) +static QString qt_cleanPath(const QString &path, bool *ok) { if (path.isEmpty()) return path; QString name = path; - QChar dir_separator = separator(); + QChar dir_separator = QDir::separator(); if (dir_separator != QLatin1Char('/')) name.replace(dir_separator, QLatin1Char('/')); - bool allowUncPaths = false; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) //allow unc paths - allowUncPaths = true; -#endif - - QString ret = qt_normalizePathSegments(name, allowUncPaths); + QString ret = qt_normalizePathSegments(name, OSSupportsUncPaths, ok); // Strip away last slash except for root directories if (ret.length() > 1 && ret.endsWith(QLatin1Char('/'))) { @@ -2211,6 +2213,22 @@ QString QDir::cleanPath(const QString &path) } /*! + Returns \a path with directory separators normalized (converted to "/") and + redundant ones removed, and "."s and ".."s resolved (as far as possible). + + Symbolic links are kept. This function does not return the + canonical path, but rather the simplest version of the input. + For example, "./local" becomes "local", "local/../bin" becomes + "bin" and "/local/usr/../bin" becomes "/local/bin". + + \sa absolutePath(), canonicalPath() +*/ +QString QDir::cleanPath(const QString &path) +{ + return qt_cleanPath(path); +} + +/*! Returns \c true if \a path is relative; returns \c false if it is absolute. diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 480a777457..8c67d97afa 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -2705,6 +2705,7 @@ void QSettings::sync() { Q_D(QSettings); d->sync(); + d->pendingChanges = false; } /*! diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 60ce752eb6..066052ade9 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -417,7 +417,8 @@ #include "qurlquery.h" QT_BEGIN_NAMESPACE -extern QString qt_normalizePathSegments(const QString &name, bool allowUncPaths); // qdir.cpp +extern QString qt_normalizePathSegments(const QString &name, bool allowUncPaths, + bool *ok = nullptr); // qdir.cpp inline static bool isHex(char c) { diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index 7799113d30..61d0f2bdf1 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -151,9 +151,6 @@ unix|integrity { kernel/qtimerinfo_unix_p.h qtConfig(poll_select): SOURCES += kernel/qpoll.cpp - qtConfig(poll_poll): DEFINES += QT_HAVE_POLL - qtConfig(poll_ppoll): DEFINES += QT_HAVE_POLL QT_HAVE_PPOLL - qtConfig(poll_pollts): DEFINES += QT_HAVE_POLL QT_HAVE_POLLTS qtConfig(glib) { SOURCES += \ diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp index 2042964427..686143f8c7 100644 --- a/src/corelib/kernel/qcore_unix.cpp +++ b/src/corelib/kernel/qcore_unix.cpp @@ -38,6 +38,7 @@ ** ****************************************************************************/ +#include <QtCore/private/qglobal_p.h> #include "qcore_unix_p.h" #include "qelapsedtimer.h" @@ -49,9 +50,8 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_HAVE_PPOLL) && defined(QT_HAVE_POLLTS) -# define ppoll pollts -# define QT_HAVE_PPOLL +#if QT_CONFIG(poll_pollts) +# define ppoll pollts #endif static inline bool time_update(struct timespec *tv, const struct timespec &start, @@ -64,7 +64,7 @@ static inline bool time_update(struct timespec *tv, const struct timespec &start return tv->tv_sec >= 0; } -#if !defined(QT_HAVE_PPOLL) && defined(QT_HAVE_POLL) +#if QT_CONFIG(poll_poll) static inline int timespecToMillisecs(const struct timespec *ts) { return (ts == NULL) ? -1 : @@ -77,9 +77,9 @@ int qt_poll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts); static inline int qt_ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts) { -#if defined(QT_HAVE_PPOLL) - return ::ppoll(fds, nfds, timeout_ts, Q_NULLPTR); -#elif defined(QT_HAVE_POLL) +#if QT_CONFIG(poll_ppoll) || QT_CONFIG(poll_pollts) + return ::ppoll(fds, nfds, timeout_ts, nullptr); +#elif QT_CONFIG(poll_poll) return ::poll(fds, nfds, timespecToMillisecs(timeout_ts)); #else return qt_poll(fds, nfds, timeout_ts); diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index ccfa7d0d38..0ffc22d810 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -319,7 +319,7 @@ template<typename TInput, typename LiteralWrapper> inline bool qt_convertToBool(const QVariant::Private *const d) { TInput str = v_cast<TInput>(d)->toLower(); - return !(str == LiteralWrapper("0") || str == LiteralWrapper("false") || str.isEmpty()); + return !(str.isEmpty() || str == LiteralWrapper("0") || str == LiteralWrapper("false")); } /*! @@ -700,7 +700,7 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) bool *b = static_cast<bool *>(result); switch(d->type) { case QVariant::ByteArray: - *b = qt_convertToBool<QByteArray, QByteArray>(d); + *b = qt_convertToBool<QByteArray, const char*>(d); break; case QVariant::String: *b = qt_convertToBool<QString, QLatin1String>(d); diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h index 51f73c3368..fb7031ce71 100644 --- a/src/corelib/tools/qalgorithms.h +++ b/src/corelib/tools/qalgorithms.h @@ -589,15 +589,16 @@ Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NO return __builtin_popcountll(v); } #elif defined(Q_CC_MSVC) && !defined(Q_OS_WINCE) && !defined(Q_PROCESSOR_ARM) +#define QT_POPCOUNT_CONSTEXPR #define QT_HAS_BUILTIN_CTZ -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_ctz(quint32 val) +Q_ALWAYS_INLINE unsigned long qt_builtin_ctz(quint32 val) { unsigned long result; _BitScanForward(&result, val); return result; } #define QT_HAS_BUILTIN_CLZ -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_clz(quint32 val) +Q_ALWAYS_INLINE unsigned long qt_builtin_clz(quint32 val) { unsigned long result; _BitScanReverse(&result, val); @@ -610,7 +611,7 @@ Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_clz(quint32 val) #if Q_PROCESSOR_WORDSIZE == 8 // These are only defined for 64bit builds. #define QT_HAS_BUILTIN_CTZLL -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_ctzll(quint64 val) +Q_ALWAYS_INLINE unsigned long qt_builtin_ctzll(quint64 val) { unsigned long result; _BitScanForward64(&result, val); @@ -618,7 +619,7 @@ Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_ctzll(quint64 val) } // MSVC calls it _BitScanReverse and returns the carry flag, which we don't need #define QT_HAS_BUILTIN_CLZLL -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_clzll(quint64 val) +Q_ALWAYS_INLINE unsigned long qt_builtin_clzll(quint64 val) { unsigned long result; _BitScanReverse64(&result, val); @@ -628,31 +629,31 @@ Q_DECL_CONSTEXPR Q_ALWAYS_INLINE unsigned long qt_builtin_clzll(quint64 val) } #endif // MSVC 64bit # define QT_HAS_BUILTIN_CTZS -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_ctzs(quint16 v) Q_DECL_NOTHROW +Q_ALWAYS_INLINE uint qt_builtin_ctzs(quint16 v) Q_DECL_NOTHROW { return qt_builtin_ctz(v); } #define QT_HAS_BUILTIN_CLZS -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_clzs(quint16 v) Q_DECL_NOTHROW +Q_ALWAYS_INLINE uint qt_builtin_clzs(quint16 v) Q_DECL_NOTHROW { return qt_builtin_clz(v) - 16U; } #define QALGORITHMS_USE_BUILTIN_POPCOUNT -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint32 v) Q_DECL_NOTHROW +Q_ALWAYS_INLINE uint qt_builtin_popcount(quint32 v) Q_DECL_NOTHROW { return __popcnt(v); } -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint8 v) Q_DECL_NOTHROW +Q_ALWAYS_INLINE uint qt_builtin_popcount(quint8 v) Q_DECL_NOTHROW { return __popcnt16(v); } -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcount(quint16 v) Q_DECL_NOTHROW +Q_ALWAYS_INLINE uint qt_builtin_popcount(quint16 v) Q_DECL_NOTHROW { return __popcnt16(v); } #if Q_PROCESSOR_WORDSIZE == 8 #define QALGORITHMS_USE_BUILTIN_POPCOUNTLL -Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NOTHROW +Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NOTHROW { return __popcnt64(v); } @@ -660,9 +661,13 @@ Q_DECL_CONSTEXPR Q_ALWAYS_INLINE uint qt_builtin_popcountll(quint64 v) Q_DECL_NO #endif // MSVC #endif // QT_HAS_CONSTEXPR_BUILTINS +#ifndef QT_POPCOUNT_CONSTEXPR +#define QT_POPCOUNT_CONSTEXPR Q_DECL_CONSTEXPR +#endif + } //namespace QAlgorithmsPrivate -Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint32 v) Q_DECL_NOTHROW +Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint32 v) Q_DECL_NOTHROW { #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT return QAlgorithmsPrivate::qt_builtin_popcount(v); @@ -675,7 +680,7 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint32 v) Q #endif } -Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint8 v) Q_DECL_NOTHROW +Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint8 v) Q_DECL_NOTHROW { #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT return QAlgorithmsPrivate::qt_builtin_popcount(v); @@ -685,7 +690,7 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint8 v) Q_ #endif } -Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint16 v) Q_DECL_NOTHROW +Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint16 v) Q_DECL_NOTHROW { #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT return QAlgorithmsPrivate::qt_builtin_popcount(v); @@ -696,7 +701,7 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint16 v) Q #endif } -Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint64 v) Q_DECL_NOTHROW +Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(quint64 v) Q_DECL_NOTHROW { #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNTLL return QAlgorithmsPrivate::qt_builtin_popcountll(v); @@ -711,7 +716,7 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(quint64 v) Q #endif } -Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(long unsigned int v) Q_DECL_NOTHROW +Q_DECL_CONST_FUNCTION QT_POPCOUNT_CONSTEXPR inline uint qPopulationCount(long unsigned int v) Q_DECL_NOTHROW { return qPopulationCount(static_cast<quint64>(v)); } @@ -719,6 +724,7 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qPopulationCount(long unsigne #if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) #undef QALGORITHMS_USE_BUILTIN_POPCOUNT #endif +#undef QT_POPCOUNT_CONSTEXPR Q_DECL_RELAXED_CONSTEXPR inline uint qCountTrailingZeroBits(quint32 v) Q_DECL_NOTHROW { diff --git a/src/corelib/tools/qcollator_p.h b/src/corelib/tools/qcollator_p.h index fbbce00676..423ba0325a 100644 --- a/src/corelib/tools/qcollator_p.h +++ b/src/corelib/tools/qcollator_p.h @@ -55,7 +55,7 @@ #include <QtCore/private/qglobal_p.h> #include "qcollator.h" #include <QVector> -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) #include <unicode/ucol.h> #elif defined(Q_OS_OSX) #include <CoreServices/CoreServices.h> @@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) typedef UCollator *CollatorType; typedef QByteArray CollatorKeyType; @@ -90,7 +90,7 @@ class Q_CORE_EXPORT QCollatorPrivate public: QAtomicInt ref; QLocale locale; -#if defined(Q_OS_WIN) && !defined(QT_USE_ICU) +#if defined(Q_OS_WIN) && !QT_CONFIG(icu) #ifdef USE_COMPARESTRINGEX QString localeName; #else diff --git a/src/corelib/tools/qcommandlineoption.h b/src/corelib/tools/qcommandlineoption.h index 4dcae03ad9..276be042de 100644 --- a/src/corelib/tools/qcommandlineoption.h +++ b/src/corelib/tools/qcommandlineoption.h @@ -94,7 +94,7 @@ public: void setFlags(Flags aflags); #if QT_DEPRECATED_SINCE(5, 8) - QT_DEPRECATED_X("Use setFlags() with HiddenFromHelp)") + QT_DEPRECATED_X("Use setFlags() with HiddenFromHelp") void setHidden(bool hidden); QT_DEPRECATED_X("Use flags() and HiddenFromHelp") bool isHidden() const; diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 847fc2d55e..f499681ca9 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -2431,7 +2431,7 @@ Qt::LayoutDirection QLocale::textDirection() const */ QString QLocale::toUpper(const QString &str) const { -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) bool ok = true; QString result = QIcu::toUpper(d->bcp47Name('_'), str, &ok); if (ok) @@ -2455,7 +2455,7 @@ QString QLocale::toUpper(const QString &str) const */ QString QLocale::toLower(const QString &str) const { -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) bool ok = true; const QString result = QIcu::toLower(d->bcp47Name('_'), str, &ok); if (ok) diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h index c83c9d3333..20eff8fd64 100644 --- a/src/corelib/tools/qlocale_p.h +++ b/src/corelib/tools/qlocale_p.h @@ -134,7 +134,7 @@ Q_DECLARE_TYPEINFO(QSystemLocale::QueryType, Q_PRIMITIVE_TYPE); Q_DECLARE_TYPEINFO(QSystemLocale::CurrencyToStringArgument, Q_MOVABLE_TYPE); #endif -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) namespace QIcu { QString toUpper(const QByteArray &localeId, const QString &str, bool *ok); QString toLower(const QByteArray &localeId, const QString &str, bool *ok); diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp index 406eb31923..94ed47f898 100644 --- a/src/corelib/tools/qmap.cpp +++ b/src/corelib/tools/qmap.cpp @@ -399,7 +399,9 @@ void QMapDataBase::freeData(QMapDataBase *d) With QMap, the items are always sorted by key. \li The key type of a QHash must provide operator==() and a global qHash(Key) function. The key type of a QMap must provide - operator<() specifying a total order. + operator<() specifying a total order. Since Qt 5.8.1 it is also safe + to use a pointer type as key, even if the underlying operator<() + does not provide a total order. \endlist Here's an example QMap with QString keys and \c int values: diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h index 96ce787446..3f4f034b4e 100644 --- a/src/corelib/tools/qmap.h +++ b/src/corelib/tools/qmap.h @@ -51,6 +51,7 @@ #include <map> #include <new> +#include <functional> #ifdef Q_COMPILER_INITIALIZER_LISTS #include <initializer_list> @@ -61,11 +62,8 @@ QT_BEGIN_NAMESPACE /* QMap uses qMapLessThanKey() to compare keys. The default implementation uses operator<(). For pointer types, - qMapLessThanKey() casts the pointers to integers before it - compares them, because operator<() is undefined on pointers - that come from different memory blocks. (In practice, this - is only a problem when running a program such as - BoundsChecker.) + qMapLessThanKey() uses std::less (because operator<() on + pointers can be used only between pointers in the same array). */ template <class Key> inline bool qMapLessThanKey(const Key &key1, const Key &key2) @@ -75,8 +73,7 @@ template <class Key> inline bool qMapLessThanKey(const Key &key1, const Key &key template <class Ptr> inline bool qMapLessThanKey(const Ptr *key1, const Ptr *key2) { - Q_STATIC_ASSERT(sizeof(quintptr) == sizeof(const Ptr *)); - return quintptr(key1) < quintptr(key2); + return std::less<const Ptr *>()(key1, key2); } struct QMapDataBase; diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index eef375fe72..8888eced87 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -5575,7 +5575,7 @@ int QString::localeAwareCompare(const QString &other) const return localeAwareCompare_helper(constData(), length(), other.constData(), other.length()); } -#if defined(QT_USE_ICU) && !defined(Q_OS_WIN32) && !defined(Q_OS_DARWIN) +#if QT_CONFIG(icu) && !defined(Q_OS_WIN32) && !defined(Q_OS_DARWIN) Q_GLOBAL_STATIC(QThreadStorage<QCollator>, defaultCollator) #endif @@ -5621,7 +5621,7 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1, CFRelease(thisString); CFRelease(otherString); return result; -#elif defined(QT_USE_ICU) +#elif QT_CONFIG(icu) if (!defaultCollator()->hasLocalData()) defaultCollator()->setLocalData(QCollator()); return defaultCollator()->localData().compare(data1, length1, data2, length2); diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp index e423d9af0c..359c2d0bdb 100644 --- a/src/corelib/tools/qtimezone.cpp +++ b/src/corelib/tools/qtimezone.cpp @@ -54,11 +54,11 @@ QT_BEGIN_NAMESPACE static QTimeZonePrivate *newBackendTimeZone() { #ifdef QT_NO_SYSTEMLOCALE -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) return new QIcuTimeZonePrivate(); #else return new QUtcTimeZonePrivate(); -#endif // QT_USE_ICU +#endif #else #if defined Q_OS_MAC return new QMacTimeZonePrivate(); @@ -69,7 +69,7 @@ static QTimeZonePrivate *newBackendTimeZone() // Registry based timezone backend not available on WinRT #elif defined Q_OS_WIN return new QWinTimeZonePrivate(); -#elif defined QT_USE_ICU +#elif QT_CONFIG(icu) return new QIcuTimeZonePrivate(); #else return new QUtcTimeZonePrivate(); @@ -81,11 +81,11 @@ static QTimeZonePrivate *newBackendTimeZone() static QTimeZonePrivate *newBackendTimeZone(const QByteArray &ianaId) { #ifdef QT_NO_SYSTEMLOCALE -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) return new QIcuTimeZonePrivate(ianaId); #else return new QUtcTimeZonePrivate(ianaId); -#endif // QT_USE_ICU +#endif #else #if defined Q_OS_MAC return new QMacTimeZonePrivate(ianaId); @@ -96,7 +96,7 @@ static QTimeZonePrivate *newBackendTimeZone(const QByteArray &ianaId) // Registry based timezone backend not available on WinRT #elif defined Q_OS_WIN return new QWinTimeZonePrivate(ianaId); -#elif defined QT_USE_ICU +#elif QT_CONFIG(icu) return new QIcuTimeZonePrivate(ianaId); #else return new QUtcTimeZonePrivate(ianaId); diff --git a/src/corelib/tools/qtimezoneprivate.cpp b/src/corelib/tools/qtimezoneprivate.cpp index 56da197542..2ff03eddec 100644 --- a/src/corelib/tools/qtimezoneprivate.cpp +++ b/src/corelib/tools/qtimezoneprivate.cpp @@ -590,7 +590,7 @@ template<> QTimeZonePrivate *QSharedDataPointer<QTimeZonePrivate>::clone() } /* - UTC Offset implementation, used when QT_NO_SYSTEMLOCALE set and QT_USE_ICU not set, + UTC Offset implementation, used when QT_NO_SYSTEMLOCALE set and ICU is not being used, or for QDateTimes with a Qt:Spec of Qt::OffsetFromUtc. */ diff --git a/src/corelib/tools/qtimezoneprivate_p.h b/src/corelib/tools/qtimezoneprivate_p.h index d7fbb12344..d06784b0f9 100644 --- a/src/corelib/tools/qtimezoneprivate_p.h +++ b/src/corelib/tools/qtimezoneprivate_p.h @@ -56,9 +56,9 @@ #include "qlocale_p.h" #include "qvector.h" -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) #include <unicode/ucal.h> -#endif // QT_USE_ICU +#endif #ifdef Q_OS_MAC #ifdef __OBJC__ @@ -227,7 +227,7 @@ private: int m_offsetFromUtc; }; -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) class Q_AUTOTEST_EXPORT QIcuTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate { public: @@ -268,7 +268,7 @@ private: UCalendar *m_ucal; }; -#endif // QT_USE_ICU +#endif #if defined Q_OS_UNIX && !defined Q_OS_MAC && !defined Q_OS_ANDROID struct QTzTransitionTime @@ -337,9 +337,9 @@ private: QVector<QTzTransitionTime> m_tranTimes; QVector<QTzTransitionRule> m_tranRules; QList<QByteArray> m_abbreviations; -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) mutable QSharedDataPointer<QTimeZonePrivate> m_icu; -#endif // QT_USE_ICU +#endif QByteArray m_posixRule; }; #endif // Q_OS_UNIX diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp index 96d04df0e2..10b61c3a40 100644 --- a/src/corelib/tools/qtimezoneprivate_tz.cpp +++ b/src/corelib/tools/qtimezoneprivate_tz.cpp @@ -598,18 +598,18 @@ static QVector<QTimeZonePrivate::Data> calculatePosixTransitions(const QByteArra // Create the system default time zone QTzTimeZonePrivate::QTzTimeZonePrivate() -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) : m_icu(0) -#endif // QT_USE_ICU +#endif { init(systemTimeZoneId()); } // Create a named time zone QTzTimeZonePrivate::QTzTimeZonePrivate(const QByteArray &ianaId) -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) : m_icu(0) -#endif // QT_USE_ICU +#endif { init(ianaId); } @@ -617,9 +617,9 @@ QTzTimeZonePrivate::QTzTimeZonePrivate(const QByteArray &ianaId) QTzTimeZonePrivate::QTzTimeZonePrivate(const QTzTimeZonePrivate &other) : QTimeZonePrivate(other), m_tranTimes(other.m_tranTimes), m_tranRules(other.m_tranRules), m_abbreviations(other.m_abbreviations), -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) m_icu(other.m_icu), -#endif // QT_USE_ICU +#endif m_posixRule(other.m_posixRule) { } @@ -778,7 +778,7 @@ QString QTzTimeZonePrivate::displayName(qint64 atMSecsSinceEpoch, QTimeZone::NameType nameType, const QLocale &locale) const { -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) if (!m_icu) m_icu = new QIcuTimeZonePrivate(m_id); // TODO small risk may not match if tran times differ due to outdated files @@ -788,7 +788,7 @@ QString QTzTimeZonePrivate::displayName(qint64 atMSecsSinceEpoch, #else Q_UNUSED(nameType) Q_UNUSED(locale) -#endif // QT_USE_ICU +#endif return abbreviation(atMSecsSinceEpoch); } @@ -796,7 +796,7 @@ QString QTzTimeZonePrivate::displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType, const QLocale &locale) const { -#ifdef QT_USE_ICU +#if QT_CONFIG(icu) if (!m_icu) m_icu = new QIcuTimeZonePrivate(m_id); // TODO small risk may not match if tran times differ due to outdated files @@ -807,7 +807,7 @@ QString QTzTimeZonePrivate::displayName(QTimeZone::TimeType timeType, Q_UNUSED(timeType) Q_UNUSED(nameType) Q_UNUSED(locale) -#endif // QT_USE_ICU +#endif // If no ICU available then have to use abbreviations instead // Abbreviations don't have GenericTime if (timeType == QTimeZone::GenericTime) diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h index c3ac104399..1530299303 100644 --- a/src/corelib/tools/qvarlengtharray.h +++ b/src/corelib/tools/qvarlengtharray.h @@ -76,7 +76,8 @@ public: QVarLengthArray(std::initializer_list<T> args) : a(Prealloc), s(0), ptr(reinterpret_cast<T *>(array)) { - append(args.begin(), args.size()); + if (args.size()) + append(args.begin(), args.size()); } #endif diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index fb80bbd6b8..fa8e07abbc 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -144,7 +144,6 @@ qtConfig(icu) { SOURCES += tools/qlocale_icu.cpp \ tools/qcollator_icu.cpp - DEFINES += QT_USE_ICU } else: win32 { SOURCES += tools/qcollator_win.cpp } else: macx { diff --git a/src/dbus/qdbuspendingreply.h b/src/dbus/qdbuspendingreply.h index 786eab2120..da29894d15 100644 --- a/src/dbus/qdbuspendingreply.h +++ b/src/dbus/qdbuspendingreply.h @@ -77,7 +77,7 @@ namespace QDBusPendingReplyTypes { typedef T1 Type; }; - template<typename T1> inline int metaTypeFor(T1 * = 0) + template<typename T1> inline int metaTypeFor(T1 * = nullptr) { return qMetaTypeId<T1>(); } // specialize for QVariant, allowing it to be used in place of QDBusVariant template<> inline int metaTypeFor<QVariant>(QVariant *) @@ -91,7 +91,7 @@ namespace QDBusPendingReplyTypes { enum { Total = Next::Total + 1 }; static inline void fillMetaTypes(int *p) { - *p = metaTypeFor<T1>(0); + *p = metaTypeFor<T1>(nullptr); Next::fillMetaTypes(++p); } }; diff --git a/src/dbus/qdbusreply.h b/src/dbus/qdbusreply.h index b6a454d240..227615024a 100644 --- a/src/dbus/qdbusreply.h +++ b/src/dbus/qdbusreply.h @@ -66,7 +66,7 @@ public: } inline QDBusReply& operator=(const QDBusMessage &reply) { - QVariant data(qMetaTypeId<Type>(), reinterpret_cast<void*>(0)); + QVariant data(qMetaTypeId<Type>(), nullptr); qDBusReplyFill(reply, m_error, data); m_data = qvariant_cast<Type>(data); return *this; diff --git a/src/gui/configure.json b/src/gui/configure.json index 1f5011617c..f4171a8e9f 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -7,7 +7,6 @@ "commandline": { "options": { - "android-style-assets": "boolean", "angle": "boolean", "direct2d": "boolean", "directfb": "boolean", @@ -413,11 +412,6 @@ "condition": "features.accessibility && features.xcb && features.dbus", "output": [ "privateFeature", "feature" ] }, - "android-style-assets": { - "label": "Android Style Assets", - "condition": "config.android", - "output": [ "privateFeature" ] - }, "angle": { "label": "ANGLE", "autoDetect": "features.opengles2 || features.opengl-dynamic", diff --git a/src/gui/image/qimage_sse2.cpp b/src/gui/image/qimage_sse2.cpp index 0fb92e9d43..8f7195e0b5 100644 --- a/src/gui/image/qimage_sse2.cpp +++ b/src/gui/image/qimage_sse2.cpp @@ -51,51 +51,66 @@ bool convert_ARGB_to_ARGB_PM_inplace_sse2(QImageData *data, Qt::ImageConversionF { Q_ASSERT(data->format == QImage::Format_ARGB32 || data->format == QImage::Format_RGBA8888); - // extra pixels on each line - const int spare = data->width & 3; - // width in pixels of the pad at the end of each line - const int pad = (data->bytes_per_line >> 2) - data->width; - const int iter = data->width >> 2; - int height = data->height; + const int width = data->width; + const int height = data->height; + const int bpl = data->bytes_per_line; const __m128i alphaMask = _mm_set1_epi32(0xff000000); const __m128i nullVector = _mm_setzero_si128(); const __m128i half = _mm_set1_epi16(0x80); const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); - __m128i *d = reinterpret_cast<__m128i*>(data->data); - while (height--) { - const __m128i *end = d + iter; - - for (; d != end; ++d) { - const __m128i srcVector = _mm_loadu_si128(d); + uchar *d = data->data; + for (int y = 0; y < height; ++y) { + int i = 0; + quint32 *d32 = reinterpret_cast<quint32 *>(d); + ALIGNMENT_PROLOGUE_16BYTES(d, i, width) { + const quint32 p = d32[i]; + if (p <= 0x00ffffff) + d32[i] = 0; + else if (p < 0xff000000) + d32[i] = qPremultiply(p); + } + __m128i *d128 = reinterpret_cast<__m128i *>(d32 + i); + for (; i < (width - 3); i += 4) { + const __m128i srcVector = _mm_load_si128(d128); +#ifdef __SSE4_1__ + if (_mm_testc_si128(srcVector, alphaMask)) { + // opaque, data is unchanged + } else if (_mm_testz_si128(srcVector, alphaMask)) { + // fully transparent + _mm_store_si128(d128, nullVector); + } else { + const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); +#else const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff) { // opaque, data is unchanged } else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) == 0xffff) { // fully transparent - _mm_storeu_si128(d, nullVector); + _mm_store_si128(d128, nullVector); } else { +#endif __m128i alphaChannel = _mm_srli_epi32(srcVector, 24); alphaChannel = _mm_or_si128(alphaChannel, _mm_slli_epi32(alphaChannel, 16)); __m128i result; BYTE_MUL_SSE2(result, srcVector, alphaChannel, colorMask, half); result = _mm_or_si128(_mm_andnot_si128(alphaMask, result), srcVectorAlpha); - _mm_storeu_si128(d, result); + _mm_store_si128(d128, result); } + d128++; } - QRgb *p = reinterpret_cast<QRgb*>(d); - QRgb *pe = p+spare; - for (; p != pe; ++p) { - if (*p < 0x00ffffff) - *p = 0; - else if (*p < 0xff000000) - *p = qPremultiply(*p); + SIMD_EPILOGUE(i, width, 3) { + const quint32 p = d32[i]; + if (p <= 0x00ffffff) + d32[i] = 0; + else if (p < 0xff000000) + d32[i] = qPremultiply(p); } - d = reinterpret_cast<__m128i*>(p+pad); + d += bpl; } if (data->format == QImage::Format_ARGB32) diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 7beab72ab0..98cdecc444 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -1914,7 +1914,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo QMouseEvent ev(type, localPoint, localPoint, globalPoint, button, buttons, e->modifiers, e->source); ev.setTimestamp(e->timestamp); - if (window->d_func()->blockedByModalWindow) { + if (window->d_func()->blockedByModalWindow && !qApp->d_func()->popupActive()) { // a modal window is blocking this window, don't allow mouse events through return; } @@ -2595,7 +2595,7 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To break; } - if (w->d_func()->blockedByModalWindow) { + if (w->d_func()->blockedByModalWindow && !qApp->d_func()->popupActive()) { // a modal window is blocking this window, don't allow touch events through // QTBUG-37371 temporary fix; TODO: revisit in 5.4 when we have a forwarding solution diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index e1a35e048c..0d62490c75 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -199,6 +199,7 @@ public: static void hideModalWindow(QWindow *window); static void updateBlockedStatus(QWindow *window); virtual bool isWindowBlocked(QWindow *window, QWindow **blockingWindow = 0) const; + virtual bool popupActive() { return false; } static Qt::MouseButtons buttons; static ulong mousePressTime; diff --git a/src/gui/kernel/qplatformnativeinterface.cpp b/src/gui/kernel/qplatformnativeinterface.cpp index f48e470d1b..6614d45b12 100644 --- a/src/gui/kernel/qplatformnativeinterface.cpp +++ b/src/gui/kernel/qplatformnativeinterface.cpp @@ -38,6 +38,7 @@ ****************************************************************************/ #include "qplatformnativeinterface.h" +#include <QtGui/qcursor.h> QT_BEGIN_NAMESPACE diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h index 19540308a1..e143884f9d 100644 --- a/src/gui/math3d/qmatrix4x4.h +++ b/src/gui/math3d/qmatrix4x4.h @@ -867,9 +867,9 @@ inline QPointF operator*(const QPointF& point, const QMatrix4x4& matrix) yin * matrix.m[3][1] + matrix.m[3][3]; if (w == 1.0f) { - return QPointF(float(x), float(y)); + return QPointF(qreal(x), qreal(y)); } else { - return QPointF(float(x / w), float(y / w)); + return QPointF(qreal(x / w), qreal(y / w)); } } @@ -907,33 +907,35 @@ inline QPoint operator*(const QMatrix4x4& matrix, const QPoint& point) inline QPointF operator*(const QMatrix4x4& matrix, const QPointF& point) { - float xin, yin; - float x, y, w; + qreal xin, yin; + qreal x, y, w; xin = point.x(); yin = point.y(); if (matrix.flagBits == QMatrix4x4::Identity) { return point; } else if (matrix.flagBits < QMatrix4x4::Rotation2D) { // Translation | Scale - return QPointF(xin * matrix.m[0][0] + matrix.m[3][0], - yin * matrix.m[1][1] + matrix.m[3][1]); + return QPointF(xin * qreal(matrix.m[0][0]) + qreal(matrix.m[3][0]), + yin * qreal(matrix.m[1][1]) + qreal(matrix.m[3][1])); } else if (matrix.flagBits < QMatrix4x4::Perspective) { - return QPointF(xin * matrix.m[0][0] + yin * matrix.m[1][0] + matrix.m[3][0], - xin * matrix.m[0][1] + yin * matrix.m[1][1] + matrix.m[3][1]); + return QPointF(xin * qreal(matrix.m[0][0]) + yin * qreal(matrix.m[1][0]) + + qreal(matrix.m[3][0]), + xin * qreal(matrix.m[0][1]) + yin * qreal(matrix.m[1][1]) + + qreal(matrix.m[3][1])); } else { - x = xin * matrix.m[0][0] + - yin * matrix.m[1][0] + - matrix.m[3][0]; - y = xin * matrix.m[0][1] + - yin * matrix.m[1][1] + - matrix.m[3][1]; - w = xin * matrix.m[0][3] + - yin * matrix.m[1][3] + - matrix.m[3][3]; - if (w == 1.0f) { - return QPointF(float(x), float(y)); + x = xin * qreal(matrix.m[0][0]) + + yin * qreal(matrix.m[1][0]) + + qreal(matrix.m[3][0]); + y = xin * qreal(matrix.m[0][1]) + + yin * qreal(matrix.m[1][1]) + + qreal(matrix.m[3][1]); + w = xin * qreal(matrix.m[0][3]) + + yin * qreal(matrix.m[1][3]) + + qreal(matrix.m[3][3]); + if (w == 1.0) { + return QPointF(qreal(x), qreal(y)); } else { - return QPointF(float(x / w), float(y / w)); + return QPointF(qreal(x / w), qreal(y / w)); } } } diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h index 21b051e08e..808e0ee6d7 100644 --- a/src/gui/math3d/qquaternion.h +++ b/src/gui/math3d/qquaternion.h @@ -202,7 +202,8 @@ inline QQuaternion QQuaternion::inverted() const double(yp) * double(yp) + double(zp) * double(zp); if (!qFuzzyIsNull(len)) - return QQuaternion(wp / len, -xp / len, -yp / len, -zp / len); + return QQuaternion(double(wp) / len, double(-xp) / len, + double(-yp) / len, double(-zp) / len); return QQuaternion(0.0f, 0.0f, 0.0f, 0.0f); } @@ -251,7 +252,7 @@ inline const QQuaternion operator*(const QQuaternion &q1, const QQuaternion& q2) float zz = (q1.wp + q1.yp) * (q2.wp - q2.zp); float ww = (q1.zp + q1.xp) * (q2.xp + q2.yp); float xx = ww + yy + zz; - float qq = 0.5 * (xx + (q1.zp - q1.xp) * (q2.xp - q2.yp)); + float qq = 0.5f * (xx + (q1.zp - q1.xp) * (q2.xp - q2.yp)); float w = qq - ww + (q1.zp - q1.yp) * (q2.yp - q2.zp); float x = qq - xx + (q1.xp + q1.wp) * (q2.xp + q2.wp); diff --git a/src/gui/opengl/qopengltexture.cpp b/src/gui/opengl/qopengltexture.cpp index 0a46eea85d..c9b08f60b1 100644 --- a/src/gui/opengl/qopengltexture.cpp +++ b/src/gui/opengl/qopengltexture.cpp @@ -410,6 +410,34 @@ static bool isSizedTextureFormat(QOpenGLTexture::TextureFormat internalFormat) case QOpenGLTexture::SRGB8_PunchThrough_Alpha1_ETC2: case QOpenGLTexture::RGBA8_ETC2_EAC: case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC: + case QOpenGLTexture::RGBA_ASTC_4x4: + case QOpenGLTexture::RGBA_ASTC_5x4: + case QOpenGLTexture::RGBA_ASTC_5x5: + case QOpenGLTexture::RGBA_ASTC_6x5: + case QOpenGLTexture::RGBA_ASTC_6x6: + case QOpenGLTexture::RGBA_ASTC_8x5: + case QOpenGLTexture::RGBA_ASTC_8x6: + case QOpenGLTexture::RGBA_ASTC_8x8: + case QOpenGLTexture::RGBA_ASTC_10x5: + case QOpenGLTexture::RGBA_ASTC_10x6: + case QOpenGLTexture::RGBA_ASTC_10x8: + case QOpenGLTexture::RGBA_ASTC_10x10: + case QOpenGLTexture::RGBA_ASTC_12x10: + case QOpenGLTexture::RGBA_ASTC_12x12: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_4x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x12: return true; case QOpenGLTexture::RGB8_ETC1: @@ -703,6 +731,36 @@ static QOpenGLTexture::PixelFormat pixelFormatCompatibleWithInternalFormat(QOpen case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC: return QOpenGLTexture::RGBA; + case QOpenGLTexture::RGBA_ASTC_4x4: + case QOpenGLTexture::RGBA_ASTC_5x4: + case QOpenGLTexture::RGBA_ASTC_5x5: + case QOpenGLTexture::RGBA_ASTC_6x5: + case QOpenGLTexture::RGBA_ASTC_6x6: + case QOpenGLTexture::RGBA_ASTC_8x5: + case QOpenGLTexture::RGBA_ASTC_8x6: + case QOpenGLTexture::RGBA_ASTC_8x8: + case QOpenGLTexture::RGBA_ASTC_10x5: + case QOpenGLTexture::RGBA_ASTC_10x6: + case QOpenGLTexture::RGBA_ASTC_10x8: + case QOpenGLTexture::RGBA_ASTC_10x10: + case QOpenGLTexture::RGBA_ASTC_12x10: + case QOpenGLTexture::RGBA_ASTC_12x12: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_4x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x12: + return QOpenGLTexture::RGBA; + case QOpenGLTexture::DepthFormat: return QOpenGLTexture::Depth; @@ -859,6 +917,34 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe case QOpenGLTexture::RGBA8_ETC2_EAC: case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC: case QOpenGLTexture::RGB8_ETC1: + case QOpenGLTexture::RGBA_ASTC_4x4: + case QOpenGLTexture::RGBA_ASTC_5x4: + case QOpenGLTexture::RGBA_ASTC_5x5: + case QOpenGLTexture::RGBA_ASTC_6x5: + case QOpenGLTexture::RGBA_ASTC_6x6: + case QOpenGLTexture::RGBA_ASTC_8x5: + case QOpenGLTexture::RGBA_ASTC_8x6: + case QOpenGLTexture::RGBA_ASTC_8x8: + case QOpenGLTexture::RGBA_ASTC_10x5: + case QOpenGLTexture::RGBA_ASTC_10x6: + case QOpenGLTexture::RGBA_ASTC_10x8: + case QOpenGLTexture::RGBA_ASTC_10x10: + case QOpenGLTexture::RGBA_ASTC_12x10: + case QOpenGLTexture::RGBA_ASTC_12x12: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_4x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x12: return QOpenGLTexture::UInt8; case QOpenGLTexture::DepthFormat: @@ -977,6 +1063,34 @@ static bool isCompressedFormat(QOpenGLTexture::TextureFormat internalFormat) case QOpenGLTexture::RGBA8_ETC2_EAC: case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC: case QOpenGLTexture::RGB8_ETC1: + case QOpenGLTexture::RGBA_ASTC_4x4: + case QOpenGLTexture::RGBA_ASTC_5x4: + case QOpenGLTexture::RGBA_ASTC_5x5: + case QOpenGLTexture::RGBA_ASTC_6x5: + case QOpenGLTexture::RGBA_ASTC_6x6: + case QOpenGLTexture::RGBA_ASTC_8x5: + case QOpenGLTexture::RGBA_ASTC_8x6: + case QOpenGLTexture::RGBA_ASTC_8x8: + case QOpenGLTexture::RGBA_ASTC_10x5: + case QOpenGLTexture::RGBA_ASTC_10x6: + case QOpenGLTexture::RGBA_ASTC_10x8: + case QOpenGLTexture::RGBA_ASTC_10x10: + case QOpenGLTexture::RGBA_ASTC_12x10: + case QOpenGLTexture::RGBA_ASTC_12x12: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_4x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x12: return true; case QOpenGLTexture::DepthFormat: @@ -2037,6 +2151,34 @@ QOpenGLTexture *QOpenGLTexturePrivate::createTextureView(QOpenGLTexture::Target \value RGBA8_ETC2_EAC Equivalent to GL_COMPRESSED_RGBA8_ETC2_EAC \value SRGB8_Alpha8_ETC2_EAC Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC \value RGB8_ETC1 Equivalent to GL_ETC1_RGB8_OES + \value RGBA_ASTC_4x4 Equivalent to GL_COMPRESSED_RGBA_ASTC_4x4_KHR + \value RGBA_ASTC_5x4 Equivalent to GL_COMPRESSED_RGBA_ASTC_5x4_KHR + \value RGBA_ASTC_5x5 Equivalent to GL_COMPRESSED_RGBA_ASTC_5x5_KHR + \value RGBA_ASTC_6x5 Equivalent to GL_COMPRESSED_RGBA_ASTC_6x5_KHR + \value RGBA_ASTC_6x6 Equivalent to GL_COMPRESSED_RGBA_ASTC_6x6_KHR + \value RGBA_ASTC_8x5 Equivalent to GL_COMPRESSED_RGBA_ASTC_8x5_KHR + \value RGBA_ASTC_8x6 Equivalent to GL_COMPRESSED_RGBA_ASTC_8x6_KHR + \value RGBA_ASTC_8x8 Equivalent to GL_COMPRESSED_RGBA_ASTC_8x8_KHR + \value RGBA_ASTC_10x5 Equivalent to GL_COMPRESSED_RGBA_ASTC_10x5_KHR + \value RGBA_ASTC_10x6 Equivalent to GL_COMPRESSED_RGBA_ASTC_10x6_KHR + \value RGBA_ASTC_10x8 Equivalent to GL_COMPRESSED_RGBA_ASTC_10x8_KHR + \value RGBA_ASTC_10x10 Equivalent to GL_COMPRESSED_RGBA_ASTC_10x10_KHR + \value RGBA_ASTC_12x10 Equivalent to GL_COMPRESSED_RGBA_ASTC_12x10_KHR + \value RGBA_ASTC_12x12 Equivalent to GL_COMPRESSED_RGBA_ASTC_12x12_KHR + \value SRGB8_Alpha8_ASTC_4x4 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR + \value SRGB8_Alpha8_ASTC_5x4 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR + \value SRGB8_Alpha8_ASTC_5x5 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR + \value SRGB8_Alpha8_ASTC_6x5 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR + \value SRGB8_Alpha8_ASTC_6x6 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR + \value SRGB8_Alpha8_ASTC_8x5 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR + \value SRGB8_Alpha8_ASTC_8x6 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR + \value SRGB8_Alpha8_ASTC_8x8 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR + \value SRGB8_Alpha8_ASTC_10x5 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR + \value SRGB8_Alpha8_ASTC_10x6 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR + \value SRGB8_Alpha8_ASTC_10x8 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR + \value SRGB8_Alpha8_ASTC_10x10 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR + \value SRGB8_Alpha8_ASTC_12x10 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR + \value SRGB8_Alpha8_ASTC_12x12 Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR \value SRGB8 Equivalent to GL_SRGB8 \value SRGB8_Alpha8 Equivalent to GL_SRGB8_ALPHA8 @@ -2592,6 +2734,34 @@ void QOpenGLTexture::setFormat(TextureFormat format) case RGBAFormat: case LuminanceFormat: case LuminanceAlphaFormat: + case QOpenGLTexture::RGBA_ASTC_4x4: + case QOpenGLTexture::RGBA_ASTC_5x4: + case QOpenGLTexture::RGBA_ASTC_5x5: + case QOpenGLTexture::RGBA_ASTC_6x5: + case QOpenGLTexture::RGBA_ASTC_6x6: + case QOpenGLTexture::RGBA_ASTC_8x5: + case QOpenGLTexture::RGBA_ASTC_8x6: + case QOpenGLTexture::RGBA_ASTC_8x8: + case QOpenGLTexture::RGBA_ASTC_10x5: + case QOpenGLTexture::RGBA_ASTC_10x6: + case QOpenGLTexture::RGBA_ASTC_10x8: + case QOpenGLTexture::RGBA_ASTC_10x10: + case QOpenGLTexture::RGBA_ASTC_12x10: + case QOpenGLTexture::RGBA_ASTC_12x12: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_4x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x4: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_5x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_6x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_8x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x5: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x6: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x8: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_10x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x10: + case QOpenGLTexture::SRGB8_Alpha8_ASTC_12x12: d->formatClass = FormatClass_Unique; break; } diff --git a/src/gui/opengl/qopengltexture.h b/src/gui/opengl/qopengltexture.h index 0a948488a6..d0a3bfec8b 100644 --- a/src/gui/opengl/qopengltexture.h +++ b/src/gui/opengl/qopengltexture.h @@ -208,6 +208,34 @@ public: RGBA8_ETC2_EAC = 0x9278, // GL_COMPRESSED_RGBA8_ETC2_EAC SRGB8_Alpha8_ETC2_EAC = 0x9279, // GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC RGB8_ETC1 = 0x8D64, // GL_ETC1_RGB8_OES + RGBA_ASTC_4x4 = 0x93B0, // GL_COMPRESSED_RGBA_ASTC_4x4_KHR + RGBA_ASTC_5x4 = 0x93B1, // GL_COMPRESSED_RGBA_ASTC_5x4_KHR + RGBA_ASTC_5x5 = 0x93B2, // GL_COMPRESSED_RGBA_ASTC_5x5_KHR + RGBA_ASTC_6x5 = 0x93B3, // GL_COMPRESSED_RGBA_ASTC_6x5_KHR + RGBA_ASTC_6x6 = 0x93B4, // GL_COMPRESSED_RGBA_ASTC_6x6_KHR + RGBA_ASTC_8x5 = 0x93B5, // GL_COMPRESSED_RGBA_ASTC_8x5_KHR + RGBA_ASTC_8x6 = 0x93B6, // GL_COMPRESSED_RGBA_ASTC_8x6_KHR + RGBA_ASTC_8x8 = 0x93B7, // GL_COMPRESSED_RGBA_ASTC_8x8_KHR + RGBA_ASTC_10x5 = 0x93B8, // GL_COMPRESSED_RGBA_ASTC_10x5_KHR + RGBA_ASTC_10x6 = 0x93B9, // GL_COMPRESSED_RGBA_ASTC_10x6_KHR + RGBA_ASTC_10x8 = 0x93BA, // GL_COMPRESSED_RGBA_ASTC_10x8_KHR + RGBA_ASTC_10x10 = 0x93BB, // GL_COMPRESSED_RGBA_ASTC_10x10_KHR + RGBA_ASTC_12x10 = 0x93BC, // GL_COMPRESSED_RGBA_ASTC_12x10_KHR + RGBA_ASTC_12x12 = 0x93BD, // GL_COMPRESSED_RGBA_ASTC_12x12_KHR + SRGB8_Alpha8_ASTC_4x4 = 0x93D0, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR + SRGB8_Alpha8_ASTC_5x4 = 0x93D1, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR + SRGB8_Alpha8_ASTC_5x5 = 0x93D2, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR + SRGB8_Alpha8_ASTC_6x5 = 0x93D3, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR + SRGB8_Alpha8_ASTC_6x6 = 0x93D4, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR + SRGB8_Alpha8_ASTC_8x5 = 0x93D5, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR + SRGB8_Alpha8_ASTC_8x6 = 0x93D6, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR + SRGB8_Alpha8_ASTC_8x8 = 0x93D7, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR + SRGB8_Alpha8_ASTC_10x5 = 0x93D8, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR + SRGB8_Alpha8_ASTC_10x6 = 0x93D9, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR + SRGB8_Alpha8_ASTC_10x8 = 0x93DA, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR + SRGB8_Alpha8_ASTC_10x10 = 0x93DB, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR + SRGB8_Alpha8_ASTC_12x10 = 0x93DC, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR + SRGB8_Alpha8_ASTC_12x12 = 0x93DD, // GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR // sRGB formats SRGB8 = 0x8C41, // GL_SRGB8 diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp index 0a5d458532..a4a091a29f 100644 --- a/src/gui/painting/qblendfunctions.cpp +++ b/src/gui/painting/qblendfunctions.cpp @@ -385,19 +385,25 @@ void qt_blend_rgb32_on_rgb32(uchar *destPixels, int dbpl, destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha); fflush(stdout); #endif - - if (const_alpha != 256) { - qt_blend_argb32_on_argb32(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha); - return; - } - const uint *src = (const uint *) srcPixels; uint *dst = (uint *) destPixels; - int len = w * 4; - for (int y=0; y<h; ++y) { - memcpy(dst, src, len); - dst = (quint32 *)(((uchar *) dst) + dbpl); - src = (const quint32 *)(((const uchar *) src) + sbpl); + if (const_alpha == 256) { + const int len = w * 4; + for (int y = 0; y < h; ++y) { + memcpy(dst, src, len); + dst = (quint32 *)(((uchar *) dst) + dbpl); + src = (const quint32 *)(((const uchar *) src) + sbpl); + } + return; + } else if (const_alpha != 0) { + const_alpha = (const_alpha * 255) >> 8; + int ialpha = 255 - const_alpha; + for (int y=0; y<h; ++y) { + for (int x=0; x<w; ++x) + dst[x] = INTERPOLATE_PIXEL_255(dst[x], ialpha, src[x], const_alpha); + dst = (quint32 *)(((uchar *) dst) + dbpl); + src = (const quint32 *)(((const uchar *) src) + sbpl); + } } } @@ -414,7 +420,7 @@ struct Blend_RGB32_on_RGB32_ConstAlpha { } inline void write(quint32 *dst, quint32 src) { - *dst = BYTE_MUL(src, m_alpha) + BYTE_MUL(*dst, m_ialpha); + *dst = INTERPOLATE_PIXEL_255(src, m_alpha, *dst, m_ialpha); } inline void flush(void *) {} diff --git a/src/gui/painting/qdatabuffer_p.h b/src/gui/painting/qdatabuffer_p.h index 77b5be0c4c..7cac2ac358 100644 --- a/src/gui/painting/qdatabuffer_p.h +++ b/src/gui/painting/qdatabuffer_p.h @@ -65,10 +65,12 @@ public: QDataBuffer(int res) { capacity = res; - if (res) + if (res) { buffer = (Type*) malloc(capacity * sizeof(Type)); - else + Q_CHECK_PTR(buffer); + } else { buffer = 0; + } siz = 0; } @@ -115,14 +117,16 @@ public: while (capacity < size) capacity *= 2; buffer = (Type*) realloc(buffer, capacity * sizeof(Type)); + Q_CHECK_PTR(buffer); } } inline void shrink(int size) { capacity = size; - if (size) + if (size) { buffer = (Type*) realloc(buffer, capacity * sizeof(Type)); - else { + Q_CHECK_PTR(buffer); + } else { free(buffer); buffer = 0; } diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index e1875d84b9..a2e49dbfdb 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -217,8 +217,8 @@ static const QRgba64 *QT_FASTCALL convertToRGB64(QRgba64 *buffer, const uint *sr uint green = (src[i] >> greenShift<Format>()) & greenMask; uint blue = (src[i] >> blueShift<Format>()) & blueMask; - red = ((red << redLeftShift) | (red >> redRightShift)) << 16; - green = ((green << greenLeftShift) | (green >> greenRightShift)) << 8; + red = ((red << redLeftShift) | (red >> redRightShift)); + green = ((green << greenLeftShift) | (green >> greenRightShift)); blue = (blue << blueLeftShift) | (blue >> blueRightShift); buffer[i] = QRgba64::fromRgba(red, green, blue, 255); } @@ -580,6 +580,8 @@ static inline void qConvertARGB32PMToARGB64PM_sse2(QRgba64 *buffer, const uint * int i = 0; for (; ((uintptr_t)buffer & 0xf) && i < count; ++i) { uint s = *src++; + if (maskAlpha) + s = s | 0xff000000; if (RGBA) s = RGBA2ARGB(s); *buffer++ = QRgba64::fromArgb32(s); @@ -605,6 +607,8 @@ static inline void qConvertARGB32PMToARGB64PM_sse2(QRgba64 *buffer, const uint * SIMD_EPILOGUE(i, count, 3) { uint s = *src++; + if (maskAlpha) + s = s | 0xff000000; if (RGBA) s = RGBA2ARGB(s); *buffer++ = QRgba64::fromArgb32(s); @@ -839,6 +843,7 @@ template <QPixelLayout::BPP bpp> static uint QT_FASTCALL fetchPixel(const uchar *, int) { Q_UNREACHABLE(); + return 0; } template <> @@ -1562,8 +1567,12 @@ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, int y, int x, int length) { Q_STATIC_ASSERT(blendType == BlendTransformed || blendType == BlendTransformedTiled); - int image_width = data->texture.width; - int image_height = data->texture.height; + const int image_width = data->texture.width; + const int image_height = data->texture.height; + const int image_x1 = data->texture.x1; + const int image_y1 = data->texture.y1; + const int image_x2 = data->texture.x2 - 1; + const int image_y2 = data->texture.y2 - 1; const qreal cx = x + qreal(0.5); const qreal cy = y + qreal(0.5); @@ -1596,8 +1605,8 @@ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, if (px < 0) px += image_width; if (py < 0) py += image_height; } else { - px = qBound(0, px, image_width - 1); - py = qBound(0, py, image_height - 1); + px = qBound(image_x1, px, image_x2); + py = qBound(image_y1, py, image_y2); } *b = fetch(data->texture.scanLine(py), px); @@ -1627,8 +1636,8 @@ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, if (px < 0) px += image_width; if (py < 0) py += image_height; } else { - px = qBound(0, px, image_width - 1); - py = qBound(0, py, image_height - 1); + px = qBound(image_x1, px, image_x2); + py = qBound(image_y1, py, image_y2); } *b = fetch(data->texture.scanLine(py), px); @@ -1649,8 +1658,12 @@ template<TextureBlendType blendType> /* either BlendTransformed or BlendTransfo static const QRgba64 *QT_FASTCALL fetchTransformed64(QRgba64 *buffer, const Operator *, const QSpanData *data, int y, int x, int length) { - int image_width = data->texture.width; - int image_height = data->texture.height; + const int image_width = data->texture.width; + const int image_height = data->texture.height; + const int image_x1 = data->texture.x1; + const int image_y1 = data->texture.y1; + const int image_x2 = data->texture.x2 - 1; + const int image_y2 = data->texture.y2 - 1; const qreal cx = x + qreal(0.5); const qreal cy = y + qreal(0.5); @@ -1687,8 +1700,8 @@ static const QRgba64 *QT_FASTCALL fetchTransformed64(QRgba64 *buffer, const Oper if (px < 0) px += image_width; if (py < 0) py += image_height; } else { - px = qBound(0, px, image_width - 1); - py = qBound(0, py, image_height - 1); + px = qBound(image_x1, px, image_x2); + py = qBound(image_y1, py, image_y2); } buffer32[j] = fetch(data->texture.scanLine(py), px); @@ -1728,8 +1741,8 @@ static const QRgba64 *QT_FASTCALL fetchTransformed64(QRgba64 *buffer, const Oper if (px < 0) px += image_width; if (py < 0) py += image_height; } else { - px = qBound(0, px, image_width - 1); - py = qBound(0, py, image_height - 1); + px = qBound(image_x1, px, image_x2); + py = qBound(image_y1, py, image_y2); } buffer32[j] = fetch(data->texture.scanLine(py), px); @@ -2231,7 +2244,7 @@ static const uint * QT_FASTCALL fetchTransformedBilinearARGB32PM(uint *buffer, c } } } else { //rotation - if (std::abs(data->m11) > 8 || std::abs(data->m22) > 8) { + if (std::abs(data->m11) < (1./8.) || std::abs(data->m22) < (1./8.)) { //if we are zooming more than 8 times, we use 8bit precision for the position. while (b < end) { int x1 = (fx >> 16); @@ -2717,7 +2730,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper layout->convertToARGB32PM(buf1, buf1, len * 2, clut, 0); layout->convertToARGB32PM(buf2, buf2, len * 2, clut, 0); - if (std::abs(data->m11) > 8 || std::abs(data->m22) > 8) { + if (std::abs(data->m11) < (1./8.) || std::abs(data->m22) < (1./8.)) { //if we are zooming more than 8 times, we use 8bit precision for the position. for (int i = 0; i < len; ++i) { int distx = (fracX & 0x0000ffff) >> 8; @@ -4628,8 +4641,10 @@ static void blend_transformed_argb(int count, const QSpan *spans, void *userData CompositionFunction func = functionForMode[data->rasterBuffer->compositionMode]; uint buffer[buffer_size]; - int image_width = data->texture.width; - int image_height = data->texture.height; + const int image_x1 = data->texture.x1; + const int image_y1 = data->texture.y1; + const int image_x2 = data->texture.x2 - 1; + const int image_y2 = data->texture.y2 - 1; if (data->fast_matrix) { // The increment pr x in the scanline @@ -4656,8 +4671,8 @@ static void blend_transformed_argb(int count, const QSpan *spans, void *userData const uint *end = buffer + l; uint *b = buffer; while (b < end) { - int px = qBound(0, x >> 16, image_width - 1); - int py = qBound(0, y >> 16, image_height - 1); + int px = qBound(image_x1, x >> 16, image_x2); + int py = qBound(image_y1, y >> 16, image_y2); *b = reinterpret_cast<const uint *>(data->texture.scanLine(py))[px]; x += fdx; @@ -4696,8 +4711,8 @@ static void blend_transformed_argb(int count, const QSpan *spans, void *userData const qreal iw = w == 0 ? 1 : 1 / w; const qreal tx = x * iw; const qreal ty = y * iw; - const int px = qBound(0, int(tx) - (tx < 0), image_width - 1); - const int py = qBound(0, int(ty) - (ty < 0), image_height - 1); + const int px = qBound(image_x1, int(tx) - (tx < 0), image_x2); + const int py = qBound(image_y1, int(ty) - (ty < 0), image_y2); *b = reinterpret_cast<const uint *>(data->texture.scanLine(py))[px]; x += fdx; @@ -4729,8 +4744,10 @@ static void blend_transformed_rgb565(int count, const QSpan *spans, void *userDa } quint16 buffer[buffer_size]; - const int image_width = data->texture.width; - const int image_height = data->texture.height; + const int image_x1 = data->texture.x1; + const int image_y1 = data->texture.y1; + const int image_x2 = data->texture.x2 - 1; + const int image_y2 = data->texture.y2 - 1; if (data->fast_matrix) { // The increment pr x in the scanline @@ -4768,8 +4785,8 @@ static void blend_transformed_rgb565(int count, const QSpan *spans, void *userDa const quint16 *end = b + l; while (b < end) { - const int px = qBound(0, x >> 16, image_width - 1); - const int py = qBound(0, y >> 16, image_height - 1); + const int px = qBound(image_x1, x >> 16, image_x2); + const int py = qBound(image_y1, y >> 16, image_y2); *b = ((const quint16 *)data->texture.scanLine(py))[px]; ++b; @@ -4827,8 +4844,8 @@ static void blend_transformed_rgb565(int count, const QSpan *spans, void *userDa const qreal tx = x * iw; const qreal ty = y * iw; - const int px = qBound(0, int(tx) - (tx < 0), image_width - 1); - const int py = qBound(0, int(ty) - (ty < 0), image_height - 1); + const int px = qBound(image_x1, int(tx) - (tx < 0), image_x2); + const int py = qBound(image_y1, int(ty) - (ty < 0), image_y2); *b = ((const quint16 *)data->texture.scanLine(py))[px]; ++b; diff --git a/src/gui/painting/qdrawhelper_avx2.cpp b/src/gui/painting/qdrawhelper_avx2.cpp index acc9bc7ba1..9c1335298e 100644 --- a/src/gui/painting/qdrawhelper_avx2.cpp +++ b/src/gui/painting/qdrawhelper_avx2.cpp @@ -267,11 +267,9 @@ void qt_blend_rgb32_on_rgb32_avx2(uchar *destPixels, int dbpl, // 2) interpolate pixels with AVX2 for (; x < (w - 7); x += 8) { const __m256i srcVector = _mm256_lddqu_si256((const __m256i *)&src[x]); - if (!_mm256_testz_si256(srcVector, srcVector)) { - __m256i dstVector = _mm256_load_si256((__m256i *)&dst[x]); - INTERPOLATE_PIXEL_255_AVX2(srcVector, dstVector, constAlphaVector, oneMinusConstAlpha, colorMask, half); - _mm256_store_si256((__m256i *)&dst[x], dstVector); - } + __m256i dstVector = _mm256_load_si256((__m256i *)&dst[x]); + INTERPOLATE_PIXEL_255_AVX2(srcVector, dstVector, constAlphaVector, oneMinusConstAlpha, colorMask, half); + _mm256_store_si256((__m256i *)&dst[x], dstVector); } // 3) Epilogue diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp index d51b43961c..a833520b00 100644 --- a/src/gui/painting/qdrawhelper_neon.cpp +++ b/src/gui/painting/qdrawhelper_neon.cpp @@ -523,8 +523,6 @@ void qt_blend_rgb32_on_rgb32_neon(uchar *destPixels, int dbpl, vst1q_u32((uint32_t *)&dst[x], vcombine_u32(result32_low, result32_high)); } for (; x<w; ++x) { - uint s = src[x]; - s = BYTE_MUL(s, const_alpha); dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], one_minus_const_alpha); } dst = (quint32 *)(((uchar *) dst) + dbpl); diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp index 5ff08e8153..edce70d2d0 100644 --- a/src/gui/painting/qdrawhelper_sse2.cpp +++ b/src/gui/painting/qdrawhelper_sse2.cpp @@ -101,7 +101,6 @@ void qt_blend_rgb32_on_rgb32_sse2(uchar *destPixels, int dbpl, quint32 *dst = (quint32 *) destPixels; if (const_alpha != 256) { if (const_alpha != 0) { - const __m128i nullVector = _mm_set1_epi32(0); const __m128i half = _mm_set1_epi16(0x80); const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); @@ -119,12 +118,10 @@ void qt_blend_rgb32_on_rgb32_sse2(uchar *destPixels, int dbpl, for (; x < w-3; x += 4) { __m128i srcVector = _mm_loadu_si128((const __m128i *)&src[x]); - if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVector, nullVector)) != 0xffff) { - const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); - __m128i result; - INTERPOLATE_PIXEL_255_SSE2(result, srcVector, dstVector, constAlphaVector, oneMinusConstAlpha, colorMask, half); - _mm_store_si128((__m128i *)&dst[x], result); - } + const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); + __m128i result; + INTERPOLATE_PIXEL_255_SSE2(result, srcVector, dstVector, constAlphaVector, oneMinusConstAlpha, colorMask, half); + _mm_store_si128((__m128i *)&dst[x], result); } SIMD_EPILOGUE(x, w, 3) dst[x] = INTERPOLATE_PIXEL_255(src[x], const_alpha, dst[x], one_minus_const_alpha); diff --git a/src/gui/text/qinputcontrol.cpp b/src/gui/text/qinputcontrol.cpp new file mode 100644 index 0000000000..c2c198866a --- /dev/null +++ b/src/gui/text/qinputcontrol.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** 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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qinputcontrol_p.h" +#include <QtGui/qevent.h> + +QT_BEGIN_NAMESPACE + +QInputControl::QInputControl(Type type, QObject *parent) + : QObject(parent) + , m_type(type) +{ +} + +QInputControl::QInputControl(Type type, QObjectPrivate &dd, QObject *parent) + : QObject(dd, parent) + , m_type(type) +{ +} + +bool QInputControl::isAcceptableInput(const QKeyEvent *event) const +{ + const QString text = event->text(); + if (text.isEmpty()) + return false; + + const QChar c = text.at(0); + + // ZWNJ and ZWJ. This needs to go before the next test, since CTRL+SHIFT is + // used to input it on Windows. + if (c == QChar(0x200C) || c == QChar(0x200D)) + return true; + + // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards + if (event->modifiers() == Qt::ControlModifier + || event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) { + return false; + } + + if (c.isPrint()) + return true; + + if (c.category() == QChar::Other_PrivateUse) + return true; + + if (m_type == TextEdit && c == QLatin1Char('\t')) + return true; + + return false; +} + +QT_END_NAMESPACE diff --git a/src/gui/text/qinputcontrol_p.h b/src/gui/text/qinputcontrol_p.h new file mode 100644 index 0000000000..3b46067ba9 --- /dev/null +++ b/src/gui/text/qinputcontrol_p.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** 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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QINPUTCONTROL_P_H +#define QINPUTCONTROL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qobject.h> +#include <qtguiglobal.h> + +QT_BEGIN_NAMESPACE + +class QKeyEvent; +class Q_GUI_EXPORT QInputControl : public QObject +{ + Q_OBJECT +public: + enum Type { + LineEdit, + TextEdit + }; + + explicit QInputControl(Type type, QObject *parent = nullptr); + + bool isAcceptableInput(const QKeyEvent *event) const; + +protected: + explicit QInputControl(Type type, QObjectPrivate &dd, QObject *parent = nullptr); + +private: + const Type m_type; +}; + +QT_END_NAMESPACE + +#endif // QINPUTCONTROL_P_H diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 0d05fee6ef..c006e7f427 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -1148,6 +1148,11 @@ void QTextDocument::setMetaInformation(MetaInformation info, const QString &stri Returns the plain text contained in the document. If you want formatting information use a QTextCursor instead. + Some formatting characters are replaced by ASCII equivalents. + In particular, no-break space (U+00A0) is replaced by a regular + space (U+0020), and both paragraph (U+2029) and line (U+2028) + separators are replaced by line feed (U+000A). + \note Embedded objects, such as images, are represented by a Unicode value U+FFFC (OBJECT REPLACEMENT CHARACTER). diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index efd041a5af..abe20abe02 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -39,7 +39,8 @@ HEADERS += \ text/qrawfont_p.h \ text/qglyphrun.h \ text/qglyphrun_p.h \ - text/qdistancefield_p.h + text/qdistancefield_p.h \ + text/qinputcontrol_p.h SOURCES += \ text/qfont.cpp \ @@ -69,7 +70,8 @@ SOURCES += \ text/qstatictext.cpp \ text/qrawfont.cpp \ text/qglyphrun.cpp \ - text/qdistancefield.cpp + text/qdistancefield.cpp \ + text/qinputcontrol.cpp SOURCES += \ text/qfontengine_qpf2.cpp \ diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index 94719e9c2d..0be8a7f79e 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -82,7 +82,9 @@ \section1 SOCKS5 - The SOCKS5 support in Qt 4 is based on \l{http://www.rfc-editor.org/rfc/rfc1928.txt}{RFC 1928} and \l{http://www.rfc-editor.org/rfc/rfc1929.txt}{RFC 1929}. + The SOCKS5 support since Qt 4 is based on + \l{http://www.rfc-editor.org/rfc/rfc1928.txt}{RFC 1928} and + \l{http://www.rfc-editor.org/rfc/rfc1929.txt}{RFC 1929}. The supported authentication methods are no authentication and username/password authentication. Both IPv4 and IPv6 are supported. Domain names are resolved through the SOCKS5 server if @@ -1515,8 +1517,8 @@ bool QNetworkProxyFactory::usesSystemConfiguration() Enables the use of the platform-specific proxy settings, and only those. See systemProxyForQuery() for more information. - Calling setUseSystemConfiguration(\c{true}) will reset any proxy or - QNetworkProxyFactory already set. + Calling this function with \a enable set to \c true resets any proxy + or QNetworkProxyFactory that is already set. \note See the systemProxyForQuery() documentation for a list of limitations related to the use of system proxies. diff --git a/src/network/socket/qabstractsocket_p.h b/src/network/socket/qabstractsocket_p.h index 1578d7bb35..8a96cb9d48 100644 --- a/src/network/socket/qabstractsocket_p.h +++ b/src/network/socket/qabstractsocket_p.h @@ -72,13 +72,13 @@ public: virtual ~QAbstractSocketPrivate(); // from QAbstractSocketEngineReceiver - inline void readNotification() { canReadNotification(); } - inline void writeNotification() { canWriteNotification(); } - inline void exceptionNotification() {} - inline void closeNotification() { canCloseNotification(); } - void connectionNotification(); + inline void readNotification() override { canReadNotification(); } + inline void writeNotification() override { canWriteNotification(); } + inline void exceptionNotification() override {} + inline void closeNotification() override { canCloseNotification(); } + void connectionNotification() override; #ifndef QT_NO_NETWORKPROXY - inline void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) { + inline void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) override { Q_Q(QAbstractSocket); q->proxyAuthenticationRequired(proxy, authenticator); } diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index 560d74328e..9da37d2af3 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -99,12 +99,12 @@ public: QTcpSocket::setSocketError(error); } - inline qint64 readData(char *data, qint64 maxSize) + inline qint64 readData(char *data, qint64 maxSize) override { return QTcpSocket::readData(data, maxSize); } - inline qint64 writeData(const char *data, qint64 maxSize) + inline qint64 writeData(const char *data, qint64 maxSize) override { return QTcpSocket::writeData(data, maxSize); } diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 11d19682d8..928c7fc68f 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -1230,7 +1230,7 @@ public: { engine = parent; } protected: - bool event(QEvent *); + bool event(QEvent *) override; QNativeSocketEngine *engine; }; @@ -1262,7 +1262,7 @@ public: : QSocketNotifier(fd, QSocketNotifier::Write, parent) { engine = parent; } protected: - bool event(QEvent *); + bool event(QEvent *) override; QNativeSocketEngine *engine; }; @@ -1286,7 +1286,7 @@ public: : QSocketNotifier(fd, QSocketNotifier::Exception, parent) { engine = parent; } protected: - bool event(QEvent *); + bool event(QEvent *) override; QNativeSocketEngine *engine; }; diff --git a/src/opengl/gl2paintengineex/qglgradientcache_p.h b/src/opengl/gl2paintengineex/qglgradientcache_p.h index 1333df316b..3c9da982e9 100644 --- a/src/opengl/gl2paintengineex/qglgradientcache_p.h +++ b/src/opengl/gl2paintengineex/qglgradientcache_p.h @@ -83,8 +83,8 @@ public: GLuint getBuffer(const QGradient &gradient, qreal opacity); inline int paletteSize() const { return 1024; } - void invalidateResource(); - void freeResource(QOpenGLContext *ctx); + void invalidateResource() override; + void freeResource(QOpenGLContext *ctx) override; private: inline int maxCacheSize() const { return 60; } diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h index 6416e41773..9125fcfb4b 100644 --- a/src/opengl/qglpixelbuffer_p.h +++ b/src/opengl/qglpixelbuffer_p.h @@ -63,11 +63,11 @@ class QOpenGLFramebufferObject; class QGLPBufferGLPaintDevice : public QGLPaintDevice { public: - virtual QPaintEngine* paintEngine() const {return pbuf->paintEngine();} - virtual QSize size() const {return pbuf->size();} - virtual QGLContext* context() const; - virtual void beginPaint(); - virtual void endPaint(); + QPaintEngine* paintEngine() const override {return pbuf->paintEngine();} + QSize size() const override {return pbuf->size();} + QGLContext* context() const override; + void beginPaint() override; + void endPaint() override; void setPBuffer(QGLPixelBuffer* pb); void setFbo(GLuint fbo); private: diff --git a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h index 6c84f29613..8c802a0ca1 100644 --- a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h +++ b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h @@ -105,6 +105,10 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLS typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #endif +#ifndef EGL_KHR_stream_fifo +#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC +#endif + #ifndef EGL_KHR_stream_producer_eglsurface #define EGL_STREAM_BIT_KHR 0x0800 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index 78a0c4d0c9..1e29b12ec4 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -189,11 +189,16 @@ QCoreTextFontDatabase::~QCoreTextFontDatabase() static CFArrayRef availableFamilyNames() { -#if defined(Q_OS_OSX) - return CTFontManagerCopyAvailableFontFamilyNames(); -#elif defined(QT_PLATFORM_UIKIT) - return (CFArrayRef) [[UIFont familyNames] retain]; +#if QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(1060, 100000, 100000, 30000) + if (&CTFontManagerCopyAvailableFontFamilyNames) + return CTFontManagerCopyAvailableFontFamilyNames(); #endif +#if defined(QT_PLATFORM_UIKIT) + CFMutableArrayRef familyNames = CFArrayCreateMutableCopy(kCFAllocatorDefault, 0, (CFArrayRef)[UIFont familyNames]); + CFArrayAppendValue(familyNames, CFSTR(".PhoneFallback")); + return familyNames; +#endif + Q_UNREACHABLE(); } void QCoreTextFontDatabase::populateFontDatabase() @@ -207,17 +212,6 @@ void QCoreTextFontDatabase::populateFontDatabase() for (int i = 0; i < numberOfFamilies; ++i) { CFStringRef familyNameRef = (CFStringRef) CFArrayGetValueAtIndex(familyNames, i); QString familyName = QString::fromCFString(familyNameRef); - - // Don't populate internal fonts - if (familyName.startsWith(QLatin1Char('.')) || familyName == QLatin1String("LastResort")) - continue; - -#if defined(Q_OS_IOS) || defined(Q_OS_TVOS) - // Skip font families with no corresponding fonts - if (![UIFont fontNamesForFamilyName:(NSString*)familyNameRef].count) - continue; -#endif - QPlatformFontDatabase::registerFontFamily(familyName); #if defined(Q_OS_OSX) @@ -250,7 +244,7 @@ void QCoreTextFontDatabase::populateFamily(const QString &familyName) const int numFonts = CFArrayGetCount(matchingFonts); for (int i = 0; i < numFonts; ++i) - populateFromDescriptor(CTFontDescriptorRef(CFArrayGetValueAtIndex(matchingFonts, i))); + populateFromDescriptor(CTFontDescriptorRef(CFArrayGetValueAtIndex(matchingFonts, i)), familyName); } struct FontDescription { @@ -352,13 +346,18 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) } } -void QCoreTextFontDatabase::populateFromDescriptor(CTFontDescriptorRef font) +void QCoreTextFontDatabase::populateFromDescriptor(CTFontDescriptorRef font, const QString &familyName) { FontDescription fd; getFontDescription(font, &fd); + // Note: The familyName we are registering, and the family name of the font descriptor, may not + // match, as CTFontDescriptorCreateMatchingFontDescriptors will return descriptors for replacement + // fonts if a font family does not have any fonts available on the system. + QString family = !familyName.isNull() ? familyName : static_cast<QString>(fd.familyName); + CFRetain(font); - QPlatformFontDatabase::registerFont(fd.familyName, fd.styleName, fd.foundryName, fd.weight, fd.style, fd.stretch, + QPlatformFontDatabase::registerFont(family, fd.styleName, fd.foundryName, fd.weight, fd.style, fd.stretch, true /* antialiased */, true /* scalable */, fd.pixelSize, fd.fixedPitch, fd.writingSystems, (void *) font); } @@ -699,7 +698,7 @@ QStringList QCoreTextFontDatabase::addApplicationFont(const QByteArray &fontData bool QCoreTextFontDatabase::isPrivateFontFamily(const QString &family) const { - if (family.startsWith(QLatin1Char('.'))) + if (family.startsWith(QLatin1Char('.')) || family == QLatin1String("LastResort")) return true; return QPlatformFontDatabase::isPrivateFontFamily(family); diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h index 1bc3522bda..3b1be2e6a1 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h @@ -92,7 +92,7 @@ public: const QHash<QPlatformTheme::Font, QFont *> &themeFonts() const; private: - void populateFromDescriptor(CTFontDescriptorRef font); + void populateFromDescriptor(CTFontDescriptorRef font, const QString &familyName = QString()); #ifndef QT_NO_FREETYPE bool m_useFreeType; diff --git a/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase.cpp b/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase.cpp index f214184c36..9f4b182ece 100644 --- a/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase.cpp @@ -129,6 +129,17 @@ static QFontDatabase::WritingSystem writingSystemFromUnicodeRange(const DWRITE_U return QFontDatabase::Other; } +QWinRTFontDatabase::~QWinRTFontDatabase() +{ + qCDebug(lcQpaFonts) << __FUNCTION__; + + foreach (IDWriteFontFile *fontFile, m_fonts.keys()) + fontFile->Release(); + + foreach (IDWriteFontFamily *fontFamily, m_fontFamilies) + fontFamily->Release(); +} + QString QWinRTFontDatabase::fontDir() const { qCDebug(lcQpaFonts) << __FUNCTION__; @@ -146,17 +157,6 @@ QString QWinRTFontDatabase::fontDir() const return fontDirectory; } -QWinRTFontDatabase::~QWinRTFontDatabase() -{ - qCDebug(lcQpaFonts) << __FUNCTION__; - - foreach (IDWriteFontFile *fontFile, m_fonts.keys()) - fontFile->Release(); - - foreach (IDWriteFontFamily *fontFamily, m_fontFamilies) - fontFamily->Release(); -} - QFont QWinRTFontDatabase::defaultFont() const { return QFont(QStringLiteral("Segoe UI")); diff --git a/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase_p.h b/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase_p.h index 9559bac0a8..3b803d7613 100644 --- a/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/winrt/qwinrtfontdatabase_p.h @@ -70,16 +70,16 @@ struct FontDescription class QWinRTFontDatabase : public QBasicFontDatabase { public: - QString fontDir() const; ~QWinRTFontDatabase(); - QFont defaultFont() const Q_DECL_OVERRIDE; - bool fontsAlwaysScalable() const Q_DECL_OVERRIDE; - void populateFontDatabase() Q_DECL_OVERRIDE; - void populateFamily(const QString &familyName) Q_DECL_OVERRIDE; - QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE; + QString fontDir() const override; + QFont defaultFont() const override; + bool fontsAlwaysScalable() const override; + void populateFontDatabase() override; + void populateFamily(const QString &familyName) override; + QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QStringList fallbacksForFamily(const QString &family, QFont::Style style, - QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE; - void releaseHandle(void *handle) Q_DECL_OVERRIDE; + QFont::StyleHint styleHint, QChar::Script script) const override; + void releaseHandle(void *handle) override; private: QHash<IDWriteFontFile *, FontDescription> m_fonts; QHash<QString, IDWriteFontFamily *> m_fontFamilies; diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp index a9d758209a..352e4dfd56 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection.cpp @@ -119,13 +119,16 @@ bool QDBusMenuConnection::registerTrayIcon(QDBusTrayIcon *item) if (item->menu()) registerTrayIconMenu(item); + return registerTrayIconWithWatcher(item); +} + +bool QDBusMenuConnection::registerTrayIconWithWatcher(QDBusTrayIcon *item) +{ QDBusMessage registerMethod = QDBusMessage::createMethodCall( StatusNotifierWatcherService, StatusNotifierWatcherPath, StatusNotifierWatcherService, QLatin1String("RegisterStatusNotifierItem")); registerMethod.setArguments(QVariantList() << item->instanceId()); - success = m_connection.callWithCallback(registerMethod, this, SIGNAL(trayIconRegistered()), SLOT(dbusError(QDBusError))); - - return success; + return m_connection.callWithCallback(registerMethod, this, SIGNAL(trayIconRegistered()), SLOT(dbusError(QDBusError))); } bool QDBusMenuConnection::unregisterTrayIcon(QDBusTrayIcon *item) diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h index ae0595ae3b..c7c3f4bc5b 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h @@ -69,11 +69,13 @@ class QDBusMenuConnection : public QObject public: QDBusMenuConnection(QObject *parent = 0, const QString &serviceName = QString()); QDBusConnection connection() const { return m_connection; } + QDBusServiceWatcher *dbusWatcher() const { return m_dbusWatcher; } bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; } #ifndef QT_NO_SYSTEMTRAYICON bool registerTrayIconMenu(QDBusTrayIcon *item); void unregisterTrayIconMenu(QDBusTrayIcon *item); bool registerTrayIcon(QDBusTrayIcon *item); + bool registerTrayIconWithWatcher(QDBusTrayIcon *item); bool unregisterTrayIcon(QDBusTrayIcon *item); #endif // QT_NO_SYSTEMTRAYICON diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp index a686a33464..5c4157c206 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp @@ -116,6 +116,8 @@ void QDBusTrayIcon::init() { qCDebug(qLcTray) << "registering" << m_instanceId; m_registered = dBusConnection()->registerTrayIcon(this); + QObject::connect(dBusConnection()->dbusWatcher(), &QDBusServiceWatcher::serviceRegistered, + this, &QDBusTrayIcon::watcherServiceRegistered); } void QDBusTrayIcon::cleanup() @@ -130,6 +132,15 @@ void QDBusTrayIcon::cleanup() m_registered = false; } +void QDBusTrayIcon::watcherServiceRegistered(const QString &serviceName) +{ + Q_UNUSED(serviceName); + // We have the icon registered, but the watcher has restarted or + // changed, so we need to tell it about our icon again + if (m_registered) + dBusConnection()->registerTrayIconWithWatcher(this); +} + void QDBusTrayIcon::attentionTimerExpired() { m_messageTitle = QString(); diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h index 234ff60584..ff1a7ae532 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h @@ -133,6 +133,7 @@ private Q_SLOTS: void attentionTimerExpired(); void actionInvoked(uint id, const QString &action); void notificationClosed(uint id, uint reason); + void watcherServiceRegistered(const QString &serviceName); private: void setStatus(const QString &status); diff --git a/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java b/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java index 8170188ecb..805c90548b 100644 --- a/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java +++ b/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java @@ -44,7 +44,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.Log; -import android.app.Activity; import android.net.ConnectivityManager; public class QtNetworkReceiver @@ -65,29 +64,29 @@ public class QtNetworkReceiver private QtNetworkReceiver() {} - public static void registerReceiver(final Activity activity) + public static void registerReceiver(final Context context) { synchronized (m_lock) { if (m_broadcastReceiver == null) { m_broadcastReceiver = new BroadcastReceiverPrivate(); IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); - activity.registerReceiver(m_broadcastReceiver, intentFilter); + context.registerReceiver(m_broadcastReceiver, intentFilter); } } } - public static void unregisterReceiver(final Activity activity) + public static void unregisterReceiver(final Context context) { synchronized (m_lock) { if (m_broadcastReceiver == null) return; - activity.unregisterReceiver(m_broadcastReceiver); + context.unregisterReceiver(m_broadcastReceiver); } } - public static ConnectivityManager getConnectivityManager(final Activity activity) + public static ConnectivityManager getConnectivityManager(final Context context) { - return (ConnectivityManager)activity.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + return (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); } } diff --git a/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp b/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp index 3a5030d1f3..6787690246 100644 --- a/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp +++ b/src/plugins/bearer/android/src/wrappers/androidconnectivitymanager.cpp @@ -250,15 +250,15 @@ AndroidConnectivityManager::AndroidConnectivityManager() m_connectivityManager = QJNIObjectPrivate::callStaticObjectMethod(networkReceiverClass, "getConnectivityManager", - "(Landroid/app/Activity;)Landroid/net/ConnectivityManager;", - QtAndroidPrivate::activity()); + "(Landroid/content/Context;)Landroid/net/ConnectivityManager;", + QtAndroidPrivate::context()); if (!m_connectivityManager.isValid()) return; QJNIObjectPrivate::callStaticMethod<void>(networkReceiverClass, "registerReceiver", - "(Landroid/app/Activity;)V", - QtAndroidPrivate::activity()); + "(Landroid/content/Context;)V", + QtAndroidPrivate::context()); } AndroidConnectivityManager *AndroidConnectivityManager::getInstance() @@ -272,8 +272,8 @@ AndroidConnectivityManager::~AndroidConnectivityManager() { QJNIObjectPrivate::callStaticMethod<void>(networkReceiverClass, "unregisterReceiver", - "(Landroid/app/Activity;)V", - QtAndroidPrivate::activity()); + "(Landroid/content/Context;)V", + QtAndroidPrivate::context()); } AndroidNetworkInfo AndroidConnectivityManager::getActiveNetworkInfo() const diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.h b/src/plugins/platforms/android/qandroidplatformforeignwindow.h index 100e0adcdf..d42c36dcee 100644 --- a/src/plugins/platforms/android/qandroidplatformforeignwindow.h +++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.h @@ -51,12 +51,12 @@ class QAndroidPlatformForeignWindow : public QAndroidPlatformWindow public: explicit QAndroidPlatformForeignWindow(QWindow *window); ~QAndroidPlatformForeignWindow(); - void lower() Q_DECL_OVERRIDE; - void raise() Q_DECL_OVERRIDE; - void setGeometry(const QRect &rect) Q_DECL_OVERRIDE; - void setVisible(bool visible) Q_DECL_OVERRIDE; - void applicationStateChanged(Qt::ApplicationState state) Q_DECL_OVERRIDE; - void setParent(const QPlatformWindow *window) Q_DECL_OVERRIDE; + void lower() override; + void raise() override; + void setGeometry(const QRect &rect) override; + void setVisible(bool visible) override; + void applicationStateChanged(Qt::ApplicationState state) override; + void setParent(const QPlatformWindow *window) override; private: int m_surfaceId; diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 6669ee3176..de9e27e595 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -66,6 +66,8 @@ #include "qandroidplatformtheme.h" #include "qandroidsystemlocale.h" +#include <QtPlatformHeaders/QEGLNativeContext> + QT_BEGIN_NAMESPACE int QAndroidPlatformIntegration::m_defaultGeometryWidth = 320; @@ -251,7 +253,9 @@ QPlatformOpenGLContext *QAndroidPlatformIntegration::createPlatformOpenGLContext format.setRedBufferSize(8); format.setGreenBufferSize(8); format.setBlueBufferSize(8); - return new QAndroidPlatformOpenGLContext(format, context->shareHandle(), m_eglDisplay); + auto ctx = new QAndroidPlatformOpenGLContext(format, context->shareHandle(), m_eglDisplay, context->nativeHandle()); + context->setNativeHandle(QVariant::fromValue<QEGLNativeContext>(QEGLNativeContext(ctx->eglContext(), m_eglDisplay))); + return ctx; } QPlatformOffscreenSurface *QAndroidPlatformIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp index 2644fa27f6..eeec7a8106 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp @@ -49,8 +49,9 @@ QT_BEGIN_NAMESPACE -QAndroidPlatformOpenGLContext::QAndroidPlatformOpenGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display) - :QEGLPlatformContext(format, share, display) +QAndroidPlatformOpenGLContext::QAndroidPlatformOpenGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, + const QVariant &nativeHandle) + :QEGLPlatformContext(format, share, display, nullptr, nativeHandle) { } diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.h b/src/plugins/platforms/android/qandroidplatformopenglcontext.h index 87a0829655..3897b3166b 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.h +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.h @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE class QAndroidPlatformOpenGLContext : public QEGLPlatformContext { public: - QAndroidPlatformOpenGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display); + QAndroidPlatformOpenGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, const QVariant &nativeHandle); void swapBuffers(QPlatformSurface *surface) override; bool makeCurrent(QPlatformSurface *surface) override; diff --git a/src/plugins/platforms/android/qandroidplatformopenglwindow.h b/src/plugins/platforms/android/qandroidplatformopenglwindow.h index 12e86b3db4..d3072f766d 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglwindow.h +++ b/src/plugins/platforms/android/qandroidplatformopenglwindow.h @@ -64,7 +64,7 @@ public: void applicationStateChanged(Qt::ApplicationState) override; - void repaint(const QRegion ®ion) Q_DECL_OVERRIDE; + void repaint(const QRegion ®ion) override; protected: void surfaceChanged(JNIEnv *jniEnv, jobject surface, int w, int h) override; diff --git a/src/plugins/platforms/android/qandroidplatformtheme.h b/src/plugins/platforms/android/qandroidplatformtheme.h index 7405c3cdbd..b49d2516f1 100644 --- a/src/plugins/platforms/android/qandroidplatformtheme.h +++ b/src/plugins/platforms/android/qandroidplatformtheme.h @@ -72,7 +72,7 @@ public: const QPalette *palette(Palette type = SystemPalette) const override; const QFont *font(Font type = SystemFont) const override; QVariant themeHint(ThemeHint hint) const override; - QString standardButtonText(int button) const Q_DECL_OVERRIDE; + QString standardButtonText(int button) const override; bool usePlatformNativeDialog(DialogType type) const override; QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override; diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index da755aa189..7368aabf7d 100644 --- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -282,14 +282,18 @@ QT_END_NAMESPACE { Q_UNUSED(aNotification); inLaunch = false; - // qt_release_apple_event_handler(); - - // Insert code here to initialize your application + if (qEnvironmentVariableIsEmpty("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM")) { + if (QSysInfo::macVersion() >= QSysInfo::MV_10_12) { + // Move the application window to front to avoid launching behind the terminal. + // Ignoring other apps is neccessary (we must ignore the terminal), but makes + // Qt apps play slightly less nice with other apps when lanching from Finder + // (See the activateIgnoringOtherApps docs.) + [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; + } + } } - - - (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames { Q_UNUSED(filenames); diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index 92fffb4d15..18340f4ee1 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -312,11 +312,15 @@ QCocoaIntegration::QCocoaIntegration(const QStringList ¶mList) // see the function implementation for exceptions.) qt_mac_transformProccessToForegroundApplication(); - // Move the application window to front to avoid launching behind the terminal. - // Ignoring other apps is neccessary (we must ignore the terminal), but makes - // Qt apps play slightly less nice with other apps when lanching from Finder - // (See the activateIgnoringOtherApps docs.) - [cocoaApplication activateIgnoringOtherApps : YES]; + // Move the application window to front to make it take focus, also when launching + // from the terminal. On 10.12+ this call has been moved to applicationDidFinishLauching + // to work around issues with loss of focus at startup. + if (QSysInfo::macVersion() < QSysInfo::MV_10_12) { + // Ignoring other apps is neccessary (we must ignore the terminal), but makes + // Qt apps play slightly less nice with other apps when lanching from Finder + // (See the activateIgnoringOtherApps docs.) + [cocoaApplication activateIgnoringOtherApps : YES]; + } } // ### For AA_MacPluginApplication we don't want to load the menu nib. diff --git a/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro b/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro index d86a67b4f4..f936d05927 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro @@ -2,8 +2,8 @@ TEMPLATE = subdirs QT_FOR_CONFIG += gui-private qtConfig(egl_x11): SUBDIRS += eglfs_x11 -qtConfig(eglfs_gbm): SUBDIRS += eglfs_kms_support eglfs_kms -qtConfig(eglfs_egldevice): SUBDIRS += eglfs_kms_support eglfs_kms_egldevice +qtConfig(eglfs_gbm): SUBDIRS *= eglfs_kms_support eglfs_kms +qtConfig(eglfs_egldevice): SUBDIRS *= eglfs_kms_support eglfs_kms_egldevice qtConfig(eglfs_brcm): SUBDIRS += eglfs_brcm qtConfig(eglfs_mali): SUBDIRS += eglfs_mali qtConfig(eglfs_viv): SUBDIRS += eglfs_viv diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp index bed775ff81..d4df0dc66e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp @@ -181,24 +181,41 @@ void QEglFSKmsGbmScreen::flip() FrameBuffer *fb = framebufferForBufferObject(m_gbm_bo_next); - if (!output().mode_set) { - int ret = drmModeSetCrtc(device()->fd(), - output().crtc_id, + QEglFSKmsOutput &op(output()); + const int fd = device()->fd(); + const uint32_t w = op.modes[op.mode].hdisplay; + const uint32_t h = op.modes[op.mode].vdisplay; + + if (!op.mode_set) { + int ret = drmModeSetCrtc(fd, + op.crtc_id, fb->fb, 0, 0, - &output().connector_id, 1, - &output().modes[output().mode]); + &op.connector_id, 1, + &op.modes[op.mode]); - if (ret) { - qErrnoWarning("Could not set DRM mode!"); + if (ret == -1) { + qErrnoWarning(errno, "Could not set DRM mode!"); } else { - output().mode_set = true; + op.mode_set = true; setPowerState(PowerStateOn); + + if (!op.plane_set) { + op.plane_set = true; + if (op.wants_plane) { + int ret = drmModeSetPlane(fd, op.plane_id, op.crtc_id, + uint32_t(-1), 0, + 0, 0, w, h, + 0 << 16, 0 << 16, w << 16, h << 16); + if (ret == -1) + qErrnoWarning(errno, "drmModeSetPlane failed"); + } + } } } - int ret = drmModePageFlip(device()->fd(), - output().crtc_id, + int ret = drmModePageFlip(fd, + op.crtc_id, fb->fb, DRM_MODE_PAGE_FLIP_EVENT, this); diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp index d0c9c9565e..cf1de71831 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp @@ -39,11 +39,11 @@ ****************************************************************************/ #include "qeglfskmsegldeviceintegration.h" +#include "qeglfskmsegldevice.h" +#include "qeglfskmsegldevicescreen.h" #include <QtEglSupport/private/qeglconvenience_p.h> #include "private/qeglfswindow_p.h" #include "private/qeglfscursor_p.h" -#include "qeglfskmsegldevice.h" -#include "qeglfskmsscreen.h" #include <QLoggingCategory> #include <private/qmath_p.h> @@ -129,10 +129,16 @@ void QEglJetsonTK1Window::resetSurface() qCDebug(qLcEglfsKmsDebug, "Creating stream"); EGLDisplay display = screen()->display(); - EGLOutputLayerEXT layer = EGL_NO_OUTPUT_LAYER_EXT; - EGLint count; + EGLint streamAttribs[3]; + int streamAttribCount = 0; + int fifoLength = qEnvironmentVariableIntValue("QT_QPA_EGLFS_STREAM_FIFO_LENGTH"); + if (fifoLength > 0) { + streamAttribs[streamAttribCount++] = EGL_STREAM_FIFO_LENGTH_KHR; + streamAttribs[streamAttribCount++] = fifoLength; + } + streamAttribs[streamAttribCount++] = EGL_NONE; - m_egl_stream = m_integration->m_funcs->create_stream(display, Q_NULLPTR); + m_egl_stream = m_integration->m_funcs->create_stream(display, streamAttribs); if (m_egl_stream == EGL_NO_STREAM_KHR) { qWarning("resetSurface: Couldn't create EGLStream for native window"); return; @@ -140,6 +146,16 @@ void QEglJetsonTK1Window::resetSurface() qCDebug(qLcEglfsKmsDebug, "Created stream %p on display %p", m_egl_stream, display); + EGLint count; + if (m_integration->m_funcs->query_stream(display, m_egl_stream, EGL_STREAM_FIFO_LENGTH_KHR, &count)) { + if (count > 0) + qCDebug(qLcEglfsKmsDebug, "Using EGLStream FIFO mode with %d frames", count); + else + qCDebug(qLcEglfsKmsDebug, "Using EGLStream mailbox mode"); + } else { + qCDebug(qLcEglfsKmsDebug, "Could not query number of EGLStream FIFO frames"); + } + if (!m_integration->m_funcs->get_output_layers(display, Q_NULLPTR, Q_NULLPTR, 0, &count) || count == 0) { qWarning("No output layers found"); return; @@ -155,19 +171,23 @@ void QEglJetsonTK1Window::resetSurface() return; } - QEglFSKmsScreen *cur_screen = static_cast<QEglFSKmsScreen*>(screen()); + QEglFSKmsEglDeviceScreen *cur_screen = static_cast<QEglFSKmsEglDeviceScreen *>(screen()); Q_ASSERT(cur_screen); - qCDebug(qLcEglfsKmsDebug, "Searching for id: %d", cur_screen->output().crtc_id); + QEglFSKmsOutput &output(cur_screen->output()); + const uint32_t wantedId = !output.wants_plane ? output.crtc_id : output.plane_id; + qCDebug(qLcEglfsKmsDebug, "Searching for id: %d", wantedId); + EGLOutputLayerEXT layer = EGL_NO_OUTPUT_LAYER_EXT; for (int i = 0; i < actualCount; ++i) { EGLAttrib id; if (m_integration->m_funcs->query_output_layer_attrib(display, layers[i], EGL_DRM_CRTC_EXT, &id)) { qCDebug(qLcEglfsKmsDebug, " [%d] layer %p - crtc %d", i, layers[i], (int) id); - if (id == EGLAttrib(cur_screen->output().crtc_id)) + if (id == EGLAttrib(wantedId)) layer = layers[i]; } else if (m_integration->m_funcs->query_output_layer_attrib(display, layers[i], EGL_DRM_PLANE_EXT, &id)) { - // Not used yet, just for debugging. qCDebug(qLcEglfsKmsDebug, " [%d] layer %p - plane %d", i, layers[i], (int) id); + if (id == EGLAttrib(wantedId)) + layer = layers[i]; } else { qCDebug(qLcEglfsKmsDebug, " [%d] layer %p - unknown", i, layers[i]); } @@ -176,8 +196,10 @@ void QEglJetsonTK1Window::resetSurface() QByteArray reqLayerIndex = qgetenv("QT_QPA_EGLFS_LAYER_INDEX"); if (!reqLayerIndex.isEmpty()) { int idx = reqLayerIndex.toInt(); - if (idx >= 0 && idx < layers.count()) + if (idx >= 0 && idx < layers.count()) { + qCDebug(qLcEglfsKmsDebug, "EGLOutput layer index override = %d", idx); layer = layers[idx]; + } } if (layer == EGL_NO_OUTPUT_LAYER_EXT) { diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp index 1f672afeb4..3935c99b9e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp @@ -67,13 +67,16 @@ QPlatformCursor *QEglFSKmsEglDeviceScreen::cursor() const void QEglFSKmsEglDeviceScreen::waitForFlip() { - if (!output().mode_set) { - output().mode_set = true; + QEglFSKmsOutput &op(output()); + const int fd = device()->fd(); + const uint32_t w = op.modes[op.mode].hdisplay; + const uint32_t h = op.modes[op.mode].vdisplay; - drmModeCrtcPtr currentMode = drmModeGetCrtc(device()->fd(), output().crtc_id); - const bool alreadySet = currentMode - && currentMode->width == output().modes[output().mode].hdisplay - && currentMode->height == output().modes[output().mode].vdisplay; + if (!op.mode_set) { + op.mode_set = true; + + drmModeCrtcPtr currentMode = drmModeGetCrtc(fd, op.crtc_id); + const bool alreadySet = currentMode && currentMode->width == w && currentMode->height == h; if (currentMode) drmModeFreeCrtc(currentMode); if (alreadySet) { @@ -87,14 +90,26 @@ void QEglFSKmsEglDeviceScreen::waitForFlip() } qCDebug(qLcEglfsKmsDebug, "Setting mode"); - int ret = drmModeSetCrtc(device()->fd(), output().crtc_id, + int ret = drmModeSetCrtc(fd, op.crtc_id, uint32_t(-1), 0, 0, - &output().connector_id, 1, - &output().modes[output().mode]); + &op.connector_id, 1, + &op.modes[op.mode]); if (ret) - qFatal("drmModeSetCrtc failed"); + qErrnoWarning(errno, "drmModeSetCrtc failed"); } + if (!op.plane_set) { + op.plane_set = true; + + if (op.wants_plane) { + qCDebug(qLcEglfsKmsDebug, "Setting plane %u", op.plane_id); + int ret = drmModeSetPlane(fd, op.plane_id, op.crtc_id, uint32_t(-1), 0, + 0, 0, w, h, + 0 << 16, 0 << 16, w << 16, h << 16); + if (ret == -1) + qErrnoWarning(errno, "drmModeSetPlane failed"); + } + } } QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp index f6b58d1ba6..f372b9d156 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.cpp @@ -108,14 +108,10 @@ static const char * const connector_type_names[] = { // must match DRM_MODE_CONN static QByteArray nameForConnector(const drmModeConnectorPtr connector) { - QByteArray connectorName("UNKNOWN"); - + const QByteArray id = QByteArray::number(connector->connector_type_id); if (connector->connector_type < ARRAY_LENGTH(connector_type_names)) - connectorName = connector_type_names[connector->connector_type]; - - connectorName += QByteArray::number(connector->connector_type_id); - - return connectorName; + return connector_type_names[connector->connector_type] + id; + return "UNKNOWN" + id; } static bool parseModeline(const QByteArray &text, drmModeModeInfoPtr mode) @@ -329,9 +325,32 @@ QEglFSKmsScreen *QEglFSKmsDevice::createScreenForConnector(drmModeResPtr resourc drmModeGetCrtc(m_dri_fd, crtc_id), modes, connector->subpixel, - connectorProperty(connector, QByteArrayLiteral("DPMS")) + connectorProperty(connector, QByteArrayLiteral("DPMS")), + false, + 0, + false }; + bool ok; + int idx = qEnvironmentVariableIntValue("QT_QPA_EGLFS_KMS_PLANE_INDEX", &ok); + if (ok) { + drmModePlaneRes *planeResources = drmModeGetPlaneResources(m_dri_fd); + if (planeResources) { + if (idx >= 0 && idx < int(planeResources->count_planes)) { + drmModePlane *plane = drmModeGetPlane(m_dri_fd, planeResources->planes[idx]); + if (plane) { + output.wants_plane = true; + output.plane_id = plane->plane_id; + qCDebug(qLcEglfsKmsDebug, "Forcing plane index %d, plane id %u (belongs to crtc id %u)", + idx, plane->plane_id, plane->crtc_id); + drmModeFreePlane(plane); + } + } else { + qWarning("Invalid plane index %d, must be between 0 and %u", idx, planeResources->count_planes - 1); + } + } + } + m_crtc_allocator |= (1 << output.crtc_id); m_connector_allocator |= (1 << output.connector_id); @@ -399,7 +418,20 @@ void QEglFSKmsDevice::createScreens() QVector<OrderedScreen> screens; + int wantedConnectorIndex = -1; + bool ok; + int idx = qEnvironmentVariableIntValue("QT_QPA_EGLFS_KMS_CONNECTOR_INDEX", &ok); + if (ok) { + if (idx >= 0 && idx < resources->count_connectors) + wantedConnectorIndex = idx; + else + qWarning("Invalid connector index %d, must be between 0 and %u", idx, resources->count_connectors - 1); + } + for (int i = 0; i < resources->count_connectors; i++) { + if (wantedConnectorIndex >= 0 && i != wantedConnectorIndex) + continue; + drmModeConnectorPtr connector = drmModeGetConnector(m_dri_fd, resources->connectors[i]); if (!connector) continue; diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h index 2b6a0ffe6c..fa331f0931 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h @@ -67,6 +67,9 @@ struct QEglFSKmsOutput QList<drmModeModeInfo> modes; int subpixel; drmModePropertyPtr dpms_prop; + bool wants_plane; + uint32_t plane_id; + bool plane_set; }; class Q_EGLFS_EXPORT QEglFSKmsScreen : public QEglFSScreen diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp index f9924fe5ce..0a547b832f 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp @@ -55,7 +55,7 @@ public: EventReader(QEglFSX11Integration *integration) : m_integration(integration) { } - void run(); + void run() override; private: QEglFSX11Integration *m_integration; diff --git a/src/plugins/platforms/qnx/main.h b/src/plugins/platforms/qnx/main.h index 8d99d2432e..5d5bf95686 100644 --- a/src/plugins/platforms/qnx/main.h +++ b/src/plugins/platforms/qnx/main.h @@ -46,7 +46,7 @@ class QQnxIntegrationPlugin : public QPlatformIntegrationPlugin Q_OBJECT Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "qnx.json") public: - QPlatformIntegration *create(const QString&, const QStringList&); + QPlatformIntegration *create(const QString&, const QStringList&) override; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/qnx/qqnxclipboard.cpp b/src/plugins/platforms/qnx/qqnxclipboard.cpp index 0d2cc45c30..78174549b1 100644 --- a/src/plugins/platforms/qnx/qqnxclipboard.cpp +++ b/src/plugins/platforms/qnx/qqnxclipboard.cpp @@ -103,14 +103,14 @@ public: qClipboardDebug() << "formats=" << m_formatsToCheck; } - bool hasFormat(const QString &mimetype) const + bool hasFormat(const QString &mimetype) const override { const bool result = is_clipboard_format_present(mimetype.toUtf8().constData()) == 0; qClipboardDebug() << "mimetype=" << mimetype << "result=" << result; return result; } - QStringList formats() const + QStringList formats() const override { QStringList result; @@ -141,7 +141,7 @@ public: } protected: - QVariant retrieveData(const QString &mimetype, QVariant::Type preferredType) const + QVariant retrieveData(const QString &mimetype, QVariant::Type preferredType) const override { qClipboardDebug() << "mimetype=" << mimetype << "preferredType=" << preferredType; if (is_clipboard_format_present(mimetype.toUtf8().constData()) != 0) diff --git a/src/plugins/platforms/qnx/qqnxclipboard.h b/src/plugins/platforms/qnx/qqnxclipboard.h index 5113742087..b9466214f8 100644 --- a/src/plugins/platforms/qnx/qqnxclipboard.h +++ b/src/plugins/platforms/qnx/qqnxclipboard.h @@ -52,8 +52,8 @@ class QQnxClipboard : public QPlatformClipboard public: QQnxClipboard(); ~QQnxClipboard(); - QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard); - void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard); + QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override; + void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) override; private: class MimeData; diff --git a/src/plugins/platforms/qnx/qqnxcursor.h b/src/plugins/platforms/qnx/qqnxcursor.h index 5c0d582107..9559bfb4ce 100644 --- a/src/plugins/platforms/qnx/qqnxcursor.h +++ b/src/plugins/platforms/qnx/qqnxcursor.h @@ -50,11 +50,11 @@ public: QQnxCursor(); #if !defined(QT_NO_CURSOR) - void changeCursor(QCursor *windowCursor, QWindow *window); + void changeCursor(QCursor *windowCursor, QWindow *window) override; #endif - void setPos(const QPoint &pos); + void setPos(const QPoint &pos) override; - QPoint pos() const; + QPoint pos() const override; private: QPoint m_pos; diff --git a/src/plugins/platforms/qnx/qqnxeglwindow.h b/src/plugins/platforms/qnx/qqnxeglwindow.h index 943ae44bd9..183be11ddc 100644 --- a/src/plugins/platforms/qnx/qqnxeglwindow.h +++ b/src/plugins/platforms/qnx/qqnxeglwindow.h @@ -61,11 +61,11 @@ public: void setPlatformOpenGLContext(QQnxGLContext *platformOpenGLContext); QQnxGLContext *platformOpenGLContext() const { return m_platformOpenGLContext; } - void setGeometry(const QRect &rect); + void setGeometry(const QRect &rect) override; protected: - int pixelFormat() const; - void resetBuffers(); + int pixelFormat() const override; + void resetBuffers() override; private: QSize m_requestedBufferSize; diff --git a/src/plugins/platforms/qnx/qqnxglcontext.h b/src/plugins/platforms/qnx/qqnxglcontext.h index 74cd3b4c48..6e5408e8bf 100644 --- a/src/plugins/platforms/qnx/qqnxglcontext.h +++ b/src/plugins/platforms/qnx/qqnxglcontext.h @@ -64,13 +64,13 @@ public: void requestSurfaceChange(); - bool makeCurrent(QPlatformSurface *surface); - void doneCurrent(); - void swapBuffers(QPlatformSurface *surface); - QFunctionPointer getProcAddress(const char *procName); + bool makeCurrent(QPlatformSurface *surface) override; + void doneCurrent() override; + void swapBuffers(QPlatformSurface *surface) override; + QFunctionPointer getProcAddress(const char *procName) override; - virtual QSurfaceFormat format() const { return m_windowFormat; } - bool isSharing() const; + virtual QSurfaceFormat format() const override { return m_windowFormat; } + bool isSharing() const override; static EGLDisplay getEglDisplay(); EGLConfig getEglConfig() const { return m_eglConfig;} diff --git a/src/plugins/platforms/qnx/qqnxinputcontext_imf.h b/src/plugins/platforms/qnx/qqnxinputcontext_imf.h index c4c2057059..e758ae5bf3 100644 --- a/src/plugins/platforms/qnx/qqnxinputcontext_imf.h +++ b/src/plugins/platforms/qnx/qqnxinputcontext_imf.h @@ -71,22 +71,22 @@ public: Reverted, }; - bool isValid() const; + bool isValid() const override; - bool filterEvent(const QEvent *event); - QRectF keyboardRect() const; - void reset(); - void commit(); - void update(Qt::InputMethodQueries); - bool handleKeyboardEvent(int flags, int sym, int mod, int scan, int cap, int sequenceId); + bool filterEvent(const QEvent *event) override; + QRectF keyboardRect() const override; + void reset() override; + void commit() override; + void update(Qt::InputMethodQueries) override; + bool handleKeyboardEvent(int flags, int sym, int mod, int scan, int cap, int sequenceId) override; - void showInputPanel(); - void hideInputPanel(); - bool isInputPanelVisible() const; + void showInputPanel() override; + void hideInputPanel() override; + bool isInputPanelVisible() const override; - QLocale locale() const; - void setFocusObject(QObject *object); + QLocale locale() const override; + void setFocusObject(QObject *object) override; static void setHighlightColor(int index, const QColor &color); diff --git a/src/plugins/platforms/qnx/qqnxinputcontext_noimf.h b/src/plugins/platforms/qnx/qqnxinputcontext_noimf.h index aab8dabedf..8d6104af80 100644 --- a/src/plugins/platforms/qnx/qqnxinputcontext_noimf.h +++ b/src/plugins/platforms/qnx/qqnxinputcontext_noimf.h @@ -56,19 +56,19 @@ public: explicit QQnxInputContext(QQnxIntegration *integration, QQnxAbstractVirtualKeyboard &keyboard); ~QQnxInputContext(); - bool isValid() const; + bool isValid() const override; - void reset(); - bool filterEvent( const QEvent *event ); - QRectF keyboardRect() const; + void reset() override; + bool filterEvent(const QEvent *event) override; + QRectF keyboardRect() const override; bool handleKeyboardEvent(int flags, int sym, int mod, int scan, int cap); - void showInputPanel(); - void hideInputPanel(); - bool isInputPanelVisible() const; + void showInputPanel() override; + void hideInputPanel() override; + bool isInputPanelVisible() const override; - QLocale locale() const; - void setFocusObject(QObject *object); + QLocale locale() const override; + void setFocusObject(QObject *object) override; private Q_SLOTS: void keyboardHeightChanged(); diff --git a/src/plugins/platforms/qnx/qqnxintegration.h b/src/plugins/platforms/qnx/qqnxintegration.h index f543b0d102..6f2af82100 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.h +++ b/src/plugins/platforms/qnx/qqnxintegration.h @@ -89,38 +89,38 @@ public: explicit QQnxIntegration(const QStringList ¶mList); ~QQnxIntegration(); - bool hasCapability(QPlatformIntegration::Capability cap) const; + bool hasCapability(QPlatformIntegration::Capability cap) const override; - QPlatformWindow *createPlatformWindow(QWindow *window) const; - QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; + QPlatformWindow *createPlatformWindow(QWindow *window) const override; + QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; #if !defined(QT_NO_OPENGL) - QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const; + QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override; #endif #if defined(QQNX_PPS) - QPlatformInputContext *inputContext() const; + QPlatformInputContext *inputContext() const override; #endif void moveToScreen(QWindow *window, int screen); bool supportsNavigatorEvents() const; - QAbstractEventDispatcher *createEventDispatcher() const; + QAbstractEventDispatcher *createEventDispatcher() const override; - QPlatformFontDatabase *fontDatabase() const { return m_fontDatabase; } + QPlatformFontDatabase *fontDatabase() const override { return m_fontDatabase; } - QPlatformNativeInterface *nativeInterface() const; + QPlatformNativeInterface *nativeInterface() const override; #if !defined(QT_NO_CLIPBOARD) - QPlatformClipboard *clipboard() const; + QPlatformClipboard *clipboard() const override; #endif #if !defined(QT_NO_DRAGANDDROP) - QPlatformDrag *drag() const; + QPlatformDrag *drag() const override; #endif - QVariant styleHint(StyleHint hint) const; + QVariant styleHint(StyleHint hint) const override; - QPlatformServices *services() const; + QPlatformServices *services() const override; static QWindow *window(screen_window_t qnxWindow); diff --git a/src/plugins/platforms/qnx/qqnxnativeinterface.h b/src/plugins/platforms/qnx/qqnxnativeinterface.h index 26e34b9d54..25f1c29b02 100644 --- a/src/plugins/platforms/qnx/qqnxnativeinterface.h +++ b/src/plugins/platforms/qnx/qqnxnativeinterface.h @@ -50,16 +50,16 @@ class QQnxNativeInterface : public QPlatformNativeInterface { public: QQnxNativeInterface(QQnxIntegration *integration); - void *nativeResourceForWindow(const QByteArray &resource, QWindow *window); - void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen); - void *nativeResourceForIntegration(const QByteArray &resource); + void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) override; + void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen) override; + void *nativeResourceForIntegration(const QByteArray &resource) override; #if !defined(QT_NO_OPENGL) - void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context); + void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) override; #endif - void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value); - NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource); + void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value) override; + NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) override; private: QQnxIntegration *m_integration; diff --git a/src/plugins/platforms/qnx/qqnxnavigatorpps.h b/src/plugins/platforms/qnx/qqnxnavigatorpps.h index 08315f166f..3c818f51a6 100644 --- a/src/plugins/platforms/qnx/qqnxnavigatorpps.h +++ b/src/plugins/platforms/qnx/qqnxnavigatorpps.h @@ -54,7 +54,7 @@ public: ~QQnxNavigatorPps(); protected: - bool requestInvokeUrl(const QByteArray &encodedUrl); + bool requestInvokeUrl(const QByteArray &encodedUrl) override; private: bool openPpsConnection(); diff --git a/src/plugins/platforms/qnx/qqnxrasterbackingstore.h b/src/plugins/platforms/qnx/qqnxrasterbackingstore.h index e4ac8f02b1..96ac193dda 100644 --- a/src/plugins/platforms/qnx/qqnxrasterbackingstore.h +++ b/src/plugins/platforms/qnx/qqnxrasterbackingstore.h @@ -54,12 +54,12 @@ public: QQnxRasterBackingStore(QWindow *window); ~QQnxRasterBackingStore(); - QPaintDevice *paintDevice(); - void flush(QWindow *window, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size, const QRegion &staticContents); - bool scroll(const QRegion &area, int dx, int dy); - void beginPaint(const QRegion ®ion); - void endPaint(); + QPaintDevice *paintDevice() override; + void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override; + void resize(const QSize &size, const QRegion &staticContents) override; + bool scroll(const QRegion &area, int dx, int dy) override; + void beginPaint(const QRegion ®ion) override; + void endPaint() override; private: QQnxRasterWindow *platformWindow() const; diff --git a/src/plugins/platforms/qnx/qqnxrasterwindow.h b/src/plugins/platforms/qnx/qqnxrasterwindow.h index 53ab29e443..99396efd57 100644 --- a/src/plugins/platforms/qnx/qqnxrasterwindow.h +++ b/src/plugins/platforms/qnx/qqnxrasterwindow.h @@ -58,13 +58,13 @@ public: bool hasBuffers() const { return !bufferSize().isEmpty(); } - void setParent(const QPlatformWindow *window); + void setParent(const QPlatformWindow *window) override; void adjustBufferSize(); protected: - int pixelFormat() const; - void resetBuffers(); + int pixelFormat() const override; + void resetBuffers() override; // Copies content from the previous buffer (back buffer) to the current buffer (front buffer) void blitPreviousToCurrent(const QRegion ®ion, int dx, int dy, bool flush=false); diff --git a/src/plugins/platforms/qnx/qqnxscreen.h b/src/plugins/platforms/qnx/qqnxscreen.h index b7264d0973..8a498434aa 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.h +++ b/src/plugins/platforms/qnx/qqnxscreen.h @@ -71,26 +71,26 @@ public: QQnxScreen(screen_context_t context, screen_display_t display, bool primaryScreen); ~QQnxScreen(); - QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + QPixmap grabWindow(WId window, int x, int y, int width, int height) const override; - QRect geometry() const { return m_currentGeometry; } - QRect availableGeometry() const; - int depth() const; - QImage::Format format() const { return (depth() == 32) ? QImage::Format_RGB32 : QImage::Format_RGB16; } - QSizeF physicalSize() const { return m_currentPhysicalSize; } + QRect geometry() const override { return m_currentGeometry; } + QRect availableGeometry() const override; + int depth() const override; + QImage::Format format() const override { return (depth() == 32) ? QImage::Format_RGB32 : QImage::Format_RGB16; } + QSizeF physicalSize() const override { return m_currentPhysicalSize; } - qreal refreshRate() const; + qreal refreshRate() const override; - Qt::ScreenOrientation nativeOrientation() const; - Qt::ScreenOrientation orientation() const; + Qt::ScreenOrientation nativeOrientation() const override; + Qt::ScreenOrientation orientation() const override; - QWindow *topLevelAt(const QPoint &point) const; + QWindow *topLevelAt(const QPoint &point) const override; bool isPrimaryScreen() const { return m_primaryScreen; } int rotation() const { return m_currentRotation; } - QString name() const { return m_name; } + QString name() const override { return m_name; } int nativeFormat() const { return (depth() == 32) ? SCREEN_FORMAT_RGBA8888 : SCREEN_FORMAT_RGB565; } screen_display_t nativeDisplay() const { return m_display; } @@ -111,7 +111,7 @@ public: QQnxWindow *rootWindow() const; void setRootWindow(QQnxWindow*); - QPlatformCursor *cursor() const; + QPlatformCursor *cursor() const override; Q_SIGNALS: void foreignWindowCreated(void *window); diff --git a/src/plugins/platforms/qnx/qqnxscreeneventhandler.h b/src/plugins/platforms/qnx/qqnxscreeneventhandler.h index 6b234e8d8f..80798a8a2d 100644 --- a/src/plugins/platforms/qnx/qqnxscreeneventhandler.h +++ b/src/plugins/platforms/qnx/qqnxscreeneventhandler.h @@ -75,7 +75,7 @@ Q_SIGNALS: void windowClosed(void *window); protected: - void timerEvent(QTimerEvent *event); + void timerEvent(QTimerEvent *event) override; #if defined(QQNX_SCREENEVENTTHREAD) private Q_SLOTS: diff --git a/src/plugins/platforms/qnx/qqnxscreeneventthread.h b/src/plugins/platforms/qnx/qqnxscreeneventthread.h index b672fcf991..140f53aa50 100644 --- a/src/plugins/platforms/qnx/qqnxscreeneventthread.h +++ b/src/plugins/platforms/qnx/qqnxscreeneventthread.h @@ -65,7 +65,7 @@ public: void unlock(); protected: - void run(); + void run() override; Q_SIGNALS: void eventPending(); diff --git a/src/plugins/platforms/qnx/qqnxservices.h b/src/plugins/platforms/qnx/qqnxservices.h index 94dd5dc0b4..cbf029fdb9 100644 --- a/src/plugins/platforms/qnx/qqnxservices.h +++ b/src/plugins/platforms/qnx/qqnxservices.h @@ -52,8 +52,8 @@ public: explicit QQnxServices(QQnxAbstractNavigator *navigator); ~QQnxServices(); - bool openUrl(const QUrl &url); - bool openDocument(const QUrl &url); + bool openUrl(const QUrl &url) override; + bool openDocument(const QUrl &url) override; private: bool navigatorInvoke(const QUrl &url); diff --git a/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.h b/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.h index 8580ee151b..51d55a2036 100644 --- a/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.h +++ b/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.h @@ -56,14 +56,14 @@ public: QQnxVirtualKeyboardPps(); ~QQnxVirtualKeyboardPps(); - bool showKeyboard(); - bool hideKeyboard(); + bool showKeyboard() override; + bool hideKeyboard() override; public Q_SLOTS: void start(); protected: - void applyKeyboardOptions(); + void applyKeyboardOptions() override; private Q_SLOTS: void ppsDataReady(); diff --git a/src/plugins/platforms/qnx/qqnxwindow.h b/src/plugins/platforms/qnx/qqnxwindow.h index 2e636c7e3e..e248e04462 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.h +++ b/src/plugins/platforms/qnx/qqnxwindow.h @@ -67,13 +67,13 @@ public: QQnxWindow(QWindow *window, screen_context_t context, bool needRootWindow); virtual ~QQnxWindow(); - void setGeometry(const QRect &rect); - void setVisible(bool visible); - void setOpacity(qreal level); + void setGeometry(const QRect &rect) override; + void setVisible(bool visible) override; + void setOpacity(qreal level) override; - bool isExposed() const; + bool isExposed() const override; - WId winId() const { return window()->type() == Qt::Desktop ? -1 : (WId)m_window; } + WId winId() const override { return window()->type() == Qt::Desktop ? -1 : (WId)m_window; } screen_window_t nativeHandle() const { return m_window; } void setBufferSize(const QSize &size); @@ -81,14 +81,14 @@ public: void setScreen(QQnxScreen *platformScreen); - void setParent(const QPlatformWindow *window); - void raise(); - void lower(); - void requestActivateWindow(); - void setWindowState(Qt::WindowState state); + void setParent(const QPlatformWindow *window) override; + void raise() override; + void lower() override; + void requestActivateWindow() override; + void setWindowState(Qt::WindowState state) override; void setExposed(bool exposed); - void propagateSizeHints(); + void propagateSizeHints() override; void setMMRendererWindowName(const QString &name); void setMMRendererWindow(screen_window_t handle); diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp index 9803dedb1e..85aab84c2c 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp @@ -890,7 +890,7 @@ HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accName(VARIANT varID, BST QString shortcut = accessible->text(QAccessible::Accelerator); if (!shortcut.isEmpty()) - name.append(QLatin1Char(' ') + shortcut); + name += QLatin1Char(' ') + shortcut; if (name.size()) { *pszName = QStringToBSTR(name); diff --git a/src/plugins/platforms/winrt/main.cpp b/src/plugins/platforms/winrt/main.cpp index a0b31e0e25..5d0d9e94eb 100644 --- a/src/plugins/platforms/winrt/main.cpp +++ b/src/plugins/platforms/winrt/main.cpp @@ -50,7 +50,7 @@ class QWinRTIntegrationPlugin : public QPlatformIntegrationPlugin public: QStringList keys() const; - QPlatformIntegration *create(const QString&, const QStringList&); + QPlatformIntegration *create(const QString&, const QStringList&) override; }; QStringList QWinRTIntegrationPlugin::keys() const diff --git a/src/plugins/platforms/winrt/qwinrtbackingstore.h b/src/plugins/platforms/winrt/qwinrtbackingstore.h index 41b27debcc..cd05faa63e 100644 --- a/src/plugins/platforms/winrt/qwinrtbackingstore.h +++ b/src/plugins/platforms/winrt/qwinrtbackingstore.h @@ -58,12 +58,12 @@ class QWinRTBackingStore : public QPlatformBackingStore public: explicit QWinRTBackingStore(QWindow *window); ~QWinRTBackingStore(); - QPaintDevice *paintDevice(); - void beginPaint(const QRegion &); - void endPaint(); - void flush(QWindow *window, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size, const QRegion &staticContents); - QImage toImage() const Q_DECL_OVERRIDE; + QPaintDevice *paintDevice() override; + void beginPaint(const QRegion &) override; + void endPaint() override; + void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override; + void resize(const QSize &size, const QRegion &staticContents) override; + QImage toImage() const override; private: bool initialize(); diff --git a/src/plugins/platforms/winrt/qwinrtclipboard.h b/src/plugins/platforms/winrt/qwinrtclipboard.h index 3e6ee109fd..2e3e2b834d 100644 --- a/src/plugins/platforms/winrt/qwinrtclipboard.h +++ b/src/plugins/platforms/winrt/qwinrtclipboard.h @@ -64,9 +64,9 @@ class QWinRTClipboard: public QPlatformClipboard public: QWinRTClipboard(); - QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE; - void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE; - bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE; + QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override; + void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) override; + bool supportsMode(QClipboard::Mode mode) const override; HRESULT onContentChanged(IInspectable *, IInspectable *); private: diff --git a/src/plugins/platforms/winrt/qwinrtcursor.h b/src/plugins/platforms/winrt/qwinrtcursor.h index baf902c7af..7f579f1531 100644 --- a/src/plugins/platforms/winrt/qwinrtcursor.h +++ b/src/plugins/platforms/winrt/qwinrtcursor.h @@ -51,9 +51,9 @@ public: explicit QWinRTCursor(); ~QWinRTCursor(); #ifndef QT_NO_CURSOR - void changeCursor(QCursor * windowCursor, QWindow *window); + void changeCursor(QCursor * windowCursor, QWindow *window) override; #endif - QPoint pos() const; + QPoint pos() const override; private: QScopedPointer<QWinRTCursorPrivate> d_ptr; diff --git a/src/plugins/platforms/winrt/qwinrtdrag.h b/src/plugins/platforms/winrt/qwinrtdrag.h index 97079d831b..dad3e9892d 100644 --- a/src/plugins/platforms/winrt/qwinrtdrag.h +++ b/src/plugins/platforms/winrt/qwinrtdrag.h @@ -75,9 +75,9 @@ public: QWinRTInternalMimeData(); virtual ~QWinRTInternalMimeData(); - bool hasFormat_sys(const QString &mimetype) const Q_DECL_OVERRIDE; - QStringList formats_sys() const Q_DECL_OVERRIDE; - QVariant retrieveData_sys(const QString &mimetype, QVariant::Type preferredType) const Q_DECL_OVERRIDE; + bool hasFormat_sys(const QString &mimetype) const override; + QStringList formats_sys() const override; + QVariant retrieveData_sys(const QString &mimetype, QVariant::Type preferredType) const override; void setDataView(const Microsoft::WRL::ComPtr<ABI::Windows::ApplicationModel::DataTransfer::IDataPackageView> &d); private: @@ -91,8 +91,8 @@ public: virtual ~QWinRTDrag(); static QWinRTDrag *instance(); - QMimeData *platformDropData(void) Q_DECL_OVERRIDE; - Qt::DropAction drag(QDrag *) Q_DECL_OVERRIDE; + QMimeData *platformDropData(void) override; + Qt::DropAction drag(QDrag *) override; void setDropTarget(QWindow *target); diff --git a/src/plugins/platforms/winrt/qwinrteglcontext.h b/src/plugins/platforms/winrt/qwinrteglcontext.h index 12b6238cb1..5c75aa90d0 100644 --- a/src/plugins/platforms/winrt/qwinrteglcontext.h +++ b/src/plugins/platforms/winrt/qwinrteglcontext.h @@ -52,14 +52,14 @@ public: explicit QWinRTEGLContext(QOpenGLContext *context); ~QWinRTEGLContext(); - void initialize() Q_DECL_OVERRIDE; + void initialize() override; - bool makeCurrent(QPlatformSurface *windowSurface) Q_DECL_OVERRIDE; - void doneCurrent() Q_DECL_OVERRIDE; - void swapBuffers(QPlatformSurface *windowSurface) Q_DECL_OVERRIDE; + bool makeCurrent(QPlatformSurface *windowSurface) override; + void doneCurrent() override; + void swapBuffers(QPlatformSurface *windowSurface) override; - QSurfaceFormat format() const Q_DECL_OVERRIDE; - QFunctionPointer getProcAddress(const char *procName) Q_DECL_OVERRIDE; + QSurfaceFormat format() const override; + QFunctionPointer getProcAddress(const char *procName) override; static EGLDisplay display(); private: diff --git a/src/plugins/platforms/winrt/qwinrteventdispatcher.h b/src/plugins/platforms/winrt/qwinrteventdispatcher.h index c04e9fca12..4c5c19c6b0 100644 --- a/src/plugins/platforms/winrt/qwinrteventdispatcher.h +++ b/src/plugins/platforms/winrt/qwinrteventdispatcher.h @@ -51,8 +51,8 @@ public: explicit QWinRTEventDispatcher(QObject *parent = 0); protected: - bool hasPendingEvents(); - bool sendPostedEvents(QEventLoop::ProcessEventsFlags flags); + bool hasPendingEvents() override; + bool sendPostedEvents(QEventLoop::ProcessEventsFlags flags) override; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h index f88bed76ae..413dee7459 100644 --- a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h +++ b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h @@ -72,21 +72,21 @@ public: explicit QWinRTFileDialogHelper(); ~QWinRTFileDialogHelper(); - void exec() Q_DECL_OVERRIDE; - bool show(Qt::WindowFlags, Qt::WindowModality, QWindow *) Q_DECL_OVERRIDE; - void hide() Q_DECL_OVERRIDE; + void exec() override; + bool show(Qt::WindowFlags, Qt::WindowModality, QWindow *) override; + void hide() override; #ifdef Q_OS_WINPHONE - bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE; + bool eventFilter(QObject *o, QEvent *e) override; #endif - bool defaultNameFilterDisables() const Q_DECL_OVERRIDE { return false; } - void setDirectory(const QUrl &directory) Q_DECL_OVERRIDE; - QUrl directory() const Q_DECL_OVERRIDE; - void selectFile(const QUrl &saveFileName); - QList<QUrl> selectedFiles() const Q_DECL_OVERRIDE; - void setFilter() Q_DECL_OVERRIDE { } - void selectNameFilter(const QString &selectedNameFilter) Q_DECL_OVERRIDE; - QString selectedNameFilter() const; + bool defaultNameFilterDisables() const override { return false; } + void setDirectory(const QUrl &directory) override; + QUrl directory() const override; + void selectFile(const QUrl &saveFileName) override; + QList<QUrl> selectedFiles() const override; + void setFilter() override { } + void selectNameFilter(const QString &selectedNameFilter) override; + QString selectedNameFilter() const override; #ifndef Q_OS_WINPHONE HRESULT onSingleFilePicked(ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Storage::StorageFile *> *, diff --git a/src/plugins/platforms/winrt/qwinrtfileengine.h b/src/plugins/platforms/winrt/qwinrtfileengine.h index 70d5aea30d..73ff54b0c8 100644 --- a/src/plugins/platforms/winrt/qwinrtfileengine.h +++ b/src/plugins/platforms/winrt/qwinrtfileengine.h @@ -58,7 +58,7 @@ class QWinRTFileEngineHandler : public QAbstractFileEngineHandler public: QWinRTFileEngineHandler(); ~QWinRTFileEngineHandler(); - QAbstractFileEngine *create(const QString &fileName) const Q_DECL_OVERRIDE; + QAbstractFileEngine *create(const QString &fileName) const override; static void registerFile(const QString &fileName, ABI::Windows::Storage::IStorageItem *file); static ABI::Windows::Storage::IStorageItem *registeredFile(const QString &fileName); @@ -75,23 +75,23 @@ public: QWinRTFileEngine(const QString &fileName, ABI::Windows::Storage::IStorageItem *file); ~QWinRTFileEngine(); - bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE; - bool close() Q_DECL_OVERRIDE; - bool flush() Q_DECL_OVERRIDE; - qint64 size() const Q_DECL_OVERRIDE; - qint64 pos() const Q_DECL_OVERRIDE; - bool seek(qint64 pos) Q_DECL_OVERRIDE; - bool remove() Q_DECL_OVERRIDE; - bool copy(const QString &newName) Q_DECL_OVERRIDE; - bool rename(const QString &newName) Q_DECL_OVERRIDE; - bool renameOverwrite(const QString &newName) Q_DECL_OVERRIDE; - FileFlags fileFlags(FileFlags type=FileInfoAll) const Q_DECL_OVERRIDE; - bool setPermissions(uint perms) Q_DECL_OVERRIDE; - QString fileName(FileName type=DefaultName) const Q_DECL_OVERRIDE; - QDateTime fileTime(FileTime type) const Q_DECL_OVERRIDE; + bool open(QIODevice::OpenMode openMode) override; + bool close() override; + bool flush() override; + qint64 size() const override; + qint64 pos() const override; + bool seek(qint64 pos) override; + bool remove() override; + bool copy(const QString &newName) override; + bool rename(const QString &newName) override; + bool renameOverwrite(const QString &newName) override; + FileFlags fileFlags(FileFlags type=FileInfoAll) const override; + bool setPermissions(uint perms) override; + QString fileName(FileName type=DefaultName) const override; + QDateTime fileTime(FileTime type) const override; - qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE; - qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE; + qint64 read(char *data, qint64 maxlen) override; + qint64 write(const char *data, qint64 len) override; private: QScopedPointer<QWinRTFileEnginePrivate> d_ptr; diff --git a/src/plugins/platforms/winrt/qwinrtinputcontext.h b/src/plugins/platforms/winrt/qwinrtinputcontext.h index 9d5c4187e2..13a0088ddc 100644 --- a/src/plugins/platforms/winrt/qwinrtinputcontext.h +++ b/src/plugins/platforms/winrt/qwinrtinputcontext.h @@ -70,13 +70,13 @@ class QWinRTInputContext : public QPlatformInputContext public: explicit QWinRTInputContext(QWinRTScreen *); - QRectF keyboardRect() const; + QRectF keyboardRect() const override; - bool isInputPanelVisible() const; + bool isInputPanelVisible() const override; #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) - void showInputPanel(); - void hideInputPanel(); + void showInputPanel() override; + void hideInputPanel() override; #endif private slots: diff --git a/src/plugins/platforms/winrt/qwinrtintegration.h b/src/plugins/platforms/winrt/qwinrtintegration.h index 7b4d5531fc..e22532a266 100644 --- a/src/plugins/platforms/winrt/qwinrtintegration.h +++ b/src/plugins/platforms/winrt/qwinrtintegration.h @@ -85,28 +85,28 @@ public: bool succeeded() const; - bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE; - QVariant styleHint(StyleHint hint) const Q_DECL_OVERRIDE; - - QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE; - QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE; - QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE; - QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE; - void initialize() Q_DECL_OVERRIDE; - QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE; - QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE; - QPlatformServices *services() const Q_DECL_OVERRIDE; - QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE; + bool hasCapability(QPlatformIntegration::Capability cap) const override; + QVariant styleHint(StyleHint hint) const override; + + QPlatformWindow *createPlatformWindow(QWindow *window) const override; + QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; + QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override; + QAbstractEventDispatcher *createEventDispatcher() const override; + void initialize() override; + QPlatformFontDatabase *fontDatabase() const override; + QPlatformInputContext *inputContext() const override; + QPlatformServices *services() const override; + QPlatformClipboard *clipboard() const override; #ifndef QT_NO_DRAGANDDROP - QPlatformDrag *drag() const Q_DECL_OVERRIDE; + QPlatformDrag *drag() const override; #endif - Qt::KeyboardModifiers queryKeyboardModifiers() const Q_DECL_OVERRIDE; + Qt::KeyboardModifiers queryKeyboardModifiers() const override; - QStringList themeNames() const Q_DECL_OVERRIDE; - QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE; + QStringList themeNames() const override; + QPlatformTheme *createPlatformTheme(const QString &name) const override; - QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE; + QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const override; private: #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) HRESULT onBackButtonPressed(IInspectable *, ABI::Windows::Phone::UI::Input::IBackPressedEventArgs *args); diff --git a/src/plugins/platforms/winrt/qwinrtmessagedialoghelper.h b/src/plugins/platforms/winrt/qwinrtmessagedialoghelper.h index 439e8f592f..14b6d4b715 100644 --- a/src/plugins/platforms/winrt/qwinrtmessagedialoghelper.h +++ b/src/plugins/platforms/winrt/qwinrtmessagedialoghelper.h @@ -69,11 +69,11 @@ public: explicit QWinRTMessageDialogHelper(const QWinRTTheme *theme); ~QWinRTMessageDialogHelper(); - void exec(); + void exec() override; bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, - QWindow *parent); - void hide(); + QWindow *parent) override; + void hide() override; private: HRESULT onCompleted(ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::UI::Popups::IUICommand *> *asyncInfo, diff --git a/src/plugins/platforms/winrt/qwinrtscreen.h b/src/plugins/platforms/winrt/qwinrtscreen.h index 04ab985699..7dcdb98ead 100644 --- a/src/plugins/platforms/winrt/qwinrtscreen.h +++ b/src/plugins/platforms/winrt/qwinrtscreen.h @@ -90,19 +90,19 @@ public: explicit QWinRTScreen(); ~QWinRTScreen(); - QRect geometry() const Q_DECL_OVERRIDE; - QRect availableGeometry() const Q_DECL_OVERRIDE; - int depth() const Q_DECL_OVERRIDE; - QImage::Format format() const Q_DECL_OVERRIDE; - QSizeF physicalSize() const Q_DECL_OVERRIDE; - QDpi logicalDpi() const Q_DECL_OVERRIDE; - qreal pixelDensity() const Q_DECL_OVERRIDE; + QRect geometry() const override; + QRect availableGeometry() const override; + int depth() const override; + QImage::Format format() const override; + QSizeF physicalSize() const override; + QDpi logicalDpi() const override; + qreal pixelDensity() const override; qreal scaleFactor() const; - QPlatformCursor *cursor() const Q_DECL_OVERRIDE; + QPlatformCursor *cursor() const override; Qt::KeyboardModifiers keyboardModifiers() const; - Qt::ScreenOrientation nativeOrientation() const Q_DECL_OVERRIDE; - Qt::ScreenOrientation orientation() const Q_DECL_OVERRIDE; + Qt::ScreenOrientation nativeOrientation() const override; + Qt::ScreenOrientation orientation() const override; QWindow *topWindow() const; QWindow *windowAt(const QPoint &pos); diff --git a/src/plugins/platforms/winrt/qwinrtservices.h b/src/plugins/platforms/winrt/qwinrtservices.h index 1adc6c381c..80b9a6c92a 100644 --- a/src/plugins/platforms/winrt/qwinrtservices.h +++ b/src/plugins/platforms/winrt/qwinrtservices.h @@ -52,8 +52,8 @@ public: explicit QWinRTServices(); ~QWinRTServices(); - bool openUrl(const QUrl &url); - bool openDocument(const QUrl &url); + bool openUrl(const QUrl &url) override; + bool openDocument(const QUrl &url) override; private: QScopedPointer<QWinRTServicesPrivate> d_ptr; diff --git a/src/plugins/platforms/winrt/qwinrttheme.h b/src/plugins/platforms/winrt/qwinrttheme.h index bd244f9fdb..cc5fc851e7 100644 --- a/src/plugins/platforms/winrt/qwinrttheme.h +++ b/src/plugins/platforms/winrt/qwinrttheme.h @@ -54,10 +54,10 @@ class QWinRTTheme : public QPlatformTheme public: QWinRTTheme(); - bool usePlatformNativeDialog(DialogType type) const; - QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const; + bool usePlatformNativeDialog(DialogType type) const override; + QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override; - const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE; + const QPalette *palette(Palette type = SystemPalette) const override; static QVariant styleHint(QPlatformIntegration::StyleHint hint); QVariant themeHint(ThemeHint hint) const override; diff --git a/src/plugins/platforms/winrt/qwinrtwindow.h b/src/plugins/platforms/winrt/qwinrtwindow.h index 35a4c493b6..26c2fa800d 100644 --- a/src/plugins/platforms/winrt/qwinrtwindow.h +++ b/src/plugins/platforms/winrt/qwinrtwindow.h @@ -56,19 +56,19 @@ public: QWinRTWindow(QWindow *window); ~QWinRTWindow(); - QSurfaceFormat format() const; - bool isActive() const; - bool isExposed() const; - void setGeometry(const QRect &rect); - void setVisible(bool visible); - void setWindowTitle(const QString &title); - void raise(); - void lower(); + QSurfaceFormat format() const override; + bool isActive() const override; + bool isExposed() const override; + void setGeometry(const QRect &rect) override; + void setVisible(bool visible) override; + void setWindowTitle(const QString &title) override; + void raise() override; + void lower() override; - WId winId() const Q_DECL_OVERRIDE; + WId winId() const override; - qreal devicePixelRatio() const Q_DECL_OVERRIDE; - void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE; + qreal devicePixelRatio() const override; + void setWindowState(Qt::WindowState state) override; bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE; bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE; diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp index 8e1688dbe8..6650ca44ae 100644 --- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp @@ -55,29 +55,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader, (QXcbGlIntegrationFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive)) #endif // !QT_NO_LIBRARY -QStringList QXcbGlIntegrationFactory::keys(const QString &pluginPath) -{ - QStringList list; -#ifndef QT_NO_LIBRARY - if (!pluginPath.isEmpty()) { - QCoreApplication::addLibraryPath(pluginPath); - list = directLoader()->keyMap().values(); - if (!list.isEmpty()) { - const QString postFix = QStringLiteral(" (from ") - + QDir::toNativeSeparators(pluginPath) - + QLatin1Char(')'); - const QStringList::iterator end = list.end(); - for (QStringList::iterator it = list.begin(); it != end; ++it) - (*it).append(postFix); - } - } -#else - Q_UNUSED(pluginPath); -#endif - list.append(loader()->keyMap().values()); - return list; -} - QXcbGlIntegration *QXcbGlIntegrationFactory::create(const QString &platform, const QString &pluginPath) { #ifndef QT_NO_LIBRARY diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h index 633b11a505..c4aa0a3d8d 100644 --- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h +++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h @@ -49,7 +49,6 @@ class QXcbGlIntegration; class QXcbGlIntegrationFactory { public: - static QStringList keys(const QString &pluginPath = QString()); static QXcbGlIntegration *create(const QString &name, const QString &platformPluginPath = QString()); }; diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h index 0cb4a878a1..54a9f5cd83 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h @@ -62,13 +62,13 @@ public: QXcbEglIntegration(); ~QXcbEglIntegration(); - bool initialize(QXcbConnection *connection) Q_DECL_OVERRIDE; + bool initialize(QXcbConnection *connection) override; - QXcbWindow *createWindow(QWindow *window) const Q_DECL_OVERRIDE; - QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE; - QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE; + QXcbWindow *createWindow(QWindow *window) const override; + QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override; + QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const override; - bool supportsThreadedOpenGL() const Q_DECL_OVERRIDE { return true; } + bool supportsThreadedOpenGL() const override { return true; } EGLDisplay eglDisplay() const { return m_egl_display; } void *xlib_display() const; diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h index 6e717e4491..7c83d0e240 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h @@ -55,9 +55,9 @@ public: QXcbEglNativeInterfaceHandler(QXcbNativeInterface *nativeInterface); - QPlatformNativeInterface::NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) const Q_DECL_OVERRIDE; - QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const Q_DECL_OVERRIDE; - QPlatformNativeInterface::NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) const Q_DECL_OVERRIDE; + QPlatformNativeInterface::NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) const override; + QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const override; + QPlatformNativeInterface::NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) const override; private: static void *eglDisplay(); static void *eglDisplayForWindow(QWindow *window); diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h index 48fc6dce70..3090cef735 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h @@ -59,11 +59,11 @@ public: QXcbEglIntegration *glIntegration() const { return m_glIntegration; } protected: - void create() Q_DECL_OVERRIDE; - void resolveFormat(const QSurfaceFormat &format) Q_DECL_OVERRIDE; + void create() override; + void resolveFormat(const QSurfaceFormat &format) override; #ifdef XCB_USE_XLIB - const xcb_visualtype_t *createVisual() Q_DECL_OVERRIDE; + const xcb_visualtype_t *createVisual() override; #endif private: diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h index bf1f1b324b..3dfe0ac618 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h @@ -60,14 +60,14 @@ public: const QVariant &nativeHandle); ~QGLXContext(); - bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE; - void doneCurrent() Q_DECL_OVERRIDE; - void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE; - QFunctionPointer getProcAddress(const char *procName) Q_DECL_OVERRIDE; + bool makeCurrent(QPlatformSurface *surface) override; + void doneCurrent() override; + void swapBuffers(QPlatformSurface *surface) override; + QFunctionPointer getProcAddress(const char *procName) override; - QSurfaceFormat format() const Q_DECL_OVERRIDE; - bool isSharing() const Q_DECL_OVERRIDE; - bool isValid() const Q_DECL_OVERRIDE; + QSurfaceFormat format() const override; + bool isSharing() const override; + bool isValid() const override; GLXContext glxContext() const { return m_context; } GLXFBConfig glxConfig() const { return m_config; } @@ -100,8 +100,8 @@ public: explicit QGLXPbuffer(QOffscreenSurface *offscreenSurface); ~QGLXPbuffer(); - QSurfaceFormat format() const Q_DECL_OVERRIDE { return m_format; } - bool isValid() const Q_DECL_OVERRIDE { return m_pbuffer != 0; } + QSurfaceFormat format() const override { return m_format; } + bool isValid() const override { return m_pbuffer != 0; } GLXPbuffer pbuffer() const { return m_pbuffer; } diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h index 8f04db31b2..26cb233a59 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h @@ -52,15 +52,15 @@ public: QXcbGlxIntegration(); ~QXcbGlxIntegration(); - bool initialize(QXcbConnection *connection) Q_DECL_OVERRIDE; - bool handleXcbEvent(xcb_generic_event_t *event, uint responseType) Q_DECL_OVERRIDE; + bool initialize(QXcbConnection *connection) override; + bool handleXcbEvent(xcb_generic_event_t *event, uint responseType) override; - QXcbWindow *createWindow(QWindow *window) const Q_DECL_OVERRIDE; - QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE; - QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE; + QXcbWindow *createWindow(QWindow *window) const override; + QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override; + QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const override; - virtual bool supportsThreadedOpenGL() const Q_DECL_OVERRIDE; - virtual bool supportsSwitchableWidgetComposition() const Q_DECL_OVERRIDE; + bool supportsThreadedOpenGL() const override; + bool supportsSwitchableWidgetComposition() const override; private: QXcbConnection *m_connection; diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h index 1748f2298c..d877732725 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h @@ -53,7 +53,7 @@ public: }; QXcbGlxNativeInterfaceHandler(QXcbNativeInterface *nativeInterface); - QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const Q_DECL_OVERRIDE; + QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const override; private: static void *glxContextForContext(QOpenGLContext *context); diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h index 9519245130..14b2d5e6eb 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h @@ -52,7 +52,7 @@ public: ~QXcbGlxWindow(); protected: - const xcb_visualtype_t *createVisual() Q_DECL_OVERRIDE; + const xcb_visualtype_t *createVisual() override; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp index 3d09b1c139..f095288221 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp +++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp @@ -122,7 +122,7 @@ public: , m_image(image) { } - bool doLock(AccessTypes access, const QRect &rect) Q_DECL_OVERRIDE + bool doLock(AccessTypes access, const QRect &rect) override { Q_UNUSED(rect); if (access & ~(QPlatformGraphicsBuffer::SWReadAccess | QPlatformGraphicsBuffer::SWWriteAccess)) @@ -131,13 +131,13 @@ public: m_access_lock |= access; return true; } - void doUnlock() Q_DECL_OVERRIDE { m_access_lock = None; } + void doUnlock() override { m_access_lock = None; } - const uchar *data() const Q_DECL_OVERRIDE { return m_image->bits(); } - uchar *data() Q_DECL_OVERRIDE { return m_image->bits(); } - int bytesPerLine() const Q_DECL_OVERRIDE { return m_image->bytesPerLine(); } + const uchar *data() const override { return m_image->bits(); } + uchar *data() override { return m_image->bits(); } + int bytesPerLine() const override { return m_image->bytesPerLine(); } - Origin origin() const Q_DECL_OVERRIDE { return QPlatformGraphicsBuffer::OriginTopLeft; } + Origin origin() const override { return QPlatformGraphicsBuffer::OriginTopLeft; } private: AccessTypes m_access_lock; QImage *m_image; diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.h b/src/plugins/platforms/xcb/qxcbbackingstore.h index 6af679d28a..2985432b7f 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.h +++ b/src/plugins/platforms/xcb/qxcbbackingstore.h @@ -57,22 +57,22 @@ public: QXcbBackingStore(QWindow *widget); ~QXcbBackingStore(); - QPaintDevice *paintDevice() Q_DECL_OVERRIDE; - void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) Q_DECL_OVERRIDE; + QPaintDevice *paintDevice() override; + void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override; #ifndef QT_NO_OPENGL void composeAndFlush(QWindow *window, const QRegion ®ion, const QPoint &offset, QPlatformTextureList *textures, QOpenGLContext *context, - bool translucentBackground) Q_DECL_OVERRIDE; + bool translucentBackground) override; #endif - QImage toImage() const Q_DECL_OVERRIDE; + QImage toImage() const override; - QPlatformGraphicsBuffer *graphicsBuffer() const Q_DECL_OVERRIDE; + QPlatformGraphicsBuffer *graphicsBuffer() const override; - void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE; - bool scroll(const QRegion &area, int dx, int dy) Q_DECL_OVERRIDE; + void resize(const QSize &size, const QRegion &staticContents) override; + bool scroll(const QRegion &area, int dx, int dy) override; - void beginPaint(const QRegion &) Q_DECL_OVERRIDE; - void endPaint() Q_DECL_OVERRIDE; + void beginPaint(const QRegion &) override; + void endPaint() override; private: QXcbShmImage *m_image; diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp index 38e91cc9f6..cee011bbdf 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.cpp +++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp @@ -90,7 +90,7 @@ public: } protected: - QStringList formats_sys() const Q_DECL_OVERRIDE + QStringList formats_sys() const override { if (isEmpty()) return QStringList(); @@ -120,13 +120,13 @@ protected: return formatList; } - bool hasFormat_sys(const QString &format) const Q_DECL_OVERRIDE + bool hasFormat_sys(const QString &format) const override { QStringList list = formats(); return list.contains(format); } - QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const Q_DECL_OVERRIDE + QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const override { if (fmt.isEmpty() || isEmpty()) return QByteArray(); @@ -238,7 +238,7 @@ public: } protected: - void timerEvent(QTimerEvent *ev) Q_DECL_OVERRIDE + void timerEvent(QTimerEvent *ev) override { if (ev->timerId() == abort_timer) { // this can happen when the X client we are sending data diff --git a/src/plugins/platforms/xcb/qxcbclipboard.h b/src/plugins/platforms/xcb/qxcbclipboard.h index ffd565c56f..a0a4f4e5a1 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.h +++ b/src/plugins/platforms/xcb/qxcbclipboard.h @@ -59,11 +59,11 @@ public: QXcbClipboard(QXcbConnection *connection); ~QXcbClipboard(); - QMimeData *mimeData(QClipboard::Mode mode) Q_DECL_OVERRIDE; - void setMimeData(QMimeData *data, QClipboard::Mode mode) Q_DECL_OVERRIDE; + QMimeData *mimeData(QClipboard::Mode mode) override; + void setMimeData(QMimeData *data, QClipboard::Mode mode) override; - bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE; - bool ownsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE; + bool supportsMode(QClipboard::Mode mode) const override; + bool ownsMode(QClipboard::Mode mode) const override; QXcbScreen *screen() const; diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 7bd233f387..9e275efa25 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -1996,8 +1996,7 @@ void QXcbConnection::initializeAllAtoms() { Q_ASSERT(i == QXcbAtom::NPredefinedAtoms); - QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); - settings_atom_name += m_displayName; + const QByteArray settings_atom_name = "_QT_SETTINGS_TIMESTAMP_" + m_displayName; names[i++] = settings_atom_name; xcb_intern_atom_cookie_t cookies[QXcbAtom::NAtoms]; diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index f6ba828a15..60f0f487c5 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -315,7 +315,7 @@ class QXcbEventReader : public QThread public: QXcbEventReader(QXcbConnection *connection); - void run() Q_DECL_OVERRIDE; + void run() override; QXcbEventArray *lock(); void unlock(); @@ -504,6 +504,7 @@ public: #endif #ifdef XCB_USE_XINPUT22 + bool startSystemResizeForTouchBegin(xcb_window_t window, const QPoint &point, Qt::Corner corner); bool xi2SetMouseGrabEnabled(xcb_window_t w, bool grab); #endif Qt::MouseButton xiToQtMouseButton(uint32_t b); @@ -519,7 +520,7 @@ public: #endif protected: - bool event(QEvent *e) Q_DECL_OVERRIDE; + bool event(QEvent *e) override; public slots: void flush() { xcb_flush(m_connection); } @@ -639,6 +640,14 @@ private: QXcbEventReader *m_reader; #if defined(XCB_USE_XINPUT2) QHash<int, XInput2TouchDeviceData*> m_touchDevices; +#ifdef XCB_USE_XINPUT22 + struct StartSystemResizeInfo { + xcb_window_t window; + uint16_t deviceid; + uint32_t pointid; + Qt::Corner corner; + } m_startSystemResizeInfo; +#endif #endif #ifdef Q_XCB_DEBUG struct CallInfo { diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp index 93f8db92bf..0ace79a4f5 100644 --- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp @@ -61,9 +61,9 @@ struct XInput2TouchDeviceData { XIDeviceInfo *xiDeviceInfo; QTouchDevice *qtTouchDevice; QHash<int, QWindowSystemInterface::TouchPoint> touchPoints; + QHash<int, QPointF> pointPressedPosition; // in screen coordinates where each point was pressed // Stuff that is relevant only for touchpads - QHash<int, QPointF> pointPressedPosition; // in screen coordinates where each point was pressed QPointF firstPressedPosition; // in screen coordinates where the first point was pressed QPointF firstPressedNormalPosition; // device coordinates (0 to 1, 0 to 1) where the first point was pressed QSizeF size; // device size in mm @@ -93,6 +93,7 @@ void QXcbConnection::initializeXInput2() if (m_xi2Enabled) { #ifdef XCB_USE_XINPUT22 qCDebug(lcQpaXInputDevices, "XInput version %d.%d is available and Qt supports 2.2 or greater", xiMajor, m_xi2Minor); + m_startSystemResizeInfo.window = XCB_NONE; #else qCDebug(lcQpaXInputDevices, "XInput version %d.%d is available and Qt supports 2.0", xiMajor, m_xi2Minor); #endif @@ -714,7 +715,21 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo touchPoint.state = Qt::TouchPointMoved; } else if (touchPoint.area.center() != QPoint(x, y)) { touchPoint.state = Qt::TouchPointMoved; - dev->pointPressedPosition[touchPoint.id] = QPointF(x, y); + if (dev->qtTouchDevice->type() == QTouchDevice::TouchPad) + dev->pointPressedPosition[touchPoint.id] = QPointF(x, y); + } + + if (dev->qtTouchDevice->type() == QTouchDevice::TouchScreen && + xiDeviceEvent->event == m_startSystemResizeInfo.window && + xiDeviceEvent->sourceid == m_startSystemResizeInfo.deviceid && + xiDeviceEvent->detail == m_startSystemResizeInfo.pointid) { + QXcbWindow *window = platformWindowFromId(m_startSystemResizeInfo.window); + if (window) { + XIAllowTouchEvents(static_cast<Display *>(m_xlib_display), xiDeviceEvent->deviceid, + xiDeviceEvent->detail, xiDeviceEvent->event, XIRejectTouch); + window->doStartSystemResize(QPoint(x, y), m_startSystemResizeInfo.corner); + m_startSystemResizeInfo.window = XCB_NONE; + } } break; case XI_TouchEnd: @@ -745,6 +760,27 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo touchPoint.state = Qt::TouchPointStationary; } +bool QXcbConnection::startSystemResizeForTouchBegin(xcb_window_t window, const QPoint &point, Qt::Corner corner) +{ + QHash<int, XInput2TouchDeviceData*>::const_iterator devIt = m_touchDevices.constBegin(); + for (; devIt != m_touchDevices.constEnd(); ++devIt) { + XInput2TouchDeviceData *deviceData = devIt.value(); + if (deviceData->qtTouchDevice->type() == QTouchDevice::TouchScreen) { + QHash<int, QPointF>::const_iterator pointIt = deviceData->pointPressedPosition.constBegin(); + for (; pointIt != deviceData->pointPressedPosition.constEnd(); ++pointIt) { + if (pointIt.value().toPoint() == point) { + m_startSystemResizeInfo.window = window; + m_startSystemResizeInfo.deviceid = devIt.key(); + m_startSystemResizeInfo.pointid = pointIt.key(); + m_startSystemResizeInfo.corner = corner; + return true; + } + } + } + } + return false; +} + bool QXcbConnection::xi2SetMouseGrabEnabled(xcb_window_t w, bool grab) { if (grab && !canGrab()) diff --git a/src/plugins/platforms/xcb/qxcbcursor.h b/src/plugins/platforms/xcb/qxcbcursor.h index 3284a9e3e1..c15225f6d2 100644 --- a/src/plugins/platforms/xcb/qxcbcursor.h +++ b/src/plugins/platforms/xcb/qxcbcursor.h @@ -76,10 +76,10 @@ public: QXcbCursor(QXcbConnection *conn, QXcbScreen *screen); ~QXcbCursor(); #ifndef QT_NO_CURSOR - void changeCursor(QCursor *cursor, QWindow *widget) Q_DECL_OVERRIDE; + void changeCursor(QCursor *cursor, QWindow *widget) override; #endif - QPoint pos() const Q_DECL_OVERRIDE; - void setPos(const QPoint &pos) Q_DECL_OVERRIDE; + QPoint pos() const override; + void setPos(const QPoint &pos) override; static void queryPointer(QXcbConnection *c, QXcbVirtualDesktop **virtualDesktop, QPoint *pos, int *keybMask = 0); diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp index 4915bb1b11..58fb1f3918 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.cpp +++ b/src/plugins/platforms/xcb/qxcbdrag.cpp @@ -130,9 +130,9 @@ public: ~QXcbDropData(); protected: - bool hasFormat_sys(const QString &mimeType) const Q_DECL_OVERRIDE; - QStringList formats_sys() const Q_DECL_OVERRIDE; - QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE; + bool hasFormat_sys(const QString &mimeType) const override; + QStringList formats_sys() const override; + QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const override; QVariant xdndObtainData(const QByteArray &format, QVariant::Type requestedType) const; @@ -1121,6 +1121,9 @@ void QXcbDrag::cancel() QBasicDrag::cancel(); if (current_target) send_leave(); + + // remove canceled object + currentDrag()->deleteLater(); } // find an ancestor with XdndAware on it diff --git a/src/plugins/platforms/xcb/qxcbdrag.h b/src/plugins/platforms/xcb/qxcbdrag.h index cb6e95cc9a..2d152edf76 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.h +++ b/src/plugins/platforms/xcb/qxcbdrag.h @@ -74,14 +74,14 @@ public: QXcbDrag(QXcbConnection *c); ~QXcbDrag(); - virtual QMimeData *platformDropData() Q_DECL_OVERRIDE; - bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE; + QMimeData *platformDropData() override; + bool eventFilter(QObject *o, QEvent *e) override; - void startDrag() Q_DECL_OVERRIDE; - void cancel() Q_DECL_OVERRIDE; - void move(const QPoint &globalPos) Q_DECL_OVERRIDE; - void drop(const QPoint &globalPos) Q_DECL_OVERRIDE; - void endDrag() Q_DECL_OVERRIDE; + void startDrag() override; + void cancel() override; + void move(const QPoint &globalPos) override; + void drop(const QPoint &globalPos) override; + void endDrag() override; void handleEnter(QPlatformWindow *window, const xcb_client_message_event_t *event, xcb_window_t proxy = 0); void handlePosition(QPlatformWindow *w, const xcb_client_message_event_t *event); @@ -93,13 +93,13 @@ public: void handleFinished(const xcb_client_message_event_t *event); bool dndEnable(QXcbWindow *win, bool on); - bool ownsDragObject() const Q_DECL_OVERRIDE; + bool ownsDragObject() const override; void updatePixmap(); xcb_timestamp_t targetTime() { return target_time; } protected: - void timerEvent(QTimerEvent* e) Q_DECL_OVERRIDE; + void timerEvent(QTimerEvent* e) override; private: friend class QXcbDropData; diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index f4da7ba033..af9ffab8ae 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -447,12 +447,8 @@ QByteArray QXcbIntegration::wmClass() const className[0] = className.at(0).toUpper(); } - if (!name.isEmpty() && !className.isEmpty()) { - m_wmClass = name.toLocal8Bit(); - m_wmClass.append('\0'); - m_wmClass.append(className.toLocal8Bit()); - m_wmClass.append('\0'); - } + if (!name.isEmpty() && !className.isEmpty()) + m_wmClass = name.toLocal8Bit() + '\0' + className.toLocal8Bit() + '\0'; } return m_wmClass; } diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h index 34dd44d491..f8034f436f 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.h +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -60,57 +60,57 @@ public: QXcbIntegration(const QStringList ¶meters, int &argc, char **argv); ~QXcbIntegration(); - QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE; + QPlatformWindow *createPlatformWindow(QWindow *window) const override; #ifndef QT_NO_OPENGL - QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE; + QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override; #endif - QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE; + QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; - QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE; + QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const override; - bool hasCapability(Capability cap) const Q_DECL_OVERRIDE; - QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE; - void initialize() Q_DECL_OVERRIDE; + bool hasCapability(Capability cap) const override; + QAbstractEventDispatcher *createEventDispatcher() const override; + void initialize() override; void moveToScreen(QWindow *window, int screen); - QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE; + QPlatformFontDatabase *fontDatabase() const override; - QPlatformNativeInterface *nativeInterface()const Q_DECL_OVERRIDE; + QPlatformNativeInterface *nativeInterface()const override; #ifndef QT_NO_CLIPBOARD - QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE; + QPlatformClipboard *clipboard() const override; #endif #ifndef QT_NO_DRAGANDDROP - QPlatformDrag *drag() const Q_DECL_OVERRIDE; + QPlatformDrag *drag() const override; #endif - QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE; + QPlatformInputContext *inputContext() const override; #ifndef QT_NO_ACCESSIBILITY - QPlatformAccessibility *accessibility() const Q_DECL_OVERRIDE; + QPlatformAccessibility *accessibility() const override; #endif - QPlatformServices *services() const Q_DECL_OVERRIDE; + QPlatformServices *services() const override; - Qt::KeyboardModifiers queryKeyboardModifiers() const Q_DECL_OVERRIDE; - QList<int> possibleKeys(const QKeyEvent *e) const Q_DECL_OVERRIDE; + Qt::KeyboardModifiers queryKeyboardModifiers() const override; + QList<int> possibleKeys(const QKeyEvent *e) const override; - QStringList themeNames() const Q_DECL_OVERRIDE; - QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE; - QVariant styleHint(StyleHint hint) const Q_DECL_OVERRIDE; + QStringList themeNames() const override; + QPlatformTheme *createPlatformTheme(const QString &name) const override; + QVariant styleHint(StyleHint hint) const override; QXcbConnection *defaultConnection() const { return m_connections.first(); } QByteArray wmClass() const; #if !defined(QT_NO_SESSIONMANAGER) && defined(XCB_USE_SM) - QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const Q_DECL_OVERRIDE; + QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const override; #endif - void sync() Q_DECL_OVERRIDE; + void sync() override; - void beep() const Q_DECL_OVERRIDE; + void beep() const override; static QXcbIntegration *instance() { return m_instance; } diff --git a/src/plugins/platforms/xcb/qxcbmain.cpp b/src/plugins/platforms/xcb/qxcbmain.cpp index ab55bb7691..f8cb9a9269 100644 --- a/src/plugins/platforms/xcb/qxcbmain.cpp +++ b/src/plugins/platforms/xcb/qxcbmain.cpp @@ -47,7 +47,7 @@ class QXcbIntegrationPlugin : public QPlatformIntegrationPlugin Q_OBJECT Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "xcb.json") public: - QPlatformIntegration *create(const QString&, const QStringList&, int &, char **) Q_DECL_OVERRIDE; + QPlatformIntegration *create(const QString&, const QStringList&, int &, char **) override; }; QPlatformIntegration* QXcbIntegrationPlugin::create(const QString& system, const QStringList& parameters, int &argc, char **argv) diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index acecbf4116..a830829311 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -78,22 +78,22 @@ public: QXcbNativeInterface(); - void *nativeResourceForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE; - void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) Q_DECL_OVERRIDE; - void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen) Q_DECL_OVERRIDE; - void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) Q_DECL_OVERRIDE; - void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *backingStore) Q_DECL_OVERRIDE; + void *nativeResourceForIntegration(const QByteArray &resource) override; + void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) override; + void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen) override; + void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) override; + void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *backingStore) override; #ifndef QT_NO_CURSOR - void *nativeResourceForCursor(const QByteArray &resource, const QCursor &cursor) Q_DECL_OVERRIDE; + void *nativeResourceForCursor(const QByteArray &resource, const QCursor &cursor) override; #endif - NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE; - NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) Q_DECL_OVERRIDE; - NativeResourceForScreenFunction nativeResourceFunctionForScreen(const QByteArray &resource) Q_DECL_OVERRIDE; - NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) Q_DECL_OVERRIDE; - NativeResourceForBackingStoreFunction nativeResourceFunctionForBackingStore(const QByteArray &resource) Q_DECL_OVERRIDE; + NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) override; + NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) override; + NativeResourceForScreenFunction nativeResourceFunctionForScreen(const QByteArray &resource) override; + NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) override; + NativeResourceForBackingStoreFunction nativeResourceFunctionForBackingStore(const QByteArray &resource) override; - QFunctionPointer platformFunction(const QByteArray &function) const Q_DECL_OVERRIDE; + QFunctionPointer platformFunction(const QByteArray &function) const override; inline const QByteArray &genericEventFilterType() const { return m_genericEventFilterType; } diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h index 0d32c3d624..627397fcaf 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -115,24 +115,24 @@ public: QString getOutputName(xcb_randr_get_output_info_reply_t *outputInfo); - QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE; + QPixmap grabWindow(WId window, int x, int y, int width, int height) const override; - QWindow *topLevelAt(const QPoint &point) const Q_DECL_OVERRIDE; + QWindow *topLevelAt(const QPoint &point) const override; - QRect geometry() const Q_DECL_OVERRIDE { return m_geometry; } - QRect availableGeometry() const Q_DECL_OVERRIDE {return m_availableGeometry;} - int depth() const Q_DECL_OVERRIDE { return screen()->root_depth; } - QImage::Format format() const Q_DECL_OVERRIDE; - QSizeF physicalSize() const Q_DECL_OVERRIDE { return m_sizeMillimeters; } + QRect geometry() const override { return m_geometry; } + QRect availableGeometry() const override {return m_availableGeometry;} + int depth() const override { return screen()->root_depth; } + QImage::Format format() const override; + QSizeF physicalSize() const override { return m_sizeMillimeters; } QSize virtualSize() const { return m_virtualSize; } QSizeF physicalVirtualSize() const { return m_virtualSizeMillimeters; } QDpi virtualDpi() const; - QDpi logicalDpi() const Q_DECL_OVERRIDE; - qreal pixelDensity() const Q_DECL_OVERRIDE; - QPlatformCursor *cursor() const Q_DECL_OVERRIDE; - qreal refreshRate() const Q_DECL_OVERRIDE { return m_refreshRate; } - Qt::ScreenOrientation orientation() const Q_DECL_OVERRIDE { return m_orientation; } - QList<QPlatformScreen *> virtualSiblings() const Q_DECL_OVERRIDE { return m_virtualDesktop->screens(); } + QDpi logicalDpi() const override; + qreal pixelDensity() const override; + QPlatformCursor *cursor() const override; + qreal refreshRate() const override { return m_refreshRate; } + Qt::ScreenOrientation orientation() const override { return m_orientation; } + QList<QPlatformScreen *> virtualSiblings() const override { return m_virtualDesktop->screens(); } QXcbVirtualDesktop *virtualDesktop() const { return m_virtualDesktop; } void setPrimary(bool primary) { m_primary = primary; } @@ -161,7 +161,7 @@ public: const xcb_visualtype_t *visualForId(xcb_visualid_t) const; quint8 depthOfVisual(xcb_visualid_t) const; - QString name() const Q_DECL_OVERRIDE { return m_outputName; } + QString name() const override { return m_outputName; } void handleScreenChange(xcb_randr_screen_change_notify_event_t *change_event); void updateGeometry(const QRect &geom, uint8_t rotation); diff --git a/src/plugins/platforms/xcb/qxcbsessionmanager.h b/src/plugins/platforms/xcb/qxcbsessionmanager.h index a184282034..0ad9445361 100644 --- a/src/plugins/platforms/xcb/qxcbsessionmanager.h +++ b/src/plugins/platforms/xcb/qxcbsessionmanager.h @@ -69,17 +69,17 @@ public: void setSessionId(const QString &id) { m_sessionId = id; } void setSessionKey(const QString &key) { m_sessionKey = key; } - bool allowsInteraction() Q_DECL_OVERRIDE; - bool allowsErrorInteraction() Q_DECL_OVERRIDE; - void release() Q_DECL_OVERRIDE; + bool allowsInteraction() override; + bool allowsErrorInteraction() override; + void release() override; - void cancel() Q_DECL_OVERRIDE; + void cancel() override; - void setManagerProperty(const QString &name, const QString &value) Q_DECL_OVERRIDE; - void setManagerProperty(const QString &name, const QStringList &value) Q_DECL_OVERRIDE; + void setManagerProperty(const QString &name, const QString &value) override; + void setManagerProperty(const QString &name, const QStringList &value) override; - bool isPhase2() const Q_DECL_OVERRIDE; - void requestPhase2() Q_DECL_OVERRIDE; + bool isPhase2() const override; + void requestPhase2() override; void exitEventLoop(); diff --git a/src/plugins/platforms/xcb/qxcbsystemtraytracker.h b/src/plugins/platforms/xcb/qxcbsystemtraytracker.h index 5cca4782aa..a6131e6d0e 100644 --- a/src/plugins/platforms/xcb/qxcbsystemtraytracker.h +++ b/src/plugins/platforms/xcb/qxcbsystemtraytracker.h @@ -61,7 +61,7 @@ public: void notifyManagerClientMessageEvent(const xcb_client_message_event_t *); - void handleDestroyNotifyEvent(const xcb_destroy_notify_event_t *) Q_DECL_OVERRIDE; + void handleDestroyNotifyEvent(const xcb_destroy_notify_event_t *) override; bool visualHasAlphaChannel(); signals: diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 0c8e78491e..ff01fa019e 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -2738,13 +2738,23 @@ bool QXcbWindow::startSystemResize(const QPoint &pos, Qt::Corner corner) const xcb_atom_t moveResize = connection()->atom(QXcbAtom::_NET_WM_MOVERESIZE); if (!connection()->wmSupport()->isSupportedByWM(moveResize)) return false; + const QPoint globalPos = QHighDpi::toNativePixels(window()->mapToGlobal(pos), window()->screen()); +#ifdef XCB_USE_XINPUT22 + if (connection()->startSystemResizeForTouchBegin(m_window, globalPos, corner)) + return true; +#endif + return doStartSystemResize(globalPos, corner); +} + +bool QXcbWindow::doStartSystemResize(const QPoint &globalPos, Qt::Corner corner) +{ + const xcb_atom_t moveResize = connection()->atom(QXcbAtom::_NET_WM_MOVERESIZE); xcb_client_message_event_t xev; xev.response_type = XCB_CLIENT_MESSAGE; xev.type = moveResize; xev.sequence = 0; xev.window = xcb_window(); xev.format = 32; - const QPoint globalPos = window()->mapToGlobal(pos); xev.data.data32[0] = globalPos.x(); xev.data.data32[1] = globalPos.y(); const bool bottom = corner == Qt::BottomRightCorner || corner == Qt::BottomLeftCorner; diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 92f3f7a67c..089df8f3f6 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -76,75 +76,75 @@ public: QXcbWindow(QWindow *window); ~QXcbWindow(); - void setGeometry(const QRect &rect) Q_DECL_OVERRIDE; + void setGeometry(const QRect &rect) override; - QMargins frameMargins() const Q_DECL_OVERRIDE; + QMargins frameMargins() const override; - void setVisible(bool visible) Q_DECL_OVERRIDE; - void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE; - void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE; - WId winId() const Q_DECL_OVERRIDE; - void setParent(const QPlatformWindow *window) Q_DECL_OVERRIDE; + void setVisible(bool visible) override; + void setWindowFlags(Qt::WindowFlags flags) override; + void setWindowState(Qt::WindowState state) override; + WId winId() const override; + void setParent(const QPlatformWindow *window) override; - bool isExposed() const Q_DECL_OVERRIDE; - bool isEmbedded(const QPlatformWindow *parentWindow = 0) const Q_DECL_OVERRIDE; - QPoint mapToGlobal(const QPoint &pos) const Q_DECL_OVERRIDE; - QPoint mapFromGlobal(const QPoint &pos) const Q_DECL_OVERRIDE; + bool isExposed() const override; + bool isEmbedded(const QPlatformWindow *parentWindow = 0) const override; + QPoint mapToGlobal(const QPoint &pos) const override; + QPoint mapFromGlobal(const QPoint &pos) const override; - void setWindowTitle(const QString &title) Q_DECL_OVERRIDE; + void setWindowTitle(const QString &title) override; void setWindowIconText(const QString &title); - void setWindowIcon(const QIcon &icon) Q_DECL_OVERRIDE; - void raise() Q_DECL_OVERRIDE; - void lower() Q_DECL_OVERRIDE; - void propagateSizeHints() Q_DECL_OVERRIDE; + void setWindowIcon(const QIcon &icon) override; + void raise() override; + void lower() override; + void propagateSizeHints() override; - void requestActivateWindow() Q_DECL_OVERRIDE; + void requestActivateWindow() override; - bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE; - bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE; + bool setKeyboardGrabEnabled(bool grab) override; + bool setMouseGrabEnabled(bool grab) override; void setCursor(xcb_cursor_t cursor, bool isBitmapCursor); - QSurfaceFormat format() const Q_DECL_OVERRIDE; + QSurfaceFormat format() const override; - void windowEvent(QEvent *event) Q_DECL_OVERRIDE; + void windowEvent(QEvent *event) override; - bool startSystemResize(const QPoint &pos, Qt::Corner corner) Q_DECL_OVERRIDE; + bool startSystemResize(const QPoint &pos, Qt::Corner corner) override; - void setOpacity(qreal level) Q_DECL_OVERRIDE; - void setMask(const QRegion ®ion) Q_DECL_OVERRIDE; + void setOpacity(qreal level) override; + void setMask(const QRegion ®ion) override; - void setAlertState(bool enabled) Q_DECL_OVERRIDE; - bool isAlertState() const Q_DECL_OVERRIDE { return m_alertState; } + void setAlertState(bool enabled) override; + bool isAlertState() const override { return m_alertState; } xcb_window_t xcb_window() const { return m_window; } uint depth() const { return m_depth; } QImage::Format imageFormat() const { return m_imageFormat; } bool imageNeedsRgbSwap() const { return m_imageRgbSwap; } - bool handleGenericEvent(xcb_generic_event_t *event, long *result) Q_DECL_OVERRIDE; - - void handleExposeEvent(const xcb_expose_event_t *event) Q_DECL_OVERRIDE; - void handleClientMessageEvent(const xcb_client_message_event_t *event) Q_DECL_OVERRIDE; - void handleConfigureNotifyEvent(const xcb_configure_notify_event_t *event) Q_DECL_OVERRIDE; - void handleMapNotifyEvent(const xcb_map_notify_event_t *event) Q_DECL_OVERRIDE; - void handleUnmapNotifyEvent(const xcb_unmap_notify_event_t *event) Q_DECL_OVERRIDE; - void handleButtonPressEvent(const xcb_button_press_event_t *event) Q_DECL_OVERRIDE; - void handleButtonReleaseEvent(const xcb_button_release_event_t *event) Q_DECL_OVERRIDE; - void handleMotionNotifyEvent(const xcb_motion_notify_event_t *event) Q_DECL_OVERRIDE; - - void handleEnterNotifyEvent(const xcb_enter_notify_event_t *event) Q_DECL_OVERRIDE; - void handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event) Q_DECL_OVERRIDE; - void handleFocusInEvent(const xcb_focus_in_event_t *event) Q_DECL_OVERRIDE; - void handleFocusOutEvent(const xcb_focus_out_event_t *event) Q_DECL_OVERRIDE; - void handlePropertyNotifyEvent(const xcb_property_notify_event_t *event) Q_DECL_OVERRIDE; + bool handleGenericEvent(xcb_generic_event_t *event, long *result) override; + + void handleExposeEvent(const xcb_expose_event_t *event) override; + void handleClientMessageEvent(const xcb_client_message_event_t *event) override; + void handleConfigureNotifyEvent(const xcb_configure_notify_event_t *event) override; + void handleMapNotifyEvent(const xcb_map_notify_event_t *event) override; + void handleUnmapNotifyEvent(const xcb_unmap_notify_event_t *event) override; + void handleButtonPressEvent(const xcb_button_press_event_t *event) override; + void handleButtonReleaseEvent(const xcb_button_release_event_t *event) override; + void handleMotionNotifyEvent(const xcb_motion_notify_event_t *event) override; + + void handleEnterNotifyEvent(const xcb_enter_notify_event_t *event) override; + void handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event) override; + void handleFocusInEvent(const xcb_focus_in_event_t *event) override; + void handleFocusOutEvent(const xcb_focus_out_event_t *event) override; + void handlePropertyNotifyEvent(const xcb_property_notify_event_t *event) override; #ifdef XCB_USE_XINPUT22 void handleXIMouseButtonState(const xcb_ge_event_t *); - void handleXIMouseEvent(xcb_ge_event_t *, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized) Q_DECL_OVERRIDE; - void handleXIEnterLeave(xcb_ge_event_t *) Q_DECL_OVERRIDE; + void handleXIMouseEvent(xcb_ge_event_t *, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized) override; + void handleXIEnterLeave(xcb_ge_event_t *) override; #endif - QXcbWindow *toWindow() Q_DECL_OVERRIDE; + QXcbWindow *toWindow() override; void handleMouseEvent(xcb_timestamp_t time, const QPoint &local, const QPoint &global, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source); @@ -178,6 +178,8 @@ public: QXcbScreen *xcbScreen() const; + bool doStartSystemResize(const QPoint &globalPos, Qt::Corner corner); + virtual void create(); virtual void destroy(); diff --git a/src/plugins/platforms/xcb/qxcbxsettings.h b/src/plugins/platforms/xcb/qxcbxsettings.h index ff1932734a..ab1f784274 100644 --- a/src/plugins/platforms/xcb/qxcbxsettings.h +++ b/src/plugins/platforms/xcb/qxcbxsettings.h @@ -61,7 +61,7 @@ public: void removeCallbackForHandle(const QByteArray &property, void *handle); void removeCallbackForHandle(void *handle); - void handlePropertyNotifyEvent(const xcb_property_notify_event_t *event) Q_DECL_OVERRIDE; + void handlePropertyNotifyEvent(const xcb_property_notify_event_t *event) override; private: QXcbXSettingsPrivate *d_ptr; }; diff --git a/src/printsupport/dialogs/qabstractprintdialog.h b/src/printsupport/dialogs/qabstractprintdialog.h index e8eee2ca9c..f18406af4b 100644 --- a/src/printsupport/dialogs/qabstractprintdialog.h +++ b/src/printsupport/dialogs/qabstractprintdialog.h @@ -83,7 +83,7 @@ public: explicit QAbstractPrintDialog(QPrinter *printer, QWidget *parent = Q_NULLPTR); ~QAbstractPrintDialog(); - virtual int exec() = 0; + int exec() override = 0; // obsolete void addEnabledOption(PrintDialogOption option); diff --git a/src/printsupport/kernel/qpaintengine_alpha_p.h b/src/printsupport/kernel/qpaintengine_alpha_p.h index b5ba98bf88..efae442690 100644 --- a/src/printsupport/kernel/qpaintengine_alpha_p.h +++ b/src/printsupport/kernel/qpaintengine_alpha_p.h @@ -67,18 +67,18 @@ class Q_PRINTSUPPORT_EXPORT QAlphaPaintEngine : public QPaintEngine public: ~QAlphaPaintEngine(); - virtual bool begin(QPaintDevice *pdev); - virtual bool end(); + bool begin(QPaintDevice *pdev) override; + bool end() override; - virtual void updateState(const QPaintEngineState &state); + void updateState(const QPaintEngineState &state) override; - virtual void drawPath(const QPainterPath &path); + void drawPath(const QPainterPath &path) override; - virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode); + void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override; - virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr); - virtual void drawTextItem(const QPointF &p, const QTextItem &textItem); - virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s); + void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override; + void drawTextItem(const QPointF &p, const QTextItem &textItem) override; + void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) override; protected: QAlphaPaintEngine(QAlphaPaintEnginePrivate &data, PaintEngineFeatures devcaps = 0); diff --git a/src/printsupport/kernel/qpaintengine_preview_p.h b/src/printsupport/kernel/qpaintengine_preview_p.h index 6277451bfa..31b3142cb6 100644 --- a/src/printsupport/kernel/qpaintengine_preview_p.h +++ b/src/printsupport/kernel/qpaintengine_preview_p.h @@ -69,33 +69,33 @@ public: QPreviewPaintEngine(); ~QPreviewPaintEngine(); - bool begin(QPaintDevice *dev); - bool end(); + bool begin(QPaintDevice *dev) override; + bool end() override; - void updateState(const QPaintEngineState &state); + void updateState(const QPaintEngineState &state) override; - void drawPath(const QPainterPath &path); - void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode); - void drawTextItem(const QPointF &p, const QTextItem &textItem); + void drawPath(const QPainterPath &path) override; + void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override; + void drawTextItem(const QPointF &p, const QTextItem &textItem) override; - void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr); - void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &p); + void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override; + void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &p) override; QList<const QPicture *> pages(); - QPaintEngine::Type type() const { return Picture; } + QPaintEngine::Type type() const override { return Picture; } void setProxyEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine); - void setProperty(PrintEnginePropertyKey key, const QVariant &value); - QVariant property(PrintEnginePropertyKey key) const; + void setProperty(PrintEnginePropertyKey key, const QVariant &value) override; + QVariant property(PrintEnginePropertyKey key) const override; - bool newPage(); - bool abort(); + bool newPage() override; + bool abort() override; - int metric(QPaintDevice::PaintDeviceMetric) const; + int metric(QPaintDevice::PaintDeviceMetric) const override; - QPrinter::PrinterState printerState() const; + QPrinter::PrinterState printerState() const override; }; QT_END_NAMESPACE diff --git a/src/sql/configure.json b/src/sql/configure.json index 96c82e84f9..72671b6df9 100644 --- a/src/sql/configure.json +++ b/src/sql/configure.json @@ -58,8 +58,10 @@ "label": "MySQL", "test": "unix/mysql", "sources": [ - { "type": "mysqlConfig", "query": "--libs_r" }, - { "type": "mysqlConfig", "query": "--libs" }, + { "type": "mysqlConfig", "query": "--libs_r", "cleanlibs": true }, + { "type": "mysqlConfig", "query": "--libs", "cleanlibs": true }, + { "type": "mysqlConfig", "query": "--libs_r", "cleanlibs": false }, + { "type": "mysqlConfig", "query": "--libs", "cleanlibs": false }, { "libs": "-lmysqlclient_r", "condition": "!config.win32" }, { "libs": "-llibmysql", "condition": "config.win32" }, { "libs": "-lmysqlclient", "condition": "!config.win32" } diff --git a/src/sql/configure.pri b/src/sql/configure.pri index 1d8847b4bc..62d56e2186 100644 --- a/src/sql/configure.pri +++ b/src/sql/configure.pri @@ -57,6 +57,14 @@ defineTest(qtConfLibrary_mysqlConfig) { libs = $$filterLibraryPath($$libs) # -rdynamic should not be returned by mysql_config, but is on RHEL 6.6 libs -= -rdynamic + equals($${1}.cleanlibs, true) { + for(l, libs) { + # Drop all options besides the -L one and the -lmysqlclient one + # so we don't unnecessarily link to libs like OpenSSL + contains(l, "^(-L|-lmysqlclient).*"): cleanlibs += $$l + } + libs = $$cleanlibs + } $${1}.libs = "$$val_escape(libs)" eval(includedir = $$includedir) includedir ~= s/^-I//g diff --git a/src/sql/models/qsqlrelationaldelegate.h b/src/sql/models/qsqlrelationaldelegate.h index e98bf28d3b..f295de7396 100644 --- a/src/sql/models/qsqlrelationaldelegate.h +++ b/src/sql/models/qsqlrelationaldelegate.h @@ -65,7 +65,7 @@ explicit QSqlRelationalDelegate(QObject *aParent = 0) QWidget *createEditor(QWidget *aParent, const QStyleOptionViewItem &option, - const QModelIndex &index) const + const QModelIndex &index) const override { const QSqlRelationalTableModel *sqlModel = qobject_cast<const QSqlRelationalTableModel *>(index.model()); QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0; @@ -80,7 +80,7 @@ QWidget *createEditor(QWidget *aParent, return combo; } -void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override { if (!index.isValid()) return; diff --git a/src/testlib/doc/snippets/code/doc_src_qsignalspy.cpp b/src/testlib/doc/snippets/code/doc_src_qsignalspy.cpp index fdcbdc603c..a4513a55a9 100644 --- a/src/testlib/doc/snippets/code/doc_src_qsignalspy.cpp +++ b/src/testlib/doc/snippets/code/doc_src_qsignalspy.cpp @@ -69,7 +69,7 @@ myCustomObject->doSomething(); // trigger emission of the signal QList<QVariant> arguments = spy.takeFirst(); QVERIFY(arguments.at(0).type() == QVariant::Int); -QVERIFY(arguments.at(1).type() == QVariant::QString); +QVERIFY(arguments.at(1).type() == QVariant::String); QVERIFY(arguments.at(2).type() == QVariant::double); //! [1] diff --git a/src/testlib/qbenchmarkevent_p.h b/src/testlib/qbenchmarkevent_p.h index 8231b57127..af42a17141 100644 --- a/src/testlib/qbenchmarkevent_p.h +++ b/src/testlib/qbenchmarkevent_p.h @@ -63,15 +63,15 @@ class QBenchmarkEvent : public QBenchmarkMeasurerBase, public QAbstractNativeEve public: QBenchmarkEvent(); ~QBenchmarkEvent(); - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int suggestion); - int adjustMedianCount(int suggestion); - bool repeatCount() { return 1; } - QTest::QBenchmarkMetric metricType(); - virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result); + void start() override; + qint64 checkpoint() override; + qint64 stop() override; + bool isMeasurementAccepted(qint64 measurement) override; + int adjustIterationCount(int suggestion) override; + int adjustMedianCount(int suggestion) override; + bool repeatCount() override { return 1; } + QTest::QBenchmarkMetric metricType() override; + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; qint64 eventCounter; }; diff --git a/src/testlib/qbenchmarktimemeasurers_p.h b/src/testlib/qbenchmarktimemeasurers_p.h index e5ffb1157d..f268669e2f 100644 --- a/src/testlib/qbenchmarktimemeasurers_p.h +++ b/src/testlib/qbenchmarktimemeasurers_p.h @@ -60,14 +60,14 @@ QT_BEGIN_NAMESPACE class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase { public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int sugestion); - int adjustMedianCount(int suggestion); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); + void start() override; + qint64 checkpoint() override; + qint64 stop() override; + bool isMeasurementAccepted(qint64 measurement) override; + int adjustIterationCount(int sugestion) override; + int adjustMedianCount(int suggestion) override; + bool needsWarmupIteration() override; + QTest::QBenchmarkMetric metricType() override; private: QElapsedTimer time; }; @@ -77,14 +77,14 @@ private: class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase { public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int); - int adjustMedianCount(int suggestion); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); + void start() override; + qint64 checkpoint() override; + qint64 stop() override; + bool isMeasurementAccepted(qint64 measurement) override; + int adjustIterationCount(int) override; + int adjustMedianCount(int suggestion) override; + bool needsWarmupIteration() override; + QTest::QBenchmarkMetric metricType() override; private: CycleCounterTicks startTicks; }; diff --git a/src/testlib/qbenchmarkvalgrind_p.h b/src/testlib/qbenchmarkvalgrind_p.h index dd7e7381c1..69219b9a65 100644 --- a/src/testlib/qbenchmarkvalgrind_p.h +++ b/src/testlib/qbenchmarkvalgrind_p.h @@ -76,14 +76,14 @@ public: class QBenchmarkCallgrindMeasurer : public QBenchmarkMeasurerBase { public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int); - int adjustMedianCount(int); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); + void start() override; + qint64 checkpoint() override; + qint64 stop() override; + bool isMeasurementAccepted(qint64 measurement) override; + int adjustIterationCount(int) override; + int adjustMedianCount(int) override; + bool needsWarmupIteration() override; + QTest::QBenchmarkMetric metricType() override; }; QT_END_NAMESPACE diff --git a/src/testlib/qplaintestlogger_p.h b/src/testlib/qplaintestlogger_p.h index efa79e550d..93d3c7143a 100644 --- a/src/testlib/qplaintestlogger_p.h +++ b/src/testlib/qplaintestlogger_p.h @@ -61,18 +61,18 @@ public: QPlainTestLogger(const char *filename); ~QPlainTestLogger(); - void startLogging(); - void stopLogging(); + void startLogging() override; + void stopLogging() override; - void enterTestFunction(const char *function); - void leaveTestFunction(); + void enterTestFunction(const char *function) override; + void leaveTestFunction() override; void addIncident(IncidentTypes type, const char *description, - const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + const char *file = 0, int line = 0) override; + void addBenchmarkResult(const QBenchmarkResult &result) override; void addMessage(MessageTypes type, const QString &message, - const char *file = 0, int line = 0); + const char *file = 0, int line = 0) override; private: void printMessage(const char *type, const char *msg, const char *file = 0, int line = 0); diff --git a/src/testlib/qteamcitylogger_p.h b/src/testlib/qteamcitylogger_p.h index b8fad3ae34..219aeb5ceb 100644 --- a/src/testlib/qteamcitylogger_p.h +++ b/src/testlib/qteamcitylogger_p.h @@ -63,18 +63,18 @@ public: QTeamCityLogger(const char *filename); ~QTeamCityLogger(); - void startLogging(); - void stopLogging(); + void startLogging() override; + void stopLogging() override; - void enterTestFunction(const char *function); - void leaveTestFunction(); + void enterTestFunction(const char *function) override; + void leaveTestFunction() override; void addIncident(IncidentTypes type, const char *description, - const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + const char *file = 0, int line = 0) override; + void addBenchmarkResult(const QBenchmarkResult &result) override; void addMessage(MessageTypes type, const QString &message, - const char *file = 0, int line = 0); + const char *file = 0, int line = 0) override; private: QString currTestFuncName; diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 1c13f8edc2..7b76f1f970 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -99,6 +99,7 @@ #include <errno.h> #include <signal.h> #include <time.h> +#include <sys/resource.h> #endif #if defined(Q_OS_MACX) @@ -143,6 +144,22 @@ static bool debuggerPresent() #endif } +static void disableCoreDump() +{ + bool ok = false; + const int disableCoreDump = qEnvironmentVariableIntValue("QTEST_DISABLE_CORE_DUMP", &ok); + if (ok && disableCoreDump == 1) { +#if defined(Q_OS_UNIX) + struct rlimit limit; + limit.rlim_cur = 0; + limit.rlim_max = 0; + if (setrlimit(RLIMIT_CORE, &limit) != 0) + qWarning("Failed to disable core dumps: %d", errno); +#endif + } +} +Q_CONSTRUCTOR_FUNCTION(disableCoreDump); + static void stackTrace() { bool ok = false; @@ -925,7 +942,7 @@ public: waitCondition.wakeAll(); } - void run() { + void run() override { QMutexLocker locker(&mutex); waitCondition.wakeAll(); while (1) { diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index c3ccfc3f8c..4c226830e9 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -309,7 +309,7 @@ namespace QTest Q_TESTLIB_EXPORT void addColumnInternal(int id, const char *name); template <typename T> - inline void addColumn(const char *name, T * = 0) + inline void addColumn(const char *name, T * = nullptr) { typedef std::is_same<T, const char*> QIsSameTConstChar; Q_STATIC_ASSERT_X(!QIsSameTConstChar::value, "const char* is not allowed as a test data format."); diff --git a/src/testlib/qtestevent.h b/src/testlib/qtestevent.h index 63b7401e6f..159e3e01ff 100644 --- a/src/testlib/qtestevent.h +++ b/src/testlib/qtestevent.h @@ -79,10 +79,10 @@ public: inline QTestKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers, int delay) : _action(action), _delay(delay), _modifiers(modifiers), _ascii(ascii), _key(Qt::Key_unknown) {} - inline QTestEvent *clone() const { return new QTestKeyEvent(*this); } + inline QTestEvent *clone() const override { return new QTestKeyEvent(*this); } #ifdef QT_WIDGETS_LIB - inline void simulate(QWidget *w) + inline void simulate(QWidget *w) override { if (_ascii == 0) QTest::keyEvent(_action, w, _key, _modifiers, _delay); @@ -104,10 +104,10 @@ class QTestKeyClicksEvent: public QTestEvent public: inline QTestKeyClicksEvent(const QString &keys, Qt::KeyboardModifiers modifiers, int delay) : _keys(keys), _modifiers(modifiers), _delay(delay) {} - inline QTestEvent *clone() const { return new QTestKeyClicksEvent(*this); } + inline QTestEvent *clone() const override { return new QTestKeyClicksEvent(*this); } #ifdef QT_WIDGETS_LIB - inline void simulate(QWidget *w) + inline void simulate(QWidget *w) override { QTest::keyClicks(w, _keys, _modifiers, _delay); } @@ -125,10 +125,10 @@ public: inline QTestMouseEvent(QTest::MouseAction action, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QPoint position, int delay) : _action(action), _button(button), _modifiers(modifiers), _pos(position), _delay(delay) {} - inline QTestEvent *clone() const { return new QTestMouseEvent(*this); } + inline QTestEvent *clone() const override { return new QTestMouseEvent(*this); } #ifdef QT_WIDGETS_LIB - inline void simulate(QWidget *w) + inline void simulate(QWidget *w) override { QTest::mouseEvent(_action, w, _button, _modifiers, _pos, _delay); } @@ -148,10 +148,10 @@ class QTestDelayEvent: public QTestEvent { public: inline QTestDelayEvent(int msecs): _delay(msecs) {} - inline QTestEvent *clone() const { return new QTestDelayEvent(*this); } + inline QTestEvent *clone() const override { return new QTestDelayEvent(*this); } #ifdef QT_WIDGETS_LIB - inline void simulate(QWidget * /*w*/) { QTest::qWait(_delay); } + inline void simulate(QWidget * /*w*/) override { QTest::qWait(_delay); } #endif private: diff --git a/src/testlib/qtesteventloop.h b/src/testlib/qtesteventloop.h index 032c95d692..bcf4a4be2d 100644 --- a/src/testlib/qtesteventloop.h +++ b/src/testlib/qtesteventloop.h @@ -80,7 +80,7 @@ public Q_SLOTS: inline void exitLoop(); protected: - inline void timerEvent(QTimerEvent *e); + inline void timerEvent(QTimerEvent *e) override; private: bool inLoop; diff --git a/src/testlib/qxmltestlogger_p.h b/src/testlib/qxmltestlogger_p.h index c6461387b2..b85742f939 100644 --- a/src/testlib/qxmltestlogger_p.h +++ b/src/testlib/qxmltestlogger_p.h @@ -64,18 +64,18 @@ public: QXmlTestLogger(XmlMode mode, const char *filename); ~QXmlTestLogger(); - void startLogging(); - void stopLogging(); + void startLogging() override; + void stopLogging() override; - void enterTestFunction(const char *function); - void leaveTestFunction(); + void enterTestFunction(const char *function) override; + void leaveTestFunction() override; void addIncident(IncidentTypes type, const char *description, - const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + const char *file = 0, int line = 0) override; + void addBenchmarkResult(const QBenchmarkResult &result) override; void addMessage(MessageTypes type, const QString &message, - const char *file = 0, int line = 0); + const char *file = 0, int line = 0) override; static int xmlCdata(QTestCharBuffer *dest, char const* src); static int xmlQuote(QTestCharBuffer *dest, char const* src); diff --git a/src/testlib/qxunittestlogger_p.h b/src/testlib/qxunittestlogger_p.h index 50f26c317b..8fb01fbe61 100644 --- a/src/testlib/qxunittestlogger_p.h +++ b/src/testlib/qxunittestlogger_p.h @@ -64,19 +64,19 @@ class QXunitTestLogger : public QAbstractTestLogger QXunitTestLogger(const char *filename); ~QXunitTestLogger(); - void startLogging(); - void stopLogging(); + void startLogging() override; + void stopLogging() override; - void enterTestFunction(const char *function); - void leaveTestFunction(); + void enterTestFunction(const char *function) override; + void leaveTestFunction() override; void addIncident(IncidentTypes type, const char *description, - const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + const char *file = 0, int line = 0) override; + void addBenchmarkResult(const QBenchmarkResult &result) override; void addTag(QTestElement* element); void addMessage(MessageTypes type, const QString &message, - const char *file = 0, int line = 0); + const char *file = 0, int line = 0) override; private: QTestElement *listOfTestcases; diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index bd94017821..cdf3ad3310 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -98,7 +98,8 @@ static QDBusIntrospection::Interfaces readInput() // already XML return QDBusIntrospection::parseInterfaces(QString::fromUtf8(data)); - fprintf(stderr, "Cannot process input: '%s'. Stop.\n", qPrintable(inputFile)); + fprintf(stderr, "%s: Cannot process input: '%s'. Stop.\n", + PROGRAMNAME, qPrintable(inputFile)); exit(1); } @@ -225,7 +226,8 @@ static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection: if (qttype.isEmpty()) { if (!isSignal || qstrcmp(direction, "Out") == 0) { - fprintf(stderr, "Got unknown type `%s'\n", qPrintable(signature)); + fprintf(stderr, "%s: Got unknown type `%s' processing '%s'\n", + PROGRAMNAME, qPrintable(signature), qPrintable(inputFile)); fprintf(stderr, "You should add <annotation name=\"%s\" value=\"<type>\"/> to the XML description\n", qPrintable(annotationName)); } @@ -236,8 +238,10 @@ static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection: exit(1); } - fprintf(stderr, "Warning: deprecated annotation '%s' found; suggest updating to '%s'\n", - qPrintable(oldAnnotationName), qPrintable(annotationName)); + fprintf(stderr, "%s: Warning: deprecated annotation '%s' found while processing '%s'; " + "suggest updating to '%s'\n", + PROGRAMNAME, qPrintable(oldAnnotationName), qPrintable(inputFile), + qPrintable(annotationName)); return qttype.toLatin1(); } @@ -357,8 +361,10 @@ static QString propertyGetter(const QDBusIntrospection::Property &property) getter = property.annotations.value(QLatin1String("com.trolltech.QtDBus.propertyGetter")); if (!getter.isEmpty()) { - fprintf(stderr, "Warning: deprecated annotation 'com.trolltech.QtDBus.propertyGetter' found;" - " suggest updating to 'org.qtproject.QtDBus.PropertyGetter'\n"); + fprintf(stderr, "%s: Warning: deprecated annotation 'com.trolltech.QtDBus.propertyGetter' found" + " while processing '%s';" + " suggest updating to 'org.qtproject.QtDBus.PropertyGetter'\n", + PROGRAMNAME, qPrintable(inputFile)); return getter; } @@ -375,8 +381,10 @@ static QString propertySetter(const QDBusIntrospection::Property &property) setter = property.annotations.value(QLatin1String("com.trolltech.QtDBus.propertySetter")); if (!setter.isEmpty()) { - fprintf(stderr, "Warning: deprecated annotation 'com.trolltech.QtDBus.propertySetter' found;" - " suggest updating to 'org.qtproject.QtDBus.PropertySetter'\n"); + fprintf(stderr, "%s: Warning: deprecated annotation 'com.trolltech.QtDBus.propertySetter' found" + " while processing '%s';" + " suggest updating to 'org.qtproject.QtDBus.PropertySetter'\n", + PROGRAMNAME, qPrintable(inputFile)); return setter; } @@ -426,8 +434,8 @@ static bool openFile(const QString &fileName, QFile &file) } if (!isOk) - fprintf(stderr, "Unable to open '%s': %s\n", qPrintable(fileName), - qPrintable(file.errorString())); + fprintf(stderr, "%s: Unable to open '%s': %s\n", + PROGRAMNAME, qPrintable(fileName), qPrintable(file.errorString())); return isOk; } @@ -506,7 +514,7 @@ static void writeProxy(const QString &filename, const QDBusIntrospection::Interf // constructors/destructors: hs << "public:" << endl - << " " << className << "(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);" << endl + << " " << className << "(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr);" << endl << endl << " ~" << className << "();" << endl << endl; @@ -566,8 +574,9 @@ static void writeProxy(const QString &filename, const QDBusIntrospection::Interf bool isNoReply = method.annotations.value(QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true"); if (isNoReply && !method.outputArgs.isEmpty()) { - fprintf(stderr, "warning: method %s in interface %s is marked 'no-reply' but has output arguments.\n", - qPrintable(method.name), qPrintable(interface->name)); + fprintf(stderr, "%s: warning while processing '%s': method %s in interface %s is marked 'no-reply' but has output arguments.\n", + PROGRAMNAME, qPrintable(inputFile), qPrintable(method.name), + qPrintable(interface->name)); continue; } @@ -893,8 +902,8 @@ static void writeAdaptor(const QString &filename, const QDBusIntrospection::Inte bool isNoReply = method.annotations.value(QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true"); if (isNoReply && !method.outputArgs.isEmpty()) { - fprintf(stderr, "warning: method %s in interface %s is marked 'no-reply' but has output arguments.\n", - qPrintable(method.name), qPrintable(interface->name)); + fprintf(stderr, "%s: warning while processing '%s': method %s in interface %s is marked 'no-reply' but has output arguments.\n", + PROGRAMNAME, qPrintable(inputFile), qPrintable(method.name), qPrintable(interface->name)); continue; } diff --git a/src/widgets/configure.json b/src/widgets/configure.json index b241fcdf11..1e72b61886 100644 --- a/src/widgets/configure.json +++ b/src/widgets/configure.json @@ -44,31 +44,31 @@ }, "style-fusion": { "label": "Fusion", - "output": [ "styles" ] + "output": [ "privateFeature", "styles" ] }, "style-mac": { "label": "macOS", "condition": "config.osx", - "output": [ "styles" ] + "output": [ "privateFeature", "styles" ] }, "style-windows": { "label": "Windows", - "output": [ "styles" ] + "output": [ "privateFeature", "styles" ] }, "style-windowsxp": { "label": "WindowsXP", "condition": "features.style-windows && config.win32 && !config.winrt && tests.uxtheme", - "output": [ "styles" ] + "output": [ "privateFeature", "styles" ] }, "style-windowsvista": { "label": "WindowsVista", "condition": "features.style-windowsxp", - "output": [ "styles" ] + "output": [ "privateFeature", "styles" ] }, "style-android": { "label": "Android", "autoDetect": "config.android", - "output": [ "styles" ] + "output": [ "privateFeature", "styles" ] }, "style-stylesheet": { "label": "QStyleSheetStyle", diff --git a/src/widgets/dialogs/qdialog.h b/src/widgets/dialogs/qdialog.h index 265790b0e5..d88ff4a841 100644 --- a/src/widgets/dialogs/qdialog.h +++ b/src/widgets/dialogs/qdialog.h @@ -65,7 +65,7 @@ public: int result() const; - void setVisible(bool visible); + void setVisible(bool visible) override; void setOrientation(Qt::Orientation orientation); Qt::Orientation orientation() const; @@ -73,8 +73,8 @@ public: void setExtension(QWidget* extension); QWidget* extension() const; - QSize sizeHint() const; - QSize minimumSizeHint() const; + QSize sizeHint() const override; + QSize minimumSizeHint() const override; void setSizeGripEnabled(bool); bool isSizeGripEnabled() const; @@ -99,14 +99,14 @@ public Q_SLOTS: protected: QDialog(QDialogPrivate &, QWidget *parent, Qt::WindowFlags f = Qt::WindowFlags()); - void keyPressEvent(QKeyEvent *); - void closeEvent(QCloseEvent *); - void showEvent(QShowEvent *); - void resizeEvent(QResizeEvent *); + void keyPressEvent(QKeyEvent *) override; + void closeEvent(QCloseEvent *) override; + void showEvent(QShowEvent *) override; + void resizeEvent(QResizeEvent *) override; #ifndef QT_NO_CONTEXTMENU - void contextMenuEvent(QContextMenuEvent *); + void contextMenuEvent(QContextMenuEvent *) override; #endif - bool eventFilter(QObject *, QEvent *); + bool eventFilter(QObject *, QEvent *) override; void adjustPosition(QWidget*); private: Q_DECLARE_PRIVATE(QDialog) diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index bcad069b50..9153d7ea41 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -38,6 +38,7 @@ ****************************************************************************/ #include "qwizard.h" +#include <QtWidgets/private/qtwidgetsglobal_p.h> #ifndef QT_NO_WIZARD @@ -61,7 +62,7 @@ #include <QtCore/QMetaMethod> #include <QtGui/QGuiApplication> #include <qpa/qplatformnativeinterface.h> -#elif !defined(QT_NO_STYLE_WINDOWSVISTA) +#elif QT_CONFIG(style_windowsvista) #include "qwizard_win_p.h" #include "qtimer.h" #endif @@ -295,7 +296,7 @@ public: protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) private: bool vistaDisabled() const; #endif @@ -342,7 +343,7 @@ QWizardHeader::QWizardHeader(QWidget *parent) layout->addWidget(logoLabel, 1, 5, 5, 1); } -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) bool QWizardHeader::vistaDisabled() const { bool styleDisabled = false; @@ -362,7 +363,7 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title, Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat) { bool modern = ((info.wizStyle == QWizard::ModernStyle) -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) || ((info.wizStyle == QWizard::AeroStyle && QVistaHelper::vistaState() == QVistaHelper::Classic) || vistaDisabled()) #endif @@ -525,7 +526,7 @@ void QWizardPagePrivate::_q_updateCachedCompleteState() class QWizardAntiFlickerWidget : public QWidget { public: -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) QWizardPrivate *wizardPrivate; QWizardAntiFlickerWidget(QWizard *wizard, QWizardPrivate *wizardPrivate) : QWidget(wizard) @@ -572,7 +573,7 @@ public: , titleLabel(0) , subTitleLabel(0) , bottomRuler(0) -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) , vistaHelper(0) , vistaInitPending(false) , vistaState(QVistaHelper::Dirty) @@ -586,7 +587,7 @@ public: { std::fill(btns, btns + QWizard::NButtons, static_cast<QAbstractButton *>(0)); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) vistaInitPending = true; @@ -611,7 +612,7 @@ public: void setButtonLayout(const QWizard::WizardButton *array, int size); bool buttonLayoutContains(QWizard::WizardButton which); void updatePixmap(QWizard::WizardPixmap which); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) bool vistaDisabled() const; bool isVistaThemeEnabled(QVistaHelper::VistaState state) const; bool handleAeroStyleChange(); @@ -677,7 +678,7 @@ public: QHBoxLayout *buttonLayout; QGridLayout *mainLayout; -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) QVistaHelper *vistaHelper; bool vistaInitPending; QVistaHelper::VistaState vistaState; @@ -692,7 +693,7 @@ public: static QString buttonDefaultText(int wstyle, int which, const QWizardPrivate *wizardPrivate) { -#if defined(QT_NO_STYLE_WINDOWSVISTA) +#if !QT_CONFIG(style_windowsvista) Q_UNUSED(wizardPrivate); #endif const bool macStyle = (wstyle == QWizard::MacStyle); @@ -730,7 +731,7 @@ void QWizardPrivate::init() opts = QWizard::HelpButtonOnRight; } -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) vistaHelper = new QVistaHelper(q); #endif @@ -959,7 +960,7 @@ QWizardLayoutInfo QWizardPrivate::layoutInfoForCurrentPage() info.wizStyle = wizStyle; if (info.wizStyle == QWizard::AeroStyle -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) && (QVistaHelper::vistaState() == QVistaHelper::Classic || vistaDisabled()) #endif ) @@ -1337,7 +1338,7 @@ void QWizardPrivate::updateMinMaxSizes(const QWizardLayoutInfo &info) Q_Q(QWizard); int extraHeight = 0; -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (isVistaThemeEnabled()) extraHeight = vistaHelper->titleBarSize() + vistaHelper->topOffset(); #endif @@ -1560,7 +1561,7 @@ void QWizardPrivate::updatePixmap(QWizard::WizardPixmap which) } } -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) bool QWizardPrivate::vistaDisabled() const { Q_Q(const QWizard); @@ -1642,7 +1643,7 @@ bool QWizardPrivate::handleAeroStyleChange() bool QWizardPrivate::isVistaThemeEnabled() const { -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) return isVistaThemeEnabled(QVistaHelper::VistaAero) || isVistaThemeEnabled(QVistaHelper::VistaBasic); #else @@ -1720,7 +1721,7 @@ void QWizardPrivate::_q_updateButtonStates() if (QPushButton *finishPush = qobject_cast<QPushButton *>(btn.finish)) finishPush->setDefault(!canContinue && useDefault); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (isVistaThemeEnabled()) { vistaHelper->backButton()->setEnabled(btn.back->isEnabled()); vistaHelper->backButton()->setVisible(backButtonVisible); @@ -1788,7 +1789,7 @@ QPixmap QWizardPrivate::findDefaultBackgroundPixmap() #endif -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) { if (wizardPrivate->isVistaThemeEnabled()) { @@ -2556,7 +2557,7 @@ void QWizard::setWizardStyle(WizardStyle style) const bool styleChange = style != d->wizStyle; -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) const bool aeroStyleChange = d->vistaInitPending || d->vistaStateChanged || (styleChange && (style == AeroStyle || d->wizStyle == AeroStyle)); d->vistaStateChanged = false; @@ -2564,14 +2565,14 @@ void QWizard::setWizardStyle(WizardStyle style) #endif if (styleChange -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) || aeroStyleChange #endif ) { d->disableUpdates(); d->wizStyle = style; d->updateButtonTexts(); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (aeroStyleChange) { //Send a resizeevent since the antiflicker widget probably needs a new size //because of the backbutton in the window title @@ -2582,7 +2583,7 @@ void QWizard::setWizardStyle(WizardStyle style) d->updateLayout(); updateGeometry(); d->enableUpdates(); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) // Delay initialization when activating Aero style fails due to missing native window. if (aeroStyleChange && !d->handleAeroStyleChange() && d->wizStyle == AeroStyle) d->vistaInitPending = true; @@ -2816,7 +2817,7 @@ void QWizard::setButton(WizardButton which, QAbstractButton *button) QAbstractButton *QWizard::button(WizardButton which) const { Q_D(const QWizard); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (d->wizStyle == AeroStyle && which == BackButton) return d->vistaHelper->backButton(); #endif @@ -3176,7 +3177,7 @@ bool QWizard::event(QEvent *event) d->setStyle(style()); d->updateLayout(); } -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) else if (event->type() == QEvent::Show && d->vistaInitPending) { d->vistaInitPending = false; // Do not force AeroStyle when in Classic theme. @@ -3211,7 +3212,7 @@ void QWizard::resizeEvent(QResizeEvent *event) { Q_D(QWizard); int heightOffset = 0; -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (d->isVistaThemeEnabled()) { heightOffset = d->vistaHelper->topOffset(); if (d->isVistaThemeEnabled(QVistaHelper::VistaAero)) @@ -3219,7 +3220,7 @@ void QWizard::resizeEvent(QResizeEvent *event) } #endif d->antiFlickerWidget->resize(event->size().width(), event->size().height() - heightOffset); -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) if (d->isVistaThemeEnabled()) d->vistaHelper->resizeEvent(event); #endif @@ -3240,7 +3241,7 @@ void QWizard::paintEvent(QPaintEvent * event) QPainter painter(this); painter.drawPixmap(0, (height() - backgroundPixmap.height()) / 2, backgroundPixmap); } -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) else if (d->isVistaThemeEnabled()) { if (d->isVistaThemeEnabled(QVistaHelper::VistaBasic)) { QPainter painter(this); @@ -3260,7 +3261,7 @@ void QWizard::paintEvent(QPaintEvent * event) */ bool QWizard::nativeEvent(const QByteArray &eventType, void *message, long *result) { -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) Q_D(QWizard); if (d->isVistaThemeEnabled() && eventType == "windows_generic_MSG") { MSG *windowsMessage = static_cast<MSG *>(message); diff --git a/src/widgets/dialogs/qwizard_win.cpp b/src/widgets/dialogs/qwizard_win.cpp index 9d8e7c4b66..80e37dab25 100644 --- a/src/widgets/dialogs/qwizard_win.cpp +++ b/src/widgets/dialogs/qwizard_win.cpp @@ -38,7 +38,10 @@ ****************************************************************************/ #ifndef QT_NO_WIZARD -#ifndef QT_NO_STYLE_WINDOWSVISTA + +#include <QtWidgets/private/qtwidgetsglobal_p.h> + +#if QT_CONFIG(style_windowsvista) #include "qwizard_win_p.h" #include <private/qapplication_p.h> @@ -722,6 +725,6 @@ int QVistaHelper::topOffset() QT_END_NAMESPACE -#endif // QT_NO_STYLE_WINDOWSVISTA +#endif // style_windowsvista #endif // QT_NO_WIZARD diff --git a/src/widgets/dialogs/qwizard_win_p.h b/src/widgets/dialogs/qwizard_win_p.h index 288e7adaf5..bbba53b879 100644 --- a/src/widgets/dialogs/qwizard_win_p.h +++ b/src/widgets/dialogs/qwizard_win_p.h @@ -54,7 +54,7 @@ #include <QtWidgets/private/qtwidgetsglobal_p.h> #ifndef QT_NO_WIZARD -#ifndef QT_NO_STYLE_WINDOWSVISTA +#if QT_CONFIG(style_windowsvista) #include <qobject.h> #include <qwidget.h> @@ -156,6 +156,6 @@ private: QT_END_NAMESPACE -#endif // QT_NO_STYLE_WINDOWSVISTA +#endif // style_windowsvista #endif // QT_NO_WIZARD #endif // QWIZARD_WIN_P_H diff --git a/src/widgets/graphicsview/qgraphicsproxywidget_p.h b/src/widgets/graphicsview/qgraphicsproxywidget_p.h index 0797ba7066..4624772993 100644 --- a/src/widgets/graphicsview/qgraphicsproxywidget_p.h +++ b/src/widgets/graphicsview/qgraphicsproxywidget_p.h @@ -80,7 +80,7 @@ public: void embedSubWindow(QWidget *); void unembedSubWindow(QWidget *); - bool isProxyWidget() const; + bool isProxyWidget() const override; QPointer<QWidget> widget; QPointer<QWidget> lastWidgetUnderMouse; diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp index 46d2a4c1aa..660620a5d9 100644 --- a/src/widgets/graphicsview/qgraphicswidget_p.cpp +++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp @@ -52,7 +52,7 @@ #include <QtWidgets/qstyleoption.h> #include <QtWidgets/QStyleOptionTitleBar> #include <QtWidgets/QGraphicsSceneMouseEvent> -#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && QT_CONFIG(style_mac) # include <private/qmacstyle_mac_p.h> #endif diff --git a/src/widgets/itemviews/qabstractitemview_p.h b/src/widgets/itemviews/qabstractitemview_p.h index f8ada6df08..d21ae573cd 100644 --- a/src/widgets/itemviews/qabstractitemview_p.h +++ b/src/widgets/itemviews/qabstractitemview_p.h @@ -93,12 +93,12 @@ class QEmptyModel : public QAbstractItemModel { public: explicit QEmptyModel(QObject *parent = 0) : QAbstractItemModel(parent) {} - QModelIndex index(int, int, const QModelIndex &) const { return QModelIndex(); } - QModelIndex parent(const QModelIndex &) const { return QModelIndex(); } - int rowCount(const QModelIndex &) const { return 0; } - int columnCount(const QModelIndex &) const { return 0; } - bool hasChildren(const QModelIndex &) const { return false; } - QVariant data(const QModelIndex &, int) const { return QVariant(); } + QModelIndex index(int, int, const QModelIndex &) const override { return QModelIndex(); } + QModelIndex parent(const QModelIndex &) const override { return QModelIndex(); } + int rowCount(const QModelIndex &) const override { return 0; } + int columnCount(const QModelIndex &) const override { return 0; } + bool hasChildren(const QModelIndex &) const override { return false; } + QVariant data(const QModelIndex &, int) const override { return QVariant(); } }; class Q_AUTOTEST_EXPORT QAbstractItemViewPrivate : public QAbstractScrollAreaPrivate @@ -323,7 +323,7 @@ public: } // reimplemented from QAbstractScrollAreaPrivate - virtual QPoint contentsOffset() const { + QPoint contentsOffset() const override { Q_Q(const QAbstractItemView); return QPoint(q->horizontalOffset(), q->verticalOffset()); } diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 0356d79ff7..6affe7af95 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -117,7 +117,7 @@ public: void resizeSections(QHeaderView::ResizeMode globalMode, bool useGlobalMode = false); void _q_sectionsRemoved(const QModelIndex &,int,int); void _q_layoutAboutToBeChanged(); - void _q_layoutChanged(); + void _q_layoutChanged() override; bool isSectionSelected(int section) const; bool isFirstVisibleSection(int section) const; diff --git a/src/widgets/itemviews/qitemeditorfactory.h b/src/widgets/itemviews/qitemeditorfactory.h index 785d4d84ea..dea9bce794 100644 --- a/src/widgets/itemviews/qitemeditorfactory.h +++ b/src/widgets/itemviews/qitemeditorfactory.h @@ -81,8 +81,8 @@ public: inline QStandardItemEditorCreator() : propertyName(T::staticMetaObject.userProperty().name()) {} - inline QWidget *createWidget(QWidget *parent) const { return new T(parent); } - inline QByteArray valuePropertyName() const { return propertyName; } + inline QWidget *createWidget(QWidget *parent) const override { return new T(parent); } + inline QByteArray valuePropertyName() const override { return propertyName; } private: QByteArray propertyName; diff --git a/src/widgets/itemviews/qlistview_p.h b/src/widgets/itemviews/qlistview_p.h index 42cb6b4eef..47effcdfd9 100644 --- a/src/widgets/itemviews/qlistview_p.h +++ b/src/widgets/itemviews/qlistview_p.h @@ -69,28 +69,28 @@ class QListViewItem friend class QListModeViewBase; friend class QIconModeViewBase; public: - inline QListViewItem() + Q_DECL_CONSTEXPR QListViewItem() : x(-1), y(-1), w(0), h(0), indexHint(-1), visited(0xffff) {} - inline QListViewItem(QRect r, int i) + Q_DECL_CONSTEXPR QListViewItem(QRect r, int i) : x(r.x()), y(r.y()), w(qMin(r.width(), SHRT_MAX)), h(qMin(r.height(), SHRT_MAX)), indexHint(i), visited(0xffff) {} - inline bool operator==(const QListViewItem &other) const { + Q_DECL_CONSTEXPR bool operator==(const QListViewItem &other) const { return (x == other.x && y == other.y && w == other.w && h == other.h && indexHint == other.indexHint); } - inline bool operator!=(const QListViewItem &other) const + Q_DECL_CONSTEXPR bool operator!=(const QListViewItem &other) const { return !(*this == other); } - inline bool isValid() const + Q_DECL_CONSTEXPR bool isValid() const { return rect().isValid() && (indexHint > -1); } - inline void invalidate() + Q_DECL_RELAXED_CONSTEXPR void invalidate() { x = -1; y = -1; w = 0; h = 0; } - inline void resize(const QSize &size) + Q_DECL_RELAXED_CONSTEXPR void resize(QSize size) { w = qMin(size.width(), SHRT_MAX); h = qMin(size.height(), SHRT_MAX); } - inline void move(const QPoint &position) + Q_DECL_RELAXED_CONSTEXPR void move(QPoint position) { x = position.x(); y = position.y(); } - inline int width() const { return w; } - inline int height() const { return h; } + Q_DECL_CONSTEXPR int width() const { return w; } + Q_DECL_CONSTEXPR int height() const { return h; } private: - inline QRect rect() const + Q_DECL_CONSTEXPR QRect rect() const { return QRect(x, y, w, h); } int x, y; short w, h; @@ -209,24 +209,24 @@ public: int batchSavedPosition; //reimplementations - int itemIndex(const QListViewItem &item) const { return item.indexHint; } - QListViewItem indexToListViewItem(const QModelIndex &index) const; - bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max); - void clear(); - void setRowCount(int rowCount) { flowPositions.resize(rowCount); } - QVector<QModelIndex> intersectingSet(const QRect &area) const; - void dataChanged(const QModelIndex &, const QModelIndex &); + int itemIndex(const QListViewItem &item) const override { return item.indexHint; } + QListViewItem indexToListViewItem(const QModelIndex &index) const override; + bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max) override; + void clear() override; + void setRowCount(int rowCount) override { flowPositions.resize(rowCount); } + QVector<QModelIndex> intersectingSet(const QRect &area) const override; + void dataChanged(const QModelIndex &, const QModelIndex &) override; int horizontalScrollToValue(int index, QListView::ScrollHint hint, - bool leftOf, bool rightOf,const QRect &area, const QRect &rect) const; + bool leftOf, bool rightOf,const QRect &area, const QRect &rect) const override; int verticalScrollToValue(int index, QListView::ScrollHint hint, - bool above, bool below, const QRect &area, const QRect &rect) const; - void scrollContentsBy(int dx, int dy, bool scrollElasticBand); - QRect mapToViewport(const QRect &rect) const; - int horizontalOffset() const; - int verticalOffset() const; - void updateHorizontalScrollBar(const QSize &step); - void updateVerticalScrollBar(const QSize &step); + bool above, bool below, const QRect &area, const QRect &rect) const override; + void scrollContentsBy(int dx, int dy, bool scrollElasticBand) override; + QRect mapToViewport(const QRect &rect) const override; + int horizontalOffset() const override; + int verticalOffset() const override; + void updateHorizontalScrollBar(const QSize &step) override; + void updateVerticalScrollBar(const QSize &step) override; #ifndef QT_NO_DRAGANDDROP // The next two methods are to be used on LefToRight flow only. @@ -261,24 +261,24 @@ public: QVector<QModelIndex> *interSectingVector; //used from within intersectingSet //reimplementations - int itemIndex(const QListViewItem &item) const; - QListViewItem indexToListViewItem(const QModelIndex &index) const; - bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max); - void clear(); - void setRowCount(int rowCount); - QVector<QModelIndex> intersectingSet(const QRect &area) const; - - void scrollContentsBy(int dx, int dy, bool scrollElasticBand); - void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); - void appendHiddenRow(int row); - void removeHiddenRow(int row); - void setPositionForIndex(const QPoint &position, const QModelIndex &index); + int itemIndex(const QListViewItem &item) const override; + QListViewItem indexToListViewItem(const QModelIndex &index) const override; + bool doBatchedItemLayout(const QListViewLayoutInfo &info, int max) override; + void clear() override; + void setRowCount(int rowCount) override; + QVector<QModelIndex> intersectingSet(const QRect &area) const override; + + void scrollContentsBy(int dx, int dy, bool scrollElasticBand) override; + void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) override; + void appendHiddenRow(int row) override; + void removeHiddenRow(int row) override; + void setPositionForIndex(const QPoint &position, const QModelIndex &index) override; #ifndef QT_NO_DRAGANDDROP - bool filterDragMoveEvent(QDragMoveEvent *); - bool filterDragLeaveEvent(QDragLeaveEvent *); - bool filterDropEvent(QDropEvent *e); - bool filterStartDrag(Qt::DropActions); + bool filterDragMoveEvent(QDragMoveEvent *) override; + bool filterDragLeaveEvent(QDragLeaveEvent *) override; + bool filterDropEvent(QDropEvent *e) override; + bool filterStartDrag(Qt::DropActions) override; #endif private: @@ -349,18 +349,18 @@ public: QModelIndex closestIndex(const QRect &target, const QVector<QModelIndex> &candidates) const; QSize itemSize(const QStyleOptionViewItem &option, const QModelIndex &index) const; - bool selectionAllowed(const QModelIndex &index) const + bool selectionAllowed(const QModelIndex &index) const override { if (viewMode == QListView::ListMode && !showElasticBand) return index.isValid(); return true; } int horizontalScrollToValue(const QModelIndex &index, const QRect &rect, QListView::ScrollHint hint) const; int verticalScrollToValue(const QModelIndex &index, const QRect &rect, QListView::ScrollHint hint) const; QItemSelection selection(const QRect &rect) const; - void selectAll(QItemSelectionModel::SelectionFlags command); + void selectAll(QItemSelectionModel::SelectionFlags command) override; #ifndef QT_NO_DRAGANDDROP - virtual QAbstractItemView::DropIndicatorPosition position(const QPoint &pos, const QRect &rect, const QModelIndex &idx) const; - bool dropOn(QDropEvent *event, int *row, int *col, QModelIndex *index); + QAbstractItemView::DropIndicatorPosition position(const QPoint &pos, const QRect &rect, const QModelIndex &idx) const override; + bool dropOn(QDropEvent *event, int *row, int *col, QModelIndex *index) override; #endif inline void setGridSize(const QSize &size) { grid = size; } @@ -383,7 +383,7 @@ public: void scrollElasticBandBy(int dx, int dy); - QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const; + QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const override; void emitIndexesMoved(const QModelIndexList &indexes) { emit q_func()->indexesMoved(indexes); } diff --git a/src/widgets/itemviews/qlistwidget_p.h b/src/widgets/itemviews/qlistwidget_p.h index eaddfc6e6e..0594fd511e 100644 --- a/src/widgets/itemviews/qlistwidget_p.h +++ b/src/widgets/itemviews/qlistwidget_p.h @@ -93,22 +93,22 @@ public: QListWidgetItem *take(int row); void move(int srcRow, int dstRow); - int rowCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; QModelIndex index(QListWidgetItem *item) const; - QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; + QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - bool setData(const QModelIndex &index, const QVariant &value, int role); + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role) override; - QMap<int, QVariant> itemData(const QModelIndex &index) const; + QMap<int, QVariant> itemData(const QModelIndex &index) const override; - bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()); - bool removeRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()); + bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override; + bool removeRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override; - Qt::ItemFlags flags(const QModelIndex &index) const; + Qt::ItemFlags flags(const QModelIndex &index) const override; - void sort(int column, Qt::SortOrder order); + void sort(int column, Qt::SortOrder order) override; void ensureSorted(int column, Qt::SortOrder order, int start, int end); static bool itemLessThan(const QPair<QListWidgetItem*,int> &left, const QPair<QListWidgetItem*,int> &right); @@ -122,12 +122,12 @@ public: void itemChanged(QListWidgetItem *item); // dnd - QStringList mimeTypes() const; - QMimeData *mimeData(const QModelIndexList &indexes) const; + QStringList mimeTypes() const override; + QMimeData *mimeData(const QModelIndexList &indexes) const override; #ifndef QT_NO_DRAGANDDROP bool dropMimeData(const QMimeData *data, Qt::DropAction action, - int row, int column, const QModelIndex &parent); - Qt::DropActions supportedDropActions() const; + int row, int column, const QModelIndex &parent) override; + Qt::DropActions supportedDropActions() const override; #endif QMimeData *internalMimeData() const; diff --git a/src/widgets/itemviews/qtablewidget_p.h b/src/widgets/itemviews/qtablewidget_p.h index 313577befe..2db7337cd6 100644 --- a/src/widgets/itemviews/qtablewidget_p.h +++ b/src/widgets/itemviews/qtablewidget_p.h @@ -99,11 +99,11 @@ public: QTableModel(int rows, int columns, QTableWidget *parent); ~QTableModel(); - bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()); - bool insertColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()); + bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override; + bool insertColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()) override; - bool removeRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()); - bool removeColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()); + bool removeRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override; + bool removeColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()) override; void setItem(int row, int column, QTableWidgetItem *item); QTableWidgetItem *takeItem(int row, int column); @@ -118,7 +118,7 @@ public: QTableWidgetItem *horizontalHeaderItem(int section); QTableWidgetItem *verticalHeaderItem(int section); - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override { return QAbstractTableModel::index(row, column, parent); } QModelIndex index(const QTableWidgetItem *item) const; @@ -126,21 +126,21 @@ public: void setRowCount(int rows); void setColumnCount(int columns); - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - bool setData(const QModelIndex &index, const QVariant &value, int role); - bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles); + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role) override; + bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override; - QMap<int, QVariant> itemData(const QModelIndex &index) const; + QMap<int, QVariant> itemData(const QModelIndex &index) const override; - QVariant headerData(int section, Qt::Orientation orientation, int role) const; - bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role); + QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) override; - Qt::ItemFlags flags(const QModelIndex &index) const; + Qt::ItemFlags flags(const QModelIndex &index) const override; - void sort(int column, Qt::SortOrder order); + void sort(int column, Qt::SortOrder order) override; static bool itemLessThan(const QPair<QTableWidgetItem*,int> &left, const QPair<QTableWidgetItem*,int> &right); static bool itemGreaterThan(const QPair<QTableWidgetItem*,int> &left, @@ -167,11 +167,11 @@ public: void setItemPrototype(const QTableWidgetItem *item); // dnd - QStringList mimeTypes() const; - QMimeData *mimeData(const QModelIndexList &indexes) const; + QStringList mimeTypes() const override; + QMimeData *mimeData(const QModelIndexList &indexes) const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, - int row, int column, const QModelIndex &parent); - Qt::DropActions supportedDropActions() const; + int row, int column, const QModelIndex &parent) override; + Qt::DropActions supportedDropActions() const override; QMimeData *internalMimeData() const; diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 2d1d1f43d0..9583dd9657 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2194,7 +2194,7 @@ QModelIndex QTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie return QModelIndex(); } int vi = -1; -#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && QT_CONFIG(style_mac) // Selection behavior is slightly different on the Mac. if (d->selectionMode == QAbstractItemView::ExtendedSelection && d->selectionModel diff --git a/src/widgets/itemviews/qtreeview_p.h b/src/widgets/itemviews/qtreeview_p.h index 56f3340966..63af41292b 100644 --- a/src/widgets/itemviews/qtreeview_p.h +++ b/src/widgets/itemviews/qtreeview_p.h @@ -102,8 +102,8 @@ public: return logicalIndex == logicalIndexForTree(); } - QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const; - void adjustViewOptionsForIndex(QStyleOptionViewItem *option, const QModelIndex ¤t) const; + QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const override; + void adjustViewOptionsForIndex(QStyleOptionViewItem *option, const QModelIndex ¤t) const override; #ifndef QT_NO_ANIMATION struct AnimatedOperation : public QVariantAnimation @@ -115,8 +115,8 @@ public: AnimatedOperation() : item(0) { setEasingCurve(QEasingCurve::InOutQuad); } int top() const { return startValue().toInt(); } QRect rect() const { QRect rect = viewport->rect(); rect.moveTop(top()); return rect; } - void updateCurrentValue(const QVariant &) { viewport->update(rect()); } - void updateState(State state, State) { if (state == Stopped) before = after = QPixmap(); } + void updateCurrentValue(const QVariant &) override { viewport->update(rect()); } + void updateState(State state, State) override { if (state == Stopped) before = after = QPixmap(); } } animatedOperation; void prepareAnimatedOperation(int item, QVariantAnimation::Direction d); void beginAnimatedOperation(); @@ -128,11 +128,11 @@ public: void expand(int item, bool emitSignal); void collapse(int item, bool emitSignal); - void _q_columnsAboutToBeRemoved(const QModelIndex &, int, int); - void _q_columnsRemoved(const QModelIndex &, int, int); + void _q_columnsAboutToBeRemoved(const QModelIndex &, int, int) override; + void _q_columnsRemoved(const QModelIndex &, int, int) override; void _q_modelAboutToBeReset(); void _q_sortIndicatorChanged(int column, Qt::SortOrder order); - void _q_modelDestroyed(); + void _q_modelDestroyed() override; void layout(int item, bool recusiveExpanding = false, bool afterIsUninitialized = false); diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index 3bef773187..73c75bbc14 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -164,6 +164,7 @@ public: #endif static bool inPopupMode(); + bool popupActive() Q_DECL_OVERRIDE { return inPopupMode(); } void closePopup(QWidget *popup); void openPopup(QWidget *popup); static void setFocusWidget(QWidget *focus, Qt::FocusReason reason); diff --git a/src/widgets/kernel/qlayoutitem.h b/src/widgets/kernel/qlayoutitem.h index 6f701b9f82..059ff2d470 100644 --- a/src/widgets/kernel/qlayoutitem.h +++ b/src/widgets/kernel/qlayoutitem.h @@ -101,14 +101,14 @@ public: void changeSize(int w, int h, QSizePolicy::Policy hData = QSizePolicy::Minimum, QSizePolicy::Policy vData = QSizePolicy::Minimum); - QSize sizeHint() const; - QSize minimumSize() const; - QSize maximumSize() const; - Qt::Orientations expandingDirections() const; - bool isEmpty() const; - void setGeometry(const QRect&); - QRect geometry() const; - QSpacerItem *spacerItem(); + QSize sizeHint() const override; + QSize minimumSize() const override; + QSize maximumSize() const override; + Qt::Orientations expandingDirections() const override; + bool isEmpty() const override; + void setGeometry(const QRect&) override; + QRect geometry() const override; + QSpacerItem *spacerItem() override; QSizePolicy sizePolicy() const { return sizeP; } private: @@ -126,18 +126,18 @@ public: explicit QWidgetItem(QWidget *w) : wid(w) { } ~QWidgetItem(); - QSize sizeHint() const; - QSize minimumSize() const; - QSize maximumSize() const; - Qt::Orientations expandingDirections() const; - bool isEmpty() const; - void setGeometry(const QRect&); - QRect geometry() const; - virtual QWidget *widget(); - - bool hasHeightForWidth() const; - int heightForWidth(int) const; - QSizePolicy::ControlTypes controlTypes() const; + QSize sizeHint() const override; + QSize minimumSize() const override; + QSize maximumSize() const override; + Qt::Orientations expandingDirections() const override; + bool isEmpty() const override; + void setGeometry(const QRect&) override; + QRect geometry() const override; + QWidget *widget() override; + + bool hasHeightForWidth() const override; + int heightForWidth(int) const override; + QSizePolicy::ControlTypes controlTypes() const override; protected: QWidget *wid; }; @@ -148,10 +148,10 @@ public: explicit QWidgetItemV2(QWidget *widget); ~QWidgetItemV2(); - QSize sizeHint() const; - QSize minimumSize() const; - QSize maximumSize() const; - int heightForWidth(int width) const; + QSize sizeHint() const override; + QSize minimumSize() const override; + QSize maximumSize() const override; + int heightForWidth(int width) const override; private: enum { Dirty = -123, HfwCacheMaxSize = 3 }; diff --git a/src/widgets/styles/qandroidstyle.cpp b/src/widgets/styles/qandroidstyle.cpp index 743166549b..b37dffbe80 100644 --- a/src/widgets/styles/qandroidstyle.cpp +++ b/src/widgets/styles/qandroidstyle.cpp @@ -39,7 +39,7 @@ #include "qandroidstyle_p.h" -#if !defined(QT_NO_STYLE_ANDROID) || defined(QT_PLUGIN) +#if QT_CONFIG(style_android) || defined(QT_PLUGIN) #include <QFile> #include <QFont> @@ -1807,4 +1807,4 @@ QRect QAndroidStyle::AndroidSpinnerControl::subControlRect(const QStyleOptionCom QT_END_NAMESPACE -#endif // !defined(QT_NO_STYLE_ANDROID) || defined(QT_PLUGIN) +#endif // QT_CONFIG(style_android) || defined(QT_PLUGIN) diff --git a/src/widgets/styles/qandroidstyle_p.h b/src/widgets/styles/qandroidstyle_p.h index 4649d90852..caff0afada 100644 --- a/src/widgets/styles/qandroidstyle_p.h +++ b/src/widgets/styles/qandroidstyle_p.h @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_STYLE_ANDROID) +#if QT_CONFIG(style_android) class Q_WIDGETS_EXPORT QAndroidStyle : public QFusionStyle { @@ -388,7 +388,7 @@ private: AndroidCompoundButtonControl *checkBoxControl; }; -#endif // QT_NO_STYLE_ANDROID +#endif // style_android QT_END_NAMESPACE diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 3473ec7fb0..74e4d53dca 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -40,7 +40,7 @@ #include "qfusionstyle_p.h" #include "qfusionstyle_p_p.h" -#if !defined(QT_NO_STYLE_FUSION) || defined(QT_PLUGIN) +#if QT_CONFIG(style_fusion) || defined(QT_PLUGIN) #include "qcommonstyle_p.h" #include <qcombobox.h> #include <qpushbutton.h> @@ -3746,4 +3746,4 @@ QT_END_NAMESPACE #include "moc_qfusionstyle_p.cpp" -#endif // QT_NO_STYLE_FUSION || QT_PLUGIN +#endif // style_fusion|| QT_PLUGIN diff --git a/src/widgets/styles/qfusionstyle_p.h b/src/widgets/styles/qfusionstyle_p.h index 126fb96e78..aac27e51ab 100644 --- a/src/widgets/styles/qfusionstyle_p.h +++ b/src/widgets/styles/qfusionstyle_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_STYLE_FUSION) +#if QT_CONFIG(style_fusion) class QFusionStylePrivate; class QFusionStyle : public QCommonStyle @@ -110,7 +110,7 @@ protected: }; -#endif // QT_NO_STYLE_FUSION +#endif // style_fusion QT_END_NAMESPACE diff --git a/src/widgets/styles/qfusionstyle_p_p.h b/src/widgets/styles/qfusionstyle_p_p.h index 8d1d27d244..169fd9a407 100644 --- a/src/widgets/styles/qfusionstyle_p_p.h +++ b/src/widgets/styles/qfusionstyle_p_p.h @@ -57,7 +57,7 @@ #include <qpa/qplatformtheme.h> #include "private/qguiapplication_p.h" -#ifndef QT_NO_STYLE_FUSION +#if QT_CONFIG(style_fusion) QT_BEGIN_NAMESPACE @@ -147,6 +147,6 @@ public: QT_END_NAMESPACE -#endif // QT_NO_STYLE_FUSION +#endif // style_fusion #endif //QFUSIONSTYLE_P_P_H diff --git a/src/widgets/styles/qmacstyle_mac_p.h b/src/widgets/styles/qmacstyle_mac_p.h index 459784c538..3642424a14 100644 --- a/src/widgets/styles/qmacstyle_mac_p.h +++ b/src/widgets/styles/qmacstyle_mac_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) class QPalette; diff --git a/src/widgets/styles/qstylefactory.cpp b/src/widgets/styles/qstylefactory.cpp index 09cccff4e8..8dc603f8e6 100644 --- a/src/widgets/styles/qstylefactory.cpp +++ b/src/widgets/styles/qstylefactory.cpp @@ -44,20 +44,20 @@ #include "qapplication.h" #include "qwindowsstyle_p.h" -#ifndef QT_NO_STYLE_FUSION +#if QT_CONFIG(style_fusion) #include "qfusionstyle_p.h" -#ifndef QT_NO_STYLE_ANDROID +#if QT_CONFIG(style_android) #include "qandroidstyle_p.h" #endif #endif -#ifndef QT_NO_STYLE_WINDOWSXP +#if QT_CONFIG(style_windowsxp) #include "qwindowsxpstyle_p.h" #endif -#ifndef QT_NO_STYLE_WINDOWSVISTA +#if QT_CONFIG(style_windowsvista) #include "qwindowsvistastyle_p.h" #endif -#if !defined(QT_NO_STYLE_MAC) && defined(Q_OS_MAC) +#if QT_CONFIG(style_mac) # include "qmacstyle_mac_p.h" #endif @@ -103,32 +103,32 @@ QStyle *QStyleFactory::create(const QString& key) { QStyle *ret = 0; QString style = key.toLower(); -#ifndef QT_NO_STYLE_WINDOWS +#if QT_CONFIG(style_windows) if (style == QLatin1String("windows")) ret = new QWindowsStyle; else #endif -#ifndef QT_NO_STYLE_WINDOWSXP +#if QT_CONFIG(style_windowsxp) if (style == QLatin1String("windowsxp")) ret = new QWindowsXPStyle; else #endif -#ifndef QT_NO_STYLE_WINDOWSVISTA +#if QT_CONFIG(style_windowsvista) if (style == QLatin1String("windowsvista")) ret = new QWindowsVistaStyle; else #endif -#ifndef QT_NO_STYLE_FUSION +#if QT_CONFIG(style_fusion) if (style == QLatin1String("fusion")) ret = new QFusionStyle; else #endif -#ifndef QT_NO_STYLE_ANDROID +#if QT_CONFIG(style_android) if (style == QLatin1String("android")) ret = new QAndroidStyle; else #endif -#ifndef QT_NO_STYLE_MAC +#if QT_CONFIG(style_mac) if (style.startsWith(QLatin1String("macintosh"))) { ret = new QMacStyle; # if 0 // Used to be included in Qt4 for Q_WS_MAC @@ -160,29 +160,29 @@ QStringList QStyleFactory::keys() const PluginKeyMap::const_iterator cend = keyMap.constEnd(); for (PluginKeyMap::const_iterator it = keyMap.constBegin(); it != cend; ++it) list.append(it.value()); -#ifndef QT_NO_STYLE_WINDOWS +#if QT_CONFIG(style_windows) if (!list.contains(QLatin1String("Windows"))) list << QLatin1String("Windows"); #endif -#ifndef QT_NO_STYLE_WINDOWSXP +#if QT_CONFIG(style_windowsxp) if (!list.contains(QLatin1String("WindowsXP")) && (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) list << QLatin1String("WindowsXP"); #endif -#ifndef QT_NO_STYLE_WINDOWSVISTA +#if QT_CONFIG(style_windowsvista) if (!list.contains(QLatin1String("WindowsVista")) && (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))) list << QLatin1String("WindowsVista"); #endif -#ifndef QT_NO_STYLE_ANDROID +#if QT_CONFIG(style_android) if (!list.contains(QLatin1String("Android"))) list << QLatin1String("Android"); #endif -#ifndef QT_NO_STYLE_FUSION +#if QT_CONFIG(style_fusion) if (!list.contains(QLatin1String("Fusion"))) list << QLatin1String("Fusion"); #endif -#ifndef QT_NO_STYLE_MAC +#if QT_CONFIG(style_mac) QString mstyle = QLatin1String("Macintosh"); # if 0 // Used to be included in Qt4 for Q_WS_MAC mstyle += QLatin1String(" (aqua)"); diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 83739655af..c12b3285f1 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -37,9 +37,10 @@ ** ****************************************************************************/ +#include <QtWidgets/private/qtwidgetsglobal_p.h> #include "qstyleoption.h" #include "qapplication.h" -#ifdef Q_OS_MAC +#if QT_CONFIG(style_mac) # include "qmacstyle_mac_p.h" #endif #include <qdebug.h> @@ -204,7 +205,7 @@ void QStyleOption::init(const QWidget *widget) if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) state &= ~QStyle::State_Enabled; #endif -#if defined(Q_OS_OSX) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) switch (QMacStyle::widgetSizePolicy(widget)) { case QMacStyle::SizeSmall: state |= QStyle::State_Small; diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index 8e77ae0e44..d63c96bf0e 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -5542,9 +5542,9 @@ QRect QStyleSheetStyle::subControlRect(ComplexControl cc, const QStyleOptionComp } else { sliderlen = maxlen; } - + const int sliderPosition = sb->orientation == Qt::Horizontal && sb->direction == Qt::RightToLeft ? sb->maximum - sb->sliderPosition + sb->minimum : sb->sliderPosition; int sliderstart = (styleOptionSlider.orientation == Qt::Horizontal ? contentRect.left() : contentRect.top()) - + sliderPositionFromValue(sb->minimum, sb->maximum, sb->sliderPosition, + + sliderPositionFromValue(sb->minimum, sb->maximum, sliderPosition, maxlen - sliderlen, sb->upsideDown); QRect sr = (sb->orientation == Qt::Horizontal) diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp index e3bf28608c..a8ee881a30 100644 --- a/src/widgets/styles/qwindowsstyle.cpp +++ b/src/widgets/styles/qwindowsstyle.cpp @@ -40,7 +40,7 @@ #include "qwindowsstyle_p.h" #include "qwindowsstyle_p_p.h" -#if !defined(QT_NO_STYLE_WINDOWS) || defined(QT_PLUGIN) +#if QT_CONFIG(style_windows) || defined(QT_PLUGIN) #include "qapplication.h" #include "qbitmap.h" @@ -2407,4 +2407,4 @@ QT_END_NAMESPACE #include "moc_qwindowsstyle_p.cpp" -#endif // QT_NO_STYLE_WINDOWS +#endif // style_windows diff --git a/src/widgets/styles/qwindowsstyle_p.h b/src/widgets/styles/qwindowsstyle_p.h index 5d68bfeba0..a1d65610ff 100644 --- a/src/widgets/styles/qwindowsstyle_p.h +++ b/src/widgets/styles/qwindowsstyle_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_STYLE_WINDOWS) +#if QT_CONFIG(style_windows) class QWindowsStylePrivate; @@ -106,7 +106,7 @@ private: Q_DECLARE_PRIVATE(QWindowsStyle) }; -#endif // QT_NO_STYLE_WINDOWS +#endif // style_windows QT_END_NAMESPACE diff --git a/src/widgets/styles/qwindowsstyle_p_p.h b/src/widgets/styles/qwindowsstyle_p_p.h index 0c23f4b4a8..5023fd1042 100644 --- a/src/widgets/styles/qwindowsstyle_p_p.h +++ b/src/widgets/styles/qwindowsstyle_p_p.h @@ -55,7 +55,7 @@ #include "qwindowsstyle_p.h" #include "qcommonstyle_p.h" -#ifndef QT_NO_STYLE_WINDOWS +#if QT_CONFIG(style_windows) #include <qlist.h> QT_BEGIN_NAMESPACE @@ -103,7 +103,7 @@ private: QT_END_NAMESPACE -#endif // QT_NO_STYLE_WINDOWS +#endif // style_windows #endif //QWINDOWSSTYLE_P_P_H ; diff --git a/src/widgets/styles/qwindowsvistastyle.cpp b/src/widgets/styles/qwindowsvistastyle.cpp index bf5aad0187..7759df9959 100644 --- a/src/widgets/styles/qwindowsvistastyle.cpp +++ b/src/widgets/styles/qwindowsvistastyle.cpp @@ -46,7 +46,7 @@ #include <private/qapplication_p.h> #include <qpa/qplatformnativeinterface.h> -#if !defined(QT_NO_STYLE_WINDOWSVISTA) || defined(QT_PLUGIN) +#if QT_CONFIG(style_windowsvista) || defined(QT_PLUGIN) QT_BEGIN_NAMESPACE diff --git a/src/widgets/styles/qwindowsvistastyle_p.h b/src/widgets/styles/qwindowsvistastyle_p.h index 0289f404dd..8fbd1dc380 100644 --- a/src/widgets/styles/qwindowsvistastyle_p.h +++ b/src/widgets/styles/qwindowsvistastyle_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) class QWindowsVistaStylePrivate; class QWindowsVistaStyle : public QWindowsXPStyle @@ -103,7 +103,7 @@ private: Q_DECLARE_PRIVATE(QWindowsVistaStyle) friend class QStyleFactory; }; -#endif //QT_NO_STYLE_WINDOWSVISTA +#endif // style_windowsvista QT_END_NAMESPACE diff --git a/src/widgets/styles/qwindowsvistastyle_p_p.h b/src/widgets/styles/qwindowsvistastyle_p_p.h index 4ca47fec2c..18b6f9c3f7 100644 --- a/src/widgets/styles/qwindowsvistastyle_p_p.h +++ b/src/widgets/styles/qwindowsvistastyle_p_p.h @@ -54,7 +54,7 @@ #include <QtWidgets/private/qtwidgetsglobal_p.h> #include "qwindowsvistastyle_p.h" -#if !defined(QT_NO_STYLE_WINDOWSVISTA) +#if QT_CONFIG(style_windowsvista) #include <private/qwindowsxpstyle_p_p.h> #include <private/qstyleanimation_p.h> #include <private/qpaintengine_raster_p.h> @@ -177,6 +177,6 @@ public: QT_END_NAMESPACE -#endif // QT_NO_STYLE_WINDOWSVISTA +#endif // style_windowsvista #endif // QWINDOWSVISTASTYLE_P_P_H diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp index 4ce359a7c4..f999d823e0 100644 --- a/src/widgets/styles/qwindowsxpstyle.cpp +++ b/src/widgets/styles/qwindowsxpstyle.cpp @@ -39,7 +39,7 @@ #include "qwindowsxpstyle_p.h" #include "qwindowsxpstyle_p_p.h" -#if !defined(QT_NO_STYLE_WINDOWSXP) || defined(QT_PLUGIN) +#if QT_CONFIG(style_windowsxp) || defined(QT_PLUGIN) #include <private/qobject_p.h> #include <private/qpaintengine_raster_p.h> diff --git a/src/widgets/styles/qwindowsxpstyle_p.h b/src/widgets/styles/qwindowsxpstyle_p.h index 088178cb5a..62e3af927c 100644 --- a/src/widgets/styles/qwindowsxpstyle_p.h +++ b/src/widgets/styles/qwindowsxpstyle_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_STYLE_WINDOWSXP) +#if QT_CONFIG(style_windowsxp) class QWindowsXPStylePrivate; class QWindowsXPStyle : public QWindowsStyle @@ -102,7 +102,7 @@ private: friend class QStyleFactory; }; -#endif // QT_NO_STYLE_WINDOWSXP +#endif // style_windowsxp QT_END_NAMESPACE diff --git a/src/widgets/styles/qwindowsxpstyle_p_p.h b/src/widgets/styles/qwindowsxpstyle_p_p.h index d6702c8803..fb5210cb07 100644 --- a/src/widgets/styles/qwindowsxpstyle_p_p.h +++ b/src/widgets/styles/qwindowsxpstyle_p_p.h @@ -94,7 +94,7 @@ QT_BEGIN_NAMESPACE // Uncomment define below to build debug assisting code, and output // #define DEBUG_XP_STYLE -#if !defined(QT_NO_STYLE_WINDOWSXP) +#if QT_CONFIG(style_windowsxp) // Declarations ----------------------------------------------------------------------------------- class XPThemeData @@ -338,7 +338,7 @@ inline QMarginsF XPThemeData::themeMargins(const QWidget *w, QPainter *p, int th return theme.margins(propId); } -#endif // QT_NO_STYLE_WINDOWS +#endif // style_windows QT_END_NAMESPACE diff --git a/src/widgets/styles/styles.pri b/src/widgets/styles/styles.pri index 69e13fb6ec..481123f0d4 100644 --- a/src/widgets/styles/styles.pri +++ b/src/widgets/styles/styles.pri @@ -37,51 +37,35 @@ RESOURCES += styles/qstyle.qrc include($$OUT_PWD/qtwidgets-config.pri) -contains( styles, mac ) { +qtConfig(style-mac) { HEADERS += \ styles/qmacstyle_mac_p.h \ styles/qmacstyle_mac_p_p.h OBJECTIVE_SOURCES += styles/qmacstyle_mac.mm LIBS_PRIVATE += -framework Carbon -} else { - DEFINES += QT_NO_STYLE_MAC } -contains( styles, windowsvista ) { - HEADERS += styles/qwindowsvistastyle_p.h - HEADERS += styles/qwindowsvistastyle_p_p.h +qtConfig(style-windowsvista) { + HEADERS += styles/qwindowsvistastyle_p.h styles/qwindowsvistastyle_p_p.h SOURCES += styles/qwindowsvistastyle.cpp -} else { - DEFINES += QT_NO_STYLE_WINDOWSVISTA } -contains( styles, windowsxp ) { - HEADERS += styles/qwindowsxpstyle_p.h - HEADERS += styles/qwindowsxpstyle_p_p.h +qtConfig(style-windowsxp) { + HEADERS += styles/qwindowsxpstyle_p.h styles/qwindowsxpstyle_p_p.h SOURCES += styles/qwindowsxpstyle.cpp -} else { - DEFINES += QT_NO_STYLE_WINDOWSXP } -contains( styles, windows ) { - HEADERS += styles/qwindowsstyle_p.h - HEADERS += styles/qwindowsstyle_p_p.h +qtConfig(style-windows) { + HEADERS += styles/qwindowsstyle_p.h styles/qwindowsstyle_p_p.h SOURCES += styles/qwindowsstyle.cpp -} else { - DEFINES += QT_NO_STYLE_WINDOWS } -contains( styles, fusion ) { - HEADERS += styles/qfusionstyle_p.h - HEADERS += styles/qfusionstyle_p_p.h - SOURCES += styles/qfusionstyle.cpp -} else { - DEFINES += QT_NO_STYLE_FUSION +qtConfig(style-fusion) { + HEADERS += styles/qfusionstyle_p.h styles/qfusionstyle_p_p.h + SOURCES += styles/qfusionstyle.cpp } -contains( styles, android ) { +qtConfig(style-android) { HEADERS += styles/qandroidstyle_p.h SOURCES += styles/qandroidstyle.cpp -} else { - DEFINES += QT_NO_STYLE_ANDROID } diff --git a/src/widgets/util/qflickgesture_p.h b/src/widgets/util/qflickgesture_p.h index fa70806ef7..74a0f2a0f3 100644 --- a/src/widgets/util/qflickgesture_p.h +++ b/src/widgets/util/qflickgesture_p.h @@ -97,9 +97,9 @@ class QFlickGestureRecognizer : public QGestureRecognizer public: QFlickGestureRecognizer(Qt::MouseButton button); - QGesture *create(QObject *target); - QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event); - void reset(QGesture *state); + QGesture *create(QObject *target) override; + QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) override; + void reset(QGesture *state) override; private: Qt::MouseButton button; // NoButton == Touch diff --git a/src/widgets/widgets/qabstractspinbox.h b/src/widgets/widgets/qabstractspinbox.h index d93489e663..ac46894a27 100644 --- a/src/widgets/widgets/qabstractspinbox.h +++ b/src/widgets/widgets/qabstractspinbox.h @@ -117,12 +117,12 @@ public: void setGroupSeparatorShown(bool shown); bool isGroupSeparatorShown() const; - QSize sizeHint() const; - QSize minimumSizeHint() const; + QSize sizeHint() const override; + QSize minimumSizeHint() const override; void interpretText(); - bool event(QEvent *event); + bool event(QEvent *event) override; - QVariant inputMethodQuery(Qt::InputMethodQuery) const; + QVariant inputMethodQuery(Qt::InputMethodQuery) const override; virtual QValidator::State validate(QString &input, int &pos) const; virtual void fixup(QString &input) const; @@ -134,24 +134,24 @@ public Q_SLOTS: void selectAll(); virtual void clear(); protected: - void resizeEvent(QResizeEvent *event); - void keyPressEvent(QKeyEvent *event); - void keyReleaseEvent(QKeyEvent *event); + void resizeEvent(QResizeEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; #ifndef QT_NO_WHEELEVENT - void wheelEvent(QWheelEvent *event); + void wheelEvent(QWheelEvent *event) override; #endif - void focusInEvent(QFocusEvent *event); - void focusOutEvent(QFocusEvent *event); - void contextMenuEvent(QContextMenuEvent *event); - void changeEvent(QEvent *event); - void closeEvent(QCloseEvent *event); - void hideEvent(QHideEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void timerEvent(QTimerEvent *event); - void paintEvent(QPaintEvent *event); - void showEvent(QShowEvent *event); + void focusInEvent(QFocusEvent *event) override; + void focusOutEvent(QFocusEvent *event) override; + void contextMenuEvent(QContextMenuEvent *event) override; + void changeEvent(QEvent *event) override; + void closeEvent(QCloseEvent *event) override; + void hideEvent(QHideEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void timerEvent(QTimerEvent *event) override; + void paintEvent(QPaintEvent *event) override; + void showEvent(QShowEvent *event) override; void initStyleOption(QStyleOptionSpinBox *option) const; QLineEdit *lineEdit() const; diff --git a/src/widgets/widgets/qabstractspinbox_p.h b/src/widgets/widgets/qabstractspinbox_p.h index 47ca10a183..5ec59d899b 100644 --- a/src/widgets/widgets/qabstractspinbox_p.h +++ b/src/widgets/widgets/qabstractspinbox_p.h @@ -156,8 +156,8 @@ class QSpinBoxValidator : public QValidator { public: QSpinBoxValidator(QAbstractSpinBox *qptr, QAbstractSpinBoxPrivate *dptr); - QValidator::State validate(QString &input, int &) const; - void fixup(QString &) const; + QValidator::State validate(QString &input, int &) const override; + void fixup(QString &) const override; private: QAbstractSpinBox *qptr; QAbstractSpinBoxPrivate *dptr; diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 4358e568bf..4519265fb8 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -66,7 +66,7 @@ #include <private/qabstractitemmodel_p.h> #include <private/qabstractscrollarea_p.h> #include <qdebug.h> -#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) && QT_CONFIG(style_mac) #include <private/qcore_mac_p.h> #include <private/qmacstyle_mac_p.h> #include <private/qt_cocoa_helpers_mac_p.h> @@ -1841,7 +1841,7 @@ QLineEdit *QComboBox::lineEdit() const Sets the \a validator to use instead of the current validator. - \note The validator is removed when the editable property becomes \c false. + \note The validator is removed when the \l editable property becomes \c false. */ void QComboBox::setValidator(const QValidator *v) @@ -1876,7 +1876,7 @@ const QValidator *QComboBox::validator() const By default, for an editable combo box, a QCompleter that performs case insensitive inline completion is automatically created. - \note The completer is removed when the \a editable property becomes \c false. + \note The completer is removed when the \l editable property becomes \c false. */ void QComboBox::setCompleter(QCompleter *c) { diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h index 7ca077abf9..6c36359f81 100644 --- a/src/widgets/widgets/qcombobox_p.h +++ b/src/widgets/widgets/qcombobox_p.h @@ -86,13 +86,13 @@ public: QComboBoxListView(QComboBox *cmb = 0) : combo(cmb) {} protected: - void resizeEvent(QResizeEvent *event) + void resizeEvent(QResizeEvent *event) override { resizeContents(viewport()->width(), contentsSize().height()); QListView::resizeEvent(event); } - QStyleOptionViewItem viewOptions() const + QStyleOptionViewItem viewOptions() const override { QStyleOptionViewItem option = QListView::viewOptions(); option.showDecorationSelected = true; @@ -101,7 +101,7 @@ protected: return option; } - void paintEvent(QPaintEvent *e) + void paintEvent(QPaintEvent *e) override { if (combo) { QStyleOptionComboBox opt; @@ -142,7 +142,7 @@ public: setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); setAttribute(Qt::WA_NoMousePropagation); } - QSize sizeHint() const { + QSize sizeHint() const override { return QSize(20, style()->pixelMetric(QStyle::PM_MenuScrollerHeight)); } @@ -156,14 +156,14 @@ protected: fast = false; } - void enterEvent(QEvent *) { + void enterEvent(QEvent *) override { startTimer(); } - void leaveEvent(QEvent *) { + void leaveEvent(QEvent *) override { stopTimer(); } - void timerEvent(QTimerEvent *e) { + void timerEvent(QTimerEvent *e) override { if (e->timerId() == timer.timerId()) { emit doScroll(sliderAction); if (fast) { @@ -172,11 +172,11 @@ protected: } } } - void hideEvent(QHideEvent *) { + void hideEvent(QHideEvent *) override { stopTimer(); } - void mouseMoveEvent(QMouseEvent *e) + void mouseMoveEvent(QMouseEvent *e) override { // Enable fast scrolling if the cursor is directly above or below the popup. const int mouseX = e->pos().x(); @@ -188,7 +188,7 @@ protected: fast = horizontallyInside && verticallyOutside; } - void paintEvent(QPaintEvent *) { + void paintEvent(QPaintEvent *) override { QPainter p(this); QStyleOptionMenuItem menuOpt; menuOpt.init(this); @@ -235,15 +235,15 @@ public Q_SLOTS: void viewDestroyed(); protected: - void changeEvent(QEvent *e); - bool eventFilter(QObject *o, QEvent *e); - void mousePressEvent(QMouseEvent *e); - void mouseReleaseEvent(QMouseEvent *e); - void showEvent(QShowEvent *e); - void hideEvent(QHideEvent *e); - void timerEvent(QTimerEvent *timerEvent); - void leaveEvent(QEvent *e); - void resizeEvent(QResizeEvent *e); + void changeEvent(QEvent *e) override; + bool eventFilter(QObject *o, QEvent *e) override; + void mousePressEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; + void showEvent(QShowEvent *e) override; + void hideEvent(QHideEvent *e) override; + void timerEvent(QTimerEvent *timerEvent) override; + void leaveEvent(QEvent *e) override; + void resizeEvent(QResizeEvent *e) override; QStyleOptionComboBox comboStyleOption() const; Q_SIGNALS: @@ -270,13 +270,13 @@ public: protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, - const QModelIndex &index) const { + const QModelIndex &index) const override { QStyleOptionMenuItem opt = getStyleOption(option, index); painter->fillRect(option.rect, opt.palette.background()); mCombo->style()->drawControl(QStyle::CE_MenuItem, &opt, painter, mCombo); } QSize sizeHint(const QStyleOptionViewItem &option, - const QModelIndex &index) const { + const QModelIndex &index) const override { QStyleOptionMenuItem opt = getStyleOption(option, index); return mCombo->style()->sizeFromContents( QStyle::CT_MenuItem, &opt, option.rect.size(), mCombo); @@ -309,7 +309,7 @@ public: protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, - const QModelIndex &index) const { + const QModelIndex &index) const override { if (isSeparator(index)) { QRect rect = option.rect; if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView*>(option.widget)) @@ -323,7 +323,7 @@ protected: } QSize sizeHint(const QStyleOptionViewItem &option, - const QModelIndex &index) const { + const QModelIndex &index) const override { if (isSeparator(index)) { int pm = mCombo->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, mCombo); return QSize(pm, pm); diff --git a/src/widgets/widgets/qdatetimeedit.h b/src/widgets/widgets/qdatetimeedit.h index c261ce369b..5c9f4e0f9d 100644 --- a/src/widgets/widgets/qdatetimeedit.h +++ b/src/widgets/widgets/qdatetimeedit.h @@ -159,12 +159,12 @@ public: Qt::TimeSpec timeSpec() const; void setTimeSpec(Qt::TimeSpec spec); - QSize sizeHint() const; + QSize sizeHint() const override; - virtual void clear(); - virtual void stepBy(int steps); + void clear() override; + void stepBy(int steps) override; - bool event(QEvent *event); + bool event(QEvent *event) override; Q_SIGNALS: void dateTimeChanged(const QDateTime &dateTime); void timeChanged(const QTime &time); @@ -176,20 +176,20 @@ public Q_SLOTS: void setTime(const QTime &time); protected: - virtual void keyPressEvent(QKeyEvent *event); + void keyPressEvent(QKeyEvent *event) override; #ifndef QT_NO_WHEELEVENT - virtual void wheelEvent(QWheelEvent *event); + void wheelEvent(QWheelEvent *event) override; #endif - virtual void focusInEvent(QFocusEvent *event); - virtual bool focusNextPrevChild(bool next); - virtual QValidator::State validate(QString &input, int &pos) const; - virtual void fixup(QString &input) const; + void focusInEvent(QFocusEvent *event) override; + bool focusNextPrevChild(bool next) override; + QValidator::State validate(QString &input, int &pos) const override; + void fixup(QString &input) const override; virtual QDateTime dateTimeFromText(const QString &text) const; virtual QString textFromDateTime(const QDateTime &dt) const; - virtual StepEnabled stepEnabled() const; - virtual void mousePressEvent(QMouseEvent *event); - virtual void paintEvent(QPaintEvent *event); + StepEnabled stepEnabled() const override; + void mousePressEvent(QMouseEvent *event) override; + void paintEvent(QPaintEvent *event) override; void initStyleOption(QStyleOptionSpinBox *option) const; QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = Q_NULLPTR); diff --git a/src/widgets/widgets/qdatetimeedit_p.h b/src/widgets/widgets/qdatetimeedit_p.h index 6889bda041..730aa0f0b2 100644 --- a/src/widgets/widgets/qdatetimeedit_p.h +++ b/src/widgets/widgets/qdatetimeedit_p.h @@ -167,10 +167,10 @@ private Q_SLOTS: void dateSelectionChanged(); protected: - void hideEvent(QHideEvent *); - void mousePressEvent(QMouseEvent *e); - void mouseReleaseEvent(QMouseEvent *); - bool event(QEvent *e); + void hideEvent(QHideEvent *) override; + void mousePressEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *) override; + bool event(QEvent *e) override; private: QCalendarWidget *verifyCalendarInstance(); diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 1df7259aba..53cb21186f 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -219,8 +219,10 @@ QDockWidgetLayout::~QDockWidgetLayout() bool QDockWidgetLayout::nativeWindowDeco() const { bool floating = parentWidget()->isWindow(); - if (!floating && qobject_cast<QDockWidgetGroupWindow*>(parentWidget()->parentWidget())) - return wmSupportsNativeWindowDeco(); + if (!floating) { + if (auto groupWindow = qobject_cast<const QDockWidgetGroupWindow*>(parentWidget()->parentWidget())) + return groupWindow->hasNativeDecos(); + } return nativeWindowDeco(floating); } @@ -797,8 +799,10 @@ void QDockWidgetPrivate::endDrag(bool abort) if (abort || !mwLayout->plug(state->widgetItem)) { if (hasFeature(this, QDockWidget::DockWidgetFloatable)) { // This QDockWidget will now stay in the floating state. - if (state->ownWidgetItem) + if (state->ownWidgetItem) { delete state->widgetItem; + state->widgetItem = nullptr; + } mwLayout->restore(); QDockWidgetLayout *dwLayout = qobject_cast<QDockWidgetLayout*>(layout); if (!dwLayout->nativeWindowDeco()) { diff --git a/src/widgets/widgets/qmacnativewidget_mac.h b/src/widgets/widgets/qmacnativewidget_mac.h index 84389f16df..a8faffd6be 100644 --- a/src/widgets/widgets/qmacnativewidget_mac.h +++ b/src/widgets/widgets/qmacnativewidget_mac.h @@ -54,11 +54,11 @@ public: QMacNativeWidget(NSView *parentView = Q_NULLPTR); ~QMacNativeWidget(); - QSize sizeHint() const; + QSize sizeHint() const override; NSView *nativeView() const; protected: - bool event(QEvent *ev); + bool event(QEvent *ev) override; }; QT_END_NAMESPACE diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 8df197e05c..aef8b9cbd5 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -183,7 +183,7 @@ class QDockWidgetGroupLayout : public QLayout { QDockAreaLayoutInfo info; QWidgetResizeHandler *resizer; public: - QDockWidgetGroupLayout(QWidget* parent) : QLayout(parent) { + QDockWidgetGroupLayout(QDockWidgetGroupWindow* parent) : QLayout(parent) { setSizeConstraint(QLayout::SetMinAndMaxSize); resizer = new QWidgetResizeHandler(parent); resizer->setMovingEnabled(false); @@ -221,7 +221,7 @@ public: } void setGeometry(const QRect&r) Q_DECL_OVERRIDE { - static_cast<QDockWidgetGroupWindow *>(parent())->destroyOrHideIfEmpty(); + groupWindow()->destroyOrHideIfEmpty(); QDockAreaLayoutInfo *li = layoutInfo(); if (li->isEmpty()) return; @@ -239,7 +239,7 @@ public: bool nativeWindowDeco() const { - return QDockWidgetLayout::wmSupportsNativeWindowDeco(); + return groupWindow()->hasNativeDecos(); } int frameWidth() const @@ -247,6 +247,11 @@ public: return nativeWindowDeco() ? 0 : parentWidget()->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, parentWidget()); } + + QDockWidgetGroupWindow *groupWindow() const + { + return static_cast<QDockWidgetGroupWindow *>(parent()); + } }; bool QDockWidgetGroupWindow::event(QEvent *e) @@ -390,16 +395,49 @@ void QDockWidgetGroupWindow::adjustFlags() flags.setFlag(Qt::WindowCloseButtonHint, top->features() & QDockWidget::DockWidgetClosable); flags &= ~Qt::FramelessWindowHint; } else { + flags &= ~(Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint); flags |= Qt::FramelessWindowHint; } + if (oldFlags != flags) { setWindowFlags(flags); + const bool gainedNativeDecos = (oldFlags & Qt::FramelessWindowHint) && !(flags & Qt::FramelessWindowHint); + const bool lostNativeDecos = !(oldFlags & Qt::FramelessWindowHint) && (flags & Qt::FramelessWindowHint); + + // Adjust the geometry after gaining/losing decos, so that the client area appears always + // at the same place when tabbing + if (lostNativeDecos) { + QRect newGeometry = geometry(); + newGeometry.setTop(frameGeometry().top()); + const int bottomFrame = geometry().top() - frameGeometry().top(); + m_removedFrameSize = QSize((frameSize() - size()).width(), bottomFrame); + setGeometry(newGeometry); + } else if (gainedNativeDecos && m_removedFrameSize.isValid()) { + QRect r = geometry(); + r.adjust(-m_removedFrameSize.width() / 2, 0, + -m_removedFrameSize.width() / 2, -m_removedFrameSize.height()); + setGeometry(r); + m_removedFrameSize = QSize(); + } + show(); // setWindowFlags hides the window } setWindowTitle(top->windowTitle()); setWindowIcon(top->windowIcon()); } + +bool QDockWidgetGroupWindow::hasNativeDecos() const +{ + if (!QDockWidgetLayout::wmSupportsNativeWindowDeco()) + return false; + + if (QDockWidget *dw = topDockWidget()) + return dw->titleBarWidget() == nullptr; + + return true; +} + #endif /****************************************************************************** @@ -1704,6 +1742,9 @@ void QMainWindowLayout::tabChanged() if (activated) emit static_cast<QMainWindow *>(parentWidget())->tabifiedDockWidgetActivated(activated); + if (auto dwgw = qobject_cast<QDockWidgetGroupWindow*>(tb->parentWidget())) + dwgw->adjustFlags(); + if (QWidget *w = centralWidget()) w->raise(); } diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h index 6e8b965431..40336caeba 100644 --- a/src/widgets/widgets/qmainwindowlayout_p.h +++ b/src/widgets/widgets/qmainwindowlayout_p.h @@ -83,9 +83,14 @@ public: QDockWidget *topDockWidget() const; void destroyOrHideIfEmpty(); void adjustFlags(); + bool hasNativeDecos() const; + protected: bool event(QEvent *) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE; + +private: + QSize m_removedFrameSize; }; // This item will be used in the layout for the gap item. We cannot use QWidgetItem directly diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index 183f1c2848..9b39743281 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -160,7 +160,7 @@ #include <QApplication> #include <QStyle> -#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && QT_CONFIG(style_mac) #include <private/qmacstyle_mac_p.h> #endif #include <QChildEvent> diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index 2fff2fc729..a627c86871 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -158,7 +158,7 @@ #include <QMainWindow> #include <QScrollBar> #include <QDebug> -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) #include <private/qmacstyle_mac_p.h> #endif #include <QMdiArea> @@ -295,7 +295,7 @@ static void showToolTip(QHelpEvent *helpEvent, QWidget *widget, const QStyleOpti Q_ASSERT(helpEvent->type() == QEvent::ToolTip); Q_ASSERT(widget); -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) // Native Mac windows don't show tool tip. if (qobject_cast<QMacStyle *>(widget->style())) return; @@ -1076,7 +1076,7 @@ void QMdiSubWindowPrivate::updateCursor() { #ifndef QT_NO_CURSOR Q_Q(QMdiSubWindow); -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(q->style())) return; #endif @@ -1504,7 +1504,7 @@ void QMdiSubWindowPrivate::processClickedSubControl() q->showNormal(); break; case QStyle::SC_TitleBarMinButton: -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(q->style())) { if (q->isMinimized()) q->showNormal(); @@ -1521,7 +1521,7 @@ void QMdiSubWindowPrivate::processClickedSubControl() q->showNormal(); break; case QStyle::SC_TitleBarMaxButton: -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(q->style())) { if (q->isMaximized()) q->showNormal(); @@ -1568,7 +1568,7 @@ QRegion QMdiSubWindowPrivate::getRegion(Operation operation) const } QRegion region; -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(q->style())) return region; #endif @@ -1775,7 +1775,7 @@ bool QMdiSubWindowPrivate::drawTitleBarWhenMaximized() const if (isChildOfTabbedQMdiArea(q)) return false; -#if defined(Q_OS_DARWIN) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) Q_UNUSED(isChildOfQMdiSubWindow); return true; #else @@ -2191,7 +2191,7 @@ void QMdiSubWindowPrivate::setSizeGrip(QSizeGrip *newSizeGrip) return; newSizeGrip->setFixedSize(newSizeGrip->sizeHint()); bool putSizeGripInLayout = layout ? true : false; -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(q->style())) putSizeGripInLayout = false; #endif @@ -2843,7 +2843,7 @@ bool QMdiSubWindow::event(QEvent *event) d->isMaximizeMode = false; d->isWidgetHiddenByUs = false; if (!parent()) { -#if !defined(QT_NO_SIZEGRIP) && defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if !defined(QT_NO_SIZEGRIP) && QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(style())) delete d->sizeGrip; #endif @@ -2938,7 +2938,7 @@ void QMdiSubWindow::showEvent(QShowEvent *showEvent) return; } -#if !defined(QT_NO_SIZEGRIP) && defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if !defined(QT_NO_SIZEGRIP) && QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(style()) && !d->sizeGrip && !(windowFlags() & Qt::FramelessWindowHint)) { d->setSizeGrip(new QSizeGrip(this)); @@ -3333,7 +3333,7 @@ void QMdiSubWindow::mouseMoveEvent(QMouseEvent *mouseEvent) hoverRegion += style()->subControlRect(QStyle::CC_TitleBar, &options, d->hoveredSubControl, this); } -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) if (qobject_cast<QMacStyle *>(style()) && !hoverRegion.isEmpty()) hoverRegion += QRegion(0, 0, width(), d->titleBarHeight(options)); #endif @@ -3543,7 +3543,7 @@ QSize QMdiSubWindow::minimumSizeHint() const int sizeGripHeight = 0; if (d->sizeGrip && d->sizeGrip->isVisibleTo(const_cast<QMdiSubWindow *>(this))) sizeGripHeight = d->sizeGrip->height(); -#if defined(Q_OS_MAC) && !defined(QT_NO_STYLE_MAC) +#if QT_CONFIG(style_mac) else if (parent() && qobject_cast<QMacStyle *>(style()) && !d->sizeGrip) sizeGripHeight = style()->pixelMetric(QStyle::PM_SizeGripSize, 0, this); #endif diff --git a/src/widgets/widgets/qmdisubwindow_p.h b/src/widgets/widgets/qmdisubwindow_p.h index 650d3b0bfb..33fa73eb0d 100644 --- a/src/widgets/widgets/qmdisubwindow_p.h +++ b/src/widgets/widgets/qmdisubwindow_p.h @@ -80,7 +80,7 @@ public: mdiChild = child; } - void *qt_metacast(const char *classname) + void *qt_metacast(const char *classname) override { if (classname && strcmp(classname, "ControlElement") == 0) return this; diff --git a/src/widgets/widgets/qmenubar.h b/src/widgets/widgets/qmenubar.h index ec15155710..7ad205b77a 100644 --- a/src/widgets/widgets/qmenubar.h +++ b/src/widgets/widgets/qmenubar.h @@ -86,9 +86,9 @@ public: void setDefaultUp(bool); bool isDefaultUp() const; - QSize sizeHint() const; - QSize minimumSizeHint() const; - int heightForWidth(int) const; + QSize sizeHint() const override; + QSize minimumSizeHint() const override; + int heightForWidth(int) const override; QRect actionGeometry(QAction *) const; QAction *actionAt(const QPoint &) const; @@ -104,27 +104,27 @@ public: void setNativeMenuBar(bool nativeMenuBar); QPlatformMenuBar *platformMenuBar(); public Q_SLOTS: - virtual void setVisible(bool visible); + void setVisible(bool visible) override; Q_SIGNALS: void triggered(QAction *action); void hovered(QAction *action); protected: - void changeEvent(QEvent *); - void keyPressEvent(QKeyEvent *); - void mouseReleaseEvent(QMouseEvent *); - void mousePressEvent(QMouseEvent *); - void mouseMoveEvent(QMouseEvent *); - void leaveEvent(QEvent *); - void paintEvent(QPaintEvent *); - void resizeEvent(QResizeEvent *); - void actionEvent(QActionEvent *); - void focusOutEvent(QFocusEvent *); - void focusInEvent(QFocusEvent *); - void timerEvent(QTimerEvent *); - bool eventFilter(QObject *, QEvent *); - bool event(QEvent *); + void changeEvent(QEvent *) override; + void keyPressEvent(QKeyEvent *) override; + void mouseReleaseEvent(QMouseEvent *) override; + void mousePressEvent(QMouseEvent *) override; + void mouseMoveEvent(QMouseEvent *) override; + void leaveEvent(QEvent *) override; + void paintEvent(QPaintEvent *) override; + void resizeEvent(QResizeEvent *) override; + void actionEvent(QActionEvent *) override; + void focusOutEvent(QFocusEvent *) override; + void focusInEvent(QFocusEvent *) override; + void timerEvent(QTimerEvent *) override; + bool eventFilter(QObject *, QEvent *) override; + bool event(QEvent *) override; void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const; private: diff --git a/src/widgets/widgets/qspinbox.h b/src/widgets/widgets/qspinbox.h index 2e77f0be7a..2eb12fd90d 100644 --- a/src/widgets/widgets/qspinbox.h +++ b/src/widgets/widgets/qspinbox.h @@ -91,11 +91,11 @@ public: void setDisplayIntegerBase(int base); protected: - bool event(QEvent *event); - virtual QValidator::State validate(QString &input, int &pos) const; + bool event(QEvent *event) override; + QValidator::State validate(QString &input, int &pos) const override; virtual int valueFromText(const QString &text) const; virtual QString textFromValue(int val) const; - virtual void fixup(QString &str) const; + void fixup(QString &str) const override; public Q_SLOTS: @@ -151,10 +151,10 @@ public: int decimals() const; void setDecimals(int prec); - virtual QValidator::State validate(QString &input, int &pos) const; + QValidator::State validate(QString &input, int &pos) const override; virtual double valueFromText(const QString &text) const; virtual QString textFromValue(double val) const; - virtual void fixup(QString &str) const; + void fixup(QString &str) const override; public Q_SLOTS: void setValue(double val); diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index 9b65dc43d1..a862274a3d 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -1924,19 +1924,15 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) unknown = false; } - // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards - if (unknown && !isReadOnly() - && event->modifiers() != Qt::ControlModifier - && event->modifiers() != (Qt::ControlModifier | Qt::ShiftModifier)) { - QString t = event->text(); - if (!t.isEmpty() && t.at(0).isPrint()) { - insert(t); + if (unknown + && !isReadOnly() + && isAcceptableInput(event)) { + insert(event->text()); #ifndef QT_NO_COMPLETER - complete(event->key()); + complete(event->key()); #endif - event->accept(); - return; - } + event->accept(); + return; } if (unknown) diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h index d4a4534fb5..b9340c0aff 100644 --- a/src/widgets/widgets/qwidgetlinecontrol_p.h +++ b/src/widgets/widgets/qwidgetlinecontrol_p.h @@ -64,6 +64,7 @@ #include "QtCore/qpoint.h" #include "QtWidgets/qcompleter.h" #include "QtCore/qthread.h" +#include "QtGui/private/qinputcontrol_p.h" #include "qplatformdefs.h" @@ -76,13 +77,14 @@ QT_BEGIN_NAMESPACE -class Q_WIDGETS_EXPORT QWidgetLineControl : public QObject +class Q_WIDGETS_EXPORT QWidgetLineControl : public QInputControl { Q_OBJECT public: QWidgetLineControl(const QString &txt = QString()) - : m_cursor(0), m_preeditCursor(0), m_cursorWidth(0), m_layoutDirection(Qt::LayoutDirectionAuto), + : QInputControl(LineEdit) + , m_cursor(0), m_preeditCursor(0), m_cursorWidth(0), m_layoutDirection(Qt::LayoutDirectionAuto), m_hideCursor(false), m_separator(0), m_readOnly(0), m_dragEnabled(0), m_echoMode(0), m_textDirty(0), m_selDirty(0), m_validInput(1), m_blinkStatus(0), m_blinkEnabled(false), m_blinkTimer(0), m_deleteAllTimer(0), diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index 47806a194e..f5672bd87a 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -848,21 +848,21 @@ void QWidgetTextControl::redo() } QWidgetTextControl::QWidgetTextControl(QObject *parent) - : QObject(*new QWidgetTextControlPrivate, parent) + : QInputControl(QInputControl::TextEdit, *new QWidgetTextControlPrivate, parent) { Q_D(QWidgetTextControl); d->init(); } QWidgetTextControl::QWidgetTextControl(const QString &text, QObject *parent) - : QObject(*new QWidgetTextControlPrivate, parent) + : QInputControl(QInputControl::TextEdit, *new QWidgetTextControlPrivate, parent) { Q_D(QWidgetTextControl); d->init(Qt::RichText, text); } QWidgetTextControl::QWidgetTextControl(QTextDocument *doc, QObject *parent) - : QObject(*new QWidgetTextControlPrivate, parent) + : QInputControl(QInputControl::TextEdit, *new QWidgetTextControlPrivate, parent) { Q_D(QWidgetTextControl); d->init(Qt::RichText, QString(), doc); @@ -1361,14 +1361,7 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) process: { - // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards - if (e->modifiers() == Qt::ControlModifier - || e->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) { - e->ignore(); - return; - } - QString text = e->text(); - if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t'))) { + if (q->isAcceptableInput(e)) { if (overwriteMode // no need to call deleteChar() if we have a selection, insertText // does it already @@ -1376,7 +1369,7 @@ process: && !cursor.atBlockEnd()) cursor.deleteChar(); - cursor.insertText(text); + cursor.insertText(e->text()); selectionChanged(); } else { e->ignore(); diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h index b45f4fff74..f540a3c9ad 100644 --- a/src/widgets/widgets/qwidgettextcontrol_p.h +++ b/src/widgets/widgets/qwidgettextcontrol_p.h @@ -63,6 +63,7 @@ #include <QtGui/qtextdocumentfragment.h> #include <QtGui/qclipboard.h> #include <QtCore/qmimedata.h> +#include <QtGui/private/qinputcontrol_p.h> QT_BEGIN_NAMESPACE @@ -75,7 +76,7 @@ class QAbstractScrollArea; class QEvent; class QTimerEvent; -class Q_WIDGETS_EXPORT QWidgetTextControl : public QObject +class Q_WIDGETS_EXPORT QWidgetTextControl : public QInputControl { Q_OBJECT Q_DECLARE_PRIVATE(QWidgetTextControl) |