Bitcoin Core 28.99.0
P2P Digital Currency
macnotificationhandler.mm
Go to the documentation of this file.
1// Copyright (c) 2011-2020 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
6
7#undef slots
8#import <objc/runtime.h>
9#include <Cocoa/Cocoa.h>
10
11// Add an obj-c category (extension) to return the expected bundle identifier
13- (NSString *)__bundleIdentifier
14{
15 if (self == [NSBundle mainBundle]) {
16 return @"org.bitcoinfoundation.Bitcoin-Qt";
17 } else {
18 return [self __bundleIdentifier];
19 }
20}
21@end
22
23void MacNotificationHandler::showNotification(const QString &title, const QString &text)
24{
25 // check if users OS has support for NSUserNotification
26 if(this->hasUserNotificationCenterSupport()) {
27 NSUserNotification* userNotification = [[NSUserNotification alloc] init];
28 userNotification.title = title.toNSString();
29 userNotification.informativeText = text.toNSString();
30 [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification: userNotification];
31 [userNotification release];
32 }
33}
34
36{
37 Class possibleClass = NSClassFromString(@"NSUserNotificationCenter");
38
39 // check if users OS has support for NSUserNotification
40 if(possibleClass!=nil) {
41 return true;
42 }
43 return false;
44}
45
46
48{
49 static MacNotificationHandler *s_instance = nullptr;
50 if (!s_instance) {
52
53 Class aPossibleClass = objc_getClass("NSBundle");
54 if (aPossibleClass) {
55 // change NSBundle -bundleIdentifier method to return a correct bundle identifier
56 // a bundle identifier is required to use OSXs User Notification Center
57 method_exchangeImplementations(class_getInstanceMethod(aPossibleClass, @selector(bundleIdentifier)),
58 class_getInstanceMethod(aPossibleClass, @selector(__bundleIdentifier)));
59 }
60 }
61 return s_instance;
62}
Macintosh-specific notification handler (supports UserNotificationCenter).
bool hasUserNotificationCenterSupport()
check if OS can handle UserNotifications
static MacNotificationHandler * instance()
void showNotification(const QString &title, const QString &text)
shows a macOS 10.8+ UserNotification in the UserNotificationCenter
static MacDockIconHandler * s_instance