From ffec9a89c3407b1d176e4e0689c3ee3ce5ad5763 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 4 Aug 2010 14:13:17 +0200 Subject: Cocoa: add better support for delayed message invocation This patch will make it easier to call methods that takes integer arguments. It will be used to bugfix native dialogs. --- src/gui/kernel/qcocoaapplication_mac.mm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qcocoaapplication_mac.mm b/src/gui/kernel/qcocoaapplication_mac.mm index 238b96b..9270213 100644 --- a/src/gui/kernel/qcocoaapplication_mac.mm +++ b/src/gui/kernel/qcocoaapplication_mac.mm @@ -117,15 +117,19 @@ QT_USE_NAMESPACE quint64 lower = [event data1]; quint64 upper = [event data2]; QCocoaPostMessageArgs *args = reinterpret_cast(lower | (upper << 32)); + // Special case for convenience: if the argument is an NSNumber, we unbox it directly. + // Use NSValue instead if this behaviour is unwanted. + id a1 = ([args->arg1 isKindOfClass:[NSNumber class]]) ? (id)[args->arg1 intValue] : args->arg1; + id a2 = ([args->arg2 isKindOfClass:[NSNumber class]]) ? (id)[args->arg2 intValue] : args->arg2; switch (args->argCount) { case 0: [args->target performSelector:args->selector]; break; case 1: - [args->target performSelector:args->selector withObject:args->arg1]; + [args->target performSelector:args->selector withObject:a1]; break; case 3: - [args->target performSelector:args->selector withObject:args->arg1 withObject:args->arg2]; + [args->target performSelector:args->selector withObject:a1 withObject:a2]; break; } -- cgit v0.12