From d7fa5b6b6bba36e9748f5565fa63d84b9f19def4 Mon Sep 17 00:00:00 2001 From: vit9696 Date: Tue, 12 Dec 2017 20:20:48 +0300 Subject: [PATCH] Put macOS specific functions to MacUtils namespace --- src/gui/macutilities.h | 11 ++-- src/gui/macutilities.mm | 99 +++++++++++++++++---------------- src/gui/mainwindow.cpp | 4 +- src/gui/torrentcontentmodel.cpp | 2 +- src/gui/transferlistwidget.cpp | 2 +- 5 files changed, 62 insertions(+), 56 deletions(-) diff --git a/src/gui/macutilities.h b/src/gui/macutilities.h index 02c4a1be6..cbf00bc09 100644 --- a/src/gui/macutilities.h +++ b/src/gui/macutilities.h @@ -33,9 +33,12 @@ #include #include -QPixmap pixmapForExtension(const QString &ext, const QSize &size); -void overrideDockClickHandler(bool (*dockClickHandler)(id, SEL, ...)); -void displayNotification(const QString &title, const QString &message); -void openFiles(const QSet &pathsList); +namespace MacUtils +{ + QPixmap pixmapForExtension(const QString &ext, const QSize &size); + void overrideDockClickHandler(bool (*dockClickHandler)(id, SEL, ...)); + void displayNotification(const QString &title, const QString &message); + void openFiles(const QSet &pathsList); +} #endif // MACUTILITIES_H diff --git a/src/gui/macutilities.mm b/src/gui/macutilities.mm index d950e21c6..5a8e81aeb 100644 --- a/src/gui/macutilities.mm +++ b/src/gui/macutilities.mm @@ -33,64 +33,67 @@ #include #import -QPixmap pixmapForExtension(const QString &ext, const QSize &size) +namespace MacUtils { - @autoreleasepool { - NSImage *image = [[NSWorkspace sharedWorkspace] iconForFileType:ext.toNSString()]; - if (image) { - NSRect rect = NSMakeRect(0, 0, size.width(), size.height()); - CGImageRef cgImage = [image CGImageForProposedRect:&rect context:nil hints:nil]; - return QtMac::fromCGImageRef(cgImage); + QPixmap pixmapForExtension(const QString &ext, const QSize &size) + { + @autoreleasepool { + NSImage *image = [[NSWorkspace sharedWorkspace] iconForFileType:ext.toNSString()]; + if (image) { + NSRect rect = NSMakeRect(0, 0, size.width(), size.height()); + CGImageRef cgImage = [image CGImageForProposedRect:&rect context:nil hints:nil]; + return QtMac::fromCGImageRef(cgImage); + } + + return QPixmap(); } - - return QPixmap(); } -} -void overrideDockClickHandler(bool (*dockClickHandler)(id, SEL, ...)) -{ - NSApplication *appInst = [NSApplication sharedApplication]; - - if (!appInst) - return; - - Class delClass = [[appInst delegate] class]; - SEL shouldHandle = sel_registerName("applicationShouldHandleReopen:hasVisibleWindows:"); - - if (class_getInstanceMethod(delClass, shouldHandle)) { - if (class_replaceMethod(delClass, shouldHandle, (IMP)dockClickHandler, "B@:")) - qDebug("Registered dock click handler (replaced original method)"); - else - qWarning("Failed to replace method for dock click handler"); - } - else { - if (class_addMethod(delClass, shouldHandle, (IMP)dockClickHandler, "B@:")) - qDebug("Registered dock click handler"); - else - qWarning("Failed to register dock click handler"); + void overrideDockClickHandler(bool (*dockClickHandler)(id, SEL, ...)) + { + NSApplication *appInst = [NSApplication sharedApplication]; + + if (!appInst) + return; + + Class delClass = [[appInst delegate] class]; + SEL shouldHandle = sel_registerName("applicationShouldHandleReopen:hasVisibleWindows:"); + + if (class_getInstanceMethod(delClass, shouldHandle)) { + if (class_replaceMethod(delClass, shouldHandle, (IMP)dockClickHandler, "B@:")) + qDebug("Registered dock click handler (replaced original method)"); + else + qWarning("Failed to replace method for dock click handler"); + } + else { + if (class_addMethod(delClass, shouldHandle, (IMP)dockClickHandler, "B@:")) + qDebug("Registered dock click handler"); + else + qWarning("Failed to register dock click handler"); + } } -} -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; + 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]; + [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; + } } -} -void openFiles(const QSet &pathsList) -{ - @autoreleasepool { - NSMutableArray *pathURLs = [NSMutableArray arrayWithCapacity:pathsList.size()]; + void openFiles(const QSet &pathsList) + { + @autoreleasepool { + NSMutableArray *pathURLs = [NSMutableArray arrayWithCapacity:pathsList.size()]; - for (const auto &path : pathsList) - [pathURLs addObject:[NSURL fileURLWithPath:path.toNSString()]]; + for (const auto &path : pathsList) + [pathURLs addObject:[NSURL fileURLWithPath:path.toNSString()]]; - [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:pathURLs]; + [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:pathURLs]; + } } } diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 431fd7904..790afbeca 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1298,7 +1298,7 @@ static bool dockClickHandler(id self, SEL cmd, ...) void MainWindow::setupDockClickHandler() { dockMainWindowHandle = this; - overrideDockClickHandler(dockClickHandler); + MacUtils::overrideDockClickHandler(dockClickHandler); } #endif @@ -1557,7 +1557,7 @@ void MainWindow::showNotificationBaloon(QString title, QString msg) const if (!reply.isError()) return; #elif defined(Q_OS_MAC) - displayNotification(title, msg); + MacUtils::displayNotification(title, msg); #else if (m_systrayIcon && QSystemTrayIcon::supportsMessages()) m_systrayIcon->showMessage(title, msg, QSystemTrayIcon::Information, TIME_TRAY_BALLOON); diff --git a/src/gui/torrentcontentmodel.cpp b/src/gui/torrentcontentmodel.cpp index 48a05ec9d..9130c86b7 100644 --- a/src/gui/torrentcontentmodel.cpp +++ b/src/gui/torrentcontentmodel.cpp @@ -150,7 +150,7 @@ namespace { QPixmap pixmapForExtension(const QString &ext) const override { - return ::pixmapForExtension(ext, QSize(32, 32)); + return MacUtils::pixmapForExtension(ext, QSize(32, 32)); } }; #else diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index 4a1a730a7..50471b189 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -559,7 +559,7 @@ void TransferListWidget::openSelectedTorrentsFolder() const QString path = torrent->contentPath(true); pathsList.insert(path); } - openFiles(pathsList); + MacUtils::openFiles(pathsList); #else foreach (BitTorrent::TorrentHandle *const torrent, getSelectedTorrents()) { QString path = torrent->contentPath(true);