summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qcoreevent.cpp3
-rw-r--r--tests/auto/gui/kernel/qevent/tst_qevent.cpp26
2 files changed, 29 insertions, 0 deletions
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index 62c76c1a40..edf262b8af 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -406,6 +406,9 @@ Q_GLOBAL_STATIC(QEventUserEventRegistration, userEventRegistrationHelper)
between QEvent::User and QEvent::MaxUser that has not yet been
registered. The \a hint is ignored if its value is not between
QEvent::User and QEvent::MaxUser.
+
+ Returns -1 if all available values are already taken or the
+ program is shutting down.
*/
int QEvent::registerEventType(int hint)
{
diff --git a/tests/auto/gui/kernel/qevent/tst_qevent.cpp b/tests/auto/gui/kernel/qevent/tst_qevent.cpp
index 46025e444d..73f9486752 100644
--- a/tests/auto/gui/kernel/qevent/tst_qevent.cpp
+++ b/tests/auto/gui/kernel/qevent/tst_qevent.cpp
@@ -55,9 +55,14 @@ public:
private slots:
void registerEventType_data();
void registerEventType();
+ void exhaustEventTypeRegistration(); // keep behind registerEventType() test
+
+private:
+ bool registerEventTypeSucceeded; // track success of registerEventType for use by exhaustEventTypeRegistration()
};
tst_QEvent::tst_QEvent()
+ : registerEventTypeSucceeded(true)
{ }
tst_QEvent::~tst_QEvent()
@@ -82,9 +87,30 @@ void tst_QEvent::registerEventType_data()
void tst_QEvent::registerEventType()
{
+ const bool oldRegisterEventTypeSucceeded = registerEventTypeSucceeded;
+ registerEventTypeSucceeded = false;
QFETCH(int, hint);
QFETCH(int, expected);
QCOMPARE(QEvent::registerEventType(hint), expected);
+ registerEventTypeSucceeded = oldRegisterEventTypeSucceeded;
+}
+
+void tst_QEvent::exhaustEventTypeRegistration()
+{
+ if (!registerEventTypeSucceeded)
+ QSKIP("requires the previous test (registerEventType) to have finished successfully");
+
+ int i = QEvent::User;
+ int result;
+ while ((result = QEvent::registerEventType(i)) == i)
+ ++i;
+ QCOMPARE(i, int(QEvent::User + 1000));
+ QCOMPARE(result, int(QEvent::MaxUser - 4));
+ i = QEvent::User + 1001;
+ while ((result = QEvent::registerEventType(i)) == i)
+ ++i;
+ QCOMPARE(result, -1);
+ QCOMPARE(i, int(QEvent::MaxUser - 4));
}
QTEST_MAIN(tst_QEvent)