diff options
Diffstat (limited to 'Swift')
-rw-r--r-- | Swift/QtUI/CocoaUIHelpers.h | 1 | ||||
-rw-r--r-- | Swift/QtUI/CocoaUIHelpers.mm | 4 | ||||
-rw-r--r-- | Swift/QtUI/QtSwift.cpp | 32 | ||||
-rw-r--r-- | Swift/QtUI/QtSwift.h | 8 | ||||
-rw-r--r-- | Swift/QtUI/SConscript | 5 |
5 files changed, 41 insertions, 9 deletions
diff --git a/Swift/QtUI/CocoaUIHelpers.h b/Swift/QtUI/CocoaUIHelpers.h index 58cd539..8d96bd9 100644 --- a/Swift/QtUI/CocoaUIHelpers.h +++ b/Swift/QtUI/CocoaUIHelpers.h @@ -21,6 +21,7 @@ namespace Swift { class CocoaUIHelpers { public: static void displayCertificateChainAsSheet(QWidget* parent, const std::vector<Certificate::ref>& chain); + static void sendCocoaApplicationWillTerminateNotification(); }; } diff --git a/Swift/QtUI/CocoaUIHelpers.mm b/Swift/QtUI/CocoaUIHelpers.mm index c876312..3ffa72c 100644 --- a/Swift/QtUI/CocoaUIHelpers.mm +++ b/Swift/QtUI/CocoaUIHelpers.mm @@ -46,4 +46,8 @@ void CocoaUIHelpers::displayCertificateChainAsSheet(QWidget* parent, const std:: [certificates release]; } +void CocoaUIHelpers::sendCocoaApplicationWillTerminateNotification() { + [[NSNotificationCenter defaultCenter] postNotificationName:@"NSApplicationWillTerminateNotification" object:nil]; +} + } diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp index 5d05a3d..d8dfac4 100644 --- a/Swift/QtUI/QtSwift.cpp +++ b/Swift/QtUI/QtSwift.cpp @@ -77,12 +77,16 @@ #include <Swift/QtUI/QtDBUSURIHandler.h> #endif +#if defined(SWIFTEN_PLATFORM_MACOSX) +#include <Swift/QtUI/CocoaUIHelpers.h> +#endif + namespace Swift{ #if defined(SWIFTEN_PLATFORM_MACOSX) -//#define SWIFT_APPCAST_URL "http://swift.im/appcast/swift-mac-dev.xml" +#define SWIFT_APPCAST_URL "https://swift.im/appcast/swift-mac-dev.xml" #else -//#define SWIFT_APPCAST_URL "" +#define SWIFT_APPCAST_URL "" #endif po::options_description QtSwift::getOptionsDescription() { @@ -277,12 +281,14 @@ QtSwift::QtSwift(const po::variables_map& options) : networkFactories_(&clientMa mainControllers_.push_back(mainController); } + connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(handleAboutToQuit())); - // PlatformAutoUpdaterFactory autoUpdaterFactory; - // if (autoUpdaterFactory.isSupported()) { - // autoUpdater_ = autoUpdaterFactory.createAutoUpdater(SWIFT_APPCAST_URL); - // autoUpdater_->checkForUpdates(); - // } + PlatformAutoUpdaterFactory autoUpdaterFactory; + if (autoUpdaterFactory.isSupported()) { + autoUpdater_ = autoUpdaterFactory.createAutoUpdater(SWIFT_APPCAST_URL); + autoUpdater_->checkForUpdates(); + autoUpdater_->onSuggestRestartToUserToUpdate.connect(boost::bind(&QtSwift::handleRecommendRestartToInstallUpdate, this)); + } } QtSwift::~QtSwift() { @@ -312,4 +318,16 @@ QtSwift::~QtSwift() { delete applicationPathProvider_; } +void QtSwift::handleAboutToQuit() { +#if defined(SWIFTEN_PLATFORM_MACOSX) + // This is required so Sparkle knows about the application shutting down + // and can update the application in background. + CocoaUIHelpers::sendCocoaApplicationWillTerminateNotification(); +#endif +} + +void QtSwift::handleRecommendRestartToInstallUpdate() { + notifier_->showMessage(Notifier::SystemMessage, Q2PSTRING(tr("Swift Update Available")), Q2PSTRING(tr("Restart Swift now or later to update to the new Swift version")), "", [](){}); +} + } diff --git a/Swift/QtUI/QtSwift.h b/Swift/QtUI/QtSwift.h index 9932545..64b79b8 100644 --- a/Swift/QtUI/QtSwift.h +++ b/Swift/QtUI/QtSwift.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -59,9 +59,15 @@ namespace Swift { QtSwift(const po::variables_map& options); static po::options_description getOptionsDescription(); ~QtSwift(); + + private slots: + void handleAboutToQuit(); + void handleRecommendRestartToInstallUpdate(); + private: XMLSettingsProvider* loadSettingsFile(const QString& fileName); void loadEmoticonsFile(const QString& fileName, std::map<std::string, std::string>& emoticons); + private: QtEventLoop clientMainThreadCaller_; PlatformTLSFactories tlsFactories_; diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 2d01672..fd47dd4 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -79,6 +79,9 @@ if env["PLATFORM"] == "win32" : myenv.Append(LIBS = "Cryptui") myenv.Append(CPPDEFINES = "HAVE_SCHANNEL") +if env["PLATFORM"] == "darwin" and env["HAVE_SPARKLE"] : + myenv.Append(LINKFLAGS = ["-Wl,-rpath,@loader_path/../Frameworks"]) + myenv.WriteVal("DefaultTheme.qrc", myenv.Value(generateQRCTheme(myenv.Dir("#/Swift/resources/themes/Default"), "Default"))) sources = [ @@ -364,7 +367,7 @@ if env["PLATFORM"] == "darwin" : if env["HAVE_GROWL"] : frameworks.append(env["GROWL_FRAMEWORK"]) commonResources[""] = commonResources.get("", []) + ["#/Swift/resources/MacOSX/Swift.icns"] - app = myenv.AppBundle("Swift", version = myenv["SWIFT_VERSION"], resources = commonResources, frameworks = frameworks, handlesXMPPURIs = True) + app = myenv.AppBundle("Swift", version = myenv["SWIFT_VERSION"], resources = commonResources, frameworks = frameworks, handlesXMPPURIs = True, sparklePublicDSAKey = myenv["SWIFT_SPARKLE_PUBLIC_DSA_KEY"]) if env["DIST"] : myenv.Command(["#/Packages/Swift/Swift-${SWIFT_VERSION}.dmg"], [app], ["Swift/Packaging/MacOSX/package.sh " + app.path + " Swift/Packaging/MacOSX/Swift.dmg.gz $TARGET $QTDIR " + "\"$CODE_SIGN_IDENTITY\""]) dsym = myenv.Command(["Swift-${SWIFT_VERSION}.dSYM"], ["Swift"], ["dsymutil -o ${TARGET} ${SOURCE}"]) |