diff options
| -rw-r--r-- | 3rdParty/Snarl/SConscript | 18 | ||||
| -rw-r--r-- | 3rdParty/Snarl/SnarlInterface.cpp | 517 | ||||
| -rw-r--r-- | 3rdParty/Snarl/SnarlInterface.h | 276 | ||||
| -rw-r--r-- | BuildTools/SCons/SConstruct | 4 | ||||
| -rw-r--r-- | SwifTools/Notifier/SConscript | 6 | ||||
| -rw-r--r-- | SwifTools/Notifier/SnarlNotifier.cpp | 73 | ||||
| -rw-r--r-- | SwifTools/Notifier/SnarlNotifier.h | 40 | ||||
| -rw-r--r-- | Swift/QtUI/SConscript | 3 | ||||
| -rw-r--r-- | Swift/QtUI/WindowsNotifier.cpp | 6 | ||||
| -rw-r--r-- | Swift/QtUI/WindowsNotifier.h | 4 | 
10 files changed, 2 insertions, 945 deletions
| diff --git a/3rdParty/Snarl/SConscript b/3rdParty/Snarl/SConscript deleted file mode 100644 index a93282c..0000000 --- a/3rdParty/Snarl/SConscript +++ /dev/null @@ -1,18 +0,0 @@ -Import("env") - -################################################################################ -# Flags -################################################################################ - -if env.get("HAVE_SNARL", False) : -    if env["SCONS_STAGE"] == "flags" : -        env["SNARL_FLAGS"] = { -                "CPPPATH": [Dir(".")], -                "LIBPATH": [Dir(".")], -                "LIBS": ["Snarl"], -            } - -    elif env["SCONS_STAGE"] == "build" : -        myenv = env.Clone() -        myenv.Replace(CCFLAGS = [flag for flag in env["CCFLAGS"] if flag not in ["-W", "-Wall"]]) -        myenv.StaticLibrary("Snarl", ["SnarlInterface.cpp"], CPPPATH = ["."]) diff --git a/3rdParty/Snarl/SnarlInterface.cpp b/3rdParty/Snarl/SnarlInterface.cpp deleted file mode 100644 index 0ae0b37..0000000 --- a/3rdParty/Snarl/SnarlInterface.cpp +++ /dev/null @@ -1,517 +0,0 @@ -/// <summary> -///  Snarl C++ interface implementation -/// -///  Written and maintained by Toke Noer Nøttrup (toke@noer.it) -/// -///  Please note the following changes compared to the VB6 (official API) dokumentation: -///  - Function names doesn't have the prefix "sn". Naming of constants and variables are -///    generally changed to follow Microsoft C# standard. This naming convention is kept for -///    the C++ version, to keep them alike. -///  - Grouped variables like SNARL_LAUNCHED, SNARL_QUIT is enums in SnarlEnums namespace. -///  - Message events like SNARL_NOTIFICATION_CLICKED, is found in SnarlEnums::MessageEvent. -///  - Please note that string functions return NULL when they fail and not an empty string. -///  - Some functions in the VB API takes an appToken as first parameter. This token is a -///    member variable in C++ version, so it is omitted from the functions. -///    (Always call RegisterApp as first function!) -///  - Functions manipulating messages (Update, Hide etc.) still takes a message token as -///    parameter, but you can get the last message token calling GetLastMsgToken(); -///    Example: snarl.Hide(snarl.GetLastMsgToken()); -/// -///  The functions in SnarlInterface both have ANSI(UTF8) and UNICODE versions. -///  If the LPCWSTR (unicode) version of the functions are called, the strings -///  are converted to UTF8 by SnarlInterface before sent to Snarl. So using the -///  ANSI/UTF8/LPCSTR versions of the functions are faster! -/// -///  Funtions special to C++ V41 API compared to VB version: -///    GetLastMsgToken() -///    GetAppPath() -///    GetIconsPath() -/// </summary> -///---------------------------------------------------------------------------- -/// <example> -/// SnarlInterface snarl; -/// snarl.RegisterApp(_T("CppTest"), _T("C++ test app"), NULL); -/// snarl.AddClass(_T("Class1"), _T("Class 1")); -/// snarl.EZNotify(_T("Class1"), _T("C++ example 1"), _T("Some text"), 10); -/// snarl.UnregisterApp(); -/// -/// Please see the SimpleTest.cpp and SnarlV41Test.cpp for more example code. -/// </example> -///---------------------------------------------------------------------------- -/// <VersionHistory> -///  2010-08-13 : First release of V41 Snarl API implementation -/// </VersionHistory> - -#define _CRT_SECURE_NO_WARNINGS - -#include "SnarlInterface.h" - - -namespace Snarl { -namespace V41 { - -//----------------------------------------------------------------------------- -// Constructor/Destructor -//----------------------------------------------------------------------------- -SnarlInterface::SnarlInterface() -	: appToken(0), lastMsgToken(0), localError(SnarlEnums::Success) -{ -} - -SnarlInterface::~SnarlInterface() -{ -} - -// ---------------------------------------------------------------------------- - -LONG32 SnarlInterface::RegisterApp(LPCSTR signature, LPCSTR title, LPCSTR icon, HWND hWndReply /* = NULL */, LONG32 msgReply /* = 0 */, SnarlEnums::AppFlags flags /* = SnarlEnums::AppDefault */) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::RegisterApp; -	msg.Token = 0; -	PackData(msg.PacketData,  -		"id::%s#?title::%s#?icon::%s#?hwnd::%d#?umsg::%d#?flags::%d",  -		signature, title, icon, hWndReply, msgReply, flags); - -	appToken = Send(msg); -	lastMsgToken = 0; - -	return appToken; -} - -LONG32 SnarlInterface::RegisterApp(LPCWSTR signature, LPCWSTR title, LPCWSTR icon, HWND hWndReply /* = NULL */, LONG32 msgReply /* = 0 */, SnarlEnums::AppFlags flags /* = SnarlEnums::AppDefault */) -{ -	LPCSTR szParam1 = WideToUTF8(signature); -	LPCSTR szParam2 = WideToUTF8(title); -	LPCSTR szParam3 = WideToUTF8(icon); -	 -	LONG32 result = RegisterApp(szParam1, szParam2, szParam3, hWndReply, msgReply, flags); -	 -	delete [] szParam1; -	delete [] szParam2; -	delete [] szParam3; - -	return result; -} - -LONG32 SnarlInterface::UnregisterApp() -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::UnregisterApp; -	msg.Token = appToken; -	PackData(msg.PacketData, NULL); - -	appToken = 0; -	lastMsgToken = 0; - -	return Send(msg); -} - -LONG32 SnarlInterface::UpdateApp(LPCSTR title /* = NULL */, LPCSTR icon /* = NULL */) -{ -	if (title == NULL && icon == NULL) -		return 0; - -	SnarlMessage msg; -	msg.Command = SnarlEnums::UpdateApp; -	msg.Token = appToken; -	 -	// TODO: Uckly code ahead -	if (title != NULL && title[0] != 0 && icon != NULL && icon[0] != 0) -		PackData(msg.PacketData, "title::%s#?icon::%s", title, icon); -	else if (title != NULL && title[0] != 0) -		PackData(msg.PacketData, "title::%s", title); -	else if (icon != NULL && icon[0] != 0) -		PackData(msg.PacketData, "icon::%s", icon); -	 -	return Send(msg); -} - -LONG32 SnarlInterface::UpdateApp(LPCWSTR title /* = NULL */, LPCWSTR icon /* = NULL */) -{ -	LPCSTR szParam1 = WideToUTF8(title); -	LPCSTR szParam2 = WideToUTF8(icon); -	 -	LONG32 result = UpdateApp(szParam1, szParam2); -	 -	delete [] szParam1; -	delete [] szParam2; - -	return result; -} - -LONG32 SnarlInterface::AddClass(LPCSTR className, LPCSTR description, bool enabled /* = true */) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::AddClass; -	msg.Token = appToken; -	PackData(msg.PacketData, "id::%s#?name::%s#?enabled::%d", className, description, (enabled ? 1 : 0)); - -	return Send(msg); -} - -LONG32 SnarlInterface::AddClass(LPCWSTR className, LPCWSTR description, bool enabled /* = true */) -{ -	LPCSTR szParam1 = WideToUTF8(className); -	LPCSTR szParam2 = WideToUTF8(description); -	 -	LONG32 result = AddClass(szParam1, szParam2, enabled); -	 -	delete [] szParam1; -	delete [] szParam2; - -	return result; -} - -LONG32 SnarlInterface::RemoveClass(LPCSTR className, bool forgetSettings /* = false */) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::RemoveClass; -	msg.Token = appToken; -	PackData(msg.PacketData, "id::%s#?forget::%d", className, (forgetSettings ? 1 : 0)); - -	return Send(msg); -} - -LONG32 SnarlInterface::RemoveClass(LPCWSTR className, bool forgetSettings /* = false */) -{ -	LPCSTR szParam1 = WideToUTF8(className); -	 -	LONG32 result = RemoveClass(szParam1, forgetSettings); -	 -	delete [] szParam1; - -	return result; -} - -LONG32 SnarlInterface::RemoveAllClasses(bool forgetSettings /* = false */) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::RemoveClass; -	msg.Token = appToken; -	PackData(msg.PacketData, "all::1#?forget::%d", (forgetSettings ? 1 : 0)); - -	return Send(msg); -} - -LONG32 SnarlInterface::EZNotify(LPCSTR className, LPCSTR title, LPCSTR text, LONG32 timeout /* = -1 */, LPCSTR icon /* = NULL */, LONG32 priority /* = 0 */, LPCSTR acknowledge /* = NULL */, LPCSTR value /* = NULL */) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::Notify; -	msg.Token = appToken; -	PackData(msg.PacketData, -		"id::%s#?title::%s#?text::%s#?timeout::%d#?icon::%s#?priority::%d#?ack::%s#?value::%s", -		className, title, text, timeout, (icon ? icon : ""), priority, (acknowledge ? acknowledge : ""), (value ? value : "")); - -	lastMsgToken = Send(msg); -	return lastMsgToken; -} - -LONG32 SnarlInterface::EZNotify(LPCWSTR className, LPCWSTR title, LPCWSTR text, LONG32 timeout /* = -1 */, LPCWSTR icon /* = NULL */, LONG32 priority /* = 0 */, LPCWSTR acknowledge /* = NULL */, LPCWSTR value /* = NULL */) -{ -	LPCSTR szParam1 = WideToUTF8(className); -	LPCSTR szParam2 = WideToUTF8(title); -	LPCSTR szParam3 = WideToUTF8(text); -	LPCSTR szParam4 = WideToUTF8(icon); -	LPCSTR szParam5 = WideToUTF8(acknowledge); -	LPCSTR szParam6 = WideToUTF8(value); -	 -	LONG32 result = EZNotify(szParam1, szParam2, szParam3, timeout, szParam4, priority, szParam5, szParam6); -	 -	delete [] szParam1; delete [] szParam2; delete [] szParam3; -	delete [] szParam4; delete [] szParam5; delete [] szParam6; - -	return result; -} - -LONG32 SnarlInterface::Notify(LPCSTR className, LPCSTR packetData) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::Notify; -	msg.Token = appToken; -	PackData(msg.PacketData, "id::%s#?%s", className, packetData); - -	lastMsgToken = Send(msg); -	return lastMsgToken; -} - -LONG32 SnarlInterface::Notify(LPCWSTR className, LPCWSTR packetData) -{ -	LPCSTR szParam1 = WideToUTF8(className); -	LPCSTR szParam2 = WideToUTF8(packetData); - -	LONG32 result = Notify(szParam1, szParam2); -	 -	delete [] szParam1; delete [] szParam2; -	 -	return result; -} - -LONG32 SnarlInterface::EZUpdate(LONG32 msgToken, LPCSTR title /* = NULL */, LPCSTR text /* = NULL */, LONG32 timeout /* = -1 */, LPCSTR icon /* = NULL */) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::UpdateNotification; -	msg.Token = msgToken; -	 -	// Create packed data -	errno_t err = 0; -	ZeroMemory(msg.PacketData, sizeof(msg.PacketData)); -	char* pData = reinterpret_cast<char*>(msg.PacketData); - -	if (title != NULL) { -		err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?title::" : "title::", _TRUNCATE); //StringCbCat(tmp, SnarlPacketDataSize, "title::%s"); -		err |= strncat_s(pData, SnarlPacketDataSize, title, _TRUNCATE); -	} -	if (text != NULL) { -		err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?text::" : "text::", _TRUNCATE); -		err |= strncat_s(pData, SnarlPacketDataSize, text, _TRUNCATE); -	} -	if (icon != NULL) { -		err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?icon::" : "icon::", _TRUNCATE); -		err |= strncat_s(pData, SnarlPacketDataSize, icon, _TRUNCATE); -	} -	if (timeout != -1) { -		char tmp[32]; -		_itoa_s(timeout, tmp, 10); -		 -		err |= strncat_s(pData, SnarlPacketDataSize, (pData[0] != NULL) ? "#?timeout::" : "timeout::", _TRUNCATE); -		err |= strncat_s(pData, SnarlPacketDataSize, tmp, _TRUNCATE); -	} -	 -	// Check for strcat errors and exit on error -	if (err != 0) { -		localError = SnarlEnums::ErrorFailed; -		return 0; -	} - -	return Send(msg); -} - -LONG32 SnarlInterface::EZUpdate(LONG32 msgToken, LPCWSTR title /* = NULL */, LPCWSTR text /* = NULL */, LONG32 timeout /* = -1 */, LPCWSTR icon /* = NULL */) -{ -	LPCSTR szParam1 = WideToUTF8(title); -	LPCSTR szParam2 = WideToUTF8(text); -	LPCSTR szParam3 = WideToUTF8(icon); - -	LONG32 result = EZUpdate(msgToken, szParam1, szParam2, timeout, szParam3); -	 -	delete [] szParam1; delete [] szParam2; delete [] szParam3; -	 -	return result; -} - -LONG32 SnarlInterface::Update(LONG32 msgToken, LPCSTR packetData) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::UpdateNotification; -	msg.Token = msgToken; -	PackData(msg.PacketData, packetData); - -	return Send(msg); -} - -LONG32 SnarlInterface::Update(LONG32 msgToken, LPCWSTR packetData) -{ -	LPCSTR szParam1 = WideToUTF8(packetData); - -	LONG32 result = Update(msgToken, szParam1); -	 -	delete [] szParam1; -	 -	return result; -} - -LONG32 SnarlInterface::Hide(LONG32 msgToken) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::HideNotification; -	msg.Token = msgToken; -	PackData(msg.PacketData, NULL); - -	return Send(msg); -} - -LONG32 SnarlInterface::IsVisible(LONG32 msgToken) -{ -	SnarlMessage msg; -	msg.Command = SnarlEnums::IsNotificationVisible; -	msg.Token = msgToken; -	PackData(msg.PacketData, NULL); - -	return Send(msg); -} - -SnarlEnums::SnarlStatus SnarlInterface::GetLastError() -{ -	return localError; -} - -// static -BOOL SnarlInterface::IsSnarlRunning() -{ -	return IsWindow(GetSnarlWindow()); -} - -LONG32 SnarlInterface::GetVersion() -{ -	localError = SnarlEnums::Success; - -	HWND hWnd = GetSnarlWindow(); -	if (!IsWindow(hWnd)) -	{ -		localError = SnarlEnums::ErrorNotRunning; -		return 0; -	} - -	HANDLE hProp = GetProp(hWnd, _T("_version")); -	return reinterpret_cast<int>(hProp); -} - -// static -UINT SnarlInterface::Broadcast() -{ -	return RegisterWindowMessage(SnarlGlobalMsg); -} - -// static -UINT SnarlInterface::AppMsg() -{ -	return RegisterWindowMessage(SnarlAppMsg); -} - -// static -HWND SnarlInterface::GetSnarlWindow() -{ -	return FindWindow(SnarlWindowClass, SnarlWindowTitle);; -} - -LPCTSTR SnarlInterface::GetAppPath() -{ -	HWND hWnd = GetSnarlWindow(); -	if (hWnd) -	{ -		HWND hWndPath = FindWindowEx(hWnd, NULL, _T("static"), NULL); -		if (hWndPath) -		{ -			TCHAR strTmp[MAX_PATH] = {0}; -			int nReturn = GetWindowText(hWndPath, strTmp, MAX_PATH-1); -			if (nReturn > 0) { -				TCHAR* strReturn = AllocateString(nReturn + 1); -				_tcsncpy(strReturn, strTmp, nReturn + 1); -				strReturn[nReturn] = 0; -				return strReturn; -			} -		} -	} - -	return NULL; -} - -LPCTSTR SnarlInterface::GetIconsPath() -{ -	TCHAR* szIconPath = NULL; -	LPCTSTR szPath = GetAppPath(); -	if (!szPath) -		return NULL; - -	size_t nLen = 0; -	// TODO: _tcsnlen MAX_PATH -	if (nLen = _tcsnlen(szPath, MAX_PATH)) -	{ -		nLen += 10 + 1; // etc\\icons\\ + NULL -		szIconPath = AllocateString(nLen); - -		_tcsncpy(szIconPath, szPath, nLen); -		_tcsncat(szIconPath, _T("etc\\icons\\"), nLen); -	} -	 -	FreeString(szPath); - -	return szIconPath; -} - -LONG32 SnarlInterface::GetLastMsgToken() const -{ -	return lastMsgToken; -} - - -//----------------------------------------------------------------------------- -// Private functions  -//----------------------------------------------------------------------------- - -LONG32 SnarlInterface::Send(SnarlMessage msg) -{ -	DWORD_PTR nReturn = 0; // Failure - -	HWND hWnd = GetSnarlWindow(); -	if (!IsWindow(hWnd)) -	{ -		localError = SnarlEnums::ErrorNotRunning; -		return 0; -	} - -	COPYDATASTRUCT cds; -	cds.dwData = 0x534E4C02; // "SNL",2; -	cds.cbData = sizeof(SnarlMessage); -	cds.lpData = &msg; - -	if (SendMessageTimeout(hWnd, WM_COPYDATA, (WPARAM)GetCurrentProcessId(), (LPARAM)&cds, SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 500, &nReturn) == 0) -	{ -		// return zero on failure -		if (GetLastError() == ERROR_TIMEOUT) -			localError = SnarlEnums::ErrorTimedOut; -		else -			localError = SnarlEnums::ErrorFailed; -		 -		return 0; -	} - -	// return result and cache LastError -	HANDLE hProp = GetProp(hWnd, _T("last_error")); -	localError = static_cast<SnarlEnums::SnarlStatus>(reinterpret_cast<int>(hProp)); - -	return nReturn; -} - -//----------------------------------------------------------------------------- - -// Remember to delete [] returned string -inline -LPSTR SnarlInterface::WideToUTF8(LPCWSTR szWideStr) -{ -	if (szWideStr == NULL) -		return NULL; - -	int nSize = WideCharToMultiByte(CP_UTF8, 0, szWideStr, -1, NULL, 0, NULL, NULL); -	LPSTR szUTF8 = new char[nSize]; -	WideCharToMultiByte(CP_UTF8, 0, szWideStr, -1, szUTF8, nSize, NULL, NULL); -	 -	return szUTF8; -} - -void SnarlInterface::PackData(BYTE* data, LPCSTR format, ...) -{ -	// Always zero array - Used to clear the array in member functions -	ZeroMemory(data, SnarlPacketDataSize); - -	// Return if format string is empty -	if (format == NULL || format[0] == 0) -		return; - -	int cchStrTextLen = 0; -	va_list args; -	va_start(args, format); -	 -	// Get size of buffer -	cchStrTextLen = _vscprintf(format, args) + 1; // + NULL -	if (cchStrTextLen <= 1) -		return; - -	// Create formated string - _TRUNCATE will ensure zero terminated -	_vsnprintf_s((char*)data, SnarlPacketDataSize, _TRUNCATE, format, args); - -	va_end(args); -} - -}} // namespace Snarl::V41 diff --git a/3rdParty/Snarl/SnarlInterface.h b/3rdParty/Snarl/SnarlInterface.h deleted file mode 100644 index 9440451..0000000 --- a/3rdParty/Snarl/SnarlInterface.h +++ /dev/null @@ -1,276 +0,0 @@ -#ifndef SNARL_INTERFACE_V41 -#define SNARL_INTERFACE_V41 - -#include <tchar.h> -#include <windows.h> -#include <cstdio> - -#ifndef SMTO_NOTIMEOUTIFNOTHUNG -	#define SMTO_NOTIMEOUTIFNOTHUNG 8 -#endif - - -namespace Snarl { -	namespace V41 { - -	static const LPCTSTR SnarlWindowClass = _T("w>Snarl"); -	static const LPCTSTR SnarlWindowTitle = _T("Snarl"); - -	static const LPCTSTR SnarlGlobalMsg = _T("SnarlGlobalEvent"); -	static const LPCTSTR SnarlAppMsg = _T("SnarlAppMessage"); - -	static const int SnarlPacketDataSize = 4096; - -	// Enums put in own namespace, because ANSI C++ doesn't decorate enums with tagname :( -	namespace SnarlEnums { - -		/// <summary> -		/// Global event identifiers. -		/// Identifiers marked with a '*' are sent by Snarl in two ways: -		///   1. As a broadcast message (uMsg = 'SNARL_GLOBAL_MSG') -		///   2. To the window registered in snRegisterConfig() or snRegisterConfig2() -		///      (uMsg = reply message specified at the time of registering) -		/// In both cases these values appear in wParam. -		///    -		/// Identifiers not marked are not broadcast; they are simply sent to the application's registered window. -		/// </summary> -		enum GlobalEvent -		{ -			SnarlLaunched = 1,      // Snarl has just started running* -			SnarlQuit = 2,          // Snarl is about to stop running* -			SnarlAskAppletVer = 3,  // (R1.5) Reserved for future use -			SnarlShowAppUi = 4      // (R1.6) Application should show its UI -		}; - -		/// <summary> -		/// Message event identifiers. -		/// These are sent by Snarl to the window specified in RegisterApp() when the -		/// Snarl Notification raised times out or the user clicks on it. -		/// </summary> -		enum MessageEvent -		{ -			NotificationClicked = 32,      // Notification was right-clicked by user -			NotificationCancelled = 32,    // Added in V37 (R1.6) -- same value, just improved the meaning of it -			NotificationTimedOut = 33,     //  -			NotificationAck = 34,          // Notification was left-clicked by user -			NotificationMenu = 35,         // Menu item selected (V39) -			NotificationMiddleButton = 36, // Notification middle-clicked by user (V39) -			NotificationClosed = 37        // User clicked the close gadget (V39) -		}; - -		/// <summary> -		/// Error values returned by calls to GetLastError(). -		/// </summary> -		enum SnarlStatus -		{ -			Success = 0, - -			ErrorFailed = 101,        // miscellaneous failure -			ErrorUnknownCommand,      // specified command not recognised -			ErrorTimedOut,            // Snarl took too long to respond - -			ErrorArgMissing = 109,    // required argument missing -			ErrorSystem,              // internal system error - -			ErrorNotRunning = 201,    // Snarl handling window not found -			ErrorNotRegistered,       //  -			ErrorAlreadyRegistered,   // not used yet; RegisterApp() returns existing token -			ErrorClassAlreadyExists,  // not used yet; AddClass() returns existing token -			ErrorClassBlocked, -			ErrorClassNotFound, -			ErrorNotificationNotFound -		}; - -		/// <summary> -		/// Application flags - features this app supports. -		/// </summary> -		enum AppFlags -		{ -			AppDefault = 0, -			AppHasPrefs = 1, -			AppHasAbout = 2, -			AppIsWindowless = 0x8000 -		}; - -		enum SnarlCommand -		{ -			RegisterApp = 1, -			UnregisterApp, -			UpdateApp, -			SetCallback, -			AddClass, -			RemoveClass, -			Notify, -			UpdateNotification, -			HideNotification, -			IsNotificationVisible, -			LastError                  // deprecated but retained for backwards compatability -		}; -	} - -	struct SnarlMessage -	{ -		SnarlEnums::SnarlCommand Command; -		LONG32 Token; -		BYTE PacketData[SnarlPacketDataSize]; -	}; - -	static const DWORD WM_SNARLTEST = WM_USER + 237; - -	 -	// ------------------------------------------------------------------------ -	/// SnarlInterface class definition -	// ------------------------------------------------------------------------ -	class SnarlInterface { -		public: -			SnarlInterface(); -			~SnarlInterface(); -			 -			LPTSTR AllocateString(size_t n) { return new TCHAR[n]; } -			void FreeString(LPTSTR str)     { delete [] str; str = NULL; } -			void FreeString(LPCTSTR str)    { delete [] str; } - -			/// <summary>Register application with Snarl.</summary> -			/// <returns>The application token or 0 on failure.</returns> -			/// <remarks>The application token is saved in SnarlInterface member variable, so just use return value to check for error.</remarks> -			LONG32 RegisterApp(LPCSTR signature, LPCSTR title, LPCSTR icon, HWND hWndReply = NULL, LONG32 msgReply = 0, SnarlEnums::AppFlags flags = SnarlEnums::AppDefault); -			LONG32 RegisterApp(LPCWSTR  signature, LPCWSTR title, LPCWSTR icon, HWND hWndReply = NULL, LONG32 msgReply = 0, SnarlEnums::AppFlags flags = SnarlEnums::AppDefault); - -			/// <summary>Unregister application with Snarl when application is closing.</summary> -			/// <returns>0 on failure.</returns> -			LONG32 UnregisterApp(); - -			/// <summary>Update information provided when calling RegisterApp.</summary> -			/// <returns>0 on failure.</returns> -			LONG32 UpdateApp(LPCSTR title = NULL, LPCSTR icon = NULL); -			LONG32 UpdateApp(LPCWSTR title = NULL, LPCWSTR icon = NULL); - -			/// <summary>Add a notification class to Snarl.</summary> -			/// <returns>0 on failure.</returns> -			LONG32 AddClass(LPCSTR className, LPCSTR description, bool enabled = true); -			LONG32 AddClass(LPCWSTR className, LPCWSTR description, bool enabled = true); -			 -			/// <summary>Remove a notification class added with AddClass().</summary> -			/// <returns>0 on failure.</returns> -			LONG32 RemoveClass(LPCSTR className, bool forgetSettings = false); -			LONG32 RemoveClass(LPCWSTR className, bool forgetSettings = false); - -			/// <summary>Remove all notification classes in one call.</summary> -			/// <returns>0 on failure.</returns> -			LONG32 RemoveAllClasses(bool forgetSettings = false); -			 -			/// <summary>Show a Snarl notification.</summary> -			/// <returns>Returns the notification token or 0 on failure.</returns> -			/// <remarks>You can use <see cref="GetLastMsgToken()" /> to get the last token.</remarks> -			LONG32 EZNotify(LPCSTR className, LPCSTR title, LPCSTR text, LONG32 timeout = -1, LPCSTR icon = NULL, LONG32 priority = 0, LPCSTR acknowledge = NULL, LPCSTR value = NULL); -			LONG32 EZNotify(LPCWSTR className, LPCWSTR title, LPCWSTR text, LONG32 timeout = -1, LPCWSTR icon = NULL, LONG32 priority = 0, LPCWSTR acknowledge = NULL, LPCWSTR value = NULL); - -			/// <summary> -			///     Show a Snarl notification. -			///     This function requires that you write your own packet data. -			/// </summary> -			/// <returns>Returns the notification token or 0 on failure.</returns> -			/// <remarks>You can use <see cref="GetLastMsgToken()" /> to get the last token.</remarks> -			LONG32 Notify(LPCSTR className, LPCSTR packetData); -			LONG32 Notify(LPCWSTR className, LPCWSTR packetData); - -			/// <summary>Update the text or other parameters of a visible Snarl notification.</summary> -			/// <returns>0 on failure.</returns> -			LONG32 EZUpdate(LONG32 msgToken, LPCSTR title = NULL, LPCSTR text = NULL, LONG32 timeout = -1, LPCSTR icon = NULL); -			LONG32 EZUpdate(LONG32 msgToken, LPCWSTR title = NULL, LPCWSTR text = NULL, LONG32 timeout = -1, LPCWSTR icon = NULL); -			 -			/// <summary> -			///     Update the text or other parameters of a visible Snarl notification. -			///     This function requires that you write your own packet data. -			/// </summary> -			/// <returns>0 on failure.</returns> -			LONG32 Update(LONG32 msgToken, LPCSTR packetData); -			LONG32 Update(LONG32 msgToken, LPCWSTR packetData); - -			/// <summary>Hide a Snarl notification.</summary> -			/// <returns>0 on failure.</returns> -			LONG32 Hide(LONG32 msgToken); - -			/// <summary>Test if a Snarl notification is visible.</summary> -			/// <returns>Returns -1 if message is visible. 0 if not visible or if an error occured.</returns> -			LONG32 IsVisible(LONG32 msgToken); - -			/// <summary>Get the last error from Snarl. Call after other functions return 0 to know why it failed.</summary> -			/// <returns>Returns one of the SnarlEnums::SnarlStatus values.</returns> -			SnarlEnums::SnarlStatus GetLastError(); - -			/// <summary>Get Snarl version, if it is running.</summary> -			/// <returns>Returns a number indicating Snarl version.</returns> -			LONG32 GetVersion(); - -			/// <summary> -			///     Get the path to where Snarl is installed. -			///     ** Remember to call <see cref="FreeString(LPCTSTR)" /> on the returned string !!! -			/// </summary> -			/// <returns>Returns the path to where Snarl is installed.</returns> -			/// <remarks>This is a V39 API method.</remarks> -			LPCTSTR  GetAppPath(); - -			/// <summary> -			///     Get the path to where the default Snarl icons are located. -			///     <para>** Remember to call <see cref="FreeString(LPCTSTR)" /> on the returned string !!!</para> -			/// </summary> -			/// <returns>Returns the path to where the default Snarl icons are located.</returns> -			/// <remarks>This is a V39 API method.</remarks> -			LPCTSTR  GetIconsPath(); - -			/// <summary>GetLastMsgToken() returns token of the last message sent to Snarl.</summary> -			/// <returns>Returns message token of last message.</returns> -			/// <remarks>This function is not in the official API!</remarks> -			LONG32 GetLastMsgToken() const; -			 -			/// <summary>Check whether Snarl is running</summary> -			/// <returns>Returns true if Snarl system was found running.</returns> -			static BOOL IsSnarlRunning(); - -			/// <summary> -			///     Returns the value of Snarl's global registered message. -			///     Notes: -			///       Snarl registers SNARL_GLOBAL_MSG during startup which it then uses to communicate -			///       with all running applications through a Windows broadcast message. This function can -			///       only fail if for some reason the Windows RegisterWindowMessage() function fails -			///       - given this, this function *cannnot* be used to test for the presence of Snarl. -			/// </summary> -			/// <returns>A 16-bit value (translated to 32-bit) which is the registered Windows message for Snarl.</returns> -			static UINT Broadcast(); - -			/// <summary>Returns the global Snarl Application message  (V39)</summary> -			/// <returns>Returns Snarl application registered message.</returns> -			static UINT AppMsg(); - -			/// <summary>Returns a handle to the Snarl Dispatcher window  (V37)</summary> -			/// <returns>Returns handle to Snarl Dispatcher window, or zero if it's not found.</returns> -			/// <remarks>This is now the preferred way to test if Snarl is actually running.</remarks> -			static HWND GetSnarlWindow(); -		 -		private: -			/// <summary>Send message to Snarl.</summary> -			/// <returns>Return zero on failure.</returns> -			LONG32 Send(SnarlMessage msg); - -			/// <summary>Convert a unicode string to UTF8</summary> -			/// <returns>Returns pointer to the new string - Remember to delete [] returned string !</returns> -			/// <remarks>Remember to delete [] returned string !!!</remarks> -			LPSTR  WideToUTF8(LPCWSTR szWideStr); - -			/// <summary>Pack data into the PackedData member field.</summary> -			/// <param name="data">Should always be a pointer to the PackedData field</param> -			/// <param name="format">The format string. Can be NULL or "" to just zero PackedData!</param> -			/// <param name="...">Variable number of objects to convert</param> -			void   PackData(BYTE* data, LPCSTR format, ...); - -			LONG32 appToken; -			LONG32 lastMsgToken; -			SnarlEnums::SnarlStatus localError; - -	}; // class - -	} // namespace V41 -} // namespace Snarl - -#endif // SNARL_INTERFACE_V41 diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct index 70cd9d8..6dd1115 100644 --- a/BuildTools/SCons/SConstruct +++ b/BuildTools/SCons/SConstruct @@ -317,10 +317,6 @@ if env["PLATFORM"] == "darwin" :          env["GROWL_FRAMEWORK"] = "/Library/Frameworks/Growl.framework"      conf.Finish() -# Snarl -if env["PLATFORM"] == "win32" : -    env["HAVE_SNARL"] = True -  # LibXML  conf = Configure(conf_env, custom_tests = {"CheckVersion": CheckVersion})  if env.get("try_libxml", True) and conf.CheckCHeader("libxml/parser.h") and conf.CheckLib("xml2") : diff --git a/SwifTools/Notifier/SConscript b/SwifTools/Notifier/SConscript index a8e8590..e87312c 100644 --- a/SwifTools/Notifier/SConscript +++ b/SwifTools/Notifier/SConscript @@ -17,11 +17,5 @@ elif myenv["PLATFORM"] == "darwin" :              "NotificationCenterNotifierDelegate.mm",          ] -if swiftools_env.get("HAVE_SNARL", False) : -    myenv.MergeFlags(myenv["SNARL_FLAGS"]) -    sources += [ -            "SnarlNotifier.cpp", -        ] -  objects = myenv.StaticObject(sources)  swiftools_env.Append(SWIFTOOLS_OBJECTS = objects) diff --git a/SwifTools/Notifier/SnarlNotifier.cpp b/SwifTools/Notifier/SnarlNotifier.cpp deleted file mode 100644 index e3977a7..0000000 --- a/SwifTools/Notifier/SnarlNotifier.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2010 Isode Limited. - * All rights reserved. - * See the COPYING file for more information. - */ - -#include <SwifTools/Notifier/SnarlNotifier.h> - -#include <cassert> -#include <iostream> -#include <boost/bind.hpp> - -#include <Swiften/Base/foreach.h> -#include <SwifTools/Notifier/Win32NotifierWindow.h> - -#define SWIFT_SNARLNOTIFIER_MESSAGE_ID 0x4567 // Sounds sick to pick a number, but this is windows - -namespace Swift { - -SnarlNotifier::SnarlNotifier(const std::string& name, Win32NotifierWindow* window, const boost::filesystem::path& icon) : window(window), available(false) { -    window->onMessageReceived.connect(boost::bind(&SnarlNotifier::handleMessageReceived, this, _1)); -    available = snarl.RegisterApp(name.c_str(), name.c_str(), icon.string().c_str(), window->getID(), SWIFT_SNARLNOTIFIER_MESSAGE_ID); -    foreach(Notifier::Type type, getAllTypes()) { -        snarl.AddClass(typeToString(type).c_str(), typeToString(type).c_str()); -    } -} - -SnarlNotifier::~SnarlNotifier() { -    snarl.UnregisterApp(); -    window->onMessageReceived.disconnect(boost::bind(&SnarlNotifier::handleMessageReceived, this, _1)); -    if (!notifications.empty()) { -        std::cerr << "Warning: " << notifications.size() << " Snarl notifications pending" << std::endl; -    } -} - -bool SnarlNotifier::isAvailable() const { -    return available; -} - - -void SnarlNotifier::showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picture, boost::function<void()> callback) { -    int timeout = (type == IncomingMessage || type == SystemMessage) ? DEFAULT_MESSAGE_NOTIFICATION_TIMEOUT_SECONDS : DEFAULT_STATUS_NOTIFICATION_TIMEOUT_SECONDS; -    int notificationID = snarl.EZNotify( -            typeToString(type).c_str(), -            subject.c_str(), -            description.c_str(), -            timeout, -            picture.string().c_str()); -    if (notificationID > 0) { -        notifications.insert(std::make_pair(notificationID, callback)); -    } -} - -void SnarlNotifier::handleMessageReceived(MSG* message) { -    if (message->message == SWIFT_SNARLNOTIFIER_MESSAGE_ID) { -        int action = message->wParam; -        if (action == Snarl::V41::SnarlEnums::NotificationTimedOut || action == Snarl::V41::SnarlEnums::NotificationAck || action == Snarl::V41::SnarlEnums::NotificationClosed) { -            int notificationID = message->lParam; -            NotificationsMap::iterator i = notifications.find(notificationID); -            if (i != notifications.end()) { -                if (action == Snarl::V41::SnarlEnums::NotificationAck && !i->second.empty()) { -                    i->second(); -                } -                notifications.erase(i); -            } -            else { -                std::cerr << "Warning: Orphaned Snarl notification received"; -            } -        } -    } -} - -} diff --git a/SwifTools/Notifier/SnarlNotifier.h b/SwifTools/Notifier/SnarlNotifier.h deleted file mode 100644 index 5006185..0000000 --- a/SwifTools/Notifier/SnarlNotifier.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2010-2016 Isode Limited. - * All rights reserved. - * See the COPYING file for more information. - */ - -#pragma once - -#include <map> - -#include <SnarlInterface.h> - -#include <SwifTools/Notifier/Notifier.h> - -namespace Swift { -    class Win32NotifierWindow; - -    class SnarlNotifier : public Notifier { -        public: -            SnarlNotifier(const std::string& name, Win32NotifierWindow* window, const boost::filesystem::path& icon); -            ~SnarlNotifier(); - -            virtual void showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picture, boost::function<void()> callback); -            virtual bool isAvailable() const; - -            virtual void purgeCallbacks() { -                notifications.clear(); -            } - -        private: -            void handleMessageReceived(MSG* message); - -        private: -            Snarl::V41::SnarlInterface snarl; -            Win32NotifierWindow* window; -            bool available; -            typedef std::map<int, boost::function<void()> > NotificationsMap; -            NotificationsMap notifications; -    }; -} diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 4b3d716..7e2aafe 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -43,9 +43,6 @@ if myenv.get("HAVE_GROWL", False) :      myenv.Append(CPPDEFINES = ["HAVE_GROWL"])  if myenv["swift_mobile"] :      myenv.Append(CPPDEFINES = ["SWIFT_MOBILE"]) -if myenv.get("HAVE_SNARL", False) : -    myenv.UseFlags(myenv["SNARL_FLAGS"]) -    myenv.Append(CPPDEFINES = ["HAVE_SNARL"])  if myenv.get("HAVE_HUNSPELL", True):      myenv.Append(CPPDEFINES = ["HAVE_HUNSPELL"])      myenv.UseFlags(myenv["HUNSPELL_FLAGS"]) diff --git a/Swift/QtUI/WindowsNotifier.cpp b/Swift/QtUI/WindowsNotifier.cpp index c954fab..d6e8ba9 100644 --- a/Swift/QtUI/WindowsNotifier.cpp +++ b/Swift/QtUI/WindowsNotifier.cpp @@ -20,20 +20,14 @@ namespace Swift {  WindowsNotifier::WindowsNotifier(const std::string& name, const boost::filesystem::path& icon, QSystemTrayIcon* tray) : tray(tray) {      notifierWindow = new QtWin32NotifierWindow(); -    snarlNotifier = new SnarlNotifier(name, notifierWindow, icon);      connect(tray, SIGNAL(messageClicked()), SLOT(handleMessageClicked()));  }  WindowsNotifier::~WindowsNotifier() { -    delete snarlNotifier;      delete notifierWindow;  }  void WindowsNotifier::showMessage(Type type, const std::string& subject, const std::string& description, const boost::filesystem::path& picture, boost::function<void()> callback) { -    if (snarlNotifier->isAvailable()) { -        snarlNotifier->showMessage(type, subject, description, picture, callback); -        return; -    }      std::vector<Notifier::Type> defaultTypes = getDefaultTypes();      if (std::find(defaultTypes.begin(), defaultTypes.end(), type) == defaultTypes.end()) {          return; diff --git a/Swift/QtUI/WindowsNotifier.h b/Swift/QtUI/WindowsNotifier.h index fae0795..945ef6b 100644 --- a/Swift/QtUI/WindowsNotifier.h +++ b/Swift/QtUI/WindowsNotifier.h @@ -11,11 +11,12 @@  #include <QObject>  #include <SwifTools/Notifier/Notifier.h> -#include <SwifTools/Notifier/SnarlNotifier.h>  class QSystemTrayIcon;  namespace Swift { +    class Win32NotifierWindow; +      class WindowsNotifier : public QObject, public Notifier {              Q_OBJECT @@ -32,7 +33,6 @@ namespace Swift {          private:              QSystemTrayIcon* tray;              Win32NotifierWindow* notifierWindow; -            SnarlNotifier* snarlNotifier;              boost::function<void()> lastCallback;      };  } | 
 Swift
 Swift