Proper support for Growl 1.3 notifications

This commit is contained in:
p2k 2012-03-12 14:20:55 +01:00 committed by Gavin Andresen
parent 9aa459b294
commit 3f1bb1ac78
2 changed files with 12 additions and 6 deletions

View File

@ -52,10 +52,13 @@ Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon,
OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl); OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl);
if (status != kLSApplicationNotFoundErr) { if (status != kLSApplicationNotFoundErr) {
CFBundleRef bundle = CFBundleCreate(0, cfurl); CFBundleRef bundle = CFBundleCreate(0, cfurl);
CFRelease(cfurl);
if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) { if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) {
mode = Growl; if (CFStringHasSuffix(CFURLGetString(cfurl), CFSTR("/Growl.app/")))
mode = Growl13;
else
mode = Growl12;
} }
CFRelease(cfurl);
CFRelease(bundle); CFRelease(bundle);
} }
#endif #endif
@ -226,7 +229,7 @@ void Notificator::notifySystray(Class cls, const QString &title, const QString &
void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon) void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon)
{ {
const QString script( const QString script(
"tell application \"GrowlHelperApp\"\n" "tell application \"%5\"\n"
" set the allNotificationsList to {\"Notification\"}\n" // -- Make a list of all the notification types (all) " 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) " 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 " register as application \"%1\" all notifications allNotificationsList default notifications enabledNotificationsList\n" // -- Register our script with Growl
@ -265,7 +268,8 @@ void Notificator::notifyGrowl(Class cls, const QString &title, const QString &te
QString quotedTitle(title), quotedText(text); QString quotedTitle(title), quotedText(text);
quotedTitle.replace("\\", "\\\\").replace("\"", "\\"); quotedTitle.replace("\\", "\\\\").replace("\"", "\\");
quotedText.replace("\\", "\\\\").replace("\"", "\\"); quotedText.replace("\\", "\\\\").replace("\"", "\\");
qt_mac_execute_apple_script(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon), 0); QString growlApp(this->mode == Notificator::Growl13 ? "Growl" : "GrowlHelperApp");
qt_mac_execute_apple_script(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon, growlApp), 0);
} }
#endif #endif
@ -282,7 +286,8 @@ void Notificator::notify(Class cls, const QString &title, const QString &text, c
notifySystray(cls, title, text, icon, millisTimeout); notifySystray(cls, title, text, icon, millisTimeout);
break; break;
#ifdef Q_WS_MAC #ifdef Q_WS_MAC
case Growl: case Growl12:
case Growl13:
notifyGrowl(cls, title, text, icon); notifyGrowl(cls, title, text, icon);
break; break;
#endif #endif

View File

@ -49,7 +49,8 @@ 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 */
Growl /**< Use the Growl notification system (Mac only) */ Growl12, /**< Use the Growl 1.2 notification system (Mac only) */
Growl13 /**< Use the Growl 1.3 notification system (Mac only) */
}; };
QString programName; QString programName;
Mode mode; Mode mode;