| Line | Source Code | Coverage |
|---|
| 1 | /**************************************************************************** | - |
| 2 | ** | - |
| 3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
| 4 | ** Contact: http://www.qt-project.org/legal | - |
| 5 | ** | - |
| 6 | ** This file is part of the QtCore module of the Qt Toolkit. | - |
| 7 | ** | - |
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ | - |
| 9 | ** Commercial License Usage | - |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in | - |
| 11 | ** accordance with the commercial license agreement provided with the | - |
| 12 | ** Software or, alternatively, in accordance with the terms contained in | - |
| 13 | ** a written agreement between you and Digia. For licensing terms and | - |
| 14 | ** conditions see http://qt.digia.com/licensing. For further information | - |
| 15 | ** use the contact form at http://qt.digia.com/contact-us. | - |
| 16 | ** | - |
| 17 | ** GNU Lesser General Public License Usage | - |
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - |
| 19 | ** General Public License version 2.1 as published by the Free Software | - |
| 20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | - |
| 21 | ** packaging of this file. Please review the following information to | - |
| 22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | - |
| 23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | - |
| 24 | ** | - |
| 25 | ** In addition, as a special exception, Digia gives you certain additional | - |
| 26 | ** rights. These rights are described in the Digia Qt LGPL Exception | - |
| 27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | - |
| 28 | ** | - |
| 29 | ** GNU General Public License Usage | - |
| 30 | ** Alternatively, this file may be used under the terms of the GNU | - |
| 31 | ** General Public License version 3.0 as published by the Free Software | - |
| 32 | ** Foundation and appearing in the file LICENSE.GPL included in the | - |
| 33 | ** packaging of this file. Please review the following information to | - |
| 34 | ** ensure the GNU General Public License version 3.0 requirements will be | - |
| 35 | ** met: http://www.gnu.org/copyleft/gpl.html. | - |
| 36 | ** | - |
| 37 | ** | - |
| 38 | ** $QT_END_LICENSE$ | - |
| 39 | ** | - |
| 40 | ****************************************************************************/ | - |
| 41 | | - |
| 42 | #include "qabstracteventdispatcher.h" | - |
| 43 | #include "qabstracteventdispatcher_p.h" | - |
| 44 | #include "qabstractnativeeventfilter.h" | - |
| 45 | | - |
| 46 | #include "qthread.h" | - |
| 47 | #include <private/qthread_p.h> | - |
| 48 | #include <private/qcoreapplication_p.h> | - |
| 49 | #include <private/qfreelist_p.h> | - |
| 50 | | - |
| 51 | QT_BEGIN_NAMESPACE | - |
| 52 | | - |
| 53 | // we allow for 2^24 = 8^8 = 16777216 simultaneously running timers | - |
| 54 | struct QtTimerIdFreeListConstants : public QFreeListDefaultConstants | - |
| 55 | { | - |
| 56 | enum | - |
| 57 | { | - |
| 58 | InitialNextValue = 1, | - |
| 59 | BlockCount = 6 | - |
| 60 | }; | - |
| 61 | | - |
| 62 | static const int Sizes[BlockCount]; | - |
| 63 | }; | - |
| 64 | | - |
| 65 | enum { | - |
| 66 | Offset0 = 0x00000000, | - |
| 67 | Offset1 = 0x00000040, | - |
| 68 | Offset2 = 0x00000100, | - |
| 69 | Offset3 = 0x00001000, | - |
| 70 | Offset4 = 0x00010000, | - |
| 71 | Offset5 = 0x00100000, | - |
| 72 | | - |
| 73 | Size0 = Offset1 - Offset0, | - |
| 74 | Size1 = Offset2 - Offset1, | - |
| 75 | Size2 = Offset3 - Offset2, | - |
| 76 | Size3 = Offset4 - Offset3, | - |
| 77 | Size4 = Offset5 - Offset4, | - |
| 78 | Size5 = QtTimerIdFreeListConstants::MaxIndex - Offset5 | - |
| 79 | }; | - |
| 80 | | - |
| 81 | const int QtTimerIdFreeListConstants::Sizes[QtTimerIdFreeListConstants::BlockCount] = { | - |
| 82 | Size0, | - |
| 83 | Size1, | - |
| 84 | Size2, | - |
| 85 | Size3, | - |
| 86 | Size4, | - |
| 87 | Size5 | - |
| 88 | }; | - |
| 89 | | - |
| 90 | typedef QFreeList<void, QtTimerIdFreeListConstants> QtTimerIdFreeList; | - |
| 91 | Q_GLOBAL_STATIC(QtTimerIdFreeList, timerIdFreeList) never executed: delete x; executed: return thisGlobalStatic.pointer.load();Execution Count:263347 partially evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x)| no Evaluation Count:0 | yes Evaluation Count:42 |
evaluated: !thisGlobalStatic.pointer.load()| yes Evaluation Count:42 | yes Evaluation Count:263305 |
partially evaluated: !thisGlobalStatic.destroyed| yes Evaluation Count:42 | no Evaluation Count:0 |
| 0-263347 |
| 92 | | - |
| 93 | int QAbstractEventDispatcherPrivate::allocateTimerId() | - |
| 94 | { | - |
| 95 | return timerIdFreeList()->next(); executed: return timerIdFreeList()->next();Execution Count:132414 | 132414 |
| 96 | } | - |
| 97 | | - |
| 98 | void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) | - |
| 99 | { | - |
| 100 | // this function may be called by a global destructor after | - |
| 101 | // timerIdFreeList() has been destructed | - |
| 102 | if (QtTimerIdFreeList *fl = timerIdFreeList()) partially evaluated: QtTimerIdFreeList *fl = timerIdFreeList()| yes Evaluation Count:130933 | no Evaluation Count:0 |
| 0-130933 |
| 103 | fl->release(timerId); executed: fl->release(timerId);Execution Count:130933 | 130933 |
| 104 | } executed: }Execution Count:130933 | 130933 |
| 105 | | - |
| 106 | /*! | - |
| 107 | \class QAbstractEventDispatcher | - |
| 108 | \inmodule QtCore | - |
| 109 | \brief The QAbstractEventDispatcher class provides an interface to manage Qt's event queue. | - |
| 110 | | - |
| 111 | \ingroup events | - |
| 112 | | - |
| 113 | An event dispatcher receives events from the window system and other | - |
| 114 | sources. It then sends them to the QCoreApplication or QApplication | - |
| 115 | instance for processing and delivery. QAbstractEventDispatcher provides | - |
| 116 | fine-grained control over event delivery. | - |
| 117 | | - |
| 118 | For simple control of event processing use | - |
| 119 | QCoreApplication::processEvents(). | - |
| 120 | | - |
| 121 | For finer control of the application's event loop, call | - |
| 122 | instance() and call functions on the QAbstractEventDispatcher | - |
| 123 | object that is returned. If you want to use your own instance of | - |
| 124 | QAbstractEventDispatcher or of a QAbstractEventDispatcher | - |
| 125 | subclass, you must install it with QCoreApplication::setEventDispatcher() | - |
| 126 | or QThread::setEventDispatcher() \e before a default event dispatcher has | - |
| 127 | been installed. | - |
| 128 | | - |
| 129 | The main event loop is started by calling | - |
| 130 | QCoreApplication::exec(), and stopped by calling | - |
| 131 | QCoreApplication::exit(). Local event loops can be created using | - |
| 132 | QEventLoop. | - |
| 133 | | - |
| 134 | Programs that perform long operations can call processEvents() | - |
| 135 | with a bitwise OR combination of various QEventLoop::ProcessEventsFlag | - |
| 136 | values to control which events should be delivered. | - |
| 137 | | - |
| 138 | QAbstractEventDispatcher also allows the integration of an | - |
| 139 | external event loop with the Qt event loop. | - |
| 140 | | - |
| 141 | \sa QEventLoop, QCoreApplication, QThread | - |
| 142 | */ | - |
| 143 | | - |
| 144 | /*! | - |
| 145 | Constructs a new event dispatcher with the given \a parent. | - |
| 146 | */ | - |
| 147 | QAbstractEventDispatcher::QAbstractEventDispatcher(QObject *parent) | - |
| 148 | : QObject(*new QAbstractEventDispatcherPrivate, parent) {} executed: }Execution Count:2 | 2 |
| 149 | | - |
| 150 | /*! | - |
| 151 | \internal | - |
| 152 | */ | - |
| 153 | QAbstractEventDispatcher::QAbstractEventDispatcher(QAbstractEventDispatcherPrivate &dd, | - |
| 154 | QObject *parent) | - |
| 155 | : QObject(dd, parent) {} executed: }Execution Count:1717500 | 1717500 |
| 156 | | - |
| 157 | /*! | - |
| 158 | Destroys the event dispatcher. | - |
| 159 | */ | - |
| 160 | QAbstractEventDispatcher::~QAbstractEventDispatcher() | - |
| 161 | { } | - |
| 162 | | - |
| 163 | /*! | - |
| 164 | Returns a pointer to the event dispatcher object for the specified | - |
| 165 | \a thread. If \a thread is zero, the current thread is used. If no | - |
| 166 | event dispatcher exists for the specified thread, this function | - |
| 167 | returns 0. | - |
| 168 | | - |
| 169 | \b{Note:} If Qt is built without thread support, the \a thread | - |
| 170 | argument is ignored. | - |
| 171 | */ | - |
| 172 | QAbstractEventDispatcher *QAbstractEventDispatcher::instance(QThread *thread) | - |
| 173 | { | - |
| 174 | QThreadData *data = thread ? QThreadData::get2(thread) : QThreadData::current(); evaluated: thread| yes Evaluation Count:136 | yes Evaluation Count:286304 |
| 136-286304 |
| 175 | return data->eventDispatcher; executed: return data->eventDispatcher;Execution Count:286440 | 286440 |
| 176 | } | - |
| 177 | | - |
| 178 | /*! | - |
| 179 | \fn bool QAbstractEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags) | - |
| 180 | | - |
| 181 | Processes pending events that match \a flags until there are no | - |
| 182 | more events to process. Returns true if an event was processed; | - |
| 183 | otherwise returns false. | - |
| 184 | | - |
| 185 | This function is especially useful if you have a long running | - |
| 186 | operation and want to show its progress without allowing user | - |
| 187 | input; i.e. by using the QEventLoop::ExcludeUserInputEvents flag. | - |
| 188 | | - |
| 189 | If the QEventLoop::WaitForMoreEvents flag is set in \a flags, the | - |
| 190 | behavior of this function is as follows: | - |
| 191 | | - |
| 192 | \list | - |
| 193 | | - |
| 194 | \li If events are available, this function returns after processing | - |
| 195 | them. | - |
| 196 | | - |
| 197 | \li If no events are available, this function will wait until more | - |
| 198 | are available and return after processing newly available events. | - |
| 199 | | - |
| 200 | \endlist | - |
| 201 | | - |
| 202 | If the QEventLoop::WaitForMoreEvents flag is not set in \a flags, | - |
| 203 | and no events are available, this function will return | - |
| 204 | immediately. | - |
| 205 | | - |
| 206 | \b{Note:} This function does not process events continuously; it | - |
| 207 | returns after all available events are processed. | - |
| 208 | | - |
| 209 | \sa hasPendingEvents() | - |
| 210 | */ | - |
| 211 | | - |
| 212 | /*! \fn bool QAbstractEventDispatcher::hasPendingEvents() | - |
| 213 | | - |
| 214 | Returns true if there is an event waiting; otherwise returns | - |
| 215 | false. | - |
| 216 | */ | - |
| 217 | | - |
| 218 | /*! | - |
| 219 | \fn void QAbstractEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier) | - |
| 220 | | - |
| 221 | Registers \a notifier with the event loop. Subclasses must | - |
| 222 | implement this method to tie a socket notifier into another | - |
| 223 | event loop. | - |
| 224 | */ | - |
| 225 | | - |
| 226 | /*! \fn void QAbstractEventDispatcher::unregisterSocketNotifier(QSocketNotifier *notifier) | - |
| 227 | | - |
| 228 | Unregisters \a notifier from the event dispatcher. Subclasses must | - |
| 229 | reimplement this method to tie a socket notifier into another | - |
| 230 | event loop. Reimplementations must call the base | - |
| 231 | implementation. | - |
| 232 | */ | - |
| 233 | | - |
| 234 | /*! | - |
| 235 | \obsolete | - |
| 236 | | - |
| 237 | \fn int QAbstractEventDispatcher::registerTimer(int interval, QObject *object) | - |
| 238 | | - |
| 239 | Registers a timer with the specified \a interval for the given \a object | - |
| 240 | and returns the timer id. | - |
| 241 | */ | - |
| 242 | | - |
| 243 | /*! | - |
| 244 | \obsolete | - |
| 245 | | - |
| 246 | \fn void QAbstractEventDispatcher::registerTimer(int timerId, int interval, QObject *object) | - |
| 247 | | - |
| 248 | Register a timer with the specified \a timerId and \a interval for the | - |
| 249 | given \a object. | - |
| 250 | */ | - |
| 251 | | - |
| 252 | /*! | - |
| 253 | Registers a timer with the specified \a interval and \a timerType for the | - |
| 254 | given \a object and returns the timer id. | - |
| 255 | */ | - |
| 256 | int QAbstractEventDispatcher::registerTimer(int interval, Qt::TimerType timerType, QObject *object) | - |
| 257 | { | - |
| 258 | int id = QAbstractEventDispatcherPrivate::allocateTimerId(); executed (the execution status of this line is deduced): int id = QAbstractEventDispatcherPrivate::allocateTimerId(); | - |
| 259 | registerTimer(id, interval, timerType, object); executed (the execution status of this line is deduced): registerTimer(id, interval, timerType, object); | - |
| 260 | return id; executed: return id;Execution Count:132414 | 132414 |
| 261 | } | - |
| 262 | | - |
| 263 | /*! | - |
| 264 | \fn void QAbstractEventDispatcher::registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) | - |
| 265 | | - |
| 266 | Register a timer with the specified \a timerId, \a interval, and \a | - |
| 267 | timerType for the given \a object. | - |
| 268 | */ | - |
| 269 | | - |
| 270 | /*! | - |
| 271 | \fn bool QAbstractEventDispatcher::unregisterTimer(int timerId) | - |
| 272 | | - |
| 273 | Unregisters the timer with the given \a timerId. | - |
| 274 | Returns true if successful; otherwise returns false. | - |
| 275 | | - |
| 276 | \sa registerTimer(), unregisterTimers() | - |
| 277 | */ | - |
| 278 | | - |
| 279 | /*! | - |
| 280 | \fn bool QAbstractEventDispatcher::unregisterTimers(QObject *object) | - |
| 281 | | - |
| 282 | Unregisters all the timers associated with the given \a object. | - |
| 283 | Returns true if all timers were successful removed; otherwise returns false. | - |
| 284 | | - |
| 285 | \sa unregisterTimer(), registeredTimers() | - |
| 286 | */ | - |
| 287 | | - |
| 288 | /*! | - |
| 289 | \fn QList<TimerInfo> QAbstractEventDispatcher::registeredTimers(QObject *object) const | - |
| 290 | | - |
| 291 | Returns a list of registered timers for \a object. The TimerInfo struct has | - |
| 292 | \c timerId, \c interval, and \c timerType members. | - |
| 293 | | - |
| 294 | \sa Qt::TimerType | - |
| 295 | */ | - |
| 296 | | - |
| 297 | /*! | - |
| 298 | \fn int QAbstractEventDispatcher::remainingTime(int timerId) | - |
| 299 | | - |
| 300 | Returns the remaining time in milliseconds with the given \a timerId. | - |
| 301 | If the timer is inactive, the returned value will be -1. If the timer is | - |
| 302 | overdue, the returned value will be 0. | - |
| 303 | | - |
| 304 | \sa Qt::TimerType | - |
| 305 | */ | - |
| 306 | | - |
| 307 | /*! \fn void QAbstractEventDispatcher::wakeUp() | - |
| 308 | \threadsafe | - |
| 309 | | - |
| 310 | Wakes up the event loop. | - |
| 311 | | - |
| 312 | \sa awake() | - |
| 313 | */ | - |
| 314 | | - |
| 315 | /*! | - |
| 316 | \fn void QAbstractEventDispatcher::interrupt() | - |
| 317 | | - |
| 318 | Interrupts event dispatching; i.e. the event dispatcher will | - |
| 319 | return from processEvents() as soon as possible. | - |
| 320 | */ | - |
| 321 | | - |
| 322 | /*! \fn void QAbstractEventDispatcher::flush() | - |
| 323 | | - |
| 324 | Flushes the event queue. This normally returns almost | - |
| 325 | immediately. Does nothing on platforms other than X11. | - |
| 326 | */ | - |
| 327 | | - |
| 328 | // ### DOC: Are these called when the _application_ starts/stops or just | - |
| 329 | // when the current _event loop_ starts/stops? | - |
| 330 | /*! | - |
| 331 | \internal | - |
| 332 | */ | - |
| 333 | void QAbstractEventDispatcher::startingUp() | - |
| 334 | { } | - |
| 335 | | - |
| 336 | /*! | - |
| 337 | \internal | - |
| 338 | */ | - |
| 339 | void QAbstractEventDispatcher::closingDown() | - |
| 340 | { } | - |
| 341 | | - |
| 342 | /*! | - |
| 343 | \class QAbstractEventDispatcher::TimerInfo | - |
| 344 | \inmodule QtCore | - |
| 345 | | - |
| 346 | This struct represents information about a timer: | - |
| 347 | \l{QAbstractEventDispatcher::TimerInfo::timerId}{timerId}, | - |
| 348 | \l{QAbstractEventDispatcher::TimerInfo::interval}{interval}, and | - |
| 349 | \l{QAbstractEventDispatcher::TimerInfo::timerType}{timerType}. | - |
| 350 | | - |
| 351 | \sa registeredTimers() | - |
| 352 | */ | - |
| 353 | /*! \fn QAbstractEventDispatcher::TimerInfo::TimerInfo(int timerId, int interval, Qt::TimerType timerType) | - |
| 354 | | - |
| 355 | Constructs a TimerInfo struct with the given \a timerId, \a interval, and | - |
| 356 | \a timerType. | - |
| 357 | */ | - |
| 358 | /*! | - |
| 359 | \variable QAbstractEventDispatcher::TimerInfo::timerId | - |
| 360 | | - |
| 361 | The timer's unique id. | - |
| 362 | */ | - |
| 363 | /*! | - |
| 364 | \variable QAbstractEventDispatcher::TimerInfo::interval | - |
| 365 | | - |
| 366 | The timer's interval. | - |
| 367 | */ | - |
| 368 | /*! | - |
| 369 | \variable QAbstractEventDispatcher::TimerInfo::timerType | - |
| 370 | | - |
| 371 | The timer's type | - |
| 372 | | - |
| 373 | \sa Qt::TimerType | - |
| 374 | */ | - |
| 375 | | - |
| 376 | /*! | - |
| 377 | Installs an event filter \a filterObj for all native event filters | - |
| 378 | received by the application. | - |
| 379 | | - |
| 380 | The event filter \a filterObj receives events via its nativeEventFilter() | - |
| 381 | function, which is called for all events received by all threads. | - |
| 382 | | - |
| 383 | The nativeEventFilter() function should return true if the event should | - |
| 384 | be filtered, (i.e. stopped). It should return false to allow | - |
| 385 | normal Qt processing to continue: the native event can then be translated | - |
| 386 | into a QEvent and handled by the standard Qt \l{QEvent} {event} filtering, | - |
| 387 | e.g. QObject::installEventFilter(). | - |
| 388 | | - |
| 389 | If multiple event filters are installed, the filter that was installed last | - |
| 390 | is activated first. | - |
| 391 | | - |
| 392 | \note The filter function set here receives native messages, | - |
| 393 | i.e. MSG or XEvent structs. | - |
| 394 | | - |
| 395 | For maximum portability, you should always try to use QEvents | - |
| 396 | and QObject::installEventFilter() whenever possible. | - |
| 397 | | - |
| 398 | \sa QObject::installEventFilter() | - |
| 399 | | - |
| 400 | \since 5.0 | - |
| 401 | */ | - |
| 402 | void QAbstractEventDispatcher::installNativeEventFilter(QAbstractNativeEventFilter *filterObj) | - |
| 403 | { | - |
| 404 | Q_D(QAbstractEventDispatcher); executed (the execution status of this line is deduced): QAbstractEventDispatcherPrivate * const d = d_func(); | - |
| 405 | | - |
| 406 | // clean up unused items in the list | - |
| 407 | d->eventFilters.removeAll(0); executed (the execution status of this line is deduced): d->eventFilters.removeAll(0); | - |
| 408 | d->eventFilters.removeAll(filterObj); executed (the execution status of this line is deduced): d->eventFilters.removeAll(filterObj); | - |
| 409 | d->eventFilters.prepend(filterObj); executed (the execution status of this line is deduced): d->eventFilters.prepend(filterObj); | - |
| 410 | } executed: }Execution Count:1 | 1 |
| 411 | | - |
| 412 | /*! | - |
| 413 | Removes the event filter \a filter from this object. The | - |
| 414 | request is ignored if such an event filter has not been installed. | - |
| 415 | | - |
| 416 | All event filters for this object are automatically removed when | - |
| 417 | this object is destroyed. | - |
| 418 | | - |
| 419 | It is always safe to remove an event filter, even during event | - |
| 420 | filter activation (i.e. from the nativeEventFilter() function). | - |
| 421 | | - |
| 422 | \sa installNativeEventFilter(), QAbstractNativeEventFilter | - |
| 423 | \since 5.0 | - |
| 424 | */ | - |
| 425 | void QAbstractEventDispatcher::removeNativeEventFilter(QAbstractNativeEventFilter *filter) | - |
| 426 | { | - |
| 427 | Q_D(QAbstractEventDispatcher); executed (the execution status of this line is deduced): QAbstractEventDispatcherPrivate * const d = d_func(); | - |
| 428 | for (int i = 0; i < d->eventFilters.count(); ++i) { partially evaluated: i < d->eventFilters.count()| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 429 | if (d->eventFilters.at(i) == filter) { partially evaluated: d->eventFilters.at(i) == filter| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 430 | d->eventFilters[i] = 0; executed (the execution status of this line is deduced): d->eventFilters[i] = 0; | - |
| 431 | break; executed: break;Execution Count:1 | 1 |
| 432 | } | - |
| 433 | } | 0 |
| 434 | } executed: }Execution Count:1 | 1 |
| 435 | | - |
| 436 | /*! | - |
| 437 | Sends \a message through the event filters that were set by | - |
| 438 | installNativeEventFilter(). This function returns true as soon as an | - |
| 439 | event filter returns true, and false otherwise to indicate that | - |
| 440 | the processing of the event should continue. | - |
| 441 | | - |
| 442 | Subclasses of QAbstractEventDispatcher \e must call this function | - |
| 443 | for \e all messages received from the system to ensure | - |
| 444 | compatibility with any extensions that may be used in the | - |
| 445 | application. The type of event \a eventType is specific to the platform | - |
| 446 | plugin chosen at run-time, and can be used to cast message to the right type. | - |
| 447 | The \a result pointer is only used on Windows, and corresponds to the LRESULT pointer. | - |
| 448 | | - |
| 449 | Note that the type of \a message is platform dependent. See | - |
| 450 | QAbstractNativeEventFilter for details. | - |
| 451 | | - |
| 452 | \sa installNativeEventFilter(), QAbstractNativeEventFilter::nativeEventFilter() | - |
| 453 | \since 5.0 | - |
| 454 | */ | - |
| 455 | bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, void *message, long *result) | - |
| 456 | { | - |
| 457 | Q_D(QAbstractEventDispatcher); executed (the execution status of this line is deduced): QAbstractEventDispatcherPrivate * const d = d_func(); | - |
| 458 | if (!d->eventFilters.isEmpty()) { evaluated: !d->eventFilters.isEmpty()| yes Evaluation Count:5072 | yes Evaluation Count:143523 |
| 5072-143523 |
| 459 | // Raise the loopLevel so that deleteLater() calls in or triggered | - |
| 460 | // by event_filter() will be processed from the main event loop. | - |
| 461 | QScopedLoopLevelCounter loopLevelCounter(d->threadData); executed (the execution status of this line is deduced): QScopedLoopLevelCounter loopLevelCounter(d->threadData); | - |
| 462 | for (int i = 0; i < d->eventFilters.size(); ++i) { evaluated: i < d->eventFilters.size()| yes Evaluation Count:5072 | yes Evaluation Count:5072 |
| 5072 |
| 463 | QAbstractNativeEventFilter *filter = d->eventFilters.at(i); executed (the execution status of this line is deduced): QAbstractNativeEventFilter *filter = d->eventFilters.at(i); | - |
| 464 | if (!filter) evaluated: !filter| yes Evaluation Count:4974 | yes Evaluation Count:98 |
| 98-4974 |
| 465 | continue; executed: continue;Execution Count:4974 | 4974 |
| 466 | if (filter->nativeEventFilter(eventType, message, result)) partially evaluated: filter->nativeEventFilter(eventType, message, result)| no Evaluation Count:0 | yes Evaluation Count:98 |
| 0-98 |
| 467 | return true; never executed: return true; | 0 |
| 468 | } executed: }Execution Count:98 | 98 |
| 469 | } executed: }Execution Count:5072 | 5072 |
| 470 | return false; executed: return false;Execution Count:148595 | 148595 |
| 471 | } | - |
| 472 | | - |
| 473 | /*! \fn bool QAbstractEventDispatcher::filterEvent(void *message) | - |
| 474 | \deprecated | - |
| 475 | | - |
| 476 | Calls filterNativeEvent() with an empty eventType and \a message. | - |
| 477 | This function returns true as soon as an | - |
| 478 | event filter returns true, and false otherwise to indicate that | - |
| 479 | the processing of the event should continue. | - |
| 480 | */ | - |
| 481 | | - |
| 482 | /*! \fn bool QAbstractEventDispatcher::registerEventNotifier(QWinEventNotifier *notifier); | - |
| 483 | | - |
| 484 | This pure virtual method exists on windows only and has to be reimplemented by a Windows specific | - |
| 485 | event dispatcher implementation. \a notifier is the QWinEventNotifier instance to be registered. | - |
| 486 | | - |
| 487 | The method should return true if the registration of \a notifier was sucessful, otherwise false. | - |
| 488 | | - |
| 489 | QWinEventNotifier calls this method in it's constructor and there should never be a need to call this | - |
| 490 | method directly. | - |
| 491 | | - |
| 492 | \sa QWinEventNotifier, unregisterEventNotifier() | - |
| 493 | */ | - |
| 494 | | - |
| 495 | /*! \fn bool QAbstractEventDispatcher::unregisterEventNotifier(QWinEventNotifier *notifier); | - |
| 496 | | - |
| 497 | This pure virtual method exists on windows only and has to be reimplemented by a Windows specific | - |
| 498 | event dispatcher implementation. \a notifier is the QWinEventNotifier instance to be unregistered. | - |
| 499 | | - |
| 500 | QWinEventNotifier calls this method in it's destructor and there should never be a need to call this | - |
| 501 | method directly. | - |
| 502 | | - |
| 503 | \sa QWinEventNotifier, registerEventNotifier() | - |
| 504 | */ | - |
| 505 | | - |
| 506 | /*! \fn void QAbstractEventDispatcher::awake() | - |
| 507 | | - |
| 508 | This signal is emitted after the event loop returns from a | - |
| 509 | function that could block. | - |
| 510 | | - |
| 511 | \sa wakeUp(), aboutToBlock() | - |
| 512 | */ | - |
| 513 | | - |
| 514 | /*! \fn void QAbstractEventDispatcher::aboutToBlock() | - |
| 515 | | - |
| 516 | This signal is emitted before the event loop calls a function that | - |
| 517 | could block. | - |
| 518 | | - |
| 519 | \sa awake() | - |
| 520 | */ | - |
| 521 | | - |
| 522 | QT_END_NAMESPACE | - |
| 523 | | - |
| | |