summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qnswindow.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/cocoa/qnswindow.mm')
-rw-r--r--src/plugins/platforms/cocoa/qnswindow.mm27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/plugins/platforms/cocoa/qnswindow.mm b/src/plugins/platforms/cocoa/qnswindow.mm
index e846fa043c..cb13b7d184 100644
--- a/src/plugins/platforms/cocoa/qnswindow.mm
+++ b/src/plugins/platforms/cocoa/qnswindow.mm
@@ -99,18 +99,25 @@ static bool isMouseEvent(NSEvent *ev)
const Class windowClass = [self class];
const Class panelClass = [QNSPanel class];
- unsigned int methodDescriptionsCount;
- objc_method_description *methods = protocol_copyMethodDescriptionList(
- objc_getProtocol("QNSWindowProtocol"), NO, YES, &methodDescriptionsCount);
-
- for (unsigned int i = 0; i < methodDescriptionsCount; ++i) {
- objc_method_description method = methods[i];
- class_addMethod(panelClass, method.name,
- class_getMethodImplementation(windowClass, method.name),
- method.types);
+ unsigned int protocolCount;
+ Protocol **protocols = class_copyProtocolList(windowClass, &protocolCount);
+ for (unsigned int i = 0; i < protocolCount; ++i) {
+ Protocol *protocol = protocols[i];
+
+ unsigned int methodDescriptionsCount;
+ objc_method_description *methods = protocol_copyMethodDescriptionList(
+ protocol, NO, YES, &methodDescriptionsCount);
+
+ for (unsigned int j = 0; j < methodDescriptionsCount; ++j) {
+ objc_method_description method = methods[j];
+ class_addMethod(panelClass, method.name,
+ class_getMethodImplementation(windowClass, method.name),
+ method.types);
+ }
+ free(methods);
}
- free(methods);
+ free(protocols);
}
- (QCocoaWindow *)platformWindow