migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification

migrateAwayFromDeprecatedNSUserNotification
This commit is contained in:
Ryu481 2025-07-21 20:01:01 +02:00
commit 6e60669214
No known key found for this signature in database
GPG key ID: 0A721B47A5620B99
4 changed files with 36 additions and 7 deletions

View file

@ -296,7 +296,10 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
programupdater.h
programupdater.cpp
)
target_link_libraries(qbt_gui PRIVATE objc)
target_link_libraries(qbt_gui PRIVATE
objc
"-framework UserNotifications"
)
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")

View file

@ -80,6 +80,7 @@ DesktopIntegration::DesktopIntegration(QObject *parent)
{
#ifdef Q_OS_MACOS
desktopIntegrationInstance = this;
MacUtils::askForNotificationPermission();
MacUtils::overrideDockClickHandler(handleDockClicked);
m_menu->setAsDockMenu();
#else

View file

@ -40,6 +40,7 @@ namespace MacUtils
{
QPixmap pixmapForExtension(const QString &ext, const QSize &size);
void overrideDockClickHandler(bool (*dockClickHandler)(id, SEL, ...));
void askForNotificationPermission();
void displayNotification(const QString &title, const QString &message);
void openFiles(const PathList &pathList);

View file

@ -29,13 +29,17 @@
#include "macutilities.h"
#import <Cocoa/Cocoa.h>
#import <Foundation/Foundation.h>
#import <UniformTypeIdentifiers/UniformTypeIdentifiers.h>
#import <UserNotifications/UserNotifications.h>
#include <objc/message.h>
#include <QCoreApplication>
#include <QPixmap>
#include <QSize>
#include <QString>
#include "base/logger.h"
#include "base/path.h"
QImage qt_mac_toQImage(CGImageRef image);
@ -85,16 +89,36 @@ namespace MacUtils
}
}
void askForNotificationPermission()
{
@autoreleasepool
{
[UNUserNotificationCenter.currentNotificationCenter requestAuthorizationWithOptions:
(UNAuthorizationOptionAlert + UNAuthorizationOptionSound)
completionHandler:^([[maybe_unused]] BOOL granted, NSError * _Nullable error)
{
if (error)
{
LogMsg(QCoreApplication::translate("MacUtils", "Permission for notifications not granted. Error: \"%1\"").arg
(QString::fromNSString(error.localizedDescription)), Log::WARNING);
}
}];
}
}
void displayNotification(const QString &title, const QString &message)
{
@autoreleasepool
{
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = title.toNSString();
notification.informativeText = message.toNSString();
notification.soundName = NSUserNotificationDefaultSoundName;
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = title.toNSString();
content.body = message.toNSString();
content.sound = [UNNotificationSound defaultSound];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:
[[NSUUID UUID] UUIDString] content:content
trigger:nil];
[UNUserNotificationCenter.currentNotificationCenter
addNotificationRequest:request withCompletionHandler:nil];
}
}