[macOS] remove Growl support, remove unused code
This commit is contained in:
parent
a3624ddb1a
commit
f151f5f50f
4 changed files with 2 additions and 88 deletions
|
@ -7,20 +7,17 @@
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
/** Macintosh-specific notification handler (supports UserNotificationCenter and Growl).
|
/** Macintosh-specific notification handler (supports UserNotificationCenter).
|
||||||
*/
|
*/
|
||||||
class MacNotificationHandler : public QObject
|
class MacNotificationHandler : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** shows a 10.8+ UserNotification in the UserNotificationCenter
|
/** shows a macOS 10.8+ UserNotification in the UserNotificationCenter
|
||||||
*/
|
*/
|
||||||
void showNotification(const QString &title, const QString &text);
|
void showNotification(const QString &title, const QString &text);
|
||||||
|
|
||||||
/** executes AppleScript */
|
|
||||||
void sendAppleScript(const QString &script);
|
|
||||||
|
|
||||||
/** check if OS can handle UserNotifications */
|
/** check if OS can handle UserNotifications */
|
||||||
bool hasUserNotificationCenterSupport(void);
|
bool hasUserNotificationCenterSupport(void);
|
||||||
static MacNotificationHandler *instance();
|
static MacNotificationHandler *instance();
|
||||||
|
|
|
@ -47,20 +47,6 @@ void MacNotificationHandler::showNotification(const QString &title, const QStrin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// sendAppleScript just take a QString and executes it as apple script
|
|
||||||
void MacNotificationHandler::sendAppleScript(const QString &script)
|
|
||||||
{
|
|
||||||
QByteArray utf8 = script.toUtf8();
|
|
||||||
char* cString = (char *)utf8.constData();
|
|
||||||
NSString *scriptApple = [[NSString alloc] initWithUTF8String:cString];
|
|
||||||
|
|
||||||
NSAppleScript *as = [[NSAppleScript alloc] initWithSource:scriptApple];
|
|
||||||
NSDictionary *err = nil;
|
|
||||||
[as executeAndReturnError:&err];
|
|
||||||
[as release];
|
|
||||||
[scriptApple release];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MacNotificationHandler::hasUserNotificationCenterSupport(void)
|
bool MacNotificationHandler::hasUserNotificationCenterSupport(void)
|
||||||
{
|
{
|
||||||
Class possibleClass = NSClassFromString(@"NSUserNotificationCenter");
|
Class possibleClass = NSClassFromString(@"NSUserNotificationCenter");
|
||||||
|
|
|
@ -60,22 +60,6 @@ Notificator::Notificator(const QString &_programName, QSystemTrayIcon *_trayIcon
|
||||||
if( MacNotificationHandler::instance()->hasUserNotificationCenterSupport()) {
|
if( MacNotificationHandler::instance()->hasUserNotificationCenterSupport()) {
|
||||||
mode = UserNotificationCenter;
|
mode = UserNotificationCenter;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// Check if Growl is installed (based on Qt's tray icon implementation)
|
|
||||||
CFURLRef cfurl;
|
|
||||||
OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl);
|
|
||||||
if (status != kLSApplicationNotFoundErr) {
|
|
||||||
CFBundleRef bundle = CFBundleCreate(0, cfurl);
|
|
||||||
if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) {
|
|
||||||
if (CFStringHasSuffix(CFURLGetString(cfurl), CFSTR("/Growl.app/")))
|
|
||||||
mode = Growl13;
|
|
||||||
else
|
|
||||||
mode = Growl12;
|
|
||||||
}
|
|
||||||
CFRelease(cfurl);
|
|
||||||
CFRelease(bundle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,52 +225,6 @@ void Notificator::notifySystray(Class cls, const QString &title, const QString &
|
||||||
|
|
||||||
// Based on Qt's tray icon implementation
|
// Based on Qt's tray icon implementation
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon)
|
|
||||||
{
|
|
||||||
const QString script(
|
|
||||||
"tell application \"%5\"\n"
|
|
||||||
" set the allNotificationsList to {\"Notification\"}\n" // -- Make a list of all the notification types (all)
|
|
||||||
" set the enabledNotificationsList to {\"Notification\"}\n" // -- Make a list of the notifications (enabled)
|
|
||||||
" register as application \"%1\" all notifications allNotificationsList default notifications enabledNotificationsList\n" // -- Register our script with Growl
|
|
||||||
" notify with name \"Notification\" title \"%2\" description \"%3\" application name \"%1\"%4\n" // -- Send a Notification
|
|
||||||
"end tell"
|
|
||||||
);
|
|
||||||
|
|
||||||
QString notificationApp(QApplication::applicationName());
|
|
||||||
if (notificationApp.isEmpty())
|
|
||||||
notificationApp = "Application";
|
|
||||||
|
|
||||||
QPixmap notificationIconPixmap;
|
|
||||||
if (icon.isNull()) { // If no icon specified, set icon based on class
|
|
||||||
QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion;
|
|
||||||
switch (cls)
|
|
||||||
{
|
|
||||||
case Information: sicon = QStyle::SP_MessageBoxInformation; break;
|
|
||||||
case Warning: sicon = QStyle::SP_MessageBoxWarning; break;
|
|
||||||
case Critical: sicon = QStyle::SP_MessageBoxCritical; break;
|
|
||||||
}
|
|
||||||
notificationIconPixmap = QApplication::style()->standardPixmap(sicon);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
QSize size = icon.actualSize(QSize(48, 48));
|
|
||||||
notificationIconPixmap = icon.pixmap(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString notificationIcon;
|
|
||||||
QTemporaryFile notificationIconFile;
|
|
||||||
if (!notificationIconPixmap.isNull() && notificationIconFile.open()) {
|
|
||||||
QImageWriter writer(¬ificationIconFile, "PNG");
|
|
||||||
if (writer.write(notificationIconPixmap.toImage()))
|
|
||||||
notificationIcon = QString(" image from location \"file://%1\"").arg(notificationIconFile.fileName());
|
|
||||||
}
|
|
||||||
|
|
||||||
QString quotedTitle(title), quotedText(text);
|
|
||||||
quotedTitle.replace("\\", "\\\\").replace("\"", "\\");
|
|
||||||
quotedText.replace("\\", "\\\\").replace("\"", "\\");
|
|
||||||
QString growlApp(this->mode == Notificator::Growl13 ? "Growl" : "GrowlHelperApp");
|
|
||||||
MacNotificationHandler::instance()->sendAppleScript(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon, growlApp));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Notificator::notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon) {
|
void Notificator::notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon) {
|
||||||
// icon is not supported by the user notification center yet. OSX will use the app icon.
|
// icon is not supported by the user notification center yet. OSX will use the app icon.
|
||||||
MacNotificationHandler::instance()->showNotification(title, text);
|
MacNotificationHandler::instance()->showNotification(title, text);
|
||||||
|
@ -310,10 +248,6 @@ void Notificator::notify(Class cls, const QString &title, const QString &text, c
|
||||||
case UserNotificationCenter:
|
case UserNotificationCenter:
|
||||||
notifyMacUserNotificationCenter(cls, title, text, icon);
|
notifyMacUserNotificationCenter(cls, title, text, icon);
|
||||||
break;
|
break;
|
||||||
case Growl12:
|
|
||||||
case Growl13:
|
|
||||||
notifyGrowl(cls, title, text, icon);
|
|
||||||
break;
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
if(cls == Critical)
|
if(cls == Critical)
|
||||||
|
|
|
@ -58,8 +58,6 @@ private:
|
||||||
None, /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */
|
None, /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */
|
||||||
Freedesktop, /**< Use DBus org.freedesktop.Notifications */
|
Freedesktop, /**< Use DBus org.freedesktop.Notifications */
|
||||||
QSystemTray, /**< Use QSystemTray::showMessage */
|
QSystemTray, /**< Use QSystemTray::showMessage */
|
||||||
Growl12, /**< Use the Growl 1.2 notification system (Mac only) */
|
|
||||||
Growl13, /**< Use the Growl 1.3 notification system (Mac only) */
|
|
||||||
UserNotificationCenter /**< Use the 10.8+ User Notification Center (Mac only) */
|
UserNotificationCenter /**< Use the 10.8+ User Notification Center (Mac only) */
|
||||||
};
|
};
|
||||||
QString programName;
|
QString programName;
|
||||||
|
@ -72,7 +70,6 @@ private:
|
||||||
#endif
|
#endif
|
||||||
void notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout);
|
void notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout);
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
void notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon);
|
|
||||||
void notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon);
|
void notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue