|
|
@ -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) |
|
|
|